@shadowcoderr/context-graph 0.3.3 → 0.3.4

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 (36) hide show
  1. package/README.md +448 -88
  2. package/dist/analyzers/a11y-extractor.d.ts +19 -5
  3. package/dist/analyzers/a11y-extractor.d.ts.map +1 -1
  4. package/dist/analyzers/a11y-extractor.js +274 -104
  5. package/dist/analyzers/a11y-extractor.js.map +1 -1
  6. package/dist/analyzers/network-logger.d.ts +20 -2
  7. package/dist/analyzers/network-logger.d.ts.map +1 -1
  8. package/dist/analyzers/network-logger.js +122 -42
  9. package/dist/analyzers/network-logger.js.map +1 -1
  10. package/dist/analyzers/network-patterns.d.ts +73 -0
  11. package/dist/analyzers/network-patterns.d.ts.map +1 -0
  12. package/dist/analyzers/network-patterns.js +316 -0
  13. package/dist/analyzers/network-patterns.js.map +1 -0
  14. package/dist/analyzers/screenshot-capturer.d.ts +73 -0
  15. package/dist/analyzers/screenshot-capturer.d.ts.map +1 -0
  16. package/dist/analyzers/screenshot-capturer.js +190 -0
  17. package/dist/analyzers/screenshot-capturer.js.map +1 -0
  18. package/dist/cli/index.js +15 -6
  19. package/dist/cli/index.js.map +1 -1
  20. package/dist/core/capture-engine.d.ts +30 -25
  21. package/dist/core/capture-engine.d.ts.map +1 -1
  22. package/dist/core/capture-engine.js +290 -276
  23. package/dist/core/capture-engine.js.map +1 -1
  24. package/dist/exporters/ai-context-bundler.d.ts +88 -0
  25. package/dist/exporters/ai-context-bundler.d.ts.map +1 -0
  26. package/dist/exporters/ai-context-bundler.js +380 -0
  27. package/dist/exporters/ai-context-bundler.js.map +1 -0
  28. package/dist/security/redactor.d.ts +16 -0
  29. package/dist/security/redactor.d.ts.map +1 -1
  30. package/dist/security/redactor.js +127 -57
  31. package/dist/security/redactor.js.map +1 -1
  32. package/dist/storage/engine.d.ts +24 -21
  33. package/dist/storage/engine.d.ts.map +1 -1
  34. package/dist/storage/engine.js +208 -175
  35. package/dist/storage/engine.js.map +1 -1
  36. package/package.json +3 -3
@@ -1,146 +1,316 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AccessibilityExtractor = void 0;
4
+ const logger_1 = require("../utils/logger");
5
+ /**
6
+ * AccessibilityExtractor — captures the full accessibility tree using three
7
+ * strategies in order of reliability:
8
+ *
9
+ * 1. Playwright's built-in accessibility.snapshot() — the most reliable,
10
+ * cross-browser approach. Configured with interestingOnly: false so every
11
+ * node is returned, not just "interesting" leaf nodes.
12
+ *
13
+ * 2. Chrome DevTools Protocol (CDP) Accessibility.getFullAXTree — lower-level
14
+ * but gives raw browser data when Playwright's API is unavailable.
15
+ *
16
+ * 3. DOM-based construction — pure JavaScript executed inside the page.
17
+ * Works in every environment but misses computed ARIA states.
18
+ */
4
19
  class AccessibilityExtractor {
5
- async extract(page, _includeHidden = false) {
20
+ async extract(page, includeHidden = false) {
21
+ // ── Strategy 1: Playwright accessibility.snapshot() ──────────────────────
6
22
  try {
7
- // Wait for page to be ready
8
23
  await page.waitForLoadState('domcontentloaded', { timeout: 5000 }).catch(() => { });
9
- // Try to get accessibility snapshot via CDP
10
- let snapshot = null;
11
- try {
12
- // Use CDP (Chrome DevTools Protocol) for accessibility snapshot
13
- const client = await page.context().newCDPSession(page);
14
- snapshot = await client.send('Accessibility.getFullAXTree');
15
- if (snapshot && snapshot.nodes && snapshot.nodes.length > 0) {
16
- // Transform CDP format to our format
17
- return this.transformCDPSnapshot(snapshot.nodes[0], snapshot.nodes);
18
- }
19
- }
20
- catch (cdpError) {
21
- // CDP not available, fall through to DOM-based approach
24
+ // `interestingOnly: false` returns every node; set to true for compact trees
25
+ const snapshot = await page.accessibility.snapshot({
26
+ interestingOnly: !includeHidden,
27
+ });
28
+ if (snapshot) {
29
+ logger_1.logger.debug('A11y: using Playwright snapshot strategy');
30
+ return this.transformPlaywrightSnapshot(snapshot);
22
31
  }
23
- // Fallback: build accessibility tree from DOM
24
- snapshot = await this.buildFromDOM(page);
25
- return this.transformSnapshot(snapshot);
26
32
  }
27
- catch (error) {
28
- // Final fallback: build from DOM
29
- try {
30
- const domSnapshot = await this.buildFromDOM(page);
31
- return this.transformSnapshot(domSnapshot);
32
- }
33
- catch (domError) {
34
- // Ultimate fallback
35
- return {
36
- role: 'WebArea',
37
- name: await page.title().catch(() => ''),
38
- children: [],
39
- };
33
+ catch (e) {
34
+ logger_1.logger.debug(`A11y Playwright strategy failed: ${e.message}`);
35
+ }
36
+ // ── Strategy 2: CDP Accessibility.getFullAXTree ───────────────────────────
37
+ try {
38
+ const client = await page.context().newCDPSession(page);
39
+ const result = await client.send('Accessibility.getFullAXTree');
40
+ await client.detach().catch(() => { });
41
+ if (result?.nodes?.length) {
42
+ logger_1.logger.debug('A11y: using CDP strategy');
43
+ return this.transformCDPSnapshot(result.nodes[0], result.nodes);
40
44
  }
41
45
  }
46
+ catch (e) {
47
+ logger_1.logger.debug(`A11y CDP strategy failed: ${e.message}`);
48
+ }
49
+ // ── Strategy 3: DOM-based fallback ────────────────────────────────────────
50
+ try {
51
+ const domResult = await this.buildFromDOM(page, includeHidden);
52
+ logger_1.logger.debug('A11y: using DOM fallback strategy');
53
+ return this.transformSnapshot(domResult);
54
+ }
55
+ catch (e) {
56
+ logger_1.logger.warn(`A11y DOM strategy failed: ${e.message}`);
57
+ }
58
+ // ── Ultimate fallback ─────────────────────────────────────────────────────
59
+ logger_1.logger.warn('A11y: all strategies failed, returning minimal tree');
60
+ return {
61
+ role: 'WebArea',
62
+ name: await page.title().catch(() => ''),
63
+ children: [],
64
+ };
42
65
  }
43
- /**
44
- * Transform CDP accessibility tree format to our format
45
- */
66
+ // ── Playwright snapshot transformation ──────────────────────────────────────
67
+ transformPlaywrightSnapshot(node) {
68
+ const result = {
69
+ role: node.role || 'generic',
70
+ name: node.name || '',
71
+ children: Array.isArray(node.children)
72
+ ? node.children.map((c) => this.transformPlaywrightSnapshot(c))
73
+ : [],
74
+ };
75
+ if (node.value !== undefined && node.value !== null)
76
+ result.value = String(node.value);
77
+ if (typeof node.required === 'boolean')
78
+ result.required = node.required;
79
+ if (typeof node.disabled === 'boolean')
80
+ result.disabled = node.disabled;
81
+ if (typeof node.focused === 'boolean')
82
+ result.focused = node.focused;
83
+ if (typeof node.multiline === 'boolean')
84
+ result.multiline = node.multiline;
85
+ if (node.checked !== undefined)
86
+ result.checked = node.checked;
87
+ if (node.pressed !== undefined)
88
+ result.pressed = node.pressed;
89
+ if (typeof node.selected === 'boolean')
90
+ result.selected = node.selected;
91
+ if (typeof node.expanded === 'boolean')
92
+ result.expanded = node.expanded;
93
+ if (typeof node.level === 'number')
94
+ result.level = node.level;
95
+ return result;
96
+ }
97
+ // ── CDP snapshot transformation ──────────────────────────────────────────────
46
98
  transformCDPSnapshot(rootNode, allNodes) {
99
+ const nodeMap = new Map();
100
+ for (const n of allNodes)
101
+ nodeMap.set(n.nodeId, n);
47
102
  const buildNode = (node) => {
48
103
  const children = [];
49
- if (node.childIds && node.childIds.length > 0) {
104
+ if (Array.isArray(node.childIds)) {
50
105
  for (const childId of node.childIds) {
51
- const childNode = allNodes.find((n) => n.nodeId === childId);
52
- if (childNode) {
106
+ const childNode = nodeMap.get(childId);
107
+ if (childNode)
53
108
  children.push(buildNode(childNode));
54
- }
55
109
  }
56
110
  }
111
+ const getProp = (name) => node.properties?.find((p) => p.name === name)?.value?.value;
57
112
  const result = {
58
- role: node.role?.value || 'unknown',
113
+ role: node.role?.value || 'generic',
59
114
  name: node.name?.value || '',
60
- children: children.length > 0 ? children : [],
61
- value: node.value?.value,
62
- required: node.properties?.find((p) => p.name === 'required')?.value?.value === true,
63
- disabled: node.properties?.find((p) => p.name === 'disabled')?.value?.value === true,
64
- focused: node.properties?.find((p) => p.name === 'focused')?.value?.value === true,
115
+ children,
65
116
  };
66
- // Add optional properties only if they exist
67
- const checked = node.properties?.find((p) => p.name === 'checked')?.value?.value;
117
+ if (node.value?.value !== undefined)
118
+ result.value = String(node.value.value);
119
+ const required = getProp('required');
120
+ if (required !== undefined)
121
+ result.required = required === true;
122
+ const disabled = getProp('disabled');
123
+ if (disabled !== undefined)
124
+ result.disabled = disabled === true;
125
+ const focused = getProp('focused');
126
+ if (focused !== undefined)
127
+ result.focused = focused === true;
128
+ const checked = getProp('checked');
68
129
  if (checked !== undefined)
69
130
  result.checked = checked;
70
- const pressed = node.properties?.find((p) => p.name === 'pressed')?.value?.value;
131
+ const pressed = getProp('pressed');
71
132
  if (pressed !== undefined)
72
133
  result.pressed = pressed;
73
- const selected = node.properties?.find((p) => p.name === 'selected')?.value?.value;
134
+ const selected = getProp('selected');
74
135
  if (selected !== undefined)
75
- result.selected = selected;
76
- const expanded = node.properties?.find((p) => p.name === 'expanded')?.value?.value;
136
+ result.selected = selected === true;
137
+ const expanded = getProp('expanded');
77
138
  if (expanded !== undefined)
78
- result.expanded = expanded;
139
+ result.expanded = expanded === true;
79
140
  return result;
80
141
  };
81
142
  return buildNode(rootNode);
82
143
  }
144
+ // ── DOM-based fallback ───────────────────────────────────────────────────────
83
145
  /**
84
- * Build accessibility tree from DOM when Playwright accessibility API is unavailable
146
+ * Build an accessibility tree by traversing the live DOM inside the page.
147
+ * This approach works universally but misses computed ARIA states and
148
+ * relationships that only the accessibility engine can resolve.
85
149
  */
86
- async buildFromDOM(page) {
87
- return await page.evaluate(() => {
88
- const buildA11yNode = (element) => {
89
- const role = element.getAttribute('role') ||
90
- (element.tagName === 'BUTTON' ? 'button' :
91
- element.tagName === 'INPUT' ? 'textbox' :
92
- element.tagName === 'A' ? 'link' :
93
- element.tagName === 'FORM' ? 'form' :
94
- element.tagName === 'HEADER' ? 'banner' :
95
- element.tagName === 'NAV' ? 'navigation' :
96
- element.tagName === 'MAIN' ? 'main' :
97
- element.tagName === 'FOOTER' ? 'contentinfo' : 'generic');
98
- const name = element.getAttribute('aria-label') ||
99
- element.getAttribute('aria-labelledby') ||
100
- element.innerText?.trim() ||
101
- element.getAttribute('alt') ||
102
- element.getAttribute('title') ||
103
- '';
150
+ async buildFromDOM(page, includeHidden) {
151
+ return await page.evaluate((opts) => {
152
+ const ROLE_MAP = {
153
+ BUTTON: 'button',
154
+ INPUT: 'textbox', // refined below
155
+ TEXTAREA: 'textbox',
156
+ SELECT: 'combobox',
157
+ A: 'link',
158
+ IMG: 'img',
159
+ FORM: 'form',
160
+ NAV: 'navigation',
161
+ HEADER: 'banner',
162
+ FOOTER: 'contentinfo',
163
+ MAIN: 'main',
164
+ ASIDE: 'complementary',
165
+ SECTION: 'region',
166
+ ARTICLE: 'article',
167
+ DIALOG: 'dialog',
168
+ TABLE: 'table',
169
+ UL: 'list',
170
+ OL: 'list',
171
+ LI: 'listitem',
172
+ H1: 'heading', H2: 'heading', H3: 'heading',
173
+ H4: 'heading', H5: 'heading', H6: 'heading',
174
+ DETAILS: 'group',
175
+ SUMMARY: 'button',
176
+ };
177
+ const INPUT_ROLE_MAP = {
178
+ checkbox: 'checkbox',
179
+ radio: 'radio',
180
+ submit: 'button',
181
+ button: 'button',
182
+ reset: 'button',
183
+ range: 'slider',
184
+ search: 'searchbox',
185
+ number: 'spinbutton',
186
+ image: 'button',
187
+ };
188
+ function getRole(el) {
189
+ const explicit = el.getAttribute('role');
190
+ if (explicit)
191
+ return explicit;
192
+ const tag = el.tagName.toUpperCase();
193
+ if (tag === 'INPUT') {
194
+ const type = el.type?.toLowerCase() || 'text';
195
+ return INPUT_ROLE_MAP[type] || 'textbox';
196
+ }
197
+ if (tag === 'A') {
198
+ return el.href ? 'link' : 'generic';
199
+ }
200
+ if (/^H[1-6]$/.test(tag))
201
+ return 'heading';
202
+ return ROLE_MAP[tag] || 'generic';
203
+ }
204
+ function getAccessibleName(el) {
205
+ // 1. aria-labelledby
206
+ const labelledBy = el.getAttribute('aria-labelledby');
207
+ if (labelledBy) {
208
+ const ids = labelledBy.split(/\s+/);
209
+ const texts = ids.map(id => document.getElementById(id)?.textContent?.trim()).filter(Boolean);
210
+ if (texts.length)
211
+ return texts.join(' ');
212
+ }
213
+ // 2. aria-label
214
+ const ariaLabel = el.getAttribute('aria-label');
215
+ if (ariaLabel)
216
+ return ariaLabel.trim();
217
+ // 3. For img/input, alt or title
218
+ const alt = el.getAttribute('alt');
219
+ if (alt)
220
+ return alt.trim();
221
+ const placeholder = el.getAttribute('placeholder');
222
+ if (placeholder)
223
+ return placeholder.trim();
224
+ // 4. For labeled inputs
225
+ const id = el.id;
226
+ if (id) {
227
+ const label = document.querySelector(`label[for="${id}"]`);
228
+ if (label)
229
+ return label.textContent?.trim() || '';
230
+ }
231
+ // 5. Text content (limited)
232
+ const text = el.innerText?.trim();
233
+ if (text)
234
+ return text.substring(0, 200);
235
+ // 6. title attribute
236
+ const title = el.getAttribute('title');
237
+ if (title)
238
+ return title.trim();
239
+ return '';
240
+ }
241
+ function isHidden(el) {
242
+ if (!opts.includeHidden) {
243
+ const style = window.getComputedStyle(el);
244
+ if (style.display === 'none' || style.visibility === 'hidden')
245
+ return true;
246
+ if (el.getAttribute('aria-hidden') === 'true')
247
+ return true;
248
+ }
249
+ return false;
250
+ }
251
+ function buildNode(el) {
252
+ if (isHidden(el))
253
+ return null;
254
+ const role = getRole(el);
255
+ const name = getAccessibleName(el);
104
256
  const children = [];
105
- for (let i = 0; i < element.children.length; i++) {
106
- const child = buildA11yNode(element.children[i]);
257
+ for (let i = 0; i < el.children.length; i++) {
258
+ const child = buildNode(el.children[i]);
107
259
  if (child)
108
260
  children.push(child);
109
261
  }
110
- const result = {
111
- role,
112
- name: name.substring(0, 100), // Limit name length
113
- children: children.length > 0 ? children : [],
114
- disabled: element.hasAttribute('disabled'),
115
- required: element.hasAttribute('required'),
116
- };
117
- const checked = element.checked;
118
- if (checked)
119
- result.checked = checked;
120
- const expanded = element.getAttribute('aria-expanded') === 'true';
121
- if (expanded)
122
- result.expanded = expanded;
123
- return result;
124
- };
125
- return buildA11yNode(document.documentElement);
126
- });
262
+ const node = { role, name, children };
263
+ // Computed states
264
+ const inputEl = el;
265
+ if (el.hasAttribute('disabled') || inputEl.disabled)
266
+ node.disabled = true;
267
+ if (el.hasAttribute('required') || inputEl.required)
268
+ node.required = true;
269
+ if (inputEl.checked !== undefined && (inputEl.type === 'checkbox' || inputEl.type === 'radio')) {
270
+ node.checked = inputEl.checked;
271
+ }
272
+ const expanded = el.getAttribute('aria-expanded');
273
+ if (expanded !== null)
274
+ node.expanded = expanded === 'true';
275
+ const selected = el.getAttribute('aria-selected');
276
+ if (selected !== null)
277
+ node.selected = selected === 'true';
278
+ const level = el.getAttribute('aria-level');
279
+ if (level !== null)
280
+ node.level = parseInt(level, 10);
281
+ else if (/^H([1-6])$/.test(el.tagName)) {
282
+ node.level = parseInt(el.tagName[1], 10);
283
+ }
284
+ const value = el.value;
285
+ if (value !== undefined && value !== '' && inputEl.type !== 'password') {
286
+ node.value = value;
287
+ }
288
+ return node;
289
+ }
290
+ return buildNode(document.documentElement);
291
+ }, { includeHidden });
127
292
  }
128
- transformSnapshot(snapshot) {
293
+ // ── Generic snapshot transformer ────────────────────────────────────────────
294
+ transformSnapshot(node) {
295
+ if (!node)
296
+ return { role: 'generic', name: '', children: [] };
129
297
  return {
130
- role: snapshot.role || 'unknown',
131
- name: snapshot.name || '',
132
- children: snapshot.children ? snapshot.children.map((child) => this.transformSnapshot(child)) : [],
133
- value: snapshot.value,
134
- required: snapshot.required,
135
- disabled: snapshot.disabled,
136
- focused: snapshot.focused,
137
- multiline: snapshot.multiline,
138
- protected: snapshot.protected,
139
- checked: snapshot.checked,
140
- pressed: snapshot.pressed,
141
- selected: snapshot.selected,
142
- expanded: snapshot.expanded,
143
- level: snapshot.level,
298
+ role: node.role || 'generic',
299
+ name: node.name || '',
300
+ children: Array.isArray(node.children)
301
+ ? node.children.map((c) => this.transformSnapshot(c))
302
+ : [],
303
+ value: node.value,
304
+ required: node.required,
305
+ disabled: node.disabled,
306
+ focused: node.focused,
307
+ multiline: node.multiline,
308
+ protected: node.protected,
309
+ checked: node.checked,
310
+ pressed: node.pressed,
311
+ selected: node.selected,
312
+ expanded: node.expanded,
313
+ level: node.level,
144
314
  };
145
315
  }
146
316
  }
@@ -1 +1 @@
1
- {"version":3,"file":"a11y-extractor.js","sourceRoot":"","sources":["../../src/analyzers/a11y-extractor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"a11y-extractor.js","sourceRoot":"","sources":["../../src/analyzers/a11y-extractor.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,33 @@
1
1
  import { Page } from '@playwright/test';
2
2
  import { NetworkEvent } from '../types/capture';
3
3
  import { SecurityRedactor } from '../security/redactor';
4
+ export interface NetworkLoggerOptions {
5
+ captureHeaders: boolean;
6
+ captureBody: boolean;
7
+ /** Maximum response body size to capture, in bytes (default 2048) */
8
+ maxBodySize: number;
9
+ /** Resource types to skip entirely (e.g. images, fonts) */
10
+ skipResourceTypes: string[];
11
+ }
4
12
  export declare class NetworkLogger {
5
13
  private events;
6
14
  private redactor;
7
- private requestMap;
8
- constructor(redactor: SecurityRedactor);
15
+ private options;
16
+ /**
17
+ * WeakMap keyed on the Playwright Request object guarantees O(1) access and
18
+ * zero URL collision — even when the same URL is requested concurrently.
19
+ * The Request object is the *same reference* in both the 'request' listener
20
+ * and the `response.request()` call, so this is safe.
21
+ */
22
+ private requestTimes;
23
+ constructor(redactor: SecurityRedactor, options?: Partial<NetworkLoggerOptions>);
9
24
  attachListeners(page: Page): Promise<void>;
10
25
  getEvents(): NetworkEvent[];
11
26
  clearEvents(): void;
12
27
  getRequestCount(): number;
13
28
  getResponseCount(): number;
29
+ getFailedCount(): number;
30
+ /** Returns only XHR/Fetch events — useful for API surface analysis */
31
+ getApiEvents(): NetworkEvent[];
14
32
  }
15
33
  //# sourceMappingURL=network-logger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"network-logger.d.ts","sourceRoot":"","sources":["../../src/analyzers/network-logger.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,UAAU,CAAkC;gBAExC,QAAQ,EAAE,gBAAgB;IAIhC,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAsDhD,SAAS,IAAI,YAAY,EAAE;IAI3B,WAAW,IAAI,IAAI;IAInB,eAAe,IAAI,MAAM;IAIzB,gBAAgB,IAAI,MAAM;CAG3B"}
1
+ {"version":3,"file":"network-logger.d.ts","sourceRoot":"","sources":["../../src/analyzers/network-logger.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAqB,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAGxD,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,OAAO,CAAC;IACrB,qEAAqE;IACrE,WAAW,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AASD,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,OAAO,CAAuB;IAEtC;;;;;OAKG;IACH,OAAO,CAAC,YAAY,CAAkC;gBAE1C,QAAQ,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC;IAKzE,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAoHhD,SAAS,IAAI,YAAY,EAAE;IAI3B,WAAW,IAAI,IAAI;IAInB,eAAe,IAAI,MAAM;IAIzB,gBAAgB,IAAI,MAAM;IAI1B,cAAc,IAAI,MAAM;IAIxB,sEAAsE;IACtE,YAAY,IAAI,YAAY,EAAE;CAK/B"}