cbrowser 18.69.3 → 18.71.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.
- package/dist/browser.d.ts +32 -0
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +46 -2
- package/dist/browser.js.map +1 -1
- package/dist/cli.js +1465 -24
- package/dist/cli.js.map +1 -1
- package/dist/cognitive/index.d.ts +10 -0
- package/dist/cognitive/index.d.ts.map +1 -1
- package/dist/cognitive/index.js +8 -0
- package/dist/cognitive/index.js.map +1 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +151 -3
- package/dist/daemon.js.map +1 -1
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +67 -0
- package/dist/mcp-server.js.map +1 -1
- package/dist/mcp-tools/base/capture-tools.d.ts +189 -0
- package/dist/mcp-tools/base/capture-tools.d.ts.map +1 -0
- package/dist/mcp-tools/base/capture-tools.js +667 -0
- package/dist/mcp-tools/base/capture-tools.js.map +1 -0
- package/dist/mcp-tools/base/gif-tools.d.ts +19 -0
- package/dist/mcp-tools/base/gif-tools.d.ts.map +1 -1
- package/dist/mcp-tools/base/gif-tools.js +45 -27
- package/dist/mcp-tools/base/gif-tools.js.map +1 -1
- package/dist/mcp-tools/base/index.d.ts +2 -1
- package/dist/mcp-tools/base/index.d.ts.map +1 -1
- package/dist/mcp-tools/base/index.js +5 -1
- package/dist/mcp-tools/base/index.js.map +1 -1
- package/dist/mcp-tools/tool-categories.d.ts.map +1 -1
- package/dist/mcp-tools/tool-categories.js +11 -0
- package/dist/mcp-tools/tool-categories.js.map +1 -1
- package/dist/recording/auto-capture.d.ts +72 -0
- package/dist/recording/auto-capture.d.ts.map +1 -0
- package/dist/recording/auto-capture.js +155 -0
- package/dist/recording/auto-capture.js.map +1 -0
- package/dist/recording/contact-sheet.d.ts +65 -0
- package/dist/recording/contact-sheet.d.ts.map +1 -0
- package/dist/recording/contact-sheet.js +204 -0
- package/dist/recording/contact-sheet.js.map +1 -0
- package/dist/recording/encoders.d.ts +101 -0
- package/dist/recording/encoders.d.ts.map +1 -0
- package/dist/recording/encoders.js +304 -0
- package/dist/recording/encoders.js.map +1 -0
- package/dist/recording/engine.d.ts +263 -0
- package/dist/recording/engine.d.ts.map +1 -0
- package/dist/recording/engine.js +890 -0
- package/dist/recording/engine.js.map +1 -0
- package/dist/recording/ssim.d.ts +35 -0
- package/dist/recording/ssim.d.ts.map +1 -0
- package/dist/recording/ssim.js +113 -0
- package/dist/recording/ssim.js.map +1 -0
- package/dist/recording/timing.d.ts +124 -0
- package/dist/recording/timing.d.ts.map +1 -0
- package/dist/recording/timing.js +251 -0
- package/dist/recording/timing.js.map +1 -0
- package/dist/recording/types.d.ts +213 -0
- package/dist/recording/types.d.ts.map +1 -0
- package/dist/recording/types.js +171 -0
- package/dist/recording/types.js.map +1 -0
- package/dist/testing/nl-test-suite.d.ts +13 -1
- package/dist/testing/nl-test-suite.d.ts.map +1 -1
- package/dist/testing/nl-test-suite.js +91 -6
- package/dist/testing/nl-test-suite.js.map +1 -1
- package/dist/types.d.ts +25 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/recording/engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CBrowser - Cognitive Browser Automation
|
|
3
|
+
* Copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com
|
|
4
|
+
* Learn more at https://cbrowser.ai - MIT License
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Reduce an image to a `size`x`size` grayscale signature normalised to 0..1.
|
|
8
|
+
*
|
|
9
|
+
* `fit: "fill"` is deliberate: aspect ratio is discarded so that two frames of
|
|
10
|
+
* the same recording always produce comparable signatures even if a region
|
|
11
|
+
* crop shifted by a pixel.
|
|
12
|
+
*
|
|
13
|
+
* @param input Image buffer or path to an image file.
|
|
14
|
+
* @param size Signature edge length; the result has `size * size` values.
|
|
15
|
+
*/
|
|
16
|
+
export declare function frameSignature(input: Buffer | string, size?: number): Promise<Float32Array>;
|
|
17
|
+
/**
|
|
18
|
+
* Global SSIM between two signatures.
|
|
19
|
+
*
|
|
20
|
+
* Returns exactly 1 for identical inputs and is exactly symmetric: the means,
|
|
21
|
+
* variances and covariance are accumulated in a single loop with commutative
|
|
22
|
+
* operations, so `ssim(a, b)` and `ssim(b, a)` agree bit-for-bit. The result is
|
|
23
|
+
* clamped to [-1, 1] to absorb floating-point overshoot.
|
|
24
|
+
*
|
|
25
|
+
* @throws if the signatures differ in length or are empty.
|
|
26
|
+
*/
|
|
27
|
+
export declare function ssim(a: Float32Array, b: Float32Array): number;
|
|
28
|
+
/**
|
|
29
|
+
* Indices whose SSIM against the previous frame fell below `threshold`.
|
|
30
|
+
*
|
|
31
|
+
* `null` entries (frame 0, or frames where SSIM was not computed) are skipped
|
|
32
|
+
* rather than treated as maximal change.
|
|
33
|
+
*/
|
|
34
|
+
export declare function detectChangePoints(scores: (number | null)[], threshold: number): number[];
|
|
35
|
+
//# sourceMappingURL=ssim.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssim.d.ts","sourceRoot":"","sources":["../../src/recording/ssim.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAkBH;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,SAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAyB9F;AAED;;;;;;;;;GASG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,MAAM,CAyC7D;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAQzF"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CBrowser - Cognitive Browser Automation
|
|
3
|
+
* Copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com
|
|
4
|
+
* Learn more at https://cbrowser.ai - MIT License
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Grayscale downsampled SSIM comparator.
|
|
8
|
+
*
|
|
9
|
+
* Frames are reduced to a fixed-size grayscale signature before comparison, so
|
|
10
|
+
* the cost of comparing two frames is independent of the capture resolution and
|
|
11
|
+
* the score is insensitive to sub-pixel noise. This is *global* SSIM (one
|
|
12
|
+
* window covering the whole signature), which is what the recorder needs: a
|
|
13
|
+
* single scalar per frame pair to drive change-point and anomaly detection.
|
|
14
|
+
*/
|
|
15
|
+
import sharp from "sharp";
|
|
16
|
+
/** SSIM stabilisation constants for data normalised to 0..1 (L = 1). */
|
|
17
|
+
const C1 = 0.01 * 0.01;
|
|
18
|
+
const C2 = 0.03 * 0.03;
|
|
19
|
+
/**
|
|
20
|
+
* Reduce an image to a `size`x`size` grayscale signature normalised to 0..1.
|
|
21
|
+
*
|
|
22
|
+
* `fit: "fill"` is deliberate: aspect ratio is discarded so that two frames of
|
|
23
|
+
* the same recording always produce comparable signatures even if a region
|
|
24
|
+
* crop shifted by a pixel.
|
|
25
|
+
*
|
|
26
|
+
* @param input Image buffer or path to an image file.
|
|
27
|
+
* @param size Signature edge length; the result has `size * size` values.
|
|
28
|
+
*/
|
|
29
|
+
export async function frameSignature(input, size = 128) {
|
|
30
|
+
if (!Number.isInteger(size) || size <= 0) {
|
|
31
|
+
throw new Error(`frameSignature: size must be a positive integer, got ${size}`);
|
|
32
|
+
}
|
|
33
|
+
const { data, info } = await sharp(input)
|
|
34
|
+
.resize(size, size, { fit: "fill" })
|
|
35
|
+
.removeAlpha()
|
|
36
|
+
.greyscale()
|
|
37
|
+
.raw()
|
|
38
|
+
.toBuffer({ resolveWithObject: true });
|
|
39
|
+
const expected = size * size;
|
|
40
|
+
const channels = info.channels;
|
|
41
|
+
if (data.length < expected * channels) {
|
|
42
|
+
throw new Error(`frameSignature: expected at least ${expected * channels} bytes, got ${data.length}`);
|
|
43
|
+
}
|
|
44
|
+
const out = new Float32Array(expected);
|
|
45
|
+
for (let i = 0; i < expected; i++) {
|
|
46
|
+
out[i] = data[i * channels] / 255;
|
|
47
|
+
}
|
|
48
|
+
return out;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Global SSIM between two signatures.
|
|
52
|
+
*
|
|
53
|
+
* Returns exactly 1 for identical inputs and is exactly symmetric: the means,
|
|
54
|
+
* variances and covariance are accumulated in a single loop with commutative
|
|
55
|
+
* operations, so `ssim(a, b)` and `ssim(b, a)` agree bit-for-bit. The result is
|
|
56
|
+
* clamped to [-1, 1] to absorb floating-point overshoot.
|
|
57
|
+
*
|
|
58
|
+
* @throws if the signatures differ in length or are empty.
|
|
59
|
+
*/
|
|
60
|
+
export function ssim(a, b) {
|
|
61
|
+
if (a.length !== b.length) {
|
|
62
|
+
throw new Error(`ssim: signature length mismatch (${a.length} vs ${b.length})`);
|
|
63
|
+
}
|
|
64
|
+
if (a.length === 0) {
|
|
65
|
+
throw new Error("ssim: signatures must not be empty");
|
|
66
|
+
}
|
|
67
|
+
const n = a.length;
|
|
68
|
+
let sumA = 0;
|
|
69
|
+
let sumB = 0;
|
|
70
|
+
for (let i = 0; i < n; i++) {
|
|
71
|
+
sumA += a[i];
|
|
72
|
+
sumB += b[i];
|
|
73
|
+
}
|
|
74
|
+
const muA = sumA / n;
|
|
75
|
+
const muB = sumB / n;
|
|
76
|
+
let sqA = 0;
|
|
77
|
+
let sqB = 0;
|
|
78
|
+
let sqAB = 0;
|
|
79
|
+
for (let i = 0; i < n; i++) {
|
|
80
|
+
const da = a[i] - muA;
|
|
81
|
+
const db = b[i] - muB;
|
|
82
|
+
sqA += da * da;
|
|
83
|
+
sqB += db * db;
|
|
84
|
+
sqAB += da * db;
|
|
85
|
+
}
|
|
86
|
+
// Unbiased estimator; degenerate for n === 1, where all spread terms are 0.
|
|
87
|
+
const denom = n > 1 ? n - 1 : 1;
|
|
88
|
+
const varA = n > 1 ? sqA / denom : 0;
|
|
89
|
+
const varB = n > 1 ? sqB / denom : 0;
|
|
90
|
+
const cov = n > 1 ? sqAB / denom : 0;
|
|
91
|
+
const numerator = (2 * muA * muB + C1) * (2 * cov + C2);
|
|
92
|
+
const denominator = (muA * muA + muB * muB + C1) * (varA + varB + C2);
|
|
93
|
+
const score = numerator / denominator;
|
|
94
|
+
return Math.min(1, Math.max(-1, score));
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Indices whose SSIM against the previous frame fell below `threshold`.
|
|
98
|
+
*
|
|
99
|
+
* `null` entries (frame 0, or frames where SSIM was not computed) are skipped
|
|
100
|
+
* rather than treated as maximal change.
|
|
101
|
+
*/
|
|
102
|
+
export function detectChangePoints(scores, threshold) {
|
|
103
|
+
const points = [];
|
|
104
|
+
for (let i = 0; i < scores.length; i++) {
|
|
105
|
+
const score = scores[i];
|
|
106
|
+
if (score === null || score === undefined)
|
|
107
|
+
continue;
|
|
108
|
+
if (score < threshold)
|
|
109
|
+
points.push(i);
|
|
110
|
+
}
|
|
111
|
+
return points;
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=ssim.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssim.js","sourceRoot":"","sources":["../../src/recording/ssim.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CBrowser - Cognitive Browser Automation
|
|
3
|
+
* Copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com
|
|
4
|
+
* Learn more at https://cbrowser.ai - MIT License
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Pure timing helpers shared by the recording encoders.
|
|
8
|
+
*
|
|
9
|
+
* Capture is never perfectly cadenced — the browser drops screencast frames
|
|
10
|
+
* under load — so playback timing is derived from the recorded timestamps
|
|
11
|
+
* rather than from a constant `1000 / fps` cadence. These helpers own that
|
|
12
|
+
* derivation and the clamping rules the GIF/WebP containers impose.
|
|
13
|
+
*/
|
|
14
|
+
import type { Rect, Viewport } from "./types.js";
|
|
15
|
+
/**
|
|
16
|
+
* Minimum per-frame delay. GIF and WebP treat sub-20ms delays inconsistently
|
|
17
|
+
* (many decoders silently substitute 100ms), so delays are floored here.
|
|
18
|
+
*/
|
|
19
|
+
export declare const MIN_DELAY_MS = 20;
|
|
20
|
+
/**
|
|
21
|
+
* Maximum per-frame delay.
|
|
22
|
+
*
|
|
23
|
+
Sharp validates each delay against 0..65535 and rejects the whole encode
|
|
24
|
+
* otherwise: "Expected integer or an array of integers between 0 and 65535 for
|
|
25
|
+
* delay". A capture left running while the page goes quiet produces exactly
|
|
26
|
+
* that: the last frame's delay stretches to cover the silent tail, and one
|
|
27
|
+
* out-of-range value destroys the artifact.
|
|
28
|
+
*
|
|
29
|
+
* Note this is sharp's API limit, not the format's. GIF stores delay as a
|
|
30
|
+
* uint16 of CENTIseconds, so a single frame can legally be held for up to
|
|
31
|
+
* 655_350ms — ten times what sharp will accept in one value. That gap is what
|
|
32
|
+
* {@link expandForPlayback} exploits: libvips merges identical consecutive
|
|
33
|
+
* frames and SUMS their delays, so N legal repeats collapse back into one page
|
|
34
|
+
* holding for their combined duration. Verified end-to-end in
|
|
35
|
+
* tests/recording-encoder-delays.test.ts.
|
|
36
|
+
*
|
|
37
|
+
* Emitting an illegal delay is therefore not a caller error to validate — it is
|
|
38
|
+
* this function's job to make impossible. See {@link expandForPlayback} for
|
|
39
|
+
* holding a frame longer than this ceiling without lying about the timing.
|
|
40
|
+
*/
|
|
41
|
+
export declare const MAX_DELAY_MS = 65535;
|
|
42
|
+
/**
|
|
43
|
+
* Per-frame display delay in milliseconds, derived from consecutive timestamps.
|
|
44
|
+
*
|
|
45
|
+
* Frame `i` is displayed for `tMs[i + 1] - tMs[i]`; the last frame is displayed
|
|
46
|
+
* until `totalDurationMs`. Any lead-in before the first frame (`tMs[0] > 0`) is
|
|
47
|
+
* folded into frame 0's delay, so the delays describe the whole recording.
|
|
48
|
+
*
|
|
49
|
+
* Clamp behaviour, applied in this order:
|
|
50
|
+
*
|
|
51
|
+
* 1. FLOOR at {@link MIN_DELAY_MS}. When the floor inflates the total, the
|
|
52
|
+
* surplus is reclaimed from the frames that have headroom above it,
|
|
53
|
+
* proportionally to how much headroom each has, so the sum stays exactly
|
|
54
|
+
* `totalDurationMs` and no frame is singled out. If the recording is too
|
|
55
|
+
* short for every frame to hold the floor
|
|
56
|
+
* (`frames * MIN_DELAY_MS > totalDurationMs`), the floor wins and the sum is
|
|
57
|
+
* `frames * MIN_DELAY_MS` — the animation is then longer than the capture,
|
|
58
|
+
* which is the only way to keep all frames visible.
|
|
59
|
+
* 2. CEILING at {@link MAX_DELAY_MS}, last, so the reclaim cannot push a delay
|
|
60
|
+
* back over it. A capped delay means the returned timeline is SHORTER than
|
|
61
|
+
* `totalDurationMs`: a frame held past the ceiling cannot be expressed as a
|
|
62
|
+
* single delay. That truncation is the safe failure — the alternative is an
|
|
63
|
+
* encode that dies and takes the whole artifact with it. To keep real-time
|
|
64
|
+
* playback across a long hold, use {@link expandForPlayback}, which repeats
|
|
65
|
+
* the held frame instead of truncating it.
|
|
66
|
+
*
|
|
67
|
+
* Resulting guarantee: every returned delay is within
|
|
68
|
+
* `[MIN_DELAY_MS, MAX_DELAY_MS]`, for every input this function accepts.
|
|
69
|
+
*
|
|
70
|
+
* @throws if `tMs` is empty, contains negative or decreasing values, or if
|
|
71
|
+
* `totalDurationMs` is shorter than the last timestamp.
|
|
72
|
+
*/
|
|
73
|
+
export declare function delaysFromTimestamps(tMs: number[], totalDurationMs: number, options?: {
|
|
74
|
+
maxDelayMs?: number;
|
|
75
|
+
}): number[];
|
|
76
|
+
/**
|
|
77
|
+
* Pair items (frame paths, buffers) with legal delays, repeating any item held
|
|
78
|
+
* longer than the ceiling instead of truncating its delay.
|
|
79
|
+
*
|
|
80
|
+
* `delaysFromTimestamps` must cap a long hold, which shortens playback. This
|
|
81
|
+
* keeps real time: a frame held for 166_768ms becomes three copies of that same
|
|
82
|
+
* frame at ~55_589ms each. The result pairs 1:1 with its items, which is what
|
|
83
|
+
* the encoders require (`delays.length === frames.length`), and the delays sum
|
|
84
|
+
* to the same total as the uncapped timeline.
|
|
85
|
+
*
|
|
86
|
+
* Splitting evenly rather than emitting `[65535, 65535, 35698]` keeps the
|
|
87
|
+
* repeats visually indistinguishable in a scrubber and avoids a stray short
|
|
88
|
+
* frame at the end of a hold.
|
|
89
|
+
*
|
|
90
|
+
* @param items One entry per frame, in capture order.
|
|
91
|
+
* @throws if `items` and `tMs` differ in length, or on any input
|
|
92
|
+
* `delaysFromTimestamps` rejects.
|
|
93
|
+
*/
|
|
94
|
+
export declare function expandForPlayback<T>(items: T[], tMs: number[], totalDurationMs: number, options?: {
|
|
95
|
+
maxDelayMs?: number;
|
|
96
|
+
}): {
|
|
97
|
+
items: T[];
|
|
98
|
+
delays: number[];
|
|
99
|
+
};
|
|
100
|
+
/**
|
|
101
|
+
* Intervals where capture stalled: a delta larger than
|
|
102
|
+
* `gapFactor * (1000 / targetFps)`.
|
|
103
|
+
*
|
|
104
|
+
* @throws if `targetFps` or `gapFactor` are not positive.
|
|
105
|
+
*/
|
|
106
|
+
export declare function findFrameGaps(tMs: number[], targetFps: number, gapFactor?: number): {
|
|
107
|
+
after_index: number;
|
|
108
|
+
gap_ms: number;
|
|
109
|
+
}[];
|
|
110
|
+
/**
|
|
111
|
+
* Clamp a capture rect into the viewport.
|
|
112
|
+
*
|
|
113
|
+
* Origin is clamped to the viewport first, then the extent is trimmed to what
|
|
114
|
+
* remains. `clamped` is true whenever any component changed, which the manifest
|
|
115
|
+
* surfaces as `region_clamped`.
|
|
116
|
+
*
|
|
117
|
+
* @throws if the input rect or the viewport has zero/negative area, or if the
|
|
118
|
+
* rect lies entirely outside the viewport (nothing left to capture).
|
|
119
|
+
*/
|
|
120
|
+
export declare function clampRect(rect: Rect, viewport: Pick<Viewport, "width" | "height">): {
|
|
121
|
+
rect: Rect;
|
|
122
|
+
clamped: boolean;
|
|
123
|
+
};
|
|
124
|
+
//# sourceMappingURL=timing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timing.d.ts","sourceRoot":"","sources":["../../src/recording/timing.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEjD;;;GAGG;AACH,eAAO,MAAM,YAAY,KAAK,CAAC;AAE/B;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,YAAY,QAAQ,CAAC;AAKlC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,EAAE,EACb,eAAe,EAAE,MAAM,EACvB,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GACpC,MAAM,EAAE,CA6EV;AAUD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,KAAK,EAAE,CAAC,EAAE,EACV,GAAG,EAAE,MAAM,EAAE,EACb,eAAe,EAAE,MAAM,EACvB,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GACpC;IAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAgClC;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EAAE,EACb,SAAS,EAAE,MAAM,EACjB,SAAS,SAAI,GACZ;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,CAe3C;AAED;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,QAAQ,CAAC,GAAG;IACnF,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;CAClB,CAyCA"}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CBrowser - Cognitive Browser Automation
|
|
3
|
+
* Copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com
|
|
4
|
+
* Learn more at https://cbrowser.ai - MIT License
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Minimum per-frame delay. GIF and WebP treat sub-20ms delays inconsistently
|
|
8
|
+
* (many decoders silently substitute 100ms), so delays are floored here.
|
|
9
|
+
*/
|
|
10
|
+
export const MIN_DELAY_MS = 20;
|
|
11
|
+
/**
|
|
12
|
+
* Maximum per-frame delay.
|
|
13
|
+
*
|
|
14
|
+
Sharp validates each delay against 0..65535 and rejects the whole encode
|
|
15
|
+
* otherwise: "Expected integer or an array of integers between 0 and 65535 for
|
|
16
|
+
* delay". A capture left running while the page goes quiet produces exactly
|
|
17
|
+
* that: the last frame's delay stretches to cover the silent tail, and one
|
|
18
|
+
* out-of-range value destroys the artifact.
|
|
19
|
+
*
|
|
20
|
+
* Note this is sharp's API limit, not the format's. GIF stores delay as a
|
|
21
|
+
* uint16 of CENTIseconds, so a single frame can legally be held for up to
|
|
22
|
+
* 655_350ms — ten times what sharp will accept in one value. That gap is what
|
|
23
|
+
* {@link expandForPlayback} exploits: libvips merges identical consecutive
|
|
24
|
+
* frames and SUMS their delays, so N legal repeats collapse back into one page
|
|
25
|
+
* holding for their combined duration. Verified end-to-end in
|
|
26
|
+
* tests/recording-encoder-delays.test.ts.
|
|
27
|
+
*
|
|
28
|
+
* Emitting an illegal delay is therefore not a caller error to validate — it is
|
|
29
|
+
* this function's job to make impossible. See {@link expandForPlayback} for
|
|
30
|
+
* holding a frame longer than this ceiling without lying about the timing.
|
|
31
|
+
*/
|
|
32
|
+
export const MAX_DELAY_MS = 65535;
|
|
33
|
+
/** Tolerance for float comparisons on millisecond sums. */
|
|
34
|
+
const EPS = 1e-9;
|
|
35
|
+
/**
|
|
36
|
+
* Per-frame display delay in milliseconds, derived from consecutive timestamps.
|
|
37
|
+
*
|
|
38
|
+
* Frame `i` is displayed for `tMs[i + 1] - tMs[i]`; the last frame is displayed
|
|
39
|
+
* until `totalDurationMs`. Any lead-in before the first frame (`tMs[0] > 0`) is
|
|
40
|
+
* folded into frame 0's delay, so the delays describe the whole recording.
|
|
41
|
+
*
|
|
42
|
+
* Clamp behaviour, applied in this order:
|
|
43
|
+
*
|
|
44
|
+
* 1. FLOOR at {@link MIN_DELAY_MS}. When the floor inflates the total, the
|
|
45
|
+
* surplus is reclaimed from the frames that have headroom above it,
|
|
46
|
+
* proportionally to how much headroom each has, so the sum stays exactly
|
|
47
|
+
* `totalDurationMs` and no frame is singled out. If the recording is too
|
|
48
|
+
* short for every frame to hold the floor
|
|
49
|
+
* (`frames * MIN_DELAY_MS > totalDurationMs`), the floor wins and the sum is
|
|
50
|
+
* `frames * MIN_DELAY_MS` — the animation is then longer than the capture,
|
|
51
|
+
* which is the only way to keep all frames visible.
|
|
52
|
+
* 2. CEILING at {@link MAX_DELAY_MS}, last, so the reclaim cannot push a delay
|
|
53
|
+
* back over it. A capped delay means the returned timeline is SHORTER than
|
|
54
|
+
* `totalDurationMs`: a frame held past the ceiling cannot be expressed as a
|
|
55
|
+
* single delay. That truncation is the safe failure — the alternative is an
|
|
56
|
+
* encode that dies and takes the whole artifact with it. To keep real-time
|
|
57
|
+
* playback across a long hold, use {@link expandForPlayback}, which repeats
|
|
58
|
+
* the held frame instead of truncating it.
|
|
59
|
+
*
|
|
60
|
+
* Resulting guarantee: every returned delay is within
|
|
61
|
+
* `[MIN_DELAY_MS, MAX_DELAY_MS]`, for every input this function accepts.
|
|
62
|
+
*
|
|
63
|
+
* @throws if `tMs` is empty, contains negative or decreasing values, or if
|
|
64
|
+
* `totalDurationMs` is shorter than the last timestamp.
|
|
65
|
+
*/
|
|
66
|
+
export function delaysFromTimestamps(tMs, totalDurationMs, options = {}) {
|
|
67
|
+
if (tMs.length === 0) {
|
|
68
|
+
throw new Error("delaysFromTimestamps: timestamps must not be empty");
|
|
69
|
+
}
|
|
70
|
+
if (!Number.isFinite(totalDurationMs) || totalDurationMs < 0) {
|
|
71
|
+
throw new Error(`delaysFromTimestamps: totalDurationMs must be a non-negative finite number, got ${totalDurationMs}`);
|
|
72
|
+
}
|
|
73
|
+
for (let i = 0; i < tMs.length; i++) {
|
|
74
|
+
const t = tMs[i];
|
|
75
|
+
if (!Number.isFinite(t) || t < 0) {
|
|
76
|
+
throw new Error(`delaysFromTimestamps: timestamp ${i} is not a non-negative finite number`);
|
|
77
|
+
}
|
|
78
|
+
if (i > 0 && t < tMs[i - 1]) {
|
|
79
|
+
throw new Error(`delaysFromTimestamps: timestamps must be non-decreasing (index ${i}: ${tMs[i - 1]} -> ${t})`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const last = tMs[tMs.length - 1];
|
|
83
|
+
if (totalDurationMs + EPS < last) {
|
|
84
|
+
throw new Error(`delaysFromTimestamps: totalDurationMs (${totalDurationMs}) is before the last timestamp (${last})`);
|
|
85
|
+
}
|
|
86
|
+
const n = tMs.length;
|
|
87
|
+
const delays = new Array(n);
|
|
88
|
+
for (let i = 0; i < n; i++) {
|
|
89
|
+
const end = i === n - 1 ? totalDurationMs : tMs[i + 1];
|
|
90
|
+
delays[i] = end - tMs[i];
|
|
91
|
+
}
|
|
92
|
+
// Fold the lead-in so the delays cover [0, totalDurationMs].
|
|
93
|
+
delays[0] = delays[0] + tMs[0];
|
|
94
|
+
let total = 0;
|
|
95
|
+
let headroom = 0;
|
|
96
|
+
for (let i = 0; i < n; i++) {
|
|
97
|
+
if (delays[i] < MIN_DELAY_MS)
|
|
98
|
+
delays[i] = MIN_DELAY_MS;
|
|
99
|
+
total += delays[i];
|
|
100
|
+
headroom += delays[i] - MIN_DELAY_MS;
|
|
101
|
+
}
|
|
102
|
+
const maxDelayMs = options.maxDelayMs ?? MAX_DELAY_MS;
|
|
103
|
+
if (maxDelayMs < MIN_DELAY_MS) {
|
|
104
|
+
throw new Error(`delaysFromTimestamps: maxDelayMs (${maxDelayMs}) is below MIN_DELAY_MS (${MIN_DELAY_MS})`);
|
|
105
|
+
}
|
|
106
|
+
let surplus = total - totalDurationMs;
|
|
107
|
+
if (surplus <= EPS || headroom <= 0)
|
|
108
|
+
return applyCeiling(delays, maxDelayMs);
|
|
109
|
+
// Proportional reclaim: cannot push any frame below the floor because each
|
|
110
|
+
// frame gives up at most its own share of the available headroom.
|
|
111
|
+
const take = Math.min(surplus, headroom);
|
|
112
|
+
for (let i = 0; i < n; i++) {
|
|
113
|
+
const room = delays[i] - MIN_DELAY_MS;
|
|
114
|
+
if (room <= 0)
|
|
115
|
+
continue;
|
|
116
|
+
delays[i] = delays[i] - (room / headroom) * take;
|
|
117
|
+
if (delays[i] < MIN_DELAY_MS)
|
|
118
|
+
delays[i] = MIN_DELAY_MS;
|
|
119
|
+
}
|
|
120
|
+
// Second pass absorbs float drift from the proportional split.
|
|
121
|
+
let achieved = 0;
|
|
122
|
+
for (let i = 0; i < n; i++)
|
|
123
|
+
achieved += delays[i];
|
|
124
|
+
surplus = achieved - totalDurationMs;
|
|
125
|
+
for (let i = 0; i < n && surplus > EPS; i++) {
|
|
126
|
+
const room = delays[i] - MIN_DELAY_MS;
|
|
127
|
+
if (room <= 0)
|
|
128
|
+
continue;
|
|
129
|
+
const shave = Math.min(room, surplus);
|
|
130
|
+
delays[i] = delays[i] - shave;
|
|
131
|
+
surplus -= shave;
|
|
132
|
+
}
|
|
133
|
+
return applyCeiling(delays, maxDelayMs);
|
|
134
|
+
}
|
|
135
|
+
/** Cap in place. Applied last so nothing can push a delay back over the limit. */
|
|
136
|
+
function applyCeiling(delays, maxDelayMs) {
|
|
137
|
+
for (let i = 0; i < delays.length; i++) {
|
|
138
|
+
if (delays[i] > maxDelayMs)
|
|
139
|
+
delays[i] = maxDelayMs;
|
|
140
|
+
}
|
|
141
|
+
return delays;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Pair items (frame paths, buffers) with legal delays, repeating any item held
|
|
145
|
+
* longer than the ceiling instead of truncating its delay.
|
|
146
|
+
*
|
|
147
|
+
* `delaysFromTimestamps` must cap a long hold, which shortens playback. This
|
|
148
|
+
* keeps real time: a frame held for 166_768ms becomes three copies of that same
|
|
149
|
+
* frame at ~55_589ms each. The result pairs 1:1 with its items, which is what
|
|
150
|
+
* the encoders require (`delays.length === frames.length`), and the delays sum
|
|
151
|
+
* to the same total as the uncapped timeline.
|
|
152
|
+
*
|
|
153
|
+
* Splitting evenly rather than emitting `[65535, 65535, 35698]` keeps the
|
|
154
|
+
* repeats visually indistinguishable in a scrubber and avoids a stray short
|
|
155
|
+
* frame at the end of a hold.
|
|
156
|
+
*
|
|
157
|
+
* @param items One entry per frame, in capture order.
|
|
158
|
+
* @throws if `items` and `tMs` differ in length, or on any input
|
|
159
|
+
* `delaysFromTimestamps` rejects.
|
|
160
|
+
*/
|
|
161
|
+
export function expandForPlayback(items, tMs, totalDurationMs, options = {}) {
|
|
162
|
+
if (items.length !== tMs.length) {
|
|
163
|
+
throw new Error(`expandForPlayback: ${items.length} items but ${tMs.length} timestamps - they must pair 1:1`);
|
|
164
|
+
}
|
|
165
|
+
const maxDelayMs = options.maxDelayMs ?? MAX_DELAY_MS;
|
|
166
|
+
// Uncapped, so the true duration of a long hold survives to be split.
|
|
167
|
+
const trueDelays = delaysFromTimestamps(tMs, totalDurationMs, {
|
|
168
|
+
maxDelayMs: Number.POSITIVE_INFINITY,
|
|
169
|
+
});
|
|
170
|
+
const outItems = [];
|
|
171
|
+
const outDelays = [];
|
|
172
|
+
for (let i = 0; i < items.length; i++) {
|
|
173
|
+
const delay = trueDelays[i];
|
|
174
|
+
if (delay <= maxDelayMs) {
|
|
175
|
+
outItems.push(items[i]);
|
|
176
|
+
outDelays.push(delay);
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
179
|
+
const repeats = Math.ceil(delay / maxDelayMs);
|
|
180
|
+
const each = delay / repeats;
|
|
181
|
+
for (let r = 0; r < repeats; r++) {
|
|
182
|
+
outItems.push(items[i]);
|
|
183
|
+
outDelays.push(each);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
return { items: outItems, delays: outDelays };
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Intervals where capture stalled: a delta larger than
|
|
190
|
+
* `gapFactor * (1000 / targetFps)`.
|
|
191
|
+
*
|
|
192
|
+
* @throws if `targetFps` or `gapFactor` are not positive.
|
|
193
|
+
*/
|
|
194
|
+
export function findFrameGaps(tMs, targetFps, gapFactor = 3) {
|
|
195
|
+
if (!Number.isFinite(targetFps) || targetFps <= 0) {
|
|
196
|
+
throw new Error(`findFrameGaps: targetFps must be positive, got ${targetFps}`);
|
|
197
|
+
}
|
|
198
|
+
if (!Number.isFinite(gapFactor) || gapFactor <= 0) {
|
|
199
|
+
throw new Error(`findFrameGaps: gapFactor must be positive, got ${gapFactor}`);
|
|
200
|
+
}
|
|
201
|
+
const threshold = gapFactor * (1000 / targetFps);
|
|
202
|
+
const gaps = [];
|
|
203
|
+
for (let i = 0; i + 1 < tMs.length; i++) {
|
|
204
|
+
const delta = tMs[i + 1] - tMs[i];
|
|
205
|
+
if (delta > threshold)
|
|
206
|
+
gaps.push({ after_index: i, gap_ms: delta });
|
|
207
|
+
}
|
|
208
|
+
return gaps;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Clamp a capture rect into the viewport.
|
|
212
|
+
*
|
|
213
|
+
* Origin is clamped to the viewport first, then the extent is trimmed to what
|
|
214
|
+
* remains. `clamped` is true whenever any component changed, which the manifest
|
|
215
|
+
* surfaces as `region_clamped`.
|
|
216
|
+
*
|
|
217
|
+
* @throws if the input rect or the viewport has zero/negative area, or if the
|
|
218
|
+
* rect lies entirely outside the viewport (nothing left to capture).
|
|
219
|
+
*/
|
|
220
|
+
export function clampRect(rect, viewport) {
|
|
221
|
+
if (!Number.isFinite(viewport.width) || !Number.isFinite(viewport.height)) {
|
|
222
|
+
throw new Error("clampRect: viewport dimensions must be finite");
|
|
223
|
+
}
|
|
224
|
+
if (viewport.width <= 0 || viewport.height <= 0) {
|
|
225
|
+
throw new Error(`clampRect: viewport must have positive area, got ${viewport.width}x${viewport.height}`);
|
|
226
|
+
}
|
|
227
|
+
if (!Number.isFinite(rect.x) ||
|
|
228
|
+
!Number.isFinite(rect.y) ||
|
|
229
|
+
!Number.isFinite(rect.width) ||
|
|
230
|
+
!Number.isFinite(rect.height)) {
|
|
231
|
+
throw new Error("clampRect: rect components must be finite");
|
|
232
|
+
}
|
|
233
|
+
if (rect.width <= 0 || rect.height <= 0) {
|
|
234
|
+
throw new Error(`clampRect: rect must have positive area, got ${rect.width}x${rect.height}`);
|
|
235
|
+
}
|
|
236
|
+
const x = Math.min(Math.max(rect.x, 0), viewport.width);
|
|
237
|
+
const y = Math.min(Math.max(rect.y, 0), viewport.height);
|
|
238
|
+
// Trim the far edge back inside the viewport, then re-measure from the
|
|
239
|
+
// clamped origin so the width can never go negative.
|
|
240
|
+
const right = Math.min(rect.x + rect.width, viewport.width);
|
|
241
|
+
const bottom = Math.min(rect.y + rect.height, viewport.height);
|
|
242
|
+
const width = Math.max(right - x, 0);
|
|
243
|
+
const height = Math.max(bottom - y, 0);
|
|
244
|
+
if (width <= 0 || height <= 0) {
|
|
245
|
+
throw new Error(`clampRect: rect ${rect.width}x${rect.height} at (${rect.x}, ${rect.y}) lies outside the ` +
|
|
246
|
+
`${viewport.width}x${viewport.height} viewport`);
|
|
247
|
+
}
|
|
248
|
+
const clamped = x !== rect.x || y !== rect.y || width !== rect.width || height !== rect.height;
|
|
249
|
+
return { rect: { x, y, width, height }, clamped };
|
|
250
|
+
}
|
|
251
|
+
//# sourceMappingURL=timing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timing.js","sourceRoot":"","sources":["../../src/recording/timing.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAaH;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,CAAC;AAE/B;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,CAAC;AAElC,2DAA2D;AAC3D,MAAM,GAAG,GAAG,IAAI,CAAC;AAEjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,UAAU,oBAAoB,CAClC,GAAa,EACb,eAAuB,EACvB,UAAmC,EAAE;IAErC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CACb,mFAAmF,eAAe,EAAE,CACrG,CAAC;IACJ,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAE,CAAC;QAClB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,sCAAsC,CAAC,CAAC;QAC9F,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAE,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CACb,kEAAkE,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAC9F,CAAC;QACJ,CAAC;IACH,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;IAClC,IAAI,eAAe,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CACb,0CAA0C,eAAe,mCAAmC,IAAI,GAAG,CACpG,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;IACrB,MAAM,MAAM,GAAG,IAAI,KAAK,CAAS,CAAC,CAAC,CAAC;IACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC;QACxD,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAE,CAAC;IAC5B,CAAC;IACD,6DAA6D;IAC7D,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAE,GAAG,GAAG,CAAC,CAAC,CAAE,CAAC;IAEjC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,IAAI,MAAM,CAAC,CAAC,CAAE,GAAG,YAAY;YAAE,MAAM,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC;QACxD,KAAK,IAAI,MAAM,CAAC,CAAC,CAAE,CAAC;QACpB,QAAQ,IAAI,MAAM,CAAC,CAAC,CAAE,GAAG,YAAY,CAAC;IACxC,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,YAAY,CAAC;IACtD,IAAI,UAAU,GAAG,YAAY,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,qCAAqC,UAAU,4BAA4B,YAAY,GAAG,CAC3F,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,GAAG,KAAK,GAAG,eAAe,CAAC;IACtC,IAAI,OAAO,IAAI,GAAG,IAAI,QAAQ,IAAI,CAAC;QAAE,OAAO,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAE7E,2EAA2E;IAC3E,kEAAkE;IAClE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAE,GAAG,YAAY,CAAC;QACvC,IAAI,IAAI,IAAI,CAAC;YAAE,SAAS;QACxB,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAE,GAAG,CAAC,IAAI,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC;QAClD,IAAI,MAAM,CAAC,CAAC,CAAE,GAAG,YAAY;YAAE,MAAM,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC;IAC1D,CAAC;IAED,+DAA+D;IAC/D,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QAAE,QAAQ,IAAI,MAAM,CAAC,CAAC,CAAE,CAAC;IACnD,OAAO,GAAG,QAAQ,GAAG,eAAe,CAAC;IACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,OAAO,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAE,GAAG,YAAY,CAAC;QACvC,IAAI,IAAI,IAAI,CAAC;YAAE,SAAS;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACtC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAE,GAAG,KAAK,CAAC;QAC/B,OAAO,IAAI,KAAK,CAAC;IACnB,CAAC;IAED,OAAO,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAC1C,CAAC;AAED,kFAAkF;AAClF,SAAS,YAAY,CAAC,MAAgB,EAAE,UAAkB;IACxD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,IAAI,MAAM,CAAC,CAAC,CAAE,GAAG,UAAU;YAAE,MAAM,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;IACtD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAU,EACV,GAAa,EACb,eAAuB,EACvB,UAAmC,EAAE;IAErC,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CACb,sBAAsB,KAAK,CAAC,MAAM,cAAc,GAAG,CAAC,MAAM,kCAAkC,CAC7F,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,YAAY,CAAC;IAEtD,sEAAsE;IACtE,MAAM,UAAU,GAAG,oBAAoB,CAAC,GAAG,EAAE,eAAe,EAAE;QAC5D,UAAU,EAAE,MAAM,CAAC,iBAAiB;KACrC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAQ,EAAE,CAAC;IACzB,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAE,CAAC;QAC7B,IAAI,KAAK,IAAI,UAAU,EAAE,CAAC;YACxB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;YACzB,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtB,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,KAAK,GAAG,OAAO,CAAC;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;YACjC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;YACzB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAChD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAC3B,GAAa,EACb,SAAiB,EACjB,SAAS,GAAG,CAAC;IAEb,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,kDAAkD,SAAS,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,kDAAkD,SAAS,EAAE,CAAC,CAAC;IACjF,CAAC;IAED,MAAM,SAAS,GAAG,SAAS,GAAG,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC;IACjD,MAAM,IAAI,GAA8C,EAAE,CAAC;IAC3D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,GAAG,CAAC,CAAC,CAAE,CAAC;QACpC,IAAI,KAAK,GAAG,SAAS;YAAE,IAAI,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,SAAS,CAAC,IAAU,EAAE,QAA4C;IAIhF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1E,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,QAAQ,CAAC,KAAK,IAAI,CAAC,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CACb,oDAAoD,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,CACxF,CAAC;IACJ,CAAC;IACD,IACE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACxB,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACxB,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;QAC5B,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAC7B,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,gDAAgD,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/F,CAAC;IAED,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzD,uEAAuE;IACvE,qDAAqD;IACrD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAEvC,IAAI,KAAK,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,mBAAmB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,QAAQ,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,qBAAqB;YACxF,GAAG,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,MAAM,WAAW,CAClD,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GACX,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,IAAI,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC;IAEjF,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC;AACpD,CAAC"}
|