bimatter-viewer-react 0.11.12 → 1.0.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.
@@ -192028,13 +192028,24 @@ var C_ = class {
192028
192028
  z: -(this.getScaledCoordinate(c, 1) ?? 0)
192029
192029
  }, d.points = e, d;
192030
192030
  }
192031
- }, w_ = 1e-5, T_ = {
192031
+ }, w_ = 1e-5, T_ = 262144, E_ = 250, D_ = 32768, O_ = 4096;
192032
+ function k_(e, t) {
192033
+ if (t <= e.length) return e;
192034
+ let n = new Float32Array(Math.max(t, e.length * 2));
192035
+ return n.set(e), n;
192036
+ }
192037
+ function A_(e, t) {
192038
+ if (t <= e.length) return e;
192039
+ let n = new Uint32Array(Math.max(t, e.length * 2));
192040
+ return n.set(e), n;
192041
+ }
192042
+ var j_ = {
192032
192043
  b: .55,
192033
192044
  g: .55,
192034
192045
  name: -1,
192035
192046
  opacity: .18,
192036
192047
  r: .55
192037
- }, E_ = class {
192048
+ }, M_ = class {
192038
192049
  useIfcElemetAssembly = !1;
192039
192050
  useIfcColors = !1;
192040
192051
  useIfcSpace = !0;
@@ -192132,7 +192143,7 @@ var C_ = class {
192132
192143
  }
192133
192144
  if (console.log("spend to read ifc file: ", Date.now() - r, "ms"), a === -1) return console.error("Model loading error"), !1;
192134
192145
  try {
192135
- let e = this.coordinationMatrix?.toArray(), t = new D_(this.parser, a, {
192146
+ let e = this.coordinationMatrix?.toArray(), t = new N_(this.parser, a, {
192136
192147
  geometryTransformation: e,
192137
192148
  maxGeometriesPerMesh: this.chunk,
192138
192149
  maxMeshBytes: this.maxMeshBytes,
@@ -192264,7 +192275,7 @@ var C_ = class {
192264
192275
  }
192265
192276
  };
192266
192277
  }
192267
- }, D_ = class {
192278
+ }, N_ = class {
192268
192279
  materials = {};
192269
192280
  elementsAssembly = null;
192270
192281
  parser;
@@ -192283,7 +192294,7 @@ var C_ = class {
192283
192294
  let i = this.planGeometryChunks();
192284
192295
  n && this.planGeometryChunks(i, {
192285
192296
  isIfcSpace: !0,
192286
- material: T_,
192297
+ material: j_,
192287
192298
  types: [Lc]
192288
192299
  }), this.applyGeometryTransformation();
192289
192300
  let a = this.createChunkBuilders(i), o = /* @__PURE__ */ new Map(), s = {
@@ -192293,7 +192304,7 @@ var C_ = class {
192293
192304
  };
192294
192305
  return this.streamGeometryChunks(a, o, e, {}, s), n && this.streamGeometryChunks(a, o, e, {
192295
192306
  isIfcSpace: !0,
192296
- material: T_,
192307
+ material: j_,
192297
192308
  types: [Lc]
192298
192309
  }, s), this.createModelDataFromChunks(a, r);
192299
192310
  }
@@ -192302,14 +192313,14 @@ var C_ = class {
192302
192313
  let r = /* @__PURE__ */ new Map(), i = {
192303
192314
  callbacks: n,
192304
192315
  emittedChunks: 0,
192316
+ lastFlushTime: Date.now(),
192305
192317
  nextGeometryID: 0,
192306
- pendingGeometryCount: 0,
192307
192318
  processedGeometryCount: 0,
192308
192319
  totalGeometries: this.getGeometryProgressTotal()
192309
192320
  };
192310
192321
  return this.streamDynamicGeometryChunks(r, e, {}, i), t && this.streamDynamicGeometryChunks(r, e, {
192311
192322
  isIfcSpace: !0,
192312
- material: T_,
192323
+ material: j_,
192313
192324
  types: [Lc]
192314
192325
  }, i), this.flushDynamicGeometryChunks(r, i), {
192315
192326
  data: {},
@@ -192325,11 +192336,13 @@ var C_ = class {
192325
192336
  let s = a.get(o), c = this.getPlacedGeometryPayload(s, i.expressID, n.material);
192326
192337
  if (!c) continue;
192327
192338
  let l = this.getDynamicChunkBuilder(e, c, !!n.isIfcSpace, r);
192328
- this.writeGeometryPayloadToDynamicBuilder(l, c), t.add(c.elementId), r.pendingGeometryCount++, r.processedGeometryCount++, r.callbacks.onGeometryProgress?.({
192339
+ this.writeGeometryPayloadToDynamicBuilder(l, c), t.add(c.elementId), r.processedGeometryCount++, r.callbacks.onGeometryProgress?.({
192329
192340
  emittedChunks: r.emittedChunks,
192330
192341
  processed: r.processedGeometryCount,
192331
192342
  total: r.totalGeometries
192332
- }), this.options.maxGeometriesPerMesh > 0 && r.pendingGeometryCount >= this.options.maxGeometriesPerMesh && this.flushDynamicGeometryChunks(e, r);
192343
+ });
192344
+ let u = Date.now();
192345
+ u - r.lastFlushTime >= E_ && (r.lastFlushTime = u, this.flushLargeDynamicGeometryChunks(e, r));
192333
192346
  }
192334
192347
  } finally {
192335
192348
  this.deleteFlatMesh(i);
@@ -192338,58 +192351,70 @@ var C_ = class {
192338
192351
  }
192339
192352
  getDynamicChunkBuilder(e, t, n, r) {
192340
192353
  let i = e.get(t.materialKey);
192341
- if (i && this.canFitInChunk(i, t)) return i;
192354
+ if (i && this.canFitInStreamingChunk(i, t)) return i;
192342
192355
  i && this.emitDynamicGeometryChunk(i, r);
192343
192356
  let a = {
192344
192357
  ...t.material,
192345
192358
  name: r.nextGeometryID
192346
192359
  };
192347
192360
  r.nextGeometryID++;
192348
- let o = {
192361
+ let o = Math.max(O_, t.vertexCount), s = {
192349
192362
  bytes: 0,
192350
192363
  geometryCount: 0,
192351
192364
  geometryID: a.name,
192352
- ids: [],
192365
+ ids: new Uint32Array(o),
192353
192366
  indexCount: 0,
192354
- indices: [],
192367
+ indices: new Uint32Array(Math.max(o * 2, t.indexCount)),
192355
192368
  isIfcSpace: n,
192356
192369
  material: a,
192357
192370
  materialKey: t.materialKey,
192358
- normals: [],
192359
- positions: [],
192371
+ normals: new Float32Array(o * 3),
192372
+ positions: new Float32Array(o * 3),
192360
192373
  vertexCount: 0
192361
192374
  };
192362
- return e.set(t.materialKey, o), o;
192375
+ return e.set(t.materialKey, s), s;
192363
192376
  }
192364
192377
  writeGeometryPayloadToDynamicBuilder(e, t) {
192365
- let n = this.meshMatrix.fromArray(t.matrix), r = n.elements, i = this.normalMatrix.getNormalMatrix(n).elements, a = e.vertexCount;
192366
- for (let n = 0; n < t.vertexData.length; n += 6) {
192367
- let a = this.getFiniteNumber(t.vertexData[n]), o = this.getFiniteNumber(t.vertexData[n + 1]), s = this.getFiniteNumber(t.vertexData[n + 2]), c = this.getFiniteNumber(t.vertexData[n + 3]), l = this.getFiniteNumber(t.vertexData[n + 4]), u = this.getFiniteNumber(t.vertexData[n + 5]);
192368
- e.positions.push(r[0] * a + r[4] * o + r[8] * s + r[12], r[1] * a + r[5] * o + r[9] * s + r[13], r[2] * a + r[6] * o + r[10] * s + r[14]);
192369
- let d = i[0] * c + i[3] * l + i[6] * u, f = i[1] * c + i[4] * l + i[7] * u, p = i[2] * c + i[5] * l + i[8] * u, m = Math.hypot(d, f, p);
192370
- m > 0 && (d /= m, f /= m, p /= m), e.normals.push(d, f, p), e.ids.push(t.elementId);
192371
- }
192372
- if (t.indexData.length) for (let n = 0; n < t.indexData.length; n++) e.indices.push(t.indexData[n] + a);
192373
- else for (let n = 0; n < t.vertexCount; n++) e.indices.push(a + n);
192378
+ let n = this.meshMatrix.fromArray(t.matrix), r = n.elements, i = this.normalMatrix.getNormalMatrix(n).elements, a = e.vertexCount, o = a + t.vertexCount, s = e.indexCount, { ids: c, normals: l, positions: u } = this.reserveDynamicBuilder(e, o, s + t.indexCount), d = a;
192379
+ for (let e = 0; e < t.vertexData.length; e += 6, d++) {
192380
+ let n = this.getFiniteNumber(t.vertexData[e]), a = this.getFiniteNumber(t.vertexData[e + 1]), o = this.getFiniteNumber(t.vertexData[e + 2]), s = this.getFiniteNumber(t.vertexData[e + 3]), f = this.getFiniteNumber(t.vertexData[e + 4]), p = this.getFiniteNumber(t.vertexData[e + 5]), m = d * 3;
192381
+ u[m] = r[0] * n + r[4] * a + r[8] * o + r[12], u[m + 1] = r[1] * n + r[5] * a + r[9] * o + r[13], u[m + 2] = r[2] * n + r[6] * a + r[10] * o + r[14];
192382
+ let ee = i[0] * s + i[3] * f + i[6] * p, te = i[1] * s + i[4] * f + i[7] * p, ne = i[2] * s + i[5] * f + i[8] * p, re = Math.hypot(ee, te, ne);
192383
+ re > 0 && (ee /= re, te /= re, ne /= re), l[m] = ee, l[m + 1] = te, l[m + 2] = ne, c[d] = t.elementId;
192384
+ }
192385
+ let { indices: f } = e;
192386
+ if (t.indexData.length) for (let e = 0; e < t.indexData.length; e++) f[s + e] = t.indexData[e] + a;
192387
+ else for (let e = 0; e < t.vertexCount; e++) f[s + e] = a + e;
192374
192388
  e.bytes += t.bytes, e.geometryCount++, e.indexCount += t.indexCount, e.vertexCount += t.vertexCount;
192375
192389
  }
192390
+ reserveDynamicBuilder(e, t, n) {
192391
+ return e.positions = k_(e.positions, t * 3), e.normals = k_(e.normals, t * 3), e.ids = A_(e.ids, t), e.indices = A_(e.indices, n), e;
192392
+ }
192393
+ canFitInStreamingChunk(e, t) {
192394
+ return e.geometryCount > 0 && e.vertexCount + t.vertexCount > T_ ? !1 : this.canFitInChunk(e, t);
192395
+ }
192396
+ flushLargeDynamicGeometryChunks(e, t) {
192397
+ e.forEach((n, r) => {
192398
+ n.vertexCount < D_ || (this.emitDynamicGeometryChunk(n, t), e.delete(r));
192399
+ });
192400
+ }
192376
192401
  flushDynamicGeometryChunks(e, t) {
192377
192402
  e.forEach((e) => {
192378
192403
  this.emitDynamicGeometryChunk(e, t);
192379
- }), e.clear(), t.pendingGeometryCount = 0;
192404
+ }), e.clear();
192380
192405
  }
192381
192406
  emitDynamicGeometryChunk(e, t) {
192382
192407
  if (!e.geometryCount) return;
192383
- let n = t.emittedChunks;
192408
+ let n = t.emittedChunks, { indexCount: r, vertexCount: i } = e;
192384
192409
  t.emittedChunks++, t.callbacks.onGeometryChunk?.({
192385
192410
  chunkIndex: n,
192386
192411
  geometry: this.optimizeIfcGeometryData({
192387
- ids: new Uint32Array(e.ids),
192388
- ind: new Uint32Array(e.indices),
192412
+ ids: e.ids.slice(0, i),
192413
+ ind: e.indices.slice(0, r),
192389
192414
  isIfcSpace: e.isIfcSpace || void 0,
192390
192415
  mat: e.material,
192391
- norm: new Float32Array(e.normals),
192392
- pos: new Float32Array(e.positions)
192416
+ norm: e.normals.slice(0, i * 3),
192417
+ pos: e.positions.slice(0, i * 3)
192393
192418
  }),
192394
192419
  geometryID: e.geometryID,
192395
192420
  isIfcSpace: e.isIfcSpace,
@@ -192398,7 +192423,7 @@ var C_ = class {
192398
192423
  emittedChunks: t.emittedChunks,
192399
192424
  processed: t.processedGeometryCount,
192400
192425
  total: t.totalGeometries
192401
- }), e.bytes = 0, e.geometryCount = 0, e.ids = [], e.indexCount = 0, e.indices = [], e.normals = [], e.positions = [], e.vertexCount = 0;
192426
+ }), e.geometryCount = 0;
192402
192427
  }
192403
192428
  streamGeometryChunks(e, t, n, r, i) {
192404
192429
  this.streamMeshes(r, (a) => {
@@ -192653,4 +192678,4 @@ var C_ = class {
192653
192678
  }
192654
192679
  };
192655
192680
  //#endregion
192656
- export { E_ as IFCLoader };
192681
+ export { M_ as IFCLoader };
@@ -131,5 +131,45 @@ export declare class BMTLoader {
131
131
  private getModelNameFromPath;
132
132
  loadModel(path: string, callbacks?: BmtParseCallbacks): Promise<BmtModelData>;
133
133
  parseBinaryFile(data: ArrayBuffer, callbacks?: BmtParseCallbacks): BmtModelData;
134
+ /**
135
+ * Incremental parser for bytes that arrive over time (e.g. a fetch
136
+ * stream). Geometry chunks are emitted as soon as their bytes are read.
137
+ */
138
+ createStreamParser(callbacks?: BmtParseCallbacks, totalBytes?: number): BmtStreamParser;
139
+ /** @internal */
140
+ createParseState(streamingCoordinationMatrix?: string): BmtParseState;
141
+ /** @internal */
142
+ parseChunk(state: BmtParseState, type: number, data: Uint8Array, callbacks: BmtParseCallbacks, loadedBytes: number, totalBytes: number): void;
143
+ /** @internal */
144
+ createModelData(state: BmtParseState): BmtModelData;
145
+ private parseGeometry;
146
+ }
147
+ type BmtParseState = {
148
+ curMatrix: string;
149
+ deferredChunks: BmtGeometryChunkData[] | null;
150
+ emittedChunks: number;
151
+ firstMatrix?: string;
152
+ geomData: BmtModelGeometryData;
153
+ gridsData?: ModelGridsData;
154
+ propsData: BmtModelProps;
155
+ streamingCoordinationMatrix?: string;
156
+ structure: BmtModelStructure;
157
+ trailingMatrix?: string;
158
+ trueNorthAngle?: number;
159
+ };
160
+ export declare class BmtStreamParser {
161
+ private buffer;
162
+ private headerRead;
163
+ private length;
164
+ private offset;
165
+ private readonly state;
166
+ private readonly loader;
167
+ private readonly callbacks;
168
+ private readonly totalBytes;
169
+ constructor(loader: BMTLoader, callbacks: BmtParseCallbacks, totalBytes?: number);
170
+ push(bytes: Uint8Array): void;
171
+ finish(): BmtModelData;
172
+ private ensureCapacity;
173
+ private parseAvailable;
134
174
  }
135
175
  export {};
@@ -97,6 +97,9 @@ export declare class IfcParser {
97
97
  private streamDynamicGeometryChunks;
98
98
  private getDynamicChunkBuilder;
99
99
  private writeGeometryPayloadToDynamicBuilder;
100
+ private reserveDynamicBuilder;
101
+ private canFitInStreamingChunk;
102
+ private flushLargeDynamicGeometryChunks;
100
103
  private flushDynamicGeometryChunks;
101
104
  private emitDynamicGeometryChunk;
102
105
  private streamGeometryChunks;
package/lib/Model.d.ts CHANGED
@@ -8,8 +8,8 @@ type ModelProps = {
8
8
  data: BmtModelData;
9
9
  loadGeneration: number;
10
10
  materialMode?: ViewerMaterialMode;
11
- onUploadComplete?: (uploadedItemCount: number) => void;
12
- onUploadProgress?: (uploadedItemCount: number, totalItemCount: number) => void;
11
+ onUploadComplete?: (modelID: number, uploadedItemCount: number) => void;
12
+ onUploadProgress?: (modelID: number, uploadedItemCount: number, totalItemCount: number) => void;
13
13
  trueNorthEnabled?: boolean;
14
14
  useWebGPU?: boolean;
15
15
  };
@@ -5,7 +5,7 @@ import { type ViewerNotesApi } from "../utils/NotesUtils";
5
5
  import { type ViewerApi, type ViewerSceneApi } from "../api/ViewerApi";
6
6
  export type ModelsData = Record<number, BmtModelData>;
7
7
  export type CameraDprMode = "wake" | "move" | "sleep";
8
- export declare function ViewerScene({ autoFitCamera, cameraRef, controlRef, fitToView, loadGeneration, lightRef, materialMode, modelRef, modelsData, modelsLoading, initialPlanPlane, createPlanComment, createPlanMarkupCloud, deleteAllPlanNotes, onReady, onModelsReady, onCameraDprModeChange, publicApi, invalidatePlanViews, setPlanPreselectionHandler, setPlanVisualObjectsGetter, setSceneApi, setPlanNotesModeActive, usePerformanceMoving, useWebGPU, }: {
8
+ export declare const ViewerScene: import("react").MemoExoticComponent<({ autoFitCamera, cameraRef, controlRef, fitToView, loadGeneration, lightRef, materialMode, modelRef, modelsData, modelsLoading, initialPlanPlane, createPlanComment, createPlanMarkupCloud, deleteAllPlanNotes, onReady, onModelsReady, onCameraDprModeChange, publicApi, invalidatePlanViews, setPlanPreselectionHandler, setPlanVisualObjectsGetter, setSceneApi, setPlanNotesModeActive, usePerformanceMoving, useWebGPU, }: {
9
9
  autoFitCamera: boolean;
10
10
  cameraRef: ViewerCameraRef;
11
11
  controlRef: ViewerControlsRef;
@@ -34,4 +34,4 @@ export declare function ViewerScene({ autoFitCamera, cameraRef, controlRef, fitT
34
34
  setPlanNotesModeActive: (active: boolean) => void;
35
35
  usePerformanceMoving: boolean;
36
36
  useWebGPU: boolean;
37
- }): import("react/jsx-runtime").JSX.Element;
37
+ }) => import("react/jsx-runtime").JSX.Element>;
@@ -0,0 +1 @@
1
+ (function(){function e(e){let t=e.length;for(;--t>=0;)e[t]=0}let t=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),n=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),r=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),i=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=Array(288*2);e(a);let o=Array(60);e(o);let s=Array(512);e(s);let c=Array(256);e(c);let l=Array(29);e(l);let u=Array(30);e(u);function d(e,t,n,r,i){this.static_tree=e,this.extra_bits=t,this.extra_base=n,this.elems=r,this.max_length=i,this.has_stree=e&&e.length}let f,p,m;function h(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}let g=e=>e<256?s[e]:s[256+(e>>>7)],_=(e,t)=>{e.pending_buf[e.pending++]=t&255,e.pending_buf[e.pending++]=t>>>8&255},v=(e,t,n)=>{e.bi_valid>16-n?(e.bi_buf|=t<<e.bi_valid&65535,_(e,e.bi_buf),e.bi_buf=t>>16-e.bi_valid,e.bi_valid+=n-16):(e.bi_buf|=t<<e.bi_valid&65535,e.bi_valid+=n)},y=(e,t,n)=>{v(e,n[t*2],n[t*2+1])},b=(e,t)=>{let n=0;do n|=e&1,e>>>=1,n<<=1;while(--t>0);return n>>>1},x=e=>{e.bi_valid===16?(_(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=e.bi_buf&255,e.bi_buf>>=8,e.bi_valid-=8)},S=(e,t)=>{let n=t.dyn_tree,r=t.max_code,i=t.stat_desc.static_tree,a=t.stat_desc.has_stree,o=t.stat_desc.extra_bits,s=t.stat_desc.extra_base,c=t.stat_desc.max_length,l,u,d,f,p,m,h=0;for(f=0;f<=15;f++)e.bl_count[f]=0;for(n[e.heap[e.heap_max]*2+1]=0,l=e.heap_max+1;l<573;l++)u=e.heap[l],f=n[n[u*2+1]*2+1]+1,f>c&&(f=c,h++),n[u*2+1]=f,!(u>r)&&(e.bl_count[f]++,p=0,u>=s&&(p=o[u-s]),m=n[u*2],e.opt_len+=m*(f+p),a&&(e.static_len+=m*(i[u*2+1]+p)));if(h!==0){do{for(f=c-1;e.bl_count[f]===0;)f--;e.bl_count[f]--,e.bl_count[f+1]+=2,e.bl_count[c]--,h-=2}while(h>0);for(f=c;f!==0;f--)for(u=e.bl_count[f];u!==0;)d=e.heap[--l],!(d>r)&&(n[d*2+1]!==f&&(e.opt_len+=(f-n[d*2+1])*n[d*2],n[d*2+1]=f),u--)}},C=(e,t,n)=>{let r=Array(16),i=0,a,o;for(a=1;a<=15;a++)i=i+n[a-1]<<1,r[a]=i;for(o=0;o<=t;o++){let t=e[o*2+1];t!==0&&(e[o*2]=b(r[t]++,t))}},w=()=>{let e,i,h,g,_,v=Array(16);for(h=0,g=0;g<28;g++)for(l[g]=h,e=0;e<1<<t[g];e++)c[h++]=g;for(c[h-1]=g,_=0,g=0;g<16;g++)for(u[g]=_,e=0;e<1<<n[g];e++)s[_++]=g;for(_>>=7;g<30;g++)for(u[g]=_<<7,e=0;e<1<<n[g]-7;e++)s[256+ _++]=g;for(i=0;i<=15;i++)v[i]=0;for(e=0;e<=143;)a[e*2+1]=8,e++,v[8]++;for(;e<=255;)a[e*2+1]=9,e++,v[9]++;for(;e<=279;)a[e*2+1]=7,e++,v[7]++;for(;e<=287;)a[e*2+1]=8,e++,v[8]++;for(C(a,287,v),e=0;e<30;e++)o[e*2+1]=5,o[e*2]=b(e,5);f=new d(a,t,257,286,15),p=new d(o,n,0,30,15),m=new d([],r,0,19,7)},T=e=>{let t;for(t=0;t<286;t++)e.dyn_ltree[t*2]=0;for(t=0;t<30;t++)e.dyn_dtree[t*2]=0;for(t=0;t<19;t++)e.bl_tree[t*2]=0;e.dyn_ltree[256*2]=1,e.opt_len=e.static_len=0,e.sym_next=e.matches=0},E=e=>{e.bi_valid>8?_(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0},D=(e,t,n,r)=>{let i=t*2,a=n*2;return e[i]<e[a]||e[i]===e[a]&&r[t]<=r[n]},O=(e,t,n)=>{let r=e.heap[n],i=n<<1;for(;i<=e.heap_len&&(i<e.heap_len&&D(t,e.heap[i+1],e.heap[i],e.depth)&&i++,!D(t,r,e.heap[i],e.depth));)e.heap[n]=e.heap[i],n=i,i<<=1;e.heap[n]=r},ee=(e,r,i)=>{let a,o,s=0,d,f;if(e.sym_next!==0)do a=e.pending_buf[e.sym_buf+ s++]&255,a+=(e.pending_buf[e.sym_buf+ s++]&255)<<8,o=e.pending_buf[e.sym_buf+ s++],a===0?y(e,o,r):(d=c[o],y(e,d+256+1,r),f=t[d],f!==0&&(o-=l[d],v(e,o,f)),a--,d=g(a),y(e,d,i),f=n[d],f!==0&&(a-=u[d],v(e,a,f)));while(s<e.sym_next);y(e,256,r)},k=(e,t)=>{let n=t.dyn_tree,r=t.stat_desc.static_tree,i=t.stat_desc.has_stree,a=t.stat_desc.elems,o,s,c=-1,l;for(e.heap_len=0,e.heap_max=573,o=0;o<a;o++)n[o*2]===0?n[o*2+1]=0:(e.heap[++e.heap_len]=c=o,e.depth[o]=0);for(;e.heap_len<2;)l=e.heap[++e.heap_len]=c<2?++c:0,n[l*2]=1,e.depth[l]=0,e.opt_len--,i&&(e.static_len-=r[l*2+1]);for(t.max_code=c,o=e.heap_len>>1;o>=1;o--)O(e,n,o);l=a;do o=e.heap[1],e.heap[1]=e.heap[e.heap_len--],O(e,n,1),s=e.heap[1],e.heap[--e.heap_max]=o,e.heap[--e.heap_max]=s,n[l*2]=n[o*2]+n[s*2],e.depth[l]=(e.depth[o]>=e.depth[s]?e.depth[o]:e.depth[s])+1,n[o*2+1]=n[s*2+1]=l,e.heap[1]=l++,O(e,n,1);while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],S(e,t),C(n,c,e.bl_count)},A=(e,t,n)=>{let r,i=-1,a,o=t[1],s=0,c=7,l=4;for(o===0&&(c=138,l=3),t[(n+1)*2+1]=65535,r=0;r<=n;r++)a=o,o=t[(r+1)*2+1],!(++s<c&&a===o)&&(s<l?e.bl_tree[a*2]+=s:a===0?s<=10?e.bl_tree[34]++:e.bl_tree[36]++:(a!==i&&e.bl_tree[a*2]++,e.bl_tree[32]++),s=0,i=a,o===0?(c=138,l=3):a===o?(c=6,l=3):(c=7,l=4))},te=(e,t,n)=>{let r,i=-1,a,o=t[1],s=0,c=7,l=4;for(o===0&&(c=138,l=3),r=0;r<=n;r++)if(a=o,o=t[(r+1)*2+1],!(++s<c&&a===o)){if(s<l)do y(e,a,e.bl_tree);while(--s!==0);else a===0?s<=10?(y(e,17,e.bl_tree),v(e,s-3,3)):(y(e,18,e.bl_tree),v(e,s-11,7)):(a!==i&&(y(e,a,e.bl_tree),s--),y(e,16,e.bl_tree),v(e,s-3,2));s=0,i=a,o===0?(c=138,l=3):a===o?(c=6,l=3):(c=7,l=4)}},ne=e=>{let t;for(A(e,e.dyn_ltree,e.l_desc.max_code),A(e,e.dyn_dtree,e.d_desc.max_code),k(e,e.bl_desc),t=18;t>=3&&e.bl_tree[i[t]*2+1]===0;t--);return e.opt_len+=3*(t+1)+5+5+4,t},re=(e,t,n,r)=>{let a;for(v(e,t-257,5),v(e,n-1,5),v(e,r-4,4),a=0;a<r;a++)v(e,e.bl_tree[i[a]*2+1],3);te(e,e.dyn_ltree,t-1),te(e,e.dyn_dtree,n-1)},ie=e=>{let t=4093624447,n;for(n=0;n<=31;n++,t>>>=1)if(t&1&&e.dyn_ltree[n*2]!==0)return 0;if(e.dyn_ltree[18]!==0||e.dyn_ltree[20]!==0||e.dyn_ltree[26]!==0)return 1;for(n=32;n<256;n++)if(e.dyn_ltree[n*2]!==0)return 1;return 0},ae=!1,oe=e=>{ae||=(w(),!0),e.l_desc=new h(e.dyn_ltree,f),e.d_desc=new h(e.dyn_dtree,p),e.bl_desc=new h(e.bl_tree,m),e.bi_buf=0,e.bi_valid=0,T(e)},se=(e,t,n,r)=>{v(e,0+ +!!r,3),E(e),_(e,n),_(e,~n),n&&e.pending_buf.set(e.window.subarray(t,t+n),e.pending),e.pending+=n};var ce={_tr_init:oe,_tr_stored_block:se,_tr_flush_block:(e,t,n,r)=>{let i,s,c=0;e.level>0?(e.strm.data_type===2&&(e.strm.data_type=ie(e)),k(e,e.l_desc),k(e,e.d_desc),c=ne(e),i=e.opt_len+3+7>>>3,s=e.static_len+3+7>>>3,s<=i&&(i=s)):i=s=n+5,n+4<=i&&t!==-1?se(e,t,n,r):e.strategy===4||s===i?(v(e,2+ +!!r,3),ee(e,a,o)):(v(e,4+ +!!r,3),re(e,e.l_desc.max_code+1,e.d_desc.max_code+1,c+1),ee(e,e.dyn_ltree,e.dyn_dtree)),T(e),r&&E(e)},_tr_tally:(e,t,n)=>(e.pending_buf[e.sym_buf+ e.sym_next++]=t,e.pending_buf[e.sym_buf+ e.sym_next++]=t>>8,e.pending_buf[e.sym_buf+ e.sym_next++]=n,t===0?e.dyn_ltree[n*2]++:(e.matches++,t--,e.dyn_ltree[(c[n]+256+1)*2]++,e.dyn_dtree[g(t)*2]++),e.sym_next===e.sym_end),_tr_align:e=>{v(e,2,3),y(e,256,a),x(e)}},le=(e,t,n,r)=>{let i=e&65535|0,a=e>>>16&65535|0,o=0;for(;n!==0;){o=n>2e3?2e3:n,n-=o;do i=i+t[r++]|0,a=a+i|0;while(--o);i%=65521,a%=65521}return i|a<<16|0};let ue=new Uint32Array((()=>{let e,t=[];for(var n=0;n<256;n++){e=n;for(var r=0;r<8;r++)e=e&1?3988292384^e>>>1:e>>>1;t[n]=e}return t})());var j=(e,t,n,r)=>{let i=ue,a=r+n;e^=-1;for(let n=r;n<a;n++)e=e>>>8^i[(e^t[n])&255];return e^-1},M={2:`need dictionary`,1:`stream end`,0:``,"-1":`file error`,"-2":`stream error`,"-3":`data error`,"-4":`insufficient memory`,"-5":`buffer error`,"-6":`incompatible version`},N={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8};let{_tr_init:de,_tr_stored_block:fe,_tr_flush_block:pe,_tr_tally:P,_tr_align:me}=ce,{Z_NO_FLUSH:F,Z_PARTIAL_FLUSH:he,Z_FULL_FLUSH:ge,Z_FINISH:I,Z_BLOCK:_e,Z_OK:L,Z_STREAM_END:ve,Z_STREAM_ERROR:R,Z_DATA_ERROR:ye,Z_BUF_ERROR:be,Z_DEFAULT_COMPRESSION:xe,Z_FILTERED:Se,Z_HUFFMAN_ONLY:Ce,Z_RLE:we,Z_FIXED:Te,Z_DEFAULT_STRATEGY:Ee,Z_UNKNOWN:De,Z_DEFLATED:Oe}=N,z=(e,t)=>(e.msg=M[t],t),ke=e=>e*2-(e>4?9:0),B=e=>{let t=e.length;for(;--t>=0;)e[t]=0},Ae=e=>{let t,n,r,i=e.w_size;t=e.hash_size,r=t;do n=e.head[--r],e.head[r]=n>=i?n-i:0;while(--t);t=i,r=t;do n=e.prev[--r],e.prev[r]=n>=i?n-i:0;while(--t)},V=(e,t,n)=>(t<<e.hash_shift^n)&e.hash_mask,H=e=>{let t=e.state,n=t.pending;n>e.avail_out&&(n=e.avail_out),n!==0&&(e.output.set(t.pending_buf.subarray(t.pending_out,t.pending_out+n),e.next_out),e.next_out+=n,t.pending_out+=n,e.total_out+=n,e.avail_out-=n,t.pending-=n,t.pending===0&&(t.pending_out=0))},U=(e,t)=>{pe(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,H(e.strm)},W=(e,t)=>{e.pending_buf[e.pending++]=t},je=(e,t)=>{e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=t&255},Me=(e,t,n,r)=>{let i=e.avail_in;return i>r&&(i=r),i===0?0:(e.avail_in-=i,t.set(e.input.subarray(e.next_in,e.next_in+i),n),e.state.wrap===1?e.adler=le(e.adler,t,i,n):e.state.wrap===2&&(e.adler=j(e.adler,t,i,n)),e.next_in+=i,e.total_in+=i,i)},Ne=(e,t)=>{let n=e.max_chain_length,r=e.strstart,i,a,o=e.prev_length,s=e.nice_match,c=e.strstart>e.w_size-262?e.strstart-(e.w_size-262):0,l=e.window,u=e.w_mask,d=e.prev,f=e.strstart+258,p=l[r+o-1],m=l[r+o];e.prev_length>=e.good_match&&(n>>=2),s>e.lookahead&&(s=e.lookahead);do{if(i=t,l[i+o]!==m||l[i+o-1]!==p||l[i]!==l[r]||l[++i]!==l[r+1])continue;r+=2,i++;do;while(l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&r<f);if(a=258-(f-r),r=f-258,a>o){if(e.match_start=t,o=a,a>=s)break;p=l[r+o-1],m=l[r+o]}}while((t=d[t&u])>c&&--n!==0);return o<=e.lookahead?o:e.lookahead},G=e=>{let t=e.w_size,n,r,i;do{if(r=e.window_size-e.lookahead-e.strstart,e.strstart>=t+(t-262)&&(e.window.set(e.window.subarray(t,t+t-r),0),e.match_start-=t,e.strstart-=t,e.block_start-=t,e.insert>e.strstart&&(e.insert=e.strstart),Ae(e),r+=t),e.strm.avail_in===0)break;if(n=Me(e.strm,e.window,e.strstart+e.lookahead,r),e.lookahead+=n,e.lookahead+e.insert>=3)for(i=e.strstart-e.insert,e.ins_h=e.window[i],e.ins_h=V(e,e.ins_h,e.window[i+1]);e.insert&&(e.ins_h=V(e,e.ins_h,e.window[i+3-1]),e.prev[i&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=i,i++,e.insert--,!(e.lookahead+e.insert<3)););}while(e.lookahead<262&&e.strm.avail_in!==0)},Pe=(e,t)=>{let n=e.pending_buf_size-5>e.w_size?e.w_size:e.pending_buf_size-5,r,i,a,o=0,s=e.strm.avail_in;do{if(r=65535,a=e.bi_valid+42>>3,e.strm.avail_out<a||(a=e.strm.avail_out-a,i=e.strstart-e.block_start,r>i+e.strm.avail_in&&(r=i+e.strm.avail_in),r>a&&(r=a),r<n&&(r===0&&t!==I||t===F||r!==i+e.strm.avail_in)))break;o=+(t===I&&r===i+e.strm.avail_in),fe(e,0,0,o),e.pending_buf[e.pending-4]=r,e.pending_buf[e.pending-3]=r>>8,e.pending_buf[e.pending-2]=~r,e.pending_buf[e.pending-1]=~r>>8,H(e.strm),i&&(i>r&&(i=r),e.strm.output.set(e.window.subarray(e.block_start,e.block_start+i),e.strm.next_out),e.strm.next_out+=i,e.strm.avail_out-=i,e.strm.total_out+=i,e.block_start+=i,r-=i),r&&(Me(e.strm,e.strm.output,e.strm.next_out,r),e.strm.next_out+=r,e.strm.avail_out-=r,e.strm.total_out+=r)}while(o===0);return s-=e.strm.avail_in,s&&(s>=e.w_size?(e.matches=2,e.window.set(e.strm.input.subarray(e.strm.next_in-e.w_size,e.strm.next_in),0),e.strstart=e.w_size,e.insert=e.strstart):(e.window_size-e.strstart<=s&&(e.strstart-=e.w_size,e.window.set(e.window.subarray(e.w_size,e.w_size+e.strstart),0),e.matches<2&&e.matches++,e.insert>e.strstart&&(e.insert=e.strstart)),e.window.set(e.strm.input.subarray(e.strm.next_in-s,e.strm.next_in),e.strstart),e.strstart+=s,e.insert+=s>e.w_size-e.insert?e.w_size-e.insert:s),e.block_start=e.strstart),e.high_water<e.strstart&&(e.high_water=e.strstart),o?4:t!==F&&t!==I&&e.strm.avail_in===0&&e.strstart===e.block_start?2:(a=e.window_size-e.strstart,e.strm.avail_in>a&&e.block_start>=e.w_size&&(e.block_start-=e.w_size,e.strstart-=e.w_size,e.window.set(e.window.subarray(e.w_size,e.w_size+e.strstart),0),e.matches<2&&e.matches++,a+=e.w_size,e.insert>e.strstart&&(e.insert=e.strstart)),a>e.strm.avail_in&&(a=e.strm.avail_in),a&&(Me(e.strm,e.window,e.strstart,a),e.strstart+=a,e.insert+=a>e.w_size-e.insert?e.w_size-e.insert:a),e.high_water<e.strstart&&(e.high_water=e.strstart),a=e.bi_valid+42>>3,a=e.pending_buf_size-a>65535?65535:e.pending_buf_size-a,n=a>e.w_size?e.w_size:a,i=e.strstart-e.block_start,(i>=n||(i||t===I)&&t!==F&&e.strm.avail_in===0&&i<=a)&&(r=i>a?a:i,o=+(t===I&&e.strm.avail_in===0&&r===i),fe(e,e.block_start,r,o),e.block_start+=r,H(e.strm)),o?3:1)},Fe=(e,t)=>{let n,r;for(;;){if(e.lookahead<262){if(G(e),e.lookahead<262&&t===F)return 1;if(e.lookahead===0)break}if(n=0,e.lookahead>=3&&(e.ins_h=V(e,e.ins_h,e.window[e.strstart+3-1]),n=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),n!==0&&e.strstart-n<=e.w_size-262&&(e.match_length=Ne(e,n)),e.match_length>=3)if(r=P(e,e.strstart-e.match_start,e.match_length-3),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=3){e.match_length--;do e.strstart++,e.ins_h=V(e,e.ins_h,e.window[e.strstart+3-1]),n=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart;while(--e.match_length!==0);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=V(e,e.ins_h,e.window[e.strstart+1]);else r=P(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(r&&(U(e,!1),e.strm.avail_out===0))return 1}return e.insert=e.strstart<2?e.strstart:2,t===I?(U(e,!0),e.strm.avail_out===0?3:4):e.sym_next&&(U(e,!1),e.strm.avail_out===0)?1:2},K=(e,t)=>{let n,r,i;for(;;){if(e.lookahead<262){if(G(e),e.lookahead<262&&t===F)return 1;if(e.lookahead===0)break}if(n=0,e.lookahead>=3&&(e.ins_h=V(e,e.ins_h,e.window[e.strstart+3-1]),n=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=2,n!==0&&e.prev_length<e.max_lazy_match&&e.strstart-n<=e.w_size-262&&(e.match_length=Ne(e,n),e.match_length<=5&&(e.strategy===Se||e.match_length===3&&e.strstart-e.match_start>4096)&&(e.match_length=2)),e.prev_length>=3&&e.match_length<=e.prev_length){i=e.strstart+e.lookahead-3,r=P(e,e.strstart-1-e.prev_match,e.prev_length-3),e.lookahead-=e.prev_length-1,e.prev_length-=2;do++e.strstart<=i&&(e.ins_h=V(e,e.ins_h,e.window[e.strstart+3-1]),n=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart);while(--e.prev_length!==0);if(e.match_available=0,e.match_length=2,e.strstart++,r&&(U(e,!1),e.strm.avail_out===0))return 1}else if(e.match_available){if(r=P(e,0,e.window[e.strstart-1]),r&&U(e,!1),e.strstart++,e.lookahead--,e.strm.avail_out===0)return 1}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&=(r=P(e,0,e.window[e.strstart-1]),0),e.insert=e.strstart<2?e.strstart:2,t===I?(U(e,!0),e.strm.avail_out===0?3:4):e.sym_next&&(U(e,!1),e.strm.avail_out===0)?1:2},Ie=(e,t)=>{let n,r,i,a,o=e.window;for(;;){if(e.lookahead<=258){if(G(e),e.lookahead<=258&&t===F)return 1;if(e.lookahead===0)break}if(e.match_length=0,e.lookahead>=3&&e.strstart>0&&(i=e.strstart-1,r=o[i],r===o[++i]&&r===o[++i]&&r===o[++i])){a=e.strstart+258;do;while(r===o[++i]&&r===o[++i]&&r===o[++i]&&r===o[++i]&&r===o[++i]&&r===o[++i]&&r===o[++i]&&r===o[++i]&&i<a);e.match_length=258-(a-i),e.match_length>e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=3?(n=P(e,1,e.match_length-3),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(n=P(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),n&&(U(e,!1),e.strm.avail_out===0))return 1}return e.insert=0,t===I?(U(e,!0),e.strm.avail_out===0?3:4):e.sym_next&&(U(e,!1),e.strm.avail_out===0)?1:2},Le=(e,t)=>{let n;for(;;){if(e.lookahead===0&&(G(e),e.lookahead===0)){if(t===F)return 1;break}if(e.match_length=0,n=P(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,n&&(U(e,!1),e.strm.avail_out===0))return 1}return e.insert=0,t===I?(U(e,!0),e.strm.avail_out===0?3:4):e.sym_next&&(U(e,!1),e.strm.avail_out===0)?1:2};function q(e,t,n,r,i){this.good_length=e,this.max_lazy=t,this.nice_length=n,this.max_chain=r,this.func=i}let Re=[new q(0,0,0,0,Pe),new q(4,4,8,4,Fe),new q(4,5,16,8,Fe),new q(4,6,32,32,Fe),new q(4,4,16,16,K),new q(8,16,32,32,K),new q(8,16,128,128,K),new q(8,32,128,256,K),new q(32,128,258,1024,K),new q(32,258,258,4096,K)],ze=e=>{e.window_size=2*e.w_size,B(e.head),e.max_lazy_match=Re[e.level].max_lazy,e.good_match=Re[e.level].good_length,e.nice_match=Re[e.level].nice_length,e.max_chain_length=Re[e.level].max_chain,e.strstart=0,e.block_start=0,e.lookahead=0,e.insert=0,e.match_length=e.prev_length=2,e.match_available=0,e.ins_h=0};function Be(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Oe,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(573*2),this.dyn_dtree=new Uint16Array(122),this.bl_tree=new Uint16Array(78),B(this.dyn_ltree),B(this.dyn_dtree),B(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(16),this.heap=new Uint16Array(573),B(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),B(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}let Ve=e=>{if(!e)return 1;let t=e.state;return+(!t||t.strm!==e||t.status!==42&&t.status!==57&&t.status!==69&&t.status!==73&&t.status!==91&&t.status!==103&&t.status!==113&&t.status!==666)},He=e=>{if(Ve(e))return z(e,R);e.total_in=e.total_out=0,e.data_type=De;let t=e.state;return t.pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap===2?57:t.wrap?42:113,e.adler=t.wrap===2?0:1,t.last_flush=-2,de(t),L},Ue=e=>{let t=He(e);return t===L&&ze(e.state),t},We=(e,t)=>Ve(e)||e.state.wrap!==2?R:(e.state.gzhead=t,L),Ge=(e,t,n,r,i,a)=>{if(!e)return R;let o=1;if(t===xe&&(t=6),r<0?(o=0,r=-r):r>15&&(o=2,r-=16),i<1||i>9||n!==Oe||r<8||r>15||t<0||t>9||a<0||a>Te||r===8&&o!==1)return z(e,R);r===8&&(r=9);let s=new Be;return e.state=s,s.strm=e,s.status=42,s.wrap=o,s.gzhead=null,s.w_bits=r,s.w_size=1<<s.w_bits,s.w_mask=s.w_size-1,s.hash_bits=i+7,s.hash_size=1<<s.hash_bits,s.hash_mask=s.hash_size-1,s.hash_shift=~~((s.hash_bits+3-1)/3),s.window=new Uint8Array(s.w_size*2),s.head=new Uint16Array(s.hash_size),s.prev=new Uint16Array(s.w_size),s.lit_bufsize=1<<i+6,s.pending_buf_size=s.lit_bufsize*4,s.pending_buf=new Uint8Array(s.pending_buf_size),s.sym_buf=s.lit_bufsize,s.sym_end=(s.lit_bufsize-1)*3,s.level=t,s.strategy=a,s.method=n,Ue(e)};var Ke={deflateInit:(e,t)=>Ge(e,t,Oe,15,8,Ee),deflateInit2:Ge,deflateReset:Ue,deflateResetKeep:He,deflateSetHeader:We,deflate:(e,t)=>{if(Ve(e)||t>_e||t<0)return e?z(e,R):R;let n=e.state;if(!e.output||e.avail_in!==0&&!e.input||n.status===666&&t!==I)return z(e,e.avail_out===0?be:R);let r=n.last_flush;if(n.last_flush=t,n.pending!==0){if(H(e),e.avail_out===0)return n.last_flush=-1,L}else if(e.avail_in===0&&ke(t)<=ke(r)&&t!==I)return z(e,be);if(n.status===666&&e.avail_in!==0)return z(e,be);if(n.status===42&&n.wrap===0&&(n.status=113),n.status===42){let t=Oe+(n.w_bits-8<<4)<<8,r=-1;if(r=n.strategy>=Ce||n.level<2?0:n.level<6?1:n.level===6?2:3,t|=r<<6,n.strstart!==0&&(t|=32),t+=31-t%31,je(n,t),n.strstart!==0&&(je(n,e.adler>>>16),je(n,e.adler&65535)),e.adler=1,n.status=113,H(e),n.pending!==0)return n.last_flush=-1,L}if(n.status===57){if(e.adler=0,W(n,31),W(n,139),W(n,8),n.gzhead)W(n,+!!n.gzhead.text+(n.gzhead.hcrc?2:0)+(n.gzhead.extra?4:0)+(n.gzhead.name?8:0)+(n.gzhead.comment?16:0)),W(n,n.gzhead.time&255),W(n,n.gzhead.time>>8&255),W(n,n.gzhead.time>>16&255),W(n,n.gzhead.time>>24&255),W(n,n.level===9?2:n.strategy>=Ce||n.level<2?4:0),W(n,n.gzhead.os&255),n.gzhead.extra&&n.gzhead.extra.length&&(W(n,n.gzhead.extra.length&255),W(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=j(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69;else if(W(n,0),W(n,0),W(n,0),W(n,0),W(n,0),W(n,n.level===9?2:n.strategy>=Ce||n.level<2?4:0),W(n,3),n.status=113,H(e),n.pending!==0)return n.last_flush=-1,L}if(n.status===69){if(n.gzhead.extra){let t=n.pending,r=(n.gzhead.extra.length&65535)-n.gzindex;for(;n.pending+r>n.pending_buf_size;){let i=n.pending_buf_size-n.pending;if(n.pending_buf.set(n.gzhead.extra.subarray(n.gzindex,n.gzindex+i),n.pending),n.pending=n.pending_buf_size,n.gzhead.hcrc&&n.pending>t&&(e.adler=j(e.adler,n.pending_buf,n.pending-t,t)),n.gzindex+=i,H(e),n.pending!==0)return n.last_flush=-1,L;t=0,r-=i}let i=new Uint8Array(n.gzhead.extra);n.pending_buf.set(i.subarray(n.gzindex,n.gzindex+r),n.pending),n.pending+=r,n.gzhead.hcrc&&n.pending>t&&(e.adler=j(e.adler,n.pending_buf,n.pending-t,t)),n.gzindex=0}n.status=73}if(n.status===73){if(n.gzhead.name){let t=n.pending,r;do{if(n.pending===n.pending_buf_size){if(n.gzhead.hcrc&&n.pending>t&&(e.adler=j(e.adler,n.pending_buf,n.pending-t,t)),H(e),n.pending!==0)return n.last_flush=-1,L;t=0}r=n.gzindex<n.gzhead.name.length?n.gzhead.name.charCodeAt(n.gzindex++)&255:0,W(n,r)}while(r!==0);n.gzhead.hcrc&&n.pending>t&&(e.adler=j(e.adler,n.pending_buf,n.pending-t,t)),n.gzindex=0}n.status=91}if(n.status===91){if(n.gzhead.comment){let t=n.pending,r;do{if(n.pending===n.pending_buf_size){if(n.gzhead.hcrc&&n.pending>t&&(e.adler=j(e.adler,n.pending_buf,n.pending-t,t)),H(e),n.pending!==0)return n.last_flush=-1,L;t=0}r=n.gzindex<n.gzhead.comment.length?n.gzhead.comment.charCodeAt(n.gzindex++)&255:0,W(n,r)}while(r!==0);n.gzhead.hcrc&&n.pending>t&&(e.adler=j(e.adler,n.pending_buf,n.pending-t,t))}n.status=103}if(n.status===103){if(n.gzhead.hcrc){if(n.pending+2>n.pending_buf_size&&(H(e),n.pending!==0))return n.last_flush=-1,L;W(n,e.adler&255),W(n,e.adler>>8&255),e.adler=0}if(n.status=113,H(e),n.pending!==0)return n.last_flush=-1,L}if(e.avail_in!==0||n.lookahead!==0||t!==F&&n.status!==666){let r=n.level===0?Pe(n,t):n.strategy===Ce?Le(n,t):n.strategy===we?Ie(n,t):Re[n.level].func(n,t);if((r===3||r===4)&&(n.status=666),r===1||r===3)return e.avail_out===0&&(n.last_flush=-1),L;if(r===2&&(t===he?me(n):t!==_e&&(fe(n,0,0,!1),t===ge&&(B(n.head),n.lookahead===0&&(n.strstart=0,n.block_start=0,n.insert=0))),H(e),e.avail_out===0))return n.last_flush=-1,L}return t===I?n.wrap<=0?ve:(n.wrap===2?(W(n,e.adler&255),W(n,e.adler>>8&255),W(n,e.adler>>16&255),W(n,e.adler>>24&255),W(n,e.total_in&255),W(n,e.total_in>>8&255),W(n,e.total_in>>16&255),W(n,e.total_in>>24&255)):(je(n,e.adler>>>16),je(n,e.adler&65535)),H(e),n.wrap>0&&(n.wrap=-n.wrap),n.pending===0?ve:L):L},deflateEnd:e=>{if(Ve(e))return R;let t=e.state.status;return e.state=null,t===113?z(e,ye):L},deflateSetDictionary:(e,t)=>{let n=t.length;if(Ve(e))return R;let r=e.state,i=r.wrap;if(i===2||i===1&&r.status!==42||r.lookahead)return R;if(i===1&&(e.adler=le(e.adler,t,n,0)),r.wrap=0,n>=r.w_size){i===0&&(B(r.head),r.strstart=0,r.block_start=0,r.insert=0);let e=new Uint8Array(r.w_size);e.set(t.subarray(n-r.w_size,n),0),t=e,n=r.w_size}let a=e.avail_in,o=e.next_in,s=e.input;for(e.avail_in=n,e.next_in=0,e.input=t,G(r);r.lookahead>=3;){let e=r.strstart,t=r.lookahead-2;do r.ins_h=V(r,r.ins_h,r.window[e+3-1]),r.prev[e&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=e,e++;while(--t);r.strstart=e,r.lookahead=2,G(r)}return r.strstart+=r.lookahead,r.block_start=r.strstart,r.insert=r.lookahead,r.lookahead=0,r.match_length=r.prev_length=2,r.match_available=0,e.next_in=o,e.input=s,e.avail_in=a,r.wrap=i,L},deflateInfo:`pako deflate (from Nodeca project)`};let qe=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var Je={assign:function(e){let t=Array.prototype.slice.call(arguments,1);for(;t.length;){let n=t.shift();if(n){if(typeof n!=`object`)throw TypeError(n+`must be non-object`);for(let t in n)qe(n,t)&&(e[t]=n[t])}}return e},flattenChunks:e=>{let t=0;for(let n=0,r=e.length;n<r;n++)t+=e[n].length;let n=new Uint8Array(t);for(let t=0,r=0,i=e.length;t<i;t++){let i=e[t];n.set(i,r),r+=i.length}return n}};let Ye=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch{Ye=!1}let Xe=new Uint8Array(256);for(let e=0;e<256;e++)Xe[e]=e>=252?6:e>=248?5:e>=240?4:e>=224?3:e>=192?2:1;Xe[254]=Xe[254]=1;var Ze=e=>{if(typeof TextEncoder==`function`&&TextEncoder.prototype.encode)return new TextEncoder().encode(e);let t,n,r,i,a,o=e.length,s=0;for(i=0;i<o;i++)n=e.charCodeAt(i),(n&64512)==55296&&i+1<o&&(r=e.charCodeAt(i+1),(r&64512)==56320&&(n=65536+(n-55296<<10)+(r-56320),i++)),s+=n<128?1:n<2048?2:n<65536?3:4;for(t=new Uint8Array(s),a=0,i=0;a<s;i++)n=e.charCodeAt(i),(n&64512)==55296&&i+1<o&&(r=e.charCodeAt(i+1),(r&64512)==56320&&(n=65536+(n-55296<<10)+(r-56320),i++)),n<128?t[a++]=n:n<2048?(t[a++]=192|n>>>6,t[a++]=128|n&63):n<65536?(t[a++]=224|n>>>12,t[a++]=128|n>>>6&63,t[a++]=128|n&63):(t[a++]=240|n>>>18,t[a++]=128|n>>>12&63,t[a++]=128|n>>>6&63,t[a++]=128|n&63);return t};let Qe=(e,t)=>{if(t<65534&&e.subarray&&Ye)return String.fromCharCode.apply(null,e.length===t?e:e.subarray(0,t));let n=``;for(let r=0;r<t;r++)n+=String.fromCharCode(e[r]);return n};var $e={string2buf:Ze,buf2string:(e,t)=>{let n=t||e.length;if(typeof TextDecoder==`function`&&TextDecoder.prototype.decode)return new TextDecoder().decode(e.subarray(0,t));let r,i,a=Array(n*2);for(i=0,r=0;r<n;){let t=e[r++];if(t<128){a[i++]=t;continue}let o=Xe[t];if(o>4){a[i++]=65533,r+=o-1;continue}for(t&=o===2?31:o===3?15:7;o>1&&r<n;)t=t<<6|e[r++]&63,o--;if(o>1){a[i++]=65533;continue}t<65536?a[i++]=t:(t-=65536,a[i++]=55296|t>>10&1023,a[i++]=56320|t&1023)}return Qe(a,i)},utf8border:(e,t)=>{t||=e.length,t>e.length&&(t=e.length);let n=t-1;for(;n>=0&&(e[n]&192)==128;)n--;return n<0||n===0?t:n+Xe[e[n]]>t?n:t}};function et(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=``,this.state=null,this.data_type=2,this.adler=0}var tt=et;let nt=Object.prototype.toString,{Z_NO_FLUSH:rt,Z_SYNC_FLUSH:it,Z_FULL_FLUSH:at,Z_FINISH:ot,Z_OK:st,Z_STREAM_END:ct,Z_DEFAULT_COMPRESSION:lt,Z_DEFAULT_STRATEGY:ut,Z_DEFLATED:dt}=N;function ft(e){this.options=Je.assign({level:lt,method:dt,chunkSize:16384,windowBits:15,memLevel:8,strategy:ut},e||{});let t=this.options;t.raw&&t.windowBits>0?t.windowBits=-t.windowBits:t.gzip&&t.windowBits>0&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg=``,this.ended=!1,this.chunks=[],this.strm=new tt,this.strm.avail_out=0;let n=Ke.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(n!==st)throw Error(M[n]);if(t.header&&Ke.deflateSetHeader(this.strm,t.header),t.dictionary){let e;if(e=typeof t.dictionary==`string`?$e.string2buf(t.dictionary):nt.call(t.dictionary)===`[object ArrayBuffer]`?new Uint8Array(t.dictionary):t.dictionary,n=Ke.deflateSetDictionary(this.strm,e),n!==st)throw Error(M[n]);this._dict_set=!0}}ft.prototype.push=function(e,t){let n=this.strm,r=this.options.chunkSize,i,a;if(this.ended)return!1;for(a=t===~~t?t:t===!0?ot:rt,typeof e==`string`?n.input=$e.string2buf(e):nt.call(e)===`[object ArrayBuffer]`?n.input=new Uint8Array(e):n.input=e,n.next_in=0,n.avail_in=n.input.length;;){if(n.avail_out===0&&(n.output=new Uint8Array(r),n.next_out=0,n.avail_out=r),(a===it||a===at)&&n.avail_out<=6){this.onData(n.output.subarray(0,n.next_out)),n.avail_out=0;continue}if(i=Ke.deflate(n,a),i===ct)return n.next_out>0&&this.onData(n.output.subarray(0,n.next_out)),i=Ke.deflateEnd(this.strm),this.onEnd(i),this.ended=!0,i===st;if(n.avail_out===0){this.onData(n.output);continue}if(a>0&&n.next_out>0){this.onData(n.output.subarray(0,n.next_out)),n.avail_out=0;continue}if(n.avail_in===0)break}return!0},ft.prototype.onData=function(e){this.chunks.push(e)},ft.prototype.onEnd=function(e){e===st&&(this.result=Je.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};function pt(e,t){let n=new ft(t);if(n.push(e,!0),n.err)throw n.msg||M[n.err];return n.result}function mt(e,t){return t||={},t.raw=!0,pt(e,t)}function ht(e,t){return t||={},t.gzip=!0,pt(e,t)}var gt={Deflate:ft,deflate:pt,deflateRaw:mt,gzip:ht,constants:N};let _t=16209;var vt=function(e,t){let n,r,i,a,o,s,c,l,u,d,f,p,m,h,g,_,v,y,b,x,S,C,w,T,E=e.state;n=e.next_in,w=e.input,r=n+(e.avail_in-5),i=e.next_out,T=e.output,a=i-(t-e.avail_out),o=i+(e.avail_out-257),s=E.dmax,c=E.wsize,l=E.whave,u=E.wnext,d=E.window,f=E.hold,p=E.bits,m=E.lencode,h=E.distcode,g=(1<<E.lenbits)-1,_=(1<<E.distbits)-1;top:do{p<15&&(f+=w[n++]<<p,p+=8,f+=w[n++]<<p,p+=8),v=m[f&g];dolen:for(;;){if(y=v>>>24,f>>>=y,p-=y,y=v>>>16&255,y===0)T[i++]=v&65535;else if(y&16){b=v&65535,y&=15,y&&(p<y&&(f+=w[n++]<<p,p+=8),b+=f&(1<<y)-1,f>>>=y,p-=y),p<15&&(f+=w[n++]<<p,p+=8,f+=w[n++]<<p,p+=8),v=h[f&_];dodist:for(;;){if(y=v>>>24,f>>>=y,p-=y,y=v>>>16&255,y&16){if(x=v&65535,y&=15,p<y&&(f+=w[n++]<<p,p+=8,p<y&&(f+=w[n++]<<p,p+=8)),x+=f&(1<<y)-1,x>s){e.msg=`invalid distance too far back`,E.mode=_t;break top}if(f>>>=y,p-=y,y=i-a,x>y){if(y=x-y,y>l&&E.sane){e.msg=`invalid distance too far back`,E.mode=_t;break top}if(S=0,C=d,u===0){if(S+=c-y,y<b){b-=y;do T[i++]=d[S++];while(--y);S=i-x,C=T}}else if(u<y){if(S+=c+u-y,y-=u,y<b){b-=y;do T[i++]=d[S++];while(--y);if(S=0,u<b){y=u,b-=y;do T[i++]=d[S++];while(--y);S=i-x,C=T}}}else if(S+=u-y,y<b){b-=y;do T[i++]=d[S++];while(--y);S=i-x,C=T}for(;b>2;)T[i++]=C[S++],T[i++]=C[S++],T[i++]=C[S++],b-=3;b&&(T[i++]=C[S++],b>1&&(T[i++]=C[S++]))}else{S=i-x;do T[i++]=T[S++],T[i++]=T[S++],T[i++]=T[S++],b-=3;while(b>2);b&&(T[i++]=T[S++],b>1&&(T[i++]=T[S++]))}}else if(y&64){e.msg=`invalid distance code`,E.mode=_t;break top}else{v=h[(v&65535)+(f&(1<<y)-1)];continue dodist}break}}else if(!(y&64)){v=m[(v&65535)+(f&(1<<y)-1)];continue dolen}else if(y&32){E.mode=16191;break top}else{e.msg=`invalid literal/length code`,E.mode=_t;break top}break}}while(n<r&&i<o);b=p>>3,n-=b,p-=b<<3,f&=(1<<p)-1,e.next_in=n,e.next_out=i,e.avail_in=n<r?5+(r-n):5-(n-r),e.avail_out=i<o?257+(o-i):257-(i-o),E.hold=f,E.bits=p};let yt=new Uint16Array([3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0]),bt=new Uint8Array([16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78]),xt=new Uint16Array([1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0]),St=new Uint8Array([16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64]);var Ct=(e,t,n,r,i,a,o,s)=>{let c=s.bits,l=0,u=0,d=0,f=0,p=0,m=0,h=0,g=0,_=0,v=0,y,b,x,S,C,w=null,T,E=new Uint16Array(16),D=new Uint16Array(16),O=null,ee,k,A;for(l=0;l<=15;l++)E[l]=0;for(u=0;u<r;u++)E[t[n+u]]++;for(p=c,f=15;f>=1&&E[f]===0;f--);if(p>f&&(p=f),f===0)return i[a++]=20971520,i[a++]=20971520,s.bits=1,0;for(d=1;d<f&&E[d]===0;d++);for(p<d&&(p=d),g=1,l=1;l<=15;l++)if(g<<=1,g-=E[l],g<0)return-1;if(g>0&&(e===0||f!==1))return-1;for(D[1]=0,l=1;l<15;l++)D[l+1]=D[l]+E[l];for(u=0;u<r;u++)t[n+u]!==0&&(o[D[t[n+u]]++]=u);if(e===0?(w=O=o,T=20):e===1?(w=yt,O=bt,T=257):(w=xt,O=St,T=0),v=0,u=0,l=d,C=a,m=p,h=0,x=-1,_=1<<p,S=_-1,e===1&&_>852||e===2&&_>592)return 1;for(;;){ee=l-h,o[u]+1<T?(k=0,A=o[u]):o[u]>=T?(k=O[o[u]-T],A=w[o[u]-T]):(k=96,A=0),y=1<<l-h,b=1<<m,d=b;do b-=y,i[C+(v>>h)+b]=ee<<24|k<<16|A|0;while(b!==0);for(y=1<<l-1;v&y;)y>>=1;if(y===0?v=0:(v&=y-1,v+=y),u++,--E[l]===0){if(l===f)break;l=t[n+o[u]]}if(l>p&&(v&S)!==x){for(h===0&&(h=p),C+=d,m=l-h,g=1<<m;m+h<f&&(g-=E[m+h],!(g<=0));)m++,g<<=1;if(_+=1<<m,e===1&&_>852||e===2&&_>592)return 1;x=v&S,i[x]=p<<24|m<<16|C-a|0}}return v!==0&&(i[C+v]=l-h<<24|4194304),s.bits=p,0};let{Z_FINISH:wt,Z_BLOCK:Tt,Z_TREES:Et,Z_OK:J,Z_STREAM_END:Dt,Z_NEED_DICT:Ot,Z_STREAM_ERROR:Y,Z_DATA_ERROR:kt,Z_MEM_ERROR:At,Z_BUF_ERROR:jt,Z_DEFLATED:Mt}=N,Nt=16180,Pt=16181,Ft=16182,It=16183,Lt=16184,Rt=16185,zt=16186,Bt=16187,Vt=16188,Ht=16189,Ut=16190,X=16191,Wt=16192,Gt=16193,Kt=16194,qt=16195,Jt=16196,Yt=16197,Xt=16198,Zt=16199,Qt=16200,$t=16201,en=16202,tn=16203,nn=16204,rn=16205,an=16206,on=16207,sn=16208,Z=16209,cn=16210,ln=16211,un=e=>(e>>>24&255)+(e>>>8&65280)+((e&65280)<<8)+((e&255)<<24);function dn(){this.strm=null,this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}let Q=e=>{if(!e)return 1;let t=e.state;return+(!t||t.strm!==e||t.mode<Nt||t.mode>ln)},fn=e=>{if(Q(e))return Y;let t=e.state;return e.total_in=e.total_out=t.total=0,e.msg=``,t.wrap&&(e.adler=t.wrap&1),t.mode=Nt,t.last=0,t.havedict=0,t.flags=-1,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new Int32Array(852),t.distcode=t.distdyn=new Int32Array(592),t.sane=1,t.back=-1,J},pn=e=>{if(Q(e))return Y;let t=e.state;return t.wsize=0,t.whave=0,t.wnext=0,fn(e)},mn=(e,t)=>{let n;if(Q(e))return Y;let r=e.state;return t<0?(n=0,t=-t):(n=(t>>4)+5,t<48&&(t&=15)),t&&(t<8||t>15)?Y:(r.window!==null&&r.wbits!==t&&(r.window=null),r.wrap=n,r.wbits=t,pn(e))},hn=(e,t)=>{if(!e)return Y;let n=new dn;e.state=n,n.strm=e,n.window=null,n.mode=Nt;let r=mn(e,t);return r!==J&&(e.state=null),r},gn=e=>hn(e,15),_n=!0,vn,yn,bn=e=>{if(_n){vn=new Int32Array(512),yn=new Int32Array(32);let t=0;for(;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(Ct(1,e.lens,0,288,vn,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;Ct(2,e.lens,0,32,yn,0,e.work,{bits:5}),_n=!1}e.lencode=vn,e.lenbits=9,e.distcode=yn,e.distbits=5},xn=(e,t,n,r)=>{let i,a=e.state;return a.window===null&&(a.wsize=1<<a.wbits,a.wnext=0,a.whave=0,a.window=new Uint8Array(a.wsize)),r>=a.wsize?(a.window.set(t.subarray(n-a.wsize,n),0),a.wnext=0,a.whave=a.wsize):(i=a.wsize-a.wnext,i>r&&(i=r),a.window.set(t.subarray(n-r,n-r+i),a.wnext),r-=i,r?(a.window.set(t.subarray(n-r,n),0),a.wnext=r,a.whave=a.wsize):(a.wnext+=i,a.wnext===a.wsize&&(a.wnext=0),a.whave<a.wsize&&(a.whave+=i))),0};var $={inflateReset:pn,inflateReset2:mn,inflateResetKeep:fn,inflateInit:gn,inflateInit2:hn,inflate:(e,t)=>{let n,r,i,a,o,s,c,l,u,d,f,p,m,h,g=0,_,v,y,b,x,S,C,w,T=new Uint8Array(4),E,D,O=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(Q(e)||!e.output||!e.input&&e.avail_in!==0)return Y;n=e.state,n.mode===X&&(n.mode=Wt),o=e.next_out,i=e.output,c=e.avail_out,a=e.next_in,r=e.input,s=e.avail_in,l=n.hold,u=n.bits,d=s,f=c,w=J;inf_leave:for(;;)switch(n.mode){case Nt:if(n.wrap===0){n.mode=Wt;break}for(;u<16;){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}if(n.wrap&2&&l===35615){n.wbits===0&&(n.wbits=15),n.check=0,T[0]=l&255,T[1]=l>>>8&255,n.check=j(n.check,T,2,0),l=0,u=0,n.mode=Pt;break}if(n.head&&(n.head.done=!1),!(n.wrap&1)||(((l&255)<<8)+(l>>8))%31){e.msg=`incorrect header check`,n.mode=Z;break}if((l&15)!==Mt){e.msg=`unknown compression method`,n.mode=Z;break}if(l>>>=4,u-=4,C=(l&15)+8,n.wbits===0&&(n.wbits=C),C>15||C>n.wbits){e.msg=`invalid window size`,n.mode=Z;break}n.dmax=1<<n.wbits,n.flags=0,e.adler=n.check=1,n.mode=l&512?Ht:X,l=0,u=0;break;case Pt:for(;u<16;){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}if(n.flags=l,(n.flags&255)!==Mt){e.msg=`unknown compression method`,n.mode=Z;break}if(n.flags&57344){e.msg=`unknown header flags set`,n.mode=Z;break}n.head&&(n.head.text=l>>8&1),n.flags&512&&n.wrap&4&&(T[0]=l&255,T[1]=l>>>8&255,n.check=j(n.check,T,2,0)),l=0,u=0,n.mode=Ft;case Ft:for(;u<32;){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}n.head&&(n.head.time=l),n.flags&512&&n.wrap&4&&(T[0]=l&255,T[1]=l>>>8&255,T[2]=l>>>16&255,T[3]=l>>>24&255,n.check=j(n.check,T,4,0)),l=0,u=0,n.mode=It;case It:for(;u<16;){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}n.head&&(n.head.xflags=l&255,n.head.os=l>>8),n.flags&512&&n.wrap&4&&(T[0]=l&255,T[1]=l>>>8&255,n.check=j(n.check,T,2,0)),l=0,u=0,n.mode=Lt;case Lt:if(n.flags&1024){for(;u<16;){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}n.length=l,n.head&&(n.head.extra_len=l),n.flags&512&&n.wrap&4&&(T[0]=l&255,T[1]=l>>>8&255,n.check=j(n.check,T,2,0)),l=0,u=0}else n.head&&(n.head.extra=null);n.mode=Rt;case Rt:if(n.flags&1024&&(p=n.length,p>s&&(p=s),p&&(n.head&&(C=n.head.extra_len-n.length,n.head.extra||(n.head.extra=new Uint8Array(n.head.extra_len)),n.head.extra.set(r.subarray(a,a+p),C)),n.flags&512&&n.wrap&4&&(n.check=j(n.check,r,p,a)),s-=p,a+=p,n.length-=p),n.length))break inf_leave;n.length=0,n.mode=zt;case zt:if(n.flags&2048){if(s===0)break inf_leave;p=0;do C=r[a+ p++],n.head&&C&&n.length<65536&&(n.head.name+=String.fromCharCode(C));while(C&&p<s);if(n.flags&512&&n.wrap&4&&(n.check=j(n.check,r,p,a)),s-=p,a+=p,C)break inf_leave}else n.head&&(n.head.name=null);n.length=0,n.mode=Bt;case Bt:if(n.flags&4096){if(s===0)break inf_leave;p=0;do C=r[a+ p++],n.head&&C&&n.length<65536&&(n.head.comment+=String.fromCharCode(C));while(C&&p<s);if(n.flags&512&&n.wrap&4&&(n.check=j(n.check,r,p,a)),s-=p,a+=p,C)break inf_leave}else n.head&&(n.head.comment=null);n.mode=Vt;case Vt:if(n.flags&512){for(;u<16;){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}if(n.wrap&4&&l!==(n.check&65535)){e.msg=`header crc mismatch`,n.mode=Z;break}l=0,u=0}n.head&&(n.head.hcrc=n.flags>>9&1,n.head.done=!0),e.adler=n.check=0,n.mode=X;break;case Ht:for(;u<32;){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}e.adler=n.check=un(l),l=0,u=0,n.mode=Ut;case Ut:if(n.havedict===0)return e.next_out=o,e.avail_out=c,e.next_in=a,e.avail_in=s,n.hold=l,n.bits=u,Ot;e.adler=n.check=1,n.mode=X;case X:if(t===Tt||t===Et)break inf_leave;case Wt:if(n.last){l>>>=u&7,u-=u&7,n.mode=an;break}for(;u<3;){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}switch(n.last=l&1,l>>>=1,--u,l&3){case 0:n.mode=Gt;break;case 1:if(bn(n),n.mode=Zt,t===Et){l>>>=2,u-=2;break inf_leave}break;case 2:n.mode=Jt;break;case 3:e.msg=`invalid block type`,n.mode=Z}l>>>=2,u-=2;break;case Gt:for(l>>>=u&7,u-=u&7;u<32;){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}if((l&65535)!=(l>>>16^65535)){e.msg=`invalid stored block lengths`,n.mode=Z;break}if(n.length=l&65535,l=0,u=0,n.mode=Kt,t===Et)break inf_leave;case Kt:n.mode=qt;case qt:if(p=n.length,p){if(p>s&&(p=s),p>c&&(p=c),p===0)break inf_leave;i.set(r.subarray(a,a+p),o),s-=p,a+=p,c-=p,o+=p,n.length-=p;break}n.mode=X;break;case Jt:for(;u<14;){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}if(n.nlen=(l&31)+257,l>>>=5,u-=5,n.ndist=(l&31)+1,l>>>=5,u-=5,n.ncode=(l&15)+4,l>>>=4,u-=4,n.nlen>286||n.ndist>30){e.msg=`too many length or distance symbols`,n.mode=Z;break}n.have=0,n.mode=Yt;case Yt:for(;n.have<n.ncode;){for(;u<3;){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}n.lens[O[n.have++]]=l&7,l>>>=3,u-=3}for(;n.have<19;)n.lens[O[n.have++]]=0;if(n.lencode=n.lendyn,n.lenbits=7,E={bits:n.lenbits},w=Ct(0,n.lens,0,19,n.lencode,0,n.work,E),n.lenbits=E.bits,w){e.msg=`invalid code lengths set`,n.mode=Z;break}n.have=0,n.mode=Xt;case Xt:for(;n.have<n.nlen+n.ndist;){for(;g=n.lencode[l&(1<<n.lenbits)-1],_=g>>>24,v=g>>>16&255,y=g&65535,!(_<=u);){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}if(y<16)l>>>=_,u-=_,n.lens[n.have++]=y;else{if(y===16){for(D=_+2;u<D;){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}if(l>>>=_,u-=_,n.have===0){e.msg=`invalid bit length repeat`,n.mode=Z;break}C=n.lens[n.have-1],p=3+(l&3),l>>>=2,u-=2}else if(y===17){for(D=_+3;u<D;){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}l>>>=_,u-=_,C=0,p=3+(l&7),l>>>=3,u-=3}else{for(D=_+7;u<D;){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}l>>>=_,u-=_,C=0,p=11+(l&127),l>>>=7,u-=7}if(n.have+p>n.nlen+n.ndist){e.msg=`invalid bit length repeat`,n.mode=Z;break}for(;p--;)n.lens[n.have++]=C}}if(n.mode===Z)break;if(n.lens[256]===0){e.msg=`invalid code -- missing end-of-block`,n.mode=Z;break}if(n.lenbits=9,E={bits:n.lenbits},w=Ct(1,n.lens,0,n.nlen,n.lencode,0,n.work,E),n.lenbits=E.bits,w){e.msg=`invalid literal/lengths set`,n.mode=Z;break}if(n.distbits=6,n.distcode=n.distdyn,E={bits:n.distbits},w=Ct(2,n.lens,n.nlen,n.ndist,n.distcode,0,n.work,E),n.distbits=E.bits,w){e.msg=`invalid distances set`,n.mode=Z;break}if(n.mode=Zt,t===Et)break inf_leave;case Zt:n.mode=Qt;case Qt:if(s>=6&&c>=258){e.next_out=o,e.avail_out=c,e.next_in=a,e.avail_in=s,n.hold=l,n.bits=u,vt(e,f),o=e.next_out,i=e.output,c=e.avail_out,a=e.next_in,r=e.input,s=e.avail_in,l=n.hold,u=n.bits,n.mode===X&&(n.back=-1);break}for(n.back=0;g=n.lencode[l&(1<<n.lenbits)-1],_=g>>>24,v=g>>>16&255,y=g&65535,!(_<=u);){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}if(v&&!(v&240)){for(b=_,x=v,S=y;g=n.lencode[S+((l&(1<<b+x)-1)>>b)],_=g>>>24,v=g>>>16&255,y=g&65535,!(b+_<=u);){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}l>>>=b,u-=b,n.back+=b}if(l>>>=_,u-=_,n.back+=_,n.length=y,v===0){n.mode=rn;break}if(v&32){n.back=-1,n.mode=X;break}if(v&64){e.msg=`invalid literal/length code`,n.mode=Z;break}n.extra=v&15,n.mode=$t;case $t:if(n.extra){for(D=n.extra;u<D;){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}n.length+=l&(1<<n.extra)-1,l>>>=n.extra,u-=n.extra,n.back+=n.extra}n.was=n.length,n.mode=en;case en:for(;g=n.distcode[l&(1<<n.distbits)-1],_=g>>>24,v=g>>>16&255,y=g&65535,!(_<=u);){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}if(!(v&240)){for(b=_,x=v,S=y;g=n.distcode[S+((l&(1<<b+x)-1)>>b)],_=g>>>24,v=g>>>16&255,y=g&65535,!(b+_<=u);){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}l>>>=b,u-=b,n.back+=b}if(l>>>=_,u-=_,n.back+=_,v&64){e.msg=`invalid distance code`,n.mode=Z;break}n.offset=y,n.extra=v&15,n.mode=tn;case tn:if(n.extra){for(D=n.extra;u<D;){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}n.offset+=l&(1<<n.extra)-1,l>>>=n.extra,u-=n.extra,n.back+=n.extra}if(n.offset>n.dmax){e.msg=`invalid distance too far back`,n.mode=Z;break}n.mode=nn;case nn:if(c===0)break inf_leave;if(p=f-c,n.offset>p){if(p=n.offset-p,p>n.whave&&n.sane){e.msg=`invalid distance too far back`,n.mode=Z;break}p>n.wnext?(p-=n.wnext,m=n.wsize-p):m=n.wnext-p,p>n.length&&(p=n.length),h=n.window}else h=i,m=o-n.offset,p=n.length;p>c&&(p=c),c-=p,n.length-=p;do i[o++]=h[m++];while(--p);n.length===0&&(n.mode=Qt);break;case rn:if(c===0)break inf_leave;i[o++]=n.length,c--,n.mode=Qt;break;case an:if(n.wrap){for(;u<32;){if(s===0)break inf_leave;s--,l|=r[a++]<<u,u+=8}if(f-=c,e.total_out+=f,n.total+=f,n.wrap&4&&f&&(e.adler=n.check=n.flags?j(n.check,i,f,o-f):le(n.check,i,f,o-f)),f=c,n.wrap&4&&(n.flags?l:un(l))!==n.check){e.msg=`incorrect data check`,n.mode=Z;break}l=0,u=0}n.mode=on;case on:if(n.wrap&&n.flags){for(;u<32;){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}if(n.wrap&4&&l!==(n.total&4294967295)){e.msg=`incorrect length check`,n.mode=Z;break}l=0,u=0}n.mode=sn;case sn:w=Dt;break inf_leave;case Z:w=kt;break inf_leave;case cn:return At;case ln:default:return Y}return e.next_out=o,e.avail_out=c,e.next_in=a,e.avail_in=s,n.hold=l,n.bits=u,(n.wsize||f!==e.avail_out&&n.mode<Z&&(n.mode<an||t!==wt))&&xn(e,e.output,e.next_out,f-e.avail_out),d-=e.avail_in,f-=e.avail_out,e.total_in+=d,e.total_out+=f,n.total+=f,n.wrap&4&&f&&(e.adler=n.check=n.flags?j(n.check,i,f,e.next_out-f):le(n.check,i,f,e.next_out-f)),e.data_type=n.bits+(n.last?64:0)+(n.mode===X?128:0)+(n.mode===Zt||n.mode===Kt?256:0),(d===0&&f===0||t===wt)&&w===J&&(w=jt),w},inflateEnd:e=>{if(Q(e))return Y;let t=e.state;return t.window&&=null,e.state=null,J},inflateGetHeader:(e,t)=>{if(Q(e))return Y;let n=e.state;return n.wrap&2?(n.head=t,t.done=!1,J):Y},inflateSetDictionary:(e,t)=>{let n=t.length,r,i,a;return Q(e)||(r=e.state,r.wrap!==0&&r.mode!==Ut)?Y:r.mode===Ut&&(i=1,i=le(i,t,n,0),i!==r.check)?kt:(a=xn(e,t,n,n),a?(r.mode=cn,At):(r.havedict=1,J))},inflateInfo:`pako inflate (from Nodeca project)`};function Sn(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=``,this.comment=``,this.hcrc=0,this.done=!1}var Cn=Sn;let wn=Object.prototype.toString,{Z_NO_FLUSH:Tn,Z_FINISH:En,Z_OK:Dn,Z_STREAM_END:On,Z_NEED_DICT:kn,Z_STREAM_ERROR:An,Z_DATA_ERROR:jn,Z_MEM_ERROR:Mn}=N;function Nn(e){this.options=Je.assign({chunkSize:1024*64,windowBits:15,to:``},e||{});let t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,t.windowBits===0&&(t.windowBits=-15)),t.windowBits>=0&&t.windowBits<16&&!(e&&e.windowBits)&&(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&(t.windowBits&15||(t.windowBits|=15)),this.err=0,this.msg=``,this.ended=!1,this.chunks=[],this.strm=new tt,this.strm.avail_out=0;let n=$.inflateInit2(this.strm,t.windowBits);if(n!==Dn||(this.header=new Cn,$.inflateGetHeader(this.strm,this.header),t.dictionary&&(typeof t.dictionary==`string`?t.dictionary=$e.string2buf(t.dictionary):wn.call(t.dictionary)===`[object ArrayBuffer]`&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(n=$.inflateSetDictionary(this.strm,t.dictionary),n!==Dn))))throw Error(M[n])}Nn.prototype.push=function(e,t){let n=this.strm,r=this.options.chunkSize,i=this.options.dictionary,a,o,s;if(this.ended)return!1;for(o=t===~~t?t:t===!0?En:Tn,wn.call(e)===`[object ArrayBuffer]`?n.input=new Uint8Array(e):n.input=e,n.next_in=0,n.avail_in=n.input.length;;){for(n.avail_out===0&&(n.output=new Uint8Array(r),n.next_out=0,n.avail_out=r),a=$.inflate(n,o),a===kn&&i&&(a=$.inflateSetDictionary(n,i),a===Dn?a=$.inflate(n,o):a===jn&&(a=kn));n.avail_in>0&&a===On&&n.state.wrap>0&&e[n.next_in]!==0;)$.inflateReset(n),a=$.inflate(n,o);switch(a){case An:case jn:case kn:case Mn:return this.onEnd(a),this.ended=!0,!1}if(s=n.avail_out,n.next_out&&(n.avail_out===0||a===On))if(this.options.to===`string`){let e=$e.utf8border(n.output,n.next_out),t=n.next_out-e,i=$e.buf2string(n.output,e);n.next_out=t,n.avail_out=r-t,t&&n.output.set(n.output.subarray(e,e+t),0),this.onData(i)}else this.onData(n.output.length===n.next_out?n.output:n.output.subarray(0,n.next_out));if(!(a===Dn&&s===0)){if(a===On)return a=$.inflateEnd(this.strm),this.onEnd(a),this.ended=!0,!0;if(n.avail_in===0)break}}return!0},Nn.prototype.onData=function(e){this.chunks.push(e)},Nn.prototype.onEnd=function(e){e===Dn&&(this.options.to===`string`?this.result=this.chunks.join(``):this.result=Je.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};function Pn(e,t){let n=new Nn(t);if(n.push(e),n.err)throw n.msg||M[n.err];return n.result}function Fn(e,t){return t||={},t.raw=!0,Pn(e,t)}var In={Inflate:Nn,inflate:Pn,inflateRaw:Fn,ungzip:Pn,constants:N};let{Deflate:Ln,deflate:Rn,deflateRaw:zn,gzip:Bn}=gt,{Inflate:Vn,inflate:Hn,inflateRaw:Un,ungzip:Wn}=In;var Gn={Deflate:Ln,deflate:Rn,deflateRaw:zn,gzip:Bn,Inflate:Vn,inflate:Hn,inflateRaw:Un,ungzip:Wn,constants:N},Kn=class{view;offset=0;constructor(e){this.view=new DataView(e)}readUint8(){return this.view.getUint8(this.offset++)}readUint32(){let e=this.view.getUint32(this.offset,!0);return this.offset+=4,e}readBytes(e){let t=new Uint8Array(this.view.buffer,this.offset,e);return this.offset+=e,t}eof(){return this.offset>=this.view.byteLength}},qn=class{decodeBuffer(e){return this.textDecoder.decode(Gn.inflate(e))}decoder=Gn;textDecoder=new TextDecoder(`utf-8`);ChunkType={PROP:1,MESH:2,STRUCTURE:3,GRIDS:4,MATRIX:5,MESHSPACE:6,NORTHANGLE:7};parseMesh(e){let t=new DataView(e.buffer,e.byteOffset),n=0,r=()=>{let r=t.getUint32(n,!0);n+=4;let i=new Uint8Array(e.buffer,e.byteOffset+n,r);return n+=r,i};return{pos:r(),ids:r(),ind:(()=>{let r=t.getUint32(n,!0);n+=4;let i=t.getUint32(n,!0);n+=4;let a=new Uint8Array(e.buffer,e.byteOffset+n,r);return n+=r,{data:a,type:i}})(),colorId:(()=>{let e=t.getUint8(n++)/255,r=t.getUint8(n++)/255,i=t.getUint8(n++)/255,a=t.getUint8(n++)/255,o=t.getUint32(n,!0);return n+=4,{r:e,g:r,b:i,opacity:a,name:o}})()}}getExternalMetadataPath(e){let t=e.match(/[?#].*$/)?.[0]??``,n=t?e.slice(0,-t.length):e;return/\.min\.bmt$/i.test(n)?n.replace(/\.min\.bmt$/i,`_props.json`)+t:null}async loadExternalMetadata(e){let t=this.getExternalMetadataPath(e);if(!t)return null;try{let e=await fetch(t);return e.ok?await e.json():null}catch(e){return console.warn(`BMT metadata loading error: ${t}`,e),null}}getCoordinationMatrixFromBinary(e){let t=new Kn(e);if(new TextDecoder().decode(t.readBytes(3))!==`BMT`)return;t.readUint8();let n,r;for(;!t.eof();){let e=t.readUint8(),i=t.readUint32(),a=t.readBytes(i);switch(e){case this.ChunkType.MATRIX:if(i){let e=this.decodeBuffer(a);n??=e,r=e}break;case this.ChunkType.MESH:case this.ChunkType.MESHSPACE:r=void 0;break;default:break}}return r??n}getModelNameFromPath(e){return(e.split(/[?#]/)[0].split(/[\\/]/).pop()||`model`).replace(/\.min\.bmt$/i,``).replace(/\.[^.]+$/i,``).trim()||`model`}async loadModel(e,t){let n=await fetch(e);console.log(`Parsing BMT model`);let r=await n.arrayBuffer(),i=this.parseBinaryFile(r,t);i.name??=this.getModelNameFromPath(e);let a=await this.loadExternalMetadata(e);return a?.props&&(i.props=a.props),a?.grids&&(i.grids=a.grids),a?.coordinationMatrix&&(i.coordinationMatrix=a.coordinationMatrix),a?.structure!==void 0&&(i.structure=a.structure),typeof a?.trueNorthAngle==`number`&&(i.trueNorthAngle=a.trueNorthAngle),i}parseBinaryFile(e,t={}){let n=new Kn(e);if(new TextDecoder().decode(n.readBytes(3))!==`BMT`)throw Error(`Invalid file`);let r=n.readUint8();console.log(`model version: ${r}`);let i=n.view.byteLength,a=this.createParseState(t.streamGeometryChunks?this.getCoordinationMatrixFromBinary(e):void 0);for(;!n.eof();){let e=n.readUint8(),r=n.readUint32(),o=n.readBytes(r);this.parseChunk(a,e,o,t,n.offset,i)}return this.createModelData(a)}createStreamParser(e={},t=0){return new Jn(this,e,t)}createParseState(e){return{curMatrix:``,deferredChunks:null,emittedChunks:0,geomData:{},propsData:{},streamingCoordinationMatrix:e,structure:{}}}parseChunk(e,t,n,r,i,a){switch(t){case this.ChunkType.MESH:case this.ChunkType.MESHSPACE:{let o=this.parseGeometry(n,t,e.curMatrix),s=o.mat.name;if(e.trailingMatrix=void 0,r.streamGeometryChunks){let n={chunkIndex:e.emittedChunks,coordinationMatrix:e.streamingCoordinationMatrix,geometry:o,geometryID:s,isIfcSpace:t===this.ChunkType.MESHSPACE,loadedBytes:i,totalBytes:a};e.emittedChunks++,e.deferredChunks?e.deferredChunks.push(n):r.onGeometryChunk?.(n)}else e.geomData[s]=o;break}case this.ChunkType.PROP:{let t=JSON.parse(this.decodeBuffer(n));t?.id===void 0?t&&typeof t==`object`&&Object.assign(e.propsData,t):e.propsData[t.id]=t}break;case this.ChunkType.STRUCTURE:e.structure=JSON.parse(this.decodeBuffer(n));break;case this.ChunkType.GRIDS:e.gridsData=JSON.parse(this.decodeBuffer(n));break;case this.ChunkType.MATRIX:n.length&&(e.curMatrix=this.decodeBuffer(n),e.firstMatrix??=e.curMatrix,e.trailingMatrix=e.curMatrix);break;case this.ChunkType.NORTHANGLE:{let t=Number(this.decodeBuffer(n));Number.isFinite(t)&&(e.trueNorthAngle=t);break}default:break}r.onProgress?.({emittedChunks:e.emittedChunks,loadedBytes:i,totalBytes:a})}createModelData(e){return{coordinationMatrix:e.trailingMatrix??e.firstMatrix,data:e.geomData,grids:e.gridsData,props:e.propsData,structure:e.structure,trueNorthAngle:e.trueNorthAngle}}parseGeometry(e,t,n){let r=this.parseMesh(e),i=this.decoder.inflate(r.pos),a=this.decoder.inflate(r.ids),o=this.decoder.inflate(r.ind.data),s=new Float32Array(i.buffer),c=new Uint32Array(a.buffer),l;if(o&&o.length)l=r.ind.type===0?new Uint16Array(o.buffer,o.byteOffset,o.byteLength/2):new Uint32Array(o.buffer,o.byteOffset,o.byteLength/4);else{l=new Uint32Array(i.length);for(let e=0;e<i.length;e++)l[e]=e}return{pos:s,ids:c,ind:l,isIfcSpace:t===this.ChunkType.MESHSPACE,mat:r.colorId,matrix:n||void 0}}},Jn=class{buffer;headerRead=!1;length=0;offset=0;state;loader;callbacks;totalBytes;constructor(e,t,n=0){this.loader=e,this.callbacks=t,this.totalBytes=n,this.buffer=new Uint8Array(n>0?n:1048576),this.state=e.createParseState()}push(e){this.ensureCapacity(this.length+e.byteLength),this.buffer.set(e,this.length),this.length+=e.byteLength,this.parseAvailable()}finish(){if(this.parseAvailable(),!this.headerRead||this.offset!==this.length)throw Error(`Unexpected end of BMT file`);let{state:e}=this,t=e.deferredChunks;if(t){e.deferredChunks=null;let n=e.trailingMatrix??e.firstMatrix;t.forEach(e=>{this.callbacks.onGeometryChunk?.({...e,coordinationMatrix:n})})}return this.loader.createModelData(e)}ensureCapacity(e){if(e<=this.buffer.byteLength)return;let t=new Uint8Array(Math.max(e,this.buffer.byteLength*2));t.set(this.buffer.subarray(0,this.length)),this.buffer=t}parseAvailable(){let{buffer:e,state:t}=this;if(!this.headerRead){if(this.length<4)return;if(new TextDecoder().decode(e.subarray(0,3))!==`BMT`)throw Error(`Invalid file`);console.log(`model version: ${e[3]}`),this.offset=4,this.headerRead=!0}let n=new DataView(e.buffer,e.byteOffset),r=this.totalBytes||this.length;for(;this.length-this.offset>=5;){let i=e[this.offset],a=n.getUint32(this.offset+1,!0),o=this.offset+5,s=o+a;if(s>this.length)return;(i===this.loader.ChunkType.MESH||i===this.loader.ChunkType.MESHSPACE)&&this.callbacks.streamGeometryChunks&&t.firstMatrix===void 0&&!t.deferredChunks&&(t.deferredChunks=[]),t.firstMatrix!==void 0&&!t.deferredChunks&&(t.streamingCoordinationMatrix??=t.firstMatrix),this.offset=s,this.loader.parseChunk(t,i,e.subarray(o,s),this.callbacks,s,r)}}},Yn=class{emit;taskId;totalModels;lastEmitTime=-1/0;lastMessage;lastModelIndex;lastPhase;constructor(e){this.emit=e.emit,this.taskId=e.taskId,this.totalModels=Math.max(e.totalModels,1)}emitModelProgress(e,t,n,r,i={}){let a=Date.now();if(!(n!==this.lastPhase||e!==this.lastModelIndex||i.message!==this.lastMessage||r>=1)&&a-this.lastEmitTime<100)return;this.lastEmitTime=a,this.lastMessage=i.message,this.lastModelIndex=e,this.lastPhase=n;let o=this.clampProgress(r),s=this.clampProgress((e+o)/this.totalModels);this.emit({...i,modelIndex:e,modelName:t,phase:n,progress:s,taskId:this.taskId,totalModels:this.totalModels})}emitError(e){this.emit({message:e,modelIndex:-1,phase:`error`,progress:1,taskId:this.taskId,totalModels:this.totalModels})}clampProgress(e){return Number.isFinite(e)?Math.max(0,Math.min(1,e)):0}};let Xn=new Uint32Array;function Zn(e,t){let n=e?.buffer;n instanceof ArrayBuffer&&t.add(n)}function Qn(e,t){e?.roots.forEach(e=>{e instanceof ArrayBuffer&&t.add(e)}),e?.index!==Xn&&Zn(e?.index,t),Zn(e?.indirectBuffer,t)}function $n(e,t){let{triangleEnd:n,triangleStart:r,vertexEnd:i,vertexStart:a}=t,o=e.ind,s=new Uint32Array((n-r)*3);for(let e=0,t=r*3;e<s.length;e++,t++)s[e]=o[t]-a;return{ids:e.ids.slice(a,i),ind:s,isIfcSpace:e.isIfcSpace,mat:e.mat,matrix:e.matrix,norm:e.norm?.slice(a*3,i*3),pos:e.pos.slice(a*3,i*3)}}function er(e,t=262144){let{ids:n,ind:r,norm:i,pos:a}=e,o=a.length/3;if(o<=t||r.length%3!=0||n.length!==o||i&&i.length!==a.length)return[e];let s=[],c=r.length/3,l=0,u=1/0,d=-1,f=-1;for(let e=0;e<c;e++){let i=r[e*3],a=r[e*3+1],o=r[e*3+2],c=n[i];e>l&&c!==f&&d-u+1>=t&&(s.push({triangleEnd:e,triangleStart:l,vertexEnd:d+1,vertexStart:u}),l=e,u=1/0,d=-1),u=Math.min(u,i,a,o),d=Math.max(d,i,a,o),f=c}if(s.push({triangleEnd:c,triangleStart:l,vertexEnd:d+1,vertexStart:u}),s.length<2)return[e];for(let t=1;t<s.length;t++)if(s[t].vertexStart<s[t-1].vertexEnd)return[e];return s.map(t=>$n(e,t))}var tr=class{nextGeometryID=4294967294;usedGeometryIDs=new Set;allocate(e){if(e!==void 0&&!this.usedGeometryIDs.has(e))return this.usedGeometryIDs.add(e),e;for(;this.usedGeometryIDs.has(this.nextGeometryID);)this.nextGeometryID--;let t=this.nextGeometryID--;return this.usedGeometryIDs.add(t),t}};function nr(e){return{ind:e.ind.slice(),pos:e.pos.slice()}}function rr(e,t){[e.pos,e.norm,e.ind,e.ids].forEach(e=>{let n=e?.buffer;n instanceof ArrayBuffer&&t.add(n)})}let ir=globalThis;function ar(e){return e.name?e.name:e.kind===`url`?or(e.url):e.kind===`file`?e.file.name:`model.bmt`}function or(e){return e.split(/[?#]/)[0].split(/[\\/]/).pop()||`model.bmt`}function sr(e){return ar(e).replace(/\.min\.bmt$/i,``).replace(/\.[^.]+$/i,``).trim()}function cr(e){return e instanceof Error?{message:e.message,stack:e.stack}:{message:String(e)}}function lr(e,t){let n=new Uint8Array(t),r=0;return e.forEach(e=>{n.set(e,r),r+=e.byteLength}),n.buffer}async function ur(e,t,n,r){let i=e.size,a=e.stream().getReader(),o=[],s=0;for(;;){let{done:e,value:c}=await a.read();if(e)break;o.push(c),s+=c.byteLength,t.emitModelProgress(n,r,`reading`,i>0?s/i*.35:.1,{loaded:s,total:i})}return lr(o,s)}async function dr(e,t,n,r){let i=await fetch(e);if(!i.ok)throw Error(`BMT fetch error: ${i.status} ${e}`);let a=i.headers.get(`content-length`),o=a?Number(a):0,s=i.body?.getReader();if(!s){let e=await i.arrayBuffer();return t.emitModelProgress(n,r,`fetching`,.35,{loaded:e.byteLength,total:e.byteLength}),e}let c=[],l=0;for(;;){let{done:e,value:i}=await s.read();if(e)break;c.push(i),l+=i.byteLength,t.emitModelProgress(n,r,`fetching`,o>0?l/o*.35:.1,{loaded:l,total:o||void 0})}return lr(c,l)}async function fr(e,t,n){let r=ar(e);return e.kind===`buffer`?(t.emitModelProgress(n,r,`reading`,.35,{loaded:e.buffer.byteLength,total:e.buffer.byteLength}),e.buffer):e.kind===`file`?ur(e.file,t,n,r):dr(e.url,t,n,r)}function pr(e){let t=e.split(/[?#]/)[0];return/\.min\.bmt$/i.test(t)?new URL(t.replace(/\.min\.bmt$/i,`_props.json`),e).href:null}async function mr(e){if(e.kind!==`url`)return null;let t=pr(e.url);if(!t)return null;try{let e=await fetch(t);return e.ok?await e.json():null}catch(e){return console.warn(`BMT metadata loading error: ${t}`,e),null}}function hr(e,t){return t?(t.props&&(e.props=t.props),t.grids&&(e.grids=t.grids),t.coordinationMatrix&&(e.coordinationMatrix=t.coordinationMatrix),typeof t.trueNorthAngle==`number`&&(e.trueNorthAngle=t.trueNorthAngle),t.structure!==void 0&&(e.structure=t.structure),e):e}function gr(e){let t=new Set;return rr(e,t),Qn(e.boundsTree,t),Array.from(t)}function _r(e,t,n,r,i){er(e.geometry).forEach((a,o)=>{let s=t.allocate(o===0?e.geometryID:void 0),c=s===a.mat.name?a:{...a,mat:{...a.mat,name:s}},l=c.boundsTree?void 0:nr(c),u=gr(c);l&&u.push(l.pos.buffer,l.ind.buffer),ir.postMessage({bvhSource:l,chunk:{chunkIndex:e.chunkIndex,coordinationMatrix:e.coordinationMatrix,geometry:c,geometryID:s,isIfcSpace:e.isIfcSpace,modelIndex:r,modelName:i},taskId:n,type:`chunk`},u)})}async function vr(e,t,n,r,i,a){let o=await fetch(e);if(!o.ok)throw Error(`BMT fetch error: ${o.status} ${e}`);let s=o.headers.get(`content-length`),c=s?Number(s):0,l=t.createStreamParser(n,c),u=o.body?.getReader();if(!u)return l.push(new Uint8Array(await o.arrayBuffer())),l.finish();let d=0;for(;;){let{done:e,value:t}=await u.read();if(e)break;d+=t.byteLength,r.emitModelProgress(i,a,`fetching`,c>0?Math.min(d/c,1)*.95:.1,{loaded:d,total:c||void 0}),l.push(t)}return l.finish()}function yr(e){let t=new Set;return Object.values(e).forEach(e=>{Object.values(e.data).forEach(e=>{gr(e).forEach(e=>t.add(e))})}),Array.from(t)}async function br(e){let t=e.options??{},n=new qn,r=new Yn({emit:t=>{ir.postMessage({progress:t,taskId:e.taskId,type:`progress`})},taskId:e.taskId,totalModels:e.sources.length}),i={};r.emitModelProgress(0,void 0,`queued`,0);for(let a=0;a<e.sources.length;a++){let o=e.sources[a],s=ar(o),c=!!t.streamGeometryChunks,l=new tr,u=mr(o),d=c?t=>_r(t,l,e.taskId,a,s):void 0,f;if(c&&o.kind===`url`)f=await vr(o.url,n,{onGeometryChunk:d,streamGeometryChunks:c},r,a,s);else{let e=await fr(o,r,a);r.emitModelProgress(a,s,`parsing`,.35),f=n.parseBinaryFile(e,{onGeometryChunk:d,onProgress:e=>{r.emitModelProgress(a,s,`parsing`,.35+e.loadedBytes/e.totalBytes*.6,{loaded:e.loadedBytes,total:e.totalBytes})},streamGeometryChunks:c})}f.name??=sr(o),hr(f,await u),i[a]=f,r.emitModelProgress(a,s,`complete`,1)}return i}ir.onmessage=e=>{let t=e.data;t.type===`load-bmt-model`&&br(t).then(e=>{ir.postMessage({models:e,taskId:t.taskId,type:`complete`},yr(e))}).catch(e=>{ir.postMessage({error:cr(e),taskId:t.taskId,type:`error`})})}})();