@ifc-lite/geometry 1.16.2 → 1.16.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/coordinate-handler.d.ts +9 -0
- package/dist/coordinate-handler.d.ts.map +1 -1
- package/dist/coordinate-handler.js +32 -30
- package/dist/coordinate-handler.js.map +1 -1
- package/dist/ifc-lite-mesh-collector.js.map +1 -1
- package/dist/index.d.ts +26 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +453 -34
- package/dist/index.js.map +1 -1
- package/dist/native-bridge.d.ts +9 -2
- package/dist/native-bridge.d.ts.map +1 -1
- package/dist/native-bridge.js +490 -16
- package/dist/native-bridge.js.map +1 -1
- package/dist/platform-bridge.d.ts +63 -4
- package/dist/platform-bridge.d.ts.map +1 -1
- package/dist/platform-bridge.js.map +1 -1
- package/dist/types.d.ts +5 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/wasm-bridge.d.ts +3 -2
- package/dist/wasm-bridge.d.ts.map +1 -1
- package/dist/wasm-bridge.js +9 -2
- package/dist/wasm-bridge.js.map +1 -1
- package/package.json +3 -3
package/dist/native-bridge.js
CHANGED
|
@@ -1,6 +1,26 @@
|
|
|
1
1
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
2
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
const NATIVE_CACHE_PREFETCH_WINDOW = 2;
|
|
5
|
+
const MAX_DEFERRED_BATCHES_PER_DRAIN = 4;
|
|
6
|
+
const MAX_DEFERRED_MESHES_PER_DRAIN = 8192;
|
|
7
|
+
const MAX_DEFERRED_DRAIN_MS = 10;
|
|
8
|
+
function yieldToEventLoop() {
|
|
9
|
+
const maybeScheduler = globalThis.scheduler;
|
|
10
|
+
if (typeof maybeScheduler?.yield === 'function') {
|
|
11
|
+
return maybeScheduler.yield();
|
|
12
|
+
}
|
|
13
|
+
return new Promise((resolve) => {
|
|
14
|
+
const channel = new MessageChannel();
|
|
15
|
+
channel.port1.onmessage = () => resolve();
|
|
16
|
+
channel.port2.postMessage(null);
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
function sleep(ms) {
|
|
20
|
+
return new Promise((resolve) => {
|
|
21
|
+
globalThis.setTimeout(resolve, ms);
|
|
22
|
+
});
|
|
23
|
+
}
|
|
4
24
|
/**
|
|
5
25
|
* Native Tauri bridge for desktop apps
|
|
6
26
|
*
|
|
@@ -36,13 +56,140 @@ export class NativeBridge {
|
|
|
36
56
|
isInitialized() {
|
|
37
57
|
return this.initialized;
|
|
38
58
|
}
|
|
59
|
+
toNativeBuffer(content) {
|
|
60
|
+
if (content instanceof Uint8Array) {
|
|
61
|
+
return Array.from(content);
|
|
62
|
+
}
|
|
63
|
+
const encoder = new TextEncoder();
|
|
64
|
+
return Array.from(encoder.encode(content));
|
|
65
|
+
}
|
|
66
|
+
async drainDeferredBatches(pendingBatches, options, streamStartTime) {
|
|
67
|
+
let drainedBatchCount = 0;
|
|
68
|
+
let drainedMeshCount = 0;
|
|
69
|
+
let drainStartedAt = performance.now();
|
|
70
|
+
while (pendingBatches.length > 0) {
|
|
71
|
+
const next = pendingBatches.shift();
|
|
72
|
+
const batch = next.type === 'mesh-array'
|
|
73
|
+
? {
|
|
74
|
+
meshes: next.meshes.map(convertNativeMesh),
|
|
75
|
+
progress: {
|
|
76
|
+
processed: next.progress.processed,
|
|
77
|
+
total: next.progress.total,
|
|
78
|
+
currentType: next.progress.currentType,
|
|
79
|
+
},
|
|
80
|
+
nativeTelemetry: convertNativeBatchTelemetry(next.telemetry, performance.now() - streamStartTime),
|
|
81
|
+
}
|
|
82
|
+
: {
|
|
83
|
+
meshes: convertPackedNativeBatch(next.payload),
|
|
84
|
+
progress: {
|
|
85
|
+
processed: next.payload.progress.processed,
|
|
86
|
+
total: next.payload.progress.total,
|
|
87
|
+
currentType: next.payload.progress.currentType,
|
|
88
|
+
},
|
|
89
|
+
nativeTelemetry: convertNativeBatchTelemetry(next.payload.telemetry, performance.now() - streamStartTime),
|
|
90
|
+
};
|
|
91
|
+
options.onBatch?.(batch);
|
|
92
|
+
drainedBatchCount += 1;
|
|
93
|
+
drainedMeshCount += batch.meshes.length;
|
|
94
|
+
if (pendingBatches.length > 0) {
|
|
95
|
+
const shouldYield = drainedBatchCount >= MAX_DEFERRED_BATCHES_PER_DRAIN ||
|
|
96
|
+
drainedMeshCount >= MAX_DEFERRED_MESHES_PER_DRAIN ||
|
|
97
|
+
performance.now() - drainStartedAt >= MAX_DEFERRED_DRAIN_MS;
|
|
98
|
+
if (shouldYield) {
|
|
99
|
+
await yieldToEventLoop();
|
|
100
|
+
drainedBatchCount = 0;
|
|
101
|
+
drainedMeshCount = 0;
|
|
102
|
+
drainStartedAt = performance.now();
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
async processEventDrivenNativeStream(command, args, options, streamStartTime) {
|
|
108
|
+
if (!this.listen) {
|
|
109
|
+
throw new Error(`Event API unavailable, ${command} requires Tauri event support`);
|
|
110
|
+
}
|
|
111
|
+
const pendingBatches = [];
|
|
112
|
+
let drainPromise = null;
|
|
113
|
+
let drainError = null;
|
|
114
|
+
const scheduleDrain = () => {
|
|
115
|
+
if (drainPromise)
|
|
116
|
+
return;
|
|
117
|
+
drainPromise = (async () => {
|
|
118
|
+
try {
|
|
119
|
+
await this.drainDeferredBatches(pendingBatches, options, streamStartTime);
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
drainError = error instanceof Error ? error : new Error(String(error));
|
|
123
|
+
}
|
|
124
|
+
finally {
|
|
125
|
+
drainPromise = null;
|
|
126
|
+
if (pendingBatches.length > 0 && !drainError) {
|
|
127
|
+
scheduleDrain();
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
})();
|
|
131
|
+
};
|
|
132
|
+
const unlisten = await this.listen('geometry-batch', (event) => {
|
|
133
|
+
pendingBatches.push({
|
|
134
|
+
type: 'mesh-array',
|
|
135
|
+
meshes: event.payload.meshes,
|
|
136
|
+
progress: event.payload.progress,
|
|
137
|
+
telemetry: event.payload.telemetry,
|
|
138
|
+
});
|
|
139
|
+
scheduleDrain();
|
|
140
|
+
});
|
|
141
|
+
const unlistenPacked = await this.listen('geometry-packed-batch', (event) => {
|
|
142
|
+
pendingBatches.push({
|
|
143
|
+
type: 'packed',
|
|
144
|
+
payload: event.payload,
|
|
145
|
+
});
|
|
146
|
+
scheduleDrain();
|
|
147
|
+
});
|
|
148
|
+
const unlistenColorUpdate = await this.listen('geometry-color-update', (event) => {
|
|
149
|
+
const updates = new Map();
|
|
150
|
+
for (const entry of event.payload.updates) {
|
|
151
|
+
updates.set(entry.expressId, entry.color);
|
|
152
|
+
}
|
|
153
|
+
if (updates.size > 0) {
|
|
154
|
+
options.onColorUpdate?.(updates);
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
try {
|
|
158
|
+
const stats = await this.invoke(command, args);
|
|
159
|
+
const result = {
|
|
160
|
+
totalMeshes: stats.totalMeshes,
|
|
161
|
+
totalVertices: stats.totalVertices,
|
|
162
|
+
totalTriangles: stats.totalTriangles,
|
|
163
|
+
parseTimeMs: stats.parseTimeMs,
|
|
164
|
+
entityScanTimeMs: stats.entityScanTimeMs,
|
|
165
|
+
lookupTimeMs: stats.lookupTimeMs,
|
|
166
|
+
preprocessTimeMs: stats.preprocessTimeMs,
|
|
167
|
+
geometryTimeMs: stats.geometryTimeMs,
|
|
168
|
+
totalTimeMs: stats.totalTimeMs,
|
|
169
|
+
firstChunkReadyTimeMs: stats.firstChunkReadyTimeMs,
|
|
170
|
+
firstChunkPackTimeMs: stats.firstChunkPackTimeMs,
|
|
171
|
+
firstChunkEmittedTimeMs: stats.firstChunkEmittedTimeMs,
|
|
172
|
+
firstChunkEmitTimeMs: stats.firstChunkEmitTimeMs,
|
|
173
|
+
};
|
|
174
|
+
while (drainPromise) {
|
|
175
|
+
await drainPromise;
|
|
176
|
+
}
|
|
177
|
+
if (drainError) {
|
|
178
|
+
throw drainError;
|
|
179
|
+
}
|
|
180
|
+
return result;
|
|
181
|
+
}
|
|
182
|
+
finally {
|
|
183
|
+
unlisten();
|
|
184
|
+
unlistenPacked();
|
|
185
|
+
unlistenColorUpdate();
|
|
186
|
+
}
|
|
187
|
+
}
|
|
39
188
|
async processGeometry(content) {
|
|
40
189
|
if (!this.initialized || !this.invoke) {
|
|
41
190
|
await this.init();
|
|
42
191
|
}
|
|
43
|
-
|
|
44
|
-
const encoder = new TextEncoder();
|
|
45
|
-
const buffer = Array.from(encoder.encode(content));
|
|
192
|
+
const buffer = this.toNativeBuffer(content);
|
|
46
193
|
// Call native Rust command
|
|
47
194
|
const result = await this.invoke('get_geometry', { buffer });
|
|
48
195
|
// Convert native format to TypeScript format
|
|
@@ -55,6 +202,18 @@ export class NativeBridge {
|
|
|
55
202
|
coordinateInfo,
|
|
56
203
|
};
|
|
57
204
|
}
|
|
205
|
+
async processGeometryPath(path) {
|
|
206
|
+
if (!this.initialized || !this.invoke) {
|
|
207
|
+
await this.init();
|
|
208
|
+
}
|
|
209
|
+
const result = await this.invoke('get_geometry_from_path', { path });
|
|
210
|
+
return {
|
|
211
|
+
meshes: result.meshes.map(convertNativeMesh),
|
|
212
|
+
totalVertices: result.totalVertices,
|
|
213
|
+
totalTriangles: result.totalTriangles,
|
|
214
|
+
coordinateInfo: convertNativeCoordinateInfo(result.coordinateInfo),
|
|
215
|
+
};
|
|
216
|
+
}
|
|
58
217
|
async processGeometryStreaming(content, options) {
|
|
59
218
|
if (!this.initialized || !this.invoke) {
|
|
60
219
|
await this.init();
|
|
@@ -68,7 +227,15 @@ export class NativeBridge {
|
|
|
68
227
|
totalVertices: result.totalVertices,
|
|
69
228
|
totalTriangles: result.totalTriangles,
|
|
70
229
|
parseTimeMs: 0,
|
|
230
|
+
entityScanTimeMs: 0,
|
|
231
|
+
lookupTimeMs: 0,
|
|
232
|
+
preprocessTimeMs: 0,
|
|
71
233
|
geometryTimeMs: 0,
|
|
234
|
+
totalTimeMs: 0,
|
|
235
|
+
firstChunkReadyTimeMs: 0,
|
|
236
|
+
firstChunkPackTimeMs: 0,
|
|
237
|
+
firstChunkEmittedTimeMs: 0,
|
|
238
|
+
firstChunkEmitTimeMs: 0,
|
|
72
239
|
};
|
|
73
240
|
// Emit single batch with all meshes
|
|
74
241
|
options.onBatch?.({
|
|
@@ -78,20 +245,53 @@ export class NativeBridge {
|
|
|
78
245
|
options.onComplete?.(stats);
|
|
79
246
|
return stats;
|
|
80
247
|
}
|
|
81
|
-
|
|
82
|
-
const
|
|
83
|
-
const
|
|
84
|
-
|
|
248
|
+
const buffer = this.toNativeBuffer(content);
|
|
249
|
+
const streamStartTime = performance.now();
|
|
250
|
+
const pendingBatches = [];
|
|
251
|
+
let drainPromise = null;
|
|
252
|
+
let drainError = null;
|
|
253
|
+
const scheduleDrain = () => {
|
|
254
|
+
if (drainPromise)
|
|
255
|
+
return;
|
|
256
|
+
drainPromise = (async () => {
|
|
257
|
+
try {
|
|
258
|
+
await this.drainDeferredBatches(pendingBatches, options, streamStartTime);
|
|
259
|
+
}
|
|
260
|
+
catch (error) {
|
|
261
|
+
drainError = error instanceof Error ? error : new Error(String(error));
|
|
262
|
+
}
|
|
263
|
+
finally {
|
|
264
|
+
drainPromise = null;
|
|
265
|
+
if (pendingBatches.length > 0 && !drainError) {
|
|
266
|
+
scheduleDrain();
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
})();
|
|
270
|
+
};
|
|
85
271
|
const unlisten = await this.listen('geometry-batch', (event) => {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
272
|
+
pendingBatches.push({
|
|
273
|
+
type: 'mesh-array',
|
|
274
|
+
meshes: event.payload.meshes,
|
|
275
|
+
progress: event.payload.progress,
|
|
276
|
+
telemetry: event.payload.telemetry,
|
|
277
|
+
});
|
|
278
|
+
scheduleDrain();
|
|
279
|
+
});
|
|
280
|
+
const unlistenPacked = await this.listen('geometry-packed-batch', (event) => {
|
|
281
|
+
pendingBatches.push({
|
|
282
|
+
type: 'packed',
|
|
283
|
+
payload: event.payload,
|
|
284
|
+
});
|
|
285
|
+
scheduleDrain();
|
|
286
|
+
});
|
|
287
|
+
const unlistenColorUpdate = await this.listen('geometry-color-update', (event) => {
|
|
288
|
+
const updates = new Map();
|
|
289
|
+
for (const entry of event.payload.updates) {
|
|
290
|
+
updates.set(entry.expressId, entry.color);
|
|
291
|
+
}
|
|
292
|
+
if (updates.size > 0) {
|
|
293
|
+
options.onColorUpdate?.(updates);
|
|
294
|
+
}
|
|
95
295
|
});
|
|
96
296
|
try {
|
|
97
297
|
// Call native streaming command
|
|
@@ -101,8 +301,22 @@ export class NativeBridge {
|
|
|
101
301
|
totalVertices: stats.totalVertices,
|
|
102
302
|
totalTriangles: stats.totalTriangles,
|
|
103
303
|
parseTimeMs: stats.parseTimeMs,
|
|
304
|
+
entityScanTimeMs: stats.entityScanTimeMs,
|
|
305
|
+
lookupTimeMs: stats.lookupTimeMs,
|
|
306
|
+
preprocessTimeMs: stats.preprocessTimeMs,
|
|
104
307
|
geometryTimeMs: stats.geometryTimeMs,
|
|
308
|
+
totalTimeMs: stats.totalTimeMs,
|
|
309
|
+
firstChunkReadyTimeMs: stats.firstChunkReadyTimeMs,
|
|
310
|
+
firstChunkPackTimeMs: stats.firstChunkPackTimeMs,
|
|
311
|
+
firstChunkEmittedTimeMs: stats.firstChunkEmittedTimeMs,
|
|
312
|
+
firstChunkEmitTimeMs: stats.firstChunkEmitTimeMs,
|
|
105
313
|
};
|
|
314
|
+
while (drainPromise) {
|
|
315
|
+
await drainPromise;
|
|
316
|
+
}
|
|
317
|
+
if (drainError) {
|
|
318
|
+
throw drainError;
|
|
319
|
+
}
|
|
106
320
|
options.onComplete?.(result);
|
|
107
321
|
return result;
|
|
108
322
|
}
|
|
@@ -113,8 +327,147 @@ export class NativeBridge {
|
|
|
113
327
|
finally {
|
|
114
328
|
// Clean up event listener
|
|
115
329
|
unlisten();
|
|
330
|
+
unlistenPacked();
|
|
331
|
+
unlistenColorUpdate();
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
async processGeometryStreamingPath(path, options, cacheKey) {
|
|
335
|
+
if (!this.initialized || !this.invoke) {
|
|
336
|
+
await this.init();
|
|
337
|
+
}
|
|
338
|
+
const streamStartTime = performance.now();
|
|
339
|
+
if (!cacheKey) {
|
|
340
|
+
throw new Error('Packed shard path streaming requires a cache key');
|
|
341
|
+
}
|
|
342
|
+
return this.processPackedShardPathStream(path, cacheKey, options, streamStartTime);
|
|
343
|
+
}
|
|
344
|
+
async processGeometryStreamingCache(cacheKey, options) {
|
|
345
|
+
if (!this.initialized || !this.invoke) {
|
|
346
|
+
await this.init();
|
|
347
|
+
}
|
|
348
|
+
const streamStartTime = performance.now();
|
|
349
|
+
try {
|
|
350
|
+
const manifest = await this.invoke('get_native_geometry_cache_manifest', { cacheKey });
|
|
351
|
+
if (!manifest) {
|
|
352
|
+
throw new Error(`Native geometry cache manifest missing for ${cacheKey}`);
|
|
353
|
+
}
|
|
354
|
+
let processedMeshes = 0;
|
|
355
|
+
for (let shardIndex = 0; shardIndex < manifest.shardCount; shardIndex += 1) {
|
|
356
|
+
const shardPayload = await this.invoke('get_native_geometry_cache_packed_shard', { cacheKey, shardIndex });
|
|
357
|
+
const batch = decodePackedGeometryCacheShard(shardPayload, performance.now() - streamStartTime, shardIndex + 1);
|
|
358
|
+
processedMeshes = batch.progress.processed;
|
|
359
|
+
options.onBatch?.(batch);
|
|
360
|
+
if (shardIndex + 1 < manifest.shardCount) {
|
|
361
|
+
await yieldToEventLoop();
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
const result = {
|
|
365
|
+
totalMeshes: manifest.totalMeshes,
|
|
366
|
+
totalVertices: manifest.totalVertices,
|
|
367
|
+
totalTriangles: manifest.totalTriangles,
|
|
368
|
+
parseTimeMs: 0,
|
|
369
|
+
entityScanTimeMs: 0,
|
|
370
|
+
lookupTimeMs: 0,
|
|
371
|
+
preprocessTimeMs: 0,
|
|
372
|
+
geometryTimeMs: Math.round(performance.now() - streamStartTime),
|
|
373
|
+
totalTimeMs: Math.round(performance.now() - streamStartTime),
|
|
374
|
+
firstChunkReadyTimeMs: 0,
|
|
375
|
+
firstChunkPackTimeMs: 0,
|
|
376
|
+
firstChunkEmittedTimeMs: 0,
|
|
377
|
+
firstChunkEmitTimeMs: 0,
|
|
378
|
+
};
|
|
379
|
+
if (processedMeshes !== manifest.totalMeshes) {
|
|
380
|
+
console.warn(`[NativeBridge] Cached packed shard stream mesh mismatch for ${cacheKey}: received=${processedMeshes} expected=${manifest.totalMeshes}`);
|
|
381
|
+
}
|
|
382
|
+
options.onComplete?.(result);
|
|
383
|
+
return result;
|
|
384
|
+
}
|
|
385
|
+
catch (error) {
|
|
386
|
+
options.onError?.(error instanceof Error ? error : new Error(String(error)));
|
|
387
|
+
throw error;
|
|
116
388
|
}
|
|
117
389
|
}
|
|
390
|
+
async processPackedShardPathStream(path, cacheKey, options, streamStartTime) {
|
|
391
|
+
const statsPromise = this.invoke('get_geometry_streaming_from_path', {
|
|
392
|
+
path,
|
|
393
|
+
cacheKey,
|
|
394
|
+
preferPackedShards: true,
|
|
395
|
+
});
|
|
396
|
+
let nextShardIndex = 0;
|
|
397
|
+
let lastProgressAt = performance.now();
|
|
398
|
+
let processedMeshes = 0;
|
|
399
|
+
// Event-driven shard notification: Rust emits "native-shard-ready" when
|
|
400
|
+
// a packed shard is written. We resolve immediately instead of sleeping.
|
|
401
|
+
let shardReadyResolve = null;
|
|
402
|
+
const unlistenShardReady = this.listen
|
|
403
|
+
? await this.listen('native-shard-ready', () => {
|
|
404
|
+
if (shardReadyResolve) {
|
|
405
|
+
const resolve = shardReadyResolve;
|
|
406
|
+
shardReadyResolve = null;
|
|
407
|
+
resolve();
|
|
408
|
+
}
|
|
409
|
+
})
|
|
410
|
+
: null;
|
|
411
|
+
function waitForShardOrTimeout(timeoutMs) {
|
|
412
|
+
return new Promise((resolve) => {
|
|
413
|
+
const timer = setTimeout(resolve, timeoutMs);
|
|
414
|
+
shardReadyResolve = () => {
|
|
415
|
+
clearTimeout(timer);
|
|
416
|
+
resolve();
|
|
417
|
+
};
|
|
418
|
+
});
|
|
419
|
+
}
|
|
420
|
+
try {
|
|
421
|
+
while (true) {
|
|
422
|
+
const status = await this.invoke('get_native_geometry_cache_stream_status', { cacheKey });
|
|
423
|
+
if (status?.failed) {
|
|
424
|
+
throw new Error(status.errorMessage ?? `Packed shard stream failed for ${cacheKey}`);
|
|
425
|
+
}
|
|
426
|
+
const readyShardCount = status?.readyShardCount ?? 0;
|
|
427
|
+
// Read ALL ready shards in burst — no yield between reads
|
|
428
|
+
while (nextShardIndex < readyShardCount) {
|
|
429
|
+
const shardPayload = await this.invoke('get_native_geometry_cache_packed_shard', { cacheKey, shardIndex: nextShardIndex });
|
|
430
|
+
const batch = decodePackedGeometryCacheShard(shardPayload, performance.now() - streamStartTime, nextShardIndex + 1);
|
|
431
|
+
processedMeshes = Math.max(processedMeshes, batch.progress.processed);
|
|
432
|
+
lastProgressAt = performance.now();
|
|
433
|
+
options.onBatch?.(batch);
|
|
434
|
+
nextShardIndex += 1;
|
|
435
|
+
}
|
|
436
|
+
if (status?.done && nextShardIndex >= readyShardCount) {
|
|
437
|
+
break;
|
|
438
|
+
}
|
|
439
|
+
if (performance.now() - lastProgressAt > 60_000) {
|
|
440
|
+
throw new Error(`Packed shard path stream stalled for ${cacheKey}: shards=${nextShardIndex}/${readyShardCount} processed=${processedMeshes}`);
|
|
441
|
+
}
|
|
442
|
+
// Wait for shard-ready event from Rust (instant notification) with
|
|
443
|
+
// a short timeout fallback in case events are missed.
|
|
444
|
+
await waitForShardOrTimeout(50);
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
finally {
|
|
448
|
+
if (unlistenShardReady) {
|
|
449
|
+
unlistenShardReady();
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
const stats = await statsPromise;
|
|
453
|
+
const result = {
|
|
454
|
+
totalMeshes: stats.totalMeshes,
|
|
455
|
+
totalVertices: stats.totalVertices,
|
|
456
|
+
totalTriangles: stats.totalTriangles,
|
|
457
|
+
parseTimeMs: stats.parseTimeMs,
|
|
458
|
+
entityScanTimeMs: stats.entityScanTimeMs,
|
|
459
|
+
lookupTimeMs: stats.lookupTimeMs,
|
|
460
|
+
preprocessTimeMs: stats.preprocessTimeMs,
|
|
461
|
+
geometryTimeMs: stats.geometryTimeMs,
|
|
462
|
+
totalTimeMs: stats.totalTimeMs,
|
|
463
|
+
firstChunkReadyTimeMs: stats.firstChunkReadyTimeMs,
|
|
464
|
+
firstChunkPackTimeMs: stats.firstChunkPackTimeMs,
|
|
465
|
+
firstChunkEmittedTimeMs: stats.firstChunkEmittedTimeMs,
|
|
466
|
+
firstChunkEmitTimeMs: stats.firstChunkEmitTimeMs,
|
|
467
|
+
};
|
|
468
|
+
options.onComplete?.(result);
|
|
469
|
+
return result;
|
|
470
|
+
}
|
|
118
471
|
getApi() {
|
|
119
472
|
// Native bridge doesn't expose an API object
|
|
120
473
|
return null;
|
|
@@ -124,12 +477,133 @@ export class NativeBridge {
|
|
|
124
477
|
function convertNativeMesh(native) {
|
|
125
478
|
return {
|
|
126
479
|
expressId: native.expressId,
|
|
480
|
+
ifcType: native.ifcType,
|
|
127
481
|
positions: new Float32Array(native.positions),
|
|
128
482
|
normals: new Float32Array(native.normals),
|
|
129
483
|
indices: new Uint32Array(native.indices),
|
|
130
484
|
color: native.color,
|
|
131
485
|
};
|
|
132
486
|
}
|
|
487
|
+
function convertPackedNativeBatch(native) {
|
|
488
|
+
// Copy each packed numeric array once, then hand meshes cheap subarray views
|
|
489
|
+
// instead of slicing and copying per mesh.
|
|
490
|
+
const positions = Float32Array.from(native.positions);
|
|
491
|
+
const normals = Float32Array.from(native.normals);
|
|
492
|
+
const indices = Uint32Array.from(native.indices);
|
|
493
|
+
return native.meshes.map((mesh) => ({
|
|
494
|
+
expressId: mesh.expressId,
|
|
495
|
+
ifcType: mesh.ifcType,
|
|
496
|
+
positions: positions.subarray(mesh.positionsOffset, mesh.positionsOffset + mesh.positionsLen),
|
|
497
|
+
normals: normals.subarray(mesh.normalsOffset, mesh.normalsOffset + mesh.normalsLen),
|
|
498
|
+
indices: indices.subarray(mesh.indicesOffset, mesh.indicesOffset + mesh.indicesLen),
|
|
499
|
+
color: mesh.color,
|
|
500
|
+
}));
|
|
501
|
+
}
|
|
502
|
+
function toArrayBuffer(payload) {
|
|
503
|
+
if (payload instanceof ArrayBuffer) {
|
|
504
|
+
return payload;
|
|
505
|
+
}
|
|
506
|
+
if (payload instanceof Uint8Array) {
|
|
507
|
+
if (payload.byteOffset === 0
|
|
508
|
+
&& payload.byteLength === payload.buffer.byteLength
|
|
509
|
+
&& payload.buffer instanceof ArrayBuffer) {
|
|
510
|
+
return payload.buffer;
|
|
511
|
+
}
|
|
512
|
+
return payload.slice().buffer;
|
|
513
|
+
}
|
|
514
|
+
if (Array.isArray(payload)) {
|
|
515
|
+
return Uint8Array.from(payload).buffer;
|
|
516
|
+
}
|
|
517
|
+
throw new Error(`Unsupported packed geometry shard payload: ${typeof payload}`);
|
|
518
|
+
}
|
|
519
|
+
function decodePackedGeometryCacheShard(payload, jsReceivedTimeMs, batchSequence) {
|
|
520
|
+
const buffer = toArrayBuffer(payload);
|
|
521
|
+
const header = new Uint32Array(buffer, 0, 8);
|
|
522
|
+
const [magic, version, meshCount, positionsLen, normalsLen, indicesLen, processed, total] = header;
|
|
523
|
+
if (magic !== 0x49464342) {
|
|
524
|
+
throw new Error('Invalid packed geometry cache shard magic');
|
|
525
|
+
}
|
|
526
|
+
if (version !== 1) {
|
|
527
|
+
throw new Error(`Unsupported packed geometry cache shard version: ${version}`);
|
|
528
|
+
}
|
|
529
|
+
const meshRecordWordLength = 11;
|
|
530
|
+
const meshWordOffset = 8;
|
|
531
|
+
const meshTableWords = meshCount * meshRecordWordLength;
|
|
532
|
+
const dataByteOffset = (meshWordOffset + meshTableWords) * Uint32Array.BYTES_PER_ELEMENT;
|
|
533
|
+
const positionsByteLength = positionsLen * Float32Array.BYTES_PER_ELEMENT;
|
|
534
|
+
const normalsByteLength = normalsLen * Float32Array.BYTES_PER_ELEMENT;
|
|
535
|
+
const indicesByteLength = indicesLen * Uint32Array.BYTES_PER_ELEMENT;
|
|
536
|
+
const positionsOffset = dataByteOffset;
|
|
537
|
+
const normalsOffset = positionsOffset + positionsByteLength;
|
|
538
|
+
const indicesOffset = normalsOffset + normalsByteLength;
|
|
539
|
+
const positions = new Float32Array(buffer, positionsOffset, positionsLen);
|
|
540
|
+
const normals = new Float32Array(buffer, normalsOffset, normalsLen);
|
|
541
|
+
const indices = new Uint32Array(buffer, indicesOffset, indicesLen);
|
|
542
|
+
const meshView = new DataView(buffer, meshWordOffset * Uint32Array.BYTES_PER_ELEMENT, meshTableWords * Uint32Array.BYTES_PER_ELEMENT);
|
|
543
|
+
const meshes = [];
|
|
544
|
+
for (let meshIndex = 0; meshIndex < meshCount; meshIndex += 1) {
|
|
545
|
+
const base = meshIndex * meshRecordWordLength * Uint32Array.BYTES_PER_ELEMENT;
|
|
546
|
+
const expressId = meshView.getUint32(base, true);
|
|
547
|
+
const positionsOffsetWords = meshView.getUint32(base + 4, true);
|
|
548
|
+
const positionsLengthWords = meshView.getUint32(base + 8, true);
|
|
549
|
+
const normalsOffsetWords = meshView.getUint32(base + 12, true);
|
|
550
|
+
const normalsLengthWords = meshView.getUint32(base + 16, true);
|
|
551
|
+
const indicesOffsetWords = meshView.getUint32(base + 20, true);
|
|
552
|
+
const indicesLengthWords = meshView.getUint32(base + 24, true);
|
|
553
|
+
const color = [
|
|
554
|
+
meshView.getFloat32(base + 28, true),
|
|
555
|
+
meshView.getFloat32(base + 32, true),
|
|
556
|
+
meshView.getFloat32(base + 36, true),
|
|
557
|
+
meshView.getFloat32(base + 40, true),
|
|
558
|
+
];
|
|
559
|
+
meshes.push({
|
|
560
|
+
expressId,
|
|
561
|
+
positions: positions.subarray(positionsOffsetWords, positionsOffsetWords + positionsLengthWords),
|
|
562
|
+
normals: normals.subarray(normalsOffsetWords, normalsOffsetWords + normalsLengthWords),
|
|
563
|
+
indices: indices.subarray(indicesOffsetWords, indicesOffsetWords + indicesLengthWords),
|
|
564
|
+
color,
|
|
565
|
+
});
|
|
566
|
+
}
|
|
567
|
+
return {
|
|
568
|
+
meshes,
|
|
569
|
+
progress: {
|
|
570
|
+
processed,
|
|
571
|
+
total,
|
|
572
|
+
currentType: 'cached',
|
|
573
|
+
},
|
|
574
|
+
nativeTelemetry: {
|
|
575
|
+
batchSequence,
|
|
576
|
+
payloadKind: 'packed-cache-shard',
|
|
577
|
+
meshCount,
|
|
578
|
+
positionsLen,
|
|
579
|
+
normalsLen,
|
|
580
|
+
indicesLen,
|
|
581
|
+
chunkReadyTimeMs: 0,
|
|
582
|
+
packTimeMs: 0,
|
|
583
|
+
emitTimeMs: 0,
|
|
584
|
+
emittedTimeMs: 0,
|
|
585
|
+
jsReceivedTimeMs,
|
|
586
|
+
},
|
|
587
|
+
};
|
|
588
|
+
}
|
|
589
|
+
function convertNativeBatchTelemetry(telemetry, jsReceivedTimeMs) {
|
|
590
|
+
if (!telemetry) {
|
|
591
|
+
return undefined;
|
|
592
|
+
}
|
|
593
|
+
return {
|
|
594
|
+
batchSequence: telemetry.batchSequence,
|
|
595
|
+
payloadKind: telemetry.payloadKind,
|
|
596
|
+
meshCount: telemetry.meshCount,
|
|
597
|
+
positionsLen: telemetry.positionsLen,
|
|
598
|
+
normalsLen: telemetry.normalsLen,
|
|
599
|
+
indicesLen: telemetry.indicesLen,
|
|
600
|
+
chunkReadyTimeMs: telemetry.chunkReadyTimeMs,
|
|
601
|
+
packTimeMs: telemetry.packTimeMs,
|
|
602
|
+
emitTimeMs: telemetry.emitTimeMs,
|
|
603
|
+
emittedTimeMs: telemetry.emittedTimeMs,
|
|
604
|
+
jsReceivedTimeMs,
|
|
605
|
+
};
|
|
606
|
+
}
|
|
133
607
|
function convertNativeCoordinateInfo(native) {
|
|
134
608
|
return {
|
|
135
609
|
originShift: native.originShift,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-bridge.js","sourceRoot":"","sources":["../src/native-bridge.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"native-bridge.js","sourceRoot":"","sources":["../src/native-bridge.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAyE/D,MAAM,4BAA4B,GAAG,CAAC,CAAC;AACvC,MAAM,8BAA8B,GAAG,CAAC,CAAC;AACzC,MAAM,6BAA6B,GAAG,IAAI,CAAC;AAC3C,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAcjC,SAAS,gBAAgB;IACvB,MAAM,cAAc,GAAI,UAEtB,CAAC,SAAS,CAAC;IACb,IAAI,OAAO,cAAc,EAAE,KAAK,KAAK,UAAU,EAAE,CAAC;QAChD,OAAO,cAAc,CAAC,KAAK,EAAE,CAAC;IAChC,CAAC;IACD,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QACnC,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;QACrC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAC1C,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,UAAU,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,OAAO,YAAY;IACf,WAAW,GAAG,KAAK,CAAC;IACpB,MAAM,GAAoB,IAAI,CAAC;IAC/B,MAAM,GAAoB,IAAI,CAAC;IAEvC,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;QAE7B,0DAA0D;QAC1D,qEAAqE;QACrE,MAAM,GAAG,GAAG,UAAiE,CAAC;QAC9E,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,MAAM,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;QAC7F,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,mBAAmB,CAAC,MAAM,CAAC;QAE7C,sDAAsD;QACtD,8DAA8D;QAC9D,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;YACpD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,0EAA0E;YAC1E,OAAO,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;QACpF,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAEO,cAAc,CAAC,OAA4B;QACjD,IAAI,OAAO,YAAY,UAAU,EAAE,CAAC;YAClC,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAClC,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7C,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAChC,cAA4C,EAC5C,OAAyB,EACzB,eAAuB;QAEvB,IAAI,iBAAiB,GAAG,CAAC,CAAC;QAC1B,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,IAAI,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QACvC,OAAO,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,EAAG,CAAC;YACrC,MAAM,KAAK,GACT,IAAI,CAAC,IAAI,KAAK,YAAY;gBACxB,CAAC,CAAC;oBACE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC;oBAC1C,QAAQ,EAAE;wBACR,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS;wBAClC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;wBAC1B,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW;qBACvC;oBACD,eAAe,EAAE,2BAA2B,CAC1C,IAAI,CAAC,SAAS,EACd,WAAW,CAAC,GAAG,EAAE,GAAG,eAAe,CACpC;iBACF;gBACH,CAAC,CAAC;oBACE,MAAM,EAAE,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC;oBAC9C,QAAQ,EAAE;wBACR,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS;wBAC1C,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK;wBAClC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW;qBAC/C;oBACD,eAAe,EAAE,2BAA2B,CAC1C,IAAI,CAAC,OAAO,CAAC,SAAS,EACtB,WAAW,CAAC,GAAG,EAAE,GAAG,eAAe,CACpC;iBACF,CAAC;YACR,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;YACzB,iBAAiB,IAAI,CAAC,CAAC;YACvB,gBAAgB,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;YACxC,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,MAAM,WAAW,GACf,iBAAiB,IAAI,8BAA8B;oBACnD,gBAAgB,IAAI,6BAA6B;oBACjD,WAAW,CAAC,GAAG,EAAE,GAAG,cAAc,IAAI,qBAAqB,CAAC;gBAC9D,IAAI,WAAW,EAAE,CAAC;oBAChB,MAAM,gBAAgB,EAAE,CAAC;oBACzB,iBAAiB,GAAG,CAAC,CAAC;oBACtB,gBAAgB,GAAG,CAAC,CAAC;oBACrB,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;gBACrC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,8BAA8B,CAC1C,OAAe,EACf,IAAW,EACX,OAAyB,EACzB,eAAuB;QAEvB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,0BAA0B,OAAO,+BAA+B,CAAC,CAAC;QACpF,CAAC;QAED,MAAM,cAAc,GAAiC,EAAE,CAAC;QACxD,IAAI,YAAY,GAAyB,IAAI,CAAC;QAC9C,IAAI,UAAU,GAAiB,IAAI,CAAC;QACpC,MAAM,aAAa,GAAG,GAAG,EAAE;YACzB,IAAI,YAAY;gBAAE,OAAO;YACzB,YAAY,GAAG,CAAC,KAAK,IAAI,EAAE;gBACzB,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,oBAAoB,CAAC,cAAc,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;gBAC5E,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,UAAU,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBACzE,CAAC;wBAAS,CAAC;oBACT,YAAY,GAAG,IAAI,CAAC;oBACpB,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;wBAC7C,aAAa,EAAE,CAAC;oBAClB,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,EAAE,CAAC;QACP,CAAC,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAI/B,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE;YAC7B,cAAc,CAAC,IAAI,CAAC;gBAClB,IAAI,EAAE,YAAY;gBAClB,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;gBAC5B,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ;gBAChC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS;aACnC,CAAC,CAAC;YACH,aAAa,EAAE,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,MAAM,CAA4B,uBAAuB,EAAE,CAAC,KAAK,EAAE,EAAE;YACrG,cAAc,CAAC,IAAI,CAAC;gBAClB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB,CAAC,CAAC;YACH,aAAa,EAAE,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,MAAM,CAA2B,uBAAuB,EAAE,CAAC,KAAK,EAAE,EAAE;YACzG,MAAM,OAAO,GAAG,IAAI,GAAG,EAA4C,CAAC;YACpE,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAC5C,CAAC;YACD,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBACrB,OAAO,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAO,CAc7B,OAAO,EAAE,IAAI,CAAC,CAAC;YAElB,MAAM,MAAM,GAAkB;gBAC5B,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,aAAa,EAAE,KAAK,CAAC,aAAa;gBAClC,cAAc,EAAE,KAAK,CAAC,cAAc;gBACpC,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;gBACxC,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;gBACxC,cAAc,EAAE,KAAK,CAAC,cAAc;gBACpC,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,qBAAqB,EAAE,KAAK,CAAC,qBAAqB;gBAClD,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;gBAChD,uBAAuB,EAAE,KAAK,CAAC,uBAAuB;gBACtD,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;aACjD,CAAC;YAEF,OAAO,YAAY,EAAE,CAAC;gBACpB,MAAM,YAAY,CAAC;YACrB,CAAC;YACD,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,UAAU,CAAC;YACnB,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;gBAAS,CAAC;YACT,QAAQ,EAAE,CAAC;YACX,cAAc,EAAE,CAAC;YACjB,mBAAmB,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAA4B;QAChD,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACtC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QACpB,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAE5C,2BAA2B;QAC3B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAO,CAK9B,cAAc,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAE/B,6CAA6C;QAC7C,MAAM,MAAM,GAAe,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAChE,MAAM,cAAc,GAAG,2BAA2B,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAE1E,OAAO;YACL,MAAM;YACN,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,cAAc;SACf,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,IAAY;QACpC,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACtC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QACpB,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAO,CAK9B,wBAAwB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAEvC,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC;YAC5C,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,cAAc,EAAE,2BAA2B,CAAC,MAAM,CAAC,cAAc,CAAC;SACnE,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,wBAAwB,CAC5B,OAA4B,EAC5B,OAAyB;QAEzB,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACtC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QACpB,CAAC;QAED,oEAAoE;QACpE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;YACzF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YACnD,MAAM,KAAK,GAAkB;gBAC3B,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;gBACjC,aAAa,EAAE,MAAM,CAAC,aAAa;gBACnC,cAAc,EAAE,MAAM,CAAC,cAAc;gBACrC,WAAW,EAAE,CAAC;gBACd,gBAAgB,EAAE,CAAC;gBACnB,YAAY,EAAE,CAAC;gBACf,gBAAgB,EAAE,CAAC;gBACnB,cAAc,EAAE,CAAC;gBACjB,WAAW,EAAE,CAAC;gBACd,qBAAqB,EAAE,CAAC;gBACxB,oBAAoB,EAAE,CAAC;gBACvB,uBAAuB,EAAE,CAAC;gBAC1B,oBAAoB,EAAE,CAAC;aACxB,CAAC;YACF,oCAAoC;YACpC,OAAO,CAAC,OAAO,EAAE,CAAC;gBAChB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,QAAQ,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE;aACpG,CAAC,CAAC;YACH,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC;YAC5B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAE5C,MAAM,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAC1C,MAAM,cAAc,GAAiC,EAAE,CAAC;QACxD,IAAI,YAAY,GAAyB,IAAI,CAAC;QAC9C,IAAI,UAAU,GAAiB,IAAI,CAAC;QACpC,MAAM,aAAa,GAAG,GAAG,EAAE;YACzB,IAAI,YAAY;gBAAE,OAAO;YACzB,YAAY,GAAG,CAAC,KAAK,IAAI,EAAE;gBACzB,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,oBAAoB,CAAC,cAAc,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;gBAC5E,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,UAAU,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBACzE,CAAC;wBAAS,CAAC;oBACT,YAAY,GAAG,IAAI,CAAC;oBACpB,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;wBAC7C,aAAa,EAAE,CAAC;oBAClB,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,EAAE,CAAC;QACP,CAAC,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAI/B,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE;YAC7B,cAAc,CAAC,IAAI,CAAC;gBAClB,IAAI,EAAE,YAAY;gBAClB,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;gBAC5B,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ;gBAChC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS;aACnC,CAAC,CAAC;YACH,aAAa,EAAE,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,MAAM,CAA4B,uBAAuB,EAAE,CAAC,KAAK,EAAE,EAAE;YACrG,cAAc,CAAC,IAAI,CAAC;gBAClB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB,CAAC,CAAC;YACH,aAAa,EAAE,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,MAAM,CAA2B,uBAAuB,EAAE,CAAC,KAAK,EAAE,EAAE;YACzG,MAAM,OAAO,GAAG,IAAI,GAAG,EAA4C,CAAC;YACpE,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAC5C,CAAC;YACD,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBACrB,OAAO,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,gCAAgC;YAChC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAO,CAc7B,wBAAwB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YAEzC,MAAM,MAAM,GAAkB;gBAC5B,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,aAAa,EAAE,KAAK,CAAC,aAAa;gBAClC,cAAc,EAAE,KAAK,CAAC,cAAc;gBACpC,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;gBACxC,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;gBACxC,cAAc,EAAE,KAAK,CAAC,cAAc;gBACpC,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,qBAAqB,EAAE,KAAK,CAAC,qBAAqB;gBAClD,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;gBAChD,uBAAuB,EAAE,KAAK,CAAC,uBAAuB;gBACtD,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;aACjD,CAAC;YAEF,OAAO,YAAY,EAAE,CAAC;gBACpB,MAAM,YAAY,CAAC;YACrB,CAAC;YACD,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,UAAU,CAAC;YACnB,CAAC;YAED,OAAO,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;YAC7B,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC7E,MAAM,KAAK,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,0BAA0B;YAC1B,QAAQ,EAAE,CAAC;YACX,cAAc,EAAE,CAAC;YACjB,mBAAmB,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,4BAA4B,CAChC,IAAY,EACZ,OAAyB,EACzB,QAAiB;QAEjB,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACtC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QACpB,CAAC;QAED,MAAM,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAC1C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,IAAI,CAAC,4BAA4B,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;IACrF,CAAC;IAED,KAAK,CAAC,6BAA6B,CACjC,QAAgB,EAChB,OAAyB;QAEzB,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACtC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QACpB,CAAC;QAED,MAAM,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAO,CACjC,oCAAoC,EACpC,EAAE,QAAQ,EAAE,CACb,CAAC;YACF,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,8CAA8C,QAAQ,EAAE,CAAC,CAAC;YAC5E,CAAC;YAED,IAAI,eAAe,GAAG,CAAC,CAAC;YACxB,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC,UAAU,EAAE,UAAU,IAAI,CAAC,EAAE,CAAC;gBAC3E,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,MAAO,CACrC,wCAAwC,EACxC,EAAE,QAAQ,EAAE,UAAU,EAAE,CACzB,CAAC;gBACF,MAAM,KAAK,GAAG,8BAA8B,CAC1C,YAAY,EACZ,WAAW,CAAC,GAAG,EAAE,GAAG,eAAe,EACnC,UAAU,GAAG,CAAC,CACf,CAAC;gBACF,eAAe,GAAG,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAC3C,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;gBACzB,IAAI,UAAU,GAAG,CAAC,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC;oBACzC,MAAM,gBAAgB,EAAE,CAAC;gBAC3B,CAAC;YACH,CAAC;YAED,MAAM,MAAM,GAAkB;gBAC5B,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,aAAa,EAAE,QAAQ,CAAC,aAAa;gBACrC,cAAc,EAAE,QAAQ,CAAC,cAAc;gBACvC,WAAW,EAAE,CAAC;gBACd,gBAAgB,EAAE,CAAC;gBACnB,YAAY,EAAE,CAAC;gBACf,gBAAgB,EAAE,CAAC;gBACnB,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,eAAe,CAAC;gBAC/D,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,eAAe,CAAC;gBAC5D,qBAAqB,EAAE,CAAC;gBACxB,oBAAoB,EAAE,CAAC;gBACvB,uBAAuB,EAAE,CAAC;gBAC1B,oBAAoB,EAAE,CAAC;aACxB,CAAC;YAEF,IAAI,eAAe,KAAK,QAAQ,CAAC,WAAW,EAAE,CAAC;gBAC7C,OAAO,CAAC,IAAI,CACV,+DAA+D,QAAQ,cAAc,eAAe,aAAa,QAAQ,CAAC,WAAW,EAAE,CACxI,CAAC;YACJ,CAAC;YAED,OAAO,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;YAC7B,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC7E,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,4BAA4B,CACxC,IAAY,EACZ,QAAgB,EAChB,OAAyB,EACzB,eAAuB;QAEvB,MAAM,YAAY,GAAG,IAAI,CAAC,MAAO,CAc9B,kCAAkC,EAAE;YACrC,IAAI;YACJ,QAAQ;YACR,kBAAkB,EAAE,IAAI;SACzB,CAAC,CAAC;QAEH,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,IAAI,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QACvC,IAAI,eAAe,GAAG,CAAC,CAAC;QAExB,wEAAwE;QACxE,0EAA0E;QAC1E,IAAI,iBAAiB,GAAwB,IAAI,CAAC;QAClD,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM;YACpC,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAyB,oBAAoB,EAAE,GAAG,EAAE;gBACnE,IAAI,iBAAiB,EAAE,CAAC;oBACtB,MAAM,OAAO,GAAG,iBAAiB,CAAC;oBAClC,iBAAiB,GAAG,IAAI,CAAC;oBACzB,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC,CAAC;YACJ,CAAC,CAAC,IAAI,CAAC;QAET,SAAS,qBAAqB,CAAC,SAAiB;YAC9C,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;gBACnC,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;gBAC7C,iBAAiB,GAAG,GAAG,EAAE;oBACvB,YAAY,CAAC,KAAK,CAAC,CAAC;oBACpB,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC;YACH,OAAO,IAAI,EAAE,CAAC;gBACZ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAO,CAC/B,yCAAyC,EACzC,EAAE,QAAQ,EAAE,CACb,CAAC;gBAEF,IAAI,MAAM,EAAE,MAAM,EAAE,CAAC;oBACnB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,YAAY,IAAI,kCAAkC,QAAQ,EAAE,CAAC,CAAC;gBACvF,CAAC;gBAED,MAAM,eAAe,GAAG,MAAM,EAAE,eAAe,IAAI,CAAC,CAAC;gBACrD,0DAA0D;gBAC1D,OAAO,cAAc,GAAG,eAAe,EAAE,CAAC;oBACxC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,MAAO,CACrC,wCAAwC,EACxC,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,CACzC,CAAC;oBACF,MAAM,KAAK,GAAG,8BAA8B,CAC1C,YAAY,EACZ,WAAW,CAAC,GAAG,EAAE,GAAG,eAAe,EACnC,cAAc,GAAG,CAAC,CACnB,CAAC;oBACF,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;oBACtE,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;oBACnC,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;oBACzB,cAAc,IAAI,CAAC,CAAC;gBACtB,CAAC;gBAED,IAAI,MAAM,EAAE,IAAI,IAAI,cAAc,IAAI,eAAe,EAAE,CAAC;oBACtD,MAAM;gBACR,CAAC;gBAED,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,cAAc,GAAG,MAAM,EAAE,CAAC;oBAChD,MAAM,IAAI,KAAK,CACb,wCAAwC,QAAQ,YAAY,cAAc,IAAI,eAAe,cAAc,eAAe,EAAE,CAC7H,CAAC;gBACJ,CAAC;gBAED,mEAAmE;gBACnE,sDAAsD;gBACtD,MAAM,qBAAqB,CAAC,EAAE,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,IAAI,kBAAkB,EAAE,CAAC;gBACvB,kBAAkB,EAAE,CAAC;YACvB,CAAC;QACH,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC;QACjC,MAAM,MAAM,GAAkB;YAC5B,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;YACxC,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;YACxC,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,qBAAqB,EAAE,KAAK,CAAC,qBAAqB;YAClD,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;YAChD,uBAAuB,EAAE,KAAK,CAAC,uBAAuB;YACtD,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;SACjD,CAAC;QAEF,OAAO,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;QAC7B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM;QACJ,6CAA6C;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAmDD,uBAAuB;AACvB,SAAS,iBAAiB,CAAC,MAAsB;IAC/C,OAAO;QACL,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,SAAS,EAAE,IAAI,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC;QAC7C,OAAO,EAAE,IAAI,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC;QACzC,OAAO,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC;QACxC,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAAC,MAAiC;IACjE,6EAA6E;IAC7E,2CAA2C;IAC3C,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEjD,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAClC,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC;QAC7F,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC;QACnF,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC;QACnF,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,aAAa,CAAC,OAAgB;IACrC,IAAI,OAAO,YAAY,WAAW,EAAE,CAAC;QACnC,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,OAAO,YAAY,UAAU,EAAE,CAAC;QAClC,IACE,OAAO,CAAC,UAAU,KAAK,CAAC;eACrB,OAAO,CAAC,UAAU,KAAK,OAAO,CAAC,MAAM,CAAC,UAAU;eAChD,OAAO,CAAC,MAAM,YAAY,WAAW,EACxC,CAAC;YACD,OAAO,OAAO,CAAC,MAAM,CAAC;QACxB,CAAC;QACD,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC;IAChC,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,OAAO,UAAU,CAAC,IAAI,CAAC,OAAmB,CAAC,CAAC,MAAM,CAAC;IACrD,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,8CAA8C,OAAO,OAAO,EAAE,CAAC,CAAC;AAClF,CAAC;AAED,SAAS,8BAA8B,CACrC,OAAgB,EAChB,gBAAwB,EACxB,aAAqB;IAErB,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC;IACnG,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,oDAAoD,OAAO,EAAE,CAAC,CAAC;IACjF,CAAC;IAED,MAAM,oBAAoB,GAAG,EAAE,CAAC;IAChC,MAAM,cAAc,GAAG,CAAC,CAAC;IACzB,MAAM,cAAc,GAAG,SAAS,GAAG,oBAAoB,CAAC;IACxD,MAAM,cAAc,GAAG,CAAC,cAAc,GAAG,cAAc,CAAC,GAAG,WAAW,CAAC,iBAAiB,CAAC;IACzF,MAAM,mBAAmB,GAAG,YAAY,GAAG,YAAY,CAAC,iBAAiB,CAAC;IAC1E,MAAM,iBAAiB,GAAG,UAAU,GAAG,YAAY,CAAC,iBAAiB,CAAC;IACtE,MAAM,iBAAiB,GAAG,UAAU,GAAG,WAAW,CAAC,iBAAiB,CAAC;IACrE,MAAM,eAAe,GAAG,cAAc,CAAC;IACvC,MAAM,aAAa,GAAG,eAAe,GAAG,mBAAmB,CAAC;IAC5D,MAAM,aAAa,GAAG,aAAa,GAAG,iBAAiB,CAAC;IAExD,MAAM,SAAS,GAAG,IAAI,YAAY,CAAC,MAAM,EAAE,eAAe,EAAE,YAAY,CAAC,CAAC;IAC1E,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAC3B,MAAM,EACN,cAAc,GAAG,WAAW,CAAC,iBAAiB,EAC9C,cAAc,GAAG,WAAW,CAAC,iBAAiB,CAC/C,CAAC;IAEF,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,SAAS,EAAE,SAAS,IAAI,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,GAAG,SAAS,GAAG,oBAAoB,GAAG,WAAW,CAAC,iBAAiB,CAAC;QAC9E,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACjD,MAAM,oBAAoB,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;QAChE,MAAM,oBAAoB,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;QAChE,MAAM,kBAAkB,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;QAC/D,MAAM,kBAAkB,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;QAC/D,MAAM,kBAAkB,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;QAC/D,MAAM,kBAAkB,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;QAC/D,MAAM,KAAK,GAAqC;YAC9C,QAAQ,CAAC,UAAU,CAAC,IAAI,GAAG,EAAE,EAAE,IAAI,CAAC;YACpC,QAAQ,CAAC,UAAU,CAAC,IAAI,GAAG,EAAE,EAAE,IAAI,CAAC;YACpC,QAAQ,CAAC,UAAU,CAAC,IAAI,GAAG,EAAE,EAAE,IAAI,CAAC;YACpC,QAAQ,CAAC,UAAU,CAAC,IAAI,GAAG,EAAE,EAAE,IAAI,CAAC;SACrC,CAAC;QACF,MAAM,CAAC,IAAI,CAAC;YACV,SAAS;YACT,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB,GAAG,oBAAoB,CAAC;YAChG,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,EAAE,kBAAkB,GAAG,kBAAkB,CAAC;YACtF,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,EAAE,kBAAkB,GAAG,kBAAkB,CAAC;YACtF,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,MAAM;QACN,QAAQ,EAAE;YACR,SAAS;YACT,KAAK;YACL,WAAW,EAAE,QAAQ;SACtB;QACD,eAAe,EAAE;YACf,aAAa;YACb,WAAW,EAAE,oBAAoB;YACjC,SAAS;YACT,YAAY;YACZ,UAAU;YACV,UAAU;YACV,gBAAgB,EAAE,CAAC;YACnB,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,CAAC;YACb,aAAa,EAAE,CAAC;YAChB,gBAAgB;SACjB;KACF,CAAC;AACJ,CAAC;AAED,SAAS,2BAA2B,CAClC,SAAkD,EAClD,gBAAwB;IAExB,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO;QACL,aAAa,EAAE,SAAS,CAAC,aAAa;QACtC,WAAW,EAAE,SAAS,CAAC,WAAW;QAClC,SAAS,EAAE,SAAS,CAAC,SAAS;QAC9B,YAAY,EAAE,SAAS,CAAC,YAAY;QACpC,UAAU,EAAE,SAAS,CAAC,UAAU;QAChC,UAAU,EAAE,SAAS,CAAC,UAAU;QAChC,gBAAgB,EAAE,SAAS,CAAC,gBAAgB;QAC5C,UAAU,EAAE,SAAS,CAAC,UAAU;QAChC,UAAU,EAAE,SAAS,CAAC,UAAU;QAChC,aAAa,EAAE,SAAS,CAAC,aAAa;QACtC,gBAAgB;KACjB,CAAC;AACJ,CAAC;AAED,SAAS,2BAA2B,CAAC,MAA4B;IAC/D,OAAO;QACL,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;KAChD,CAAC;AACJ,CAAC"}
|