@kymoscope/sdk 0.2.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/dist/assets/{importer.worker-Drm9u2Rc.js → importer.worker-CLBGjz4d.js} +1 -1
  2. package/dist/assets/{offscreenLineWorker-mShhnyXX.js → offscreenLineWorker-BLxay-Po.js} +2 -2
  3. package/dist/importers-B6rkbTwQ.js +5 -0
  4. package/dist/keys-KE0GTKAF.js +10 -0
  5. package/dist/kymoscope-embed.js +91 -90
  6. package/dist/kymoscope-sdk.js +86 -84
  7. package/dist/rules/kyr1.schema.json +135 -0
  8. package/dist/rules.js +2 -0
  9. package/dist/styles/charts.css +191 -0
  10. package/dist/threshold-C9it0Y7P.js +2 -0
  11. package/dist/types/charts/AnnotationLayer.d.ts +7 -2
  12. package/dist/types/charts/CameraPanel.d.ts +43 -0
  13. package/dist/types/charts/ChartBody.d.ts +12 -0
  14. package/dist/types/charts/beacon.d.ts +4 -1
  15. package/dist/types/charts/cameraLayout.d.ts +10 -0
  16. package/dist/types/charts/liveOverlay.d.ts +14 -0
  17. package/dist/types/charts/runtime.d.ts +12 -1
  18. package/dist/types/charts/useWorksheetData.d.ts +1 -5
  19. package/dist/types/components/GaugeChart.d.ts +13 -1
  20. package/dist/types/components/MultiBandCanvasChart.d.ts +4 -2
  21. package/dist/types/components/dashboardGridLayout.d.ts +1 -1
  22. package/dist/types/components/multiBandHover.d.ts +7 -0
  23. package/dist/types/engine/alerts.d.ts +56 -0
  24. package/dist/types/engine/columns.d.ts +16 -0
  25. package/dist/types/engine/createEngine.d.ts +60 -2
  26. package/dist/types/engine/derive.d.ts +1 -1
  27. package/dist/types/engine/errors.d.ts +1 -1
  28. package/dist/types/engine/liveController.d.ts +11 -1
  29. package/dist/types/engine/types.d.ts +41 -2
  30. package/dist/types/index.d.ts +26 -3
  31. package/dist/types/lib/annotations.d.ts +20 -0
  32. package/dist/types/lib/beacon.d.ts +2 -1
  33. package/dist/types/lib/data/columnarDataSource.d.ts +1 -0
  34. package/dist/types/lib/data/dataSource.d.ts +3 -0
  35. package/dist/types/lib/data/duckDbDataSource.d.ts +1 -0
  36. package/dist/types/lib/data/historyDataSource.d.ts +51 -0
  37. package/dist/types/lib/data/inMemoryDataSource.d.ts +1 -0
  38. package/dist/types/lib/data/liveDataSource.d.ts +21 -2
  39. package/dist/types/lib/data/pointColumns.d.ts +11 -0
  40. package/dist/types/lib/duckdb/duckdbInstance.d.ts +5 -0
  41. package/dist/types/lib/historian/blockCache.d.ts +32 -0
  42. package/dist/types/lib/historian/export.d.ts +31 -0
  43. package/dist/types/lib/historian/khd1.d.ts +41 -0
  44. package/dist/types/lib/historian/parquet.d.ts +21 -0
  45. package/dist/types/lib/historian/reader.d.ts +73 -0
  46. package/dist/types/lib/live/blockWire.d.ts +16 -0
  47. package/dist/types/lib/live/buffer.d.ts +36 -1
  48. package/dist/types/lib/live/cameraSender.d.ts +70 -0
  49. package/dist/types/lib/live/clockMap.d.ts +20 -0
  50. package/dist/types/lib/live/crypto.d.ts +7 -0
  51. package/dist/types/lib/live/publisher.d.ts +163 -0
  52. package/dist/types/lib/live/types.d.ts +19 -1
  53. package/dist/types/lib/live/videoTrack.d.ts +96 -0
  54. package/dist/types/lib/live/videoWire.d.ts +35 -0
  55. package/dist/types/lib/live/wire.d.ts +4 -0
  56. package/dist/types/lib/panelChartSettings.d.ts +43 -1
  57. package/dist/types/lib/recordings/export.d.ts +1 -0
  58. package/dist/types/lib/recordings/videoSource.d.ts +56 -0
  59. package/dist/types/lib/render/alertGlyph.d.ts +7 -0
  60. package/dist/types/lib/render/glSeries.d.ts +1 -1
  61. package/dist/types/lib/segments/align.d.ts +85 -0
  62. package/dist/types/lib/segments/liveAxis.d.ts +58 -0
  63. package/dist/types/lib/segments/rules.d.ts +77 -0
  64. package/dist/types/lib/workspaces/io.d.ts +6 -0
  65. package/dist/types/lib/yAxisTicks.d.ts +11 -0
  66. package/dist/types/rules/compile.d.ts +47 -0
  67. package/dist/types/rules/evaluator.d.ts +51 -0
  68. package/dist/types/rules/index.d.ts +4 -0
  69. package/dist/types/rules/threshold.d.ts +3 -0
  70. package/dist/types/rules/types.d.ts +89 -0
  71. package/dist/types/rules/validate.d.ts +6 -0
  72. package/dist/types/types/loadedDataset.d.ts +5 -0
  73. package/dist/types/types/plotSeries.d.ts +5 -0
  74. package/package.json +7 -2
  75. package/dist/importers-N1JOOVEg.js +0 -5
  76. package/dist/krc-D_CI7AI8.js +0 -9
@@ -0,0 +1,51 @@
1
+ import type { RuleDoc } from './types';
2
+ export interface RuleTarget {
3
+ kind: 'stream' | 'history' | 'dataset';
4
+ id: string;
5
+ name?: string;
6
+ tags?: Record<string, string>;
7
+ }
8
+ export type RuleStateName = 'disabled' | 'not_applicable' | 'waiting' | 'idle' | 'pending' | 'active' | 'clearing';
9
+ export interface AlertTransition {
10
+ ruleId: string;
11
+ ruleVersion: number;
12
+ target: RuleTarget;
13
+ kind: 'raised' | 'cleared' | 'lost';
14
+ t: number;
15
+ peak?: {
16
+ v: number;
17
+ t: number;
18
+ };
19
+ }
20
+ export interface RuleEvaluatorState {
21
+ state: RuleStateName;
22
+ missing?: string[];
23
+ since?: number;
24
+ late: number;
25
+ lastT: number;
26
+ }
27
+ export interface LiveBlock {
28
+ t: Float64Array;
29
+ columns: Record<string, Float64Array | undefined>;
30
+ /** Optional: pass the same (empty) map with one block to every evaluator that reads it, and the per-column checks
31
+ * (no NaN, ascending time) run once per block instead of once per rule. Don't reuse it for another block. */
32
+ scan?: Map<string, boolean>;
33
+ }
34
+ /**
35
+ * One rule on one target (spec §2.3). Pure: no DOM, no timers. `bind` with the target's channel names whenever they
36
+ * change, `push` appended rows in time order, `tick` to advance the timed parts (noData, forS, clearForS).
37
+ *
38
+ * A block is evaluated column-wise: first the rows the rule evaluates (a sample of one of its signals, later than the
39
+ * last evaluated time), then per alias the held value / time of its last sample / "new sample here" arrays, then one
40
+ * typed loop per condition op, then the state machine over the root's tri-states. A block where every signal has a
41
+ * sample on every row in ascending time (the common live case) uses the columns as they are, without copying.
42
+ */
43
+ export declare function createRuleEvaluator(rule: RuleDoc, target: RuleTarget): {
44
+ rule: RuleDoc;
45
+ target: RuleTarget;
46
+ bind: (names: Iterable<string>) => AlertTransition[];
47
+ push: (block: LiveBlock) => AlertTransition[];
48
+ tick: (now: number) => AlertTransition[];
49
+ state: () => RuleEvaluatorState;
50
+ };
51
+ export type RuleEvaluator = ReturnType<typeof createRuleEvaluator>;
@@ -0,0 +1,4 @@
1
+ export * from './types';
2
+ export { validateRule, type RuleProblem } from './validate';
3
+ export { thresholdOf } from './threshold';
4
+ export { createRuleEvaluator, type RuleEvaluator, type RuleTarget, type AlertTransition, type RuleEvaluatorState, type LiveBlock } from './evaluator';
@@ -0,0 +1,3 @@
1
+ import type { RuleDoc } from './types';
2
+ /** The single threshold a chart line can show for a rule: its first leaf's value (above / below) or hi (outside). */
3
+ export declare function thresholdOf(doc: Pick<RuleDoc, 'when'>): number | null;
@@ -0,0 +1,89 @@
1
+ export type Severity = 'info' | 'warning' | 'critical';
2
+ export type RunWhere = 'browser' | 'collector' | 'watcher' | 'cloud';
3
+ export type SignalRef = {
4
+ channel: string;
5
+ stream?: string;
6
+ history?: string;
7
+ dataset?: string;
8
+ tag?: string;
9
+ } | {
10
+ formula: string;
11
+ };
12
+ export type Derived = {
13
+ op: 'rate' | 'mean' | 'min' | 'max';
14
+ of: string;
15
+ windowS: number;
16
+ } | {
17
+ op: 'abs';
18
+ of: string;
19
+ } | {
20
+ op: 'diff';
21
+ a: string;
22
+ b: string;
23
+ };
24
+ export type Condition = {
25
+ above: string;
26
+ value: number;
27
+ hysteresis?: number;
28
+ } | {
29
+ below: string;
30
+ value: number;
31
+ hysteresis?: number;
32
+ } | {
33
+ outside: string;
34
+ lo: number;
35
+ hi: number;
36
+ hysteresis?: number;
37
+ } | {
38
+ inside: string;
39
+ lo: number;
40
+ hi: number;
41
+ hysteresis?: number;
42
+ } | {
43
+ equals: string;
44
+ value: number;
45
+ } | {
46
+ changes: string;
47
+ } | {
48
+ noData: string;
49
+ forS: number;
50
+ } | {
51
+ all: Condition[];
52
+ } | {
53
+ any: Condition[];
54
+ } | {
55
+ not: Condition;
56
+ };
57
+ export interface RuleDoc {
58
+ kyr: 1;
59
+ id: string;
60
+ version: number;
61
+ name: string;
62
+ severity: Severity;
63
+ enabled: boolean;
64
+ targets?: {
65
+ streams?: string[] | null;
66
+ histories?: string[] | null;
67
+ datasets?: string[] | null;
68
+ };
69
+ signals: Record<string, SignalRef>;
70
+ derived?: Record<string, Derived>;
71
+ when: Condition;
72
+ forS: number;
73
+ clearForS: number;
74
+ staleS?: number | null;
75
+ notify?: string[];
76
+ runWhere: RunWhere[];
77
+ keep?: {
78
+ beforeS: number;
79
+ afterS: number;
80
+ } | null;
81
+ origin?: {
82
+ workbookId: string | null;
83
+ worksheetId: string;
84
+ chartId: string;
85
+ field: string;
86
+ seriesId?: string;
87
+ } | null;
88
+ }
89
+ export declare const LEAF_KEYS: readonly ["above", "below", "outside", "inside", "equals", "changes", "noData"];
@@ -0,0 +1,6 @@
1
+ export interface RuleProblem {
2
+ code: string;
3
+ path: string;
4
+ }
5
+ /** Problems of an untrusted rule document; [] when it can run. Never throws. */
6
+ export declare function validateRule(doc: unknown): RuleProblem[];
@@ -37,6 +37,11 @@ export interface LoadedDataset {
37
37
  columnSpares?: Map<string, Float64Array>;
38
38
  /** Beacon lap split; when set, the dataset is shown/selected as its laps. */
39
39
  beacon?: BeaconConfig;
40
+ /** Shaded bands under a column's trace (a reference's envelope): per column, low and high edges aligned with the rows. */
41
+ bands?: Record<string, {
42
+ lo: Float64Array;
43
+ hi: Float64Array;
44
+ }>;
40
45
  }
41
46
  /** True when the dataset's rows are materialized in memory (small files). */
42
47
  export declare function isInMemory(ld: LoadedDataset): boolean;
@@ -1,9 +1,14 @@
1
1
  export type AlarmStyle = 'solid' | 'dashed' | 'dotted';
2
2
  export interface AlarmLine {
3
+ /** Where the line draws. A line linked to an alert rule keeps the rule's last known threshold here. */
3
4
  value: number;
4
5
  style: AlarmStyle;
5
6
  width: number;
6
7
  color: string;
8
+ /** The alert rule this line is (Notify on). Its threshold comes from the rule when the rule can be read. */
9
+ ruleId?: string;
10
+ /** Render only, set by the runtime for a line whose rule it holds (never stored, never read from a file). */
11
+ linked?: 'idle' | 'active';
7
12
  }
8
13
  /** One Y layer: vertical fraction of the plot area and physical scale. */
9
14
  export interface PlotSeries {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kymoscope/sdk",
3
- "version": "0.2.0",
3
+ "version": "0.4.0",
4
4
  "description": "The Kymoscope data engine and charts for the browser: import large measurement files, plot them, stream live data end-to-end encrypted.",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "homepage": "https://kymoscope.com/docs/introduction",
@@ -26,6 +26,11 @@
26
26
  "types": "./dist/types/react/index.d.ts",
27
27
  "default": "./dist/react.js"
28
28
  },
29
+ "./rules": {
30
+ "types": "./dist/types/rules/index.d.ts",
31
+ "default": "./dist/rules.js"
32
+ },
33
+ "./rules/kyr1.schema.json": "./dist/rules/kyr1.schema.json",
29
34
  "./embed": "./dist/kymoscope-embed.js",
30
35
  "./styles/*": "./dist/styles/*",
31
36
  "./package.json": "./package.json"
@@ -45,7 +50,7 @@
45
50
  },
46
51
  "scripts": {
47
52
  "test": "vitest run",
48
- "build": "vite build && vite build -c vite.embed.config.ts && tsc -p tsconfig.build.json && node -e \"require('fs').cpSync('src/styles','dist/styles',{recursive:true})\"",
53
+ "build": "vite build && vite build -c vite.embed.config.ts && tsc -p tsconfig.build.json && node -e \"require('fs').cpSync('src/styles','dist/styles',{recursive:true});require('fs').cpSync('src/rules/kyr1.schema.json','dist/rules/kyr1.schema.json')\"",
49
54
  "license": "node scripts/license.mjs",
50
55
  "prepack": "node scripts/pack-manifest.mjs dist",
51
56
  "postpack": "node scripts/pack-manifest.mjs restore",
@@ -1,5 +0,0 @@
1
- /*! @kymoscope/sdk (c) 2026 Kymoscope. Proprietary software: use requires a license. See LICENSE.md. */
2
- import{Ct as e,Dt as t,Et as n,Ot as r,St as i,Tt as a,_t as o,bt as s,c,ct as l,f as u,gt as d,ht as f,i as p,l as m,lt as h,mt as g,n as _,p as v,r as y,s as b,st as x,vt as S,wt as C,xt as ee,yt as w}from"./krc-D_CI7AI8.js";function T(e,t){return e.selection.find(e=>e.group===t)?.channels??[]}var E=4096,te={sin:Math.sin,cos:Math.cos,tan:Math.tan,asin:Math.asin,acos:Math.acos,atan:Math.atan,sinh:Math.sinh,cosh:Math.cosh,tanh:Math.tanh,exp:Math.exp,ln:Math.log,log:Math.log,log10:Math.log10,sqrt:Math.sqrt,abs:Math.abs,pow:Math.pow,min:Math.min,max:Math.max};function ne(e){if(e.length>E)return null;let t=e.match(/\d+\.?\d*(?:[eE][+-]?\d+)?|\.\d+(?:[eE][+-]?\d+)?|[A-Za-z_]\w*|\*\*|[-+*/^(),]|\S/g)??[],n=0,r=()=>t[n],i=()=>{throw Error(`formula`)},a=e=>{t[n++]!==e&&i()},o=()=>{let e=s();for(;r()===`+`||r()===`-`;){let r=t[n++],i=e,a=s();e=r===`+`?e=>i(e)+a(e):e=>i(e)-a(e)}return e},s=()=>{let e=c();for(;r()===`*`||r()===`/`;){let r=t[n++],i=e,a=c();e=r===`*`?e=>i(e)*a(e):e=>i(e)/a(e)}return e},c=()=>{if(r()===`-`){n++;let e=c();return t=>-e(t)}return r()===`+`?(n++,c()):l()},l=()=>{let e=u();if(r()===`^`||r()===`**`){n++;let t=c();return n=>e(n)**t(n)}return e},u=()=>{let e=t[n++];if(e===void 0&&i(),e===`(`){let e=o();return a(`)`),e}if(/^[\d.]/.test(e)){let t=Number(e);return Number.isFinite(t)||i(),()=>t}if(e===`X`||e===`x`||e===`X1`)return e=>e;if(Object.hasOwn(te,e)){let t=te[e];a(`(`);let i=[o()];for(;r()===`,`;)n++,i.push(o());return a(`)`),i.length===1?e=>t(i[0](e)):e=>t(...i.map(t=>t(e)))}return i()};try{let e=o();return n===t.length?e:null}catch{return null}}var D={k:`id`};function re(e,t){let{keys:n,vals:r}=e,i=n.length;if(i===0)return t;if(t<=n[0])return r[0];if(t>=n[i-1])return r[i-1];let a=0,o=i-1;for(;o-a>1;){let e=a+o>>1;n[e]<=t?a=e:o=e}return e.interp?r[a]+(r[o]-r[a])*(t-n[a])/(n[o]-n[a]):t-n[a]<=n[o]-t?r[a]:r[o]}function O(e,t){let n=t.length;switch(e.k){case`lin`:{let{a:r,b:i}=e;if(r===1&&i===0)return;for(let e=0;e<n;e++)t[e]=r*t[e]+i;return}case`rat`:{let[r,i,a,o,s,c]=e.p;for(let e=0;e<n;e++){let n=t[e];t[e]=(r*n*n+i*n+a)/(o*n*n+s*n+c)}return}case`poly`:{let[r,i,a,o,s,c]=e.p;for(let e=0;e<n;e++){let n=t[e]-s-c;t[e]=(i-o*n)/(a*n-r)}return}case`alg`:{let r=e.f;for(let e=0;e<n;e++)t[e]=r(t[e]);return}case`tab`:for(let r=0;r<n;r++)t[r]=re(e,t[r]);return;case`rtv`:for(let r=0;r<n;r++){let n=t[r],i=e.def;for(let t=0;t<e.lo.length;t++)if(n>=e.lo[t]&&n<=e.hi[t]){i=e.vals[t];break}t[r]=i}return;default:return}}function k(e,t){let n=Float64Array.of(t);return O(e,n),n[0]}var ie=(e,t)=>e===null||typeof e==`string`?e:String(k(e,t));function A(e,t){let n=Array(t.length),r=e.ranges.every(e=>e.lo===e.hi)?new Map(e.ranges.map(e=>[e.lo,e.to])):null;for(let i=0;i<t.length;i++){let a=t[i];if(a!==a){n[i]=null;continue}let o=e.def;if(r){let e=r.get(a);e!==void 0&&(o=e)}else for(let t of e.ranges)if(a>=t.lo&&(e.int||t.lo===t.hi?a<=t.hi:a<t.hi)){o=t.to;break}n[i]=ie(o,a)}return n}function ae(e,t){let n=(e,t)=>({type:e,bigEndian:t,encoding:`latin1`});switch(e){case 0:return n(`uint`,!t);case 1:return n(`int`,!t);case 2:case 3:return n(`float`,!t);case 7:return n(`string`,!1);case 8:return n(`bytes`,!1);case 9:return n(`uint`,!0);case 10:return n(`int`,!0);case 11:case 12:return n(`float`,!0);case 13:return n(`uint`,!1);case 14:return n(`int`,!1);case 15:case 16:return n(`float`,!1);default:return null}}async function oe(t,n,a){let o=r(n).getUint16(24,!0)===0,s=async e=>{let n=r(await t.read(e,4)).getUint16(2,o),a=await t.read(e,n);return{id:i(a.subarray(0,2)),v:r(a),b:a,size:n}},c=(e,t)=>e.getUint32(t,o),l=(e,t)=>e.getUint16(t,o),u=(e,t)=>e.getFloat64(t,o),d=async t=>t?e((await s(t)).b.subarray(4),!0):``,f=[],p=new Set,m=e=>{if(p.has(e))throw Error(`This MDF file is damaged (its blocks link in a loop).`);p.add(e)},h=async(t,n)=>{if(!t)return{conv:D,unit:``};let{v:r,b:i}=await s(t),a=e(i.subarray(22,42),!0),o=l(r,42),f=l(r,44),p=e=>u(r,46+8*e);switch(o){case 0:return{conv:{k:`lin`,a:p(1),b:p(0)},unit:a};case 1:case 2:{let e=new Float64Array(f),t=new Float64Array(f);for(let n=0;n<f;n++)e[n]=p(2*n),t[n]=p(2*n+1);return{conv:{k:`tab`,keys:e,vals:t,interp:o===1},unit:a}}case 6:return{conv:{k:`poly`,p:[0,1,2,3,4,5].map(p)},unit:a};case 9:return{conv:{k:`rat`,p:[0,1,2,3,4,5].map(p)},unit:a};case 10:{let t=e(i.subarray(46,302),!0),n=ne(t);return{conv:n?{k:`alg`,f:n}:{k:`unsupported`,what:`the formula "${t}"`},unit:a}}case 11:return{conv:{k:`text`,ranges:Array.from({length:f},(t,n)=>{let a=46+40*n,o=u(r,a);return{lo:o,hi:o,to:e(i.subarray(a+8,a+40),!0)}}),def:null,int:n},unit:a};case 12:{let e=await Promise.all(Array.from({length:f},async(e,t)=>{let n=46+20*t;return{lo:u(r,n),hi:u(r,n+8),to:await d(c(r,n+16))}}));return{conv:{k:`text`,ranges:e.slice(1),def:e[0]?.to??null,int:n},unit:a}}case 65535:return{conv:D,unit:a};default:return{conv:{k:`unsupported`,what:`MDF3 conversion type ${o}`},unit:a}}},g=await s(64),_=null;if(g.size>=172&&(c(g.v,164)||c(g.v,168))){let e=c(g.v,168)*4294967296+c(g.v,164);_=new Date(e/1e6).toISOString()}else{let e=i(g.b.subarray(18,28)),t=i(g.b.subarray(28,36));/^\d\d:\d\d:\d{4}$/.test(e)&&(_=`${e.slice(6)}-${e.slice(3,5)}-${e.slice(0,2)}T${t}`)}let v=[],y=0;for(let t=c(g.v,4),n=0;t;n++){m(t);let r=await s(t),i=l(r.v,22),a=[];for(let t=c(r.v,8);t;){m(t);let r=await s(t),u=[],p=null;for(let t=c(r.v,8);t;){m(t);let n=await s(t),r=e(n.b.subarray(26,58),!0),i=(n.size>=222?await d(c(n.v,218)):``)||r,a=ae(l(n.v,190),o),g=l(n.v,186)+(n.size>=228?8*l(n.v,226):0);if(!a)f.push(`${i}: MDF3 data type ${l(n.v,190)} is not supported; skipped.`);else{let{conv:e,unit:t}=await h(c(n.v,8),a.type!==`float`),r={name:i,unit:t,kind:l(n.v,24)===1?`master`:`value`,...a,conv:e,sd:null,sdRecordId:null,byteOffset:g>>3,bitOffset:g&7,bitCount:l(n.v,188),invalBit:null,allInvalid:!1};r.kind===`master`&&!p?p=r:r.kind===`value`&&u.push(r)}t=c(n.v,4)}y++,a.push({name:await d(c(r.v,12))||`Group ${y}`,dg:n,recordId:l(r.v,16),recordIdSize:+(i>0),idTrailer:+(i===2),dataBytes:l(r.v,20),invalBytes:0,cycles:c(r.v,22),vlsdCg:!1,sorted:!0,master:p,channels:u,stream:[],busType:0,busEvent:!1}),t=c(r.v,4)}let u=a.reduce((e,t)=>e+t.cycles*(t.recordIdSize+t.dataBytes+t.idTrailer),0),p=[{offset:c(r.v,16),length:u,zip:null}];for(let e of a)e.stream=p,e.sorted=a.length===1,v.push(e);t=c(r.v,4)}return{version:`MDF ${a}`,startTime:_,groups:v,notes:f,meta:{}}}var se=`This MF4 is damaged (its blocks link in a loop).`;function j(e,t){if(e.seen.has(t))throw Error(se);e.seen.add(t)}async function M(e,t){let a=await e.read(t,24);if(a.length<24)throw Error(`This MF4 is damaged (bad block at byte ${t}).`);let o=r(a),s=i(a.subarray(0,4)),c=n(o,8),l=n(o,16);if(!s.startsWith(`##`)||c<24+8*l||c>1<<26)throw Error(`This MF4 is damaged (bad block at byte ${t}).`);let u=await e.read(t,c);if(u.length<c)throw Error(`This MF4 is damaged (the block at byte ${t} runs past the end of the file).`);let d=r(u),f=[];for(let e=0;e<l;e++)f.push(n(d,24+8*e));let p=u.subarray(24+8*l);return{id:s,links:f,data:r(p),bytes:p}}var N={lt:`<`,gt:`>`,amp:`&`,quot:`"`,apos:`'`};function ce(e){let t=e.indexOf(`<TX>`),n=t<0?-1:e.indexOf(`</TX>`,t+4);return(n>=0?e.slice(t+4,n):e.replace(/<[^<>]*>/g,``)).replace(/&(lt|gt|amp|quot|apos);/g,(e,t)=>N[t]).trim()}function P(t,n){if(!n)return Promise.resolve(``);let r=t.texts.get(n);return r||(r=M(t.io,n).then(t=>{let n=e(t.bytes);return t.id===`##MD`?ce(n):n}),t.texts.set(n,r)),r}async function F(e,t,a=0){if(!t)return[];let o=e.io,s=await o.read(t,24),c=i(s.subarray(0,4)),l=s.length<24?0:n(r(s),8);switch(c){case`##DT`:case`##SD`:case`##RD`:return[{offset:t+24,length:l-24,zip:null}];case`##DZ`:{let e=r(await o.read(t+24,24));if(e.byteLength<24)throw Error(`This MF4 is damaged (bad block at byte ${t}).`);let i=e.getUint8(2);if(i===2||i===3)throw Error(`This MF4 uses zstd compression, which isn't supported yet.`);if(i===4||i===5)throw Error(`This MF4 uses LZ4 compression, which isn't supported yet.`);if(i>5)throw Error(`This MF4 is damaged (unknown compression type ${i}).`);let a=e.getUint32(4,!0),s=n(e,8),c=n(e,16);if(s>g(c)||i===1&&a===0)throw Error(`This MF4 is damaged (bad compressed block at byte ${t}).`);if(i===1&&s>268435456)throw Error(`This MF4 has a compressed block over 256 MB, which Kymoscope cannot read.`);return[{offset:t+48,length:c,zip:{type:i,param:a,orgLength:s}}]}case`##DL`:{if(a>1)throw Error(`This MF4 is damaged (unexpected ${c} block in its data).`);let n=[];for(let r=t;r;){j(e,r);let t=await M(o,r);for(let r of t.links.slice(1))n.push(...await F(e,r,2));r=t.links[0]}return n}case`##HL`:if(a>0)throw Error(`This MF4 is damaged (unexpected ${c} block in its data).`);return j(e,t),F(e,(await M(o,t)).links[0],1);case`##DV`:case`##DI`:throw Error(`This MF4 uses column-oriented storage (MDF 4.2 DV/DI blocks), which Kymoscope cannot read yet.`);default:throw Error(`This MF4 is damaged (unexpected ${c} block in its data).`)}}async function le(e,t,n){return t?i(await e.io.read(t,4))===`##CC`?ue(e,t,n+1):P(e,t):null}async function ue(e,t,n=0){if(!t||n>4||e.busy.has(t))return D;let r=e.convs.get(t);if(r)return r;e.busy.add(t);try{let r=await de(e,t,n);return e.convs.set(t,r),r}finally{e.busy.delete(t)}}async function de(e,t,n){let r=await M(e.io,t),i=r.data,a=i.getUint8(0),o=i.getUint16(4,!0),s=i.getUint16(6,!0),c=new Float64Array(s);for(let e=0;e<s;e++)c[e]=i.getFloat64(24+8*e,!0);let l=r.links.slice(4,4+o),u=()=>Promise.all(l.map(t=>le(e,t,n)));switch(a){case 0:return D;case 1:return{k:`lin`,b:c[0],a:c[1]};case 2:return{k:`rat`,p:[...c]};case 3:{let t=await P(e,l[0]),n=ne(t);return n?{k:`alg`,f:n}:{k:`unsupported`,what:`the formula "${t}"`}}case 4:case 5:{let e=s>>1,t=new Float64Array(e),n=new Float64Array(e);for(let r=0;r<e;r++)t[r]=c[2*r],n[r]=c[2*r+1];return{k:`tab`,keys:t,vals:n,interp:a===4}}case 6:{let e=Math.max(0,Math.floor((s-1)/3)),t=new Float64Array(e),n=new Float64Array(e),r=new Float64Array(e);for(let i=0;i<e;i++)t[i]=c[3*i],n[i]=c[3*i+1],r[i]=c[3*i+2];return{k:`rtv`,lo:t,hi:n,vals:r,def:c[s-1]}}case 7:{let e=await u();return{k:`text`,ranges:[...c].map((t,n)=>({lo:t,hi:t,to:e[n]??null})),def:e[s]??null,int:!0}}case 8:{let e=await u(),t=s>>1;return{k:`text`,ranges:Array.from({length:t},(t,n)=>({lo:c[2*n],hi:c[2*n+1],to:e[n]??null})),def:e[t]??null,int:!0}}default:return{k:`unsupported`,what:`conversion type ${a}`}}}var fe={0:{type:`uint`,bigEndian:!1,encoding:`latin1`},1:{type:`uint`,bigEndian:!0,encoding:`latin1`},2:{type:`int`,bigEndian:!1,encoding:`latin1`},3:{type:`int`,bigEndian:!0,encoding:`latin1`},4:{type:`float`,bigEndian:!1,encoding:`latin1`},5:{type:`float`,bigEndian:!0,encoding:`latin1`},6:{type:`string`,bigEndian:!1,encoding:`latin1`},7:{type:`string`,bigEndian:!1,encoding:`utf-8`},8:{type:`string`,bigEndian:!1,encoding:`utf-16le`},9:{type:`string`,bigEndian:!0,encoding:`utf-16be`},10:{type:`bytes`,bigEndian:!1,encoding:`latin1`}};async function pe(e,t){let{io:r,notes:a}=e,o=t.data,s=o.getUint8(0),c=o.getUint8(1),l=o.getUint8(2),u=await P(e,t.links[2]),d=fe[l];if(!d)return a.push(`${u}: data type ${l} is not supported; the channel was skipped.`),null;let f;if(s===2||s===3)if(c===1)f=s===2?`master`:`vmaster`;else{if(a.push(`The master channel ${u} is not time (sync type ${c}): samples are numbered instead.`),s===3)return null;f=`value`}else if(s===1)f=`vlsd`;else if(s===0||s===4)f=`value`;else return a.push(`${u}: channel type ${s} is not supported; skipped.`),null;let p=await ue(e,t.links[4]),m=p.k===`text`?{...p,int:d.type!==`float`}:p,h=await P(e,t.links[6]);!h&&t.links[4]&&(h=await P(e,(await M(r,t.links[4])).links[1]));let g=null,_=null;f===`vlsd`&&t.links[5]&&(i(await r.read(t.links[5],4))===`##CG`?_=n((await M(r,t.links[5])).data,0):g=await F(e,t.links[5]));let v=o.getUint32(12,!0);return{name:u,unit:h,kind:f,...d,conv:m,sd:g,sdRecordId:_,byteOffset:o.getUint32(4,!0),bitOffset:o.getUint8(3),bitCount:o.getUint32(8,!0),invalBit:v&2?o.getUint32(16,!0):null,allInvalid:(v&1)!=0}}async function me(e,t,n,r=0){let{io:a,notes:o}=e;for(let s=t;s;){j(e,s);let t=await M(a,s),c=t.links[1];c&&r<4&&(i(await a.read(c,4))===`##CN`?await me(e,c,n,r+1):o.push(`${await P(e,t.links[2])}: array channels (CA) are not supported yet; skipped.`));let l=await pe(e,t);l&&n.push(l),s=t.links[0]}}async function he(e,t,r,i){let a=t.data,o=a.getUint16(16,!0),s=0;t.links[3]&&(s=(await M(e.io,t.links[3])).data.getUint8(1));let c={name:await P(e,t.links[2]),dg:r,recordId:n(a,0),recordIdSize:i,idTrailer:0,dataBytes:a.getUint32(24,!0),invalBytes:a.getUint32(28,!0),cycles:n(a,8),vlsdCg:(o&1)!=0,sorted:!0,master:null,channels:[],stream:[],busType:s,busEvent:(o&2)!=0};if(c.vlsdCg)return c;let l=[];await me(e,t.links[1],l);for(let e of l)e.kind===`master`||e.kind===`vmaster`?c.master||=e:c.channels.push(e);return c}async function ge(e,t){let r=await M(e,64);if(r.id!==`##HD`)throw Error(`This MF4 is damaged (no header block).`);let i=n(r.data,0),a=(r.data.getUint8(12)&1)!=0,o=new Date(i/1e6).toISOString(),s=i>0?a?o.slice(0,-1):o:null,c={io:e,notes:[],seen:new Set,texts:new Map,convs:new Map,busy:new Set},l=[],u=0;for(let t=r.links[0],n=0;t;n++){j(c,t);let r=await M(e,t),i=r.data.getUint8(0),a=[];for(let t=r.links[1];t;){j(c,t);let r=await M(e,t),o=await he(c,r,n,i);o.vlsdCg||(u++,o.name||=`Group ${u}`),a.push(o),t=r.links[0]}let o=await F(c,r.links[2]),s=a.length===1;for(let e of a)e.stream=o,e.sorted=s,l.push(e);t=r.links[0]}return{version:`MF4 ${t}`,startTime:s,groups:l,notes:c.notes,meta:{}}}function _e(e){let t=e&32768?-1:1,n=e>>10&31,r=e&1023;return n===0?t*2**-14*(r/1024):n===31?r?NaN:t*(1/0):t*2**(n-15)*(1+r/1024)}function I(e,t,n,i,a,o,s=0){let c=r(t),l=!e.bigEndian,u=a+e.byteOffset,d=e.bitCount;if(e.bitOffset===0)if(e.type===`float`){if(d===64){for(let e=0;e<n;e++,u+=i)o[s+e]=c.getFloat64(u,l);return}if(d===32){for(let e=0;e<n;e++,u+=i)o[s+e]=c.getFloat32(u,l);return}if(d===16){for(let e=0;e<n;e++,u+=i)o[s+e]=_e(c.getUint16(u,l));return}}else if(e.type===`int`){if(d===8){for(let e=0;e<n;e++,u+=i)o[s+e]=c.getInt8(u);return}if(d===16){for(let e=0;e<n;e++,u+=i)o[s+e]=c.getInt16(u,l);return}if(d===32){for(let e=0;e<n;e++,u+=i)o[s+e]=c.getInt32(u,l);return}if(d===64){for(let e=0;e<n;e++,u+=i)o[s+e]=c.getInt32(u+(l?4:0),l)*4294967296+c.getUint32(u+(l?0:4),l);return}}else{if(d===8){for(let e=0;e<n;e++,u+=i)o[s+e]=t[u];return}if(d===16){for(let e=0;e<n;e++,u+=i)o[s+e]=c.getUint16(u,l);return}if(d===32){for(let e=0;e<n;e++,u+=i)o[s+e]=c.getUint32(u,l);return}if(d===64){for(let e=0;e<n;e++,u+=i)o[s+e]=c.getUint32(u+(l?4:0),l)*4294967296+c.getUint32(u+(l?0:4),l);return}}let f=e.bitOffset+d+7>>3,p=2**e.bitOffset,m=2**d,h=m/2,g=e.type===`int`;for(let e=0;e<n;e++,u+=i){let n=0;if(l)for(let e=f-1;e>=0;e--)n=n*256+t[u+e];else for(let e=0;e<f;e++)n=n*256+t[u+e];n=Math.floor(n/p)%m,o[s+e]=g&&n>=h?n-m:n}}var ve=new Map,ye=e=>{let t=ve.get(e);return t||ve.set(e,t=new TextDecoder(e)),t};function be(e){let t=e.indexOf(`\0`);return t<0?e:e.slice(0,t)}function xe(e,t,n,r,i){let a=ye(e.encoding),o=e.bitCount>>3,s=Array(n);for(let c=0,l=i+e.byteOffset;c<n;c++,l+=r)s[c]=be(a.decode(t.subarray(l,l+o)));return s}function Se(e,t,n,r,i,a){let o=a instanceof Float64Array?NaN:null;if(e.allInvalid){for(let e=0;e<n;e++)a[e]=o;return}if(e.invalBit===null)return;let s=1<<(e.invalBit&7);for(let c=0,l=i+(e.invalBit>>3);c<n;c++,l+=r)t[l]&s&&(a[c]=o)}var L=e=>e.recordIdSize+e.dataBytes+e.invalBytes+e.idTrailer,Ce=64<<20,we=(e,t)=>e.reduce((e,n)=>e+(n.zip?n.zip.orgLength:Math.max(0,Math.min(n.length,t-n.offset))),0),Te=e=>e.byteOffset+Math.ceil((e.bitOffset+e.bitCount)/8);function Ee(e,t){return e.kind===`vmaster`?!0:(e.kind===`vlsd`||e.type===`uint`||e.type===`int`||e.type===`float`?!(e.bitCount>=1&&e.bitCount<=64):!(e.bitCount>=8))?!1:Te(e)<=t.dataBytes}function De(e,t){let n=e.notes;for(let r of e.groups){if(![0,1,2,4,8].includes(r.recordIdSize))throw Error(`This MDF file is damaged (bad record id size).`);if(r.vlsdCg)continue;let e=L(r);if(e>Ce||e===0){r.cycles>0&&n.push(`${r.name||`A group`}: its records are ${e===0?`empty`:`too large`} (damaged); skipped.`),r.cycles=0;continue}r.cycles=Math.min(r.cycles,Math.floor(we(r.stream,t)/e));let i=r.channels.filter(e=>!Ee(e,r));for(let e of i)n.push(`${e.name}: its bits lie outside its record (damaged); skipped.`);i.length&&(r.channels=r.channels.filter(e=>!i.includes(e))),r.master&&!Ee(r.master,r)&&(n.push(`${r.master.name}: the time channel lies outside its record (damaged): samples are numbered instead.`),r.master=null);for(let e of r.master?[...r.channels,r.master]:r.channels)e.invalBit!==null&&e.invalBit>=8*r.invalBytes&&(e.invalBit=null)}}function Oe(e,t){let n=0;for(let r of e.master?[...t,e.master]:t){if(r.invalBit!==null)return 1/0;r.kind!==`vmaster`&&(n=Math.max(n,r.byteOffset+(r.bitOffset+r.bitCount+7>>3)))}return e.recordIdSize+n}var R=Uint8Array,z=Uint16Array,ke=Int32Array,Ae=new R([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),je=new R([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Me=new R([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Ne=function(e,t){for(var n=new z(31),r=0;r<31;++r)n[r]=t+=1<<e[r-1];for(var i=new ke(n[30]),r=1;r<30;++r)for(var a=n[r];a<n[r+1];++a)i[a]=a-n[r]<<5|r;return{b:n,r:i}},Pe=Ne(Ae,2),Fe=Pe.b,Ie=Pe.r;Fe[28]=258,Ie[258]=28;var Le=Ne(je,0),Re=Le.b;Le.r;for(var ze=new z(32768),B=0;B<32768;++B){var V=(B&43690)>>1|(B&21845)<<1;V=(V&52428)>>2|(V&13107)<<2,V=(V&61680)>>4|(V&3855)<<4,ze[B]=((V&65280)>>8|(V&255)<<8)>>1}for(var H=(function(e,t,n){for(var r=e.length,i=0,a=new z(t);i<r;++i)e[i]&&++a[e[i]-1];var o=new z(t);for(i=1;i<t;++i)o[i]=o[i-1]+a[i-1]<<1;var s;if(n){s=new z(1<<t);var c=15-t;for(i=0;i<r;++i)if(e[i])for(var l=i<<4|e[i],u=t-e[i],d=o[e[i]-1]++<<u,f=d|(1<<u)-1;d<=f;++d)s[ze[d]>>c]=l}else for(s=new z(r),i=0;i<r;++i)e[i]&&(s[i]=ze[o[e[i]-1]++]>>15-e[i]);return s}),U=new R(288),B=0;B<144;++B)U[B]=8;for(var B=144;B<256;++B)U[B]=9;for(var B=256;B<280;++B)U[B]=7;for(var B=280;B<288;++B)U[B]=8;for(var Be=new R(32),B=0;B<32;++B)Be[B]=5;var Ve=H(U,9,1),He=H(Be,5,1),Ue=function(e){for(var t=e[0],n=1;n<e.length;++n)e[n]>t&&(t=e[n]);return t},W=function(e,t,n){var r=t/8|0;return(e[r]|e[r+1]<<8)>>(t&7)&n},We=function(e,t){var n=t/8|0;return(e[n]|e[n+1]<<8|e[n+2]<<16)>>(t&7)},Ge=function(e){return(e+7)/8|0},Ke=function(e,t,n){return(t==null||t<0)&&(t=0),(n==null||n>e.length)&&(n=e.length),new R(e.subarray(t,n))},qe=[`unexpected EOF`,`invalid block type`,`invalid length/literal`,`invalid distance`,`stream finished`,`no stream handler`,,`no callback`,`invalid UTF-8 data`,`extra field too long`,`date not in range 1980-2099`,`filename too long`,`stream finishing`,`invalid zip data`],G=function(e,t,n){var r=Error(t||qe[e]);if(r.code=e,Error.captureStackTrace&&Error.captureStackTrace(r,G),!n)throw r;return r},Je=function(e,t,n,r){var i=e.length,a=r?r.length:0;if(!i||t.f&&!t.l)return n||new R(0);var o=!n,s=o||t.i!=2,c=t.i;o&&(n=new R(i*3));var l=function(e){var t=n.length;if(e>t){var r=new R(Math.max(t*2,e));r.set(n),n=r}},u=t.f||0,d=t.p||0,f=t.b||0,p=t.l,m=t.d,h=t.m,g=t.n,_=i*8;do{if(!p){u=W(e,d,1);var v=W(e,d+1,3);if(d+=3,!v){var y=Ge(d)+4,b=e[y-4]|e[y-3]<<8,x=y+b;if(x>i){c&&G(0);break}s&&l(f+b),n.set(e.subarray(y,x),f),t.b=f+=b,t.p=d=x*8,t.f=u;continue}else if(v==1)p=Ve,m=He,h=9,g=5;else if(v==2){var S=W(e,d,31)+257,C=W(e,d+10,15)+4,ee=S+W(e,d+5,31)+1;d+=14;for(var w=new R(ee),T=new R(19),E=0;E<C;++E)T[Me[E]]=W(e,d+E*3,7);d+=C*3;for(var te=Ue(T),ne=(1<<te)-1,D=H(T,te,1),E=0;E<ee;){var re=D[W(e,d,ne)];d+=re&15;var y=re>>4;if(y<16)w[E++]=y;else{var O=0,k=0;for(y==16?(k=3+W(e,d,3),d+=2,O=w[E-1]):y==17?(k=3+W(e,d,7),d+=3):y==18&&(k=11+W(e,d,127),d+=7);k--;)w[E++]=O}}var ie=w.subarray(0,S),A=w.subarray(S);h=Ue(ie),g=Ue(A),p=H(ie,h,1),m=H(A,g,1)}else G(1);if(d>_){c&&G(0);break}}s&&l(f+131072);for(var ae=(1<<h)-1,oe=(1<<g)-1,se=d;;se=d){var O=p[We(e,d)&ae],j=O>>4;if(d+=O&15,d>_){c&&G(0);break}if(O||G(2),j<256)n[f++]=j;else if(j==256){se=d,p=null;break}else{var M=j-254;if(j>264){var E=j-257,N=Ae[E];M=W(e,d,(1<<N)-1)+Fe[E],d+=N}var ce=m[We(e,d)&oe],P=ce>>4;ce||G(3),d+=ce&15;var A=Re[P];if(P>3){var N=je[P];A+=We(e,d)&(1<<N)-1,d+=N}if(d>_){c&&G(0);break}s&&l(f+131072);var F=f+M;if(f<A){var le=a-A,ue=Math.min(A,F);for(le+f<0&&G(3);f<ue;++f)n[f]=r[le+f]}for(;f<F;++f)n[f]=n[f-A]}}t.l=p,t.p=se,t.b=f,t.f=u,p&&(u=1,t.m=h,t.d=m,t.n=g)}while(!u);return f!=n.length&&o?Ke(n,0,f):n.subarray(0,f)},Ye=new R(0),Xe=function(e,t){return((e[0]&15)!=8||e[0]>>4>7||(e[0]<<8|e[1])%31)&&G(6,`invalid zlib data`),(e[1]>>5&1)==+!t&&G(6,`invalid zlib data: `+(e[1]&32?`need`:`unexpected`)+` dictionary`),(e[1]>>3&4)+2},Ze=function(){function e(e,t){typeof e==`function`&&(t=e,e={}),this.ondata=t;var n=e&&e.dictionary&&e.dictionary.subarray(-32768);this.s={i:0,b:n?n.length:0},this.o=new R(32768),this.p=new R(0),n&&this.o.set(n)}return e.prototype.e=function(e){if(this.ondata||G(5),this.d&&G(4),!this.p.length)this.p=e;else if(e.length){var t=new R(this.p.length+e.length);t.set(this.p),t.set(e,this.p.length),this.p=t}},e.prototype.c=function(e){this.s.i=+(this.d=e||!1);var t=this.s.b,n=Je(this.p,this.s,this.o);this.ondata(Ke(n,t,this.s.b),this.d),this.o=Ke(n,this.s.b-32768),this.s.b=this.o.length,this.p=Ke(this.p,this.s.p/8|0),this.s.p&=7},e.prototype.push=function(e,t){this.e(e),this.c(t)},e}(),Qe=function(){function e(e,t){Ze.call(this,e,t),this.v=e&&e.dictionary?2:1}return e.prototype.push=function(e,t){if(Ze.prototype.e.call(this,e),this.v){if(this.p.length<6&&!t)return;this.p=this.p.subarray(Xe(this.p,this.v-1)),this.v=0}t&&(this.p.length<4&&G(6,`invalid zlib data`),this.p=this.p.subarray(0,-4)),Ze.prototype.c.call(this,t)},e}(),$e=typeof TextDecoder<`u`&&new TextDecoder;try{$e.decode(Ye,{stream:!0})}catch{}var et=65536,tt=`This file's compressed data is damaged.`;async function*nt(e){for(let t=0;t<e.length;t+=et)yield e.subarray(t,t+et)}async function*rt(e){if(typeof DecompressionStream!=`function`){let t=[],n=new Qe(e=>{t.push(e)});for await(let r of e)for(n.push(r,!1);t.length;)yield t.shift();for(n.push(new Uint8Array,!0);t.length;)yield t.shift();return}let t=new DecompressionStream(`deflate`),n=t.writable.getWriter();(async()=>{for await(let t of e)await n.write(t);await n.close()})().catch(e=>n.abort(e).catch(()=>{}));let r=t.readable.getReader();try{for(;;){let{done:e,value:t}=await r.read().catch(e=>{throw e instanceof TypeError?Error(tt):e});if(e)return;yield t}}finally{r.cancel().catch(()=>{})}}async function K(e,t=-1,n=1/0){let r=[],i=Math.min(t,n),a=t>=0?new Uint8Array(i):null,o=0;for await(let s of rt(nt(e))){if(a){if(o+s.length>t&&n>t)throw Error(`Compressed data is longer than its header says.`);a.set(o+s.length>i?s.subarray(0,i-o):s,o)}else r.push(s);if(o+=s.length,o>=n)break}if(a)return o>=i?a:a.subarray(0,o);let s=r.length===1?r[0]:new Uint8Array(o);return r.length>1&&r.reduce((e,t)=>(s.set(t,e),e+t.length),0),o>n?s.subarray(0,n):s}var it=new Uint8Array(Uint32Array.of(1).buffer)[0]===1;function at(e,t,n,r=t){let i=Math.floor(n/t),a=new Uint8Array(r<t?i*r:n),o=r%4==0&&it?new Uint32Array(a.buffer,0,i*r>>2):null,s=r>>2;for(let t=0;t<i;t+=512){let n=Math.min(i,t+512);if(o)for(let a=0;a<r;a+=4){let r=a*i,c=r+i,l=c+i,u=l+i;for(let i=t,d=t*s+(a>>2);i<n;i++,d+=s)o[d]=e[r+i]|e[c+i]<<8|e[l+i]<<16|e[u+i]<<24}else for(let o=0;o<r;o++){let s=o*i;for(let i=t,c=t*r+o;i<n;i++,c+=r)a[c]=e[s+i]}}let c=i*t;return r===t&&a.set(e.subarray(c,n),c),a}function ot(e,t,n){if(!(n<t)||e.length===0)return t;let r=Math.min(t,n+3&-4);return r===t?t:e.every(e=>e.zip?.type===1&&e.zip.param===t&&e.zip.orgLength%t===0)?r:t}async function st(e,t,n=1/0,r=1/0){let i=await e.slice(t.offset,t.length),{type:a,param:o,orgLength:s}=t.zip;if(a===0)return K(i,s,r);let c=Math.min(n,o);return at(await K(i,s,c<o?s/o*c:1/0),o,s,c)}async function*ct(e,t,n,r=1/0){let i=e=>!!e?.zip&&!(e.zip.type===0&&(e.length>16777216||e.zip.orgLength>268435456)),a=null;for(let o=0;o<t.length;o++){let s=t[o];if(n?.throwIfAborted(),!s.zip)for await(let t of e.windows(s.offset,s.length))yield t.bytes;else if(i(s)){let n=a??st(e,s,r);a=i(t[o+1])?st(e,t[o+1],r):null,a?.catch(()=>{}),yield await n}else{let t=s.zip.orgLength;for await(let n of rt((async function*(){for await(let t of e.windows(s.offset,s.length))yield t.bytes})()))if(yield n.length>t?n.subarray(0,t):n,(t-=n.length)<=0)break}}}async function*lt(e,t,n,r){if(r<=0||t<=0)return;let i=Math.min(n,r),a=null,o=0,s=0;for await(let n of e){let e=0;for(;e<n.length&&s<r;){if(o===0){let a=Math.min(i,r-s,Math.floor((n.length-e)/t));if(a>0){yield{buf:n.subarray(e,e+a*t),n:a},s+=a,e+=a*t;continue}}a??=new Uint8Array(t*i);let c=Math.min(a.length,(r-s)*t),l=Math.min(n.length-e,c-o);if(a.set(n.subarray(e,e+l),o),o+=l,e+=l,o===c){let e=o/t;yield{buf:a,n:e},s+=e,o=0}}if(s>=r)return}a&&o>=t&&(yield{buf:a,n:Math.floor(o/t)})}async function ut(e,t,n,r){let i=n*r,a=0;for(let n of t){let t=n.zip?n.zip.orgLength:n.length;if(i<a)return null;if(i+r<=a+t)return n.zip?null:e.read(n.offset+i-a,r);a+=t}return null}var dt=(e,t)=>(e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24)>>>0,ft=class{#e;#t;#n;#r;#i=new Uint8Array;#a=0;#o;#s=0;constructor(e,t,n){this.#e=e,this.#t=t,this.#n=n,this.#r=ct(e,t,n),this.#o=t.reduce((e,t)=>e+(t.zip?t.zip.orgLength:t.length),0)}peek(e){let t=e-this.#a;if(t<0||t+4>this.#i.length)return null;let n=dt(this.#i,t);return t+4+n>this.#i.length?null:this.#i.subarray(t+4,t+4+n)}async get(e){for(;;){let t=this.peek(e);if(t)return t;let n=e-this.#a;if(e+4>this.#o||n>=0&&n+4<=this.#i.length&&e+4+dt(this.#i,n)>this.#o)throw Error(`This MF4 is damaged (string data ends early).`);e<this.#a&&(this.#r=ct(this.#e,this.#t,this.#n),this.#i=new Uint8Array,this.#a=0);let r=await this.#r.next();if(r.done)throw Error(`This MF4 is damaged (string data ends early).`);if((this.#s+=r.value.length)>4*this.#o+16777216)throw Error(`This MF4 is damaged (its string offsets jump back and forth).`);let i=Math.max(0,Math.min(e-this.#a,this.#i.length)),a=this.#i.subarray(i),o=new Uint8Array(a.length+r.value.length);o.set(a),o.set(r.value,a.length),this.#a+=i,this.#i=o}}},pt=e=>Math.max(1,Math.min(65536,Math.floor((8<<20)/Math.max(1,e)))),mt=64<<20,ht=class{#e;#t;#n=new Map;#r=new Map;constructor(e,t){this.#e=e,this.#t=t}want(e){this.#r.has(e)||this.#r.set(e,new Map)}wanted(e){return this.#r.has(e)}put(e,t,n){this.#r.get(e).set(t,n)}async bytes(e,t){let n=Array(t.length);if(e.sdRecordId!==null){let r=this.#r.get(e.sdRecordId);for(let e=0;e<t.length;e++)n[e]=r?.get(t[e])??null,r?.delete(t[e]);return n}if(!e.sd)return n.fill(null);let r=this.#n.get(e);r||this.#n.set(e,r=new ft(this.#e,e.sd,this.#t));for(let e=0;e<t.length;e++)n[e]=r.peek(t[e])??await r.get(t[e]);return n}async strings(e,t){let n=ye(e.encoding);return(await this.bytes(e,t)).map(e=>e?be(n.decode(e)):null)}};function gt(e,t,n,r,i=L(e),a=new Float64Array(n)){let o=e.master;if(!o)return null;if(o.kind===`vmaster`)for(let e=0;e<n;e++)a[e]=r+e;else I(o,t,n,i,e.recordIdSize,a);return O(o.conv,a),a}function _t(e,t,n){return n===1?e[t]:n===2?e[t]|e[t+1]<<8:n===4?(e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24)>>>0:((e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24)>>>0)+4294967296*((e[t+4]|e[t+5]<<8|e[t+6]<<16|e[t+7]<<24)>>>0)}function vt(e,t){let n=new Uint8Array(e.length+t.length);return n.set(e),n.set(t,e.length),n}async function*yt(e,t,n,r,i,a=1/0){let o=t.groups[n[0]];if(o.sorted){let t=ot(o.stream,L(o),a),r=0;for await(let{buf:a,n:s}of lt(ct(e,o.stream,i,t),t,pt(t),o.cycles))yield{g:n[0],buf:a,n:s,start:r,size:t},r+=s;return}let s=t.groups.map((e,t)=>({g:e,k:t})).filter(({g:e})=>e.dg===o.dg),c=o.recordIdSize,l=new Map;for(let e of n){let n=t.groups[e],r=L(n);l.set(n.recordId,{k:e,size:r,buf:new Uint8Array(r*Math.min(pt(r),Math.max(1,n.cycles))),fill:0,start:0})}let u=new Map(s.map(({g:e})=>[e.recordId,e.vlsdCg?-1:L(e)])),d=new Map,f=new Uint8Array;for await(let t of ct(e,o.stream,i)){let e=f.length?vt(f,t):t,n=0;for(;!(n+c>e.length);){let t=_t(e,n,c),i=u.get(t);if(i===void 0)throw Error(`This MF4 is damaged (unknown record id ${t}).`);if(i<0){if(n+c+4>e.length)break;let i=(e[n+c]|e[n+c+1]<<8|e[n+c+2]<<16|e[n+c+3]<<24)>>>0;if(i>mt)throw Error(`This MF4 is damaged (a string record of ${i} bytes).`);let a=n+c+4+i;if(a>e.length)break;let o=d.get(t)??0;r.wanted(t)&&r.put(t,o,e.slice(n+c+4,a)),d.set(t,o+4+i),n=a;continue}if(n+i>e.length)break;let a=l.get(t);if(a&&(a.buf.set(e.subarray(n,n+i),a.fill),a.fill+=i,a.fill===a.buf.length)){let e=a.fill/a.size;yield{g:a.k,buf:a.buf,n:e,start:a.start,size:a.size},a.start+=e,a.fill=0}n+=i}f=e.slice(n)}for(let e of l.values())e.fill&&(yield{g:e.k,buf:e.buf,n:e.fill/e.size,start:e.start,size:e.size})}var bt=(e,t)=>t?e+2147483648:e,xt=/^BO_\s+(\d+)\s+(\w+)\s*:\s*(\d+)/,St=/^SG_\s+(\w+)\s*(?:(M|m\d+M?)\s*)?:\s*(\d+)\|(\d+)@([01])([+-])\s*\(([^,)]*),([^)]*)\)\s*\[[^\]]*\]\s*"([^"]*)"/,Ct=/^VAL_\s+(\d+)\s+(\w+)\s+(.*);/,wt=/^SIG_VALTYPE_\s+(\d+)\s+(\w+)\s*:\s*([12])\s*;/,Tt=/^-?\d+(?:\.\d+)?$/;function Et(e){let t=e.split(`"`),n=new Map;for(let e=0;e+1<t.length;e+=2){let r=t[e].trim();Tt.test(r)&&n.set(Number(r),t[e+1])}return n}var Dt=(e,t)=>e<=511&&t>=1&&t<=64;function Ot(e){let t=new Map,n=new Map,r=new Map,i=(e,t)=>{let i=n.get(Number(e));return i?r.get(i)?.get(t):void 0},a=null;for(let o of e.split(/\r?\n/)){let e=o.trim(),s;if(s=xt.exec(e)){let e=Number(s[1]),r=e>=2147483648,i=r?e-2147483648:e;a={id:i,extended:r,name:s[2],size:Number(s[3]),signals:[]},t.set(bt(i,r),a),n.set(e,a)}else if((s=St.exec(e))&&a){let e=s[2],t=Number(s[3]),n=Number(s[4]);if(!Dt(t,n)||!s[7].trim()||!s[8].trim())continue;let i={name:s[1],start:t,length:n,littleEndian:s[5]===`1`,signed:s[6]===`-`,factor:Number(s[7]),offset:Number(s[8]),unit:s[9],mux:e?e===`M`?`switch`:parseInt(e.slice(1),10):null,float:0,values:null};a.signals.push(i);let o=r.get(a);o||r.set(a,o=new Map),o.has(i.name)||o.set(i.name,i)}else if(s=Ct.exec(e)){let e=i(s[1],s[2]);e&&(e.values=Et(s[3]))}else if(s=wt.exec(e)){let e=i(s[1],s[2]);e&&(e.float=s[3]===`1`?32:64)}else (e.startsWith(`BO_`)||e===``)&&e===``&&(a=null)}return t}function kt(e){if(e.float){let t=e.float/8,n=e.start>>3,r=e.littleEndian,i=new DataView(new ArrayBuffer(8));return(e,a)=>{for(let r=0;r<t;r++)i.setUint8(r,e[a+n+r]??0);return t===4?i.getFloat32(0,r):i.getFloat64(0,r)}}let t=e.length,n=2**t,r=n/2,i=e.signed;if(e.littleEndian){let a=e.start>>3,o=e.start&7;if(o+t<=32){let e=t===32?-1:(1<<t)-1;return(t,s)=>{let c=s+a,l=((t[c]|t[c+1]<<8|t[c+2]<<16|t[c+3]<<24)>>>o&e)>>>0;return i&&l>=r?l-n:l}}let s=o+t+7>>3,c=2**(t-(32-o)),l=2**(32-o);return(e,t)=>{let u=t+a,d=(e[u]|e[u+1]<<8|e[u+2]<<16|e[u+3]<<24)>>>o,f=0;for(let t=s-1;t>=4;t--)f=f*256+(e[u+t]??0);let p=d+f%c*l;return i&&p>=r?p-n:p}}let a=e.start>>3,o=e.start&7;if(7-o+t<=32){let e=32-(7-o)-t,s=t===32?-1:(1<<t)-1;return(t,o)=>{let c=o+a,l=((t[c]<<24|t[c+1]<<16|t[c+2]<<8|t[c+3])>>>e&s)>>>0;return i&&l>=r?l-n:l}}let s=(1<<o+1)-1,c=t-(o+1)>>3,l=t-(o+1)&7,u=2**l;return(e,t)=>{let o=(e[t+a]??0)&s,d=t+a+1;for(let t=0;t<c;t++)o=o*256+(e[d++]??0);return l>0&&(o=o*u+((e[d]??0)>>8-l)),i&&o>=r?o-n:o}}function At(e){let t=e.length,n=2**t,r=n/2,i=e.signed,a=t===32?-1:(1<<t)-1;if(!e.float&&e.littleEndian&&(e.start&7)+t<=32){let t=e.start>>3,o=e.start&7;return(e,s,c,l,u,d,f)=>{for(let p=0;p<l;p++){let l=s[c[p]]+t,m=((e[l]|e[l+1]<<8|e[l+2]<<16|e[l+3]<<24)>>>o&a)>>>0;u[p]=(i&&m>=r?m-n:m)*d+f}}}if(!e.float&&!e.littleEndian&&7-(e.start&7)+t<=32){let o=e.start>>3,s=32-(7-(e.start&7))-t;return(e,t,c,l,u,d,f)=>{for(let p=0;p<l;p++){let l=t[c[p]]+o,m=((e[l]<<24|e[l+1]<<16|e[l+2]<<8|e[l+3])>>>s&a)>>>0;u[p]=(i&&m>=r?m-n:m)*d+f}}}let o=kt(e);return(e,t,n,r,i,a,s)=>{for(let c=0;c<r;c++)i[c]=o(e,t[n[c]])*a+s}}function jt(e){if(!e.busEvent||e.busType!==2)return null;let t=t=>e.channels.find(e=>e.name.endsWith(t))??null,n=t(`DataFrame.ID`),r=t(`DataFrame.DataBytes`);return!n||!r?null:{id:n,ide:t(`DataFrame.IDE`),data:r}}var Mt=()=>({n:0,time:new Float64Array,key:new Float64Array,id:new Float64Array,ide:new Float64Array,bytes:null,buf:new Uint8Array,dataAt:new Int32Array});async function Nt(e,t,n,r,i,a,o,s){s.key.length<r&&Object.assign(s,{time:new Float64Array(r),key:new Float64Array(r),id:new Float64Array(r),ide:new Float64Array(r),dataAt:new Int32Array(r)});let c=e.recordIdSize,{id:l,ide:u,key:d,dataAt:f}=s;I(t.id,n,r,a,c,l),t.ide&&I(t.ide,n,r,a,c,u);for(let e=0;e<r;e++){let n=l[e],r=n&536870911;d[e]=bt(r,t.ide?u[e]!==0:n>=2147483648||r>2047)}if(s.bytes=null,t.data.kind===`vlsd`){let e=new Float64Array(r);I({...t.data,type:`uint`},n,r,a,c,e),s.bytes=await o.bytes(t.data,e)}else for(let e=0,n=c+t.data.byteOffset;e<r;e++,n+=a)f[e]=n;if(!gt(e,n,r,i,a,s.time.subarray(0,r)))for(let e=0;e<r;e++)s.time[e]=i+e;return s.n=r,s.buf=n,s}var Pt=new Uint8Array;function Ft(e){return e.float?(e.start>>3)+e.float/8:e.littleEndian?(e.start>>3)+((e.start&7)+e.length+7>>3):(e.start>>3)+1+(Math.max(0,e.length-((e.start&7)+1))+7>>3)}function It(e,t,n){let r=0;for(let e of n.values())for(let t of e.signals)r=Math.max(r,Ft(t));let i=t.data.kind===`vlsd`?t.data:{...t.data,bitCount:Math.min(t.data.bitCount,r*8)};return Oe(e,t.ide?[t.id,t.ide,i]:[t.id,i])}function Lt(e,t){let n=t.map(t=>e.signals[e.channels[t].s]);return{route:e,col:n.map(At),read:n.map(kt),factor:n.map(e=>e.factor),offset:n.map(e=>e.offset),table:t.map((t,r)=>e.channels[t].text?n[r].values:null),idx:new Int32Array,cnt:0,n:0,t0:NaN,t1:NaN}}function Rt(e,t,n,r,i,a=1,o=0){let s=new Float64Array(i);if(n.bytes)for(let e=0;e<i;e++)s[e]=t(n.bytes[r[e]]??Pt,0)*a+o;else e(n.buf,n.dataAt,r,i,s,a,o);return s}function zt(e,t){let{idx:n,cnt:r}=e,i=new Float64Array(r);for(let e=0;e<r;e++)i[e]=t.time[n[e]];return e.n===0&&(e.t0=i[0]),e.t1=i[r-1],e.n+=r,e.cnt=0,{time:i,cols:e.col.map((i,a)=>{let o=e.table[a];return o?Array.from(Rt(i,e.read[a],t,n,r),e=>o.get(e)??null):Rt(i,e.read[a],t,n,r,e.factor[a],e.offset[a])})}}var Bt=e=>({key:e,skip:!0,frames:0,all:null,sw:null,byMux:new Map,idx:new Int32Array,cnt:0});function Vt(e,t){let n=e.signals.find(e=>e.mux===`switch`);return{key:bt(e.id,e.extended),skip:!1,frames:0,all:t,sw:n?{col:At(n),read:kt(n)}:null,byMux:new Map,idx:new Int32Array,cnt:0}}var Ht=class{#e=Array(2048);#t=new Map;#n;constructor(e){this.#n=e}get(e){let t=e<2048?this.#e[e]:this.#t.get(e);return t||(t=this.#n(e),e<2048?this.#e[e]=t:this.#t.set(e,t)),t}};function Ut(e,t,n){let r=[];for(let n=0;n<e.n;n++){let i=t.get(e.key[n]);if(i.skip){i.frames++;continue}i.cnt===0&&(r.push(i),i.idx.length<e.n&&(i.idx=new Int32Array(e.n))),i.idx[i.cnt++]=n}let i=[];for(let t of r){if(t.all&&(t.all.idx=t.idx,t.all.cnt=t.cnt,i.push(t.all)),t.sw){let r=Rt(t.sw.col,t.sw.read,e,t.idx,t.cnt);for(let e=0;e<t.cnt;e++){let a=t.byMux.get(r[e]);a===void 0&&((a=n(t,r[e]))||t.byMux.size<4096)&&t.byMux.set(r[e],a),a&&(a.cnt===0&&(i.push(a),a.idx.length<t.cnt&&(a.idx=new Int32Array(t.cnt))),a.idx[a.cnt++]=t.idx[e])}}t.cnt=0}return i}var Wt=48e6;async function Gt(e,n,r,i){let a=new Map;if(n.groups.forEach((e,t)=>{let n=jt(e);n&&e.cycles>0&&a.set(t,n)}),a.size===0)return null;if(r.length===0)return{dbc:new Map,layouts:a,routes:[],notes:[],cache:new Map};let o=Ot(t(new Uint8Array(await r[0].arrayBuffer()))),s=[],c=new Map,l=new Map,u=0,d=new ht(e,i);for(let[t,r]of a){let a=n.groups[t],f=(e,t)=>{let n=e.signals.filter(e=>t===null?typeof e.mux!=`number`:e.mux===t),r=[];return n.forEach((e,t)=>{r.push({s:t,text:!1}),e.values&&r.push({s:t,text:!0})}),Lt({key:bt(e.id,e.extended),mux:t,signals:n,channels:r},r.map((e,t)=>t))},p=new Ht(e=>{let n=o.get(e);if(!n){let t=Bt(e);return c.set(e,t),t}let r=Vt(n,f(n,null));return s.push({model:t,m:r}),r});r.data.sdRecordId!==null&&d.want(r.data.sdRecordId);let m=Mt();for await(let s of yt(e,n,[t],d,i,It(a,r,o))){let e=await Nt(a,r,s.buf,s.n,s.start,s.size,d,m),t=(e,t)=>{let n=o.get(e.key);return n.signals.some(e=>e.mux===t)?f(n,t):null};for(let n of Ut(e,p,t)){let t=zt(n,e);if(u<0)continue;if((u+=t.time.length*(1+t.cols.length))>Wt){u=-1,l.clear();continue}let r=l.get(n);r||l.set(n,r=[]),r.push(t)}}}let f=[],p=new Map;for(let{model:e,m:t}of s)for(let n of[t.all,...t.byMux.values()]){if(!n)continue;let{route:t,n:r,t0:i,t1:a}=n;if(t.signals.length===0)continue;let s=o.get(t.key);u>=0&&p.set(t,l.get(n)??[]),f.push({model:e,route:t,group:{name:t.mux===null?s.name:`${s.name} [m=${t.mux}]`,channels:t.channels.map(e=>({name:e.text?`${t.signals[e.s].name} (text)`:t.signals[e.s].name,unit:e.text?``:t.signals[e.s].unit,text:e.text})),samples:r,time:{kind:`timestamps`},rateHz:r>1&&a>i?Math.round((r-1)/(a-i)*1e6)/1e6:null}})}let m=[];if(c.size){let e=[...c.values()].reduce((e,t)=>e+t.frames,0),t=[...c.keys()].map(e=>`0x${(e%2147483648).toString(16).toUpperCase()}`).join(`, `);m.push(`${e} frame${e===1?``:`s`} with ${c.size} id${c.size===1?``:`s`} not in the DBC ${e===1?`was`:`were`} skipped (${t}).`)}return{dbc:o,layouts:a,routes:f,notes:m,cache:p}}async function*Kt(e,t,n,r,i,a){let o=[];for(let e of i){let t=r.cache.get(e.route);if(!t){o.push(e);continue}r.cache.delete(e.route);let n=0;for(let r of t)yield{group:e.group,start:n,length:r.time.length,time:r.time,columns:e.sel.map(e=>r.cols[e])},n+=r.time.length}if(!o.length)return;let s=r.layouts.get(n),c=t.groups[n],l=new Map,u=new Map;for(let e of o){let t=Lt(e.route,e.sel);l.set(t,e.group);let n=u.get(e.route.key);n||u.set(e.route.key,n={all:null,byMux:new Map}),e.route.mux===null?n.all=t:n.byMux.set(e.route.mux,t)}let d=new Ht(e=>{let t=u.get(e);if(!t)return Bt(e);let n=Vt(r.dbc.get(e),t.all);return t.byMux.size||(n.sw=null),n}),f=new ht(e,a);s.data.sdRecordId!==null&&f.want(s.data.sdRecordId);let p=Mt();for await(let i of yt(e,t,[n],f,a,It(c,s,r.dbc))){let e=await Nt(c,s,i.buf,i.n,i.start,i.size,f,p);for(let t of Ut(e,d,(e,t)=>u.get(e.key).byMux.get(t)??null)){let n=t.n,r=zt(t,e);yield{group:l.get(t),start:n,length:r.time.length,time:r.time,columns:r.cols}}}}var qt=e=>Math.round(e*1e6)/1e6,Jt=e=>e.kind===`value`?e.type!==`bytes`:e.kind===`vlsd`&&e.type===`string`,Yt=e=>({name:e.name,unit:e.unit,text:e.type===`string`||e.kind===`vlsd`||e.conv.k===`text`});async function Xt(e,t){let n=t.master;if(!n||t.cycles<2)return null;if(n.kind===`vmaster`)return n.conv.k===`lin`&&n.conv.a>0?qt(1/n.conv.a):null;if(!t.sorted)return null;let r=L(t),i=t.cycles,a,o;if(t.stream[0]?.zip){let n=ot(t.stream.slice(0,1),r,Oe(t,[])),s=await st(e,t.stream[0],n,4096*r);if(i=Math.min(t.cycles,Math.floor(s.length/n)),i<2)return null;a=s.subarray(0,n),o=s.subarray((i-1)*n,i*n)}else a=await ut(e,t.stream,0,r),o=await ut(e,t.stream,t.cycles-1,r);if(!a||!o)return null;let s=new Float64Array(2);return I(n,a,1,r,t.recordIdSize,s,0),I(n,o,1,r,t.recordIdSize,s,1),O(n.conv,s),s[1]>s[0]?qt((i-1)/(s[1]-s[0])):null}async function Zt(e,t,n,r,i,a,o){let s;if(e.kind===`vlsd`){let a=new Float64Array(n);I({...e,type:`uint`},t,n,r,i,a),s=await o.strings(e,a)}else if(e.type===`string`)s=xe(e,t,n,r,i);else{let a=new Float64Array(n);I(e,t,n,r,i,a),e.conv.k===`text`?s=A(e.conv,a):(O(e.conv,a),s=a)}return Se(e,t,n,r,a,s),s}async function Qt(e,t,n,r,i,a,o,s){let c=e.recordIdSize,l=[];for(let i of t)l.push(await Zt(e.channels[i],n,r,a,c,c+e.dataBytes,s));return{group:o,time:gt(e,n,r,i,a),start:i,length:r,columns:l}}async function*$t(e,t){let n=e.plan.state,r=t.filter(e=>n.groups[e].route),i=t.filter(e=>!n.groups[e].route);if(r.length){let t=r.map(t=>({group:t,route:n.groups[t].route,sel:T(e,t)}));yield*Kt(e.io,n.model,n.groups[r[0]].model,n.bus,t,e.signal)}if(!i.length)return;let a=new ht(e.io,e.signal),o=new Map;for(let t of i){let r=n.groups[t],i=T(e,t).map(e=>r.channels[e]);for(let e of i){let t=n.model.groups[r.model].channels[e].sdRecordId;t!==null&&a.want(t)}o.set(r.model,{pg:t,cols:i})}let[s,{cols:c}]=o.entries().next().value,l=n.model.groups[s],u=o.size===1?Oe(l,c.map(e=>l.channels[e])):1/0;for await(let t of yt(e.io,n.model,[...o.keys()],a,e.signal,u)){let{pg:e,cols:r}=o.get(t.g);yield await Qt(n.model.groups[t.g],r,t.buf,t.n,t.start,t.size,e,a)}}function en(e){let t=e.plan.state,n=new Map;for(let r of e.selection){let e=t.model.groups[t.groups[r.group].model].dg;n.set(e,[...n.get(e)??[],r.group])}return[...n].sort((e,t)=>e[0]-t[0]).map(([,e])=>e)}var tn={...ee,async plan(e,t){let n=await t.read(0,64);if(a(n,`UnFinMF`))throw Error(`This MF4 was not finalized by its logger (it starts with UnFinMF). Finalize it with the logger software or asammdf, then open it again.`);let r=i(n.subarray(8,16)).replace(/\0/g,``).trim(),o=Number(r.replace(`.`,``).slice(0,3))>=400?await ge(t,r):await oe(t,n,r);De(o,t.size);let s=await Gt(t,o,e.companions.filter(e=>e.name.toLowerCase().endsWith(`.dbc`))),c=new Set(s?.layouts.keys()??[]),l=[],u=[],d=[...o.notes],f=0;for(let e=0;e<o.groups.length;e++){let n=o.groups[e];if(n.vlsdCg||n.cycles===0||c.has(e))continue;let r=[];if(n.channels.forEach((e,t)=>{Jt(e)?r.push(t):f++}),r.length!==0){for(let e of r){let t=n.channels[e].conv;t.k===`unsupported`&&d.push(`${n.channels[e].name}: ${t.what} is not supported; raw values are shown.`)}u.push({model:e,channels:r}),l.push({name:n.name,channels:r.map(e=>Yt(n.channels[e])),samples:n.cycles,time:n.master?{kind:`timestamps`}:{kind:`index`},rateHz:await Xt(t,n)})}}if(f&&d.push(`${f} byte-array channel${f===1?` was`:`s were`} skipped.`),s){if(s.routes.length===0&&s.dbc.size===0){if(l.length===0)throw Error(`This MF4 has raw CAN frames. Drop its .dbc file together with it to decode signals.`);d.push(`This MF4 also has raw CAN frames. Drop its .dbc file together with it to decode signals.`)}for(let e of s.routes)u.push({model:e.model,route:e.route}),l.push(e.group);d.push(...s.notes)}if(l.length===0)throw Error(`This MDF file has no channels with samples.`);let p={model:o,groups:u,bus:s};return{format:o.version,startTime:o.startTime,groups:l,meta:o.meta,events:[],notes:d,interleaved:!!s?.routes.length||o.groups.some(e=>!e.sorted&&!e.vlsdCg),state:p}},async*stream(e){for(let t of en(e))yield*$t(e,t)},streamGroup(e,t){return $t(e,[t])}};function nn(e){let n=[];for(let r of t(e).split(`\0`)){if(!r)continue;let e=r.split(``),t=parseFloat(e[0].split(``)[0]);Number.isFinite(t)&&n.push({onset:t,texts:e.slice(1).filter(e=>e.length>0)})}return n}function rn(e,t){let n=/^(\d\d)\.(\d\d)\.(\d\d)$/.exec(e),r=/^(\d\d)\.(\d\d)\.(\d\d)$/.exec(t);if(!n||!r)return null;let i=Number(n[3]);return`${i>=85?1900+i:2e3+i}-${n[2]}-${n[1]}T${r[1]}:${r[2]}:${r[3]}`}var an=e=>`${+e.toFixed(6)} Hz`;function on(e,t,n,r,i,a,o,s){let{bit:c,off:l}=e;if(a===2)for(let e=0;e<i;e++)o[s+e]=c*(l+t.getInt16(r+2*e,!0));else for(let e=0,t=r;e<i;e++,t+=3)o[s+e]=c*(l+((n[t]|n[t+1]<<8|n[t+2]<<16)<<8>>8))}var sn={...s,async plan(e,t){let n=await t.read(0,256),r=(e,t)=>i(n.subarray(e,e+t)).trim(),a=n[0]===255,o=parseInt(r(252,4),10),s=parseInt(r(184,8),10),c=r(192,44),l=/^(EDF|BDF)\+/.test(c),u=/^(EDF|BDF)\+D/.test(c),d=parseFloat(r(244,8));if(!(o>0)||s!==256*(o+1)||!(d>0))throw Error(`This EDF/BDF header is damaged.`);let f=await t.read(256,o*256),p=(e,t,n)=>i(f.subarray(e*o+t*n,e*o+t*(n+1))).trim(),m=a?3:2,h=[],g=0;for(let e=0;e<o;e++){let t=parseFloat(p(104,8,e)),n=parseFloat(p(112,8,e)),r=parseFloat(p(120,8,e)),i=parseFloat(p(128,8,e)),a=Number(p(216,8,e));if(!(Number.isInteger(a)&&a>=0))throw Error(`This EDF/BDF header is damaged (samples per record).`);let o=(n-t)/(i-r);h.push({label:p(0,16,e),unit:p(96,8,e),spr:a,offset:g,bit:o,off:n/o-i}),g+=a*m}let _=g;if(!(_>0&&s+_<=t.size))throw Error(`This EDF/BDF file is damaged (its data records do not fit in it).`);let v=Math.floor((t.size-s)/_),y=parseInt(r(236,8),10),b=[];y>=0?y>v&&(b.push(`The file is shorter than its header says: ${v} of ${y} data records were read.`),y=v):y=v;let x=l?h.flatMap((e,t)=>/^(EDF|BDF) Annotations$/.test(e.label)?[t]:[]):[],S=new Map;h.forEach((e,t)=>{!x.includes(t)&&e.spr>0&&S.set(e.spr,[...S.get(e.spr)??[],t])});let C=[...S.values()],ee=C.map(e=>{let t=h[e[0]].spr/d;return{name:an(t),channels:e.map(e=>({name:h[e].label,unit:h[e].unit})),samples:y*h[e[0]].spr,rateHz:t,time:u?{kind:`timestamps`}:{kind:`rate`,rate:t,start:0}}}),w={headerBytes:s,records:y,duration:d,recordBytes:_,bps:m,signals:h,groups:C,annotations:x,discontinuous:u};return{format:`${a?`BDF`:`EDF`}${l?u?`+D`:`+`:``}`,startTime:rn(r(168,8),r(176,8)),groups:ee,meta:{patient:r(8,80),recording:r(88,80)},events:[],notes:u?[`Discontinuous recording: each gap shows as a break in the traces.`,...b]:b,state:w}},async*stream(e){let t=e.plan.state,n=Math.max(1,Math.floor(l/t.recordBytes)),i=e.selection.map(e=>({g:e.group,chans:e.channels.map(n=>t.signals[t.groups[e.group][n]]),spr:t.signals[t.groups[e.group][0]].spr})),a=i.map(()=>0),o=0,s=NaN;for await(let c of e.io.windows(t.headerBytes,t.records*t.recordBytes,n*t.recordBytes)){e.signal?.throwIfAborted();let n=Math.floor(c.bytes.length/t.recordBytes);if(n===0)break;let l=r(c.bytes),u=new Float64Array(n),d=[];for(let e=0;e<n;e++)u[e]=(o+e)*t.duration,t.annotations.forEach((n,r)=>{let i=t.signals[n],a=e*t.recordBytes+i.offset,o=nn(c.bytes.subarray(a,a+i.spr*t.bps));r===0&&o.length&&(u[e]=o[0].onset);for(let e of o)for(let t of e.texts)d.push({time:e.onset,text:t})});let f=new Uint8Array(n),p=0;if(t.discontinuous)for(let e=0;e<n;e++){let n=e?u[e-1]+t.duration:s;n===n&&u[e]>n+1e-9&&(f[e]=1,p++)}for(let e=0;e<i.length;e++){let r=i[e],o=r.spr/t.duration,m=n*r.spr+p,h=t.discontinuous?new Float64Array(m):null,g=r.chans.map(()=>new Float64Array(m)),_=0;for(let e=0;e<n;e++){if(f[e]){h[_]=e?u[e-1]+t.duration:s;for(let e of g)e[_]=NaN;_++}if(h)for(let t=0;t<r.spr;t++)h[_+t]=u[e]+t/o;let n=e*t.recordBytes;r.chans.forEach((e,i)=>on(e,l,c.bytes,n+e.offset,r.spr,t.bps,g[i],_)),_+=r.spr}let v={group:r.g,time:h,start:a[e],length:m,columns:g};e===0&&d.length&&(v.events=d),a[e]+=m,yield v}s=u[n-1]+t.duration,o+=n}}},q={float32:4,double64:8,int8:1,int16:2,int32:4,int64:8};function J(e,t,n=0){let r=e.indexOf(`<${t}>`,n);if(r<0)return``;let i=e.indexOf(`</${t}>`,r);return i<0?``:e.slice(r+t.length+2,i).trim()}function cn(e,t){let n=[];for(let r=e.indexOf(`<${t}>`);r>=0;){let i=e.indexOf(`</${t}>`,r);if(i<0)break;n.push(e.slice(r,i+t.length+3)),r=e.indexOf(`<${t}>`,i)}return n}var ln=1e5,un=e=>e.fmt===`string`||q[e.fmt]!==void 0;function Y(e,t,r){let i=e[r];if((i===1||i===4||i===8)&&r+1+i<=e.length)return i===1?[e[r+1],2]:i===4?[t.getUint32(r+1,!0),5]:[n(t,r+1),9];throw Error(`This XDF file is damaged (bad length field).`)}function dn(e,t,n,r){if(n>=e.length)return-1;if(e[n++]===8&&(n+=8),r.fmt!==`string`)return n+q[r.fmt]*r.nch<=e.length?n+q[r.fmt]*r.nch:-1;for(let i=0;i<r.nch;i++){if(n>=e.length)return-1;let[r,i]=Y(e,t,n);n+=i+r}return n<=e.length?n:-1}async function*fn(e,t){let n=new Uint8Array;for await(let i of e.windows(4,e.size-4)){t?.throwIfAborted();let a=i.bytes,o=i.offset-n.length;if(n.length){let e=new Uint8Array(n.length+a.length);e.set(n),e.set(a,n.length),a=e}let s=r(a),c=0;for(;!(c+1>a.length);){let t=a[c];if(c+1+t>a.length)break;let[n,r]=Y(a,s,c),i=c+r+n;if(o+i>e.size)return;if(i>a.length)break;yield{tag:a[c+r]|a[c+r+1]<<8,body:a.subarray(c+r+2,i)},c=i}n=a.slice(c)}}function pn(e,t,n){let r=t-e.i0,i=n-e.t0;e.n++,e.si+=r,e.st+=i,e.sii+=r*r,e.sit+=r*i}function mn(e){let t=e.n*e.sii-e.si*e.si;e.b=t>0?(e.n*e.sit-e.si*e.st)/t:0,e.a=(e.st-e.b*e.si)/Math.max(1,e.n)}function hn(e){if(e.length===0)return[0,0];if(e.length===1)return[e[0][1],0];let t={i0:e[0][0],t0:0,n:0,si:0,st:0,sii:0,sit:0,a:0,b:0};for(let[n,r]of e)pn(t,n,r);return mn(t),[t.a-t.b*t.i0,t.b]}function gn(e,t,n){let r=t.t0+t.a+t.b*(n-t.i0);return r+e.c0+e.c1*r}var _n={...w,async plan(e,n){let i=new Map,a=``;for await(let e of fn(n)){let n=r(e.body);if(e.tag===1)a=t(e.body);else if(e.tag===2){let r=n.getUint32(0,!0),a=t(e.body.subarray(4)),o=parseInt(J(a,`channel_count`),10)||1;if(!(o>=1&&o<=ln))throw Error(`This XDF file is damaged (a stream with ${o} channels).`);let s=cn(a,`channel`);i.set(r,{id:r,name:J(a,`name`)||`Stream ${r}`,nch:o,srate:parseFloat(J(a,`nominal_srate`))||0,fmt:J(a,`channel_format`)||`float32`,labels:Array.from({length:o},(e,t)=>J(s[t]??``,`label`)||`Ch${t+1}`),units:Array.from({length:o},(e,t)=>J(s[t]??``,`unit`)),count:0,segs:[],clock:[],c0:0,c1:0,lastTs:NaN})}else if(e.tag===3){let t=i.get(n.getUint32(0,!0));if(!t||!un(t))continue;let[r,a]=Y(e.body,n,4),o=4+a,s=q[t.fmt],c=t.srate>0?Math.max(1,500/t.srate):1/0;for(let i=0;i<r&&!(dn(e.body,n,o,t)<0);i++){let r;if(e.body[o++]===8?(r=n.getFloat64(o,!0),o+=8):r=t.lastTs+(t.srate>0?1/t.srate:0),t.fmt===`string`)for(let r=0;r<t.nch;r++){let[t,r]=Y(e.body,n,o);o+=r+t}else o+=s*t.nch;if(t.srate>0){let e=t.segs[t.segs.length-1];(!e||r-t.lastTs>c)&&t.segs.push(e={i0:t.count,t0:r,n:0,si:0,st:0,sii:0,sit:0,a:0,b:0}),pn(e,t.count,r)}else t.count===0&&t.segs.push({i0:0,t0:r,n:1,si:0,st:0,sii:0,sit:0,a:0,b:0});t.lastTs=r,t.count++}}else if(e.tag===4){let e=i.get(n.getUint32(0,!0));e&&e.clock.push([n.getFloat64(4,!0),n.getFloat64(12,!0)])}}let o=[],s=[...i.values()].sort((e,t)=>e.id-t.id).filter(e=>(un(e)||o.push(`${e.name}: channel format ${e.fmt} is not supported; skipped.`),un(e))),c=1/0;for(let e of s){[e.c0,e.c1]=hn(e.clock);for(let t of e.segs)mn(t);if(e.count===0)continue;let t=e.srate>0?gn(e,e.segs[0],0):e.segs[0].t0+e.c0+e.c1*e.segs[0].t0;c=Math.min(c,t)}let l=h(s.map(e=>e.name),[]),u=s.map((e,t)=>({name:l[t],channels:e.labels.map((t,n)=>({name:t,unit:e.units[n],...e.fmt===`string`?{text:!0,sparse:!0}:{}})),samples:e.count,time:{kind:`timestamps`},rateHz:e.srate>0?e.srate:null,irregular:e.srate===0})),d=J(a,`version`);return{format:`XDF ${d||`1.0`}`,startTime:null,groups:u,meta:{header:d},events:[],notes:o,state:{streams:s,origin:Number.isFinite(c)?c:0}}},async*stream(e){let n=e.plan.state,i=8192,a=new Map,o=e=>e.sel.map(()=>e.s.fmt===`string`?Array(i):new Float64Array(i));for(let t of e.selection){let r=n.streams[t.group],s={g:t.group,s:r,sel:T(e,t.group),time:new Float64Array(i),cols:[],n:0,start:0,seg:0,i:0,raw:NaN};s.cols=o(s),a.set(r.id,s)}let s=e=>{let t={group:e.g,time:e.time.slice(0,e.n),start:e.start,length:e.n,columns:e.cols.map(t=>t.slice(0,e.n))};return e.start+=e.n,e.n=0,e.time=new Float64Array(i),e.cols=o(e),t};for await(let o of fn(e.io,e.signal)){if(o.tag!==3)continue;let e=r(o.body),c=a.get(e.getUint32(0,!0));if(!c)continue;let l=c.s,[u,d]=Y(o.body,e,4),f=4+d,p=q[l.fmt],m=[];for(let r=0;r<u&&!(dn(o.body,e,f,l)<0);r++){let r;o.body[f++]===8?(r=e.getFloat64(f,!0),f+=8):r=c.raw+(l.srate>0?1/l.srate:0),c.raw=r;let a;if(l.srate>0){for(;c.seg+1<l.segs.length&&l.segs[c.seg+1].i0<=c.i;)c.seg++;a=gn(l,l.segs[c.seg],c.i)}else a=r+l.c0+l.c1*r;if(c.time[c.n]=a-n.origin,l.fmt===`string`){let r=[];for(let n=0;n<l.nch;n++){let[n,i]=Y(o.body,e,f);r.push(t(o.body.subarray(f+i,f+i+n))),f+=i+n}c.sel.forEach((e,t)=>{c.cols[t][c.n]=r[e]}),m.push({time:a-n.origin,text:r.join(` `)})}else c.sel.forEach((t,n)=>{let r=f+t*p,i=c.cols[n];switch(l.fmt){case`float32`:i[c.n]=e.getFloat32(r,!0);break;case`double64`:i[c.n]=e.getFloat64(r,!0);break;case`int8`:i[c.n]=e.getInt8(r);break;case`int16`:i[c.n]=e.getInt16(r,!0);break;case`int32`:i[c.n]=e.getInt32(r,!0);break;default:i[c.n]=e.getInt32(r+4,!0)*4294967296+e.getUint32(r,!0)}}),f+=p*l.nch;c.i++,++c.n===i&&(yield s(c))}m.length&&(yield{group:c.g,time:new Float64Array,start:c.start,length:0,columns:c.sel.map(()=>new Float64Array),events:m})}for(let e of a.values())e.n&&(yield s(e))}},vn=2,yn=8,bn=4,xn=32,Sn=64,Cn=4713,wn=4714,X=32,Tn=68,Z={1:1,2:2,3:4,4:8,5:1,6:2,7:4,8:8,9:4,10:8,25:4,26:8,33:1,68:16},En={0:5,1:1,2:6,3:2,4:7,5:3,6:8,7:4,8:9,9:10,4294967295:Tn},Dn=65536,On=65536,kn=(e,t,r)=>r?C(e,t+8,r)+n(e,t,r)/2**64:C(e,t,r)+n(e,t+8,r)/2**64;function An(e,r,i,a,o){switch(a){case X:{let n=e.getUint32(i,o);return[t(r.subarray(i+4,i+4+n)),4+n]}case 1:return[e.getInt8(i),1];case 2:return[e.getInt16(i,o),2];case 3:return[e.getInt32(i,o),4];case 4:return[C(e,i,o),8];case 5:return[e.getUint8(i),1];case 6:return[e.getUint16(i,o),2];case 7:return[e.getUint32(i,o),4];case 8:return[n(e,i,o),8];case 9:case 25:return[e.getFloat32(i,o),4];case 10:case 26:return[e.getFloat64(i,o),8];case 33:return[e.getUint8(i)!==0,1];case Tn:return[kn(e,i,o),16];default:throw Error(`This TDMS file has a property of type ${a}, which Kymoscope cannot read.`)}}function jn(e){let t=/^\/'((?:[^']|'')*)'(?:\/'((?:[^']|'')*)')?$/.exec(e);return t?[t[1].replace(/''/g,`'`),(t[2]??``).replace(/''/g,`'`)]:null}var Mn=4294967295;function Nn(e){if(e.has(`NI_Number_Of_Scales`))return Number(e.get(`NI_Number_Of_Scales`));let t=0;for(let n of e.keys()){let e=/^NI_Scale\[(\d+)\]_Scale_Type$/.exec(n);e&&(t=Math.max(t,Number(e[1])+1))}return t}function Pn(e,t,n){let r=e.find(e=>Nn(e)>0);if(!r||r.get(`NI_Scaling_Status`)===`scaled`)return null;let i=(e,a)=>{if(e===Mn||e<0||a>8)return e=>e;let o=r.get(`NI_Scale[${e}]_Scale_Type`);if(o===void 0)return e=>e;if(o===`Linear`){let t=Number(r.get(`NI_Scale[${e}]_Linear_Slope`)),n=Number(r.get(`NI_Scale[${e}]_Linear_Y_Intercept`)??0),o=i(Number(r.get(`NI_Scale[${e}]_Linear_Input_Source`)??Mn),a+1);return o&&(e=>t*o(e)+n)}if(o===`Polynomial`){let o=Number(r.get(`NI_Scale[${e}]_Polynomial_Coefficients_Size`)??4);if(!(Number.isInteger(o)&&o>=0&&o<=64))return t.push(`${n}: an NI polynomial scale with ${o} coefficients is not supported; raw values are shown.`),null;let s=Array.from({length:o},(t,n)=>Number(r.get(`NI_Scale[${e}]_Polynomial_Coefficients[${n}]`))),c=i(Number(r.get(`NI_Scale[${e}]_Polynomial_Input_Source`)??Mn),a+1);return c&&(e=>{let t=c(e),n=0;for(let e=o-1;e>=0;e--)n=n*t+s[e];return n})}return t.push(`${n}: NI scale type ${String(o)} is not supported; raw values are shown.`),null};return i(Nn(r)-1,0)}var Fn={1:Int8Array,2:Int16Array,3:Int32Array,5:Uint8Array,6:Uint16Array,7:Uint32Array,9:Float32Array,10:Float64Array,25:Float32Array,26:Float64Array,33:Uint8Array};function In(e,t,r,i,a,o,s,c){let l=Fn[e];if(l&&o&&i===Z[e]&&(t.byteOffset+r)%i===0){s.set(new l(t.buffer,t.byteOffset+r,a),c);return}switch(e){case 1:for(let e=0;e<a;e++,r+=i)s[c+e]=t.getInt8(r);return;case 2:for(let e=0;e<a;e++,r+=i)s[c+e]=t.getInt16(r,o);return;case 3:for(let e=0;e<a;e++,r+=i)s[c+e]=t.getInt32(r,o);return;case 4:for(let e=0;e<a;e++,r+=i)s[c+e]=C(t,r,o);return;case 5:case 33:for(let e=0;e<a;e++,r+=i)s[c+e]=t.getUint8(r);return;case 6:for(let e=0;e<a;e++,r+=i)s[c+e]=t.getUint16(r,o);return;case 7:for(let e=0;e<a;e++,r+=i)s[c+e]=t.getUint32(r,o);return;case 8:for(let e=0;e<a;e++,r+=i)s[c+e]=n(t,r,o);return;case 9:case 25:for(let e=0;e<a;e++,r+=i)s[c+e]=t.getFloat32(r,o);return;case 10:case 26:for(let e=0;e<a;e++,r+=i)s[c+e]=t.getFloat64(r,o);return;case Tn:for(let e=0;e<a;e++,r+=i)s[c+e]=kn(t,r,o);return;default:s.fill(NaN,c,c+a)}}async function Ln(e,i,a){let o=new Map,s=[],c=[],l=new Map,u=new Map,d=i??e,f=0,p=0;for(;f+28<=e.size&&p+28<=d.size;){let m=i?p:f,h=await d.read(m,28),g=r(h);if(!(h[0]===84&&h[1]===68&&h[2]===83&&(h[3]===109||h[3]===104)))throw Error(`This TDMS file is damaged (no segment lead-in where one should be).`);let _=g.getUint32(4,!0),v=!(_&Sn),y=n(g,12,v),b=n(g,20,v),x=y>=2**53?e.size:Math.min(e.size,f+28+y);if(b>x-f-28)throw Error(`This TDMS file is damaged (segment metadata longer than its segment).`);if(_&vn){let e=await d.read(m+28,b),i=r(e);_&bn&&(c=[],l=new Map);let s=0,f=i.getUint32(s,v);s+=4;for(let r=0;r<f;r++){let r=i.getUint32(s,v),d=t(e.subarray(s+4,s+4+r));s+=4+r;let f=jn(d),p=o.get(d);p||o.set(d,p={path:d,group:f?.[0]??``,name:f?.[1]??``,type:0,props:new Map,pieces:[],total:0});let m=i.getUint32(s,v);s+=4;let h=null;if(m===4294967295)h=null;else if(m===0)h=u.get(p)??null;else if(m===Cn||m===wn){let e=n(i,s+8,v),t=i.getUint32(s+16,v),r=m===Cn?20:17,o=s+20,c=En[i.getUint32(o,v)]??0,l=i.getUint32(o+8,v);s=o+t*r;let u=i.getUint32(s,v);s+=4;let d=0;for(let e=0;e<u;e++)d+=i.getUint32(s+4*e,v);s+=4*u,m===wn?a.push(`${p.name}: DAQmx digital line data is not supported; skipped.`):(t>1&&a.push(`${p.name}: only the first of its ${t} DAQmx scalers is read.`),h={type:c,count:e,bytes:0,daqmx:{byteOffset:l,stride:d}})}else{let e=i.getUint32(s,v),t=n(i,s+8,v),r=e===X?n(i,s+16,v):t*(Z[e]??0);s+=m-4,h={type:e,count:t,bytes:r,daqmx:null}}h&&(p.type=h.type,u.set(p,h));let g=i.getUint32(s,v);s+=4;for(let n=0;n<g;n++){let n=i.getUint32(s,v),r=t(e.subarray(s+4,s+4+n));s+=4+n;let a=i.getUint32(s,v);s+=4;let[o,c]=An(i,e,s,a,v);p.props.set(r,o),s+=c}let _=l.get(p);_===void 0?l.set(p,c.push({obj:p,idx:h})-1):c[_].idx=h}}if(_&yn){let e=f+28+b,t=c.filter(e=>e.idx&&e.idx.count>0),n=t.filter(e=>e.idx.daqmx),r=(_&xn)!==0,i=0,a=0;n.length?(a=n[0].idx.daqmx.stride,i=n[0].idx.count*a):r?(a=t.reduce((e,t)=>e+(Z[t.idx.type]??0),0),i=(t[0]?.idx.count??0)*a):i=t.reduce((e,t)=>e+t.idx.bytes,0);let o=i>0?Math.floor((x-e)/i):0,l=s.push({rawStart:e,chunkSize:i,chunks:o,le:v})-1,u=0;for(let e of t){let t=e.idx,n=Z[t.type]??0,s=t.daqmx?{seg:l,count:t.count,offset:t.daqmx.byteOffset,bytes:0,stride:a,type:t.type}:{seg:l,count:t.count,offset:u,bytes:t.bytes,stride:r?a:n,type:t.type};t.daqmx||(u+=r?n:t.bytes),s.type===X?s.count=Math.min(s.count,Math.floor(s.bytes/4)):n>0&&(s.count=Math.min(s.count,s.stride>0?Math.max(0,Math.floor((i-s.offset-n)/s.stride)+1):0)),e.obj.pieces.push(s),o&&(e.obj.total+=s.count*o)}}if(f=x,p+=28+b,x>=e.size)break}return{objs:[...o.values()],segments:s}}var Rn={...S,async plan(e,t){let n=e.companions.find(e=>e.name.toLowerCase().endsWith(`.tdms_index`)),i=[],{objs:a,segments:o}=await Ln(t,n?new x(n):null,i),s=a.find(e=>e.path===`/`)?.props,c=a.filter(e=>e.name&&e.total>0&&(e.type===X||Z[e.type])),l=new Set(c);for(let e of a)e.name&&e.total>0&&!l.has(e)&&i.push(`${e.name}: TDMS data type ${e.type} is not supported; skipped.`);let u=c.map(e=>e.props.get(`wf_start_time`)).filter(e=>typeof e==`number`),d=u.reduce((e,t)=>Math.min(e,t),u.length?1/0:0),f=new Map;for(let e of c){let t=`${e.total}|${e.props.get(`wf_increment`)??``}`,n=f.get(e.group)??new Map,r=n.get(t);r?r.push(e):n.set(t,[e]),f.set(e.group,n)}let p=[],m=[];for(let[e,t]of f)for(let n of t.values()){let r=n[0].props.get(`wf_increment`),i=typeof r==`number`&&r>0?1/r:null,a=i?null:n.find(e=>e.type===Tn)??n.find(e=>e.type!==X&&/^(time|timestamp|t)$/i.test(e.name))??null,o=n.filter(e=>e!==a),s=n[0].props.get(`wf_start_time`),c=i?Number(n[0].props.get(`wf_start_offset`)??0)+(typeof s==`number`?s-d:0):0;p.push({name:t.size===1?e:`${e} (${i?+i.toFixed(6):n[0].total} ${i?`Hz`:`samples`})`,channels:o.map(e=>({name:e.name,unit:String(e.props.get(`unit_string`)??``),text:e.type===X})),samples:n[0].total,time:i?{kind:`rate`,rate:i,start:c}:a?{kind:`timestamps`}:{kind:`index`},rateHz:i}),m.push({channels:o,time:a,origin:0})}if(p.length===0)throw Error(`This TDMS file has no channels with data.`);let h=[];for(let e of m){if(!e.time)continue;let n=e.time.pieces[0],i=o[n.seg],a=await t.read(i.rawStart+n.offset,Z[n.type]??8),s=new Float64Array(1);In(n.type,r(a),0,0,1,i.le,s,0),h.push(s[0])}let g=h.reduce((e,t)=>Math.min(e,t),h.length?1/0:0);for(let e of m)e.origin=g;let _=new Date(Date.UTC(1904,0,1)+d*1e3),v=d&&Number.isFinite(_.getTime())?_.toISOString():null,y={objs:a,segments:o,groups:m},b={};for(let[e,t]of s??[])typeof t==`string`&&(b[e]=t);return{format:`TDMS`,startTime:v,groups:p,meta:b,events:[],notes:i,state:y}},async*stream(e){for(let t of e.selection)yield*Bn(e,t.group)},streamGroup:(e,t)=>Bn(e,t)};function zn(e,t,n,r,i,a){let o=0;for(;o<i&&r.pi<t.pieces.length;){let s=t.pieces[r.pi],c=e.segments[s.seg];if(r.chunk>=c.chunks){r.pi++,r.chunk=0,r.row=0;continue}let l=Math.min(i-o,s.count-r.row),u=c.rawStart+r.chunk*c.chunkSize+s.offset;if(s.type===X)a.push({ch:n,at:u,end:u+s.bytes,rows:l,first:r.row,out:o,piece:s,le:c.le,range:0});else{let e=u+r.row*s.stride;a.push({ch:n,at:e,end:e+(l-1)*s.stride+Z[s.type],rows:l,first:r.row,out:o,piece:s,le:c.le,range:0})}o+=l,r.row+=l,r.row>=s.count&&(r.chunk++,r.row=0)}}async function*Bn(e,n){let i=e.plan.state,a=i.groups[n],o=T(e,n).map(e=>a.channels[e]),s=a.time?[a.time,...o]:o;if(!s.length)return;let c=new Map(i.objs.map(e=>[e.path,e.props])),l=e=>c.get(e)??new Map,u=l(`/`),d=s.map(e=>Pn([e.props,l(`/'${e.group.replace(/'/g,`''`)}'`),u],[],e.name)),f=s.map(()=>({pi:0,chunk:0,row:0})),p=s.reduce((e,t)=>Math.min(e,t.total),1/0);for(let o=0;o<p;){e.signal?.throwIfAborted();let c=Math.min(Dn,p-o),l=[];s.forEach((e,t)=>zn(i,e,t,f[t],c,l));let u=l.slice().sort((e,t)=>e.at-t.at),m=[];for(let e of u){let t=m[m.length-1];t&&e.at<=t.end+On&&Math.max(t.end,e.end)-t.at<=16777216?t.end=Math.max(t.end,e.end):m.push({at:e.at,end:e.end}),e.range=m.length-1}let h=[];for(let t of m)h.push(await e.io.slice(t.at,t.end-t.at));let g=h.map(r),_=s.map(e=>e.type===X?Array(c).fill(null):new Float64Array(c).fill(NaN));for(let e of l){let n=e.at-m[e.range].at,r=e.piece;if(r.type===X){let i=h[e.range],a=g[e.range],o=n+4*r.count,s=_[e.ch];for(let r=0;r<e.rows;r++){let c=e.first+r,l=c===0?0:a.getUint32(n+4*(c-1),e.le),u=a.getUint32(n+4*c,e.le);s[e.out+r]=t(i.subarray(o+l,o+u))}}else In(r.type,g[e.range],n,r.stride,e.rows,e.le,_[e.ch],e.out)}for(let e=0;e<s.length;e++){let t=d[e],n=_[e];if(t&&n instanceof Float64Array)for(let e=0;e<c;e++)n[e]=t(n[e])}let v=null;if(a.time){v=_.shift();for(let e=0;e<c;e++)v[e]-=a.origin}yield{group:n,time:v,start:o,length:c,columns:_},o+=c}}var Vn=e=>!!e&&typeof e.keys==`function`,Hn=1e5;function Un(){let e=new Set,t=0,n=!1;return{enter(t){let r=null;try{r=t.create_reference?Array.prototype.join.call(t.create_reference().ref_data,`,`):null}catch{r=null}return r===null?!0:e.has(r)?(n=!0,!1):(e.add(r),!0)},count:()=>++t<=Hn,note:()=>t>1e5?`This file has more than ${Hn.toLocaleString(`en-US`)} objects (or links that repeat its groups); only the first were read.`:n?`Some groups of this file link back to a group already read; each was read once.`:null}}function Wn(e,t,n,r){return t.reduce((e,t)=>e*t,1)*Math.max(1,e.metadata.size||1)>(r?n*1032+1024:n)}var Gn=e=>!!e&&typeof e.slice==`function`,Kn=null,qn=null,Jn=new WeakMap;function Yn(){!Kn||qn||(qn=Kn(),qn.catch(()=>{qn=null}))}function Xn(e){if(!Kn)return Promise.reject(Error(`HDF5 and MAT 7.3 files are read in the import worker, and this environment has no workers.`));Yn();let t=Jn.get(e);return t||(t=qn.then(t=>t(e)).then(e=>({root:e.root,close:()=>{}})),Jn.set(e,t),t.catch(()=>Jn.delete(e))),t}var Zn=new WeakMap;function Qn(e,t,n){let r=Zn.get(e);r||Zn.set(e,r=new Map);let i=r.get(t);return i||r.set(t,i=n??e.get(t)),i}function Q(e){return e instanceof Float64Array?e:e instanceof BigInt64Array||e instanceof BigUint64Array?Float64Array.from(e,e=>Number(e)):ArrayBuffer.isView(e)?new Float64Array(e):Float64Array.from(e)}var $n={s:1,sec:1,second:1,seconds:1,ms:.001,msec:.001,us:1e-6,µs:1e-6,ns:1e-9};function er(e,...t){for(let n of t){let t=e[n]?.value;if(typeof t==`string`)return t;if(Array.isArray(t)&&typeof t[0]==`string`)return t[0]}return``}function tr(e,...t){for(let n of t){let t=e[n]?.value,r=typeof t==`number`?t:ArrayBuffer.isView(t)?Number(t[0]):NaN;if(Number.isFinite(r))return r}return null}var nr=0,rr=1,ir=3,ar=6,or=new Set([1,2,3,4,5,6]),sr=/^(time|t|timestamps?|.*[_ ]time|time[_ ].*)$/i,cr=[`sampling_rate`,`sample_rate`,`samplerate`,`sampleRate`,`fs`,`Fs`,`rate`];function lr(e,t,n,r,i,a,o=0){i.set(n,t.attrs);for(let s of t.keys()){if(!a.count())return;let c=n===`/`?`/${s}`:`${n}/${s}`,l=t.get(s);if(Vn(l))o<16&&a.enter(l)&&lr(e,l,c,r,i,a,o+1);else if(Gn(l)){let t=Qn(e,c,l);r.push({path:c,parent:n,name:s,ds:t,attrs:t.attrs})}}}var ur=e=>e===`/`?`root`:e.slice(1),dr=e=>Math.max(4096,Math.min(1<<20,Math.floor((8<<20)/(8*Math.max(1,e)))));async function fr(e,t){let n=Qn(e,t.path);if(t.col===null)return Q(n.slice([[0,1]]))[0]*t.factor;let r=n.slice([[0,1]]);return Number(r[0][t.col])*t.factor}var pr={...d,async plan(e){let t=await Xn(e.main);try{let n=[],r=new Map,i=Un();i.enter(t.root),lr(t.root,t.root,`/`,n,r,i);let a=[],o=i.note();o&&a.push(o);let s=new Map,c=[],l=0;for(let t of n){let n=t.ds.metadata.shape??[],r=t.ds.metadata.type,i=t.ds.metadata.chunks?t.ds.filters??[]:[],o=i.find(e=>!or.has(e.id)),u=!o;if(u&&i.length>0&&n.length>0&&n.every(e=>e>0))try{t.ds.slice(n.map(()=>[0,1]))}catch{u=!1}if(!u){a.push(`${t.path}: compressed with a filter Kymoscope cannot read${o?` (${o.name||o.id})`:``}; skipped.`);continue}if(Wn(t.ds,n,e.main.size,i.length>0)){a.push(`${t.path}: larger than the file can hold (never written, or damaged); skipped.`);continue}if(n.length===1&&n[0]>1&&(r===nr||r===rr||r===ir)){let e=`${t.parent}|${n[0]}`,r=s.get(e)??{parent:t.parent,n:n[0],leaves:[]};r.leaves.push(t),s.set(e,r)}else if(n.length===2&&n[0]>1&&n[1]<=4096&&(r===nr||r===rr)){let e=tr(t.attrs,...cr);c.push({name:ur(t.path),kind:`matrix`,rows:n[0],rate:e,time:null,origin:0,cols:Array.from({length:n[1]},(e,n)=>({path:t.path,col:n,text:!1,factor:1}))})}else if(n.length===1&&r===ar){let e=(t.ds.metadata.compound_type?.members??[]).flatMap((e,n)=>e.type===nr||e.type===rr?[{path:t.path,col:n,text:!1,factor:1,name:e.name}]:[]),r=e.find(e=>sr.test(e.name));c.push({name:ur(t.path),kind:`compound`,rows:n[0],rate:null,origin:0,time:r??null,cols:e.filter(e=>e!==r)})}else l++}for(let e of s.values()){let t=[...s.values()].filter(t=>t.parent===e.parent).length>1,n=e.leaves.find(e=>er(e.attrs,`CLASS`)===`DIMENSION_SCALE`)??e.leaves.find(e=>sr.test(e.name)&&e.ds.metadata.type!==ir),i=n?$n[er(n.attrs,`units`,`unit`,`Units`)]??1:1,a=n?null:tr(r.get(e.parent)??{},...cr);c.push({name:t?`${ur(e.parent)} (${e.n} rows)`:ur(e.parent),kind:`vectors`,rows:e.n,rate:a,origin:0,time:n?{path:n.path,col:null,text:!1,factor:i}:null,cols:e.leaves.filter(e=>e!==n).map(e=>({path:e.path,col:null,text:e.ds.metadata.type===ir,factor:1}))})}l&&a.push(`${l} dataset${l===1?``:`s`} with other shapes or types (images, references, 3-D) skipped.`),c.sort((e,t)=>e.name.localeCompare(t.name));let u=c.map((e,t)=>e.time||e.rate?t:-1).filter(e=>e>=0),d=1/0;for(let e of c)e.time&&(d=Math.min(d,await fr(t.root,e.time)));for(let e of c)e.origin=Number.isFinite(d)?d:0;let f=new Map(n.map(e=>[e.path,e]));for(let e of c)e.chunk=[...e.cols,...e.time?[e.time]:[]].reduce((e,t)=>Math.max(e,f.get(t.path).ds.metadata.chunks?.[0]??0),0);let p=e=>er(f.get(e.path).attrs,`units`,`unit`,`Units`,`UNITS`),m=(e,t)=>e.kind===`matrix`?`${e.name.split(`/`).pop()}[${t.col+1}]`:e.kind===`compound`?f.get(t.path).ds.metadata.compound_type.members[t.col].name:t.path.split(`/`).pop(),h=c.map(e=>({name:e.name,channels:e.cols.map(t=>({name:m(e,t),unit:e.kind===`vectors`?p(t):``,text:t.text})),samples:e.rows,time:e.time?{kind:`timestamps`}:e.rate?{kind:`rate`,rate:e.rate,start:0}:{kind:`index`},rateHz:e.rate}));if(h.length===0)throw Error(`This HDF5 file has no datasets Kymoscope can plot.`);let g=h.length>20||h.length>1&&u.length<h.length,_=g?u.length?u:[c.reduce((e,t,n)=>t.rows*t.cols.length>c[e].rows*c[e].cols.length?n:e,0)]:void 0;return g&&a.push(`Only the groups with a time base are read unless you choose others in the channel picker.`),{format:`HDF5`,startTime:null,groups:h,meta:{},events:[],notes:a,pick:g,defaultGroups:_,state:{groups:c}}}finally{t.close()}},async*stream(e){for(let t of e.selection)yield*mr(e,t.group)},streamGroup:(e,t)=>mr(e,t)};async function*mr(e,t){let n=e.plan.state.groups[t],r=T(e,t).map(e=>n.cols[e]),i=await Xn(e.files.main);try{let a=n.chunk??0,o=a>0?Math.max(1,Math.min(Math.floor((1<<20)/a),Math.ceil(dr(r.length+1)/a)))*a:dr(r.length+1);for(let a=0;a<n.rows;a+=o){e.signal?.throwIfAborted();let s=Math.min(n.rows,a+o),c=s-a,l=null,u=e=>{let t=Qn(i.root,e.path);if(n.kind===`vectors`){let n=t.slice([[a,s]]);if(e.text)return Array.from(n,e=>e==null?null:String(e));let r=Q(n);if(e.factor!==1)for(let t=0;t<c;t++)r[t]*=e.factor;return r}let r=new Float64Array(c);if(n.kind===`matrix`){let n=(t.shape??[0,1])[1],i=l??=t.slice([[a,s],[0,n]]);for(let t=0;t<c;t++)r[t]=Number(i[t*n+e.col])}else{let n=l??=t.slice([[a,s]]);for(let t=0;t<c;t++)r[t]=Number(n[t][e.col])*e.factor}return r},d=null;if(n.time){d=u(n.time);for(let e=0;e<c;e++)d[e]-=n.origin}yield{group:t,time:d,start:a,length:c,columns:r.map(u)}}}finally{i.close()}}var hr=/^(time|t|tout|timestamps?)$/i,gr=/^(fs|sample_?rate|sampling_?rate|rate|samplerate)$/i,_r=e=>e.slice(e.lastIndexOf(`.`)+1),vr=e=>e.includes(`.`)?e.slice(0,e.lastIndexOf(`.`)):``;function yr(e,t){let n=/^(.*)\.values(\[\d+\])?$/.exec(e.name),r=n&&(t.get(`${n[1]}.label`)||t.get(`${n[1]}.blockName`));return r?{...e,name:`${r}${n[2]??``}`}:e}function br(e,t,n){let r=new Map;for(let t of e){if(!(t.length>1))continue;let e=r.get(t.length);e?e.push(t):r.set(t.length,[t])}let i=[...n].filter(([e])=>gr.test(_r(e))),a=i.length===1?i[0][1]:null,o=[];for(let[e,n]of r){let r=n.find(e=>hr.test(_r(e.name))||/(_time|\.Time)$/.test(e.name))??null;o.push({name:r?vr(r.name)||r.name:`${e} samples`,channels:n.filter(e=>e!==r).map(e=>yr(e,t)),time:r,rate:r?null:a,origin:0})}return o}function xr(e){return e.map(e=>({name:e.name,channels:e.channels.map(e=>({name:e.name,unit:``})),samples:e.channels[0]?.length??e.time?.length??0,time:e.time?{kind:`timestamps`}:e.rate?{kind:`rate`,rate:e.rate,start:0}:{kind:`index`},rateHz:e.rate}))}async function Sr(e){let t=1/0;for(let n of e)n.time&&(t=Math.min(t,(await n.time.read(0,1))[0]));for(let n of e)n.origin=Number.isFinite(t)?t:0}var Cr=class{#e;size;constructor(e){this.#e=e,this.size=e.size}read(e,t){return t>=65536?this.#e.slice(e,t):this.#e.read(e,t)}release(){}},wr=class{#e;#t;#n;#r=null;keep=!0;size;constructor(e,t,n,r){this.#e=e,this.#t=t,this.#n=n,this.#r=r,this.size=r.length}async read(e,t){return this.#r??=await K(await this.#e.slice(this.#t,this.#n),this.size,this.size),this.#r.subarray(e,e+t)}release(){this.keep||(this.#r=null)}},Tr={1:1,2:1,3:2,4:2,5:4,6:4,7:4,9:8,12:8,13:8};function Er(e,t,n,i,a=1){let o=r(t),s=i.length,c=Tr[e]*a;if(e===9&&a===1&&n){i.set(t.byteOffset%8==0?new Float64Array(t.buffer,t.byteOffset,s):new Float64Array(t.slice(0,s*8).buffer));return}switch(e){case 1:for(let e=0,t=0;e<s;e++,t+=c)i[e]=o.getInt8(t);return;case 2:for(let e=0,t=0;e<s;e++,t+=c)i[e]=o.getUint8(t);return;case 3:for(let e=0,t=0;e<s;e++,t+=c)i[e]=o.getInt16(t,n);return;case 4:for(let e=0,t=0;e<s;e++,t+=c)i[e]=o.getUint16(t,n);return;case 5:for(let e=0,t=0;e<s;e++,t+=c)i[e]=o.getInt32(t,n);return;case 6:for(let e=0,t=0;e<s;e++,t+=c)i[e]=o.getUint32(t,n);return;case 7:for(let e=0,t=0;e<s;e++,t+=c)i[e]=o.getFloat32(t,n);return;case 9:for(let e=0,t=0;e<s;e++,t+=c)i[e]=o.getFloat64(t,n);return;case 12:for(let e=0,t=0;e<s;e++,t+=c)i[e]=o.getInt32(t+(n?4:0),n)*4294967296+o.getUint32(t+(n?0:4),n);return;case 13:for(let e=0,t=0;e<s;e++,t+=c)i[e]=o.getUint32(t+(n?4:0),n)*4294967296+o.getUint32(t+(n?0:4),n);return;default:i.fill(NaN)}}async function $(e,t,n){let i=r(await e.read(t,8)),a=i.getUint32(0,n);if(a>>>16)return{type:a&65535,bytes:a>>>16,data:t+4,next:t+8};let o=i.getUint32(4,n);return{type:a,bytes:o,data:t+8,next:a===15?t+8+o:t+8+o+(8-o%8)%8}}function Dr(e,t,n,r,i){let[a,o]=t,s=Tr[r.type];if(!s)return[];let c=(e,t)=>async(a,o)=>{let c=new Float64Array(o-a);return t===1?Er(r.type,await n.read(r.data+(e+a)*s,(o-a)*s),i,c):Er(r.type,await n.read(r.data+(e+a*t)*s,((o-a-1)*t+1)*s),i,c,t),c};return a===1||o===1?[{name:e,length:a*o,read:c(0,1)}]:a>=o?Array.from({length:o},(t,n)=>({name:`${e}[${n+1}]`,length:a,read:c(n*a,1)})):Array.from({length:a},(t,n)=>({name:`${e}[${n+1}]`,length:o,read:c(n,a)}))}async function Or(n,a,o,s,c,l,u){let d=a,f=await $(n,d,o),p=r(await n.read(f.data,8)).getUint32(0,o),m=p&255;d=f.next;let h=await $(n,d,o);if(h.bytes>128){l.notes.push(`A MAT variable with more than 32 dimensions was skipped (damaged).`);return}let g=r(await n.read(h.data,h.bytes)),_=Array.from({length:h.bytes/4},(e,t)=>g.getInt32(4*t,o));d=h.next;let v=await $(n,d,o),y=i(await n.read(v.data,v.bytes));d=v.next;let b=c??y,x=s?`${s}.${b}`:b,S=_.reduce((e,t)=>e*t,1);if(m>=6&&m<=15){if(S===0)return;let e=await $(n,d,o);if(p&2048&&l.notes.push(`${x}: the imaginary part was skipped.`),_.length>2){l.notes.push(`${x}: arrays with more than two dimensions are skipped.`);return}if(!Tr[e.type])return;if(!(S>0)||S*Tr[e.type]>e.bytes||e.data+e.bytes>n.size){l.notes.push(`${x}: its data is shorter than its dimensions (damaged); skipped.`);return}if(S===1){let t=new Float64Array(1);Er(e.type,await n.read(e.data,Tr[e.type]??8),o,t),l.scalars.set(x,t[0]);return}l.channels.push(...Dr(x,_,n,e,o));return}if(m===4){let e=await $(n,d,o);if(e.bytes>kr)return;let r=await n.read(e.data,e.bytes),i=e.type===3||e.type===4||e.type===17?new TextDecoder(o?`utf-16le`:`utf-16be`).decode(r.subarray(0,r.length&-2)):t(r);_[0]<=1&&l.strings.set(x,i);return}if(m===2){let t=await $(n,d,o),i=r(await n.read(t.data,4)).getInt32(0,o);d=t.next;let a=await $(n,d,o);if(!(i>0))return;let s=await n.read(a.data,a.bytes),c=Array.from({length:Math.floor(s.length/i)},(t,n)=>e(s.subarray(n*i,(n+1)*i)));if(d=a.next,c.length===0||S*c.length*8>n.size-d){S>0&&c.length>0&&l.notes.push(`${x}: its fields are longer than the file (damaged); skipped.`);return}for(let e=0;e<S;e++){let t=S>1?`${x}(${e+1})`:x;for(let e of c){let r=await $(n,d,o);r.type===14&&r.bytes>0&&u<16&&await Or(n,r.data,o,t,e,l,u+1),d=r.next}}return}m===1?l.notes.push(`${x}: cell arrays are skipped.`):m===5?l.notes.push(`${x}: sparse arrays are skipped.`):l.notes.includes(Ar)||l.notes.push(Ar)}var kr=1<<17,Ar=`MATLAB objects (timeseries, SimulationOutput) were skipped: save them as 'Structure with time' or as structs.`,jr=512<<20;async function Mr(e){let t=i((await e.read(0,128)).subarray(126,128))===`IM`,n={channels:[],strings:new Map,scalars:new Map,notes:[],sources:[]},a=new Cr(e),o=0;for(let i=128;i+8<=e.size;){let s=await $(a,i,t);if(s.type===15){if(s.bytes>1<<30)throw Error(`A compressed variable in this MAT file is over 1 GB; save it with -v7.3 to open it here.`);let i=await e.slice(s.data,s.bytes),a=await K(i,-1,8),c=a.length<8?0:8+r(a).getUint32(4,t);if(c>g(s.bytes))throw Error(`A compressed variable in this MAT file is damaged.`);if(c>1<<30)throw Error(`A compressed variable in this MAT file is over 1 GB; save it with -v7.3 to open it here.`);let l=await K(i,c,c),u=new wr(e,s.data,s.bytes,l);n.sources.push(u),o+=l.length;let d=await $(u,0,t);if(d.type===14&&await Or(u,d.data,t,``,null,n,0),o>jr)for(let e of n.sources)e.keep=!1,e.release()}else s.type===14&&await Or(a,s.data,t,``,null,n,0);i=s.next}return n}var Nr=65536,Pr=new Set([`double`,`single`,`int8`,`uint8`,`int16`,`uint16`,`int32`,`uint32`,`int64`,`uint64`,`logical`]);function Fr(e,t){let n={channels:[],strings:new Map,scalars:new Map,notes:[]},r=Un();r.enter(e);let i=t=>Qn(e,t),a=(e,t,n)=>{let r=null;return(a,o)=>((r?.s!==a||r.e!==o)&&(r={s:a,e:o,v:Q(t?i(e).slice([[0,n],[a,o]]):i(e).slice([[a,o],[0,n]]))}),r.v)},o=(e,s,c,l)=>{for(let u of e.keys()){if(!r.count())return;if(u.startsWith(`#`))continue;let d=e.get(u);if(!d)continue;let f=`${s}/${u}`,p=c?`${c}.${u}`:u,m=d.attrs,h=er(m,`MATLAB_class`);if(m.MATLAB_empty)continue;if(Vn(d)){h===`struct`&&l<16&&r.enter(d)&&o(d,f,p,l+1);continue}if(!Gn(d))continue;let g=d.shape??[];if(h===`char`){if(g.reduce((e,t)=>e*t,1)>Nr)continue;let e=Q(d.slice(g.map(e=>[0,e])));n.strings.set(p,new TextDecoder(`utf-16le`).decode(Uint16Array.from(e)))}else if(Pr.has(h)&&g.length===2&&Wn(d,g,t,!!d.metadata.chunks))n.notes.push(`${p}: larger than the file can hold (never written, or damaged); skipped.`);else if(Pr.has(h)&&g.length===2){let[e,t]=g;if(e*t===1){n.scalars.set(p,Q(i(f).slice([[0,1],[0,1]]))[0]);continue}if(e===1||t===1){let r=e*t;n.channels.push({name:p,length:r,read:async(t,n)=>Q(e===1?i(f).slice([[0,1],[t,n]]):i(f).slice([[t,n],[0,1]]))})}else if(t>=e){let r=a(f,!0,e);for(let i=0;i<e;i++)n.channels.push({name:`${p}[${i+1}]`,length:t,read:async(e,t)=>r(e,t).slice(i*(t-e),(i+1)*(t-e))})}else{let r=a(f,!1,t);for(let i=0;i<t;i++)n.channels.push({name:`${p}[${i+1}]`,length:e,read:async(e,n)=>{let a=r(e,n),o=new Float64Array(n-e);for(let e=0;e<o.length;e++)o[e]=a[e*t+i];return o}})}}else h===`cell`?n.notes.push(`${p}: cell arrays are skipped.`):h&&n.notes.push(`${p}: MATLAB class ${h} is skipped.`)}};o(e,``,``,0);let s=r.note();return s&&n.notes.push(s),n}var Ir=e=>Math.max(4096,Math.min(1<<18,Math.floor((16<<20)/(8*Math.max(1,e))))),Lr={...o,async plan(e,t){let n=a(await t.read(0,20),`MATLAB 7.3`),r,i=[];if(n)r=Fr((await Xn(e.main)).root,e.main.size);else{let e=await Mr(t);i=e.sources,r=e}let o=br(r.channels,r.strings,r.scalars).filter(e=>e.channels.length>0);await Sr(o);let s=xr(o);if(s.length===0)throw Error(`This MAT file has no numeric vectors or matrices to plot.`);let c=s.flatMap((e,t)=>e.time.kind===`index`?[]:[t]),l=s.length>1&&c.length<s.length,u=Object.fromEntries(r.strings);for(let[e,t]of r.scalars)u[e]=String(t);return{format:n?`MAT 7.3`:`MAT 5`,startTime:null,groups:s,meta:u,events:[],notes:r.notes,pick:l,defaultGroups:l&&c.length?c:void 0,state:{groups:o,sources:i}}},async*stream(e){for(let t of e.selection)yield*Rr(e,t.group)},streamGroup:(e,t)=>Rr(e,t)};async function*Rr(e,t){let n=e.plan.state,r=n.groups[t],i=T(e,t).map(e=>r.channels[e]),a=r.channels[0].length,o=Ir(i.length+1);try{for(let n=0;n<a;n+=o){e.signal?.throwIfAborted();let s=Math.min(a,n+o),c=null;if(r.time){c=await r.time.read(n,s);for(let e=0;e<c.length;e++)c[e]-=r.origin}let l=[];for(let e of i)l.push(await e.read(n,s));yield{group:t,time:c,start:n,length:s-n,columns:l}}}finally{for(let e of n.sources)e.release()}}function zr(e,t){let n=/^\s*(\d{1,2})\/(\d{1,2})\/(\d{2,4})\s*,\s*(\d{1,2}):(\d{2}):(\d{2})(?:\.(\d+))?/.exec(e??``);if(!n)return[null,0,!1];let[r,i]=t===1991?[n[2],n[1]]:[n[1],n[2]],a=n[3].length===2?2e3+Number(n[3]):Number(n[3]),o=Number(`${n[6]}.${n[7]??`0`}`);return[`${a}-${i.padStart(2,`0`)}-${r.padStart(2,`0`)}T${n[4].padStart(2,`0`)}:${n[5]}:${o.toFixed(3).padStart(6,`0`)}`,Date.UTC(a,Number(i)-1,Number(r),Number(n[4]),Number(n[5]))/1e3+o,(n[7]??``).length>6]}function Br(e){let t=e.split(/\r?\n/).map(e=>e.trim()),[n,,r]=t[0].split(`,`),i=Number(r)||1991,a=/(\d+)A\s*,\s*(\d+)D/i.exec(t[1]??``);if(!a)throw Error(`This COMTRADE .cfg is damaged (second line).`);let o=Number(a[1]),s=Number(a[2]);if(o+s>t.length)throw Error(`This COMTRADE .cfg is damaged (more channels than lines).`);let c=2,l=[];for(let e=0;e<o;e++,c++){let e=(t[c]??``).split(`,`);l.push({name:(e[1]??``).trim(),unit:(e[4]??``).trim(),a:Number(e[5]),b:Number(e[6]??0)||0})}let u=[];for(let e=0;e<s;e++,c++)u.push(((t[c]??``).split(`,`)[1]??``).trim());c++;let d=Number(t[c++]);if(!(Number.isInteger(d)&&d>=0&&d<=t.length-c))throw Error(`This COMTRADE .cfg is damaged (sample rates).`);let f=[];for(let e=0;e<Math.max(1,d);e++,c++){let[e,n]=(t[c]??``).split(`,`).map(Number);f.push([d===0?0:e,n])}let[p,m,h]=zr(t[c++],i),[g,_,v]=zr(t[c++],i),y=(t[c++]||`ASCII`).toUpperCase(),b=Number(t[c++])||1;return{station:n.trim(),rev:i,analog:l,digital:u,rates:f,start:p,trigger:g,startSec:m,triggerSec:_,ft:y,timemult:b,timebase:h||v?1e-9:1e-6}}var Vr={BINARY:2,BINARY32:4,FLOAT32:4},Hr=16<<20;async function Ur(e){let t=i(await e.read(0,Math.min(e.size,1<<20))),n=t.search(/---\s*file type:\s*CFG\s*---\r?\n/i),r=/---\s*file type:\s*DAT\s+(ASCII|BINARY32|BINARY|FLOAT32)(?:\s*:\s*(\d+))?\s*---\r?\n/i.exec(t);if(n<0||!r)throw Error(`This COMTRADE .cff is damaged (no CFG or DAT section in its first megabyte).`);let a=t.indexOf(`
3
- `,n)+1,o=t.slice(a).search(/---\s*file type:\s*(INF|HDR|DAT)/i),s=t.slice(a,o<0?void 0:a+o),c=r.index+r[0].length;return{cfg:s,offset:c,length:r[2]?Number(r[2]):e.size-c}}function Wr(e,t,n,r){let i=0,a=0,o=t,s=0;for(let[t,c]of e){for(;o<c&&s<n;)r[s++]=a+(o-i)/t,o++;if(a+=(c-i)/t,i=c,s>=n)return}let c=e[e.length-1];for(;s<n;s++,o++)r[s]=a+(o-i)/c[0]}var Gr=e=>e.companions.find(e=>e.name.toLowerCase().endsWith(`.dat`)),Kr={...f,async plan(e,t){let n=e.main.name.toLowerCase().endsWith(`.cff`),r,a;if(n){let e=await Ur(t);r=e.cfg,a={data:`self`,offset:e.offset,length:e.length}}else{let n=Gr(e);if(!n)throw Error(`This COMTRADE .cfg needs its .dat file: drop both together.`);if(t.size>Hr)throw Error(`This .cfg is too large to be a COMTRADE configuration file.`);r=i(await t.read(0,t.size)),a={data:`companion`,offset:0,length:n.size}}let o=Br(r);if(o.ft!==`ASCII`&&!Vr[o.ft])throw Error(`This COMTRADE file has data file type ${o.ft}, which Kymoscope cannot read.`);let s=Math.ceil(o.digital.length/16),c=o.ft===`ASCII`?0:8+o.analog.length*Vr[o.ft]+2*s,l=c?Math.floor(a.length/c):a.length,u=Math.min(o.rates[o.rates.length-1][1]||(c?l:-1),l),d=o.rates.length===1&&o.rates[0][0]>0?o.rates[0][0]:null,f=[`Analog values are shown as recorded (primary or secondary, per the CFG).`];return{format:`COMTRADE ${o.rev} (${o.ft})`,startTime:o.start,meta:{station:o.station,trigger:o.trigger??``},groups:[{name:o.station||`COMTRADE`,channels:[...o.analog.map(e=>({name:e.name,unit:e.unit})),...o.digital.map(e=>({name:e,unit:``}))],samples:u,time:{kind:`timestamps`},rateHz:d}],events:o.start&&o.trigger?[{time:Math.round((o.triggerSec-o.startSec)*1e6)/1e6,text:`Trigger`}]:[],notes:f,state:{...a,cfg:o,samples:u,recordSize:c}}},stream:e=>qr(e)};async function*qr(e){let t=e.plan.state,{cfg:n}=t,i=t.data===`self`?e.io:new x(Gr(e.files)),a=T(e,0),o=n.analog.length,s=n.rates[0][0]>0,c=n.timemult*n.timebase,u=65536,d=0,f=(e,t,r)=>{let i=new Float64Array(e);if(s)Wr(n.rates,d,e,i);else for(let n=0;n<e;n++)i[n]=t[n]*c;let a={group:0,time:i,start:d,length:e,columns:r};return d+=e,a};if(n.ft===`ASCII`){let r=n.rev>=1999?`99999`:``,s=a.map(e=>e<o?n.analog[e]:null),c=new Float64Array(u),l=a.map(()=>new Float64Array(u)),d=0,p=(e,t,n)=>{let i=e.slice(t,n).split(`,`);if(!(i.length<2)){c[d]=Number(i[1]);for(let e=0;e<a.length;e++){let t=(i[2+a[e]]??``).trim(),n=s[e];l[e][d]=t===``||n&&t===r?NaN:n?n.a*Number(t)+n.b:Number(t)}d++}},m=``,h=new TextDecoder(`latin1`);for await(let n of i.windows(t.offset,t.length)){e.signal?.throwIfAborted();let t=m+h.decode(n.bytes),r=0;for(let e=t.indexOf(`
4
- `,r);e>=0;e=t.indexOf(`
5
- `,r))p(t,r,e),r=e+1,d===u&&(yield f(d,c,l),c=new Float64Array(u),l=a.map(()=>new Float64Array(u)),d=0);m=t.slice(r)}m.trim()&&p(m,0,m.length),d&&(yield f(d,c.slice(0,d),l.map(e=>e.slice(0,d))));return}let p=t.recordSize,m=Vr[n.ft],h=Math.max(1,Math.floor(Math.min(l,u*p)/p)),g=t.samples;for await(let c of i.windows(t.offset,Math.min(t.length,t.samples*p),h*p)){e.signal?.throwIfAborted();let t=Math.min(g,Math.floor(c.bytes.length/p));if(t<=0)break;let i=r(c.bytes),l=new Float64Array(t);if(!s)for(let e=0;e<t;e++)l[e]=i.getUint32(e*p+4,!0);yield f(t,l,a.map(e=>{let r=new Float64Array(t);if(e<o){let{a,b:o}=n.analog[e],s=8+e*m;if(n.ft===`BINARY`)for(let e=0,n=s;e<t;e++,n+=p){let t=i.getInt16(n,!0);r[e]=t===-32768?NaN:a*t+o}else if(n.ft===`BINARY32`)for(let e=0,n=s;e<t;e++,n+=p){let t=i.getInt32(n,!0);r[e]=t===-2147483648?NaN:a*t+o}else for(let e=0,n=s;e<t;e++,n+=p)r[e]=a*i.getFloat32(n,!0)+o}else{let n=e-o,a=8+o*m+2*(n>>4),s=1<<(n&15);for(let e=0,n=a;e<t;e++,n+=p)r[e]=i.getUint16(n,!0)&s?1:0}return r})),g-=t}}var Jr=8192;async function*Yr(e){let t=0;for(;t+56<=e.size;){let n=y(await e.read(t,56));if(yield await e.slice(t,n.bytes),n.bytes<=56)return;t+=n.bytes}}function Xr(e){let t=e.filter(e=>e&&typeof e.t==`number`&&Array.isArray(e.signals)),n={},r={};return t.forEach((e,i)=>{for(let a of e.signals){if(!a||typeof a.name!=`string`)continue;let e=n[a.name]??=new Float64Array(t.length).fill(NaN);e[i]=typeof a.value==`number`?a.value:NaN,a.unit&&!r[a.name]&&(r[a.name]=a.unit)}}),{t:t.map(e=>e.t),columns:n,units:r}}var Zr=4096;function Qr(e){let t=2166136261^e.length;for(let n=0,r=Math.min(e.length,64);n<r;n++)t=Math.imul(t^e[n],16777619);return t>>>0}var $r=(e,t)=>e.length===t.length&&e.every((e,n)=>e===t[n]);async function*ei(e,t,n,r){let i=p(e.keys??[]),a=new Map,o=new Map;for await(let e of Yr(t)){let{header:t,messages:s}=_(e);n.t0??=t.t0;for(let e of s){let t=Qr(e.bytes),s=o.get(t);if(s&&$r(s,e.bytes))continue;o.set(t,e.bytes),o.size>Zr&&o.delete(o.keys().next().value);let l=await i(e.bytes);if(!l){n.lost++;continue}try{if(l.kind===5){let e=c(l.plaintext);a.set(e.id,e);continue}if(l.kind===4){let t=await b(l.plaintext,a);if(!t){n.lost++;continue}(r===void 0||r===!!t.historical)&&(yield{at:e.at,t:t.block.t,columns:t.block.columns,units:t.block.units??{},historical:t.historical});continue}if(r)continue;if(l.kind===3){let t=m(l.plaintext);yield{at:e.at,t:t.t,columns:t.columns,units:t.units??{}}}else if(l.kind===2){let t=u(l.plaintext);yield{at:e.at,...Xr(Array.isArray(t?.frames)?t.frames:[])}}}catch{n.lost++}}}}var ti={mdf:tn,edf:sn,xdf:_n,tdms:Rn,hdf5:pr,mat:Lr,comtrade:Kr,krc:{id:`krc`,label:`Kymoscope recording`,extensions:[],sniff:()=>!1,async plan(e,t){let n=[v],r=new Map([[v,`s`]]),i={lost:0,t0:null},a=0,o=!1;for await(let s of ei(e,t,i)){a+=s.t.length,s.historical&&(o=!0);for(let e of Object.keys(s.columns))e!==`ElapsedTime`&&(r.has(e)?!r.get(e)&&s.units[e]&&r.set(e,s.units[e]):(n.push(e),r.set(e,s.units[e]??``)))}let s=n.map(e=>({name:e,unit:r.get(e)??``})),c=i.lost?[`${i.lost} ${i.lost===1?`message`:`messages`} couldn't be opened with the keys this browser has.`]:[];return{format:`Kymoscope recording`,startTime:i.t0===null?null:new Date(i.t0).toISOString(),groups:[{name:`Recording`,channels:s,samples:a,time:{kind:`timestamps`},rateHz:null}],meta:{},events:[],notes:c,state:{names:n,backlog:o}}},async*stream(e){let{names:t,backlog:n=!1}=e.plan.state,r=e.selection.find(e=>e.group===0)?.channels??[],i=new Map(r.map((e,n)=>[t[e],n])),a=i.get(v),o=()=>r.map(()=>new Float64Array(Jr).fill(NaN)),s=new Float64Array(Jr),c=o(),l=0,u=0,d=0,f=-1/0,p=0,m=null,h=()=>{let e={group:0,time:s.slice(0,l),start:u,length:l,columns:c.map(e=>e.slice(0,l))};return u+=l,l=0,s=new Float64Array(Jr),c=o(),e};function*g(e){let t=e.t.length;for(let n=0;n<t;){let r=Math.min(t-n,Jr-l);for(let t=0;t<r;t++){let r=+e.t[n+t]+d;m??=r,s[l+t]=r-m}if(a!==void 0)for(let t=0;t<r;t++)c[a][l+t]=+e.t[n+t];for(let[t,a]of Object.entries(e.columns)){let e=t===`ElapsedTime`?void 0:i.get(t);if(e===void 0)continue;let o=c[e];if(a instanceof Float64Array||a instanceof Float32Array)o.set(a.subarray(n,n+r),l);else for(let e=0;e<r;e++)o[l+e]=+a[n+e]}l+=r,n+=r,l===Jr&&(yield h())}}let _=n?ei(e.files,e.io,{lost:0,t0:null},!0):null,y=async()=>{for(let e=await _?.next();e&&!e.done;e=await _.next())if(e.value.t.length)return e.value;return null},b=await y();for await(let t of ei(e.files,e.io,{lost:0,t0:null},n?!1:void 0)){if(e.signal?.aborted)return;let n=t.t.length;if(n!==0){for(+t.t[0]+d<f&&(d=f+Math.max(0,(t.at-p)/1e3)-+t.t[0]),p=t.at;b&&+b.t[0]<+t.t[0];b=await y())yield*g(b);yield*g(t),f=+t.t[n-1]+d}}for(;b&&!e.signal?.aborted;b=await y())yield*g(b);l>0&&(yield h())}}};function ni(e){let t=ti[e];if(!t)throw Error(`No importer for format ${e}.`);return t}export{ni as importerFor};
@@ -1,9 +0,0 @@
1
- /*! @kymoscope/sdk (c) 2026 Kymoscope. Proprietary software: use requires a license. See LICENSE.md. */
2
- var e=Symbol(`row`),t=new WeakMap;function n(e){return t.get(e)}function r(e,t){let n=e.keys.lastIndexOf(t);return n<0?void 0:e.values[n]}var i=new WeakMap;function a(n,r){let a=n.keys.join(`
3
- `),o=r&&i.get(r);if(o&&o.keys===a&&r.length===n.length){o.t=n;let e=new Proxy(o.base,{});return i.set(e,o),t.set(e,n),t.set(r,n),e}let s=Array(n.length),c={t:n,keys:a,base:s},l={};n.keys.forEach((t,n)=>{Object.defineProperty(l,t,{enumerable:!0,configurable:!0,get(){let t=this[e],{values:r,text:i}=c.t,a=r[n][t],o=i[n];return a===a?a:o?o[t]??null:null},set(e){Object.defineProperty(this,t,{value:e,writable:!0,enumerable:!0,configurable:!0})}})});for(let t=0;t<n.length;t++){let n=Object.create(l);n[e]=t,s[t]=n}return i.set(s,c),t.set(s,n),s}function o(e){let t=Array(e.length);for(let n=0;n<e.length;n++){let r={};for(let t=0;t<e.keys.length;t++){let i=e.values[t][n];r[e.keys[t]]=i===i?i:e.text[t]?.[n]??null}t[n]=r}return t}function s(e,t){let n=Number(t?e.replace(`,`,`.`):e);return Number.isFinite(n)?n:null}function c(e,t){let n=e.trim();if(n===``)return null;let r=s(n,t);return r===null?n:r}function l(e,t){if(t===`,`)return!1;let n=0,r=0;for(let i of e)for(let e of d(i,t)){let t=e.trim();/^-?\d+,\d+$/.test(t)?n++:/^-?\d+\.\d+$/.test(t)&&r++}return n>r}function u(e){let t=(e.match(/\t/g)??[]).length,n=(e.match(/;/g)??[]).length,r=0,i=!1;for(let t=0;t<e.length;t++){let n=e[t];n===`"`?i=!i:!i&&n===`,`&&r++}return t>0&&t>=r&&t>=n?` `:n>r?`;`:r>0?`,`:` `}function d(e,t){if(t===` `)return e.split(` `);let n=[],r=``,i=!1;for(let a=0;a<e.length;a++){let o=e[a];i?o===`"`?e[a+1]===`"`?(r+=`"`,a++):i=!1:r+=o:o===`"`?i=!0:o===t?(n.push(r),r=``):r+=o}return n.push(r),n}function f(e,t){let n=0,r=0;for(let i of e){let e=i.trim();e!==``&&(n++,s(e,t)!==null&&r++)}return n>0&&r/n>=.5}function p(e,t){if(t===void 0)return!1;let n=e=>/[\t,;]/.test(e);return!n(e)&&n(t)}function m(e){let t=[];for(let n of e.split(/\r\n|\r|\n/)){let e=n.replace(/\uFEFF/g,``).trimEnd();e.length>0&&t.push(e)}return t}function h(e,t){return e.headerRow===t.headerRow&&e.unitsRow===t.unitsRow&&e.dataStartRow===t.dataStartRow}function g(e){let t=[` `,`;`,`,`],n={delim:` `,cols:1,agree:0};for(let r of t){let t=new Map;for(let n of e){let e=d(n,r).length;e>1&&t.set(e,(t.get(e)??0)+1)}for(let[e,i]of t)(i>n.agree||i===n.agree&&e>n.cols)&&(n={delim:r,cols:e,agree:i})}return{delim:n.delim,cols:n.cols}}function _(e){let t=m(e);if(t.length===0)return{headerRow:0,unitsRow:null,dataStartRow:1};let n=t.slice(0,10),{delim:r,cols:i}=g(n),a=e=>d(e,r).length===i,o=e=>d(e,r).every(e=>e.trim()!==``),s=n.findIndex(e=>a(e)&&o(e));s<0&&(s=n.findIndex(a)),(s<0||i<=1)&&(s=0);let c=null,u=s+1;if(t.length>s+1){let e=l(t.slice(s+1,s+11),r);f(d(t[s+1],r),e)||(c=s+1,u=s+2)}return{headerRow:s,unitsRow:c,dataStartRow:u}}function v(e,t){let n=e[t]??``,r=d(n,u(n)).map(e=>e.trim());if(r.length===0||r.every(e=>e===``))throw Error(`No column names were found.`);return r}function y(e,t){let{table:n,...r}=b(e,t);return{...r,rows:o(n)}}function b(e,t){let{headerRow:n,unitsRow:r,dataStartRow:i}=t,a=[],o=-1,s=0;for(;s<=e.length&&a.length<i+10;){a.length===i&&o<0&&(o=s);let n=e.indexOf(`
4
- `,s);n<0&&(n=e.length);let r=e.slice(s,n);if(/\r(?!$)/.test(r))return te(e,t);let c=r.replace(/\uFEFF/g,``).trimEnd();c.length>0&&a.push(c),s=n+1}if(a.length===i&&o<0&&(o=s),o<0)return te(e,t);let f=u(a[n]??``),m=v(a,n),h=[];r!==null&&a[r]!==void 0&&(h=d(a[r],f).map(e=>e.trim())),h.length===0&&(h=m.map(()=>``));let g=l(a.slice(i,i+10),f),_=m.map((e,t)=>e||`col_${t}`),y=_.length,b=1;for(let t=e.indexOf(`
5
- `,o);t>=0;t=e.indexOf(`
6
- `,t+1))b++;let x=0;for(let t=e.indexOf(`\r`,o);t>=0;t=e.indexOf(`\r`,t+1))e.charCodeAt(t+1)!==10&&x++;b+=x;let C=_.map(()=>new Float64Array(b)),w=_.map(()=>null),T=0,E=(e,t)=>{typeof t==`number`?C[e][T]=t:(C[e][T]=NaN,t!==null&&((w[e]??=[])[T]=t))},D=e=>{let t=d(e,f);if(!(t.length===1&&t[0].trim()===``)){for(let e=0;e<y;e++)E(e,t[e]===void 0?null:c(t[e],g));T++}},O=f.charCodeAt(0),k=O!==9&&e.indexOf(`"`,o)>=0||e.indexOf(``,o)>=0||x>0;for(s=o;s<e.length;){let t=e.indexOf(`
7
- `,s);t<0&&(t=e.length);let n=t;n>s&&e.charCodeAt(n-1)===13&&n--;let r=n>s;if(r){let t=e.charCodeAt(n-1);r=t>32&&t<127}if(r&&k)for(let t=s;t<n;t++){let n=e.charCodeAt(t);if(n===13||n===65279||n===34&&O!==9){r=!1;break}}if(r){let t=s;for(let r=0;r<y;r++){if(t>n){E(r,null);continue}let i=ee(e,t,n,O,g);if(i===i){C[r][T]=i,t=S+1;continue}let a=e.indexOf(f,t);(a<0||a>n)&&(a=n),E(r,c(e.slice(t,a),g)),t=a+1}T++}else{let n=e.slice(s,t);for(let e of n.split(/\r\n|\r|\n/)){let t=e.replace(/\uFEFF/g,``).trimEnd();t.length>0&&D(t)}}s=t+1}let ne=C.map(e=>b-T>b/100?e.slice(0,T):e.subarray(0,T));return{meta:a.length>0&&p(a[0],a[1])?a[0]:``,columnNames:m,units:h,table:{keys:_,length:T,values:ne,text:w}}}var x=Array.from({length:23},(e,t)=>10**t),S=0;function ee(e,t,n,r,i){let a=t,o=e.charCodeAt(a),s=o===45;(s||o===43)&&a++;let c=0,l=0,u=0,d=!1,f=!1;for(;a<n;a++)if(o=e.charCodeAt(a),o>=48&&o<=57){if(d=!0,c===0&&o===48){f&&u++;continue}if(++l>15)return NaN;c=c*10+(o-48),f&&u++}else if((o===46||i&&o===44&&r!==44)&&!f)f=!0;else break;if(!d)return NaN;let p=0;if(a<n&&o!==r){if(o!==101&&o!==69)return NaN;a++,o=e.charCodeAt(a);let t=o===45;(t||o===43)&&a++;let i=a;for(;a<n&&(o=e.charCodeAt(a),o!==r);a++){if(o<48||o>57||p>400)return NaN;p=p*10+(o-48)}if(a===i)return NaN;t&&(p=-p)}let m=p-u,h;if(c===0)h=0;else if(m>=0&&m<=22)h=c*x[m];else if(m<0&&m>=-22)h=c/x[-m];else return NaN;return S=a,s?-h:h}function te(e,t){let n=m(e),{headerRow:r,unitsRow:i,dataStartRow:a}=t,o=u(n[r]??``),s=v(n,r),f=[];i!==null&&n[i]!==void 0&&(f=d(n[i],o).map(e=>e.trim())),f.length===0&&(f=s.map(()=>``));let h=n.slice(a),g=l(h.slice(0,10),o),_=s.map((e,t)=>e||`col_${t}`),y=h.length,b=_.map(()=>new Float64Array(y)),x=_.map(()=>null),S=0;for(let e of h){let t=d(e,o);if(!(t.length===1&&t[0].trim()===``)){for(let e=0;e<_.length;e++){let n=t[e]===void 0?null:c(t[e],g);typeof n==`number`?b[e][S]=n:(b[e][S]=NaN,n!==null&&((x[e]??=[])[S]=n))}S++}}return S<y&&(b=b.map(e=>e.slice(0,S))),{meta:n.length>0&&p(n[0],n[1])?n[0]:``,columnNames:s,units:f,table:{keys:_,length:S,values:b,text:x}}}var C=5e3;function w(e,t){let n=T.get(e);n||T.set(e,n=new Map);let r=n.get(t);return r===void 0&&n.set(t,r=E(e,t)),r}var T=new WeakMap;function E(e,t){let r=n(e),i=r?r.keys.lastIndexOf(t):-1;if(r&&i>=0&&!r.text[i]){let e=r.values[i];for(let t=0;t<e.length;t++)if(e[t]===e[t])return!0;return!1}let a=e.length,o=0,s=0,c=Math.max(1,Math.floor(a/C));for(let n=0;n<a;n+=c){let r=e[n][t];r!=null&&(o++,typeof r==`number`&&s++)}if(o===0&&c>1)for(let n=0;n<a&&o<C;n++){let r=e[n][t];r!=null&&(o++,typeof r==`number`&&s++)}return o>0&&s/o>.95}function D(e,t){if(e<=t)return Array.from({length:e},(e,t)=>t);let n=[],r=e/t,i=0;for(let a=0;a<t;a++)n.push(Math.min(e-1,Math.floor(i))),i+=r;return n}var O=[];function k(e){return O.push(e),e}function ne(e){for(let t of O)t.delete(e)}function re(e,t,n,r,i,a){let o=(i-r)/a;if(!(i>r)||a<1)return{x0:r,bucket:0,rows:[],columns:n};let s=Math.floor(a);if(ae(e))return{x0:r,bucket:o,rows:oe(e,t,r,i,o,s),columns:n};let c=new Uint8Array(s),l=t.map(()=>new Float64Array(s).fill(1/0)),u=t.map(()=>new Float64Array(s).fill(-1/0));for(let n=0;n<e.length;n++){let a=e[n];if(!(a>=r&&a<=i))continue;let d=Math.floor((a-r)/o);d>=s&&(d=s-1),c[d]=1;for(let e=0;e<t.length;e++){let r=t[e][n];r===r&&(r<l[e][d]&&(l[e][d]=r),r>u[e][d]&&(u[e][d]=r))}}let d=[];for(let e=0;e<s;e++){if(!c[e])continue;let n={b:e};for(let r=0;r<t.length;r++)l[r][e]!==1/0&&(n[`y${r}lo`]=l[r][e],n[`y${r}hi`]=u[r][e]);d.push(n)}return{x0:r,bucket:o,rows:d,columns:n}}var ie=k(new WeakMap);function ae(e){let t=ie.get(e);if(t===void 0){t=!0;for(let n=0;n<e.length;n++)if(!(e[n]>=(n>0?e[n-1]:-1/0))){t=!1;break}ie.set(e,t)}return t}function oe(e,t,n,r,i,a){let o=t=>{let n=0,r=e.length;for(;n<r;){let i=n+r>>>1;t(e[i])?n=i+1:r=i}return n},s=o(e=>e<n),c=o(e=>e<=r),l=e=>Math.min(a-1,Math.floor((e-n)/i)),u=t.map((e,t)=>`y${t}lo`),d=t.map((e,t)=>`y${t}hi`),f=[],p=s;for(;p<c;){let n=l(e[p]),r=p,i=1;for(;p+i<c&&l(e[p+i])===n;)r=p+i,i*=2;let a=r+1,o=Math.min(p+i,c);for(;a<o;){let t=a+o>>>1;l(e[t])===n?a=t+1:o=t}let s=a,m={b:n};for(let e=0;e<t.length;e++){let n=t[e],r=1/0,i=-1/0;for(let e=p;e<s;e++){let t=n[e];t<r&&(r=t),t>i&&(i=t)}r!==1/0&&(m[u[e]]=r,m[d[e]]=i)}f.push(m),p=s}return f}function se(e,t,n,r,i){let a=(r-n)/i,o=new Map;for(let s=0;s<e.length;s++){let c=e[s],l=t[s];if(c<n||c>r||Number.isNaN(l))continue;let u=Math.floor((c-n)/a);u===i&&(u=i-1);let d=o.get(u);d?(l<d.min&&(d.min=l),l>d.max&&(d.max=l),c<d.firstX&&(d.firstX=c,d.firstY=l),c>d.lastX&&(d.lastX=c,d.lastY=l)):(d={min:l,max:l,firstX:c,firstY:l,lastX:c,lastY:l},o.set(u,d))}let s=[...o.keys()].sort((e,t)=>e-t),c=s.length,l={x:new Float64Array(c),min:new Float64Array(c),max:new Float64Array(c),first:new Float64Array(c),last:new Float64Array(c)};for(let e=0;e<c;e++){let t=s[e],r=o.get(t);l.x[e]=n+(t+.5)*a,l.min[e]=r.min,l.max[e]=r.max,l.first[e]=r.firstY,l.last[e]=r.lastY}return l}function ce(e,t,n,r,i,a){if(!ae(e))return null;let o=t=>{let n=0,r=e.length;for(;n<r;){let i=n+r>>>1;t(e[i])?n=i+1:r=i}return n},s=o(e=>e<r),c=o(e=>e<=i);if(c-s>a)return null;let l=e=>s===0&&c===e.length?e:e.subarray(s,c);return{length:c-s,x:l(e),cols:new Map(n.map((e,n)=>[e,l(t[n])]))}}var le=e=>new DataView(e.buffer,e.byteOffset,e.byteLength);function ue(e,t,n=!0){let r=e.getUint32(n?t:t+4,n);return e.getUint32(n?t+4:t,n)*4294967296+r}function de(e,t,n=!0){let r=e.getUint32(n?t:t+4,n);return e.getInt32(n?t+4:t,n)*4294967296+r}var fe=new TextDecoder(`utf-8`),pe=new TextDecoder(`latin1`);function me(e,t=!1){let n=e.indexOf(0);return(t?pe:fe).decode(n<0?e:e.subarray(0,n))}var he=e=>pe.decode(e),ge=e=>fe.decode(e);function A(e,t,n=0){if(e.length<n+t.length)return!1;for(let r=0;r<t.length;r++)if(e[n+r]!==t.charCodeAt(r))return!1;return!0}var _e={id:`mdf`,label:`ASAM MDF (MF4, MDF 3)`,extensions:[`.mf4`,`.mdf`,`.mf3`,`.dat`],companions:[{ext:`.dbc`,anyName:!0}],sniff:e=>A(e,`MDF `)||A(e,`UnFinMF `)},ve={id:`edf`,label:`EDF / BDF (+)`,extensions:[`.edf`,`.bdf`,`.rec`],sniff:e=>A(e,`0 `)||e[0]===255&&A(e,`BIOSEMI`,1)},ye={id:`xdf`,label:`XDF (Lab Streaming Layer)`,extensions:[`.xdf`],sniff:e=>A(e,`XDF:`)},be={id:`tdms`,label:`NI TDMS`,extensions:[`.tdms`],companions:[{ext:`.tdms_index`}],sniff:e=>A(e,`TDSm`)},xe={id:`mat`,label:`MATLAB MAT (v5, v7.3)`,extensions:[`.mat`],sniff:e=>A(e,`MATLAB 5.0 MAT-file`)||A(e,`MATLAB 7.3 MAT-file`)},Se=`‰HDF\r
8
- 
9
- `,Ce={id:`hdf5`,label:`HDF5`,extensions:[`.h5`,`.hdf5`,`.hdf`,`.he5`,`.nc`],sniff:e=>[0,512,1024,2048].some(t=>A(e,Se,t))},we={id:`comtrade`,label:`COMTRADE (IEEE C37.111)`,extensions:[`.cfg`,`.cff`],companions:[{ext:`.dat`}],sniff:e=>{let t=he(e.subarray(0,512));if(/^---\s*file type:\s*CFG/i.test(t))return!0;let n=t.split(/\r?\n/);return n.length>2&&/^\s*\d+\s*,\s*\d+A\s*,\s*\d+D\s*$/i.test(n[1])}},Te=`This file couldn't be read (it may be damaged).`,Ee=1032,De=e=>e*Ee+1024,Oe=128e6,j=256,ke=64,M=1e3,N=100,Ae=200,P=(e,t)=>e.length>t?`${e.slice(0,t-1)}…`:e;function je(e){let t=e.notes;for(let n of e.groups){n.name=P(String(n.name),j);for(let e of n.channels)e.name=P(String(e.name),j),e.unit=P(String(e.unit??``),ke);Number.isInteger(n.samples)&&n.samples>=-1||(n.samples=-1),n.rateHz===null||Number.isFinite(n.rateHz)&&n.rateHz>0||(n.rateHz=null),n.time.kind===`rate`&&!(Number.isFinite(n.time.rate)&&n.time.rate>0&&Number.isFinite(n.time.start))&&(t.push(`${n.name}: its sample rate in the file is not usable; samples are numbered instead.`),n.time={kind:`index`},n.rateHz=null)}t.length>N&&t.splice(N,t.length-N,`${t.length-N} more notes.`),e.notes=t.map(e=>P(String(e),M));let n={};for(let[t,r]of Object.entries(e.meta).slice(0,Ae))n[P(t,j)]=P(String(r),M);return e.meta=n,e.events=e.events.filter(e=>Number.isFinite(e.time)).map(e=>({time:e.time,text:P(String(e.text),M)})),e}function Me(e){return e instanceof Error&&(e.constructor===Error||e.name===`KymoscopeError`||e.name===`AbortError`)?e:Error(Te)}function Ne(e,t=[`Time`]){let n=new Set(t.map(e=>e.toLowerCase())),r=new Map;return e.map(e=>{let t=e.trim()||`Channel`,i=t.toLowerCase(),a=t,o=r.get(i)??2;if(n.has(i)){for(;n.has(`${i} (${o})`);)o++;a=`${t} (${o++})`}return r.set(i,o),n.add(a.toLowerCase()),a})}var F=1<<20,Pe=64,Fe=16<<20,Ie=class{size;bytesRead=0;#e;#t=new Map;constructor(e){this.#e=e,this.size=e.size}async read(e,t){let n=Math.min(this.size,e+t);if(n<=e)return new Uint8Array;if(n-e>F)return this.slice(e,n-e);let r=Math.floor(e/F),i=Math.floor((n-1)/F),a=await this.#n(r);if(r===i)return a.subarray(e-r*F,n-r*F);let o=new Uint8Array(n-e),s=a.subarray(e-r*F);return o.set(s),o.set((await this.#n(i)).subarray(0,n-i*F),s.length),o}async slice(e,t){let n=Math.min(this.size,e+t);if(n<=e)return new Uint8Array;let r=new Uint8Array(await this.#e.slice(e,n).arrayBuffer());return this.bytesRead+=r.length,r}async*windows(e,t,n=Fe){let r=Math.min(this.size,e+t);for(let t=e;t<r;t+=n)yield{offset:t,bytes:await this.slice(t,Math.min(n,r-t))}}async#n(e){let t=this.#t.get(e);if(t)return this.#t.delete(e),this.#t.set(e,t),t;let n=await this.slice(e*F,F);return this.#t.size>=Pe&&this.#t.delete(this.#t.keys().next().value),this.#t.set(e,n),n}},Le=`kymoscope-live-key-check-v1`,I=6e5;function L(){let e=globalThis.crypto;if(!e?.subtle)throw Error(`WebCrypto SubtleCrypto is not available`);return e.subtle}function R(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return btoa(t)}function z(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}function B(e){return R(e).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=+$/,``)}function Re(e){return z(e.replace(/-/g,`+`).replace(/_/g,`/`).padEnd(Math.ceil(e.length/4)*4,`=`))}function ze(e){let t=``;for(let n=0;n<e.length;n++)t+=e[n].toString(16).padStart(2,`0`);return t}function Be(){let e=new Uint8Array(16);return globalThis.crypto.getRandomValues(e),R(e)}async function V(e,t){let n=new TextEncoder,r=await L().importKey(`raw`,n.encode(e),`PBKDF2`,!1,[`deriveKey`]);return L().deriveKey({name:`PBKDF2`,salt:z(t),iterations:I,hash:`SHA-256`},r,{name:`AES-GCM`,length:256},!1,[`encrypt`,`decrypt`])}async function Ve(e,t){let n=await L().importKey(`raw`,new TextEncoder().encode(e),`PBKDF2`,!1,[`deriveBits`]),r=await L().deriveBits({name:`PBKDF2`,salt:z(t),iterations:I,hash:`SHA-256`},n,256);return R(new Uint8Array(r))}async function He(e,t){let n=new Uint8Array(12);globalThis.crypto.getRandomValues(n);let r=new TextEncoder().encode(JSON.stringify(t)),i=await L().encrypt({name:`AES-GCM`,iv:n},e,r);return{iv:R(n),ciphertext:R(new Uint8Array(i))}}async function Ue(e,t){let n=z(t.iv),r=z(t.ciphertext),i=await L().decrypt({name:`AES-GCM`,iv:n},e,r);return new Uint8Array(i)}async function We(e,t,n,r){let i=await L().decrypt({name:`AES-GCM`,iv:t,additionalData:r},e,n);return new Uint8Array(i)}async function Ge(e,t){return JSON.parse(new TextDecoder().decode(await Ue(e,t)))}async function Ke(e){return He(e,Le)}async function qe(e,t){try{return await Ge(e,t)===Le}catch{return!1}}async function Je(e){let t=await L().digest(`SHA-256`,new TextEncoder().encode(e));return ze(new Uint8Array(t))}function Ye(){let e=e=>{let t=new Uint8Array(e);return globalThis.crypto.getRandomValues(t),B(t)},t=`kymoscope_${e(24)}.${e(32)}`;return{token:t,prefix:t.slice(0,12)}}var Xe=/^((?:kymoscope|prism)_[A-Za-z0-9_-]+)(?:\.([A-Za-z0-9_-]+))?$/;function Ze(e){let t=Xe.exec(e.trim());return t?{auth:t[1],secret:t[2]??null}:{auth:e,secret:null}}var Qe=new TextEncoder().encode(`kymoscope-device-wrap-v1`);async function $e(){let e=await L().generateKey({name:`ECDH`,namedCurve:`P-256`},!1,[`deriveBits`]),t=new Uint8Array(await L().exportKey(`raw`,e.publicKey));return{privateKey:e.privateKey,publicKey:R(t)}}async function et(e,t){let n=new Uint8Array(e.length+Qe.length);return n.set(e),n.set(Qe,e.length),L().importKey(`raw`,await L().digest(`SHA-256`,n),`AES-GCM`,!1,t)}async function tt(e,t,n){let r=await L().importKey(`raw`,z(t.epk),{name:`ECDH`,namedCurve:`P-256`},!1,[]),i=new Uint8Array(await L().deriveBits({name:`ECDH`,public:r},e,256));return new Uint8Array(await L().decrypt({name:`AES-GCM`,iv:z(t.iv),additionalData:new TextEncoder().encode(n)},await et(i,[`decrypt`]),z(t.ct)))}function nt(e,t,n){return rt(e,t,n)}async function rt(e,t,n,r,i){let a=await L().importKey(`raw`,z(e),{name:`ECDH`,namedCurve:`P-256`},!1,[]),o=r??await L().generateKey({name:`ECDH`,namedCurve:`P-256`},!1,[`deriveBits`]),s=new Uint8Array(await L().deriveBits({name:`ECDH`,public:a},o.privateKey,256)),c=i??globalThis.crypto.getRandomValues(new Uint8Array(12)),l=new Uint8Array(await L().encrypt({name:`AES-GCM`,iv:c,additionalData:new TextEncoder().encode(n)},await et(s,[`encrypt`]),t));return{epk:R(new Uint8Array(await L().exportKey(`raw`,o.publicKey))),iv:R(c),ct:R(l)}}async function it(e,t,n,r){return ut(await tt(e,t,`${n}|${r}`))}var at=new TextEncoder().encode(`kymoscope-sender-bind-v1`),ot=(e,t,n)=>`project:${e}:${t}|${n}`,st=(e,t,n)=>`live_stream:${e}|${t}:${n}`,ct=(e,t,n)=>`bind:${e}|${t}:${n}`;function lt(){return globalThis.crypto.getRandomValues(new Uint8Array(32))}function ut(e){return L().importKey(`raw`,e,{name:`AES-GCM`,length:256},!1,[`encrypt`,`decrypt`])}function dt(e,t,n){return ft(e,t,n)}async function ft(e,t,n,r){let i=r??globalThis.crypto.getRandomValues(new Uint8Array(12)),a=await L().importKey(`raw`,e,`AES-GCM`,!1,[`encrypt`]),o=new Uint8Array(await L().encrypt({name:`AES-GCM`,iv:i,additionalData:new TextEncoder().encode(n)},a,t));return{iv:R(i),ct:R(o)}}async function pt(e,t,n){let r=await L().importKey(`raw`,e,`AES-GCM`,!1,[`decrypt`]);return new Uint8Array(await L().decrypt({name:`AES-GCM`,iv:z(t.iv),additionalData:new TextEncoder().encode(n)},r,z(t.ct)))}async function mt(e){let t=new TextEncoder().encode(e),n=new Uint8Array(t.length+at.length);return n.set(t),n.set(at,t.length),new Uint8Array(await L().digest(`SHA-256`,n))}async function ht(e,t,n){let r=await L().importKey(`raw`,e,{name:`HMAC`,hash:`SHA-256`},!1,[`sign`]);return R(new Uint8Array(await L().sign(`HMAC`,r,new TextEncoder().encode(`sender|${t}|${n}`))))}async function gt(e,t,n,r){let i;try{i=z(r)}catch{return!1}let a=await L().importKey(`raw`,e,{name:`HMAC`,hash:`SHA-256`},!1,[`verify`]);return L().verify(`HMAC`,a,i,new TextEncoder().encode(`sender|${t}|${n}`))}async function _t(e){let t=ze(new Uint8Array(await L().digest(`SHA-256`,z(e)))).slice(0,16).toUpperCase();return`${t.slice(0,4)}-${t.slice(4,8)}-${t.slice(8,12)}-${t.slice(12,16)}`}var vt=`kymoscope-workbook-export-v2`,yt=(e,t)=>`workbook:${e}:${t}`,bt=(e,t,n)=>`workbook:${e}|${t}:${n}`,xt=(e,t)=>`kymoscope-recovery-key-v1|${e}|${t}`,St=(e,t,n)=>`recovery:${e}|${t}:${n}`;function Ct(e,t,n){return wt(e,t,n)}async function wt(e,t,n,r){let i=r??globalThis.crypto.getRandomValues(new Uint8Array(12)),a=new Uint8Array(await L().encrypt({name:`AES-GCM`,iv:i,additionalData:new TextEncoder().encode(n)},e,t));return{iv:R(i),ct:R(a)}}async function Tt(e,t,n){return new Uint8Array(await L().decrypt({name:`AES-GCM`,iv:z(t.iv),additionalData:new TextEncoder().encode(n)},e,z(t.ct)))}function Et(e,t,n){return Dt(e,t,n)}async function Dt(e,t,n,r,i){let a=R(r??globalThis.crypto.getRandomValues(new Uint8Array(16))),o=await wt(await V(e,a),t,n,i);return{kdf:{name:`PBKDF2`,hash:`SHA-256`,iterations:I,salt:a},...o}}async function Ot(e,t,n){let r=t?.kdf;if(r?.name!==`PBKDF2`||r.hash!==`SHA-256`||r.iterations!==I||typeof r.salt!=`string`)throw Error(`unsupported_kdf`);return Tt(await V(e,r.salt),t,n)}var H=`ABCDEFGHIJKLMNOPQRSTUVWXYZ234567`;function kt(e){let t=0,n=0,r=``;for(let i of e)for(n=(n<<8|i)&1048575,t+=8;t>=5;)r+=H[n>>>t-5&31],t-=5;return t>0&&(r+=H[n<<5-t&31]),r.match(/.{1,4}/g).join(`-`)}function At(e){let t=e.toUpperCase().replace(/[^A-Z2-7]/g,``);if(t.length!==52)return null;let n=[],r=0,i=0;for(let e of t)i=(i<<5|H.indexOf(e))&4095,r+=5,r>=8&&(n.push(i>>>r-8&255),r-=8);return n.length===32?new Uint8Array(n):null}async function jt(){let e=await L().generateKey({name:`ECDH`,namedCurve:`P-256`},!0,[`deriveBits`]),t=await L().exportKey(`jwk`,e.privateKey),n=new Uint8Array(await L().exportKey(`raw`,e.publicKey));return{d:Re(t.d),publicKey:R(n)}}function Mt(e,t){let n=z(t);return L().importKey(`jwk`,{kty:`EC`,crv:`P-256`,ext:!1,x:B(n.subarray(1,33)),y:B(n.subarray(33,65)),d:B(e)},{name:`ECDH`,namedCurve:`P-256`},!1,[`deriveBits`])}var Nt=k(new WeakSet),Pt={length:0,x:new Float64Array,cols:new Map};function U(e,t,n,r){let i=t.length,a=t.map((e,t)=>`y${t}lo`),o=t.map((e,t)=>`y${t}hi`),s=new Uint8Array(e.length),c=0;for(let t=0;t<e.length;t++){let n=e[t];for(let e=0;e<i;e++){let r=n[o[e]];if(r!=null&&Number(r)!==Number(n[a[e]])){s[t]=1;break}}c+=1+s[t]}let l=new Float64Array(c),u=t.map(()=>new Float64Array(c).fill(NaN)),d,f=0,p=null;for(let t=0;t<e.length;t++){let m=e[t],h=n+(Number(m.b)+.5)*r,g=Number(m.pass??0);p!==null&&g!==p&&((d??=new Uint8Array(c))[f]=1),p=g,l[f]=h;for(let e=0;e<i;e++){let t=m[a[e]];t!=null&&(u[e][f]=Number(t))}if(f++,s[t]){l[f]=h;for(let e=0;e<i;e++){let t=m[o[e]];t!=null&&(u[e][f]=Number(t))}f++}}return{length:c,x:l,brk:d,cols:new Map(t.map((e,t)=>[e,u[t]]))}}function Ft(e,t){if(t>=e.length)return e;let n=new Map;for(let[r,i]of e.cols)n.set(r,i.subarray(0,t));return{length:t,x:e.x.subarray(0,t),brk:e.brk?.subarray(0,t),cols:n}}function It(e,t){if(t===void 0||e.length===0||e.x[e.length-1]<=t)return e;let n=0,r=e.length;for(;n<r;){let i=n+r>>1;e.x[i]<=t?n=i+1:r=i}return Ft(e,n)}function Lt(e,t,n){let r=(t,n)=>{let r=0,i=e.length;for(;r<i;){let a=r+i>>1;(n?e.x[a]<=t:e.x[a]<t)?r=a+1:i=a}return r},i=r(t,!1),a=r(n,!0);if(i===0&&a===e.length)return e;let o=new Map;for(let[t,n]of e.cols)o.set(t,n.subarray(i,a));return{length:a-i,x:e.x.subarray(i,a),brk:e.brk?.subarray(i,a),cols:o}}function Rt(e,t){let n=[];for(let r=0;r<e.length;r++)t(e.x[r])&&n.push(r);if(n.length===e.length)return e;let r=(e,t)=>{for(let r=0;r<n.length;r++)t[r]=e[n[r]];return t},i=new Map;for(let[t,a]of e.cols)i.set(t,r(a,new Float64Array(n.length)));return{length:n.length,x:r(e.x,new Float64Array(n.length)),brk:e.brk&&r(e.brk,new Uint8Array(n.length)),cols:i}}function zt(e,t,i,a,o=``,s=0){let c=n(e),l=D(e.length,a),u=t=>{let n=c&&r(c,t);return n?e=>n[e]:n=>{let r=e[n][t];return typeof r==`number`?r:NaN}},d=u(t),f=[];for(let e of l)Number.isNaN(d(e))||f.push(e);let p=f.length,m=p===e.length&&s===0,h=c&&r(c,t),g=m&&h?h:Float64Array.from(f,e=>d(e)+s),_=new Map;for(let e of i){let t=c&&r(c,e);if(c&&!t)continue;if(m&&t){_.set(e+o,t);continue}let n=u(e),i=Float64Array.from(f,n);!t&&!i.some(e=>!Number.isNaN(e))||_.set(e+o,i)}return{length:p,x:g,cols:_}}function Bt(e,t,n){if(!t&&n===0)return e;let r=e.x;if(n!==0){r=new Float64Array(e.length);for(let t=0;t<e.length;t++)r[t]=e.x[t]+n}let i=new Map;for(let[n,r]of e.cols)i.set(n+t,r);return{length:e.length,x:r,brk:e.brk,cols:i}}function Vt(e){let t=e.filter(e=>e.length>0);if(t.length===0)return Pt;if(t.length===1)return t[0];let n=t.reduce((e,t)=>e+t.length,0),r=new Float64Array(n),i=new Set;for(let e of t)for(let t of e.cols.keys())i.add(t);let a=new Map;for(let e of i)a.set(e,new Float64Array(n).fill(NaN));let o,s=0;for(let e of t){r.set(e.x,s),e.brk&&(o??=new Uint8Array(n)).set(e.brk,s);for(let[t,n]of e.cols)a.get(t).set(n,s);s+=e.length}return{length:n,x:r,brk:o,cols:a}}var W=64,Ht=class{nc;bucket;b;lo;hi;start=0;end=0;rowP;px=new Float64Array;pv=[];pStart=0;pEnd=0;mStart=0;mEnd=0;dirty=1/0;dirtyFront=-1;invalid=!0;constructor(e,t,n=1024){this.nc=e,this.bucket=t,this.b=new Float64Array(n),this.rowP=new Float64Array(n),this.lo=Array.from({length:e},()=>new Float64Array(n)),this.hi=Array.from({length:e},()=>new Float64Array(n))}get count(){return this.end-this.start}lowerBound(e){let t=this.start,n=this.end;for(;t<n;){let r=t+n>>>1;this.b[r]<e?t=r+1:n=r}return t}relocate(e,t){let n=this.count,r=n=>{if(t===n.length&&e<=this.start)return n.copyWithin(e,this.start,this.end),n;let r=new Float64Array(t);return r.set(n.subarray(this.start,this.end),e),r};this.b=r(this.b),this.rowP=r(this.rowP),this.lo=this.lo.map(r),this.hi=this.hi.map(r);let i=e-this.start;this.mStart+=i,this.mEnd+=i,this.dirty!==1/0&&(this.dirty+=i),this.dirtyFront>=0&&(this.dirtyFront+=i),this.start=e,this.end=e+n}touch(e){e===this.start&&e+1<this.mEnd?this.dirtyFront=e:e<this.dirty&&(this.dirty=e)}clearRow(e){for(let t=0;t<this.nc;t++)this.lo[t][e]=NaN,this.hi[t][e]=NaN;this.touch(e)}row(e){let t=this.end;if(t>this.start&&this.b[t-1]===e)return t-1;if(t===this.start||e>this.b[t-1])return t===this.b.length&&(this.start>this.count?this.relocate(0,this.b.length):this.relocate(0,Math.max(1024,this.b.length*2))),this.b[this.end]=e,this.clearRow(this.end),this.end++;let n=this.lowerBound(e);if(this.b[n]===e)return n;if(n!==this.start)throw Error(`TimeBuckets: insert inside the rows`);if(this.start===0){let e=Math.max(1024,this.count);this.relocate(e,2*e+this.count)}return this.start--,this.b[this.start]=e,this.clearRow(this.start),this.invalid=!0,this.start}dropBelow(e){this.start=this.lowerBound(e),this.start===this.end&&(this.start=this.end=0,this.invalid=!0)}reset(e){this.clearRow(e)}fold(e,t,n,r){this.touch(e);for(let i=0;i<t.length;i++){let a=t[i],o=1/0,s=-1/0;for(let e=n;e<r;e++){let t=a[e];t<o&&(o=t),t>s&&(s=t)}if(o===1/0)continue;let c=this.lo[i],l=this.hi[i],u=c[e],d=l[e];c[e]=u<=o?u:o,l[e]=d>=s?d:s}}toRows(e,t,n,r,i){let a=[];for(let o=e;o<t;o++){let e={...n,b:this.b[o],pass:0};for(let t=0;t<this.nc;t++){let n=this.lo[t][o];n===n&&(e[r[t]]=n,e[i[t]]=this.hi[t][o])}a.push(e)}return a}pointsOf(e){for(let t=0;t<this.nc;t++){let n=this.hi[t][e];if(n===n&&n!==this.lo[t][e])return 2}return 1}writeRow(e,t,n){let r=(this.b[e]+.5)*this.bucket;this.px[t]=r;for(let n=0;n<this.nc;n++)this.pv[n][t]=this.lo[n][e];if(n===2){this.px[t+1]=r;for(let n=0;n<this.nc;n++)this.pv[n][t+1]=this.hi[n][e]}}reserve(e){if(this.pEnd+e<=this.px.length)return;let t=this.pEnd-this.pStart,n=W-this.pStart,r=2*(t+e+W)<=this.px.length,i=r?this.px.length:Math.max(4096,2*(t+e+W)),a=e=>{if(r)return e.copyWithin(W,this.pStart,this.pEnd),e;let t=new Float64Array(i);return t.set(e.subarray(this.pStart,this.pEnd),W),t};this.px=a(this.px),this.pv=this.pv.map(a);for(let e=this.mStart;e<this.mEnd;e++)this.rowP[e]+=n;this.pStart=W,this.pEnd=W+t}writeFrom(e){this.mEnd=e;for(let t=e;t<this.end;t++){let e=this.pointsOf(t);this.reserve(e),this.rowP[t]=this.pEnd,this.writeRow(t,this.pEnd,e),this.pEnd+=e,this.mEnd=t+1}}sync(){if(this.pv.length!==this.nc&&(this.pv=Array.from({length:this.nc},()=>new Float64Array)),this.invalid||this.start<this.mStart||this.start>=this.mEnd)this.pStart=this.pEnd=W,this.mStart=this.mEnd=this.start,this.reserve(0),this.writeFrom(this.start);else{this.start>this.mStart&&(this.mStart=this.start,this.pStart=this.rowP[this.start]);let e=Math.max(this.start,Math.min(this.dirty,this.mEnd)),t=this.dirtyFront;if(t===this.start)if(t+1<e){let e=this.pointsOf(t),n=this.rowP[t+1]-e;if(n<0)return this.invalid=!0,this.sync();this.rowP[t]=n,this.pStart=n,this.writeRow(t,n,e)}else e=t;e<this.end&&(e<this.mEnd&&(this.pEnd=this.rowP[e]),this.writeFrom(e))}this.dirty=1/0,this.dirtyFront=-1,this.invalid=!1}toPoints(e,t,n){this.sync();let r=e<t?this.rowP[e]:0,i=e<t?t<this.mEnd?this.rowP[t]:this.pEnd:0;return{length:i-r,x:this.px.subarray(r,i),cols:new Map(n.map((e,t)=>[e,this.pv[t].subarray(r,i)]))}}};function Ut(e){if(!(e>0)||!Number.isFinite(e))return e;let t=10**Math.floor(Math.log10(e)),n=e/t;return(n<1.5?1:n<3.5?2:n<7.5?5:10)*t}function Wt(e,t,n,r,i){if(n instanceof Float64Array||n instanceof Float32Array)e.set(n.subarray(r,r+i),t);else for(let a=0;a<i;a++)e[t+a]=+n[r+a]}function Gt(e,t){let n=e.t.length,r=Object.keys(e.columns).filter(e=>e!==t);for(let t of r)if(e.columns[t].length!==n)throw RangeError(`live column "${t}" has ${e.columns[t].length} values for ${n} times`);return r}var Kt=`ElapsedTime`,qt=[];function Jt(e){let t=qt[e];if(!t){let n=Array.from({length:e},(e,t)=>`y${t}lo`),r=Array.from({length:e},(e,t)=>`y${t}hi`);t={lo:n,hi:r,row:JSON.parse(JSON.stringify(Object.fromEntries([[`b`,0],[`pass`,0],...n.flatMap((e,t)=>[[e,null],[r[t],null]])])))},qt[e]=t}return t}var Yt=4096,Xt=4,Zt=class{time;alloc;maxBytes;cols=new Map;head=0;count=0;full=!1;pushed=0;clears=0;signalOrder=[];unitByName=new Map;capacity;timeColumn;timeUnit;lastBackAbs=-1;get timeMonotonic(){return this.lastBackAbs<=this.pushed-this.size}lastPushT=-1/0;decCache=null;passTrack=null;prevCyclePts=null;curCyclePts=null;trackers=new Map;debugLastScan=0;timeDec=null;mirrors=new Map;historyDec=null;constructor(e,t=Kt,n=`s`,r=1/0){this.capacity=Math.max(2,Math.floor(e)),this.timeColumn=t,this.timeUnit=n,this.maxBytes=r,this.alloc=Math.min(this.capacity,Yt),this.time=new Float64Array(this.alloc)}get maxSamples(){return this.capacity}newColumn(){return new Float64Array(this.alloc).fill(NaN)}grow(){let e=Math.min(this.capacity,this.alloc*2);if(e*8*(1+this.cols.size)>this.maxBytes){this.capacity=this.alloc;return}let t=t=>{let n=new Float64Array(e);return n.set(t),n};this.time=t(this.time);for(let[e,n]of this.cols)this.cols.set(e,t(n));this.alloc=e}get version(){return this.pushed+this.clears}get size(){return this.full?this.capacity:this.count}push(e){for(let[t,n]of this.trackers){let r=t===this.timeColumn?e.t:e.signals.find(e=>e.name===t)?.value;r!==void 0&&Number.isFinite(r)&&this.advanceCycle(t,n,r,this.pushed)}e.t<this.lastPushT&&this.steppedBack(this.pushed),this.lastPushT=e.t,!this.full&&this.count===this.alloc&&(this.grow(),this.count===this.capacity&&(this.full=!0));let t=this.full?this.head:this.count;this.time[t]=e.t;for(let e of this.signalOrder)this.cols.get(e)[t]=NaN;for(let n of e.signals){if(this.computed.has(n.name))continue;let e=this.cols.get(n.name);e?n.unit&&n.unit!==this.unitByName.get(n.name)&&(this.unitByName.get(n.name)&&this.dropColumnSamples(n.name,e),this.unitByName.set(n.name,n.unit)):(e=this.newColumn(),this.cols.set(n.name,e),this.signalOrder.push(n.name),this.unitByName.set(n.name,n.unit??``)),e[t]=n.value}this.pushed++,this.full?this.head=(this.head+1)%this.capacity:(this.count++,this.count===this.capacity&&(this.full=!0))}pushColumns(e){let t=e.t,n=t.length,r=Gt(e,this.timeColumn);if(n===0)return;if(this.trackers.size>0){for(let i=0;i<n;i++)this.push({t:t[i],signals:r.map(t=>({name:t,unit:e.units?.[t],value:e.columns[t][i]}))});return}for(let t of r){if(this.computed.has(t))continue;let n=e.units?.[t],r=this.cols.get(t);r?n&&n!==this.unitByName.get(t)&&(this.unitByName.get(t)&&this.dropColumnSamples(t,r),this.unitByName.set(t,n)):(this.cols.set(t,this.newColumn()),this.signalOrder.push(t),this.unitByName.set(t,n??``))}for(let e=0;e<n;e++){let n=+t[e];n<this.lastPushT&&this.steppedBack(this.pushed+e),this.lastPushT=n}let i=Math.max(0,n-this.capacity);for(this.pushed+=i;i<n;){!this.full&&this.count===this.alloc&&(this.grow(),this.count===this.capacity&&(this.full=!0));let r=this.full?this.head:this.count,a=Math.min(n-i,this.full?this.capacity-this.head:this.alloc-this.count);Wt(this.time,r,t,i,a);for(let t of this.signalOrder){let n=this.cols.get(t),o=this.computed.has(t)?void 0:e.columns[t];o?Wt(n,r,o,i,a):n.fill(NaN,r,r+a)}this.pushed+=a,i+=a,this.full?this.head=(this.head+a)%this.capacity:(this.count+=a,this.count===this.capacity&&(this.full=!0))}}steppedBack(e){this.lastBackAbs=e,this.timeDec=null}dropColumnSamples(e,t){t.fill(NaN),this.decCache=null,this.timeDec=null;for(let t of this.trackers.values())t.previous?.cols.delete(e);this.clears++}clear(){this.clears++,this.head=0,this.count=0,this.full=!1,this.pushed=0,this.cols.clear(),this.computed.clear(),this.signalOrder.length=0,this.unitByName.clear(),this.decCache=null,this.timeDec=null,this.lastBackAbs=-1,this.lastPushT=-1/0,this.trackers.clear()}columnArray(e){return e===this.timeColumn?this.time:this.cols.get(e)}physOf(e){let t=e-(this.pushed-this.size);return this.full?(this.head+t)%this.capacity:t}copyRange(e,t,n,r=[this.timeColumn,...this.signalOrder]){let i=Math.max(t,this.pushed-this.size),a=Math.max(0,n-i),o=this.columnArray(e),s=new Float64Array(a),c=new Map;for(let e of r)this.columnArray(e)&&c.set(e,new Float64Array(a));for(let e=0;e<a;e++){let t=this.physOf(i+e);s[e]=o?o[t]:NaN;for(let[n,r]of c)r[e]=this.columnArray(n)[t]}return{x:s,cols:c}}advanceCycle(e,t,n,r){Number.isFinite(t.lastX)&&n<t.lastX&&t.lastX-n>(t.hi-t.lo)/2?(t.previous=this.copyRange(e,t.start,r),t.start=r,t.lo=t.hi=n):Number.isFinite(t.lastX)?(n<t.lo&&(t.lo=n),n>t.hi&&(t.hi=n)):t.lo=t.hi=n,n<t.allLo&&(t.allLo=n),n>t.allHi&&(t.allHi=n),t.lastX=n}trackCycles(e){if(this.trackers.has(e))return;let t={start:this.pushed-this.size,lo:0,hi:0,lastX:NaN,allLo:1/0,allHi:-1/0,previous:null},n=this.columnArray(e),r=this.pushed-this.size;if(n)for(let i=r;i<this.pushed;i++){let r=n[this.physOf(i)];Number.isFinite(r)&&this.advanceCycle(e,t,r,i)}this.trackers.set(e,t)}cycleSpan(e){let t=this.trackers.get(e);return t&&t.allHi>t.allLo?[t.allLo,t.allHi]:null}decimateCycle(e,t,n,r,i,a){let o=this.trackers.get(e),s=n.filter(e=>this.cols.has(e));if(!o)return{x0:r,bucket:0,rows:[],columns:s};let c=t===`previous`?o.previous:this.copyRange(e,o.start,this.pushed,s);if(!c)return{x0:r,bucket:0,rows:[],columns:s};let l=s.map(e=>c.cols.get(e)??new Float64Array(c.x.length).fill(NaN));return re(c.x,l,s,r,i,a)}decimateCyclePoints(e,t,n,r,i,a){let o=()=>{let o=this.decimateCycle(e,t,n,r,i,a);return U(o.rows,o.columns,o.x0,o.bucket)},s=this.trackers.get(e),c=Math.floor(a),l=this.columnArray(e);if(!s||!l||!(i>r)||c<1)return o();let u=n.filter(e=>this.cols.has(e)),d=u.join(` `);if(t===`previous`){let e=this.prevCyclePts;if(e&&e.snap===s.previous&&e.x0===r&&e.x1===i&&e.mp===a&&e.colsKey===d)return e.pts;let t=o();return this.prevCyclePts={snap:s.previous,x0:r,x1:i,mp:a,colsKey:d,pts:t},t}if(s.start<this.pushed-this.size)return o();let f=this.curCyclePts;if((!f||f.key!==e||f.start!==s.start||f.x0!==r||f.x1!==i||f.mp!==a||f.colsKey!==d||f.clears!==this.clears)&&(f=this.curCyclePts={key:e,start:s.start,x0:r,x1:i,mp:a,colsKey:d,clears:this.clears,done:s.start,pts:null,seen:new Uint8Array(c),lo:u.map(()=>new Float64Array(c).fill(1/0)),hi:u.map(()=>new Float64Array(c).fill(-1/0))}),f.pts&&f.done===this.pushed)return f.pts;let p=(i-r)/a,m=u.map(e=>this.columnArray(e));for(let e=f.done;e<this.pushed;e++){let t=this.physOf(e),n=l[t];if(!(n>=r&&n<=i))continue;let a=Math.floor((n-r)/p);a>=c&&(a=c-1),f.seen[a]=1;for(let e=0;e<m.length;e++){let n=m[e][t];n===n&&(n<f.lo[e][a]&&(f.lo[e][a]=n),n>f.hi[e][a]&&(f.hi[e][a]=n))}}f.done=this.pushed;let h=0,g=new Uint8Array(c);for(let e=0;e<c;e++)if(f.seen[e]){for(let t=0;t<m.length;t++){let n=f.hi[t][e];if(n!==-1/0&&n!==f.lo[t][e]){g[e]=1;break}}h+=1+g[e]}let _=new Float64Array(h),v=u.map(()=>new Float64Array(h)),y=0;for(let e=0;e<c;e++){if(!f.seen[e])continue;let t=r+(e+.5)*p;_[y]=t;for(let t=0;t<m.length;t++){let n=f.lo[t][e];v[t][y]=n===1/0?NaN:n}if(y++,g[e]){_[y]=t;for(let t=0;t<m.length;t++){let n=f.hi[t][e];v[t][y]=n===-1/0?NaN:n}y++}}return f.pts={length:h,x:_,cols:new Map(u.map((e,t)=>[e,v[t]]))},f.pts}computed=new Set;get firstAbs(){return this.pushed-this.size}get endAbs(){return this.pushed}range(e,t,n){let r=Math.max(t,this.firstAbs),i=new Float64Array(Math.max(0,Math.min(n,this.pushed)-r)),a=this.columnArray(e);if(!a)return i.fill(NaN);for(let e=0;e<i.length;e++)i[e]=a[this.physOf(r+e)];return i}mirrorColumn(e){let t=this.columnArray(e);if(!t)return;let n=this.firstAbs,r=this.pushed,i=this.mirrors.get(e);if((!i||i.clears!==this.clears)&&(i={arr:new Float64Array(Math.max(16,r-n)),first:n,end:n,clears:this.clears,view:null},this.mirrors.set(e,i)),i.first===n&&i.end===r&&i.view)return i.view;if(n>i.first){let e=Math.max(0,i.end-n);e>0&&i.arr.copyWithin(0,n-i.first,i.end-i.first),i.first=n,i.end=n+e}if(i.arr.length<r-n){let e=new Float64Array(Math.max(r-n,i.arr.length*2));e.set(i.arr.subarray(0,i.end-i.first)),i.arr=e}for(let e=i.end;e<r;){let a=this.physOf(e),o=Math.min(r-e,(this.full?this.capacity:this.alloc)-a);i.arr.set(t.subarray(a,a+o),e-n),e+=o}return i.end=r,i.view=i.arr.subarray(0,r-n),i.view}writeComputed(e,t,n,r){let i=this.mirrors.get(e);i&&n<i.end&&(i.end=Math.max(i.first,n),i.view=null);let a=this.cols.get(e);(!a||!this.computed.has(e))&&(a||(a=this.newColumn(),this.cols.set(e,a),this.signalOrder.push(e)),this.computed.add(e)),this.unitByName.set(e,t);for(let e=0;e<r.length;e++){let t=n+e;t<this.firstAbs||t>=this.pushed||(a[this.physOf(t)]=r[e]??NaN)}}clearComputed(){for(let e of this.computed){this.cols.delete(e),this.unitByName.delete(e);for(let t of this.trackers.values())t.previous?.cols.delete(e)}this.signalOrder.splice(0,this.signalOrder.length,...this.signalOrder.filter(e=>!this.computed.has(e))),this.computed.clear(),this.decCache=null,this.timeDec=null,this.clears++}get columnNames(){return[this.timeColumn,...this.signalOrder]}unitOf(e){return e===this.timeColumn?this.timeUnit:this.unitByName.get(e)??``}columnValues(e){let t=this.size,n=new Float64Array(t),r=e===this.timeColumn?this.time:this.cols.get(e);if(!r)return n.fill(NaN),n;for(let e=0;e<t;e++)n[e]=r[this.full?(this.head+e)%this.capacity:e];return n}accumulate(e,t,n,r,i){let a=Jt(i.length),o=n[t];if(Number.isNaN(o))return;let s=Math.floor(o/r),c=e.get(s);c||(c={...a.row,b:s},e.set(s,c));for(let e=0;e<i.length;e++){let n=i[e][t];if(Number.isNaN(n))continue;let r=a.lo[e],o=a.hi[e],s=c[r],l=c[o];c[r]=s==null?n:Math.min(s,n),c[o]=l==null?n:Math.max(l,n)}}decimateColumns(e,t,n,r,i){if(e===this.timeColumn&&this.timeMonotonic)return this.decimateTime(t,n,r,i);let a=e===this.timeColumn?this.time:this.cols.get(e),o=a?t.filter(e=>this.cols.has(e)):[],s=(r-n)/i,c=this.size;if(c>1&&e===this.timeColumn&&this.timeMonotonic&&a){let e=a[this.full?this.head:0],t=(a[this.full?(this.head+c-1)%this.capacity:c-1]-e)/(c-1);t>0&&t<s&&(s=.7*Math.max(t,(r-n)/(i*Xt)))}let l=Ut(s);{let t=this.decCache;t&&t.xKey===e&&t.colsKey===o.join(` `)&&t.bucket>0&&s>=t.bucket*.5&&s<=t.bucket*2&&(l=t.bucket)}if(!a||o.length===0||!(r>n)||!(l>0))return{x0:n,bucket:0,rows:[],columns:o};let u=o.map(e=>this.cols.get(e)),d=this.size,f=o.join(`\0`);this.debugLastScan=0;let p=this.decCache,m=p!==null&&e===this.timeColumn&&this.timeMonotonic&&p.xKey===e&&p.colsKey===f&&p.bucket===l&&this.pushed>=p.pushed&&this.pushed-p.pushed<d&&p.map.size<this.capacity*2,h=p!==null&&p.xKey===e&&p.colsKey===f&&p.bucket===l&&p.pushed===this.pushed,g=this.pushed-d,_=e===this.timeColumn&&this.timeMonotonic?g:Math.max(g,this.passStart(e,a)),v=p!==null&&(_>g||!this.full)&&p.xKey===e&&p.colsKey===f&&p.bucket===l&&p.passStart===_&&p.pushed>=_&&p.pushed<=this.pushed,y;if(h&&p)y=p.map;else if(v&&p){y=p.map;for(let e=p.pushed;e<this.pushed;e++)this.debugLastScan++,this.accumulate(y,this.physOf(e),a,l,u);p.pushed=this.pushed}else if(m&&p){y=p.map;let e=this.pushed-p.pushed;for(let t=d-e;t<d;t++){let e=this.full?(this.head+t)%this.capacity:t;this.debugLastScan++,this.accumulate(y,e,a,l,u)}if(this.full&&d>0){let e=a[this.head];if(!Number.isNaN(e)){let t=Math.floor(e/l);for(let e=p.lowB;e<t;e++)y.delete(e);y.delete(t);for(let e=0;e<d;e++){let n=(this.head+e)%this.capacity,r=a[n];if(!Number.isNaN(r)){if(Math.floor(r/l)>t)break;this.debugLastScan++,this.accumulate(y,n,a,l,u)}}p.lowB=t}}p.pushed=this.pushed}else{y=new Map;let t=1/0;for(let e=_;e<this.pushed;e++){let n=this.physOf(e),r=a[n];if(Number.isNaN(r))continue;this.debugLastScan++,this.accumulate(y,n,a,l,u);let i=Math.floor(r/l);i<t&&(t=i)}this.decCache={xKey:e,colsKey:f,cols:o,bucket:l,map:y,pushed:this.pushed,lowB:Number.isFinite(t)?t:0,passStart:_}}let b=Math.floor(n/l),x=Math.floor(r/l),S=[];for(let e of y.values()){let t=e.b;t>=b&&t<=x&&S.push(e)}return S.sort((e,t)=>Number(e.b)-Number(t.b)),{x0:0,bucket:l,rows:S,columns:o}}passStart(e,t){let n=this.pushed-this.size,r=this.passTrack;(!r||r.key!==e||r.clears!==this.clears)&&(r=this.passTrack={key:e,clears:this.clears,done:n,prevX:NaN,cuts:[]});let{x0:i,x1:a}=this.columnBounds(e),o=(a-i)/2;for(let e=Math.max(r.done,n);e<this.pushed;e++){let n=t[this.physOf(e)];Number.isNaN(n)||(n<r.prevX-o&&(r.cuts.push({abs:e,drop:r.prevX-n}),r.cuts.length>64&&r.cuts.shift()),r.prevX=n)}for(r.done=this.pushed;r.cuts.length>0&&r.cuts[0].abs<n;)r.cuts.shift();for(let e=r.cuts.length-1;e>=0;e--)if(r.cuts[e].drop>o)return r.cuts[e].abs;return n}timeIndex(e){let t=0,n=this.size;for(;t<n;){let r=t+n>>>1;this.time[this.full?(this.head+r)%this.capacity:r]<e?t=r+1:n=r}return t}foldBuckets(e,t,n,r,i){this.eachBucketRun(t,n,r,(t,n,r)=>e.fold(e.row(t),i,n,r))}eachBucketRun(e,t,n,r){if(t<=e)return;this.debugLastScan+=t-e;let i=this.time,a=e=>Math.floor(i[e]/n),o=(e,t)=>{let n=e;for(;n<t;){let e=a(n),i=n,o=1;for(;n+o<t&&a(n+o)===e;)i=n+o,o*=2;let s=i+1,c=Math.min(n+o,t);for(;s<c;){let t=s+c>>>1;a(t)===e?s=t+1:c=t}r(e,n,s),n=s}};if(!this.full)return o(e,t);let s=(this.head+e)%this.capacity,c=s+(t-e);if(c<=this.capacity)return o(s,c);o(s,this.capacity),o(0,c-this.capacity)}decimateTime(e,t,n,r){let i=this.timeBuckets(e,t,n,r);if(!i.store)return{x0:t,bucket:0,rows:[],columns:i.cols};let a=Jt(i.cols.length),o=()=>i.store.toRows(i.i0,i.i1,a.row,a.lo,a.hi),s=this.historyDec;return{x0:0,bucket:i.bucket,rows:s?.store===i.store?s.rows??=o():o(),columns:i.cols}}decimatePoints(e,t,n,r,i){if(e===this.timeColumn&&this.timeMonotonic){let e=this.timeBuckets(t,n,r,i);return e.store?e.store.toPoints(e.i0,e.i1,e.cols):{length:0,x:new Float64Array,cols:new Map(e.cols.map(e=>[e,new Float64Array]))}}let a=this.decimateColumns(e,t,n,r,i);return U(a.rows,a.columns,a.x0,a.bucket)}timeBuckets(e,t,n,r){let i=e.filter(e=>this.cols.has(e)),a=this.size,o={cols:i,bucket:0,store:null,i0:0,i1:0};if(i.length===0||!(n>t)||a===0)return o;let s=e=>this.full?(this.head+e)%this.capacity:e,c=this.time[s(0)],l=this.time[s(a-1)],u=(n-t)/r;if(a>1){let e=(l-c)/(a-1);e>0&&e<u&&(u=.7*Math.max(e,(n-t)/(r*Xt)))}let d=Ut(u),f=i.join(` `),p=this.timeDec;if(p&&p.colsKey===f&&u>=p.bucket*.5&&u<=p.bucket*2&&(d=p.bucket),!(d>0))return o;let m=i.map(e=>this.cols.get(e)),h=Math.floor(t/d),g=Math.floor(n/d);this.debugLastScan=0;let _=e=>({cols:i,bucket:d,store:e,i0:e.lowerBound(h),i1:e.lowerBound(g+1)});if(n<l-(n-t)){let e=this.timeIndex(h*d),t=this.timeIndex((g+1)*d),n=this.pushed-a,r=`${f}|${d}|${h}|${g}|${n+e}|${n+t}|${this.clears}`;if(this.historyDec?.key!==r){let n=new Ht(i.length,d);this.foldBuckets(n,e,t,d,m),this.historyDec={key:r,store:n}}return _(this.historyDec.store)}let v=p?this.pushed-p.pushed:0;if(p&&p.colsKey===f&&p.bucket===d&&v>=0&&v<a){let e=p.store;if(h<p.fromB){let t=new Ht(i.length,d);this.foldBuckets(t,this.timeIndex(h*d),this.timeIndex(p.fromB*d),d,m);for(let n=t.end-1;n>=t.start;n--){let r=e.row(t.b[n]);for(let i=0;i<t.nc;i++)e.lo[i][r]=t.lo[i][n],e.hi[i][r]=t.hi[i][n]}p.fromB=h}v>0&&this.foldBuckets(e,a-v,a,d,m);let t=Math.floor(c/d);return this.full&&t>=p.fromB&&(e.dropBelow(t),e.reset(e.row(t)),this.foldBuckets(e,0,this.timeIndex((t+1)*d),d,m),p.fromB=t),h>p.fromB&&(e.dropBelow(h),p.fromB=h),p.pushed=this.pushed,_(e)}let y=new Ht(i.length,d),b=this.timeIndex(h*d);return this.foldBuckets(y,b,a,d,m),this.timeDec={colsKey:f,bucket:d,store:y,pushed:this.pushed,fromB:b===0?Math.floor(c/d):h},_(y)}lastValue(e){let t=e===this.timeColumn?this.time:this.cols.get(e);return!t||this.size===0?NaN:t[this.full?(this.head-1+this.capacity)%this.capacity:this.count-1]}xTravel(e,t){let n=this.columnArray(e),r=this.size;if(!n||r<2)return NaN;let i=e=>this.full?(this.head+e)%this.capacity:e,a=this.time[i(r-1)],o=0,s=NaN,c=a;for(let e=r-1;e>=0;e--){let r=i(e),l=this.time[r];if(l<a-t)break;let u=n[r];Number.isNaN(u)||(s>u&&(o+=s-u),s=u,c=l)}let l=a-c;return l>0&&l<t?o*t/l:o}latestTime(){return this.lastValue(this.timeColumn)}xAtTime(e,t){let n=this.columnArray(e),r=this.size;if(!n||r===0||!this.timeMonotonic)return NaN;let i=e=>this.full?(this.head+e)%this.capacity:e,a=0,o=r-1;if(t<=this.time[i(0)])return n[i(0)];if(t>=this.time[i(o)])return n[i(o)];for(;o-a>1;){let e=a+o>>1;this.time[i(e)]<=t?a=e:o=e}let s=i(a),c=i(o),l=n[s],u=n[c];if(!(u>=l))return l;let d=this.time[s],f=this.time[c];return f>d?l+(u-l)*(t-d)/(f-d):l}boundsCache=new Map;columnBounds(e){let t=e===this.timeColumn?this.time:this.cols.get(e),n=this.size;if(!t||n===0)return{x0:0,x1:0};if(t===this.time&&this.timeMonotonic)return{x0:this.time[this.full?this.head:0],x1:this.time[this.full?(this.head+n-1)%this.capacity:n-1]};let r=this.pushed-n,i=this.boundsCache.get(e);if(i&&i.version===this.version)return i.b;(!i||i.clears!==this.clears||i.loAbs<r||i.hiAbs<r)&&(i={version:-1,clears:this.clears,done:r,lo:1/0,hi:-1/0,loAbs:1/0,hiAbs:1/0,b:{x0:0,x1:0}},this.boundsCache.set(e,i));for(let e=Math.max(i.done,r);e<this.pushed;e++){let n=t[this.physOf(e)];Number.isNaN(n)||(n<=i.lo&&(i.lo=n,i.loAbs=e),n>=i.hi&&(i.hi=n,i.hiAbs=e))}return i.done=this.pushed,i.version=this.version,i.b=Number.isFinite(i.lo)?{x0:i.lo,x1:i.hi}:{x0:0,x1:0},i.b}toDataset(e){let t=[this.timeColumn,...this.signalOrder],n=[this.timeUnit,...this.signalOrder.map(e=>this.unitByName.get(e)??``)],r=this.size,i=e&&e>0&&r>e?Math.ceil(r/e):1,a=e=>{let t=this.full?(this.head+e)%this.capacity:e,n={[this.timeColumn]:this.time[t]};for(let e of this.signalOrder){let r=this.cols.get(e)[t];n[e]=Number.isNaN(r)?null:r}return n},o=this.pushed-r,s=i>1?(i-o%i)%i:0,c=[];for(let e=s;e<r;e+=i)c.push(a(e));return r>0&&(c.length===0||(r-1-s)%i!=0)&&c.push(a(r-1)),{meta:``,columnNames:t,units:n,rows:c}}};new TextEncoder;var Qt=4096;function $t(e,t,n){let r=t,i=r+n,a=[],o=``;for(;r<i;){let t=e[r++];if(!(t&128))a.push(t);else if((t&224)==192){let n=e[r++]&63;a.push((t&31)<<6|n)}else if((t&240)==224){let n=e[r++]&63,i=e[r++]&63;a.push((t&31)<<12|n<<6|i)}else if((t&248)==240){let n=e[r++]&63,i=e[r++]&63,o=e[r++]&63,s=(t&7)<<18|n<<12|i<<6|o;s>65535&&(s-=65536,a.push(s>>>10&1023|55296),s=56320|s&1023),a.push(s)}else a.push(t);a.length>=Qt&&(o+=String.fromCharCode(...a),a.length=0)}return a.length>0&&(o+=String.fromCharCode(...a)),o}var en=new TextDecoder,tn=200;function nn(e,t,n){let r=e.subarray(t,t+n);return en.decode(r)}function rn(e,t,n){return n>tn?nn(e,t,n):$t(e,t,n)}var G=class{type;data;constructor(e,t){this.type=e,this.data=t}},K=class e extends Error{constructor(t){super(t);let n=Object.create(e.prototype);Object.setPrototypeOf(this,n),Object.defineProperty(this,`name`,{configurable:!0,enumerable:!1,value:e.name})}};function an(e,t,n){let r=Math.floor(n/4294967296),i=n;e.setUint32(t,r),e.setUint32(t+4,i)}function on(e,t){let n=e.getInt32(t),r=e.getUint32(t+4);return n*4294967296+r}function sn(e,t){let n=e.getUint32(t),r=e.getUint32(t+4);return n*4294967296+r}var cn=4294967295,ln=17179869183;function un({sec:e,nsec:t}){if(e>=0&&t>=0&&e<=ln)if(t===0&&e<=cn){let t=new Uint8Array(4);return new DataView(t.buffer).setUint32(0,e),t}else{let n=e/4294967296,r=e&4294967295,i=new Uint8Array(8),a=new DataView(i.buffer);return a.setUint32(0,t<<2|n&3),a.setUint32(4,r),i}else{let n=new Uint8Array(12),r=new DataView(n.buffer);return r.setUint32(0,t),an(r,4,e),n}}function dn(e){let t=e.getTime(),n=Math.floor(t/1e3),r=(t-n*1e3)*1e6,i=Math.floor(r/1e9);return{sec:n+i,nsec:r-i*1e9}}function fn(e){return e instanceof Date?un(dn(e)):null}function pn(e){let t=new DataView(e.buffer,e.byteOffset,e.byteLength);switch(e.byteLength){case 4:return{sec:t.getUint32(0),nsec:0};case 8:{let e=t.getUint32(0),n=t.getUint32(4);return{sec:(e&3)*4294967296+n,nsec:e>>>2}}case 12:return{sec:on(t,4),nsec:t.getUint32(0)};default:throw new K(`Unrecognized data size for timestamp (expected 4, 8, or 12): ${e.length}`)}}function mn(e){let t=pn(e);return new Date(t.sec*1e3+t.nsec/1e6)}var hn={type:-1,encode:fn,decode:mn},gn=class e{static defaultCodec=new e;__brand;builtInEncoders=[];builtInDecoders=[];encoders=[];decoders=[];constructor(){this.register(hn)}register({type:e,encode:t,decode:n}){if(e>=0)this.encoders[e]=t,this.decoders[e]=n;else{let r=-1-e;this.builtInEncoders[r]=t,this.builtInDecoders[r]=n}}tryToEncode(e,t){for(let n=0;n<this.builtInEncoders.length;n++){let r=this.builtInEncoders[n];if(r!=null){let i=r(e,t);if(i!=null)return new G(-1-n,i)}}for(let n=0;n<this.encoders.length;n++){let r=this.encoders[n];if(r!=null){let i=r(e,t);if(i!=null)return new G(n,i)}}return e instanceof G?e:null}decode(e,t,n){let r=t<0?this.builtInDecoders[-1-t]:this.decoders[t];return r?r(e,t,n):new G(t,e)}};function _n(e){return e instanceof ArrayBuffer||typeof SharedArrayBuffer<`u`&&e instanceof SharedArrayBuffer}function vn(e){return e instanceof Uint8Array?e:ArrayBuffer.isView(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):_n(e)?new Uint8Array(e):Uint8Array.from(e)}function yn(e){return`${e<0?`-`:``}0x${Math.abs(e).toString(16).padStart(2,`0`)}`}var bn=16,xn=16,Sn=class{hit=0;miss=0;caches;maxKeyLength;maxLengthPerKey;constructor(e=bn,t=xn){this.maxKeyLength=e,this.maxLengthPerKey=t,this.caches=[];for(let e=0;e<this.maxKeyLength;e++)this.caches.push([])}canBeCached(e){return e>0&&e<=this.maxKeyLength}find(e,t,n){let r=this.caches[n-1];FIND_CHUNK:for(let i of r){let r=i.bytes;for(let i=0;i<n;i++)if(r[i]!==e[t+i])continue FIND_CHUNK;return i.str}return null}store(e,t){let n=this.caches[e.length-1],r={bytes:e,str:t};n.length>=this.maxLengthPerKey?n[Math.random()*n.length|0]=r:n.push(r)}decode(e,t,n){let r=this.find(e,t,n);if(r!=null)return this.hit++,r;this.miss++;let i=$t(e,t,n),a=Uint8Array.prototype.slice.call(e,t,t+n);return this.store(a,i),i}},Cn=`array`,q=`map_key`,wn=`map_value`,Tn=e=>{if(typeof e==`string`||typeof e==`number`)return e;throw new K(`The type of key must be string or number but `+typeof e)},En=class{stack=[];stackHeadPosition=-1;get length(){return this.stackHeadPosition+1}top(){return this.stack[this.stackHeadPosition]}pushArrayState(e){let t=this.getUninitializedStateFromPool();t.type=Cn,t.position=0,t.size=e,t.array=Array(e)}pushMapState(e){let t=this.getUninitializedStateFromPool();t.type=q,t.readCount=0,t.size=e,t.map={}}getUninitializedStateFromPool(){return this.stackHeadPosition++,this.stackHeadPosition===this.stack.length&&this.stack.push({type:void 0,size:0,array:void 0,position:0,readCount:0,map:void 0,key:null}),this.stack[this.stackHeadPosition]}release(e){if(this.stack[this.stackHeadPosition]!==e)throw Error(`Invalid stack state. Released state is not on top of the stack.`);if(e.type===Cn){let t=e;t.size=0,t.array=void 0,t.position=0,t.type=void 0}if(e.type===q||e.type===wn){let t=e;t.size=0,t.map=void 0,t.readCount=0,t.type=void 0}this.stackHeadPosition--}reset(){this.stack.length=0,this.stackHeadPosition=-1}},J=-1,Dn=new DataView(new ArrayBuffer(0)),On=new Uint8Array(Dn.buffer);try{Dn.getInt8(0)}catch(e){if(!(e instanceof RangeError))throw Error(`This module is not supported in the current JavaScript engine because DataView does not throw RangeError on out-of-bounds access`)}var kn=RangeError(`Insufficient data`),An=new Sn,jn=class e{extensionCodec;context;useBigInt64;rawStrings;maxStrLength;maxBinLength;maxArrayLength;maxMapLength;maxExtLength;keyDecoder;mapKeyConverter;totalPos=0;pos=0;view=Dn;bytes=On;headByte=J;stack=new En;entered=!1;constructor(e){this.extensionCodec=e?.extensionCodec??gn.defaultCodec,this.context=e?.context,this.useBigInt64=e?.useBigInt64??!1,this.rawStrings=e?.rawStrings??!1,this.maxStrLength=e?.maxStrLength??4294967295,this.maxBinLength=e?.maxBinLength??4294967295,this.maxArrayLength=e?.maxArrayLength??4294967295,this.maxMapLength=e?.maxMapLength??4294967295,this.maxExtLength=e?.maxExtLength??4294967295,this.keyDecoder=e?.keyDecoder===void 0?An:e.keyDecoder,this.mapKeyConverter=e?.mapKeyConverter??Tn}clone(){return new e({extensionCodec:this.extensionCodec,context:this.context,useBigInt64:this.useBigInt64,rawStrings:this.rawStrings,maxStrLength:this.maxStrLength,maxBinLength:this.maxBinLength,maxArrayLength:this.maxArrayLength,maxMapLength:this.maxMapLength,maxExtLength:this.maxExtLength,keyDecoder:this.keyDecoder})}reinitializeState(){this.totalPos=0,this.headByte=J,this.stack.reset()}setBuffer(e){let t=vn(e);this.bytes=t,this.view=new DataView(t.buffer,t.byteOffset,t.byteLength),this.pos=0}appendBuffer(e){if(this.headByte===J&&!this.hasRemaining(1))this.setBuffer(e);else{let t=this.bytes.subarray(this.pos),n=vn(e),r=new Uint8Array(t.length+n.length);r.set(t),r.set(n,t.length),this.setBuffer(r)}}hasRemaining(e){return this.view.byteLength-this.pos>=e}createExtraByteError(e){let{view:t,pos:n}=this;return RangeError(`Extra ${t.byteLength-n} of ${t.byteLength} byte(s) found at buffer[${e}]`)}decode(e){if(this.entered)return this.clone().decode(e);try{this.entered=!0,this.reinitializeState(),this.setBuffer(e);let t=this.doDecodeSync();if(this.hasRemaining(1))throw this.createExtraByteError(this.pos);return t}finally{this.entered=!1}}*decodeMulti(e){if(this.entered){yield*this.clone().decodeMulti(e);return}try{for(this.entered=!0,this.reinitializeState(),this.setBuffer(e);this.hasRemaining(1);)yield this.doDecodeSync()}finally{this.entered=!1}}async decodeAsync(e){if(this.entered)return this.clone().decodeAsync(e);try{this.entered=!0;let t=!1,n;for await(let r of e){if(t)throw this.entered=!1,this.createExtraByteError(this.totalPos);this.appendBuffer(r);try{n=this.doDecodeSync(),t=!0}catch(e){if(!(e instanceof RangeError))throw e}this.totalPos+=this.pos}if(t){if(this.hasRemaining(1))throw this.createExtraByteError(this.totalPos);return n}let{headByte:r,pos:i,totalPos:a}=this;throw RangeError(`Insufficient data in parsing ${yn(r)} at ${a} (${i} in the current buffer)`)}finally{this.entered=!1}}decodeArrayStream(e){return this.decodeMultiAsync(e,!0)}decodeStream(e){return this.decodeMultiAsync(e,!1)}async*decodeMultiAsync(e,t){if(this.entered){yield*this.clone().decodeMultiAsync(e,t);return}try{this.entered=!0;let n=t,r=-1;for await(let i of e){if(t&&r===0)throw this.createExtraByteError(this.totalPos);this.appendBuffer(i),n&&(r=this.readArraySize(),n=!1,this.complete());try{for(;yield this.doDecodeSync(),--r!==0;);}catch(e){if(!(e instanceof RangeError))throw e}this.totalPos+=this.pos}}finally{this.entered=!1}}doDecodeSync(){DECODE:for(;;){let e=this.readHeadByte(),t;if(e>=224)t=e-256;else if(e<192)if(e<128)t=e;else if(e<144){let n=e-128;if(n!==0){this.pushMapState(n),this.complete();continue DECODE}else t={}}else if(e<160){let n=e-144;if(n!==0){this.pushArrayState(n),this.complete();continue DECODE}else t=[]}else{let n=e-160;t=this.decodeString(n,0)}else if(e===192)t=null;else if(e===194)t=!1;else if(e===195)t=!0;else if(e===202)t=this.readF32();else if(e===203)t=this.readF64();else if(e===204)t=this.readU8();else if(e===205)t=this.readU16();else if(e===206)t=this.readU32();else if(e===207)t=this.useBigInt64?this.readU64AsBigInt():this.readU64();else if(e===208)t=this.readI8();else if(e===209)t=this.readI16();else if(e===210)t=this.readI32();else if(e===211)t=this.useBigInt64?this.readI64AsBigInt():this.readI64();else if(e===217){let e=this.lookU8();t=this.decodeString(e,1)}else if(e===218){let e=this.lookU16();t=this.decodeString(e,2)}else if(e===219){let e=this.lookU32();t=this.decodeString(e,4)}else if(e===220){let e=this.readU16();if(e!==0){this.pushArrayState(e),this.complete();continue DECODE}else t=[]}else if(e===221){let e=this.readU32();if(e!==0){this.pushArrayState(e),this.complete();continue DECODE}else t=[]}else if(e===222){let e=this.readU16();if(e!==0){this.pushMapState(e),this.complete();continue DECODE}else t={}}else if(e===223){let e=this.readU32();if(e!==0){this.pushMapState(e),this.complete();continue DECODE}else t={}}else if(e===196){let e=this.lookU8();t=this.decodeBinary(e,1)}else if(e===197){let e=this.lookU16();t=this.decodeBinary(e,2)}else if(e===198){let e=this.lookU32();t=this.decodeBinary(e,4)}else if(e===212)t=this.decodeExtension(1,0);else if(e===213)t=this.decodeExtension(2,0);else if(e===214)t=this.decodeExtension(4,0);else if(e===215)t=this.decodeExtension(8,0);else if(e===216)t=this.decodeExtension(16,0);else if(e===199){let e=this.lookU8();t=this.decodeExtension(e,1)}else if(e===200){let e=this.lookU16();t=this.decodeExtension(e,2)}else if(e===201){let e=this.lookU32();t=this.decodeExtension(e,4)}else throw new K(`Unrecognized type byte: ${yn(e)}`);this.complete();let n=this.stack;for(;n.length>0;){let e=n.top();if(e.type===Cn)if(e.array[e.position]=t,e.position++,e.position===e.size)t=e.array,n.release(e);else continue DECODE;else if(e.type===q){if(t===`__proto__`)throw new K(`The key __proto__ is not allowed`);e.key=this.mapKeyConverter(t),e.type=wn;continue DECODE}else if(e.map[e.key]=t,e.readCount++,e.readCount===e.size)t=e.map,n.release(e);else{e.key=null,e.type=q;continue DECODE}}return t}}readHeadByte(){return this.headByte===J&&(this.headByte=this.readU8()),this.headByte}complete(){this.headByte=J}readArraySize(){let e=this.readHeadByte();switch(e){case 220:return this.readU16();case 221:return this.readU32();default:if(e<160)return e-144;throw new K(`Unrecognized array type byte: ${yn(e)}`)}}pushMapState(e){if(e>this.maxMapLength)throw new K(`Max length exceeded: map length (${e}) > maxMapLengthLength (${this.maxMapLength})`);this.stack.pushMapState(e)}pushArrayState(e){if(e>this.maxArrayLength)throw new K(`Max length exceeded: array length (${e}) > maxArrayLength (${this.maxArrayLength})`);this.stack.pushArrayState(e)}decodeString(e,t){return!this.rawStrings||this.stateIsMapKey()?this.decodeUtf8String(e,t):this.decodeBinary(e,t)}decodeUtf8String(e,t){if(e>this.maxStrLength)throw new K(`Max length exceeded: UTF-8 byte length (${e}) > maxStrLength (${this.maxStrLength})`);if(this.bytes.byteLength<this.pos+t+e)throw kn;let n=this.pos+t,r;return r=this.stateIsMapKey()&&this.keyDecoder?.canBeCached(e)?this.keyDecoder.decode(this.bytes,n,e):rn(this.bytes,n,e),this.pos+=t+e,r}stateIsMapKey(){return this.stack.length>0?this.stack.top().type===q:!1}decodeBinary(e,t){if(e>this.maxBinLength)throw new K(`Max length exceeded: bin length (${e}) > maxBinLength (${this.maxBinLength})`);if(!this.hasRemaining(e+t))throw kn;let n=this.pos+t,r=this.bytes.subarray(n,n+e);return this.pos+=t+e,r}decodeExtension(e,t){if(e>this.maxExtLength)throw new K(`Max length exceeded: ext length (${e}) > maxExtLength (${this.maxExtLength})`);let n=this.view.getInt8(this.pos+t),r=this.decodeBinary(e,t+1);return this.extensionCodec.decode(r,n,this.context)}lookU8(){return this.view.getUint8(this.pos)}lookU16(){return this.view.getUint16(this.pos)}lookU32(){return this.view.getUint32(this.pos)}readU8(){let e=this.view.getUint8(this.pos);return this.pos++,e}readI8(){let e=this.view.getInt8(this.pos);return this.pos++,e}readU16(){let e=this.view.getUint16(this.pos);return this.pos+=2,e}readI16(){let e=this.view.getInt16(this.pos);return this.pos+=2,e}readU32(){let e=this.view.getUint32(this.pos);return this.pos+=4,e}readI32(){let e=this.view.getInt32(this.pos);return this.pos+=4,e}readU64(){let e=sn(this.view,this.pos);return this.pos+=8,e}readI64(){let e=on(this.view,this.pos);return this.pos+=8,e}readU64AsBigInt(){let e=this.view.getBigUint64(this.pos);return this.pos+=8,e}readI64AsBigInt(){let e=this.view.getBigInt64(this.pos);return this.pos+=8,e}readF32(){let e=this.view.getFloat32(this.pos);return this.pos+=4,e}readF64(){let e=this.view.getFloat64(this.pos);return this.pos+=8,e}};function Mn(e,t){return new jn(t).decode(e)}var Y=12,Nn=16;function Pn(e){let t=new Uint8Array(e),n=t.length>0&&t[0]&128?2:1;return t.length<n+Y+Nn?null:{kind:t[0]&-129,keyId:n===2?t[1]:null,iv:t.subarray(n,n+Y),ciphertext:t.subarray(n+Y),aad:t.subarray(0,n)}}async function Fn(e,t){let n=Pn(t);if(!n)return null;let r=typeof e==`function`?await e(n.keyId):e;if(!r)return null;let i=await We(r,n.iv,n.ciphertext,n.aad);return{kind:n.kind,plaintext:i}}function In(e,t,n,r){return Ln(e,t,n,r)}async function Ln(e,t,n,r,i){let a=r===void 0?new Uint8Array([t]):new Uint8Array([t|128,r&255]),o=i??globalThis.crypto.getRandomValues(new Uint8Array(Y)),s=new Uint8Array(await globalThis.crypto.subtle.encrypt({name:`AES-GCM`,iv:o,additionalData:a},e,n)),c=new Uint8Array(a.length+Y+s.length);return c.set(a),c.set(o,a.length),c.set(s,a.length+Y),c.buffer}var Rn=1,X=e=>e+7&-8;function zn(e){let t=e=>RangeError(`columns message: ${e}`);e.byteOffset%8!=0&&(e=e.slice());let n=new DataView(e.buffer,e.byteOffset,e.byteLength);if(e.byteLength<8)throw t(`short`);if(n.getUint8(0)!==Rn)throw t(`version ${n.getUint8(0)}`);let r=n.getUint16(2,!0),i=n.getUint32(4,!0),a=new TextDecoder,o=[],s=8;for(let i=0;i<r;i++){if(s+3>e.byteLength)throw t(`short channel table`);let r=n.getUint8(s),i=n.getUint8(s+1),c=n.getUint8(s+2);if(s+=3,r!==4&&r!==8)throw t(`value size ${r}`);if(s+i+c>e.byteLength)throw t(`short channel table`);o.push({name:a.decode(e.subarray(s,s+i)),unit:a.decode(e.subarray(s+i,s+i+c)),size:r}),s+=i+c}if(s=X(s),s+X(i*8)+o.reduce((e,t)=>e+X(i*t.size),0)>e.byteLength)throw t(`short data`);let c=e.byteOffset,l=new Float64Array(e.buffer,c+s,i);s+=X(i*8);let u={},d={};for(let t of o)u[t.name]=t.size===4?new Float32Array(e.buffer,c+s,i):new Float64Array(e.buffer,c+s,i),t.unit&&(d[t.name]=t.unit),s+=X(i*t.size);return{t:l,columns:u,units:d}}var Bn=2,Vn=1,Hn=2,Z=20,Un=64*1024*1024,Q=(e,t)=>RangeError(`${e}: ${t}`);function Wn(e){if(e.byteLength<8)throw Q(`block schema`,`short`);let t=new DataView(e.buffer,e.byteOffset,e.byteLength);if(t.getUint8(0)!==Bn)throw Q(`block schema`,`version ${t.getUint8(0)}`);let n=t.getUint16(2,!0),r=t.getUint32(4,!0),i=new TextDecoder(`utf-8`,{fatal:!0}),a=[],o=8;try{for(let r=0;r<n;r++){if(o+3>e.byteLength)throw Q(`block schema`,`short channel table`);let n=t.getUint8(o),r=t.getUint8(o+1),s=t.getUint8(o+2);if(o+=3,n!==4&&n!==8)throw Q(`block schema`,`value size ${n}`);if(o+r+s>e.byteLength)throw Q(`block schema`,`short channel table`);a.push({name:i.decode(e.subarray(o,o+r)),unit:i.decode(e.subarray(o+r,o+r+s)),size:n}),o+=r+s}}catch(e){throw e instanceof RangeError?e:Q(`block schema`,`invalid text`)}return{id:r,channels:a}}async function Gn(e,t){let n=new Blob([e]).stream().pipeThrough(new DecompressionStream(`deflate`)).getReader(),r=new Uint8Array(t),i=0;try{for(;;){let{done:e,value:a}=await n.read();if(e)break;if(i+a.length>t)throw Q(`block`,`body larger than its header says`);r.set(a,i),i+=a.length}}catch(e){throw await n.cancel().catch(()=>{}),e instanceof RangeError?e:Q(`block`,`body is not valid deflate`)}if(i!==t)throw Q(`block`,`body size mismatch`);return r}async function Kn(e,t){if(e.byteLength<Z)throw Q(`block`,`short`);let n=new DataView(e.buffer,e.byteOffset,e.byteLength);if(n.getUint8(0)!==Bn)throw Q(`block`,`version ${n.getUint8(0)}`);let r=n.getUint8(1),i=n.getUint16(2,!0),a=n.getUint32(4,!0),o=t.get(n.getUint32(8,!0));if(!o)return null;if(o.channels.length!==i)throw Q(`block`,`channel count differs from its schema`);let s=n.getFloat64(12,!0),c=Math.max(0,a-1),l=4*c+o.channels.reduce((e,t)=>e+t.size*a,0);if(l>Un)throw Q(`block`,`too large`);let u;if(r&Vn)u=await Gn(e.subarray(Z),l);else if(u=e.subarray(Z),u.byteLength<l)throw Q(`block`,`body size mismatch`);let d=new DataView(u.buffer,u.byteOffset,u.byteLength),f=new Float64Array(a),p=0;a&&(f[0]=s);for(let e=1;e<a;e++)p+=d.getInt32(4*(e-1),!0),f[e]=s+p/1e6;let m=4*c,h={},g={};for(let e of o.channels){let t=new Uint8Array(a*e.size);for(let n=0;n<e.size;n++)for(let r=0;r<a;r++)t[r*e.size+n]=u[m+n*a+r];h[e.name]=e.size===4?new Float32Array(t.buffer):new Float64Array(t.buffer),e.unit&&(g[e.name]=e.unit),m+=a*e.size}return{block:{t:f,columns:h,units:g},historical:(r&Hn)!==0}}var qn=(e,t,n)=>`recording_key:${e}|${t}:${n}`,Jn=(e,t,n)=>n===e.stream_epoch?st(e.stream_id,t,n):qn(e.id,t,n),$=12,Yn=16;function Xn(e){let t=new Map;return async n=>{if(n.length===0)return null;let r=n[0]&128?2:1;if(n.length<r+$+Yn)return null;let i=r===2?n[1]:null,a=t.get(i),o=[...a?[a]:[],...e.filter(e=>e.keyId===i&&e.key!==a).map(e=>e.key)];for(let e of o)try{let a=await We(e,n.subarray(r,r+$),n.subarray(r+$),n.subarray(0,r));return t.set(i,e),{kind:n[0]&-129,plaintext:a}}catch{}return null}}var Zn=56,Qn=[75,82,67,49];function $n(e){let t=Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``);return`${t.slice(0,8)}-${t.slice(8,12)}-${t.slice(12,16)}-${t.slice(16,20)}-${t.slice(20)}`}function er(e){if(e.length<56||Qn.some((t,n)=>e[n]!==t))throw RangeError(`not a KRC1 chunk`);let t=new DataView(e.buffer,e.byteOffset,e.byteLength),n=t.getUint16(4,!0);if(n!==1)throw RangeError(`KRC version ${n}`);let r=t.getUint16(6,!0);if(r<56)throw RangeError(`KRC header too short`);return{recordingId:$n(e.subarray(8,24)),seq:t.getUint32(24,!0),count:t.getUint32(28,!0),bytes:t.getUint32(32,!0),headerBytes:r,t0:t.getFloat64(40,!0),t1:t.getFloat64(48,!0)}}function tr(e){let t=er(e),n=new DataView(e.buffer,e.byteOffset,e.byteLength),r=Math.min(e.length,t.bytes),i=[],a=t.headerBytes;for(;i.length<t.count&&a+12<=r;){let t=n.getUint32(a+8,!0);if(a+12+t>r)break;i.push({at:n.getFloat64(a,!0),bytes:e.subarray(a+12,a+12+t)}),a+=12+t}return{header:t,messages:i,truncated:i.length<t.count}}export{st as $,Ye as A,re as At,At as B,h as Bt,Bt as C,me as Ct,V as D,ge as Dt,ct as E,ue as Et,ut as F,l as Ft,xt as G,n as Gt,lt as H,y as Ht,Ke as I,u as It,Ct as J,Mt as K,a as Kt,pt as L,m as Lt,jt as M,k as Mt,Be as N,ne as Nt,Ve as O,le as Ot,Je as P,w as Pt,Ze as Q,Tt as R,_ as Rt,U as S,he as St,vt as T,A as Tt,St as U,D as Ut,ot as V,b as Vt,kt as W,r as Wt,mt as X,Et as Y,ht as Z,Lt as _,xe as _t,qn as a,bt as at,Rt as b,ve as bt,Wn as c,Fe as ct,In as d,Oe as dt,tt as et,Mn as f,je as ft,Pt as g,Ce as gt,Gt as h,we as ht,Xn as i,yt as it,$e as j,ce as jt,_t as k,se as kt,zn as l,Ne as lt,Zt as m,De as mt,tr as n,qe as nt,Jn as o,nt as ot,Kt as p,Me as pt,dt as q,er as r,gt as rt,Kn as s,Ie as st,Zn as t,it as tt,Fn as u,Te as ut,It as v,be as vt,zt as w,de as wt,Nt as x,_e as xt,Vt as y,ye as yt,Ot as z,v as zt};