my-frontend-observer 0.1.0 → 0.3.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 (46) hide show
  1. package/CHANGELOG.md +82 -1
  2. package/README.md +30 -7
  3. package/dist/application/observationPersistence.js +1 -0
  4. package/dist/application/observationPersistence.js.map +1 -1
  5. package/dist/browser/chromiumAdapter.js +58 -4
  6. package/dist/browser/chromiumAdapter.js.map +1 -1
  7. package/dist/browser/evidenceCapture.d.ts +46 -3
  8. package/dist/browser/evidenceCapture.js +393 -94
  9. package/dist/browser/evidenceCapture.js.map +1 -1
  10. package/dist/browser/scrollCapture.d.ts +32 -0
  11. package/dist/browser/scrollCapture.js +163 -0
  12. package/dist/browser/scrollCapture.js.map +1 -0
  13. package/dist/browser/types.d.ts +3 -1
  14. package/dist/cli.js +165 -7
  15. package/dist/cli.js.map +1 -1
  16. package/dist/domain/diagnostics.d.ts +1 -1
  17. package/dist/domain/diagnostics.js +2 -0
  18. package/dist/domain/diagnostics.js.map +1 -1
  19. package/dist/domain/identity.d.ts +8 -3
  20. package/dist/domain/identity.js +10 -4
  21. package/dist/domain/identity.js.map +1 -1
  22. package/dist/domain/schema.d.ts +164 -6
  23. package/dist/domain/schema.js +314 -4
  24. package/dist/domain/schema.js.map +1 -1
  25. package/dist/domain/scrollEvidence.d.ts +51 -0
  26. package/dist/domain/scrollEvidence.js +134 -0
  27. package/dist/domain/scrollEvidence.js.map +1 -0
  28. package/dist/index.d.ts +4 -4
  29. package/dist/index.js +2 -2
  30. package/dist/index.js.map +1 -1
  31. package/dist/request/request.d.ts +57 -1
  32. package/dist/request/request.js +292 -14
  33. package/dist/request/request.js.map +1 -1
  34. package/docs/ARCHITECTURE.md +62 -1
  35. package/docs/CI_CD.md +49 -8
  36. package/docs/COMMANDS.md +184 -9
  37. package/docs/CONTRACTS.md +135 -6
  38. package/docs/CURRENT_STATE.md +128 -6
  39. package/docs/DEVELOPMENT.md +41 -3
  40. package/docs/PROJECT_OVERVIEW.md +12 -6
  41. package/docs/QUICKSTART.md +3 -1
  42. package/docs/RELEASE.md +12 -5
  43. package/docs/ROADMAP.md +9 -0
  44. package/docs/SECURITY.md +6 -2
  45. package/docs/WORKFLOWS.md +41 -14
  46. package/package.json +1 -1
@@ -3,8 +3,27 @@ import type { Diagnostic } from './diagnostics.js';
3
3
  import type { CompletionState } from './completion.js';
4
4
  import type { NormalizedObservationRequest } from '../request/request.js';
5
5
  export declare const ARTIFACT_KIND: "my-frontend-observer/observation";
6
- export declare const SCHEMA_VERSION: "1.0.0";
6
+ export declare const SCHEMA_VERSION: "1.2.0";
7
7
  export declare const PRODUCER_NAME: "my-frontend-observer";
8
+ export type TargetLocatorKind = 'role' | 'id' | 'data-attribute' | 'semantic-element' | 'css' | 'text';
9
+ export type TargetSelectionStatus = 'matched' | 'not-found' | 'ambiguous' | 'unavailable';
10
+ export type TargetSelectionConfidence = 'exact' | 'none';
11
+ export type TargetLocatorAttemptStatus = 'not-found' | 'ambiguous' | 'matched' | 'unavailable' | 'unsupported';
12
+ export interface TargetLocatorAttempt {
13
+ locatorIndex: number;
14
+ locatorKind: TargetLocatorKind;
15
+ status: TargetLocatorAttemptStatus;
16
+ matchCount?: number;
17
+ }
18
+ export interface TargetResolution {
19
+ selectionMethod: string;
20
+ selectionStatus: TargetSelectionStatus;
21
+ selectedLocatorKind?: TargetLocatorKind;
22
+ selectedLocatorIndex?: number;
23
+ usedFallback: boolean;
24
+ confidence: TargetSelectionConfidence;
25
+ attempts: TargetLocatorAttempt[];
26
+ }
8
27
  export interface ArtifactReference {
9
28
  path: string;
10
29
  kind: string;
@@ -38,6 +57,31 @@ export interface TargetSemantics {
38
57
  role?: string;
39
58
  name?: string;
40
59
  }
60
+ /**
61
+ * Bounded first semantic-state family (Batch 3). Each key is present only
62
+ * when the browser exposes that state as applicable to this element (native
63
+ * form-control property or an explicit `aria-*` attribute) - an absent key
64
+ * means "not applicable to this element", never a guessed `false`. `checked`
65
+ * and `pressed` additionally support the browser's tri-state `'mixed'`
66
+ * value; `current` mirrors the `aria-current` value space (`true` for the
67
+ * bare/`"true"` form, or the specific token).
68
+ */
69
+ export interface TargetSemanticState {
70
+ disabled?: boolean;
71
+ expanded?: boolean;
72
+ checked?: boolean | 'mixed';
73
+ selected?: boolean;
74
+ pressed?: boolean | 'mixed';
75
+ current?: true | 'page' | 'step' | 'location' | 'date' | 'time';
76
+ }
77
+ export declare const TARGET_LANDMARK_ROLES: readonly ["banner", "navigation", "main", "complementary", "contentinfo", "form", "region", "search"];
78
+ export type TargetLandmarkRole = (typeof TARGET_LANDMARK_ROLES)[number];
79
+ /** Bounded configured-target-only DOM containment (Batch 3) - not a layout/relationship graph. All arrays follow configured target order and exclude the target itself. */
80
+ export interface TargetContainment {
81
+ containedByTargetIds: string[];
82
+ evaluatedTargetIds: string[];
83
+ unresolvedTargetIds: string[];
84
+ }
41
85
  /**
42
86
  * Batch 1 froze the wrapper (EvidenceField<T>) and the category names
43
87
  * (resolution/geometry/style) but deliberately left geometry/style typed
@@ -49,16 +93,129 @@ export interface TargetSemantics {
49
93
  * existing caller loses a field.
50
94
  */
51
95
  export interface TargetEvidenceRecord {
52
- resolution: EvidenceField<{
53
- selectionMethod: string;
54
- selectionStatus: string;
55
- }>;
96
+ resolution: EvidenceField<TargetResolution>;
56
97
  tag: EvidenceField<string>;
57
98
  geometry: EvidenceField<TargetGeometry>;
58
99
  style: EvidenceField<TargetComputedStyle>;
59
100
  layout: EvidenceField<TargetLayoutMetrics>;
60
101
  visibility: EvidenceField<TargetVisibility>;
61
102
  semantics: EvidenceField<TargetSemantics>;
103
+ semanticState: EvidenceField<TargetSemanticState>;
104
+ landmark: EvidenceField<TargetLandmarkRole>;
105
+ containment: EvidenceField<TargetContainment>;
106
+ }
107
+ /**
108
+ * v0.3 Batch 1 bounded runtime scroll/overflow evidence model. Frozen here
109
+ * as a contract; no browser capture populates it yet (Batch 2/3), so
110
+ * `scrollScenarioEvidence` on `ObservationArtifact` stays absent for every
111
+ * Batch-1-era observation, including one whose `requestConfig.scrollScenario`
112
+ * is present (see `src/browser/chromiumAdapter.ts`, which fails such a
113
+ * request honestly rather than pretending to execute it).
114
+ */
115
+ export interface ScrollableMetrics {
116
+ scrollTop: number;
117
+ scrollLeft: number;
118
+ scrollWidth: number;
119
+ scrollHeight: number;
120
+ clientWidth: number;
121
+ clientHeight: number;
122
+ }
123
+ /** Distinguishes an `overflow-x`/`overflow-y` CSS declaration from actual browser-observed dimensional overflow - the two are not interchangeable (see docs/CONTRACTS.md). */
124
+ export interface OverflowEvidence {
125
+ horizontalOverflow: boolean;
126
+ verticalOverflow: boolean;
127
+ overflowX: string;
128
+ overflowY: string;
129
+ }
130
+ export interface WindowScrollSnapshot {
131
+ scrollX: number;
132
+ scrollY: number;
133
+ }
134
+ /** `documentElement`/`body` are omitted (not fabricated) when the browser's own scrolling/root-element representation makes them not meaningfully distinct or not observable. */
135
+ export interface DocumentScrollSnapshot {
136
+ root: ScrollableMetrics;
137
+ rootOverflow: OverflowEvidence;
138
+ documentElement?: ScrollableMetrics;
139
+ body?: ScrollableMetrics;
140
+ }
141
+ export type VerticalViewportRelation = 'above' | 'intersecting' | 'below';
142
+ /**
143
+ * Derived only from a target's bounding rectangle plus viewport width/height
144
+ * - never from source styles or locator kind. A hidden/non-rendered target
145
+ * (see `TargetVisibility`/`target-hidden`) must not receive normal
146
+ * above/below/intersecting geometry; its `viewportRelation` field on
147
+ * `TargetScrollRuntimeState` is `not-applicable` instead (hidden is not the
148
+ * same claim as offscreen).
149
+ */
150
+ export interface ViewportRelationEvidence {
151
+ vertical: VerticalViewportRelation;
152
+ intersectsViewport: boolean;
153
+ fullyWithinViewport: boolean;
154
+ }
155
+ /** Bounded per-configured-target runtime scroll/overflow/viewport evidence for one snapshot (initial or final). References targets by the existing stable target `name` - never a second region identity - and never copies the full `TargetEvidenceRecord`. */
156
+ export interface TargetScrollRuntimeState {
157
+ metrics: EvidenceField<ScrollableMetrics>;
158
+ overflow: EvidenceField<OverflowEvidence>;
159
+ boundingRect: EvidenceField<TargetGeometry>;
160
+ viewportRelation: EvidenceField<ViewportRelationEvidence>;
161
+ }
162
+ /** One point-in-time bounded runtime snapshot (captured either before or after the one scroll action). */
163
+ export interface ScrollRuntimeSnapshot {
164
+ window: WindowScrollSnapshot;
165
+ document: DocumentScrollSnapshot;
166
+ targets: Record<string, TargetScrollRuntimeState>;
167
+ }
168
+ export interface ScrollValueChange<T> {
169
+ before: T;
170
+ after: T;
171
+ changed: boolean;
172
+ }
173
+ /**
174
+ * `enteredViewport`/`leftViewport` are only evaluated when both the initial
175
+ * and final `viewportRelation` evidence are valid (never derived from a
176
+ * hidden-to-visible transition, which is a separate evidence concept - see
177
+ * docs/CONTRACTS.md).
178
+ */
179
+ export interface TargetScrollTransition {
180
+ scrollTop: ScrollValueChange<number>;
181
+ scrollLeft: ScrollValueChange<number>;
182
+ boundingRectPosition: ScrollValueChange<{
183
+ x: number;
184
+ y: number;
185
+ }>;
186
+ viewportRelation: ScrollValueChange<VerticalViewportRelation>;
187
+ enteredViewport: boolean;
188
+ leftViewport: boolean;
189
+ }
190
+ /** Bounded explicit before/after change evidence for the one scroll action in this scenario - not a generic recursive diff engine. */
191
+ export interface ScrollScenarioTransition {
192
+ windowScrollX: ScrollValueChange<number>;
193
+ windowScrollY: ScrollValueChange<number>;
194
+ targets: Record<string, TargetScrollTransition>;
195
+ }
196
+ /**
197
+ * Conservative derived interpretation of which scrolling container actually
198
+ * moved. Never forces a winner: `none` when nothing relevant changed,
199
+ * `indeterminate` when more than one plausible owner changed or evidence is
200
+ * insufficient. `target` references the existing stable target `name`.
201
+ */
202
+ export type ScrollOwnerInterpretation = {
203
+ kind: 'document';
204
+ } | {
205
+ kind: 'target';
206
+ target: string;
207
+ } | {
208
+ kind: 'none';
209
+ } | {
210
+ kind: 'indeterminate';
211
+ };
212
+ /** Top-level optional v0.3 evidence family. Present only when the request configured a `scrollScenario`; absent otherwise (never fabricated as empty/zeroed evidence). */
213
+ export interface ScrollScenarioEvidence {
214
+ initial: ScrollRuntimeSnapshot;
215
+ final: ScrollRuntimeSnapshot;
216
+ transition: ScrollScenarioTransition;
217
+ /** Always `source: 'derived'` with a non-empty `derivedFrom` (enforced by `isValidEvidenceField`/`isValidObservationArtifact`) - scroll ownership is an interpretation over browser-observed facts, never itself a direct browser observation. */
218
+ scrollOwner: EvidenceField<ScrollOwnerInterpretation>;
62
219
  }
63
220
  export interface ObservationArtifact {
64
221
  artifactKind: typeof ARTIFACT_KIND;
@@ -80,6 +237,7 @@ export interface ObservationArtifact {
80
237
  };
81
238
  pageEvidence: Record<string, EvidenceField<unknown>>;
82
239
  targetEvidence: Record<string, TargetEvidenceRecord>;
240
+ scrollScenarioEvidence?: ScrollScenarioEvidence;
83
241
  screenshot: EvidenceField<{
84
242
  path: string;
85
243
  }>;
@@ -107,5 +265,5 @@ export declare function getProducerInfo(): {
107
265
  name: typeof PRODUCER_NAME;
108
266
  version: string;
109
267
  };
110
- /** Structural validator for the frozen schema-1.0.0 ObservationArtifact contract. Treats `value` as arbitrary/unknown input. */
268
+ /** Structural validator for the frozen schema-1.2.0 ObservationArtifact contract. Treats `value` as arbitrary/unknown input. */
111
269
  export declare function isValidObservationArtifact(value: unknown): SchemaValidationResult;
@@ -3,9 +3,11 @@ import { fileURLToPath } from 'node:url';
3
3
  import path from 'node:path';
4
4
  import { isValidEvidenceField } from './evidence.js';
5
5
  import { DIAGNOSTIC_CODES, DIAGNOSTIC_SEVERITY } from './diagnostics.js';
6
+ import { SCROLL_DELTA_MAX_ABS } from '../request/request.js';
6
7
  export const ARTIFACT_KIND = 'my-frontend-observer/observation';
7
- export const SCHEMA_VERSION = '1.0.0';
8
+ export const SCHEMA_VERSION = '1.2.0';
8
9
  export const PRODUCER_NAME = 'my-frontend-observer';
10
+ export const TARGET_LANDMARK_ROLES = ['banner', 'navigation', 'main', 'complementary', 'contentinfo', 'form', 'region', 'search'];
9
11
  function readPackageVersion() {
10
12
  const here = path.dirname(fileURLToPath(import.meta.url));
11
13
  const packageJsonPath = path.join(here, '..', '..', 'package.json');
@@ -27,6 +29,277 @@ export function getProducerInfo() {
27
29
  function isPlainObject(value) {
28
30
  return typeof value === 'object' && value !== null && !Array.isArray(value);
29
31
  }
32
+ const TARGET_LOCATOR_KINDS = ['role', 'id', 'data-attribute', 'semantic-element', 'css', 'text'];
33
+ const TARGET_SELECTION_STATUSES = ['matched', 'not-found', 'ambiguous', 'unavailable'];
34
+ const TARGET_SELECTION_CONFIDENCES = ['exact', 'none'];
35
+ const TARGET_LOCATOR_ATTEMPT_STATUSES = ['not-found', 'ambiguous', 'matched', 'unavailable', 'unsupported'];
36
+ function isValidTargetLocatorAttempt(value) {
37
+ if (!isPlainObject(value))
38
+ return false;
39
+ if (typeof value.locatorIndex !== 'number' || !Number.isInteger(value.locatorIndex) || value.locatorIndex < 0)
40
+ return false;
41
+ if (typeof value.locatorKind !== 'string' || !TARGET_LOCATOR_KINDS.includes(value.locatorKind))
42
+ return false;
43
+ if (typeof value.status !== 'string' || !TARGET_LOCATOR_ATTEMPT_STATUSES.includes(value.status))
44
+ return false;
45
+ if ('matchCount' in value && value.matchCount !== undefined && (typeof value.matchCount !== 'number' || !Number.isInteger(value.matchCount) || value.matchCount < 0)) {
46
+ return false;
47
+ }
48
+ return true;
49
+ }
50
+ /** Structural validator for the frozen schema-1.1.0 TargetResolution contract, including the selectedLocatorKind/selectedLocatorIndex-iff-matched and usedFallback-iff-nonzero-index invariants. */
51
+ function isValidTargetResolutionValue(value) {
52
+ if (!isPlainObject(value))
53
+ return false;
54
+ if (typeof value.selectionMethod !== 'string')
55
+ return false;
56
+ if (typeof value.selectionStatus !== 'string' || !TARGET_SELECTION_STATUSES.includes(value.selectionStatus))
57
+ return false;
58
+ if (typeof value.usedFallback !== 'boolean')
59
+ return false;
60
+ if (typeof value.confidence !== 'string' || !TARGET_SELECTION_CONFIDENCES.includes(value.confidence))
61
+ return false;
62
+ if (!Array.isArray(value.attempts) || !value.attempts.every((a) => isValidTargetLocatorAttempt(a)))
63
+ return false;
64
+ for (let i = 1; i < value.attempts.length; i += 1) {
65
+ if (value.attempts[i].locatorIndex <= value.attempts[i - 1].locatorIndex)
66
+ return false;
67
+ }
68
+ const isMatched = value.selectionStatus === 'matched';
69
+ const hasSelectedKind = 'selectedLocatorKind' in value && value.selectedLocatorKind !== undefined;
70
+ const hasSelectedIndex = 'selectedLocatorIndex' in value && value.selectedLocatorIndex !== undefined;
71
+ if (hasSelectedKind !== isMatched || hasSelectedIndex !== isMatched)
72
+ return false;
73
+ if (isMatched) {
74
+ if (typeof value.selectedLocatorKind !== 'string' || !TARGET_LOCATOR_KINDS.includes(value.selectedLocatorKind))
75
+ return false;
76
+ if (typeof value.selectedLocatorIndex !== 'number' || !Number.isInteger(value.selectedLocatorIndex) || value.selectedLocatorIndex < 0)
77
+ return false;
78
+ if (value.usedFallback !== value.selectedLocatorIndex > 0)
79
+ return false;
80
+ }
81
+ else if (value.usedFallback) {
82
+ return false;
83
+ }
84
+ return true;
85
+ }
86
+ const TARGET_CURRENT_VALUES = ['page', 'step', 'location', 'date', 'time'];
87
+ /** Structural validator for TargetSemanticState: every present key must use its exact supported value vocabulary; an absent key is valid (means "not applicable"). */
88
+ function isValidTargetSemanticState(value) {
89
+ if (!isPlainObject(value))
90
+ return false;
91
+ const keys = ['disabled', 'expanded', 'checked', 'selected', 'pressed', 'current'];
92
+ if (!Object.keys(value).every((k) => keys.includes(k)))
93
+ return false;
94
+ if ('disabled' in value && typeof value.disabled !== 'boolean')
95
+ return false;
96
+ if ('expanded' in value && typeof value.expanded !== 'boolean')
97
+ return false;
98
+ if ('checked' in value && typeof value.checked !== 'boolean' && value.checked !== 'mixed')
99
+ return false;
100
+ if ('selected' in value && typeof value.selected !== 'boolean')
101
+ return false;
102
+ if ('pressed' in value && typeof value.pressed !== 'boolean' && value.pressed !== 'mixed')
103
+ return false;
104
+ if ('current' in value && value.current !== true && !TARGET_CURRENT_VALUES.includes(value.current))
105
+ return false;
106
+ return true;
107
+ }
108
+ function isValidTargetLandmarkRole(value) {
109
+ return typeof value === 'string' && TARGET_LANDMARK_ROLES.includes(value);
110
+ }
111
+ /** Structural validator for TargetContainment: string arrays, no duplicates, and no target ID appearing in more than one of the three arrays. */
112
+ function isValidTargetContainment(value) {
113
+ if (!isPlainObject(value))
114
+ return false;
115
+ const isStringArray = (v) => Array.isArray(v) && v.every((entry) => typeof entry === 'string');
116
+ if (!isStringArray(value.containedByTargetIds) || !isStringArray(value.evaluatedTargetIds) || !isStringArray(value.unresolvedTargetIds))
117
+ return false;
118
+ const containedByTargetIds = value.containedByTargetIds;
119
+ const evaluatedTargetIds = value.evaluatedTargetIds;
120
+ const unresolvedTargetIds = value.unresolvedTargetIds;
121
+ const noDuplicates = (arr) => new Set(arr).size === arr.length;
122
+ if (!noDuplicates(containedByTargetIds) || !noDuplicates(evaluatedTargetIds) || !noDuplicates(unresolvedTargetIds))
123
+ return false;
124
+ if (!containedByTargetIds.every((id) => evaluatedTargetIds.includes(id)))
125
+ return false;
126
+ if (evaluatedTargetIds.some((id) => unresolvedTargetIds.includes(id)))
127
+ return false;
128
+ return true;
129
+ }
130
+ function isValidTargetGeometryValue(value) {
131
+ if (!isPlainObject(value))
132
+ return false;
133
+ return ['x', 'y', 'width', 'height', 'right', 'bottom'].every((key) => typeof value[key] === 'number');
134
+ }
135
+ /** Structural validator for the requestConfig-side scrollScenario shape (defense in depth alongside src/request/request.ts#normalizeRequest's own validation). */
136
+ function isValidRequestScrollAction(value) {
137
+ if (!isPlainObject(value))
138
+ return false;
139
+ const kind = value.kind;
140
+ const deltaOk = (d) => typeof d === 'number' && Number.isInteger(d) && Math.abs(d) <= SCROLL_DELTA_MAX_ABS;
141
+ if (kind === 'window-scroll-by') {
142
+ if (!deltaOk(value.deltaX) || !deltaOk(value.deltaY))
143
+ return false;
144
+ if (value.deltaX === 0 && value.deltaY === 0)
145
+ return false;
146
+ return Object.keys(value).length === 3;
147
+ }
148
+ if (kind === 'target-scroll-by') {
149
+ if (typeof value.target !== 'string' || value.target.length === 0)
150
+ return false;
151
+ if (!deltaOk(value.deltaX) || !deltaOk(value.deltaY))
152
+ return false;
153
+ if (value.deltaX === 0 && value.deltaY === 0)
154
+ return false;
155
+ return Object.keys(value).length === 4;
156
+ }
157
+ return false;
158
+ }
159
+ function isValidRequestScrollScenario(value) {
160
+ if (!isPlainObject(value))
161
+ return false;
162
+ if (Object.keys(value).length !== 1)
163
+ return false;
164
+ return isValidRequestScrollAction(value.action);
165
+ }
166
+ function isValidScrollableMetrics(value) {
167
+ if (!isPlainObject(value))
168
+ return false;
169
+ return ['scrollTop', 'scrollLeft', 'scrollWidth', 'scrollHeight', 'clientWidth', 'clientHeight'].every((key) => typeof value[key] === 'number');
170
+ }
171
+ function isValidOverflowEvidence(value) {
172
+ if (!isPlainObject(value))
173
+ return false;
174
+ return (typeof value.horizontalOverflow === 'boolean' &&
175
+ typeof value.verticalOverflow === 'boolean' &&
176
+ typeof value.overflowX === 'string' &&
177
+ typeof value.overflowY === 'string');
178
+ }
179
+ function isValidWindowScrollSnapshot(value) {
180
+ return isPlainObject(value) && typeof value.scrollX === 'number' && typeof value.scrollY === 'number';
181
+ }
182
+ function isValidDocumentScrollSnapshot(value) {
183
+ if (!isPlainObject(value))
184
+ return false;
185
+ if (!isValidScrollableMetrics(value.root))
186
+ return false;
187
+ if (!isValidOverflowEvidence(value.rootOverflow))
188
+ return false;
189
+ if ('documentElement' in value && value.documentElement !== undefined && !isValidScrollableMetrics(value.documentElement))
190
+ return false;
191
+ if ('body' in value && value.body !== undefined && !isValidScrollableMetrics(value.body))
192
+ return false;
193
+ return true;
194
+ }
195
+ const VERTICAL_VIEWPORT_RELATIONS = ['above', 'intersecting', 'below'];
196
+ function isValidViewportRelationEvidence(value) {
197
+ if (!isPlainObject(value))
198
+ return false;
199
+ if (!VERTICAL_VIEWPORT_RELATIONS.includes(value.vertical))
200
+ return false;
201
+ return typeof value.intersectsViewport === 'boolean' && typeof value.fullyWithinViewport === 'boolean';
202
+ }
203
+ /** Validates an EvidenceField's `.value` only when the field is available/partial - not applicable/unavailable fields carry no value to check. */
204
+ function isValidEvidenceFieldValue(field, validate) {
205
+ if (!isPlainObject(field))
206
+ return false;
207
+ if (field.state === 'available' || field.state === 'partial') {
208
+ return validate(field.value);
209
+ }
210
+ return true;
211
+ }
212
+ function isValidTargetScrollRuntimeState(value) {
213
+ if (!isPlainObject(value))
214
+ return false;
215
+ if (!isValidEvidenceField(value.metrics) || !isValidEvidenceFieldValue(value.metrics, isValidScrollableMetrics))
216
+ return false;
217
+ if (!isValidEvidenceField(value.overflow) || !isValidEvidenceFieldValue(value.overflow, isValidOverflowEvidence))
218
+ return false;
219
+ if (!isValidEvidenceField(value.boundingRect) || !isValidEvidenceFieldValue(value.boundingRect, isValidTargetGeometryValue))
220
+ return false;
221
+ if (!isValidEvidenceField(value.viewportRelation) || !isValidEvidenceFieldValue(value.viewportRelation, isValidViewportRelationEvidence))
222
+ return false;
223
+ return true;
224
+ }
225
+ function isValidScrollRuntimeSnapshot(value) {
226
+ if (!isPlainObject(value))
227
+ return false;
228
+ if (!isValidWindowScrollSnapshot(value.window))
229
+ return false;
230
+ if (!isValidDocumentScrollSnapshot(value.document))
231
+ return false;
232
+ if (!isPlainObject(value.targets))
233
+ return false;
234
+ return Object.values(value.targets).every((target) => isValidTargetScrollRuntimeState(target));
235
+ }
236
+ function isValidScrollValueChange(value, validateInner) {
237
+ if (!isPlainObject(value))
238
+ return false;
239
+ if (typeof value.changed !== 'boolean')
240
+ return false;
241
+ return validateInner(value.before) && validateInner(value.after);
242
+ }
243
+ function isValidTargetScrollTransition(value) {
244
+ if (!isPlainObject(value))
245
+ return false;
246
+ if (!isValidScrollValueChange(value.scrollTop, (v) => typeof v === 'number'))
247
+ return false;
248
+ if (!isValidScrollValueChange(value.scrollLeft, (v) => typeof v === 'number'))
249
+ return false;
250
+ if (!isValidScrollValueChange(value.boundingRectPosition, (v) => isPlainObject(v) && typeof v.x === 'number' && typeof v.y === 'number'))
251
+ return false;
252
+ if (!isValidScrollValueChange(value.viewportRelation, (v) => VERTICAL_VIEWPORT_RELATIONS.includes(v)))
253
+ return false;
254
+ if (typeof value.enteredViewport !== 'boolean' || typeof value.leftViewport !== 'boolean')
255
+ return false;
256
+ if (value.enteredViewport && value.leftViewport)
257
+ return false;
258
+ return true;
259
+ }
260
+ function isValidScrollScenarioTransition(value) {
261
+ if (!isPlainObject(value))
262
+ return false;
263
+ if (!isValidScrollValueChange(value.windowScrollX, (v) => typeof v === 'number'))
264
+ return false;
265
+ if (!isValidScrollValueChange(value.windowScrollY, (v) => typeof v === 'number'))
266
+ return false;
267
+ if (!isPlainObject(value.targets))
268
+ return false;
269
+ return Object.values(value.targets).every((target) => isValidTargetScrollTransition(target));
270
+ }
271
+ const SCROLL_OWNER_KINDS = ['document', 'target', 'none', 'indeterminate'];
272
+ function isValidScrollOwnerInterpretation(value) {
273
+ if (!isPlainObject(value))
274
+ return false;
275
+ const kind = value.kind;
276
+ if (!SCROLL_OWNER_KINDS.includes(kind))
277
+ return false;
278
+ if (kind === 'target')
279
+ return typeof value.target === 'string' && value.target.length > 0 && Object.keys(value).length === 2;
280
+ return Object.keys(value).length === 1;
281
+ }
282
+ /** Structural validator for ScrollScenarioEvidence, including the scroll-owner derived-provenance requirement (source must be 'derived', enforced alongside isValidEvidenceField's existing derivedFrom-iff-derived-source invariant). */
283
+ function isValidScrollScenarioEvidence(value) {
284
+ if (!isPlainObject(value))
285
+ return false;
286
+ if (!isValidScrollRuntimeSnapshot(value.initial))
287
+ return false;
288
+ if (!isValidScrollRuntimeSnapshot(value.final))
289
+ return false;
290
+ if (!isValidScrollScenarioTransition(value.transition))
291
+ return false;
292
+ if (!isValidEvidenceField(value.scrollOwner))
293
+ return false;
294
+ const scrollOwnerField = value.scrollOwner;
295
+ if (scrollOwnerField.state === 'available' || scrollOwnerField.state === 'partial') {
296
+ if (scrollOwnerField.source !== 'derived')
297
+ return false;
298
+ if (!isValidScrollOwnerInterpretation(scrollOwnerField.value))
299
+ return false;
300
+ }
301
+ return true;
302
+ }
30
303
  function isValidDiagnostic(value) {
31
304
  if (!isPlainObject(value))
32
305
  return false;
@@ -56,7 +329,7 @@ function isValidCompletionState(value) {
56
329
  }
57
330
  return false;
58
331
  }
59
- /** Structural validator for the frozen schema-1.0.0 ObservationArtifact contract. Treats `value` as arbitrary/unknown input. */
332
+ /** Structural validator for the frozen schema-1.2.0 ObservationArtifact contract. Treats `value` as arbitrary/unknown input. */
60
333
  export function isValidObservationArtifact(value) {
61
334
  if (!isPlainObject(value))
62
335
  return { valid: false, reason: 'artifact must be an object' };
@@ -91,12 +364,49 @@ export function isValidObservationArtifact(value) {
91
364
  !isValidEvidenceField(target.style) ||
92
365
  !isValidEvidenceField(target.layout) ||
93
366
  !isValidEvidenceField(target.visibility) ||
94
- !isValidEvidenceField(target.semantics)) {
367
+ !isValidEvidenceField(target.semantics) ||
368
+ !isValidEvidenceField(target.semanticState) ||
369
+ !isValidEvidenceField(target.landmark) ||
370
+ !isValidEvidenceField(target.containment)) {
95
371
  return {
96
372
  valid: false,
97
- reason: 'targetEvidence entries must have valid resolution/tag/geometry/style/layout/visibility/semantics evidence fields',
373
+ reason: 'targetEvidence entries must have valid resolution/tag/geometry/style/layout/visibility/semantics/semanticState/landmark/containment evidence fields',
98
374
  };
99
375
  }
376
+ const resolutionField = target.resolution;
377
+ if (resolutionField.state === 'available' || resolutionField.state === 'partial') {
378
+ if (!isValidTargetResolutionValue(resolutionField.value)) {
379
+ return { valid: false, reason: 'targetEvidence resolution value must be a valid TargetResolution' };
380
+ }
381
+ }
382
+ const semanticStateField = target.semanticState;
383
+ if (semanticStateField.state === 'available' || semanticStateField.state === 'partial') {
384
+ if (!isValidTargetSemanticState(semanticStateField.value)) {
385
+ return { valid: false, reason: 'targetEvidence semanticState value must be a valid TargetSemanticState' };
386
+ }
387
+ }
388
+ const landmarkField = target.landmark;
389
+ if (landmarkField.state === 'available' || landmarkField.state === 'partial') {
390
+ if (!isValidTargetLandmarkRole(landmarkField.value)) {
391
+ return { valid: false, reason: 'targetEvidence landmark value must be a recognized landmark role' };
392
+ }
393
+ }
394
+ const containmentField = target.containment;
395
+ if (containmentField.state === 'available' || containmentField.state === 'partial') {
396
+ if (!isValidTargetContainment(containmentField.value)) {
397
+ return { valid: false, reason: 'targetEvidence containment value must be a valid TargetContainment' };
398
+ }
399
+ }
400
+ }
401
+ if (isPlainObject(value.requestConfig) && 'scrollScenario' in value.requestConfig && value.requestConfig.scrollScenario !== undefined) {
402
+ if (!isValidRequestScrollScenario(value.requestConfig.scrollScenario)) {
403
+ return { valid: false, reason: 'requestConfig.scrollScenario is invalid' };
404
+ }
405
+ }
406
+ if ('scrollScenarioEvidence' in value && value.scrollScenarioEvidence !== undefined) {
407
+ if (!isValidScrollScenarioEvidence(value.scrollScenarioEvidence)) {
408
+ return { valid: false, reason: 'scrollScenarioEvidence is invalid' };
409
+ }
100
410
  }
101
411
  if (!isValidEvidenceField(value.screenshot))
102
412
  return { valid: false, reason: 'screenshot evidence field is invalid' };
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/domain/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/domain/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAGzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,CAAC,MAAM,aAAa,GAAG,kCAA2C,CAAC;AACzE,MAAM,CAAC,MAAM,cAAc,GAAG,OAAgB,CAAC;AAC/C,MAAM,CAAC,MAAM,aAAa,GAAG,sBAA+B,CAAC;AAiF7D,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAU,CAAC;AAwK3I,SAAS,kBAAkB;IACzB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IACpE,MAAM,GAAG,GAAG,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA0B,CAAC;IACxD,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtE,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,kBAAkB,EAAE,EAAE,CAAC;AAChE,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,oBAAoB,GAAiC,CAAC,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAC/H,MAAM,yBAAyB,GAAqC,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;AACzH,MAAM,4BAA4B,GAAyC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAC7F,MAAM,+BAA+B,GAA0C,CAAC,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;AAEnJ,SAAS,2BAA2B,CAAC,KAAc;IACjD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,YAAY,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5H,IAAI,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,IAAI,CAAE,oBAA0C,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC;QAAE,OAAO,KAAK,CAAC;IACpI,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAE,+BAAqD,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IACrI,IAAI,YAAY,IAAI,KAAK,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC;QACrK,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,oMAAoM;AACpM,SAAS,4BAA4B,CAAC,KAAc;IAClD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,OAAO,KAAK,CAAC,eAAe,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5D,IAAI,OAAO,KAAK,CAAC,eAAe,KAAK,QAAQ,IAAI,CAAE,yBAA+C,CAAC,QAAQ,CAAC,KAAK,CAAC,eAAe,CAAC;QAAE,OAAO,KAAK,CAAC;IACjJ,IAAI,OAAO,KAAK,CAAC,YAAY,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC1D,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,IAAI,CAAE,4BAAkD,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1I,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1H,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAClD,IAAK,KAAK,CAAC,QAAQ,CAAC,CAAC,CAA0B,CAAC,YAAY,IAAK,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAA0B,CAAC,YAAY;YAAE,OAAO,KAAK,CAAC;IAC7I,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,eAAe,KAAK,SAAS,CAAC;IACtD,MAAM,eAAe,GAAG,qBAAqB,IAAI,KAAK,IAAI,KAAK,CAAC,mBAAmB,KAAK,SAAS,CAAC;IAClG,MAAM,gBAAgB,GAAG,sBAAsB,IAAI,KAAK,IAAI,KAAK,CAAC,oBAAoB,KAAK,SAAS,CAAC;IACrG,IAAI,eAAe,KAAK,SAAS,IAAI,gBAAgB,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAClF,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,OAAO,KAAK,CAAC,mBAAmB,KAAK,QAAQ,IAAI,CAAE,oBAA0C,CAAC,QAAQ,CAAC,KAAK,CAAC,mBAAmB,CAAC;YAAE,OAAO,KAAK,CAAC;QACpJ,IAAI,OAAO,KAAK,CAAC,oBAAoB,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,oBAAoB,CAAC,IAAI,KAAK,CAAC,oBAAoB,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QACpJ,IAAI,KAAK,CAAC,YAAY,KAAK,KAAK,CAAC,oBAAoB,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;IAC1E,CAAC;SAAM,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,qBAAqB,GAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAE9F,sKAAsK;AACtK,SAAS,0BAA0B,CAAC,KAAc;IAChD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IACnF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACrE,IAAI,UAAU,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC7E,IAAI,UAAU,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC7E,IAAI,SAAS,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IACxG,IAAI,UAAU,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC7E,IAAI,SAAS,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IACxG,IAAI,SAAS,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,IAAI,CAAE,qBAA2C,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAiB,CAAC;QAAE,OAAO,KAAK,CAAC;IAClJ,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,yBAAyB,CAAC,KAAc;IAC/C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,qBAA2C,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACnG,CAAC;AAED,iJAAiJ;AACjJ,SAAS,wBAAwB,CAAC,KAAc;IAC9C,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,MAAM,aAAa,GAAG,CAAC,CAAU,EAAiB,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC;IACvH,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,mBAAmB,CAAC;QAAE,OAAO,KAAK,CAAC;IACtJ,MAAM,oBAAoB,GAAG,KAAK,CAAC,oBAAoB,CAAC;IACxD,MAAM,kBAAkB,GAAG,KAAK,CAAC,kBAAkB,CAAC;IACpD,MAAM,mBAAmB,GAAG,KAAK,CAAC,mBAAmB,CAAC;IACtD,MAAM,YAAY,GAAG,CAAC,GAAa,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,MAAM,CAAC;IACzE,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC;QAAE,OAAO,KAAK,CAAC;IACjI,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACvF,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACpF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,0BAA0B,CAAC,KAAc;IAChD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,OAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAW,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,CAAC;AACpH,CAAC;AAED,kKAAkK;AAClK,SAAS,0BAA0B,CAAC,KAAc;IAChD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,MAAM,OAAO,GAAG,CAAC,CAAU,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,oBAAoB,CAAC;IACpH,IAAI,IAAI,KAAK,kBAAkB,EAAE,CAAC;QAChC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC;QACnE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAC3D,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;IACzC,CAAC;IACD,IAAI,IAAI,KAAK,kBAAkB,EAAE,CAAC;QAChC,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAChF,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC;QACnE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAC3D,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,4BAA4B,CAAC,KAAc;IAClD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAClD,OAAO,0BAA0B,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAc;IAC9C,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,OAAQ,CAAC,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,CAAW,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,CAAC;AAC7J,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAc;IAC7C,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,OAAO,CACL,OAAO,KAAK,CAAC,kBAAkB,KAAK,SAAS;QAC7C,OAAO,KAAK,CAAC,gBAAgB,KAAK,SAAS;QAC3C,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;QACnC,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,CACpC,CAAC;AACJ,CAAC;AAED,SAAS,2BAA2B,CAAC,KAAc;IACjD,OAAO,aAAa,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC;AACxG,CAAC;AAED,SAAS,6BAA6B,CAAC,KAAc;IACnD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACxD,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,YAAY,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/D,IAAI,iBAAiB,IAAI,KAAK,IAAI,KAAK,CAAC,eAAe,KAAK,SAAS,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,eAAe,CAAC;QAAE,OAAO,KAAK,CAAC;IACxI,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACvG,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,2BAA2B,GAAwC,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;AAE5G,SAAS,+BAA+B,CAAC,KAAc;IACrD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,CAAE,2BAAiD,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAkB,CAAC;QAAE,OAAO,KAAK,CAAC;IACzG,OAAO,OAAO,KAAK,CAAC,kBAAkB,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,mBAAmB,KAAK,SAAS,CAAC;AACzG,CAAC;AAED,kJAAkJ;AAClJ,SAAS,yBAAyB,CAAC,KAAc,EAAE,QAAqC;IACtF,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,KAAK,CAAC,KAAK,KAAK,WAAW,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC7D,OAAO,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,+BAA+B,CAAC,KAAc;IACrD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,OAAO,EAAE,wBAAwB,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9H,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,QAAQ,EAAE,uBAAuB,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/H,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,YAAY,EAAE,0BAA0B,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1I,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,gBAAgB,EAAE,+BAA+B,CAAC;QAAE,OAAO,KAAK,CAAC;IACvJ,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,4BAA4B,CAAC,KAAc;IAClD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7D,IAAI,CAAC,6BAA6B,CAAC,KAAK,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IACjE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAChD,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,+BAA+B,CAAC,MAAM,CAAC,CAAC,CAAC;AACjG,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAc,EAAE,aAAsC;IACtF,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACrD,OAAO,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,6BAA6B,CAAC,KAAc;IACnD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3F,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5F,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IACvJ,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAE,2BAAiD,CAAC,QAAQ,CAAC,CAAW,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACrJ,IAAI,OAAO,KAAK,CAAC,eAAe,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,YAAY,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACxG,IAAI,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,YAAY;QAAE,OAAO,KAAK,CAAC;IAC9D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,+BAA+B,CAAC,KAAc;IACrD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/F,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/F,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAChD,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/F,CAAC;AAED,MAAM,kBAAkB,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,CAAU,CAAC;AAEpF,SAAS,gCAAgC,CAAC,KAAc;IACtD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,IAAI,CAAE,kBAAwC,CAAC,QAAQ,CAAC,IAAc,CAAC;QAAE,OAAO,KAAK,CAAC;IACtF,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;IAC7H,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;AACzC,CAAC;AAED,0OAA0O;AAC1O,SAAS,6BAA6B,CAAC,KAAc;IACnD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/D,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7D,IAAI,CAAC,+BAA+B,CAAC,KAAK,CAAC,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC;IACrE,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,WAAW,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3D,MAAM,gBAAgB,GAAG,KAAK,CAAC,WAAsC,CAAC;IACtE,IAAI,gBAAgB,CAAC,KAAK,KAAK,WAAW,IAAI,gBAAgB,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACnF,IAAI,gBAAgB,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QACxD,IAAI,CAAC,gCAAgC,CAAC,gBAAgB,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;IAC9E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAE,gBAAsC,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACtG,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,IAAsB,CAAC,CAAC;IACrE,IAAI,KAAK,CAAC,QAAQ,KAAK,gBAAgB;QAAE,OAAO,KAAK,CAAC;IACtD,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACpD,IAAI,YAAY,IAAI,KAAK,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAClH,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAc;IAC5C,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1B,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,aAAa,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QAC9E,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,iBAAiB,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QACnG,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3G,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,gIAAgI;AAChI,MAAM,UAAU,0BAA0B,CAAC,KAAc;IACvD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,4BAA4B,EAAE,CAAC;IACzF,IAAI,KAAK,CAAC,YAAY,KAAK,aAAa;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,uBAAuB,EAAE,CAAC;IACnG,IAAI,KAAK,CAAC,aAAa,KAAK,cAAc;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,wBAAwB,EAAE,CAAC;IACtG,IAAI,OAAO,KAAK,CAAC,aAAa,KAAK,QAAQ,IAAI,KAAK,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,0CAA0C,EAAE,CAAC;IAC9E,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,sCAAsC,EAAE,CAAC;IAC1E,CAAC;IACD,IACE,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC9B,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,aAAa;QACrC,OAAO,KAAK,CAAC,QAAQ,CAAC,OAAO,KAAK,QAAQ;QAC1C,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EACnC,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,oEAAoE,EAAE,CAAC;IACxG,CAAC;IACD,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,mCAAmC,EAAE,CAAC;IAC/G,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,oDAAoD,EAAE,CAAC;IACxF,CAAC;IACD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,cAAc,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,kCAAkC,EAAE,CAAC;IAC9G,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;QACzD,IACE,CAAC,aAAa,CAAC,MAAM,CAAC;YACtB,CAAC,oBAAoB,CAAC,MAAM,CAAC,UAAU,CAAC;YACxC,CAAC,oBAAoB,CAAC,MAAM,CAAC,GAAG,CAAC;YACjC,CAAC,oBAAoB,CAAC,MAAM,CAAC,QAAQ,CAAC;YACtC,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC;YACnC,CAAC,oBAAoB,CAAC,MAAM,CAAC,MAAM,CAAC;YACpC,CAAC,oBAAoB,CAAC,MAAM,CAAC,UAAU,CAAC;YACxC,CAAC,oBAAoB,CAAC,MAAM,CAAC,SAAS,CAAC;YACvC,CAAC,oBAAoB,CAAC,MAAM,CAAC,aAAa,CAAC;YAC3C,CAAC,oBAAoB,CAAC,MAAM,CAAC,QAAQ,CAAC;YACtC,CAAC,oBAAoB,CAAC,MAAM,CAAC,WAAW,CAAC,EACzC,CAAC;YACD,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,MAAM,EACJ,qJAAqJ;aACxJ,CAAC;QACJ,CAAC;QACD,MAAM,eAAe,GAAG,MAAM,CAAC,UAAqC,CAAC;QACrE,IAAI,eAAe,CAAC,KAAK,KAAK,WAAW,IAAI,eAAe,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACjF,IAAI,CAAC,4BAA4B,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,kEAAkE,EAAE,CAAC;YACtG,CAAC;QACH,CAAC;QACD,MAAM,kBAAkB,GAAG,MAAM,CAAC,aAAwC,CAAC;QAC3E,IAAI,kBAAkB,CAAC,KAAK,KAAK,WAAW,IAAI,kBAAkB,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACvF,IAAI,CAAC,0BAA0B,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1D,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,wEAAwE,EAAE,CAAC;YAC5G,CAAC;QACH,CAAC;QACD,MAAM,aAAa,GAAG,MAAM,CAAC,QAAmC,CAAC;QACjE,IAAI,aAAa,CAAC,KAAK,KAAK,WAAW,IAAI,aAAa,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC7E,IAAI,CAAC,yBAAyB,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,kEAAkE,EAAE,CAAC;YACtG,CAAC;QACH,CAAC;QACD,MAAM,gBAAgB,GAAG,MAAM,CAAC,WAAsC,CAAC;QACvE,IAAI,gBAAgB,CAAC,KAAK,KAAK,WAAW,IAAI,gBAAgB,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACnF,IAAI,CAAC,wBAAwB,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,oEAAoE,EAAE,CAAC;YACxG,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,gBAAgB,IAAI,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,aAAa,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACtI,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,CAAC;YACtE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,yCAAyC,EAAE,CAAC;QAC7E,CAAC;IACH,CAAC;IACD,IAAI,wBAAwB,IAAI,KAAK,IAAI,KAAK,CAAC,sBAAsB,KAAK,SAAS,EAAE,CAAC;QACpF,IAAI,CAAC,6BAA6B,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,CAAC;YACjE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,mCAAmC,EAAE,CAAC;QACvE,CAAC;IACH,CAAC;IACD,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,UAAU,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,sCAAsC,EAAE,CAAC;IACrH,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,UAAU,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,6BAA6B,EAAE,CAAC;IAC9G,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxG,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,yDAAyD,EAAE,CAAC;IAC7F,CAAC;IACD,IAAI,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,KAAK,UAAU,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7G,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,2DAA2D,EAAE,CAAC;IAC/F,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,IACE,CAAC,aAAa,CAAC,MAAM,CAAC;QACtB,OAAO,MAAM,CAAC,SAAS,KAAK,SAAS;QACrC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC;QACpC,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;QAClE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC;QACrC,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,EACnE,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,0FAA0F,EAAE,CAAC;IAC9H,CAAC;IACD,IACE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC;QACxC,CAAC,KAAK,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,EAC7H,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,uEAAuE,EAAE,CAAC;IAC3G,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC"}