@peac/cli 0.10.0 → 0.10.9

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 (52) hide show
  1. package/README.md +78 -5
  2. package/dist/commands/conformance.d.ts +16 -0
  3. package/dist/commands/conformance.d.ts.map +1 -0
  4. package/dist/commands/conformance.js +301 -0
  5. package/dist/commands/conformance.js.map +1 -0
  6. package/dist/commands/samples.d.ts +17 -0
  7. package/dist/commands/samples.d.ts.map +1 -0
  8. package/dist/commands/samples.js +360 -0
  9. package/dist/commands/samples.js.map +1 -0
  10. package/dist/commands/workflow.d.ts +11 -0
  11. package/dist/commands/workflow.d.ts.map +1 -0
  12. package/dist/commands/workflow.js +214 -0
  13. package/dist/commands/workflow.js.map +1 -0
  14. package/dist/index.js +34 -11
  15. package/dist/index.js.map +1 -1
  16. package/dist/lib/conformance/digest.d.ts +64 -0
  17. package/dist/lib/conformance/digest.d.ts.map +1 -0
  18. package/dist/lib/conformance/digest.js +202 -0
  19. package/dist/lib/conformance/digest.js.map +1 -0
  20. package/dist/lib/conformance/index.d.ts +11 -0
  21. package/dist/lib/conformance/index.d.ts.map +1 -0
  22. package/dist/lib/conformance/index.js +30 -0
  23. package/dist/lib/conformance/index.js.map +1 -0
  24. package/dist/lib/conformance/manifest.d.ts +15 -0
  25. package/dist/lib/conformance/manifest.d.ts.map +1 -0
  26. package/dist/lib/conformance/manifest.js +66 -0
  27. package/dist/lib/conformance/manifest.js.map +1 -0
  28. package/dist/lib/conformance/profiles.d.ts +33 -0
  29. package/dist/lib/conformance/profiles.d.ts.map +1 -0
  30. package/dist/lib/conformance/profiles.js +138 -0
  31. package/dist/lib/conformance/profiles.js.map +1 -0
  32. package/dist/lib/conformance/types.d.ts +186 -0
  33. package/dist/lib/conformance/types.d.ts.map +1 -0
  34. package/dist/lib/conformance/types.js +8 -0
  35. package/dist/lib/conformance/types.js.map +1 -0
  36. package/dist/lib/conformance/validators.d.ts +27 -0
  37. package/dist/lib/conformance/validators.d.ts.map +1 -0
  38. package/dist/lib/conformance/validators.js +415 -0
  39. package/dist/lib/conformance/validators.js.map +1 -0
  40. package/dist/lib/conformance-runner.d.ts +29 -0
  41. package/dist/lib/conformance-runner.d.ts.map +1 -0
  42. package/dist/lib/conformance-runner.js +433 -0
  43. package/dist/lib/conformance-runner.js.map +1 -0
  44. package/dist/lib/samples-loader.d.ts +44 -0
  45. package/dist/lib/samples-loader.d.ts.map +1 -0
  46. package/dist/lib/samples-loader.js +311 -0
  47. package/dist/lib/samples-loader.js.map +1 -0
  48. package/dist/lib/version.d.ts +22 -0
  49. package/dist/lib/version.d.ts.map +1 -0
  50. package/dist/lib/version.js +61 -0
  51. package/dist/lib/version.js.map +1 -0
  52. package/package.json +17 -8
@@ -0,0 +1,433 @@
1
+ "use strict";
2
+ /**
3
+ * PEAC Conformance Runner Library
4
+ *
5
+ * Category-aware validation using the same validators as tests/conformance/*.spec.ts:
6
+ * - Receipt validation via @peac/schema (ReceiptClaimsSchema)
7
+ * - Discovery validation via @peac/disc (parse, validate)
8
+ * - Bundle verification via @peac/audit (verifyBundleIntegrity)
9
+ * - Attestation validation via @peac/schema validators
10
+ * - Interaction/Workflow validation via ordered validators
11
+ *
12
+ * This is the CLI's thin wrapper around the conformance suite.
13
+ */
14
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ var desc = Object.getOwnPropertyDescriptor(m, k);
17
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
18
+ desc = { enumerable: true, get: function() { return m[k]; } };
19
+ }
20
+ Object.defineProperty(o, k2, desc);
21
+ }) : (function(o, m, k, k2) {
22
+ if (k2 === undefined) k2 = k;
23
+ o[k2] = m[k];
24
+ }));
25
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
26
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
27
+ }) : function(o, v) {
28
+ o["default"] = v;
29
+ });
30
+ var __importStar = (this && this.__importStar) || (function () {
31
+ var ownKeys = function(o) {
32
+ ownKeys = Object.getOwnPropertyNames || function (o) {
33
+ var ar = [];
34
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
35
+ return ar;
36
+ };
37
+ return ownKeys(o);
38
+ };
39
+ return function (mod) {
40
+ if (mod && mod.__esModule) return mod;
41
+ var result = {};
42
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
43
+ __setModuleDefault(result, mod);
44
+ return result;
45
+ };
46
+ })();
47
+ Object.defineProperty(exports, "__esModule", { value: true });
48
+ exports.zodPathToJsonPointer = void 0;
49
+ exports.runConformance = runConformance;
50
+ exports.formatReportText = formatReportText;
51
+ exports.formatReportMarkdown = formatReportMarkdown;
52
+ const fs = __importStar(require("fs"));
53
+ const path = __importStar(require("path"));
54
+ const child_process_1 = require("child_process");
55
+ var digest_js_1 = require("./conformance/digest.js");
56
+ Object.defineProperty(exports, "zodPathToJsonPointer", { enumerable: true, get: function () { return digest_js_1.zodPathToJsonPointer; } });
57
+ const manifest_js_1 = require("./conformance/manifest.js");
58
+ const digest_js_2 = require("./conformance/digest.js");
59
+ const profiles_js_1 = require("./conformance/profiles.js");
60
+ const validators_js_1 = require("./conformance/validators.js");
61
+ function getGitSha() {
62
+ try {
63
+ return (0, child_process_1.execSync)('git rev-parse --short HEAD', { encoding: 'utf-8' }).trim();
64
+ }
65
+ catch {
66
+ return undefined;
67
+ }
68
+ }
69
+ /**
70
+ * Run conformance tests and generate report
71
+ * Pure function - no console output, uses callbacks for progress
72
+ */
73
+ function runConformance(options, callbacks) {
74
+ const startTime = Date.now();
75
+ const { fixturesDir, level, category, implementationName, implementationVersion } = options;
76
+ // Load manifest for reason checking
77
+ const manifest = (0, manifest_js_1.loadManifest)(fixturesDir);
78
+ // Collect categories to test (SORTED for determinism)
79
+ const entries = fs.readdirSync(fixturesDir, { withFileTypes: true });
80
+ let categories = entries
81
+ .filter((e) => e.isDirectory() && !e.name.startsWith('.'))
82
+ .map((e) => e.name)
83
+ .sort(); // Deterministic ordering
84
+ if (category) {
85
+ if (!categories.includes(category)) {
86
+ throw new Error(`Category not found: ${category}`);
87
+ }
88
+ categories = [category];
89
+ }
90
+ // Compute comprehensive vectors digest (includes manifest.json, recursive)
91
+ const vectorsDigest = (0, digest_js_2.computeVectorsDigest)(fixturesDir, categories);
92
+ // Collect profiles
93
+ const profiles = new Set();
94
+ // Run tests
95
+ const results = [];
96
+ let passed = 0;
97
+ let failed = 0;
98
+ let skipped = 0;
99
+ for (const cat of categories) {
100
+ const categoryPath = path.join(fixturesDir, cat);
101
+ const profile = (0, profiles_js_1.getCategoryProfile)(cat);
102
+ profiles.add(profile);
103
+ const validator = (0, validators_js_1.getValidator)(cat);
104
+ // SORTED for deterministic ordering across OS/filesystems
105
+ const files = fs
106
+ .readdirSync(categoryPath)
107
+ .filter((f) => f.endsWith('.json'))
108
+ .sort();
109
+ for (const file of files) {
110
+ const filePath = path.join(categoryPath, file);
111
+ const content = fs.readFileSync(filePath, 'utf8');
112
+ let fixture;
113
+ const baseTestId = `${cat}.${file.replace('.json', '')}`;
114
+ callbacks?.onTestStart?.(baseTestId);
115
+ try {
116
+ fixture = JSON.parse(content);
117
+ }
118
+ catch (err) {
119
+ // Invalid JSON is a test failure
120
+ failed++;
121
+ const result = {
122
+ id: `${baseTestId}.parse`,
123
+ category: profile,
124
+ status: 'fail',
125
+ observed: {
126
+ valid: false,
127
+ error_code: 'E_INVALID_JSON',
128
+ error_message: err.message,
129
+ },
130
+ diagnostics: {
131
+ error_code: 'E_INVALID_JSON',
132
+ error_message: err.message,
133
+ },
134
+ };
135
+ results.push(result);
136
+ callbacks?.onTestComplete?.(result);
137
+ continue;
138
+ }
139
+ // Determine if this is a fixture pack or single fixture
140
+ const fixtureObj = fixture;
141
+ const isFixturePack = Array.isArray(fixtureObj.fixtures);
142
+ if (isFixturePack) {
143
+ // Process fixture pack
144
+ const pack = fixture;
145
+ if (!(0, profiles_js_1.shouldRunAtLevel)(pack.version, level)) {
146
+ skipped++;
147
+ const result = {
148
+ id: baseTestId,
149
+ category: profile,
150
+ status: 'skip',
151
+ diagnostics: {
152
+ skip_reason: `Fixture version ${pack.version} exceeds level ${level}`,
153
+ },
154
+ };
155
+ results.push(result);
156
+ callbacks?.onTestComplete?.(result);
157
+ continue;
158
+ }
159
+ for (let i = 0; i < pack.fixtures.length; i++) {
160
+ const f = pack.fixtures[i];
161
+ const fixtureName = f.name ?? `fixture_${i}`;
162
+ const testId = `${baseTestId}.${fixtureName.replace(/\s+/g, '_')}`;
163
+ // Use JCS for canonical input digest (returns {alg, value})
164
+ const inputDigest = (0, digest_js_2.computeCanonicalDigest)(f.input);
165
+ callbacks?.onTestStart?.(testId);
166
+ // Guard: fixture inputs must not have both "claims" and "payload".
167
+ // Ambiguity is a test-harness concern -- precedence would silently
168
+ // pick one and hide fixture authoring bugs.
169
+ if (typeof f.input === 'object' && f.input !== null) {
170
+ const inputObj = f.input;
171
+ if (inputObj.claims !== undefined && inputObj.payload !== undefined) {
172
+ failed++;
173
+ const result = {
174
+ id: testId,
175
+ category: profile,
176
+ status: 'fail',
177
+ diagnostics: {
178
+ error_message: 'Fixture has both "claims" and "payload" -- ambiguous; use one',
179
+ },
180
+ };
181
+ results.push(result);
182
+ callbacks?.onTestComplete?.(result);
183
+ continue;
184
+ }
185
+ }
186
+ const observed = validator(f.input);
187
+ // Check if result matches expectation
188
+ const expectedValid = f.expected.valid;
189
+ const actualValid = observed.valid;
190
+ const expectedError = f.expected.error_code ?? f.expected.error;
191
+ const actualError = observed.error_code;
192
+ let status;
193
+ if (expectedValid && actualValid) {
194
+ status = 'pass';
195
+ passed++;
196
+ }
197
+ else if (!expectedValid && !actualValid) {
198
+ // Both invalid - check if error codes match (if specified)
199
+ if (expectedError && actualError && expectedError !== actualError) {
200
+ status = 'fail';
201
+ failed++;
202
+ }
203
+ else {
204
+ status = 'pass';
205
+ passed++;
206
+ }
207
+ }
208
+ else {
209
+ status = 'fail';
210
+ failed++;
211
+ }
212
+ const result = {
213
+ id: testId,
214
+ category: profile,
215
+ status,
216
+ expected: {
217
+ valid: expectedValid,
218
+ error_code: expectedError,
219
+ },
220
+ observed: {
221
+ valid: actualValid,
222
+ error_code: actualError,
223
+ error_message: observed.error_message,
224
+ },
225
+ diagnostics: {
226
+ input_digest: inputDigest,
227
+ warnings: observed.warnings,
228
+ },
229
+ };
230
+ results.push(result);
231
+ callbacks?.onTestComplete?.(result);
232
+ }
233
+ }
234
+ else {
235
+ // Process single fixture
236
+ const singleFixture = fixture;
237
+ const testId = baseTestId;
238
+ // Get manifest entry for additional expectations
239
+ const manifestEntry = (0, manifest_js_1.getManifestEntry)(manifest, cat, file);
240
+ // Use JCS for payload if present, otherwise hash raw file content for single fixtures
241
+ const inputToValidate = singleFixture.payload ?? fixture;
242
+ const inputDigest = singleFixture.payload
243
+ ? (0, digest_js_2.computeCanonicalDigest)(inputToValidate)
244
+ : { alg: 'sha-256', value: (0, digest_js_2.sha256)(content) }; // Raw file hash for single fixtures without payload
245
+ // Determine expected validity from (in order): fixture, manifest, category default
246
+ const expectedValid = singleFixture.expected_valid ??
247
+ manifestEntry?.expected_valid ??
248
+ (cat === 'valid' || cat === 'edge');
249
+ // Get expected error from fixture or manifest (never derived from keyword)
250
+ const expectedError = singleFixture.expected_error ?? manifestEntry?.expected_error_code;
251
+ // Get expected path and keyword from manifest (first-class assertions)
252
+ const expectedPath = manifestEntry?.expected_path;
253
+ const expectedKeyword = manifestEntry?.expected_keyword;
254
+ const observed = validator(inputToValidate);
255
+ let status;
256
+ if (expectedValid && observed.valid) {
257
+ status = 'pass';
258
+ passed++;
259
+ }
260
+ else if (!expectedValid && !observed.valid) {
261
+ // Both invalid - check if error codes match (if specified)
262
+ let mismatch = false;
263
+ if (expectedError && observed.error_code && expectedError !== observed.error_code) {
264
+ mismatch = true;
265
+ }
266
+ // Check expected_path if specified (first-class assertion)
267
+ if (expectedPath && observed.error_path && expectedPath !== observed.error_path) {
268
+ mismatch = true;
269
+ }
270
+ // Check expected_keyword if specified (first-class assertion)
271
+ if (expectedKeyword &&
272
+ observed.error_keyword &&
273
+ expectedKeyword !== observed.error_keyword) {
274
+ mismatch = true;
275
+ }
276
+ if (mismatch) {
277
+ status = 'fail';
278
+ failed++;
279
+ }
280
+ else {
281
+ status = 'pass';
282
+ passed++;
283
+ }
284
+ }
285
+ else {
286
+ status = 'fail';
287
+ failed++;
288
+ }
289
+ const result = {
290
+ id: testId,
291
+ category: profile,
292
+ status,
293
+ expected: {
294
+ valid: expectedValid,
295
+ error_code: expectedError,
296
+ error_path: expectedPath,
297
+ error_keyword: expectedKeyword,
298
+ },
299
+ observed: {
300
+ valid: observed.valid,
301
+ error_code: observed.error_code,
302
+ error_path: observed.error_path,
303
+ error_keyword: observed.error_keyword,
304
+ error_message: observed.error_message,
305
+ },
306
+ diagnostics: {
307
+ input_digest: inputDigest,
308
+ warnings: observed.warnings,
309
+ },
310
+ };
311
+ results.push(result);
312
+ callbacks?.onTestComplete?.(result);
313
+ }
314
+ }
315
+ }
316
+ // Build capabilities from tested categories
317
+ const capabilities = [];
318
+ for (const cat of categories) {
319
+ const capability = (0, profiles_js_1.getCategoryCapability)(cat);
320
+ // Deduplicate by profile name
321
+ if (!capabilities.some((c) => c.profile === capability.profile)) {
322
+ capabilities.push(capability);
323
+ }
324
+ }
325
+ capabilities.sort((a, b) => a.profile.localeCompare(b.profile));
326
+ const endTime = Date.now();
327
+ // Build report
328
+ const report = {
329
+ report_version: 'peac-conformance-report/0.1',
330
+ suite: {
331
+ name: 'peac-core-conformance',
332
+ version: '0.1.0',
333
+ vectors_digest: {
334
+ alg: 'sha-256',
335
+ value: vectorsDigest,
336
+ },
337
+ profiles: Array.from(profiles).sort(),
338
+ capabilities,
339
+ },
340
+ implementation: {
341
+ name: implementationName ?? '@peac/cli',
342
+ version: implementationVersion ?? '0.0.0',
343
+ },
344
+ summary: {
345
+ passed,
346
+ failed,
347
+ skipped,
348
+ total: passed + failed + skipped,
349
+ status: failed === 0 ? 'pass' : 'fail',
350
+ },
351
+ results,
352
+ meta: {
353
+ generated_at: new Date().toISOString(),
354
+ duration_ms: endTime - startTime,
355
+ runner: {
356
+ name: '@peac/cli',
357
+ version: implementationVersion ?? '0.0.0',
358
+ git_sha: getGitSha(),
359
+ },
360
+ },
361
+ };
362
+ return report;
363
+ }
364
+ /**
365
+ * Format report as text
366
+ */
367
+ function formatReportText(report) {
368
+ const lines = [];
369
+ lines.push('PEAC Conformance Test Results');
370
+ lines.push('=============================');
371
+ lines.push('');
372
+ lines.push(`Status: ${report.summary.status.toUpperCase()}`);
373
+ lines.push(`Profiles: ${report.suite.profiles.join(', ')}`);
374
+ lines.push('');
375
+ lines.push('Summary:');
376
+ lines.push(` Passed: ${report.summary.passed}`);
377
+ lines.push(` Failed: ${report.summary.failed}`);
378
+ lines.push(` Skipped: ${report.summary.skipped}`);
379
+ lines.push(` Total: ${report.summary.total}`);
380
+ const failures = report.results.filter((r) => r.status === 'fail');
381
+ if (failures.length > 0) {
382
+ lines.push('');
383
+ lines.push('Failures:');
384
+ for (const f of failures) {
385
+ lines.push(` - ${f.id}`);
386
+ if (f.expected) {
387
+ lines.push(` Expected: valid=${f.expected.valid}${f.expected.error_code ? `, error=${f.expected.error_code}` : ''}`);
388
+ }
389
+ if (f.observed) {
390
+ lines.push(` Observed: valid=${f.observed.valid}${f.observed.error_code ? `, error=${f.observed.error_code}` : ''}`);
391
+ }
392
+ }
393
+ }
394
+ return lines.join('\n');
395
+ }
396
+ /**
397
+ * Format report as markdown
398
+ */
399
+ function formatReportMarkdown(report) {
400
+ const lines = [];
401
+ lines.push('# PEAC Conformance Report');
402
+ lines.push('');
403
+ lines.push(`**Status:** ${report.summary.status.toUpperCase()}`);
404
+ lines.push(`**Profiles:** ${report.suite.profiles.join(', ')}`);
405
+ lines.push('');
406
+ lines.push('## Summary');
407
+ lines.push('');
408
+ lines.push('| Metric | Count |');
409
+ lines.push('|--------|-------|');
410
+ lines.push(`| Passed | ${report.summary.passed} |`);
411
+ lines.push(`| Failed | ${report.summary.failed} |`);
412
+ lines.push(`| Skipped | ${report.summary.skipped} |`);
413
+ lines.push(`| Total | ${report.summary.total} |`);
414
+ const failures = report.results.filter((r) => r.status === 'fail');
415
+ if (failures.length > 0) {
416
+ lines.push('');
417
+ lines.push('## Failures');
418
+ lines.push('');
419
+ for (const f of failures) {
420
+ lines.push(`### ${f.id}`);
421
+ lines.push('');
422
+ if (f.expected) {
423
+ lines.push(`- **Expected:** valid=${f.expected.valid}${f.expected.error_code ? `, error=${f.expected.error_code}` : ''}`);
424
+ }
425
+ if (f.observed) {
426
+ lines.push(`- **Observed:** valid=${f.observed.valid}${f.observed.error_code ? `, error=${f.observed.error_code}` : ''}`);
427
+ }
428
+ lines.push('');
429
+ }
430
+ }
431
+ return lines.join('\n');
432
+ }
433
+ //# sourceMappingURL=conformance-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conformance-runner.js","sourceRoot":"","sources":["../../src/lib/conformance-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * PEAC Samples Loader
3
+ *
4
+ * Loads sample definitions from specs/conformance/samples/ when available,
5
+ * falling back to embedded defaults when running outside the repo.
6
+ *
7
+ * This ensures a single source of truth (specs folder is canonical).
8
+ */
9
+ /**
10
+ * Sample category
11
+ */
12
+ export type SampleCategory = 'valid' | 'invalid' | 'edge';
13
+ /**
14
+ * Sample definition
15
+ */
16
+ export interface SampleDefinition {
17
+ id: string;
18
+ name: string;
19
+ description: string;
20
+ category: SampleCategory;
21
+ claims: Record<string, unknown>;
22
+ header?: Record<string, unknown>;
23
+ expectedError?: string;
24
+ }
25
+ /**
26
+ * Find samples directory
27
+ */
28
+ export declare function findSamplesDir(customPath?: string): string | null;
29
+ /**
30
+ * Get sample definitions
31
+ *
32
+ * Loads from specs/conformance/samples/ when available (canonical source),
33
+ * falls back to embedded samples when running outside the repo.
34
+ */
35
+ export declare function getSamples(customSamplesPath?: string): SampleDefinition[];
36
+ /**
37
+ * Get a specific sample by ID
38
+ */
39
+ export declare function getSampleById(id: string, customSamplesPath?: string): SampleDefinition | null;
40
+ /**
41
+ * List available sample IDs by category
42
+ */
43
+ export declare function listSampleIds(category?: SampleCategory, customSamplesPath?: string): string[];
44
+ //# sourceMappingURL=samples-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"samples-loader.d.ts","sourceRoot":"","sources":["../../src/lib/samples-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,cAAc,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AA0ID;;GAEG;AACH,wBAAgB,cAAc,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA4BjE;AA4ED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAYzE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAG7F;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,CAAC,EAAE,cAAc,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAI7F"}