@energy8platform/game-engine 0.33.2 → 0.33.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.
- package/dist/flow.cjs.js +770 -0
- package/dist/flow.cjs.js.map +1 -0
- package/dist/flow.d.ts +390 -0
- package/dist/flow.esm.js +765 -0
- package/dist/flow.esm.js.map +1 -0
- package/dist/host.cjs.js +3 -0
- package/dist/host.cjs.js.map +1 -1
- package/dist/host.esm.js +3 -0
- package/dist/host.esm.js.map +1 -1
- package/dist/scene-devtools.cjs.js +377 -0
- package/dist/scene-devtools.cjs.js.map +1 -0
- package/dist/scene-devtools.d.ts +239 -0
- package/dist/scene-devtools.esm.js +372 -0
- package/dist/scene-devtools.esm.js.map +1 -0
- package/dist/scene.cjs.js +3626 -0
- package/dist/scene.cjs.js.map +1 -0
- package/dist/scene.d.ts +344 -0
- package/dist/scene.esm.js +3614 -0
- package/dist/scene.esm.js.map +1 -0
- package/package.json +1 -1
- package/src/host/shellConfig.ts +3 -0
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
// Pure helpers behind the scene inspector — kept renderer/DOM-free so the control
|
|
2
|
+
// inference and layout-field enumeration are unit-testable and reusable (the same
|
|
3
|
+
// mapping later feeds schema-driven autogen and the agent's docs).
|
|
4
|
+
/** Infer an editor control for a props value (schema-less fallback). */
|
|
5
|
+
function propControlKind(value) {
|
|
6
|
+
switch (typeof value) {
|
|
7
|
+
case 'number':
|
|
8
|
+
return 'number';
|
|
9
|
+
case 'boolean':
|
|
10
|
+
return 'boolean';
|
|
11
|
+
case 'string':
|
|
12
|
+
return /^#([0-9a-f]{3}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(value) ? 'color' : 'text';
|
|
13
|
+
default:
|
|
14
|
+
return 'json';
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
const FRACTION_KEYS = /frac|anchor|scale|sag|left$|top$|width$|height$/i;
|
|
18
|
+
function numberStep(path, value) {
|
|
19
|
+
if (/rotation/i.test(path))
|
|
20
|
+
return 0.01;
|
|
21
|
+
if (FRACTION_KEYS.test(path) && Math.abs(value) <= 4)
|
|
22
|
+
return 0.01;
|
|
23
|
+
return 1;
|
|
24
|
+
}
|
|
25
|
+
/** Flatten a layout rule into editable field specs (mode itself is structural → readonly). */
|
|
26
|
+
function layoutFieldSpecs(rule) {
|
|
27
|
+
const out = [];
|
|
28
|
+
const visit = (value, path, label) => {
|
|
29
|
+
if (typeof value === 'number') {
|
|
30
|
+
out.push({ path, label, kind: 'number', value, step: numberStep(path, value) });
|
|
31
|
+
}
|
|
32
|
+
else if (typeof value === 'string') {
|
|
33
|
+
out.push(path === 'mode' ? { path, label, kind: 'readonly', value } : { path, label, kind: 'text', value });
|
|
34
|
+
}
|
|
35
|
+
else if (typeof value === 'boolean') {
|
|
36
|
+
out.push({ path, label, kind: 'text', value: String(value) });
|
|
37
|
+
}
|
|
38
|
+
else if (Array.isArray(value)) {
|
|
39
|
+
value.forEach((item, i) => visit(item, `${path}.${i}`, `${label}[${i}]`));
|
|
40
|
+
}
|
|
41
|
+
else if (value && typeof value === 'object') {
|
|
42
|
+
for (const [k, v] of Object.entries(value))
|
|
43
|
+
visit(v, `${path}.${k}`, `${label}.${k}`);
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
for (const [key, value] of Object.entries(rule))
|
|
47
|
+
visit(value, key, key);
|
|
48
|
+
return out;
|
|
49
|
+
}
|
|
50
|
+
/** Immutable set of a dot-path inside a (JSON-ish) rule object. */
|
|
51
|
+
function setRulePath(rule, path, value) {
|
|
52
|
+
const clone = JSON.parse(JSON.stringify(rule));
|
|
53
|
+
const parts = path.split('.');
|
|
54
|
+
let cursor = clone;
|
|
55
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
56
|
+
const key = parts[i];
|
|
57
|
+
const next = Array.isArray(cursor) ? cursor[Number(key)] : cursor[key];
|
|
58
|
+
if (typeof next !== 'object' || next === null) {
|
|
59
|
+
const fresh = {};
|
|
60
|
+
if (Array.isArray(cursor))
|
|
61
|
+
cursor[Number(key)] = fresh;
|
|
62
|
+
else
|
|
63
|
+
cursor[key] = fresh;
|
|
64
|
+
cursor = fresh;
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
cursor = next;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
const last = parts[parts.length - 1];
|
|
71
|
+
if (Array.isArray(cursor))
|
|
72
|
+
cursor[Number(last)] = value;
|
|
73
|
+
else
|
|
74
|
+
cursor[last] = value;
|
|
75
|
+
return clone;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Scene outliner + inspector — the human lens over the same SceneHandle surface the
|
|
79
|
+
// agent drives (tree/patch/setState). Framework-free DOM, dev-only: hosts (scene-lab,
|
|
80
|
+
// a game's preview page, later a harness panel) mount it into any container element.
|
|
81
|
+
// Every edit leaves through a ScenePatch, so a mouse edit and an agent edit are the
|
|
82
|
+
// same operation on the same doc.
|
|
83
|
+
const STYLE = `
|
|
84
|
+
.e8si { font: 12px/1.45 system-ui, sans-serif; color: #dfe6f5; display: flex; flex-direction: column; height: 100%; min-height: 0; }
|
|
85
|
+
.e8si h3 { margin: 0; padding: 8px 10px 6px; font-size: 11px; letter-spacing: 1px; text-transform: uppercase; color: #7d8ab0; }
|
|
86
|
+
.e8si-tree { overflow: auto; max-height: 42%; border-bottom: 1px solid #1c2540; padding-bottom: 6px; }
|
|
87
|
+
.e8si-row { display: flex; gap: 6px; align-items: baseline; padding: 2px 10px; cursor: pointer; white-space: nowrap; }
|
|
88
|
+
.e8si-row:hover { background: #141c36; }
|
|
89
|
+
.e8si-row.sel { background: #1d2b55; }
|
|
90
|
+
.e8si-row .t { color: #7d8ab0; }
|
|
91
|
+
.e8si-row .dim { opacity: 0.45; }
|
|
92
|
+
.e8si-insp { overflow: auto; flex: 1; padding: 4px 0 12px; }
|
|
93
|
+
.e8si-head { padding: 6px 10px; }
|
|
94
|
+
.e8si-head .id { font-weight: 700; font-size: 13px; }
|
|
95
|
+
.e8si-head .meta { color: #7d8ab0; }
|
|
96
|
+
.e8si-sec { margin-top: 6px; }
|
|
97
|
+
.e8si-field { display: flex; align-items: center; gap: 6px; padding: 2px 10px; }
|
|
98
|
+
.e8si-field label { flex: 0 0 96px; color: #9fb0d8; overflow: hidden; text-overflow: ellipsis; }
|
|
99
|
+
.e8si-field input[type=number], .e8si-field input[type=text], .e8si-field select, .e8si-field textarea {
|
|
100
|
+
flex: 1; min-width: 0; background: #0d1428; color: #dfe6f5; border: 1px solid #2b3866; border-radius: 6px; padding: 3px 6px; font: inherit; }
|
|
101
|
+
.e8si-field input[type=color] { width: 34px; height: 24px; padding: 0; border: 1px solid #2b3866; border-radius: 6px; background: none; }
|
|
102
|
+
.e8si-field .ro { color: #8fa0c9; }
|
|
103
|
+
.e8si-json { display: block; width: calc(100% - 20px); margin: 2px 10px; min-height: 52px; font: 11px/1.4 ui-monospace, monospace; }
|
|
104
|
+
.e8si-apply { margin: 4px 10px; padding: 3px 10px; background: #18213d; color: #dfe6f5; border: 1px solid #2b3866; border-radius: 6px; cursor: pointer; }
|
|
105
|
+
.e8si-empty { padding: 10px; color: #7d8ab0; }
|
|
106
|
+
.e8si-badge { display: inline-block; padding: 0 6px; border: 1px solid #2b3866; border-radius: 8px; color: #9fb0d8; font-size: 10px; }
|
|
107
|
+
`;
|
|
108
|
+
function createSceneInspector(opts) {
|
|
109
|
+
const { handle, container } = opts;
|
|
110
|
+
const applyPatch = opts.applyPatch ?? handle.patch;
|
|
111
|
+
const getOrientation = opts.getOrientation ?? (() => 'landscape');
|
|
112
|
+
const root = document.createElement('div');
|
|
113
|
+
root.className = 'e8si';
|
|
114
|
+
const style = document.createElement('style');
|
|
115
|
+
style.textContent = STYLE;
|
|
116
|
+
root.appendChild(style);
|
|
117
|
+
const treeHost = document.createElement('div');
|
|
118
|
+
treeHost.className = 'e8si-tree';
|
|
119
|
+
const inspHost = document.createElement('div');
|
|
120
|
+
inspHost.className = 'e8si-insp';
|
|
121
|
+
root.append(treeHost, inspHost);
|
|
122
|
+
container.appendChild(root);
|
|
123
|
+
let selectedId = null;
|
|
124
|
+
// Edits from our own inputs schedule a refresh that must not rebuild the form under
|
|
125
|
+
// the user's cursor — only the outliner refreshes then.
|
|
126
|
+
let ownEdit = false;
|
|
127
|
+
const findNode = (id) => {
|
|
128
|
+
const walk = (n) => n.id === id ? n : n.children.map(walk).find(Boolean);
|
|
129
|
+
return walk(handle.tree());
|
|
130
|
+
};
|
|
131
|
+
const docNode = (id) => {
|
|
132
|
+
const walk = (n) => {
|
|
133
|
+
if (n.id === id)
|
|
134
|
+
return n;
|
|
135
|
+
for (const child of n.children ?? []) {
|
|
136
|
+
const hit = walk(child);
|
|
137
|
+
if (hit)
|
|
138
|
+
return hit;
|
|
139
|
+
}
|
|
140
|
+
return undefined;
|
|
141
|
+
};
|
|
142
|
+
return walk(handle.doc().root);
|
|
143
|
+
};
|
|
144
|
+
const patchAndRefresh = (patch) => {
|
|
145
|
+
ownEdit = true;
|
|
146
|
+
applyPatch(patch);
|
|
147
|
+
ownEdit = false;
|
|
148
|
+
renderTree();
|
|
149
|
+
};
|
|
150
|
+
// ── Outliner ────────────────────────────────────────────────────────────────
|
|
151
|
+
const renderTree = () => {
|
|
152
|
+
treeHost.textContent = '';
|
|
153
|
+
const title = document.createElement('h3');
|
|
154
|
+
title.textContent = 'Scene';
|
|
155
|
+
treeHost.appendChild(title);
|
|
156
|
+
const renderRow = (node, depth) => {
|
|
157
|
+
const row = document.createElement('div');
|
|
158
|
+
row.className = `e8si-row${node.id === selectedId ? ' sel' : ''}${node.visible ? '' : ' dim'}`;
|
|
159
|
+
row.style.paddingLeft = `${10 + depth * 12}px`;
|
|
160
|
+
const id = document.createElement('span');
|
|
161
|
+
id.textContent = node.id;
|
|
162
|
+
const type = document.createElement('span');
|
|
163
|
+
type.className = 't';
|
|
164
|
+
type.textContent = node.name ? `${node.type} · ${node.name}` : node.type;
|
|
165
|
+
row.append(id, type);
|
|
166
|
+
if (node.state) {
|
|
167
|
+
const badge = document.createElement('span');
|
|
168
|
+
badge.className = 'e8si-badge';
|
|
169
|
+
badge.textContent = node.state;
|
|
170
|
+
row.appendChild(badge);
|
|
171
|
+
}
|
|
172
|
+
row.addEventListener('click', () => {
|
|
173
|
+
select(node.id);
|
|
174
|
+
opts.onSelect?.(node.id);
|
|
175
|
+
});
|
|
176
|
+
treeHost.appendChild(row);
|
|
177
|
+
node.children.forEach((child) => renderRow(child, depth + 1));
|
|
178
|
+
};
|
|
179
|
+
renderRow(handle.tree(), 0);
|
|
180
|
+
};
|
|
181
|
+
// ── Inspector form ─────────────────────────────────────────────────────────
|
|
182
|
+
const field = (labelText) => {
|
|
183
|
+
const wrap = document.createElement('div');
|
|
184
|
+
wrap.className = 'e8si-field';
|
|
185
|
+
const label = document.createElement('label');
|
|
186
|
+
label.textContent = labelText;
|
|
187
|
+
label.title = labelText;
|
|
188
|
+
wrap.appendChild(label);
|
|
189
|
+
return wrap;
|
|
190
|
+
};
|
|
191
|
+
const renderInspector = () => {
|
|
192
|
+
inspHost.textContent = '';
|
|
193
|
+
if (!selectedId) {
|
|
194
|
+
const empty = document.createElement('div');
|
|
195
|
+
empty.className = 'e8si-empty';
|
|
196
|
+
empty.textContent = 'Select a node (canvas or tree) to edit its layout & props.';
|
|
197
|
+
inspHost.appendChild(empty);
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
const id = selectedId;
|
|
201
|
+
const node = docNode(id);
|
|
202
|
+
const outline = findNode(id);
|
|
203
|
+
if (!node || !outline)
|
|
204
|
+
return;
|
|
205
|
+
const head = document.createElement('div');
|
|
206
|
+
head.className = 'e8si-head';
|
|
207
|
+
head.innerHTML = '';
|
|
208
|
+
const idEl = document.createElement('div');
|
|
209
|
+
idEl.className = 'id';
|
|
210
|
+
idEl.textContent = `#${node.id}`;
|
|
211
|
+
const meta = document.createElement('div');
|
|
212
|
+
meta.className = 'meta';
|
|
213
|
+
meta.textContent = `${node.type}${node.name ? ` · ${node.name}` : ''}${node.anchorName ? ` · @${node.anchorName}` : ''}${node.visibleWhen ? ` · when: ${node.visibleWhen}` : ''}`;
|
|
214
|
+
head.append(idEl, meta);
|
|
215
|
+
inspHost.appendChild(head);
|
|
216
|
+
// State selector (named prop variants).
|
|
217
|
+
const stateNames = Object.keys(node.states ?? {});
|
|
218
|
+
if (stateNames.length > 0) {
|
|
219
|
+
const wrap = field('state');
|
|
220
|
+
const select = document.createElement('select');
|
|
221
|
+
for (const name of ['—', ...stateNames]) {
|
|
222
|
+
const option = document.createElement('option');
|
|
223
|
+
option.value = name;
|
|
224
|
+
option.textContent = name;
|
|
225
|
+
select.appendChild(option);
|
|
226
|
+
}
|
|
227
|
+
select.value = outline.state ?? '—';
|
|
228
|
+
select.addEventListener('change', () => {
|
|
229
|
+
patchAndRefresh({ op: 'set-state', id, state: select.value === '—' ? null : select.value });
|
|
230
|
+
});
|
|
231
|
+
wrap.appendChild(select);
|
|
232
|
+
inspHost.appendChild(wrap);
|
|
233
|
+
}
|
|
234
|
+
// Layout — the EFFECTIVE rule for the current orientation, edited in place.
|
|
235
|
+
const orientation = getOrientation();
|
|
236
|
+
const override = node.responsive?.[orientation]?.layout;
|
|
237
|
+
const rule = override ?? node.layout;
|
|
238
|
+
const layoutTitle = document.createElement('h3');
|
|
239
|
+
layoutTitle.textContent = `Layout (${orientation}${override ? ' override' : ''})`;
|
|
240
|
+
layoutTitle.className = 'e8si-sec';
|
|
241
|
+
inspHost.appendChild(layoutTitle);
|
|
242
|
+
if (!rule) {
|
|
243
|
+
const none = document.createElement('div');
|
|
244
|
+
none.className = 'e8si-empty';
|
|
245
|
+
none.textContent = '(no rule — parent-relative identity)';
|
|
246
|
+
inspHost.appendChild(none);
|
|
247
|
+
}
|
|
248
|
+
else {
|
|
249
|
+
for (const spec of layoutFieldSpecs(rule)) {
|
|
250
|
+
const wrap = field(spec.label);
|
|
251
|
+
if (spec.kind === 'readonly') {
|
|
252
|
+
const span = document.createElement('span');
|
|
253
|
+
span.className = 'ro';
|
|
254
|
+
span.textContent = String(spec.value);
|
|
255
|
+
wrap.appendChild(span);
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
const input = document.createElement('input');
|
|
259
|
+
input.type = spec.kind === 'number' ? 'number' : 'text';
|
|
260
|
+
if (spec.step !== undefined)
|
|
261
|
+
input.step = String(spec.step);
|
|
262
|
+
input.value = String(spec.value);
|
|
263
|
+
input.addEventListener('change', () => {
|
|
264
|
+
const raw = spec.kind === 'number' ? Number(input.value) : input.value;
|
|
265
|
+
if (spec.kind === 'number' && !Number.isFinite(raw))
|
|
266
|
+
return;
|
|
267
|
+
patchAndRefresh({
|
|
268
|
+
op: 'set-layout',
|
|
269
|
+
id,
|
|
270
|
+
layout: setRulePath(rule, spec.path, raw),
|
|
271
|
+
orientation: override ? orientation : undefined,
|
|
272
|
+
});
|
|
273
|
+
});
|
|
274
|
+
wrap.appendChild(input);
|
|
275
|
+
}
|
|
276
|
+
inspHost.appendChild(wrap);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
// Props — base props, schema-less control inference.
|
|
280
|
+
const props = node.props ?? {};
|
|
281
|
+
const propKeys = Object.keys(props);
|
|
282
|
+
if (propKeys.length > 0) {
|
|
283
|
+
const propsTitle = document.createElement('h3');
|
|
284
|
+
propsTitle.textContent = 'Props';
|
|
285
|
+
propsTitle.className = 'e8si-sec';
|
|
286
|
+
inspHost.appendChild(propsTitle);
|
|
287
|
+
for (const key of propKeys) {
|
|
288
|
+
const value = props[key];
|
|
289
|
+
const kind = propControlKind(value);
|
|
290
|
+
if (kind === 'json') {
|
|
291
|
+
const wrap = field(key);
|
|
292
|
+
inspHost.appendChild(wrap);
|
|
293
|
+
const area = document.createElement('textarea');
|
|
294
|
+
area.className = 'e8si-json';
|
|
295
|
+
area.value = JSON.stringify(value, null, 1);
|
|
296
|
+
const apply = document.createElement('button');
|
|
297
|
+
apply.className = 'e8si-apply';
|
|
298
|
+
apply.textContent = `apply ${key}`;
|
|
299
|
+
apply.addEventListener('click', () => {
|
|
300
|
+
try {
|
|
301
|
+
patchAndRefresh({ op: 'set-props', id, props: { [key]: JSON.parse(area.value) } });
|
|
302
|
+
}
|
|
303
|
+
catch {
|
|
304
|
+
apply.textContent = `apply ${key} — invalid JSON`;
|
|
305
|
+
}
|
|
306
|
+
});
|
|
307
|
+
inspHost.append(area, apply);
|
|
308
|
+
continue;
|
|
309
|
+
}
|
|
310
|
+
const wrap = field(key);
|
|
311
|
+
if (kind === 'boolean') {
|
|
312
|
+
const input = document.createElement('input');
|
|
313
|
+
input.type = 'checkbox';
|
|
314
|
+
input.checked = value === true;
|
|
315
|
+
input.addEventListener('change', () => patchAndRefresh({ op: 'set-props', id, props: { [key]: input.checked } }));
|
|
316
|
+
wrap.appendChild(input);
|
|
317
|
+
}
|
|
318
|
+
else if (kind === 'color') {
|
|
319
|
+
const color = document.createElement('input');
|
|
320
|
+
color.type = 'color';
|
|
321
|
+
color.value = String(value).slice(0, 7);
|
|
322
|
+
const text = document.createElement('input');
|
|
323
|
+
text.type = 'text';
|
|
324
|
+
text.value = String(value);
|
|
325
|
+
const push = (v) => patchAndRefresh({ op: 'set-props', id, props: { [key]: v } });
|
|
326
|
+
color.addEventListener('input', () => {
|
|
327
|
+
text.value = color.value;
|
|
328
|
+
push(color.value);
|
|
329
|
+
});
|
|
330
|
+
text.addEventListener('change', () => push(text.value));
|
|
331
|
+
wrap.append(color, text);
|
|
332
|
+
}
|
|
333
|
+
else {
|
|
334
|
+
const input = document.createElement('input');
|
|
335
|
+
input.type = kind === 'number' ? 'number' : 'text';
|
|
336
|
+
input.value = String(value);
|
|
337
|
+
input.addEventListener('change', () => {
|
|
338
|
+
const raw = kind === 'number' ? Number(input.value) : input.value;
|
|
339
|
+
if (kind === 'number' && !Number.isFinite(raw))
|
|
340
|
+
return;
|
|
341
|
+
patchAndRefresh({ op: 'set-props', id, props: { [key]: raw } });
|
|
342
|
+
});
|
|
343
|
+
wrap.appendChild(input);
|
|
344
|
+
}
|
|
345
|
+
inspHost.appendChild(wrap);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
};
|
|
349
|
+
const select = (id) => {
|
|
350
|
+
selectedId = id;
|
|
351
|
+
renderTree();
|
|
352
|
+
renderInspector();
|
|
353
|
+
};
|
|
354
|
+
renderTree();
|
|
355
|
+
renderInspector();
|
|
356
|
+
return {
|
|
357
|
+
select,
|
|
358
|
+
selected: () => selectedId,
|
|
359
|
+
refresh() {
|
|
360
|
+
renderTree();
|
|
361
|
+
// Keep the form stable while the user is typing into it after their own edit.
|
|
362
|
+
if (!ownEdit && !inspHost.contains(document.activeElement))
|
|
363
|
+
renderInspector();
|
|
364
|
+
},
|
|
365
|
+
destroy() {
|
|
366
|
+
root.remove();
|
|
367
|
+
},
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
export { createSceneInspector, layoutFieldSpecs, propControlKind, setRulePath };
|
|
372
|
+
//# sourceMappingURL=scene-devtools.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scene-devtools.esm.js","sources":["../src/scene/devtools/helpers.ts","../src/scene/devtools/inspector.ts"],"sourcesContent":[null,null],"names":[],"mappings":"AAAA;AACA;AACA;AAMA;AACM,SAAU,eAAe,CAAC,KAAc,EAAA;IAC5C,QAAQ,OAAO,KAAK;AAClB,QAAA,KAAK,QAAQ;AACX,YAAA,OAAO,QAAQ;AACjB,QAAA,KAAK,SAAS;AACZ,YAAA,OAAO,SAAS;AAClB,QAAA,KAAK,QAAQ;AACX,YAAA,OAAO,2CAA2C,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,OAAO,GAAG,MAAM;AACnF,QAAA;AACE,YAAA,OAAO,MAAM;;AAEnB;AAYA,MAAM,aAAa,GAAG,kDAAkD;AAExE,SAAS,UAAU,CAAC,IAAY,EAAE,KAAa,EAAA;AAC7C,IAAA,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;AAAE,QAAA,OAAO,IAAI;AACvC,IAAA,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;AAAE,QAAA,OAAO,IAAI;AACjE,IAAA,OAAO,CAAC;AACV;AAEA;AACM,SAAU,gBAAgB,CAAC,IAAgB,EAAA;IAC/C,MAAM,GAAG,GAAsB,EAAE;IACjC,MAAM,KAAK,GAAG,CAAC,KAAc,EAAE,IAAY,EAAE,KAAa,KAAU;AAClE,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;QACjF;AAAO,aAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACpC,YAAA,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QAC7G;AAAO,aAAA,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE;YACrC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/D;AAAO,aAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC/B,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,KAAK,CAAC,IAAI,EAAE,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,EAAE,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC;QAC3E;AAAO,aAAA,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7C,YAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;AAAE,gBAAA,KAAK,CAAC,CAAC,EAAE,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,EAAE,GAAG,KAAK,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,CAAC;QACvF;AACF,IAAA,CAAC;AACD,IAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;AAAE,QAAA,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC;AACvE,IAAA,OAAO,GAAG;AACZ;AAEA;SACgB,WAAW,CAAC,IAAgB,EAAE,IAAY,EAAE,KAAc,EAAA;AACxE,IAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAA4B;IACzE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;IAC7B,IAAI,MAAM,GAAwC,KAAK;AACvD,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACzC,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;QACpB,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;QACtE,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE;YAC7C,MAAM,KAAK,GAA4B,EAAE;AACzC,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;gBAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK;;AACjD,gBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK;YACxB,MAAM,GAAG,KAAK;QAChB;aAAO;YACL,MAAM,GAAG,IAA2C;QACtD;IACF;IACA,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACpC,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK;;AAClD,QAAA,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK;AACzB,IAAA,OAAO,KAA8B;AACvC;;ACjFA;AACA;AACA;AACA;AACA;AAwBA,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CAwBb;AAEK,SAAU,oBAAoB,CAAC,IAA2B,EAAA;AAC9D,IAAA,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI;IAClC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,KAAK;AAClD,IAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,KAAK,MAAmB,WAAW,CAAC;IAE9E,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC1C,IAAA,IAAI,CAAC,SAAS,GAAG,MAAM;IACvB,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC7C,IAAA,KAAK,CAAC,WAAW,GAAG,KAAK;AACzB,IAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;IACvB,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC9C,IAAA,QAAQ,CAAC,SAAS,GAAG,WAAW;IAChC,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC9C,IAAA,QAAQ,CAAC,SAAS,GAAG,WAAW;AAChC,IAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC/B,IAAA,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC;IAE3B,IAAI,UAAU,GAAkB,IAAI;;;IAGpC,IAAI,OAAO,GAAG,KAAK;AAEnB,IAAA,MAAM,QAAQ,GAAG,CAAC,EAAU,KAAI;AAC9B,QAAA,MAAM,IAAI,GAAG,CAAC,CAAc,KAC1B,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;AACtD,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AAC5B,IAAA,CAAC;AAED,IAAA,MAAM,OAAO,GAAG,CAAC,EAAU,KAA2B;AACpD,QAAA,MAAM,IAAI,GAAG,CAAC,CAAY,KAA2B;AACnD,YAAA,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE;AAAE,gBAAA,OAAO,CAAC;YACzB,KAAK,MAAM,KAAK,IAAI,CAAC,CAAC,QAAQ,IAAI,EAAE,EAAE;AACpC,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;AACvB,gBAAA,IAAI,GAAG;AAAE,oBAAA,OAAO,GAAG;YACrB;AACA,YAAA,OAAO,SAAS;AAClB,QAAA,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;AAChC,IAAA,CAAC;AAED,IAAA,MAAM,eAAe,GAAG,CAAC,KAAiB,KAAU;QAClD,OAAO,GAAG,IAAI;QACd,UAAU,CAAC,KAAK,CAAC;QACjB,OAAO,GAAG,KAAK;AACf,QAAA,UAAU,EAAE;AACd,IAAA,CAAC;;IAGD,MAAM,UAAU,GAAG,MAAW;AAC5B,QAAA,QAAQ,CAAC,WAAW,GAAG,EAAE;QACzB,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC;AAC1C,QAAA,KAAK,CAAC,WAAW,GAAG,OAAO;AAC3B,QAAA,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC;AAC3B,QAAA,MAAM,SAAS,GAAG,CAAC,IAAiB,EAAE,KAAa,KAAU;YAC3D,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACzC,YAAA,GAAG,CAAC,SAAS,GAAG,CAAA,QAAA,EAAW,IAAI,CAAC,EAAE,KAAK,UAAU,GAAG,MAAM,GAAG,EAAE,CAAA,EAAG,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,MAAM,EAAE;AAC9F,YAAA,GAAG,CAAC,KAAK,CAAC,WAAW,GAAG,CAAA,EAAG,EAAE,GAAG,KAAK,GAAG,EAAE,CAAA,EAAA,CAAI;YAC9C,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AACzC,YAAA,EAAE,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE;YACxB,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC3C,YAAA,IAAI,CAAC,SAAS,GAAG,GAAG;YACpB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,GAAG,CAAA,EAAG,IAAI,CAAC,IAAI,CAAA,GAAA,EAAM,IAAI,CAAC,IAAI,CAAA,CAAE,GAAG,IAAI,CAAC,IAAI;AACxE,YAAA,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC;AACpB,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE;gBACd,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC5C,gBAAA,KAAK,CAAC,SAAS,GAAG,YAAY;AAC9B,gBAAA,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK;AAC9B,gBAAA,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC;YACxB;AACA,YAAA,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAK;AACjC,gBAAA,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBACf,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC;AAC1B,YAAA,CAAC,CAAC;AACF,YAAA,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC;AACzB,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;AAC/D,QAAA,CAAC;QACD,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC7B,IAAA,CAAC;;AAGD,IAAA,MAAM,KAAK,GAAG,CAAC,SAAiB,KAAoB;QAClD,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC1C,QAAA,IAAI,CAAC,SAAS,GAAG,YAAY;QAC7B,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC7C,QAAA,KAAK,CAAC,WAAW,GAAG,SAAS;AAC7B,QAAA,KAAK,CAAC,KAAK,GAAG,SAAS;AACvB,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACvB,QAAA,OAAO,IAAI;AACb,IAAA,CAAC;IAED,MAAM,eAAe,GAAG,MAAW;AACjC,QAAA,QAAQ,CAAC,WAAW,GAAG,EAAE;QACzB,IAAI,CAAC,UAAU,EAAE;YACf,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC3C,YAAA,KAAK,CAAC,SAAS,GAAG,YAAY;AAC9B,YAAA,KAAK,CAAC,WAAW,GAAG,4DAA4D;AAChF,YAAA,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC;YAC3B;QACF;QACA,MAAM,EAAE,GAAG,UAAU;AACrB,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,EAAE,CAAC;AACxB,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO;YAAE;QAEvB,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC1C,QAAA,IAAI,CAAC,SAAS,GAAG,WAAW;AAC5B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;QACnB,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC1C,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACrB,IAAI,CAAC,WAAW,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,EAAE,EAAE;QAChC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC1C,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM;QACvB,IAAI,CAAC,WAAW,GAAG,CAAA,EAAG,IAAI,CAAC,IAAI,CAAA,EAAG,IAAI,CAAC,IAAI,GAAG,CAAA,GAAA,EAAM,IAAI,CAAC,IAAI,CAAA,CAAE,GAAG,EAAE,CAAA,EAAG,IAAI,CAAC,UAAU,GAAG,CAAA,IAAA,EAAO,IAAI,CAAC,UAAU,CAAA,CAAE,GAAG,EAAE,CAAA,EAAG,IAAI,CAAC,WAAW,GAAG,CAAA,SAAA,EAAY,IAAI,CAAC,WAAW,CAAA,CAAE,GAAG,EAAE,CAAA,CAAE;AACjL,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;AACvB,QAAA,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC;;AAG1B,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;AACjD,QAAA,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACzB,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC;YAC3B,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;YAC/C,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,EAAE;gBACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC/C,gBAAA,MAAM,CAAC,KAAK,GAAG,IAAI;AACnB,gBAAA,MAAM,CAAC,WAAW,GAAG,IAAI;AACzB,gBAAA,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC;YAC5B;YACA,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,GAAG;AACnC,YAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAK;gBACrC,eAAe,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,KAAK,GAAG,GAAG,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;AAC7F,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;AACxB,YAAA,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC;QAC5B;;AAGA,QAAA,MAAM,WAAW,GAAG,cAAc,EAAE;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,EAAE,MAAM;AACvD,QAAA,MAAM,IAAI,GAAG,QAAQ,IAAI,IAAI,CAAC,MAAM;QACpC,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC;AAChD,QAAA,WAAW,CAAC,WAAW,GAAG,CAAA,QAAA,EAAW,WAAW,GAAG,QAAQ,GAAG,WAAW,GAAG,EAAE,GAAG;AACjF,QAAA,WAAW,CAAC,SAAS,GAAG,UAAU;AAClC,QAAA,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC;QACjC,IAAI,CAAC,IAAI,EAAE;YACT,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC1C,YAAA,IAAI,CAAC,SAAS,GAAG,YAAY;AAC7B,YAAA,IAAI,CAAC,WAAW,GAAG,sCAAsC;AACzD,YAAA,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC;QAC5B;aAAO;YACL,KAAK,MAAM,IAAI,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE;gBACzC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;AAC9B,gBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE;oBAC5B,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC3C,oBAAA,IAAI,CAAC,SAAS,GAAG,IAAI;oBACrB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AACrC,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;gBACxB;qBAAO;oBACL,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC7C,oBAAA,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,QAAQ,GAAG,QAAQ,GAAG,MAAM;AACvD,oBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;wBAAE,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;oBAC3D,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AAChC,oBAAA,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAK;wBACpC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,KAAK,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK;AACtE,wBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAa,CAAC;4BAAE;AAC/D,wBAAA,eAAe,CAAC;AACd,4BAAA,EAAE,EAAE,YAAY;4BAChB,EAAE;4BACF,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC;4BACzC,WAAW,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS;AAChD,yBAAA,CAAC;AACJ,oBAAA,CAAC,CAAC;AACF,oBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;gBACzB;AACA,gBAAA,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC;YAC5B;QACF;;AAGA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE;QAC9B,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AACnC,QAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YACvB,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC;AAC/C,YAAA,UAAU,CAAC,WAAW,GAAG,OAAO;AAChC,YAAA,UAAU,CAAC,SAAS,GAAG,UAAU;AACjC,YAAA,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC;AAChC,YAAA,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE;AAC1B,gBAAA,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;AACxB,gBAAA,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC;AACnC,gBAAA,IAAI,IAAI,KAAK,MAAM,EAAE;AACnB,oBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC;AACvB,oBAAA,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC;oBAC1B,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC;AAC/C,oBAAA,IAAI,CAAC,SAAS,GAAG,WAAW;AAC5B,oBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;oBAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC9C,oBAAA,KAAK,CAAC,SAAS,GAAG,YAAY;AAC9B,oBAAA,KAAK,CAAC,WAAW,GAAG,CAAA,MAAA,EAAS,GAAG,EAAE;AAClC,oBAAA,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAK;AACnC,wBAAA,IAAI;4BACF,eAAe,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;wBACpF;AAAE,wBAAA,MAAM;AACN,4BAAA,KAAK,CAAC,WAAW,GAAG,CAAA,MAAA,EAAS,GAAG,iBAAiB;wBACnD;AACF,oBAAA,CAAC,CAAC;AACF,oBAAA,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;oBAC5B;gBACF;AACA,gBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC;AACvB,gBAAA,IAAI,IAAI,KAAK,SAAS,EAAE;oBACtB,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC7C,oBAAA,KAAK,CAAC,IAAI,GAAG,UAAU;AACvB,oBAAA,KAAK,CAAC,OAAO,GAAG,KAAK,KAAK,IAAI;AAC9B,oBAAA,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,eAAe,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACjH,oBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;gBACzB;AAAO,qBAAA,IAAI,IAAI,KAAK,OAAO,EAAE;oBAC3B,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC7C,oBAAA,KAAK,CAAC,IAAI,GAAG,OAAO;AACpB,oBAAA,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;oBACvC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC5C,oBAAA,IAAI,CAAC,IAAI,GAAG,MAAM;AAClB,oBAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;oBAC1B,MAAM,IAAI,GAAG,CAAC,CAAS,KAAW,eAAe,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC;AAC/F,oBAAA,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAK;AACnC,wBAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK;AACxB,wBAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AACnB,oBAAA,CAAC,CAAC;AACF,oBAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvD,oBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC;gBAC1B;qBAAO;oBACL,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC7C,oBAAA,KAAK,CAAC,IAAI,GAAG,IAAI,KAAK,QAAQ,GAAG,QAAQ,GAAG,MAAM;AAClD,oBAAA,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AAC3B,oBAAA,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAK;wBACpC,MAAM,GAAG,GAAG,IAAI,KAAK,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK;wBACjE,IAAI,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAa,CAAC;4BAAE;AAC1D,wBAAA,eAAe,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,EAAE,CAAC;AACjE,oBAAA,CAAC,CAAC;AACF,oBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;gBACzB;AACA,gBAAA,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC;YAC5B;QACF;AACF,IAAA,CAAC;AAED,IAAA,MAAM,MAAM,GAAG,CAAC,EAAiB,KAAU;QACzC,UAAU,GAAG,EAAE;AACf,QAAA,UAAU,EAAE;AACZ,QAAA,eAAe,EAAE;AACnB,IAAA,CAAC;AAED,IAAA,UAAU,EAAE;AACZ,IAAA,eAAe,EAAE;IAEjB,OAAO;QACL,MAAM;AACN,QAAA,QAAQ,EAAE,MAAM,UAAU;QAC1B,OAAO,GAAA;AACL,YAAA,UAAU,EAAE;;YAEZ,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC;AAAE,gBAAA,eAAe,EAAE;QAC/E,CAAC;QACD,OAAO,GAAA;YACL,IAAI,CAAC,MAAM,EAAE;QACf,CAAC;KACF;AACH;;;;"}
|