motionary 6.7.0 → 6.8.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.
@@ -0,0 +1,340 @@
1
+ import { registerEffects } from '../chunks/registry-D23neB4M.js';
2
+ import { c as canvasBackground } from '../chunks/generative-2LhxG5BJ.js';
3
+ import '../chunks/base-DchG4q_S.js';
4
+ import '../chunks/shared-CkKHWrtJ.js';
5
+
6
+ /** A minimal Verlet world: points, distance sticks, gravity, damping. */
7
+ class VerletWorld {
8
+ constructor(gravity = 900, damping = 0.99, iterations = 4) {
9
+ this.gravity = gravity;
10
+ this.damping = damping;
11
+ this.iterations = iterations;
12
+ this.points = [];
13
+ this.sticks = [];
14
+ }
15
+ add(x, y, pinned = false) {
16
+ this.points.push({ x, y, px: x, py: y, pinned });
17
+ return this.points.length - 1;
18
+ }
19
+ link(a, b, len) {
20
+ const p = this.points[a];
21
+ const q = this.points[b];
22
+ this.sticks.push([a, b, len ?? Math.hypot(p.x - q.x, p.y - q.y)]);
23
+ }
24
+ step(dt, bounds) {
25
+ const g = this.gravity * dt * dt;
26
+ for (const p of this.points) {
27
+ if (p.pinned)
28
+ continue;
29
+ const vx = (p.x - p.px) * this.damping;
30
+ const vy = (p.y - p.py) * this.damping;
31
+ p.px = p.x;
32
+ p.py = p.y;
33
+ p.x += vx;
34
+ p.y += vy + g;
35
+ }
36
+ for (let k = 0; k < this.iterations; k++) {
37
+ for (const [a, b, len] of this.sticks) {
38
+ const p = this.points[a];
39
+ const q = this.points[b];
40
+ const dx = q.x - p.x;
41
+ const dy = q.y - p.y;
42
+ const d = Math.hypot(dx, dy) || 1e-6;
43
+ const diff = (d - len) / d / (p.pinned || q.pinned ? 1 : 2);
44
+ if (!p.pinned)
45
+ (p.x += dx * diff), (p.y += dy * diff);
46
+ if (!q.pinned)
47
+ (q.x -= dx * diff), (q.y -= dy * diff);
48
+ }
49
+ if (bounds)
50
+ for (const p of this.points)
51
+ (p.x = Math.min(bounds.w, Math.max(0, p.x))), (p.y = Math.min(bounds.h, Math.max(0, p.y)));
52
+ }
53
+ }
54
+ /** Push points within `r` px of (x, y) by (dx, dy). */
55
+ push(x, y, dx, dy, r = 40) {
56
+ for (const p of this.points)
57
+ if (!p.pinned && Math.hypot(p.x - x, p.y - y) < r)
58
+ (p.x += dx), (p.y += dy);
59
+ }
60
+ }
61
+ const bg = (name, description, defaults, spec) => ({
62
+ name,
63
+ kind: 'background',
64
+ description,
65
+ reduced: 'run',
66
+ defaults: { speed: 1, quality: 1, ...defaults },
67
+ run: (el, o, ctx) => {
68
+ const stop = canvasBackground(el, ctx, spec(el), o);
69
+ ctx.onCleanup(stop);
70
+ return stop;
71
+ },
72
+ });
73
+ /** Pointer position relative to `el` plus the movement since the last read. */
74
+ function pointer(el) {
75
+ const s = { x: -999, y: -999, dx: 0, dy: 0, down: false, clicks: 0 };
76
+ const move = (e) => {
77
+ const r = el.getBoundingClientRect();
78
+ const x = e.clientX - r.left;
79
+ const y = e.clientY - r.top;
80
+ if (s.x > -999)
81
+ (s.dx += x - s.x), (s.dy += y - s.y);
82
+ s.x = x;
83
+ s.y = y;
84
+ };
85
+ const click = () => s.clicks++;
86
+ const leave = () => (s.x = s.y = -999);
87
+ el.addEventListener('pointermove', move);
88
+ el.addEventListener('pointerdown', click);
89
+ el.addEventListener('pointerleave', leave);
90
+ return { s, off: () => (el.removeEventListener('pointermove', move), el.removeEventListener('pointerdown', click), el.removeEventListener('pointerleave', leave)) };
91
+ }
92
+ const tick = (state, t) => {
93
+ const dt = state.last ? Math.min(1 / 30, t - state.last) : 1 / 60;
94
+ state.last = t;
95
+ return dt;
96
+ };
97
+ const PHYSICS2_FX = [
98
+ {
99
+ name: 'soft-body',
100
+ kind: 'hover',
101
+ description: 'The element wobbles like jelly: pointer motion pushes a damped spring that squashes and skews it (`stiffness`, `damping`, `amount`).',
102
+ defaults: { stiffness: 220, damping: 9, amount: 1 },
103
+ reduced: 'skip',
104
+ run: (el, o, ctx) => {
105
+ let vx = 0;
106
+ let x = 0;
107
+ let vy = 0;
108
+ let y = 0;
109
+ let raf = 0;
110
+ let lx = NaN;
111
+ let ly = NaN;
112
+ let last = 0;
113
+ const prev = el.style.transform;
114
+ const loop = (now) => {
115
+ const dt = last ? Math.min(0.033, (now - last) / 1000) : 1 / 60;
116
+ last = now;
117
+ vx += (-o.stiffness * x - o.damping * vx) * dt;
118
+ vy += (-o.stiffness * y - o.damping * vy) * dt;
119
+ x += vx * dt;
120
+ y += vy * dt;
121
+ const a = o.amount;
122
+ el.style.transform = `skew(${(x * 0.6 * a).toFixed(2)}deg,${(y * 0.25 * a).toFixed(2)}deg) scale(${(1 + y * 0.004 * a).toFixed(4)},${(1 - y * 0.004 * a).toFixed(4)})`;
123
+ if (Math.abs(x) + Math.abs(vx) + Math.abs(y) + Math.abs(vy) > 0.02)
124
+ raf = requestAnimationFrame(loop);
125
+ else
126
+ ((raf = 0), (last = 0), (el.style.transform = prev));
127
+ };
128
+ const move = (e) => {
129
+ if (!Number.isNaN(lx))
130
+ (vx += Math.max(-60, Math.min(60, (e.clientX - lx) * 4))), (vy += Math.max(-60, Math.min(60, (e.clientY - ly) * 4)));
131
+ lx = e.clientX;
132
+ ly = e.clientY;
133
+ if (!raf && typeof requestAnimationFrame === 'function')
134
+ raf = requestAnimationFrame(loop);
135
+ };
136
+ const leave = () => (lx = ly = NaN);
137
+ el.addEventListener('pointermove', move);
138
+ el.addEventListener('pointerleave', leave);
139
+ const stop = () => {
140
+ el.removeEventListener('pointermove', move);
141
+ el.removeEventListener('pointerleave', leave);
142
+ if (raf)
143
+ cancelAnimationFrame(raf);
144
+ el.style.transform = prev;
145
+ };
146
+ ctx.onCleanup(stop);
147
+ return stop;
148
+ },
149
+ },
150
+ {
151
+ name: 'magnet',
152
+ kind: 'hover',
153
+ description: "The element's children are pulled toward the pointer on springs and settle back when it leaves (`strength`, `radius`).",
154
+ defaults: { strength: 0.35, radius: 160 },
155
+ reduced: 'skip',
156
+ run: (el, o, ctx) => {
157
+ const kids = Array.from(el.children);
158
+ const prev = kids.map((k) => k.style.transform);
159
+ kids.forEach((k) => (k.style.transition = 'transform .45s cubic-bezier(.3,1.5,.5,1)'));
160
+ const move = (e) => {
161
+ for (const k of kids) {
162
+ const r = k.getBoundingClientRect();
163
+ const dx = e.clientX - (r.left + r.width / 2);
164
+ const dy = e.clientY - (r.top + r.height / 2);
165
+ const d = Math.hypot(dx, dy);
166
+ const f = d < o.radius ? o.strength * (1 - d / o.radius) : 0;
167
+ k.style.transform = `translate(${(dx * f).toFixed(1)}px,${(dy * f).toFixed(1)}px)`;
168
+ }
169
+ };
170
+ const leave = () => kids.forEach((k, i) => (k.style.transform = prev[i]));
171
+ el.addEventListener('pointermove', move);
172
+ el.addEventListener('pointerleave', leave);
173
+ const stop = () => {
174
+ el.removeEventListener('pointermove', move);
175
+ el.removeEventListener('pointerleave', leave);
176
+ kids.forEach((k, i) => ((k.style.transform = prev[i]), (k.style.transition = '')));
177
+ };
178
+ ctx.onCleanup(stop);
179
+ return stop;
180
+ },
181
+ },
182
+ bg('cloth', 'A cloth hangs from the top edge and ripples when the pointer moves through it (Verlet, Canvas 2D).', { cols: 16, rows: 10, color: '#7c5cff' }, (el) => {
183
+ const p = pointer(el);
184
+ return {
185
+ init: (w, h, o) => {
186
+ const world = new VerletWorld(600, 0.985, 3);
187
+ const sx = (w * 0.86) / (o.cols - 1);
188
+ const sy = (h * 0.75) / (o.rows - 1);
189
+ for (let r = 0; r < o.rows; r++)
190
+ for (let c = 0; c < o.cols; c++)
191
+ world.add(w * 0.07 + c * sx, 6 + r * sy, r === 0 && c % 3 === 0);
192
+ for (let r = 0; r < o.rows; r++)
193
+ for (let c = 0; c < o.cols; c++) {
194
+ const i = r * o.cols + c;
195
+ if (c)
196
+ world.link(i - 1, i);
197
+ if (r)
198
+ world.link(i - o.cols, i);
199
+ }
200
+ return { world, off: p.off };
201
+ },
202
+ draw: ({ ctx, w, h, t, state, o }) => {
203
+ const dt = tick(state, t);
204
+ const world = state.world;
205
+ if (t > 0) {
206
+ if (p.s.x > -999)
207
+ world.push(p.s.x, p.s.y, p.s.dx * 0.6, p.s.dy * 0.6, 50);
208
+ p.s.dx = p.s.dy = 0;
209
+ world.step(dt * o.speed, { w, h });
210
+ }
211
+ ctx.clearRect(0, 0, w, h);
212
+ for (let r = 0; r < o.rows - 1; r++)
213
+ for (let c = 0; c < o.cols - 1; c++) {
214
+ const i = r * o.cols + c;
215
+ const a = world.points[i];
216
+ const b = world.points[i + 1];
217
+ const d = world.points[i + o.cols + 1];
218
+ const e = world.points[i + o.cols];
219
+ const shade = 0.55 + 0.45 * Math.max(0, Math.min(1, (b.x - a.x) / ((w * 0.86) / (o.cols - 1))));
220
+ ctx.globalAlpha = shade;
221
+ ctx.fillStyle = (r + c) % 2 ? o.color : '#22d3ee';
222
+ ctx.beginPath();
223
+ ctx.moveTo(a.x, a.y);
224
+ ctx.lineTo(b.x, b.y);
225
+ ctx.lineTo(d.x, d.y);
226
+ ctx.lineTo(e.x, e.y);
227
+ ctx.fill();
228
+ }
229
+ ctx.globalAlpha = 1;
230
+ },
231
+ };
232
+ }),
233
+ bg('rope', 'A rope with a weight swings from the top; the pointer pushes it (Verlet, Canvas 2D).', { links: 14, color: '#f59e0b' }, (el) => {
234
+ const p = pointer(el);
235
+ return {
236
+ init: (w, h, o) => {
237
+ const world = new VerletWorld(900, 0.995, 6);
238
+ const len = (h * 0.7) / o.links;
239
+ for (let i = 0; i <= o.links; i++)
240
+ world.add(w / 2 + i * len * 0.6, 4 + i * len * 0.8, i === 0);
241
+ for (let i = 1; i <= o.links; i++)
242
+ world.link(i - 1, i, len);
243
+ return { world, off: p.off };
244
+ },
245
+ draw: ({ ctx, w, h, t, state, o }) => {
246
+ const dt = tick(state, t);
247
+ const world = state.world;
248
+ if (t > 0) {
249
+ if (p.s.x > -999)
250
+ world.push(p.s.x, p.s.y, p.s.dx, p.s.dy, 36);
251
+ p.s.dx = p.s.dy = 0;
252
+ world.step(dt * o.speed, { w, h });
253
+ }
254
+ ctx.clearRect(0, 0, w, h);
255
+ ctx.strokeStyle = o.color;
256
+ ctx.lineWidth = 3;
257
+ ctx.lineCap = 'round';
258
+ ctx.beginPath();
259
+ world.points.forEach((q, i) => (i ? ctx.lineTo(q.x, q.y) : ctx.moveTo(q.x, q.y)));
260
+ ctx.stroke();
261
+ const end = world.points[world.points.length - 1];
262
+ ctx.fillStyle = o.color;
263
+ ctx.beginPath();
264
+ ctx.arc(end.x, end.y, 11, 0, Math.PI * 2);
265
+ ctx.fill();
266
+ },
267
+ };
268
+ }),
269
+ bg('pinball', 'Balls fall through round bumpers that light up on a hit; click to drop another ball (Canvas 2D).', { balls: 5, bumpers: 7, colors: ['#f43f5e', '#f59e0b', '#22d3ee', '#a3e635'] }, (el) => {
270
+ const p = pointer(el);
271
+ return {
272
+ init: (w, h, o) => {
273
+ const ball = () => ({ x: w * (0.3 + Math.random() * 0.4), y: -10 - Math.random() * h * 0.5, vx: (Math.random() - 0.5) * 80, vy: 0 });
274
+ const bumpers = Array.from({ length: o.bumpers }, (_, i) => ({ x: w * (0.15 + ((i * 0.37) % 0.7)), y: h * (0.25 + ((i * 0.53) % 0.6)), r: Math.min(w, h) * 0.06, hit: 0 }));
275
+ return { balls: Array.from({ length: o.balls }, ball), bumpers, ball, clicks: 0, off: p.off };
276
+ },
277
+ draw: ({ ctx, w, h, t, state, o }) => {
278
+ const dt = tick(state, t) * o.speed;
279
+ if (p.s.clicks !== state.clicks) {
280
+ state.clicks = p.s.clicks;
281
+ const b = state.ball();
282
+ if (p.s.x > -999)
283
+ b.x = p.s.x;
284
+ b.y = 0;
285
+ state.balls.push(b);
286
+ if (state.balls.length > 24)
287
+ state.balls.shift();
288
+ }
289
+ ctx.clearRect(0, 0, w, h);
290
+ for (const bu of state.bumpers) {
291
+ bu.hit = Math.max(0, bu.hit - dt * 2.5);
292
+ ctx.fillStyle = `rgba(124,92,255,${0.35 + bu.hit * 0.65})`;
293
+ ctx.shadowColor = '#a78bfa';
294
+ ctx.shadowBlur = bu.hit * 20;
295
+ ctx.beginPath();
296
+ ctx.arc(bu.x, bu.y, bu.r * (1 + bu.hit * 0.15), 0, Math.PI * 2);
297
+ ctx.fill();
298
+ }
299
+ ctx.shadowBlur = 0;
300
+ state.balls.forEach((b, i) => {
301
+ if (t > 0) {
302
+ b.vy += 600 * dt;
303
+ b.x += b.vx * dt;
304
+ b.y += b.vy * dt;
305
+ for (const bu of state.bumpers) {
306
+ const dx = b.x - bu.x;
307
+ const dy = b.y - bu.y;
308
+ const d = Math.hypot(dx, dy);
309
+ if (d < bu.r + 6 && d > 0) {
310
+ const nx = dx / d;
311
+ const ny = dy / d;
312
+ const dot = b.vx * nx + b.vy * ny;
313
+ b.vx = (b.vx - 2 * dot * nx) * 0.92;
314
+ b.vy = (b.vy - 2 * dot * ny) * 0.92;
315
+ b.x = bu.x + nx * (bu.r + 6);
316
+ b.y = bu.y + ny * (bu.r + 6);
317
+ bu.hit = 1;
318
+ }
319
+ }
320
+ if (b.x < 6 || b.x > w - 6)
321
+ (b.vx *= -0.8), (b.x = Math.min(w - 6, Math.max(6, b.x)));
322
+ if (b.y > h + 12)
323
+ Object.assign(b, state.ball());
324
+ }
325
+ ctx.fillStyle = o.colors[i % o.colors.length];
326
+ ctx.beginPath();
327
+ ctx.arc(b.x, b.y, 6, 0, Math.PI * 2);
328
+ ctx.fill();
329
+ });
330
+ },
331
+ };
332
+ }),
333
+ ];
334
+ /** Register the 6.8 physics 2.0 pack (idempotent). */
335
+ function registerPhysicsEffects2() {
336
+ registerEffects(PHYSICS2_FX);
337
+ }
338
+
339
+ export { PHYSICS2_FX, VerletWorld, registerPhysicsEffects2 };
340
+ //# sourceMappingURL=fx-physics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fx-physics.js","sources":["../../src/components/fx2/physics2.ts"],"sourcesContent":["/**\n * 6.8 — Interactive physics 2.0 (`motionary/components/fx-physics`) on a tiny\n * Verlet integrator (`VerletWorld`), registered through `registerEffect()`:\n *\n * - `soft-body` (kind `hover`) — the element wobbles like jelly: pointer\n * motion pushes a damped spring that squashes and skews it.\n * - `magnet` (kind `hover`) — the element's children are pulled toward the\n * pointer on springs and settle back when it leaves.\n * - `cloth` (kind `background`) — a cloth hangs from the top edge and ripples\n * when the pointer moves through it.\n * - `rope` (kind `background`) — a rope with a weight swings from the top;\n * the pointer pushes it.\n * - `pinball` (kind `background`) — balls fall through round bumpers that\n * light up on a hit; click to drop another ball.\n *\n * Canvas effects render only while visible; reduced motion draws one static\n * frame and the hover effects do nothing.\n */\nimport type { EffectContext, EffectDefinition } from '../fx/registry';\nimport { registerEffects } from '../fx/registry';\nimport { canvasBackground, type GenerativeSpec } from '../effects/generative';\n\nexport interface VerletPoint {\n x: number;\n y: number;\n px: number;\n py: number;\n pinned: boolean;\n}\n\n/** A minimal Verlet world: points, distance sticks, gravity, damping. */\nexport class VerletWorld {\n points: VerletPoint[] = [];\n sticks: [number, number, number][] = [];\n constructor(public gravity = 900, public damping = 0.99, public iterations = 4) {}\n add(x: number, y: number, pinned = false): number {\n this.points.push({ x, y, px: x, py: y, pinned });\n return this.points.length - 1;\n }\n link(a: number, b: number, len?: number): void {\n const p = this.points[a];\n const q = this.points[b];\n this.sticks.push([a, b, len ?? Math.hypot(p.x - q.x, p.y - q.y)]);\n }\n step(dt: number, bounds?: { w: number; h: number }): void {\n const g = this.gravity * dt * dt;\n for (const p of this.points) {\n if (p.pinned) continue;\n const vx = (p.x - p.px) * this.damping;\n const vy = (p.y - p.py) * this.damping;\n p.px = p.x;\n p.py = p.y;\n p.x += vx;\n p.y += vy + g;\n }\n for (let k = 0; k < this.iterations; k++) {\n for (const [a, b, len] of this.sticks) {\n const p = this.points[a];\n const q = this.points[b];\n const dx = q.x - p.x;\n const dy = q.y - p.y;\n const d = Math.hypot(dx, dy) || 1e-6;\n const diff = (d - len) / d / (p.pinned || q.pinned ? 1 : 2);\n if (!p.pinned) (p.x += dx * diff), (p.y += dy * diff);\n if (!q.pinned) (q.x -= dx * diff), (q.y -= dy * diff);\n }\n if (bounds) for (const p of this.points) (p.x = Math.min(bounds.w, Math.max(0, p.x))), (p.y = Math.min(bounds.h, Math.max(0, p.y)));\n }\n }\n /** Push points within `r` px of (x, y) by (dx, dy). */\n push(x: number, y: number, dx: number, dy: number, r = 40): void {\n for (const p of this.points) if (!p.pinned && Math.hypot(p.x - x, p.y - y) < r) (p.x += dx), (p.y += dy);\n }\n}\n\nconst bg = (name: string, description: string, defaults: Record<string, unknown>, spec: (el: HTMLElement) => GenerativeSpec): EffectDefinition => ({\n name,\n kind: 'background',\n description,\n reduced: 'run',\n defaults: { speed: 1, quality: 1, ...defaults },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const stop = canvasBackground(el, ctx, spec(el), o);\n ctx.onCleanup(stop);\n return stop;\n },\n});\n\n/** Pointer position relative to `el` plus the movement since the last read. */\nfunction pointer(el: HTMLElement) {\n const s = { x: -999, y: -999, dx: 0, dy: 0, down: false, clicks: 0 };\n const move = (e: PointerEvent) => {\n const r = el.getBoundingClientRect();\n const x = e.clientX - r.left;\n const y = e.clientY - r.top;\n if (s.x > -999) (s.dx += x - s.x), (s.dy += y - s.y);\n s.x = x;\n s.y = y;\n };\n const click = () => s.clicks++;\n const leave = () => (s.x = s.y = -999);\n el.addEventListener('pointermove', move);\n el.addEventListener('pointerdown', click);\n el.addEventListener('pointerleave', leave);\n return { s, off: () => (el.removeEventListener('pointermove', move), el.removeEventListener('pointerdown', click), el.removeEventListener('pointerleave', leave)) };\n}\n\nconst tick = (state: any, t: number) => {\n const dt = state.last ? Math.min(1 / 30, t - state.last) : 1 / 60;\n state.last = t;\n return dt;\n};\n\nexport const PHYSICS2_FX: EffectDefinition[] = [\n {\n name: 'soft-body',\n kind: 'hover',\n description: 'The element wobbles like jelly: pointer motion pushes a damped spring that squashes and skews it (`stiffness`, `damping`, `amount`).',\n defaults: { stiffness: 220, damping: 9, amount: 1 },\n reduced: 'skip',\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n let vx = 0;\n let x = 0;\n let vy = 0;\n let y = 0;\n let raf = 0;\n let lx = NaN;\n let ly = NaN;\n let last = 0;\n const prev = el.style.transform;\n const loop = (now: number) => {\n const dt = last ? Math.min(0.033, (now - last) / 1000) : 1 / 60;\n last = now;\n vx += (-o.stiffness * x - o.damping * vx) * dt;\n vy += (-o.stiffness * y - o.damping * vy) * dt;\n x += vx * dt;\n y += vy * dt;\n const a = o.amount;\n el.style.transform = `skew(${(x * 0.6 * a).toFixed(2)}deg,${(y * 0.25 * a).toFixed(2)}deg) scale(${(1 + y * 0.004 * a).toFixed(4)},${(1 - y * 0.004 * a).toFixed(4)})`;\n if (Math.abs(x) + Math.abs(vx) + Math.abs(y) + Math.abs(vy) > 0.02) raf = requestAnimationFrame(loop);\n else ((raf = 0), (last = 0), (el.style.transform = prev));\n };\n const move = (e: PointerEvent) => {\n if (!Number.isNaN(lx)) (vx += Math.max(-60, Math.min(60, (e.clientX - lx) * 4))), (vy += Math.max(-60, Math.min(60, (e.clientY - ly) * 4)));\n lx = e.clientX;\n ly = e.clientY;\n if (!raf && typeof requestAnimationFrame === 'function') raf = requestAnimationFrame(loop);\n };\n const leave = () => (lx = ly = NaN);\n el.addEventListener('pointermove', move);\n el.addEventListener('pointerleave', leave);\n const stop = () => {\n el.removeEventListener('pointermove', move);\n el.removeEventListener('pointerleave', leave);\n if (raf) cancelAnimationFrame(raf);\n el.style.transform = prev;\n };\n ctx.onCleanup(stop);\n return stop;\n },\n },\n {\n name: 'magnet',\n kind: 'hover',\n description: \"The element's children are pulled toward the pointer on springs and settle back when it leaves (`strength`, `radius`).\",\n defaults: { strength: 0.35, radius: 160 },\n reduced: 'skip',\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const kids = Array.from(el.children) as HTMLElement[];\n const prev = kids.map((k) => k.style.transform);\n kids.forEach((k) => (k.style.transition = 'transform .45s cubic-bezier(.3,1.5,.5,1)'));\n const move = (e: PointerEvent) => {\n for (const k of kids) {\n const r = k.getBoundingClientRect();\n const dx = e.clientX - (r.left + r.width / 2);\n const dy = e.clientY - (r.top + r.height / 2);\n const d = Math.hypot(dx, dy);\n const f = d < o.radius ? o.strength * (1 - d / o.radius) : 0;\n k.style.transform = `translate(${(dx * f).toFixed(1)}px,${(dy * f).toFixed(1)}px)`;\n }\n };\n const leave = () => kids.forEach((k, i) => (k.style.transform = prev[i]));\n el.addEventListener('pointermove', move);\n el.addEventListener('pointerleave', leave);\n const stop = () => {\n el.removeEventListener('pointermove', move);\n el.removeEventListener('pointerleave', leave);\n kids.forEach((k, i) => ((k.style.transform = prev[i]), (k.style.transition = '')));\n };\n ctx.onCleanup(stop);\n return stop;\n },\n },\n bg('cloth', 'A cloth hangs from the top edge and ripples when the pointer moves through it (Verlet, Canvas 2D).', { cols: 16, rows: 10, color: '#7c5cff' }, (el) => {\n const p = pointer(el);\n return {\n init: (w, h, o) => {\n const world = new VerletWorld(600, 0.985, 3);\n const sx = (w * 0.86) / (o.cols - 1);\n const sy = (h * 0.75) / (o.rows - 1);\n for (let r = 0; r < o.rows; r++) for (let c = 0; c < o.cols; c++) world.add(w * 0.07 + c * sx, 6 + r * sy, r === 0 && c % 3 === 0);\n for (let r = 0; r < o.rows; r++)\n for (let c = 0; c < o.cols; c++) {\n const i = r * o.cols + c;\n if (c) world.link(i - 1, i);\n if (r) world.link(i - o.cols, i);\n }\n return { world, off: p.off };\n },\n draw: ({ ctx, w, h, t, state, o }) => {\n const dt = tick(state, t);\n const world: VerletWorld = state.world;\n if (t > 0) {\n if (p.s.x > -999) world.push(p.s.x, p.s.y, p.s.dx * 0.6, p.s.dy * 0.6, 50);\n p.s.dx = p.s.dy = 0;\n world.step(dt * o.speed, { w, h });\n }\n ctx.clearRect(0, 0, w, h);\n for (let r = 0; r < o.rows - 1; r++)\n for (let c = 0; c < o.cols - 1; c++) {\n const i = r * o.cols + c;\n const a = world.points[i];\n const b = world.points[i + 1];\n const d = world.points[i + o.cols + 1];\n const e = world.points[i + o.cols];\n const shade = 0.55 + 0.45 * Math.max(0, Math.min(1, (b.x - a.x) / ((w * 0.86) / (o.cols - 1))));\n ctx.globalAlpha = shade;\n ctx.fillStyle = (r + c) % 2 ? o.color : '#22d3ee';\n ctx.beginPath();\n ctx.moveTo(a.x, a.y);\n ctx.lineTo(b.x, b.y);\n ctx.lineTo(d.x, d.y);\n ctx.lineTo(e.x, e.y);\n ctx.fill();\n }\n ctx.globalAlpha = 1;\n },\n };\n }),\n bg('rope', 'A rope with a weight swings from the top; the pointer pushes it (Verlet, Canvas 2D).', { links: 14, color: '#f59e0b' }, (el) => {\n const p = pointer(el);\n return {\n init: (w, h, o) => {\n const world = new VerletWorld(900, 0.995, 6);\n const len = (h * 0.7) / o.links;\n for (let i = 0; i <= o.links; i++) world.add(w / 2 + i * len * 0.6, 4 + i * len * 0.8, i === 0);\n for (let i = 1; i <= o.links; i++) world.link(i - 1, i, len);\n return { world, off: p.off };\n },\n draw: ({ ctx, w, h, t, state, o }) => {\n const dt = tick(state, t);\n const world: VerletWorld = state.world;\n if (t > 0) {\n if (p.s.x > -999) world.push(p.s.x, p.s.y, p.s.dx, p.s.dy, 36);\n p.s.dx = p.s.dy = 0;\n world.step(dt * o.speed, { w, h });\n }\n ctx.clearRect(0, 0, w, h);\n ctx.strokeStyle = o.color;\n ctx.lineWidth = 3;\n ctx.lineCap = 'round';\n ctx.beginPath();\n world.points.forEach((q, i) => (i ? ctx.lineTo(q.x, q.y) : ctx.moveTo(q.x, q.y)));\n ctx.stroke();\n const end = world.points[world.points.length - 1];\n ctx.fillStyle = o.color;\n ctx.beginPath();\n ctx.arc(end.x, end.y, 11, 0, Math.PI * 2);\n ctx.fill();\n },\n };\n }),\n bg('pinball', 'Balls fall through round bumpers that light up on a hit; click to drop another ball (Canvas 2D).', { balls: 5, bumpers: 7, colors: ['#f43f5e', '#f59e0b', '#22d3ee', '#a3e635'] }, (el) => {\n const p = pointer(el);\n return {\n init: (w, h, o) => {\n const ball = () => ({ x: w * (0.3 + Math.random() * 0.4), y: -10 - Math.random() * h * 0.5, vx: (Math.random() - 0.5) * 80, vy: 0 });\n const bumpers = Array.from({ length: o.bumpers }, (_, i) => ({ x: w * (0.15 + ((i * 0.37) % 0.7)), y: h * (0.25 + ((i * 0.53) % 0.6)), r: Math.min(w, h) * 0.06, hit: 0 }));\n return { balls: Array.from({ length: o.balls }, ball), bumpers, ball, clicks: 0, off: p.off };\n },\n draw: ({ ctx, w, h, t, state, o }) => {\n const dt = tick(state, t) * o.speed;\n if (p.s.clicks !== state.clicks) {\n state.clicks = p.s.clicks;\n const b = state.ball();\n if (p.s.x > -999) b.x = p.s.x;\n b.y = 0;\n state.balls.push(b);\n if (state.balls.length > 24) state.balls.shift();\n }\n ctx.clearRect(0, 0, w, h);\n for (const bu of state.bumpers) {\n bu.hit = Math.max(0, bu.hit - dt * 2.5);\n ctx.fillStyle = `rgba(124,92,255,${0.35 + bu.hit * 0.65})`;\n ctx.shadowColor = '#a78bfa';\n ctx.shadowBlur = bu.hit * 20;\n ctx.beginPath();\n ctx.arc(bu.x, bu.y, bu.r * (1 + bu.hit * 0.15), 0, Math.PI * 2);\n ctx.fill();\n }\n ctx.shadowBlur = 0;\n state.balls.forEach((b: any, i: number) => {\n if (t > 0) {\n b.vy += 600 * dt;\n b.x += b.vx * dt;\n b.y += b.vy * dt;\n for (const bu of state.bumpers) {\n const dx = b.x - bu.x;\n const dy = b.y - bu.y;\n const d = Math.hypot(dx, dy);\n if (d < bu.r + 6 && d > 0) {\n const nx = dx / d;\n const ny = dy / d;\n const dot = b.vx * nx + b.vy * ny;\n b.vx = (b.vx - 2 * dot * nx) * 0.92;\n b.vy = (b.vy - 2 * dot * ny) * 0.92;\n b.x = bu.x + nx * (bu.r + 6);\n b.y = bu.y + ny * (bu.r + 6);\n bu.hit = 1;\n }\n }\n if (b.x < 6 || b.x > w - 6) (b.vx *= -0.8), (b.x = Math.min(w - 6, Math.max(6, b.x)));\n if (b.y > h + 12) Object.assign(b, state.ball());\n }\n ctx.fillStyle = o.colors[i % o.colors.length];\n ctx.beginPath();\n ctx.arc(b.x, b.y, 6, 0, Math.PI * 2);\n ctx.fill();\n });\n },\n };\n }),\n];\n\n/** Register the 6.8 physics 2.0 pack (idempotent). */\nexport function registerPhysicsEffects2(): void {\n registerEffects(PHYSICS2_FX);\n}\n"],"names":[],"mappings":";;;;;AA8BA;MACa,WAAW,CAAA;AAGtB,IAAA,WAAA,CAAmB,UAAU,GAAG,EAAS,UAAU,IAAI,EAAS,aAAa,CAAC,EAAA;QAA3D,IAAA,CAAA,OAAO,GAAP,OAAO;QAAe,IAAA,CAAA,OAAO,GAAP,OAAO;QAAgB,IAAA,CAAA,UAAU,GAAV,UAAU;QAF1E,IAAA,CAAA,MAAM,GAAkB,EAAE;QAC1B,IAAA,CAAA,MAAM,GAA+B,EAAE;IAC0C;AACjF,IAAA,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,MAAM,GAAG,KAAK,EAAA;QACtC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;AAChD,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;IAC/B;AACA,IAAA,IAAI,CAAC,CAAS,EAAE,CAAS,EAAE,GAAY,EAAA;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACxB,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE;IACA,IAAI,CAAC,EAAU,EAAE,MAAiC,EAAA;QAChD,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,EAAE;AAChC,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE;YAC3B,IAAI,CAAC,CAAC,MAAM;gBAAE;AACd,YAAA,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,OAAO;AACtC,YAAA,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,OAAO;AACtC,YAAA,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACV,YAAA,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACV,YAAA,CAAC,CAAC,CAAC,IAAI,EAAE;AACT,YAAA,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC;QACf;AACA,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE;AACxC,YAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE;gBACrC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;gBACxB,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;gBACxB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACpB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACpB,gBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,IAAI;gBACpC,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC3D,IAAI,CAAC,CAAC,CAAC,MAAM;AAAE,oBAAA,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC;gBACrD,IAAI,CAAC,CAAC,CAAC,MAAM;AAAE,oBAAA,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC;YACvD;AACA,YAAA,IAAI,MAAM;AAAE,gBAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM;oBAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrI;IACF;;IAEA,IAAI,CAAC,CAAS,EAAE,CAAS,EAAE,EAAU,EAAE,EAAU,EAAE,CAAC,GAAG,EAAE,EAAA;AACvD,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AAAE,gBAAA,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1G;AACD;AAED,MAAM,EAAE,GAAG,CAAC,IAAY,EAAE,WAAmB,EAAE,QAAiC,EAAE,IAAyC,MAAwB;IACjJ,IAAI;AACJ,IAAA,IAAI,EAAE,YAAY;IAClB,WAAW;AACX,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,QAAQ,EAAE;IAC/C,GAAG,EAAE,CAAC,EAAe,EAAE,CAAM,EAAE,GAAkB,KAAI;AACnD,QAAA,MAAM,IAAI,GAAG,gBAAgB,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACnD,QAAA,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;AACnB,QAAA,OAAO,IAAI;IACb,CAAC;AACF,CAAA,CAAC;AAEF;AACA,SAAS,OAAO,CAAC,EAAe,EAAA;AAC9B,IAAA,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE;AACpE,IAAA,MAAM,IAAI,GAAG,CAAC,CAAe,KAAI;AAC/B,QAAA,MAAM,CAAC,GAAG,EAAE,CAAC,qBAAqB,EAAE;QACpC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI;QAC5B,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG;AAC3B,QAAA,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI;YAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACpD,QAAA,CAAC,CAAC,CAAC,GAAG,CAAC;AACP,QAAA,CAAC,CAAC,CAAC,GAAG,CAAC;AACT,IAAA,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,MAAM,EAAE;AAC9B,IAAA,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AACtC,IAAA,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC;AACxC,IAAA,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,KAAK,CAAC;AACzC,IAAA,EAAE,CAAC,gBAAgB,CAAC,cAAc,EAAE,KAAK,CAAC;AAC1C,IAAA,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,aAAa,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC,EAAE;AACrK;AAEA,MAAM,IAAI,GAAG,CAAC,KAAU,EAAE,CAAS,KAAI;AACrC,IAAA,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE;AACjE,IAAA,KAAK,CAAC,IAAI,GAAG,CAAC;AACd,IAAA,OAAO,EAAE;AACX,CAAC;AAEM,MAAM,WAAW,GAAuB;AAC7C,IAAA;AACE,QAAA,IAAI,EAAE,WAAW;AACjB,QAAA,IAAI,EAAE,OAAO;AACb,QAAA,WAAW,EAAE,sIAAsI;AACnJ,QAAA,QAAQ,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;AACnD,QAAA,OAAO,EAAE,MAAM;QACf,GAAG,EAAE,CAAC,EAAe,EAAE,CAAM,EAAE,GAAkB,KAAI;YACnD,IAAI,EAAE,GAAG,CAAC;YACV,IAAI,CAAC,GAAG,CAAC;YACT,IAAI,EAAE,GAAG,CAAC;YACV,IAAI,CAAC,GAAG,CAAC;YACT,IAAI,GAAG,GAAG,CAAC;YACX,IAAI,EAAE,GAAG,GAAG;YACZ,IAAI,EAAE,GAAG,GAAG;YACZ,IAAI,IAAI,GAAG,CAAC;AACZ,YAAA,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS;AAC/B,YAAA,MAAM,IAAI,GAAG,CAAC,GAAW,KAAI;gBAC3B,MAAM,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE;gBAC/D,IAAI,GAAG,GAAG;AACV,gBAAA,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE;AAC9C,gBAAA,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE;AAC9C,gBAAA,CAAC,IAAI,EAAE,GAAG,EAAE;AACZ,gBAAA,CAAC,IAAI,EAAE,GAAG,EAAE;AACZ,gBAAA,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM;AAClB,gBAAA,EAAE,CAAC,KAAK,CAAC,SAAS,GAAG,CAAA,KAAA,EAAQ,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA,IAAA,EAAO,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA,WAAA,EAAc,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG;AACtK,gBAAA,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI;AAAE,oBAAA,GAAG,GAAG,qBAAqB,CAAC,IAAI,CAAC;;oBAChG,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;AAC1D,YAAA,CAAC;AACD,YAAA,MAAM,IAAI,GAAG,CAAC,CAAe,KAAI;AAC/B,gBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;oBAAE,CAAC,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3I,gBAAA,EAAE,GAAG,CAAC,CAAC,OAAO;AACd,gBAAA,EAAE,GAAG,CAAC,CAAC,OAAO;AACd,gBAAA,IAAI,CAAC,GAAG,IAAI,OAAO,qBAAqB,KAAK,UAAU;AAAE,oBAAA,GAAG,GAAG,qBAAqB,CAAC,IAAI,CAAC;AAC5F,YAAA,CAAC;AACD,YAAA,MAAM,KAAK,GAAG,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;AACnC,YAAA,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC;AACxC,YAAA,EAAE,CAAC,gBAAgB,CAAC,cAAc,EAAE,KAAK,CAAC;YAC1C,MAAM,IAAI,GAAG,MAAK;AAChB,gBAAA,EAAE,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC;AAC3C,gBAAA,EAAE,CAAC,mBAAmB,CAAC,cAAc,EAAE,KAAK,CAAC;AAC7C,gBAAA,IAAI,GAAG;oBAAE,oBAAoB,CAAC,GAAG,CAAC;AAClC,gBAAA,EAAE,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI;AAC3B,YAAA,CAAC;AACD,YAAA,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;AACnB,YAAA,OAAO,IAAI;QACb,CAAC;AACF,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,IAAI,EAAE,OAAO;AACb,QAAA,WAAW,EAAE,wHAAwH;QACrI,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;AACzC,QAAA,OAAO,EAAE,MAAM;QACf,GAAG,EAAE,CAAC,EAAe,EAAE,CAAM,EAAE,GAAkB,KAAI;YACnD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAkB;AACrD,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;AAC/C,YAAA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,UAAU,GAAG,0CAA0C,CAAC,CAAC;AACtF,YAAA,MAAM,IAAI,GAAG,CAAC,CAAe,KAAI;AAC/B,gBAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;AACpB,oBAAA,MAAM,CAAC,GAAG,CAAC,CAAC,qBAAqB,EAAE;AACnC,oBAAA,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;AAC7C,oBAAA,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;oBAC7C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;oBAC5B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;AAC5D,oBAAA,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,CAAA,UAAA,EAAa,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA,GAAA,EAAM,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA,GAAA,CAAK;gBACpF;AACF,YAAA,CAAC;AACD,YAAA,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACzE,YAAA,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC;AACxC,YAAA,EAAE,CAAC,gBAAgB,CAAC,cAAc,EAAE,KAAK,CAAC;YAC1C,MAAM,IAAI,GAAG,MAAK;AAChB,gBAAA,EAAE,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC;AAC3C,gBAAA,EAAE,CAAC,mBAAmB,CAAC,cAAc,EAAE,KAAK,CAAC;AAC7C,gBAAA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC,CAAC;AACpF,YAAA,CAAC;AACD,YAAA,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;AACnB,YAAA,OAAO,IAAI;QACb,CAAC;AACF,KAAA;IACD,EAAE,CAAC,OAAO,EAAE,oGAAoG,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,KAAI;AACjK,QAAA,MAAM,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC;QACrB,OAAO;YACL,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAI;gBAChB,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;AAC5C,gBAAA,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;AACpC,gBAAA,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;AACpC,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE;AAAE,oBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE;wBAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAClI,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE;AAC7B,oBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;wBAC/B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC;AACxB,wBAAA,IAAI,CAAC;4BAAE,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC3B,wBAAA,IAAI,CAAC;4BAAE,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;oBAClC;gBACF,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE;YAC9B,CAAC;AACD,YAAA,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAI;gBACnC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AACzB,gBAAA,MAAM,KAAK,GAAgB,KAAK,CAAC,KAAK;AACtC,gBAAA,IAAI,CAAC,GAAG,CAAC,EAAE;AACT,oBAAA,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;AAAE,wBAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC;AAC1E,oBAAA,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;AACnB,oBAAA,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;gBACpC;gBACA,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACzB,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,EAAE;AACjC,oBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wBACnC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC;wBACxB,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;wBACzB,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;AAC7B,wBAAA,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;AACtC,wBAAA,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;wBAClC,MAAM,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/F,wBAAA,GAAG,CAAC,WAAW,GAAG,KAAK;wBACvB,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,SAAS;wBACjD,GAAG,CAAC,SAAS,EAAE;wBACf,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;wBACpB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;wBACpB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;wBACpB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;wBACpB,GAAG,CAAC,IAAI,EAAE;oBACZ;AACF,gBAAA,GAAG,CAAC,WAAW,GAAG,CAAC;YACrB,CAAC;SACF;AACH,IAAA,CAAC,CAAC;AACF,IAAA,EAAE,CAAC,MAAM,EAAE,sFAAsF,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,KAAI;AACzI,QAAA,MAAM,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC;QACrB,OAAO;YACL,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAI;gBAChB,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC5C,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,KAAK;AAC/B,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE;oBAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AAC/F,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE;oBAAE,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;gBAC5D,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE;YAC9B,CAAC;AACD,YAAA,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAI;gBACnC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AACzB,gBAAA,MAAM,KAAK,GAAgB,KAAK,CAAC,KAAK;AACtC,gBAAA,IAAI,CAAC,GAAG,CAAC,EAAE;AACT,oBAAA,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;AAAE,wBAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;AAC9D,oBAAA,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;AACnB,oBAAA,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;gBACpC;gBACA,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACzB,gBAAA,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,KAAK;AACzB,gBAAA,GAAG,CAAC,SAAS,GAAG,CAAC;AACjB,gBAAA,GAAG,CAAC,OAAO,GAAG,OAAO;gBACrB,GAAG,CAAC,SAAS,EAAE;gBACf,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjF,GAAG,CAAC,MAAM,EAAE;AACZ,gBAAA,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AACjD,gBAAA,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK;gBACvB,GAAG,CAAC,SAAS,EAAE;gBACf,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;gBACzC,GAAG,CAAC,IAAI,EAAE;YACZ,CAAC;SACF;AACH,IAAA,CAAC,CAAC;AACF,IAAA,EAAE,CAAC,SAAS,EAAE,kGAAkG,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,EAAE,KAAI;AACvM,QAAA,MAAM,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC;QACrB,OAAO;YACL,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAI;gBAChB,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC,EAAE,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AACpI,gBAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;AAC3K,gBAAA,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE;YAC/F,CAAC;AACD,YAAA,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAI;AACnC,gBAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK;gBACnC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE;oBAC/B,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM;AACzB,oBAAA,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE;AACtB,oBAAA,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;wBAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7B,oBAAA,CAAC,CAAC,CAAC,GAAG,CAAC;AACP,oBAAA,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AACnB,oBAAA,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE;AAAE,wBAAA,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE;gBAClD;gBACA,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACzB,gBAAA,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE;AAC9B,oBAAA,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;AACvC,oBAAA,GAAG,CAAC,SAAS,GAAG,CAAA,gBAAA,EAAmB,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,IAAI,CAAA,CAAA,CAAG;AAC1D,oBAAA,GAAG,CAAC,WAAW,GAAG,SAAS;oBAC3B,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE;oBAC5B,GAAG,CAAC,SAAS,EAAE;AACf,oBAAA,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;oBAC/D,GAAG,CAAC,IAAI,EAAE;gBACZ;AACA,gBAAA,GAAG,CAAC,UAAU,GAAG,CAAC;gBAClB,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAM,EAAE,CAAS,KAAI;AACxC,oBAAA,IAAI,CAAC,GAAG,CAAC,EAAE;AACT,wBAAA,CAAC,CAAC,EAAE,IAAI,GAAG,GAAG,EAAE;wBAChB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE;wBAChB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE;AAChB,wBAAA,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE;4BAC9B,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;4BACrB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;4BACrB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;AAC5B,4BAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AACzB,gCAAA,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC;AACjB,gCAAA,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC;AACjB,gCAAA,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE;AACjC,gCAAA,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,IAAI,IAAI;AACnC,gCAAA,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,IAAI,IAAI;AACnC,gCAAA,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;AAC5B,gCAAA,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;AAC5B,gCAAA,EAAE,CAAC,GAAG,GAAG,CAAC;4BACZ;wBACF;AACA,wBAAA,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;AAAE,4BAAA,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrF,wBAAA,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;4BAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;oBAClD;AACA,oBAAA,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;oBAC7C,GAAG,CAAC,SAAS,EAAE;oBACf,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;oBACpC,GAAG,CAAC,IAAI,EAAE;AACZ,gBAAA,CAAC,CAAC;YACJ,CAAC;SACF;AACH,IAAA,CAAC,CAAC;;AAGJ;SACgB,uBAAuB,GAAA;IACrC,eAAe,CAAC,WAAW,CAAC;AAC9B;;;;"}