@ifc-lite/geometry 1.2.1 → 1.5.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.
@@ -21,7 +21,12 @@ export interface CoordinateInfo {
21
21
  originShift: Vec3;
22
22
  originalBounds: AABB;
23
23
  shiftedBounds: AABB;
24
- isGeoReferenced: boolean;
24
+ /** True if model had large coordinates requiring RTC shift. NOT the same as proper georeferencing via IfcMapConversion. */
25
+ hasLargeCoordinates: boolean;
26
+ /** RTC offset applied by WASM in IFC coordinates (Z-up). Used for multi-model alignment. */
27
+ wasmRtcOffset?: Vec3;
28
+ /** Building rotation angle in radians (from IfcSite placement). Rotation of building's principal axes relative to world X/Y/Z. */
29
+ buildingRotation?: number;
25
30
  }
26
31
  export declare class CoordinateHandler {
27
32
  private originShift;
@@ -29,14 +34,19 @@ export declare class CoordinateHandler {
29
34
  private readonly MAX_REASONABLE_COORD;
30
35
  private accumulatedBounds;
31
36
  private shiftCalculated;
37
+ private wasmRtcDetected;
38
+ private readonly NORMAL_COORD_THRESHOLD;
39
+ private activeThreshold;
32
40
  /**
33
41
  * Check if a coordinate value is reasonable (not corrupted garbage)
34
42
  */
35
43
  private isReasonableValue;
36
44
  /**
37
45
  * Calculate bounding box from all meshes (filtering out corrupted values)
46
+ * @param meshes - Meshes to calculate bounds from
47
+ * @param maxCoord - Optional max coordinate threshold (default: MAX_REASONABLE_COORD)
38
48
  */
39
- calculateBounds(meshes: MeshData[]): AABB;
49
+ calculateBounds(meshes: MeshData[], maxCoord?: number): AABB;
40
50
  /**
41
51
  * Check if coordinate shift is needed
42
52
  */
@@ -48,8 +58,11 @@ export declare class CoordinateHandler {
48
58
  /**
49
59
  * Shift positions in-place by subtracting origin shift
50
60
  * Corrupted values are set to 0 (center of shifted coordinate system)
61
+ * @param positions - Position array to modify
62
+ * @param shift - Origin shift to subtract
63
+ * @param threshold - Optional threshold for valid coordinates (defaults to MAX_REASONABLE_COORD)
51
64
  */
52
- shiftPositions(positions: Float32Array, shift: Vec3): void;
65
+ shiftPositions(positions: Float32Array, shift: Vec3, threshold?: number): void;
53
66
  /**
54
67
  * Shift bounds by subtracting origin shift
55
68
  */
@@ -73,6 +86,9 @@ export declare class CoordinateHandler {
73
86
  /**
74
87
  * Process meshes incrementally for streaming
75
88
  * Accumulates bounds and applies shift once calculated
89
+ *
90
+ * IMPORTANT: Detects if WASM already applied RTC offset by checking if
91
+ * majority of meshes have small coordinates. If so, skips TypeScript shift.
76
92
  */
77
93
  processMeshesIncremental(batch: MeshData[]): void;
78
94
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"coordinate-handler.d.ts","sourceRoot":"","sources":["../src/coordinate-handler.ts"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,WAAW,IAAI;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,IAAI;IACjB,GAAG,EAAE,IAAI,CAAC;IACV,GAAG,EAAE,IAAI,CAAC;CACb;AAED,MAAM,WAAW,cAAc;IAC3B,WAAW,EAAE,IAAI,CAAC;IAClB,cAAc,EAAE,IAAI,CAAC;IACrB,aAAa,EAAE,IAAI,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;CAC5B;AAED,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IAGnC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAO;IAG5C,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,eAAe,CAAkB;IAEzC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI;IAsCzC;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO;IAUjC;;OAEG;IACH,iBAAiB,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI;IAQrC;;;OAGG;IACH,cAAc,CAAC,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,GAAG,IAAI;IAoB1D;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,IAAI;IAe5C;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,cAAc;IAkGjD;;OAEG;IACH,kBAAkB,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI;IAQxC;;OAEG;IACH,kBAAkB,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI;IAQxC;;OAEG;IACH,cAAc,IAAI,IAAI;IAItB;;;OAGG;IACH,wBAAwB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI;IAuDjD;;OAEG;IACH,wBAAwB,IAAI,cAAc,GAAG,IAAI;IA2BjD;;OAEG;IACH,sBAAsB,IAAI,cAAc;IAqBxC;;OAEG;IACH,KAAK,IAAI,IAAI;CAKhB"}
1
+ {"version":3,"file":"coordinate-handler.d.ts","sourceRoot":"","sources":["../src/coordinate-handler.ts"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,WAAW,IAAI;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,IAAI;IACjB,GAAG,EAAE,IAAI,CAAC;IACV,GAAG,EAAE,IAAI,CAAC;CACb;AAED,MAAM,WAAW,cAAc;IAC3B,WAAW,EAAE,IAAI,CAAC;IAClB,cAAc,EAAE,IAAI,CAAC;IACrB,aAAa,EAAE,IAAI,CAAC;IACpB,2HAA2H;IAC3H,mBAAmB,EAAE,OAAO,CAAC;IAC7B,4FAA4F;IAC5F,aAAa,CAAC,EAAE,IAAI,CAAC;IACrB,kIAAkI;IAClI,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IAGnC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAO;IAG5C,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,eAAe,CAAkB;IAGzC,OAAO,CAAC,eAAe,CAAkB;IAEzC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAS;IAEhD,OAAO,CAAC,eAAe,CAAe;IAEtC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;;;OAIG;IACH,eAAe,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IA2C5D;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO;IAUjC;;OAEG;IACH,iBAAiB,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI;IAQrC;;;;;;OAMG;IACH,cAAc,CAAC,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAwB9E;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,IAAI;IAe5C;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,cAAc;IAkGjD;;OAEG;IACH,kBAAkB,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI;IAQxC;;OAEG;IACH,kBAAkB,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI;IAQxC;;OAEG;IACH,cAAc,IAAI,IAAI;IAItB;;;;;;OAMG;IACH,wBAAwB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI;IAiGjD;;OAEG;IACH,wBAAwB,IAAI,cAAc,GAAG,IAAI;IA2BjD;;OAEG;IACH,sBAAsB,IAAI,cAAc;IAqBxC;;OAEG;IACH,KAAK,IAAI,IAAI;CAOhB"}
@@ -10,6 +10,12 @@ export class CoordinateHandler {
10
10
  // For incremental processing
11
11
  accumulatedBounds = null;
12
12
  shiftCalculated = false;
13
+ // WASM RTC detection - if WASM already applied RTC, skip TypeScript shift
14
+ wasmRtcDetected = false;
15
+ // Threshold for "normal" coordinates when WASM RTC is active (10km = reasonable campus/site size)
16
+ NORMAL_COORD_THRESHOLD = 10000;
17
+ // Active threshold for coordinate validation (set based on wasmRtcDetected)
18
+ activeThreshold = 1e7;
13
19
  /**
14
20
  * Check if a coordinate value is reasonable (not corrupted garbage)
15
21
  */
@@ -18,12 +24,15 @@ export class CoordinateHandler {
18
24
  }
19
25
  /**
20
26
  * Calculate bounding box from all meshes (filtering out corrupted values)
27
+ * @param meshes - Meshes to calculate bounds from
28
+ * @param maxCoord - Optional max coordinate threshold (default: MAX_REASONABLE_COORD)
21
29
  */
22
- calculateBounds(meshes) {
30
+ calculateBounds(meshes, maxCoord) {
23
31
  const bounds = {
24
32
  min: { x: Infinity, y: Infinity, z: Infinity },
25
33
  max: { x: -Infinity, y: -Infinity, z: -Infinity },
26
34
  };
35
+ const threshold = maxCoord ?? this.MAX_REASONABLE_COORD;
27
36
  let validVertexCount = 0;
28
37
  let corruptedVertexCount = 0;
29
38
  for (const mesh of meshes) {
@@ -32,8 +41,11 @@ export class CoordinateHandler {
32
41
  const x = positions[i];
33
42
  const y = positions[i + 1];
34
43
  const z = positions[i + 2];
35
- // Only include reasonable values (filter out corrupted garbage)
36
- if (this.isReasonableValue(x) && this.isReasonableValue(y) && this.isReasonableValue(z)) {
44
+ // Only include values within threshold (filter out outliers/garbage)
45
+ const coordsFinite = Number.isFinite(x) && Number.isFinite(y) && Number.isFinite(z);
46
+ const withinThreshold = coordsFinite &&
47
+ Math.abs(x) < threshold && Math.abs(y) < threshold && Math.abs(z) < threshold;
48
+ if (withinThreshold) {
37
49
  bounds.min.x = Math.min(bounds.min.x, x);
38
50
  bounds.min.y = Math.min(bounds.min.y, y);
39
51
  bounds.min.z = Math.min(bounds.min.z, z);
@@ -72,20 +84,26 @@ export class CoordinateHandler {
72
84
  /**
73
85
  * Shift positions in-place by subtracting origin shift
74
86
  * Corrupted values are set to 0 (center of shifted coordinate system)
87
+ * @param positions - Position array to modify
88
+ * @param shift - Origin shift to subtract
89
+ * @param threshold - Optional threshold for valid coordinates (defaults to MAX_REASONABLE_COORD)
75
90
  */
76
- shiftPositions(positions, shift) {
91
+ shiftPositions(positions, shift, threshold) {
92
+ const maxCoord = threshold ?? this.MAX_REASONABLE_COORD;
77
93
  for (let i = 0; i < positions.length; i += 3) {
78
94
  const x = positions[i];
79
95
  const y = positions[i + 1];
80
96
  const z = positions[i + 2];
81
- // For corrupted values, set to center (0) in shifted space
82
- if (this.isReasonableValue(x) && this.isReasonableValue(y) && this.isReasonableValue(z)) {
97
+ // For corrupted/outlier values, set to center (0) in shifted space
98
+ const coordsValid = Number.isFinite(x) && Number.isFinite(y) && Number.isFinite(z) &&
99
+ Math.abs(x) < maxCoord && Math.abs(y) < maxCoord && Math.abs(z) < maxCoord;
100
+ if (coordsValid) {
83
101
  positions[i] = x - shift.x;
84
102
  positions[i + 1] = y - shift.y;
85
103
  positions[i + 2] = z - shift.z;
86
104
  }
87
105
  else {
88
- // Corrupted vertex - set to origin to avoid visual artifacts
106
+ // Corrupted/outlier vertex - set to origin to avoid visual artifacts
89
107
  positions[i] = 0;
90
108
  positions[i + 1] = 0;
91
109
  positions[i + 2] = 0;
@@ -123,7 +141,7 @@ export class CoordinateHandler {
123
141
  min: { x: 0, y: 0, z: 0 },
124
142
  max: { x: 0, y: 0, z: 0 },
125
143
  },
126
- isGeoReferenced: false,
144
+ hasLargeCoordinates: false,
127
145
  };
128
146
  if (meshes.length === 0) {
129
147
  return emptyResult;
@@ -162,7 +180,7 @@ export class CoordinateHandler {
162
180
  originShift: zeroShift,
163
181
  originalBounds,
164
182
  shiftedBounds: originalBounds,
165
- isGeoReferenced: false,
183
+ hasLargeCoordinates: false,
166
184
  };
167
185
  }
168
186
  // Calculate centroid as origin shift
@@ -187,7 +205,7 @@ export class CoordinateHandler {
187
205
  originShift: centroid,
188
206
  originalBounds,
189
207
  shiftedBounds,
190
- isGeoReferenced: true,
208
+ hasLargeCoordinates: true,
191
209
  };
192
210
  }
193
211
  /**
@@ -219,10 +237,15 @@ export class CoordinateHandler {
219
237
  /**
220
238
  * Process meshes incrementally for streaming
221
239
  * Accumulates bounds and applies shift once calculated
240
+ *
241
+ * IMPORTANT: Detects if WASM already applied RTC offset by checking if
242
+ * majority of meshes have small coordinates. If so, skips TypeScript shift.
222
243
  */
223
244
  processMeshesIncremental(batch) {
224
- // Accumulate bounds from this batch
225
- const batchBounds = this.calculateBounds(batch);
245
+ // If WASM RTC was detected, use stricter threshold to exclude outliers
246
+ // Store in instance variable so shiftPositions uses the same threshold
247
+ this.activeThreshold = this.wasmRtcDetected ? this.NORMAL_COORD_THRESHOLD : this.MAX_REASONABLE_COORD;
248
+ const batchBounds = this.calculateBounds(batch, this.activeThreshold);
226
249
  if (this.accumulatedBounds === null) {
227
250
  this.accumulatedBounds = batchBounds;
228
251
  }
@@ -248,8 +271,37 @@ export class CoordinateHandler {
248
271
  const maxSize = Math.max(size.x, size.y, size.z);
249
272
  const centroid = this.calculateCentroid(this.accumulatedBounds);
250
273
  const distanceFromOrigin = Math.sqrt(centroid.x ** 2 + centroid.y ** 2 + centroid.z ** 2);
251
- // Check if shift is needed (>10km from origin)
252
- if (distanceFromOrigin > this.THRESHOLD || maxSize > this.THRESHOLD) {
274
+ // DETECT IF WASM ALREADY APPLIED RTC
275
+ // If majority of meshes have small coordinates, WASM already shifted them
276
+ let smallCoordCount = 0;
277
+ let largeCoordCount = 0;
278
+ const SMALL_COORD_THRESHOLD = this.THRESHOLD; // Use same threshold as RTC detection
279
+ for (const mesh of batch) {
280
+ const positions = mesh.positions;
281
+ if (positions.length >= 3) {
282
+ // Check first vertex of each mesh
283
+ const x = Math.abs(positions[0]);
284
+ const y = Math.abs(positions[1]);
285
+ const z = Math.abs(positions[2]);
286
+ const maxCoord = Math.max(x, y, z);
287
+ if (maxCoord < SMALL_COORD_THRESHOLD) {
288
+ smallCoordCount++;
289
+ }
290
+ else {
291
+ largeCoordCount++;
292
+ }
293
+ }
294
+ }
295
+ // If >50% have small coords, WASM RTC was likely applied
296
+ const totalMeshes = smallCoordCount + largeCoordCount;
297
+ const wasmRtcLikelyApplied = totalMeshes > 0 && (smallCoordCount / totalMeshes) > 0.5;
298
+ if (wasmRtcLikelyApplied) {
299
+ this.wasmRtcDetected = true;
300
+ // Recalculate bounds excluding outliers (use stricter threshold)
301
+ this.accumulatedBounds = this.calculateBounds(batch, this.NORMAL_COORD_THRESHOLD);
302
+ }
303
+ // Check if shift is needed (>10km from origin) AND WASM didn't already apply RTC
304
+ if ((distanceFromOrigin > this.THRESHOLD || maxSize > this.THRESHOLD) && !wasmRtcLikelyApplied) {
253
305
  this.originShift = centroid;
254
306
  console.log('[CoordinateHandler] Large coordinates detected, shifting to origin:', {
255
307
  distanceFromOrigin: distanceFromOrigin.toFixed(2) + 'm',
@@ -257,13 +309,22 @@ export class CoordinateHandler {
257
309
  shift: this.originShift,
258
310
  });
259
311
  }
312
+ else if (wasmRtcLikelyApplied) {
313
+ // Log that we're skipping because WASM already applied RTC
314
+ console.log('[CoordinateHandler] Skipping shift - WASM RTC already applied:', {
315
+ smallCoordCount,
316
+ largeCoordCount,
317
+ wasmRtcDetected: true,
318
+ });
319
+ }
260
320
  }
261
321
  this.shiftCalculated = true;
262
322
  }
263
- // Apply shift to this batch
323
+ // Apply shift to this batch (only if we determined shift is needed AND WASM didn't already apply)
324
+ // Use the same threshold for vertex cleanup as was used for bounds calculation
264
325
  if (this.originShift.x !== 0 || this.originShift.y !== 0 || this.originShift.z !== 0) {
265
326
  for (const mesh of batch) {
266
- this.shiftPositions(mesh.positions, this.originShift);
327
+ this.shiftPositions(mesh.positions, this.originShift, this.activeThreshold);
267
328
  }
268
329
  }
269
330
  }
@@ -280,14 +341,14 @@ export class CoordinateHandler {
280
341
  return null;
281
342
  }
282
343
  const shiftedBounds = this.shiftBounds(this.accumulatedBounds, this.originShift);
283
- const isGeoReferenced = this.originShift.x !== 0 ||
344
+ const hasLargeCoordinates = this.originShift.x !== 0 ||
284
345
  this.originShift.y !== 0 ||
285
346
  this.originShift.z !== 0;
286
347
  return {
287
348
  originShift: { ...this.originShift },
288
349
  originalBounds: { ...this.accumulatedBounds },
289
350
  shiftedBounds,
290
- isGeoReferenced,
351
+ hasLargeCoordinates,
291
352
  };
292
353
  }
293
354
  /**
@@ -309,7 +370,7 @@ export class CoordinateHandler {
309
370
  min: { x: 0, y: 0, z: 0 },
310
371
  max: { x: 0, y: 0, z: 0 },
311
372
  },
312
- isGeoReferenced: false,
373
+ hasLargeCoordinates: false,
313
374
  };
314
375
  }
315
376
  /**
@@ -319,6 +380,8 @@ export class CoordinateHandler {
319
380
  this.accumulatedBounds = null;
320
381
  this.shiftCalculated = false;
321
382
  this.originShift = { x: 0, y: 0, z: 0 };
383
+ this.wasmRtcDetected = false;
384
+ this.activeThreshold = this.MAX_REASONABLE_COORD;
322
385
  }
323
386
  }
324
387
  //# sourceMappingURL=coordinate-handler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"coordinate-handler.js","sourceRoot":"","sources":["../src/coordinate-handler.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAgC/D,MAAM,OAAO,iBAAiB;IAClB,WAAW,GAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAChC,SAAS,GAAG,KAAK,CAAC,CAAC,yCAAyC;IAC7E,uFAAuF;IACvF,6DAA6D;IAC5C,oBAAoB,GAAG,GAAG,CAAC;IAE5C,6BAA6B;IACrB,iBAAiB,GAAgB,IAAI,CAAC;IACtC,eAAe,GAAY,KAAK,CAAC;IAEzC;;OAEG;IACK,iBAAiB,CAAC,KAAa;QACnC,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC;IACjF,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,MAAkB;QAC9B,MAAM,MAAM,GAAS;YACjB,GAAG,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE;YAC9C,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE;SACpD,CAAC;QAEF,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,IAAI,oBAAoB,GAAG,CAAC,CAAC;QAE7B,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YACxB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3C,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBACvB,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC3B,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAE3B,gEAAgE;gBAChE,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;oBACtF,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACzC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACzC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACzC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACzC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACzC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACzC,gBAAgB,EAAE,CAAC;gBACvB,CAAC;qBAAM,CAAC;oBACJ,oBAAoB,EAAE,CAAC;gBAC3B,CAAC;YACL,CAAC;QACL,CAAC;QAED,IAAI,oBAAoB,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,gCAAgC,oBAAoB,6BAA6B,gBAAgB,QAAQ,CAAC,CAAC;QAC3H,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,MAAY;QACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CACrB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAC9C,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAC9C,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CACjD,CAAC;QAEF,OAAO,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,MAAY;QAC1B,OAAO;YACH,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YACpC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YACpC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;SACvC,CAAC;IACN,CAAC;IAED;;;OAGG;IACH,cAAc,CAAC,SAAuB,EAAE,KAAW;QAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3C,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YACvB,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3B,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAE3B,2DAA2D;YAC3D,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtF,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBAC3B,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBAC/B,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACJ,6DAA6D;gBAC7D,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACjB,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBACrB,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACzB,CAAC;QACL,CAAC;IACL,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,MAAY,EAAE,KAAW;QACjC,OAAO;YACH,GAAG,EAAE;gBACD,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;gBACzB,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;gBACzB,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;aAC5B;YACD,GAAG,EAAE;gBACD,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;gBACzB,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;gBACzB,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;aAC5B;SACJ,CAAC;IACN,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,MAAkB;QAC5B,MAAM,WAAW,GAAmB;YAChC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;YACjC,cAAc,EAAE;gBACZ,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;gBACzB,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;aAC5B;YACD,aAAa,EAAE;gBACX,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;gBACzB,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;aAC5B;YACD,eAAe,EAAE,KAAK;SACzB,CAAC;QAEF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,WAAW,CAAC;QACvB,CAAC;QAED,yDAAyD;QACzD,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAEpD,+BAA+B;QAC/B,MAAM,cAAc,GAChB,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,QAAQ,IAAI,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;QAE5E,IAAI,CAAC,cAAc,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;YAC3E,OAAO,WAAW,CAAC;QACvB,CAAC;QAED,MAAM,IAAI,GAAG;YACT,CAAC,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;YAC9C,CAAC,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;YAC9C,CAAC,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;SACjD,CAAC;QACF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAEjD,OAAO,CAAC,GAAG,CAAC,sCAAsC,EAAE;YAChD,GAAG,EAAE,cAAc,CAAC,GAAG;YACvB,GAAG,EAAE,cAAc,CAAC,GAAG;YACvB,IAAI;YACJ,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG;SACpC,CAAC,CAAC;QAEH,+CAA+C;QAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QAEnD,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,4DAA4D;YAC5D,OAAO,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAC;YACpF,kDAAkD;YAClD,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YACvC,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;gBACxB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACnD,CAAC;YACD,OAAO;gBACH,WAAW,EAAE,SAAS;gBACtB,cAAc;gBACd,aAAa,EAAE,cAAc;gBAC7B,eAAe,EAAE,KAAK;aACzB,CAAC;QACN,CAAC;QAED,qCAAqC;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;QACxD,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC;QAE5B,OAAO,CAAC,GAAG,CAAC,qEAAqE,EAAE;YAC/E,QAAQ;YACR,QAAQ,EAAE,IAAI,CAAC,GAAG,CACd,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAC9D,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAC9D,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CACjE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG;SACrB,CAAC,CAAC;QAEH,2BAA2B;QAC3B,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAClD,CAAC;QAED,2BAA2B;QAC3B,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAEjE,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE;YAC/C,GAAG,EAAE,aAAa,CAAC,GAAG;YACtB,GAAG,EAAE,aAAa,CAAC,GAAG;YACtB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG;SACpC,CAAC,CAAC;QAEH,OAAO;YACH,WAAW,EAAE,QAAQ;YACrB,cAAc;YACd,aAAa;YACb,eAAe,EAAE,IAAI;SACxB,CAAC;IACN,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,QAAc;QAC7B,OAAO;YACH,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;YAClC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;YAClC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;SACrC,CAAC;IACN,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,QAAc;QAC7B,OAAO;YACH,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;YAClC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;YAClC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;SACrC,CAAC;IACN,CAAC;IAED;;OAEG;IACH,cAAc;QACV,OAAO,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACnC,CAAC;IAED;;;OAGG;IACH,wBAAwB,CAAC,KAAiB;QACtC,oCAAoC;QACpC,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAEhD,IAAI,IAAI,CAAC,iBAAiB,KAAK,IAAI,EAAE,CAAC;YAClC,IAAI,CAAC,iBAAiB,GAAG,WAAW,CAAC;QACzC,CAAC;aAAM,CAAC;YACJ,4BAA4B;YAC5B,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACzF,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACzF,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACzF,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACzF,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACzF,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7F,CAAC;QAED,2CAA2C;QAC3C,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAClD,MAAM,cAAc,GAChB,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,KAAK,QAAQ;gBACzC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;YAE/C,IAAI,cAAc,EAAE,CAAC;gBACjB,MAAM,IAAI,GAAG;oBACT,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;oBAC9D,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;oBAC9D,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;iBACjE,CAAC;gBACF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;gBACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBAChE,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAChC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CACtD,CAAC;gBAEF,+CAA+C;gBAC/C,IAAI,kBAAkB,GAAG,IAAI,CAAC,SAAS,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;oBAClE,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC;oBAC5B,OAAO,CAAC,GAAG,CAAC,qEAAqE,EAAE;wBAC/E,kBAAkB,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG;wBACvD,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG;wBACjC,KAAK,EAAE,IAAI,CAAC,WAAW;qBAC1B,CAAC,CAAC;gBACP,CAAC;YACL,CAAC;YACD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAChC,CAAC;QAED,4BAA4B;QAC5B,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YACnF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACvB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1D,CAAC;QACL,CAAC;IACL,CAAC;IAED;;OAEG;IACH,wBAAwB;QACpB,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,cAAc,GAChB,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,KAAK,QAAQ;YACzC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;QAE/C,IAAI,CAAC,cAAc,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACjF,MAAM,eAAe,GACjB,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC;YACxB,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC;YACxB,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC;QAE7B,OAAO;YACH,WAAW,EAAE,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE;YACpC,cAAc,EAAE,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE;YAC7C,aAAa;YACb,eAAe;SAClB,CAAC;IACN,CAAC;IAED;;OAEG;IACH,sBAAsB;QAClB,MAAM,OAAO,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAChD,IAAI,OAAO,EAAE,CAAC;YACV,OAAO,OAAO,CAAC;QACnB,CAAC;QAED,mDAAmD;QACnD,OAAO;YACH,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;YACjC,cAAc,EAAE;gBACZ,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;gBACzB,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;aAC5B;YACD,aAAa,EAAE;gBACX,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;gBACzB,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;aAC5B;YACD,eAAe,EAAE,KAAK;SACzB,CAAC;IACN,CAAC;IAED;;OAEG;IACH,KAAK;QACD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAC5C,CAAC;CACJ"}
1
+ {"version":3,"file":"coordinate-handler.js","sourceRoot":"","sources":["../src/coordinate-handler.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,5 @@
1
- /**
2
- * IFC-Lite bridge - initializes and manages IFC-Lite WASM for geometry processing
3
- * Replaces web-ifc-bridge.ts with native IFC-Lite implementation (1.9x faster)
4
- */
5
- import { IfcAPI, MeshCollection, MeshDataJs, InstancedMeshCollection, InstancedGeometry, InstanceData } from '@ifc-lite/wasm';
6
- export type { MeshCollection, MeshDataJs, InstancedMeshCollection, InstancedGeometry, InstanceData };
1
+ import { IfcAPI, MeshCollection, MeshDataJs, InstancedMeshCollection, InstancedGeometry, InstanceData, SymbolicRepresentationCollection, SymbolicPolyline, SymbolicCircle } from '@ifc-lite/wasm';
2
+ export type { MeshCollection, MeshDataJs, InstancedMeshCollection, InstancedGeometry, InstanceData, SymbolicRepresentationCollection, SymbolicPolyline, SymbolicCircle };
7
3
  export interface StreamingProgress {
8
4
  percent: number;
9
5
  processed: number;
@@ -37,7 +33,7 @@ export declare class IfcLiteBridge {
37
33
  * Initialize IFC-Lite WASM
38
34
  * The WASM binary is automatically resolved from the same location as the JS module
39
35
  */
40
- init(_wasmPath?: string): Promise<void>;
36
+ init(): Promise<void>;
41
37
  /**
42
38
  * Parse IFC content and return mesh collection (blocking)
43
39
  * Returns individual meshes with express IDs and colors
@@ -62,6 +58,11 @@ export declare class IfcLiteBridge {
62
58
  * Reduces draw calls significantly for buildings with repeated elements
63
59
  */
64
60
  parseMeshesInstancedAsync(content: string, options?: ParseMeshesInstancedAsyncOptions): Promise<void>;
61
+ /**
62
+ * Parse IFC content and return symbolic representations (Plan, Annotation, FootPrint)
63
+ * These are pre-authored 2D curves for architectural drawings
64
+ */
65
+ parseSymbolicRepresentations(content: string): SymbolicRepresentationCollection;
65
66
  /**
66
67
  * Get IFC-Lite API instance
67
68
  */
@@ -1 +1 @@
1
- {"version":3,"file":"ifc-lite-bridge.d.ts","sourceRoot":"","sources":["../src/ifc-lite-bridge.ts"],"names":[],"mappings":"AAIA;;;GAGG;AAEH,OAAa,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACpI,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,YAAY,EAAE,CAAC;AAErG,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,QAAQ,GAAG,iBAAiB,GAAG,SAAS,CAAC;CACjD;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,uBAAuB;IACtC,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACtE,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAC7C,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,KAAK,IAAI,CAAC;CAClF;AAED,MAAM,WAAW,gCAAgC;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE,iBAAiB,EAAE,EAAE,QAAQ,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACjF,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,IAAI,CAAC;CACvD;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,WAAW,CAAkB;IAErC;;;OAGG;IACG,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW7C;;;OAGG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc;IAO5C;;;;OAIG;IACH,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,uBAAuB;IAO9D;;;;OAIG;IACG,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,uBAA4B,GAAG,OAAO,CAAC,IAAI,CAAC;IAO7F;;;;;OAKG;IACG,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,gCAAqC,GAAG,OAAO,CAAC,IAAI,CAAC;IAO/G;;OAEG;IACH,MAAM,IAAI,MAAM;IAOhB;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,UAAU,IAAI,MAAM;CAGrB"}
1
+ {"version":3,"file":"ifc-lite-bridge.d.ts","sourceRoot":"","sources":["../src/ifc-lite-bridge.ts"],"names":[],"mappings":"AAUA,OAAa,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,YAAY,EAAE,gCAAgC,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACxM,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,YAAY,EAAE,gCAAgC,EAAE,gBAAgB,EAAE,cAAc,EAAE,CAAC;AAIzK,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,QAAQ,GAAG,iBAAiB,GAAG,SAAS,CAAC;CACjD;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,uBAAuB;IACtC,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACtE,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAC7C,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,KAAK,IAAI,CAAC;CAClF;AAED,MAAM,WAAW,gCAAgC;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE,iBAAiB,EAAE,EAAE,QAAQ,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACjF,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,IAAI,CAAC;CACvD;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,WAAW,CAAkB;IAErC;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB3B;;;OAGG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc;IAiB5C;;;;OAIG;IACH,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,uBAAuB;IAiB9D;;;;OAIG;IACG,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,uBAA4B,GAAG,OAAO,CAAC,IAAI,CAAC;IAe7F;;;;;OAKG;IACG,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,gCAAqC,GAAG,OAAO,CAAC,IAAI,CAAC;IAe/G;;;OAGG;IACH,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,gCAAgC;IAiB/E;;OAEG;IACH,MAAM,IAAI,MAAM;IAOhB;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,UAAU,IAAI,MAAM;CAGrB"}
@@ -5,7 +5,9 @@
5
5
  * IFC-Lite bridge - initializes and manages IFC-Lite WASM for geometry processing
6
6
  * Replaces web-ifc-bridge.ts with native IFC-Lite implementation (1.9x faster)
7
7
  */
8
+ import { createLogger } from '@ifc-lite/data';
8
9
  import init, { IfcAPI } from '@ifc-lite/wasm';
10
+ const log = createLogger('Geometry');
9
11
  export class IfcLiteBridge {
10
12
  ifcApi = null;
11
13
  initialized = false;
@@ -13,14 +15,23 @@ export class IfcLiteBridge {
13
15
  * Initialize IFC-Lite WASM
14
16
  * The WASM binary is automatically resolved from the same location as the JS module
15
17
  */
16
- async init(_wasmPath) {
18
+ async init() {
17
19
  if (this.initialized)
18
20
  return;
19
- // Initialize WASM module - wasm-bindgen automatically resolves the WASM URL
20
- // from import.meta.url, no need to manually construct paths
21
- await init();
22
- this.ifcApi = new IfcAPI();
23
- this.initialized = true;
21
+ try {
22
+ // Initialize WASM module - wasm-bindgen automatically resolves the WASM URL
23
+ // from import.meta.url, no need to manually construct paths
24
+ await init();
25
+ this.ifcApi = new IfcAPI();
26
+ this.initialized = true;
27
+ log.info('WASM geometry engine initialized');
28
+ }
29
+ catch (error) {
30
+ log.error('Failed to initialize WASM geometry engine', error, {
31
+ operation: 'init',
32
+ });
33
+ throw error;
34
+ }
24
35
  }
25
36
  /**
26
37
  * Parse IFC content and return mesh collection (blocking)
@@ -30,7 +41,18 @@ export class IfcLiteBridge {
30
41
  if (!this.ifcApi) {
31
42
  throw new Error('IFC-Lite not initialized. Call init() first.');
32
43
  }
33
- return this.ifcApi.parseMeshes(content);
44
+ try {
45
+ const collection = this.ifcApi.parseMeshes(content);
46
+ log.debug(`Parsed ${collection.length} meshes`, { operation: 'parseMeshes' });
47
+ return collection;
48
+ }
49
+ catch (error) {
50
+ log.error('Failed to parse IFC geometry', error, {
51
+ operation: 'parseMeshes',
52
+ data: { contentLength: content.length },
53
+ });
54
+ throw error;
55
+ }
34
56
  }
35
57
  /**
36
58
  * Parse IFC content and return instanced geometry collection (blocking)
@@ -41,7 +63,18 @@ export class IfcLiteBridge {
41
63
  if (!this.ifcApi) {
42
64
  throw new Error('IFC-Lite not initialized. Call init() first.');
43
65
  }
44
- return this.ifcApi.parseMeshesInstanced(content);
66
+ try {
67
+ const collection = this.ifcApi.parseMeshesInstanced(content);
68
+ log.debug(`Parsed ${collection.length} instanced geometries`, { operation: 'parseMeshesInstanced' });
69
+ return collection;
70
+ }
71
+ catch (error) {
72
+ log.error('Failed to parse instanced IFC geometry', error, {
73
+ operation: 'parseMeshesInstanced',
74
+ data: { contentLength: content.length },
75
+ });
76
+ throw error;
77
+ }
45
78
  }
46
79
  /**
47
80
  * Parse IFC content with streaming (non-blocking)
@@ -52,7 +85,16 @@ export class IfcLiteBridge {
52
85
  if (!this.ifcApi) {
53
86
  throw new Error('IFC-Lite not initialized. Call init() first.');
54
87
  }
55
- return this.ifcApi.parseMeshesAsync(content, options);
88
+ try {
89
+ return await this.ifcApi.parseMeshesAsync(content, options);
90
+ }
91
+ catch (error) {
92
+ log.error('Failed to parse IFC geometry (streaming)', error, {
93
+ operation: 'parseMeshesAsync',
94
+ data: { contentLength: content.length },
95
+ });
96
+ throw error;
97
+ }
56
98
  }
57
99
  /**
58
100
  * Parse IFC content with streaming instanced geometry (non-blocking)
@@ -64,7 +106,37 @@ export class IfcLiteBridge {
64
106
  if (!this.ifcApi) {
65
107
  throw new Error('IFC-Lite not initialized. Call init() first.');
66
108
  }
67
- return this.ifcApi.parseMeshesInstancedAsync(content, options);
109
+ try {
110
+ return await this.ifcApi.parseMeshesInstancedAsync(content, options);
111
+ }
112
+ catch (error) {
113
+ log.error('Failed to parse instanced IFC geometry (streaming)', error, {
114
+ operation: 'parseMeshesInstancedAsync',
115
+ data: { contentLength: content.length },
116
+ });
117
+ throw error;
118
+ }
119
+ }
120
+ /**
121
+ * Parse IFC content and return symbolic representations (Plan, Annotation, FootPrint)
122
+ * These are pre-authored 2D curves for architectural drawings
123
+ */
124
+ parseSymbolicRepresentations(content) {
125
+ if (!this.ifcApi) {
126
+ throw new Error('IFC-Lite not initialized. Call init() first.');
127
+ }
128
+ try {
129
+ const collection = this.ifcApi.parseSymbolicRepresentations(content);
130
+ log.debug(`Parsed ${collection.totalCount} symbolic items (${collection.polylineCount} polylines, ${collection.circleCount} circles)`, { operation: 'parseSymbolicRepresentations' });
131
+ return collection;
132
+ }
133
+ catch (error) {
134
+ log.error('Failed to parse symbolic representations', error, {
135
+ operation: 'parseSymbolicRepresentations',
136
+ data: { contentLength: content.length },
137
+ });
138
+ throw error;
139
+ }
68
140
  }
69
141
  /**
70
142
  * Get IFC-Lite API instance
@@ -1 +1 @@
1
- {"version":3,"file":"ifc-lite-bridge.js","sourceRoot":"","sources":["../src/ifc-lite-bridge.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;GAGG;AAEH,OAAO,IAAI,EAAE,EAAE,MAAM,EAAwF,MAAM,gBAAgB,CAAC;AAmCpI,MAAM,OAAO,aAAa;IAChB,MAAM,GAAkB,IAAI,CAAC;IAC7B,WAAW,GAAY,KAAK,CAAC;IAErC;;;OAGG;IACH,KAAK,CAAC,IAAI,CAAC,SAAkB;QAC3B,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;QAE7B,4EAA4E;QAC5E,4DAA4D;QAC5D,MAAM,IAAI,EAAE,CAAC;QAEb,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACH,WAAW,CAAC,OAAe;QACzB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED;;;;OAIG;IACH,oBAAoB,CAAC,OAAe;QAClC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACnD,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,gBAAgB,CAAC,OAAe,EAAE,UAAmC,EAAE;QAC3E,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,yBAAyB,CAAC,OAAe,EAAE,UAA4C,EAAE;QAC7F,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,yBAAyB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACjE,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,MAAM,EAAE,OAAO,IAAI,SAAS,CAAC;IAC3C,CAAC;CACF"}
1
+ {"version":3,"file":"ifc-lite-bridge.js","sourceRoot":"","sources":["../src/ifc-lite-bridge.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,3 @@
1
- /**
2
- * IFC-Lite Mesh Collector - extracts triangle data from IFC-Lite WASM
3
- * Replaces mesh-collector.ts - uses native Rust geometry processing (1.9x faster)
4
- */
5
1
  import type { IfcAPI, InstancedGeometry } from '@ifc-lite/wasm';
6
2
  import type { MeshData } from './types.js';
7
3
  export interface StreamingProgress {
@@ -27,7 +23,17 @@ export interface StreamingColorUpdateEvent {
27
23
  type: 'colorUpdate';
28
24
  updates: Map<number, [number, number, number, number]>;
29
25
  }
30
- export type StreamingEvent = StreamingBatchEvent | StreamingCompleteEvent | StreamingColorUpdateEvent;
26
+ export interface StreamingRtcOffsetEvent {
27
+ type: 'rtcOffset';
28
+ /** RTC offset in IFC coordinates (before Z-up to Y-up conversion) */
29
+ rtcOffset: {
30
+ x: number;
31
+ y: number;
32
+ z: number;
33
+ };
34
+ hasRtc: boolean;
35
+ }
36
+ export type StreamingEvent = StreamingBatchEvent | StreamingCompleteEvent | StreamingColorUpdateEvent | StreamingRtcOffsetEvent;
31
37
  export declare class IfcLiteMeshCollector {
32
38
  private ifcApi;
33
39
  private content;
@@ -38,17 +44,28 @@ export declare class IfcLiteMeshCollector {
38
44
  * Transformation: swap Y and Z, then negate new Z to maintain right-handedness
39
45
  */
40
46
  private convertZUpToYUp;
47
+ /**
48
+ * Reverse triangle winding order to correct for handedness flip.
49
+ * The Z-up to Y-up conversion includes a reflection (Z negation),
50
+ * which flips the handedness. This reverses winding to compensate,
51
+ * ensuring triangles face the correct direction after transformation.
52
+ */
53
+ private reverseWindingOrder;
41
54
  /**
42
55
  * Collect all meshes from IFC-Lite
43
56
  * Much faster than web-ifc (~1.9x speedup)
44
57
  */
45
58
  collectMeshes(): MeshData[];
59
+ /**
60
+ * Get building rotation extracted from IfcSite placement
61
+ */
62
+ getBuildingRotation(): number | undefined;
46
63
  /**
47
64
  * Collect meshes incrementally, yielding batches for progressive rendering
48
65
  * Uses fast-first-frame streaming: simple geometry (walls, slabs) first
49
66
  * @param batchSize Number of meshes per batch (default: 25 for faster first frame)
50
67
  */
51
- collectMeshesStreaming(batchSize?: number): AsyncGenerator<MeshData[] | StreamingColorUpdateEvent>;
68
+ collectMeshesStreaming(batchSize?: number): AsyncGenerator<MeshData[] | StreamingColorUpdateEvent | StreamingRtcOffsetEvent>;
52
69
  /**
53
70
  * Collect meshes with dynamic batch sizing (ramp-up approach)
54
71
  * Accumulates meshes from WASM and yields them in dynamically-sized batches
@@ -1 +1 @@
1
- {"version":3,"file":"ifc-lite-mesh-collector.d.ts","sourceRoot":"","sources":["../src/ifc-lite-mesh-collector.ts"],"names":[],"mappings":"AAIA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAc,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,QAAQ,GAAG,iBAAiB,GAAG,SAAS,CAAC;CACjD;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,QAAQ,EAAE,CAAC;IACnB,QAAQ,EAAE,iBAAiB,CAAC;CAC7B;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE;QACL,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACxD;AAED,MAAM,MAAM,cAAc,GAAG,mBAAmB,GAAG,sBAAsB,GAAG,yBAAyB,CAAC;AAEtG,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAK3C;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAUvB;;;OAGG;IACH,aAAa,IAAI,QAAQ,EAAE;IAyD3B;;;;OAIG;IACI,sBAAsB,CAAC,SAAS,GAAE,MAAW,GAAG,cAAc,CAAC,QAAQ,EAAE,GAAG,yBAAyB,CAAC;IAyG7G;;;;OAIG;IACI,6BAA6B,CAClC,YAAY,EAAE,MAAM,MAAM,GACzB,cAAc,CAAC,QAAQ,EAAE,CAAC;IAmC7B;;;;;OAKG;IACI,iCAAiC,CAAC,SAAS,GAAE,MAAW,GAAG,cAAc,CAAC,iBAAiB,EAAE,CAAC;CAsDtG"}
1
+ {"version":3,"file":"ifc-lite-mesh-collector.d.ts","sourceRoot":"","sources":["../src/ifc-lite-mesh-collector.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,MAAM,EAAc,iBAAiB,EAAkB,MAAM,gBAAgB,CAAC;AAC5F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,QAAQ,GAAG,iBAAiB,GAAG,SAAS,CAAC;CACjD;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,QAAQ,EAAE,CAAC;IACnB,QAAQ,EAAE,iBAAiB,CAAC;CAC7B;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE;QACL,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACxD;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,WAAW,CAAC;IAClB,qEAAqE;IACrE,SAAS,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,MAAM,cAAc,GAAG,mBAAmB,GAAG,sBAAsB,GAAG,yBAAyB,GAAG,uBAAuB,CAAC;AAEhI,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAK3C;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAUvB;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAkB3B;;;OAGG;IACH,aAAa,IAAI,QAAQ,EAAE;IAwF3B;;OAEG;IACH,mBAAmB,IAAI,MAAM,GAAG,SAAS;IAIzC;;;;OAIG;IACI,sBAAsB,CAAC,SAAS,GAAE,MAAW,GAAG,cAAc,CAAC,QAAQ,EAAE,GAAG,yBAAyB,GAAG,uBAAuB,CAAC;IAqKvI;;;;OAIG;IACI,6BAA6B,CAClC,YAAY,EAAE,MAAM,MAAM,GACzB,cAAc,CAAC,QAAQ,EAAE,CAAC;IAmC7B;;;;;OAKG;IACI,iCAAiC,CAAC,SAAS,GAAE,MAAW,GAAG,cAAc,CAAC,iBAAiB,EAAE,CAAC;CAsDtG"}