@pinepaper.studio/mcp-server 1.5.1 → 1.5.3

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 (58) hide show
  1. package/dist/agent/types.d.ts +6 -6
  2. package/dist/browser/puppeteer-controller.d.ts +5 -1
  3. package/dist/browser/puppeteer-controller.d.ts.map +1 -1
  4. package/dist/browser/puppeteer-controller.js +11 -3
  5. package/dist/browser/puppeteer-controller.js.map +1 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +80 -106
  8. package/dist/index.js.map +1 -1
  9. package/dist/ontology/design-graph.d.ts +85 -0
  10. package/dist/ontology/design-graph.d.ts.map +1 -0
  11. package/dist/ontology/design-graph.js +944 -0
  12. package/dist/ontology/design-graph.js.map +1 -0
  13. package/dist/ontology/index.d.ts +11 -0
  14. package/dist/ontology/index.d.ts.map +1 -0
  15. package/dist/ontology/index.js +14 -0
  16. package/dist/ontology/index.js.map +1 -0
  17. package/dist/ontology/semantic-vocabulary.d.ts +12 -0
  18. package/dist/ontology/semantic-vocabulary.d.ts.map +1 -0
  19. package/dist/ontology/semantic-vocabulary.js +26 -0
  20. package/dist/ontology/semantic-vocabulary.js.map +1 -0
  21. package/dist/ontology/types.d.ts +255 -0
  22. package/dist/ontology/types.d.ts.map +1 -0
  23. package/dist/ontology/types.js +10 -0
  24. package/dist/ontology/types.js.map +1 -0
  25. package/dist/ontology/validator.d.ts +36 -0
  26. package/dist/ontology/validator.d.ts.map +1 -0
  27. package/dist/ontology/validator.js +374 -0
  28. package/dist/ontology/validator.js.map +1 -0
  29. package/dist/ontology/vocabulary.d.ts +34 -0
  30. package/dist/ontology/vocabulary.d.ts.map +1 -0
  31. package/dist/ontology/vocabulary.js +395 -0
  32. package/dist/ontology/vocabulary.js.map +1 -0
  33. package/dist/tools/compact-descriptions.d.ts +2 -2
  34. package/dist/tools/compact-descriptions.d.ts.map +1 -1
  35. package/dist/tools/compact-descriptions.js +45 -233
  36. package/dist/tools/compact-descriptions.js.map +1 -1
  37. package/dist/tools/definitions.d.ts +1 -1
  38. package/dist/tools/definitions.d.ts.map +1 -1
  39. package/dist/tools/definitions.js +638 -31
  40. package/dist/tools/definitions.js.map +1 -1
  41. package/dist/tools/handlers.d.ts.map +1 -1
  42. package/dist/tools/handlers.js +290 -145
  43. package/dist/tools/handlers.js.map +1 -1
  44. package/dist/tools/minimal-descriptions.d.ts.map +1 -1
  45. package/dist/tools/minimal-descriptions.js +22 -2
  46. package/dist/tools/minimal-descriptions.js.map +1 -1
  47. package/dist/tools/toolkits.d.ts.map +1 -1
  48. package/dist/tools/toolkits.js +31 -1
  49. package/dist/tools/toolkits.js.map +1 -1
  50. package/dist/types/code-generator.d.ts +14 -2
  51. package/dist/types/code-generator.d.ts.map +1 -1
  52. package/dist/types/code-generator.js +635 -6
  53. package/dist/types/code-generator.js.map +1 -1
  54. package/dist/types/schemas.d.ts +387 -82
  55. package/dist/types/schemas.d.ts.map +1 -1
  56. package/dist/types/schemas.js +136 -2
  57. package/dist/types/schemas.js.map +1 -1
  58. package/package.json +2 -2
@@ -0,0 +1,374 @@
1
+ /**
2
+ * KnowledgeGraphValidator — Schema validation and quality scoring for PinePaper templates
3
+ *
4
+ * Two responsibilities:
5
+ * 1. **Schema validation** — Ensures templates conform to PP_VOCABULARY + PP_SEMANTIC_VOCABULARY.
6
+ * 2. **Quality scoring** — Rates a template on its own merit using defined quality dimensions.
7
+ *
8
+ * Ported from FxTool/js/KnowledgeGraphValidator.js to typed TypeScript.
9
+ *
10
+ * @module ontology/validator
11
+ * @version 0.4.0
12
+ */
13
+ import { PP_VOCABULARY, ITEM_TYPE_MAP, RELATION_TYPE_MAP } from './vocabulary.js';
14
+ import { PP_SEMANTIC_VOCABULARY } from './semantic-vocabulary.js';
15
+ // =============================================================================
16
+ // QUALITY METRIC WEIGHTS
17
+ // =============================================================================
18
+ export const QUALITY_WEIGHTS = {
19
+ completeness: 0.20,
20
+ animationDesign: 0.25,
21
+ semanticRichness: 0.20,
22
+ compositionUse: 0.15,
23
+ structuralDepth: 0.20,
24
+ };
25
+ // =============================================================================
26
+ // VALIDATOR + SCORER
27
+ // =============================================================================
28
+ export class KnowledgeGraphValidator {
29
+ vocab;
30
+ semVocab;
31
+ constructor(vocabulary, semanticVocabulary) {
32
+ this.vocab = vocabulary || PP_VOCABULARY;
33
+ this.semVocab = semanticVocabulary || PP_SEMANTIC_VOCABULARY;
34
+ }
35
+ // ═══════════════════════════════════════════════════════════════════════
36
+ // SCHEMA VALIDATION
37
+ // ═══════════════════════════════════════════════════════════════════════
38
+ /** Validate a template definition against the DesignGraph schema. */
39
+ validateTemplate(templateDef) {
40
+ const errors = [];
41
+ const warnings = [];
42
+ if (!templateDef) {
43
+ return { valid: false, errors: ['Template definition is null or undefined'], warnings };
44
+ }
45
+ if (!templateDef.id || typeof templateDef.id !== 'string') {
46
+ errors.push('Missing or invalid "id" (must be a non-empty string)');
47
+ }
48
+ if (!templateDef.name || typeof templateDef.name !== 'string') {
49
+ errors.push('Missing or invalid "name" (must be a non-empty string)');
50
+ }
51
+ if (!templateDef.category || typeof templateDef.category !== 'string') {
52
+ errors.push('Missing or invalid "category" (must be a non-empty string)');
53
+ }
54
+ if (!templateDef.data || typeof templateDef.data !== 'object') {
55
+ errors.push('Missing or invalid "data" (must be an object)');
56
+ return { valid: false, errors, warnings };
57
+ }
58
+ // Dimensions
59
+ if (templateDef.dimensions) {
60
+ if (typeof templateDef.dimensions !== 'object') {
61
+ errors.push('"dimensions" must be an object with width and height');
62
+ }
63
+ else {
64
+ if (typeof templateDef.dimensions.width !== 'number' || templateDef.dimensions.width <= 0) {
65
+ warnings.push('"dimensions.width" should be a positive number');
66
+ }
67
+ if (typeof templateDef.dimensions.height !== 'number' || templateDef.dimensions.height <= 0) {
68
+ warnings.push('"dimensions.height" should be a positive number');
69
+ }
70
+ }
71
+ }
72
+ // Duration
73
+ if (templateDef.duration != null) {
74
+ if (typeof templateDef.duration !== 'number' || templateDef.duration < 0) {
75
+ warnings.push('"duration" should be a non-negative number');
76
+ }
77
+ }
78
+ // Items
79
+ const items = templateDef.data.items;
80
+ if (items != null && !Array.isArray(items)) {
81
+ errors.push('"data.items" must be an array');
82
+ }
83
+ else if (Array.isArray(items)) {
84
+ for (let i = 0; i < items.length; i++) {
85
+ const item = items[i];
86
+ if (!item || typeof item !== 'object') {
87
+ errors.push(`data.items[${i}]: must be an object`);
88
+ continue;
89
+ }
90
+ if (!item.type) {
91
+ errors.push(`data.items[${i}]: missing "type" field`);
92
+ }
93
+ else {
94
+ const ppType = ITEM_TYPE_MAP[item.type];
95
+ if (!ppType) {
96
+ if (!this.vocab.types[item.type] && !item.type.startsWith('pp:')) {
97
+ warnings.push(`data.items[${i}]: unknown type "${item.type}" (not in ITEM_TYPE_MAP or PP_VOCABULARY.types)`);
98
+ }
99
+ }
100
+ }
101
+ if (item.animationType === 'keyframe') {
102
+ if (!Array.isArray(item.keyframes) || item.keyframes.length === 0) {
103
+ warnings.push(`data.items[${i}]: animationType is "keyframe" but keyframes array is missing or empty`);
104
+ }
105
+ else {
106
+ this._validateKeyframes(item.keyframes, `data.items[${i}]`, errors, warnings);
107
+ }
108
+ }
109
+ }
110
+ }
111
+ // Relations
112
+ const relations = templateDef.data.relations;
113
+ if (relations != null && !Array.isArray(relations)) {
114
+ errors.push('"data.relations" must be an array');
115
+ }
116
+ else if (Array.isArray(relations)) {
117
+ for (let i = 0; i < relations.length; i++) {
118
+ const rel = relations[i];
119
+ if (!rel || typeof rel !== 'object') {
120
+ errors.push(`data.relations[${i}]: must be an object`);
121
+ continue;
122
+ }
123
+ if (!rel.type) {
124
+ errors.push(`data.relations[${i}]: missing "type" field`);
125
+ }
126
+ else {
127
+ const ppEdge = RELATION_TYPE_MAP[rel.type];
128
+ if (!ppEdge) {
129
+ if (!this.vocab.edges[rel.type] && !rel.type.startsWith('pp:')) {
130
+ warnings.push(`data.relations[${i}]: unknown relation type "${rel.type}"`);
131
+ }
132
+ }
133
+ }
134
+ }
135
+ }
136
+ // Semantics
137
+ if (templateDef.semantics) {
138
+ this._validateSemantics(templateDef.semantics, errors, warnings);
139
+ }
140
+ // Background generator
141
+ if (templateDef.data.backgroundGenerator) {
142
+ const genName = templateDef.data.backgroundGenerator;
143
+ if (!this.vocab.generators[genName]) {
144
+ warnings.push(`Unknown background generator "${genName}"`);
145
+ }
146
+ }
147
+ return { valid: errors.length === 0, errors, warnings };
148
+ }
149
+ // ═══════════════════════════════════════════════════════════════════════
150
+ // QUALITY SCORING
151
+ // ═══════════════════════════════════════════════════════════════════════
152
+ /** Score a template's quality across multiple dimensions. */
153
+ scoreQuality(templateDef, graph) {
154
+ const dims = {
155
+ completeness: this._scoreCompleteness(templateDef),
156
+ animationDesign: this._scoreAnimationDesign(templateDef, graph),
157
+ semanticRichness: this._scoreSemanticRichness(templateDef),
158
+ compositionUse: this._scoreCompositionUse(templateDef),
159
+ structuralDepth: this._scoreStructuralDepth(graph),
160
+ };
161
+ let score = 0;
162
+ for (const [dim, weight] of Object.entries(QUALITY_WEIGHTS)) {
163
+ score += (dims[dim] || 0) * weight;
164
+ }
165
+ score = Math.round(score * 1000) / 1000;
166
+ const tier = score >= 0.8 ? 'excellent' :
167
+ score >= 0.6 ? 'good' :
168
+ score >= 0.4 ? 'fair' : 'basic';
169
+ return { score, tier, dimensions: dims };
170
+ }
171
+ /** Compute similarity context for a template. */
172
+ computeSimilarityContext(newFingerprint, existingFingerprints, designGraph, options = {}) {
173
+ const topN = options.topN || 5;
174
+ if (!newFingerprint || !Array.isArray(existingFingerprints) || existingFingerprints.length === 0) {
175
+ return { similarTo: [], structuralFamily: null };
176
+ }
177
+ if (!designGraph || typeof designGraph._computeSimilarity !== 'function') {
178
+ throw new Error('A DesignGraph instance is required for similarity computation');
179
+ }
180
+ const scored = [];
181
+ for (const existing of existingFingerprints) {
182
+ if (existing.templateId === newFingerprint.templateId)
183
+ continue;
184
+ const score = designGraph._computeSimilarity(newFingerprint, existing);
185
+ scored.push({ templateId: existing.templateId || 'unknown', score: Math.round(score * 1000) / 1000 });
186
+ }
187
+ scored.sort((a, b) => b.score - a.score);
188
+ const similarTo = scored.slice(0, topN);
189
+ const structuralFamily = similarTo.length > 0 && similarTo[0].score > 0.7
190
+ ? similarTo[0].templateId
191
+ : null;
192
+ return { similarTo, structuralFamily };
193
+ }
194
+ // ─────────────────────────────────────────────────────────────────────
195
+ // Quality Dimension Scorers (0-1 each)
196
+ // ─────────────────────────────────────────────────────────────────────
197
+ _scoreCompleteness(templateDef) {
198
+ let score = 0;
199
+ const checks = 6;
200
+ if (Array.isArray(templateDef.data?.items) && templateDef.data.items.length > 0)
201
+ score++;
202
+ if (templateDef.dimensions && templateDef.dimensions.width > 0 && templateDef.dimensions.height > 0)
203
+ score++;
204
+ if (templateDef.duration && templateDef.duration > 0)
205
+ score++;
206
+ if (templateDef.description && templateDef.description.length > 10)
207
+ score++;
208
+ if (Array.isArray(templateDef.tags) && templateDef.tags.length > 0)
209
+ score++;
210
+ if (templateDef.semantics && Object.keys(templateDef.semantics).length > 0)
211
+ score++;
212
+ return score / checks;
213
+ }
214
+ _scoreAnimationDesign(templateDef, graph) {
215
+ const items = templateDef.data?.items || [];
216
+ if (items.length === 0)
217
+ return 0;
218
+ const animatedCount = items.filter(i => i.animationType === 'keyframe' || i.animationType).length;
219
+ const animatedRatio = Math.min(animatedCount / items.length, 1);
220
+ const allEasings = new Set();
221
+ for (const node of (graph?.nodes || [])) {
222
+ if (node.properties?.easings) {
223
+ for (const e of node.properties.easings)
224
+ allEasings.add(e);
225
+ }
226
+ }
227
+ const easingScore = Math.min(allEasings.size / 3, 1);
228
+ const intervals = [];
229
+ for (const item of items) {
230
+ if (Array.isArray(item.keyframes) && item.keyframes.length >= 2) {
231
+ const sorted = [...item.keyframes].sort((a, b) => (a.time || 0) - (b.time || 0));
232
+ for (let i = 1; i < sorted.length; i++) {
233
+ const dt = (sorted[i].time || 0) - (sorted[i - 1].time || 0);
234
+ if (dt > 0)
235
+ intervals.push(dt);
236
+ }
237
+ }
238
+ }
239
+ let rhythmScore = 0;
240
+ if (intervals.length >= 2) {
241
+ const mean = intervals.reduce((s, v) => s + v, 0) / intervals.length;
242
+ const variance = intervals.reduce((s, v) => s + (v - mean) ** 2, 0) / intervals.length;
243
+ const cv = mean > 0 ? Math.sqrt(variance) / mean : 0;
244
+ rhythmScore = Math.max(0, 1 - cv);
245
+ }
246
+ else if (intervals.length === 1) {
247
+ rhythmScore = 0.5;
248
+ }
249
+ return animatedRatio * 0.35 + easingScore * 0.35 + rhythmScore * 0.30;
250
+ }
251
+ _scoreSemanticRichness(templateDef) {
252
+ const sem = templateDef.semantics;
253
+ if (!sem || typeof sem !== 'object')
254
+ return 0;
255
+ const dimensions = ['mood', 'visualStyle', 'colorScheme', 'audience',
256
+ 'intent', 'animationComplexity', 'compositionStyle', 'contentType'];
257
+ let filled = 0;
258
+ for (const dim of dimensions) {
259
+ const val = sem[dim];
260
+ if (val != null) {
261
+ if (Array.isArray(val) ? val.length > 0 : (typeof val === 'string' && val.length > 0)) {
262
+ filled++;
263
+ }
264
+ }
265
+ }
266
+ return filled / dimensions.length;
267
+ }
268
+ _scoreCompositionUse(templateDef) {
269
+ const items = templateDef.data?.items || [];
270
+ const dims = templateDef.dimensions || { width: 1080, height: 1080 };
271
+ if (items.length === 0)
272
+ return 0;
273
+ if (items.length === 1)
274
+ return 0.4;
275
+ const positions = [];
276
+ for (const item of items) {
277
+ let x, y;
278
+ if (Array.isArray(item.position)) {
279
+ [x, y] = item.position;
280
+ }
281
+ else if (item.x != null && item.y != null) {
282
+ x = item.x;
283
+ y = item.y;
284
+ }
285
+ if (x != null && y != null)
286
+ positions.push([x, y]);
287
+ }
288
+ if (positions.length < 2)
289
+ return 0.3;
290
+ const xs = positions.map(p => p[0]);
291
+ const ys = positions.map(p => p[1]);
292
+ const xMean = xs.reduce((s, v) => s + v, 0) / xs.length;
293
+ const yMean = ys.reduce((s, v) => s + v, 0) / ys.length;
294
+ const xStd = Math.sqrt(xs.reduce((s, v) => s + (v - xMean) ** 2, 0) / xs.length);
295
+ const yStd = Math.sqrt(ys.reduce((s, v) => s + (v - yMean) ** 2, 0) / ys.length);
296
+ const xSpread = Math.min(xStd / (dims.width * 0.25), 1);
297
+ const ySpread = Math.min(yStd / (dims.height * 0.25), 1);
298
+ return (xSpread + ySpread) / 2;
299
+ }
300
+ _scoreStructuralDepth(graph) {
301
+ if (!graph)
302
+ return 0;
303
+ const edgeTypes = new Set((graph.edges || []).map(e => e.type));
304
+ const patterns = graph.patterns || [];
305
+ const mathFns = graph.mathFunctions || [];
306
+ const edgeScore = Math.min(edgeTypes.size / 3, 1);
307
+ const patternScore = Math.min(patterns.length / 3, 1);
308
+ const mathScore = Math.min(mathFns.length / 3, 1);
309
+ return edgeScore * 0.35 + patternScore * 0.35 + mathScore * 0.30;
310
+ }
311
+ // ─────────────────────────────────────────────────────────────────────
312
+ // Private Helpers
313
+ // ─────────────────────────────────────────────────────────────────────
314
+ _validateSemantics(sem, errors, warnings) {
315
+ if (typeof sem !== 'object') {
316
+ errors.push('"semantics" must be an object');
317
+ return;
318
+ }
319
+ const arrayFields = {
320
+ mood: this.semVocab.moods,
321
+ visualStyle: this.semVocab.visualStyles,
322
+ audience: this.semVocab.audiences,
323
+ };
324
+ for (const [field, allowed] of Object.entries(arrayFields)) {
325
+ if (sem[field] != null) {
326
+ const values = Array.isArray(sem[field]) ? sem[field] : [sem[field]];
327
+ for (const val of values) {
328
+ if (!allowed.includes(val)) {
329
+ const vocabField = field === 'mood' ? 'moods' : field === 'visualStyle' ? 'visualStyles' : 'audiences';
330
+ warnings.push(`semantics.${field}: unknown value "${val}" (not in PP_SEMANTIC_VOCABULARY.${vocabField})`);
331
+ }
332
+ }
333
+ }
334
+ }
335
+ const stringFields = {
336
+ colorScheme: this.semVocab.colorSchemes,
337
+ intent: this.semVocab.intents,
338
+ animationComplexity: this.semVocab.animationComplexities,
339
+ compositionStyle: this.semVocab.compositionStyles,
340
+ contentType: this.semVocab.contentTypes,
341
+ };
342
+ for (const [field, allowed] of Object.entries(stringFields)) {
343
+ if (sem[field] != null) {
344
+ if (typeof sem[field] !== 'string') {
345
+ warnings.push(`semantics.${field}: should be a string`);
346
+ }
347
+ else if (!allowed.includes(sem[field])) {
348
+ warnings.push(`semantics.${field}: unknown value "${sem[field]}"`);
349
+ }
350
+ }
351
+ }
352
+ if (sem.platforms != null) {
353
+ if (!Array.isArray(sem.platforms)) {
354
+ warnings.push('semantics.platforms: should be an array of strings');
355
+ }
356
+ }
357
+ }
358
+ _validateKeyframes(keyframes, prefix, errors, warnings) {
359
+ for (let k = 0; k < keyframes.length; k++) {
360
+ const kf = keyframes[k];
361
+ if (!kf || typeof kf !== 'object') {
362
+ warnings.push(`${prefix}.keyframes[${k}]: must be an object`);
363
+ continue;
364
+ }
365
+ if (kf.time == null || typeof kf.time !== 'number') {
366
+ warnings.push(`${prefix}.keyframes[${k}]: missing or invalid "time" (must be a number)`);
367
+ }
368
+ if (!kf.properties || typeof kf.properties !== 'object') {
369
+ warnings.push(`${prefix}.keyframes[${k}]: missing "properties" object`);
370
+ }
371
+ }
372
+ }
373
+ }
374
+ //# sourceMappingURL=validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/ontology/validator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * PP: VOCABULARY — Types, Edges, Math Functions, Patterns, Generators
3
+ *
4
+ * Ported from FxTool/js/ontology/Vocabulary.js to typed TypeScript.
5
+ *
6
+ * ## Directionality Convention
7
+ * All binary edges read **source → target**: "source <verb> target".
8
+ * Example: `app.addRelation(moonId, earthId, 'orbits')` → "moon orbits earth".
9
+ *
10
+ * ## Behavior Types
11
+ * - **constraint**: Continuously enforced each frame (orbits, follows, attached_to…)
12
+ * - **trigger**: Fire-and-forget or transient (indicates, grows_from, circumscribes)
13
+ * - **procedural**: Expression/noise-driven, no target required (wiggle, time_expression, driven_by)
14
+ *
15
+ * ## MCP Tool References
16
+ * Types and edges include `mcpTool` / `mcpToolRef` fields linking each vocabulary
17
+ * entry to the MCP tool that creates or manipulates it.
18
+ *
19
+ * @module ontology/vocabulary
20
+ * @version 0.4.0
21
+ */
22
+ import type { PinePaperVocabulary } from './types.js';
23
+ export declare const PP_VOCABULARY: PinePaperVocabulary;
24
+ /** Maps PinePaper item type strings to pp: vocabulary type keys. */
25
+ export declare const ITEM_TYPE_MAP: Record<string, string>;
26
+ /** Maps ShapeLibrary shapeType strings to specific pp: diagram shape types. */
27
+ export declare const DIAGRAM_SHAPE_MAP: Record<string, string>;
28
+ /** Maps connector lineStyle strings to specific pp: connector types. */
29
+ export declare const CONNECTOR_STYLE_MAP: Record<string, string>;
30
+ /** Maps PinePaper relation type strings to pp: vocabulary edge keys. */
31
+ export declare const RELATION_TYPE_MAP: Record<string, string>;
32
+ /** Known easing names that map to math function keys. */
33
+ export declare const EASING_TO_MATH: Record<string, string | null>;
34
+ //# sourceMappingURL=vocabulary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vocabulary.d.ts","sourceRoot":"","sources":["../../src/ontology/vocabulary.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAMtD,eAAO,MAAM,aAAa,EAAE,mBAiS3B,CAAC;AAOF,oEAAoE;AACpE,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAqBhD,CAAC;AAEF,+EAA+E;AAC/E,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAapD,CAAC;AAEF,wEAAwE;AACxE,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAItD,CAAC;AAEF,wEAAwE;AACxE,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAyBpD,CAAC;AAEF,yDAAyD;AACzD,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAUxD,CAAC"}