{"version":3,"file":"LidarLayerAdapter-D15dhfhP.cjs","names":["exports","exports","exports","exports","assert","globals","self_","window_","global_","document_","isBrowser","matches","nodeVersion","window_","document_","isBrowser","VERSION","assert","isBrowser","isBrowser","window","process","isBrowser","VERSION","VERSION","Log","VERSION","VERSION","copyToArrayBuffer","toArrayBuffer","node.toArrayBuffer","response","blob","Log","isBrowser","path.dirname","path.filename","DEFAULT_CHUNK_SIZE","DEFAULT_CHUNK_SIZE","isBrowser","path.filename","path.dirname","parse","typedLoaders","parse","D2R","D2R","units","PrimeMeridian","parser","parseProj","wkt","globals","wkt","projStr","sign","init","msfnz","forward","adjust_lon","tsfnz","inverse","phi2z","names","init","names","merc","longlat","names","Ellipsoid","datum","parseCode","Datum","dc_sphere","dc_eccentricity","projections","adjust_lon","toPoint","proj","adjust_axis","D2R","datum_transform","proj","proj4","forward","inverse","forward","MAX_ITER","pj_mlfn","init","pj_enfn","pj_mlfn","forward","adjust_lon","inverse","pj_inv_mlfn","sign","names","log1py","hypot","sinh","cosh","init","tmerc","gatg","clens","forward","adjust_lon","hypot","asinhy","clens_cmplx","inverse","sinh","names","adjust_lon","init","adjust_zone","D2R","etmerc","names","MAX_ITER","init","srat","forward","inverse","names","init","forward","adjust_lon","inverse","hypot","names","init","sign","msfnz","tsfnz","forward","adjust_lon","inverse","phi2z","names","init","forward","inverse","names","init","tsfnz","adjust_lon","forward","inverse","phi2z","names","init","msfnz","tsfnz","forward","sign","adjust_lon","inverse","phi2z","names","init","forward","adjust_lon","inverse","names","sign","init","e0fn","e1fn","e2fn","e3fn","mlfn","forward","adjust_lon","gN","inverse","imlfn","adjust_lat","names","init","qsfnz","forward","adjust_lon","inverse","names","init","msfnz","qsfnz","forward","adjust_lon","inverse","asinz","names","init","forward","adjust_lon","inverse","asinz","names","init","msfnz","forward","adjust_lon","qsfnz","inverse","iqsfnz","names","init","forward","adjust_lon","adjust_lat","inverse","names","MAX_ITER","init","e0fn","e1fn","e2fn","e3fn","mlfn","forward","adjust_lon","adjust_lat","gN","inverse","names","init","forward","inverse","names","init","forward","adjust_lon","inverse","names","init","pj_enfn","forward","adjust_lon","pj_mlfn","inverse","asinz","adjust_lat","pj_inv_mlfn","names","init","forward","adjust_lon","inverse","names","init","e0fn","e1fn","e2fn","e3fn","msfnz","mlfn","forward","adjust_lon","inverse","adjust_lat","imlfn","names","init","forward","adjust_lon","asinz","inverse","names","init","forward","adjust_lon","e0fn","e1fn","e2fn","e3fn","mlfn","inverse","asinz","imlfn","names","init","forward","adjust_lon","inverse","asinz","names","init","forward","inverse","names","init","forward","adjust_lon","inverse","D2R","names","init","forward","inverse","names","init","D2R","forward","inverse","hypot","names","init","forward","hypot","inverse","names","init","forward","adjust_lon","inverse","names","init","pj_enfn","pj_mlfn","adjust_lon","hypot","pj_inv_mlfn","adjust_lat","names","longLatNames","Proj","D2R","adjust_lon","tmerc","etmerc","utm","sterea","stere","somerc","omerc","lcc","krovak","cass","laea","aea","gnom","cea","eqc","poly","nzmg","mill","sinu","moll","eqdc","vandg","aeqd","ortho","qsc","robin","geocent","tpers","geos","eqearth","bonne","ob_tran","core","Proj","common","includedProjections"],"sources":["../src/lib/core/DeckOverlay.ts","../node_modules/copc/lib/ept/ept.js","../node_modules/copc/lib/ept/hierarchy.js","../node_modules/copc/lib/ept/index.js","../node_modules/copc/lib/copc/constants.js","../node_modules/copc/lib/las/constants.js","../node_modules/copc/lib/utils/big-int.js","../node_modules/copc/lib/utils/binary.js","../node_modules/copc/lib/utils/bounds.js","../node_modules/copc/lib/utils/dimension.js","../node_modules/cross-fetch/dist/browser-ponyfill.js","../node_modules/copc/lib/utils/getter.js","../node_modules/copc/lib/utils/key.js","../node_modules/copc/lib/utils/scale.js","../node_modules/copc/lib/utils/step.js","../node_modules/copc/lib/utils/index.js","../node_modules/copc/lib/las/extra-bytes.js","../node_modules/copc/lib/las/dimensions.js","../node_modules/copc/lib/las/extractor.js","../node_modules/copc/lib/las/utils.js","../node_modules/copc/lib/las/header.js","../node_modules/laz-perf/lib/web/laz-perf.js","../node_modules/laz-perf/lib/web/index.js","../node_modules/copc/lib/las/point-data.js","../node_modules/copc/lib/las/view.js","../node_modules/copc/lib/las/vlr.js","../node_modules/copc/lib/las/index.js","../node_modules/copc/lib/copc/hierarchy.js","../node_modules/copc/lib/copc/info.js","../node_modules/copc/lib/copc/copc.js","../node_modules/copc/lib/copc/index.js","../node_modules/copc/lib/index.js","../node_modules/@loaders.gl/loader-utils/dist/lib/env-utils/assert.js","../node_modules/@loaders.gl/loader-utils/dist/lib/env-utils/globals.js","../node_modules/@probe.gl/env/dist/lib/globals.js","../node_modules/@probe.gl/env/dist/lib/is-electron.js","../node_modules/@probe.gl/env/dist/lib/is-browser.js","../node_modules/@probe.gl/env/dist/index.js","../node_modules/@probe.gl/log/dist/utils/assert.js","../node_modules/@probe.gl/log/dist/loggers/log-utils.js","../node_modules/@probe.gl/log/dist/loggers/base-log.js","../node_modules/@probe.gl/log/dist/utils/local-storage.js","../node_modules/@probe.gl/log/dist/utils/formatters.js","../node_modules/@probe.gl/log/dist/utils/color.js","../node_modules/@probe.gl/log/dist/utils/autobind.js","../node_modules/@probe.gl/log/dist/utils/hi-res-timestamp.js","../node_modules/@probe.gl/log/dist/loggers/probe-log.js","../node_modules/@loaders.gl/loader-utils/dist/lib/log-utils/log.js","../node_modules/@loaders.gl/loader-utils/dist/lib/javascript-utils/is-type.js","../node_modules/@loaders.gl/loader-utils/dist/lib/option-utils/merge-options.js","../node_modules/@loaders.gl/worker-utils/dist/lib/npm-tag.js","../node_modules/@loaders.gl/worker-utils/dist/lib/env-utils/version.js","../node_modules/@loaders.gl/worker-utils/dist/lib/env-utils/assert.js","../node_modules/@loaders.gl/worker-utils/dist/lib/env-utils/globals.js","../node_modules/@loaders.gl/worker-utils/dist/lib/worker-farm/worker-job.js","../node_modules/@loaders.gl/worker-utils/dist/lib/node/worker_threads-browser.js","../node_modules/@loaders.gl/worker-utils/dist/lib/worker-utils/get-loadable-worker-url.js","../node_modules/@loaders.gl/worker-utils/dist/lib/worker-utils/get-transfer-list.js","../node_modules/@loaders.gl/worker-utils/dist/lib/worker-farm/worker-thread.js","../node_modules/@loaders.gl/worker-utils/dist/lib/worker-farm/worker-pool.js","../node_modules/@loaders.gl/worker-utils/dist/lib/worker-farm/worker-farm.js","../node_modules/@loaders.gl/worker-utils/dist/lib/worker-api/get-worker-url.js","../node_modules/@loaders.gl/worker-utils/dist/lib/worker-api/validate-worker-version.js","../node_modules/@loaders.gl/loader-utils/dist/lib/worker-loader-utils/parse-with-worker.js","../node_modules/@loaders.gl/loader-utils/dist/lib/binary-utils/array-buffer-utils.js","../node_modules/@loaders.gl/loader-utils/dist/lib/iterators/async-iteration.js","../node_modules/@loaders.gl/loader-utils/dist/lib/path-utils/file-aliases.js","../node_modules/@loaders.gl/loader-utils/dist/lib/node/buffer.browser.js","../node_modules/@loaders.gl/loader-utils/dist/lib/binary-utils/memory-conversion-utils.js","../node_modules/@loaders.gl/loader-utils/dist/lib/path-utils/path.js","../node_modules/@loaders.gl/core/dist/lib/fetch/fetch-error.js","../node_modules/@loaders.gl/core/dist/lib/utils/mime-type-utils.js","../node_modules/@loaders.gl/core/dist/lib/utils/url-utils.js","../node_modules/@loaders.gl/core/dist/lib/utils/resource-utils.js","../node_modules/@loaders.gl/core/dist/lib/utils/response-utils.js","../node_modules/@loaders.gl/core/dist/lib/fetch/fetch-file.js","../node_modules/@loaders.gl/core/dist/lib/loader-utils/loggers.js","../node_modules/@loaders.gl/core/dist/lib/loader-utils/option-defaults.js","../node_modules/@loaders.gl/core/dist/lib/loader-utils/option-utils.js","../node_modules/@loaders.gl/core/dist/lib/loader-utils/normalize-loader.js","../node_modules/@loaders.gl/core/dist/lib/api/register-loaders.js","../node_modules/@loaders.gl/core/dist/lib/api/select-loader.js","../node_modules/@loaders.gl/core/dist/iterators/make-iterator/make-string-iterator.js","../node_modules/@loaders.gl/core/dist/iterators/make-iterator/make-array-buffer-iterator.js","../node_modules/@loaders.gl/core/dist/iterators/make-iterator/make-blob-iterator.js","../node_modules/@loaders.gl/core/dist/iterators/make-iterator/make-stream-iterator.js","../node_modules/@loaders.gl/core/dist/iterators/make-iterator/make-iterator.js","../node_modules/@loaders.gl/core/dist/lib/loader-utils/get-data.js","../node_modules/@loaders.gl/core/dist/lib/loader-utils/get-fetch-function.js","../node_modules/@loaders.gl/core/dist/lib/loader-utils/loader-context.js","../node_modules/@loaders.gl/core/dist/lib/api/parse.js","../node_modules/@loaders.gl/schema-utils/dist/lib/schema/data-type.js","../node_modules/@loaders.gl/schema-utils/dist/lib/mesh/mesh-utils.js","../node_modules/@loaders.gl/schema-utils/dist/lib/mesh/deduce-mesh-schema.js","../node_modules/@loaders.gl/core/dist/lib/api/load.js","../node_modules/@loaders.gl/las/dist/las-format.js","../node_modules/@loaders.gl/las/dist/las-loader.js","../node_modules/@loaders.gl/las/dist/lib/get-las-schema.js","../node_modules/@loaders.gl/las/dist/libs/laz-perf/laz-perf.js","../node_modules/@loaders.gl/las/dist/lib/laz-perf/laslaz-decoder.js","../node_modules/@loaders.gl/las/dist/lib/laz-perf/parse-las.js","../node_modules/@loaders.gl/las/dist/lazperf-loader.js","../node_modules/proj4/lib/global.js","../node_modules/proj4/lib/constants/values.js","../node_modules/proj4/lib/constants/PrimeMeridian.js","../node_modules/proj4/lib/constants/units.js","../node_modules/proj4/lib/match.js","../node_modules/proj4/lib/projString.js","../node_modules/wkt-parser/PROJJSONBuilderBase.js","../node_modules/wkt-parser/PROJJSONBuilder2015.js","../node_modules/wkt-parser/PROJJSONBuilder2019.js","../node_modules/wkt-parser/buildPROJJSON.js","../node_modules/wkt-parser/detectWKTVersion.js","../node_modules/wkt-parser/parser.js","../node_modules/wkt-parser/process.js","../node_modules/wkt-parser/util.js","../node_modules/wkt-parser/transformPROJJSON.js","../node_modules/wkt-parser/index.js","../node_modules/proj4/lib/defs.js","../node_modules/proj4/lib/parseCode.js","../node_modules/proj4/lib/extend.js","../node_modules/proj4/lib/common/msfnz.js","../node_modules/proj4/lib/common/sign.js","../node_modules/proj4/lib/common/adjust_lon.js","../node_modules/proj4/lib/common/tsfnz.js","../node_modules/proj4/lib/common/phi2z.js","../node_modules/proj4/lib/projections/merc.js","../node_modules/proj4/lib/projections/longlat.js","../node_modules/proj4/lib/projections.js","../node_modules/proj4/lib/constants/Ellipsoid.js","../node_modules/proj4/lib/deriveConstants.js","../node_modules/proj4/lib/constants/Datum.js","../node_modules/proj4/lib/datum.js","../node_modules/proj4/lib/nadgrid.js","../node_modules/proj4/lib/Proj.js","../node_modules/proj4/lib/datumUtils.js","../node_modules/proj4/lib/datum_transform.js","../node_modules/proj4/lib/adjust_axis.js","../node_modules/proj4/lib/common/toPoint.js","../node_modules/proj4/lib/checkSanity.js","../node_modules/proj4/lib/transform.js","../node_modules/proj4/lib/core.js","../node_modules/mgrs/mgrs.js","../node_modules/proj4/lib/Point.js","../node_modules/proj4/lib/common/pj_enfn.js","../node_modules/proj4/lib/common/pj_mlfn.js","../node_modules/proj4/lib/common/pj_inv_mlfn.js","../node_modules/proj4/lib/projections/tmerc.js","../node_modules/proj4/lib/common/sinh.js","../node_modules/proj4/lib/common/hypot.js","../node_modules/proj4/lib/common/log1py.js","../node_modules/proj4/lib/common/asinhy.js","../node_modules/proj4/lib/common/gatg.js","../node_modules/proj4/lib/common/clens.js","../node_modules/proj4/lib/common/cosh.js","../node_modules/proj4/lib/common/clens_cmplx.js","../node_modules/proj4/lib/projections/etmerc.js","../node_modules/proj4/lib/common/adjust_zone.js","../node_modules/proj4/lib/projections/utm.js","../node_modules/proj4/lib/common/srat.js","../node_modules/proj4/lib/projections/gauss.js","../node_modules/proj4/lib/projections/sterea.js","../node_modules/proj4/lib/projections/stere.js","../node_modules/proj4/lib/projections/somerc.js","../node_modules/proj4/lib/projections/omerc.js","../node_modules/proj4/lib/projections/lcc.js","../node_modules/proj4/lib/projections/krovak.js","../node_modules/proj4/lib/common/mlfn.js","../node_modules/proj4/lib/common/e0fn.js","../node_modules/proj4/lib/common/e1fn.js","../node_modules/proj4/lib/common/e2fn.js","../node_modules/proj4/lib/common/e3fn.js","../node_modules/proj4/lib/common/gN.js","../node_modules/proj4/lib/common/adjust_lat.js","../node_modules/proj4/lib/common/imlfn.js","../node_modules/proj4/lib/projections/cass.js","../node_modules/proj4/lib/common/qsfnz.js","../node_modules/proj4/lib/projections/laea.js","../node_modules/proj4/lib/common/asinz.js","../node_modules/proj4/lib/projections/aea.js","../node_modules/proj4/lib/projections/gnom.js","../node_modules/proj4/lib/common/iqsfnz.js","../node_modules/proj4/lib/projections/cea.js","../node_modules/proj4/lib/projections/eqc.js","../node_modules/proj4/lib/projections/poly.js","../node_modules/proj4/lib/projections/nzmg.js","../node_modules/proj4/lib/projections/mill.js","../node_modules/proj4/lib/projections/sinu.js","../node_modules/proj4/lib/projections/moll.js","../node_modules/proj4/lib/projections/eqdc.js","../node_modules/proj4/lib/projections/vandg.js","../node_modules/proj4/lib/common/vincenty.js","../node_modules/proj4/lib/projections/aeqd.js","../node_modules/proj4/lib/projections/ortho.js","../node_modules/proj4/lib/projections/qsc.js","../node_modules/proj4/lib/projections/robin.js","../node_modules/proj4/lib/projections/geocent.js","../node_modules/proj4/lib/projections/tpers.js","../node_modules/proj4/lib/projections/geos.js","../node_modules/proj4/lib/projections/eqearth.js","../node_modules/proj4/lib/projections/bonne.js","../node_modules/proj4/lib/projections/ob_tran.js","../node_modules/proj4/projs.js","../node_modules/proj4/lib/index.js","../src/lib/loaders/PointCloudLoader.ts","../src/lib/loaders/CopcStreamingLoader.ts","../src/lib/loaders/EptStreamingLoader.ts","../src/lib/utils/helpers.ts","../src/lib/colorizers/Colormaps.ts","../src/lib/colorizers/ColorScheme.ts","../src/lib/layers/PointCloudManager.ts","../src/lib/core/ViewportManager.ts","../src/lib/gui/FileInput.ts","../src/lib/gui/RangeSlider.ts","../src/lib/gui/DualRangeSlider.ts","../src/lib/gui/ClassificationLegend.ts","../src/lib/gui/Colorbar.ts","../src/lib/gui/PercentileRangeControl.ts","../src/lib/gui/PanelBuilder.ts","../src/lib/gui/MetadataPanel.ts","../src/lib/gui/ElevationProfileChart.ts","../src/lib/gui/CrossSectionPanel.ts","../src/lib/tools/ElevationProfileExtractor.ts","../src/lib/tools/CrossSectionTool.ts","../src/lib/utils/share-url.ts","../src/lib/core/LidarControl.ts","../src/lib/adapters/LidarLayerAdapter.ts"],"sourcesContent":["import { MapboxOverlay } from '@deck.gl/mapbox';\nimport type { Map as MapLibreMap } from 'maplibre-gl';\nimport type { Layer } from '@deck.gl/core';\n\n/**\n * Manages the deck.gl overlay integration with MapLibre GL.\n * Handles adding, removing, and updating deck.gl layers.\n */\nexport class DeckOverlay {\n  private _map: MapLibreMap;\n  private _overlay: MapboxOverlay;\n  private _layers: Map<string, Layer>;\n\n  constructor(map: MapLibreMap) {\n    this._map = map;\n    this._layers = new Map();\n    this._overlay = new MapboxOverlay({\n      interleaved: false, // Use non-interleaved mode for better compatibility\n      layers: [],\n    });\n    // Add the overlay as a control (compatible with MapLibre)\n    this._map.addControl(this._overlay as unknown as maplibregl.IControl);\n  }\n\n  /**\n   * Adds a layer to the overlay.\n   *\n   * @param id - Unique layer ID\n   * @param layer - The deck.gl layer to add\n   */\n  addLayer(id: string, layer: Layer): void {\n    this._layers.set(id, layer);\n    this._updateOverlay();\n  }\n\n  /**\n   * Removes a layer from the overlay.\n   *\n   * @param id - ID of the layer to remove\n   */\n  removeLayer(id: string): void {\n    this._layers.delete(id);\n    this._updateOverlay();\n  }\n\n  /**\n   * Updates an existing layer with new props.\n   *\n   * @param id - ID of the layer to update\n   * @param layer - New layer instance with updated props\n   */\n  updateLayer(id: string, layer: Layer): void {\n    if (this._layers.has(id)) {\n      this._layers.set(id, layer);\n      this._updateOverlay();\n    }\n  }\n\n  /**\n   * Gets all current layers.\n   *\n   * @returns Array of deck.gl layers\n   */\n  getLayers(): Layer[] {\n    return Array.from(this._layers.values());\n  }\n\n  /**\n   * Checks if a layer exists.\n   *\n   * @param id - Layer ID to check\n   * @returns True if layer exists\n   */\n  hasLayer(id: string): boolean {\n    return this._layers.has(id);\n  }\n\n  /**\n   * Clears all layers from the overlay.\n   */\n  clearLayers(): void {\n    this._layers.clear();\n    this._updateOverlay();\n  }\n\n  /**\n   * Gets the MapLibre map instance.\n   *\n   * @returns The MapLibre map\n   */\n  getMap(): MapLibreMap {\n    return this._map;\n  }\n\n  /**\n   * Destroys the overlay and removes it from the map.\n   */\n  destroy(): void {\n    this._layers.clear();\n    try {\n      this._map.removeControl(this._overlay as unknown as maplibregl.IControl);\n    } catch {\n      // Ignore errors if already removed\n    }\n  }\n\n  /**\n   * Updates the overlay with current layers.\n   * Layers are sorted so that overlay layers (like cross-section) render on top.\n   */\n  private _updateOverlay(): void {\n    // Sort layers: point cloud layers first, overlay layers (cross-section) last\n    const sortedLayers = Array.from(this._layers.entries()).sort(([idA], [idB]) => {\n      // Cross-section layer should render last (on top)\n      const isOverlayA = idA.includes('cross-section');\n      const isOverlayB = idB.includes('cross-section');\n      if (isOverlayA && !isOverlayB) return 1;\n      if (!isOverlayA && isOverlayB) return -1;\n      return 0;\n    }).map(([, layer]) => layer);\n\n    this._overlay.setProps({\n      layers: sortedLayers,\n    });\n    // Trigger a map repaint to ensure the deck overlay is rendered\n    this._map.triggerRepaint();\n  }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Hierarchy = void 0;\nexports.Hierarchy = { parse };\nfunction parse(e) {\n    return Object.entries(e).reduce((h, [keystring, pointCount]) => {\n        if (pointCount === -1)\n            h.pages[keystring] = {};\n        else if (pointCount)\n            h.nodes[keystring] = { pointCount };\n        return h;\n    }, { nodes: {}, pages: {} });\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./ept\"), exports);\n__exportStar(require(\"./hierarchy\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.hierarchyItemLength = exports.infoLength = void 0;\nexports.infoLength = 160;\nexports.hierarchyItemLength = 32;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.evlrHeaderLength = exports.vlrHeaderLength = exports.minHeaderLength = void 0;\nexports.minHeaderLength = 375;\nexports.vlrHeaderLength = 54;\nexports.evlrHeaderLength = 60;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getBigUint64 = exports.parseBigInt = void 0;\nfunction parseBigInt(v) {\n    if (v > BigInt(Number.MAX_SAFE_INTEGER) ||\n        v < BigInt(-Number.MAX_SAFE_INTEGER)) {\n        throw new Error(`Cannot convert bigint to number: ${v}`);\n    }\n    return Number(v);\n}\nexports.parseBigInt = parseBigInt;\n// Safari is non-conforming here and doesn't have the BigUint functions on their\n// DataView :\\\nfunction getBigUint64(dv, byteOffset, littleEndian) {\n    if (dv.getBigUint64)\n        return dv.getBigUint64(byteOffset, littleEndian);\n    const [h, l] = littleEndian ? [4, 0] : [0, 4];\n    const wh = BigInt(dv.getUint32(byteOffset + h, littleEndian));\n    const wl = BigInt(dv.getUint32(byteOffset + l, littleEndian));\n    return (wh << BigInt(32)) + wl;\n}\nexports.getBigUint64 = getBigUint64;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toCString = exports.toDataView = exports.Binary = void 0;\nexports.Binary = { toDataView, toCString };\nfunction toDataView(buffer) {\n    return new DataView(buffer.buffer, buffer.byteOffset, buffer.length);\n}\nexports.toDataView = toDataView;\nfunction toCString(buffer) {\n    const dv = toDataView(buffer);\n    let s = '';\n    for (let i = 0; i < dv.byteLength; ++i) {\n        const c = dv.getInt8(i);\n        if (c === 0)\n            return s;\n        s += String.fromCharCode(c);\n    }\n    return s;\n}\nexports.toCString = toCString;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Bounds = void 0;\nexports.Bounds = {\n    min,\n    max,\n    mid,\n    width,\n    depth,\n    height,\n    cube,\n    step,\n    stepTo,\n    intersection,\n};\nfunction min(b) {\n    return [b[0], b[1], b[2]];\n}\nfunction max(b) {\n    return [b[3], b[4], b[5]];\n}\nfunction mid([minx, miny, minz, maxx, maxy, maxz]) {\n    return [\n        minx + (maxx - minx) / 2,\n        miny + (maxy - miny) / 2,\n        minz + (maxz - minz) / 2,\n    ];\n}\nfunction width(bounds) {\n    return bounds[3] - bounds[0];\n}\nfunction depth(bounds) {\n    return bounds[4] - bounds[1];\n}\nfunction height(bounds) {\n    return bounds[5] - bounds[2];\n}\nfunction cube(bounds) {\n    const point = mid(bounds);\n    const radius = Math.max(width(bounds), depth(bounds), height(bounds)) / 2;\n    return [\n        point[0] - radius,\n        point[1] - radius,\n        point[2] - radius,\n        point[0] + radius,\n        point[1] + radius,\n        point[2] + radius,\n    ];\n}\nfunction step(bounds, [a, b, c]) {\n    const [minx, miny, minz, maxx, maxy, maxz] = bounds;\n    const [midx, midy, midz] = mid(bounds);\n    return [\n        a ? midx : minx,\n        b ? midy : miny,\n        c ? midz : minz,\n        a ? maxx : midx,\n        b ? maxy : midy,\n        c ? maxz : midz,\n    ];\n}\nfunction stepTo(bounds, [d, x, y, z]) {\n    for (let i = d - 1; i >= 0; --i) {\n        bounds = step(bounds, [(x >> i) & 1, (y >> i) & 1, (z >> i) & 1]);\n    }\n    return bounds;\n}\nfunction intersection(a, b) {\n    return [\n        Math.max(a[0], b[0]),\n        Math.max(a[1], b[1]),\n        Math.max(a[2], b[2]),\n        Math.min(a[3], b[3]),\n        Math.min(a[4], b[4]),\n        Math.min(a[5], b[5]),\n    ];\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Dimension = void 0;\nconst Type = {\n    int8: { type: 'signed', size: 1 },\n    int16: { type: 'signed', size: 2 },\n    int32: { type: 'signed', size: 4 },\n    int64: { type: 'signed', size: 8 },\n    uint8: { type: 'unsigned', size: 1 },\n    uint16: { type: 'unsigned', size: 2 },\n    uint32: { type: 'unsigned', size: 4 },\n    uint64: { type: 'unsigned', size: 8 },\n    float32: { type: 'float', size: 4 },\n    float64: { type: 'float', size: 8 },\n    // Aliases.\n    float: { type: 'float', size: 4 },\n    double: { type: 'float', size: 8 },\n    // Minimum size of one byte, so this is a convenience for a byte.\n    bool: { type: 'unsigned', size: 1 },\n    boolean: { type: 'unsigned', size: 1 },\n};\nexports.Dimension = { Type, ctype };\nfunction ctype({ type, size }) {\n    switch (type) {\n        case 'signed': {\n            switch (size) {\n                case 1:\n                    return 'int8';\n                case 2:\n                    return 'int16';\n                case 4:\n                    return 'int32';\n                case 8:\n                    return 'int64';\n            }\n        }\n        case 'unsigned': {\n            switch (size) {\n                case 1:\n                    return 'uint8';\n                case 2:\n                    return 'uint16';\n                case 4:\n                    return 'uint32';\n                case 8:\n                    return 'uint64';\n            }\n        }\n        case 'float': {\n            switch (size) {\n                case 4:\n                    return 'float';\n                case 8:\n                    return 'double';\n            }\n        }\n    }\n    throw new Error(`Invalid dimension type/size: ${type}/${size}`);\n}\n","// Save global object in a variable\nvar __global__ =\n(typeof globalThis !== 'undefined' && globalThis) ||\n(typeof self !== 'undefined' && self) ||\n(typeof global !== 'undefined' && global);\n// Create an object that extends from __global__ without the fetch function\nvar __globalThis__ = (function () {\nfunction F() {\nthis.fetch = false;\nthis.DOMException = __global__.DOMException\n}\nF.prototype = __global__; // Needed for feature detection on whatwg-fetch's code\nreturn new F();\n})();\n// Wraps whatwg-fetch with a function scope to hijack the global object\n// \"globalThis\" that's going to be patched\n(function(globalThis) {\n\nvar irrelevant = (function (exports) {\n\n  /* eslint-disable no-prototype-builtins */\n  var g =\n    (typeof globalThis !== 'undefined' && globalThis) ||\n    (typeof self !== 'undefined' && self) ||\n    // eslint-disable-next-line no-undef\n    (typeof global !== 'undefined' && global) ||\n    {};\n\n  var support = {\n    searchParams: 'URLSearchParams' in g,\n    iterable: 'Symbol' in g && 'iterator' in Symbol,\n    blob:\n      'FileReader' in g &&\n      'Blob' in g &&\n      (function() {\n        try {\n          new Blob();\n          return true\n        } catch (e) {\n          return false\n        }\n      })(),\n    formData: 'FormData' in g,\n    arrayBuffer: 'ArrayBuffer' in g\n  };\n\n  function isDataView(obj) {\n    return obj && DataView.prototype.isPrototypeOf(obj)\n  }\n\n  if (support.arrayBuffer) {\n    var viewClasses = [\n      '[object Int8Array]',\n      '[object Uint8Array]',\n      '[object Uint8ClampedArray]',\n      '[object Int16Array]',\n      '[object Uint16Array]',\n      '[object Int32Array]',\n      '[object Uint32Array]',\n      '[object Float32Array]',\n      '[object Float64Array]'\n    ];\n\n    var isArrayBufferView =\n      ArrayBuffer.isView ||\n      function(obj) {\n        return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n      };\n  }\n\n  function normalizeName(name) {\n    if (typeof name !== 'string') {\n      name = String(name);\n    }\n    if (/[^a-z0-9\\-#$%&'*+.^_`|~!]/i.test(name) || name === '') {\n      throw new TypeError('Invalid character in header field name: \"' + name + '\"')\n    }\n    return name.toLowerCase()\n  }\n\n  function normalizeValue(value) {\n    if (typeof value !== 'string') {\n      value = String(value);\n    }\n    return value\n  }\n\n  // Build a destructive iterator for the value list\n  function iteratorFor(items) {\n    var iterator = {\n      next: function() {\n        var value = items.shift();\n        return {done: value === undefined, value: value}\n      }\n    };\n\n    if (support.iterable) {\n      iterator[Symbol.iterator] = function() {\n        return iterator\n      };\n    }\n\n    return iterator\n  }\n\n  function Headers(headers) {\n    this.map = {};\n\n    if (headers instanceof Headers) {\n      headers.forEach(function(value, name) {\n        this.append(name, value);\n      }, this);\n    } else if (Array.isArray(headers)) {\n      headers.forEach(function(header) {\n        if (header.length != 2) {\n          throw new TypeError('Headers constructor: expected name/value pair to be length 2, found' + header.length)\n        }\n        this.append(header[0], header[1]);\n      }, this);\n    } else if (headers) {\n      Object.getOwnPropertyNames(headers).forEach(function(name) {\n        this.append(name, headers[name]);\n      }, this);\n    }\n  }\n\n  Headers.prototype.append = function(name, value) {\n    name = normalizeName(name);\n    value = normalizeValue(value);\n    var oldValue = this.map[name];\n    this.map[name] = oldValue ? oldValue + ', ' + value : value;\n  };\n\n  Headers.prototype['delete'] = function(name) {\n    delete this.map[normalizeName(name)];\n  };\n\n  Headers.prototype.get = function(name) {\n    name = normalizeName(name);\n    return this.has(name) ? this.map[name] : null\n  };\n\n  Headers.prototype.has = function(name) {\n    return this.map.hasOwnProperty(normalizeName(name))\n  };\n\n  Headers.prototype.set = function(name, value) {\n    this.map[normalizeName(name)] = normalizeValue(value);\n  };\n\n  Headers.prototype.forEach = function(callback, thisArg) {\n    for (var name in this.map) {\n      if (this.map.hasOwnProperty(name)) {\n        callback.call(thisArg, this.map[name], name, this);\n      }\n    }\n  };\n\n  Headers.prototype.keys = function() {\n    var items = [];\n    this.forEach(function(value, name) {\n      items.push(name);\n    });\n    return iteratorFor(items)\n  };\n\n  Headers.prototype.values = function() {\n    var items = [];\n    this.forEach(function(value) {\n      items.push(value);\n    });\n    return iteratorFor(items)\n  };\n\n  Headers.prototype.entries = function() {\n    var items = [];\n    this.forEach(function(value, name) {\n      items.push([name, value]);\n    });\n    return iteratorFor(items)\n  };\n\n  if (support.iterable) {\n    Headers.prototype[Symbol.iterator] = Headers.prototype.entries;\n  }\n\n  function consumed(body) {\n    if (body._noBody) return\n    if (body.bodyUsed) {\n      return Promise.reject(new TypeError('Already read'))\n    }\n    body.bodyUsed = true;\n  }\n\n  function fileReaderReady(reader) {\n    return new Promise(function(resolve, reject) {\n      reader.onload = function() {\n        resolve(reader.result);\n      };\n      reader.onerror = function() {\n        reject(reader.error);\n      };\n    })\n  }\n\n  function readBlobAsArrayBuffer(blob) {\n    var reader = new FileReader();\n    var promise = fileReaderReady(reader);\n    reader.readAsArrayBuffer(blob);\n    return promise\n  }\n\n  function readBlobAsText(blob) {\n    var reader = new FileReader();\n    var promise = fileReaderReady(reader);\n    var match = /charset=([A-Za-z0-9_-]+)/.exec(blob.type);\n    var encoding = match ? match[1] : 'utf-8';\n    reader.readAsText(blob, encoding);\n    return promise\n  }\n\n  function readArrayBufferAsText(buf) {\n    var view = new Uint8Array(buf);\n    var chars = new Array(view.length);\n\n    for (var i = 0; i < view.length; i++) {\n      chars[i] = String.fromCharCode(view[i]);\n    }\n    return chars.join('')\n  }\n\n  function bufferClone(buf) {\n    if (buf.slice) {\n      return buf.slice(0)\n    } else {\n      var view = new Uint8Array(buf.byteLength);\n      view.set(new Uint8Array(buf));\n      return view.buffer\n    }\n  }\n\n  function Body() {\n    this.bodyUsed = false;\n\n    this._initBody = function(body) {\n      /*\n        fetch-mock wraps the Response object in an ES6 Proxy to\n        provide useful test harness features such as flush. However, on\n        ES5 browsers without fetch or Proxy support pollyfills must be used;\n        the proxy-pollyfill is unable to proxy an attribute unless it exists\n        on the object before the Proxy is created. This change ensures\n        Response.bodyUsed exists on the instance, while maintaining the\n        semantic of setting Request.bodyUsed in the constructor before\n        _initBody is called.\n      */\n      // eslint-disable-next-line no-self-assign\n      this.bodyUsed = this.bodyUsed;\n      this._bodyInit = body;\n      if (!body) {\n        this._noBody = true;\n        this._bodyText = '';\n      } else if (typeof body === 'string') {\n        this._bodyText = body;\n      } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n        this._bodyBlob = body;\n      } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n        this._bodyFormData = body;\n      } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n        this._bodyText = body.toString();\n      } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n        this._bodyArrayBuffer = bufferClone(body.buffer);\n        // IE 10-11 can't handle a DataView body.\n        this._bodyInit = new Blob([this._bodyArrayBuffer]);\n      } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n        this._bodyArrayBuffer = bufferClone(body);\n      } else {\n        this._bodyText = body = Object.prototype.toString.call(body);\n      }\n\n      if (!this.headers.get('content-type')) {\n        if (typeof body === 'string') {\n          this.headers.set('content-type', 'text/plain;charset=UTF-8');\n        } else if (this._bodyBlob && this._bodyBlob.type) {\n          this.headers.set('content-type', this._bodyBlob.type);\n        } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n          this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n        }\n      }\n    };\n\n    if (support.blob) {\n      this.blob = function() {\n        var rejected = consumed(this);\n        if (rejected) {\n          return rejected\n        }\n\n        if (this._bodyBlob) {\n          return Promise.resolve(this._bodyBlob)\n        } else if (this._bodyArrayBuffer) {\n          return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n        } else if (this._bodyFormData) {\n          throw new Error('could not read FormData body as blob')\n        } else {\n          return Promise.resolve(new Blob([this._bodyText]))\n        }\n      };\n    }\n\n    this.arrayBuffer = function() {\n      if (this._bodyArrayBuffer) {\n        var isConsumed = consumed(this);\n        if (isConsumed) {\n          return isConsumed\n        } else if (ArrayBuffer.isView(this._bodyArrayBuffer)) {\n          return Promise.resolve(\n            this._bodyArrayBuffer.buffer.slice(\n              this._bodyArrayBuffer.byteOffset,\n              this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength\n            )\n          )\n        } else {\n          return Promise.resolve(this._bodyArrayBuffer)\n        }\n      } else if (support.blob) {\n        return this.blob().then(readBlobAsArrayBuffer)\n      } else {\n        throw new Error('could not read as ArrayBuffer')\n      }\n    };\n\n    this.text = function() {\n      var rejected = consumed(this);\n      if (rejected) {\n        return rejected\n      }\n\n      if (this._bodyBlob) {\n        return readBlobAsText(this._bodyBlob)\n      } else if (this._bodyArrayBuffer) {\n        return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n      } else if (this._bodyFormData) {\n        throw new Error('could not read FormData body as text')\n      } else {\n        return Promise.resolve(this._bodyText)\n      }\n    };\n\n    if (support.formData) {\n      this.formData = function() {\n        return this.text().then(decode)\n      };\n    }\n\n    this.json = function() {\n      return this.text().then(JSON.parse)\n    };\n\n    return this\n  }\n\n  // HTTP methods whose capitalization should be normalized\n  var methods = ['CONNECT', 'DELETE', 'GET', 'HEAD', 'OPTIONS', 'PATCH', 'POST', 'PUT', 'TRACE'];\n\n  function normalizeMethod(method) {\n    var upcased = method.toUpperCase();\n    return methods.indexOf(upcased) > -1 ? upcased : method\n  }\n\n  function Request(input, options) {\n    if (!(this instanceof Request)) {\n      throw new TypeError('Please use the \"new\" operator, this DOM object constructor cannot be called as a function.')\n    }\n\n    options = options || {};\n    var body = options.body;\n\n    if (input instanceof Request) {\n      if (input.bodyUsed) {\n        throw new TypeError('Already read')\n      }\n      this.url = input.url;\n      this.credentials = input.credentials;\n      if (!options.headers) {\n        this.headers = new Headers(input.headers);\n      }\n      this.method = input.method;\n      this.mode = input.mode;\n      this.signal = input.signal;\n      if (!body && input._bodyInit != null) {\n        body = input._bodyInit;\n        input.bodyUsed = true;\n      }\n    } else {\n      this.url = String(input);\n    }\n\n    this.credentials = options.credentials || this.credentials || 'same-origin';\n    if (options.headers || !this.headers) {\n      this.headers = new Headers(options.headers);\n    }\n    this.method = normalizeMethod(options.method || this.method || 'GET');\n    this.mode = options.mode || this.mode || null;\n    this.signal = options.signal || this.signal || (function () {\n      if ('AbortController' in g) {\n        var ctrl = new AbortController();\n        return ctrl.signal;\n      }\n    }());\n    this.referrer = null;\n\n    if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n      throw new TypeError('Body not allowed for GET or HEAD requests')\n    }\n    this._initBody(body);\n\n    if (this.method === 'GET' || this.method === 'HEAD') {\n      if (options.cache === 'no-store' || options.cache === 'no-cache') {\n        // Search for a '_' parameter in the query string\n        var reParamSearch = /([?&])_=[^&]*/;\n        if (reParamSearch.test(this.url)) {\n          // If it already exists then set the value with the current time\n          this.url = this.url.replace(reParamSearch, '$1_=' + new Date().getTime());\n        } else {\n          // Otherwise add a new '_' parameter to the end with the current time\n          var reQueryString = /\\?/;\n          this.url += (reQueryString.test(this.url) ? '&' : '?') + '_=' + new Date().getTime();\n        }\n      }\n    }\n  }\n\n  Request.prototype.clone = function() {\n    return new Request(this, {body: this._bodyInit})\n  };\n\n  function decode(body) {\n    var form = new FormData();\n    body\n      .trim()\n      .split('&')\n      .forEach(function(bytes) {\n        if (bytes) {\n          var split = bytes.split('=');\n          var name = split.shift().replace(/\\+/g, ' ');\n          var value = split.join('=').replace(/\\+/g, ' ');\n          form.append(decodeURIComponent(name), decodeURIComponent(value));\n        }\n      });\n    return form\n  }\n\n  function parseHeaders(rawHeaders) {\n    var headers = new Headers();\n    // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n    // https://tools.ietf.org/html/rfc7230#section-3.2\n    var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ');\n    // Avoiding split via regex to work around a common IE11 bug with the core-js 3.6.0 regex polyfill\n    // https://github.com/github/fetch/issues/748\n    // https://github.com/zloirock/core-js/issues/751\n    preProcessedHeaders\n      .split('\\r')\n      .map(function(header) {\n        return header.indexOf('\\n') === 0 ? header.substr(1, header.length) : header\n      })\n      .forEach(function(line) {\n        var parts = line.split(':');\n        var key = parts.shift().trim();\n        if (key) {\n          var value = parts.join(':').trim();\n          try {\n            headers.append(key, value);\n          } catch (error) {\n            console.warn('Response ' + error.message);\n          }\n        }\n      });\n    return headers\n  }\n\n  Body.call(Request.prototype);\n\n  function Response(bodyInit, options) {\n    if (!(this instanceof Response)) {\n      throw new TypeError('Please use the \"new\" operator, this DOM object constructor cannot be called as a function.')\n    }\n    if (!options) {\n      options = {};\n    }\n\n    this.type = 'default';\n    this.status = options.status === undefined ? 200 : options.status;\n    if (this.status < 200 || this.status > 599) {\n      throw new RangeError(\"Failed to construct 'Response': The status provided (0) is outside the range [200, 599].\")\n    }\n    this.ok = this.status >= 200 && this.status < 300;\n    this.statusText = options.statusText === undefined ? '' : '' + options.statusText;\n    this.headers = new Headers(options.headers);\n    this.url = options.url || '';\n    this._initBody(bodyInit);\n  }\n\n  Body.call(Response.prototype);\n\n  Response.prototype.clone = function() {\n    return new Response(this._bodyInit, {\n      status: this.status,\n      statusText: this.statusText,\n      headers: new Headers(this.headers),\n      url: this.url\n    })\n  };\n\n  Response.error = function() {\n    var response = new Response(null, {status: 200, statusText: ''});\n    response.ok = false;\n    response.status = 0;\n    response.type = 'error';\n    return response\n  };\n\n  var redirectStatuses = [301, 302, 303, 307, 308];\n\n  Response.redirect = function(url, status) {\n    if (redirectStatuses.indexOf(status) === -1) {\n      throw new RangeError('Invalid status code')\n    }\n\n    return new Response(null, {status: status, headers: {location: url}})\n  };\n\n  exports.DOMException = g.DOMException;\n  try {\n    new exports.DOMException();\n  } catch (err) {\n    exports.DOMException = function(message, name) {\n      this.message = message;\n      this.name = name;\n      var error = Error(message);\n      this.stack = error.stack;\n    };\n    exports.DOMException.prototype = Object.create(Error.prototype);\n    exports.DOMException.prototype.constructor = exports.DOMException;\n  }\n\n  function fetch(input, init) {\n    return new Promise(function(resolve, reject) {\n      var request = new Request(input, init);\n\n      if (request.signal && request.signal.aborted) {\n        return reject(new exports.DOMException('Aborted', 'AbortError'))\n      }\n\n      var xhr = new XMLHttpRequest();\n\n      function abortXhr() {\n        xhr.abort();\n      }\n\n      xhr.onload = function() {\n        var options = {\n          statusText: xhr.statusText,\n          headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n        };\n        // This check if specifically for when a user fetches a file locally from the file system\n        // Only if the status is out of a normal range\n        if (request.url.indexOf('file://') === 0 && (xhr.status < 200 || xhr.status > 599)) {\n          options.status = 200;\n        } else {\n          options.status = xhr.status;\n        }\n        options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL');\n        var body = 'response' in xhr ? xhr.response : xhr.responseText;\n        setTimeout(function() {\n          resolve(new Response(body, options));\n        }, 0);\n      };\n\n      xhr.onerror = function() {\n        setTimeout(function() {\n          reject(new TypeError('Network request failed'));\n        }, 0);\n      };\n\n      xhr.ontimeout = function() {\n        setTimeout(function() {\n          reject(new TypeError('Network request timed out'));\n        }, 0);\n      };\n\n      xhr.onabort = function() {\n        setTimeout(function() {\n          reject(new exports.DOMException('Aborted', 'AbortError'));\n        }, 0);\n      };\n\n      function fixUrl(url) {\n        try {\n          return url === '' && g.location.href ? g.location.href : url\n        } catch (e) {\n          return url\n        }\n      }\n\n      xhr.open(request.method, fixUrl(request.url), true);\n\n      if (request.credentials === 'include') {\n        xhr.withCredentials = true;\n      } else if (request.credentials === 'omit') {\n        xhr.withCredentials = false;\n      }\n\n      if ('responseType' in xhr) {\n        if (support.blob) {\n          xhr.responseType = 'blob';\n        } else if (\n          support.arrayBuffer\n        ) {\n          xhr.responseType = 'arraybuffer';\n        }\n      }\n\n      if (init && typeof init.headers === 'object' && !(init.headers instanceof Headers || (g.Headers && init.headers instanceof g.Headers))) {\n        var names = [];\n        Object.getOwnPropertyNames(init.headers).forEach(function(name) {\n          names.push(normalizeName(name));\n          xhr.setRequestHeader(name, normalizeValue(init.headers[name]));\n        });\n        request.headers.forEach(function(value, name) {\n          if (names.indexOf(name) === -1) {\n            xhr.setRequestHeader(name, value);\n          }\n        });\n      } else {\n        request.headers.forEach(function(value, name) {\n          xhr.setRequestHeader(name, value);\n        });\n      }\n\n      if (request.signal) {\n        request.signal.addEventListener('abort', abortXhr);\n\n        xhr.onreadystatechange = function() {\n          // DONE (success or failure)\n          if (xhr.readyState === 4) {\n            request.signal.removeEventListener('abort', abortXhr);\n          }\n        };\n      }\n\n      xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit);\n    })\n  }\n\n  fetch.polyfill = true;\n\n  if (!g.fetch) {\n    g.fetch = fetch;\n    g.Headers = Headers;\n    g.Request = Request;\n    g.Response = Response;\n  }\n\n  exports.Headers = Headers;\n  exports.Request = Request;\n  exports.Response = Response;\n  exports.fetch = fetch;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n  return exports;\n\n})({});\n})(__globalThis__);\n// This is a ponyfill, so...\n__globalThis__.fetch.ponyfill = true;\ndelete __globalThis__.fetch.polyfill;\n// Choose between native implementation (__global__) or custom implementation (__globalThis__)\nvar ctx = __global__.fetch ? __global__ : __globalThis__;\nexports = ctx.fetch // To enable: import fetch from 'cross-fetch'\nexports.default = ctx.fetch // For TypeScript consumers without esModuleInterop.\nexports.fetch = ctx.fetch // To enable: import {fetch} from 'cross-fetch'\nexports.Headers = ctx.Headers\nexports.Request = ctx.Request\nexports.Response = ctx.Response\nmodule.exports = exports\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Getter = void 0;\nconst cross_fetch_1 = __importDefault(require(\"cross-fetch\"));\nexports.Getter = { create, http: getHttpGetter, file: getFsGetter };\nfunction create(arg) {\n    if (typeof arg === 'function')\n        return arg;\n    if (arg.startsWith('http://') || arg.startsWith('https://')) {\n        return getHttpGetter(arg);\n    }\n    return getFsGetter(arg);\n}\nfunction getHttpGetter(filename) {\n    return async function getter(begin, end) {\n        if (begin < 0 || end < 0 || begin > end)\n            throw new Error('Invalid range');\n        const response = await (0, cross_fetch_1.default)(filename, {\n            headers: { Range: `bytes=${begin}-${end - 1}` },\n        });\n        const ab = await response.arrayBuffer();\n        return new Uint8Array(ab);\n    };\n}\nfunction getFsGetter(filename) {\n    return async function getter(begin, end) {\n        const fs = await Promise.resolve().then(() => __importStar(require('fs')));\n        async function read(begin = 0, end = Infinity) {\n            if (begin < 0 || end < 0 || begin > end)\n                throw new Error('Invalid range');\n            await fs.promises.access(filename);\n            const stream = fs.createReadStream(filename, {\n                start: begin,\n                end: end - 1,\n                autoClose: true,\n            });\n            return drain(stream);\n        }\n        return read(begin, end);\n    };\n}\nasync function drain(stream) {\n    return await new Promise((resolve, reject) => {\n        const chunks = [];\n        stream.on('data', (chunk) => chunks.push(chunk));\n        stream.on('error', reject);\n        stream.on('end', () => resolve(Buffer.concat(chunks)));\n    });\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Key = void 0;\nexports.Key = { create, parse, toString, step, up, compare, depth };\nfunction create(key, x = 0, y = 0, z = 0) {\n    if (typeof key !== 'number')\n        return parse(key);\n    return [key, x, y, z];\n}\nfunction parse(s) {\n    if (typeof s !== 'string')\n        return s;\n    const [d, x, y, z, ...rest] = s.split('-').map((s) => parseInt(s, 10));\n    const key = [d, x, y, z];\n    if (rest.length !== 0 ||\n        key.some((v) => typeof v !== 'number' || Number.isNaN(v))) {\n        throw new Error(`Invalid key: ${s}`);\n    }\n    return key;\n}\nfunction toString(key) {\n    if (typeof key === 'string')\n        return key;\n    return key.join('-');\n}\nfunction step(key, [a, b, c]) {\n    const [d, x, y, z] = exports.Key.create(key);\n    return [d + 1, x * 2 + a, y * 2 + b, z * 2 + c];\n}\nfunction up(key, n = 1) {\n    const [d, x, y, z] = exports.Key.create(key);\n    return [d - n, x >> n, y >> n, z >> n];\n}\nfunction compare(a, b) {\n    for (let i = 0; i < a.length; ++i) {\n        if (a[i] < b[i])\n            return -1;\n        if (a[i] > b[i])\n            return 1;\n    }\n    return 0;\n}\nfunction depth(key) {\n    return key[0];\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Scale = void 0;\nexports.Scale = {\n    apply: (v, scale = 1, offset = 0) => (v - offset) / scale,\n    unapply: (v, scale = 1, offset = 0) => v * scale + offset,\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Step = void 0;\nexports.Step = { fromIndex, list };\nfunction fromIndex(i) {\n    if (i < 0 || i >= 8)\n        throw new Error(`Invalid step index: ${i}`);\n    const x = (i >> 0) & 1 ? 1 : 0;\n    const y = (i >> 1) & 1 ? 1 : 0;\n    const z = (i >> 2) & 1 ? 1 : 0;\n    return [x, y, z];\n}\nfunction list() {\n    return [\n        [0, 0, 0],\n        [0, 0, 1],\n        [0, 1, 0],\n        [0, 1, 1],\n        [1, 0, 0],\n        [1, 0, 1],\n        [1, 1, 0],\n        [1, 1, 1],\n    ];\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Step = exports.Scale = exports.Key = exports.Getter = exports.Dimension = exports.Bounds = exports.Binary = void 0;\n__exportStar(require(\"./big-int\"), exports);\nvar binary_1 = require(\"./binary\");\nObject.defineProperty(exports, \"Binary\", { enumerable: true, get: function () { return binary_1.Binary; } });\nvar bounds_1 = require(\"./bounds\");\nObject.defineProperty(exports, \"Bounds\", { enumerable: true, get: function () { return bounds_1.Bounds; } });\nvar dimension_1 = require(\"./dimension\");\nObject.defineProperty(exports, \"Dimension\", { enumerable: true, get: function () { return dimension_1.Dimension; } });\nvar getter_1 = require(\"./getter\");\nObject.defineProperty(exports, \"Getter\", { enumerable: true, get: function () { return getter_1.Getter; } });\nvar key_1 = require(\"./key\");\nObject.defineProperty(exports, \"Key\", { enumerable: true, get: function () { return key_1.Key; } });\nvar scale_1 = require(\"./scale\");\nObject.defineProperty(exports, \"Scale\", { enumerable: true, get: function () { return scale_1.Scale; } });\nvar step_1 = require(\"./step\");\nObject.defineProperty(exports, \"Step\", { enumerable: true, get: function () { return step_1.Step; } });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ExtraBytes = void 0;\nconst utils_1 = require(\"../utils\");\nexports.ExtraBytes = { getDimension, parse, parseOne };\nconst entryLength = 192;\nfunction getDimension({ type, length: size, }) {\n    switch (type) {\n        case 'signed':\n        case 'unsigned':\n            switch (size) {\n                case 1:\n                case 2:\n                case 4:\n                case 8:\n                    return { type, size };\n            }\n        case 'float':\n            switch (size) {\n                case 4:\n                case 8:\n                    return { type, size };\n            }\n    }\n}\nfunction parse(buffer) {\n    if (buffer.byteLength % entryLength !== 0) {\n        throw new Error(`Invalid extra bytes VLR length: ${buffer.byteLength}`);\n    }\n    const result = [];\n    for (let offset = 0; offset < buffer.byteLength; offset += entryLength) {\n        result.push(parseOne(buffer.slice(offset, offset + entryLength)));\n    }\n    return result;\n}\nfunction parseOne(buffer) {\n    if (buffer.byteLength !== entryLength) {\n        throw new Error(`Invalid extra bytes entry length: ${buffer.byteLength}`);\n    }\n    const dv = utils_1.Binary.toDataView(buffer);\n    const name = utils_1.Binary.toCString(buffer.slice(4, 36));\n    const description = utils_1.Binary.toCString(buffer.slice(60, 192));\n    const rawtype = dv.getUint8(2);\n    const rawoptions = dv.getUint8(3);\n    if (rawtype >= 11) {\n        throw new Error(`Invalid extra bytes \"type\" value: ${rawtype}`);\n    }\n    // If the \"type\" is 0, then these are \"undocumented extra bytes\".  In this\n    // case, the size of the field is specified the \"options\" field.\n    if (rawtype === 0) {\n        const length = rawoptions;\n        return { name, description, length };\n    }\n    // Otherwise, these are normal extra bytes - parse out all the attributes.\n    const options = parseOptions(rawoptions);\n    const dimtype = parseType(rawtype);\n    if (!dimtype)\n        throw new Error(`Failed to extract dimension type: ${rawtype}`);\n    const { type, size: length } = dimtype;\n    // We need to extract the nodata/min/max differently depending on the EB\n    // \"type\" field.  For integers we extract the 64-bit version of whichever\n    // signedness we have, and for float/double we extract doubles.\n    function extractAnyType(offset) {\n        switch (type) {\n            case 'signed':\n                return (0, utils_1.parseBigInt)(dv.getBigInt64(offset, true));\n            case 'unsigned':\n                return (0, utils_1.parseBigInt)((0, utils_1.getBigUint64)(dv, offset, true));\n            case 'float':\n                return dv.getFloat64(offset, true);\n        }\n    }\n    const eb = { name, description, type, length };\n    if (options.hasNodata)\n        eb.nodata = extractAnyType(40);\n    if (options.hasMin)\n        eb.min = extractAnyType(64);\n    if (options.hasMax)\n        eb.max = extractAnyType(88);\n    if (options.hasScale)\n        eb.scale = dv.getFloat64(112);\n    if (options.hasOffset)\n        eb.offset = dv.getFloat64(136);\n    return eb;\n}\nfunction parseType(typecode) {\n    switch (typecode) {\n        case 1:\n            return utils_1.Dimension.Type.uint8;\n        case 2:\n            return utils_1.Dimension.Type.int8;\n        case 3:\n            return utils_1.Dimension.Type.uint16;\n        case 4:\n            return utils_1.Dimension.Type.int16;\n        case 5:\n            return utils_1.Dimension.Type.uint32;\n        case 6:\n            return utils_1.Dimension.Type.int32;\n        case 7:\n            return utils_1.Dimension.Type.uint64;\n        case 8:\n            return utils_1.Dimension.Type.int64;\n        case 9:\n            return utils_1.Dimension.Type.float32;\n        case 10:\n            return utils_1.Dimension.Type.float64;\n    }\n}\nfunction parseOptions(v) {\n    return {\n        hasNodata: Boolean(v & 1),\n        hasMin: Boolean((v >> 1) & 1),\n        hasMax: Boolean((v >> 2) & 1),\n        hasScale: Boolean((v >> 3) & 1),\n        hasOffset: Boolean((v >> 4) & 1),\n    };\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Dimensions = void 0;\nconst utils_1 = require(\"../utils\");\nconst extra_bytes_1 = require(\"./extra-bytes\");\nexports.Dimensions = { create };\nconst { Type } = utils_1.Dimension;\nconst typemap = {\n    X: Type.float64,\n    Y: Type.float64,\n    Z: Type.float64,\n    Intensity: Type.uint16,\n    ReturnNumber: Type.uint8,\n    NumberOfReturns: Type.uint8,\n    ScanDirectionFlag: Type.boolean,\n    EdgeOfFlightLine: Type.boolean,\n    Classification: Type.uint8,\n    Synthetic: Type.boolean,\n    KeyPoint: Type.boolean,\n    Withheld: Type.boolean,\n    Overlap: Type.boolean,\n    ScanAngle: Type.float32,\n    UserData: Type.uint8,\n    PointSourceId: Type.uint16,\n    GpsTime: Type.float64,\n    Red: Type.uint16,\n    Green: Type.uint16,\n    Blue: Type.uint16,\n    ScannerChannel: Type.uint8,\n    Infrared: Type.uint16,\n};\nfunction create(extractor, eb = []) {\n    return Object.keys(extractor).reduce((map, name) => {\n        const type = typemap[name];\n        if (type)\n            return { ...map, [name]: type };\n        const e = eb.find((v) => v.name === name);\n        const dimension = e && extra_bytes_1.ExtraBytes.getDimension(e);\n        if (dimension)\n            return { ...map, [name]: dimension };\n        throw new Error(`Failed to look up LAS type: ${name}`);\n    }, {});\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Extractor = void 0;\nconst utils_1 = require(\"../utils\");\nexports.Extractor = { create };\n// Get point data record length excluding extra bytes.\nfunction getBasePointLength(pdrf) {\n    switch (pdrf) {\n        case 0:\n            return 20;\n        case 1:\n            return 28;\n        case 2:\n            return 26;\n        case 3:\n            return 34;\n        case 6:\n            return 30;\n        case 7:\n            return 36;\n        case 8:\n            return 38;\n        default:\n            throw new Error(`Unsupported point data record format: ${pdrf}`);\n    }\n}\n// Create an extractor for an extra-bytes field ignoring scale/offset.\nfunction createAbsoluteExtraBytesExtractor(header, offset, // Offset within the point, so should be >= the base pdrf size.\n{ type, length }) {\n    const getPointOffset = getPointOffsetGetter(header);\n    switch (type) {\n        case 'signed':\n            switch (length) {\n                case 1:\n                    return (dv, index) => dv.getInt8(getPointOffset(index) + offset);\n                case 2:\n                    return (dv, index) => dv.getInt16(getPointOffset(index) + offset, true);\n                case 4:\n                    return (dv, index) => dv.getInt32(getPointOffset(index) + offset, true);\n                case 8:\n                    return (dv, index) => (0, utils_1.parseBigInt)(dv.getBigInt64(getPointOffset(index) + offset, true));\n            }\n        case 'unsigned':\n            switch (length) {\n                case 1:\n                    return (dv, index) => dv.getUint8(getPointOffset(index) + offset);\n                case 2:\n                    return (dv, index) => dv.getUint16(getPointOffset(index) + offset, true);\n                case 4:\n                    return (dv, index) => dv.getUint32(getPointOffset(index) + offset, true);\n                case 8:\n                    return (dv, index) => (0, utils_1.parseBigInt)((0, utils_1.getBigUint64)(dv, getPointOffset(index) + offset, true));\n            }\n        case 'float':\n            switch (length) {\n                case 4:\n                    return (dv, index) => dv.getFloat32(getPointOffset(index) + offset, true);\n                case 8:\n                    return (dv, index) => dv.getFloat64(getPointOffset(index) + offset, true);\n            }\n    }\n}\nfunction createExtras(header, eb) {\n    const basePointLength = getBasePointLength(header.pointDataRecordFormat);\n    let position = basePointLength;\n    return eb.reduce((map, v) => {\n        const offset = position;\n        position += v.length;\n        const absoluteExtractor = createAbsoluteExtraBytesExtractor(header, offset, v);\n        if (!absoluteExtractor)\n            return map;\n        const extractor = (dv, index) => utils_1.Scale.unapply(absoluteExtractor(dv, index), v.scale, v.offset);\n        return { ...map, [v.name]: extractor };\n    }, {});\n}\nfunction create(header, eb = []) {\n    const extras = createExtras(header, eb);\n    const core = (() => {\n        const { pointDataRecordFormat: pdrf } = header;\n        switch (pdrf) {\n            case 0:\n                return create0(header);\n            case 1:\n                return create1(header);\n            case 2:\n                return create2(header);\n            case 3:\n                return create3(header);\n            case 6:\n                return create6(header);\n            case 7:\n                return create7(header);\n            case 8:\n                return create8(header);\n            default:\n                throw new Error(`Unsupported point data record format: ${pdrf}`);\n        }\n    })();\n    return { ...core, ...extras };\n}\nfunction create0(header) {\n    const { scale, offset } = header;\n    const getPointOffset = getPointOffsetGetter(header);\n    function getScanFlags(dv, index) {\n        return dv.getUint8(getPointOffset(index) + 14);\n    }\n    function getFullClassification(dv, index) {\n        return dv.getUint8(getPointOffset(index) + 15);\n    }\n    function getClassification(dv, index) {\n        return getFullClassification(dv, index) & 31;\n    }\n    return {\n        X: (dv, index) => utils_1.Scale.unapply(dv.getInt32(getPointOffset(index), true), scale[0], offset[0]),\n        Y: (dv, index) => utils_1.Scale.unapply(dv.getInt32(getPointOffset(index) + 4, true), scale[1], offset[1]),\n        Z: (dv, index) => utils_1.Scale.unapply(dv.getInt32(getPointOffset(index) + 8, true), scale[2], offset[2]),\n        Intensity: (dv, index) => dv.getUint16(getPointOffset(index) + 12, true),\n        ReturnNumber: (dv, index) => getScanFlags(dv, index) & 7,\n        NumberOfReturns: (dv, index) => (getScanFlags(dv, index) & 56) >> 3,\n        ScanDirectionFlag: (dv, index) => (getScanFlags(dv, index) & 64) >> 6,\n        EdgeOfFlightLine: (dv, index) => (getScanFlags(dv, index) & 128) >> 7,\n        Classification: (dv, index) => {\n            // We extract out Overlap as a separate dimension.  In PDRFs > 6, it has\n            // its own flag separate from Classification.  But here, it is signified\n            // by Classification = 12.  In that case, we'll set our Overlap dimension\n            // to 1, and set our Classification to 0.\n            const classification = getClassification(dv, index);\n            return classification === 12 ? 0 : classification;\n        },\n        Synthetic: (dv, index) => (getFullClassification(dv, index) & 32) >> 5,\n        KeyPoint: (dv, index) => (getFullClassification(dv, index) & 64) >> 6,\n        Withheld: (dv, index) => (getFullClassification(dv, index) & 128) >> 7,\n        Overlap: (dv, index) => (getClassification(dv, index) === 12 ? 1 : 0),\n        ScanAngle: (dv, index) => dv.getInt8(getPointOffset(index) + 16),\n        UserData: (dv, index) => dv.getUint8(getPointOffset(index) + 17),\n        PointSourceId: (dv, index) => dv.getUint16(getPointOffset(index) + 18, true),\n    };\n}\nfunction create1(header) {\n    const getPointOffset = getPointOffsetGetter(header);\n    return {\n        ...create0(header),\n        GpsTime: (dv, index) => dv.getFloat64(getPointOffset(index) + 20, true),\n    };\n}\nfunction create2(header) {\n    const getPointOffset = getPointOffsetGetter(header);\n    return {\n        ...create0(header),\n        Red: (dv, index) => dv.getUint16(getPointOffset(index) + 20, true),\n        Green: (dv, index) => dv.getUint16(getPointOffset(index) + 22, true),\n        Blue: (dv, index) => dv.getUint16(getPointOffset(index) + 24, true),\n    };\n}\nfunction create3(header) {\n    const getPointOffset = getPointOffsetGetter(header);\n    return {\n        ...create0(header),\n        GpsTime: (dv, index) => dv.getFloat64(getPointOffset(index) + 20, true),\n        Red: (dv, index) => dv.getUint16(getPointOffset(index) + 28, true),\n        Green: (dv, index) => dv.getUint16(getPointOffset(index) + 30, true),\n        Blue: (dv, index) => dv.getUint16(getPointOffset(index) + 32, true),\n    };\n}\nfunction create6(header) {\n    const { scale, offset } = header;\n    const getPointOffset = getPointOffsetGetter(header);\n    function getFlags(dv, index) {\n        return dv.getUint8(getPointOffset(index) + 15);\n    }\n    return {\n        X: (dv, index) => utils_1.Scale.unapply(dv.getInt32(getPointOffset(index), true), scale[0], offset[0]),\n        Y: (dv, index) => utils_1.Scale.unapply(dv.getInt32(getPointOffset(index) + 4, true), scale[1], offset[1]),\n        Z: (dv, index) => utils_1.Scale.unapply(dv.getInt32(getPointOffset(index) + 8, true), scale[2], offset[2]),\n        Intensity: (dv, index) => dv.getUint16(getPointOffset(index) + 12, true),\n        ReturnNumber: (dv, index) => dv.getUint16(getPointOffset(index) + 14, true) & 15,\n        NumberOfReturns: (dv, index) => (dv.getUint16(getPointOffset(index) + 14, true) & 240) >> 4,\n        Synthetic: (dv, index) => getFlags(dv, index) & 1,\n        KeyPoint: (dv, index) => (getFlags(dv, index) & 2) >> 1,\n        Withheld: (dv, index) => (getFlags(dv, index) & 4) >> 2,\n        Overlap: (dv, index) => (getFlags(dv, index) & 8) >> 3,\n        ScannerChannel: (dv, index) => (getFlags(dv, index) & 48) >> 4,\n        ScanDirectionFlag: (dv, index) => (getFlags(dv, index) & 64) >> 6,\n        EdgeOfFlightLine: (dv, index) => (getFlags(dv, index) & 128) >> 7,\n        Classification: (dv, index) => dv.getUint8(getPointOffset(index) + 16),\n        UserData: (dv, index) => dv.getUint8(getPointOffset(index) + 17),\n        ScanAngle: (dv, index) => dv.getInt16(getPointOffset(index) + 18, true) * 0.006,\n        PointSourceId: (dv, index) => dv.getUint16(getPointOffset(index) + 20, true),\n        GpsTime: (dv, index) => dv.getFloat64(getPointOffset(index) + 22, true),\n    };\n}\nfunction create7(header) {\n    const getPointOffset = getPointOffsetGetter(header);\n    return {\n        ...create6(header),\n        Red: (dv, index) => dv.getUint16(getPointOffset(index) + 30, true),\n        Green: (dv, index) => dv.getUint16(getPointOffset(index) + 32, true),\n        Blue: (dv, index) => dv.getUint16(getPointOffset(index) + 34, true),\n    };\n}\nfunction create8(header) {\n    const getPointOffset = getPointOffsetGetter(header);\n    return {\n        ...create7(header),\n        Infrared: (dv, index) => dv.getUint16(getPointOffset(index) + 36, true),\n    };\n}\nfunction getPointOffsetGetter(header) {\n    const { pointDataRecordLength } = header;\n    return function getPointOffset(index) {\n        return index * pointDataRecordLength;\n    };\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.formatGuid = exports.parsePoint = void 0;\nconst utils_1 = require(\"../utils\");\nfunction parsePoint(buffer) {\n    const dv = utils_1.Binary.toDataView(buffer);\n    if (dv.byteLength !== 24) {\n        throw new Error(`Invalid tuple buffer length: ${dv.byteLength}`);\n    }\n    return [\n        dv.getFloat64(0, true),\n        dv.getFloat64(8, true),\n        dv.getFloat64(16, true),\n    ];\n}\nexports.parsePoint = parsePoint;\nfunction formatGuid(buffer) {\n    const dv = utils_1.Binary.toDataView(buffer);\n    if (dv.byteLength !== 16) {\n        throw new Error(`Invalid GUID buffer length: ${dv.byteLength}`);\n    }\n    let s = '';\n    for (let i = 0; i < dv.byteLength; i += 4) {\n        const c = dv.getUint32(i, true);\n        s += c.toString(16).padStart(8, '0');\n    }\n    return [s.slice(0, 8), s.slice(8, 12), s.slice(12, 16), s.slice(16, 32)].join('-');\n}\nexports.formatGuid = formatGuid;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Header = void 0;\nconst utils_1 = require(\"../utils\");\nconst constants_1 = require(\"./constants\");\nconst utils_2 = require(\"./utils\");\nexports.Header = { parse };\nfunction parse(buffer) {\n    if (buffer.byteLength < constants_1.minHeaderLength) {\n        throw new Error(`Invalid header: must be at least ${constants_1.minHeaderLength} bytes`);\n    }\n    const dv = utils_1.Binary.toDataView(buffer);\n    const fileSignature = utils_1.Binary.toCString(buffer.slice(0, 4));\n    if (fileSignature !== 'LASF') {\n        throw new Error(`Invalid file signature: ${fileSignature}`);\n    }\n    const majorVersion = dv.getUint8(24);\n    const minorVersion = dv.getUint8(25);\n    if (majorVersion !== 1 || (minorVersion !== 2 && minorVersion !== 4)) {\n        throw new Error(`Invalid version (only 1.2 and 1.4 supported): ${majorVersion}.${minorVersion}`);\n    }\n    const header = {\n        fileSignature,\n        fileSourceId: dv.getUint16(4, true),\n        globalEncoding: dv.getUint16(6, true),\n        projectId: (0, utils_2.formatGuid)(buffer.slice(8, 24)),\n        majorVersion,\n        minorVersion,\n        systemIdentifier: utils_1.Binary.toCString(buffer.slice(26, 58)),\n        generatingSoftware: utils_1.Binary.toCString(buffer.slice(58, 90)),\n        fileCreationDayOfYear: dv.getUint16(90, true),\n        fileCreationYear: dv.getUint16(92, true),\n        headerLength: dv.getUint16(94, true),\n        pointDataOffset: dv.getUint32(96, true),\n        vlrCount: dv.getUint32(100, true),\n        pointDataRecordFormat: dv.getUint8(104) & 0b1111,\n        pointDataRecordLength: dv.getUint16(105, true),\n        pointCount: dv.getUint32(107, true),\n        pointCountByReturn: parseLegacyNumberOfPointsByReturn(buffer.slice(111, 131)),\n        scale: (0, utils_2.parsePoint)(buffer.slice(131, 155)),\n        offset: (0, utils_2.parsePoint)(buffer.slice(155, 179)),\n        min: [\n            dv.getFloat64(187, true),\n            dv.getFloat64(203, true),\n            dv.getFloat64(219, true),\n        ],\n        max: [\n            dv.getFloat64(179, true),\n            dv.getFloat64(195, true),\n            dv.getFloat64(211, true),\n        ],\n        waveformDataOffset: 0,\n        evlrOffset: 0,\n        evlrCount: 0,\n    };\n    if (minorVersion == 2)\n        return header;\n    return {\n        ...header,\n        pointCount: (0, utils_1.parseBigInt)((0, utils_1.getBigUint64)(dv, 247, true)),\n        pointCountByReturn: parseNumberOfPointsByReturn(buffer.slice(255, 375)),\n        waveformDataOffset: (0, utils_1.parseBigInt)((0, utils_1.getBigUint64)(dv, 227, true)),\n        evlrOffset: (0, utils_1.parseBigInt)((0, utils_1.getBigUint64)(dv, 235, true)),\n        evlrCount: dv.getUint32(243, true),\n    };\n}\nfunction parseNumberOfPointsByReturn(buffer) {\n    const dv = utils_1.Binary.toDataView(buffer);\n    const bigs = [];\n    for (let offset = 0; offset < 15 * 8; offset += 8) {\n        bigs.push((0, utils_1.getBigUint64)(dv, offset, true));\n    }\n    return bigs.map((v) => (0, utils_1.parseBigInt)(v));\n}\nfunction parseLegacyNumberOfPointsByReturn(buffer) {\n    const dv = utils_1.Binary.toDataView(buffer);\n    const v = [];\n    for (let offset = 0; offset < 5 * 4; offset += 4) {\n        v.push(dv.getUint32(offset, true));\n    }\n    return v;\n}\n","\nvar createLazPerf = (() => {\n  var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;\n  \n  return (\nfunction(createLazPerf) {\n  createLazPerf = createLazPerf || {};\n\nvar Module=typeof createLazPerf!=\"undefined\"?createLazPerf:{};var readyPromiseResolve,readyPromiseReject;Module[\"ready\"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});[\"_main\",\"___getTypeName\",\"__embind_initialize_bindings\",\"_fflush\",\"onRuntimeInitialized\"].forEach(prop=>{if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],prop)){Object.defineProperty(Module[\"ready\"],prop,{get:()=>abort(\"You are getting \"+prop+\" on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\"),set:()=>abort(\"You are setting \"+prop+\" on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")})}});var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram=\"./this.program\";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=true;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;if(Module[\"ENVIRONMENT\"]){throw new Error(\"Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)\")}var scriptDirectory=\"\";function locateFile(path){if(Module[\"locateFile\"]){return Module[\"locateFile\"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;function logExceptionOnExit(e){if(e instanceof ExitStatus)return;let toLog=e;if(e&&typeof e==\"object\"&&e.stack){toLog=[e,e.stack]}err(\"exiting due to exception: \"+toLog)}if(ENVIRONMENT_IS_SHELL){if(typeof process==\"object\"&&typeof require===\"function\"||typeof window==\"object\"||typeof importScripts==\"function\")throw new Error(\"not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)\");if(typeof read!=\"undefined\"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){let data;if(typeof readbuffer==\"function\"){return new Uint8Array(readbuffer(f))}data=read(f,\"binary\");assert(typeof data==\"object\");return data};readAsync=function readAsync(f,onload,onerror){setTimeout(()=>onload(readBinary(f)),0)};if(typeof scriptArgs!=\"undefined\"){arguments_=scriptArgs}else if(typeof arguments!=\"undefined\"){arguments_=arguments}if(typeof quit==\"function\"){quit_=(status,toThrow)=>{logExceptionOnExit(toThrow);quit(status)}}if(typeof print!=\"undefined\"){if(typeof console==\"undefined\")console={};console.log=print;console.warn=console.error=typeof printErr!=\"undefined\"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=\"undefined\"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf(\"blob:\")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1)}else{scriptDirectory=\"\"}if(!(typeof window==\"object\"||typeof importScripts==\"function\"))throw new Error(\"not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)\");{read_=url=>{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.responseType=\"arraybuffer\";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,true);xhr.responseType=\"arraybuffer\";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=title=>document.title=title}else{throw new Error(\"environment detection error\")}var out=Module[\"print\"]||console.log.bind(console);var err=Module[\"printErr\"]||console.warn.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;checkIncomingModuleAPI();if(Module[\"arguments\"])arguments_=Module[\"arguments\"];legacyModuleProp(\"arguments\",\"arguments_\");if(Module[\"thisProgram\"])thisProgram=Module[\"thisProgram\"];legacyModuleProp(\"thisProgram\",\"thisProgram\");if(Module[\"quit\"])quit_=Module[\"quit\"];legacyModuleProp(\"quit\",\"quit_\");assert(typeof Module[\"memoryInitializerPrefixURL\"]==\"undefined\",\"Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead\");assert(typeof Module[\"pthreadMainPrefixURL\"]==\"undefined\",\"Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead\");assert(typeof Module[\"cdInitializerPrefixURL\"]==\"undefined\",\"Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead\");assert(typeof Module[\"filePackagePrefixURL\"]==\"undefined\",\"Module.filePackagePrefixURL option was removed, use Module.locateFile instead\");assert(typeof Module[\"read\"]==\"undefined\",\"Module.read option was removed (modify read_ in JS)\");assert(typeof Module[\"readAsync\"]==\"undefined\",\"Module.readAsync option was removed (modify readAsync in JS)\");assert(typeof Module[\"readBinary\"]==\"undefined\",\"Module.readBinary option was removed (modify readBinary in JS)\");assert(typeof Module[\"setWindowTitle\"]==\"undefined\",\"Module.setWindowTitle option was removed (modify setWindowTitle in JS)\");assert(typeof Module[\"TOTAL_MEMORY\"]==\"undefined\",\"Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY\");legacyModuleProp(\"read\",\"read_\");legacyModuleProp(\"readAsync\",\"readAsync\");legacyModuleProp(\"readBinary\",\"readBinary\");legacyModuleProp(\"setWindowTitle\",\"setWindowTitle\");assert(!ENVIRONMENT_IS_WORKER,\"worker environment detected but not enabled at build time.  Add 'worker' to `-sENVIRONMENT` to enable.\");assert(!ENVIRONMENT_IS_NODE,\"node environment detected but not enabled at build time.  Add 'node' to `-sENVIRONMENT` to enable.\");assert(!ENVIRONMENT_IS_SHELL,\"shell environment detected but not enabled at build time.  Add 'shell' to `-sENVIRONMENT` to enable.\");var POINTER_SIZE=4;function legacyModuleProp(prop,newName){if(!Object.getOwnPropertyDescriptor(Module,prop)){Object.defineProperty(Module,prop,{configurable:true,get:function(){abort(\"Module.\"+prop+\" has been replaced with plain \"+newName+\" (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)\")}})}}function ignoredModuleProp(prop){if(Object.getOwnPropertyDescriptor(Module,prop)){abort(\"`Module.\"+prop+\"` was supplied but `\"+prop+\"` not included in INCOMING_MODULE_JS_API\")}}function isExportedByForceFilesystem(name){return name===\"FS_createPath\"||name===\"FS_createDataFile\"||name===\"FS_createPreloadedFile\"||name===\"FS_unlink\"||name===\"addRunDependency\"||name===\"FS_createLazyFile\"||name===\"FS_createDevice\"||name===\"removeRunDependency\"}function missingLibrarySymbol(sym){if(typeof globalThis!==\"undefined\"&&!Object.getOwnPropertyDescriptor(globalThis,sym)){Object.defineProperty(globalThis,sym,{configurable:true,get:function(){var msg=\"`\"+sym+\"` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line\";if(isExportedByForceFilesystem(sym)){msg+=\". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you\"}warnOnce(msg);return undefined}})}}function unexportedRuntimeSymbol(sym){if(!Object.getOwnPropertyDescriptor(Module,sym)){Object.defineProperty(Module,sym,{configurable:true,get:function(){var msg=\"'\"+sym+\"' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\";if(isExportedByForceFilesystem(sym)){msg+=\". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you\"}abort(msg)}})}}var wasmBinary;if(Module[\"wasmBinary\"])wasmBinary=Module[\"wasmBinary\"];legacyModuleProp(\"wasmBinary\",\"wasmBinary\");var noExitRuntime=Module[\"noExitRuntime\"]||true;legacyModuleProp(\"noExitRuntime\",\"noExitRuntime\");if(typeof WebAssembly!=\"object\"){abort(\"no native wasm support detected\")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(\"Assertion failed\"+(text?\": \"+text:\"\"))}}var UTF8Decoder=typeof TextDecoder!=\"undefined\"?new TextDecoder(\"utf8\"):undefined;function UTF8ArrayToString(heapOrArray,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str=\"\";while(idx<endPtr){var u0=heapOrArray[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heapOrArray[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heapOrArray[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{if((u0&248)!=240)warnOnce(\"Invalid UTF-8 leading byte 0x\"+u0.toString(16)+\" encountered when deserializing a UTF-8 string in wasm memory to a JS string!\");u0=(u0&7)<<18|u1<<12|u2<<6|heapOrArray[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):\"\"}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;if(u>1114111)warnOnce(\"Invalid Unicode code point 0x\"+u.toString(16)+\" encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).\");heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){assert(typeof maxBytesToWrite==\"number\",\"stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!\");return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var c=str.charCodeAt(i);if(c<=127){len++}else if(c<=2047){len+=2}else if(c>=55296&&c<=57343){len+=4;++i}else{len+=3}}return len}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module[\"HEAP8\"]=HEAP8=new Int8Array(buf);Module[\"HEAP16\"]=HEAP16=new Int16Array(buf);Module[\"HEAP32\"]=HEAP32=new Int32Array(buf);Module[\"HEAPU8\"]=HEAPU8=new Uint8Array(buf);Module[\"HEAPU16\"]=HEAPU16=new Uint16Array(buf);Module[\"HEAPU32\"]=HEAPU32=new Uint32Array(buf);Module[\"HEAPF32\"]=HEAPF32=new Float32Array(buf);Module[\"HEAPF64\"]=HEAPF64=new Float64Array(buf)}var TOTAL_STACK=65536;if(Module[\"TOTAL_STACK\"])assert(TOTAL_STACK===Module[\"TOTAL_STACK\"],\"the stack size can no longer be determined at runtime\");var INITIAL_MEMORY=Module[\"INITIAL_MEMORY\"]||262144;legacyModuleProp(\"INITIAL_MEMORY\",\"INITIAL_MEMORY\");assert(INITIAL_MEMORY>=TOTAL_STACK,\"INITIAL_MEMORY should be larger than TOTAL_STACK, was \"+INITIAL_MEMORY+\"! (TOTAL_STACK=\"+TOTAL_STACK+\")\");assert(typeof Int32Array!=\"undefined\"&&typeof Float64Array!==\"undefined\"&&Int32Array.prototype.subarray!=undefined&&Int32Array.prototype.set!=undefined,\"JS engine does not provide full typed array support\");assert(!Module[\"wasmMemory\"],\"Use of `wasmMemory` detected.  Use -sIMPORTED_MEMORY to define wasmMemory externally\");assert(INITIAL_MEMORY==262144,\"Detected runtime INITIAL_MEMORY setting.  Use -sIMPORTED_MEMORY to define wasmMemory dynamically\");var wasmTable;function writeStackCookie(){var max=_emscripten_stack_get_end();assert((max&3)==0);HEAPU32[max>>2]=34821223;HEAPU32[max+4>>2]=2310721022;HEAPU32[0]=1668509029}function checkStackCookie(){if(ABORT)return;var max=_emscripten_stack_get_end();var cookie1=HEAPU32[max>>2];var cookie2=HEAPU32[max+4>>2];if(cookie1!=34821223||cookie2!=2310721022){abort(\"Stack overflow! Stack cookie has been overwritten at 0x\"+max.toString(16)+\", expected hex dwords 0x89BACDFE and 0x2135467, but received 0x\"+cookie2.toString(16)+\" 0x\"+cookie1.toString(16))}if(HEAPU32[0]!==1668509029)abort(\"Runtime error: The application has corrupted its heap memory area (address zero)!\")}(function(){var h16=new Int16Array(1);var h8=new Int8Array(h16.buffer);h16[0]=25459;if(h8[0]!==115||h8[1]!==99)throw\"Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)\"})();var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function preRun(){if(Module[\"preRun\"]){if(typeof Module[\"preRun\"]==\"function\")Module[\"preRun\"]=[Module[\"preRun\"]];while(Module[\"preRun\"].length){addOnPreRun(Module[\"preRun\"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){assert(!runtimeInitialized);runtimeInitialized=true;checkStackCookie();callRuntimeCallbacks(__ATINIT__)}function postRun(){checkStackCookie();if(Module[\"postRun\"]){if(typeof Module[\"postRun\"]==\"function\")Module[\"postRun\"]=[Module[\"postRun\"]];while(Module[\"postRun\"].length){addOnPostRun(Module[\"postRun\"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}assert(Math.imul,\"This browser does not support Math.imul(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill\");assert(Math.fround,\"This browser does not support Math.fround(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill\");assert(Math.clz32,\"This browser does not support Math.clz32(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill\");assert(Math.trunc,\"This browser does not support Math.trunc(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill\");var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;var runDependencyTracking={};function addRunDependency(id){runDependencies++;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}if(id){assert(!runDependencyTracking[id]);runDependencyTracking[id]=1;if(runDependencyWatcher===null&&typeof setInterval!=\"undefined\"){runDependencyWatcher=setInterval(function(){if(ABORT){clearInterval(runDependencyWatcher);runDependencyWatcher=null;return}var shown=false;for(var dep in runDependencyTracking){if(!shown){shown=true;err(\"still waiting on run dependencies:\")}err(\"dependency: \"+dep)}if(shown){err(\"(end of list)\")}},1e4)}}else{err(\"warning: run dependency added without ID\")}}function removeRunDependency(id){runDependencies--;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}if(id){assert(runDependencyTracking[id]);delete runDependencyTracking[id]}else{err(\"warning: run dependency removed without ID\")}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){{if(Module[\"onAbort\"]){Module[\"onAbort\"](what)}}what=\"Aborted(\"+what+\")\";err(what);ABORT=true;EXITSTATUS=1;var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var FS={error:function(){abort(\"Filesystem support (FS) was not included. The problem is that you are using files from JS, but files were not used from C/C++, so filesystem support was not auto-included. You can force-include filesystem support with -sFORCE_FILESYSTEM\")},init:function(){FS.error()},createDataFile:function(){FS.error()},createPreloadedFile:function(){FS.error()},createLazyFile:function(){FS.error()},open:function(){FS.error()},mkdev:function(){FS.error()},registerDevice:function(){FS.error()},analyzePath:function(){FS.error()},loadFilesFromDB:function(){FS.error()},ErrnoError:function ErrnoError(){FS.error()}};Module[\"FS_createDataFile\"]=FS.createDataFile;Module[\"FS_createPreloadedFile\"]=FS.createPreloadedFile;var dataURIPrefix=\"data:application/octet-stream;base64,\";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith(\"file://\")}function createExportWrapper(name,fixedasm){return function(){var displayName=name;var asm=fixedasm;if(!fixedasm){asm=Module[\"asm\"]}assert(runtimeInitialized,\"native function `\"+displayName+\"` called before runtime initialization\");if(!asm[name]){assert(asm[name],\"exported native function `\"+displayName+\"` not found\")}return asm[name].apply(null,arguments)}}var wasmBinaryFile;wasmBinaryFile=\"laz-perf.wasm\";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw\"both async and sync fetching of the wasm failed\"}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch==\"function\"){return fetch(wasmBinaryFile,{credentials:\"same-origin\"}).then(function(response){if(!response[\"ok\"]){throw\"failed to load wasm binary file at '\"+wasmBinaryFile+\"'\"}return response[\"arrayBuffer\"]()}).catch(function(){return getBinary(wasmBinaryFile)})}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={\"env\":asmLibraryArg,\"wasi_snapshot_preview1\":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module[\"asm\"]=exports;wasmMemory=Module[\"asm\"][\"memory\"];assert(wasmMemory,\"memory not found in wasm exports\");updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module[\"asm\"][\"__indirect_function_table\"];assert(wasmTable,\"table not found in wasm exports\");addOnInit(Module[\"asm\"][\"__wasm_call_ctors\"]);removeRunDependency(\"wasm-instantiate\")}addRunDependency(\"wasm-instantiate\");var trueModule=Module;function receiveInstantiationResult(result){assert(Module===trueModule,\"the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?\");trueModule=null;receiveInstance(result[\"instance\"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(function(instance){return instance}).then(receiver,function(reason){err(\"failed to asynchronously prepare wasm: \"+reason);if(isFileURI(wasmBinaryFile)){err(\"warning: Loading from a file URI (\"+wasmBinaryFile+\") is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing\")}abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==\"function\"&&!isDataURI(wasmBinaryFile)&&typeof fetch==\"function\"){return fetch(wasmBinaryFile,{credentials:\"same-origin\"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err(\"wasm streaming compile failed: \"+reason);err(\"falling back to ArrayBuffer instantiation\");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module[\"instantiateWasm\"]){try{var exports=Module[\"instantiateWasm\"](info,receiveInstance);return exports}catch(e){err(\"Module.instantiateWasm callback failed with error: \"+e);return false}}instantiateAsync().catch(readyPromiseReject);return{}}var tempDouble;var tempI64;function ExitStatus(status){this.name=\"ExitStatus\";this.message=\"Program terminated with exit(\"+status+\")\";this.status=status}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){callbacks.shift()(Module)}}function demangle(func){warnOnce(\"warning: build with -sDEMANGLE_SUPPORT to link in libcxxabi demangling\");return func}function demangleAll(text){var regex=/\\b_Z[\\w\\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+\" [\"+x+\"]\"})}function jsStackTrace(){var error=new Error;if(!error.stack){try{throw new Error}catch(e){error=e}if(!error.stack){return\"(no stack trace available)\"}}return error.stack.toString()}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}function writeArrayToMemory(array,buffer){assert(array.length>=0,\"writeArrayToMemory array must have a length (should be an array or typed array)\");HEAP8.set(array,buffer)}function ___cxa_allocate_exception(size){return _malloc(size+24)+24}function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24;this.set_type=function(type){HEAPU32[this.ptr+4>>2]=type};this.get_type=function(){return HEAPU32[this.ptr+4>>2]};this.set_destructor=function(destructor){HEAPU32[this.ptr+8>>2]=destructor};this.get_destructor=function(){return HEAPU32[this.ptr+8>>2]};this.set_refcount=function(refcount){HEAP32[this.ptr>>2]=refcount};this.set_caught=function(caught){caught=caught?1:0;HEAP8[this.ptr+12>>0]=caught};this.get_caught=function(){return HEAP8[this.ptr+12>>0]!=0};this.set_rethrown=function(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13>>0]=rethrown};this.get_rethrown=function(){return HEAP8[this.ptr+13>>0]!=0};this.init=function(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor);this.set_refcount(0);this.set_caught(false);this.set_rethrown(false)};this.add_ref=function(){var value=HEAP32[this.ptr>>2];HEAP32[this.ptr>>2]=value+1};this.release_ref=function(){var prev=HEAP32[this.ptr>>2];HEAP32[this.ptr>>2]=prev-1;assert(prev>0);return prev===1};this.set_adjusted_ptr=function(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr};this.get_adjusted_ptr=function(){return HEAPU32[this.ptr+16>>2]};this.get_exception_ptr=function(){var isPointer=___cxa_is_pointer_type(this.get_type());if(isPointer){return HEAPU32[this.excPtr>>2]}var adjusted=this.get_adjusted_ptr();if(adjusted!==0)return adjusted;return this.excPtr}}var exceptionLast=0;var uncaughtExceptionCount=0;function ___cxa_throw(ptr,type,destructor){var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw ptr+\" - Exception catching is disabled, this exception cannot be caught. Compile with -sNO_DISABLE_EXCEPTION_CATCHING or -sEXCEPTION_CATCHING_ALLOWED=[..] to catch.\"}function __embind_register_bigint(primitiveType,name,size,minRange,maxRange){}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError(\"Unknown type size: \"+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret=\"\";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return\"_unknown\"}name=name.replace(/[^a-zA-Z0-9_]/g,\"$\");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return\"_\"+name}return name}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return new Function(\"body\",\"return function \"+name+\"() {\\n\"+'    \"use strict\";'+\"    return body.apply(this, arguments);\\n\"+\"};\\n\")(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+\"\\n\"+stack.replace(/^Error(:[^\\n]*)?\\n/,\"\")}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name}else{return this.name+\": \"+this.message}};return errorClass}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach(function(type){typeDependencies[type]=dependentTypes});function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError(\"Mismatched type converter count\")}for(var i=0;i<myTypes.length;++i){registerType(myTypes[i],myTypeConverters[i])}}var typeConverters=new Array(dependentTypes.length);var unregisteredTypes=[];var registered=0;dependentTypes.forEach((dt,i)=>{if(registeredTypes.hasOwnProperty(dt)){typeConverters[i]=registeredTypes[dt]}else{unregisteredTypes.push(dt);if(!awaitingDependencies.hasOwnProperty(dt)){awaitingDependencies[dt]=[]}awaitingDependencies[dt].push(()=>{typeConverters[i]=registeredTypes[dt];++registered;if(registered===unregisteredTypes.length){onComplete(typeConverters)}})}});if(0===unregisteredTypes.length){onComplete(typeConverters)}}function registerType(rawType,registeredInstance,options={}){if(!(\"argPackAdvance\"in registeredInstance)){throw new TypeError(\"registerType registeredInstance requires argPackAdvance\")}var name=registeredInstance.name;if(!rawType){throwBindingError('type \"'+name+'\" must have a positive integer typeid pointer')}if(registeredTypes.hasOwnProperty(rawType)){if(options.ignoreDuplicateRegistrations){return}else{throwBindingError(\"Cannot register type '\"+name+\"' twice\")}}registeredTypes[rawType]=registeredInstance;delete typeDependencies[rawType];if(awaitingDependencies.hasOwnProperty(rawType)){var callbacks=awaitingDependencies[rawType];delete awaitingDependencies[rawType];callbacks.forEach(cb=>cb())}}function __embind_register_bool(rawType,name,size,trueValue,falseValue){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,\"fromWireType\":function(wt){return!!wt},\"toWireType\":function(destructors,o){return o?trueValue:falseValue},\"argPackAdvance\":8,\"readValueFromPointer\":function(pointer){var heap;if(size===1){heap=HEAP8}else if(size===2){heap=HEAP16}else if(size===4){heap=HEAP32}else{throw new TypeError(\"Unknown boolean type size: \"+name)}return this[\"fromWireType\"](heap[pointer>>shift])},destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+\" instance already deleted\")}var finalizationRegistry=false;function detachFinalizer(handle){}function runDestructor($$){if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function releaseClassHandle($$){$$.count.value-=1;var toDelete=0===$$.count.value;if(toDelete){runDestructor($$)}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}var registeredPointers={};function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj[\"delete\"]()}}var delayFunction=undefined;function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module[\"getInheritedInstanceCount\"]=getInheritedInstanceCount;Module[\"getLiveInheritedInstances\"]=getLiveInheritedInstances;Module[\"flushPendingDeletes\"]=flushPendingDeletes;Module[\"setDelayFunction\"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError(\"ptr should not be undefined\")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError(\"makeClassHandle requires ptr and ptrType\")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError(\"Both smartPtrType and smartPtr must be specified\")}record.count={value:1};return attachFinalizer(Object.create(prototype,{$$:{value:record}}))}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance[\"clone\"]()}else{var rv=registeredInstance[\"clone\"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function attachFinalizer(handle){if(\"undefined\"===typeof FinalizationRegistry){attachFinalizer=handle=>handle;return handle}finalizationRegistry=new FinalizationRegistry(info=>{console.warn(info.leakWarning.stack.replace(/^Error: /,\"\"));releaseClassHandle(info.$$)});attachFinalizer=handle=>{var $$=handle.$$;var hasSmartPtr=!!$$.smartPtr;if(hasSmartPtr){var info={$$:$$};var cls=$$.ptrType.registeredClass;info.leakWarning=new Error(\"Embind found a leaked C++ instance \"+cls.name+\" <0x\"+$$.ptr.toString(16)+\">.\\n\"+\"We'll free it automatically in this case, but this functionality is not reliable across various environments.\\n\"+\"Make sure to invoke .delete() manually once you're done with the instance instead.\\n\"+\"Originally allocated\");if(\"captureStackTrace\"in Error){Error.captureStackTrace(info.leakWarning,RegisteredPointer_fromWireType)}finalizationRegistry.register(handle,info,handle)}return handle};detachFinalizer=handle=>finalizationRegistry.unregister(handle);return attachFinalizer(handle)}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=attachFinalizer(Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}}));clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError(\"Object already scheduled for deletion\")}detachFinalizer(this);releaseClassHandle(this.$$);if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError(\"Object already scheduled for deletion\")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype[\"isAliasOf\"]=ClassHandle_isAliasOf;ClassHandle.prototype[\"clone\"]=ClassHandle_clone;ClassHandle.prototype[\"delete\"]=ClassHandle_delete;ClassHandle.prototype[\"isDeleted\"]=ClassHandle_isDeleted;ClassHandle.prototype[\"deleteLater\"]=ClassHandle_deleteLater}function ClassHandle(){}function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError(\"Function '\"+humanName+\"' called with an invalid number of arguments (\"+arguments.length+\") - expects one of (\"+proto[methodName].overloadTable+\")!\")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)};proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError(\"Cannot register public name '\"+name+\"' twice\")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError(\"Cannot register multiple overloads of a function with the same number of arguments (\"+numArguments+\")!\")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError(\"Expected null or instance of \"+desiredClass.name+\", got an instance of \"+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError(\"null is not a valid \"+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass \"'+embindRepr(handle)+'\" as a '+this.name)}if(!handle.$$.ptr){throwBindingError(\"Cannot pass deleted object as a pointer of type \"+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError(\"null is not a valid \"+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass \"'+embindRepr(handle)+'\" as a '+this.name)}if(!handle.$$.ptr){throwBindingError(\"Cannot pass deleted object as a pointer of type \"+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError(\"Cannot convert argument of type \"+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+\" to parameter type \"+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError(\"Passing raw pointer to smart pointer is illegal\")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError(\"Cannot convert argument of type \"+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+\" to parameter type \"+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle[\"clone\"]();ptr=this.rawShare(ptr,Emval.toHandle(function(){clonedHandle[\"delete\"]()}));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError(\"Unsupporting sharing policy\")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError(\"null is not a valid \"+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass \"'+embindRepr(handle)+'\" as a '+this.name)}if(!handle.$$.ptr){throwBindingError(\"Cannot pass deleted object as a pointer of type \"+this.name)}if(handle.$$.ptrType.isConst){throwBindingError(\"Cannot convert argument of type \"+handle.$$.ptrType.name+\" to parameter type \"+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function simpleReadValueFromPointer(pointer){return this[\"fromWireType\"](HEAP32[pointer>>2])}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle[\"delete\"]()}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype[\"argPackAdvance\"]=8;RegisteredPointer.prototype[\"readValueFromPointer\"]=simpleReadValueFromPointer;RegisteredPointer.prototype[\"deleteObject\"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype[\"fromWireType\"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&&registeredClass.baseClass===undefined){if(isConst){this[\"toWireType\"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this[\"toWireType\"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this[\"toWireType\"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError(\"Replacing nonexistant public symbol\")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function dynCallLegacy(sig,ptr,args){assert(\"dynCall_\"+sig in Module,\"bad function pointer type - no table for sig '\"+sig+\"'\");if(args&&args.length){assert(args.length===sig.substring(1).replace(/j/g,\"--\").length)}else{assert(sig.length==1)}var f=Module[\"dynCall_\"+sig];return args&&args.length?f.apply(null,[ptr].concat(args)):f.call(null,ptr)}var wasmTableMirror=[];function getWasmTableEntry(funcPtr){var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}assert(wasmTable.get(funcPtr)==func,\"JavaScript-side Wasm function table mirror is out of date!\");return func}function dynCall(sig,ptr,args){if(sig.includes(\"j\")){return dynCallLegacy(sig,ptr,args)}assert(getWasmTableEntry(ptr),\"missing table entry in dynCall: \"+ptr);var rtn=getWasmTableEntry(ptr).apply(null,args);return rtn}function getDynCaller(sig,ptr){assert(sig.includes(\"j\")||sig.includes(\"p\"),\"getDynCaller should only be called with i64 sigs\");var argCache=[];return function(){argCache.length=0;Object.assign(argCache,arguments);return dynCall(sig,ptr,argCache)}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(){if(signature.includes(\"j\")){return getDynCaller(signature,rawFunction)}return getWasmTableEntry(rawFunction)}var fp=makeDynCaller();if(typeof fp!=\"function\"){throwBindingError(\"unknown function pointer with signature \"+signature+\": \"+rawFunction)}return fp}var UnboundTypeError=undefined;function getTypeName(type){var ptr=___getTypeName(type);var rv=readLatin1String(ptr);_free(ptr);return rv}function throwUnboundTypeError(message,types){var unboundTypes=[];var seen={};function visit(type){if(seen[type]){return}if(registeredTypes[type]){return}if(typeDependencies[type]){typeDependencies[type].forEach(visit);return}unboundTypes.push(type);seen[type]=true}types.forEach(visit);throw new UnboundTypeError(message+\": \"+unboundTypes.map(getTypeName).join([\", \"]))}function __embind_register_class(rawType,rawPointerType,rawConstPointerType,baseClassRawType,getActualTypeSignature,getActualType,upcastSignature,upcast,downcastSignature,downcast,name,destructorSignature,rawDestructor){name=readLatin1String(name);getActualType=embind__requireFunction(getActualTypeSignature,getActualType);if(upcast){upcast=embind__requireFunction(upcastSignature,upcast)}if(downcast){downcast=embind__requireFunction(downcastSignature,downcast)}rawDestructor=embind__requireFunction(destructorSignature,rawDestructor);var legalFunctionName=makeLegalFunctionName(name);exposePublicSymbol(legalFunctionName,function(){throwUnboundTypeError(\"Cannot construct \"+name+\" due to unbound types\",[baseClassRawType])});whenDependentTypesAreResolved([rawType,rawPointerType,rawConstPointerType],baseClassRawType?[baseClassRawType]:[],function(base){base=base[0];var baseClass;var basePrototype;if(baseClassRawType){baseClass=base.registeredClass;basePrototype=baseClass.instancePrototype}else{basePrototype=ClassHandle.prototype}var constructor=createNamedFunction(legalFunctionName,function(){if(Object.getPrototypeOf(this)!==instancePrototype){throw new BindingError(\"Use 'new' to construct \"+name)}if(undefined===registeredClass.constructor_body){throw new BindingError(name+\" has no accessible constructor\")}var body=registeredClass.constructor_body[arguments.length];if(undefined===body){throw new BindingError(\"Tried to invoke ctor of \"+name+\" with invalid number of parameters (\"+arguments.length+\") - expected (\"+Object.keys(registeredClass.constructor_body).toString()+\") parameters instead!\")}return body.apply(this,arguments)});var instancePrototype=Object.create(basePrototype,{constructor:{value:constructor}});constructor.prototype=instancePrototype;var registeredClass=new RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast);var referenceConverter=new RegisteredPointer(name,registeredClass,true,false,false);var pointerConverter=new RegisteredPointer(name+\"*\",registeredClass,false,false,false);var constPointerConverter=new RegisteredPointer(name+\" const*\",registeredClass,false,true,false);registeredPointers[rawType]={pointerType:pointerConverter,constPointerType:constPointerConverter};replacePublicSymbol(legalFunctionName,constructor);return[referenceConverter,pointerConverter,constPointerConverter]})}function heap32VectorToArray(count,firstElement){var array=[];for(var i=0;i<count;i++){array.push(HEAPU32[firstElement+i*4>>2])}return array}function runDestructors(destructors){while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}}function new_(constructor,argumentList){if(!(constructor instanceof Function)){throw new TypeError(\"new_ called with constructor type \"+typeof constructor+\" which is not a function\")}var dummy=createNamedFunction(constructor.name||\"unknownFunctionName\",function(){});dummy.prototype=constructor.prototype;var obj=new dummy;var r=constructor.apply(obj,argumentList);return r instanceof Object?r:obj}function craftInvokerFunction(humanName,argTypes,classType,cppInvokerFunc,cppTargetFunc){var argCount=argTypes.length;if(argCount<2){throwBindingError(\"argTypes array size mismatch! Must at least get return value and 'this' types!\")}var isClassMethodFunc=argTypes[1]!==null&&classType!==null;var needsDestructorStack=false;for(var i=1;i<argTypes.length;++i){if(argTypes[i]!==null&&argTypes[i].destructorFunction===undefined){needsDestructorStack=true;break}}var returns=argTypes[0].name!==\"void\";var argsList=\"\";var argsListWired=\"\";for(var i=0;i<argCount-2;++i){argsList+=(i!==0?\", \":\"\")+\"arg\"+i;argsListWired+=(i!==0?\", \":\"\")+\"arg\"+i+\"Wired\"}var invokerFnBody=\"return function \"+makeLegalFunctionName(humanName)+\"(\"+argsList+\") {\\n\"+\"if (arguments.length !== \"+(argCount-2)+\") {\\n\"+\"throwBindingError('function \"+humanName+\" called with ' + arguments.length + ' arguments, expected \"+(argCount-2)+\" args!');\\n\"+\"}\\n\";if(needsDestructorStack){invokerFnBody+=\"var destructors = [];\\n\"}var dtorStack=needsDestructorStack?\"destructors\":\"null\";var args1=[\"throwBindingError\",\"invoker\",\"fn\",\"runDestructors\",\"retType\",\"classParam\"];var args2=[throwBindingError,cppInvokerFunc,cppTargetFunc,runDestructors,argTypes[0],argTypes[1]];if(isClassMethodFunc){invokerFnBody+=\"var thisWired = classParam.toWireType(\"+dtorStack+\", this);\\n\"}for(var i=0;i<argCount-2;++i){invokerFnBody+=\"var arg\"+i+\"Wired = argType\"+i+\".toWireType(\"+dtorStack+\", arg\"+i+\"); // \"+argTypes[i+2].name+\"\\n\";args1.push(\"argType\"+i);args2.push(argTypes[i+2])}if(isClassMethodFunc){argsListWired=\"thisWired\"+(argsListWired.length>0?\", \":\"\")+argsListWired}invokerFnBody+=(returns?\"var rv = \":\"\")+\"invoker(fn\"+(argsListWired.length>0?\", \":\"\")+argsListWired+\");\\n\";if(needsDestructorStack){invokerFnBody+=\"runDestructors(destructors);\\n\"}else{for(var i=isClassMethodFunc?1:2;i<argTypes.length;++i){var paramName=i===1?\"thisWired\":\"arg\"+(i-2)+\"Wired\";if(argTypes[i].destructorFunction!==null){invokerFnBody+=paramName+\"_dtor(\"+paramName+\"); // \"+argTypes[i].name+\"\\n\";args1.push(paramName+\"_dtor\");args2.push(argTypes[i].destructorFunction)}}}if(returns){invokerFnBody+=\"var ret = retType.fromWireType(rv);\\n\"+\"return ret;\\n\"}else{}invokerFnBody+=\"}\\n\";args1.push(invokerFnBody);var invokerFunction=new_(Function,args1).apply(null,args2);return invokerFunction}function __embind_register_class_constructor(rawClassType,argCount,rawArgTypesAddr,invokerSignature,invoker,rawConstructor){assert(argCount>0);var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);invoker=embind__requireFunction(invokerSignature,invoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName=\"constructor \"+classType.name;if(undefined===classType.registeredClass.constructor_body){classType.registeredClass.constructor_body=[]}if(undefined!==classType.registeredClass.constructor_body[argCount-1]){throw new BindingError(\"Cannot register multiple constructors with identical number of parameters (\"+(argCount-1)+\") for class '\"+classType.name+\"'! Overload resolution is currently only performed using the parameter count, not actual type info!\")}classType.registeredClass.constructor_body[argCount-1]=()=>{throwUnboundTypeError(\"Cannot construct \"+classType.name+\" due to unbound types\",rawArgTypes)};whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){argTypes.splice(1,0,null);classType.registeredClass.constructor_body[argCount-1]=craftInvokerFunction(humanName,argTypes,null,invoker,rawConstructor);return[]});return[]})}function __embind_register_class_function(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,context,isPureVirtual){var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=readLatin1String(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName=classType.name+\".\"+methodName;if(methodName.startsWith(\"@@\")){methodName=Symbol[methodName.substring(2)]}if(isPureVirtual){classType.registeredClass.pureVirtualFunctions.push(methodName)}function unboundTypesHandler(){throwUnboundTypeError(\"Cannot call \"+humanName+\" due to unbound types\",rawArgTypes)}var proto=classType.registeredClass.instancePrototype;var method=proto[methodName];if(undefined===method||undefined===method.overloadTable&&method.className!==classType.name&&method.argCount===argCount-2){unboundTypesHandler.argCount=argCount-2;unboundTypesHandler.className=classType.name;proto[methodName]=unboundTypesHandler}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-2]=unboundTypesHandler}whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){var memberFunction=craftInvokerFunction(humanName,argTypes,classType,rawInvoker,context);if(undefined===proto[methodName].overloadTable){memberFunction.argCount=argCount-2;proto[methodName]=memberFunction}else{proto[methodName].overloadTable[argCount-2]=memberFunction}return[]});return[]})}var emval_free_list=[];var emval_handle_array=[{},{value:undefined},{value:null},{value:true},{value:false}];function __emval_decref(handle){if(handle>4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle)}}function count_emval_handles(){var count=0;for(var i=5;i<emval_handle_array.length;++i){if(emval_handle_array[i]!==undefined){++count}}return count}function get_first_emval(){for(var i=5;i<emval_handle_array.length;++i){if(emval_handle_array[i]!==undefined){return emval_handle_array[i]}}return null}function init_emval(){Module[\"count_emval_handles\"]=count_emval_handles;Module[\"get_first_emval\"]=get_first_emval}var Emval={toValue:handle=>{if(!handle){throwBindingError(\"Cannot use deleted val. handle = \"+handle)}return emval_handle_array[handle].value},toHandle:value=>{switch(value){case undefined:return 1;case null:return 2;case true:return 3;case false:return 4;default:{var handle=emval_free_list.length?emval_free_list.pop():emval_handle_array.length;emval_handle_array[handle]={refcount:1,value:value};return handle}}}};function __embind_register_emval(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,\"fromWireType\":function(handle){var rv=Emval.toValue(handle);__emval_decref(handle);return rv},\"toWireType\":function(destructors,value){return Emval.toHandle(value)},\"argPackAdvance\":8,\"readValueFromPointer\":simpleReadValueFromPointer,destructorFunction:null})}function embindRepr(v){if(v===null){return\"null\"}var t=typeof v;if(t===\"object\"||t===\"array\"||t===\"function\"){return v.toString()}else{return\"\"+v}}function floatReadValueFromPointer(name,shift){switch(shift){case 2:return function(pointer){return this[\"fromWireType\"](HEAPF32[pointer>>2])};case 3:return function(pointer){return this[\"fromWireType\"](HEAPF64[pointer>>3])};default:throw new TypeError(\"Unknown float type: \"+name)}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,\"fromWireType\":function(value){return value},\"toWireType\":function(destructors,value){if(typeof value!=\"number\"&&typeof value!=\"boolean\"){throw new TypeError('Cannot convert \"'+embindRepr(value)+'\" to '+this.name)}return value},\"argPackAdvance\":8,\"readValueFromPointer\":floatReadValueFromPointer(name,shift),destructorFunction:null})}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError(\"Unknown integer type: \"+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=value=>value;if(minRange===0){var bitshift=32-8*size;fromWireType=value=>value<<bitshift>>>bitshift}var isUnsignedType=name.includes(\"unsigned\");var checkAssertions=(value,toTypeName)=>{if(typeof value!=\"number\"&&typeof value!=\"boolean\"){throw new TypeError('Cannot convert \"'+embindRepr(value)+'\" to '+toTypeName)}if(value<minRange||value>maxRange){throw new TypeError('Passing a number \"'+embindRepr(value)+'\" from JS side to C/C++ side to an argument of type \"'+name+'\", which is outside the valid range ['+minRange+\", \"+maxRange+\"]!\")}};var toWireType;if(isUnsignedType){toWireType=function(destructors,value){checkAssertions(value,this.name);return value>>>0}}else{toWireType=function(destructors,value){checkAssertions(value,this.name);return value}}registerType(primitiveType,{name:name,\"fromWireType\":fromWireType,\"toWireType\":toWireType,\"argPackAdvance\":8,\"readValueFromPointer\":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(buffer,data,size)}name=readLatin1String(name);registerType(rawType,{name:name,\"fromWireType\":decodeMemoryView,\"argPackAdvance\":8,\"readValueFromPointer\":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);var stdStringIsUTF8=name===\"std::string\";registerType(rawType,{name:name,\"fromWireType\":function(value){var length=HEAPU32[value>>2];var payload=value+4;var str;if(stdStringIsUTF8){var decodeStartPtr=payload;for(var i=0;i<=length;++i){var currentBytePtr=payload+i;if(i==length||HEAPU8[currentBytePtr]==0){var maxRead=currentBytePtr-decodeStartPtr;var stringSegment=UTF8ToString(decodeStartPtr,maxRead);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}}else{var a=new Array(length);for(var i=0;i<length;++i){a[i]=String.fromCharCode(HEAPU8[payload+i])}str=a.join(\"\")}_free(value);return str},\"toWireType\":function(destructors,value){if(value instanceof ArrayBuffer){value=new Uint8Array(value)}var length;var valueIsOfTypeString=typeof value==\"string\";if(!(valueIsOfTypeString||value instanceof Uint8Array||value instanceof Uint8ClampedArray||value instanceof Int8Array)){throwBindingError(\"Cannot pass non-string to std::string\")}if(stdStringIsUTF8&&valueIsOfTypeString){length=lengthBytesUTF8(value)}else{length=value.length}var base=_malloc(4+length+1);var ptr=base+4;HEAPU32[base>>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr,length+1)}else{if(valueIsOfTypeString){for(var i=0;i<length;++i){var charCode=value.charCodeAt(i);if(charCode>255){_free(ptr);throwBindingError(\"String has UTF-16 code units that do not fit in 8 bits\")}HEAPU8[ptr+i]=charCode}}else{for(var i=0;i<length;++i){HEAPU8[ptr+i]=value[i]}}}if(destructors!==null){destructors.push(_free,base)}return base},\"argPackAdvance\":8,\"readValueFromPointer\":simpleReadValueFromPointer,destructorFunction:function(ptr){_free(ptr)}})}var UTF16Decoder=typeof TextDecoder!=\"undefined\"?new TextDecoder(\"utf-16le\"):undefined;function UTF16ToString(ptr,maxBytesToRead){assert(ptr%2==0,\"Pointer passed to UTF16ToString must be aligned to two bytes!\");var endPtr=ptr;var idx=endPtr>>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&HEAPU16[idx])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder){return UTF16Decoder.decode(HEAPU8.subarray(ptr,endPtr))}else{var str=\"\";for(var i=0;!(i>=maxBytesToRead/2);++i){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0)break;str+=String.fromCharCode(codeUnit)}return str}}function stringToUTF16(str,outPtr,maxBytesToWrite){assert(outPtr%2==0,\"Pointer passed to stringToUTF16 must be aligned to two bytes!\");assert(typeof maxBytesToWrite==\"number\",\"stringToUTF16(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!\");if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite<str.length*2?maxBytesToWrite/2:str.length;for(var i=0;i<numCharsToWrite;++i){var codeUnit=str.charCodeAt(i);HEAP16[outPtr>>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}function lengthBytesUTF16(str){return str.length*2}function UTF32ToString(ptr,maxBytesToRead){assert(ptr%4==0,\"Pointer passed to UTF32ToString must be aligned to four bytes!\");var i=0;var str=\"\";while(!(i>=maxBytesToRead/4)){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str}function stringToUTF32(str,outPtr,maxBytesToWrite){assert(outPtr%4==0,\"Pointer passed to stringToUTF32 must be aligned to four bytes!\");assert(typeof maxBytesToWrite==\"number\",\"stringToUTF32(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!\");if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i<str.length;++i){var codeUnit=str.charCodeAt(i);if(codeUnit>=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr}function lengthBytesUTF32(str){var len=0;for(var i=0;i<str.length;++i){var codeUnit=str.charCodeAt(i);if(codeUnit>=55296&&codeUnit<=57343)++i;len+=4}return len}function __embind_register_std_wstring(rawType,charSize,name){name=readLatin1String(name);var decodeString,encodeString,getHeap,lengthBytesUTF,shift;if(charSize===2){decodeString=UTF16ToString;encodeString=stringToUTF16;lengthBytesUTF=lengthBytesUTF16;getHeap=()=>HEAPU16;shift=1}else if(charSize===4){decodeString=UTF32ToString;encodeString=stringToUTF32;lengthBytesUTF=lengthBytesUTF32;getHeap=()=>HEAPU32;shift=2}registerType(rawType,{name:name,\"fromWireType\":function(value){var length=HEAPU32[value>>2];var HEAP=getHeap();var str;var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i*charSize;if(i==length||HEAP[currentBytePtr>>shift]==0){var maxReadBytes=currentBytePtr-decodeStartPtr;var stringSegment=decodeString(decodeStartPtr,maxReadBytes);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+charSize}}_free(value);return str},\"toWireType\":function(destructors,value){if(!(typeof value==\"string\")){throwBindingError(\"Cannot pass non-string to C++ string type \"+name)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);HEAPU32[ptr>>2]=length>>shift;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},\"argPackAdvance\":8,\"readValueFromPointer\":simpleReadValueFromPointer,destructorFunction:function(ptr){_free(ptr)}})}function __embind_register_void(rawType,name){name=readLatin1String(name);registerType(rawType,{isVoid:true,name:name,\"argPackAdvance\":0,\"fromWireType\":function(){return undefined},\"toWireType\":function(destructors,o){return undefined}})}function _abort(){abort(\"native code called abort()\")}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function getHeapMax(){return 2147483648}function emscripten_realloc_buffer(size){try{wasmMemory.grow(size-buffer.byteLength+65535>>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){err(\"emscripten_realloc_buffer: Attempted to grow heap from \"+buffer.byteLength+\" bytes to \"+size+\" bytes, but got error: \"+e)}}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;assert(requestedSize>oldSize);var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){err(\"Cannot enlarge memory, asked to go up to \"+requestedSize+\" bytes, but the limit is \"+maxHeapSize+\" bytes!\");return false}let alignUp=(x,multiple)=>x+(multiple-x%multiple)%multiple;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}err(\"Failed to grow the heap from \"+oldSize+\" bytes to \"+newSize+\" bytes, not enough memory!\");return false}var ENV={};function getExecutableName(){return thisProgram||\"./this.program\"}function getEnvStrings(){if(!getEnvStrings.strings){var lang=(typeof navigator==\"object\"&&navigator.languages&&navigator.languages[0]||\"C\").replace(\"-\",\"_\")+\".UTF-8\";var env={\"USER\":\"web_user\",\"LOGNAME\":\"web_user\",\"PATH\":\"/\",\"PWD\":\"/\",\"HOME\":\"/home/web_user\",\"LANG\":lang,\"_\":getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(x+\"=\"+env[x])}getEnvStrings.strings=strings}return getEnvStrings.strings}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i<str.length;++i){assert(str.charCodeAt(i)===(str.charCodeAt(i)&255));HEAP8[buffer++>>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}var SYSCALLS={varargs:undefined,get:function(){assert(SYSCALLS.varargs!=undefined);SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret}};function _environ_get(__environ,environ_buf){var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAPU32[__environ+i*4>>2]=ptr;writeAsciiToMemory(string,ptr);bufSize+=string.length+1});return 0}function _environ_sizes_get(penviron_count,penviron_buf_size){var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAPU32[penviron_buf_size>>2]=bufSize;return 0}function _fd_close(fd){abort(\"fd_close called without SYSCALLS_REQUIRE_FILESYSTEM\")}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){return 70}var printCharBuffers=[null,[],[]];function printChar(stream,curr){var buffer=printCharBuffers[stream];assert(buffer);if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}}function flush_NO_FILESYSTEM(){_fflush(0);if(printCharBuffers[1].length)printChar(1,10);if(printCharBuffers[2].length)printChar(2,10)}function _fd_write(fd,iov,iovcnt,pnum){var num=0;for(var i=0;i<iovcnt;i++){var ptr=HEAPU32[iov>>2];var len=HEAPU32[iov+4>>2];iov+=8;for(var j=0;j<len;j++){printChar(fd,HEAPU8[ptr+j])}num+=len}HEAPU32[pnum>>2]=num;return 0}function __isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function __arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum}var __MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var __MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function __addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=__isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):\"\"};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={\"%c\":\"%a %b %d %H:%M:%S %Y\",\"%D\":\"%m/%d/%y\",\"%F\":\"%Y-%m-%d\",\"%h\":\"%b\",\"%r\":\"%I:%M:%S %p\",\"%R\":\"%H:%M\",\"%T\":\"%H:%M:%S\",\"%x\":\"%m/%d/%y\",\"%X\":\"%H:%M:%S\",\"%Ec\":\"%c\",\"%EC\":\"%C\",\"%Ex\":\"%m/%d/%y\",\"%EX\":\"%H:%M:%S\",\"%Ey\":\"%y\",\"%EY\":\"%Y\",\"%Od\":\"%d\",\"%Oe\":\"%e\",\"%OH\":\"%H\",\"%OI\":\"%I\",\"%Om\":\"%m\",\"%OM\":\"%M\",\"%OS\":\"%S\",\"%Ou\":\"%u\",\"%OU\":\"%U\",\"%OV\":\"%V\",\"%Ow\":\"%w\",\"%OW\":\"%W\",\"%Oy\":\"%y\"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,\"g\"),EXPANSION_RULES_1[rule])}var WEEKDAYS=[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"];var MONTHS=[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"];function leadingSomething(value,digits,character){var str=typeof value==\"number\"?value.toString():value||\"\";while(str.length<digits){str=character[0]+str}return str}function leadingNulls(value,digits){return leadingSomething(value,digits,\"0\")}function compareByDay(date1,date2){function sgn(value){return value<0?-1:value>0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}return thisDate.getFullYear()}return thisDate.getFullYear()-1}var EXPANSION_RULES_2={\"%a\":function(date){return WEEKDAYS[date.tm_wday].substring(0,3)},\"%A\":function(date){return WEEKDAYS[date.tm_wday]},\"%b\":function(date){return MONTHS[date.tm_mon].substring(0,3)},\"%B\":function(date){return MONTHS[date.tm_mon]},\"%C\":function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},\"%d\":function(date){return leadingNulls(date.tm_mday,2)},\"%e\":function(date){return leadingSomething(date.tm_mday,2,\" \")},\"%g\":function(date){return getWeekBasedYear(date).toString().substring(2)},\"%G\":function(date){return getWeekBasedYear(date)},\"%H\":function(date){return leadingNulls(date.tm_hour,2)},\"%I\":function(date){var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},\"%j\":function(date){return leadingNulls(date.tm_mday+__arraySum(__isLeapYear(date.tm_year+1900)?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,date.tm_mon-1),3)},\"%m\":function(date){return leadingNulls(date.tm_mon+1,2)},\"%M\":function(date){return leadingNulls(date.tm_min,2)},\"%n\":function(){return\"\\n\"},\"%p\":function(date){if(date.tm_hour>=0&&date.tm_hour<12){return\"AM\"}return\"PM\"},\"%S\":function(date){return leadingNulls(date.tm_sec,2)},\"%t\":function(){return\"\\t\"},\"%u\":function(date){return date.tm_wday||7},\"%U\":function(date){var days=date.tm_yday+7-date.tm_wday;return leadingNulls(Math.floor(days/7),2)},\"%V\":function(date){var val=Math.floor((date.tm_yday+7-(date.tm_wday+6)%7)/7);if((date.tm_wday+371-date.tm_yday-2)%7<=2){val++}if(!val){val=52;var dec31=(date.tm_wday+7-date.tm_yday-1)%7;if(dec31==4||dec31==5&&__isLeapYear(date.tm_year%400-1)){val++}}else if(val==53){var jan1=(date.tm_wday+371-date.tm_yday)%7;if(jan1!=4&&(jan1!=3||!__isLeapYear(date.tm_year)))val=1}return leadingNulls(val,2)},\"%w\":function(date){return date.tm_wday},\"%W\":function(date){var days=date.tm_yday+7-(date.tm_wday+6)%7;return leadingNulls(Math.floor(days/7),2)},\"%y\":function(date){return(date.tm_year+1900).toString().substring(2)},\"%Y\":function(date){return date.tm_year+1900},\"%z\":function(date){var off=date.tm_gmtoff;var ahead=off>=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?\"+\":\"-\")+String(\"0000\"+off).slice(-4)},\"%Z\":function(date){return date.tm_zone},\"%%\":function(){return\"%\"}};pattern=pattern.replace(/%%/g,\"\\0\\0\");for(var rule in EXPANSION_RULES_2){if(pattern.includes(rule)){pattern=pattern.replace(new RegExp(rule,\"g\"),EXPANSION_RULES_2[rule](date))}}pattern=pattern.replace(/\\0\\0/g,\"%\");var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _strftime_l(s,maxsize,format,tm){return _strftime(s,maxsize,format,tm)}function uleb128Encode(n,target){assert(n<16384);if(n<128){target.push(n)}else{target.push(n%128|128,n>>7)}}function sigToWasmTypes(sig){var typeNames={\"i\":\"i32\",\"j\":\"i64\",\"f\":\"f32\",\"d\":\"f64\",\"p\":\"i32\"};var type={parameters:[],results:sig[0]==\"v\"?[]:[typeNames[sig[0]]]};for(var i=1;i<sig.length;++i){assert(sig[i]in typeNames,\"invalid signature char: \"+sig[i]);type.parameters.push(typeNames[sig[i]])}return type}function convertJsFunctionToWasm(func,sig){if(typeof WebAssembly.Function==\"function\"){return new WebAssembly.Function(sigToWasmTypes(sig),func)}var typeSectionBody=[1,96];var sigRet=sig.slice(0,1);var sigParam=sig.slice(1);var typeCodes={\"i\":127,\"p\":127,\"j\":126,\"f\":125,\"d\":124};uleb128Encode(sigParam.length,typeSectionBody);for(var i=0;i<sigParam.length;++i){assert(sigParam[i]in typeCodes,\"invalid signature char: \"+sigParam[i]);typeSectionBody.push(typeCodes[sigParam[i]])}if(sigRet==\"v\"){typeSectionBody.push(0)}else{typeSectionBody.push(1,typeCodes[sigRet])}var bytes=[0,97,115,109,1,0,0,0,1];uleb128Encode(typeSectionBody.length,bytes);bytes.push.apply(bytes,typeSectionBody);bytes.push(2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0);var module=new WebAssembly.Module(new Uint8Array(bytes));var instance=new WebAssembly.Instance(module,{\"e\":{\"f\":func}});var wrappedFunc=instance.exports[\"f\"];return wrappedFunc}function updateTableMap(offset,count){if(functionsInTableMap){for(var i=offset;i<offset+count;i++){var item=getWasmTableEntry(i);if(item){functionsInTableMap.set(item,i)}}}}var functionsInTableMap=undefined;var freeTableIndexes=[];function getEmptyTableSlot(){if(freeTableIndexes.length){return freeTableIndexes.pop()}try{wasmTable.grow(1)}catch(err){if(!(err instanceof RangeError)){throw err}throw\"Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.\"}return wasmTable.length-1}function setWasmTableEntry(idx,func){wasmTable.set(idx,func);wasmTableMirror[idx]=wasmTable.get(idx)}var ALLOC_STACK=1;function getCFunc(ident){var func=Module[\"_\"+ident];assert(func,\"Cannot call unknown function \"+ident+\", make sure it is exported\");return func}function ccall(ident,returnType,argTypes,args,opts){var toC={\"string\":str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},\"array\":arr=>{var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType===\"string\"){return UTF8ToString(ret)}if(returnType===\"boolean\")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;assert(returnType!==\"array\",'Return type should not be \"array\".');if(args){for(var i=0;i<args.length;i++){var converter=toC[argTypes[i]];if(converter){if(stack===0)stack=stackSave();cArgs[i]=converter(args[i])}else{cArgs[i]=args[i]}}}var ret=func.apply(null,cArgs);function onDone(ret){if(stack!==0)stackRestore(stack);return convertReturnValue(ret)}ret=onDone(ret);return ret}embind_init_charCodes();BindingError=Module[\"BindingError\"]=extendError(Error,\"BindingError\");InternalError=Module[\"InternalError\"]=extendError(Error,\"InternalError\");init_ClassHandle();init_embind();init_RegisteredPointer();UnboundTypeError=Module[\"UnboundTypeError\"]=extendError(Error,\"UnboundTypeError\");init_emval();var ASSERTIONS=true;function checkIncomingModuleAPI(){ignoredModuleProp(\"fetchSettings\")}var asmLibraryArg={\"__cxa_allocate_exception\":___cxa_allocate_exception,\"__cxa_throw\":___cxa_throw,\"_embind_register_bigint\":__embind_register_bigint,\"_embind_register_bool\":__embind_register_bool,\"_embind_register_class\":__embind_register_class,\"_embind_register_class_constructor\":__embind_register_class_constructor,\"_embind_register_class_function\":__embind_register_class_function,\"_embind_register_emval\":__embind_register_emval,\"_embind_register_float\":__embind_register_float,\"_embind_register_integer\":__embind_register_integer,\"_embind_register_memory_view\":__embind_register_memory_view,\"_embind_register_std_string\":__embind_register_std_string,\"_embind_register_std_wstring\":__embind_register_std_wstring,\"_embind_register_void\":__embind_register_void,\"abort\":_abort,\"emscripten_memcpy_big\":_emscripten_memcpy_big,\"emscripten_resize_heap\":_emscripten_resize_heap,\"environ_get\":_environ_get,\"environ_sizes_get\":_environ_sizes_get,\"fd_close\":_fd_close,\"fd_seek\":_fd_seek,\"fd_write\":_fd_write,\"strftime_l\":_strftime_l};var asm=createWasm();var ___wasm_call_ctors=Module[\"___wasm_call_ctors\"]=createExportWrapper(\"__wasm_call_ctors\");var _malloc=Module[\"_malloc\"]=createExportWrapper(\"malloc\");var _free=Module[\"_free\"]=createExportWrapper(\"free\");var ___getTypeName=Module[\"___getTypeName\"]=createExportWrapper(\"__getTypeName\");var __embind_initialize_bindings=Module[\"__embind_initialize_bindings\"]=createExportWrapper(\"_embind_initialize_bindings\");var ___errno_location=Module[\"___errno_location\"]=createExportWrapper(\"__errno_location\");var _fflush=Module[\"_fflush\"]=createExportWrapper(\"fflush\");var _emscripten_stack_init=Module[\"_emscripten_stack_init\"]=function(){return(_emscripten_stack_init=Module[\"_emscripten_stack_init\"]=Module[\"asm\"][\"emscripten_stack_init\"]).apply(null,arguments)};var _emscripten_stack_get_free=Module[\"_emscripten_stack_get_free\"]=function(){return(_emscripten_stack_get_free=Module[\"_emscripten_stack_get_free\"]=Module[\"asm\"][\"emscripten_stack_get_free\"]).apply(null,arguments)};var _emscripten_stack_get_base=Module[\"_emscripten_stack_get_base\"]=function(){return(_emscripten_stack_get_base=Module[\"_emscripten_stack_get_base\"]=Module[\"asm\"][\"emscripten_stack_get_base\"]).apply(null,arguments)};var _emscripten_stack_get_end=Module[\"_emscripten_stack_get_end\"]=function(){return(_emscripten_stack_get_end=Module[\"_emscripten_stack_get_end\"]=Module[\"asm\"][\"emscripten_stack_get_end\"]).apply(null,arguments)};var stackSave=Module[\"stackSave\"]=createExportWrapper(\"stackSave\");var stackRestore=Module[\"stackRestore\"]=createExportWrapper(\"stackRestore\");var stackAlloc=Module[\"stackAlloc\"]=createExportWrapper(\"stackAlloc\");var ___cxa_is_pointer_type=Module[\"___cxa_is_pointer_type\"]=createExportWrapper(\"__cxa_is_pointer_type\");var dynCall_viijii=Module[\"dynCall_viijii\"]=createExportWrapper(\"dynCall_viijii\");var dynCall_ji=Module[\"dynCall_ji\"]=createExportWrapper(\"dynCall_ji\");var dynCall_jiji=Module[\"dynCall_jiji\"]=createExportWrapper(\"dynCall_jiji\");var dynCall_iiiiij=Module[\"dynCall_iiiiij\"]=createExportWrapper(\"dynCall_iiiiij\");var dynCall_iiiiijj=Module[\"dynCall_iiiiijj\"]=createExportWrapper(\"dynCall_iiiiijj\");var dynCall_iiiiiijj=Module[\"dynCall_iiiiiijj\"]=createExportWrapper(\"dynCall_iiiiiijj\");var unexportedRuntimeSymbols=[\"run\",\"UTF8ArrayToString\",\"UTF8ToString\",\"stringToUTF8Array\",\"stringToUTF8\",\"lengthBytesUTF8\",\"addOnPreRun\",\"addOnInit\",\"addOnPreMain\",\"addOnExit\",\"addOnPostRun\",\"addRunDependency\",\"removeRunDependency\",\"FS_createFolder\",\"FS_createPath\",\"FS_createDataFile\",\"FS_createPreloadedFile\",\"FS_createLazyFile\",\"FS_createLink\",\"FS_createDevice\",\"FS_unlink\",\"getLEB\",\"getFunctionTables\",\"alignFunctionTables\",\"registerFunctions\",\"prettyPrint\",\"getCompilerSetting\",\"print\",\"printErr\",\"callMain\",\"abort\",\"keepRuntimeAlive\",\"wasmMemory\",\"stackAlloc\",\"stackSave\",\"stackRestore\",\"getTempRet0\",\"setTempRet0\",\"writeStackCookie\",\"checkStackCookie\",\"ptrToString\",\"zeroMemory\",\"stringToNewUTF8\",\"exitJS\",\"getHeapMax\",\"emscripten_realloc_buffer\",\"ENV\",\"ERRNO_CODES\",\"ERRNO_MESSAGES\",\"setErrNo\",\"inetPton4\",\"inetNtop4\",\"inetPton6\",\"inetNtop6\",\"readSockaddr\",\"writeSockaddr\",\"DNS\",\"getHostByName\",\"Protocols\",\"Sockets\",\"getRandomDevice\",\"warnOnce\",\"traverseStack\",\"UNWIND_CACHE\",\"convertPCtoSourceLocation\",\"readAsmConstArgsArray\",\"readAsmConstArgs\",\"mainThreadEM_ASM\",\"jstoi_q\",\"jstoi_s\",\"getExecutableName\",\"listenOnce\",\"autoResumeAudioContext\",\"dynCallLegacy\",\"getDynCaller\",\"dynCall\",\"handleException\",\"runtimeKeepalivePush\",\"runtimeKeepalivePop\",\"callUserCallback\",\"maybeExit\",\"safeSetTimeout\",\"asmjsMangle\",\"asyncLoad\",\"alignMemory\",\"mmapAlloc\",\"writeI53ToI64\",\"writeI53ToI64Clamped\",\"writeI53ToI64Signaling\",\"writeI53ToU64Clamped\",\"writeI53ToU64Signaling\",\"readI53FromI64\",\"readI53FromU64\",\"convertI32PairToI53\",\"convertI32PairToI53Checked\",\"convertU32PairToI53\",\"getCFunc\",\"ccall\",\"cwrap\",\"uleb128Encode\",\"sigToWasmTypes\",\"convertJsFunctionToWasm\",\"freeTableIndexes\",\"functionsInTableMap\",\"getEmptyTableSlot\",\"updateTableMap\",\"addFunction\",\"removeFunction\",\"reallyNegative\",\"unSign\",\"strLen\",\"reSign\",\"formatString\",\"setValue\",\"getValue\",\"PATH\",\"PATH_FS\",\"intArrayFromString\",\"intArrayToString\",\"AsciiToString\",\"stringToAscii\",\"UTF16Decoder\",\"UTF16ToString\",\"stringToUTF16\",\"lengthBytesUTF16\",\"UTF32ToString\",\"stringToUTF32\",\"lengthBytesUTF32\",\"allocateUTF8\",\"allocateUTF8OnStack\",\"writeStringToMemory\",\"writeArrayToMemory\",\"writeAsciiToMemory\",\"SYSCALLS\",\"getSocketFromFD\",\"getSocketAddress\",\"JSEvents\",\"registerKeyEventCallback\",\"specialHTMLTargets\",\"maybeCStringToJsString\",\"findEventTarget\",\"findCanvasEventTarget\",\"getBoundingClientRect\",\"fillMouseEventData\",\"registerMouseEventCallback\",\"registerWheelEventCallback\",\"registerUiEventCallback\",\"registerFocusEventCallback\",\"fillDeviceOrientationEventData\",\"registerDeviceOrientationEventCallback\",\"fillDeviceMotionEventData\",\"registerDeviceMotionEventCallback\",\"screenOrientation\",\"fillOrientationChangeEventData\",\"registerOrientationChangeEventCallback\",\"fillFullscreenChangeEventData\",\"registerFullscreenChangeEventCallback\",\"JSEvents_requestFullscreen\",\"JSEvents_resizeCanvasForFullscreen\",\"registerRestoreOldStyle\",\"hideEverythingExceptGivenElement\",\"restoreHiddenElements\",\"setLetterbox\",\"currentFullscreenStrategy\",\"restoreOldWindowedStyle\",\"softFullscreenResizeWebGLRenderTarget\",\"doRequestFullscreen\",\"fillPointerlockChangeEventData\",\"registerPointerlockChangeEventCallback\",\"registerPointerlockErrorEventCallback\",\"requestPointerLock\",\"fillVisibilityChangeEventData\",\"registerVisibilityChangeEventCallback\",\"registerTouchEventCallback\",\"fillGamepadEventData\",\"registerGamepadEventCallback\",\"registerBeforeUnloadEventCallback\",\"fillBatteryEventData\",\"battery\",\"registerBatteryEventCallback\",\"setCanvasElementSize\",\"getCanvasElementSize\",\"demangle\",\"demangleAll\",\"jsStackTrace\",\"stackTrace\",\"ExitStatus\",\"getEnvStrings\",\"checkWasiClock\",\"flush_NO_FILESYSTEM\",\"dlopenMissingError\",\"setImmediateWrapped\",\"clearImmediateWrapped\",\"polyfillSetImmediate\",\"uncaughtExceptionCount\",\"exceptionLast\",\"exceptionCaught\",\"ExceptionInfo\",\"exception_addRef\",\"exception_decRef\",\"Browser\",\"setMainLoop\",\"wget\",\"FS\",\"MEMFS\",\"TTY\",\"PIPEFS\",\"SOCKFS\",\"_setNetworkCallback\",\"tempFixedLengthArray\",\"miniTempWebGLFloatBuffers\",\"heapObjectForWebGLType\",\"heapAccessShiftForWebGLHeap\",\"GL\",\"emscriptenWebGLGet\",\"computeUnpackAlignedImageSize\",\"emscriptenWebGLGetTexPixelData\",\"emscriptenWebGLGetUniform\",\"webglGetUniformLocation\",\"webglPrepareUniformLocationsBeforeFirstUse\",\"webglGetLeftBracePos\",\"emscriptenWebGLGetVertexAttrib\",\"writeGLArray\",\"AL\",\"SDL_unicode\",\"SDL_ttfContext\",\"SDL_audio\",\"SDL\",\"SDL_gfx\",\"GLUT\",\"EGL\",\"GLFW_Window\",\"GLFW\",\"GLEW\",\"IDBStore\",\"runAndAbortIfError\",\"ALLOC_NORMAL\",\"ALLOC_STACK\",\"allocate\",\"InternalError\",\"BindingError\",\"UnboundTypeError\",\"PureVirtualError\",\"init_embind\",\"throwInternalError\",\"throwBindingError\",\"throwUnboundTypeError\",\"ensureOverloadTable\",\"exposePublicSymbol\",\"replacePublicSymbol\",\"extendError\",\"createNamedFunction\",\"embindRepr\",\"registeredInstances\",\"getBasestPointer\",\"registerInheritedInstance\",\"unregisterInheritedInstance\",\"getInheritedInstance\",\"getInheritedInstanceCount\",\"getLiveInheritedInstances\",\"registeredTypes\",\"awaitingDependencies\",\"typeDependencies\",\"registeredPointers\",\"registerType\",\"whenDependentTypesAreResolved\",\"embind_charCodes\",\"embind_init_charCodes\",\"readLatin1String\",\"getTypeName\",\"heap32VectorToArray\",\"requireRegisteredType\",\"getShiftFromSize\",\"integerReadValueFromPointer\",\"enumReadValueFromPointer\",\"floatReadValueFromPointer\",\"simpleReadValueFromPointer\",\"runDestructors\",\"new_\",\"craftInvokerFunction\",\"embind__requireFunction\",\"tupleRegistrations\",\"structRegistrations\",\"genericPointerToWireType\",\"constNoSmartPtrRawPointerToWireType\",\"nonConstNoSmartPtrRawPointerToWireType\",\"init_RegisteredPointer\",\"RegisteredPointer\",\"RegisteredPointer_getPointee\",\"RegisteredPointer_destructor\",\"RegisteredPointer_deleteObject\",\"RegisteredPointer_fromWireType\",\"runDestructor\",\"releaseClassHandle\",\"finalizationRegistry\",\"detachFinalizer_deps\",\"detachFinalizer\",\"attachFinalizer\",\"makeClassHandle\",\"init_ClassHandle\",\"ClassHandle\",\"ClassHandle_isAliasOf\",\"throwInstanceAlreadyDeleted\",\"ClassHandle_clone\",\"ClassHandle_delete\",\"deletionQueue\",\"ClassHandle_isDeleted\",\"ClassHandle_deleteLater\",\"flushPendingDeletes\",\"delayFunction\",\"setDelayFunction\",\"RegisteredClass\",\"shallowCopyInternalPointer\",\"downcastPointer\",\"upcastPointer\",\"validateThis\",\"char_0\",\"char_9\",\"makeLegalFunctionName\",\"emval_handle_array\",\"emval_free_list\",\"emval_symbols\",\"init_emval\",\"count_emval_handles\",\"get_first_emval\",\"getStringOrSymbol\",\"Emval\",\"emval_newers\",\"craftEmvalAllocator\",\"emval_get_global\",\"emval_lookupTypes\",\"emval_allocateDestructors\",\"emval_methodCallers\",\"emval_addMethodCaller\",\"emval_registeredMethods\"];unexportedRuntimeSymbols.forEach(unexportedRuntimeSymbol);var missingLibrarySymbols=[\"ptrToString\",\"zeroMemory\",\"stringToNewUTF8\",\"exitJS\",\"setErrNo\",\"inetPton4\",\"inetNtop4\",\"inetPton6\",\"inetNtop6\",\"readSockaddr\",\"writeSockaddr\",\"getHostByName\",\"getRandomDevice\",\"traverseStack\",\"convertPCtoSourceLocation\",\"readAsmConstArgs\",\"mainThreadEM_ASM\",\"jstoi_q\",\"jstoi_s\",\"listenOnce\",\"autoResumeAudioContext\",\"runtimeKeepalivePush\",\"runtimeKeepalivePop\",\"callUserCallback\",\"maybeExit\",\"safeSetTimeout\",\"asmjsMangle\",\"asyncLoad\",\"alignMemory\",\"mmapAlloc\",\"writeI53ToI64\",\"writeI53ToI64Clamped\",\"writeI53ToI64Signaling\",\"writeI53ToU64Clamped\",\"writeI53ToU64Signaling\",\"readI53FromI64\",\"readI53FromU64\",\"convertI32PairToI53\",\"convertU32PairToI53\",\"reallyNegative\",\"unSign\",\"strLen\",\"reSign\",\"formatString\",\"getSocketFromFD\",\"getSocketAddress\",\"registerKeyEventCallback\",\"maybeCStringToJsString\",\"findEventTarget\",\"findCanvasEventTarget\",\"getBoundingClientRect\",\"fillMouseEventData\",\"registerMouseEventCallback\",\"registerWheelEventCallback\",\"registerUiEventCallback\",\"registerFocusEventCallback\",\"fillDeviceOrientationEventData\",\"registerDeviceOrientationEventCallback\",\"fillDeviceMotionEventData\",\"registerDeviceMotionEventCallback\",\"screenOrientation\",\"fillOrientationChangeEventData\",\"registerOrientationChangeEventCallback\",\"fillFullscreenChangeEventData\",\"registerFullscreenChangeEventCallback\",\"JSEvents_requestFullscreen\",\"JSEvents_resizeCanvasForFullscreen\",\"registerRestoreOldStyle\",\"hideEverythingExceptGivenElement\",\"restoreHiddenElements\",\"setLetterbox\",\"softFullscreenResizeWebGLRenderTarget\",\"doRequestFullscreen\",\"fillPointerlockChangeEventData\",\"registerPointerlockChangeEventCallback\",\"registerPointerlockErrorEventCallback\",\"requestPointerLock\",\"fillVisibilityChangeEventData\",\"registerVisibilityChangeEventCallback\",\"registerTouchEventCallback\",\"fillGamepadEventData\",\"registerGamepadEventCallback\",\"registerBeforeUnloadEventCallback\",\"fillBatteryEventData\",\"battery\",\"registerBatteryEventCallback\",\"setCanvasElementSize\",\"getCanvasElementSize\",\"checkWasiClock\",\"setImmediateWrapped\",\"clearImmediateWrapped\",\"polyfillSetImmediate\",\"exception_addRef\",\"exception_decRef\",\"setMainLoop\",\"_setNetworkCallback\",\"heapObjectForWebGLType\",\"heapAccessShiftForWebGLHeap\",\"emscriptenWebGLGet\",\"computeUnpackAlignedImageSize\",\"emscriptenWebGLGetTexPixelData\",\"emscriptenWebGLGetUniform\",\"webglGetUniformLocation\",\"webglPrepareUniformLocationsBeforeFirstUse\",\"webglGetLeftBracePos\",\"emscriptenWebGLGetVertexAttrib\",\"writeGLArray\",\"SDL_unicode\",\"SDL_ttfContext\",\"SDL_audio\",\"GLFW_Window\",\"runAndAbortIfError\",\"registerInheritedInstance\",\"unregisterInheritedInstance\",\"requireRegisteredType\",\"enumReadValueFromPointer\",\"validateThis\",\"getStringOrSymbol\",\"craftEmvalAllocator\",\"emval_get_global\",\"emval_lookupTypes\",\"emval_allocateDestructors\",\"emval_addMethodCaller\"];missingLibrarySymbols.forEach(missingLibrarySymbol);var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function stackCheckInit(){_emscripten_stack_init();writeStackCookie()}function run(args){args=args||arguments_;if(runDependencies>0){return}stackCheckInit();preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module[\"calledRun\"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);if(Module[\"onRuntimeInitialized\"])Module[\"onRuntimeInitialized\"]();assert(!Module[\"_main\"],'compiled without a main, but one is present. if you added it from JS, use Module[\"onRuntimeInitialized\"]');postRun()}if(Module[\"setStatus\"]){Module[\"setStatus\"](\"Running...\");setTimeout(function(){setTimeout(function(){Module[\"setStatus\"](\"\")},1);doRun()},1)}else{doRun()}checkStackCookie()}if(Module[\"preInit\"]){if(typeof Module[\"preInit\"]==\"function\")Module[\"preInit\"]=[Module[\"preInit\"]];while(Module[\"preInit\"].length>0){Module[\"preInit\"].pop()()}}run();\n\n\n  return createLazPerf.ready\n}\n);\n})();\nif (typeof exports === 'object' && typeof module === 'object')\n  module.exports = createLazPerf;\nelse if (typeof define === 'function' && define['amd'])\n  define([], function() { return createLazPerf; });\nelse if (typeof exports === 'object')\n  exports[\"createLazPerf\"] = createLazPerf;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LazPerf = exports.create = exports.createLazPerf = void 0;\nconst laz_perf_js_1 = __importDefault(require(\"./laz-perf.js\"));\nexports.createLazPerf = laz_perf_js_1.default;\nexports.create = laz_perf_js_1.default;\nexports.LazPerf = { create: laz_perf_js_1.default };\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decompressFile = exports.decompressChunk = exports.PointData = void 0;\nconst laz_perf_1 = require(\"laz-perf\");\nconst header_1 = require(\"./header\");\nexports.PointData = { createLazPerf: laz_perf_1.createLazPerf, decompressChunk, decompressFile };\nlet ourLazPerfPromise = undefined;\nasync function getLazPerf(suppliedLazPerf) {\n    if (suppliedLazPerf)\n        return suppliedLazPerf;\n    if (!ourLazPerfPromise)\n        ourLazPerfPromise = (0, laz_perf_1.createLazPerf)();\n    return ourLazPerfPromise;\n}\nasync function decompressChunk(compressed, { pointCount, pointDataRecordFormat, pointDataRecordLength }, suppliedLazPerf) {\n    const LazPerf = await getLazPerf(suppliedLazPerf);\n    const outBuffer = new Uint8Array(pointCount * pointDataRecordLength);\n    const blobPointer = LazPerf._malloc(compressed.byteLength);\n    const dataPointer = LazPerf._malloc(pointDataRecordLength);\n    const decoder = new LazPerf.ChunkDecoder();\n    try {\n        LazPerf.HEAPU8.set(new Uint8Array(compressed.buffer, compressed.byteOffset, compressed.byteLength), blobPointer);\n        decoder.open(pointDataRecordFormat, pointDataRecordLength, blobPointer);\n        for (let i = 0; i < pointCount; ++i) {\n            decoder.getPoint(dataPointer);\n            outBuffer.set(new Uint8Array(LazPerf.HEAPU8.buffer, dataPointer, pointDataRecordLength), i * pointDataRecordLength);\n        }\n    }\n    finally {\n        LazPerf._free(blobPointer);\n        LazPerf._free(dataPointer);\n        decoder.delete();\n    }\n    return outBuffer;\n}\nexports.decompressChunk = decompressChunk;\nasync function decompressFile(file, suppliedLazPerf) {\n    const LazPerf = await getLazPerf(suppliedLazPerf);\n    const header = header_1.Header.parse(file);\n    const { pointCount, pointDataRecordLength } = header;\n    const outBuffer = new Uint8Array(pointCount * pointDataRecordLength);\n    const blobPointer = LazPerf._malloc(file.byteLength);\n    const dataPointer = LazPerf._malloc(pointDataRecordLength);\n    const reader = new LazPerf.LASZip();\n    try {\n        LazPerf.HEAPU8.set(new Uint8Array(file.buffer, file.byteOffset, file.byteLength), blobPointer);\n        reader.open(blobPointer, file.byteLength);\n        for (let i = 0; i < pointCount; ++i) {\n            reader.getPoint(dataPointer);\n            outBuffer.set(new Uint8Array(LazPerf.HEAPU8.buffer, dataPointer, pointDataRecordLength), i * pointDataRecordLength);\n        }\n    }\n    finally {\n        reader.delete();\n    }\n    return outBuffer;\n}\nexports.decompressFile = decompressFile;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.View = void 0;\nconst utils_1 = require(\"../utils\");\nconst dimensions_1 = require(\"./dimensions\");\nconst extractor_1 = require(\"./extractor\");\nexports.View = { create };\nfunction create(buffer, header, eb = [], include) {\n    let extractors = extractor_1.Extractor.create(header, eb);\n    if (include) {\n        const set = new Set([...include]);\n        extractors = Object.entries(extractors).reduce((extractors, [name, getter]) => {\n            if (set.has(name))\n                extractors[name] = getter;\n            return extractors;\n        }, {});\n    }\n    const dimensions = dimensions_1.Dimensions.create(extractors, eb);\n    const dv = utils_1.Binary.toDataView(buffer);\n    const pointLength = header.pointDataRecordLength;\n    if (dv.byteLength % pointLength !== 0) {\n        throw new Error(`Invalid buffer length (${dv.byteLength}) for point length ${pointLength}`);\n    }\n    const pointCount = dv.byteLength / header.pointDataRecordLength;\n    function getter(name) {\n        const extractor = extractors[name];\n        if (!extractor)\n            throw new Error(`No extractor for dimension: ${name}`);\n        return function (index) {\n            if (index >= pointCount) {\n                throw new RangeError(`View index (${index}) out of range: ${pointCount}`);\n            }\n            return extractor(dv, index);\n        };\n    }\n    return { pointCount, dimensions, getter };\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Vlr = void 0;\nconst utils_1 = require(\"../utils\");\nconst constants_1 = require(\"./constants\");\nexports.Vlr = { walk, parse, find, at, fetch };\nfunction find(vlrs, userId, recordId) {\n    return vlrs.find((v) => v.userId === userId && v.recordId === recordId);\n}\nfunction at(vlrs, userId, recordId) {\n    const vlr = find(vlrs, userId, recordId);\n    if (!vlr)\n        throw new Error(`VLR not found: ${userId}/${recordId}`);\n    return vlr;\n}\nfunction fetch(filename, { contentOffset, contentLength }) {\n    if (contentLength === 0)\n        return new Uint8Array();\n    const get = utils_1.Getter.create(filename);\n    return get(contentOffset, contentOffset + contentLength);\n}\nasync function walk(filename, header) {\n    const get = utils_1.Getter.create(filename);\n    const vlrs = await doWalk({\n        get,\n        startOffset: header.headerLength,\n        count: header.vlrCount,\n        isExtended: false,\n    });\n    const evlrs = await doWalk({\n        get,\n        startOffset: header.evlrOffset,\n        count: header.evlrCount,\n        isExtended: true,\n    });\n    return [...vlrs, ...evlrs];\n}\nfunction parse(buffer, isExtended) {\n    return (isExtended ? parseExtended : parseNormal)(buffer);\n}\nfunction parseNormal(buffer) {\n    const dv = utils_1.Binary.toDataView(buffer);\n    if (dv.byteLength !== constants_1.vlrHeaderLength) {\n        throw new Error(`Invalid VLR header length (must be ${constants_1.vlrHeaderLength}): ${dv.byteLength}`);\n    }\n    return {\n        userId: utils_1.Binary.toCString(buffer.slice(2, 18)),\n        recordId: dv.getUint16(18, true),\n        contentLength: dv.getUint16(20, true),\n        description: utils_1.Binary.toCString(buffer.slice(22, 54)),\n        isExtended: false,\n    };\n}\nfunction parseExtended(buffer) {\n    const dv = utils_1.Binary.toDataView(buffer);\n    if (dv.byteLength !== constants_1.evlrHeaderLength) {\n        throw new Error(`Invalid EVLR header length (must be ${constants_1.evlrHeaderLength}): ${dv.byteLength}`);\n    }\n    return {\n        userId: utils_1.Binary.toCString(buffer.slice(2, 18)),\n        recordId: dv.getUint16(18, true),\n        contentLength: (0, utils_1.parseBigInt)((0, utils_1.getBigUint64)(dv, 20, true)),\n        description: utils_1.Binary.toCString(buffer.slice(28, 60)),\n        isExtended: true,\n    };\n}\nasync function doWalk({ get, startOffset, count, isExtended }) {\n    const vlrs = [];\n    let pos = startOffset;\n    const length = isExtended ? constants_1.evlrHeaderLength : constants_1.vlrHeaderLength;\n    for (let i = 0; i < count; ++i) {\n        const buffer = length ? await get(pos, pos + length) : new Uint8Array();\n        const { userId, recordId, contentLength, description } = parse(buffer, isExtended);\n        vlrs.push({\n            userId,\n            recordId,\n            contentOffset: pos + length,\n            contentLength,\n            description,\n            isExtended,\n        });\n        pos += length + contentLength;\n    }\n    return vlrs;\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Vlr = exports.View = exports.PointData = exports.Header = exports.Extractor = exports.ExtraBytes = exports.Dimensions = exports.Constants = void 0;\n// Note that everything here is implicitly referring to LAS 1.4 - no other\n// versions are supported by these utilities.\nexports.Constants = __importStar(require(\"./constants\"));\nvar dimensions_1 = require(\"./dimensions\");\nObject.defineProperty(exports, \"Dimensions\", { enumerable: true, get: function () { return dimensions_1.Dimensions; } });\nvar extra_bytes_1 = require(\"./extra-bytes\");\nObject.defineProperty(exports, \"ExtraBytes\", { enumerable: true, get: function () { return extra_bytes_1.ExtraBytes; } });\nvar extractor_1 = require(\"./extractor\");\nObject.defineProperty(exports, \"Extractor\", { enumerable: true, get: function () { return extractor_1.Extractor; } });\nvar header_1 = require(\"./header\");\nObject.defineProperty(exports, \"Header\", { enumerable: true, get: function () { return header_1.Header; } });\nvar point_data_1 = require(\"./point-data\");\nObject.defineProperty(exports, \"PointData\", { enumerable: true, get: function () { return point_data_1.PointData; } });\nvar view_1 = require(\"./view\");\nObject.defineProperty(exports, \"View\", { enumerable: true, get: function () { return view_1.View; } });\nvar vlr_1 = require(\"./vlr\");\nObject.defineProperty(exports, \"Vlr\", { enumerable: true, get: function () { return vlr_1.Vlr; } });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Hierarchy = void 0;\nconst utils_1 = require(\"../utils\");\nconst constants_1 = require(\"./constants\");\nexports.Hierarchy = { parse, load };\nfunction parse(buffer) {\n    const dv = utils_1.Binary.toDataView(buffer);\n    if (dv.byteLength % constants_1.hierarchyItemLength !== 0) {\n        throw new Error(`Invalid hierarchy page length: ${dv.byteLength}`);\n    }\n    const nodes = {};\n    const pages = {};\n    for (let i = 0; i < dv.byteLength; i += constants_1.hierarchyItemLength) {\n        const d = dv.getInt32(i + 0, true);\n        const x = dv.getInt32(i + 4, true);\n        const y = dv.getInt32(i + 8, true);\n        const z = dv.getInt32(i + 12, true);\n        const offset = (0, utils_1.parseBigInt)((0, utils_1.getBigUint64)(dv, i + 16, true));\n        const length = dv.getInt32(i + 24, true);\n        const pointCount = dv.getInt32(i + 28, true);\n        const key = utils_1.Key.toString([d, x, y, z]);\n        if (pointCount < -1) {\n            throw new Error(`Invalid hierarchy point count at key: ${key}`);\n        }\n        else if (pointCount === -1) {\n            pages[key] = {\n                pageOffset: offset,\n                pageLength: length,\n            };\n        }\n        else {\n            nodes[key] = {\n                pointCount,\n                pointDataOffset: offset,\n                pointDataLength: length,\n            };\n        }\n    }\n    return { nodes, pages };\n}\nasync function load(filename, page) {\n    const get = utils_1.Getter.create(filename);\n    return parse(await get(page.pageOffset, page.pageOffset + page.pageLength));\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Info = void 0;\nconst utils_1 = require(\"../utils\");\nconst constants_1 = require(\"./constants\");\nexports.Info = { parse };\nfunction parse(buffer) {\n    const dv = utils_1.Binary.toDataView(buffer);\n    if (dv.byteLength !== constants_1.infoLength) {\n        throw new Error(`Invalid COPC info VLR length (should be ${constants_1.infoLength}): ${dv.byteLength}`);\n    }\n    const center = [\n        dv.getFloat64(0, true),\n        dv.getFloat64(8, true),\n        dv.getFloat64(16, true),\n    ];\n    const radius = dv.getFloat64(24, true);\n    return {\n        cube: [\n            center[0] - radius,\n            center[1] - radius,\n            center[2] - radius,\n            center[0] + radius,\n            center[1] + radius,\n            center[2] + radius,\n        ],\n        spacing: dv.getFloat64(32, true),\n        rootHierarchyPage: {\n            pageOffset: (0, utils_1.parseBigInt)((0, utils_1.getBigUint64)(dv, 40, true)),\n            pageLength: (0, utils_1.parseBigInt)((0, utils_1.getBigUint64)(dv, 48, true)),\n        },\n        gpsTimeRange: [dv.getFloat64(56, true), dv.getFloat64(64, true)],\n    };\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Copc = void 0;\nconst Las = __importStar(require(\"../las\"));\nconst utils_1 = require(\"../utils\");\nconst hierarchy_1 = require(\"./hierarchy\");\nconst info_1 = require(\"./info\");\nexports.Copc = {\n    create,\n    loadHierarchyPage,\n    loadCompressedPointDataBuffer,\n    loadPointDataBuffer,\n    loadPointDataView,\n};\n/**\n * Parse the COPC header and walk VLR and EVLR metadata.\n */\nasync function create(filename) {\n    const getRemote = utils_1.Getter.create(filename);\n    // This is an optimization for the walking of VLRs - we'll grab a fixed size\n    // buffer which is larger than the LAS header, and for subsequent requests\n    // which fall within this buffer range, we can simply slice out the bytes\n    // rather than making another remote fetch.\n    const length = 65536;\n    const promise = getRemote(0, length);\n    async function get(begin, end) {\n        if (end >= length)\n            return getRemote(begin, end);\n        const head = await promise;\n        return head.slice(begin, end);\n    }\n    const header = Las.Header.parse(await get(0, Las.Constants.minHeaderLength));\n    const vlrs = await Las.Vlr.walk(get, header);\n    const infoVlr = Las.Vlr.find(vlrs, 'copc', 1);\n    if (!infoVlr)\n        throw new Error('COPC info VLR is required');\n    const info = info_1.Info.parse(await Las.Vlr.fetch(get, infoVlr));\n    let wkt;\n    const wktVlr = Las.Vlr.find(vlrs, 'LASF_Projection', 2112);\n    // There are a few corner-case possibilities here.  Although the LAS 1.4 spec\n    // says that this must be a null-terminated string, some files in the wild\n    // exist with a zero content-length.  We also want to consider the case of an\n    // empty string which *does* include null-termination as a missing SRS.\n    if (wktVlr && wktVlr.contentLength) {\n        wkt = utils_1.Binary.toCString(await Las.Vlr.fetch(get, wktVlr));\n        if (wkt === '')\n            wkt = undefined;\n    }\n    let eb = [];\n    const ebVlr = Las.Vlr.find(vlrs, 'LASF_Spec', 4);\n    if (ebVlr)\n        eb = Las.ExtraBytes.parse(await Las.Vlr.fetch(get, ebVlr));\n    return { header, vlrs, info, wkt, eb };\n}\nasync function loadHierarchyPage(filename, page) {\n    const get = utils_1.Getter.create(filename);\n    return hierarchy_1.Hierarchy.load(get, page);\n}\nasync function loadCompressedPointDataBuffer(filename, { pointDataOffset, pointDataLength }) {\n    const get = utils_1.Getter.create(filename);\n    return get(pointDataOffset, pointDataOffset + pointDataLength);\n}\nasync function loadPointDataBuffer(filename, { pointDataRecordFormat, pointDataRecordLength }, node, lazPerf) {\n    const compressed = await loadCompressedPointDataBuffer(filename, node);\n    const { pointCount } = node;\n    return Las.PointData.decompressChunk(compressed, { pointCount, pointDataRecordFormat, pointDataRecordLength }, lazPerf);\n}\nasync function loadPointDataView(filename, copc, node, { lazPerf, include } = {}) {\n    const buffer = await loadPointDataBuffer(filename, copc.header, node, lazPerf);\n    return Las.View.create(buffer, copc.header, copc.eb, include);\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Info = exports.Hierarchy = exports.Copc = exports.Constants = void 0;\nexports.Constants = __importStar(require(\"./constants\"));\nvar copc_1 = require(\"./copc\");\nObject.defineProperty(exports, \"Copc\", { enumerable: true, get: function () { return copc_1.Copc; } });\nvar hierarchy_1 = require(\"./hierarchy\");\nObject.defineProperty(exports, \"Hierarchy\", { enumerable: true, get: function () { return hierarchy_1.Hierarchy; } });\nvar info_1 = require(\"./info\");\nObject.defineProperty(exports, \"Info\", { enumerable: true, get: function () { return info_1.Info; } });\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Las = exports.Ept = void 0;\nexports.Ept = __importStar(require(\"./ept\"));\n__exportStar(require(\"./copc\"), exports);\nexports.Las = __importStar(require(\"./las\"));\n__exportStar(require(\"./utils\"), exports);\n","/**\n * Throws an `Error` with the optional `message` if `condition` is falsy\n * @note Replacement for the external assert method to reduce bundle size\n */\nexport function assert(condition, message) {\n    if (!condition) {\n        throw new Error(message || 'loader assertion failed.');\n    }\n}\n//# sourceMappingURL=assert.js.map","// Purpose: include this in your module to avoid\n// dependencies on micro modules like 'global' and 'is-browser';\n/* eslint-disable no-restricted-globals */\nconst globals = {\n    self: typeof self !== 'undefined' && self,\n    window: typeof window !== 'undefined' && window,\n    global: typeof global !== 'undefined' && global,\n    document: typeof document !== 'undefined' && document\n};\nconst self_ = globals.self || globals.window || globals.global || {};\nconst window_ = globals.window || globals.self || globals.global || {};\nconst global_ = globals.global || globals.self || globals.window || {};\nconst document_ = globals.document || {};\nexport { self_ as self, window_ as window, global_ as global, document_ as document };\n/** true if running in a browser */\nexport const isBrowser = \n// @ts-ignore process does not exist on browser\nBoolean(typeof process !== 'object' || String(process) !== '[object process]' || process.browser);\n/** true if running in a worker thread */\nexport const isWorker = typeof importScripts === 'function';\n// Extract node major version\nconst matches = typeof process !== 'undefined' && process.version && /v([0-9]*)/.exec(process.version);\n/** Major Node version (as a number) */\nexport const nodeVersion = (matches && parseFloat(matches[1])) || 0;\n//# sourceMappingURL=globals.js.map","// Do not name these variables the same as the global objects - will break bundling\nconst global_ = globalThis;\nconst window_ = globalThis;\nconst document_ = globalThis.document || {};\nconst process_ = globalThis.process || {};\nconst console_ = globalThis.console;\nconst navigator_ = globalThis.navigator || {};\nexport { global_ as global, global_ as self, window_ as window, document_ as document, process_ as process, console_ as console, navigator_ as navigator };\n//# sourceMappingURL=globals.js.map","// based on https://github.com/cheton/is-electron\n// https://github.com/electron/electron/issues/2288\n/* eslint-disable complexity */\nexport function isElectron(mockUserAgent) {\n    // Renderer process\n    // @ts-expect-error\n    if (typeof window !== 'undefined' && window.process?.type === 'renderer') {\n        return true;\n    }\n    // Main process\n    // eslint-disable-next-line\n    if (typeof process !== 'undefined' && Boolean(process.versions?.['electron'])) {\n        return true;\n    }\n    // Detect the user agent when the `nodeIntegration` option is set to true\n    const realUserAgent = typeof navigator !== 'undefined' && navigator.userAgent;\n    const userAgent = mockUserAgent || realUserAgent;\n    return Boolean(userAgent && userAgent.indexOf('Electron') >= 0);\n}\n//# sourceMappingURL=is-electron.js.map","// This function is needed in initialization stages,\n// make sure it can be imported in isolation\nimport { isElectron } from \"./is-electron.js\";\n/** Check if in browser by duck-typing Node context */\nexport function isBrowser() {\n    const isNode = \n    // @ts-expect-error\n    typeof process === 'object' && String(process) === '[object process]' && !process?.browser;\n    return !isNode || isElectron();\n}\n//# sourceMappingURL=is-browser.js.map","// Extract injected version from package.json (injected by babel plugin)\n// @ts-expect-error\nexport const VERSION = typeof \"4.1.1\" !== 'undefined' ? \"4.1.1\" : 'untranspiled source';\n// ENVIRONMENT\nexport { self, window, global, document, process, console } from \"./lib/globals.js\";\nexport { isBrowser } from \"./lib/is-browser.js\";\nexport { getBrowser, isMobile } from \"./lib/get-browser.js\";\nexport { isElectron } from \"./lib/is-electron.js\";\n// ENVIRONMENT'S ASSERT IS 5-15KB, SO WE PROVIDE OUR OWN\nexport { assert } from \"./utils/assert.js\";\n// TODO - wish we could just export a constant\n// export const isBrowser = checkIfBrowser();\n//# sourceMappingURL=index.js.map","export default function assert(condition, message) {\n    if (!condition) {\n        throw new Error(message || 'Assertion failed');\n    }\n}\n//# sourceMappingURL=assert.js.map","// probe.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport assert from \"../utils/assert.js\";\n/**\n * Get logLevel from first argument:\n * - log(logLevel, message, args) => logLevel\n * - log(message, args) => 0\n * - log({logLevel, ...}, message, args) => logLevel\n * - log({logLevel, message, args}) => logLevel\n */\nexport function normalizeLogLevel(logLevel) {\n    if (!logLevel) {\n        return 0;\n    }\n    let resolvedLevel;\n    switch (typeof logLevel) {\n        case 'number':\n            resolvedLevel = logLevel;\n            break;\n        case 'object':\n            // Backward compatibility\n            // TODO - deprecate `priority`\n            // @ts-expect-error\n            resolvedLevel = logLevel.logLevel || logLevel.priority || 0;\n            break;\n        default:\n            return 0;\n    }\n    // 'log level must be a number'\n    assert(Number.isFinite(resolvedLevel) && resolvedLevel >= 0);\n    return resolvedLevel;\n}\n/**\n * \"Normalizes\" the various argument patterns into an object with known types\n * - log(logLevel, message, args) => {logLevel, message, args}\n * - log(message, args) => {logLevel: 0, message, args}\n * - log({logLevel, ...}, message, args) => {logLevel, message, args}\n * - log({logLevel, message, args}) => {logLevel, message, args}\n */\nexport function normalizeArguments(opts) {\n    const { logLevel, message } = opts;\n    opts.logLevel = normalizeLogLevel(logLevel);\n    // We use `arguments` instead of rest parameters (...args) because IE\n    // does not support the syntax. Rest parameters is transpiled to code with\n    // perf impact. Doing it here instead avoids constructing args when logging is\n    // disabled.\n    // TODO - remove when/if IE support is dropped\n    const args = opts.args ? Array.from(opts.args) : [];\n    // args should only contain arguments that appear after `message`\n    // eslint-disable-next-line no-empty\n    while (args.length && args.shift() !== message) { }\n    switch (typeof logLevel) {\n        case 'string':\n        case 'function':\n            if (message !== undefined) {\n                args.unshift(message);\n            }\n            opts.message = logLevel;\n            break;\n        case 'object':\n            Object.assign(opts, logLevel);\n            break;\n        default:\n    }\n    // Resolve functions into strings by calling them\n    if (typeof opts.message === 'function') {\n        opts.message = opts.message();\n    }\n    const messageType = typeof opts.message;\n    // 'log message must be a string' or object\n    assert(messageType === 'string' || messageType === 'object');\n    // original opts + normalized opts + opts arg + fixed up message\n    return Object.assign(opts, { args }, opts.opts);\n}\n//# sourceMappingURL=log-utils.js.map","// probe.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { normalizeArguments, normalizeLogLevel } from \"./log-utils.js\";\nconst noop = () => { };\n/**\n * Base logger that implements log level handling and once de-duplication.\n * Concrete loggers implement `_emit` to perform actual output.\n */\nexport class BaseLog {\n    constructor({ level = 0 } = {}) {\n        this.userData = {};\n        this._onceCache = new Set();\n        this._level = level;\n    }\n    set level(newLevel) {\n        this.setLevel(newLevel);\n    }\n    get level() {\n        return this.getLevel();\n    }\n    setLevel(level) {\n        this._level = level;\n        return this;\n    }\n    getLevel() {\n        return this._level;\n    }\n    // Unconditional logging\n    warn(message, ...args) {\n        return this._log('warn', 0, message, args, { once: true });\n    }\n    error(message, ...args) {\n        return this._log('error', 0, message, args);\n    }\n    // Conditional logging\n    log(logLevel, message, ...args) {\n        return this._log('log', logLevel, message, args);\n    }\n    info(logLevel, message, ...args) {\n        return this._log('info', logLevel, message, args);\n    }\n    once(logLevel, message, ...args) {\n        return this._log('once', logLevel, message, args, { once: true });\n    }\n    _log(type, logLevel, message, args, options = {}) {\n        const normalized = normalizeArguments({\n            logLevel,\n            message,\n            args: this._buildArgs(logLevel, message, args),\n            opts: options\n        });\n        return this._createLogFunction(type, normalized, options);\n    }\n    _buildArgs(logLevel, message, args) {\n        return [logLevel, message, ...args];\n    }\n    _createLogFunction(type, normalized, options) {\n        if (!this._shouldLog(normalized.logLevel)) {\n            return noop;\n        }\n        const tag = this._getOnceTag(options.tag ?? normalized.tag ?? normalized.message);\n        if ((options.once || normalized.once) && tag !== undefined) {\n            if (this._onceCache.has(tag)) {\n                return noop;\n            }\n            this._onceCache.add(tag);\n        }\n        return this._emit(type, normalized);\n    }\n    _shouldLog(logLevel) {\n        return this.getLevel() >= normalizeLogLevel(logLevel);\n    }\n    _getOnceTag(tag) {\n        if (tag === undefined) {\n            return undefined;\n        }\n        try {\n            return typeof tag === 'string' ? tag : String(tag);\n        }\n        catch {\n            return undefined;\n        }\n    }\n}\nexport { noop };\n//# sourceMappingURL=base-log.js.map","// probe.gl, MIT license\nfunction getStorage(type) {\n    try {\n        const storage = window[type];\n        const x = '__storage_test__';\n        storage.setItem(x, x);\n        storage.removeItem(x);\n        return storage;\n    }\n    catch (e) {\n        return null;\n    }\n}\n// Store keys in local storage via simple interface\nexport class LocalStorage {\n    constructor(id, defaultConfig, type = 'sessionStorage') {\n        this.storage = getStorage(type);\n        this.id = id;\n        this.config = defaultConfig;\n        this._loadConfiguration();\n    }\n    getConfiguration() {\n        return this.config;\n    }\n    setConfiguration(configuration) {\n        Object.assign(this.config, configuration);\n        if (this.storage) {\n            const serialized = JSON.stringify(this.config);\n            this.storage.setItem(this.id, serialized);\n        }\n    }\n    // Get config from persistent store, if available\n    _loadConfiguration() {\n        let configuration = {};\n        if (this.storage) {\n            const serializedConfiguration = this.storage.getItem(this.id);\n            configuration = serializedConfiguration ? JSON.parse(serializedConfiguration) : {};\n        }\n        Object.assign(this.config, configuration);\n        return this;\n    }\n}\n//# sourceMappingURL=local-storage.js.map","// probe.gl, MIT license\n/**\n * Format time\n */\nexport function formatTime(ms) {\n    let formatted;\n    if (ms < 10) {\n        formatted = `${ms.toFixed(2)}ms`;\n    }\n    else if (ms < 100) {\n        formatted = `${ms.toFixed(1)}ms`;\n    }\n    else if (ms < 1000) {\n        formatted = `${ms.toFixed(0)}ms`;\n    }\n    else {\n        formatted = `${(ms / 1000).toFixed(2)}s`;\n    }\n    return formatted;\n}\nexport function leftPad(string, length = 8) {\n    const padLength = Math.max(length - string.length, 0);\n    return `${' '.repeat(padLength)}${string}`;\n}\nexport function rightPad(string, length = 8) {\n    const padLength = Math.max(length - string.length, 0);\n    return `${string}${' '.repeat(padLength)}`;\n}\nexport function formatValue(v, options = {}) {\n    const EPSILON = 1e-16;\n    const { isInteger = false } = options;\n    if (Array.isArray(v) || ArrayBuffer.isView(v)) {\n        return formatArrayValue(v, options);\n    }\n    if (!Number.isFinite(v)) {\n        return String(v);\n    }\n    // @ts-expect-error\n    if (Math.abs(v) < EPSILON) {\n        return isInteger ? '0' : '0.';\n    }\n    if (isInteger) {\n        // @ts-expect-error\n        return v.toFixed(0);\n    }\n    // @ts-expect-error\n    if (Math.abs(v) > 100 && Math.abs(v) < 10000) {\n        // @ts-expect-error\n        return v.toFixed(0);\n    }\n    // @ts-expect-error\n    const string = v.toPrecision(2);\n    const decimal = string.indexOf('.0');\n    return decimal === string.length - 2 ? string.slice(0, -1) : string;\n}\n/** Helper to formatValue */\nfunction formatArrayValue(v, options) {\n    const { maxElts = 16, size = 1 } = options;\n    let string = '[';\n    for (let i = 0; i < v.length && i < maxElts; ++i) {\n        if (i > 0) {\n            string += `,${i % size === 0 ? ' ' : ''}`;\n        }\n        string += formatValue(v[i], options);\n    }\n    const terminator = v.length > maxElts ? '...' : ']';\n    return `${string}${terminator}`;\n}\n//# sourceMappingURL=formatters.js.map","import { isBrowser } from '@probe.gl/env';\nexport var COLOR;\n(function (COLOR) {\n    COLOR[COLOR[\"BLACK\"] = 30] = \"BLACK\";\n    COLOR[COLOR[\"RED\"] = 31] = \"RED\";\n    COLOR[COLOR[\"GREEN\"] = 32] = \"GREEN\";\n    COLOR[COLOR[\"YELLOW\"] = 33] = \"YELLOW\";\n    COLOR[COLOR[\"BLUE\"] = 34] = \"BLUE\";\n    COLOR[COLOR[\"MAGENTA\"] = 35] = \"MAGENTA\";\n    COLOR[COLOR[\"CYAN\"] = 36] = \"CYAN\";\n    COLOR[COLOR[\"WHITE\"] = 37] = \"WHITE\";\n    COLOR[COLOR[\"BRIGHT_BLACK\"] = 90] = \"BRIGHT_BLACK\";\n    COLOR[COLOR[\"BRIGHT_RED\"] = 91] = \"BRIGHT_RED\";\n    COLOR[COLOR[\"BRIGHT_GREEN\"] = 92] = \"BRIGHT_GREEN\";\n    COLOR[COLOR[\"BRIGHT_YELLOW\"] = 93] = \"BRIGHT_YELLOW\";\n    COLOR[COLOR[\"BRIGHT_BLUE\"] = 94] = \"BRIGHT_BLUE\";\n    COLOR[COLOR[\"BRIGHT_MAGENTA\"] = 95] = \"BRIGHT_MAGENTA\";\n    COLOR[COLOR[\"BRIGHT_CYAN\"] = 96] = \"BRIGHT_CYAN\";\n    COLOR[COLOR[\"BRIGHT_WHITE\"] = 97] = \"BRIGHT_WHITE\";\n})(COLOR || (COLOR = {}));\nconst BACKGROUND_INCREMENT = 10;\nfunction getColor(color) {\n    if (typeof color !== 'string') {\n        return color;\n    }\n    color = color.toUpperCase();\n    return COLOR[color] || COLOR.WHITE;\n}\nexport function addColor(string, color, background) {\n    if (!isBrowser && typeof string === 'string') {\n        if (color) {\n            const colorCode = getColor(color);\n            string = `\\u001b[${colorCode}m${string}\\u001b[39m`;\n        }\n        if (background) {\n            // background colors values are +10\n            const colorCode = getColor(background);\n            string = `\\u001b[${colorCode + BACKGROUND_INCREMENT}m${string}\\u001b[49m`;\n        }\n    }\n    return string;\n}\n//# sourceMappingURL=color.js.map","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n/**\n * Binds the \"this\" argument of all functions on a class instance to the instance\n * @param obj - class instance (typically a react component)\n */\nexport function autobind(obj, predefined = ['constructor']) {\n    const proto = Object.getPrototypeOf(obj);\n    const propNames = Object.getOwnPropertyNames(proto);\n    const object = obj;\n    for (const key of propNames) {\n        const value = object[key];\n        if (typeof value === 'function') {\n            if (!predefined.find((name) => key === name)) {\n                object[key] = value.bind(obj);\n            }\n        }\n    }\n}\n//# sourceMappingURL=autobind.js.map","// probe.gl, MIT license\nimport { window, process, isBrowser } from '@probe.gl/env';\n/** Get best timer available. */\nexport function getHiResTimestamp() {\n    let timestamp;\n    if (isBrowser() && window.performance) {\n        timestamp = window?.performance?.now?.();\n    }\n    else if ('hrtime' in process) {\n        // @ts-ignore\n        const timeParts = process?.hrtime?.();\n        timestamp = timeParts[0] * 1000 + timeParts[1] / 1e6;\n    }\n    else {\n        timestamp = Date.now();\n    }\n    return timestamp;\n}\n//# sourceMappingURL=hi-res-timestamp.js.map","// probe.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/* eslint-disable no-console,prefer-rest-params */\nimport { VERSION, isBrowser } from '@probe.gl/env';\nimport { BaseLog, noop } from \"./base-log.js\";\nimport { LocalStorage } from \"../utils/local-storage.js\";\nimport { formatTime, leftPad } from \"../utils/formatters.js\";\nimport { addColor } from \"../utils/color.js\";\nimport { autobind } from \"../utils/autobind.js\";\nimport assert from \"../utils/assert.js\";\nimport { getHiResTimestamp } from \"../utils/hi-res-timestamp.js\";\n// Instrumentation in other packages may override console methods, so preserve them here\nconst originalConsole = {\n    debug: isBrowser() ? console.debug || console.log : console.log,\n    log: console.log,\n    info: console.info,\n    warn: console.warn,\n    error: console.error\n};\nconst DEFAULT_LOG_CONFIGURATION = {\n    enabled: true,\n    level: 0\n};\n/** A console wrapper */\nexport class ProbeLog extends BaseLog {\n    constructor({ id } = { id: '' }) {\n        super({ level: 0 });\n        this.VERSION = VERSION;\n        this._startTs = getHiResTimestamp();\n        this._deltaTs = getHiResTimestamp();\n        this.userData = {};\n        // TODO - fix support from throttling groups\n        this.LOG_THROTTLE_TIMEOUT = 0; // Time before throttled messages are logged again\n        this.id = id;\n        this.userData = {};\n        this._storage = new LocalStorage(`__probe-${this.id}__`, { [this.id]: DEFAULT_LOG_CONFIGURATION });\n        this.timeStamp(`${this.id} started`);\n        autobind(this);\n        Object.seal(this);\n    }\n    isEnabled() {\n        return this._getConfiguration().enabled;\n    }\n    getLevel() {\n        return this._getConfiguration().level;\n    }\n    /** @return milliseconds, with fractions */\n    getTotal() {\n        return Number((getHiResTimestamp() - this._startTs).toPrecision(10));\n    }\n    /** @return milliseconds, with fractions */\n    getDelta() {\n        return Number((getHiResTimestamp() - this._deltaTs).toPrecision(10));\n    }\n    /** @deprecated use logLevel */\n    set priority(newPriority) {\n        this.level = newPriority;\n    }\n    /** @deprecated use logLevel */\n    get priority() {\n        return this.level;\n    }\n    /** @deprecated use logLevel */\n    getPriority() {\n        return this.level;\n    }\n    // Configure\n    enable(enabled = true) {\n        this._updateConfiguration({ enabled });\n        return this;\n    }\n    setLevel(level) {\n        this._updateConfiguration({ level });\n        return this;\n    }\n    /** return the current status of the setting */\n    get(setting) {\n        return this._getConfiguration()[setting];\n    }\n    // update the status of the setting\n    set(setting, value) {\n        this._updateConfiguration({ [setting]: value });\n    }\n    /** Logs the current settings as a table */\n    settings() {\n        if (console.table) {\n            console.table(this._storage.config);\n        }\n        else {\n            console.log(this._storage.config);\n        }\n    }\n    // Unconditional logging\n    assert(condition, message) {\n        if (!condition) {\n            throw new Error(message || 'Assertion failed');\n        }\n    }\n    warn(message, ...args) {\n        return this._log('warn', 0, message, args, {\n            method: originalConsole.warn,\n            once: true\n        });\n    }\n    error(message, ...args) {\n        return this._log('error', 0, message, args, {\n            method: originalConsole.error\n        });\n    }\n    /** Print a deprecation warning */\n    deprecated(oldUsage, newUsage) {\n        return this.warn(`\\`${oldUsage}\\` is deprecated and will be removed \\\nin a later version. Use \\`${newUsage}\\` instead`);\n    }\n    /** Print a removal warning */\n    removed(oldUsage, newUsage) {\n        return this.error(`\\`${oldUsage}\\` has been removed. Use \\`${newUsage}\\` instead`);\n    }\n    probe(logLevel, message, ...args) {\n        return this._log('log', logLevel, message, args, {\n            method: originalConsole.log,\n            time: true,\n            once: true\n        });\n    }\n    log(logLevel, message, ...args) {\n        return this._log('log', logLevel, message, args, {\n            method: originalConsole.debug\n        });\n    }\n    info(logLevel, message, ...args) {\n        return this._log('info', logLevel, message, args, { method: console.info });\n    }\n    once(logLevel, message, ...args) {\n        return this._log('once', logLevel, message, args, {\n            method: originalConsole.debug || originalConsole.info,\n            once: true\n        });\n    }\n    /** Logs an object as a table */\n    table(logLevel, table, columns) {\n        if (table) {\n            return this._log('table', logLevel, table, (columns && [columns]) || [], {\n                method: console.table || noop,\n                tag: getTableHeader(table)\n            });\n        }\n        return noop;\n    }\n    time(logLevel, message) {\n        return this._log('time', logLevel, message, [], {\n            method: console.time ? console.time : console.info\n        });\n    }\n    timeEnd(logLevel, message) {\n        return this._log('time', logLevel, message, [], {\n            method: console.timeEnd ? console.timeEnd : console.info\n        });\n    }\n    timeStamp(logLevel, message) {\n        return this._log('time', logLevel, message, [], {\n            method: console.timeStamp || noop\n        });\n    }\n    group(logLevel, message, opts = { collapsed: false }) {\n        const method = (opts.collapsed ? console.groupCollapsed : console.group) || console.info;\n        return this._log('group', logLevel, message, [], { method });\n    }\n    groupCollapsed(logLevel, message, opts = {}) {\n        return this.group(logLevel, message, Object.assign({}, opts, { collapsed: true }));\n    }\n    groupEnd(logLevel) {\n        return this._log('groupEnd', logLevel, '', [], {\n            method: console.groupEnd || noop\n        });\n    }\n    // EXPERIMENTAL\n    withGroup(logLevel, message, func) {\n        this.group(logLevel, message)();\n        try {\n            func();\n        }\n        finally {\n            this.groupEnd(logLevel)();\n        }\n    }\n    trace() {\n        if (console.trace) {\n            console.trace();\n        }\n    }\n    _shouldLog(logLevel) {\n        return this.isEnabled() && super._shouldLog(logLevel);\n    }\n    _emit(_type, normalized) {\n        const method = normalized.method;\n        assert(method);\n        normalized.total = this.getTotal();\n        normalized.delta = this.getDelta();\n        // reset delta timer\n        this._deltaTs = getHiResTimestamp();\n        const message = decorateMessage(this.id, normalized.message, normalized);\n        // Bind console function so that it can be called after being returned\n        return method.bind(console, message, ...normalized.args);\n    }\n    _getConfiguration() {\n        if (!this._storage.config[this.id]) {\n            this._updateConfiguration(DEFAULT_LOG_CONFIGURATION);\n        }\n        // @ts-expect-error guaranteed to be defined\n        return this._storage.config[this.id];\n    }\n    _updateConfiguration(configuration) {\n        const currentConfiguration = this._storage.config[this.id] || {\n            ...DEFAULT_LOG_CONFIGURATION\n        };\n        this._storage.setConfiguration({\n            [this.id]: { ...currentConfiguration, ...configuration }\n        });\n    }\n}\nProbeLog.VERSION = VERSION;\nfunction decorateMessage(id, message, opts) {\n    if (typeof message === 'string') {\n        const time = opts.time ? leftPad(formatTime(opts.total)) : '';\n        message = opts.time ? `${id}: ${time}  ${message}` : `${id}: ${message}`;\n        message = addColor(message, opts.color, opts.background);\n    }\n    return message;\n}\nfunction getTableHeader(table) {\n    for (const key in table) {\n        for (const title in table[key]) {\n            return title || 'untitled';\n        }\n    }\n    return 'empty';\n}\nexport { normalizeArguments } from \"./log-utils.js\";\nexport { normalizeLogLevel } from \"./log-utils.js\";\n//# sourceMappingURL=probe-log.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Log } from '@probe.gl/log';\n// Version constant cannot be imported, it needs to correspond to the build version of **this** module.\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nexport const VERSION = typeof \"4.4.2\" !== 'undefined' ? \"4.4.2\" : 'latest';\nconst version = VERSION[0] >= '0' && VERSION[0] <= '9' ? `v${VERSION}` : '';\n// Make sure we set the global variable\nfunction createLog() {\n    const log = new Log({ id: 'loaders.gl' });\n    globalThis.loaders ||= {};\n    globalThis.loaders.log = log;\n    globalThis.loaders.version = version;\n    globalThis.probe ||= {};\n    globalThis.probe.loaders = log;\n    return log;\n}\nexport const log = createLog();\n//# sourceMappingURL=log.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/** Checks whether a value is a boolean */\nconst isBoolean = (value) => typeof value === 'boolean';\n/** Checks whether a value is a function */\nconst isFunction = (value) => typeof value === 'function';\n/** Checks whether a value is a non-null object */\nexport const isObject = (value) => value !== null && typeof value === 'object';\n/** Checks whether a value is a plain object (created by the Object constructor) */\nexport const isPureObject = (value) => isObject(value) && value.constructor === {}.constructor;\n/** Checks whether a value is an ArrayBuffer */\nexport const isArrayBuffer = (value) => typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer;\n/** Checks whether a value is an ArrayBuffer */\nexport const isSharedArrayBuffer = (value) => typeof SharedArrayBuffer !== 'undefined' && value instanceof SharedArrayBuffer;\n/** Checks whether a value is ArrayBuffer-like */\nexport const isArrayBufferLike = (value) => isObject(value) &&\n    typeof value.byteLength === 'number' &&\n    typeof value.slice === 'function';\n/** Checks whether a value behaves like a promise */\nexport const isPromise = (value) => isObject(value) && 'then' in value && isFunction(value.then);\n/** Checks whether a value implements the iterable protocol */\nexport const isIterable = (value) => Boolean(value) && isFunction(value[Symbol.iterator]);\n/** Checks whether a value implements the async iterable protocol */\nexport const isAsyncIterable = (value) => Boolean(value) && isFunction(value[Symbol.asyncIterator]);\n/** Checks whether a value is an iterator (has a next function) */\nexport const isIterator = (value) => Boolean(value) && isFunction(value.next);\n/** Checks whether a value is a fetch Response or a duck-typed equivalent */\nexport const isResponse = (value) => (typeof Response !== 'undefined' && value instanceof Response) ||\n    (isObject(value) &&\n        isFunction(value.arrayBuffer) &&\n        isFunction(value.text) &&\n        isFunction(value.json));\n/** Checks whether a value is a File */\nexport const isFile = (value) => typeof File !== 'undefined' && value instanceof File;\n/** Checks whether a value is a Blob */\nexport const isBlob = (value) => typeof Blob !== 'undefined' && value instanceof Blob;\n/** Checks for Node.js Buffers without triggering bundlers to include the Buffer polyfill */\nexport const isBuffer = (value) => Boolean(value &&\n    typeof value === 'object' &&\n    value.isBuffer &&\n    'buffer' in value);\n/** Checks whether a value looks like a DOM WritableStream */\nexport const isWritableDOMStream = (value) => isObject(value) &&\n    isFunction(value.abort) &&\n    isFunction(value.getWriter);\n/** Checks whether a value looks like a DOM ReadableStream */\nexport const isReadableDOMStream = (value) => (typeof ReadableStream !== 'undefined' && value instanceof ReadableStream) ||\n    (isObject(value) &&\n        isFunction(value.tee) &&\n        isFunction(value.cancel) &&\n        isFunction(value.getReader));\n// Not implemented in Firefox: && isFunction(x.pipeTo)\n/** Checks whether a value looks like a Node.js writable stream */\nexport const isWritableNodeStream = (value) => isObject(value) &&\n    isFunction(value.end) &&\n    isFunction(value.write) &&\n    isBoolean(value.writable);\n/** Checks whether a value looks like a Node.js readable stream */\nexport const isReadableNodeStream = (value) => isObject(value) &&\n    isFunction(value.read) &&\n    isFunction(value.pipe) &&\n    isBoolean(value.readable);\n/** Checks whether a value is any readable stream (DOM or Node.js) */\nexport const isReadableStream = (value) => isReadableDOMStream(value) || isReadableNodeStream(value);\n/** Checks whether a value is any writable stream (DOM or Node.js) */\nexport const isWritableStream = (value) => isWritableDOMStream(value) || isWritableNodeStream(value);\n//# sourceMappingURL=is-type.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport function getRequiredOptions(options) {\n    return options;\n}\n/**\n *\n * @param baseOptions Can be undefined, in which case a fresh options object will be minted\n * @param newOptions\n * @returns\n */\nexport function mergeOptions(baseOptions, newOptions) {\n    return mergeOptionsRecursively(baseOptions || {}, newOptions);\n}\nfunction mergeOptionsRecursively(baseOptions, newOptions, level = 0) {\n    // Sanity check (jest test runner overwrites the console object which can lead to infinite recursion)\n    if (level > 3) {\n        return newOptions;\n    }\n    const options = { ...baseOptions };\n    for (const [key, newValue] of Object.entries(newOptions)) {\n        if (newValue && typeof newValue === 'object' && !Array.isArray(newValue)) {\n            options[key] = mergeOptionsRecursively(options[key] || {}, newOptions[key], level + 1);\n            // Object.assign(options[key] as object, newOptions[key]);\n        }\n        else {\n            options[key] = newOptions[key];\n        }\n    }\n    return options;\n}\n//# sourceMappingURL=merge-options.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/**\n * NPM tag to use when loading modules from unpkg.com\n * 'beta' on beta branch, 'latest' on prod branch\n * @note Change between 'beta' and 'latest' depending on whether publishing alpha or prod releases\n * @todo - unpkg.com doesn't seem to have a `latest` specifier for alpha releases...\n */\nexport const NPM_TAG = 'latest';\n//# sourceMappingURL=npm-tag.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { NPM_TAG } from \"../npm-tag.js\";\nlet warningIssued = false;\nfunction getVersion() {\n    if (!globalThis._loadersgl_?.version) {\n        globalThis._loadersgl_ = globalThis._loadersgl_ || {};\n        // __VERSION__ is injected by babel-plugin-version-inline\n        if (typeof \"4.4.2\" === 'undefined' && !warningIssued) {\n            // eslint-disable-next-line\n            console.warn('loaders.gl: The __VERSION__ variable is not injected using babel plugin. Latest unstable workers would be fetched from the CDN.');\n            globalThis._loadersgl_.version = NPM_TAG;\n            warningIssued = true;\n        }\n        else {\n            globalThis._loadersgl_.version = \"4.4.2\";\n        }\n    }\n    return globalThis._loadersgl_.version;\n}\nexport const VERSION = getVersion();\n//# sourceMappingURL=version.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Replacement for the external assert method to reduce bundle size\n// Note: We don't use the second \"message\" argument in calling code,\n// so no need to support it here\n/** Throws an `Error` with the optional `message` if `condition` is falsy */\nexport function assert(condition, message) {\n    if (!condition) {\n        throw new Error(message || 'loaders.gl assertion failed.');\n    }\n}\n//# sourceMappingURL=assert.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Purpose: include this in your module to avoids adding dependencies on\n// micro modules like 'global' and 'is-browser';\n/* eslint-disable no-restricted-globals */\nconst globals = {\n    self: typeof self !== 'undefined' && self,\n    window: typeof window !== 'undefined' && window,\n    global: typeof global !== 'undefined' && global,\n    document: typeof document !== 'undefined' && document\n};\nconst self_ = globals.self || globals.window || globals.global || {};\nconst window_ = globals.window || globals.self || globals.global || {};\nconst global_ = globals.global || globals.self || globals.window || {};\nconst document_ = globals.document || {};\nexport { self_ as self, window_ as window, global_ as global, document_ as document };\n/** true if running in the browser, false if running in Node.js */\nexport const isBrowser = \n// @ts-ignore process.browser\ntypeof process !== 'object' || String(process) !== '[object process]' || process.browser;\n/** true if running on a worker thread */\nexport const isWorker = typeof importScripts === 'function';\n/** true if running on a mobile device */\nexport const isMobile = typeof window !== 'undefined' && typeof window.orientation !== 'undefined';\n// Extract node major version\nconst matches = typeof process !== 'undefined' && process.version && /v([0-9]*)/.exec(process.version);\n/** Version of Node.js if running under Node, otherwise 0 */\nexport const nodeVersion = (matches && parseFloat(matches[1])) || 0;\n//# sourceMappingURL=globals.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { assert } from \"../env-utils/assert.js\";\n/**\n * Represents one Job handled by a WorkerPool or WorkerFarm\n */\nexport default class WorkerJob {\n    name;\n    workerThread;\n    isRunning = true;\n    /** Promise that resolves when Job is done */\n    result;\n    _resolve = () => { };\n    _reject = () => { };\n    constructor(jobName, workerThread) {\n        this.name = jobName;\n        this.workerThread = workerThread;\n        this.result = new Promise((resolve, reject) => {\n            this._resolve = resolve;\n            this._reject = reject;\n        });\n    }\n    /**\n     * Send a message to the job's worker thread\n     * @param data any data structure, ideally consisting mostly of transferrable objects\n     */\n    postMessage(type, payload) {\n        this.workerThread.postMessage({\n            source: 'loaders.gl', // Lets worker ignore unrelated messages\n            type,\n            payload\n        });\n    }\n    /**\n     * Call to resolve the `result` Promise with the supplied value\n     */\n    done(value) {\n        assert(this.isRunning);\n        this.isRunning = false;\n        this._resolve(value);\n    }\n    /**\n     * Call to reject the `result` Promise with the supplied error\n     */\n    error(error) {\n        assert(this.isRunning);\n        this.isRunning = false;\n        this._reject(error);\n    }\n}\n//# sourceMappingURL=worker-job.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/** Browser polyfill for Node.js built-in `worker_threads` module.\n * These fills are non-functional, and just intended to ensure that\n * `import 'worker_threads` doesn't break browser builds.\n * The replacement is done in package.json browser field\n */\nexport class NodeWorker {\n    terminate() { }\n}\nexport const parentPort = null;\n//# sourceMappingURL=worker_threads-browser.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { assert } from \"../env-utils/assert.js\";\nconst workerURLCache = new Map();\n/**\n * Creates a loadable URL from worker source or URL\n * that can be used to create `Worker` instances.\n * Due to CORS issues it may be necessary to wrap a URL in a small importScripts\n * @param props\n * @param props.source Worker source\n * @param props.url Worker URL\n * @returns loadable url\n */\nexport function getLoadableWorkerURL(props) {\n    assert((props.source && !props.url) || (!props.source && props.url)); // Either source or url must be defined\n    let workerURL = workerURLCache.get(props.source || props.url);\n    if (!workerURL) {\n        // Differentiate worker urls from worker source code\n        if (props.url) {\n            workerURL = getLoadableWorkerURLFromURL(props.url);\n            workerURLCache.set(props.url, workerURL);\n        }\n        if (props.source) {\n            workerURL = getLoadableWorkerURLFromSource(props.source);\n            workerURLCache.set(props.source, workerURL);\n        }\n    }\n    assert(workerURL);\n    return workerURL;\n}\n/**\n * Build a loadable worker URL from worker URL\n * @param url\n * @returns loadable URL\n */\nfunction getLoadableWorkerURLFromURL(url) {\n    // A local script url, we can use it to initialize a Worker directly\n    if (!url.startsWith('http')) {\n        return url;\n    }\n    // A remote script, we need to use `importScripts` to load from different origin\n    const workerSource = buildScriptSource(url);\n    return getLoadableWorkerURLFromSource(workerSource);\n}\n/**\n * Build a loadable worker URL from worker source\n * @param workerSource\n * @returns loadable url\n */\nfunction getLoadableWorkerURLFromSource(workerSource) {\n    const blob = new Blob([workerSource], { type: 'application/javascript' });\n    return URL.createObjectURL(blob);\n}\n/**\n * Per spec, worker cannot be initialized with a script from a different origin\n * However a local worker script can still import scripts from other origins,\n * so we simply build a wrapper script.\n *\n * @param workerUrl\n * @returns source\n */\nfunction buildScriptSource(workerUrl) {\n    return `\\\ntry {\n  importScripts('${workerUrl}');\n} catch (error) {\n  console.error(error);\n  throw error;\n}`;\n}\n//# sourceMappingURL=get-loadable-worker-url.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// NOTE - there is a copy of this function is both in core and loader-utils\n// core does not need all the utils in loader-utils, just this one.\n/**\n * Returns an array of Transferrable objects that can be used with postMessage\n * https://developer.mozilla.org/en-US/docs/Web/API/Worker/postMessage\n * @param object data to be sent via postMessage\n * @param recursive - not for application use\n * @param transfers - not for application use\n * @returns a transfer list that can be passed to postMessage\n */\nexport function getTransferList(object, recursive = true, transfers) {\n    // Make sure that items in the transfer list is unique\n    const transfersSet = transfers || new Set();\n    if (!object) {\n        // ignore\n    }\n    else if (isTransferable(object)) {\n        transfersSet.add(object);\n    }\n    else if (isTransferable(object.buffer)) {\n        // Typed array\n        transfersSet.add(object.buffer);\n    }\n    else if (ArrayBuffer.isView(object)) {\n        // object is a TypeArray viewing into a SharedArrayBuffer (not transferable)\n        // Do not iterate through the content in this case\n    }\n    else if (recursive && typeof object === 'object') {\n        for (const key in object) {\n            // Avoid perf hit - only go one level deep\n            getTransferList(object[key], recursive, transfersSet);\n        }\n    }\n    // If transfers is defined, is internal recursive call\n    // Otherwise it's called by the user\n    return transfers === undefined ? Array.from(transfersSet) : [];\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/Transferable\nfunction isTransferable(object) {\n    if (!object) {\n        return false;\n    }\n    if (object instanceof ArrayBuffer) {\n        return true;\n    }\n    if (typeof MessagePort !== 'undefined' && object instanceof MessagePort) {\n        return true;\n    }\n    if (typeof ImageBitmap !== 'undefined' && object instanceof ImageBitmap) {\n        return true;\n    }\n    // @ts-ignore\n    if (typeof OffscreenCanvas !== 'undefined' && object instanceof OffscreenCanvas) {\n        return true;\n    }\n    return false;\n}\n/**\n * Recursively drop non serializable values like functions and regexps.\n * @param object\n */\nexport function getTransferListForWriter(object) {\n    if (object === null) {\n        return {};\n    }\n    const clone = Object.assign({}, object);\n    Object.keys(clone).forEach((key) => {\n        // Typed Arrays and Arrays are passed with no change\n        if (typeof object[key] === 'object' &&\n            !ArrayBuffer.isView(object[key]) &&\n            !(object[key] instanceof Array)) {\n            clone[key] = getTransferListForWriter(object[key]);\n        }\n        else if (typeof clone[key] === 'function' || clone[key] instanceof RegExp) {\n            clone[key] = {};\n        }\n        else {\n            clone[key] = object[key];\n        }\n    });\n    return clone;\n}\n//# sourceMappingURL=get-transfer-list.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { NodeWorker } from \"../node/worker_threads.js\";\nimport { isBrowser } from \"../env-utils/globals.js\";\nimport { assert } from \"../env-utils/assert.js\";\nimport { getLoadableWorkerURL } from \"../worker-utils/get-loadable-worker-url.js\";\nimport { getTransferList } from \"../worker-utils/get-transfer-list.js\";\nconst NOOP = () => { };\n/**\n * Represents one worker thread\n */\nexport default class WorkerThread {\n    name;\n    source;\n    url;\n    terminated = false;\n    worker;\n    onMessage;\n    onError;\n    _loadableURL = '';\n    /** Checks if workers are supported on this platform */\n    static isSupported() {\n        return ((typeof Worker !== 'undefined' && isBrowser) ||\n            (typeof NodeWorker !== 'undefined' && !isBrowser));\n    }\n    constructor(props) {\n        const { name, source, url } = props;\n        assert(source || url); // Either source or url must be defined\n        this.name = name;\n        this.source = source;\n        this.url = url;\n        this.onMessage = NOOP;\n        this.onError = (error) => console.log(error); // eslint-disable-line\n        this.worker = isBrowser ? this._createBrowserWorker() : this._createNodeWorker();\n    }\n    /**\n     * Terminate this worker thread\n     * @note Can free up significant memory\n     */\n    destroy() {\n        this.onMessage = NOOP;\n        this.onError = NOOP;\n        this.worker.terminate(); // eslint-disable-line @typescript-eslint/no-floating-promises\n        this.terminated = true;\n    }\n    get isRunning() {\n        return Boolean(this.onMessage);\n    }\n    /**\n     * Send a message to this worker thread\n     * @param data any data structure, ideally consisting mostly of transferrable objects\n     * @param transferList If not supplied, calculated automatically by traversing data\n     */\n    postMessage(data, transferList) {\n        transferList = transferList || getTransferList(data);\n        // @ts-ignore\n        this.worker.postMessage(data, transferList);\n    }\n    // PRIVATE\n    /**\n     * Generate a standard Error from an ErrorEvent\n     * @param event\n     */\n    _getErrorFromErrorEvent(event) {\n        // Note Error object does not have the expected fields if loading failed completely\n        // https://developer.mozilla.org/en-US/docs/Web/API/Worker#Event_handlers\n        // https://developer.mozilla.org/en-US/docs/Web/API/ErrorEvent\n        let message = 'Failed to load ';\n        message += `worker ${this.name} from ${this.url}. `;\n        if (event.message) {\n            message += `${event.message} in `;\n        }\n        // const hasFilename = event.filename && !event.filename.startsWith('blob:');\n        // message += hasFilename ? event.filename : this.source.slice(0, 100);\n        if (event.lineno) {\n            message += `:${event.lineno}:${event.colno}`;\n        }\n        return new Error(message);\n    }\n    /**\n     * Creates a worker thread on the browser\n     */\n    _createBrowserWorker() {\n        this._loadableURL = getLoadableWorkerURL({ source: this.source, url: this.url });\n        const worker = new Worker(this._loadableURL, { name: this.name });\n        worker.onmessage = (event) => {\n            if (!event.data) {\n                this.onError(new Error('No data received'));\n            }\n            else {\n                this.onMessage(event.data);\n            }\n        };\n        // This callback represents an uncaught exception in the worker thread\n        worker.onerror = (error) => {\n            this.onError(this._getErrorFromErrorEvent(error));\n            this.terminated = true;\n        };\n        // TODO - not clear when this would be called, for now just log in case it happens\n        worker.onmessageerror = (event) => console.error(event); // eslint-disable-line\n        return worker;\n    }\n    /**\n     * Creates a worker thread in node.js\n     * @todo https://nodejs.org/api/async_hooks.html#async-resource-worker-pool\n     */\n    _createNodeWorker() {\n        let worker;\n        if (this.url) {\n            // Make sure relative URLs start with './'\n            const absolute = this.url.includes(':/') || this.url.startsWith('/');\n            const url = absolute ? this.url : `./${this.url}`;\n            const type = this.url.endsWith('.ts') || this.url.endsWith('.mjs') ? 'module' : 'commonjs';\n            // console.log('Starting work from', url);\n            // @ts-expect-error type is not known\n            worker = new NodeWorker(url, { eval: false, type });\n        }\n        else if (this.source) {\n            worker = new NodeWorker(this.source, { eval: true });\n        }\n        else {\n            throw new Error('no worker');\n        }\n        worker.on('message', (data) => {\n            // console.error('message', data);\n            this.onMessage(data);\n        });\n        worker.on('error', (error) => {\n            this.onError(error);\n        });\n        worker.on('exit', (code) => {\n            // console.error('exit', code);\n        });\n        return worker;\n    }\n}\n//# sourceMappingURL=worker-thread.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { isMobile, isBrowser } from \"../env-utils/globals.js\";\nimport WorkerThread from \"./worker-thread.js\";\nimport WorkerJob from \"./worker-job.js\";\n/**\n * Process multiple data messages with small pool of identical workers\n */\nexport default class WorkerPool {\n    name = 'unnamed';\n    source; // | Function;\n    url;\n    maxConcurrency = 1;\n    maxMobileConcurrency = 1;\n    onDebug = () => { };\n    reuseWorkers = true;\n    props = {};\n    jobQueue = [];\n    idleQueue = [];\n    count = 0;\n    isDestroyed = false;\n    /** Checks if workers are supported on this platform */\n    static isSupported() {\n        return WorkerThread.isSupported();\n    }\n    /**\n     * @param processor - worker function\n     * @param maxConcurrency - max count of workers\n     */\n    constructor(props) {\n        this.source = props.source;\n        this.url = props.url;\n        this.setProps(props);\n    }\n    /**\n     * Terminates all workers in the pool\n     * @note Can free up significant memory\n     */\n    destroy() {\n        // Destroy idle workers, active Workers will be destroyed on completion\n        this.idleQueue.forEach((worker) => worker.destroy());\n        this.isDestroyed = true;\n    }\n    setProps(props) {\n        this.props = { ...this.props, ...props };\n        if (props.name !== undefined) {\n            this.name = props.name;\n        }\n        if (props.maxConcurrency !== undefined) {\n            this.maxConcurrency = props.maxConcurrency;\n        }\n        if (props.maxMobileConcurrency !== undefined) {\n            this.maxMobileConcurrency = props.maxMobileConcurrency;\n        }\n        if (props.reuseWorkers !== undefined) {\n            this.reuseWorkers = props.reuseWorkers;\n        }\n        if (props.onDebug !== undefined) {\n            this.onDebug = props.onDebug;\n        }\n    }\n    async startJob(name, onMessage = (job, type, data) => job.done(data), onError = (job, error) => job.error(error)) {\n        // Promise resolves when thread starts working on this job\n        const startPromise = new Promise((onStart) => {\n            // Promise resolves when thread completes or fails working on this job\n            this.jobQueue.push({ name, onMessage, onError, onStart });\n            return this;\n        });\n        this._startQueuedJob(); // eslint-disable-line @typescript-eslint/no-floating-promises\n        return await startPromise;\n    }\n    // PRIVATE\n    /**\n     * Starts first queued job if worker is available or can be created\n     * Called when job is started and whenever a worker returns to the idleQueue\n     */\n    async _startQueuedJob() {\n        if (!this.jobQueue.length) {\n            return;\n        }\n        const workerThread = this._getAvailableWorker();\n        if (!workerThread) {\n            return;\n        }\n        // We have a worker, dequeue and start the job\n        const queuedJob = this.jobQueue.shift();\n        if (queuedJob) {\n            // Emit a debug event\n            // @ts-ignore\n            this.onDebug({\n                message: 'Starting job',\n                name: queuedJob.name,\n                workerThread,\n                backlog: this.jobQueue.length\n            });\n            // Create a worker job to let the app access thread and manage job completion\n            const job = new WorkerJob(queuedJob.name, workerThread);\n            // Set the worker thread's message handlers\n            workerThread.onMessage = (data) => queuedJob.onMessage(job, data.type, data.payload);\n            workerThread.onError = (error) => queuedJob.onError(job, error);\n            // Resolve the start promise so that the app can start sending messages to worker\n            queuedJob.onStart(job);\n            // Wait for the app to signal that the job is complete, then return worker to queue\n            try {\n                await job.result;\n            }\n            catch (error) {\n                // eslint-disable-next-line no-console\n                console.error(`Worker exception: ${error}`);\n            }\n            finally {\n                this.returnWorkerToQueue(workerThread);\n            }\n        }\n    }\n    /**\n     * Returns a worker to the idle queue\n     * Destroys the worker if\n     *  - pool is destroyed\n     *  - if this pool doesn't reuse workers\n     *  - if maxConcurrency has been lowered\n     * @param worker\n     */\n    returnWorkerToQueue(worker) {\n        const shouldDestroyWorker = \n        // Workers on Node.js prevent the process from exiting.\n        // Until we figure out how to close them before exit, we always destroy them\n        !isBrowser ||\n            // If the pool is destroyed, there is no reason to keep the worker around\n            this.isDestroyed ||\n            // If the app has disabled worker reuse, any completed workers should be destroyed\n            !this.reuseWorkers ||\n            // If concurrency has been lowered, this worker might be surplus to requirements\n            this.count > this._getMaxConcurrency();\n        if (shouldDestroyWorker) {\n            worker.destroy();\n            this.count--;\n        }\n        else {\n            this.idleQueue.push(worker);\n        }\n        if (!this.isDestroyed) {\n            this._startQueuedJob(); // eslint-disable-line @typescript-eslint/no-floating-promises\n        }\n    }\n    /**\n     * Returns idle worker or creates new worker if maxConcurrency has not been reached\n     */\n    _getAvailableWorker() {\n        // If a worker has completed and returned to the queue, it can be used\n        if (this.idleQueue.length > 0) {\n            return this.idleQueue.shift() || null;\n        }\n        // Create fresh worker if we haven't yet created the max amount of worker threads for this worker source\n        if (this.count < this._getMaxConcurrency()) {\n            this.count++;\n            const name = `${this.name.toLowerCase()} (#${this.count} of ${this.maxConcurrency})`;\n            return new WorkerThread({ name, source: this.source, url: this.url });\n        }\n        // No worker available, have to wait\n        return null;\n    }\n    _getMaxConcurrency() {\n        return isMobile ? this.maxMobileConcurrency : this.maxConcurrency;\n    }\n}\n//# sourceMappingURL=worker-pool.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport WorkerPool from \"./worker-pool.js\";\nimport WorkerThread from \"./worker-thread.js\";\nconst DEFAULT_PROPS = {\n    maxConcurrency: 3,\n    maxMobileConcurrency: 1,\n    reuseWorkers: true,\n    onDebug: () => { }\n};\n/**\n * Process multiple jobs with a \"farm\" of different workers in worker pools.\n */\nexport default class WorkerFarm {\n    props;\n    workerPools = new Map();\n    // singleton\n    static _workerFarm;\n    /** Checks if workers are supported on this platform */\n    static isSupported() {\n        return WorkerThread.isSupported();\n    }\n    /** Get the singleton instance of the global worker farm */\n    static getWorkerFarm(props = {}) {\n        WorkerFarm._workerFarm = WorkerFarm._workerFarm || new WorkerFarm({});\n        WorkerFarm._workerFarm.setProps(props);\n        return WorkerFarm._workerFarm;\n    }\n    /** get global instance with WorkerFarm.getWorkerFarm() */\n    constructor(props) {\n        this.props = { ...DEFAULT_PROPS };\n        this.setProps(props);\n        /** @type Map<string, WorkerPool>} */\n        this.workerPools = new Map();\n    }\n    /**\n     * Terminate all workers in the farm\n     * @note Can free up significant memory\n     */\n    destroy() {\n        for (const workerPool of this.workerPools.values()) {\n            workerPool.destroy();\n        }\n        this.workerPools = new Map();\n    }\n    /**\n     * Set props used when initializing worker pools\n     * @param props\n     */\n    setProps(props) {\n        this.props = { ...this.props, ...props };\n        // Update worker pool props\n        for (const workerPool of this.workerPools.values()) {\n            workerPool.setProps(this._getWorkerPoolProps());\n        }\n    }\n    /**\n     * Returns a worker pool for the specified worker\n     * @param options - only used first time for a specific worker name\n     * @param options.name - the name of the worker - used to identify worker pool\n     * @param options.url -\n     * @param options.source -\n     * @example\n     *   const job = WorkerFarm.getWorkerFarm().getWorkerPool({name, url}).startJob(...);\n     */\n    getWorkerPool(options) {\n        const { name, source, url } = options;\n        let workerPool = this.workerPools.get(name);\n        if (!workerPool) {\n            workerPool = new WorkerPool({\n                name,\n                source,\n                url\n            });\n            workerPool.setProps(this._getWorkerPoolProps());\n            this.workerPools.set(name, workerPool);\n        }\n        return workerPool;\n    }\n    _getWorkerPoolProps() {\n        return {\n            maxConcurrency: this.props.maxConcurrency,\n            maxMobileConcurrency: this.props.maxMobileConcurrency,\n            reuseWorkers: this.props.reuseWorkers,\n            onDebug: this.props.onDebug\n        };\n    }\n}\n//# sourceMappingURL=worker-farm.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { assert } from \"../env-utils/assert.js\";\nimport { isBrowser } from \"../env-utils/globals.js\";\nimport { VERSION } from \"../env-utils/version.js\";\nimport { NPM_TAG } from \"../npm-tag.js\";\n/**\n * Gets worker object's name (for debugging in Chrome thread inspector window)\n */\nexport function getWorkerName(worker) {\n    const warning = worker.version !== VERSION ? ` (worker-utils@${VERSION})` : '';\n    return `${worker.name}@${worker.version}${warning}`;\n}\n/**\n * Generate a worker URL based on worker object and options\n * @returns A URL to one of the following:\n * - a published worker on unpkg CDN\n * - a local test worker\n * - a URL provided by the user in options\n */\nexport function getWorkerURL(worker, options = {}) {\n    const workerOptions = options[worker.id] || {};\n    const workerFile = isBrowser ? `${worker.id}-worker.js` : `${worker.id}-worker-node.js`;\n    let url = workerOptions.workerUrl;\n    // HACK: Allow for non-nested workerUrl for the CompressionWorker.\n    // For the compression worker, workerOptions is currently not nested correctly. For most loaders,\n    // you'd have options within an object, i.e. `{mvt: {coordinates: ...}}` but the CompressionWorker\n    // puts options at the top level, not within a `compression` key (its `id`). For this reason, the\n    // above `workerOptions` will always be a string (i.e. `'gzip'`) for the CompressionWorker. To not\n    // break backwards compatibility, we allow the CompressionWorker to have options at the top level.\n    if (!url && worker.id === 'compression') {\n        url = options.workerUrl;\n    }\n    // If URL is test, generate local loaders.gl url\n    // @ts-ignore _workerType\n    const workerType = options._workerType || options?.core?._workerType;\n    if (workerType === 'test') {\n        if (isBrowser) {\n            url = `modules/${worker.module}/dist/${workerFile}`;\n        }\n        else {\n            // In the test environment the ts-node loader requires TypeScript code\n            url = `modules/${worker.module}/src/workers/${worker.id}-worker-node.ts`;\n        }\n    }\n    // If url override is not provided, generate a URL to published version on npm CDN unpkg.com\n    if (!url) {\n        // GENERATE\n        let version = worker.version;\n        // On master we need to load npm alpha releases published with the `beta` tag\n        if (version === 'latest') {\n            // throw new Error('latest worker version specified');\n            version = NPM_TAG;\n        }\n        const versionTag = version ? `@${version}` : '';\n        url = `https://unpkg.com/@loaders.gl/${worker.module}${versionTag}/dist/${workerFile}`;\n    }\n    assert(url);\n    // Allow user to override location\n    return url;\n}\n//# sourceMappingURL=get-worker-url.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { assert } from \"../env-utils/assert.js\";\nimport { VERSION } from \"../env-utils/version.js\";\n/**\n * Check if worker is compatible with this library version\n * @param worker\n * @param libVersion\n * @returns `true` if the two versions are compatible\n */\nexport function validateWorkerVersion(worker, coreVersion = VERSION) {\n    assert(worker, 'no worker provided');\n    const workerVersion = worker.version;\n    if (!coreVersion || !workerVersion) {\n        return false;\n    }\n    // TODO enable when fix the __version__ injection\n    // const coreVersions = parseVersion(coreVersion);\n    // const workerVersions = parseVersion(workerVersion);\n    // assert(\n    //   coreVersion.major === workerVersion.major && coreVersion.minor <= workerVersion.minor,\n    //   `worker: ${worker.name} is not compatible. ${coreVersion.major}.${\n    //     coreVersion.minor\n    //   }+ is required.`\n    // );\n    return true;\n}\n// @ts-ignore\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction parseVersion(version) {\n    const parts = version.split('.').map(Number);\n    return { major: parts[0], minor: parts[1] };\n}\n//# sourceMappingURL=validate-worker-version.js.map","import { isBrowser, WorkerFarm, getWorkerURL } from '@loaders.gl/worker-utils';\n/**\n * Determines if a loader can parse with worker\n * @param loader\n * @param options\n */\nexport function canParseWithWorker(loader, options) {\n    if (!WorkerFarm.isSupported()) {\n        return false;\n    }\n    // Node workers are still experimental\n    const nodeWorkers = options?._nodeWorkers ?? options?.core?._nodeWorkers;\n    if (!isBrowser && !nodeWorkers) {\n        return false;\n    }\n    const useWorkers = options?.worker ?? options?.core?.worker;\n    return Boolean(loader.worker && useWorkers);\n}\n/**\n * this function expects that the worker function sends certain messages,\n * this can be automated if the worker is wrapper by a call to createLoaderWorker in @loaders.gl/loader-utils.\n */\nexport async function parseWithWorker(loader, data, options, context, parseOnMainThread) {\n    const name = loader.id; // TODO\n    const url = getWorkerURL(loader, options);\n    const workerFarm = WorkerFarm.getWorkerFarm(options?.core);\n    const workerPool = workerFarm.getWorkerPool({ name, url });\n    // options.log object contains functions which cannot be transferred\n    // context.fetch & context.parse functions cannot be transferred\n    // TODO - decide how to handle logging on workers\n    options = JSON.parse(JSON.stringify(options));\n    context = JSON.parse(JSON.stringify(context || {}));\n    const job = await workerPool.startJob('process-on-worker', \n    // @ts-expect-error\n    onMessage.bind(null, parseOnMainThread) // eslint-disable-line @typescript-eslint/no-misused-promises\n    );\n    job.postMessage('process', {\n        // @ts-ignore\n        input: data,\n        options,\n        context\n    });\n    const result = await job.result;\n    // TODO - what is going on here?\n    return await result.result;\n}\n/**\n * Handle worker's responses to the main thread\n * @param job\n * @param type\n * @param payload\n */\nasync function onMessage(parseOnMainThread, job, type, payload) {\n    switch (type) {\n        case 'done':\n            job.done(payload);\n            break;\n        case 'error':\n            job.error(new Error(payload.error));\n            break;\n        case 'process':\n            // Worker is asking for main thread to parseO\n            const { id, input, options } = payload;\n            try {\n                const result = await parseOnMainThread(input, options);\n                job.postMessage('done', { id, result });\n            }\n            catch (error) {\n                const message = error instanceof Error ? error.message : 'unknown error';\n                job.postMessage('error', { id, error: message });\n            }\n            break;\n        default:\n            // eslint-disable-next-line\n            console.warn(`parse-with-worker unknown message ${type}`);\n    }\n}\n//# sourceMappingURL=parse-with-worker.js.map","/**\n * compare two binary arrays for equality\n * @param a\n * @param b\n * @param byteLength\n */\nexport function compareArrayBuffers(arrayBuffer1, arrayBuffer2, byteLength) {\n    byteLength = byteLength || arrayBuffer1.byteLength;\n    if (arrayBuffer1.byteLength < byteLength || arrayBuffer2.byteLength < byteLength) {\n        return false;\n    }\n    const array1 = new Uint8Array(arrayBuffer1);\n    const array2 = new Uint8Array(arrayBuffer2);\n    for (let i = 0; i < array1.length; ++i) {\n        if (array1[i] !== array2[i]) {\n            return false;\n        }\n    }\n    return true;\n}\n/**\n * Concatenate a sequence of ArrayBuffers from arguments\n * @return A concatenated ArrayBuffer\n */\nexport function concatenateArrayBuffers(...sources) {\n    return concatenateArrayBuffersFromArray(sources);\n}\n/**\n * Concatenate a sequence of ArrayBuffers from array\n * @return A concatenated ArrayBuffer\n */\nexport function concatenateArrayBuffersFromArray(sources) {\n    // Make sure all inputs are wrapped in typed arrays\n    const sourceArrays = sources.map((source2) => source2 instanceof ArrayBuffer ? new Uint8Array(source2) : source2);\n    // Get length of all inputs\n    const byteLength = sourceArrays.reduce((length, typedArray) => length + typedArray.byteLength, 0);\n    // Allocate array with space for all inputs\n    const result = new Uint8Array(byteLength);\n    // Copy the subarrays\n    let offset = 0;\n    for (const sourceArray of sourceArrays) {\n        result.set(sourceArray, offset);\n        offset += sourceArray.byteLength;\n    }\n    // We work with ArrayBuffers, discard the typed array wrapper\n    return result.buffer;\n}\n/**\n * Concatenate arbitrary count of typed arrays\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays\n * @param - list of arrays. All arrays should be the same type\n * @return A concatenated TypedArray\n */\nexport function concatenateTypedArrays(...typedArrays) {\n    // @ts-ignore\n    const arrays = typedArrays;\n    // @ts-ignore\n    const TypedArrayConstructor = (arrays && arrays.length > 1 && arrays[0].constructor) || null;\n    if (!TypedArrayConstructor) {\n        throw new Error('\"concatenateTypedArrays\" - incorrect quantity of arguments or arguments have incompatible data types');\n    }\n    const sumLength = arrays.reduce((acc, value) => acc + value.length, 0);\n    // @ts-ignore typescript does not like dynamic constructors\n    const result = new TypedArrayConstructor(sumLength);\n    let offset = 0;\n    for (const array of arrays) {\n        result.set(array, offset);\n        offset += array.length;\n    }\n    return result;\n}\n/**\n * Copy a view of an ArrayBuffer into new ArrayBuffer with byteOffset = 0\n * @param arrayBuffer\n * @param byteOffset\n * @param byteLength\n */\nexport function sliceArrayBuffer(arrayBuffer, byteOffset, byteLength) {\n    const subArray = byteLength !== undefined\n        ? new Uint8Array(arrayBuffer).subarray(byteOffset, byteOffset + byteLength)\n        : new Uint8Array(arrayBuffer).subarray(byteOffset);\n    const arrayCopy = new Uint8Array(subArray);\n    return arrayCopy.buffer;\n}\n//# sourceMappingURL=array-buffer-utils.js.map","import { concatenateArrayBuffers } from \"../binary-utils/array-buffer-utils.js\";\n// GENERAL UTILITIES\n/**\n * Iterates over an {@link AsyncIterable} or {@link Iterable}, invoking `visitor` for each yielded\n * value without rewinding the iterator when exiting early. This enables the caller to continue\n * iterating in another loop after `visitor` signals cancellation.\n */\nexport async function forEach(iterable, visitor) {\n    const iterator = toAsyncIterator(iterable);\n    // eslint-disable-next-line\n    while (true) {\n        const { done, value } = await iterator.next();\n        if (done) {\n            if (iterator.return) {\n                iterator.return();\n            }\n            return;\n        }\n        const cancel = visitor(value);\n        if (cancel) {\n            return;\n        }\n    }\n}\n/**\n * Concatenates all binary chunks yielded by an async or sync iterator.\n * Supports `ArrayBuffer`, typed array views, and `ArrayBufferLike` sources (e.g. `SharedArrayBuffer`).\n * This allows atomic parsers to operate on iterator inputs by materializing them into a single buffer.\n */\nexport async function concatenateArrayBuffersAsync(asyncIterator) {\n    const arrayBuffers = [];\n    for await (const chunk of asyncIterator) {\n        arrayBuffers.push(copyToArrayBuffer(chunk));\n    }\n    return concatenateArrayBuffers(...arrayBuffers);\n}\nexport async function concatenateStringsAsync(asyncIterator) {\n    const strings = [];\n    for await (const chunk of asyncIterator) {\n        strings.push(chunk);\n    }\n    return strings.join('');\n}\n/**\n * Normalizes binary chunk iterators to yield `ArrayBuffer` instances.\n * Accepts `ArrayBuffer`, `ArrayBufferView`, and `ArrayBufferLike` sources\n * (e.g. `SharedArrayBuffer`) and returns a copied `ArrayBuffer` for each chunk.\n */\nexport async function* toArrayBufferIterator(asyncIterator) {\n    for await (const chunk of asyncIterator) {\n        yield copyToArrayBuffer(chunk);\n    }\n}\nfunction copyToArrayBuffer(chunk) {\n    if (chunk instanceof ArrayBuffer) {\n        return chunk;\n    }\n    if (ArrayBuffer.isView(chunk)) {\n        const { buffer, byteOffset, byteLength } = chunk;\n        return copyFromBuffer(buffer, byteOffset, byteLength);\n    }\n    return copyFromBuffer(chunk);\n}\nfunction copyFromBuffer(buffer, byteOffset = 0, byteLength = buffer.byteLength - byteOffset) {\n    const view = new Uint8Array(buffer, byteOffset, byteLength);\n    const copy = new Uint8Array(view.length);\n    copy.set(view);\n    return copy.buffer;\n}\nfunction toAsyncIterator(iterable) {\n    if (typeof iterable[Symbol.asyncIterator] === 'function') {\n        return iterable[Symbol.asyncIterator]();\n    }\n    if (typeof iterable[Symbol.iterator] === 'function') {\n        const iterator = iterable[Symbol.iterator]();\n        return iteratorToAsyncIterator(iterator);\n    }\n    return iterable;\n}\nfunction iteratorToAsyncIterator(iterator) {\n    return {\n        next(value) {\n            return Promise.resolve(iterator.next(value));\n        },\n        return(value) {\n            if (typeof iterator.return === 'function') {\n                return Promise.resolve(iterator.return(value));\n            }\n            return Promise.resolve({ done: true, value });\n        },\n        throw(error) {\n            if (typeof iterator.throw === 'function') {\n                return Promise.resolve(iterator.throw(error));\n            }\n            return Promise.reject(error);\n        }\n    };\n}\n//# sourceMappingURL=async-iteration.js.map","// Simple file alias mechanisms for tests.\nlet pathPrefix = '';\nconst fileAliases = {};\n/*\n * Set a relative path prefix\n */\nexport function setPathPrefix(prefix) {\n    pathPrefix = prefix;\n}\n/*\n * Get the relative path prefix\n */\nexport function getPathPrefix() {\n    return pathPrefix;\n}\n/**\n *\n * @param aliases\n *\n * Note: addAliases are an experimental export, they are only for testing of loaders.gl loaders\n * not intended as a generic aliasing mechanism\n */\nexport function addAliases(aliases) {\n    Object.assign(fileAliases, aliases);\n}\n/**\n * Resolves aliases and adds path-prefix to paths\n */\nexport function resolvePath(filename) {\n    for (const alias in fileAliases) {\n        if (filename.startsWith(alias)) {\n            const replacement = fileAliases[alias];\n            filename = filename.replace(alias, replacement);\n        }\n    }\n    if (!filename.startsWith('http://') && !filename.startsWith('https://')) {\n        filename = `${pathPrefix}${filename}`;\n    }\n    return filename;\n}\n//# sourceMappingURL=file-aliases.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Isolates Buffer references to ensure they are only bundled under Node.js (avoids big webpack polyfill)\n// this file is selected by the package.json \"browser\" field).\n/**\n * Convert Buffer to ArrayBuffer\n * Converts Node.js `Buffer` to `ArrayBuffer` (without triggering bundler to include Buffer polyfill on browser)\n * @todo better data type\n */\nexport function toArrayBuffer(buffer) {\n    return buffer;\n}\n/**\n * Convert (copy) ArrayBuffer to Buffer\n */\nexport function toBuffer(binaryData) {\n    throw new Error('Buffer not supported in browser');\n}\n//# sourceMappingURL=buffer.browser.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { isSharedArrayBuffer } from \"../javascript-utils/is-type.js\";\nimport * as node from \"../node/buffer.js\";\n/**\n * Check for Node.js `Buffer` (without triggering bundler to include Buffer polyfill on browser)\n */\nexport function isBuffer(value) {\n    return value && typeof value === 'object' && value.isBuffer;\n}\n/**\n * Converts to Node.js `Buffer` (without triggering bundler to include Buffer polyfill on browser)\n * @todo better data type\n */\nexport function toBuffer(data) {\n    return node.toBuffer ? node.toBuffer(data) : data;\n}\n/**\n * Convert an object to an array buffer. Handles SharedArrayBuffers.\n */\nexport function toArrayBuffer(data) {\n    // Note: Should be called first, Buffers can trigger other detections below\n    if (isBuffer(data)) {\n        return node.toArrayBuffer(data);\n    }\n    if (data instanceof ArrayBuffer) {\n        return data;\n    }\n    if (isSharedArrayBuffer(data)) {\n        return copyToArrayBuffer(data);\n    }\n    // Node Buffers look like Uint8Arrays (Check isBuffer first)\n    if (ArrayBuffer.isView(data)) {\n        // TODO - ArrayBufferLike type mess\n        const buffer = data.buffer;\n        if (data.byteOffset === 0 && data.byteLength === data.buffer.byteLength) {\n            return buffer;\n        }\n        return buffer.slice(data.byteOffset, data.byteOffset + data.byteLength);\n    }\n    if (typeof data === 'string') {\n        const text = data;\n        const uint8Array = new TextEncoder().encode(text);\n        return uint8Array.buffer;\n    }\n    // HACK to support Blob polyfill\n    if (data && typeof data === 'object' && data._toArrayBuffer) {\n        return data._toArrayBuffer();\n    }\n    throw new Error('toArrayBuffer');\n}\n/** Ensure that SharedArrayBuffers are copied into ArrayBuffers */\nexport function ensureArrayBuffer(bufferSource) {\n    if (bufferSource instanceof ArrayBuffer) {\n        return bufferSource;\n    }\n    if (isSharedArrayBuffer(bufferSource)) {\n        return copyToArrayBuffer(bufferSource);\n    }\n    const { buffer, byteOffset, byteLength } = bufferSource;\n    if (buffer instanceof ArrayBuffer && byteOffset === 0 && byteLength === buffer.byteLength) {\n        return buffer;\n    }\n    return copyToArrayBuffer(buffer, byteOffset, byteLength);\n}\n/** Copies an ArrayBuffer or a section of an ArrayBuffer to a new ArrayBuffer, handles SharedArrayBuffers */\nexport function copyToArrayBuffer(buffer, byteOffset = 0, byteLength = buffer.byteLength - byteOffset) {\n    const view = new Uint8Array(buffer, byteOffset, byteLength);\n    const copy = new Uint8Array(view.length);\n    copy.set(view);\n    return copy.buffer;\n}\n/** Convert an object to an ArrayBufferView, handles SharedArrayBuffers */\nexport function toArrayBufferView(data) {\n    if (ArrayBuffer.isView(data)) {\n        return data;\n    }\n    // Create a view to support ArrayBufferLike sources such as SharedArrayBuffer\n    return new Uint8Array(data);\n}\n//# sourceMappingURL=memory-conversion-utils.js.map","// Beginning of a minimal implementation of the Node.js path API, that doesn't pull in big polyfills.\nimport { getCWD } from \"./get-cwd.js\";\n/**\n * Replacement for Node.js path.filename\n * @param url\n */\nexport function filename(url) {\n    const slashIndex = url ? url.lastIndexOf('/') : -1;\n    return slashIndex >= 0 ? url.substr(slashIndex + 1) : url;\n}\n/**\n * Replacement for Node.js path.dirname\n * @param url\n */\nexport function dirname(url) {\n    const slashIndex = url ? url.lastIndexOf('/') : -1;\n    return slashIndex >= 0 ? url.substr(0, slashIndex) : '';\n}\n/**\n * Replacement for Node.js path.join\n * @param parts\n */\nexport function join(...parts) {\n    const separator = '/';\n    parts = parts.map((part, index) => {\n        if (index) {\n            part = part.replace(new RegExp(`^${separator}`), '');\n        }\n        if (index !== parts.length - 1) {\n            part = part.replace(new RegExp(`${separator}$`), '');\n        }\n        return part;\n    });\n    return parts.join(separator);\n}\n/* eslint-disable no-continue */\n/**\n * https://nodejs.org/api/path.html#path_path_resolve_paths\n * @param paths A sequence of paths or path segments.\n * @return resolved path\n * Forked from BTOdell/path-resolve under MIT license\n * @see https://github.com/BTOdell/path-resolve/blob/master/LICENSE\n */\nexport function resolve(...components) {\n    const paths = [];\n    for (let _i = 0; _i < components.length; _i++) {\n        paths[_i] = components[_i];\n    }\n    let resolvedPath = '';\n    let resolvedAbsolute = false;\n    let cwd;\n    for (let i = paths.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n        let path;\n        if (i >= 0) {\n            path = paths[i];\n        }\n        else {\n            if (cwd === undefined) {\n                cwd = getCWD();\n            }\n            path = cwd;\n        }\n        // Skip empty entries\n        if (path.length === 0) {\n            continue;\n        }\n        resolvedPath = `${path}/${resolvedPath}`;\n        resolvedAbsolute = path.charCodeAt(0) === SLASH;\n    }\n    // At this point the path should be resolved to a full absolute path, but\n    // handle relative paths to be safe (might happen when process.cwd() fails)\n    // Normalize the path (removes leading slash)\n    resolvedPath = normalizeStringPosix(resolvedPath, !resolvedAbsolute);\n    if (resolvedAbsolute) {\n        return `/${resolvedPath}`;\n    }\n    else if (resolvedPath.length > 0) {\n        return resolvedPath;\n    }\n    return '.';\n}\nconst SLASH = 47;\nconst DOT = 46;\n/**\n * Resolves . and .. elements in a path with directory names\n * Forked from BTOdell/path-resolve under MIT license\n * @see https://github.com/BTOdell/path-resolve/blob/master/LICENSE\n */\n/* eslint-disable max-depth */\n// eslint-disable-next-line complexity, max-statements\nfunction normalizeStringPosix(path, allowAboveRoot) {\n    let res = '';\n    let lastSlash = -1;\n    let dots = 0;\n    let code;\n    let isAboveRoot = false;\n    for (let i = 0; i <= path.length; ++i) {\n        if (i < path.length) {\n            code = path.charCodeAt(i);\n        }\n        else if (code === SLASH) {\n            break;\n        }\n        else {\n            code = SLASH;\n        }\n        if (code === SLASH) {\n            if (lastSlash === i - 1 || dots === 1) {\n                // NOOP\n            }\n            else if (lastSlash !== i - 1 && dots === 2) {\n                if (res.length < 2 ||\n                    !isAboveRoot ||\n                    res.charCodeAt(res.length - 1) !== DOT ||\n                    res.charCodeAt(res.length - 2) !== DOT) {\n                    if (res.length > 2) {\n                        const start = res.length - 1;\n                        let j = start;\n                        for (; j >= 0; --j) {\n                            if (res.charCodeAt(j) === SLASH) {\n                                break;\n                            }\n                        }\n                        if (j !== start) {\n                            res = j === -1 ? '' : res.slice(0, j);\n                            lastSlash = i;\n                            dots = 0;\n                            isAboveRoot = false;\n                            continue;\n                        }\n                    }\n                    else if (res.length === 2 || res.length === 1) {\n                        res = '';\n                        lastSlash = i;\n                        dots = 0;\n                        isAboveRoot = false;\n                        continue;\n                    }\n                }\n                if (allowAboveRoot) {\n                    if (res.length > 0) {\n                        res += '/..';\n                    }\n                    else {\n                        res = '..';\n                    }\n                    isAboveRoot = true;\n                }\n            }\n            else {\n                const slice = path.slice(lastSlash + 1, i);\n                if (res.length > 0) {\n                    res += `/${slice}`;\n                }\n                else {\n                    res = slice;\n                }\n                isAboveRoot = false;\n            }\n            lastSlash = i;\n            dots = 0;\n        }\n        else if (code === DOT && dots !== -1) {\n            ++dots;\n        }\n        else {\n            dots = -1;\n        }\n    }\n    return res;\n}\n//# sourceMappingURL=path.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport class FetchError extends Error {\n    constructor(message, info) {\n        super(message);\n        this.reason = info.reason;\n        this.url = info.url;\n        this.response = info.response;\n    }\n    /** A best effort reason for why the fetch failed */\n    reason;\n    /** The URL that failed to load. Empty string if not available. */\n    url;\n    /** The Response object, if any. */\n    response;\n}\n//# sourceMappingURL=fetch-error.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// TODO - build/integrate proper MIME type parsing\n// https://mimesniff.spec.whatwg.org/\nconst DATA_URL_PATTERN = /^data:([-\\w.]+\\/[-\\w.+]+)(;|,)/;\nconst MIME_TYPE_PATTERN = /^([-\\w.]+\\/[-\\w.+]+)/;\n/**\n * Compare two MIME types, case insensitively etc.\n * @param mimeType1\n * @param mimeType2\n * @returns true if the MIME types are equivalent\n * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types#structure_of_a_mime_type\n */\nexport function compareMIMETypes(mimeType1, mimeType2) {\n    if (mimeType1.toLowerCase() === mimeType2.toLowerCase()) {\n        return true;\n    }\n    return false;\n}\n/**\n * Remove extra data like `charset` from MIME types\n * @param mimeString\n * @returns A clean MIME type, or an empty string\n *\n * @todo - handle more advanced MIMETYpes, multiple types\n * @todo - extract charset etc\n */\nexport function parseMIMEType(mimeString) {\n    // If resource is a data url, extract any embedded mime type\n    const matches = MIME_TYPE_PATTERN.exec(mimeString);\n    if (matches) {\n        return matches[1];\n    }\n    return mimeString;\n}\n/**\n * Extract MIME type from data URL\n *\n * @param mimeString\n * @returns A clean MIME type, or an empty string\n *\n * @todo - handle more advanced MIMETYpes, multiple types\n * @todo - extract charset etc\n */\nexport function parseMIMETypeFromURL(url) {\n    // If resource is a data URL, extract any embedded mime type\n    const matches = DATA_URL_PATTERN.exec(url);\n    if (matches) {\n        return matches[1];\n    }\n    return '';\n}\n//# sourceMappingURL=mime-type-utils.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst QUERY_STRING_PATTERN = /\\?.*/;\nexport function extractQueryString(url) {\n    const matches = url.match(QUERY_STRING_PATTERN);\n    return matches && matches[0];\n}\nexport function stripQueryString(url) {\n    return url.replace(QUERY_STRING_PATTERN, '');\n}\nexport function shortenUrlForDisplay(url) {\n    if (url.length < 50) {\n        return url;\n    }\n    const urlEnd = url.slice(url.length - 15);\n    const urlStart = url.substr(0, 32);\n    return `${urlStart}...${urlEnd}`;\n}\n//# sourceMappingURL=url-utils.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { isResponse, isBlob } from '@loaders.gl/loader-utils';\nimport { parseMIMEType, parseMIMETypeFromURL } from \"./mime-type-utils.js\";\nimport { stripQueryString } from \"./url-utils.js\";\n/**\n * Returns the URL associated with this resource.\n * The returned value may include a query string and need further processing.\n * If it cannot determine url, the corresponding value will be an empty string\n *\n * @todo string parameters are assumed to be URLs\n */\nexport function getResourceUrl(resource) {\n    // If resource is a `Response`, it contains the information directly as a field\n    if (isResponse(resource)) {\n        return resource.url;\n    }\n    // If the resource is a Blob or a File (subclass of Blob)\n    if (isBlob(resource)) {\n        // File objects have a \"name\" property. Blob objects don't have any\n        // url (name) information\n        const fileName = 'name' in resource ? resource.name : '';\n        return fileName || '';\n    }\n    if (typeof resource === 'string') {\n        return resource;\n    }\n    // Unknown\n    return '';\n}\n/**\n * Returns the URL associated with this resource.\n * The returned value may include a query string and need further processing.\n * If it cannot determine url, the corresponding value will be an empty string\n *\n * @todo string parameters are assumed to be URLs\n */\nexport function getResourceMIMEType(resource) {\n    // If resource is a response, it contains the information directly\n    if (isResponse(resource)) {\n        const contentTypeHeader = resource.headers.get('content-type') || '';\n        const noQueryUrl = stripQueryString(resource.url);\n        return parseMIMEType(contentTypeHeader) || parseMIMETypeFromURL(noQueryUrl);\n    }\n    // If the resource is a Blob or a File (subclass of Blob)\n    if (isBlob(resource)) {\n        return resource.type || '';\n    }\n    if (typeof resource === 'string') {\n        return parseMIMETypeFromURL(resource);\n    }\n    // Unknown\n    return '';\n}\n/**\n  * Returns (approximate) content length for a resource if it can be determined.\n  * Returns -1 if content length cannot be determined.\n  * @param resource\n\n  * @note string parameters are NOT assumed to be URLs\n  */\nexport function getResourceContentLength(resource) {\n    if (isResponse(resource)) {\n        const response = resource;\n        return response.headers['content-length'] || -1;\n    }\n    if (isBlob(resource)) {\n        const blob = resource;\n        return blob.size;\n    }\n    if (typeof resource === 'string') {\n        // TODO - handle data URL?\n        return resource.length;\n    }\n    if (resource instanceof ArrayBuffer) {\n        return resource.byteLength;\n    }\n    if (ArrayBuffer.isView(resource)) {\n        return resource.byteLength;\n    }\n    return -1;\n}\n//# sourceMappingURL=resource-utils.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { isResponse } from '@loaders.gl/loader-utils';\nimport { FetchError } from \"../fetch/fetch-error.js\";\nimport { getResourceContentLength, getResourceUrl, getResourceMIMEType } from \"./resource-utils.js\";\nimport { shortenUrlForDisplay } from \"./url-utils.js\";\n/**\n * Returns a Response object\n * Adds content-length header when possible\n *\n * @param resource\n */\nexport async function makeResponse(resource) {\n    if (isResponse(resource)) {\n        return resource;\n    }\n    // Add content-length header if possible\n    const headers = {};\n    const contentLength = getResourceContentLength(resource);\n    if (contentLength >= 0) {\n        headers['content-length'] = String(contentLength);\n    }\n    // `new Response(File)` does not preserve content-type and URL\n    // so we add them here\n    const url = getResourceUrl(resource);\n    const type = getResourceMIMEType(resource);\n    if (type) {\n        headers['content-type'] = type;\n    }\n    // Add a custom header with initial bytes if available\n    const initialDataUrl = await getInitialDataUrl(resource);\n    if (initialDataUrl) {\n        headers['x-first-bytes'] = initialDataUrl;\n    }\n    // TODO - is this the best way of handling strings?\n    // Maybe package as data URL instead?\n    if (typeof resource === 'string') {\n        // Convert to ArrayBuffer to avoid Response treating it as a URL\n        resource = new TextEncoder().encode(resource);\n    }\n    // Attempt to create a Response from the resource, adding headers and setting url\n    const response = new Response(resource, { headers });\n    // We can't control `Response.url` via constructor, use a property override to record URL.\n    Object.defineProperty(response, 'url', { value: url });\n    return response;\n}\n/**\n * Checks response status (async) and throws a helpful error message if status is not OK.\n * @param response\n */\nexport async function checkResponse(response) {\n    if (!response.ok) {\n        const error = await getResponseError(response);\n        throw error;\n    }\n}\n/**\n * Checks response status (sync) and throws a helpful error message if status is not OK.\n * @param response\n */\nexport function checkResponseSync(response) {\n    if (!response.ok) {\n        let message = `${response.status} ${response.statusText}`;\n        message = message.length > 60 ? `${message.slice(0, 60)}...` : message;\n        throw new Error(message);\n    }\n}\n// HELPERS\nasync function getResponseError(response) {\n    const shortUrl = shortenUrlForDisplay(response.url);\n    let message = `Failed to fetch resource (${response.status}) ${response.statusText}: ${shortUrl}`;\n    message = message.length > 100 ? `${message.slice(0, 100)}...` : message;\n    const info = {\n        reason: response.statusText,\n        url: response.url,\n        response\n    };\n    // See if we got an error message in the body\n    try {\n        const contentType = response.headers.get('Content-Type');\n        info.reason =\n            !response.bodyUsed && contentType?.includes('application/json')\n                ? await response.json()\n                : await response.text();\n    }\n    catch (error) {\n        // eslint forbids return in a finally statement, so we just catch here\n    }\n    return new FetchError(message, info);\n}\nasync function getInitialDataUrl(resource) {\n    const INITIAL_DATA_LENGTH = 5;\n    if (typeof resource === 'string') {\n        return `data:,${resource.slice(0, INITIAL_DATA_LENGTH)}`;\n    }\n    if (resource instanceof Blob) {\n        const blobSlice = resource.slice(0, 5);\n        return await new Promise((resolve) => {\n            const reader = new FileReader();\n            reader.onload = (event) => resolve(event?.target?.result);\n            reader.readAsDataURL(blobSlice);\n        });\n    }\n    if (resource instanceof ArrayBuffer) {\n        const slice = resource.slice(0, INITIAL_DATA_LENGTH);\n        const base64 = arrayBufferToBase64(slice);\n        return `data:base64,${base64}`;\n    }\n    return null;\n}\n// https://stackoverflow.com/questions/9267899/arraybuffer-to-base64-encoded-string\nfunction arrayBufferToBase64(buffer) {\n    let binary = '';\n    const bytes = new Uint8Array(buffer);\n    for (let i = 0; i < bytes.byteLength; i++) {\n        binary += String.fromCharCode(bytes[i]);\n    }\n    return btoa(binary);\n}\n//# sourceMappingURL=response-utils.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { resolvePath } from '@loaders.gl/loader-utils';\nimport { makeResponse } from \"../utils/response-utils.js\";\n// import {FetchError} from './fetch-error';\nexport function isNodePath(url) {\n    return !isRequestURL(url) && !isDataURL(url);\n}\nexport function isRequestURL(url) {\n    return url.startsWith('http:') || url.startsWith('https:');\n}\nexport function isDataURL(url) {\n    return url.startsWith('data:');\n}\n/**\n * fetch API compatible function\n * - Supports fetching from Node.js local file system paths\n * - Respects pathPrefix and file aliases\n */\nexport async function fetchFile(urlOrData, fetchOptions) {\n    if (typeof urlOrData === 'string') {\n        const url = resolvePath(urlOrData);\n        // Support fetching from local file system\n        if (isNodePath(url)) {\n            if (globalThis.loaders?.fetchNode) {\n                return globalThis.loaders?.fetchNode(url, fetchOptions);\n            }\n            // throw new Error(\n            //   'fetchFile: globalThis.loaders.fetchNode not defined. Install @loaders.gl/polyfills'\n            // );\n        }\n        // Call global fetch\n        return await fetch(url, fetchOptions);\n    }\n    // TODO - should we still call fetch on non-URL inputs?\n    return await makeResponse(urlOrData);\n}\n//# sourceMappingURL=fetch-file.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// probe.gl Log compatible loggers\nimport { Log } from '@probe.gl/log';\nexport const probeLog = new Log({ id: 'loaders.gl' });\n// Logs nothing\nexport class NullLog {\n    log() {\n        return () => { };\n    }\n    info() {\n        return () => { };\n    }\n    warn() {\n        return () => { };\n    }\n    error() {\n        return () => { };\n    }\n}\n// Logs to console\nexport class ConsoleLog {\n    console;\n    constructor() {\n        this.console = console; // eslint-disable-line\n    }\n    log(...args) {\n        return this.console.log.bind(this.console, ...args);\n    }\n    info(...args) {\n        return this.console.info.bind(this.console, ...args);\n    }\n    warn(...args) {\n        return this.console.warn.bind(this.console, ...args);\n    }\n    error(...args) {\n        return this.console.error.bind(this.console, ...args);\n    }\n}\n//# sourceMappingURL=loggers.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { isBrowser } from '@loaders.gl/loader-utils';\nimport { ConsoleLog } from \"./loggers.js\";\nexport const DEFAULT_LOADER_OPTIONS = {\n    core: {\n        baseUrl: undefined,\n        // baseUrl\n        fetch: null,\n        mimeType: undefined,\n        fallbackMimeType: undefined,\n        ignoreRegisteredLoaders: undefined,\n        nothrow: false,\n        log: new ConsoleLog(), // A probe.gl compatible (`log.log()()` syntax) that just logs to console\n        useLocalLibraries: false,\n        CDN: 'https://unpkg.com/@loaders.gl',\n        worker: true, // By default, use worker if provided by loader.\n        maxConcurrency: 3, // How many worker instances should be created for each loader.\n        maxMobileConcurrency: 1, // How many worker instances should be created for each loader on mobile devices.\n        reuseWorkers: isBrowser, // By default reuse workers in browser (Node.js refuses to terminate if browsers are running)\n        _nodeWorkers: false, // By default do not support node workers\n        _workerType: '', // 'test' to use locally generated workers\n        limit: 0,\n        _limitMB: 0,\n        batchSize: 'auto',\n        batchDebounceMs: 0,\n        metadata: false, // TODO - currently only implemented for parseInBatches, adds initial metadata batch,\n        transforms: []\n    }\n};\nexport const REMOVED_LOADER_OPTIONS = {\n    // deprecated top-level alias\n    baseUri: 'core.baseUrl',\n    fetch: 'core.fetch',\n    mimeType: 'core.mimeType',\n    fallbackMimeType: 'core.fallbackMimeType',\n    ignoreRegisteredLoaders: 'core.ignoreRegisteredLoaders',\n    nothrow: 'core.nothrow',\n    log: 'core.log',\n    useLocalLibraries: 'core.useLocalLibraries',\n    CDN: 'core.CDN',\n    worker: 'core.worker',\n    maxConcurrency: 'core.maxConcurrency',\n    maxMobileConcurrency: 'core.maxMobileConcurrency',\n    reuseWorkers: 'core.reuseWorkers',\n    _nodeWorkers: 'core.nodeWorkers',\n    _workerType: 'core._workerType',\n    _worker: 'core._workerType',\n    limit: 'core.limit',\n    _limitMB: 'core._limitMB',\n    batchSize: 'core.batchSize',\n    batchDebounceMs: 'core.batchDebounceMs',\n    metadata: 'core.metadata',\n    transforms: 'core.transforms',\n    // Older deprecations\n    throws: 'nothrow',\n    dataType: '(no longer used)',\n    uri: 'core.baseUrl',\n    // Warn if fetch options are used on toplevel\n    method: 'core.fetch.method',\n    headers: 'core.fetch.headers',\n    body: 'core.fetch.body',\n    mode: 'core.fetch.mode',\n    credentials: 'core.fetch.credentials',\n    cache: 'core.fetch.cache',\n    redirect: 'core.fetch.redirect',\n    referrer: 'core.fetch.referrer',\n    referrerPolicy: 'core.fetch.referrerPolicy',\n    integrity: 'core.fetch.integrity',\n    keepalive: 'core.fetch.keepalive',\n    signal: 'core.fetch.signal'\n};\n//# sourceMappingURL=option-defaults.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { registerJSModules, isPureObject, isObject, path } from '@loaders.gl/loader-utils';\nimport { probeLog, NullLog } from \"./loggers.js\";\nimport { DEFAULT_LOADER_OPTIONS, REMOVED_LOADER_OPTIONS } from \"./option-defaults.js\";\nimport { stripQueryString } from \"../utils/url-utils.js\";\nconst CORE_LOADER_OPTION_KEYS = [\n    'baseUrl',\n    'fetch',\n    'mimeType',\n    'fallbackMimeType',\n    'ignoreRegisteredLoaders',\n    'nothrow',\n    'log',\n    'useLocalLibraries',\n    'CDN',\n    'worker',\n    'maxConcurrency',\n    'maxMobileConcurrency',\n    'reuseWorkers',\n    '_nodeWorkers',\n    '_workerType',\n    'limit',\n    '_limitMB',\n    'batchSize',\n    'batchDebounceMs',\n    'metadata',\n    'transforms'\n];\n/**\n * Helper for safely accessing global loaders.gl variables\n * Wraps initialization of global variable in function to defeat overly aggressive tree-shakers\n */\nexport function getGlobalLoaderState() {\n    // @ts-ignore\n    globalThis.loaders = globalThis.loaders || {};\n    // @ts-ignore\n    const { loaders } = globalThis;\n    // Add _state object to keep separate from modules added to globalThis.loaders\n    if (!loaders._state) {\n        loaders._state = {};\n    }\n    return loaders._state;\n}\n/**\n * Store global loader options on the global object to increase chances of cross loaders-version interoperability\n * NOTE: This use case is not reliable but can help when testing new versions of loaders.gl with existing frameworks\n * @returns global loader options merged with default loader options\n */\nexport function getGlobalLoaderOptions() {\n    const state = getGlobalLoaderState();\n    // Ensure all default loader options from this library are mentioned\n    state.globalOptions = state.globalOptions || {\n        ...DEFAULT_LOADER_OPTIONS,\n        core: { ...DEFAULT_LOADER_OPTIONS.core }\n    };\n    return normalizeLoaderOptions(state.globalOptions);\n}\n/**\n * Set global loader options\n * @param options\n */\nexport function setGlobalOptions(options) {\n    const state = getGlobalLoaderState();\n    const globalOptions = getGlobalLoaderOptions();\n    // @ts-expect-error First param looks incorrect\n    state.globalOptions = normalizeOptionsInternal(globalOptions, options);\n    // Make sure any new modules are registered\n    registerJSModules(options.modules);\n}\n/**\n * Merges options with global opts and loader defaults, also injects baseUrl\n * @param options\n * @param loader\n * @param loaders\n * @param url\n */\nexport function normalizeOptions(options, loader, loaders, url) {\n    loaders = loaders || [];\n    loaders = Array.isArray(loaders) ? loaders : [loaders];\n    validateOptions(options, loaders);\n    return normalizeLoaderOptions(normalizeOptionsInternal(loader, options, url));\n}\n/**\n * Returns a copy of the provided options with deprecated top-level core fields moved into `core`\n * and removed from the top level. This keeps global options from leaking deprecated aliases into\n * loader-specific option maps during normalization.\n */\nexport function normalizeLoaderOptions(options) {\n    const normalized = cloneLoaderOptions(options);\n    moveDeprecatedTopLevelOptionsToCore(normalized);\n    for (const key of CORE_LOADER_OPTION_KEYS) {\n        if (normalized.core && normalized.core[key] !== undefined) {\n            delete normalized[key];\n        }\n    }\n    if (normalized.core && normalized.core._workerType !== undefined) {\n        delete normalized._worker;\n    }\n    return normalized;\n}\n// VALIDATE OPTIONS\n/**\n * Warn for unsupported options\n * @param options\n * @param loaders\n */\nfunction validateOptions(options, loaders) {\n    // Check top level options\n    validateOptionsObject(options, null, DEFAULT_LOADER_OPTIONS, REMOVED_LOADER_OPTIONS, loaders);\n    for (const loader of loaders) {\n        // Get the scoped, loader specific options from the user supplied options\n        const idOptions = (options && options[loader.id]) || {};\n        // Get scoped, loader specific default and deprecated options from the selected loader\n        const loaderOptions = (loader.options && loader.options[loader.id]) || {};\n        const deprecatedOptions = (loader.deprecatedOptions && loader.deprecatedOptions[loader.id]) || {};\n        // Validate loader specific options\n        // @ts-ignore\n        validateOptionsObject(idOptions, loader.id, loaderOptions, deprecatedOptions, loaders);\n    }\n}\n// eslint-disable-next-line max-params, complexity\nfunction validateOptionsObject(options, id, defaultOptions, deprecatedOptions, loaders) {\n    const loaderName = id || 'Top level';\n    const prefix = id ? `${id}.` : '';\n    for (const key in options) {\n        // If top level option value is an object it could options for a loader, so ignore\n        const isSubOptions = !id && isObject(options[key]);\n        const isBaseUriOption = key === 'baseUri' && !id;\n        const isWorkerUrlOption = key === 'workerUrl' && id;\n        // <loader>.workerUrl requires special handling as it is now auto-generated and no longer specified as a default option.\n        if (!(key in defaultOptions) && !isBaseUriOption && !isWorkerUrlOption) {\n            // Issue deprecation warnings\n            if (key in deprecatedOptions) {\n                if (probeLog.level > 0) {\n                    probeLog.warn(`${loaderName} loader option \\'${prefix}${key}\\' no longer supported, use \\'${deprecatedOptions[key]}\\'`)();\n                }\n            }\n            else if (!isSubOptions) {\n                if (probeLog.level > 0) {\n                    const suggestion = findSimilarOption(key, loaders);\n                    probeLog.warn(`${loaderName} loader option \\'${prefix}${key}\\' not recognized. ${suggestion}`)();\n                }\n            }\n        }\n    }\n}\nfunction findSimilarOption(optionKey, loaders) {\n    const lowerCaseOptionKey = optionKey.toLowerCase();\n    let bestSuggestion = '';\n    for (const loader of loaders) {\n        for (const key in loader.options) {\n            if (optionKey === key) {\n                return `Did you mean \\'${loader.id}.${key}\\'?`;\n            }\n            const lowerCaseKey = key.toLowerCase();\n            const isPartialMatch = lowerCaseOptionKey.startsWith(lowerCaseKey) || lowerCaseKey.startsWith(lowerCaseOptionKey);\n            if (isPartialMatch) {\n                bestSuggestion = bestSuggestion || `Did you mean \\'${loader.id}.${key}\\'?`;\n            }\n        }\n    }\n    return bestSuggestion;\n}\nfunction normalizeOptionsInternal(loader, options, url) {\n    const loaderDefaultOptions = loader.options || {};\n    const mergedOptions = { ...loaderDefaultOptions };\n    if (loaderDefaultOptions.core) {\n        mergedOptions.core = { ...loaderDefaultOptions.core };\n    }\n    moveDeprecatedTopLevelOptionsToCore(mergedOptions);\n    // LOGGING: options.log can be set to `null` to defeat logging\n    if (mergedOptions.core?.log === null) {\n        mergedOptions.core = { ...mergedOptions.core, log: new NullLog() };\n    }\n    mergeNestedFields(mergedOptions, normalizeLoaderOptions(getGlobalLoaderOptions()));\n    const userOptions = normalizeLoaderOptions(options);\n    mergeNestedFields(mergedOptions, userOptions);\n    addUrlOptions(mergedOptions, url);\n    addDeprecatedTopLevelOptions(mergedOptions);\n    return mergedOptions;\n}\n// Merge nested options objects\nfunction mergeNestedFields(mergedOptions, options) {\n    for (const key in options) {\n        // Check for nested options\n        // object in options => either no key in defaultOptions or object in defaultOptions\n        if (key in options) {\n            const value = options[key];\n            if (isPureObject(value) && isPureObject(mergedOptions[key])) {\n                mergedOptions[key] = {\n                    ...mergedOptions[key],\n                    ...options[key]\n                };\n            }\n            else {\n                mergedOptions[key] = options[key];\n            }\n        }\n        // else: No need to merge nested opts, and the initial merge already copied over the nested options\n    }\n}\n/**\n * Harvest information from the url\n * @deprecated This is mainly there to support loaders that still resolve from options\n * TODO - extract extension?\n * TODO - extract query parameters?\n * TODO - should these be injected on context instead of options?\n */\nfunction addUrlOptions(options, url) {\n    if (!url) {\n        return;\n    }\n    const hasCoreBaseUrl = options.core?.baseUrl !== undefined;\n    if (!hasCoreBaseUrl) {\n        options.core ||= {};\n        options.core.baseUrl = path.dirname(stripQueryString(url));\n    }\n}\nfunction cloneLoaderOptions(options) {\n    const clonedOptions = { ...options };\n    if (options.core) {\n        clonedOptions.core = { ...options.core };\n    }\n    return clonedOptions;\n}\nfunction moveDeprecatedTopLevelOptionsToCore(options) {\n    if (options.baseUri !== undefined) {\n        options.core ||= {};\n        if (options.core.baseUrl === undefined) {\n            options.core.baseUrl = options.baseUri;\n        }\n    }\n    for (const key of CORE_LOADER_OPTION_KEYS) {\n        if (options[key] !== undefined) {\n            const coreOptions = (options.core = options.core || {});\n            const coreRecord = coreOptions;\n            // Treat deprecated top-level core options as aliases to `options.core`, but never override an explicitly\n            // provided `options.core` value.\n            if (coreRecord[key] === undefined) {\n                coreRecord[key] = options[key];\n            }\n        }\n    }\n    // Support the older internal `_worker` alias (used by some tests and integrations) for `_workerType`.\n    const workerTypeAlias = options._worker;\n    if (workerTypeAlias !== undefined) {\n        options.core ||= {};\n        if (options.core._workerType === undefined) {\n            options.core._workerType = workerTypeAlias;\n        }\n    }\n}\nfunction addDeprecatedTopLevelOptions(options) {\n    const coreOptions = options.core;\n    if (!coreOptions) {\n        return;\n    }\n    for (const key of CORE_LOADER_OPTION_KEYS) {\n        if (coreOptions[key] !== undefined) {\n            options[key] = coreOptions[key];\n        }\n    }\n}\n//# sourceMappingURL=option-utils.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { assert } from '@loaders.gl/loader-utils';\nexport function isLoaderObject(loader) {\n    if (!loader) {\n        return false;\n    }\n    if (Array.isArray(loader)) {\n        loader = loader[0];\n    }\n    const hasExtensions = Array.isArray(loader?.extensions);\n    /* Now handled by types and worker loaders do not have these\n    let hasParser =\n      loader.parseTextSync ||\n      loader.parseSync ||\n      loader.parse ||\n      loader.parseStream || // TODO Remove, Replace with parseInBatches\n      loader.parseInBatches;\n    */\n    return hasExtensions;\n}\nexport function normalizeLoader(loader) {\n    // This error is fairly easy to trigger by mixing up import statements etc\n    // So we make an exception and add a developer error message for this case\n    // To help new users from getting stuck here\n    assert(loader, 'null loader');\n    assert(isLoaderObject(loader), 'invalid loader');\n    // NORMALIZE [LOADER, OPTIONS] => LOADER\n    // If [loader, options], create a new loaders object with options merged in\n    let options;\n    if (Array.isArray(loader)) {\n        options = loader[1];\n        loader = loader[0];\n        loader = {\n            ...loader,\n            options: { ...loader.options, ...options }\n        };\n    }\n    // NORMALIZE text and binary flags\n    // Ensure at least one of text/binary flags are properly set\n    // @ts-expect-error\n    if (loader?.parseTextSync || loader?.parseText) {\n        loader.text = true;\n    }\n    if (!loader.text) {\n        loader.binary = true;\n    }\n    return loader;\n}\n//# sourceMappingURL=normalize-loader.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { normalizeLoader } from \"../loader-utils/normalize-loader.js\";\nimport { getGlobalLoaderState } from \"../loader-utils/option-utils.js\";\n/**\n * Store global registered loaders on the global object to increase chances of cross loaders-version interoperability\n * This use case is not reliable but can help when testing new versions of loaders.gl with existing frameworks\n */\nconst getGlobalLoaderRegistry = () => {\n    const state = getGlobalLoaderState();\n    state.loaderRegistry = state.loaderRegistry || [];\n    return state.loaderRegistry;\n};\n/**\n * Register a list of global loaders\n * @note Registration erases loader type information.\n * @deprecated It is recommended that applications manage loader registration. This function will likely be remove in loaders.gl v5\n */\nexport function registerLoaders(loaders) {\n    const loaderRegistry = getGlobalLoaderRegistry();\n    loaders = Array.isArray(loaders) ? loaders : [loaders];\n    for (const loader of loaders) {\n        const normalizedLoader = normalizeLoader(loader);\n        if (!loaderRegistry.find((registeredLoader) => normalizedLoader === registeredLoader)) {\n            // add to the beginning of the loaderRegistry, so the last registeredLoader get picked\n            loaderRegistry.unshift(normalizedLoader);\n        }\n    }\n}\n/**\n * @deprecated It is recommended that applications manage loader registration. This function will likely be remove in loaders.gl v5\n */\nexport function getRegisteredLoaders() {\n    return getGlobalLoaderRegistry();\n}\n/** @deprecated For testing only  */\nexport function _unregisterLoaders() {\n    const state = getGlobalLoaderState();\n    state.loaderRegistry = [];\n}\n//# sourceMappingURL=register-loaders.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { compareArrayBuffers, path, log, isBlob, ensureArrayBuffer, isArrayBufferLike } from '@loaders.gl/loader-utils';\nimport { normalizeLoader } from \"../loader-utils/normalize-loader.js\";\nimport { normalizeLoaderOptions } from \"../loader-utils/option-utils.js\";\nimport { getResourceUrl, getResourceMIMEType } from \"../utils/resource-utils.js\";\nimport { compareMIMETypes } from \"../utils/mime-type-utils.js\";\nimport { getRegisteredLoaders } from \"./register-loaders.js\";\nimport { stripQueryString } from \"../utils/url-utils.js\";\nconst EXT_PATTERN = /\\.([^.]+)$/;\n// TODO - Need a variant that peeks at streams for parseInBatches\n// TODO - Detect multiple matching loaders? Use heuristics to grade matches?\n// TODO - Allow apps to pass context to disambiguate between multiple matches (e.g. multiple .json formats)?\n/**\n * Find a loader that matches file extension and/or initial file content\n * Search the loaders array argument for a loader that matches url extension or initial data\n * Returns: a normalized loader\n * @param data data to assist\n * @param loaders\n * @param options\n * @param context used internally, applications should not provide this parameter\n */\nexport async function selectLoader(data, loaders = [], options, context) {\n    if (!validHTTPResponse(data)) {\n        return null;\n    }\n    const normalizedOptions = normalizeLoaderOptions(options || {});\n    normalizedOptions.core ||= {};\n    if (data instanceof Response && mayContainText(data)) {\n        const text = await data.clone().text();\n        const textLoader = selectLoaderSync(text, loaders, { ...normalizedOptions, core: { ...normalizedOptions.core, nothrow: true } }, context);\n        if (textLoader) {\n            return textLoader;\n        }\n    }\n    // First make a sync attempt, disabling exceptions\n    let loader = selectLoaderSync(data, loaders, { ...normalizedOptions, core: { ...normalizedOptions.core, nothrow: true } }, context);\n    if (loader) {\n        return loader;\n    }\n    // For Blobs and Files, try to asynchronously read a small initial slice and test again with that\n    // to see if we can detect by initial content\n    if (isBlob(data)) {\n        data = await data.slice(0, 10).arrayBuffer();\n        loader = selectLoaderSync(data, loaders, normalizedOptions, context);\n    }\n    if (!loader && data instanceof Response && mayContainText(data)) {\n        const text = await data.clone().text();\n        loader = selectLoaderSync(text, loaders, normalizedOptions, context);\n    }\n    // no loader available\n    if (!loader && !normalizedOptions.core.nothrow) {\n        throw new Error(getNoValidLoaderMessage(data));\n    }\n    return loader;\n}\nfunction mayContainText(response) {\n    const mimeType = getResourceMIMEType(response);\n    return Boolean(mimeType &&\n        (mimeType.startsWith('text/') || mimeType === 'application/json' || mimeType.endsWith('+json')));\n}\n/**\n * Find a loader that matches file extension and/or initial file content\n * Search the loaders array argument for a loader that matches url extension or initial data\n * Returns: a normalized loader\n * @param data data to assist\n * @param loaders\n * @param options\n * @param context used internally, applications should not provide this parameter\n */\nexport function selectLoaderSync(data, loaders = [], options, context) {\n    if (!validHTTPResponse(data)) {\n        return null;\n    }\n    const normalizedOptions = normalizeLoaderOptions(options || {});\n    normalizedOptions.core ||= {};\n    // eslint-disable-next-line complexity\n    // if only a single loader was provided (not as array), force its use\n    // TODO - Should this behavior be kept and documented?\n    if (loaders && !Array.isArray(loaders)) {\n        // TODO - remove support for legacy loaders\n        return normalizeLoader(loaders);\n    }\n    // Build list of candidate loaders that will be searched in order for a match\n    let candidateLoaders = [];\n    // First search supplied loaders\n    if (loaders) {\n        candidateLoaders = candidateLoaders.concat(loaders);\n    }\n    // Then fall back to registered loaders\n    if (!normalizedOptions.core.ignoreRegisteredLoaders) {\n        candidateLoaders.push(...getRegisteredLoaders());\n    }\n    // TODO - remove support for legacy loaders\n    normalizeLoaders(candidateLoaders);\n    const loader = selectLoaderInternal(data, candidateLoaders, normalizedOptions, context);\n    // no loader available\n    if (!loader && !normalizedOptions.core.nothrow) {\n        throw new Error(getNoValidLoaderMessage(data));\n    }\n    return loader;\n}\n/** Implements loaders selection logic */\n// eslint-disable-next-line complexity\nfunction selectLoaderInternal(data, loaders, options, context) {\n    const url = getResourceUrl(data);\n    const type = getResourceMIMEType(data);\n    const testUrl = stripQueryString(url) || context?.url;\n    let loader = null;\n    let reason = '';\n    // if options.mimeType is supplied, it takes precedence\n    if (options?.core?.mimeType) {\n        loader = findLoaderByMIMEType(loaders, options?.core?.mimeType);\n        reason = `match forced by supplied MIME type ${options?.core?.mimeType}`;\n    }\n    // Look up loader by url\n    loader = loader || findLoaderByUrl(loaders, testUrl);\n    reason = reason || (loader ? `matched url ${testUrl}` : '');\n    // Look up loader by mime type\n    loader = loader || findLoaderByMIMEType(loaders, type);\n    reason = reason || (loader ? `matched MIME type ${type}` : '');\n    // Look for loader via initial bytes (Note: not always accessible (e.g. Response, stream, async iterator)\n    // @ts-ignore Blob | Response\n    loader = loader || findLoaderByInitialBytes(loaders, data);\n    // @ts-ignore Blob | Response\n    reason = reason || (loader ? `matched initial data ${getFirstCharacters(data)}` : '');\n    // Look up loader by fallback mime type\n    if (options?.core?.fallbackMimeType) {\n        loader = loader || findLoaderByMIMEType(loaders, options?.core?.fallbackMimeType);\n        reason = reason || (loader ? `matched fallback MIME type ${type}` : '');\n    }\n    if (reason) {\n        log.log(1, `selectLoader selected ${loader?.name}: ${reason}.`);\n    }\n    return loader;\n}\n/** Check HTTP Response */\nfunction validHTTPResponse(data) {\n    // HANDLE HTTP status\n    if (data instanceof Response) {\n        // 204 - NO CONTENT. This handles cases where e.g. a tile server responds with 204 for a missing tile\n        if (data.status === 204) {\n            return false;\n        }\n    }\n    return true;\n}\n/** Generate a helpful message to help explain why loader selection failed. */\nfunction getNoValidLoaderMessage(data) {\n    const url = getResourceUrl(data);\n    const type = getResourceMIMEType(data);\n    let message = 'No valid loader found (';\n    message += url ? `${path.filename(url)}, ` : 'no url provided, ';\n    message += `MIME type: ${type ? `\"${type}\"` : 'not provided'}, `;\n    // First characters are only accessible when called on data (string or arrayBuffer).\n    // @ts-ignore Blob | Response\n    const firstCharacters = data ? getFirstCharacters(data) : '';\n    message += firstCharacters ? ` first bytes: \"${firstCharacters}\"` : 'first bytes: not available';\n    message += ')';\n    return message;\n}\nfunction normalizeLoaders(loaders) {\n    for (const loader of loaders) {\n        normalizeLoader(loader);\n    }\n}\n// TODO - Would be nice to support http://example.com/file.glb?parameter=1\n// E.g: x = new URL('http://example.com/file.glb?load=1'; x.pathname\nfunction findLoaderByUrl(loaders, url) {\n    // Get extension\n    const match = url && EXT_PATTERN.exec(url);\n    const extension = match && match[1];\n    return extension ? findLoaderByExtension(loaders, extension) : null;\n}\nfunction findLoaderByExtension(loaders, extension) {\n    extension = extension.toLowerCase();\n    for (const loader of loaders) {\n        for (const loaderExtension of loader.extensions) {\n            if (loaderExtension.toLowerCase() === extension) {\n                return loader;\n            }\n        }\n    }\n    return null;\n}\nfunction findLoaderByMIMEType(loaders, mimeType) {\n    for (const loader of loaders) {\n        if (loader.mimeTypes?.some((mimeType1) => compareMIMETypes(mimeType, mimeType1))) {\n            return loader;\n        }\n        // Support referring to loaders using the \"unregistered tree\"\n        // https://en.wikipedia.org/wiki/Media_type#Unregistered_tree\n        if (compareMIMETypes(mimeType, `application/x.${loader.id}`)) {\n            return loader;\n        }\n    }\n    return null;\n}\nfunction findLoaderByInitialBytes(loaders, data) {\n    if (!data) {\n        return null;\n    }\n    for (const loader of loaders) {\n        if (typeof data === 'string') {\n            if (testDataAgainstText(data, loader)) {\n                return loader;\n            }\n        }\n        else if (ArrayBuffer.isView(data)) {\n            // Typed Arrays can have offsets into underlying buffer\n            if (testDataAgainstBinary(data.buffer, data.byteOffset, loader)) {\n                return loader;\n            }\n        }\n        else if (data instanceof ArrayBuffer) {\n            const byteOffset = 0;\n            if (testDataAgainstBinary(data, byteOffset, loader)) {\n                return loader;\n            }\n        }\n        // TODO Handle streaming case (requires creating a new AsyncIterator)\n    }\n    return null;\n}\nfunction testDataAgainstText(data, loader) {\n    if (loader.testText) {\n        return loader.testText(data);\n    }\n    const tests = Array.isArray(loader.tests) ? loader.tests : [loader.tests];\n    return tests.some((test) => data.startsWith(test));\n}\nfunction testDataAgainstBinary(data, byteOffset, loader) {\n    const tests = Array.isArray(loader.tests) ? loader.tests : [loader.tests];\n    return tests.some((test) => testBinary(data, byteOffset, loader, test));\n}\nfunction testBinary(data, byteOffset, loader, test) {\n    if (isArrayBufferLike(test)) {\n        return compareArrayBuffers(test, data, test.byteLength);\n    }\n    switch (typeof test) {\n        case 'function':\n            return test(ensureArrayBuffer(data));\n        case 'string':\n            // Magic bytes check: If `test` is a string, check if binary data starts with that strings\n            const magic = getMagicString(data, byteOffset, test.length);\n            return test === magic;\n        default:\n            return false;\n    }\n}\nfunction getFirstCharacters(data, length = 5) {\n    if (typeof data === 'string') {\n        return data.slice(0, length);\n    }\n    else if (ArrayBuffer.isView(data)) {\n        // Typed Arrays can have offsets into underlying buffer\n        return getMagicString(data.buffer, data.byteOffset, length);\n    }\n    else if (data instanceof ArrayBuffer) {\n        const byteOffset = 0;\n        return getMagicString(data, byteOffset, length);\n    }\n    return '';\n}\nfunction getMagicString(arrayBuffer, byteOffset, length) {\n    if (arrayBuffer.byteLength < byteOffset + length) {\n        return '';\n    }\n    const dataView = new DataView(arrayBuffer);\n    let magic = '';\n    for (let i = 0; i < length; i++) {\n        magic += String.fromCharCode(dataView.getUint8(byteOffset + i));\n    }\n    return magic;\n}\n//# sourceMappingURL=select-loader.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { ensureArrayBuffer } from '@loaders.gl/loader-utils';\nconst DEFAULT_CHUNK_SIZE = 256 * 1024;\n/**\n * Returns an iterator that breaks a big string into chunks and yields them one-by-one as ArrayBuffers\n * @param blob string to iterate over\n * @param options\n * @param options.chunkSize\n */\nexport function* makeStringIterator(string, options) {\n    const chunkSize = options?.chunkSize || DEFAULT_CHUNK_SIZE;\n    let offset = 0;\n    const textEncoder = new TextEncoder();\n    while (offset < string.length) {\n        // Create a chunk of the right size\n        const chunkLength = Math.min(string.length - offset, chunkSize);\n        const chunk = string.slice(offset, offset + chunkLength);\n        offset += chunkLength;\n        // yield an ArrayBuffer chunk\n        yield ensureArrayBuffer(textEncoder.encode(chunk));\n    }\n}\n//# sourceMappingURL=make-string-iterator.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst DEFAULT_CHUNK_SIZE = 256 * 1024;\n/**\n * Returns an iterator that breaks a big ArrayBuffer into chunks and yields them one-by-one\n * @param blob ArrayBuffer to iterate over\n * @param options\n * @param options.chunkSize\n */\nexport function* makeArrayBufferIterator(arrayBuffer, options = {}) {\n    const { chunkSize = DEFAULT_CHUNK_SIZE } = options;\n    let byteOffset = 0;\n    while (byteOffset < arrayBuffer.byteLength) {\n        // Create a chunk of the right size\n        const chunkByteLength = Math.min(arrayBuffer.byteLength - byteOffset, chunkSize);\n        const chunk = new ArrayBuffer(chunkByteLength);\n        // Copy data from the big chunk\n        const sourceArray = new Uint8Array(arrayBuffer, byteOffset, chunkByteLength);\n        const chunkArray = new Uint8Array(chunk);\n        chunkArray.set(sourceArray);\n        // yield the chunk\n        byteOffset += chunkByteLength;\n        yield chunk;\n    }\n}\n//# sourceMappingURL=make-array-buffer-iterator.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst DEFAULT_CHUNK_SIZE = 1024 * 1024; // 1MB — biggest value that keeps UI responsive\n/**\n * Returns an iterator that breaks a big Blob into chunks and yields them one-by-one\n * @param blob Blob or File object\n * @param options\n * @param options.chunkSize\n */\nexport async function* makeBlobIterator(blob, options) {\n    const chunkSize = options?.chunkSize || DEFAULT_CHUNK_SIZE;\n    let offset = 0;\n    while (offset < blob.size) {\n        const end = offset + chunkSize;\n        const chunk = await blob.slice(offset, end).arrayBuffer();\n        offset = end;\n        yield chunk;\n    }\n}\n//# sourceMappingURL=make-blob-iterator.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { isBrowser, toArrayBuffer } from '@loaders.gl/loader-utils';\n/**\n * Returns an async iterable that reads from a stream (works in both Node.js and browsers)\n * @param stream stream to iterator over\n */\nexport function makeStreamIterator(stream, options) {\n    return isBrowser\n        ? makeBrowserStreamIterator(stream, options)\n        : makeNodeStreamIterator(stream, options);\n}\n/**\n * Returns an async iterable that reads from a DOM (browser) stream\n * @param stream stream to iterate from\n * @see https://jakearchibald.com/2017/async-iterators-and-generators/#making-streams-iterate\n */\nasync function* makeBrowserStreamIterator(stream, options) {\n    // WhatWG: stream is supposed to have a `getIterator` method\n    // if (typeof stream.getIterator === 'function') {\n    //   return stream.getIterator();\n    // }\n    // if (typeof stream[Symbol.asyncIterator] === 'function') {\n    //   return makeToArrayBufferIterator(stream);\n    // }\n    // In the browser, we first need to get a lock on the stream\n    const reader = stream.getReader();\n    let nextBatchPromise;\n    try {\n        // eslint-disable-next-line no-constant-condition\n        while (true) {\n            const currentBatchPromise = nextBatchPromise || reader.read();\n            // Issue a read for an additional batch, while we await the next batch\n            // Idea is to make fetching happen in parallel with processing / parsing\n            if (options?._streamReadAhead) {\n                nextBatchPromise = reader.read();\n            }\n            // Read from the stream\n            // value is a Uint8Array\n            const { done, value } = await currentBatchPromise;\n            // Exit if we're done\n            if (done) {\n                return;\n            }\n            // Else yield the chunk\n            yield toArrayBuffer(value);\n        }\n    }\n    catch (error) {\n        // TODO - examples makes it look like this should always be called,\n        // but that generates exceptions so only call it if we do not reach the end\n        reader.releaseLock();\n    }\n}\n/**\n * Returns an async iterable that reads from a DOM (browser) stream\n * @param stream stream to iterate from\n * @note Requires Node.js >= 10\n */\nasync function* makeNodeStreamIterator(stream, options) {\n    // Hacky test for node version to ensure we don't call bad polyfills\n    // NODE 10+: stream is an asyncIterator\n    for await (const chunk of stream) {\n        yield toArrayBuffer(chunk); // Coerce each chunk to ArrayBuffer\n    }\n}\n/* TODO - remove NODE < 10\n * @see https://github.com/bustle/streaming-iterables, MIT license\n *\n  if (typeof stream[Symbol.asyncIterator] === 'function') {\n    return;\n  }\n\n  // TODO - check if is this ever used in Node 10+?\n  // eslint-disable-next-line no-constant-condition\n  while (true) {\n    const data = stream.read();\n    if (data !== null) {\n      yield toArrayBuffer(data);\n      // eslint-disable-next-line no-continue\n      continue;\n    }\n    if (stream._readableState?.ended) {\n      return;\n    }\n    await onceReadable(stream);\n  }\n\nasync function onceReadable(stream: Readable): Promise<any> {\n  return new Promise((resolve) => {\n    stream.once('readable', resolve);\n  });\n}\n  */\n//# sourceMappingURL=make-stream-iterator.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { makeStringIterator } from \"./make-string-iterator.js\";\nimport { makeArrayBufferIterator } from \"./make-array-buffer-iterator.js\";\nimport { makeBlobIterator } from \"./make-blob-iterator.js\";\nimport { makeStreamIterator } from \"./make-stream-iterator.js\";\nimport { isBlob, isReadableStream, isResponse } from '@loaders.gl/loader-utils';\n/**\n * Returns an iterator that breaks its input into chunks and yields them one-by-one.\n * @param data\n * @param options\n * @returns\n * This function can e.g. be used to enable data sources that can only be read atomically\n * (such as `Blob` and `File` via `FileReader`) to still be parsed in batches.\n */\nexport function makeIterator(data, options) {\n    if (typeof data === 'string') {\n        // Note: Converts string chunks to binary\n        return makeStringIterator(data, options);\n    }\n    if (data instanceof ArrayBuffer) {\n        return makeArrayBufferIterator(data, options);\n    }\n    if (isBlob(data)) {\n        return makeBlobIterator(data, options);\n    }\n    if (isReadableStream(data)) {\n        return makeStreamIterator(data, options);\n    }\n    if (isResponse(data)) {\n        const responseBody = data.body;\n        if (!responseBody) {\n            throw new Error('Readable stream not available on Response');\n        }\n        return makeStreamIterator(responseBody, options);\n    }\n    throw new Error('makeIterator');\n}\n//# sourceMappingURL=make-iterator.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { concatenateArrayBuffersAsync, isPromise, isResponse, isReadableStream, isAsyncIterable, isIterable, isIterator, isBlob, isBuffer, isArrayBufferLike, toArrayBuffer, toArrayBufferView } from '@loaders.gl/loader-utils';\nimport { makeIterator } from \"../../iterators/make-iterator/make-iterator.js\";\nimport { checkResponse, makeResponse } from \"../utils/response-utils.js\";\nconst ERR_DATA = 'Cannot convert supplied data type';\n/**\n * Returns an {@link ArrayBuffer} or string from the provided data synchronously.\n * Supports `ArrayBuffer`, `ArrayBufferView`, and `ArrayBufferLike` (e.g. `SharedArrayBuffer`)\n * while preserving typed array view offsets.\n */\n// eslint-disable-next-line complexity\nexport function getArrayBufferOrStringFromDataSync(data, loader, options) {\n    if (loader.text && typeof data === 'string') {\n        return data;\n    }\n    if (isBuffer(data)) {\n        data = data.buffer;\n    }\n    if (isArrayBufferLike(data)) {\n        const bufferSource = toArrayBufferView(data);\n        if (loader.text && !loader.binary) {\n            const textDecoder = new TextDecoder('utf8');\n            return textDecoder.decode(bufferSource);\n        }\n        return toArrayBuffer(bufferSource);\n    }\n    throw new Error(ERR_DATA);\n}\n/**\n * Resolves the provided data into an {@link ArrayBuffer} or string asynchronously.\n * Accepts the full {@link DataType} surface including responses and async iterables.\n */\nexport async function getArrayBufferOrStringFromData(data, loader, options) {\n    if (typeof data === 'string' || isArrayBufferLike(data)) {\n        return getArrayBufferOrStringFromDataSync(data, loader, options);\n    }\n    // Blobs and files are FileReader compatible\n    if (isBlob(data)) {\n        data = await makeResponse(data);\n    }\n    if (isResponse(data)) {\n        await checkResponse(data);\n        return loader.binary ? await data.arrayBuffer() : await data.text();\n    }\n    if (isReadableStream(data)) {\n        // @ts-expect-error TS2559 options type\n        data = makeIterator(data, options);\n    }\n    if (isIterable(data) || isAsyncIterable(data)) {\n        // Assume arrayBuffer iterator - attempt to concatenate\n        return concatenateArrayBuffersAsync(data);\n    }\n    throw new Error(ERR_DATA);\n}\n/**\n * Normalizes batchable inputs into async iterables for batch parsing flows.\n * Supports synchronous iterables, async iterables, fetch responses, readable streams, and\n * single binary chunks (including typed array views and `ArrayBufferLike` values).\n */\nexport async function getAsyncIterableFromData(data, options) {\n    if (isPromise(data)) {\n        data = await data;\n    }\n    if (isIterator(data)) {\n        return data;\n    }\n    if (isResponse(data)) {\n        // Note Since this function is not async, we currently can't load error message, just status\n        await checkResponse(data);\n        // TODO - bug in polyfill, body can be a Promise under Node.js\n        // eslint-disable-next-line @typescript-eslint/await-thenable\n        const body = await data.body;\n        if (!body) {\n            throw new Error(ERR_DATA);\n        }\n        return makeIterator(body, options);\n    }\n    if (isBlob(data) || isReadableStream(data)) {\n        return makeIterator(data, options);\n    }\n    if (isAsyncIterable(data)) {\n        return data;\n    }\n    if (isIterable(data)) {\n        return data;\n    }\n    // @ts-expect-error TODO - fix type mess\n    return getIterableFromData(data);\n}\n/**\n * Returns a readable stream for streaming loader inputs when available.\n */\nexport async function getReadableStream(data) {\n    if (isReadableStream(data)) {\n        return data;\n    }\n    if (isResponse(data)) {\n        // @ts-ignore\n        if (!data.body) {\n            throw new Error(ERR_DATA);\n        }\n        return data.body;\n    }\n    const response = await makeResponse(data);\n    // @ts-ignore\n    if (!response.body) {\n        throw new Error(ERR_DATA);\n    }\n    return response.body;\n}\n// HELPERS\nfunction getIterableFromData(data) {\n    // generate an iterator that emits a single chunk\n    if (ArrayBuffer.isView(data)) {\n        return (function* oneChunk() {\n            yield toArrayBuffer(data);\n        })();\n    }\n    if (isArrayBufferLike(data)) {\n        return (function* oneChunk() {\n            yield toArrayBuffer(data);\n        })();\n    }\n    if (isIterator(data)) {\n        return data;\n    }\n    if (isIterable(data)) {\n        return data[Symbol.iterator]();\n    }\n    throw new Error(ERR_DATA);\n}\n//# sourceMappingURL=get-data.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { isObject } from '@loaders.gl/loader-utils';\nimport { fetchFile } from \"../fetch/fetch-file.js\";\nimport { getGlobalLoaderOptions } from \"./option-utils.js\";\n/**\n * Gets the current fetch function from options and context\n * @param options\n * @param context\n */\nexport function getFetchFunction(options, context) {\n    const globalOptions = getGlobalLoaderOptions();\n    const loaderOptions = options || globalOptions;\n    const fetchOption = loaderOptions.fetch ?? loaderOptions.core?.fetch;\n    // options.fetch can be a function\n    if (typeof fetchOption === 'function') {\n        return fetchOption;\n    }\n    // options.fetch can be an options object\n    if (isObject(fetchOption)) {\n        return (url) => fetchFile(url, fetchOption);\n    }\n    // else refer to context (from parent loader) if available\n    if (context?.fetch) {\n        return context?.fetch;\n    }\n    // else return the default fetch function\n    return fetchFile;\n}\n//# sourceMappingURL=get-fetch-function.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { getFetchFunction } from \"./get-fetch-function.js\";\nimport { extractQueryString, stripQueryString } from \"../utils/url-utils.js\";\nimport { path } from '@loaders.gl/loader-utils';\n/**\n * \"sub\" loaders invoked by other loaders get a \"context\" injected on `this`\n * The context will inject core methods like `parse` and contain information\n * about loaders and options passed in to the top-level `parse` call.\n *\n * @param context\n * @param options\n * @param previousContext\n */\nexport function getLoaderContext(context, options, parentContext) {\n    // For recursive calls, we already have a context\n    // TODO - add any additional loaders to context?\n    if (parentContext) {\n        return parentContext;\n    }\n    const newContext = {\n        fetch: getFetchFunction(options, context),\n        ...context\n    };\n    // Parse URLs so that subloaders can easily generate correct strings\n    if (newContext.url) {\n        const baseUrl = stripQueryString(newContext.url);\n        newContext.baseUrl = baseUrl;\n        newContext.queryString = extractQueryString(newContext.url);\n        newContext.filename = path.filename(baseUrl);\n        newContext.baseUrl = path.dirname(baseUrl);\n    }\n    // Recursive loading does not use single loader\n    if (!Array.isArray(newContext.loaders)) {\n        newContext.loaders = null;\n    }\n    return newContext;\n}\n// eslint-disable-next-line complexity\nexport function getLoadersFromContext(loaders, context) {\n    // A single loader (non-array) indicates no selection desired. Force select.\n    if (loaders && !Array.isArray(loaders)) {\n        return loaders;\n    }\n    // Create a merged list\n    let candidateLoaders;\n    if (loaders) {\n        candidateLoaders = Array.isArray(loaders) ? loaders : [loaders];\n    }\n    if (context && context.loaders) {\n        const contextLoaders = Array.isArray(context.loaders) ? context.loaders : [context.loaders];\n        candidateLoaders = candidateLoaders ? [...candidateLoaders, ...contextLoaders] : contextLoaders;\n    }\n    // If no loaders, return null to look in globally registered loaders\n    return candidateLoaders && candidateLoaders.length ? candidateLoaders : undefined;\n}\n//# sourceMappingURL=loader-context.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { parseWithWorker, canParseWithWorker, mergeOptions, isResponse } from '@loaders.gl/loader-utils';\nimport { assert, validateWorkerVersion } from '@loaders.gl/worker-utils';\nimport { isLoaderObject } from \"../loader-utils/normalize-loader.js\";\nimport { normalizeOptions } from \"../loader-utils/option-utils.js\";\nimport { getArrayBufferOrStringFromData } from \"../loader-utils/get-data.js\";\nimport { getLoaderContext, getLoadersFromContext } from \"../loader-utils/loader-context.js\";\nimport { getResourceUrl } from \"../utils/resource-utils.js\";\nimport { selectLoader } from \"./select-loader.js\";\n/**\n * Parses `data` using a specified loader\n * @param data\n * @param loaders\n * @param options\n * @param context\n */\n// implementation signature\nexport async function parse(data, loaders, options, context) {\n    // Signature: parse(data, options, context | url)\n    // Uses registered loaders\n    if (loaders && !Array.isArray(loaders) && !isLoaderObject(loaders)) {\n        context = undefined; // context not supported in short signature\n        options = loaders;\n        loaders = undefined;\n    }\n    data = await data; // Resolve any promise\n    options = options || {}; // Could be invalid...\n    // Extract a url for auto detection\n    const url = getResourceUrl(data);\n    // Chooses a loader (and normalizes it)\n    // Also use any loaders in the context, new loaders take priority\n    const typedLoaders = loaders;\n    const candidateLoaders = getLoadersFromContext(typedLoaders, context);\n    // todo hacky type cast\n    const loader = await selectLoader(data, candidateLoaders, options);\n    // Note: if no loader was found, if so just return null\n    if (!loader) {\n        return null;\n    }\n    // Normalize options\n    // @ts-expect-error candidateLoaders\n    const strictOptions = normalizeOptions(options, loader, candidateLoaders, url); // Could be invalid...\n    // Get a context (if already present, will be unchanged)\n    context = getLoaderContext(\n    // @ts-expect-error\n    { url, _parse: parse, loaders: candidateLoaders }, strictOptions, context || null);\n    return await parseWithLoader(loader, data, strictOptions, context);\n}\n// TODO: support progress and abort\n// TODO - should accept loader.parseAsyncIterator and concatenate.\nasync function parseWithLoader(loader, data, options, context) {\n    validateWorkerVersion(loader);\n    options = mergeOptions(loader.options, options);\n    if (isResponse(data)) {\n        // Serialize to support passing the response to web worker\n        const { ok, redirected, status, statusText, type, url } = data;\n        const headers = Object.fromEntries(data.headers.entries());\n        // @ts-expect-error TODO - fix this\n        context.response = { headers, ok, redirected, status, statusText, type, url };\n    }\n    data = await getArrayBufferOrStringFromData(data, loader, options);\n    const loaderWithParser = loader;\n    // First check for synchronous text parser, wrap results in promises\n    if (loaderWithParser.parseTextSync && typeof data === 'string') {\n        return loaderWithParser.parseTextSync(data, options, context);\n    }\n    // If we have a workerUrl and the loader can parse the given options efficiently in a worker\n    if (canParseWithWorker(loader, options)) {\n        return await parseWithWorker(loader, data, options, context, parse);\n    }\n    // Check for asynchronous parser\n    if (loaderWithParser.parseText && typeof data === 'string') {\n        return await loaderWithParser.parseText(data, options, context);\n    }\n    if (loaderWithParser.parse) {\n        return await loaderWithParser.parse(data, options, context);\n    }\n    // This should not happen, all sync loaders should also offer `parse` function\n    assert(!loaderWithParser.parseSync);\n    // TBD - If asynchronous parser not available, return null\n    throw new Error(`${loader.id} loader - no parser found and worker is disabled`);\n}\n//# sourceMappingURL=parse.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/** Deduce column types from values */\nexport function getDataTypeFromValue(value, defaultNumberType = 'float32') {\n    if (value instanceof Date) {\n        return 'date-millisecond';\n    }\n    if (value instanceof Number) {\n        return defaultNumberType;\n    }\n    if (typeof value === 'string') {\n        return 'utf8';\n    }\n    if (value === null || value === 'undefined') {\n        return 'null';\n    }\n    return 'null';\n}\n/**\n * Deduces a simple data type \"descriptor from a typed array instance\n */\nexport function getDataTypeFromArray(array) {\n    let type = getDataTypeFromTypedArray(array);\n    if (type !== 'null') {\n        return { type, nullable: false };\n    }\n    if (array.length > 0) {\n        type = getDataTypeFromValue(array[0]);\n        return { type, nullable: true };\n    }\n    return { type: 'null', nullable: true };\n}\n/**\n * Deduces a simple data type \"descriptor from a typed array instance\n */\nexport function getDataTypeFromTypedArray(array) {\n    switch (array.constructor) {\n        case Int8Array:\n            return 'int8';\n        case Uint8Array:\n        case Uint8ClampedArray:\n            return 'uint8';\n        case Int16Array:\n            return 'int16';\n        case Uint16Array:\n            return 'uint16';\n        case Int32Array:\n            return 'int32';\n        case Uint32Array:\n            return 'uint32';\n        case Float32Array:\n            return 'float32';\n        case Float64Array:\n            return 'float64';\n        default:\n            return 'null';\n    }\n}\nexport function getArrayTypeFromDataType(type, nullable) {\n    if (!nullable) {\n        switch (type) {\n            case 'int8':\n                return Int8Array;\n            case 'uint8':\n                return Uint8Array;\n            case 'int16':\n                return Int16Array;\n            case 'uint16':\n                return Uint16Array;\n            case 'int32':\n                return Int32Array;\n            case 'uint32':\n                return Uint32Array;\n            case 'float32':\n                return Float32Array;\n            case 'float64':\n                return Float64Array;\n            default:\n                break;\n        }\n    }\n    // if (typeof BigInt64Array !== 'undefined') {\n    //   TYPED_ARRAY_TO_TYPE.BigInt64Array = new Int64();\n    //   TYPED_ARRAY_TO_TYPE.BigUint64Array = new Uint64();\n    // }\n    return Array;\n}\n//# sourceMappingURL=data-type.js.map","/**\n * Get number of vertices in mesh\n * @param attributes\n */\nexport function getMeshSize(attributes) {\n    let size = 0;\n    for (const attributeName in attributes) {\n        const attribute = attributes[attributeName];\n        if (ArrayBuffer.isView(attribute)) {\n            // @ts-ignore DataView doesn't have BYTES_PER_ELEMENT\n            size += attribute.byteLength * attribute.BYTES_PER_ELEMENT;\n        }\n    }\n    return size;\n}\n/**\n * Get the (axis aligned) bounding box of a mesh\n * @param attributes\n * @returns array of two vectors representing the axis aligned bounding box\n */\n// eslint-disable-next-line complexity\nexport function getMeshBoundingBox(attributes) {\n    let minX = Infinity;\n    let minY = Infinity;\n    let minZ = Infinity;\n    let maxX = -Infinity;\n    let maxY = -Infinity;\n    let maxZ = -Infinity;\n    const positions = attributes.POSITION ? attributes.POSITION.value : [];\n    const len = positions && positions.length;\n    for (let i = 0; i < len; i += 3) {\n        const x = positions[i];\n        const y = positions[i + 1];\n        const z = positions[i + 2];\n        minX = x < minX ? x : minX;\n        minY = y < minY ? y : minY;\n        minZ = z < minZ ? z : minZ;\n        maxX = x > maxX ? x : maxX;\n        maxY = y > maxY ? y : maxY;\n        maxZ = z > maxZ ? z : maxZ;\n    }\n    return [\n        [minX, minY, minZ],\n        [maxX, maxY, maxZ]\n    ];\n}\n//# sourceMappingURL=mesh-utils.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { getDataTypeFromTypedArray } from \"../schema/data-type.js\";\n/**\n * Create a schema for mesh attributes data\n * @param attributes\n * @param metadata\n * @returns\n */\nexport function deduceMeshSchema(attributes, metadata = {}) {\n    const fields = deduceMeshFields(attributes);\n    return { fields, metadata };\n}\n/**\n * Create arrow-like schema field for mesh attribute\n * @param attributeName\n * @param attribute\n * @param optionalMetadata\n * @returns\n */\nexport function deduceMeshField(name, attribute, optionalMetadata) {\n    const type = getDataTypeFromTypedArray(attribute.value);\n    const metadata = optionalMetadata ? optionalMetadata : makeMeshAttributeMetadata(attribute);\n    return {\n        name,\n        type: { type: 'fixed-size-list', listSize: attribute.size, children: [{ name: 'value', type }] },\n        nullable: false,\n        metadata\n    };\n}\n/**\n * Create fields array for mesh attributes\n * @param attributes\n * @returns\n */\nfunction deduceMeshFields(attributes) {\n    const fields = [];\n    for (const attributeName in attributes) {\n        const attribute = attributes[attributeName];\n        fields.push(deduceMeshField(attributeName, attribute));\n    }\n    return fields;\n}\n/**\n * Make metadata by mesh attribute properties\n * @param attribute\n * @returns\n */\nexport function makeMeshAttributeMetadata(attribute) {\n    const result = {};\n    if ('byteOffset' in attribute) {\n        result.byteOffset = attribute.byteOffset.toString(10);\n    }\n    if ('byteStride' in attribute) {\n        result.byteStride = attribute.byteStride.toString(10);\n    }\n    if ('normalized' in attribute) {\n        result.normalized = attribute.normalized.toString();\n    }\n    return result;\n}\n//# sourceMappingURL=deduce-mesh-schema.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { isBlob } from '@loaders.gl/loader-utils';\nimport { isLoaderObject } from \"../loader-utils/normalize-loader.js\";\nimport { getFetchFunction } from \"../loader-utils/get-fetch-function.js\";\nimport { normalizeLoaderOptions } from \"../loader-utils/option-utils.js\";\nimport { parse } from \"./parse.js\";\n// export async function load(url: string | DataType, loaders: LoaderOptions): Promise<any>;\n// implementation signature\nexport async function load(url, loaders, options, context) {\n    let resolvedLoaders;\n    let resolvedOptions;\n    // Signature: load(url, options)\n    if (!Array.isArray(loaders) && !isLoaderObject(loaders)) {\n        resolvedLoaders = [];\n        resolvedOptions = loaders;\n        context = undefined; // context not supported in short signature\n    }\n    else {\n        resolvedLoaders = loaders;\n        resolvedOptions = options;\n    }\n    // Select fetch function\n    const fetch = getFetchFunction(resolvedOptions);\n    // at this point, `url` could be already loaded binary data\n    let data = url;\n    // url is a string, fetch the url\n    if (typeof url === 'string') {\n        data = await fetch(url);\n        // URL is Blob or File, fetchFile handles it (alt: we could generate ObjectURL here)\n    }\n    if (isBlob(url)) {\n        // The fetch response object will contain blob.name\n        // @ts-expect-error TODO - This may not work for overridden fetch functions\n        data = await fetch(url);\n    }\n    if (typeof url === 'string') {\n        const normalizedOptions = normalizeLoaderOptions(resolvedOptions || {});\n        if (!normalizedOptions.core?.baseUrl) {\n            resolvedOptions = {\n                ...resolvedOptions,\n                core: {\n                    ...resolvedOptions?.core,\n                    baseUrl: url\n                }\n            };\n        }\n    }\n    // Data is loaded (at least we have a `Response` object) so time to hand over to `parse`\n    // return await parse(data, loaders as Loader[], options);\n    return Array.isArray(resolvedLoaders)\n        ? await parse(data, resolvedLoaders, resolvedOptions) // loader array overload\n        : await parse(data, resolvedLoaders, resolvedOptions); // single loader overload\n}\n//# sourceMappingURL=load.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/**\n * LAS (LASer) point cloud format\n */\nexport const LASFormat = {\n    name: 'LAS',\n    id: 'las',\n    module: 'las',\n    extensions: ['las', 'laz'], // LAZ is the \"compressed\" flavor of LAS,\n    mimeTypes: ['application/octet-stream'], // TODO - text version?\n    text: false,\n    binary: true,\n    tests: ['LASF']\n};\n//# sourceMappingURL=las-format.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { LASFormat } from \"./las-format.js\";\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof \"4.4.2\" !== 'undefined' ? \"4.4.2\" : 'latest';\n/**\n * Loader for the LAS (LASer) point cloud format\n */\nexport const LASWorkerLoader = {\n    ...LASFormat,\n    dataType: null,\n    batchType: null,\n    version: VERSION,\n    worker: true,\n    options: {\n        las: {\n            shape: 'mesh',\n            fp64: false,\n            skip: 1,\n            colorDepth: 8\n        }\n    }\n};\n//# sourceMappingURL=las-loader.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { deduceMeshSchema } from '@loaders.gl/schema-utils';\n/**\n * Gets schema from LAS header\n * @param lasHeader\n * @param metadata\n * @returns Schema\n */\nexport function getLASSchema(lasHeader, attributes) {\n    const metadataMap = makeMetadataFromLasHeader(lasHeader);\n    const schema = deduceMeshSchema(attributes, metadataMap);\n    return schema;\n}\n/**\n * Make arrow like schema metadata by LASHeader properties\n * @param lasHeader\n * @returns\n */\nexport function makeMetadataFromLasHeader(lasHeader) {\n    const metadata = {};\n    /* eslint-disable camelcase */\n    metadata.las_pointsOffset = lasHeader.pointsOffset.toString(10);\n    metadata.las_pointsFormatId = lasHeader.pointsFormatId.toString(10);\n    metadata.las_pointsStructSize = lasHeader.pointsStructSize.toString(10);\n    metadata.las_pointsCount = lasHeader.pointsCount.toString(10);\n    metadata.las_scale = JSON.stringify(lasHeader.scale);\n    metadata.las_offset = JSON.stringify(lasHeader.offset);\n    if (lasHeader.maxs !== undefined) {\n        metadata.las_maxs = JSON.stringify(lasHeader.maxs);\n    }\n    if (lasHeader.mins !== undefined) {\n        metadata.las_mins = JSON.stringify(lasHeader.mins);\n    }\n    metadata.las_totalToRead = lasHeader.totalToRead.toString(10);\n    metadata.las_pointsFortotalReadmatId = lasHeader.totalRead.toString(10);\n    if (lasHeader.versionAsString !== undefined) {\n        metadata.las_versionAsString = lasHeader.versionAsString;\n    }\n    if (lasHeader.isCompressed !== undefined) {\n        metadata.las_isCompressed = lasHeader.isCompressed.toString();\n    }\n    return metadata;\n}\n//# sourceMappingURL=get-las-schema.js.map","// @ts-nocheck\n/* eslint-disable */\n/*\n * Last update 2020-07-23\n *\n * Compiled from Howard Butler's laz-perf\n * https://github.com/hobu/laz-perf\n * Under LGPL License\n *\n * To update this file:\n * - git clone https://github.com/hobu/laz-perf\n * - cd laz-perf\n * - echo 'set(CMAKE_CXX_FLAGS \"-s SINGLE_FILE=1 ${CMAKE_CXX_FLAGS}\"' >> emscripten/CMakeLists.txt\n * - mkdir build && cd build\n * - cmake .. -DEMSCRIPTEN=1 -DCMAKE_TOOLCHAIN_FILE=<path-to-emsdk>/emscripten/<emsdk-version>/cmake/Modules/Platform/Emscripten.cmake\n * - VERBOSE=1 make\n *\n * See the laz-perf repository for required dependencies\n *\n * The result should be build/emscripten/laz-perf.asm.js\n * Copy the content of this file in the getModule function below\n */\n// laz-perf.js\nexport default function getModule() {\n    var Module = typeof Module !== 'undefined' ? Module : {};\n    var moduleOverrides = {};\n    var key;\n    for (key in Module) {\n        if (Module.hasOwnProperty(key)) {\n            moduleOverrides[key] = Module[key];\n        }\n    }\n    var arguments_ = [];\n    var thisProgram = './this.program';\n    var quit_ = function (status, toThrow) {\n        throw toThrow;\n    };\n    var ENVIRONMENT_IS_WEB = false;\n    var ENVIRONMENT_IS_WORKER = false;\n    var ENVIRONMENT_IS_NODE = false;\n    var ENVIRONMENT_IS_SHELL = false;\n    ENVIRONMENT_IS_WEB = typeof window === 'object';\n    ENVIRONMENT_IS_WORKER = typeof importScripts === 'function';\n    ENVIRONMENT_IS_NODE =\n        typeof process === 'object' &&\n            typeof process.versions === 'object' &&\n            typeof process.versions.node === 'string';\n    ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;\n    var scriptDirectory = '';\n    function locateFile(path) {\n        if (Module['locateFile']) {\n            return Module['locateFile'](path, scriptDirectory);\n        }\n        return scriptDirectory + path;\n    }\n    var read_, readAsync, readBinary, setWindowTitle;\n    var nodeFS;\n    var nodePath;\n    if (ENVIRONMENT_IS_NODE) {\n        if (ENVIRONMENT_IS_WORKER) {\n            scriptDirectory = require('path').dirname(scriptDirectory) + '/';\n        }\n        else {\n            const dirname = typeof __dirname !== 'undefined' ? __dirname : '';\n            scriptDirectory = dirname + '/';\n        }\n        read_ = function shell_read(filename, binary) {\n            var ret = tryParseAsDataURI(filename);\n            if (ret) {\n                return binary ? ret : ret.toString();\n            }\n            if (!nodeFS)\n                nodeFS = require('fs');\n            if (!nodePath)\n                nodePath = require('path');\n            filename = nodePath['normalize'](filename);\n            return nodeFS['readFileSync'](filename, binary ? null : 'utf8');\n        };\n        readBinary = function readBinary(filename) {\n            var ret = read_(filename, true);\n            if (!ret.buffer) {\n                ret = new Uint8Array(ret);\n            }\n            assert(ret.buffer);\n            return ret;\n        };\n        if (process['argv'].length > 1) {\n            thisProgram = process['argv'][1].replace(/\\\\/g, '/');\n        }\n        arguments_ = process['argv'].slice(2);\n        if (typeof module !== 'undefined') {\n            module['exports'] = Module;\n        }\n        process['on']('uncaughtException', function (ex) {\n            if (!(ex instanceof ExitStatus)) {\n                throw ex;\n            }\n        });\n        process['on']('unhandledRejection', abort);\n        quit_ = function (status) {\n            process['exit'](status);\n        };\n        Module['inspect'] = function () {\n            return '[Emscripten Module object]';\n        };\n    }\n    else if (ENVIRONMENT_IS_SHELL) {\n        if (typeof read != 'undefined') {\n            read_ = function shell_read(f) {\n                var data = tryParseAsDataURI(f);\n                if (data) {\n                    return intArrayToString(data);\n                }\n                return read(f);\n            };\n        }\n        readBinary = function readBinary(f) {\n            var data;\n            data = tryParseAsDataURI(f);\n            if (data) {\n                return data;\n            }\n            if (typeof readbuffer === 'function') {\n                return new Uint8Array(readbuffer(f));\n            }\n            data = read(f, 'binary');\n            assert(typeof data === 'object');\n            return data;\n        };\n        if (typeof scriptArgs != 'undefined') {\n            arguments_ = scriptArgs;\n        }\n        else if (typeof arguments != 'undefined') {\n            arguments_ = arguments;\n        }\n        if (typeof quit === 'function') {\n            quit_ = function (status) {\n                quit(status);\n            };\n        }\n        if (typeof print !== 'undefined') {\n            if (typeof console === 'undefined')\n                console = {};\n            console.log = print;\n            console.warn = console.error = typeof printErr !== 'undefined' ? printErr : print;\n        }\n    }\n    else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {\n        if (ENVIRONMENT_IS_WORKER) {\n            scriptDirectory = self.location.href;\n        }\n        else if (document.currentScript) {\n            scriptDirectory = document.currentScript.src;\n        }\n        if (scriptDirectory.indexOf('blob:') !== 0) {\n            scriptDirectory = scriptDirectory.substr(0, scriptDirectory.lastIndexOf('/') + 1);\n        }\n        else {\n            scriptDirectory = '';\n        }\n        {\n            read_ = function shell_read(url) {\n                try {\n                    var xhr = new XMLHttpRequest();\n                    xhr.open('GET', url, false);\n                    xhr.send(null);\n                    return xhr.responseText;\n                }\n                catch (err) {\n                    var data = tryParseAsDataURI(url);\n                    if (data) {\n                        return intArrayToString(data);\n                    }\n                    throw err;\n                }\n            };\n            if (ENVIRONMENT_IS_WORKER) {\n                readBinary = function readBinary(url) {\n                    try {\n                        var xhr = new XMLHttpRequest();\n                        xhr.open('GET', url, false);\n                        xhr.responseType = 'arraybuffer';\n                        xhr.send(null);\n                        return new Uint8Array(xhr.response);\n                    }\n                    catch (err) {\n                        var data = tryParseAsDataURI(url);\n                        if (data) {\n                            return data;\n                        }\n                        throw err;\n                    }\n                };\n            }\n            readAsync = function readAsync(url, onload, onerror) {\n                var xhr = new XMLHttpRequest();\n                xhr.open('GET', url, true);\n                xhr.responseType = 'arraybuffer';\n                xhr.onload = function xhr_onload() {\n                    if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) {\n                        onload(xhr.response);\n                        return;\n                    }\n                    var data = tryParseAsDataURI(url);\n                    if (data) {\n                        onload(data.buffer);\n                        return;\n                    }\n                    onerror();\n                };\n                xhr.onerror = onerror;\n                xhr.send(null);\n            };\n        }\n        setWindowTitle = function (title) {\n            document.title = title;\n        };\n    }\n    else {\n    }\n    var out = Module['print'] || console.log.bind(console);\n    var err = Module['printErr'] || console.warn.bind(console);\n    for (key in moduleOverrides) {\n        if (moduleOverrides.hasOwnProperty(key)) {\n            Module[key] = moduleOverrides[key];\n        }\n    }\n    moduleOverrides = null;\n    if (Module['arguments'])\n        arguments_ = Module['arguments'];\n    if (Module['thisProgram'])\n        thisProgram = Module['thisProgram'];\n    if (Module['quit'])\n        quit_ = Module['quit'];\n    var STACK_ALIGN = 16;\n    function dynamicAlloc(size) {\n        var ret = HEAP32[DYNAMICTOP_PTR >> 2];\n        var end = (ret + size + 15) & -16;\n        HEAP32[DYNAMICTOP_PTR >> 2] = end;\n        return ret;\n    }\n    function getNativeTypeSize(type) {\n        switch (type) {\n            case 'i1':\n            case 'i8':\n                return 1;\n            case 'i16':\n                return 2;\n            case 'i32':\n                return 4;\n            case 'i64':\n                return 8;\n            case 'float':\n                return 4;\n            case 'double':\n                return 8;\n            default: {\n                if (type[type.length - 1] === '*') {\n                    return 4;\n                }\n                else if (type[0] === 'i') {\n                    var bits = Number(type.substr(1));\n                    assert(bits % 8 === 0, 'getNativeTypeSize invalid bits ' + bits + ', type ' + type);\n                    return bits / 8;\n                }\n                else {\n                    return 0;\n                }\n            }\n        }\n    }\n    function warnOnce(text) {\n        if (!warnOnce.shown)\n            warnOnce.shown = {};\n        if (!warnOnce.shown[text]) {\n            warnOnce.shown[text] = 1;\n            err(text);\n        }\n    }\n    var jsCallStartIndex = 1;\n    var functionPointers = new Array(0);\n    var funcWrappers = {};\n    function dynCall(sig, ptr, args) {\n        if (args && args.length) {\n            return Module['dynCall_' + sig].apply(null, [ptr].concat(args));\n        }\n        else {\n            return Module['dynCall_' + sig].call(null, ptr);\n        }\n    }\n    var tempRet0 = 0;\n    var setTempRet0 = function (value) {\n        tempRet0 = value;\n    };\n    var getTempRet0 = function () {\n        return tempRet0;\n    };\n    var GLOBAL_BASE = 8;\n    var wasmBinary;\n    if (Module['wasmBinary'])\n        wasmBinary = Module['wasmBinary'];\n    var noExitRuntime;\n    if (Module['noExitRuntime'])\n        noExitRuntime = Module['noExitRuntime'];\n    function setValue(ptr, value, type, noSafe) {\n        type = type || 'i8';\n        if (type.charAt(type.length - 1) === '*')\n            type = 'i32';\n        switch (type) {\n            case 'i1':\n                HEAP8[ptr >> 0] = value;\n                break;\n            case 'i8':\n                HEAP8[ptr >> 0] = value;\n                break;\n            case 'i16':\n                HEAP16[ptr >> 1] = value;\n                break;\n            case 'i32':\n                HEAP32[ptr >> 2] = value;\n                break;\n            case 'i64':\n                (tempI64 = [\n                    value >>> 0,\n                    ((tempDouble = value),\n                        +Math_abs(tempDouble) >= +1\n                            ? tempDouble > +0\n                                ? (Math_min(+Math_floor(tempDouble / +4294967296), +4294967295) | 0) >>> 0\n                                : ~~+Math_ceil((tempDouble - +(~~tempDouble >>> 0)) / +4294967296) >>> 0\n                            : 0)\n                ]),\n                    (HEAP32[ptr >> 2] = tempI64[0]),\n                    (HEAP32[(ptr + 4) >> 2] = tempI64[1]);\n                break;\n            case 'float':\n                HEAPF32[ptr >> 2] = value;\n                break;\n            case 'double':\n                HEAPF64[ptr >> 3] = value;\n                break;\n            default:\n                abort('invalid type for setValue: ' + type);\n        }\n    }\n    var ABORT = false;\n    var EXITSTATUS = 0;\n    function assert(condition, text) {\n        if (!condition) {\n            abort('Assertion failed: ' + text);\n        }\n    }\n    function getCFunc(ident) {\n        var func = Module['_' + ident];\n        assert(func, 'Cannot call unknown function ' + ident + ', make sure it is exported');\n        return func;\n    }\n    function ccall(ident, returnType, argTypes, args, opts) {\n        var toC = {\n            string: function (str) {\n                var ret = 0;\n                if (str !== null && str !== undefined && str !== 0) {\n                    var len = (str.length << 2) + 1;\n                    ret = stackAlloc(len);\n                    stringToUTF8(str, ret, len);\n                }\n                return ret;\n            },\n            array: function (arr) {\n                var ret = stackAlloc(arr.length);\n                writeArrayToMemory(arr, ret);\n                return ret;\n            }\n        };\n        function convertReturnValue(ret) {\n            if (returnType === 'string')\n                return UTF8ToString(ret);\n            if (returnType === 'boolean')\n                return Boolean(ret);\n            return ret;\n        }\n        var func = getCFunc(ident);\n        var cArgs = [];\n        var stack = 0;\n        if (args) {\n            for (var i = 0; i < args.length; i++) {\n                var converter = toC[argTypes[i]];\n                if (converter) {\n                    if (stack === 0)\n                        stack = stackSave();\n                    cArgs[i] = converter(args[i]);\n                }\n                else {\n                    cArgs[i] = args[i];\n                }\n            }\n        }\n        var ret = func.apply(null, cArgs);\n        ret = convertReturnValue(ret);\n        if (stack !== 0)\n            stackRestore(stack);\n        return ret;\n    }\n    var ALLOC_NONE = 3;\n    var UTF8Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf8') : undefined;\n    function UTF8ArrayToString(heap, idx, maxBytesToRead) {\n        var endIdx = idx + maxBytesToRead;\n        var endPtr = idx;\n        while (heap[endPtr] && !(endPtr >= endIdx))\n            ++endPtr;\n        if (endPtr - idx > 16 && heap.subarray && UTF8Decoder) {\n            return UTF8Decoder.decode(heap.subarray(idx, endPtr));\n        }\n        else {\n            var str = '';\n            while (idx < endPtr) {\n                var u0 = heap[idx++];\n                if (!(u0 & 128)) {\n                    str += String.fromCharCode(u0);\n                    continue;\n                }\n                var u1 = heap[idx++] & 63;\n                if ((u0 & 224) == 192) {\n                    str += String.fromCharCode(((u0 & 31) << 6) | u1);\n                    continue;\n                }\n                var u2 = heap[idx++] & 63;\n                if ((u0 & 240) == 224) {\n                    u0 = ((u0 & 15) << 12) | (u1 << 6) | u2;\n                }\n                else {\n                    u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heap[idx++] & 63);\n                }\n                if (u0 < 65536) {\n                    str += String.fromCharCode(u0);\n                }\n                else {\n                    var ch = u0 - 65536;\n                    str += String.fromCharCode(55296 | (ch >> 10), 56320 | (ch & 1023));\n                }\n            }\n        }\n        return str;\n    }\n    function UTF8ToString(ptr, maxBytesToRead) {\n        return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : '';\n    }\n    function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) {\n        if (!(maxBytesToWrite > 0))\n            return 0;\n        var startIdx = outIdx;\n        var endIdx = outIdx + maxBytesToWrite - 1;\n        for (var i = 0; i < str.length; ++i) {\n            var u = str.charCodeAt(i);\n            if (u >= 55296 && u <= 57343) {\n                var u1 = str.charCodeAt(++i);\n                u = (65536 + ((u & 1023) << 10)) | (u1 & 1023);\n            }\n            if (u <= 127) {\n                if (outIdx >= endIdx)\n                    break;\n                heap[outIdx++] = u;\n            }\n            else if (u <= 2047) {\n                if (outIdx + 1 >= endIdx)\n                    break;\n                heap[outIdx++] = 192 | (u >> 6);\n                heap[outIdx++] = 128 | (u & 63);\n            }\n            else if (u <= 65535) {\n                if (outIdx + 2 >= endIdx)\n                    break;\n                heap[outIdx++] = 224 | (u >> 12);\n                heap[outIdx++] = 128 | ((u >> 6) & 63);\n                heap[outIdx++] = 128 | (u & 63);\n            }\n            else {\n                if (outIdx + 3 >= endIdx)\n                    break;\n                heap[outIdx++] = 240 | (u >> 18);\n                heap[outIdx++] = 128 | ((u >> 12) & 63);\n                heap[outIdx++] = 128 | ((u >> 6) & 63);\n                heap[outIdx++] = 128 | (u & 63);\n            }\n        }\n        heap[outIdx] = 0;\n        return outIdx - startIdx;\n    }\n    function stringToUTF8(str, outPtr, maxBytesToWrite) {\n        return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite);\n    }\n    function lengthBytesUTF8(str) {\n        var len = 0;\n        for (var i = 0; i < str.length; ++i) {\n            var u = str.charCodeAt(i);\n            if (u >= 55296 && u <= 57343)\n                u = (65536 + ((u & 1023) << 10)) | (str.charCodeAt(++i) & 1023);\n            if (u <= 127)\n                ++len;\n            else if (u <= 2047)\n                len += 2;\n            else if (u <= 65535)\n                len += 3;\n            else\n                len += 4;\n        }\n        return len;\n    }\n    var UTF16Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-16le') : undefined;\n    function UTF16ToString(ptr, maxBytesToRead) {\n        var endPtr = ptr;\n        var idx = endPtr >> 1;\n        var maxIdx = idx + maxBytesToRead / 2;\n        while (!(idx >= maxIdx) && HEAPU16[idx])\n            ++idx;\n        endPtr = idx << 1;\n        if (endPtr - ptr > 32 && UTF16Decoder) {\n            return UTF16Decoder.decode(HEAPU8.subarray(ptr, endPtr));\n        }\n        else {\n            var i = 0;\n            var str = '';\n            while (1) {\n                var codeUnit = HEAP16[(ptr + i * 2) >> 1];\n                if (codeUnit == 0 || i == maxBytesToRead / 2)\n                    return str;\n                ++i;\n                str += String.fromCharCode(codeUnit);\n            }\n        }\n    }\n    function stringToUTF16(str, outPtr, maxBytesToWrite) {\n        if (maxBytesToWrite === undefined) {\n            maxBytesToWrite = 2147483647;\n        }\n        if (maxBytesToWrite < 2)\n            return 0;\n        maxBytesToWrite -= 2;\n        var startPtr = outPtr;\n        var numCharsToWrite = maxBytesToWrite < str.length * 2 ? maxBytesToWrite / 2 : str.length;\n        for (var i = 0; i < numCharsToWrite; ++i) {\n            var codeUnit = str.charCodeAt(i);\n            HEAP16[outPtr >> 1] = codeUnit;\n            outPtr += 2;\n        }\n        HEAP16[outPtr >> 1] = 0;\n        return outPtr - startPtr;\n    }\n    function lengthBytesUTF16(str) {\n        return str.length * 2;\n    }\n    function UTF32ToString(ptr, maxBytesToRead) {\n        var i = 0;\n        var str = '';\n        while (!(i >= maxBytesToRead / 4)) {\n            var utf32 = HEAP32[(ptr + i * 4) >> 2];\n            if (utf32 == 0)\n                break;\n            ++i;\n            if (utf32 >= 65536) {\n                var ch = utf32 - 65536;\n                str += String.fromCharCode(55296 | (ch >> 10), 56320 | (ch & 1023));\n            }\n            else {\n                str += String.fromCharCode(utf32);\n            }\n        }\n        return str;\n    }\n    function stringToUTF32(str, outPtr, maxBytesToWrite) {\n        if (maxBytesToWrite === undefined) {\n            maxBytesToWrite = 2147483647;\n        }\n        if (maxBytesToWrite < 4)\n            return 0;\n        var startPtr = outPtr;\n        var endPtr = startPtr + maxBytesToWrite - 4;\n        for (var i = 0; i < str.length; ++i) {\n            var codeUnit = str.charCodeAt(i);\n            if (codeUnit >= 55296 && codeUnit <= 57343) {\n                var trailSurrogate = str.charCodeAt(++i);\n                codeUnit = (65536 + ((codeUnit & 1023) << 10)) | (trailSurrogate & 1023);\n            }\n            HEAP32[outPtr >> 2] = codeUnit;\n            outPtr += 4;\n            if (outPtr + 4 > endPtr)\n                break;\n        }\n        HEAP32[outPtr >> 2] = 0;\n        return outPtr - startPtr;\n    }\n    function lengthBytesUTF32(str) {\n        var len = 0;\n        for (var i = 0; i < str.length; ++i) {\n            var codeUnit = str.charCodeAt(i);\n            if (codeUnit >= 55296 && codeUnit <= 57343)\n                ++i;\n            len += 4;\n        }\n        return len;\n    }\n    function writeArrayToMemory(array, buffer) {\n        HEAP8.set(array, buffer);\n    }\n    function writeAsciiToMemory(str, buffer, dontAddNull) {\n        for (var i = 0; i < str.length; ++i) {\n            HEAP8[buffer++ >> 0] = str.charCodeAt(i);\n        }\n        if (!dontAddNull)\n            HEAP8[buffer >> 0] = 0;\n    }\n    var buffer, HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64;\n    function updateGlobalBufferAndViews(buf) {\n        buffer = buf;\n        Module['HEAP8'] = HEAP8 = new Int8Array(buf);\n        Module['HEAP16'] = HEAP16 = new Int16Array(buf);\n        Module['HEAP32'] = HEAP32 = new Int32Array(buf);\n        Module['HEAPU8'] = HEAPU8 = new Uint8Array(buf);\n        Module['HEAPU16'] = HEAPU16 = new Uint16Array(buf);\n        Module['HEAPU32'] = HEAPU32 = new Uint32Array(buf);\n        Module['HEAPF32'] = HEAPF32 = new Float32Array(buf);\n        Module['HEAPF64'] = HEAPF64 = new Float64Array(buf);\n    }\n    var STACK_BASE = 22384, DYNAMIC_BASE = 5265264, DYNAMICTOP_PTR = 22176;\n    var INITIAL_INITIAL_MEMORY = Module['INITIAL_MEMORY'] || 167772160;\n    if (Module['buffer']) {\n        buffer = Module['buffer'];\n    }\n    else {\n        buffer = new ArrayBuffer(INITIAL_INITIAL_MEMORY);\n    }\n    INITIAL_INITIAL_MEMORY = buffer.byteLength;\n    updateGlobalBufferAndViews(buffer);\n    HEAP32[DYNAMICTOP_PTR >> 2] = DYNAMIC_BASE;\n    function callRuntimeCallbacks(callbacks) {\n        while (callbacks.length > 0) {\n            var callback = callbacks.shift();\n            if (typeof callback == 'function') {\n                callback(Module);\n                continue;\n            }\n            var func = callback.func;\n            if (typeof func === 'number') {\n                if (callback.arg === undefined) {\n                    Module['dynCall_v'](func);\n                }\n                else {\n                    Module['dynCall_vi'](func, callback.arg);\n                }\n            }\n            else {\n                func(callback.arg === undefined ? null : callback.arg);\n            }\n        }\n    }\n    var __ATPRERUN__ = [];\n    var __ATINIT__ = [];\n    var __ATMAIN__ = [];\n    var __ATPOSTRUN__ = [];\n    var runtimeInitialized = false;\n    var runtimeExited = false;\n    function preRun() {\n        if (Module['preRun']) {\n            if (typeof Module['preRun'] == 'function')\n                Module['preRun'] = [Module['preRun']];\n            while (Module['preRun'].length) {\n                addOnPreRun(Module['preRun'].shift());\n            }\n        }\n        callRuntimeCallbacks(__ATPRERUN__);\n    }\n    function initRuntime() {\n        runtimeInitialized = true;\n        callRuntimeCallbacks(__ATINIT__);\n    }\n    function preMain() {\n        callRuntimeCallbacks(__ATMAIN__);\n    }\n    function exitRuntime() {\n        runtimeExited = true;\n    }\n    function postRun() {\n        if (Module['postRun']) {\n            if (typeof Module['postRun'] == 'function')\n                Module['postRun'] = [Module['postRun']];\n            while (Module['postRun'].length) {\n                addOnPostRun(Module['postRun'].shift());\n            }\n        }\n        callRuntimeCallbacks(__ATPOSTRUN__);\n    }\n    function addOnPreRun(cb) {\n        __ATPRERUN__.unshift(cb);\n    }\n    function addOnPostRun(cb) {\n        __ATPOSTRUN__.unshift(cb);\n    }\n    var Math_abs = Math.abs;\n    var Math_ceil = Math.ceil;\n    var Math_floor = Math.floor;\n    var Math_min = Math.min;\n    var runDependencies = 0;\n    var runDependencyWatcher = null;\n    var dependenciesFulfilled = null;\n    function addRunDependency(id) {\n        runDependencies++;\n        if (Module['monitorRunDependencies']) {\n            Module['monitorRunDependencies'](runDependencies);\n        }\n    }\n    function removeRunDependency(id) {\n        runDependencies--;\n        if (Module['monitorRunDependencies']) {\n            Module['monitorRunDependencies'](runDependencies);\n        }\n        if (runDependencies == 0) {\n            if (runDependencyWatcher !== null) {\n                clearInterval(runDependencyWatcher);\n                runDependencyWatcher = null;\n            }\n            if (dependenciesFulfilled) {\n                var callback = dependenciesFulfilled;\n                dependenciesFulfilled = null;\n                callback();\n            }\n        }\n    }\n    Module['preloadedImages'] = {};\n    Module['preloadedAudios'] = {};\n    function abort(what) {\n        if (Module['onAbort']) {\n            Module['onAbort'](what);\n        }\n        what += '';\n        out(what);\n        err(what);\n        ABORT = true;\n        EXITSTATUS = 1;\n        what = 'abort(' + what + '). Build with -s ASSERTIONS=1 for more info.';\n        throw what;\n    }\n    var memoryInitializer = null;\n    function hasPrefix(str, prefix) {\n        return String.prototype.startsWith ? str.startsWith(prefix) : str.indexOf(prefix) === 0;\n    }\n    var dataURIPrefix = 'data:application/octet-stream;base64,';\n    function isDataURI(filename) {\n        return hasPrefix(filename, dataURIPrefix);\n    }\n    var fileURIPrefix = 'file://';\n    var tempDouble;\n    var tempI64;\n    __ATINIT__.push({\n        func: function () {\n            globalCtors();\n        }\n    });\n    memoryInitializer =\n        'data:application/octet-stream;base64,AAAAAAAAAAAPDg0MCwoJCA4AAQMGCgoJDQECBAcLCwoMAwQFCAwMCwsGBwgJDQ0MCgoLDA0ODg0JCgsMDQ4PDggJCgsMDQ4PAAECAwQFBgcBAAECAwQFBgIBAAECAwQFAwIBAAECAwQEAwIBAAECAwUEAwIBAAECBgUEAwIBAAEHBgUEAwIBAMgPAAAoDQAAEBAAACAQAADIDwAAUA0AABAQAAAgEAAAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAEACQsLAAAJBgsAAAsABhEAAAAREREAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAADAAAAAAJDAAAAAAADAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAANAAAABA0AAAAACQ4AAAAAAA4AAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAADwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAASEhIAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAAKAAAAAAoAAAAACQsAAAAAAAsAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAwMTIzNDU2Nzg5QUJDREVGGRJEOwI/LEcUPTMwChsGRktFNw9JDo4XA0AdPGkrNh9KLRwBICUpIQgMFRYiLhA4Pgs0MRhkdHV2L0EJfzkRI0MyQomKiwUEJignDSoeNYwHGkiTE5SVAAAAAAAAAAAASWxsZWdhbCBieXRlIHNlcXVlbmNlAERvbWFpbiBlcnJvcgBSZXN1bHQgbm90IHJlcHJlc2VudGFibGUATm90IGEgdHR5AFBlcm1pc3Npb24gZGVuaWVkAE9wZXJhdGlvbiBub3QgcGVybWl0dGVkAE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkATm8gc3VjaCBwcm9jZXNzAEZpbGUgZXhpc3RzAFZhbHVlIHRvbyBsYXJnZSBmb3IgZGF0YSB0eXBlAE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlAE91dCBvZiBtZW1vcnkAUmVzb3VyY2UgYnVzeQBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbABSZXNvdXJjZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZQBJbnZhbGlkIHNlZWsAQ3Jvc3MtZGV2aWNlIGxpbmsAUmVhZC1vbmx5IGZpbGUgc3lzdGVtAERpcmVjdG9yeSBub3QgZW1wdHkAQ29ubmVjdGlvbiByZXNldCBieSBwZWVyAE9wZXJhdGlvbiB0aW1lZCBvdXQAQ29ubmVjdGlvbiByZWZ1c2VkAEhvc3QgaXMgZG93bgBIb3N0IGlzIHVucmVhY2hhYmxlAEFkZHJlc3MgaW4gdXNlAEJyb2tlbiBwaXBlAEkvTyBlcnJvcgBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzAEJsb2NrIGRldmljZSByZXF1aXJlZABObyBzdWNoIGRldmljZQBOb3QgYSBkaXJlY3RvcnkASXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AAAAAAADgFgAAmRgAAGAQAAAAAAAA4BYAAEIZAABgEAAAAAAAAOAWAAAqGgAASA8AAAAAAAC4FgAANBsAAOAWAACfGgAAMAoAAAAAAADgFgAAaRsAAEgPAAAAAAAA4BYAAIobAABIDwAAAAAAALgWAAAPHAAA4BYAAHwcAABIDwAAAAAAAOAWAACVHAAASA8AAAAAAADgFgAA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c2hhcmVkX3B0cl9wb2ludGVySVBONmxhc3ppcDdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRU5TXzE0ZGVmYXVsdF9kZWxldGVJUzNfRUVOU185YWxsb2NhdG9ySVMzX0VFRUUATlN0M19fMjE0ZGVmYXVsdF9kZWxldGVJTjZsYXN6aXA3c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXAyaW82cmVhZGVyMTBiYXNpY19maWxlSU5TMV83c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRU5TXzE0ZGVmYXVsdF9kZWxldGVJUzdfRUVOU185YWxsb2NhdG9ySVM3X0VFRUUATlN0M19fMjE0ZGVmYXVsdF9kZWxldGVJTjZsYXN6aXAyaW82cmVhZGVyMTBiYXNpY19maWxlSU5TMV83c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRUVFAExBU0YATjZsYXN6aXAxM2ludmFsaWRfbWFnaWNFAGFsbG9jYXRvcjxUPjo6YWxsb2NhdGUoc2l6ZV90IG4pICduJyBleGNlZWRzIG1heGltdW0gc3VwcG9ydGVkIHNpemUARmlsZSBtYWdpYyBpcyBub3QgdmFsaWQATlN0M19fMjEwX19mdW5jdGlvbjZfX2Z1bmNJWk42bGFzemlwMmlvNnJlYWRlcjEwYmFzaWNfZmlsZUlOUzJfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRTExX3ZhbGlkYXRvcnNFdkVVbFJOUzNfNmhlYWRlckVFX05TXzlhbGxvY2F0b3JJU0JfRUVGdlNBX0VFRQBOU3QzX18yMTBfX2Z1bmN0aW9uNl9fYmFzZUlGdlJONmxhc3ppcDJpbzZoZWFkZXJFRUVFAE42bGFzemlwMjFvbGRfc3R5bGVfY29tcHJlc3Npb25FAE42bGFzemlwMTRub3RfY29tcHJlc3NlZEUAVGhlIGZpbGUgc2VlbXMgdG8gaGF2ZSBvbGQgc3R5bGUgY29tcHJlc3Npb24gd2hpY2ggaXMgbm90IHN1cHBvcnRlZABUaGUgZmlsZSBkb2Vzbid0IHNlZW0gdG8gYmUgY29tcHJlc3NlZABaTjZsYXN6aXAyaW82cmVhZGVyMTBiYXNpY19maWxlSU5TXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUUxMV92YWxpZGF0b3JzRXZFVWxSTlMwXzZoZWFkZXJFRV8AbGFzemlwIGVuY29kZWQATjZsYXN6aXAxM25vX2xhc3ppcF92bHJFAE42bGFzemlwMjVsYXN6aXBfZm9ybWF0X3Vuc3VwcG9ydGVkRQBPbmx5IExBU3ppcCBQT0lOVFdJU0UgQ0hVTktFRCBkZWNvbXByZXNzb3IgaXMgc3VwcG9ydGVkAE5vIExBU3ppcCBWTFIgd2FzIGZvdW5kIGluIHRoZSBWTFJzIHNlY3Rpb24ATjZsYXN6aXAyMmNodW5rX3RhYmxlX3JlYWRfZXJyb3JFAENodW5rIHRhYmxlIG9mZnNldCA9PSAtMSBpcyBub3Qgc3VwcG9ydGVkIGF0IHRoaXMgdGltZQBONmxhc3ppcDEzbm90X3N1cHBvcnRlZEUATjZsYXN6aXAyNnVua25vd25fY2h1bmtfdGFibGVfZm9ybWF0RQBjaHVua19zaXplID09IHVpbnQubWF4IGlzIG5vdCBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lLgBUaGVyZSB3YXMgYSBwcm9ibGVtIHJlYWRpbmcgdGhlIGNodW5rIHRhYmxlAFRoZSBjaHVuayB0YWJsZSB2ZXJzaW9uIG51bWJlciBpcyB1bmtub3duAE42bGFzemlwMTFlbmRfb2ZfZmlsZUUAUmVhY2hlZCBFbmQgb2YgZmlsZQBJbnZhbGlkIG51bWJlciBvZiBzeW1ib2xzAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9wb2ludGVySVBONmxhc3ppcDhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVM5X0VFTlNfOWFsbG9jYXRvcklTOV9FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwOGRlY29kZXJzMTBhcml0aG1ldGljSU5TMV8yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOUzFfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRUVFAE42bGFzemlwMTl1bmtub3duX3NjaGVtYV90eXBlRQBUaGUgTEFaIHNjaGVtYSBpcyBub3QgcmVjb2duaXplZABONmxhc3ppcDdmb3JtYXRzMjZkeW5hbWljX2ZpZWxkX2RlY29tcHJlc3NvcklOU184ZGVjb2RlcnMxMGFyaXRobWV0aWNJTlNfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlNfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRUVFAE42bGFzemlwN2Zvcm1hdHMyMGR5bmFtaWNfZGVjb21wcmVzc29yRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19maWVsZF9kZWNvbXByZXNzb3JJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVFRU5TXzE0ZGVmYXVsdF9kZWxldGVJU0NfRUVOU185YWxsb2NhdG9ySVNDX0VFRUUATlN0M19fMjE0ZGVmYXVsdF9kZWxldGVJTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19maWVsZF9kZWNvbXByZXNzb3JJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVFRUVFAE42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOU18yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOU183c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRUVFTlMwXzVmaWVsZElOUzBfM2xhczdwb2ludDEwRU5TMF8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNDX0VFRUVFRQBONmxhc3ppcDdmb3JtYXRzMTBiYXNlX2ZpZWxkRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzJfNWZpZWxkSU5TMl8zbGFzN3BvaW50MTBFTlMyXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJU0VfRUVFRUVFTlNfMTRkZWZhdWx0X2RlbGV0ZUlTSV9FRU5TXzlhbGxvY2F0b3JJU0lfRUVFRQBOU3QzX18yMTRkZWZhdWx0X2RlbGV0ZUlONmxhc3ppcDdmb3JtYXRzMjZkeW5hbWljX2RlY29tcHJlc3Nvcl9maWVsZElOUzFfOGRlY29kZXJzMTBhcml0aG1ldGljSU5TMV8yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOUzFfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRU5TMl81ZmllbGRJTlMyXzNsYXM3cG9pbnQxMEVOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElTRV9FRUVFRUVFRQBONmxhc3ppcDdmb3JtYXRzMjZkeW5hbWljX2RlY29tcHJlc3Nvcl9maWVsZElOU184ZGVjb2RlcnMxMGFyaXRobWV0aWNJTlNfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlNfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRU5TMF81ZmllbGRJTlMwXzNsYXM3Z3BzdGltZUVOUzBfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElTQ19FRUVFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUE42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJTlMxXzJpbzE4X19pZnN0cmVhbV93cmFwcGVySU5TMV83c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRUVFTlMyXzVmaWVsZElOUzJfM2xhczdncHN0aW1lRU5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNFX0VFRUVFRU5TXzE0ZGVmYXVsdF9kZWxldGVJU0lfRUVOU185YWxsb2NhdG9ySVNJX0VFRUUATlN0M19fMjE0ZGVmYXVsdF9kZWxldGVJTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzJfNWZpZWxkSU5TMl8zbGFzN2dwc3RpbWVFTlMyXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJU0VfRUVFRUVFRUUATjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlNfOGRlY29kZXJzMTBhcml0aG1ldGljSU5TXzJpbzE4X19pZnN0cmVhbV93cmFwcGVySU5TXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzBfNWZpZWxkSU5TMF8zbGFzM3JnYkVOUzBfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElTQ19FRUVFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUE42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJTlMxXzJpbzE4X19pZnN0cmVhbV93cmFwcGVySU5TMV83c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRUVFTlMyXzVmaWVsZElOUzJfM2xhczNyZ2JFTlMyXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJU0VfRUVFRUVFTlNfMTRkZWZhdWx0X2RlbGV0ZUlTSV9FRU5TXzlhbGxvY2F0b3JJU0lfRUVFRQBOU3QzX18yMTRkZWZhdWx0X2RlbGV0ZUlONmxhc3ppcDdmb3JtYXRzMjZkeW5hbWljX2RlY29tcHJlc3Nvcl9maWVsZElOUzFfOGRlY29kZXJzMTBhcml0aG1ldGljSU5TMV8yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOUzFfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRU5TMl81ZmllbGRJTlMyXzNsYXMzcmdiRU5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNFX0VFRUVFRUVFAE42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOU18yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOU183c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRUVFTlMwXzVmaWVsZElOUzBfM2xhczEwZXh0cmFieXRlc0VOUzBfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElTQ19FRUVFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUE42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJTlMxXzJpbzE4X19pZnN0cmVhbV93cmFwcGVySU5TMV83c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRUVFTlMyXzVmaWVsZElOUzJfM2xhczEwZXh0cmFieXRlc0VOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElTRV9FRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNJX0VFTlNfOWFsbG9jYXRvcklTSV9FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJTlMxXzJpbzE4X19pZnN0cmVhbV93cmFwcGVySU5TMV83c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRUVFTlMyXzVmaWVsZElOUzJfM2xhczEwZXh0cmFieXRlc0VOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElTRV9FRUVFRUVFRQBONmxhc3ppcDdmb3JtYXRzMjFkeW5hbWljX2RlY29tcHJlc3NvcjFJTlNfOGRlY29kZXJzMTBhcml0aG1ldGljSU5TXzJpbzE4X19pZnN0cmVhbV93cmFwcGVySU5TXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzBfMTlyZWNvcmRfZGVjb21wcmVzc29ySUpOUzBfNWZpZWxkSU5TMF8zbGFzN3BvaW50MTBFTlMwXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJU0RfRUVFRUVFRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9wb2ludGVySVBONmxhc3ppcDdmb3JtYXRzMjFkeW5hbWljX2RlY29tcHJlc3NvcjFJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzJfMTlyZWNvcmRfZGVjb21wcmVzc29ySUpOUzJfNWZpZWxkSU5TMl8zbGFzN3BvaW50MTBFTlMyXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJU0ZfRUVFRUVFRUVFTlNfMTRkZWZhdWx0X2RlbGV0ZUlTS19FRU5TXzlhbGxvY2F0b3JJU0tfRUVFRQBOU3QzX18yMTRkZWZhdWx0X2RlbGV0ZUlONmxhc3ppcDdmb3JtYXRzMjFkeW5hbWljX2RlY29tcHJlc3NvcjFJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzJfMTlyZWNvcmRfZGVjb21wcmVzc29ySUpOUzJfNWZpZWxkSU5TMl8zbGFzN3BvaW50MTBFTlMyXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJU0ZfRUVFRUVFRUVFRUUATjZsYXN6aXA3Zm9ybWF0czIxZHluYW1pY19kZWNvbXByZXNzb3IxSU5TXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOU18yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOU183c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRUVFTlMwXzE5cmVjb3JkX2RlY29tcHJlc3NvcklKTlMwXzVmaWVsZElOUzBfM2xhczdwb2ludDEwRU5TMF8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNEX0VFRUVOU0JfSU5TQ183Z3BzdGltZUVOU0VfSVNIX0VFRUVFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czIxZHluYW1pY19kZWNvbXByZXNzb3IxSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJTlMxXzJpbzE4X19pZnN0cmVhbV93cmFwcGVySU5TMV83c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRUVFTlMyXzE5cmVjb3JkX2RlY29tcHJlc3NvcklKTlMyXzVmaWVsZElOUzJfM2xhczdwb2ludDEwRU5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNGX0VFRUVOU0RfSU5TRV83Z3BzdGltZUVOU0dfSVNKX0VFRUVFRUVFRU5TXzE0ZGVmYXVsdF9kZWxldGVJU05fRUVOU185YWxsb2NhdG9ySVNOX0VFRUUATlN0M19fMjE0ZGVmYXVsdF9kZWxldGVJTjZsYXN6aXA3Zm9ybWF0czIxZHluYW1pY19kZWNvbXByZXNzb3IxSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJTlMxXzJpbzE4X19pZnN0cmVhbV93cmFwcGVySU5TMV83c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRUVFTlMyXzE5cmVjb3JkX2RlY29tcHJlc3NvcklKTlMyXzVmaWVsZElOUzJfM2xhczdwb2ludDEwRU5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNGX0VFRUVOU0RfSU5TRV83Z3BzdGltZUVOU0dfSVNKX0VFRUVFRUVFRUVFAE42bGFzemlwN2Zvcm1hdHMyMWR5bmFtaWNfZGVjb21wcmVzc29yMUlOU184ZGVjb2RlcnMxMGFyaXRobWV0aWNJTlNfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlNfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRU5TMF8xOXJlY29yZF9kZWNvbXByZXNzb3JJSk5TMF81ZmllbGRJTlMwXzNsYXM3cG9pbnQxMEVOUzBfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElTRF9FRUVFTlNCX0lOU0NfM3JnYkVOU0VfSVNIX0VFRUVFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czIxZHluYW1pY19kZWNvbXByZXNzb3IxSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJTlMxXzJpbzE4X19pZnN0cmVhbV93cmFwcGVySU5TMV83c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRUVFTlMyXzE5cmVjb3JkX2RlY29tcHJlc3NvcklKTlMyXzVmaWVsZElOUzJfM2xhczdwb2ludDEwRU5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNGX0VFRUVOU0RfSU5TRV8zcmdiRU5TR19JU0pfRUVFRUVFRUVFTlNfMTRkZWZhdWx0X2RlbGV0ZUlTTl9FRU5TXzlhbGxvY2F0b3JJU05fRUVFRQBOU3QzX18yMTRkZWZhdWx0X2RlbGV0ZUlONmxhc3ppcDdmb3JtYXRzMjFkeW5hbWljX2RlY29tcHJlc3NvcjFJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzJfMTlyZWNvcmRfZGVjb21wcmVzc29ySUpOUzJfNWZpZWxkSU5TMl8zbGFzN3BvaW50MTBFTlMyXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJU0ZfRUVFRU5TRF9JTlNFXzNyZ2JFTlNHX0lTSl9FRUVFRUVFRUVFRQBONmxhc3ppcDdmb3JtYXRzMjFkeW5hbWljX2RlY29tcHJlc3NvcjFJTlNfOGRlY29kZXJzMTBhcml0aG1ldGljSU5TXzJpbzE4X19pZnN0cmVhbV93cmFwcGVySU5TXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzBfMTlyZWNvcmRfZGVjb21wcmVzc29ySUpOUzBfNWZpZWxkSU5TMF8zbGFzN3BvaW50MTBFTlMwXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJU0RfRUVFRU5TQl9JTlNDXzdncHN0aW1lRU5TRV9JU0hfRUVFRU5TQl9JTlNDXzNyZ2JFTlNFX0lTS19FRUVFRUVFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUE42bGFzemlwN2Zvcm1hdHMyMWR5bmFtaWNfZGVjb21wcmVzc29yMUlOUzFfOGRlY29kZXJzMTBhcml0aG1ldGljSU5TMV8yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOUzFfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRU5TMl8xOXJlY29yZF9kZWNvbXByZXNzb3JJSk5TMl81ZmllbGRJTlMyXzNsYXM3cG9pbnQxMEVOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElTRl9FRUVFTlNEX0lOU0VfN2dwc3RpbWVFTlNHX0lTSl9FRUVFTlNEX0lOU0VfM3JnYkVOU0dfSVNNX0VFRUVFRUVFRU5TXzE0ZGVmYXVsdF9kZWxldGVJU1FfRUVOU185YWxsb2NhdG9ySVNRX0VFRUUATlN0M19fMjE0ZGVmYXVsdF9kZWxldGVJTjZsYXN6aXA3Zm9ybWF0czIxZHluYW1pY19kZWNvbXByZXNzb3IxSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJTlMxXzJpbzE4X19pZnN0cmVhbV93cmFwcGVySU5TMV83c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRUVFTlMyXzE5cmVjb3JkX2RlY29tcHJlc3NvcklKTlMyXzVmaWVsZElOUzJfM2xhczdwb2ludDEwRU5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNGX0VFRUVOU0RfSU5TRV83Z3BzdGltZUVOU0dfSVNKX0VFRUVOU0RfSU5TRV8zcmdiRU5TR19JU01fRUVFRUVFRUVFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUDEwYnVmX3N0cmVhbU5TXzE0ZGVmYXVsdF9kZWxldGVJUzFfRUVOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjE0ZGVmYXVsdF9kZWxldGVJMTBidWZfc3RyZWFtRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUE42bGFzemlwOGRlY29kZXJzMTBhcml0aG1ldGljSTEwYnVmX3N0cmVhbUVFTlNfMTRkZWZhdWx0X2RlbGV0ZUlTNV9FRU5TXzlhbGxvY2F0b3JJUzVfRUVFRQBOU3QzX18yMTRkZWZhdWx0X2RlbGV0ZUlONmxhc3ppcDhkZWNvZGVyczEwYXJpdGhtZXRpY0kxMGJ1Zl9zdHJlYW1FRUVFAE42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZmllbGRfZGVjb21wcmVzc29ySU5TXzhkZWNvZGVyczEwYXJpdGhtZXRpY0kxMGJ1Zl9zdHJlYW1FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9wb2ludGVySVBONmxhc3ppcDdmb3JtYXRzMjZkeW5hbWljX2ZpZWxkX2RlY29tcHJlc3NvcklOUzFfOGRlY29kZXJzMTBhcml0aG1ldGljSTEwYnVmX3N0cmVhbUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVM4X0VFTlNfOWFsbG9jYXRvcklTOF9FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZmllbGRfZGVjb21wcmVzc29ySU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJMTBidWZfc3RyZWFtRUVFRUVFAE42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TXzhkZWNvZGVyczEwYXJpdGhtZXRpY0kxMGJ1Zl9zdHJlYW1FRU5TMF81ZmllbGRJaU5TMF8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSWlFRUVFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUE42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJMTBidWZfc3RyZWFtRUVOUzJfNWZpZWxkSWlOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElpRUVFRUVFTlNfMTRkZWZhdWx0X2RlbGV0ZUlTQ19FRU5TXzlhbGxvY2F0b3JJU0NfRUVFRQBOU3QzX18yMTRkZWZhdWx0X2RlbGV0ZUlONmxhc3ppcDdmb3JtYXRzMjZkeW5hbWljX2RlY29tcHJlc3Nvcl9maWVsZElOUzFfOGRlY29kZXJzMTBhcml0aG1ldGljSTEwYnVmX3N0cmVhbUVFTlMyXzVmaWVsZElpTlMyXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJaUVFRUVFRUVFAE42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TXzhkZWNvZGVyczEwYXJpdGhtZXRpY0kxMGJ1Zl9zdHJlYW1FRU5TMF81ZmllbGRJak5TMF8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSWpFRUVFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUE42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJMTBidWZfc3RyZWFtRUVOUzJfNWZpZWxkSWpOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElqRUVFRUVFTlNfMTRkZWZhdWx0X2RlbGV0ZUlTQ19FRU5TXzlhbGxvY2F0b3JJU0NfRUVFRQBOU3QzX18yMTRkZWZhdWx0X2RlbGV0ZUlONmxhc3ppcDdmb3JtYXRzMjZkeW5hbWljX2RlY29tcHJlc3Nvcl9maWVsZElOUzFfOGRlY29kZXJzMTBhcml0aG1ldGljSTEwYnVmX3N0cmVhbUVFTlMyXzVmaWVsZElqTlMyXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJakVFRUVFRUVFAE42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TXzhkZWNvZGVyczEwYXJpdGhtZXRpY0kxMGJ1Zl9zdHJlYW1FRU5TMF81ZmllbGRJYU5TMF8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSWFFRUVFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUE42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJMTBidWZfc3RyZWFtRUVOUzJfNWZpZWxkSWFOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElhRUVFRUVFTlNfMTRkZWZhdWx0X2RlbGV0ZUlTQ19FRU5TXzlhbGxvY2F0b3JJU0NfRUVFRQBOU3QzX18yMTRkZWZhdWx0X2RlbGV0ZUlONmxhc3ppcDdmb3JtYXRzMjZkeW5hbWljX2RlY29tcHJlc3Nvcl9maWVsZElOUzFfOGRlY29kZXJzMTBhcml0aG1ldGljSTEwYnVmX3N0cmVhbUVFTlMyXzVmaWVsZElhTlMyXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJYUVFRUVFRUVFAE42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TXzhkZWNvZGVyczEwYXJpdGhtZXRpY0kxMGJ1Zl9zdHJlYW1FRU5TMF81ZmllbGRJc05TMF8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSXNFRUVFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUE42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJMTBidWZfc3RyZWFtRUVOUzJfNWZpZWxkSXNOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElzRUVFRUVFTlNfMTRkZWZhdWx0X2RlbGV0ZUlTQ19FRU5TXzlhbGxvY2F0b3JJU0NfRUVFRQBOU3QzX18yMTRkZWZhdWx0X2RlbGV0ZUlONmxhc3ppcDdmb3JtYXRzMjZkeW5hbWljX2RlY29tcHJlc3Nvcl9maWVsZElOUzFfOGRlY29kZXJzMTBhcml0aG1ldGljSTEwYnVmX3N0cmVhbUVFTlMyXzVmaWVsZElzTlMyXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJc0VFRUVFRUVFAE42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TXzhkZWNvZGVyczEwYXJpdGhtZXRpY0kxMGJ1Zl9zdHJlYW1FRU5TMF81ZmllbGRJaE5TMF8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSWhFRUVFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUE42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJMTBidWZfc3RyZWFtRUVOUzJfNWZpZWxkSWhOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZEloRUVFRUVFTlNfMTRkZWZhdWx0X2RlbGV0ZUlTQ19FRU5TXzlhbGxvY2F0b3JJU0NfRUVFRQBOU3QzX18yMTRkZWZhdWx0X2RlbGV0ZUlONmxhc3ppcDdmb3JtYXRzMjZkeW5hbWljX2RlY29tcHJlc3Nvcl9maWVsZElOUzFfOGRlY29kZXJzMTBhcml0aG1ldGljSTEwYnVmX3N0cmVhbUVFTlMyXzVmaWVsZEloTlMyXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJaEVFRUVFRUVFAE42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TXzhkZWNvZGVyczEwYXJpdGhtZXRpY0kxMGJ1Zl9zdHJlYW1FRU5TMF81ZmllbGRJdE5TMF8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSXRFRUVFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUE42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJMTBidWZfc3RyZWFtRUVOUzJfNWZpZWxkSXROUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZEl0RUVFRUVFTlNfMTRkZWZhdWx0X2RlbGV0ZUlTQ19FRU5TXzlhbGxvY2F0b3JJU0NfRUVFRQBOU3QzX18yMTRkZWZhdWx0X2RlbGV0ZUlONmxhc3ppcDdmb3JtYXRzMjZkeW5hbWljX2RlY29tcHJlc3Nvcl9maWVsZElOUzFfOGRlY29kZXJzMTBhcml0aG1ldGljSTEwYnVmX3N0cmVhbUVFTlMyXzVmaWVsZEl0TlMyXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJdEVFRUVFRUVFADZMQVNaaXAAUDZMQVNaaXAAUEs2TEFTWmlwAGlpAHYAdmkAdmlpaWkAdmlpaQBpaWkAMTNEeW5hbWljTEFTWmlwAFAxM0R5bmFtaWNMQVNaaXAAUEsxM0R5bmFtaWNMQVNaaXAAdm9pZABib29sAGNoYXIAc2lnbmVkIGNoYXIAdW5zaWduZWQgY2hhcgBzaG9ydAB1bnNpZ25lZCBzaG9ydABpbnQAdW5zaWduZWQgaW50AGxvbmcAdW5zaWduZWQgbG9uZwBmbG9hdABkb3VibGUAc3RkOjpzdHJpbmcAc3RkOjpiYXNpY19zdHJpbmc8dW5zaWduZWQgY2hhcj4Ac3RkOjp3c3RyaW5nAHN0ZDo6dTE2c3RyaW5nAHN0ZDo6dTMyc3RyaW5nAGVtc2NyaXB0ZW46OnZhbABlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaWduZWQgY2hhcj4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgY2hhcj4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8c2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIHNob3J0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8bG9uZz4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgbG9uZz4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50OF90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50OF90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MTZfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dWludDMyX3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGZsb2F0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxkb3VibGU+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGxvbmcgZG91YmxlPgBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0llRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJZEVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWZFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0ltRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJbEVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWpFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lpRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJdEVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SXNFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0loRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJYUVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWNFRQBOMTBlbXNjcmlwdGVuM3ZhbEUATlN0M19fMjEyYmFzaWNfc3RyaW5nSURpTlNfMTFjaGFyX3RyYWl0c0lEaUVFTlNfOWFsbG9jYXRvcklEaUVFRUUATlN0M19fMjIxX19iYXNpY19zdHJpbmdfY29tbW9uSUxiMUVFRQBOU3QzX18yMTJiYXNpY19zdHJpbmdJRHNOU18xMWNoYXJfdHJhaXRzSURzRUVOU185YWxsb2NhdG9ySURzRUVFRQBOU3QzX18yMTJiYXNpY19zdHJpbmdJd05TXzExY2hhcl90cmFpdHNJd0VFTlNfOWFsbG9jYXRvckl3RUVFRQBOU3QzX18yMTJiYXNpY19zdHJpbmdJaE5TXzExY2hhcl90cmFpdHNJaEVFTlNfOWFsbG9jYXRvckloRUVFRQBOU3QzX18yMTJiYXNpY19zdHJpbmdJY05TXzExY2hhcl90cmFpdHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRQAtKyAgIDBYMHgAKG51bGwpAC0wWCswWCAwWC0weCsweCAweABpbmYASU5GAG5hbgBOQU4ALgB0ZXJtaW5hdGluZyB3aXRoICVzIGV4Y2VwdGlvbiBvZiB0eXBlICVzOiAlcwB0ZXJtaW5hdGluZyB3aXRoICVzIGV4Y2VwdGlvbiBvZiB0eXBlICVzAHRlcm1pbmF0aW5nIHdpdGggJXMgZm9yZWlnbiBleGNlcHRpb24AdGVybWluYXRpbmcAdW5jYXVnaHQAU3Q5ZXhjZXB0aW9uAE4xMF9fY3h4YWJpdjExNl9fc2hpbV90eXBlX2luZm9FAFN0OXR5cGVfaW5mbwBOMTBfX2N4eGFiaXYxMjBfX3NpX2NsYXNzX3R5cGVfaW5mb0UATjEwX19jeHhhYml2MTE3X19jbGFzc190eXBlX2luZm9FAHRlcm1pbmF0ZV9oYW5kbGVyIHVuZXhwZWN0ZWRseSByZXR1cm5lZABzdGQ6OmJhZF9hbGxvYwBTdDliYWRfYWxsb2MAU3QxMWxvZ2ljX2Vycm9yAFN0MTNydW50aW1lX2Vycm9yAFN0MTJsZW5ndGhfZXJyb3IAU3QxMm91dF9vZl9yYW5nZQBOMTBfX2N4eGFiaXYxMTdfX3BiYXNlX3R5cGVfaW5mb0UATjEwX19jeHhhYml2MTE5X19wb2ludGVyX3R5cGVfaW5mb0UATjEwX19jeHhhYml2MTIwX19mdW5jdGlvbl90eXBlX2luZm9FAE4xMF9fY3h4YWJpdjEyOV9fcG9pbnRlcl90b19tZW1iZXJfdHlwZV9pbmZvRQBQdXJlIHZpcnR1YWwgZnVuY3Rpb24gY2FsbGVkIQBOMTBfX2N4eGFiaXYxMjNfX2Z1bmRhbWVudGFsX3R5cGVfaW5mb0UAdgBEbgBiAGMAaABhAHMAdABpAGoAbABtAGYAZABOMTBfX2N4eGFiaXYxMjFfX3ZtaV9jbGFzc190eXBlX2luZm9FAF9fY3hhX2d1YXJkX2FjcXVpcmUgZGV0ZWN0ZWQgcmVjdXJzaXZlIGluaXRpYWxpemF0aW9uAHN0ZDo6YmFkX2Z1bmN0aW9uX2NhbGwATlN0M19fMjE3YmFkX2Z1bmN0aW9uX2NhbGxFAE5TdDNfXzIxNF9fc2hhcmVkX2NvdW50RQBOU3QzX18yMTlfX3NoYXJlZF93ZWFrX2NvdW50RQBtdXRleCBsb2NrIGZhaWxlZABiYXNpY19zdHJpbmcAdW5zcGVjaWZpZWQgZ2VuZXJpY19jYXRlZ29yeSBlcnJvcgBVbmtub3duIGVycm9yICVkAGdlbmVyaWMATlN0M19fMjI0X19nZW5lcmljX2Vycm9yX2NhdGVnb3J5RQBOU3QzX18yMTJfX2RvX21lc3NhZ2VFAE5TdDNfXzIxNGVycm9yX2NhdGVnb3J5RQB1bnNwZWNpZmllZCBzeXN0ZW1fY2F0ZWdvcnkgZXJyb3IAc3lzdGVtAE5TdDNfXzIyM19fc3lzdGVtX2Vycm9yX2NhdGVnb3J5RQBOU3QzX18yMTJzeXN0ZW1fZXJyb3JFADogAHZlY3Rvcg==';\n    var tempDoublePtr = 22368;\n    function demangle(func) {\n        return func;\n    }\n    function demangleAll(text) {\n        var regex = /\\b__Z[\\w\\d_]+/g;\n        return text.replace(regex, function (x) {\n            var y = demangle(x);\n            return x === y ? x : y + ' [' + x + ']';\n        });\n    }\n    function jsStackTrace() {\n        var err = new Error();\n        if (!err.stack) {\n            try {\n                throw new Error();\n            }\n            catch (e) {\n                err = e;\n            }\n            if (!err.stack) {\n                return '(no stack trace available)';\n            }\n        }\n        return err.stack.toString();\n    }\n    function ___cxa_allocate_exception(size) {\n        return _malloc(size);\n    }\n    var ___exception_infos = {};\n    var ___exception_caught = [];\n    function ___exception_addRef(ptr) {\n        if (!ptr)\n            return;\n        var info = ___exception_infos[ptr];\n        info.refcount++;\n    }\n    function ___exception_deAdjust(adjusted) {\n        if (!adjusted || ___exception_infos[adjusted])\n            return adjusted;\n        for (var key in ___exception_infos) {\n            var ptr = +key;\n            var adj = ___exception_infos[ptr].adjusted;\n            var len = adj.length;\n            for (var i = 0; i < len; i++) {\n                if (adj[i] === adjusted) {\n                    return ptr;\n                }\n            }\n        }\n        return adjusted;\n    }\n    function ___cxa_begin_catch(ptr) {\n        var info = ___exception_infos[ptr];\n        if (info && !info.caught) {\n            info.caught = true;\n            __ZSt18uncaught_exceptionv.uncaught_exceptions--;\n        }\n        if (info)\n            info.rethrown = false;\n        ___exception_caught.push(ptr);\n        ___exception_addRef(___exception_deAdjust(ptr));\n        return ptr;\n    }\n    var ___exception_last = 0;\n    function ___cxa_throw(ptr, type, destructor) {\n        ___exception_infos[ptr] = {\n            ptr: ptr,\n            adjusted: [ptr],\n            type: type,\n            destructor: destructor,\n            refcount: 0,\n            caught: false,\n            rethrown: false\n        };\n        ___exception_last = ptr;\n        if (!('uncaught_exception' in __ZSt18uncaught_exceptionv)) {\n            __ZSt18uncaught_exceptionv.uncaught_exceptions = 1;\n        }\n        else {\n            __ZSt18uncaught_exceptionv.uncaught_exceptions++;\n        }\n        throw ptr;\n    }\n    function ___cxa_uncaught_exceptions() {\n        return __ZSt18uncaught_exceptionv.uncaught_exceptions;\n    }\n    function ___gxx_personality_v0() { }\n    function getShiftFromSize(size) {\n        switch (size) {\n            case 1:\n                return 0;\n            case 2:\n                return 1;\n            case 4:\n                return 2;\n            case 8:\n                return 3;\n            default:\n                throw new TypeError('Unknown type size: ' + size);\n        }\n    }\n    function embind_init_charCodes() {\n        var codes = new Array(256);\n        for (var i = 0; i < 256; ++i) {\n            codes[i] = String.fromCharCode(i);\n        }\n        embind_charCodes = codes;\n    }\n    var embind_charCodes = undefined;\n    function readLatin1String(ptr) {\n        var ret = '';\n        var c = ptr;\n        while (HEAPU8[c]) {\n            ret += embind_charCodes[HEAPU8[c++]];\n        }\n        return ret;\n    }\n    var awaitingDependencies = {};\n    var registeredTypes = {};\n    var typeDependencies = {};\n    var char_0 = 48;\n    var char_9 = 57;\n    function makeLegalFunctionName(name) {\n        if (undefined === name) {\n            return '_unknown';\n        }\n        name = name.replace(/[^a-zA-Z0-9_]/g, '$');\n        var f = name.charCodeAt(0);\n        if (f >= char_0 && f <= char_9) {\n            return '_' + name;\n        }\n        else {\n            return name;\n        }\n    }\n    function createNamedFunction(name, body) {\n        name = makeLegalFunctionName(name);\n        return new Function('body', 'return function ' +\n            name +\n            '() {\\n' +\n            '    \"use strict\";' +\n            '    return body.apply(this, arguments);\\n' +\n            '};\\n')(body);\n    }\n    function extendError(baseErrorType, errorName) {\n        var errorClass = createNamedFunction(errorName, function (message) {\n            this.name = errorName;\n            this.message = message;\n            var stack = new Error(message).stack;\n            if (stack !== undefined) {\n                this.stack = this.toString() + '\\n' + stack.replace(/^Error(:[^\\n]*)?\\n/, '');\n            }\n        });\n        errorClass.prototype = Object.create(baseErrorType.prototype);\n        errorClass.prototype.constructor = errorClass;\n        errorClass.prototype.toString = function () {\n            if (this.message === undefined) {\n                return this.name;\n            }\n            else {\n                return this.name + ': ' + this.message;\n            }\n        };\n        return errorClass;\n    }\n    var BindingError = undefined;\n    function throwBindingError(message) {\n        throw new BindingError(message);\n    }\n    var InternalError = undefined;\n    function throwInternalError(message) {\n        throw new InternalError(message);\n    }\n    function whenDependentTypesAreResolved(myTypes, dependentTypes, getTypeConverters) {\n        myTypes.forEach(function (type) {\n            typeDependencies[type] = dependentTypes;\n        });\n        function onComplete(typeConverters) {\n            var myTypeConverters = getTypeConverters(typeConverters);\n            if (myTypeConverters.length !== myTypes.length) {\n                throwInternalError('Mismatched type converter count');\n            }\n            for (var i = 0; i < myTypes.length; ++i) {\n                registerType(myTypes[i], myTypeConverters[i]);\n            }\n        }\n        var typeConverters = new Array(dependentTypes.length);\n        var unregisteredTypes = [];\n        var registered = 0;\n        dependentTypes.forEach(function (dt, i) {\n            if (registeredTypes.hasOwnProperty(dt)) {\n                typeConverters[i] = registeredTypes[dt];\n            }\n            else {\n                unregisteredTypes.push(dt);\n                if (!awaitingDependencies.hasOwnProperty(dt)) {\n                    awaitingDependencies[dt] = [];\n                }\n                awaitingDependencies[dt].push(function () {\n                    typeConverters[i] = registeredTypes[dt];\n                    ++registered;\n                    if (registered === unregisteredTypes.length) {\n                        onComplete(typeConverters);\n                    }\n                });\n            }\n        });\n        if (0 === unregisteredTypes.length) {\n            onComplete(typeConverters);\n        }\n    }\n    function registerType(rawType, registeredInstance, options) {\n        options = options || {};\n        if (!('argPackAdvance' in registeredInstance)) {\n            throw new TypeError('registerType registeredInstance requires argPackAdvance');\n        }\n        var name = registeredInstance.name;\n        if (!rawType) {\n            throwBindingError('type \"' + name + '\" must have a positive integer typeid pointer');\n        }\n        if (registeredTypes.hasOwnProperty(rawType)) {\n            if (options.ignoreDuplicateRegistrations) {\n                return;\n            }\n            else {\n                throwBindingError(\"Cannot register type '\" + name + \"' twice\");\n            }\n        }\n        registeredTypes[rawType] = registeredInstance;\n        delete typeDependencies[rawType];\n        if (awaitingDependencies.hasOwnProperty(rawType)) {\n            var callbacks = awaitingDependencies[rawType];\n            delete awaitingDependencies[rawType];\n            callbacks.forEach(function (cb) {\n                cb();\n            });\n        }\n    }\n    function __embind_register_bool(rawType, name, size, trueValue, falseValue) {\n        var shift = getShiftFromSize(size);\n        name = readLatin1String(name);\n        registerType(rawType, {\n            name: name,\n            fromWireType: function (wt) {\n                return !!wt;\n            },\n            toWireType: function (destructors, o) {\n                return o ? trueValue : falseValue;\n            },\n            argPackAdvance: 8,\n            readValueFromPointer: function (pointer) {\n                var heap;\n                if (size === 1) {\n                    heap = HEAP8;\n                }\n                else if (size === 2) {\n                    heap = HEAP16;\n                }\n                else if (size === 4) {\n                    heap = HEAP32;\n                }\n                else {\n                    throw new TypeError('Unknown boolean type size: ' + name);\n                }\n                return this['fromWireType'](heap[pointer >> shift]);\n            },\n            destructorFunction: null\n        });\n    }\n    function ClassHandle_isAliasOf(other) {\n        if (!(this instanceof ClassHandle)) {\n            return false;\n        }\n        if (!(other instanceof ClassHandle)) {\n            return false;\n        }\n        var leftClass = this.$$.ptrType.registeredClass;\n        var left = this.$$.ptr;\n        var rightClass = other.$$.ptrType.registeredClass;\n        var right = other.$$.ptr;\n        while (leftClass.baseClass) {\n            left = leftClass.upcast(left);\n            leftClass = leftClass.baseClass;\n        }\n        while (rightClass.baseClass) {\n            right = rightClass.upcast(right);\n            rightClass = rightClass.baseClass;\n        }\n        return leftClass === rightClass && left === right;\n    }\n    function shallowCopyInternalPointer(o) {\n        return {\n            count: o.count,\n            deleteScheduled: o.deleteScheduled,\n            preservePointerOnDelete: o.preservePointerOnDelete,\n            ptr: o.ptr,\n            ptrType: o.ptrType,\n            smartPtr: o.smartPtr,\n            smartPtrType: o.smartPtrType\n        };\n    }\n    function throwInstanceAlreadyDeleted(obj) {\n        function getInstanceTypeName(handle) {\n            return handle.$$.ptrType.registeredClass.name;\n        }\n        throwBindingError(getInstanceTypeName(obj) + ' instance already deleted');\n    }\n    var finalizationGroup = false;\n    function detachFinalizer(handle) { }\n    function runDestructor($$) {\n        if ($$.smartPtr) {\n            $$.smartPtrType.rawDestructor($$.smartPtr);\n        }\n        else {\n            $$.ptrType.registeredClass.rawDestructor($$.ptr);\n        }\n    }\n    function releaseClassHandle($$) {\n        $$.count.value -= 1;\n        var toDelete = 0 === $$.count.value;\n        if (toDelete) {\n            runDestructor($$);\n        }\n    }\n    function attachFinalizer(handle) {\n        if ('undefined' === typeof FinalizationGroup) {\n            attachFinalizer = function (handle) {\n                return handle;\n            };\n            return handle;\n        }\n        finalizationGroup = new FinalizationGroup(function (iter) {\n            for (var result = iter.next(); !result.done; result = iter.next()) {\n                var $$ = result.value;\n                if (!$$.ptr) {\n                    console.warn('object already deleted: ' + $$.ptr);\n                }\n                else {\n                    releaseClassHandle($$);\n                }\n            }\n        });\n        attachFinalizer = function (handle) {\n            finalizationGroup.register(handle, handle.$$, handle.$$);\n            return handle;\n        };\n        detachFinalizer = function (handle) {\n            finalizationGroup.unregister(handle.$$);\n        };\n        return attachFinalizer(handle);\n    }\n    function ClassHandle_clone() {\n        if (!this.$$.ptr) {\n            throwInstanceAlreadyDeleted(this);\n        }\n        if (this.$$.preservePointerOnDelete) {\n            this.$$.count.value += 1;\n            return this;\n        }\n        else {\n            var clone = attachFinalizer(Object.create(Object.getPrototypeOf(this), {\n                $$: {\n                    value: shallowCopyInternalPointer(this.$$)\n                }\n            }));\n            clone.$$.count.value += 1;\n            clone.$$.deleteScheduled = false;\n            return clone;\n        }\n    }\n    function ClassHandle_delete() {\n        if (!this.$$.ptr) {\n            throwInstanceAlreadyDeleted(this);\n        }\n        if (this.$$.deleteScheduled && !this.$$.preservePointerOnDelete) {\n            throwBindingError('Object already scheduled for deletion');\n        }\n        detachFinalizer(this);\n        releaseClassHandle(this.$$);\n        if (!this.$$.preservePointerOnDelete) {\n            this.$$.smartPtr = undefined;\n            this.$$.ptr = undefined;\n        }\n    }\n    function ClassHandle_isDeleted() {\n        return !this.$$.ptr;\n    }\n    var delayFunction = undefined;\n    var deletionQueue = [];\n    function flushPendingDeletes() {\n        while (deletionQueue.length) {\n            var obj = deletionQueue.pop();\n            obj.$$.deleteScheduled = false;\n            obj['delete']();\n        }\n    }\n    function ClassHandle_deleteLater() {\n        if (!this.$$.ptr) {\n            throwInstanceAlreadyDeleted(this);\n        }\n        if (this.$$.deleteScheduled && !this.$$.preservePointerOnDelete) {\n            throwBindingError('Object already scheduled for deletion');\n        }\n        deletionQueue.push(this);\n        if (deletionQueue.length === 1 && delayFunction) {\n            delayFunction(flushPendingDeletes);\n        }\n        this.$$.deleteScheduled = true;\n        return this;\n    }\n    function init_ClassHandle() {\n        ClassHandle.prototype['isAliasOf'] = ClassHandle_isAliasOf;\n        ClassHandle.prototype['clone'] = ClassHandle_clone;\n        ClassHandle.prototype['delete'] = ClassHandle_delete;\n        ClassHandle.prototype['isDeleted'] = ClassHandle_isDeleted;\n        ClassHandle.prototype['deleteLater'] = ClassHandle_deleteLater;\n    }\n    function ClassHandle() { }\n    var registeredPointers = {};\n    function ensureOverloadTable(proto, methodName, humanName) {\n        if (undefined === proto[methodName].overloadTable) {\n            var prevFunc = proto[methodName];\n            proto[methodName] = function () {\n                if (!proto[methodName].overloadTable.hasOwnProperty(arguments.length)) {\n                    throwBindingError(\"Function '\" +\n                        humanName +\n                        \"' called with an invalid number of arguments (\" +\n                        arguments.length +\n                        ') - expects one of (' +\n                        proto[methodName].overloadTable +\n                        ')!');\n                }\n                return proto[methodName].overloadTable[arguments.length].apply(this, arguments);\n            };\n            proto[methodName].overloadTable = [];\n            proto[methodName].overloadTable[prevFunc.argCount] = prevFunc;\n        }\n    }\n    function exposePublicSymbol(name, value, numArguments) {\n        if (Module.hasOwnProperty(name)) {\n            if (undefined === numArguments ||\n                (undefined !== Module[name].overloadTable &&\n                    undefined !== Module[name].overloadTable[numArguments])) {\n                throwBindingError(\"Cannot register public name '\" + name + \"' twice\");\n            }\n            ensureOverloadTable(Module, name, name);\n            if (Module.hasOwnProperty(numArguments)) {\n                throwBindingError('Cannot register multiple overloads of a function with the same number of arguments (' +\n                    numArguments +\n                    ')!');\n            }\n            Module[name].overloadTable[numArguments] = value;\n        }\n        else {\n            Module[name] = value;\n            if (undefined !== numArguments) {\n                Module[name].numArguments = numArguments;\n            }\n        }\n    }\n    function RegisteredClass(name, constructor, instancePrototype, rawDestructor, baseClass, getActualType, upcast, downcast) {\n        this.name = name;\n        this.constructor = constructor;\n        this.instancePrototype = instancePrototype;\n        this.rawDestructor = rawDestructor;\n        this.baseClass = baseClass;\n        this.getActualType = getActualType;\n        this.upcast = upcast;\n        this.downcast = downcast;\n        this.pureVirtualFunctions = [];\n    }\n    function upcastPointer(ptr, ptrClass, desiredClass) {\n        while (ptrClass !== desiredClass) {\n            if (!ptrClass.upcast) {\n                throwBindingError('Expected null or instance of ' +\n                    desiredClass.name +\n                    ', got an instance of ' +\n                    ptrClass.name);\n            }\n            ptr = ptrClass.upcast(ptr);\n            ptrClass = ptrClass.baseClass;\n        }\n        return ptr;\n    }\n    function constNoSmartPtrRawPointerToWireType(destructors, handle) {\n        if (handle === null) {\n            if (this.isReference) {\n                throwBindingError('null is not a valid ' + this.name);\n            }\n            return 0;\n        }\n        if (!handle.$$) {\n            throwBindingError('Cannot pass \"' + _embind_repr(handle) + '\" as a ' + this.name);\n        }\n        if (!handle.$$.ptr) {\n            throwBindingError('Cannot pass deleted object as a pointer of type ' + this.name);\n        }\n        var handleClass = handle.$$.ptrType.registeredClass;\n        var ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass);\n        return ptr;\n    }\n    function genericPointerToWireType(destructors, handle) {\n        var ptr;\n        if (handle === null) {\n            if (this.isReference) {\n                throwBindingError('null is not a valid ' + this.name);\n            }\n            if (this.isSmartPointer) {\n                ptr = this.rawConstructor();\n                if (destructors !== null) {\n                    destructors.push(this.rawDestructor, ptr);\n                }\n                return ptr;\n            }\n            else {\n                return 0;\n            }\n        }\n        if (!handle.$$) {\n            throwBindingError('Cannot pass \"' + _embind_repr(handle) + '\" as a ' + this.name);\n        }\n        if (!handle.$$.ptr) {\n            throwBindingError('Cannot pass deleted object as a pointer of type ' + this.name);\n        }\n        if (!this.isConst && handle.$$.ptrType.isConst) {\n            throwBindingError('Cannot convert argument of type ' +\n                (handle.$$.smartPtrType ? handle.$$.smartPtrType.name : handle.$$.ptrType.name) +\n                ' to parameter type ' +\n                this.name);\n        }\n        var handleClass = handle.$$.ptrType.registeredClass;\n        ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass);\n        if (this.isSmartPointer) {\n            if (undefined === handle.$$.smartPtr) {\n                throwBindingError('Passing raw pointer to smart pointer is illegal');\n            }\n            switch (this.sharingPolicy) {\n                case 0:\n                    if (handle.$$.smartPtrType === this) {\n                        ptr = handle.$$.smartPtr;\n                    }\n                    else {\n                        throwBindingError('Cannot convert argument of type ' +\n                            (handle.$$.smartPtrType ? handle.$$.smartPtrType.name : handle.$$.ptrType.name) +\n                            ' to parameter type ' +\n                            this.name);\n                    }\n                    break;\n                case 1:\n                    ptr = handle.$$.smartPtr;\n                    break;\n                case 2:\n                    if (handle.$$.smartPtrType === this) {\n                        ptr = handle.$$.smartPtr;\n                    }\n                    else {\n                        var clonedHandle = handle['clone']();\n                        ptr = this.rawShare(ptr, __emval_register(function () {\n                            clonedHandle['delete']();\n                        }));\n                        if (destructors !== null) {\n                            destructors.push(this.rawDestructor, ptr);\n                        }\n                    }\n                    break;\n                default:\n                    throwBindingError('Unsupporting sharing policy');\n            }\n        }\n        return ptr;\n    }\n    function nonConstNoSmartPtrRawPointerToWireType(destructors, handle) {\n        if (handle === null) {\n            if (this.isReference) {\n                throwBindingError('null is not a valid ' + this.name);\n            }\n            return 0;\n        }\n        if (!handle.$$) {\n            throwBindingError('Cannot pass \"' + _embind_repr(handle) + '\" as a ' + this.name);\n        }\n        if (!handle.$$.ptr) {\n            throwBindingError('Cannot pass deleted object as a pointer of type ' + this.name);\n        }\n        if (handle.$$.ptrType.isConst) {\n            throwBindingError('Cannot convert argument of type ' +\n                handle.$$.ptrType.name +\n                ' to parameter type ' +\n                this.name);\n        }\n        var handleClass = handle.$$.ptrType.registeredClass;\n        var ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass);\n        return ptr;\n    }\n    function simpleReadValueFromPointer(pointer) {\n        return this['fromWireType'](HEAPU32[pointer >> 2]);\n    }\n    function RegisteredPointer_getPointee(ptr) {\n        if (this.rawGetPointee) {\n            ptr = this.rawGetPointee(ptr);\n        }\n        return ptr;\n    }\n    function RegisteredPointer_destructor(ptr) {\n        if (this.rawDestructor) {\n            this.rawDestructor(ptr);\n        }\n    }\n    function RegisteredPointer_deleteObject(handle) {\n        if (handle !== null) {\n            handle['delete']();\n        }\n    }\n    function downcastPointer(ptr, ptrClass, desiredClass) {\n        if (ptrClass === desiredClass) {\n            return ptr;\n        }\n        if (undefined === desiredClass.baseClass) {\n            return null;\n        }\n        var rv = downcastPointer(ptr, ptrClass, desiredClass.baseClass);\n        if (rv === null) {\n            return null;\n        }\n        return desiredClass.downcast(rv);\n    }\n    function getInheritedInstanceCount() {\n        return Object.keys(registeredInstances).length;\n    }\n    function getLiveInheritedInstances() {\n        var rv = [];\n        for (var k in registeredInstances) {\n            if (registeredInstances.hasOwnProperty(k)) {\n                rv.push(registeredInstances[k]);\n            }\n        }\n        return rv;\n    }\n    function setDelayFunction(fn) {\n        delayFunction = fn;\n        if (deletionQueue.length && delayFunction) {\n            delayFunction(flushPendingDeletes);\n        }\n    }\n    function init_embind() {\n        Module['getInheritedInstanceCount'] = getInheritedInstanceCount;\n        Module['getLiveInheritedInstances'] = getLiveInheritedInstances;\n        Module['flushPendingDeletes'] = flushPendingDeletes;\n        Module['setDelayFunction'] = setDelayFunction;\n    }\n    var registeredInstances = {};\n    function getBasestPointer(class_, ptr) {\n        if (ptr === undefined) {\n            throwBindingError('ptr should not be undefined');\n        }\n        while (class_.baseClass) {\n            ptr = class_.upcast(ptr);\n            class_ = class_.baseClass;\n        }\n        return ptr;\n    }\n    function getInheritedInstance(class_, ptr) {\n        ptr = getBasestPointer(class_, ptr);\n        return registeredInstances[ptr];\n    }\n    function makeClassHandle(prototype, record) {\n        if (!record.ptrType || !record.ptr) {\n            throwInternalError('makeClassHandle requires ptr and ptrType');\n        }\n        var hasSmartPtrType = !!record.smartPtrType;\n        var hasSmartPtr = !!record.smartPtr;\n        if (hasSmartPtrType !== hasSmartPtr) {\n            throwInternalError('Both smartPtrType and smartPtr must be specified');\n        }\n        record.count = {\n            value: 1\n        };\n        return attachFinalizer(Object.create(prototype, {\n            $$: {\n                value: record\n            }\n        }));\n    }\n    function RegisteredPointer_fromWireType(ptr) {\n        var rawPointer = this.getPointee(ptr);\n        if (!rawPointer) {\n            this.destructor(ptr);\n            return null;\n        }\n        var registeredInstance = getInheritedInstance(this.registeredClass, rawPointer);\n        if (undefined !== registeredInstance) {\n            if (0 === registeredInstance.$$.count.value) {\n                registeredInstance.$$.ptr = rawPointer;\n                registeredInstance.$$.smartPtr = ptr;\n                return registeredInstance['clone']();\n            }\n            else {\n                var rv = registeredInstance['clone']();\n                this.destructor(ptr);\n                return rv;\n            }\n        }\n        function makeDefaultHandle() {\n            if (this.isSmartPointer) {\n                return makeClassHandle(this.registeredClass.instancePrototype, {\n                    ptrType: this.pointeeType,\n                    ptr: rawPointer,\n                    smartPtrType: this,\n                    smartPtr: ptr\n                });\n            }\n            else {\n                return makeClassHandle(this.registeredClass.instancePrototype, {\n                    ptrType: this,\n                    ptr: ptr\n                });\n            }\n        }\n        var actualType = this.registeredClass.getActualType(rawPointer);\n        var registeredPointerRecord = registeredPointers[actualType];\n        if (!registeredPointerRecord) {\n            return makeDefaultHandle.call(this);\n        }\n        var toType;\n        if (this.isConst) {\n            toType = registeredPointerRecord.constPointerType;\n        }\n        else {\n            toType = registeredPointerRecord.pointerType;\n        }\n        var dp = downcastPointer(rawPointer, this.registeredClass, toType.registeredClass);\n        if (dp === null) {\n            return makeDefaultHandle.call(this);\n        }\n        if (this.isSmartPointer) {\n            return makeClassHandle(toType.registeredClass.instancePrototype, {\n                ptrType: toType,\n                ptr: dp,\n                smartPtrType: this,\n                smartPtr: ptr\n            });\n        }\n        else {\n            return makeClassHandle(toType.registeredClass.instancePrototype, {\n                ptrType: toType,\n                ptr: dp\n            });\n        }\n    }\n    function init_RegisteredPointer() {\n        RegisteredPointer.prototype.getPointee = RegisteredPointer_getPointee;\n        RegisteredPointer.prototype.destructor = RegisteredPointer_destructor;\n        RegisteredPointer.prototype['argPackAdvance'] = 8;\n        RegisteredPointer.prototype['readValueFromPointer'] = simpleReadValueFromPointer;\n        RegisteredPointer.prototype['deleteObject'] = RegisteredPointer_deleteObject;\n        RegisteredPointer.prototype['fromWireType'] = RegisteredPointer_fromWireType;\n    }\n    function RegisteredPointer(name, registeredClass, isReference, isConst, isSmartPointer, pointeeType, sharingPolicy, rawGetPointee, rawConstructor, rawShare, rawDestructor) {\n        this.name = name;\n        this.registeredClass = registeredClass;\n        this.isReference = isReference;\n        this.isConst = isConst;\n        this.isSmartPointer = isSmartPointer;\n        this.pointeeType = pointeeType;\n        this.sharingPolicy = sharingPolicy;\n        this.rawGetPointee = rawGetPointee;\n        this.rawConstructor = rawConstructor;\n        this.rawShare = rawShare;\n        this.rawDestructor = rawDestructor;\n        if (!isSmartPointer && registeredClass.baseClass === undefined) {\n            if (isConst) {\n                this['toWireType'] = constNoSmartPtrRawPointerToWireType;\n                this.destructorFunction = null;\n            }\n            else {\n                this['toWireType'] = nonConstNoSmartPtrRawPointerToWireType;\n                this.destructorFunction = null;\n            }\n        }\n        else {\n            this['toWireType'] = genericPointerToWireType;\n        }\n    }\n    function replacePublicSymbol(name, value, numArguments) {\n        if (!Module.hasOwnProperty(name)) {\n            throwInternalError('Replacing nonexistant public symbol');\n        }\n        if (undefined !== Module[name].overloadTable && undefined !== numArguments) {\n            Module[name].overloadTable[numArguments] = value;\n        }\n        else {\n            Module[name] = value;\n            Module[name].argCount = numArguments;\n        }\n    }\n    function embind__requireFunction(signature, rawFunction) {\n        signature = readLatin1String(signature);\n        function makeDynCaller(dynCall) {\n            var args = [];\n            for (var i = 1; i < signature.length; ++i) {\n                args.push('a' + i);\n            }\n            var name = 'dynCall_' + signature + '_' + rawFunction;\n            var body = 'return function ' + name + '(' + args.join(', ') + ') {\\n';\n            body +=\n                '    return dynCall(rawFunction' + (args.length ? ', ' : '') + args.join(', ') + ');\\n';\n            body += '};\\n';\n            return new Function('dynCall', 'rawFunction', body)(dynCall, rawFunction);\n        }\n        var dc = Module['dynCall_' + signature];\n        var fp = makeDynCaller(dc);\n        if (typeof fp !== 'function') {\n            throwBindingError('unknown function pointer with signature ' + signature + ': ' + rawFunction);\n        }\n        return fp;\n    }\n    var UnboundTypeError = undefined;\n    function getTypeName(type) {\n        var ptr = ___getTypeName(type);\n        var rv = readLatin1String(ptr);\n        _free(ptr);\n        return rv;\n    }\n    function throwUnboundTypeError(message, types) {\n        var unboundTypes = [];\n        var seen = {};\n        function visit(type) {\n            if (seen[type]) {\n                return;\n            }\n            if (registeredTypes[type]) {\n                return;\n            }\n            if (typeDependencies[type]) {\n                typeDependencies[type].forEach(visit);\n                return;\n            }\n            unboundTypes.push(type);\n            seen[type] = true;\n        }\n        types.forEach(visit);\n        throw new UnboundTypeError(message + ': ' + unboundTypes.map(getTypeName).join([', ']));\n    }\n    function __embind_register_class(rawType, rawPointerType, rawConstPointerType, baseClassRawType, getActualTypeSignature, getActualType, upcastSignature, upcast, downcastSignature, downcast, name, destructorSignature, rawDestructor) {\n        name = readLatin1String(name);\n        getActualType = embind__requireFunction(getActualTypeSignature, getActualType);\n        if (upcast) {\n            upcast = embind__requireFunction(upcastSignature, upcast);\n        }\n        if (downcast) {\n            downcast = embind__requireFunction(downcastSignature, downcast);\n        }\n        rawDestructor = embind__requireFunction(destructorSignature, rawDestructor);\n        var legalFunctionName = makeLegalFunctionName(name);\n        exposePublicSymbol(legalFunctionName, function () {\n            throwUnboundTypeError('Cannot construct ' + name + ' due to unbound types', [\n                baseClassRawType\n            ]);\n        });\n        whenDependentTypesAreResolved([rawType, rawPointerType, rawConstPointerType], baseClassRawType ? [baseClassRawType] : [], function (base) {\n            base = base[0];\n            var baseClass;\n            var basePrototype;\n            if (baseClassRawType) {\n                baseClass = base.registeredClass;\n                basePrototype = baseClass.instancePrototype;\n            }\n            else {\n                basePrototype = ClassHandle.prototype;\n            }\n            var constructor = createNamedFunction(legalFunctionName, function () {\n                if (Object.getPrototypeOf(this) !== instancePrototype) {\n                    throw new BindingError(\"Use 'new' to construct \" + name);\n                }\n                if (undefined === registeredClass.constructor_body) {\n                    throw new BindingError(name + ' has no accessible constructor');\n                }\n                var body = registeredClass.constructor_body[arguments.length];\n                if (undefined === body) {\n                    throw new BindingError('Tried to invoke ctor of ' +\n                        name +\n                        ' with invalid number of parameters (' +\n                        arguments.length +\n                        ') - expected (' +\n                        Object.keys(registeredClass.constructor_body).toString() +\n                        ') parameters instead!');\n                }\n                return body.apply(this, arguments);\n            });\n            var instancePrototype = Object.create(basePrototype, {\n                constructor: {\n                    value: constructor\n                }\n            });\n            constructor.prototype = instancePrototype;\n            var registeredClass = new RegisteredClass(name, constructor, instancePrototype, rawDestructor, baseClass, getActualType, upcast, downcast);\n            var referenceConverter = new RegisteredPointer(name, registeredClass, true, false, false);\n            var pointerConverter = new RegisteredPointer(name + '*', registeredClass, false, false, false);\n            var constPointerConverter = new RegisteredPointer(name + ' const*', registeredClass, false, true, false);\n            registeredPointers[rawType] = {\n                pointerType: pointerConverter,\n                constPointerType: constPointerConverter\n            };\n            replacePublicSymbol(legalFunctionName, constructor);\n            return [referenceConverter, pointerConverter, constPointerConverter];\n        });\n    }\n    function heap32VectorToArray(count, firstElement) {\n        var array = [];\n        for (var i = 0; i < count; i++) {\n            array.push(HEAP32[(firstElement >> 2) + i]);\n        }\n        return array;\n    }\n    function runDestructors(destructors) {\n        while (destructors.length) {\n            var ptr = destructors.pop();\n            var del = destructors.pop();\n            del(ptr);\n        }\n    }\n    function __embind_register_class_constructor(rawClassType, argCount, rawArgTypesAddr, invokerSignature, invoker, rawConstructor) {\n        assert(argCount > 0);\n        var rawArgTypes = heap32VectorToArray(argCount, rawArgTypesAddr);\n        invoker = embind__requireFunction(invokerSignature, invoker);\n        var args = [rawConstructor];\n        var destructors = [];\n        whenDependentTypesAreResolved([], [rawClassType], function (classType) {\n            classType = classType[0];\n            var humanName = 'constructor ' + classType.name;\n            if (undefined === classType.registeredClass.constructor_body) {\n                classType.registeredClass.constructor_body = [];\n            }\n            if (undefined !== classType.registeredClass.constructor_body[argCount - 1]) {\n                throw new BindingError('Cannot register multiple constructors with identical number of parameters (' +\n                    (argCount - 1) +\n                    \") for class '\" +\n                    classType.name +\n                    \"'! Overload resolution is currently only performed using the parameter count, not actual type info!\");\n            }\n            classType.registeredClass.constructor_body[argCount - 1] = function unboundTypeHandler() {\n                throwUnboundTypeError('Cannot construct ' + classType.name + ' due to unbound types', rawArgTypes);\n            };\n            whenDependentTypesAreResolved([], rawArgTypes, function (argTypes) {\n                classType.registeredClass.constructor_body[argCount - 1] = function constructor_body() {\n                    if (arguments.length !== argCount - 1) {\n                        throwBindingError(humanName +\n                            ' called with ' +\n                            arguments.length +\n                            ' arguments, expected ' +\n                            (argCount - 1));\n                    }\n                    destructors.length = 0;\n                    args.length = argCount;\n                    for (var i = 1; i < argCount; ++i) {\n                        args[i] = argTypes[i]['toWireType'](destructors, arguments[i - 1]);\n                    }\n                    var ptr = invoker.apply(null, args);\n                    runDestructors(destructors);\n                    return argTypes[0]['fromWireType'](ptr);\n                };\n                return [];\n            });\n            return [];\n        });\n    }\n    function new_(constructor, argumentList) {\n        if (!(constructor instanceof Function)) {\n            throw new TypeError('new_ called with constructor type ' + typeof constructor + ' which is not a function');\n        }\n        var dummy = createNamedFunction(constructor.name || 'unknownFunctionName', function () { });\n        dummy.prototype = constructor.prototype;\n        var obj = new dummy();\n        var r = constructor.apply(obj, argumentList);\n        return r instanceof Object ? r : obj;\n    }\n    function craftInvokerFunction(humanName, argTypes, classType, cppInvokerFunc, cppTargetFunc) {\n        var argCount = argTypes.length;\n        if (argCount < 2) {\n            throwBindingError(\"argTypes array size mismatch! Must at least get return value and 'this' types!\");\n        }\n        var isClassMethodFunc = argTypes[1] !== null && classType !== null;\n        var needsDestructorStack = false;\n        for (var i = 1; i < argTypes.length; ++i) {\n            if (argTypes[i] !== null && argTypes[i].destructorFunction === undefined) {\n                needsDestructorStack = true;\n                break;\n            }\n        }\n        var returns = argTypes[0].name !== 'void';\n        var argsList = '';\n        var argsListWired = '';\n        for (var i = 0; i < argCount - 2; ++i) {\n            argsList += (i !== 0 ? ', ' : '') + 'arg' + i;\n            argsListWired += (i !== 0 ? ', ' : '') + 'arg' + i + 'Wired';\n        }\n        var invokerFnBody = 'return function ' +\n            makeLegalFunctionName(humanName) +\n            '(' +\n            argsList +\n            ') {\\n' +\n            'if (arguments.length !== ' +\n            (argCount - 2) +\n            ') {\\n' +\n            \"throwBindingError('function \" +\n            humanName +\n            \" called with ' + arguments.length + ' arguments, expected \" +\n            (argCount - 2) +\n            \" args!');\\n\" +\n            '}\\n';\n        if (needsDestructorStack) {\n            invokerFnBody += 'var destructors = [];\\n';\n        }\n        var dtorStack = needsDestructorStack ? 'destructors' : 'null';\n        var args1 = ['throwBindingError', 'invoker', 'fn', 'runDestructors', 'retType', 'classParam'];\n        var args2 = [\n            throwBindingError,\n            cppInvokerFunc,\n            cppTargetFunc,\n            runDestructors,\n            argTypes[0],\n            argTypes[1]\n        ];\n        if (isClassMethodFunc) {\n            invokerFnBody += 'var thisWired = classParam.toWireType(' + dtorStack + ', this);\\n';\n        }\n        for (var i = 0; i < argCount - 2; ++i) {\n            invokerFnBody +=\n                'var arg' +\n                    i +\n                    'Wired = argType' +\n                    i +\n                    '.toWireType(' +\n                    dtorStack +\n                    ', arg' +\n                    i +\n                    '); // ' +\n                    argTypes[i + 2].name +\n                    '\\n';\n            args1.push('argType' + i);\n            args2.push(argTypes[i + 2]);\n        }\n        if (isClassMethodFunc) {\n            argsListWired = 'thisWired' + (argsListWired.length > 0 ? ', ' : '') + argsListWired;\n        }\n        invokerFnBody +=\n            (returns ? 'var rv = ' : '') +\n                'invoker(fn' +\n                (argsListWired.length > 0 ? ', ' : '') +\n                argsListWired +\n                ');\\n';\n        if (needsDestructorStack) {\n            invokerFnBody += 'runDestructors(destructors);\\n';\n        }\n        else {\n            for (var i = isClassMethodFunc ? 1 : 2; i < argTypes.length; ++i) {\n                var paramName = i === 1 ? 'thisWired' : 'arg' + (i - 2) + 'Wired';\n                if (argTypes[i].destructorFunction !== null) {\n                    invokerFnBody += paramName + '_dtor(' + paramName + '); // ' + argTypes[i].name + '\\n';\n                    args1.push(paramName + '_dtor');\n                    args2.push(argTypes[i].destructorFunction);\n                }\n            }\n        }\n        if (returns) {\n            invokerFnBody += 'var ret = retType.fromWireType(rv);\\n' + 'return ret;\\n';\n        }\n        else {\n        }\n        invokerFnBody += '}\\n';\n        args1.push(invokerFnBody);\n        var invokerFunction = new_(Function, args1).apply(null, args2);\n        return invokerFunction;\n    }\n    function __embind_register_class_function(rawClassType, methodName, argCount, rawArgTypesAddr, invokerSignature, rawInvoker, context, isPureVirtual) {\n        var rawArgTypes = heap32VectorToArray(argCount, rawArgTypesAddr);\n        methodName = readLatin1String(methodName);\n        rawInvoker = embind__requireFunction(invokerSignature, rawInvoker);\n        whenDependentTypesAreResolved([], [rawClassType], function (classType) {\n            classType = classType[0];\n            var humanName = classType.name + '.' + methodName;\n            if (isPureVirtual) {\n                classType.registeredClass.pureVirtualFunctions.push(methodName);\n            }\n            function unboundTypesHandler() {\n                throwUnboundTypeError('Cannot call ' + humanName + ' due to unbound types', rawArgTypes);\n            }\n            var proto = classType.registeredClass.instancePrototype;\n            var method = proto[methodName];\n            if (undefined === method ||\n                (undefined === method.overloadTable &&\n                    method.className !== classType.name &&\n                    method.argCount === argCount - 2)) {\n                unboundTypesHandler.argCount = argCount - 2;\n                unboundTypesHandler.className = classType.name;\n                proto[methodName] = unboundTypesHandler;\n            }\n            else {\n                ensureOverloadTable(proto, methodName, humanName);\n                proto[methodName].overloadTable[argCount - 2] = unboundTypesHandler;\n            }\n            whenDependentTypesAreResolved([], rawArgTypes, function (argTypes) {\n                var memberFunction = craftInvokerFunction(humanName, argTypes, classType, rawInvoker, context);\n                if (undefined === proto[methodName].overloadTable) {\n                    memberFunction.argCount = argCount - 2;\n                    proto[methodName] = memberFunction;\n                }\n                else {\n                    proto[methodName].overloadTable[argCount - 2] = memberFunction;\n                }\n                return [];\n            });\n            return [];\n        });\n    }\n    var emval_free_list = [];\n    var emval_handle_array = [\n        {},\n        {\n            value: undefined\n        },\n        {\n            value: null\n        },\n        {\n            value: true\n        },\n        {\n            value: false\n        }\n    ];\n    function __emval_decref(handle) {\n        if (handle > 4 && 0 === --emval_handle_array[handle].refcount) {\n            emval_handle_array[handle] = undefined;\n            emval_free_list.push(handle);\n        }\n    }\n    function count_emval_handles() {\n        var count = 0;\n        for (var i = 5; i < emval_handle_array.length; ++i) {\n            if (emval_handle_array[i] !== undefined) {\n                ++count;\n            }\n        }\n        return count;\n    }\n    function get_first_emval() {\n        for (var i = 5; i < emval_handle_array.length; ++i) {\n            if (emval_handle_array[i] !== undefined) {\n                return emval_handle_array[i];\n            }\n        }\n        return null;\n    }\n    function init_emval() {\n        Module['count_emval_handles'] = count_emval_handles;\n        Module['get_first_emval'] = get_first_emval;\n    }\n    function __emval_register(value) {\n        switch (value) {\n            case undefined: {\n                return 1;\n            }\n            case null: {\n                return 2;\n            }\n            case true: {\n                return 3;\n            }\n            case false: {\n                return 4;\n            }\n            default: {\n                var handle = emval_free_list.length ? emval_free_list.pop() : emval_handle_array.length;\n                emval_handle_array[handle] = {\n                    refcount: 1,\n                    value: value\n                };\n                return handle;\n            }\n        }\n    }\n    function __embind_register_emval(rawType, name) {\n        name = readLatin1String(name);\n        registerType(rawType, {\n            name: name,\n            fromWireType: function (handle) {\n                var rv = emval_handle_array[handle].value;\n                __emval_decref(handle);\n                return rv;\n            },\n            toWireType: function (destructors, value) {\n                return __emval_register(value);\n            },\n            argPackAdvance: 8,\n            readValueFromPointer: simpleReadValueFromPointer,\n            destructorFunction: null\n        });\n    }\n    function _embind_repr(v) {\n        if (v === null) {\n            return 'null';\n        }\n        var t = typeof v;\n        if (t === 'object' || t === 'array' || t === 'function') {\n            return v.toString();\n        }\n        else {\n            return '' + v;\n        }\n    }\n    function floatReadValueFromPointer(name, shift) {\n        switch (shift) {\n            case 2:\n                return function (pointer) {\n                    return this['fromWireType'](HEAPF32[pointer >> 2]);\n                };\n            case 3:\n                return function (pointer) {\n                    return this['fromWireType'](HEAPF64[pointer >> 3]);\n                };\n            default:\n                throw new TypeError('Unknown float type: ' + name);\n        }\n    }\n    function __embind_register_float(rawType, name, size) {\n        var shift = getShiftFromSize(size);\n        name = readLatin1String(name);\n        registerType(rawType, {\n            name: name,\n            fromWireType: function (value) {\n                return value;\n            },\n            toWireType: function (destructors, value) {\n                if (typeof value !== 'number' && typeof value !== 'boolean') {\n                    throw new TypeError('Cannot convert \"' + _embind_repr(value) + '\" to ' + this.name);\n                }\n                return value;\n            },\n            argPackAdvance: 8,\n            readValueFromPointer: floatReadValueFromPointer(name, shift),\n            destructorFunction: null\n        });\n    }\n    function integerReadValueFromPointer(name, shift, signed) {\n        switch (shift) {\n            case 0:\n                return signed\n                    ? function readS8FromPointer(pointer) {\n                        return HEAP8[pointer];\n                    }\n                    : function readU8FromPointer(pointer) {\n                        return HEAPU8[pointer];\n                    };\n            case 1:\n                return signed\n                    ? function readS16FromPointer(pointer) {\n                        return HEAP16[pointer >> 1];\n                    }\n                    : function readU16FromPointer(pointer) {\n                        return HEAPU16[pointer >> 1];\n                    };\n            case 2:\n                return signed\n                    ? function readS32FromPointer(pointer) {\n                        return HEAP32[pointer >> 2];\n                    }\n                    : function readU32FromPointer(pointer) {\n                        return HEAPU32[pointer >> 2];\n                    };\n            default:\n                throw new TypeError('Unknown integer type: ' + name);\n        }\n    }\n    function __embind_register_integer(primitiveType, name, size, minRange, maxRange) {\n        name = readLatin1String(name);\n        if (maxRange === -1) {\n            maxRange = 4294967295;\n        }\n        var shift = getShiftFromSize(size);\n        var fromWireType = function (value) {\n            return value;\n        };\n        if (minRange === 0) {\n            var bitshift = 32 - 8 * size;\n            fromWireType = function (value) {\n                return (value << bitshift) >>> bitshift;\n            };\n        }\n        var isUnsignedType = name.indexOf('unsigned') != -1;\n        registerType(primitiveType, {\n            name: name,\n            fromWireType: fromWireType,\n            toWireType: function (destructors, value) {\n                if (typeof value !== 'number' && typeof value !== 'boolean') {\n                    throw new TypeError('Cannot convert \"' + _embind_repr(value) + '\" to ' + this.name);\n                }\n                if (value < minRange || value > maxRange) {\n                    throw new TypeError('Passing a number \"' +\n                        _embind_repr(value) +\n                        '\" from JS side to C/C++ side to an argument of type \"' +\n                        name +\n                        '\", which is outside the valid range [' +\n                        minRange +\n                        ', ' +\n                        maxRange +\n                        ']!');\n                }\n                return isUnsignedType ? value >>> 0 : value | 0;\n            },\n            argPackAdvance: 8,\n            readValueFromPointer: integerReadValueFromPointer(name, shift, minRange !== 0),\n            destructorFunction: null\n        });\n    }\n    function __embind_register_memory_view(rawType, dataTypeIndex, name) {\n        var typeMapping = [\n            Int8Array,\n            Uint8Array,\n            Int16Array,\n            Uint16Array,\n            Int32Array,\n            Uint32Array,\n            Float32Array,\n            Float64Array\n        ];\n        var TA = typeMapping[dataTypeIndex];\n        function decodeMemoryView(handle) {\n            handle = handle >> 2;\n            var heap = HEAPU32;\n            var size = heap[handle];\n            var data = heap[handle + 1];\n            return new TA(buffer, data, size);\n        }\n        name = readLatin1String(name);\n        registerType(rawType, {\n            name: name,\n            fromWireType: decodeMemoryView,\n            argPackAdvance: 8,\n            readValueFromPointer: decodeMemoryView\n        }, {\n            ignoreDuplicateRegistrations: true\n        });\n    }\n    function __embind_register_std_string(rawType, name) {\n        name = readLatin1String(name);\n        var stdStringIsUTF8 = name === 'std::string';\n        registerType(rawType, {\n            name: name,\n            fromWireType: function (value) {\n                var length = HEAPU32[value >> 2];\n                var str;\n                if (stdStringIsUTF8) {\n                    var decodeStartPtr = value + 4;\n                    for (var i = 0; i <= length; ++i) {\n                        var currentBytePtr = value + 4 + i;\n                        if (HEAPU8[currentBytePtr] == 0 || i == length) {\n                            var maxRead = currentBytePtr - decodeStartPtr;\n                            var stringSegment = UTF8ToString(decodeStartPtr, maxRead);\n                            if (str === undefined) {\n                                str = stringSegment;\n                            }\n                            else {\n                                str += String.fromCharCode(0);\n                                str += stringSegment;\n                            }\n                            decodeStartPtr = currentBytePtr + 1;\n                        }\n                    }\n                }\n                else {\n                    var a = new Array(length);\n                    for (var i = 0; i < length; ++i) {\n                        a[i] = String.fromCharCode(HEAPU8[value + 4 + i]);\n                    }\n                    str = a.join('');\n                }\n                _free(value);\n                return str;\n            },\n            toWireType: function (destructors, value) {\n                if (value instanceof ArrayBuffer) {\n                    value = new Uint8Array(value);\n                }\n                var getLength;\n                var valueIsOfTypeString = typeof value === 'string';\n                if (!(valueIsOfTypeString ||\n                    value instanceof Uint8Array ||\n                    value instanceof Uint8ClampedArray ||\n                    value instanceof Int8Array)) {\n                    throwBindingError('Cannot pass non-string to std::string');\n                }\n                if (stdStringIsUTF8 && valueIsOfTypeString) {\n                    getLength = function () {\n                        return lengthBytesUTF8(value);\n                    };\n                }\n                else {\n                    getLength = function () {\n                        return value.length;\n                    };\n                }\n                var length = getLength();\n                var ptr = _malloc(4 + length + 1);\n                HEAPU32[ptr >> 2] = length;\n                if (stdStringIsUTF8 && valueIsOfTypeString) {\n                    stringToUTF8(value, ptr + 4, length + 1);\n                }\n                else {\n                    if (valueIsOfTypeString) {\n                        for (var i = 0; i < length; ++i) {\n                            var charCode = value.charCodeAt(i);\n                            if (charCode > 255) {\n                                _free(ptr);\n                                throwBindingError('String has UTF-16 code units that do not fit in 8 bits');\n                            }\n                            HEAPU8[ptr + 4 + i] = charCode;\n                        }\n                    }\n                    else {\n                        for (var i = 0; i < length; ++i) {\n                            HEAPU8[ptr + 4 + i] = value[i];\n                        }\n                    }\n                }\n                if (destructors !== null) {\n                    destructors.push(_free, ptr);\n                }\n                return ptr;\n            },\n            argPackAdvance: 8,\n            readValueFromPointer: simpleReadValueFromPointer,\n            destructorFunction: function (ptr) {\n                _free(ptr);\n            }\n        });\n    }\n    function __embind_register_std_wstring(rawType, charSize, name) {\n        name = readLatin1String(name);\n        var decodeString, encodeString, getHeap, lengthBytesUTF, shift;\n        if (charSize === 2) {\n            decodeString = UTF16ToString;\n            encodeString = stringToUTF16;\n            lengthBytesUTF = lengthBytesUTF16;\n            getHeap = function () {\n                return HEAPU16;\n            };\n            shift = 1;\n        }\n        else if (charSize === 4) {\n            decodeString = UTF32ToString;\n            encodeString = stringToUTF32;\n            lengthBytesUTF = lengthBytesUTF32;\n            getHeap = function () {\n                return HEAPU32;\n            };\n            shift = 2;\n        }\n        registerType(rawType, {\n            name: name,\n            fromWireType: function (value) {\n                var length = HEAPU32[value >> 2];\n                var HEAP = getHeap();\n                var str;\n                var decodeStartPtr = value + 4;\n                for (var i = 0; i <= length; ++i) {\n                    var currentBytePtr = value + 4 + i * charSize;\n                    if (HEAP[currentBytePtr >> shift] == 0 || i == length) {\n                        var maxReadBytes = currentBytePtr - decodeStartPtr;\n                        var stringSegment = decodeString(decodeStartPtr, maxReadBytes);\n                        if (str === undefined) {\n                            str = stringSegment;\n                        }\n                        else {\n                            str += String.fromCharCode(0);\n                            str += stringSegment;\n                        }\n                        decodeStartPtr = currentBytePtr + charSize;\n                    }\n                }\n                _free(value);\n                return str;\n            },\n            toWireType: function (destructors, value) {\n                if (!(typeof value === 'string')) {\n                    throwBindingError('Cannot pass non-string to C++ string type ' + name);\n                }\n                var length = lengthBytesUTF(value);\n                var ptr = _malloc(4 + length + charSize);\n                HEAPU32[ptr >> 2] = length >> shift;\n                encodeString(value, ptr + 4, length + charSize);\n                if (destructors !== null) {\n                    destructors.push(_free, ptr);\n                }\n                return ptr;\n            },\n            argPackAdvance: 8,\n            readValueFromPointer: simpleReadValueFromPointer,\n            destructorFunction: function (ptr) {\n                _free(ptr);\n            }\n        });\n    }\n    function __embind_register_void(rawType, name) {\n        name = readLatin1String(name);\n        registerType(rawType, {\n            isVoid: true,\n            name: name,\n            argPackAdvance: 0,\n            fromWireType: function () {\n                return undefined;\n            },\n            toWireType: function (destructors, o) {\n                return undefined;\n            }\n        });\n    }\n    function _abort() {\n        abort();\n    }\n    function _emscripten_get_heap_size() {\n        return HEAPU8.length;\n    }\n    function abortOnCannotGrowMemory(requestedSize) {\n        abort('OOM');\n    }\n    function _emscripten_resize_heap(requestedSize) {\n        requestedSize = requestedSize >>> 0;\n        abortOnCannotGrowMemory(requestedSize);\n    }\n    function _llvm_trap() {\n        abort('trap!');\n    }\n    function _emscripten_memcpy_big(dest, src, num) {\n        HEAPU8.copyWithin(dest, src, src + num);\n    }\n    embind_init_charCodes();\n    BindingError = Module['BindingError'] = extendError(Error, 'BindingError');\n    InternalError = Module['InternalError'] = extendError(Error, 'InternalError');\n    init_ClassHandle();\n    init_RegisteredPointer();\n    init_embind();\n    UnboundTypeError = Module['UnboundTypeError'] = extendError(Error, 'UnboundTypeError');\n    init_emval();\n    var ASSERTIONS = false;\n    function intArrayToString(array) {\n        var ret = [];\n        for (var i = 0; i < array.length; i++) {\n            var chr = array[i];\n            if (chr > 255) {\n                if (ASSERTIONS) {\n                    assert(false, 'Character code ' +\n                        chr +\n                        ' (' +\n                        String.fromCharCode(chr) +\n                        ')  at offset ' +\n                        i +\n                        ' not in 0x00-0xFF.');\n                }\n                chr &= 255;\n            }\n            ret.push(String.fromCharCode(chr));\n        }\n        return ret.join('');\n    }\n    var decodeBase64 = typeof atob === 'function'\n        ? atob\n        : function (input) {\n            var keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n            var output = '';\n            var chr1, chr2, chr3;\n            var enc1, enc2, enc3, enc4;\n            var i = 0;\n            input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n            do {\n                enc1 = keyStr.indexOf(input.charAt(i++));\n                enc2 = keyStr.indexOf(input.charAt(i++));\n                enc3 = keyStr.indexOf(input.charAt(i++));\n                enc4 = keyStr.indexOf(input.charAt(i++));\n                chr1 = (enc1 << 2) | (enc2 >> 4);\n                chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n                chr3 = ((enc3 & 3) << 6) | enc4;\n                output = output + String.fromCharCode(chr1);\n                if (enc3 !== 64) {\n                    output = output + String.fromCharCode(chr2);\n                }\n                if (enc4 !== 64) {\n                    output = output + String.fromCharCode(chr3);\n                }\n            } while (i < input.length);\n            return output;\n        };\n    function intArrayFromBase64(s) {\n        if (typeof ENVIRONMENT_IS_NODE === 'boolean' && ENVIRONMENT_IS_NODE) {\n            var buf;\n            try {\n                buf = Buffer.from(s, 'base64');\n            }\n            catch (_) {\n                buf = new Buffer(s, 'base64');\n            }\n            return new Uint8Array(buf['buffer'], buf['byteOffset'], buf['byteLength']);\n        }\n        try {\n            var decoded = decodeBase64(s);\n            var bytes = new Uint8Array(decoded.length);\n            for (var i = 0; i < decoded.length; ++i) {\n                bytes[i] = decoded.charCodeAt(i);\n            }\n            return bytes;\n        }\n        catch (_) {\n            throw new Error('Converting base64 string to bytes failed.');\n        }\n    }\n    function tryParseAsDataURI(filename) {\n        if (!isDataURI(filename)) {\n            return;\n        }\n        return intArrayFromBase64(filename.slice(dataURIPrefix.length));\n    }\n    var asmGlobalArg = {\n        Math: Math,\n        Int8Array: Int8Array,\n        Int16Array: Int16Array,\n        Int32Array: Int32Array,\n        Uint8Array: Uint8Array,\n        Uint16Array: Uint16Array,\n        Float32Array: Float32Array,\n        Float64Array: Float64Array\n    };\n    var asmLibraryArg = {\n        A: _emscripten_memcpy_big,\n        B: _emscripten_resize_heap,\n        C: _llvm_trap,\n        D: tempDoublePtr,\n        a: abort,\n        b: setTempRet0,\n        c: getTempRet0,\n        d: ___cxa_allocate_exception,\n        e: ___cxa_begin_catch,\n        f: ___cxa_throw,\n        g: ___cxa_uncaught_exceptions,\n        h: ___exception_addRef,\n        i: ___exception_deAdjust,\n        j: ___gxx_personality_v0,\n        k: __embind_register_bool,\n        l: __embind_register_class,\n        m: __embind_register_class_constructor,\n        n: __embind_register_class_function,\n        o: __embind_register_emval,\n        p: __embind_register_float,\n        q: __embind_register_integer,\n        r: __embind_register_memory_view,\n        s: __embind_register_std_string,\n        t: __embind_register_std_wstring,\n        u: __embind_register_void,\n        v: __emval_decref,\n        w: __emval_register,\n        x: _abort,\n        y: _embind_repr,\n        z: _emscripten_get_heap_size\n    }; // EMSCRIPTEN_START_ASM\n    var asm = /** @suppress {uselessCode} */ (function (global, env, buffer) {\n        'use asm';\n        var a = new global.Int8Array(buffer), b = new global.Int16Array(buffer), c = new global.Int32Array(buffer), d = new global.Uint8Array(buffer), e = new global.Uint16Array(buffer), f = new global.Float32Array(buffer), g = new global.Float64Array(buffer), h = env.D | 0, i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0, p = 0.0, q = global.Math.imul, r = global.Math.clz32, s = env.a, t = env.b, u = env.c, v = env.d, w = env.e, x = env.f, y = env.g, z = env.h, A = env.i, B = env.j, C = env.k, D = env.l, E = env.m, F = env.n, G = env.o, H = env.p, I = env.q, J = env.r, K = env.s, L = env.t, M = env.u, N = env.v, O = env.w, P = env.x, Q = env.y, R = env.z, S = env.A, T = env.B, U = env.C, V = 22384, W = 5265264, X = 0.0;\n        // EMSCRIPTEN_START_FUNCS\n        function ia() {\n            em();\n            fm();\n        }\n        function ja() {\n            ka(0);\n            return;\n        }\n        function ka(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, k = 0, l = 0, m = 0;\n            a = V;\n            V = (V + 16) | 0;\n            b = (a + 8) | 0;\n            d = a;\n            vk();\n            m = xk() | 0;\n            g = yk() | 0;\n            f = Ak() | 0;\n            h = Bk() | 0;\n            i = Ck() | 0;\n            j = Dk() | 0;\n            k = Jk() | 0;\n            l = Kk() | 0;\n            e = Kk() | 0;\n            D(f | 0, h | 0, i | 0, j | 0, k | 0, 9, l | 0, m | 0, e | 0, g | 0, 6204, Lk() | 0, 138);\n            Nk(1);\n            c[d >> 2] = 5;\n            c[(d + 4) >> 2] = 0;\n            c[b >> 2] = c[d >> 2];\n            c[(b + 4) >> 2] = c[(d + 4) >> 2];\n            Uk(6211, b);\n            c[d >> 2] = 3;\n            c[(d + 4) >> 2] = 0;\n            c[b >> 2] = c[d >> 2];\n            c[(b + 4) >> 2] = c[(d + 4) >> 2];\n            cl(6216, b);\n            c[d >> 2] = 10;\n            c[(d + 4) >> 2] = 0;\n            c[b >> 2] = c[d >> 2];\n            c[(b + 4) >> 2] = c[(d + 4) >> 2];\n            kl(6225, b);\n            sl();\n            g = ul() | 0;\n            e = vl() | 0;\n            m = xl() | 0;\n            l = yl() | 0;\n            k = zl() | 0;\n            j = Dk() | 0;\n            i = Jk() | 0;\n            h = Kk() | 0;\n            f = Kk() | 0;\n            D(m | 0, l | 0, k | 0, j | 0, i | 0, 11, h | 0, g | 0, f | 0, e | 0, 6234, Lk() | 0, 139);\n            Gl(2);\n            c[d >> 2] = 6;\n            c[(d + 4) >> 2] = 0;\n            c[b >> 2] = c[d >> 2];\n            c[(b + 4) >> 2] = c[(d + 4) >> 2];\n            Nl(6211, b);\n            c[d >> 2] = 4;\n            c[(d + 4) >> 2] = 0;\n            c[b >> 2] = c[d >> 2];\n            c[(b + 4) >> 2] = c[(d + 4) >> 2];\n            Ul(6248, b);\n            c[d >> 2] = 5;\n            c[(d + 4) >> 2] = 0;\n            c[b >> 2] = c[d >> 2];\n            c[(b + 4) >> 2] = c[(d + 4) >> 2];\n            Ul(6265, b);\n            c[d >> 2] = 6;\n            c[(d + 4) >> 2] = 0;\n            c[b >> 2] = c[d >> 2];\n            c[(b + 4) >> 2] = c[(d + 4) >> 2];\n            Ul(6280, b);\n            c[d >> 2] = 7;\n            c[(d + 4) >> 2] = 0;\n            c[b >> 2] = c[d >> 2];\n            c[(b + 4) >> 2] = c[(d + 4) >> 2];\n            _l(6216, b);\n            V = a;\n            return;\n        }\n        function la(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0, g = 0, h = 0, i = 0;\n            e = V;\n            V = (V + 32) | 0;\n            h = (e + 16) | 0;\n            f = (e + 8) | 0;\n            i = e;\n            g = eq(20) | 0;\n            ta(g, b, d);\n            c[i >> 2] = 0;\n            c[h >> 2] = c[i >> 2];\n            va(f, g, h);\n            b = c[f >> 2] | 0;\n            c[f >> 2] = c[a >> 2];\n            c[a >> 2] = b;\n            b = (f + 4) | 0;\n            d = (a + 4) | 0;\n            g = c[b >> 2] | 0;\n            c[b >> 2] = c[d >> 2];\n            c[d >> 2] = g;\n            wa(f);\n            d = eq(352) | 0;\n            ua(d, c[a >> 2] | 0);\n            g = (a + 8) | 0;\n            c[i >> 2] = 0;\n            c[h >> 2] = c[i >> 2];\n            Fa(f, d, h);\n            d = c[f >> 2] | 0;\n            c[f >> 2] = c[g >> 2];\n            c[g >> 2] = d;\n            g = (f + 4) | 0;\n            d = (a + 12) | 0;\n            b = c[g >> 2] | 0;\n            c[g >> 2] = c[d >> 2];\n            c[d >> 2] = b;\n            Ga(f);\n            V = e;\n            return;\n        }\n        function ma(a, b) {\n            a = a | 0;\n            b = b | 0;\n            dd(c[(a + 8) >> 2] | 0, b);\n            return;\n        }\n        function na(a) {\n            a = a | 0;\n            a = ((Qh(c[(a + 8) >> 2] | 0) | 0) + 107) | 0;\n            return (d[a >> 0] | (d[(a + 1) >> 0] << 8) | (d[(a + 2) >> 0] << 16) | (d[(a + 3) >> 0] << 24) | 0);\n        }\n        function oa(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0, g = 0, h = 0, i = 0;\n            e = V;\n            V = (V + 32) | 0;\n            g = (e + 16) | 0;\n            f = (e + 8) | 0;\n            h = e;\n            i = eq(12) | 0;\n            Rh(i, b, d);\n            c[h >> 2] = 0;\n            c[g >> 2] = c[h >> 2];\n            Vh(f, i, g);\n            i = c[f >> 2] | 0;\n            c[f >> 2] = c[a >> 2];\n            c[a >> 2] = i;\n            i = (f + 4) | 0;\n            d = (a + 4) | 0;\n            b = c[i >> 2] | 0;\n            c[i >> 2] = c[d >> 2];\n            c[d >> 2] = b;\n            Wh(f);\n            d = (a + 8) | 0;\n            b = eq(12) | 0;\n            Sh(b, c[a >> 2] | 0);\n            c[h >> 2] = 0;\n            c[g >> 2] = c[h >> 2];\n            ai(f, b, g);\n            b = c[f >> 2] | 0;\n            c[f >> 2] = c[d >> 2];\n            c[d >> 2] = b;\n            b = (f + 4) | 0;\n            h = (a + 12) | 0;\n            i = c[b >> 2] | 0;\n            c[b >> 2] = c[h >> 2];\n            c[h >> 2] = i;\n            bi(f);\n            Th(f, c[d >> 2] | 0);\n            d = (a + 16) | 0;\n            h = c[f >> 2] | 0;\n            i = (f + 4) | 0;\n            b = c[i >> 2] | 0;\n            c[f >> 2] = 0;\n            c[i >> 2] = 0;\n            c[g >> 2] = c[d >> 2];\n            c[d >> 2] = h;\n            d = (a + 20) | 0;\n            c[(g + 4) >> 2] = c[d >> 2];\n            c[d >> 2] = b;\n            Uh(g);\n            Uh(f);\n            V = e;\n            return;\n        }\n        function pa(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0;\n            a = (a + 16) | 0;\n            d = c[a >> 2] | 0;\n            a: do\n                if (d | 0)\n                    switch (b | 0) {\n                        case 4: {\n                            ui(d);\n                            break a;\n                        }\n                        case 8: {\n                            vi(d);\n                            vi(c[a >> 2] | 0);\n                            break a;\n                        }\n                        default:\n                            break a;\n                    }\n            while (0);\n            return;\n        }\n        function qa(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0;\n            d = (a + 16) | 0;\n            a = c[d >> 2] | 0;\n            a: do\n                if (a | 0) {\n                    switch (b | 0) {\n                        case 1: {\n                            hj(a);\n                            break a;\n                        }\n                        case 2: {\n                            ij(a);\n                            break a;\n                        }\n                        case 8: {\n                            ui(a);\n                            a = c[d >> 2] | 0;\n                            break;\n                        }\n                        case 4:\n                            break;\n                        default:\n                            break a;\n                    }\n                    ui(a);\n                }\n            while (0);\n            return;\n        }\n        function ra(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0;\n            d = (a + 16) | 0;\n            a = c[d >> 2] | 0;\n            a: do\n                if (a | 0) {\n                    switch (b | 0) {\n                        case 1: {\n                            Rj(a);\n                            break a;\n                        }\n                        case 2: {\n                            Sj(a);\n                            break a;\n                        }\n                        case 8: {\n                            vi(a);\n                            a = c[d >> 2] | 0;\n                            break;\n                        }\n                        case 4:\n                            break;\n                        default:\n                            break a;\n                    }\n                    vi(a);\n                }\n            while (0);\n            return;\n        }\n        function sa(a, b) {\n            a = a | 0;\n            b = b | 0;\n            a = c[(a + 16) >> 2] | 0;\n            if (a | 0)\n                $[c[c[a >> 2] >> 2] & 63](a, b) | 0;\n            return;\n        }\n        function ta(b, d, e) {\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            c[b >> 2] = d;\n            c[(b + 4) >> 2] = e;\n            c[(b + 8) >> 2] = 0;\n            a[(b + 12) >> 0] = 0;\n            a[(b + 13) >> 0] = 0;\n            c[(b + 16) >> 2] = 0;\n            return;\n        }\n        function ua(a, b) {\n            a = a | 0;\n            b = b | 0;\n            c[a >> 2] = b;\n            Va((a + 4) | 0, b);\n            Wa((a + 247) | 0);\n            c[(a + 288) >> 2] = 0;\n            c[(a + 292) >> 2] = 0;\n            c[(a + 296) >> 2] = 0;\n            Xa((a + 300) | 0);\n            b = (a + 312) | 0;\n            c[b >> 2] = 0;\n            c[(b + 4) >> 2] = 0;\n            c[(b + 8) >> 2] = 0;\n            c[(b + 12) >> 2] = 0;\n            Ya((a + 328) | 0);\n            Za(a);\n            return;\n        }\n        function va(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0;\n            d = V;\n            V = (V + 16) | 0;\n            e = d;\n            c[a >> 2] = b;\n            f = eq(16) | 0;\n            c[(f + 4) >> 2] = 0;\n            c[(f + 8) >> 2] = 0;\n            c[f >> 2] = 4296;\n            c[(f + 12) >> 2] = b;\n            c[(a + 4) >> 2] = f;\n            c[e >> 2] = b;\n            c[(e + 4) >> 2] = b;\n            xa(a, e);\n            V = d;\n            return;\n        }\n        function wa(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            a = c[(a + 4) >> 2] | 0;\n            if (a | 0 ? ((d = (a + 4) | 0), (b = c[d >> 2] | 0), (c[d >> 2] = b + -1), (b | 0) == 0) : 0) {\n                ca[c[((c[a >> 2] | 0) + 8) >> 2] & 255](a);\n                qq(a);\n            }\n            return;\n        }\n        function xa(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return;\n        }\n        function ya(a) {\n            a = a | 0;\n            w(a | 0) | 0;\n            lp();\n        }\n        function za(a) {\n            a = a | 0;\n            pq(a);\n            jp(a);\n            return;\n        }\n        function Aa(a) {\n            a = a | 0;\n            a = c[(a + 12) >> 2] | 0;\n            if (a | 0)\n                jp(a);\n            return;\n        }\n        function Ba(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return ((c[(b + 4) >> 2] | 0) == 6407 ? (a + 12) | 0 : 0) | 0;\n        }\n        function Ca(a) {\n            a = a | 0;\n            Da(a, 16);\n            return;\n        }\n        function Da(a, b) {\n            a = a | 0;\n            b = b | 0;\n            Ea(a);\n            return;\n        }\n        function Ea(a) {\n            a = a | 0;\n            jp(a);\n            return;\n        }\n        function Fa(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0;\n            d = V;\n            V = (V + 16) | 0;\n            e = d;\n            c[a >> 2] = b;\n            f = eq(16) | 0;\n            c[(f + 4) >> 2] = 0;\n            c[(f + 8) >> 2] = 0;\n            c[f >> 2] = 4324;\n            c[(f + 12) >> 2] = b;\n            c[(a + 4) >> 2] = f;\n            c[e >> 2] = b;\n            c[(e + 4) >> 2] = b;\n            Ha(a, e);\n            V = d;\n            return;\n        }\n        function Ga(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            a = c[(a + 4) >> 2] | 0;\n            if (a | 0 ? ((d = (a + 4) | 0), (b = c[d >> 2] | 0), (c[d >> 2] = b + -1), (b | 0) == 0) : 0) {\n                ca[c[((c[a >> 2] | 0) + 8) >> 2] & 255](a);\n                qq(a);\n            }\n            return;\n        }\n        function Ha(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return;\n        }\n        function Ia(a) {\n            a = a | 0;\n            pq(a);\n            jp(a);\n            return;\n        }\n        function Ja(a) {\n            a = a | 0;\n            a = c[(a + 12) >> 2] | 0;\n            if (a | 0) {\n                Ma(a);\n                jp(a);\n            }\n            return;\n        }\n        function Ka(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return ((c[(b + 4) >> 2] | 0) == 6605 ? (a + 12) | 0 : 0) | 0;\n        }\n        function La(a) {\n            a = a | 0;\n            Da(a, 16);\n            return;\n        }\n        function Ma(a) {\n            a = a | 0;\n            Na((a + 320) | 0);\n            Oa((a + 312) | 0);\n            Pa((a + 300) | 0);\n            Ta((a + 288) | 0);\n            Qa((a + 247) | 0);\n            Ra((a + 4) | 0);\n            return;\n        }\n        function Na(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            a = c[(a + 4) >> 2] | 0;\n            if (a | 0 ? ((d = (a + 4) | 0), (b = c[d >> 2] | 0), (c[d >> 2] = b + -1), (b | 0) == 0) : 0) {\n                ca[c[((c[a >> 2] | 0) + 8) >> 2] & 255](a);\n                qq(a);\n            }\n            return;\n        }\n        function Oa(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            a = c[(a + 4) >> 2] | 0;\n            if (a | 0 ? ((d = (a + 4) | 0), (b = c[d >> 2] | 0), (c[d >> 2] = b + -1), (b | 0) == 0) : 0) {\n                ca[c[((c[a >> 2] | 0) + 8) >> 2] & 255](a);\n                qq(a);\n            }\n            return;\n        }\n        function Pa(a) {\n            a = a | 0;\n            Sa(a);\n            return;\n        }\n        function Qa(a) {\n            a = a | 0;\n            a = (a + 34) | 0;\n            a = d[a >> 0] | (d[(a + 1) >> 0] << 8) | (d[(a + 2) >> 0] << 16) | (d[(a + 3) >> 0] << 24);\n            if (a | 0)\n                gq(a);\n            return;\n        }\n        function Ra(a) {\n            a = a | 0;\n            Ua(c[(a + 12) >> 2] | 0);\n            return;\n        }\n        function Sa(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            b = c[a >> 2] | 0;\n            d = b;\n            if (b | 0) {\n                c[(a + 4) >> 2] = d;\n                Da(b, ((c[(a + 8) >> 2] | 0) - d) | 0);\n            }\n            return;\n        }\n        function Ta(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            b = c[a >> 2] | 0;\n            d = b;\n            if (b | 0) {\n                c[(a + 4) >> 2] = d;\n                Da(b, ((c[(a + 8) >> 2] | 0) - d) | 0);\n            }\n            return;\n        }\n        function Ua(a) {\n            a = a | 0;\n            er(c[(a + -4) >> 2] | 0);\n            return;\n        }\n        function Va(a, b) {\n            a = a | 0;\n            b = b | 0;\n            c[a >> 2] = b;\n            c[(a + 4) >> 2] = 0;\n            c[(a + 8) >> 2] = 0;\n            c[(a + 12) >> 2] = _a(1048576) | 0;\n            return;\n        }\n        function Wa(b) {\n            b = b | 0;\n            var c = 0;\n            c = (b + 32) | 0;\n            a[c >> 0] = 0;\n            a[(c + 1) >> 0] = 0;\n            b = (b + 34) | 0;\n            a[b >> 0] = 0;\n            a[(b + 1) >> 0] = 0;\n            a[(b + 2) >> 0] = 0;\n            a[(b + 3) >> 0] = 0;\n            return;\n        }\n        function Xa(a) {\n            a = a | 0;\n            c[a >> 2] = 0;\n            c[(a + 4) >> 2] = 0;\n            c[(a + 8) >> 2] = 0;\n            return;\n        }\n        function Ya(a) {\n            a = a | 0;\n            c[a >> 2] = 0;\n            c[(a + 4) >> 2] = 0;\n            c[(a + 8) >> 2] = 0;\n            c[(a + 12) >> 2] = 0;\n            a = (a + 16) | 0;\n            c[a >> 2] = -1;\n            c[(a + 4) >> 2] = -1;\n            return;\n        }\n        function Za(b) {\n            b = b | 0;\n            var d = 0, e = 0, f = 0, g = 0, h = 0, i = 0;\n            i = V;\n            V = (V + 64) | 0;\n            g = (i + 32) | 0;\n            e = (i + 56) | 0;\n            d = (i + 16) | 0;\n            h = i;\n            $a(c[b >> 2] | 0, e, 4);\n            mb(g, e, (e + 4) | 0);\n            e = lb(6693) | 0;\n            f = a[(g + 11) >> 0] | 0;\n            if ((e | 0) == (((f << 24) >> 24 < 0 ? c[(g + 4) >> 2] | 0 : f & 255) | 0)) {\n                f = (Hq(g, 0, -1, 6693, e) | 0) == 0;\n                Cq(g);\n                if (f) {\n                    e = c[b >> 2] | 0;\n                    c[d >> 2] = 0;\n                    c[(d + 4) >> 2] = 0;\n                    c[(d + 8) >> 2] = 0;\n                    c[(d + 12) >> 2] = 0;\n                    c[g >> 2] = c[d >> 2];\n                    c[(g + 4) >> 2] = c[(d + 4) >> 2];\n                    c[(g + 8) >> 2] = c[(d + 8) >> 2];\n                    c[(g + 12) >> 2] = c[(d + 12) >> 2];\n                    bb(e, g);\n                    e = (b + 20) | 0;\n                    $a(c[b >> 2] | 0, e, 227);\n                    cb(b, e);\n                    f = db() | 0;\n                    d = c[f >> 2] | 0;\n                    f = c[(f + 4) >> 2] | 0;\n                    if ((d | 0) != (f | 0))\n                        do {\n                            eb(g, d);\n                            fb(g, e);\n                            gb(g);\n                            d = (d + 24) | 0;\n                        } while ((d | 0) != (f | 0));\n                    hb(b);\n                    ib(b);\n                    jb(c[b >> 2] | 0);\n                    f = c[b >> 2] | 0;\n                    d = ((c[(b + 116) >> 2] | 0) + 8) | 0;\n                    e = h;\n                    c[e >> 2] = 0;\n                    c[(e + 4) >> 2] = 0;\n                    e = (h + 8) | 0;\n                    c[e >> 2] = d;\n                    c[(e + 4) >> 2] = 0;\n                    c[g >> 2] = c[h >> 2];\n                    c[(g + 4) >> 2] = c[(h + 4) >> 2];\n                    c[(g + 8) >> 2] = c[(h + 8) >> 2];\n                    c[(g + 12) >> 2] = c[(h + 12) >> 2];\n                    bb(f, g);\n                    kb((b + 4) | 0);\n                    V = i;\n                    return;\n                }\n            }\n            else\n                Cq(g);\n            i = v(8) | 0;\n            ab(i);\n            x(i | 0, 2592, 8);\n        }\n        function _a(a) {\n            a = a | 0;\n            var b = 0;\n            b = dr((a + 68) | 0) | 0;\n            a = (b + 68) & -64;\n            c[(a + -4) >> 2] = b;\n            return a | 0;\n        }\n        function $a(b, d, e) {\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            var f = 0, g = 0, h = 0, i = 0, j = 0, k = 0;\n            i = (b + 13) | 0;\n            if (!(a[i >> 0] | 0)) {\n                h = (b + 4) | 0;\n                f = c[h >> 2] | 0;\n                j = (b + 8) | 0;\n                g = c[j >> 2] | 0;\n                k = (f - g) | 0;\n                e = (k | 0) < (e | 0) ? k : e;\n                if (e) {\n                    vr(d | 0, ((c[b >> 2] | 0) + g) | 0, e | 0) | 0;\n                    g = c[j >> 2] | 0;\n                    f = c[h >> 2] | 0;\n                }\n                k = (g + e) | 0;\n                c[j >> 2] = k;\n                c[(b + 16) >> 2] = e;\n                if ((k | 0) >= (f | 0))\n                    a[i >> 0] = 1;\n            }\n            else\n                a[(b + 12) >> 0] = 1;\n            return;\n        }\n        function ab(a) {\n            a = a | 0;\n            xq(a, 6791);\n            c[a >> 2] = 4352;\n            return;\n        }\n        function bb(b, d) {\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0, g = 0;\n            g = (d + 8) | 0;\n            d = c[g >> 2] | 0;\n            g = c[(g + 4) >> 2] | 0;\n            e = c[(b + 4) >> 2] | 0;\n            f = (((e | 0) < 0) << 31) >> 31;\n            if (((g | 0) < (f | 0)) | (((g | 0) == (f | 0)) & (d >>> 0 < e >>> 0)))\n                c[(b + 8) >> 2] = d;\n            else\n                a[(b + 12) >> 0] = 1;\n            return;\n        }\n        function cb(b, c) {\n            b = b | 0;\n            c = c | 0;\n            var d = 0.0, e = 0.0, f = 0, i = 0.0, j = 0, k = 0.0, l = 0, m = 0.0, n = 0, o = 0.0;\n            n = (c + 179) | 0;\n            a[h >> 0] = a[n >> 0];\n            a[(h + 1) >> 0] = a[(n + 1) >> 0];\n            a[(h + 2) >> 0] = a[(n + 2) >> 0];\n            a[(h + 3) >> 0] = a[(n + 3) >> 0];\n            a[(h + 4) >> 0] = a[(n + 4) >> 0];\n            a[(h + 5) >> 0] = a[(n + 5) >> 0];\n            a[(h + 6) >> 0] = a[(n + 6) >> 0];\n            a[(h + 7) >> 0] = a[(n + 7) >> 0];\n            m = +g[h >> 3];\n            j = (c + 187) | 0;\n            a[h >> 0] = a[j >> 0];\n            a[(h + 1) >> 0] = a[(j + 1) >> 0];\n            a[(h + 2) >> 0] = a[(j + 2) >> 0];\n            a[(h + 3) >> 0] = a[(j + 3) >> 0];\n            a[(h + 4) >> 0] = a[(j + 4) >> 0];\n            a[(h + 5) >> 0] = a[(j + 5) >> 0];\n            a[(h + 6) >> 0] = a[(j + 6) >> 0];\n            a[(h + 7) >> 0] = a[(j + 7) >> 0];\n            o = +g[h >> 3];\n            b = (c + 195) | 0;\n            a[h >> 0] = a[b >> 0];\n            a[(h + 1) >> 0] = a[(b + 1) >> 0];\n            a[(h + 2) >> 0] = a[(b + 2) >> 0];\n            a[(h + 3) >> 0] = a[(b + 3) >> 0];\n            a[(h + 4) >> 0] = a[(b + 4) >> 0];\n            a[(h + 5) >> 0] = a[(b + 5) >> 0];\n            a[(h + 6) >> 0] = a[(b + 6) >> 0];\n            a[(h + 7) >> 0] = a[(b + 7) >> 0];\n            i = +g[h >> 3];\n            l = (c + 203) | 0;\n            a[h >> 0] = a[l >> 0];\n            a[(h + 1) >> 0] = a[(l + 1) >> 0];\n            a[(h + 2) >> 0] = a[(l + 2) >> 0];\n            a[(h + 3) >> 0] = a[(l + 3) >> 0];\n            a[(h + 4) >> 0] = a[(l + 4) >> 0];\n            a[(h + 5) >> 0] = a[(l + 5) >> 0];\n            a[(h + 6) >> 0] = a[(l + 6) >> 0];\n            a[(h + 7) >> 0] = a[(l + 7) >> 0];\n            k = +g[h >> 3];\n            f = (c + 211) | 0;\n            a[h >> 0] = a[f >> 0];\n            a[(h + 1) >> 0] = a[(f + 1) >> 0];\n            a[(h + 2) >> 0] = a[(f + 2) >> 0];\n            a[(h + 3) >> 0] = a[(f + 3) >> 0];\n            a[(h + 4) >> 0] = a[(f + 4) >> 0];\n            a[(h + 5) >> 0] = a[(f + 5) >> 0];\n            a[(h + 6) >> 0] = a[(f + 6) >> 0];\n            a[(h + 7) >> 0] = a[(f + 7) >> 0];\n            d = +g[h >> 3];\n            c = (c + 219) | 0;\n            a[h >> 0] = a[c >> 0];\n            a[(h + 1) >> 0] = a[(c + 1) >> 0];\n            a[(h + 2) >> 0] = a[(c + 2) >> 0];\n            a[(h + 3) >> 0] = a[(c + 3) >> 0];\n            a[(h + 4) >> 0] = a[(c + 4) >> 0];\n            a[(h + 5) >> 0] = a[(c + 5) >> 0];\n            a[(h + 6) >> 0] = a[(c + 6) >> 0];\n            a[(h + 7) >> 0] = a[(c + 7) >> 0];\n            e = +g[h >> 3];\n            g[h >> 3] = o;\n            a[n >> 0] = a[h >> 0];\n            a[(n + 1) >> 0] = a[(h + 1) >> 0];\n            a[(n + 2) >> 0] = a[(h + 2) >> 0];\n            a[(n + 3) >> 0] = a[(h + 3) >> 0];\n            a[(n + 4) >> 0] = a[(h + 4) >> 0];\n            a[(n + 5) >> 0] = a[(h + 5) >> 0];\n            a[(n + 6) >> 0] = a[(h + 6) >> 0];\n            a[(n + 7) >> 0] = a[(h + 7) >> 0];\n            g[h >> 3] = m;\n            a[l >> 0] = a[h >> 0];\n            a[(l + 1) >> 0] = a[(h + 1) >> 0];\n            a[(l + 2) >> 0] = a[(h + 2) >> 0];\n            a[(l + 3) >> 0] = a[(h + 3) >> 0];\n            a[(l + 4) >> 0] = a[(h + 4) >> 0];\n            a[(l + 5) >> 0] = a[(h + 5) >> 0];\n            a[(l + 6) >> 0] = a[(h + 6) >> 0];\n            a[(l + 7) >> 0] = a[(h + 7) >> 0];\n            g[h >> 3] = k;\n            a[j >> 0] = a[h >> 0];\n            a[(j + 1) >> 0] = a[(h + 1) >> 0];\n            a[(j + 2) >> 0] = a[(h + 2) >> 0];\n            a[(j + 3) >> 0] = a[(h + 3) >> 0];\n            a[(j + 4) >> 0] = a[(h + 4) >> 0];\n            a[(j + 5) >> 0] = a[(h + 5) >> 0];\n            a[(j + 6) >> 0] = a[(h + 6) >> 0];\n            a[(j + 7) >> 0] = a[(h + 7) >> 0];\n            g[h >> 3] = i;\n            a[f >> 0] = a[h >> 0];\n            a[(f + 1) >> 0] = a[(h + 1) >> 0];\n            a[(f + 2) >> 0] = a[(h + 2) >> 0];\n            a[(f + 3) >> 0] = a[(h + 3) >> 0];\n            a[(f + 4) >> 0] = a[(h + 4) >> 0];\n            a[(f + 5) >> 0] = a[(h + 5) >> 0];\n            a[(f + 6) >> 0] = a[(h + 6) >> 0];\n            a[(f + 7) >> 0] = a[(h + 7) >> 0];\n            g[h >> 3] = e;\n            a[b >> 0] = a[h >> 0];\n            a[(b + 1) >> 0] = a[(h + 1) >> 0];\n            a[(b + 2) >> 0] = a[(h + 2) >> 0];\n            a[(b + 3) >> 0] = a[(h + 3) >> 0];\n            a[(b + 4) >> 0] = a[(h + 4) >> 0];\n            a[(b + 5) >> 0] = a[(h + 5) >> 0];\n            a[(b + 6) >> 0] = a[(h + 6) >> 0];\n            a[(b + 7) >> 0] = a[(h + 7) >> 0];\n            g[h >> 3] = d;\n            a[c >> 0] = a[h >> 0];\n            a[(c + 1) >> 0] = a[(h + 1) >> 0];\n            a[(c + 2) >> 0] = a[(h + 2) >> 0];\n            a[(c + 3) >> 0] = a[(h + 3) >> 0];\n            a[(c + 4) >> 0] = a[(h + 4) >> 0];\n            a[(c + 5) >> 0] = a[(h + 5) >> 0];\n            a[(c + 6) >> 0] = a[(h + 6) >> 0];\n            a[(c + 7) >> 0] = a[(h + 7) >> 0];\n            return;\n        }\n        function db() {\n            var b = 0, d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0;\n            g = V;\n            V = (V + 48) | 0;\n            e = (g + 24) | 0;\n            f = g;\n            b = (g + 44) | 0;\n            if ((a[21440] | 0) == 0 ? Tp(21440) | 0 : 0) {\n                c[5374] = 0;\n                c[5375] = 0;\n                c[5376] = 0;\n                $p(21440);\n            }\n            if ((a[21448] | 0) == 0 ? Tp(21448) | 0 : 0)\n                $p(21448);\n            if ((c[5374] | 0) == (c[5375] | 0)) {\n                rq(21508);\n                if ((c[5374] | 0) == (c[5375] | 0)) {\n                    a[e >> 0] = a[b >> 0] | 0;\n                    pb(f, e);\n                    b = c[5375] | 0;\n                    do\n                        if (b >>> 0 >= (c[5376] | 0) >>> 0) {\n                            b = (((((b - (c[5374] | 0)) | 0) / 24) | 0) + 1) | 0;\n                            d = xb(21496) | 0;\n                            if (d >>> 0 < b >>> 0)\n                                cr(21496);\n                            else {\n                                h = c[5374] | 0;\n                                j = ((((c[5376] | 0) - h) | 0) / 24) | 0;\n                                i = j << 1;\n                                ub(e, j >>> 0 < (d >>> 1) >>> 0 ? (i >>> 0 < b >>> 0 ? b : i) : d, ((((c[5375] | 0) - h) | 0) / 24) | 0, 21504);\n                                d = (e + 8) | 0;\n                                sb(c[d >> 2] | 0, f);\n                                c[d >> 2] = (c[d >> 2] | 0) + 24;\n                                vb(21496, e);\n                                wb(e);\n                                break;\n                            }\n                        }\n                        else {\n                            qb(e, 21496, 1);\n                            j = (e + 4) | 0;\n                            sb(c[j >> 2] | 0, f);\n                            c[j >> 2] = (c[j >> 2] | 0) + 24;\n                            rb(e);\n                        }\n                    while (0);\n                    gb(f);\n                }\n                sq(21508);\n            }\n            V = g;\n            return 21496;\n        }\n        function eb(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0;\n            d = (b + 16) | 0;\n            e = c[d >> 2] | 0;\n            do\n                if (e)\n                    if ((b | 0) == (e | 0)) {\n                        e = tb(a) | 0;\n                        c[(a + 16) >> 2] = e;\n                        d = c[d >> 2] | 0;\n                        da[c[((c[d >> 2] | 0) + 12) >> 2] & 15](d, e);\n                        break;\n                    }\n                    else {\n                        c[(a + 16) >> 2] = Z[c[((c[e >> 2] | 0) + 8) >> 2] & 15](e) | 0;\n                        break;\n                    }\n                else\n                    c[(a + 16) >> 2] = 0;\n            while (0);\n            return;\n        }\n        function fb(a, b) {\n            a = a | 0;\n            b = b | 0;\n            a = c[(a + 16) >> 2] | 0;\n            if (!a) {\n                b = v(4) | 0;\n                c[b >> 2] = 0;\n                Nb(b);\n                x(b | 0, 4168, 131);\n            }\n            else {\n                da[c[((c[a >> 2] | 0) + 24) >> 2] & 15](a, b);\n                return;\n            }\n        }\n        function gb(a) {\n            a = a | 0;\n            var b = 0;\n            b = c[(a + 16) >> 2] | 0;\n            if ((a | 0) != (b | 0)) {\n                if (b | 0)\n                    ca[c[((c[b >> 2] | 0) + 20) >> 2] & 255](b);\n            }\n            else\n                ca[c[((c[b >> 2] | 0) + 16) >> 2] & 255](b);\n            return;\n        }\n        function hb(b) {\n            b = b | 0;\n            var f = 0, g = 0, h = 0, i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0, p = 0, q = 0;\n            q = V;\n            V = (V + 96) | 0;\n            i = (q + 16) | 0;\n            o = q;\n            l = (q + 72) | 0;\n            j = c[b >> 2] | 0;\n            m = e[(b + 114) >> 1] | 0;\n            n = o;\n            c[n >> 2] = 0;\n            c[(n + 4) >> 2] = 0;\n            n = (o + 8) | 0;\n            c[n >> 2] = m;\n            c[(n + 4) >> 2] = 0;\n            c[i >> 2] = c[o >> 2];\n            c[(i + 4) >> 2] = c[(o + 4) >> 2];\n            c[(i + 8) >> 2] = c[(o + 8) >> 2];\n            c[(i + 12) >> 2] = c[(o + 12) >> 2];\n            bb(j, i);\n            j = (b + 120) | 0;\n            a: do\n                if (c[j >> 2] | 0) {\n                    k = (i + 2) | 0;\n                    m = (i + 16) | 0;\n                    n = (i + 20) | 0;\n                    o = (i + 18) | 0;\n                    g = 0;\n                    while (1) {\n                        if (!(Ob(c[b >> 2] | 0) | 0))\n                            break a;\n                        if (Pb(c[b >> 2] | 0) | 0)\n                            break a;\n                        $a(c[b >> 2] | 0, i, 54);\n                        f = 7277;\n                        h = k;\n                        while (1) {\n                            if ((a[h >> 0] | 0) != (a[f >> 0] | 0))\n                                break;\n                            h = (h + 1) | 0;\n                            if ((h | 0) == (m | 0)) {\n                                p = 8;\n                                break;\n                            }\n                            else\n                                f = (f + 1) | 0;\n                        }\n                        if ((p | 0) == 8\n                            ? ((p = 0), ((d[o >> 0] | (d[(o + 1) >> 0] << 8)) << 16) >> 16 == 22204)\n                            : 0)\n                            break;\n                        Rb(c[b >> 2] | 0, (d[n >> 0] | (d[(n + 1) >> 0] << 8)) & 65535, 0, 1);\n                        g = (g + 1) | 0;\n                        if (g >>> 0 >= (c[j >> 2] | 0) >>> 0)\n                            break a;\n                    }\n                    o = (d[n >> 0] | (d[(n + 1) >> 0] << 8)) & 65535;\n                    p = fq(o) | 0;\n                    $a(c[b >> 2] | 0, p, o);\n                    Qb(b, p);\n                    jp(p);\n                    p = (b + 125) | 0;\n                    Tb(l, (b + 247) | 0, (d[p >> 0] | (d[(p + 1) >> 0] << 8)) & 65535);\n                    Ub((b + 300) | 0, l) | 0;\n                    Pa(l);\n                    V = q;\n                    return;\n                }\n            while (0);\n            q = v(8) | 0;\n            Sb(q);\n            x(q | 0, 2672, 8);\n        }\n        function ib(a) {\n            a = a | 0;\n            var b = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0;\n            n = V;\n            V = (V + 176) | 0;\n            g = (n + 40) | 0;\n            h = (n + 24) | 0;\n            b = (n + 16) | 0;\n            f = n;\n            k = (n + 152) | 0;\n            l = (n + 136) | 0;\n            m = (n + 56) | 0;\n            j = c[a >> 2] | 0;\n            i = (a + 116) | 0;\n            o = c[i >> 2] | 0;\n            e = h;\n            c[e >> 2] = 0;\n            c[(e + 4) >> 2] = 0;\n            e = (h + 8) | 0;\n            c[e >> 2] = o;\n            c[(e + 4) >> 2] = 0;\n            c[g >> 2] = c[h >> 2];\n            c[(g + 4) >> 2] = c[(h + 4) >> 2];\n            c[(g + 8) >> 2] = c[(h + 8) >> 2];\n            c[(g + 12) >> 2] = c[(h + 12) >> 2];\n            bb(j, g);\n            j = b;\n            c[j >> 2] = 0;\n            c[(j + 4) >> 2] = 0;\n            $a(c[a >> 2] | 0, b, 8);\n            if (!(Ob(c[a >> 2] | 0) | 0)) {\n                o = v(8) | 0;\n                hc(o);\n                x(o | 0, 2704, 8);\n            }\n            e = b;\n            b = c[e >> 2] | 0;\n            e = c[(e + 4) >> 2] | 0;\n            if (((b | 0) == -1) & ((e | 0) == -1)) {\n                o = v(8) | 0;\n                ic(o, 7488);\n                x(o | 0, 2720, 8);\n            }\n            o = c[a >> 2] | 0;\n            j = f;\n            c[j >> 2] = 0;\n            c[(j + 4) >> 2] = 0;\n            j = (f + 8) | 0;\n            c[j >> 2] = b;\n            c[(j + 4) >> 2] = e;\n            c[g >> 2] = c[f >> 2];\n            c[(g + 4) >> 2] = c[(f + 4) >> 2];\n            c[(g + 8) >> 2] = c[(f + 8) >> 2];\n            c[(g + 12) >> 2] = c[(f + 12) >> 2];\n            bb(o, g);\n            if (!(Ob(c[a >> 2] | 0) | 0)) {\n                o = v(8) | 0;\n                hc(o);\n                x(o | 0, 2704, 8);\n            }\n            $a(c[a >> 2] | 0, g, 8);\n            if (!(Ob(c[a >> 2] | 0) | 0)) {\n                o = v(8) | 0;\n                hc(o);\n                x(o | 0, 2704, 8);\n            }\n            if (c[g >> 2] | 0) {\n                o = v(8) | 0;\n                jc(o);\n                x(o | 0, 2736, 8);\n            }\n            h = (a + 288) | 0;\n            j = (a + 292) | 0;\n            c[j >> 2] = c[h >> 2];\n            o = (a + 259) | 0;\n            if ((d[o >> 0] |\n                (d[(o + 1) >> 0] << 8) |\n                (d[(o + 2) >> 0] << 16) |\n                (d[(o + 3) >> 0] << 24) |\n                0) ==\n                -1) {\n                o = v(8) | 0;\n                ic(o, 7606);\n                x(o | 0, 2720, 8);\n            }\n            f = (g + 4) | 0;\n            kc(h, ((c[f >> 2] | 0) + 1) | 0);\n            o = c[h >> 2] | 0;\n            c[o >> 2] = (c[i >> 2] | 0) + 8;\n            c[(o + 4) >> 2] = 0;\n            if ((c[f >> 2] | 0) >>> 0 > 1) {\n                Va(k, c[a >> 2] | 0);\n                lc(l, k);\n                mc(m, 32, 2, 8, 0);\n                nc(l);\n                oc(m);\n                if (!(c[f >> 2] | 0)) {\n                    h = c[h >> 2] | 0;\n                    e = h;\n                }\n                else {\n                    e = 1;\n                    do {\n                        if (e >>> 0 > 1)\n                            b = c[((c[h >> 2] | 0) + ((e + -1) << 3)) >> 2] | 0;\n                        else\n                            b = 0;\n                        i = pc(m, l, b, 1) | 0;\n                        b = c[h >> 2] | 0;\n                        o = (b + (e << 3)) | 0;\n                        c[o >> 2] = i;\n                        c[(o + 4) >> 2] = (((i | 0) < 0) << 31) >> 31;\n                        e = (e + 1) | 0;\n                    } while (e >>> 0 <= (c[f >> 2] | 0) >>> 0);\n                    e = b;\n                    h = b;\n                }\n                b = c[j >> 2] | 0;\n                if (((b - e) >> 3) >>> 0 > 1) {\n                    g = (b - h) >> 3;\n                    f = h;\n                    b = 1;\n                    e = c[f >> 2] | 0;\n                    f = c[(f + 4) >> 2] | 0;\n                    do {\n                        o = (h + (b << 3)) | 0;\n                        j = o;\n                        e = lr(c[j >> 2] | 0, c[(j + 4) >> 2] | 0, e | 0, f | 0) | 0;\n                        f = u() | 0;\n                        c[o >> 2] = e;\n                        c[(o + 4) >> 2] = f;\n                        b = (b + 1) | 0;\n                    } while (b >>> 0 < g >>> 0);\n                }\n                qc(m);\n                rc(l);\n                Ra(k);\n            }\n            V = n;\n            return;\n        }\n        function jb(b) {\n            b = b | 0;\n            a[(b + 12) >> 0] = 0;\n            a[(b + 13) >> 0] = 0;\n            return;\n        }\n        function kb(a) {\n            a = a | 0;\n            c[(a + 8) >> 2] = 0;\n            c[(a + 4) >> 2] = 0;\n            return;\n        }\n        function lb(a) {\n            a = a | 0;\n            return fo(a) | 0;\n        }\n        function mb(b, d, e) {\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            var f = 0, g = 0, h = 0, i = 0, j = 0, k = 0;\n            i = V;\n            V = (V + 16) | 0;\n            g = d;\n            h = i;\n            f = (e - g) | 0;\n            if (f >>> 0 > 4294967279)\n                yq(b);\n            if (f >>> 0 < 11)\n                a[(b + 11) >> 0] = f;\n            else {\n                k = (f + 16) & -16;\n                j = eq(k) | 0;\n                c[b >> 2] = j;\n                c[(b + 8) >> 2] = k | -2147483648;\n                c[(b + 4) >> 2] = f;\n                b = j;\n            }\n            if ((d | 0) != (e | 0)) {\n                g = (e - g) | 0;\n                f = b;\n                while (1) {\n                    nb(f, d);\n                    d = (d + 1) | 0;\n                    if ((d | 0) == (e | 0))\n                        break;\n                    else\n                        f = (f + 1) | 0;\n                }\n                b = (b + g) | 0;\n            }\n            a[h >> 0] = 0;\n            nb(b, h);\n            V = i;\n            return;\n        }\n        function nb(b, c) {\n            b = b | 0;\n            c = c | 0;\n            a[b >> 0] = a[c >> 0] | 0;\n            return;\n        }\n        function ob(a) {\n            a = a | 0;\n            yp(a);\n            jp(a);\n            return;\n        }\n        function pb(a, b) {\n            a = a | 0;\n            b = b | 0;\n            c[a >> 2] = 4372;\n            c[(a + 16) >> 2] = a;\n            return;\n        }\n        function qb(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            c[a >> 2] = b;\n            b = c[(b + 4) >> 2] | 0;\n            c[(a + 4) >> 2] = b;\n            c[(a + 8) >> 2] = b + ((d * 24) | 0);\n            return;\n        }\n        function rb(a) {\n            a = a | 0;\n            c[((c[a >> 2] | 0) + 4) >> 2] = c[(a + 4) >> 2];\n            return;\n        }\n        function sb(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0;\n            d = (b + 16) | 0;\n            e = c[d >> 2] | 0;\n            do\n                if (e)\n                    if ((b | 0) == (e | 0)) {\n                        e = tb(a) | 0;\n                        c[(a + 16) >> 2] = e;\n                        d = c[d >> 2] | 0;\n                        da[c[((c[d >> 2] | 0) + 12) >> 2] & 15](d, e);\n                        break;\n                    }\n                    else {\n                        c[(a + 16) >> 2] = e;\n                        c[d >> 2] = 0;\n                        break;\n                    }\n                else\n                    c[(a + 16) >> 2] = 0;\n            while (0);\n            return;\n        }\n        function tb(a) {\n            a = a | 0;\n            return a | 0;\n        }\n        function ub(a, b, d, e) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            var f = 0;\n            f = (a + 12) | 0;\n            c[f >> 2] = 0;\n            c[(a + 16) >> 2] = e;\n            do\n                if (b)\n                    if (b >>> 0 > 178956970) {\n                        f = v(8) | 0;\n                        vq(f, 6723);\n                        c[f >> 2] = 5956;\n                        x(f | 0, 3928, 123);\n                    }\n                    else {\n                        e = eq((b * 24) | 0) | 0;\n                        break;\n                    }\n                else\n                    e = 0;\n            while (0);\n            c[a >> 2] = e;\n            d = (e + ((d * 24) | 0)) | 0;\n            c[(a + 8) >> 2] = d;\n            c[(a + 4) >> 2] = d;\n            c[f >> 2] = e + ((b * 24) | 0);\n            return;\n        }\n        function vb(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0;\n            i = c[a >> 2] | 0;\n            j = (a + 4) | 0;\n            d = c[j >> 2] | 0;\n            h = (b + 4) | 0;\n            if ((d | 0) == (i | 0)) {\n                f = h;\n                g = a;\n                e = c[h >> 2] | 0;\n                d = i;\n            }\n            else {\n                e = c[h >> 2] | 0;\n                do {\n                    d = (d + -24) | 0;\n                    sb((e + -24) | 0, d);\n                    e = ((c[h >> 2] | 0) + -24) | 0;\n                    c[h >> 2] = e;\n                } while ((d | 0) != (i | 0));\n                f = h;\n                g = a;\n                d = c[a >> 2] | 0;\n            }\n            c[g >> 2] = e;\n            c[f >> 2] = d;\n            i = (b + 8) | 0;\n            h = c[j >> 2] | 0;\n            c[j >> 2] = c[i >> 2];\n            c[i >> 2] = h;\n            i = (a + 8) | 0;\n            j = (b + 12) | 0;\n            a = c[i >> 2] | 0;\n            c[i >> 2] = c[j >> 2];\n            c[j >> 2] = a;\n            c[b >> 2] = c[f >> 2];\n            return;\n        }\n        function wb(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0, f = 0;\n            d = c[(a + 4) >> 2] | 0;\n            e = (a + 8) | 0;\n            b = c[e >> 2] | 0;\n            if ((b | 0) != (d | 0))\n                do {\n                    f = (b + -24) | 0;\n                    c[e >> 2] = f;\n                    gb(f);\n                    b = c[e >> 2] | 0;\n                } while ((b | 0) != (d | 0));\n            b = c[a >> 2] | 0;\n            if (b | 0)\n                Da(b, ((c[(a + 12) >> 2] | 0) - b) | 0);\n            return;\n        }\n        function xb(a) {\n            a = a | 0;\n            return 178956970;\n        }\n        function yb(a) {\n            a = a | 0;\n            jp(a);\n            return;\n        }\n        function zb(a) {\n            a = a | 0;\n            a = eq(8) | 0;\n            c[a >> 2] = 4372;\n            return a | 0;\n        }\n        function Ab(a, b) {\n            a = a | 0;\n            b = b | 0;\n            c[b >> 2] = 4372;\n            return;\n        }\n        function Bb(a) {\n            a = a | 0;\n            return;\n        }\n        function Cb(a) {\n            a = a | 0;\n            Da(a, 8);\n            return;\n        }\n        function Db(a, b) {\n            a = a | 0;\n            b = b | 0;\n            Hb((a + 4) | 0, b);\n            return;\n        }\n        function Eb(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return ((c[(b + 4) >> 2] | 0) == 7183 ? (a + 4) | 0 : 0) | 0;\n        }\n        function Fb(a) {\n            a = a | 0;\n            return 2664;\n        }\n        function Gb(a) {\n            a = a | 0;\n            return;\n        }\n        function Hb(a, b) {\n            a = a | 0;\n            b = b | 0;\n            Ib(a, b);\n            return;\n        }\n        function Ib(b, c) {\n            b = b | 0;\n            c = c | 0;\n            var e = 0, f = 0;\n            b = (c + 104) | 0;\n            c = d[b >> 0] | 0;\n            e = c >>> 7;\n            f = (c >>> 6) & 1;\n            if (((e | 0) == 1) & ((f | 0) != 0)) {\n                f = v(8) | 0;\n                Jb(f);\n                x(f | 0, 2632, 8);\n            }\n            if ((e | 0) == (f | 0)) {\n                f = v(8) | 0;\n                Kb(f);\n                x(f | 0, 2648, 8);\n            }\n            else {\n                a[b >> 0] = c & 63;\n                return;\n            }\n        }\n        function Jb(a) {\n            a = a | 0;\n            xq(a, 7076);\n            c[a >> 2] = 4416;\n            return;\n        }\n        function Kb(a) {\n            a = a | 0;\n            xq(a, 7144);\n            c[a >> 2] = 4436;\n            return;\n        }\n        function Lb(a) {\n            a = a | 0;\n            yp(a);\n            jp(a);\n            return;\n        }\n        function Mb(a) {\n            a = a | 0;\n            yp(a);\n            jp(a);\n            return;\n        }\n        function Nb(a) {\n            a = a | 0;\n            c[a >> 2] = 6092;\n            return;\n        }\n        function Ob(b) {\n            b = b | 0;\n            var c = 0;\n            c = (b + 12) | 0;\n            b = (a[c >> 0] | 0) == 0;\n            a[c >> 0] = 0;\n            return b | 0;\n        }\n        function Pb(b) {\n            b = b | 0;\n            return ((a[(b + 13) >> 0] | 0) != 0) | 0;\n        }\n        function Qb(a, b) {\n            a = a | 0;\n            b = b | 0;\n            a = (a + 247) | 0;\n            Vb(a, b);\n            if (((d[a >> 0] | (d[(a + 1) >> 0] << 8)) << 16) >> 16 == 2)\n                return;\n            else {\n                b = v(8) | 0;\n                Wb(b);\n                x(b | 0, 2688, 8);\n            }\n        }\n        function Rb(b, d, e, f) {\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            f = f | 0;\n            var g = 0, h = 0;\n            switch (f | 0) {\n                case 0:\n                    break;\n                case 2: {\n                    f = c[(b + 4) >> 2] | 0;\n                    d =\n                        lr(lr(d | 0, e | 0, -1, -1) | 0, u() | 0, f | 0, ((((f | 0) < 0) << 31) >> 31) | 0) | 0;\n                    e = u() | 0;\n                    break;\n                }\n                case 1: {\n                    f = c[(b + 8) >> 2] | 0;\n                    d = lr(f | 0, ((((f | 0) < 0) << 31) >> 31) | 0, d | 0, e | 0) | 0;\n                    e = u() | 0;\n                    break;\n                }\n                default: {\n                    e = 0;\n                    d = 0;\n                }\n            }\n            g = c[(b + 4) >> 2] | 0;\n            h = (((g | 0) < 0) << 31) >> 31;\n            f = (b + 12) | 0;\n            if (((e | 0) < 0) | (((e | 0) > (h | 0)) | (((e | 0) == (h | 0)) & (d >>> 0 >= g >>> 0))))\n                a[f >> 0] = 1;\n            else {\n                a[f >> 0] = 0;\n                c[(b + 8) >> 2] = d;\n            }\n            return;\n        }\n        function Sb(a) {\n            a = a | 0;\n            xq(a, 7410);\n            c[a >> 2] = 4476;\n            return;\n        }\n        function Tb(a, b, c) {\n            a = a | 0;\n            b = b | 0;\n            c = c | 0;\n            var e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, k = 0;\n            h = V;\n            V = (V + 16) | 0;\n            g = h;\n            Xa(a);\n            f = (b + 32) | 0;\n            if (((d[f >> 0] | (d[(f + 1) >> 0] << 8)) << 16) >> 16) {\n                e = (b + 34) | 0;\n                b = 0;\n                do {\n                    j =\n                        d[e >> 0] | (d[(e + 1) >> 0] << 8) | (d[(e + 2) >> 0] << 16) | (d[(e + 3) >> 0] << 24);\n                    k = (j + ((b * 6) | 0)) | 0;\n                    i = (j + ((b * 6) | 0) + 2) | 0;\n                    j = (j + ((b * 6) | 0) + 4) | 0;\n                    _b(g, (d[k >> 0] | (d[(k + 1) >> 0] << 8)) & 65535, (d[i >> 0] | (d[(i + 1) >> 0] << 8)) & 65535, (d[j >> 0] | (d[(j + 1) >> 0] << 8)) & 65535);\n                    Zb(a, g);\n                    c = (c - ((d[i >> 0] | (d[(i + 1) >> 0] << 8)) & 65535)) | 0;\n                    b = (b + 1) | 0;\n                } while (b >>> 0 < ((d[f >> 0] | (d[(f + 1) >> 0] << 8)) & 65535) >>> 0);\n            }\n            if ((c | 0) < 0) {\n                k = v(8) | 0;\n                Wb(k);\n                x(k | 0, 2688, 8);\n            }\n            if (c | 0) {\n                _b(g, 0, c, 2);\n                Zb(a, g);\n            }\n            V = h;\n            return;\n        }\n        function Ub(b, c) {\n            b = b | 0;\n            c = c | 0;\n            var d = 0, e = 0;\n            d = V;\n            V = (V + 16) | 0;\n            e = (d + 1) | 0;\n            a[e >> 0] = a[d >> 0] | 0;\n            fc(b, c, e);\n            V = d;\n            return b | 0;\n        }\n        function Vb(b, c) {\n            b = b | 0;\n            c = c | 0;\n            var e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, k = 0;\n            f = (c + 2) | 0;\n            h = d[c >> 0] | (d[(c + 1) >> 0] << 8);\n            a[b >> 0] = h;\n            a[(b + 1) >> 0] = h >> 8;\n            h = (b + 2) | 0;\n            f = d[f >> 0] | (d[(f + 1) >> 0] << 8);\n            a[h >> 0] = f;\n            a[(h + 1) >> 0] = f >> 8;\n            a[(b + 4) >> 0] = a[(c + 4) >> 0] | 0;\n            h = (c + 6) | 0;\n            a[(b + 5) >> 0] = a[(c + 5) >> 0] | 0;\n            f = (c + 8) | 0;\n            e = (b + 6) | 0;\n            h = d[h >> 0] | (d[(h + 1) >> 0] << 8);\n            a[e >> 0] = h;\n            a[(e + 1) >> 0] = h >> 8;\n            e = (c + 12) | 0;\n            h = (b + 8) | 0;\n            f = d[f >> 0] | (d[(f + 1) >> 0] << 8) | (d[(f + 2) >> 0] << 16) | (d[(f + 3) >> 0] << 24);\n            a[h >> 0] = f;\n            a[(h + 1) >> 0] = f >> 8;\n            a[(h + 2) >> 0] = f >> 16;\n            a[(h + 3) >> 0] = f >> 24;\n            h = (b + 12) | 0;\n            e = d[e >> 0] | (d[(e + 1) >> 0] << 8) | (d[(e + 2) >> 0] << 16) | (d[(e + 3) >> 0] << 24);\n            a[h >> 0] = e;\n            a[(h + 1) >> 0] = e >> 8;\n            a[(h + 2) >> 0] = e >> 16;\n            a[(h + 3) >> 0] = e >> 24;\n            h = (c + 16) | 0;\n            e = h;\n            e = d[e >> 0] | (d[(e + 1) >> 0] << 8) | (d[(e + 2) >> 0] << 16) | (d[(e + 3) >> 0] << 24);\n            h = (h + 4) | 0;\n            h = d[h >> 0] | (d[(h + 1) >> 0] << 8) | (d[(h + 2) >> 0] << 16) | (d[(h + 3) >> 0] << 24);\n            f = (b + 16) | 0;\n            i = f;\n            a[i >> 0] = e;\n            a[(i + 1) >> 0] = e >> 8;\n            a[(i + 2) >> 0] = e >> 16;\n            a[(i + 3) >> 0] = e >> 24;\n            f = (f + 4) | 0;\n            a[f >> 0] = h;\n            a[(f + 1) >> 0] = h >> 8;\n            a[(f + 2) >> 0] = h >> 16;\n            a[(f + 3) >> 0] = h >> 24;\n            f = (c + 32) | 0;\n            h = (c + 24) | 0;\n            i = h;\n            i = d[i >> 0] | (d[(i + 1) >> 0] << 8) | (d[(i + 2) >> 0] << 16) | (d[(i + 3) >> 0] << 24);\n            h = (h + 4) | 0;\n            h = d[h >> 0] | (d[(h + 1) >> 0] << 8) | (d[(h + 2) >> 0] << 16) | (d[(h + 3) >> 0] << 24);\n            e = (b + 24) | 0;\n            g = e;\n            a[g >> 0] = i;\n            a[(g + 1) >> 0] = i >> 8;\n            a[(g + 2) >> 0] = i >> 16;\n            a[(g + 3) >> 0] = i >> 24;\n            e = (e + 4) | 0;\n            a[e >> 0] = h;\n            a[(e + 1) >> 0] = h >> 8;\n            a[(e + 2) >> 0] = h >> 16;\n            a[(e + 3) >> 0] = h >> 24;\n            e = (c + 34) | 0;\n            h = (b + 32) | 0;\n            f = d[f >> 0] | (d[(f + 1) >> 0] << 8);\n            a[h >> 0] = f;\n            a[(h + 1) >> 0] = f >> 8;\n            g = (b + 34) | 0;\n            b = d[g >> 0] | (d[(g + 1) >> 0] << 8) | (d[(g + 2) >> 0] << 16) | (d[(g + 3) >> 0] << 24);\n            if (!b)\n                b = f;\n            else {\n                gq(b);\n                b = d[h >> 0] | (d[(h + 1) >> 0] << 8);\n            }\n            f = fq(((b & 65535) * 6) | 0) | 0;\n            a[g >> 0] = f;\n            a[(g + 1) >> 0] = f >> 8;\n            a[(g + 2) >> 0] = f >> 16;\n            a[(g + 3) >> 0] = f >> 24;\n            if ((b << 16) >> 16\n                ? ((b = (c + 36) | 0),\n                    (i = d[e >> 0] | (d[(e + 1) >> 0] << 8)),\n                    (a[f >> 0] = i),\n                    (a[(f + 1) >> 0] = i >> 8),\n                    (c = (c + 38) | 0),\n                    (i = (f + 2) | 0),\n                    (b = d[b >> 0] | (d[(b + 1) >> 0] << 8)),\n                    (a[i >> 0] = b),\n                    (a[(i + 1) >> 0] = b >> 8),\n                    (i = (f + 4) | 0),\n                    (c = d[c >> 0] | (d[(c + 1) >> 0] << 8)),\n                    (a[i >> 0] = c),\n                    (a[(i + 1) >> 0] = c >> 8),\n                    ((d[h >> 0] | (d[(h + 1) >> 0] << 8)) & 65535) > 1)\n                : 0) {\n                b = 1;\n                do {\n                    c = e;\n                    e = (e + 6) | 0;\n                    i =\n                        d[g >> 0] | (d[(g + 1) >> 0] << 8) | (d[(g + 2) >> 0] << 16) | (d[(g + 3) >> 0] << 24);\n                    j = (c + 8) | 0;\n                    f = (i + ((b * 6) | 0)) | 0;\n                    k = d[e >> 0] | (d[(e + 1) >> 0] << 8);\n                    a[f >> 0] = k;\n                    a[(f + 1) >> 0] = k >> 8;\n                    c = (c + 10) | 0;\n                    f = (i + ((b * 6) | 0) + 2) | 0;\n                    j = d[j >> 0] | (d[(j + 1) >> 0] << 8);\n                    a[f >> 0] = j;\n                    a[(f + 1) >> 0] = j >> 8;\n                    i = (i + ((b * 6) | 0) + 4) | 0;\n                    c = d[c >> 0] | (d[(c + 1) >> 0] << 8);\n                    a[i >> 0] = c;\n                    a[(i + 1) >> 0] = c >> 8;\n                    b = (b + 1) | 0;\n                } while (b >>> 0 < ((d[h >> 0] | (d[(h + 1) >> 0] << 8)) & 65535) >>> 0);\n            }\n            return;\n        }\n        function Wb(a) {\n            a = a | 0;\n            xq(a, 7354);\n            c[a >> 2] = 4456;\n            return;\n        }\n        function Xb(a) {\n            a = a | 0;\n            yp(a);\n            jp(a);\n            return;\n        }\n        function Yb(a) {\n            a = a | 0;\n            yp(a);\n            jp(a);\n            return;\n        }\n        function Zb(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, k = 0;\n            i = V;\n            V = (V + 32) | 0;\n            f = i;\n            g = (a + 4) | 0;\n            d = c[g >> 2] | 0;\n            h = (a + 8) | 0;\n            do\n                if ((d | 0) == (c[h >> 2] | 0)) {\n                    d = (((((d - (c[a >> 2] | 0)) | 0) / 12) | 0) + 1) | 0;\n                    e = ec(a) | 0;\n                    if (e >>> 0 < d >>> 0)\n                        cr(a);\n                    else {\n                        j = c[a >> 2] | 0;\n                        k = ((((c[h >> 2] | 0) - j) | 0) / 12) | 0;\n                        h = k << 1;\n                        bc(f, k >>> 0 < (e >>> 1) >>> 0 ? (h >>> 0 < d >>> 0 ? d : h) : e, ((((c[g >> 2] | 0) - j) | 0) / 12) | 0, (a + 8) | 0);\n                        h = (f + 8) | 0;\n                        g = c[h >> 2] | 0;\n                        c[g >> 2] = c[b >> 2];\n                        c[(g + 4) >> 2] = c[(b + 4) >> 2];\n                        c[(g + 8) >> 2] = c[(b + 8) >> 2];\n                        c[h >> 2] = (c[h >> 2] | 0) + 12;\n                        cc(a, f);\n                        dc(f);\n                        break;\n                    }\n                }\n                else {\n                    $b(f, a, 1);\n                    k = (f + 4) | 0;\n                    j = c[k >> 2] | 0;\n                    c[j >> 2] = c[b >> 2];\n                    c[(j + 4) >> 2] = c[(b + 4) >> 2];\n                    c[(j + 8) >> 2] = c[(b + 8) >> 2];\n                    c[k >> 2] = (c[k >> 2] | 0) + 12;\n                    ac(f);\n                }\n            while (0);\n            V = i;\n            return;\n        }\n        function _b(a, b, d, e) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            c[a >> 2] = b;\n            c[(a + 4) >> 2] = d;\n            c[(a + 8) >> 2] = e;\n            return;\n        }\n        function $b(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            c[a >> 2] = b;\n            b = c[(b + 4) >> 2] | 0;\n            c[(a + 4) >> 2] = b;\n            c[(a + 8) >> 2] = b + ((d * 12) | 0);\n            return;\n        }\n        function ac(a) {\n            a = a | 0;\n            c[((c[a >> 2] | 0) + 4) >> 2] = c[(a + 4) >> 2];\n            return;\n        }\n        function bc(a, b, d, e) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            var f = 0;\n            f = (a + 12) | 0;\n            c[f >> 2] = 0;\n            c[(a + 16) >> 2] = e;\n            do\n                if (b)\n                    if (b >>> 0 > 357913941) {\n                        f = v(8) | 0;\n                        vq(f, 6723);\n                        c[f >> 2] = 5956;\n                        x(f | 0, 3928, 123);\n                    }\n                    else {\n                        e = eq((b * 12) | 0) | 0;\n                        break;\n                    }\n                else\n                    e = 0;\n            while (0);\n            c[a >> 2] = e;\n            d = (e + ((d * 12) | 0)) | 0;\n            c[(a + 8) >> 2] = d;\n            c[(a + 4) >> 2] = d;\n            c[f >> 2] = e + ((b * 12) | 0);\n            return;\n        }\n        function cc(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0, f = 0, g = 0, h = 0;\n            e = c[a >> 2] | 0;\n            h = (a + 4) | 0;\n            g = (b + 4) | 0;\n            f = ((c[h >> 2] | 0) - e) | 0;\n            d = ((c[g >> 2] | 0) + (((((f | 0) / -12) | 0) * 12) | 0)) | 0;\n            c[g >> 2] = d;\n            if ((f | 0) > 0) {\n                ur(d | 0, e | 0, f | 0) | 0;\n                e = g;\n                d = c[g >> 2] | 0;\n            }\n            else\n                e = g;\n            g = c[a >> 2] | 0;\n            c[a >> 2] = d;\n            c[e >> 2] = g;\n            g = (b + 8) | 0;\n            f = c[h >> 2] | 0;\n            c[h >> 2] = c[g >> 2];\n            c[g >> 2] = f;\n            g = (a + 8) | 0;\n            h = (b + 12) | 0;\n            a = c[g >> 2] | 0;\n            c[g >> 2] = c[h >> 2];\n            c[h >> 2] = a;\n            c[b >> 2] = c[e >> 2];\n            return;\n        }\n        function dc(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0;\n            b = c[(a + 4) >> 2] | 0;\n            d = (a + 8) | 0;\n            e = c[d >> 2] | 0;\n            if ((e | 0) != (b | 0))\n                c[d >> 2] = e + ((~(((((e + -12 - b) | 0) >>> 0) / 12) | 0) * 12) | 0);\n            b = c[a >> 2] | 0;\n            if (b | 0)\n                Da(b, ((c[(a + 12) >> 2] | 0) - b) | 0);\n            return;\n        }\n        function ec(a) {\n            a = a | 0;\n            return 357913941;\n        }\n        function fc(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0;\n            gc(a);\n            c[a >> 2] = c[b >> 2];\n            d = (b + 4) | 0;\n            c[(a + 4) >> 2] = c[d >> 2];\n            e = (b + 8) | 0;\n            c[(a + 8) >> 2] = c[e >> 2];\n            c[e >> 2] = 0;\n            c[d >> 2] = 0;\n            c[b >> 2] = 0;\n            return;\n        }\n        function gc(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0, f = 0;\n            b = c[a >> 2] | 0;\n            d = b;\n            if (b | 0) {\n                e = (a + 4) | 0;\n                c[e >> 2] = d;\n                f = (a + 8) | 0;\n                Da(b, ((c[f >> 2] | 0) - d) | 0);\n                c[f >> 2] = 0;\n                c[e >> 2] = 0;\n                c[a >> 2] = 0;\n            }\n            return;\n        }\n        function hc(a) {\n            a = a | 0;\n            xq(a, 7660);\n            c[a >> 2] = 4496;\n            return;\n        }\n        function ic(a, b) {\n            a = a | 0;\n            b = b | 0;\n            xq(a, b);\n            c[a >> 2] = 4516;\n            return;\n        }\n        function jc(a) {\n            a = a | 0;\n            xq(a, 7704);\n            c[a >> 2] = 4536;\n            return;\n        }\n        function kc(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0, f = 0;\n            d = (a + 4) | 0;\n            f = c[a >> 2] | 0;\n            e = ((c[d >> 2] | 0) - f) >> 3;\n            if (e >>> 0 >= b >>> 0) {\n                if (e >>> 0 > b >>> 0)\n                    c[d >> 2] = f + (b << 3);\n            }\n            else\n                vc(a, (b - e) | 0);\n            return;\n        }\n        function lc(a, b) {\n            a = a | 0;\n            b = b | 0;\n            c[a >> 2] = b;\n            c[(a + 4) >> 2] = 0;\n            c[(a + 8) >> 2] = -1;\n            return;\n        }\n        function mc(a, b, d, e, f) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            f = f | 0;\n            var g = 0;\n            c[(a + 4) >> 2] = b;\n            c[(a + 8) >> 2] = d;\n            c[(a + 12) >> 2] = e;\n            c[(a + 16) >> 2] = f;\n            c[(a + 36) >> 2] = 0;\n            c[(a + 40) >> 2] = 0;\n            c[(a + 44) >> 2] = 0;\n            Gc((a + 48) | 0);\n            c[(a + 68) >> 2] = 0;\n            c[(a + 72) >> 2] = 0;\n            c[(a + 76) >> 2] = 0;\n            do\n                if (!f) {\n                    d = (a + 20) | 0;\n                    if (((b + -1) | 0) >>> 0 < 31) {\n                        c[d >> 2] = b;\n                        f = 1 << b;\n                        c[(a + 24) >> 2] = f;\n                        d = f >>> 1;\n                        c[(a + 28) >> 2] = 0 - d;\n                        d = (f + -1 - d) | 0;\n                        break;\n                    }\n                    else {\n                        c[d >> 2] = 32;\n                        c[(a + 24) >> 2] = 0;\n                        c[(a + 28) >> 2] = -2147483648;\n                        d = 2147483647;\n                        break;\n                    }\n                }\n                else {\n                    e = (a + 20) | 0;\n                    c[e >> 2] = 0;\n                    c[(a + 24) >> 2] = f;\n                    d = f;\n                    g = 0;\n                    while (1) {\n                        d = d >>> 1;\n                        b = (g + 1) | 0;\n                        if (!d)\n                            break;\n                        else\n                            g = b;\n                    }\n                    c[e >> 2] = ((1 << g) | 0) == (f | 0) ? g : b;\n                    d = f >>> 1;\n                    c[(a + 28) >> 2] = 0 - d;\n                    d = (f + -1 - d) | 0;\n                }\n            while (0);\n            c[(a + 32) >> 2] = d;\n            c[a >> 2] = 0;\n            return;\n        }\n        function nc(a) {\n            a = a | 0;\n            var b = 0;\n            b = ((Jc(c[a >> 2] | 0) | 0) & 255) << 24;\n            b = (((Jc(c[a >> 2] | 0) | 0) & 255) << 16) | b;\n            b = b | (((Jc(c[a >> 2] | 0) | 0) & 255) << 8);\n            c[(a + 4) >> 2] = b | ((Jc(c[a >> 2] | 0) | 0) & 255);\n            return;\n        }\n        function oc(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0, p = 0, q = 0, r = 0, s = 0, t = 0;\n            q = V;\n            V = (V + 64) | 0;\n            o = (q + 44) | 0;\n            p = q;\n            k = (a + 36) | 0;\n            l = (a + 40) | 0;\n            a: do\n                if ((c[k >> 2] | 0) == (c[l >> 2] | 0)) {\n                    m = (a + 8) | 0;\n                    b: do\n                        if (!(c[m >> 2] | 0))\n                            n = (a + 20) | 0;\n                        else {\n                            f = (a + 20) | 0;\n                            g = (a + 44) | 0;\n                            h = (o + 4) | 0;\n                            i = (a + 44) | 0;\n                            j = (o + 8) | 0;\n                            e = 0;\n                            while (1) {\n                                Oc(p, ((c[f >> 2] | 0) + 1) | 0, 0, 0);\n                                b = c[l >> 2] | 0;\n                                if (b >>> 0 < (c[g >> 2] | 0) >>> 0) {\n                                    Pc(o, k, 1);\n                                    Rc(c[h >> 2] | 0, p);\n                                    c[h >> 2] = (c[h >> 2] | 0) + 44;\n                                    Qc(o);\n                                }\n                                else {\n                                    b = (((((b - (c[k >> 2] | 0)) | 0) / 44) | 0) + 1) | 0;\n                                    d = Vc(k) | 0;\n                                    if (d >>> 0 < b >>> 0)\n                                        break;\n                                    r = c[k >> 2] | 0;\n                                    t = ((((c[g >> 2] | 0) - r) | 0) / 44) | 0;\n                                    s = t << 1;\n                                    Sc(o, t >>> 0 < (d >>> 1) >>> 0 ? (s >>> 0 < b >>> 0 ? b : s) : d, ((((c[l >> 2] | 0) - r) | 0) / 44) | 0, i);\n                                    Rc(c[j >> 2] | 0, p);\n                                    c[j >> 2] = (c[j >> 2] | 0) + 44;\n                                    Tc(k, o);\n                                    Uc(o);\n                                }\n                                Ic(p);\n                                e = (e + 1) | 0;\n                                if (e >>> 0 >= (c[m >> 2] | 0) >>> 0) {\n                                    n = f;\n                                    break b;\n                                }\n                            }\n                            cr(k);\n                        }\n                    while (0);\n                    if (c[n >> 2] | 0) {\n                        h = (a + 12) | 0;\n                        i = (a + 68) | 0;\n                        j = (a + 72) | 0;\n                        k = (a + 76) | 0;\n                        l = (o + 4) | 0;\n                        f = (a + 76) | 0;\n                        g = (o + 8) | 0;\n                        e = 1;\n                        while (1) {\n                            b = c[h >> 2] | 0;\n                            Oc(p, 1 << (e >>> 0 > b >>> 0 ? b : e), 0, 0);\n                            b = c[j >> 2] | 0;\n                            if (b >>> 0 < (c[k >> 2] | 0) >>> 0) {\n                                Pc(o, i, 1);\n                                Rc(c[l >> 2] | 0, p);\n                                c[l >> 2] = (c[l >> 2] | 0) + 44;\n                                Qc(o);\n                            }\n                            else {\n                                b = (((((b - (c[i >> 2] | 0)) | 0) / 44) | 0) + 1) | 0;\n                                d = Vc(i) | 0;\n                                if (d >>> 0 < b >>> 0)\n                                    break;\n                                t = c[i >> 2] | 0;\n                                r = ((((c[k >> 2] | 0) - t) | 0) / 44) | 0;\n                                s = r << 1;\n                                Sc(o, r >>> 0 < (d >>> 1) >>> 0 ? (s >>> 0 < b >>> 0 ? b : s) : d, ((((c[j >> 2] | 0) - t) | 0) / 44) | 0, f);\n                                Rc(c[g >> 2] | 0, p);\n                                c[g >> 2] = (c[g >> 2] | 0) + 44;\n                                Tc(i, o);\n                                Uc(o);\n                            }\n                            Ic(p);\n                            e = (e + 1) | 0;\n                            if (e >>> 0 > (c[n >> 2] | 0) >>> 0)\n                                break a;\n                        }\n                        cr(i);\n                    }\n                }\n            while (0);\n            V = q;\n            return;\n        }\n        function pc(a, b, d, e) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            d = ((Yc(a, b, ((c[(a + 36) >> 2] | 0) + ((e * 44) | 0)) | 0) | 0) + d) | 0;\n            b = c[(a + 24) >> 2] | 0;\n            if ((d | 0) < 0)\n                return (d + b) | 0;\n            else\n                return (d - (d >>> 0 < b >>> 0 ? 0 : b)) | 0;\n            return 0;\n        }\n        function qc(a) {\n            a = a | 0;\n            Hc((a + 68) | 0);\n            Hc((a + 36) | 0);\n            return;\n        }\n        function rc(a) {\n            a = a | 0;\n            return;\n        }\n        function sc(a) {\n            a = a | 0;\n            yp(a);\n            jp(a);\n            return;\n        }\n        function tc(a) {\n            a = a | 0;\n            yp(a);\n            jp(a);\n            return;\n        }\n        function uc(a) {\n            a = a | 0;\n            yp(a);\n            jp(a);\n            return;\n        }\n        function vc(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, k = 0;\n            i = V;\n            V = (V + 32) | 0;\n            f = i;\n            g = (a + 8) | 0;\n            h = (a + 4) | 0;\n            d = c[h >> 2] | 0;\n            do\n                if ((((c[g >> 2] | 0) - d) >> 3) >>> 0 < b >>> 0) {\n                    d = (((d - (c[a >> 2] | 0)) >> 3) + b) | 0;\n                    e = Dc(a) | 0;\n                    if (e >>> 0 < d >>> 0)\n                        cr(a);\n                    else {\n                        j = c[a >> 2] | 0;\n                        k = ((c[g >> 2] | 0) - j) | 0;\n                        g = k >> 2;\n                        xc(f, (k >> 3) >>> 0 < (e >>> 1) >>> 0 ? (g >>> 0 < d >>> 0 ? d : g) : e, ((c[h >> 2] | 0) - j) >> 3, (a + 8) | 0);\n                        yc(f, b);\n                        zc(a, f);\n                        Ac(f);\n                        break;\n                    }\n                }\n                else\n                    wc(a, b);\n            while (0);\n            V = i;\n            return;\n        }\n        function wc(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0, f = 0;\n            f = V;\n            V = (V + 16) | 0;\n            e = f;\n            Bc(e, a, b);\n            a = (e + 4) | 0;\n            b = c[a >> 2] | 0;\n            d = c[(e + 8) >> 2] | 0;\n            if ((b | 0) != (d | 0)) {\n                d = (d + -8 - b) | 0;\n                wr(b | 0, 0, ((d + 8) & -8) | 0) | 0;\n                c[a >> 2] = b + (((d >>> 3) + 1) << 3);\n            }\n            Cc(e);\n            V = f;\n            return;\n        }\n        function xc(a, b, d, e) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            var f = 0;\n            f = (a + 12) | 0;\n            c[f >> 2] = 0;\n            c[(a + 16) >> 2] = e;\n            do\n                if (b)\n                    if (b >>> 0 > 536870911) {\n                        f = v(8) | 0;\n                        vq(f, 6723);\n                        c[f >> 2] = 5956;\n                        x(f | 0, 3928, 123);\n                    }\n                    else {\n                        e = eq(b << 3) | 0;\n                        break;\n                    }\n                else\n                    e = 0;\n            while (0);\n            c[a >> 2] = e;\n            d = (e + (d << 3)) | 0;\n            c[(a + 8) >> 2] = d;\n            c[(a + 4) >> 2] = d;\n            c[f >> 2] = e + (b << 3);\n            return;\n        }\n        function yc(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0;\n            e = V;\n            V = (V + 16) | 0;\n            d = e;\n            Ec(d, (a + 8) | 0, b);\n            a = c[d >> 2] | 0;\n            b = c[(d + 4) >> 2] | 0;\n            if ((a | 0) != (b | 0)) {\n                b = (b + -8 - a) | 0;\n                wr(a | 0, 0, ((b + 8) & -8) | 0) | 0;\n                c[d >> 2] = a + (((b >>> 3) + 1) << 3);\n            }\n            Fc(d);\n            V = e;\n            return;\n        }\n        function zc(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0, f = 0, g = 0, h = 0;\n            e = c[a >> 2] | 0;\n            h = (a + 4) | 0;\n            g = (b + 4) | 0;\n            f = ((c[h >> 2] | 0) - e) | 0;\n            d = ((c[g >> 2] | 0) + ((0 - (f >> 3)) << 3)) | 0;\n            c[g >> 2] = d;\n            if ((f | 0) > 0) {\n                ur(d | 0, e | 0, f | 0) | 0;\n                e = g;\n                d = c[g >> 2] | 0;\n            }\n            else\n                e = g;\n            g = c[a >> 2] | 0;\n            c[a >> 2] = d;\n            c[e >> 2] = g;\n            g = (b + 8) | 0;\n            f = c[h >> 2] | 0;\n            c[h >> 2] = c[g >> 2];\n            c[g >> 2] = f;\n            g = (a + 8) | 0;\n            h = (b + 12) | 0;\n            a = c[g >> 2] | 0;\n            c[g >> 2] = c[h >> 2];\n            c[h >> 2] = a;\n            c[b >> 2] = c[e >> 2];\n            return;\n        }\n        function Ac(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0;\n            b = c[(a + 4) >> 2] | 0;\n            d = (a + 8) | 0;\n            e = c[d >> 2] | 0;\n            if ((e | 0) != (b | 0))\n                c[d >> 2] = e + (~(((e + -8 - b) | 0) >>> 3) << 3);\n            b = c[a >> 2] | 0;\n            if (b | 0)\n                Da(b, ((c[(a + 12) >> 2] | 0) - b) | 0);\n            return;\n        }\n        function Bc(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            c[a >> 2] = b;\n            b = c[(b + 4) >> 2] | 0;\n            c[(a + 4) >> 2] = b;\n            c[(a + 8) >> 2] = b + (d << 3);\n            return;\n        }\n        function Cc(a) {\n            a = a | 0;\n            c[((c[a >> 2] | 0) + 4) >> 2] = c[(a + 4) >> 2];\n            return;\n        }\n        function Dc(a) {\n            a = a | 0;\n            return 536870911;\n        }\n        function Ec(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            c[a >> 2] = c[b >> 2];\n            c[(a + 4) >> 2] = (c[b >> 2] | 0) + (d << 3);\n            c[(a + 8) >> 2] = b;\n            return;\n        }\n        function Fc(a) {\n            a = a | 0;\n            c[c[(a + 8) >> 2] >> 2] = c[a >> 2];\n            return;\n        }\n        function Gc(a) {\n            a = a | 0;\n            c[(a + 12) >> 2] = 1;\n            c[(a + 16) >> 2] = 2;\n            c[(a + 8) >> 2] = 4096;\n            c[(a + 4) >> 2] = 4;\n            c[a >> 2] = 4;\n            return;\n        }\n        function Hc(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0;\n            d = c[a >> 2] | 0;\n            if (d | 0) {\n                e = (a + 4) | 0;\n                b = c[e >> 2] | 0;\n                if ((b | 0) == (d | 0))\n                    b = d;\n                else {\n                    do {\n                        b = (b + -44) | 0;\n                        Ic(b);\n                    } while ((b | 0) != (d | 0));\n                    b = c[a >> 2] | 0;\n                }\n                c[e >> 2] = d;\n                Da(b, ((c[(a + 8) >> 2] | 0) - b) | 0);\n            }\n            return;\n        }\n        function Ic(a) {\n            a = a | 0;\n            var b = 0;\n            b = c[(a + 8) >> 2] | 0;\n            if (b | 0)\n                Ua(b);\n            b = c[(a + 12) >> 2] | 0;\n            if (b | 0)\n                Ua(b);\n            b = c[(a + 16) >> 2] | 0;\n            if (b | 0)\n                Ua(b);\n            return;\n        }\n        function Jc(b) {\n            b = b | 0;\n            var d = 0, e = 0;\n            e = (b + 4) | 0;\n            d = c[e >> 2] | 0;\n            if ((d | 0) >= (c[(b + 8) >> 2] | 0)) {\n                Kc(b);\n                d = c[e >> 2] | 0;\n            }\n            b = c[(b + 12) >> 2] | 0;\n            c[e >> 2] = d + 1;\n            return a[(b + d) >> 0] | 0;\n        }\n        function Kc(a) {\n            a = a | 0;\n            var b = 0;\n            c[(a + 4) >> 2] = 0;\n            $a(c[a >> 2] | 0, c[(a + 12) >> 2] | 0, 1048576);\n            b = Lc(c[a >> 2] | 0) | 0;\n            c[(a + 8) >> 2] = b;\n            if (!b) {\n                b = v(8) | 0;\n                Mc(b);\n                x(b | 0, 2752, 8);\n            }\n            else\n                return;\n        }\n        function Lc(a) {\n            a = a | 0;\n            return c[(a + 16) >> 2] | 0;\n        }\n        function Mc(a) {\n            a = a | 0;\n            xq(a, 7769);\n            c[a >> 2] = 4556;\n            return;\n        }\n        function Nc(a) {\n            a = a | 0;\n            yp(a);\n            jp(a);\n            return;\n        }\n        function Oc(b, d, e, f) {\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            f = f | 0;\n            var g = 0, h = 0, i = 0;\n            c[b >> 2] = d;\n            a[(b + 4) >> 0] = e & 1;\n            h = (b + 8) | 0;\n            c[h >> 2] = 0;\n            i = (b + 12) | 0;\n            c[i >> 2] = 0;\n            g = (b + 16) | 0;\n            c[g >> 2] = 0;\n            if (((d + -2) | 0) >>> 0 > 2046) {\n                b = v(8) | 0;\n                xq(b, 7789);\n                x(b | 0, 3912, 8);\n            }\n            c[(b + 32) >> 2] = d + -1;\n            if ((d >>> 0 > 16) & (e ^ 1)) {\n                e = 3;\n                while (1)\n                    if ((1 << (e + 2)) >>> 0 < d >>> 0)\n                        e = (e + 1) | 0;\n                    else\n                        break;\n                d = 1 << e;\n                c[(b + 36) >> 2] = d;\n                c[(b + 40) >> 2] = 15 - e;\n                c[g >> 2] = _a(((d << 2) + 8) | 0) | 0;\n                d = c[b >> 2] | 0;\n            }\n            else {\n                c[g >> 2] = 0;\n                c[(b + 40) >> 2] = 0;\n                c[(b + 36) >> 2] = 0;\n            }\n            c[h >> 2] = _a(d << 2) | 0;\n            g = _a(c[b >> 2] << 2) | 0;\n            c[i >> 2] = g;\n            c[(b + 20) >> 2] = 0;\n            d = c[b >> 2] | 0;\n            e = (b + 24) | 0;\n            c[e >> 2] = d;\n            d = (d | 0) != 0;\n            if (!f) {\n                if (d) {\n                    d = 0;\n                    do {\n                        c[(g + (d << 2)) >> 2] = 1;\n                        d = (d + 1) | 0;\n                    } while (d >>> 0 < (c[b >> 2] | 0) >>> 0);\n                }\n            }\n            else if (d) {\n                d = 0;\n                do {\n                    c[(g + (d << 2)) >> 2] = c[(f + (d << 2)) >> 2];\n                    d = (d + 1) | 0;\n                } while (d >>> 0 < (c[b >> 2] | 0) >>> 0);\n            }\n            Xc(b);\n            f = (((c[b >> 2] | 0) + 6) | 0) >>> 1;\n            c[e >> 2] = f;\n            c[(b + 28) >> 2] = f;\n            return;\n        }\n        function Pc(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            c[a >> 2] = b;\n            b = c[(b + 4) >> 2] | 0;\n            c[(a + 4) >> 2] = b;\n            c[(a + 8) >> 2] = b + ((d * 44) | 0);\n            return;\n        }\n        function Qc(a) {\n            a = a | 0;\n            c[((c[a >> 2] | 0) + 4) >> 2] = c[(a + 4) >> 2];\n            return;\n        }\n        function Rc(b, d) {\n            b = b | 0;\n            d = d | 0;\n            var e = 0;\n            c[b >> 2] = c[d >> 2];\n            a[(b + 4) >> 0] = a[(d + 4) >> 0] | 0;\n            e = (d + 8) | 0;\n            c[(b + 8) >> 2] = c[e >> 2];\n            c[(b + 12) >> 2] = c[(d + 12) >> 2];\n            c[(b + 16) >> 2] = c[(d + 16) >> 2];\n            c[(b + 20) >> 2] = c[(d + 20) >> 2];\n            c[(b + 24) >> 2] = c[(d + 24) >> 2];\n            c[(b + 28) >> 2] = c[(d + 28) >> 2];\n            c[(b + 32) >> 2] = c[(d + 32) >> 2];\n            c[(b + 36) >> 2] = c[(d + 36) >> 2];\n            c[(b + 40) >> 2] = c[(d + 40) >> 2];\n            c[e >> 2] = 0;\n            c[(e + 4) >> 2] = 0;\n            c[(e + 8) >> 2] = 0;\n            return;\n        }\n        function Sc(a, b, d, e) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            var f = 0;\n            f = (a + 12) | 0;\n            c[f >> 2] = 0;\n            c[(a + 16) >> 2] = e;\n            do\n                if (b)\n                    if (b >>> 0 > 97612893) {\n                        f = v(8) | 0;\n                        vq(f, 6723);\n                        c[f >> 2] = 5956;\n                        x(f | 0, 3928, 123);\n                    }\n                    else {\n                        e = eq((b * 44) | 0) | 0;\n                        break;\n                    }\n                else\n                    e = 0;\n            while (0);\n            c[a >> 2] = e;\n            d = (e + ((d * 44) | 0)) | 0;\n            c[(a + 8) >> 2] = d;\n            c[(a + 4) >> 2] = d;\n            c[f >> 2] = e + ((b * 44) | 0);\n            return;\n        }\n        function Tc(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0;\n            i = c[a >> 2] | 0;\n            j = (a + 4) | 0;\n            d = c[j >> 2] | 0;\n            h = (b + 4) | 0;\n            if ((d | 0) == (i | 0)) {\n                f = h;\n                g = a;\n                e = c[h >> 2] | 0;\n                d = i;\n            }\n            else {\n                e = c[h >> 2] | 0;\n                do {\n                    d = (d + -44) | 0;\n                    Wc((e + -44) | 0, d);\n                    e = ((c[h >> 2] | 0) + -44) | 0;\n                    c[h >> 2] = e;\n                } while ((d | 0) != (i | 0));\n                f = h;\n                g = a;\n                d = c[a >> 2] | 0;\n            }\n            c[g >> 2] = e;\n            c[f >> 2] = d;\n            i = (b + 8) | 0;\n            h = c[j >> 2] | 0;\n            c[j >> 2] = c[i >> 2];\n            c[i >> 2] = h;\n            i = (a + 8) | 0;\n            j = (b + 12) | 0;\n            a = c[i >> 2] | 0;\n            c[i >> 2] = c[j >> 2];\n            c[j >> 2] = a;\n            c[b >> 2] = c[f >> 2];\n            return;\n        }\n        function Uc(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0, f = 0;\n            d = c[(a + 4) >> 2] | 0;\n            e = (a + 8) | 0;\n            b = c[e >> 2] | 0;\n            if ((b | 0) != (d | 0))\n                do {\n                    f = (b + -44) | 0;\n                    c[e >> 2] = f;\n                    Ic(f);\n                    b = c[e >> 2] | 0;\n                } while ((b | 0) != (d | 0));\n            b = c[a >> 2] | 0;\n            if (b | 0)\n                Da(b, ((c[(a + 12) >> 2] | 0) - b) | 0);\n            return;\n        }\n        function Vc(a) {\n            a = a | 0;\n            return 97612893;\n        }\n        function Wc(b, d) {\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0, g = 0, h = 0;\n            e = c[d >> 2] | 0;\n            c[b >> 2] = e;\n            a[(b + 4) >> 0] = a[(d + 4) >> 0] | 0;\n            c[(b + 20) >> 2] = c[(d + 20) >> 2];\n            c[(b + 24) >> 2] = c[(d + 24) >> 2];\n            c[(b + 28) >> 2] = c[(d + 28) >> 2];\n            c[(b + 32) >> 2] = c[(d + 32) >> 2];\n            h = (b + 36) | 0;\n            c[h >> 2] = c[(d + 36) >> 2];\n            c[(b + 40) >> 2] = c[(d + 40) >> 2];\n            e = e << 2;\n            f = _a(e) | 0;\n            c[(b + 8) >> 2] = f;\n            g = c[b >> 2] | 0;\n            if (g | 0)\n                vr(f | 0, c[(d + 8) >> 2] | 0, (g << 2) | 0) | 0;\n            e = _a(e) | 0;\n            c[(b + 12) >> 2] = e;\n            f = c[b >> 2] | 0;\n            if (f | 0)\n                vr(e | 0, c[(d + 12) >> 2] | 0, (f << 2) | 0) | 0;\n            e = c[h >> 2] | 0;\n            if (e) {\n                f = _a(((e << 2) + 8) | 0) | 0;\n                c[(b + 16) >> 2] = f;\n                e = ((c[h >> 2] << 2) + 8) | 0;\n                if (e | 0)\n                    vr(f | 0, c[(d + 16) >> 2] | 0, e | 0) | 0;\n            }\n            else\n                c[(b + 16) >> 2] = 0;\n            return;\n        }\n        function Xc(b) {\n            b = b | 0;\n            var d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0, p = 0, r = 0;\n            r = (b + 24) | 0;\n            g = (b + 20) | 0;\n            d = ((c[g >> 2] | 0) + (c[r >> 2] | 0)) | 0;\n            c[g >> 2] = d;\n            if (d >>> 0 > 32768) {\n                c[g >> 2] = 0;\n                if (!(c[b >> 2] | 0))\n                    d = 0;\n                else {\n                    f = c[(b + 12) >> 2] | 0;\n                    e = 0;\n                    do {\n                        n = (f + (e << 2)) | 0;\n                        d = (((c[n >> 2] | 0) + 1) | 0) >>> 1;\n                        c[n >> 2] = d;\n                        d = ((c[g >> 2] | 0) + d) | 0;\n                        c[g >> 2] = d;\n                        e = (e + 1) | 0;\n                    } while (e >>> 0 < (c[b >> 2] | 0) >>> 0);\n                }\n            }\n            n = (2147483648 / (d >>> 0)) | 0;\n            do\n                if ((a[(b + 4) >> 0] | 0) == 0 ? ((o = (b + 36) | 0), (c[o >> 2] | 0) != 0) : 0) {\n                    if (c[b >> 2] | 0) {\n                        j = c[(b + 8) >> 2] | 0;\n                        k = c[(b + 12) >> 2] | 0;\n                        l = (b + 40) | 0;\n                        m = (b + 16) | 0;\n                        d = 0;\n                        h = 0;\n                        i = 0;\n                        do {\n                            e = (q(h, n) | 0) >>> 16;\n                            c[(j + (i << 2)) >> 2] = e;\n                            h = ((c[(k + (i << 2)) >> 2] | 0) + h) | 0;\n                            e = e >>> (c[l >> 2] | 0);\n                            if (d >>> 0 < e >>> 0) {\n                                f = (i + -1) | 0;\n                                g = c[m >> 2] | 0;\n                                do {\n                                    d = (d + 1) | 0;\n                                    c[(g + (d << 2)) >> 2] = f;\n                                } while ((d | 0) != (e | 0));\n                                d = e;\n                            }\n                            i = (i + 1) | 0;\n                        } while (i >>> 0 < (c[b >> 2] | 0) >>> 0);\n                        e = c[m >> 2] | 0;\n                        c[e >> 2] = 0;\n                        if (d >>> 0 > (c[o >> 2] | 0) >>> 0) {\n                            d = b;\n                            break;\n                        }\n                    }\n                    else {\n                        e = c[(b + 16) >> 2] | 0;\n                        c[e >> 2] = 0;\n                        d = 0;\n                    }\n                    do {\n                        d = (d + 1) | 0;\n                        c[(e + (d << 2)) >> 2] = (c[b >> 2] | 0) + -1;\n                    } while (d >>> 0 <= (c[o >> 2] | 0) >>> 0);\n                    d = b;\n                }\n                else\n                    p = 7;\n            while (0);\n            if ((p | 0) == 7)\n                if (!(c[b >> 2] | 0))\n                    d = b;\n                else {\n                    f = c[(b + 8) >> 2] | 0;\n                    g = c[(b + 12) >> 2] | 0;\n                    d = 0;\n                    e = 0;\n                    do {\n                        c[(f + (d << 2)) >> 2] = (q(e, n) | 0) >>> 16;\n                        e = ((c[(g + (d << 2)) >> 2] | 0) + e) | 0;\n                        d = (d + 1) | 0;\n                    } while (d >>> 0 < (c[b >> 2] | 0) >>> 0);\n                    d = b;\n                }\n            p = (((c[r >> 2] | 0) * 5) | 0) >>> 2;\n            o = ((c[d >> 2] << 3) + 48) | 0;\n            p = p >>> 0 > o >>> 0 ? o : p;\n            c[r >> 2] = p;\n            c[(b + 28) >> 2] = p;\n            return;\n        }\n        function Yc(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0;\n            d = Zc(b, d) | 0;\n            c[a >> 2] = d;\n            do\n                if (d) {\n                    if (d >>> 0 >= 32) {\n                        d = c[(a + 28) >> 2] | 0;\n                        break;\n                    }\n                    e = c[(a + 12) >> 2] | 0;\n                    if (d >>> 0 > e >>> 0) {\n                        e = (d - e) | 0;\n                        d = Zc(b, ((c[(a + 68) >> 2] | 0) + ((((d + -1) | 0) * 44) | 0)) | 0) | 0;\n                        e = (d << e) | (_c(b, e) | 0);\n                    }\n                    else\n                        e = Zc(b, ((c[(a + 68) >> 2] | 0) + ((((d + -1) | 0) * 44) | 0)) | 0) | 0;\n                    d = c[a >> 2] | 0;\n                    if ((e | 0) < ((1 << (d + -1)) | 0)) {\n                        d = (e + 1 + (-1 << d)) | 0;\n                        break;\n                    }\n                    else {\n                        d = (e + 1) | 0;\n                        break;\n                    }\n                }\n                else\n                    d = $c(b, (a + 48) | 0) | 0;\n            while (0);\n            return d | 0;\n        }\n        function Zc(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0;\n            n = (a + 8) | 0;\n            m = c[n >> 2] | 0;\n            f = c[(b + 16) >> 2] | 0;\n            if (f) {\n                e = (a + 4) | 0;\n                d = c[e >> 2] | 0;\n                l = m >>> 15;\n                c[n >> 2] = l;\n                j = ((d >>> 0) / (l >>> 0)) | 0;\n                i = j >>> (c[(b + 40) >> 2] | 0);\n                g = c[(f + (i << 2)) >> 2] | 0;\n                i = ((c[(f + ((i + 1) << 2)) >> 2] | 0) + 1) | 0;\n                h = (g + 1) | 0;\n                k = c[(b + 8) >> 2] | 0;\n                if (i >>> 0 > h >>> 0) {\n                    f = g;\n                    g = i;\n                    do {\n                        h = ((g + f) | 0) >>> 1;\n                        i = (c[(k + (h << 2)) >> 2] | 0) >>> 0 > j >>> 0;\n                        f = i ? f : h;\n                        g = i ? h : g;\n                        h = (f + 1) | 0;\n                    } while (g >>> 0 > h >>> 0);\n                    g = f;\n                }\n                f = q(c[(k + (g << 2)) >> 2] | 0, l) | 0;\n                if ((g | 0) == (c[(b + 32) >> 2] | 0))\n                    h = m;\n                else\n                    h = q(c[(k + (h << 2)) >> 2] | 0, l) | 0;\n            }\n            else {\n                k = m >>> 15;\n                c[n >> 2] = k;\n                i = c[b >> 2] | 0;\n                l = c[(b + 8) >> 2] | 0;\n                e = (a + 4) | 0;\n                d = c[e >> 2] | 0;\n                j = i >>> 1;\n                f = 0;\n                h = m;\n                g = 0;\n                do {\n                    o = q(c[(l + (j << 2)) >> 2] | 0, k) | 0;\n                    m = o >>> 0 > d >>> 0;\n                    h = m ? o : h;\n                    f = m ? f : o;\n                    g = m ? g : j;\n                    i = m ? j : i;\n                    j = ((g + i) | 0) >>> 1;\n                } while ((j | 0) != (g | 0));\n            }\n            c[e >> 2] = d - f;\n            o = (h - f) | 0;\n            c[n >> 2] = o;\n            if (o >>> 0 < 16777216)\n                ad(a);\n            n = ((c[(b + 12) >> 2] | 0) + (g << 2)) | 0;\n            c[n >> 2] = (c[n >> 2] | 0) + 1;\n            n = (b + 28) | 0;\n            o = ((c[n >> 2] | 0) + -1) | 0;\n            c[n >> 2] = o;\n            if (!o)\n                Xc(b);\n            return g | 0;\n        }\n        function _c(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0, f = 0, g = 0;\n            if (b >>> 0 > 19) {\n                d = (bd(a) | 0) & 65535;\n                return ((_c(a, (b + -16) | 0) | 0) << 16) | d | 0;\n            }\n            e = (a + 4) | 0;\n            f = c[e >> 2] | 0;\n            g = (a + 8) | 0;\n            d = (c[g >> 2] | 0) >>> b;\n            c[g >> 2] = d;\n            b = ((f >>> 0) / (d >>> 0)) | 0;\n            c[e >> 2] = f - (q(b, d) | 0);\n            if (d >>> 0 < 16777216)\n                ad(a);\n            return b | 0;\n        }\n        function $c(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0, f = 0, g = 0, h = 0, i = 0;\n            e = (a + 8) | 0;\n            f = c[e >> 2] | 0;\n            d = q(f >>> 13, c[(b + 8) >> 2] | 0) | 0;\n            g = (a + 4) | 0;\n            h = c[g >> 2] | 0;\n            i = h >>> 0 >= d >>> 0;\n            if (i) {\n                c[g >> 2] = h - d;\n                d = (f - d) | 0;\n                c[e >> 2] = d;\n            }\n            else {\n                c[e >> 2] = d;\n                h = (b + 12) | 0;\n                c[h >> 2] = (c[h >> 2] | 0) + 1;\n            }\n            if (d >>> 0 < 16777216)\n                ad(a);\n            h = (b + 4) | 0;\n            a = ((c[h >> 2] | 0) + -1) | 0;\n            c[h >> 2] = a;\n            if (!a)\n                cd(b);\n            return (i & 1) | 0;\n        }\n        function ad(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0, f = 0;\n            b = (a + 4) | 0;\n            d = (a + 8) | 0;\n            e = c[b >> 2] | 0;\n            do {\n                e = (e << 8) | ((Jc(c[a >> 2] | 0) | 0) & 255);\n                c[b >> 2] = e;\n                f = c[d >> 2] << 8;\n                c[d >> 2] = f;\n            } while (f >>> 0 < 16777216);\n            return;\n        }\n        function bd(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0, f = 0;\n            d = (a + 4) | 0;\n            f = c[d >> 2] | 0;\n            b = (a + 8) | 0;\n            e = (c[b >> 2] | 0) >>> 16;\n            c[b >> 2] = e;\n            b = ((f >>> 0) / (e >>> 0)) | 0;\n            c[d >> 2] = f - (q(b, e) | 0);\n            ad(a);\n            return (b & 65535) | 0;\n        }\n        function cd(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0, f = 0, g = 0;\n            f = c[a >> 2] | 0;\n            d = (a + 16) | 0;\n            b = ((c[d >> 2] | 0) + f) | 0;\n            c[d >> 2] = b;\n            if (b >>> 0 > 8192) {\n                e = ((b + 1) | 0) >>> 1;\n                c[d >> 2] = e;\n                g = (a + 12) | 0;\n                b = (((c[g >> 2] | 0) + 1) | 0) >>> 1;\n                c[g >> 2] = b;\n                if ((b | 0) == (e | 0)) {\n                    b = (e + 1) | 0;\n                    c[d >> 2] = b;\n                    d = b;\n                    b = e;\n                }\n                else\n                    d = e;\n            }\n            else {\n                d = b;\n                b = c[(a + 12) >> 2] | 0;\n            }\n            c[(a + 8) >> 2] = (q(b, (2147483648 / (d >>> 0)) | 0) | 0) >>> 18;\n            g = (f * 5) | 0;\n            g = g >>> 0 > 259 ? 64 : g >>> 2;\n            c[a >> 2] = g;\n            c[(a + 4) >> 2] = g;\n            return;\n        }\n        function dd(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0;\n            m = V;\n            V = (V + 32) | 0;\n            h = (m + 16) | 0;\n            i = (m + 8) | 0;\n            j = m;\n            k = (a + 336) | 0;\n            f = k;\n            g = (a + 259) | 0;\n            if (!((c[(f + 4) >> 2] | 0) == 0\n                ? (c[f >> 2] | 0) ==\n                    (d[g >> 0] |\n                        (d[(g + 1) >> 0] << 8) |\n                        (d[(g + 2) >> 0] << 16) |\n                        (d[(g + 3) >> 0] << 24) |\n                        0)\n                : 0)) {\n                f = (a + 320) | 0;\n                e = c[f >> 2] | 0;\n                g = e;\n                if (!((e | 0) != 0 ? (c[(a + 312) >> 2] | 0) != 0 : 0)) {\n                    e = g;\n                    l = 5;\n                }\n            }\n            else {\n                f = (a + 320) | 0;\n                e = c[(a + 320) >> 2] | 0;\n                l = 5;\n            }\n            if ((l | 0) == 5) {\n                l = (a + 320) | 0;\n                c[h >> 2] = e;\n                c[l >> 2] = 0;\n                e = (a + 324) | 0;\n                c[(h + 4) >> 2] = c[e >> 2];\n                c[e >> 2] = 0;\n                Na(h);\n                g = (a + 312) | 0;\n                c[h >> 2] = c[g >> 2];\n                c[g >> 2] = 0;\n                n = (a + 316) | 0;\n                c[(h + 4) >> 2] = c[n >> 2];\n                c[n >> 2] = 0;\n                Oa(h);\n                o = eq(12) | 0;\n                lc(o, (a + 4) | 0);\n                c[j >> 2] = 0;\n                c[h >> 2] = c[j >> 2];\n                fd(i, o, h);\n                o = c[i >> 2] | 0;\n                c[i >> 2] = c[g >> 2];\n                c[g >> 2] = o;\n                o = (i + 4) | 0;\n                j = c[o >> 2] | 0;\n                c[o >> 2] = c[n >> 2];\n                c[n >> 2] = j;\n                Oa(i);\n                ed(i, c[g >> 2] | 0, (a + 300) | 0);\n                g = c[i >> 2] | 0;\n                n = (i + 4) | 0;\n                j = c[n >> 2] | 0;\n                c[i >> 2] = 0;\n                c[n >> 2] = 0;\n                c[h >> 2] = c[l >> 2];\n                c[l >> 2] = g;\n                c[(h + 4) >> 2] = c[e >> 2];\n                c[e >> 2] = j;\n                Na(h);\n                Na(i);\n                e = (a + 328) | 0;\n                j = e;\n                j = lr(c[j >> 2] | 0, c[(j + 4) >> 2] | 0, 1, 0) | 0;\n                l = u() | 0;\n                c[e >> 2] = j;\n                c[(e + 4) >> 2] = l;\n                e = k;\n                c[e >> 2] = 0;\n                c[(e + 4) >> 2] = 0;\n                e = c[f >> 2] | 0;\n            }\n            $[c[c[e >> 2] >> 2] & 63](e, b) | 0;\n            l = k;\n            l = lr(c[l >> 2] | 0, c[(l + 4) >> 2] | 0, 1, 0) | 0;\n            n = u() | 0;\n            o = k;\n            c[o >> 2] = l;\n            c[(o + 4) >> 2] = n;\n            V = m;\n            return;\n        }\n        function ed(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0, g = 0, h = 0;\n            h = V;\n            V = (V + 64) | 0;\n            e = (h + 56) | 0;\n            f = h;\n            g = ld(d) | 0;\n            if ((g | 0) == -1) {\n                h = v(8) | 0;\n                md(h);\n                x(h | 0, 2784, 8);\n            }\n            d = nd(d) | 0;\n            a: do\n                if (!d)\n                    switch (g | 0) {\n                        case 0: {\n                            g = eq(4788) | 0;\n                            xd(g);\n                            wd(a, b, g);\n                            break a;\n                        }\n                        case 1: {\n                            g = eq(5116) | 0;\n                            zd(g);\n                            yd(a, b, g);\n                            break a;\n                        }\n                        case 2: {\n                            g = eq(5104) | 0;\n                            Bd(g);\n                            Ad(a, b, g);\n                            break a;\n                        }\n                        case 3: {\n                            g = eq(5432) | 0;\n                            Dd(g);\n                            Cd(a, b, g);\n                            break a;\n                        }\n                        default: {\n                            c[a >> 2] = 0;\n                            c[(a + 4) >> 2] = 0;\n                            break a;\n                        }\n                    }\n                else {\n                    od(e, b);\n                    pd(c[e >> 2] | 0);\n                    if ((g | 2 | 0) == 3)\n                        qd(c[e >> 2] | 0);\n                    if ((g | 1 | 0) == 3)\n                        rd(c[e >> 2] | 0);\n                    g = c[e >> 2] | 0;\n                    td(f, d);\n                    sd(g, f);\n                    ud(f);\n                    c[a >> 2] = c[e >> 2];\n                    g = (e + 4) | 0;\n                    c[(a + 4) >> 2] = c[g >> 2];\n                    c[e >> 2] = 0;\n                    c[g >> 2] = 0;\n                    vd(e);\n                }\n            while (0);\n            V = h;\n            return;\n        }\n        function fd(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0;\n            d = V;\n            V = (V + 16) | 0;\n            e = d;\n            c[a >> 2] = b;\n            f = eq(16) | 0;\n            c[(f + 4) >> 2] = 0;\n            c[(f + 8) >> 2] = 0;\n            c[f >> 2] = 4576;\n            c[(f + 12) >> 2] = b;\n            c[(a + 4) >> 2] = f;\n            c[e >> 2] = b;\n            c[(e + 4) >> 2] = b;\n            gd(a, e);\n            V = d;\n            return;\n        }\n        function gd(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return;\n        }\n        function hd(a) {\n            a = a | 0;\n            pq(a);\n            jp(a);\n            return;\n        }\n        function id(a) {\n            a = a | 0;\n            a = c[(a + 12) >> 2] | 0;\n            if (a | 0) {\n                rc(a);\n                jp(a);\n            }\n            return;\n        }\n        function jd(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return ((c[(b + 4) >> 2] | 0) == 7983 ? (a + 12) | 0 : 0) | 0;\n        }\n        function kd(a) {\n            a = a | 0;\n            Da(a, 16);\n            return;\n        }\n        function ld(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            b = ((c[(a + 4) >> 2] | 0) - (c[a >> 2] | 0)) | 0;\n            a: do\n                if (((b | 0) != 0\n                    ? ((d = ((((b | 0) / 12) | 0) + ((((nd(a) | 0) != 0) << 31) >> 31)) | 0),\n                        (d | 0) != 0)\n                    : 0)\n                    ? ((b = c[a >> 2] | 0), !(Ed(b, Fd() | 0) | 0))\n                    : 0) {\n                    switch (d | 0) {\n                        case 1: {\n                            a = 0;\n                            break a;\n                        }\n                        case 2: {\n                            if (Gd(((c[a >> 2] | 0) + 12) | 0, Hd() | 0) | 0) {\n                                a = 1;\n                                break a;\n                            }\n                            if (Gd(((c[a >> 2] | 0) + 12) | 0, Id() | 0) | 0) {\n                                a = 2;\n                                break a;\n                            }\n                            break;\n                        }\n                        case 3: {\n                            if (Gd(((c[a >> 2] | 0) + 12) | 0, Hd() | 0) | 0\n                                ? ((d = ((c[a >> 2] | 0) + 24) | 0), Gd(d, Id() | 0) | 0)\n                                : 0) {\n                                a = 3;\n                                break a;\n                            }\n                            break;\n                        }\n                        default: {\n                        }\n                    }\n                    a = -1;\n                }\n                else\n                    a = -1;\n            while (0);\n            return a | 0;\n        }\n        function md(a) {\n            a = a | 0;\n            xq(a, 8131);\n            c[a >> 2] = 4604;\n            return;\n        }\n        function nd(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            b = c[(a + 4) >> 2] | 0;\n            if (((b | 0) != (c[a >> 2] | 0) ? ((d = b), (c[(d + -12) >> 2] | 0) == 0) : 0)\n                ? (c[(d + -4) >> 2] | 0) == 2\n                : 0)\n                a = c[(d + -8) >> 2] | 0;\n            else\n                a = 0;\n            return a | 0;\n        }\n        function od(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0, f = 0, g = 0;\n            d = V;\n            V = (V + 16) | 0;\n            e = (d + 4) | 0;\n            g = d;\n            f = eq(24) | 0;\n            Kd(f, b);\n            c[g >> 2] = 0;\n            c[e >> 2] = c[g >> 2];\n            Ld(a, f, e);\n            V = d;\n            return;\n        }\n        function pd(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, k = 0, l = 0;\n            j = V;\n            V = (V + 32) | 0;\n            e = (j + 12) | 0;\n            f = j;\n            b = (j + 8) | 0;\n            h = eq(4792) | 0;\n            Zd(h, c[(a + 4) >> 2] | 0);\n            g = (a + 8) | 0;\n            c[b >> 2] = 0;\n            c[e >> 2] = c[b >> 2];\n            _d(f, h, e);\n            h = (a + 12) | 0;\n            b = c[h >> 2] | 0;\n            i = (a + 16) | 0;\n            do\n                if (b >>> 0 >= (c[i >> 2] | 0) >>> 0) {\n                    b = (((b - (c[g >> 2] | 0)) >> 3) + 1) | 0;\n                    d = ee(g) | 0;\n                    if (d >>> 0 < b >>> 0)\n                        cr(g);\n                    else {\n                        k = c[g >> 2] | 0;\n                        l = ((c[i >> 2] | 0) - k) | 0;\n                        i = l >> 2;\n                        be(e, (l >> 3) >>> 0 < (d >>> 1) >>> 0 ? (i >>> 0 < b >>> 0 ? b : i) : d, ((c[h >> 2] | 0) - k) >> 3, (a + 16) | 0);\n                        i = (e + 8) | 0;\n                        h = c[i >> 2] | 0;\n                        c[h >> 2] = c[f >> 2];\n                        a = (f + 4) | 0;\n                        c[(h + 4) >> 2] = c[a >> 2];\n                        c[f >> 2] = 0;\n                        c[a >> 2] = 0;\n                        c[i >> 2] = h + 8;\n                        ce(g, e);\n                        de(e);\n                        break;\n                    }\n                }\n                else {\n                    $d(e, g, 1);\n                    l = (e + 4) | 0;\n                    k = c[l >> 2] | 0;\n                    c[k >> 2] = c[f >> 2];\n                    i = (f + 4) | 0;\n                    c[(k + 4) >> 2] = c[i >> 2];\n                    c[f >> 2] = 0;\n                    c[i >> 2] = 0;\n                    c[l >> 2] = k + 8;\n                    ae(e);\n                }\n            while (0);\n            Sd(f);\n            V = j;\n            return;\n        }\n        function qd(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, k = 0, l = 0;\n            j = V;\n            V = (V + 32) | 0;\n            e = (j + 12) | 0;\n            f = j;\n            b = (j + 8) | 0;\n            h = eq(336) | 0;\n            af(h, c[(a + 4) >> 2] | 0);\n            g = (a + 8) | 0;\n            c[b >> 2] = 0;\n            c[e >> 2] = c[b >> 2];\n            bf(f, h, e);\n            h = (a + 12) | 0;\n            b = c[h >> 2] | 0;\n            i = (a + 16) | 0;\n            do\n                if (b >>> 0 >= (c[i >> 2] | 0) >>> 0) {\n                    b = (((b - (c[g >> 2] | 0)) >> 3) + 1) | 0;\n                    d = ee(g) | 0;\n                    if (d >>> 0 < b >>> 0)\n                        cr(g);\n                    else {\n                        k = c[g >> 2] | 0;\n                        l = ((c[i >> 2] | 0) - k) | 0;\n                        i = l >> 2;\n                        be(e, (l >> 3) >>> 0 < (d >>> 1) >>> 0 ? (i >>> 0 < b >>> 0 ? b : i) : d, ((c[h >> 2] | 0) - k) >> 3, (a + 16) | 0);\n                        i = (e + 8) | 0;\n                        h = c[i >> 2] | 0;\n                        c[h >> 2] = c[f >> 2];\n                        a = (f + 4) | 0;\n                        c[(h + 4) >> 2] = c[a >> 2];\n                        c[f >> 2] = 0;\n                        c[a >> 2] = 0;\n                        c[i >> 2] = h + 8;\n                        ce(g, e);\n                        de(e);\n                        break;\n                    }\n                }\n                else {\n                    $d(e, g, 1);\n                    l = (e + 4) | 0;\n                    k = c[l >> 2] | 0;\n                    c[k >> 2] = c[f >> 2];\n                    i = (f + 4) | 0;\n                    c[(k + 4) >> 2] = c[i >> 2];\n                    c[f >> 2] = 0;\n                    c[i >> 2] = 0;\n                    c[l >> 2] = k + 8;\n                    ae(e);\n                }\n            while (0);\n            Sd(f);\n            V = j;\n            return;\n        }\n        function rd(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, k = 0, l = 0;\n            j = V;\n            V = (V + 32) | 0;\n            e = (j + 12) | 0;\n            f = j;\n            b = (j + 8) | 0;\n            h = eq(324) | 0;\n            Af(h, c[(a + 4) >> 2] | 0);\n            g = (a + 8) | 0;\n            c[b >> 2] = 0;\n            c[e >> 2] = c[b >> 2];\n            Bf(f, h, e);\n            h = (a + 12) | 0;\n            b = c[h >> 2] | 0;\n            i = (a + 16) | 0;\n            do\n                if (b >>> 0 >= (c[i >> 2] | 0) >>> 0) {\n                    b = (((b - (c[g >> 2] | 0)) >> 3) + 1) | 0;\n                    d = ee(g) | 0;\n                    if (d >>> 0 < b >>> 0)\n                        cr(g);\n                    else {\n                        k = c[g >> 2] | 0;\n                        l = ((c[i >> 2] | 0) - k) | 0;\n                        i = l >> 2;\n                        be(e, (l >> 3) >>> 0 < (d >>> 1) >>> 0 ? (i >>> 0 < b >>> 0 ? b : i) : d, ((c[h >> 2] | 0) - k) >> 3, (a + 16) | 0);\n                        i = (e + 8) | 0;\n                        h = c[i >> 2] | 0;\n                        c[h >> 2] = c[f >> 2];\n                        a = (f + 4) | 0;\n                        c[(h + 4) >> 2] = c[a >> 2];\n                        c[f >> 2] = 0;\n                        c[a >> 2] = 0;\n                        c[i >> 2] = h + 8;\n                        ce(g, e);\n                        de(e);\n                        break;\n                    }\n                }\n                else {\n                    $d(e, g, 1);\n                    l = (e + 4) | 0;\n                    k = c[l >> 2] | 0;\n                    c[k >> 2] = c[f >> 2];\n                    i = (f + 4) | 0;\n                    c[(k + 4) >> 2] = c[i >> 2];\n                    c[f >> 2] = 0;\n                    c[i >> 2] = 0;\n                    c[l >> 2] = k + 8;\n                    ae(e);\n                }\n            while (0);\n            Sd(f);\n            V = j;\n            return;\n        }\n        function sd(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, k = 0, l = 0;\n            j = V;\n            V = (V + 32) | 0;\n            h = (j + 12) | 0;\n            i = j;\n            e = (j + 8) | 0;\n            g = eq(64) | 0;\n            Qf(g, c[(a + 4) >> 2] | 0, b);\n            f = (a + 8) | 0;\n            c[e >> 2] = 0;\n            c[h >> 2] = c[e >> 2];\n            Rf(i, g, h);\n            g = (a + 12) | 0;\n            b = c[g >> 2] | 0;\n            e = (a + 16) | 0;\n            do\n                if (b >>> 0 >= (c[e >> 2] | 0) >>> 0) {\n                    b = (((b - (c[f >> 2] | 0)) >> 3) + 1) | 0;\n                    d = ee(f) | 0;\n                    if (d >>> 0 < b >>> 0)\n                        cr(f);\n                    else {\n                        k = c[f >> 2] | 0;\n                        l = ((c[e >> 2] | 0) - k) | 0;\n                        e = l >> 2;\n                        be(h, (l >> 3) >>> 0 < (d >>> 1) >>> 0 ? (e >>> 0 < b >>> 0 ? b : e) : d, ((c[g >> 2] | 0) - k) >> 3, (a + 16) | 0);\n                        a = (h + 8) | 0;\n                        g = c[a >> 2] | 0;\n                        c[g >> 2] = c[i >> 2];\n                        e = (i + 4) | 0;\n                        c[(g + 4) >> 2] = c[e >> 2];\n                        c[i >> 2] = 0;\n                        c[e >> 2] = 0;\n                        c[a >> 2] = g + 8;\n                        ce(f, h);\n                        de(h);\n                        break;\n                    }\n                }\n                else {\n                    $d(h, f, 1);\n                    l = (h + 4) | 0;\n                    k = c[l >> 2] | 0;\n                    c[k >> 2] = c[i >> 2];\n                    a = (i + 4) | 0;\n                    c[(k + 4) >> 2] = c[a >> 2];\n                    c[i >> 2] = 0;\n                    c[a >> 2] = 0;\n                    c[l >> 2] = k + 8;\n                    ae(h);\n                }\n            while (0);\n            Sd(i);\n            V = j;\n            return;\n        }\n        function td(b, d) {\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0;\n            e = V;\n            V = (V + 48) | 0;\n            f = e;\n            c[b >> 2] = d;\n            a[(b + 4) >> 0] = 0;\n            Jg((b + 8) | 0, d);\n            Jg((b + 20) | 0, d);\n            Oc(f, 256, 0, 0);\n            Kg((b + 32) | 0, d, f);\n            Ic(f);\n            V = e;\n            return;\n        }\n        function ud(a) {\n            a = a | 0;\n            Ng((a + 32) | 0);\n            _f((a + 20) | 0);\n            _f((a + 8) | 0);\n            return;\n        }\n        function vd(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            a = c[(a + 4) >> 2] | 0;\n            if (a | 0 ? ((d = (a + 4) | 0), (b = c[d >> 2] | 0), (c[d >> 2] = b + -1), (b | 0) == 0) : 0) {\n                ca[c[((c[a >> 2] | 0) + 8) >> 2] & 255](a);\n                qq(a);\n            }\n            return;\n        }\n        function wd(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0, g = 0, h = 0;\n            e = V;\n            V = (V + 16) | 0;\n            f = (e + 4) | 0;\n            h = e;\n            g = eq(12) | 0;\n            Og(g, b, d);\n            c[h >> 2] = 0;\n            c[f >> 2] = c[h >> 2];\n            Pg(a, g, f);\n            V = e;\n            return;\n        }\n        function xd(a) {\n            a = a | 0;\n            ge(a);\n            $g((a + 4784) | 0);\n            return;\n        }\n        function yd(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0, g = 0, h = 0;\n            e = V;\n            V = (V + 16) | 0;\n            f = (e + 4) | 0;\n            h = e;\n            g = eq(12) | 0;\n            ah(g, b, d);\n            c[h >> 2] = 0;\n            c[f >> 2] = c[h >> 2];\n            bh(a, g, f);\n            V = e;\n            return;\n        }\n        function zd(a) {\n            a = a | 0;\n            ge(a);\n            nh((a + 4784) | 0);\n            return;\n        }\n        function Ad(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0, g = 0, h = 0;\n            e = V;\n            V = (V + 16) | 0;\n            f = (e + 4) | 0;\n            h = e;\n            g = eq(12) | 0;\n            oh(g, b, d);\n            c[h >> 2] = 0;\n            c[f >> 2] = c[h >> 2];\n            ph(a, g, f);\n            V = e;\n            return;\n        }\n        function Bd(a) {\n            a = a | 0;\n            ge(a);\n            Bh((a + 4784) | 0);\n            return;\n        }\n        function Cd(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0, g = 0, h = 0;\n            e = V;\n            V = (V + 16) | 0;\n            f = (e + 4) | 0;\n            h = e;\n            g = eq(12) | 0;\n            Ch(g, b, d);\n            c[h >> 2] = 0;\n            c[f >> 2] = c[h >> 2];\n            Dh(a, g, f);\n            V = e;\n            return;\n        }\n        function Dd(a) {\n            a = a | 0;\n            ge(a);\n            Ph((a + 4784) | 0);\n            return;\n        }\n        function Ed(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return ((Gd(a, b) | 0) ^ 1) | 0;\n        }\n        function Fd() {\n            if ((a[21456] | 0) == 0 ? Tp(21456) | 0 : 0) {\n                _b(21536, 6, 20, 2);\n                $p(21456);\n            }\n            return 21536;\n        }\n        function Gd(a, b) {\n            a = a | 0;\n            b = b | 0;\n            if ((c[a >> 2] | 0) == (c[b >> 2] | 0) ? (c[(a + 8) >> 2] | 0) == (c[(b + 8) >> 2] | 0) : 0)\n                a = (c[(a + 4) >> 2] | 0) == (c[(b + 4) >> 2] | 0);\n            else\n                a = 0;\n            return a | 0;\n        }\n        function Hd() {\n            if ((a[21464] | 0) == 0 ? Tp(21464) | 0 : 0) {\n                _b(21548, 7, 8, 2);\n                $p(21464);\n            }\n            return 21548;\n        }\n        function Id() {\n            if ((a[21472] | 0) == 0 ? Tp(21472) | 0 : 0) {\n                _b(21560, 8, 6, 2);\n                $p(21472);\n            }\n            return 21560;\n        }\n        function Jd(a) {\n            a = a | 0;\n            yp(a);\n            jp(a);\n            return;\n        }\n        function Kd(b, d) {\n            b = b | 0;\n            d = d | 0;\n            Md(b);\n            c[b >> 2] = 4624;\n            c[(b + 4) >> 2] = d;\n            c[(b + 8) >> 2] = 0;\n            c[(b + 12) >> 2] = 0;\n            c[(b + 16) >> 2] = 0;\n            a[(b + 20) >> 0] = 1;\n            return;\n        }\n        function Ld(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0;\n            d = V;\n            V = (V + 16) | 0;\n            e = d;\n            c[a >> 2] = b;\n            f = eq(16) | 0;\n            c[(f + 4) >> 2] = 0;\n            c[(f + 8) >> 2] = 0;\n            c[f >> 2] = 4664;\n            c[(f + 12) >> 2] = b;\n            c[(a + 4) >> 2] = f;\n            c[e >> 2] = b;\n            c[(e + 4) >> 2] = b;\n            Ud(a, e);\n            V = d;\n            return;\n        }\n        function Md(a) {\n            a = a | 0;\n            c[a >> 2] = 4644;\n            return;\n        }\n        function Nd(b, d) {\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, k = 0;\n            k = V;\n            V = (V + 16) | 0;\n            h = k;\n            e = c[(b + 8) >> 2] | 0;\n            i = c[(b + 12) >> 2] | 0;\n            if ((e | 0) != (i | 0)) {\n                j = (h + 4) | 0;\n                do {\n                    f = c[e >> 2] | 0;\n                    c[h >> 2] = f;\n                    g = c[(e + 4) >> 2] | 0;\n                    c[j >> 2] = g;\n                    if (g | 0) {\n                        g = (g + 4) | 0;\n                        c[g >> 2] = (c[g >> 2] | 0) + 1;\n                    }\n                    d = $[c[((c[f >> 2] | 0) + 12) >> 2] & 63](f, d) | 0;\n                    Sd(h);\n                    e = (e + 8) | 0;\n                } while ((e | 0) != (i | 0));\n            }\n            e = (b + 20) | 0;\n            if (a[e >> 0] | 0) {\n                a[e >> 0] = 0;\n                nc(c[(b + 4) >> 2] | 0);\n            }\n            V = k;\n            return d | 0;\n        }\n        function Od(a) {\n            a = a | 0;\n            c[a >> 2] = 4624;\n            Td((a + 8) | 0);\n            Qd(a);\n            return;\n        }\n        function Pd(a) {\n            a = a | 0;\n            Od(a);\n            jp(a);\n            return;\n        }\n        function Qd(a) {\n            a = a | 0;\n            return;\n        }\n        function Rd(a) {\n            a = a | 0;\n            U();\n        }\n        function Sd(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            a = c[(a + 4) >> 2] | 0;\n            if (a | 0 ? ((d = (a + 4) | 0), (b = c[d >> 2] | 0), (c[d >> 2] = b + -1), (b | 0) == 0) : 0) {\n                ca[c[((c[a >> 2] | 0) + 8) >> 2] & 255](a);\n                qq(a);\n            }\n            return;\n        }\n        function Td(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0;\n            d = c[a >> 2] | 0;\n            if (d | 0) {\n                e = (a + 4) | 0;\n                b = c[e >> 2] | 0;\n                if ((b | 0) == (d | 0))\n                    b = d;\n                else {\n                    do {\n                        b = (b + -8) | 0;\n                        Sd(b);\n                    } while ((b | 0) != (d | 0));\n                    b = c[a >> 2] | 0;\n                }\n                c[e >> 2] = d;\n                Da(b, ((c[(a + 8) >> 2] | 0) - b) | 0);\n            }\n            return;\n        }\n        function Ud(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return;\n        }\n        function Vd(a) {\n            a = a | 0;\n            pq(a);\n            jp(a);\n            return;\n        }\n        function Wd(a) {\n            a = a | 0;\n            a = c[(a + 12) >> 2] | 0;\n            if (a | 0)\n                ca[c[((c[a >> 2] | 0) + 8) >> 2] & 255](a);\n            return;\n        }\n        function Xd(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return ((c[(b + 4) >> 2] | 0) == 8546 ? (a + 12) | 0 : 0) | 0;\n        }\n        function Yd(a) {\n            a = a | 0;\n            Da(a, 16);\n            return;\n        }\n        function Zd(a, b) {\n            a = a | 0;\n            b = b | 0;\n            fe(a);\n            c[a >> 2] = 4692;\n            c[(a + 4) >> 2] = b;\n            ge((a + 8) | 0);\n            return;\n        }\n        function _d(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0;\n            d = V;\n            V = (V + 16) | 0;\n            e = d;\n            c[a >> 2] = b;\n            f = eq(16) | 0;\n            c[(f + 4) >> 2] = 0;\n            c[(f + 8) >> 2] = 0;\n            c[f >> 2] = 4740;\n            c[(f + 12) >> 2] = b;\n            c[(a + 4) >> 2] = f;\n            c[e >> 2] = b;\n            c[(e + 4) >> 2] = b;\n            Xe(a, e);\n            V = d;\n            return;\n        }\n        function $d(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            c[a >> 2] = b;\n            b = c[(b + 4) >> 2] | 0;\n            c[(a + 4) >> 2] = b;\n            c[(a + 8) >> 2] = b + (d << 3);\n            return;\n        }\n        function ae(a) {\n            a = a | 0;\n            c[((c[a >> 2] | 0) + 4) >> 2] = c[(a + 4) >> 2];\n            return;\n        }\n        function be(a, b, d, e) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            var f = 0;\n            f = (a + 12) | 0;\n            c[f >> 2] = 0;\n            c[(a + 16) >> 2] = e;\n            do\n                if (b)\n                    if (b >>> 0 > 536870911) {\n                        f = v(8) | 0;\n                        vq(f, 6723);\n                        c[f >> 2] = 5956;\n                        x(f | 0, 3928, 123);\n                    }\n                    else {\n                        e = eq(b << 3) | 0;\n                        break;\n                    }\n                else\n                    e = 0;\n            while (0);\n            c[a >> 2] = e;\n            d = (e + (d << 3)) | 0;\n            c[(a + 8) >> 2] = d;\n            c[(a + 4) >> 2] = d;\n            c[f >> 2] = e + (b << 3);\n            return;\n        }\n        function ce(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0;\n            i = c[a >> 2] | 0;\n            j = (a + 4) | 0;\n            d = c[j >> 2] | 0;\n            h = (b + 4) | 0;\n            if ((d | 0) == (i | 0)) {\n                f = h;\n                g = a;\n                e = c[h >> 2] | 0;\n                d = i;\n            }\n            else {\n                e = c[h >> 2] | 0;\n                do {\n                    g = d;\n                    d = (d + -8) | 0;\n                    c[(e + -8) >> 2] = c[d >> 2];\n                    g = (g + -4) | 0;\n                    c[(e + -4) >> 2] = c[g >> 2];\n                    c[d >> 2] = 0;\n                    c[g >> 2] = 0;\n                    e = ((c[h >> 2] | 0) + -8) | 0;\n                    c[h >> 2] = e;\n                } while ((d | 0) != (i | 0));\n                f = h;\n                g = a;\n                d = c[a >> 2] | 0;\n            }\n            c[g >> 2] = e;\n            c[f >> 2] = d;\n            i = (b + 8) | 0;\n            h = c[j >> 2] | 0;\n            c[j >> 2] = c[i >> 2];\n            c[i >> 2] = h;\n            i = (a + 8) | 0;\n            j = (b + 12) | 0;\n            a = c[i >> 2] | 0;\n            c[i >> 2] = c[j >> 2];\n            c[j >> 2] = a;\n            c[b >> 2] = c[f >> 2];\n            return;\n        }\n        function de(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0, f = 0;\n            d = c[(a + 4) >> 2] | 0;\n            e = (a + 8) | 0;\n            b = c[e >> 2] | 0;\n            if ((b | 0) != (d | 0))\n                do {\n                    f = (b + -8) | 0;\n                    c[e >> 2] = f;\n                    Sd(f);\n                    b = c[e >> 2] | 0;\n                } while ((b | 0) != (d | 0));\n            b = c[a >> 2] | 0;\n            if (b | 0)\n                Da(b, ((c[(a + 12) >> 2] | 0) - b) | 0);\n            return;\n        }\n        function ee(a) {\n            a = a | 0;\n            return 536870911;\n        }\n        function fe(a) {\n            a = a | 0;\n            c[a >> 2] = 4716;\n            return;\n        }\n        function ge(b) {\n            b = b | 0;\n            oe(b);\n            pe((b + 3980) | 0);\n            qe((b + 4380) | 0);\n            a[(b + 4780) >> 0] = 0;\n            a[(b + 4781) >> 0] = 0;\n            return;\n        }\n        function he(a) {\n            a = a | 0;\n            c[a >> 2] = 4692;\n            ze((a + 8) | 0);\n            le(a);\n            return;\n        }\n        function ie(a) {\n            a = a | 0;\n            he(a);\n            jp(a);\n            return;\n        }\n        function je(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return b | 0;\n        }\n        function ke(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return Be((a + 8) | 0, c[(a + 4) >> 2] | 0, b) | 0;\n        }\n        function le(a) {\n            a = a | 0;\n            return;\n        }\n        function me(a) {\n            a = a | 0;\n            le(a);\n            jp(a);\n            return;\n        }\n        function ne(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return b | 0;\n        }\n        function oe(d) {\n            d = d | 0;\n            var e = 0, f = 0;\n            te(d);\n            ue((d + 52) | 0);\n            ue((d + 436) | 0);\n            Oc((d + 852) | 0, 64, 0, 0);\n            a[(d + 3976) >> 0] = 0;\n            e = (d + 20) | 0;\n            f = (e + 32) | 0;\n            do {\n                b[e >> 1] = 0;\n                e = (e + 2) | 0;\n            } while ((e | 0) < (f | 0));\n            e = eq(44) | 0;\n            Oc(e, 256, 0, 0);\n            c[(d + 896) >> 2] = e;\n            e = eq(44) | 0;\n            Oc(e, 256, 0, 0);\n            c[(d + 900) >> 2] = e;\n            e = (d + 820) | 0;\n            c[e >> 2] = 0;\n            c[(e + 4) >> 2] = 0;\n            c[(e + 8) >> 2] = 0;\n            c[(e + 12) >> 2] = 0;\n            c[(e + 16) >> 2] = 0;\n            c[(e + 20) >> 2] = 0;\n            c[(e + 24) >> 2] = 0;\n            c[(e + 28) >> 2] = 0;\n            e = 0;\n            do {\n                f = eq(44) | 0;\n                Oc(f, 256, 0, 0);\n                c[(d + 904 + (e << 2)) >> 2] = f;\n                f = eq(44) | 0;\n                Oc(f, 256, 0, 0);\n                c[(d + 1928 + (e << 2)) >> 2] = f;\n                f = eq(44) | 0;\n                Oc(f, 256, 0, 0);\n                c[(d + 2952 + (e << 2)) >> 2] = f;\n                e = (e + 1) | 0;\n            } while (e >>> 0 < 256);\n            return;\n        }\n        function pe(a) {\n            a = a | 0;\n            xe(a, 16, 4, 8, 0);\n            xe((a + 80) | 0, 16, 1, 8, 0);\n            xe((a + 160) | 0, 32, 2, 8, 0);\n            xe((a + 240) | 0, 32, 22, 8, 0);\n            xe((a + 320) | 0, 32, 20, 8, 0);\n            return;\n        }\n        function qe(a) {\n            a = a | 0;\n            mc(a, 16, 4, 8, 0);\n            mc((a + 80) | 0, 16, 1, 8, 0);\n            mc((a + 160) | 0, 32, 2, 8, 0);\n            mc((a + 240) | 0, 32, 22, 8, 0);\n            mc((a + 320) | 0, 32, 20, 8, 0);\n            return;\n        }\n        function re(a) {\n            a = a | 0;\n            ye((a + 320) | 0);\n            ye((a + 240) | 0);\n            ye((a + 160) | 0);\n            ye((a + 80) | 0);\n            ye(a);\n            return;\n        }\n        function se(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            b = c[(a + 896) >> 2] | 0;\n            if (b | 0) {\n                Ic(b);\n                jp(b);\n            }\n            b = c[(a + 900) >> 2] | 0;\n            if (b | 0) {\n                Ic(b);\n                jp(b);\n            }\n            d = 0;\n            do {\n                b = c[(a + 904 + (d << 2)) >> 2] | 0;\n                if (b | 0) {\n                    Ic(b);\n                    jp(b);\n                }\n                b = c[(a + 1928 + (d << 2)) >> 2] | 0;\n                if (b | 0) {\n                    Ic(b);\n                    jp(b);\n                }\n                b = c[(a + 2952 + (d << 2)) >> 2] | 0;\n                if (b | 0) {\n                    Ic(b);\n                    jp(b);\n                }\n                d = (d + 1) | 0;\n            } while ((d | 0) != 256);\n            Ic((a + 852) | 0);\n            return;\n        }\n        function te(b) {\n            b = b | 0;\n            var c = 0;\n            a[b >> 0] = 0;\n            a[(b + 1) >> 0] = 0;\n            a[(b + 2) >> 0] = 0;\n            a[(b + 3) >> 0] = 0;\n            c = (b + 4) | 0;\n            a[c >> 0] = 0;\n            a[(c + 1) >> 0] = 0;\n            a[(c + 2) >> 0] = 0;\n            a[(c + 3) >> 0] = 0;\n            b = (b + 12) | 0;\n            c = b;\n            a[c >> 0] = 0;\n            a[(c + 1) >> 0] = 0;\n            a[(c + 2) >> 0] = 0;\n            a[(c + 3) >> 0] = 0;\n            b = (b + 4) | 0;\n            a[b >> 0] = 0;\n            a[(b + 1) >> 0] = 0;\n            a[(b + 2) >> 0] = 0;\n            a[(b + 3) >> 0] = 0;\n            return;\n        }\n        function ue(a) {\n            a = a | 0;\n            var b = 0;\n            b = (a + 384) | 0;\n            do {\n                ve(a);\n                a = (a + 24) | 0;\n            } while ((a | 0) != (b | 0));\n            return;\n        }\n        function ve(a) {\n            a = a | 0;\n            we(a);\n            return;\n        }\n        function we(b) {\n            b = b | 0;\n            c[b >> 2] = 0;\n            c[(b + 4) >> 2] = 0;\n            c[(b + 8) >> 2] = 0;\n            c[(b + 12) >> 2] = 0;\n            c[(b + 16) >> 2] = 0;\n            a[(b + 20) >> 0] = 1;\n            return;\n        }\n        function xe(a, b, d, e, f) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            f = f | 0;\n            var g = 0;\n            c[(a + 4) >> 2] = b;\n            c[(a + 8) >> 2] = d;\n            c[(a + 12) >> 2] = e;\n            c[(a + 16) >> 2] = f;\n            c[(a + 36) >> 2] = 0;\n            c[(a + 40) >> 2] = 0;\n            c[(a + 44) >> 2] = 0;\n            Gc((a + 48) | 0);\n            c[(a + 68) >> 2] = 0;\n            c[(a + 72) >> 2] = 0;\n            c[(a + 76) >> 2] = 0;\n            do\n                if (!f) {\n                    d = (a + 20) | 0;\n                    if (((b + -1) | 0) >>> 0 < 31) {\n                        c[d >> 2] = b;\n                        f = 1 << b;\n                        c[(a + 24) >> 2] = f;\n                        d = f >>> 1;\n                        c[(a + 28) >> 2] = 0 - d;\n                        d = (f + -1 - d) | 0;\n                        break;\n                    }\n                    else {\n                        c[d >> 2] = 32;\n                        c[(a + 24) >> 2] = 0;\n                        c[(a + 28) >> 2] = -2147483648;\n                        d = 2147483647;\n                        break;\n                    }\n                }\n                else {\n                    e = (a + 20) | 0;\n                    c[e >> 2] = 0;\n                    c[(a + 24) >> 2] = f;\n                    d = f;\n                    g = 0;\n                    while (1) {\n                        d = d >>> 1;\n                        b = (g + 1) | 0;\n                        if (!d)\n                            break;\n                        else\n                            g = b;\n                    }\n                    c[e >> 2] = ((1 << g) | 0) == (f | 0) ? g : b;\n                    d = f >>> 1;\n                    c[(a + 28) >> 2] = 0 - d;\n                    d = (f + -1 - d) | 0;\n                }\n            while (0);\n            c[(a + 32) >> 2] = d;\n            c[a >> 2] = 0;\n            return;\n        }\n        function ye(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0, f = 0, g = 0;\n            g = (a + 36) | 0;\n            d = c[g >> 2] | 0;\n            e = (a + 40) | 0;\n            b = c[e >> 2] | 0;\n            if ((b | 0) != (d | 0))\n                do {\n                    b = (b + -44) | 0;\n                    Ic(b);\n                } while ((b | 0) != (d | 0));\n            c[e >> 2] = d;\n            e = (a + 68) | 0;\n            f = c[e >> 2] | 0;\n            d = (a + 72) | 0;\n            b = c[d >> 2] | 0;\n            if ((b | 0) != (f | 0))\n                do {\n                    b = (b + -44) | 0;\n                    Ic(b);\n                } while ((b | 0) != (f | 0));\n            c[d >> 2] = f;\n            Hc(e);\n            Hc(g);\n            return;\n        }\n        function ze(a) {\n            a = a | 0;\n            Ae((a + 4380) | 0);\n            re((a + 3980) | 0);\n            se(a);\n            return;\n        }\n        function Ae(a) {\n            a = a | 0;\n            qc((a + 320) | 0);\n            qc((a + 240) | 0);\n            qc((a + 160) | 0);\n            qc((a + 80) | 0);\n            qc(a);\n            return;\n        }\n        function Be(f, g, h) {\n            f = f | 0;\n            g = g | 0;\n            h = h | 0;\n            var i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0, p = 0, q = 0;\n            p = V;\n            V = (V + 32) | 0;\n            o = p;\n            i = (f + 4781) | 0;\n            if (!(a[i >> 0] | 0)) {\n                Ce((f + 4380) | 0);\n                a[i >> 0] = 1;\n            }\n            i = (f + 3976) | 0;\n            if (!(a[i >> 0] | 0)) {\n                a[i >> 0] = 1;\n                Ee(De(g) | 0, h, 20);\n                Fe(o, h);\n                k = f;\n                i = o;\n                j = (k + 20) | 0;\n                do {\n                    a[k >> 0] = a[i >> 0] | 0;\n                    k = (k + 1) | 0;\n                    i = (i + 1) | 0;\n                } while ((k | 0) < (j | 0));\n                b[(f + 12) >> 1] = 0;\n            }\n            else {\n                m = Zc(g, (f + 852) | 0) | 0;\n                if (m) {\n                    if ((m & 32) | 0)\n                        He((Zc(g, c[(f + 904 + (((Ge(f) | 0) & 255) << 2)) >> 2] | 0) | 0) & 255, f);\n                    n = (f + 14) | 0;\n                    k = a[n >> 0] | 0;\n                    i = k & 7;\n                    k = ((k & 255) >>> 3) & 7;\n                    j = d[(16 + (k << 3) + i) >> 0] | 0;\n                    i = d[(80 + (k << 3) + i) >> 0] | 0;\n                    if (!(m & 16))\n                        l = b[(f + 20 + (j << 1)) >> 1] | 0;\n                    else {\n                        q = (f + 20 + (j << 1)) | 0;\n                        l = (pc((f + 4380) | 0, g, e[q >> 1] | 0, j >>> 0 < 3 ? j : 3) | 0) & 65535;\n                        b[q >> 1] = l;\n                    }\n                    b[(f + 12) >> 1] = l;\n                    if ((m & 8) | 0) {\n                        q = (f + 15) | 0;\n                        a[q >> 0] = Zc(g, c[(f + 1928 + (d[q >> 0] << 2)) >> 2] | 0) | 0;\n                    }\n                    if ((m & 4) | 0) {\n                        n = Zc(g, c[(f + 896 + ((((d[n >> 0] | 0) >>> 6) & 1) << 2)) >> 2] | 0) | 0;\n                        q = (f + 16) | 0;\n                        a[q >> 0] = Ie((n + (a[q >> 0] | 0)) | 0) | 0;\n                    }\n                    if ((m & 2) | 0) {\n                        q = (f + 17) | 0;\n                        a[q >> 0] = Zc(g, c[(f + 2952 + (d[q >> 0] << 2)) >> 2] | 0) | 0;\n                    }\n                    if (m & 1) {\n                        q = (f + 18) | 0;\n                        b[q >> 1] = pc((f + 4460) | 0, g, e[q >> 1] | 0, 0) | 0;\n                    }\n                }\n                else {\n                    q = a[(f + 14) >> 0] | 0;\n                    i = q & 7;\n                    q = ((q & 255) >>> 3) & 7;\n                    k = q;\n                    j = d[(16 + (q << 3) + i) >> 0] | 0;\n                    i = d[(80 + (q << 3) + i) >> 0] | 0;\n                }\n                l = (f + 52 + ((j * 24) | 0)) | 0;\n                m = (f + 4540) | 0;\n                n = ((k | 0) == 1) & 1;\n                k = pc(m, g, Je(l) | 0, n) | 0;\n                c[o >> 2] = k;\n                c[f >> 2] = (c[f >> 2] | 0) + k;\n                Ke(l, o);\n                l = (f + 436 + ((j * 24) | 0)) | 0;\n                k = Je(l) | 0;\n                j = Le(m) | 0;\n                q = (f + 4620) | 0;\n                j = pc(q, g, k, (j >>> 0 < 20 ? j & -2 : 20) | n) | 0;\n                c[o >> 2] = j;\n                k = (f + 4) | 0;\n                c[k >> 2] = (c[k >> 2] | 0) + j;\n                Ke(l, o);\n                o = Le(m) | 0;\n                o = ((Le(q) | 0) + o) | 0;\n                q = (f + 820 + (i << 2)) | 0;\n                o =\n                    pc((f + 4700) | 0, g, c[q >> 2] | 0, (o >>> 0 < 36 ? (o >>> 1) & 2147483646 : 18) | n) |\n                        0;\n                c[(f + 8) >> 2] = o;\n                c[q >> 2] = o;\n                Me(f, h);\n            }\n            V = p;\n            return (h + 20) | 0;\n        }\n        function Ce(a) {\n            a = a | 0;\n            oc(a);\n            oc((a + 80) | 0);\n            oc((a + 160) | 0);\n            oc((a + 240) | 0);\n            oc((a + 320) | 0);\n            return;\n        }\n        function De(a) {\n            a = a | 0;\n            return c[a >> 2] | 0;\n        }\n        function Ee(b, d, e) {\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            var f = 0, g = 0, h = 0, i = 0, j = 0, k = 0;\n            k = (b + 4) | 0;\n            f = c[k >> 2] | 0;\n            j = ((c[(b + 8) >> 2] | 0) - f) | 0;\n            j = j >>> 0 > e >>> 0 ? e : j;\n            i = (b + 12) | 0;\n            g = ((c[i >> 2] | 0) + f) | 0;\n            h = (g + j) | 0;\n            if (j) {\n                f = g;\n                g = d;\n                while (1) {\n                    a[g >> 0] = a[f >> 0] | 0;\n                    f = (f + 1) | 0;\n                    if ((f | 0) == (h | 0))\n                        break;\n                    else\n                        g = (g + 1) | 0;\n                }\n                f = c[k >> 2] | 0;\n            }\n            c[k >> 2] = f + j;\n            e = (e - j) | 0;\n            if (e | 0) {\n                Kc(b);\n                g = ((c[i >> 2] | 0) + (c[k >> 2] | 0)) | 0;\n                h = (g + e) | 0;\n                f = (d + j) | 0;\n                while (1) {\n                    a[f >> 0] = a[g >> 0] | 0;\n                    g = (g + 1) | 0;\n                    if ((g | 0) == (h | 0))\n                        break;\n                    else\n                        f = (f + 1) | 0;\n                }\n                c[k >> 2] = (c[k >> 2] | 0) + e;\n            }\n            return;\n        }\n        function Fe(d, e) {\n            d = d | 0;\n            e = e | 0;\n            te(d);\n            c[d >> 2] = Ne(e) | 0;\n            c[(d + 4) >> 2] = Ne((e + 4) | 0) | 0;\n            c[(d + 8) >> 2] = Ne((e + 8) | 0) | 0;\n            b[(d + 12) >> 1] = Oe((e + 12) | 0) | 0;\n            He(Pe((e + 14) | 0) | 0, d);\n            a[(d + 15) >> 0] = Pe((e + 15) | 0) | 0;\n            a[(d + 16) >> 0] = Qe((e + 16) | 0) | 0;\n            a[(d + 17) >> 0] = Qe((e + 17) | 0) | 0;\n            b[(d + 18) >> 1] = Oe((e + 18) | 0) | 0;\n            return;\n        }\n        function Ge(b) {\n            b = b | 0;\n            return a[(b + 14) >> 0] | 0;\n        }\n        function He(b, c) {\n            b = b | 0;\n            c = c | 0;\n            a[(c + 14) >> 0] = b;\n            return;\n        }\n        function Ie(a) {\n            a = a | 0;\n            return (a & 255) | 0;\n        }\n        function Je(a) {\n            a = a | 0;\n            return c[(a + 8) >> 2] | 0;\n        }\n        function Ke(b, d) {\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, k = 0;\n            k = (b + 20) | 0;\n            do\n                if (!(a[k >> 0] | 0)) {\n                    j = (b + 8) | 0;\n                    e = c[j >> 2] | 0;\n                    f = c[d >> 2] | 0;\n                    g = (b + 4) | 0;\n                    h = c[g >> 2] | 0;\n                    if ((e | 0) >= (f | 0)) {\n                        if ((h | 0) < (f | 0)) {\n                            c[b >> 2] = h;\n                            c[g >> 2] = c[d >> 2];\n                        }\n                        else\n                            c[b >> 2] = f;\n                        a[k >> 0] = 1;\n                        break;\n                    }\n                    c[b >> 2] = h;\n                    c[g >> 2] = e;\n                    g = (b + 16) | 0;\n                    h = c[g >> 2] | 0;\n                    i = c[d >> 2] | 0;\n                    e = (b + 12) | 0;\n                    f = c[e >> 2] | 0;\n                    if ((h | 0) < (i | 0)) {\n                        c[j >> 2] = f;\n                        c[e >> 2] = h;\n                        c[g >> 2] = c[d >> 2];\n                        break;\n                    }\n                    if ((f | 0) < (i | 0)) {\n                        c[j >> 2] = f;\n                        c[e >> 2] = c[d >> 2];\n                        break;\n                    }\n                    else {\n                        c[j >> 2] = i;\n                        break;\n                    }\n                }\n                else {\n                    g = c[d >> 2] | 0;\n                    i = (b + 8) | 0;\n                    e = c[i >> 2] | 0;\n                    h = (b + 12) | 0;\n                    f = c[h >> 2] | 0;\n                    if ((g | 0) >= (e | 0)) {\n                        e = (b + 16) | 0;\n                        if ((g | 0) < (f | 0)) {\n                            c[e >> 2] = f;\n                            c[h >> 2] = c[d >> 2];\n                        }\n                        else\n                            c[e >> 2] = g;\n                        a[k >> 0] = 0;\n                        break;\n                    }\n                    c[(b + 16) >> 2] = f;\n                    c[h >> 2] = e;\n                    e = c[d >> 2] | 0;\n                    f = c[b >> 2] | 0;\n                    g = (b + 4) | 0;\n                    h = c[g >> 2] | 0;\n                    if ((e | 0) < (f | 0)) {\n                        c[i >> 2] = h;\n                        c[g >> 2] = f;\n                        c[b >> 2] = c[d >> 2];\n                        break;\n                    }\n                    if ((e | 0) < (h | 0)) {\n                        c[i >> 2] = h;\n                        c[g >> 2] = c[d >> 2];\n                        break;\n                    }\n                    else {\n                        c[i >> 2] = e;\n                        break;\n                    }\n                }\n            while (0);\n            return;\n        }\n        function Le(a) {\n            a = a | 0;\n            return c[a >> 2] | 0;\n        }\n        function Me(b, c) {\n            b = b | 0;\n            c = c | 0;\n            var e = 0;\n            Se(d[b >> 0] | (d[(b + 1) >> 0] << 8) | (d[(b + 2) >> 0] << 16) | (d[(b + 3) >> 0] << 24), c);\n            e = (b + 4) | 0;\n            Se(d[e >> 0] | (d[(e + 1) >> 0] << 8) | (d[(e + 2) >> 0] << 16) | (d[(e + 3) >> 0] << 24), (c + 4) | 0);\n            e = (b + 8) | 0;\n            Se(d[e >> 0] | (d[(e + 1) >> 0] << 8) | (d[(e + 2) >> 0] << 16) | (d[(e + 3) >> 0] << 24), (c + 8) | 0);\n            e = (b + 12) | 0;\n            Te(d[e >> 0] | (d[(e + 1) >> 0] << 8), (c + 12) | 0);\n            Ue(Ge(b) | 0, (c + 14) | 0);\n            Ue(a[(b + 15) >> 0] | 0, (c + 15) | 0);\n            Ve(a[(b + 16) >> 0] | 0, (c + 16) | 0);\n            Ve(a[(b + 17) >> 0] | 0, (c + 17) | 0);\n            b = (b + 18) | 0;\n            Te(d[b >> 0] | (d[(b + 1) >> 0] << 8), (c + 18) | 0);\n            return;\n        }\n        function Ne(a) {\n            a = a | 0;\n            return Re(a) | 0;\n        }\n        function Oe(b) {\n            b = b | 0;\n            return (((a[(b + 1) >> 0] << 8) | d[b >> 0]) & 65535) | 0;\n        }\n        function Pe(b) {\n            b = b | 0;\n            return a[b >> 0] | 0;\n        }\n        function Qe(b) {\n            b = b | 0;\n            return a[b >> 0] | 0;\n        }\n        function Re(a) {\n            a = a | 0;\n            return (((d[(a + 1) >> 0] | 0) << 8) |\n                (d[a >> 0] | 0) |\n                ((d[(a + 2) >> 0] | 0) << 16) |\n                ((d[(a + 3) >> 0] | 0) << 24) |\n                0);\n        }\n        function Se(a, b) {\n            a = a | 0;\n            b = b | 0;\n            We(a, b);\n            return;\n        }\n        function Te(b, c) {\n            b = b | 0;\n            c = c | 0;\n            a[(c + 1) >> 0] = (b & 65535) >>> 8;\n            a[c >> 0] = b;\n            return;\n        }\n        function Ue(b, c) {\n            b = b | 0;\n            c = c | 0;\n            a[c >> 0] = b;\n            return;\n        }\n        function Ve(b, c) {\n            b = b | 0;\n            c = c | 0;\n            a[c >> 0] = b;\n            return;\n        }\n        function We(b, c) {\n            b = b | 0;\n            c = c | 0;\n            a[(c + 3) >> 0] = b >>> 24;\n            a[(c + 2) >> 0] = b >>> 16;\n            a[(c + 1) >> 0] = b >>> 8;\n            a[c >> 0] = b;\n            return;\n        }\n        function Xe(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return;\n        }\n        function Ye(a) {\n            a = a | 0;\n            pq(a);\n            jp(a);\n            return;\n        }\n        function Ze(a) {\n            a = a | 0;\n            a = c[(a + 12) >> 2] | 0;\n            if (a | 0)\n                ca[c[((c[a >> 2] | 0) + 4) >> 2] & 255](a);\n            return;\n        }\n        function _e(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return ((c[(b + 4) >> 2] | 0) == 9202 ? (a + 12) | 0 : 0) | 0;\n        }\n        function $e(a) {\n            a = a | 0;\n            Da(a, 16);\n            return;\n        }\n        function af(a, b) {\n            a = a | 0;\n            b = b | 0;\n            fe(a);\n            c[a >> 2] = 4768;\n            c[(a + 4) >> 2] = b;\n            cf((a + 8) | 0);\n            return;\n        }\n        function bf(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0;\n            d = V;\n            V = (V + 16) | 0;\n            e = d;\n            c[a >> 2] = b;\n            f = eq(16) | 0;\n            c[(f + 4) >> 2] = 0;\n            c[(f + 8) >> 2] = 0;\n            c[f >> 2] = 4792;\n            c[(f + 12) >> 2] = b;\n            c[(a + 4) >> 2] = f;\n            c[e >> 2] = b;\n            c[(e + 4) >> 2] = b;\n            Xe(a, e);\n            V = d;\n            return;\n        }\n        function cf(b) {\n            b = b | 0;\n            gf(b);\n            hf((b + 164) | 0);\n            jf((b + 244) | 0);\n            a[(b + 324) >> 0] = 0;\n            a[(b + 325) >> 0] = 0;\n            return;\n        }\n        function df(a) {\n            a = a | 0;\n            c[a >> 2] = 4768;\n            of((a + 8) | 0);\n            le(a);\n            return;\n        }\n        function ef(a) {\n            a = a | 0;\n            df(a);\n            jp(a);\n            return;\n        }\n        function ff(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return qf((a + 8) | 0, c[(a + 4) >> 2] | 0, b) | 0;\n        }\n        function gf(b) {\n            b = b | 0;\n            var d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0;\n            h = V;\n            V = (V + 16) | 0;\n            f = h;\n            a[b >> 0] = 0;\n            Oc((b + 4) | 0, 516, 0, 0);\n            Oc((b + 48) | 0, 6, 0, 0);\n            c[(b + 92) >> 2] = 0;\n            c[(b + 96) >> 2] = 0;\n            e = (b + 100) | 0;\n            mf(e);\n            nf(f);\n            g = c[f >> 2] | 0;\n            f = c[(f + 4) >> 2] | 0;\n            d = 4;\n            while (1) {\n                i = e;\n                j = i;\n                a[j >> 0] = g;\n                a[(j + 1) >> 0] = g >> 8;\n                a[(j + 2) >> 0] = g >> 16;\n                a[(j + 3) >> 0] = g >> 24;\n                i = (i + 4) | 0;\n                a[i >> 0] = f;\n                a[(i + 1) >> 0] = f >> 8;\n                a[(i + 2) >> 0] = f >> 16;\n                a[(i + 3) >> 0] = f >> 24;\n                d = (d + -1) | 0;\n                if (!d)\n                    break;\n                else\n                    e = (e + 8) | 0;\n            }\n            j = (b + 132) | 0;\n            c[j >> 2] = 0;\n            c[(j + 4) >> 2] = 0;\n            c[(j + 8) >> 2] = 0;\n            c[(j + 12) >> 2] = 0;\n            c[(j + 16) >> 2] = 0;\n            c[(j + 20) >> 2] = 0;\n            c[(j + 24) >> 2] = 0;\n            c[(j + 28) >> 2] = 0;\n            V = h;\n            return;\n        }\n        function hf(a) {\n            a = a | 0;\n            xe(a, 32, 9, 8, 0);\n            return;\n        }\n        function jf(a) {\n            a = a | 0;\n            mc(a, 32, 9, 8, 0);\n            return;\n        }\n        function kf(a) {\n            a = a | 0;\n            ye(a);\n            return;\n        }\n        function lf(a) {\n            a = a | 0;\n            Ic((a + 48) | 0);\n            Ic((a + 4) | 0);\n            return;\n        }\n        function mf(a) {\n            a = a | 0;\n            var b = 0;\n            b = (a + 32) | 0;\n            do {\n                nf(a);\n                a = (a + 8) | 0;\n            } while ((a | 0) != (b | 0));\n            return;\n        }\n        function nf(b) {\n            b = b | 0;\n            var c = 0;\n            c = b;\n            a[c >> 0] = 0;\n            a[(c + 1) >> 0] = 0;\n            a[(c + 2) >> 0] = 0;\n            a[(c + 3) >> 0] = 0;\n            b = (b + 4) | 0;\n            a[b >> 0] = 0;\n            a[(b + 1) >> 0] = 0;\n            a[(b + 2) >> 0] = 0;\n            a[(b + 3) >> 0] = 0;\n            return;\n        }\n        function of(a) {\n            a = a | 0;\n            pf((a + 244) | 0);\n            kf((a + 164) | 0);\n            lf(a);\n            return;\n        }\n        function pf(a) {\n            a = a | 0;\n            qc(a);\n            return;\n        }\n        function qf(b, e, f) {\n            b = b | 0;\n            e = e | 0;\n            f = f | 0;\n            var g = 0, h = 0, i = 0, j = 0, k = 0;\n            g = (b + 325) | 0;\n            if (!(a[g >> 0] | 0)) {\n                rf((b + 244) | 0);\n                a[g >> 0] = 1;\n            }\n            if (!(a[b >> 0] | 0)) {\n                a[b >> 0] = 1;\n                Ee(De(e) | 0, f, 8);\n                i = sf(f) | 0;\n                j = u() | 0;\n                b = (b + 100) | 0;\n                e = b;\n                a[e >> 0] = i;\n                a[(e + 1) >> 0] = i >> 8;\n                a[(e + 2) >> 0] = i >> 16;\n                a[(e + 3) >> 0] = i >> 24;\n                b = (b + 4) | 0;\n                a[b >> 0] = j;\n                a[(b + 1) >> 0] = j >> 8;\n                a[(b + 2) >> 0] = j >> 16;\n                a[(b + 3) >> 0] = j >> 24;\n            }\n            else {\n                j = (b + 92) | 0;\n                a: do\n                    if (!(c[(b + 132 + (c[j >> 2] << 2)) >> 2] | 0)) {\n                        g = Zc(e, (b + 48) | 0) | 0;\n                        switch (g | 0) {\n                            case 1: {\n                                e = pc((b + 244) | 0, e, 0, 0) | 0;\n                                c[(b + 132 + (c[j >> 2] << 2)) >> 2] = e;\n                                e = c[j >> 2] | 0;\n                                k = c[(b + 132 + (e << 2)) >> 2] | 0;\n                                i = (b + 100 + (e << 3)) | 0;\n                                h = i;\n                                g = h;\n                                h = (h + 4) | 0;\n                                k =\n                                    lr(d[g >> 0] |\n                                        (d[(g + 1) >> 0] << 8) |\n                                        (d[(g + 2) >> 0] << 16) |\n                                        (d[(g + 3) >> 0] << 24) |\n                                        0, d[h >> 0] |\n                                        (d[(h + 1) >> 0] << 8) |\n                                        (d[(h + 2) >> 0] << 16) |\n                                        (d[(h + 3) >> 0] << 24) |\n                                        0, k | 0, ((((k | 0) < 0) << 31) >> 31) | 0) | 0;\n                                h = u() | 0;\n                                g = i;\n                                a[g >> 0] = k;\n                                a[(g + 1) >> 0] = k >> 8;\n                                a[(g + 2) >> 0] = k >> 16;\n                                a[(g + 3) >> 0] = k >> 24;\n                                i = (i + 4) | 0;\n                                a[i >> 0] = h;\n                                a[(i + 1) >> 0] = h >> 8;\n                                a[(i + 2) >> 0] = h >> 16;\n                                a[(i + 3) >> 0] = h >> 24;\n                                c[(b + 148 + (e << 2)) >> 2] = 0;\n                                break a;\n                            }\n                            case 2: {\n                                k = (b + 96) | 0;\n                                c[k >> 2] = ((c[k >> 2] | 0) + 1) & 3;\n                                i = (b + 100 + (c[j >> 2] << 3) + 4) | 0;\n                                i =\n                                    pc((b + 244) | 0, e, d[i >> 0] |\n                                        (d[(i + 1) >> 0] << 8) |\n                                        (d[(i + 2) >> 0] << 16) |\n                                        (d[(i + 3) >> 0] << 24), 8) | 0;\n                                g = (b + 100 + (c[k >> 2] << 3)) | 0;\n                                h = g;\n                                a[h >> 0] = 0;\n                                a[(h + 1) >> 0] = 0;\n                                a[(h + 2) >> 0] = 0;\n                                a[(h + 3) >> 0] = 0;\n                                g = (g + 4) | 0;\n                                a[g >> 0] = i;\n                                a[(g + 1) >> 0] = i >> 8;\n                                a[(g + 2) >> 0] = i >> 16;\n                                a[(g + 3) >> 0] = i >> 24;\n                                g = tf(e) | 0;\n                                k = c[k >> 2] | 0;\n                                e = (b + 100 + (k << 3)) | 0;\n                                i = e;\n                                h = i;\n                                i = (i + 4) | 0;\n                                i =\n                                    d[i >> 0] |\n                                        (d[(i + 1) >> 0] << 8) |\n                                        (d[(i + 2) >> 0] << 16) |\n                                        (d[(i + 3) >> 0] << 24);\n                                g =\n                                    d[h >> 0] |\n                                        (d[(h + 1) >> 0] << 8) |\n                                        (d[(h + 2) >> 0] << 16) |\n                                        (d[(h + 3) >> 0] << 24) |\n                                        g;\n                                h = e;\n                                a[h >> 0] = g;\n                                a[(h + 1) >> 0] = g >> 8;\n                                a[(h + 2) >> 0] = g >> 16;\n                                a[(h + 3) >> 0] = g >> 24;\n                                e = (e + 4) | 0;\n                                a[e >> 0] = i;\n                                a[(e + 1) >> 0] = i >> 8;\n                                a[(e + 2) >> 0] = i >> 16;\n                                a[(e + 3) >> 0] = i >> 24;\n                                c[j >> 2] = k;\n                                c[(b + 132 + (k << 2)) >> 2] = 0;\n                                c[(b + 148 + (c[j >> 2] << 2)) >> 2] = 0;\n                                break a;\n                            }\n                            default: {\n                                if ((g | 0) <= 2)\n                                    break a;\n                                c[j >> 2] = (g + 2 + (c[j >> 2] | 0)) & 3;\n                                qf(b, e, f) | 0;\n                                break a;\n                            }\n                        }\n                    }\n                    else {\n                        i = Zc(e, (b + 4) | 0) | 0;\n                        if ((i | 0) == 1) {\n                            g = pc((b + 244) | 0, e, c[(b + 132 + (c[j >> 2] << 2)) >> 2] | 0, 1) | 0;\n                            k = c[j >> 2] | 0;\n                            e = (b + 100 + (k << 3)) | 0;\n                            i = e;\n                            h = i;\n                            i = (i + 4) | 0;\n                            g =\n                                lr(d[h >> 0] |\n                                    (d[(h + 1) >> 0] << 8) |\n                                    (d[(h + 2) >> 0] << 16) |\n                                    (d[(h + 3) >> 0] << 24) |\n                                    0, d[i >> 0] |\n                                    (d[(i + 1) >> 0] << 8) |\n                                    (d[(i + 2) >> 0] << 16) |\n                                    (d[(i + 3) >> 0] << 24) |\n                                    0, g | 0, ((((g | 0) < 0) << 31) >> 31) | 0) | 0;\n                            i = u() | 0;\n                            h = e;\n                            a[h >> 0] = g;\n                            a[(h + 1) >> 0] = g >> 8;\n                            a[(h + 2) >> 0] = g >> 16;\n                            a[(h + 3) >> 0] = g >> 24;\n                            e = (e + 4) | 0;\n                            a[e >> 0] = i;\n                            a[(e + 1) >> 0] = i >> 8;\n                            a[(e + 2) >> 0] = i >> 16;\n                            a[(e + 3) >> 0] = i >> 24;\n                            c[(b + 148 + (k << 2)) >> 2] = 0;\n                            break;\n                        }\n                        if ((i | 0) >= 511) {\n                            if ((i | 0) == 512) {\n                                k = (b + 96) | 0;\n                                c[k >> 2] = ((c[k >> 2] | 0) + 1) & 3;\n                                i = (b + 100 + (c[j >> 2] << 3) + 4) | 0;\n                                i =\n                                    pc((b + 244) | 0, e, d[i >> 0] |\n                                        (d[(i + 1) >> 0] << 8) |\n                                        (d[(i + 2) >> 0] << 16) |\n                                        (d[(i + 3) >> 0] << 24), 8) | 0;\n                                g = (b + 100 + (c[k >> 2] << 3)) | 0;\n                                h = g;\n                                a[h >> 0] = 0;\n                                a[(h + 1) >> 0] = 0;\n                                a[(h + 2) >> 0] = 0;\n                                a[(h + 3) >> 0] = 0;\n                                g = (g + 4) | 0;\n                                a[g >> 0] = i;\n                                a[(g + 1) >> 0] = i >> 8;\n                                a[(g + 2) >> 0] = i >> 16;\n                                a[(g + 3) >> 0] = i >> 24;\n                                g = tf(e) | 0;\n                                k = c[k >> 2] | 0;\n                                e = (b + 100 + (k << 3)) | 0;\n                                i = e;\n                                h = i;\n                                i = (i + 4) | 0;\n                                i =\n                                    d[i >> 0] |\n                                        (d[(i + 1) >> 0] << 8) |\n                                        (d[(i + 2) >> 0] << 16) |\n                                        (d[(i + 3) >> 0] << 24);\n                                g =\n                                    d[h >> 0] |\n                                        (d[(h + 1) >> 0] << 8) |\n                                        (d[(h + 2) >> 0] << 16) |\n                                        (d[(h + 3) >> 0] << 24) |\n                                        g;\n                                h = e;\n                                a[h >> 0] = g;\n                                a[(h + 1) >> 0] = g >> 8;\n                                a[(h + 2) >> 0] = g >> 16;\n                                a[(h + 3) >> 0] = g >> 24;\n                                e = (e + 4) | 0;\n                                a[e >> 0] = i;\n                                a[(e + 1) >> 0] = i >> 8;\n                                a[(e + 2) >> 0] = i >> 16;\n                                a[(e + 3) >> 0] = i >> 24;\n                                c[j >> 2] = k;\n                                c[(b + 132 + (k << 2)) >> 2] = 0;\n                                c[(b + 148 + (c[j >> 2] << 2)) >> 2] = 0;\n                                break;\n                            }\n                            if ((i | 0) <= 511)\n                                break;\n                            c[j >> 2] = ((c[j >> 2] | 0) + i) & 3;\n                            qf(b, e, f) | 0;\n                            break;\n                        }\n                        do\n                            if (!i) {\n                                g = pc((b + 244) | 0, e, 0, 7) | 0;\n                                h = (b + 148 + (c[j >> 2] << 2)) | 0;\n                                c[h >> 2] = (c[h >> 2] | 0) + 1;\n                                h = c[j >> 2] | 0;\n                                if ((c[(b + 148 + (h << 2)) >> 2] | 0) > 3) {\n                                    c[(b + 132 + (h << 2)) >> 2] = g;\n                                    c[(b + 148 + (c[j >> 2] << 2)) >> 2] = 0;\n                                }\n                            }\n                            else {\n                                if ((i | 0) < 500) {\n                                    g = (b + 244) | 0;\n                                    h = q(c[(b + 132 + (c[j >> 2] << 2)) >> 2] | 0, i) | 0;\n                                    if ((i | 0) < 10) {\n                                        g = pc(g, e, h, 2) | 0;\n                                        break;\n                                    }\n                                    else {\n                                        g = pc(g, e, h, 3) | 0;\n                                        break;\n                                    }\n                                }\n                                if ((i | 0) == 500) {\n                                    g =\n                                        pc((b + 244) | 0, e, ((c[(b + 132 + (c[j >> 2] << 2)) >> 2] | 0) * 500) | 0, 4) | 0;\n                                    h = (b + 148 + (c[j >> 2] << 2)) | 0;\n                                    c[h >> 2] = (c[h >> 2] | 0) + 1;\n                                    h = c[j >> 2] | 0;\n                                    if ((c[(b + 148 + (h << 2)) >> 2] | 0) <= 3)\n                                        break;\n                                    c[(b + 132 + (h << 2)) >> 2] = g;\n                                    c[(b + 148 + (c[j >> 2] << 2)) >> 2] = 0;\n                                    break;\n                                }\n                                g = (500 - i) | 0;\n                                h = (b + 244) | 0;\n                                i = c[(b + 132 + (c[j >> 2] << 2)) >> 2] | 0;\n                                if ((g | 0) > -10) {\n                                    g = pc(h, e, q(i, g) | 0, 5) | 0;\n                                    break;\n                                }\n                                g = pc(h, e, q(i, -10) | 0, 6) | 0;\n                                h = (b + 148 + (c[j >> 2] << 2)) | 0;\n                                c[h >> 2] = (c[h >> 2] | 0) + 1;\n                                h = c[j >> 2] | 0;\n                                if ((c[(b + 148 + (h << 2)) >> 2] | 0) > 3) {\n                                    c[(b + 132 + (h << 2)) >> 2] = g;\n                                    c[(b + 148 + (c[j >> 2] << 2)) >> 2] = 0;\n                                }\n                            }\n                        while (0);\n                        k = (b + 100 + (c[j >> 2] << 3)) | 0;\n                        h = k;\n                        e = h;\n                        h = (h + 4) | 0;\n                        h =\n                            lr(d[e >> 0] |\n                                (d[(e + 1) >> 0] << 8) |\n                                (d[(e + 2) >> 0] << 16) |\n                                (d[(e + 3) >> 0] << 24) |\n                                0, d[h >> 0] |\n                                (d[(h + 1) >> 0] << 8) |\n                                (d[(h + 2) >> 0] << 16) |\n                                (d[(h + 3) >> 0] << 24) |\n                                0, g | 0, ((((g | 0) < 0) << 31) >> 31) | 0) | 0;\n                        e = u() | 0;\n                        i = k;\n                        a[i >> 0] = h;\n                        a[(i + 1) >> 0] = h >> 8;\n                        a[(i + 2) >> 0] = h >> 16;\n                        a[(i + 3) >> 0] = h >> 24;\n                        k = (k + 4) | 0;\n                        a[k >> 0] = e;\n                        a[(k + 1) >> 0] = e >> 8;\n                        a[(k + 2) >> 0] = e >> 16;\n                        a[(k + 3) >> 0] = e >> 24;\n                    }\n                while (0);\n                uf((b + 100 + (c[j >> 2] << 3)) | 0, f);\n            }\n            return (f + 8) | 0;\n        }\n        function rf(a) {\n            a = a | 0;\n            oc(a);\n            return;\n        }\n        function sf(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0;\n            b = V;\n            V = (V + 16) | 0;\n            d = b;\n            e = Re(a) | 0;\n            vf(d, e, Re((a + 4) | 0) | 0);\n            a = c[d >> 2] | 0;\n            t(c[(d + 4) >> 2] | 0);\n            V = b;\n            return a | 0;\n        }\n        function tf(a) {\n            a = a | 0;\n            var b = 0;\n            b = (bd(a) | 0) & 65535;\n            return (((bd(a) | 0) & 65535) << 16) | b | 0;\n        }\n        function uf(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var c = 0;\n            c = a;\n            We(d[c >> 0] | (d[(c + 1) >> 0] << 8) | (d[(c + 2) >> 0] << 16) | (d[(c + 3) >> 0] << 24), b);\n            a = (a + 4) | 0;\n            We(d[a >> 0] | (d[(a + 1) >> 0] << 8) | (d[(a + 2) >> 0] << 16) | (d[(a + 3) >> 0] << 24), (b + 4) | 0);\n            return;\n        }\n        function vf(b, c, d) {\n            b = b | 0;\n            c = c | 0;\n            d = d | 0;\n            var e = 0;\n            e = b;\n            a[e >> 0] = c;\n            a[(e + 1) >> 0] = c >> 8;\n            a[(e + 2) >> 0] = c >> 16;\n            a[(e + 3) >> 0] = c >> 24;\n            c = (b + 4) | 0;\n            a[c >> 0] = d;\n            a[(c + 1) >> 0] = d >> 8;\n            a[(c + 2) >> 0] = d >> 16;\n            a[(c + 3) >> 0] = d >> 24;\n            return;\n        }\n        function wf(a) {\n            a = a | 0;\n            pq(a);\n            jp(a);\n            return;\n        }\n        function xf(a) {\n            a = a | 0;\n            a = c[(a + 12) >> 2] | 0;\n            if (a | 0)\n                ca[c[((c[a >> 2] | 0) + 4) >> 2] & 255](a);\n            return;\n        }\n        function yf(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return ((c[(b + 4) >> 2] | 0) == 9890 ? (a + 12) | 0 : 0) | 0;\n        }\n        function zf(a) {\n            a = a | 0;\n            Da(a, 16);\n            return;\n        }\n        function Af(a, b) {\n            a = a | 0;\n            b = b | 0;\n            fe(a);\n            c[a >> 2] = 4820;\n            c[(a + 4) >> 2] = b;\n            Cf((a + 8) | 0);\n            return;\n        }\n        function Bf(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0;\n            d = V;\n            V = (V + 16) | 0;\n            e = d;\n            c[a >> 2] = b;\n            f = eq(16) | 0;\n            c[(f + 4) >> 2] = 0;\n            c[(f + 8) >> 2] = 0;\n            c[f >> 2] = 4844;\n            c[(f + 12) >> 2] = b;\n            c[(a + 4) >> 2] = f;\n            c[e >> 2] = b;\n            c[(e + 4) >> 2] = b;\n            Xe(a, e);\n            V = d;\n            return;\n        }\n        function Cf(b) {\n            b = b | 0;\n            a[b >> 0] = 0;\n            Gf((b + 1) | 0);\n            Oc((b + 8) | 0, 128, 0, 0);\n            Oc((b + 52) | 0, 256, 0, 0);\n            Oc((b + 96) | 0, 256, 0, 0);\n            Oc((b + 140) | 0, 256, 0, 0);\n            Oc((b + 184) | 0, 256, 0, 0);\n            Oc((b + 228) | 0, 256, 0, 0);\n            Oc((b + 272) | 0, 256, 0, 0);\n            return;\n        }\n        function Df(a) {\n            a = a | 0;\n            c[a >> 2] = 4820;\n            Hf((a + 8) | 0);\n            le(a);\n            return;\n        }\n        function Ef(a) {\n            a = a | 0;\n            Df(a);\n            jp(a);\n            return;\n        }\n        function Ff(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return If((a + 8) | 0, c[(a + 4) >> 2] | 0, b) | 0;\n        }\n        function Gf(b) {\n            b = b | 0;\n            var c = 0;\n            a[b >> 0] = 0;\n            a[(b + 1) >> 0] = 0;\n            c = (b + 2) | 0;\n            a[c >> 0] = 0;\n            a[(c + 1) >> 0] = 0;\n            b = (b + 4) | 0;\n            a[b >> 0] = 0;\n            a[(b + 1) >> 0] = 0;\n            return;\n        }\n        function Hf(a) {\n            a = a | 0;\n            Ic((a + 272) | 0);\n            Ic((a + 228) | 0);\n            Ic((a + 184) | 0);\n            Ic((a + 140) | 0);\n            Ic((a + 96) | 0);\n            Ic((a + 52) | 0);\n            Ic((a + 8) | 0);\n            return;\n        }\n        function If(c, f, g) {\n            c = c | 0;\n            f = f | 0;\n            g = g | 0;\n            var h = 0, i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0, p = 0;\n            o = V;\n            V = (V + 16) | 0;\n            m = o;\n            if (!(a[c >> 0] | 0)) {\n                a[c >> 0] = 1;\n                Ee(De(f) | 0, g, 6);\n                Jf(m, g);\n                n = (c + 1) | 0;\n                a[n >> 0] = a[m >> 0] | 0;\n                a[(n + 1) >> 0] = a[(m + 1) >> 0] | 0;\n                a[(n + 2) >> 0] = a[(m + 2) >> 0] | 0;\n                a[(n + 3) >> 0] = a[(m + 3) >> 0] | 0;\n                a[(n + 4) >> 0] = a[(m + 4) >> 0] | 0;\n                a[(n + 5) >> 0] = a[(m + 5) >> 0] | 0;\n            }\n            else {\n                n = Zc(f, (c + 8) | 0) | 0;\n                Gf(m);\n                if (!(n & 1)) {\n                    h = (c + 1) | 0;\n                    h = (d[h >> 0] | (d[(h + 1) >> 0] << 8)) & 255;\n                }\n                else {\n                    l = (Zc(f, (c + 52) | 0) | 0) & 255;\n                    h = (c + 1) | 0;\n                    h = (Ie((l + ((d[h >> 0] | (d[(h + 1) >> 0] << 8)) & 255)) | 0) | 0) & 255;\n                }\n                b[m >> 1] = h;\n                if (!(n & 2)) {\n                    l = (c + 1) | 0;\n                    h = h | ((d[l >> 0] | (d[(l + 1) >> 0] << 8)) & -256);\n                }\n                else {\n                    h = (Zc(f, (c + 96) | 0) | 0) & 255;\n                    l = (c + 1) | 0;\n                    h =\n                        ((Ie(((((d[l >> 0] | (d[(l + 1) >> 0] << 8)) & 65535) >>> 8) + h) | 0) | 0) & 255) << 8;\n                    h = (h | e[m >> 1]) & 65535;\n                }\n                b[m >> 1] = h;\n                do\n                    if (n & 64) {\n                        k = (c + 1) | 0;\n                        i = ((h & 255) - ((d[k >> 0] | (d[(k + 1) >> 0] << 8)) & 255)) | 0;\n                        if (!(n & 4)) {\n                            h = (c + 3) | 0;\n                            h = (d[h >> 0] | (d[(h + 1) >> 0] << 8)) & 255;\n                        }\n                        else {\n                            h = (Zc(f, (c + 140) | 0) | 0) & 255;\n                            l = (c + 3) | 0;\n                            l = (i + ((d[l >> 0] | (d[(l + 1) >> 0] << 8)) & 255)) | 0;\n                            h = (Ie((((l | 0) < 1 ? 0 : (l | 0) > 254 ? 255 : l & 255) + h) | 0) | 0) & 255;\n                        }\n                        l = (m + 2) | 0;\n                        b[l >> 1] = h;\n                        if (!(n & 16)) {\n                            h = (c + 5) | 0;\n                            h = (d[h >> 0] | (d[(h + 1) >> 0] << 8)) & 255;\n                        }\n                        else {\n                            h = Zc(f, (c + 228) | 0) | 0;\n                            p = (c + 3) | 0;\n                            j = (c + 5) | 0;\n                            j =\n                                (((((i + (b[l >> 1] & 255) - ((d[p >> 0] | (d[(p + 1) >> 0] << 8)) & 255)) | 0) /\n                                    2) |\n                                    0) +\n                                    ((d[j >> 0] | (d[(j + 1) >> 0] << 8)) & 255)) |\n                                    0;\n                            h =\n                                (Ie((((j | 0) < 1 ? 0 : (j | 0) > 254 ? 255 : j & 255) + (h & 255)) | 0) | 0) & 255;\n                        }\n                        j = (m + 4) | 0;\n                        b[j >> 1] = h;\n                        h =\n                            (((e[m >> 1] | 0) >>> 8) - (((d[k >> 0] | (d[(k + 1) >> 0] << 8)) & 65535) >>> 8)) |\n                                0;\n                        if (!(n & 8)) {\n                            i = (c + 3) | 0;\n                            i = b[l >> 1] | ((d[i >> 0] | (d[(i + 1) >> 0] << 8)) & -256);\n                        }\n                        else {\n                            i = (Zc(f, (c + 184) | 0) | 0) & 255;\n                            p = (c + 3) | 0;\n                            p = ((((d[p >> 0] | (d[(p + 1) >> 0] << 8)) & 65535) >>> 8) + h) | 0;\n                            i =\n                                ((Ie((((p | 0) < 1 ? 0 : (p | 0) > 254 ? 255 : p & 255) + i) | 0) | 0) & 255) << 8;\n                            i = (i | e[l >> 1]) & 65535;\n                        }\n                        b[l >> 1] = i;\n                        if (!(n & 32)) {\n                            p = (c + 5) | 0;\n                            b[j >> 1] = b[j >> 1] | ((d[p >> 0] | (d[(p + 1) >> 0] << 8)) & -256);\n                            break;\n                        }\n                        else {\n                            p = Zc(f, (c + 272) | 0) | 0;\n                            f = (c + 3) | 0;\n                            n = (c + 5) | 0;\n                            n =\n                                (((((((e[l >> 1] | 0) >>> 8) +\n                                    h -\n                                    (((d[f >> 0] | (d[(f + 1) >> 0] << 8)) & 65535) >>> 8)) |\n                                    0) /\n                                    2) |\n                                    0) +\n                                    (((d[n >> 0] | (d[(n + 1) >> 0] << 8)) & 65535) >>> 8)) |\n                                    0;\n                            p =\n                                ((Ie((((n | 0) < 1 ? 0 : (n | 0) > 254 ? 255 : n & 255) + (p & 255)) | 0) | 0) &\n                                    255) <<\n                                    8;\n                            b[j >> 1] = p | e[j >> 1];\n                            break;\n                        }\n                    }\n                    else {\n                        b[(m + 2) >> 1] = h;\n                        b[(m + 4) >> 1] = h;\n                    }\n                while (0);\n                p = (c + 1) | 0;\n                a[p >> 0] = a[m >> 0] | 0;\n                a[(p + 1) >> 0] = a[(m + 1) >> 0] | 0;\n                a[(p + 2) >> 0] = a[(m + 2) >> 0] | 0;\n                a[(p + 3) >> 0] = a[(m + 3) >> 0] | 0;\n                a[(p + 4) >> 0] = a[(m + 4) >> 0] | 0;\n                a[(p + 5) >> 0] = a[(m + 5) >> 0] | 0;\n                Kf(p, g);\n            }\n            V = o;\n            return (g + 6) | 0;\n        }\n        function Jf(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var c = 0, d = 0;\n            d = Oe(b) | 0;\n            c = Oe((b + 2) | 0) | 0;\n            Lf(a, d, c, Oe((b + 4) | 0) | 0);\n            return;\n        }\n        function Kf(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var c = 0;\n            Te(d[a >> 0] | (d[(a + 1) >> 0] << 8), b);\n            c = (a + 2) | 0;\n            Te(d[c >> 0] | (d[(c + 1) >> 0] << 8), (b + 2) | 0);\n            a = (a + 4) | 0;\n            Te(d[a >> 0] | (d[(a + 1) >> 0] << 8), (b + 4) | 0);\n            return;\n        }\n        function Lf(b, c, d, e) {\n            b = b | 0;\n            c = c | 0;\n            d = d | 0;\n            e = e | 0;\n            a[b >> 0] = c;\n            a[(b + 1) >> 0] = c >> 8;\n            c = (b + 2) | 0;\n            a[c >> 0] = d;\n            a[(c + 1) >> 0] = d >> 8;\n            d = (b + 4) | 0;\n            a[d >> 0] = e;\n            a[(d + 1) >> 0] = e >> 8;\n            return;\n        }\n        function Mf(a) {\n            a = a | 0;\n            pq(a);\n            jp(a);\n            return;\n        }\n        function Nf(a) {\n            a = a | 0;\n            a = c[(a + 12) >> 2] | 0;\n            if (a | 0)\n                ca[c[((c[a >> 2] | 0) + 4) >> 2] & 255](a);\n            return;\n        }\n        function Of(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return ((c[(b + 4) >> 2] | 0) == 10570 ? (a + 12) | 0 : 0) | 0;\n        }\n        function Pf(a) {\n            a = a | 0;\n            Da(a, 16);\n            return;\n        }\n        function Qf(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            fe(a);\n            c[a >> 2] = 4872;\n            c[(a + 4) >> 2] = b;\n            Sf((a + 8) | 0, d);\n            return;\n        }\n        function Rf(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0;\n            d = V;\n            V = (V + 16) | 0;\n            e = d;\n            c[a >> 2] = b;\n            f = eq(16) | 0;\n            c[(f + 4) >> 2] = 0;\n            c[(f + 8) >> 2] = 0;\n            c[f >> 2] = 4896;\n            c[(f + 12) >> 2] = b;\n            c[(a + 4) >> 2] = f;\n            c[e >> 2] = b;\n            c[(e + 4) >> 2] = b;\n            Xe(a, e);\n            V = d;\n            return;\n        }\n        function Sf(b, d) {\n            b = b | 0;\n            d = d | 0;\n            c[b >> 2] = c[d >> 2];\n            a[(b + 4) >> 0] = a[(d + 4) >> 0] | 0;\n            Wf((b + 8) | 0, (d + 8) | 0);\n            Wf((b + 20) | 0, (d + 20) | 0);\n            Xf((b + 32) | 0, (d + 32) | 0);\n            return;\n        }\n        function Tf(a) {\n            a = a | 0;\n            c[a >> 2] = 4872;\n            ud((a + 8) | 0);\n            le(a);\n            return;\n        }\n        function Uf(a) {\n            a = a | 0;\n            Tf(a);\n            jp(a);\n            return;\n        }\n        function Vf(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return Dg((a + 8) | 0, c[(a + 4) >> 2] | 0, b) | 0;\n        }\n        function Wf(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0;\n            c[a >> 2] = 0;\n            c[(a + 4) >> 2] = 0;\n            c[(a + 8) >> 2] = 0;\n            d = (b + 4) | 0;\n            e = ((c[d >> 2] | 0) - (c[b >> 2] | 0)) | 0;\n            if (e | 0) {\n                Yf(a, e);\n                Zf(a, c[b >> 2] | 0, c[d >> 2] | 0, e);\n            }\n            return;\n        }\n        function Xf(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0, f = 0, g = 0, h = 0;\n            d = V;\n            V = (V + 32) | 0;\n            e = (d + 24) | 0;\n            f = (d + 16) | 0;\n            h = (d + 8) | 0;\n            g = d;\n            c[a >> 2] = 0;\n            c[(a + 4) >> 2] = 0;\n            c[(a + 8) >> 2] = 0;\n            c[(a + 12) >> 2] = 0;\n            c[(a + 16) >> 2] = 0;\n            c[(a + 20) >> 2] = 0;\n            zg(h, b);\n            Ag(g, b);\n            c[f >> 2] = c[h >> 2];\n            c[(f + 4) >> 2] = c[(h + 4) >> 2];\n            c[e >> 2] = c[g >> 2];\n            c[(e + 4) >> 2] = c[(g + 4) >> 2];\n            cg(a, f, e, 0);\n            V = d;\n            return;\n        }\n        function Yf(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0;\n            if (($f(a) | 0) >>> 0 < b >>> 0)\n                cr(a);\n            else {\n                d = eq(b) | 0;\n                c[(a + 4) >> 2] = d;\n                c[a >> 2] = d;\n                c[(a + 8) >> 2] = d + b;\n                return;\n            }\n        }\n        function Zf(a, b, d, e) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            var f = 0, g = 0;\n            g = V;\n            V = (V + 16) | 0;\n            f = g;\n            ag(f, a, e);\n            e = (f + 4) | 0;\n            a = (d - b) | 0;\n            if ((a | 0) > 0) {\n                ur(c[e >> 2] | 0, b | 0, a | 0) | 0;\n                c[e >> 2] = (c[e >> 2] | 0) + a;\n            }\n            bg(f);\n            V = g;\n            return;\n        }\n        function _f(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            b = c[a >> 2] | 0;\n            d = b;\n            if (b | 0) {\n                c[(a + 4) >> 2] = d;\n                Da(b, ((c[(a + 8) >> 2] | 0) - d) | 0);\n            }\n            return;\n        }\n        function $f(a) {\n            a = a | 0;\n            return 2147483647;\n        }\n        function ag(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            c[a >> 2] = b;\n            b = c[(b + 4) >> 2] | 0;\n            c[(a + 4) >> 2] = b;\n            c[(a + 8) >> 2] = b + d;\n            return;\n        }\n        function bg(a) {\n            a = a | 0;\n            c[((c[a >> 2] | 0) + 4) >> 2] = c[(a + 4) >> 2];\n            return;\n        }\n        function cg(a, b, d, e) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            var f = 0, g = 0, h = 0, i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0, p = 0, q = 0;\n            q = V;\n            V = (V + 96) | 0;\n            p = (q + 80) | 0;\n            m = (q + 64) | 0;\n            j = (q + 48) | 0;\n            k = (q + 40) | 0;\n            l = (q + 8) | 0;\n            i = q;\n            n = (q + 32) | 0;\n            o = (q + 16) | 0;\n            h = b;\n            g = c[h >> 2] | 0;\n            h = c[(h + 4) >> 2] | 0;\n            f = d;\n            d = c[f >> 2] | 0;\n            f = c[(f + 4) >> 2] | 0;\n            e = g;\n            if ((f | 0) == (h | 0))\n                h = 0;\n            else\n                h =\n                    (((((f - (c[d >> 2] | 0)) | 0) / 44) | 0) +\n                        ((((d - g) >> 2) * 93) | 0) +\n                        ((((h - (c[g >> 2] | 0)) | 0) / -44) | 0)) |\n                        0;\n            d = ((c[(a + 8) >> 2] | 0) - (c[(a + 4) >> 2] | 0)) | 0;\n            d =\n                (((d | 0) == 0 ? 0 : ((((d >> 2) * 93) | 0) + -1) | 0) -\n                    ((c[(a + 20) >> 2] | 0) + (c[(a + 16) >> 2] | 0))) |\n                    0;\n            if (h >>> 0 > d >>> 0)\n                eg(a, (h - d) | 0);\n            fg(k, a);\n            fg(i, a);\n            f = i;\n            d = c[f >> 2] | 0;\n            f = c[(f + 4) >> 2] | 0;\n            g = l;\n            c[g >> 2] = d;\n            c[(g + 4) >> 2] = f;\n            g = d;\n            if (h | 0) {\n                d = (((((f - (c[d >> 2] | 0)) | 0) / 44) | 0) + h) | 0;\n                if ((d | 0) > 0) {\n                    i = ((d >>> 0) / 93) | 0;\n                    h = (g + (i << 2)) | 0;\n                    c[l >> 2] = h;\n                    d = ((c[h >> 2] | 0) + ((((d - ((i * 93) | 0)) | 0) * 44) | 0)) | 0;\n                }\n                else {\n                    d = (92 - d) | 0;\n                    i = (g + ((((d | 0) / -93) | 0) << 2)) | 0;\n                    c[l >> 2] = i;\n                    d = ((c[i >> 2] | 0) + ((((92 - ((d | 0) % 93 | 0)) | 0) * 44) | 0)) | 0;\n                }\n                c[(l + 4) >> 2] = d;\n            }\n            c[m >> 2] = c[k >> 2];\n            c[(m + 4) >> 2] = c[(k + 4) >> 2];\n            c[p >> 2] = c[l >> 2];\n            c[(p + 4) >> 2] = c[(l + 4) >> 2];\n            gg(j, m, p);\n            hg(p, j);\n            ig(m, j);\n            if (jg(p, m) | 0) {\n                g = (o + 4) | 0;\n                h = (b + 4) | 0;\n                do {\n                    kg(n, p);\n                    lg(o, a, n);\n                    d = c[o >> 2] | 0;\n                    if ((d | 0) != (c[g >> 2] | 0)) {\n                        f = c[h >> 2] | 0;\n                        do {\n                            Wc(d, f);\n                            d = ((c[o >> 2] | 0) + 44) | 0;\n                            c[o >> 2] = d;\n                            f = (f + 44) | 0;\n                            c[h >> 2] = f;\n                            if (((f - (c[e >> 2] | 0)) | 0) == 4092) {\n                                e = (e + 4) | 0;\n                                c[b >> 2] = e;\n                                f = c[e >> 2] | 0;\n                                c[h >> 2] = f;\n                            }\n                        } while ((d | 0) != (c[g >> 2] | 0));\n                    }\n                    mg(o);\n                    ng(p) | 0;\n                } while (jg(p, m) | 0);\n            }\n            V = q;\n            return;\n        }\n        function dg(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0;\n            b = c[(a + 4) >> 2] | 0;\n            d = (a + 8) | 0;\n            e = c[d >> 2] | 0;\n            if ((e | 0) != (b | 0))\n                c[d >> 2] = e + (~(((e + -4 - b) | 0) >>> 2) << 2);\n            b = c[a >> 2] | 0;\n            if (b | 0)\n                Da(b, ((c[(a + 12) >> 2] | 0) - b) | 0);\n            return;\n        }\n        function eg(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0, p = 0, r = 0, s = 0, t = 0, u = 0, v = 0, w = 0, x = 0, y = 0, z = 0, A = 0, B = 0, C = 0;\n            B = V;\n            V = (V + 64) | 0;\n            v = (B + 52) | 0;\n            u = (B + 48) | 0;\n            w = (B + 28) | 0;\n            x = (B + 24) | 0;\n            y = (B + 20) | 0;\n            p = B;\n            z = (a + 8) | 0;\n            d = c[z >> 2] | 0;\n            A = (a + 4) | 0;\n            j = c[A >> 2] | 0;\n            s = ((((d | 0) == (j | 0)) & 1) + b) | 0;\n            h = ((s >>> 0) / 93) | 0;\n            h = (h + ((((s - ((h * 93) | 0)) | 0) != 0) & 1)) | 0;\n            s = (a + 16) | 0;\n            e = c[s >> 2] | 0;\n            i = ((e >>> 0) / 93) | 0;\n            r = h >>> 0 < i >>> 0 ? h : i;\n            b = (h - r) | 0;\n            g = d;\n            a: do\n                if (!b) {\n                    c[s >> 2] = (q(r, -93) | 0) + e;\n                    if (r | 0) {\n                        i = (a + 12) | 0;\n                        k = (a + 12) | 0;\n                        l = (w + 4) | 0;\n                        m = (w + 8) | 0;\n                        n = (w + 12) | 0;\n                        b = r;\n                        e = j;\n                        while (1) {\n                            h = c[e >> 2] | 0;\n                            g = (e + 4) | 0;\n                            c[A >> 2] = g;\n                            t = c[i >> 2] | 0;\n                            e = t;\n                            do\n                                if ((d | 0) == (t | 0)) {\n                                    t = c[a >> 2] | 0;\n                                    d = t;\n                                    if (g >>> 0 <= t >>> 0) {\n                                        d = (e - d) | 0;\n                                        d = (d | 0) == 0 ? 1 : d >> 1;\n                                        qg(w, d, d >>> 2, k);\n                                        c[x >> 2] = c[A >> 2];\n                                        c[y >> 2] = c[z >> 2];\n                                        c[u >> 2] = c[x >> 2];\n                                        c[v >> 2] = c[y >> 2];\n                                        ug(w, u, v);\n                                        d = c[a >> 2] | 0;\n                                        c[a >> 2] = c[w >> 2];\n                                        c[w >> 2] = d;\n                                        d = c[A >> 2] | 0;\n                                        c[A >> 2] = c[l >> 2];\n                                        c[l >> 2] = d;\n                                        d = c[z >> 2] | 0;\n                                        c[z >> 2] = c[m >> 2];\n                                        c[m >> 2] = d;\n                                        d = c[i >> 2] | 0;\n                                        c[i >> 2] = c[n >> 2];\n                                        c[n >> 2] = d;\n                                        tg(w);\n                                        d = c[z >> 2] | 0;\n                                        break;\n                                    }\n                                    t = g;\n                                    d = (((((t - d) >> 2) + 1) | 0) / -2) | 0;\n                                    f = (g + (d << 2)) | 0;\n                                    e = (e - t) | 0;\n                                    if (!e)\n                                        d = f;\n                                    else {\n                                        vr(f | 0, g | 0, e | 0) | 0;\n                                        d = ((c[A >> 2] | 0) + (d << 2)) | 0;\n                                    }\n                                    t = (f + ((e >> 2) << 2)) | 0;\n                                    c[z >> 2] = t;\n                                    c[A >> 2] = d;\n                                    d = t;\n                                }\n                            while (0);\n                            c[d >> 2] = h;\n                            d = ((c[z >> 2] | 0) + 4) | 0;\n                            c[z >> 2] = d;\n                            b = (b + -1) | 0;\n                            if (!b)\n                                break a;\n                            e = c[A >> 2] | 0;\n                        }\n                    }\n                }\n                else {\n                    t = (a + 12) | 0;\n                    e = c[t >> 2] | 0;\n                    f = (e - (c[a >> 2] | 0)) | 0;\n                    d = (g - j) >> 2;\n                    if (b >>> 0 > (((f >> 2) - d) | 0) >>> 0) {\n                        o = f >> 1;\n                        n = (d + b) | 0;\n                        qg(p, o >>> 0 < n >>> 0 ? n : o, (d - r) | 0, (a + 12) | 0);\n                        do {\n                            c[v >> 2] = eq(4092) | 0;\n                            rg(p, v);\n                            b = (b + -1) | 0;\n                        } while ((b | 0) != 0);\n                        if (!r)\n                            d = c[A >> 2] | 0;\n                        else {\n                            i = (p + 8) | 0;\n                            j = (p + 12) | 0;\n                            k = (p + 4) | 0;\n                            l = (p + 16) | 0;\n                            m = (w + 4) | 0;\n                            n = (w + 8) | 0;\n                            o = (w + 12) | 0;\n                            h = r;\n                            b = c[i >> 2] | 0;\n                            d = c[A >> 2] | 0;\n                            do {\n                                g = c[j >> 2] | 0;\n                                e = g;\n                                do\n                                    if ((b | 0) == (g | 0)) {\n                                        f = c[k >> 2] | 0;\n                                        g = c[p >> 2] | 0;\n                                        b = g;\n                                        if (f >>> 0 <= g >>> 0) {\n                                            b = (e - b) | 0;\n                                            b = (b | 0) == 0 ? 1 : b >> 1;\n                                            qg(w, b, b >>> 2, c[l >> 2] | 0);\n                                            c[x >> 2] = c[k >> 2];\n                                            c[y >> 2] = c[i >> 2];\n                                            c[u >> 2] = c[x >> 2];\n                                            c[v >> 2] = c[y >> 2];\n                                            ug(w, u, v);\n                                            b = c[p >> 2] | 0;\n                                            c[p >> 2] = c[w >> 2];\n                                            c[w >> 2] = b;\n                                            b = c[k >> 2] | 0;\n                                            c[k >> 2] = c[m >> 2];\n                                            c[m >> 2] = b;\n                                            b = c[i >> 2] | 0;\n                                            c[i >> 2] = c[n >> 2];\n                                            c[n >> 2] = b;\n                                            b = c[j >> 2] | 0;\n                                            c[j >> 2] = c[o >> 2];\n                                            c[o >> 2] = b;\n                                            tg(w);\n                                            b = c[i >> 2] | 0;\n                                            break;\n                                        }\n                                        C = f;\n                                        b = (((((C - b) >> 2) + 1) | 0) / -2) | 0;\n                                        g = (f + (b << 2)) | 0;\n                                        e = (e - C) | 0;\n                                        if (!e)\n                                            b = g;\n                                        else {\n                                            vr(g | 0, f | 0, e | 0) | 0;\n                                            b = ((c[k >> 2] | 0) + (b << 2)) | 0;\n                                        }\n                                        C = (g + ((e >> 2) << 2)) | 0;\n                                        c[i >> 2] = C;\n                                        c[k >> 2] = b;\n                                        b = C;\n                                    }\n                                while (0);\n                                c[b >> 2] = c[d >> 2];\n                                b = ((c[i >> 2] | 0) + 4) | 0;\n                                c[i >> 2] = b;\n                                d = ((c[A >> 2] | 0) + 4) | 0;\n                                c[A >> 2] = d;\n                                h = (h + -1) | 0;\n                            } while ((h | 0) != 0);\n                        }\n                        b = c[z >> 2] | 0;\n                        if ((b | 0) != (d | 0)) {\n                            do {\n                                b = (b + -4) | 0;\n                                sg(p, b);\n                                d = c[A >> 2] | 0;\n                            } while ((b | 0) != (d | 0));\n                            b = c[z >> 2] | 0;\n                        }\n                        C = c[a >> 2] | 0;\n                        c[a >> 2] = c[p >> 2];\n                        c[p >> 2] = C;\n                        C = (p + 4) | 0;\n                        c[A >> 2] = c[C >> 2];\n                        c[C >> 2] = d;\n                        C = (p + 8) | 0;\n                        c[z >> 2] = c[C >> 2];\n                        c[C >> 2] = b;\n                        C = (p + 12) | 0;\n                        A = c[t >> 2] | 0;\n                        c[t >> 2] = c[C >> 2];\n                        c[C >> 2] = A;\n                        c[s >> 2] = (c[s >> 2] | 0) + (q(r, -93) | 0);\n                        tg(p);\n                        break;\n                    }\n                    else {\n                        b: do\n                            if ((e | 0) == (g | 0))\n                                k = 18;\n                            else {\n                                while (1) {\n                                    c[v >> 2] = eq(4092) | 0;\n                                    og(a, v);\n                                    b = (b + -1) | 0;\n                                    if (!b)\n                                        break;\n                                    if ((c[t >> 2] | 0) == (c[z >> 2] | 0)) {\n                                        k = 18;\n                                        break b;\n                                    }\n                                }\n                                d = r;\n                                b = c[s >> 2] | 0;\n                            }\n                        while (0);\n                        if ((k | 0) == 18) {\n                            e = ~(h >>> 0 > i >>> 0 ? i : h);\n                            d = b;\n                            do {\n                                c[v >> 2] = eq(4092) | 0;\n                                pg(a, v);\n                                d = (d + -1) | 0;\n                                f =\n                                    (((((c[z >> 2] | 0) - (c[A >> 2] | 0)) | 0) == 4 ? 92 : 93) + (c[s >> 2] | 0)) |\n                                        0;\n                                c[s >> 2] = f;\n                            } while ((d | 0) != 0);\n                            d = (b + -1 - e) | 0;\n                            b = f;\n                        }\n                        c[s >> 2] = b + (q(d, -93) | 0);\n                        if (!d)\n                            break;\n                        i = (a + 12) | 0;\n                        j = (w + 4) | 0;\n                        k = (w + 8) | 0;\n                        l = (w + 12) | 0;\n                        b = c[z >> 2] | 0;\n                        do {\n                            g = c[A >> 2] | 0;\n                            h = c[g >> 2] | 0;\n                            g = (g + 4) | 0;\n                            c[A >> 2] = g;\n                            C = c[t >> 2] | 0;\n                            e = C;\n                            do\n                                if ((b | 0) == (C | 0)) {\n                                    C = c[a >> 2] | 0;\n                                    b = C;\n                                    if (g >>> 0 <= C >>> 0) {\n                                        b = (e - b) | 0;\n                                        b = (b | 0) == 0 ? 1 : b >> 1;\n                                        qg(w, b, b >>> 2, i);\n                                        c[x >> 2] = c[A >> 2];\n                                        c[y >> 2] = c[z >> 2];\n                                        c[u >> 2] = c[x >> 2];\n                                        c[v >> 2] = c[y >> 2];\n                                        ug(w, u, v);\n                                        b = c[a >> 2] | 0;\n                                        c[a >> 2] = c[w >> 2];\n                                        c[w >> 2] = b;\n                                        b = c[A >> 2] | 0;\n                                        c[A >> 2] = c[j >> 2];\n                                        c[j >> 2] = b;\n                                        b = c[z >> 2] | 0;\n                                        c[z >> 2] = c[k >> 2];\n                                        c[k >> 2] = b;\n                                        b = c[t >> 2] | 0;\n                                        c[t >> 2] = c[l >> 2];\n                                        c[l >> 2] = b;\n                                        tg(w);\n                                        b = c[z >> 2] | 0;\n                                        break;\n                                    }\n                                    C = g;\n                                    b = (((((C - b) >> 2) + 1) | 0) / -2) | 0;\n                                    f = (g + (b << 2)) | 0;\n                                    e = (e - C) | 0;\n                                    if (!e)\n                                        b = f;\n                                    else {\n                                        vr(f | 0, g | 0, e | 0) | 0;\n                                        b = ((c[A >> 2] | 0) + (b << 2)) | 0;\n                                    }\n                                    C = (f + ((e >> 2) << 2)) | 0;\n                                    c[z >> 2] = C;\n                                    c[A >> 2] = b;\n                                    b = C;\n                                }\n                            while (0);\n                            c[b >> 2] = h;\n                            b = ((c[z >> 2] | 0) + 4) | 0;\n                            c[z >> 2] = b;\n                            d = (d + -1) | 0;\n                        } while ((d | 0) != 0);\n                    }\n                }\n            while (0);\n            V = B;\n            return;\n        }\n        function fg(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0, f = 0, g = 0;\n            d = ((c[(b + 16) >> 2] | 0) + (c[(b + 20) >> 2] | 0)) | 0;\n            g = c[(b + 4) >> 2] | 0;\n            e = ((d >>> 0) / 93) | 0;\n            f = (g + (e << 2)) | 0;\n            if ((c[(b + 8) >> 2] | 0) == (g | 0))\n                b = 0;\n            else\n                b = ((c[f >> 2] | 0) + ((((d - ((e * 93) | 0)) | 0) * 44) | 0)) | 0;\n            c[a >> 2] = f;\n            c[(a + 4) >> 2] = b;\n            return;\n        }\n        function gg(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0;\n            f = b;\n            b = c[(f + 4) >> 2] | 0;\n            e = a;\n            c[e >> 2] = c[f >> 2];\n            c[(e + 4) >> 2] = b;\n            e = d;\n            b = c[(e + 4) >> 2] | 0;\n            d = (a + 8) | 0;\n            c[d >> 2] = c[e >> 2];\n            c[(d + 4) >> 2] = b;\n            return;\n        }\n        function hg(a, b) {\n            a = a | 0;\n            b = b | 0;\n            c[a >> 2] = c[b >> 2];\n            c[(a + 4) >> 2] = c[(b + 4) >> 2];\n            c[(a + 8) >> 2] = c[(b + 8) >> 2];\n            c[(a + 12) >> 2] = c[(b + 12) >> 2];\n            return;\n        }\n        function ig(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0;\n            d = V;\n            V = (V + 32) | 0;\n            e = (d + 24) | 0;\n            f = (d + 16) | 0;\n            h = (d + 8) | 0;\n            g = d;\n            i = (b + 8) | 0;\n            j = c[i >> 2] | 0;\n            i = c[(i + 4) >> 2] | 0;\n            b = h;\n            c[b >> 2] = j;\n            c[(b + 4) >> 2] = i;\n            b = g;\n            c[b >> 2] = j;\n            c[(b + 4) >> 2] = i;\n            c[f >> 2] = c[h >> 2];\n            c[(f + 4) >> 2] = c[(h + 4) >> 2];\n            c[e >> 2] = c[g >> 2];\n            c[(e + 4) >> 2] = c[(g + 4) >> 2];\n            gg(a, f, e);\n            V = d;\n            return;\n        }\n        function jg(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return ((xg(a, b) | 0) ^ 1) | 0;\n        }\n        function kg(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0;\n            d = c[b >> 2] | 0;\n            e = c[(b + 4) >> 2] | 0;\n            if ((d | 0) == (c[(b + 8) >> 2] | 0))\n                yg(a, e, c[(b + 12) >> 2] | 0);\n            else\n                yg(a, e, ((c[d >> 2] | 0) + 4092) | 0);\n            return;\n        }\n        function lg(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0;\n            e = c[d >> 2] | 0;\n            c[a >> 2] = e;\n            c[(a + 4) >> 2] = c[(d + 4) >> 2];\n            c[(a + 8) >> 2] = e;\n            c[(a + 12) >> 2] = b;\n            return;\n        }\n        function mg(a) {\n            a = a | 0;\n            var b = 0;\n            b = ((c[(a + 12) >> 2] | 0) + 20) | 0;\n            c[b >> 2] = (c[b >> 2] | 0) + (((((c[a >> 2] | 0) - (c[(a + 8) >> 2] | 0)) | 0) / 44) | 0);\n            return;\n        }\n        function ng(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0;\n            b = c[a >> 2] | 0;\n            d = (a + 8) | 0;\n            if ((b | 0) == (c[d >> 2] | 0)) {\n                e = d;\n                b = c[(e + 4) >> 2] | 0;\n                d = a;\n                c[d >> 2] = c[e >> 2];\n                c[(d + 4) >> 2] = b;\n            }\n            else {\n                e = (b + 4) | 0;\n                c[a >> 2] = e;\n                c[(a + 4) >> 2] = c[e >> 2];\n            }\n            return a | 0;\n        }\n        function og(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0, p = 0, q = 0;\n            p = V;\n            V = (V + 48) | 0;\n            f = (p + 32) | 0;\n            e = (p + 28) | 0;\n            i = (p + 8) | 0;\n            j = (p + 4) | 0;\n            k = p;\n            o = (a + 8) | 0;\n            d = c[o >> 2] | 0;\n            l = (a + 12) | 0;\n            n = c[l >> 2] | 0;\n            g = n;\n            do\n                if ((d | 0) == (n | 0)) {\n                    n = (a + 4) | 0;\n                    m = c[n >> 2] | 0;\n                    q = c[a >> 2] | 0;\n                    h = q;\n                    if (m >>> 0 <= q >>> 0) {\n                        d = (g - h) | 0;\n                        d = (d | 0) == 0 ? 1 : d >> 1;\n                        qg(i, d, d >>> 2, (a + 12) | 0);\n                        c[j >> 2] = c[n >> 2];\n                        c[k >> 2] = c[o >> 2];\n                        c[e >> 2] = c[j >> 2];\n                        c[f >> 2] = c[k >> 2];\n                        ug(i, e, f);\n                        d = c[a >> 2] | 0;\n                        c[a >> 2] = c[i >> 2];\n                        c[i >> 2] = d;\n                        d = (i + 4) | 0;\n                        q = c[n >> 2] | 0;\n                        c[n >> 2] = c[d >> 2];\n                        c[d >> 2] = q;\n                        d = (i + 8) | 0;\n                        q = c[o >> 2] | 0;\n                        c[o >> 2] = c[d >> 2];\n                        c[d >> 2] = q;\n                        d = (i + 12) | 0;\n                        q = c[l >> 2] | 0;\n                        c[l >> 2] = c[d >> 2];\n                        c[d >> 2] = q;\n                        tg(i);\n                        d = c[o >> 2] | 0;\n                        break;\n                    }\n                    f = m;\n                    e = (((((f - h) >> 2) + 1) | 0) / -2) | 0;\n                    a = (m + (e << 2)) | 0;\n                    f = (d - f) | 0;\n                    if (!f)\n                        d = a;\n                    else {\n                        vr(a | 0, m | 0, f | 0) | 0;\n                        d = ((c[n >> 2] | 0) + (e << 2)) | 0;\n                    }\n                    q = (a + ((f >> 2) << 2)) | 0;\n                    c[o >> 2] = q;\n                    c[n >> 2] = d;\n                    d = q;\n                }\n            while (0);\n            c[d >> 2] = c[b >> 2];\n            c[o >> 2] = (c[o >> 2] | 0) + 4;\n            V = p;\n            return;\n        }\n        function pg(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0, p = 0, q = 0;\n            p = V;\n            V = (V + 48) | 0;\n            e = (p + 32) | 0;\n            d = (p + 28) | 0;\n            h = (p + 8) | 0;\n            i = (p + 4) | 0;\n            j = p;\n            o = (a + 4) | 0;\n            m = c[o >> 2] | 0;\n            n = c[a >> 2] | 0;\n            k = n;\n            do\n                if ((m | 0) == (n | 0)) {\n                    n = (a + 8) | 0;\n                    l = c[n >> 2] | 0;\n                    g = (a + 12) | 0;\n                    q = c[g >> 2] | 0;\n                    f = q;\n                    if (l >>> 0 >= q >>> 0) {\n                        q = (f - k) | 0;\n                        q = (q | 0) == 0 ? 1 : q >> 1;\n                        qg(h, q, ((q + 3) | 0) >>> 2, (a + 12) | 0);\n                        c[i >> 2] = c[o >> 2];\n                        c[j >> 2] = c[n >> 2];\n                        c[d >> 2] = c[i >> 2];\n                        c[e >> 2] = c[j >> 2];\n                        ug(h, d, e);\n                        d = c[a >> 2] | 0;\n                        c[a >> 2] = c[h >> 2];\n                        c[h >> 2] = d;\n                        d = (h + 4) | 0;\n                        q = c[o >> 2] | 0;\n                        c[o >> 2] = c[d >> 2];\n                        c[d >> 2] = q;\n                        d = (h + 8) | 0;\n                        q = c[n >> 2] | 0;\n                        c[n >> 2] = c[d >> 2];\n                        c[d >> 2] = q;\n                        d = (h + 12) | 0;\n                        q = c[g >> 2] | 0;\n                        c[g >> 2] = c[d >> 2];\n                        c[d >> 2] = q;\n                        tg(h);\n                        d = c[o >> 2] | 0;\n                        break;\n                    }\n                    e = l;\n                    a = (((((f - e) >> 2) + 1) | 0) / 2) | 0;\n                    f = (l + (a << 2)) | 0;\n                    e = (e - m) | 0;\n                    d = (f + ((0 - (e >> 2)) << 2)) | 0;\n                    if (!e) {\n                        d = f;\n                        e = f;\n                    }\n                    else {\n                        vr(d | 0, m | 0, e | 0) | 0;\n                        e = ((c[n >> 2] | 0) + (a << 2)) | 0;\n                    }\n                    c[o >> 2] = d;\n                    c[n >> 2] = e;\n                }\n                else\n                    d = m;\n            while (0);\n            c[(d + -4) >> 2] = c[b >> 2];\n            c[o >> 2] = (c[o >> 2] | 0) + -4;\n            V = p;\n            return;\n        }\n        function qg(a, b, d, e) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            var f = 0;\n            f = (a + 12) | 0;\n            c[f >> 2] = 0;\n            c[(a + 16) >> 2] = e;\n            do\n                if (b)\n                    if (b >>> 0 > 1073741823) {\n                        f = v(8) | 0;\n                        vq(f, 6723);\n                        c[f >> 2] = 5956;\n                        x(f | 0, 3928, 123);\n                    }\n                    else {\n                        e = eq(b << 2) | 0;\n                        break;\n                    }\n                else\n                    e = 0;\n            while (0);\n            c[a >> 2] = e;\n            d = (e + (d << 2)) | 0;\n            c[(a + 8) >> 2] = d;\n            c[(a + 4) >> 2] = d;\n            c[f >> 2] = e + (b << 2);\n            return;\n        }\n        function rg(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0, p = 0, q = 0;\n            p = V;\n            V = (V + 48) | 0;\n            f = (p + 32) | 0;\n            e = (p + 28) | 0;\n            i = (p + 8) | 0;\n            j = (p + 4) | 0;\n            k = p;\n            o = (a + 8) | 0;\n            d = c[o >> 2] | 0;\n            l = (a + 12) | 0;\n            n = c[l >> 2] | 0;\n            g = n;\n            do\n                if ((d | 0) == (n | 0)) {\n                    n = (a + 4) | 0;\n                    m = c[n >> 2] | 0;\n                    q = c[a >> 2] | 0;\n                    h = q;\n                    if (m >>> 0 <= q >>> 0) {\n                        d = (g - h) | 0;\n                        d = (d | 0) == 0 ? 1 : d >> 1;\n                        qg(i, d, d >>> 2, c[(a + 16) >> 2] | 0);\n                        c[j >> 2] = c[n >> 2];\n                        c[k >> 2] = c[o >> 2];\n                        c[e >> 2] = c[j >> 2];\n                        c[f >> 2] = c[k >> 2];\n                        ug(i, e, f);\n                        d = c[a >> 2] | 0;\n                        c[a >> 2] = c[i >> 2];\n                        c[i >> 2] = d;\n                        d = (i + 4) | 0;\n                        q = c[n >> 2] | 0;\n                        c[n >> 2] = c[d >> 2];\n                        c[d >> 2] = q;\n                        d = (i + 8) | 0;\n                        q = c[o >> 2] | 0;\n                        c[o >> 2] = c[d >> 2];\n                        c[d >> 2] = q;\n                        d = (i + 12) | 0;\n                        q = c[l >> 2] | 0;\n                        c[l >> 2] = c[d >> 2];\n                        c[d >> 2] = q;\n                        tg(i);\n                        d = c[o >> 2] | 0;\n                        break;\n                    }\n                    f = m;\n                    e = (((((f - h) >> 2) + 1) | 0) / -2) | 0;\n                    a = (m + (e << 2)) | 0;\n                    f = (d - f) | 0;\n                    if (!f)\n                        d = a;\n                    else {\n                        vr(a | 0, m | 0, f | 0) | 0;\n                        d = ((c[n >> 2] | 0) + (e << 2)) | 0;\n                    }\n                    q = (a + ((f >> 2) << 2)) | 0;\n                    c[o >> 2] = q;\n                    c[n >> 2] = d;\n                    d = q;\n                }\n            while (0);\n            c[d >> 2] = c[b >> 2];\n            c[o >> 2] = (c[o >> 2] | 0) + 4;\n            V = p;\n            return;\n        }\n        function sg(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0, p = 0, q = 0;\n            p = V;\n            V = (V + 48) | 0;\n            e = (p + 32) | 0;\n            d = (p + 28) | 0;\n            h = (p + 8) | 0;\n            i = (p + 4) | 0;\n            j = p;\n            o = (a + 4) | 0;\n            m = c[o >> 2] | 0;\n            n = c[a >> 2] | 0;\n            k = n;\n            do\n                if ((m | 0) == (n | 0)) {\n                    n = (a + 8) | 0;\n                    l = c[n >> 2] | 0;\n                    g = (a + 12) | 0;\n                    q = c[g >> 2] | 0;\n                    f = q;\n                    if (l >>> 0 >= q >>> 0) {\n                        q = (f - k) | 0;\n                        q = (q | 0) == 0 ? 1 : q >> 1;\n                        qg(h, q, ((q + 3) | 0) >>> 2, c[(a + 16) >> 2] | 0);\n                        c[i >> 2] = c[o >> 2];\n                        c[j >> 2] = c[n >> 2];\n                        c[d >> 2] = c[i >> 2];\n                        c[e >> 2] = c[j >> 2];\n                        ug(h, d, e);\n                        d = c[a >> 2] | 0;\n                        c[a >> 2] = c[h >> 2];\n                        c[h >> 2] = d;\n                        d = (h + 4) | 0;\n                        q = c[o >> 2] | 0;\n                        c[o >> 2] = c[d >> 2];\n                        c[d >> 2] = q;\n                        d = (h + 8) | 0;\n                        q = c[n >> 2] | 0;\n                        c[n >> 2] = c[d >> 2];\n                        c[d >> 2] = q;\n                        d = (h + 12) | 0;\n                        q = c[g >> 2] | 0;\n                        c[g >> 2] = c[d >> 2];\n                        c[d >> 2] = q;\n                        tg(h);\n                        d = c[o >> 2] | 0;\n                        break;\n                    }\n                    e = l;\n                    a = (((((f - e) >> 2) + 1) | 0) / 2) | 0;\n                    f = (l + (a << 2)) | 0;\n                    e = (e - m) | 0;\n                    d = (f + ((0 - (e >> 2)) << 2)) | 0;\n                    if (!e) {\n                        d = f;\n                        e = f;\n                    }\n                    else {\n                        vr(d | 0, m | 0, e | 0) | 0;\n                        e = ((c[n >> 2] | 0) + (a << 2)) | 0;\n                    }\n                    c[o >> 2] = d;\n                    c[n >> 2] = e;\n                }\n                else\n                    d = m;\n            while (0);\n            c[(d + -4) >> 2] = c[b >> 2];\n            c[o >> 2] = (c[o >> 2] | 0) + -4;\n            V = p;\n            return;\n        }\n        function tg(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0;\n            b = c[(a + 4) >> 2] | 0;\n            d = (a + 8) | 0;\n            e = c[d >> 2] | 0;\n            if ((e | 0) != (b | 0))\n                c[d >> 2] = e + (~(((e + -4 - b) | 0) >>> 2) << 2);\n            b = c[a >> 2] | 0;\n            if (b | 0)\n                Da(b, ((c[(a + 12) >> 2] | 0) - b) | 0);\n            return;\n        }\n        function ug(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0, g = 0, h = 0;\n            h = V;\n            V = (V + 16) | 0;\n            g = h;\n            f = c[b >> 2] | 0;\n            vg(g, (a + 8) | 0, ((c[d >> 2] | 0) - f) >> 2);\n            a = c[g >> 2] | 0;\n            e = (g + 4) | 0;\n            if ((a | 0) != (c[e >> 2] | 0)) {\n                d = f;\n                do {\n                    c[a >> 2] = c[d >> 2];\n                    a = ((c[g >> 2] | 0) + 4) | 0;\n                    c[g >> 2] = a;\n                    d = (d + 4) | 0;\n                } while ((a | 0) != (c[e >> 2] | 0));\n                c[b >> 2] = d;\n            }\n            wg(g);\n            V = h;\n            return;\n        }\n        function vg(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            c[a >> 2] = c[b >> 2];\n            c[(a + 4) >> 2] = (c[b >> 2] | 0) + (d << 2);\n            c[(a + 8) >> 2] = b;\n            return;\n        }\n        function wg(a) {\n            a = a | 0;\n            c[c[(a + 8) >> 2] >> 2] = c[a >> 2];\n            return;\n        }\n        function xg(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return ((c[(a + 4) >> 2] | 0) == (c[(b + 4) >> 2] | 0)) | 0;\n        }\n        function yg(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            c[a >> 2] = b;\n            c[(a + 4) >> 2] = d;\n            return;\n        }\n        function zg(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0, f = 0, g = 0;\n            g = c[(b + 4) >> 2] | 0;\n            d = c[(b + 16) >> 2] | 0;\n            e = ((d >>> 0) / 93) | 0;\n            f = (g + (e << 2)) | 0;\n            if ((c[(b + 8) >> 2] | 0) == (g | 0))\n                b = 0;\n            else\n                b = ((c[f >> 2] | 0) + ((((d - ((e * 93) | 0)) | 0) * 44) | 0)) | 0;\n            c[a >> 2] = f;\n            c[(a + 4) >> 2] = b;\n            return;\n        }\n        function Ag(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0, f = 0, g = 0;\n            d = ((c[(b + 16) >> 2] | 0) + (c[(b + 20) >> 2] | 0)) | 0;\n            g = c[(b + 4) >> 2] | 0;\n            e = ((d >>> 0) / 93) | 0;\n            f = (g + (e << 2)) | 0;\n            if ((c[(b + 8) >> 2] | 0) == (g | 0))\n                b = 0;\n            else\n                b = ((c[f >> 2] | 0) + ((((d - ((e * 93) | 0)) | 0) * 44) | 0)) | 0;\n            c[a >> 2] = f;\n            c[(a + 4) >> 2] = b;\n            return;\n        }\n        function Bg(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0, f = 0, g = 0, h = 0, i = 0;\n            i = V;\n            V = (V + 16) | 0;\n            e = (i + 8) | 0;\n            g = i;\n            Cg(e, a);\n            fg(g, a);\n            f = (e + 4) | 0;\n            b = c[f >> 2] | 0;\n            g = (g + 4) | 0;\n            if ((b | 0) != (c[g >> 2] | 0))\n                do {\n                    Ic(b);\n                    b = ((c[f >> 2] | 0) + 44) | 0;\n                    c[f >> 2] = b;\n                    d = c[e >> 2] | 0;\n                    if (((b - (c[d >> 2] | 0)) | 0) == 4092) {\n                        b = (d + 4) | 0;\n                        c[e >> 2] = b;\n                        b = c[b >> 2] | 0;\n                        c[f >> 2] = b;\n                    }\n                } while ((b | 0) != (c[g >> 2] | 0));\n            c[(a + 20) >> 2] = 0;\n            f = (a + 8) | 0;\n            e = (a + 4) | 0;\n            d = c[e >> 2] | 0;\n            b = ((c[f >> 2] | 0) - d) >> 2;\n            if (b >>> 0 > 2)\n                do {\n                    Da(c[d >> 2] | 0, 4092);\n                    d = ((c[e >> 2] | 0) + 4) | 0;\n                    c[e >> 2] = d;\n                    b = ((c[f >> 2] | 0) - d) >> 2;\n                } while (b >>> 0 > 2);\n            switch (b | 0) {\n                case 1: {\n                    b = 46;\n                    h = 11;\n                    break;\n                }\n                case 2: {\n                    b = 93;\n                    h = 11;\n                    break;\n                }\n                default: {\n                }\n            }\n            if ((h | 0) == 11)\n                c[(a + 16) >> 2] = b;\n            V = i;\n            return;\n        }\n        function Cg(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0, f = 0, g = 0;\n            g = c[(b + 4) >> 2] | 0;\n            d = c[(b + 16) >> 2] | 0;\n            e = ((d >>> 0) / 93) | 0;\n            f = (g + (e << 2)) | 0;\n            if ((c[(b + 8) >> 2] | 0) == (g | 0))\n                b = 0;\n            else\n                b = ((c[f >> 2] | 0) + ((((d - ((e * 93) | 0)) | 0) * 44) | 0)) | 0;\n            c[a >> 2] = f;\n            c[(a + 4) >> 2] = b;\n            return;\n        }\n        function Dg(b, e, f) {\n            b = b | 0;\n            e = e | 0;\n            f = f | 0;\n            var g = 0, h = 0, i = 0, j = 0, k = 0, l = 0, m = 0;\n            m = V;\n            V = (V + 16) | 0;\n            l = m;\n            j = (b + 4) | 0;\n            if (!(a[j >> 0] | 0)) {\n                l = De(e) | 0;\n                Ee(l, f, c[b >> 2] | 0);\n                l = c[b >> 2] | 0;\n                i = (f + l) | 0;\n                if (!l)\n                    g = 0;\n                else {\n                    g = f;\n                    h = c[(b + 8) >> 2] | 0;\n                    while (1) {\n                        a[h >> 0] = a[g >> 0] | 0;\n                        g = (g + 1) | 0;\n                        if ((g | 0) == (i | 0))\n                            break;\n                        else\n                            h = (h + 1) | 0;\n                    }\n                    g = c[b >> 2] | 0;\n                }\n                a[j >> 0] = 1;\n                f = (f + g) | 0;\n            }\n            else {\n                h = c[(b + 20) >> 2] | 0;\n                g = c[(b + 8) >> 2] | 0;\n                Cg(l, (b + 32) | 0);\n                b = (b + 12) | 0;\n                if ((g | 0) != (c[b >> 2] | 0)) {\n                    k = (l + 4) | 0;\n                    j = g;\n                    i = h;\n                    g = c[k >> 2] | 0;\n                    while (1) {\n                        h = d[j >> 0] | 0;\n                        h = Eg(((Zc(e, g) | 0) + h) | 0) | 0;\n                        a[i >> 0] = h;\n                        a[f >> 0] = h;\n                        a[j >> 0] = h;\n                        j = (j + 1) | 0;\n                        f = (f + 1) | 0;\n                        h = c[l >> 2] | 0;\n                        g = ((c[k >> 2] | 0) + 44) | 0;\n                        c[k >> 2] = g;\n                        if (((g - (c[h >> 2] | 0)) | 0) == 4092) {\n                            g = (h + 4) | 0;\n                            c[l >> 2] = g;\n                            g = c[g >> 2] | 0;\n                            c[k >> 2] = g;\n                        }\n                        if ((j | 0) == (c[b >> 2] | 0))\n                            break;\n                        else\n                            i = (i + 1) | 0;\n                    }\n                }\n            }\n            V = m;\n            return f | 0;\n        }\n        function Eg(a) {\n            a = a | 0;\n            return (a & 255) | 0;\n        }\n        function Fg(a) {\n            a = a | 0;\n            pq(a);\n            jp(a);\n            return;\n        }\n        function Gg(a) {\n            a = a | 0;\n            a = c[(a + 12) >> 2] | 0;\n            if (a | 0)\n                ca[c[((c[a >> 2] | 0) + 4) >> 2] & 255](a);\n            return;\n        }\n        function Hg(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return ((c[(b + 4) >> 2] | 0) == 11262 ? (a + 12) | 0 : 0) | 0;\n        }\n        function Ig(a) {\n            a = a | 0;\n            Da(a, 16);\n            return;\n        }\n        function Jg(a, b) {\n            a = a | 0;\n            b = b | 0;\n            c[a >> 2] = 0;\n            c[(a + 4) >> 2] = 0;\n            c[(a + 8) >> 2] = 0;\n            if (b | 0) {\n                Yf(a, b);\n                Lg(a, b);\n            }\n            return;\n        }\n        function Kg(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            c[a >> 2] = 0;\n            c[(a + 4) >> 2] = 0;\n            c[(a + 8) >> 2] = 0;\n            c[(a + 12) >> 2] = 0;\n            c[(a + 16) >> 2] = 0;\n            c[(a + 20) >> 2] = 0;\n            if (b | 0)\n                Mg(a, b, d);\n            return;\n        }\n        function Lg(b, d) {\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0, g = 0;\n            g = V;\n            V = (V + 16) | 0;\n            f = g;\n            ag(f, b, d);\n            d = (f + 4) | 0;\n            b = c[d >> 2] | 0;\n            e = (f + 8) | 0;\n            if ((b | 0) != (c[e >> 2] | 0))\n                do {\n                    a[b >> 0] = 0;\n                    b = ((c[d >> 2] | 0) + 1) | 0;\n                    c[d >> 2] = b;\n                } while ((b | 0) != (c[e >> 2] | 0));\n            bg(f);\n            V = g;\n            return;\n        }\n        function Mg(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0;\n            o = V;\n            V = (V + 96) | 0;\n            n = (o + 80) | 0;\n            k = (o + 64) | 0;\n            h = (o + 48) | 0;\n            i = (o + 40) | 0;\n            j = (o + 8) | 0;\n            f = o;\n            l = (o + 32) | 0;\n            m = (o + 16) | 0;\n            e = ((c[(a + 8) >> 2] | 0) - (c[(a + 4) >> 2] | 0)) | 0;\n            e =\n                (((e | 0) == 0 ? 0 : ((((e >> 2) * 93) | 0) + -1) | 0) -\n                    ((c[(a + 20) >> 2] | 0) + (c[(a + 16) >> 2] | 0))) |\n                    0;\n            if (e >>> 0 < b >>> 0)\n                eg(a, (b - e) | 0);\n            fg(i, a);\n            fg(f, a);\n            e = c[f >> 2] | 0;\n            f = c[(f + 4) >> 2] | 0;\n            g = j;\n            c[g >> 2] = e;\n            c[(g + 4) >> 2] = f;\n            g = e;\n            if (b | 0) {\n                e = (((((f - (c[e >> 2] | 0)) | 0) / 44) | 0) + b) | 0;\n                if ((e | 0) > 0) {\n                    b = ((e >>> 0) / 93) | 0;\n                    g = (g + (b << 2)) | 0;\n                    c[j >> 2] = g;\n                    e = ((c[g >> 2] | 0) + ((((e - ((b * 93) | 0)) | 0) * 44) | 0)) | 0;\n                }\n                else {\n                    e = (92 - e) | 0;\n                    b = (g + ((((e | 0) / -93) | 0) << 2)) | 0;\n                    c[j >> 2] = b;\n                    e = ((c[b >> 2] | 0) + ((((92 - ((e | 0) % 93 | 0)) | 0) * 44) | 0)) | 0;\n                }\n                c[(j + 4) >> 2] = e;\n            }\n            c[k >> 2] = c[i >> 2];\n            c[(k + 4) >> 2] = c[(i + 4) >> 2];\n            c[n >> 2] = c[j >> 2];\n            c[(n + 4) >> 2] = c[(j + 4) >> 2];\n            gg(h, k, n);\n            hg(n, h);\n            ig(k, h);\n            if (jg(n, k) | 0) {\n                f = (m + 4) | 0;\n                do {\n                    kg(l, n);\n                    lg(m, a, l);\n                    e = c[m >> 2] | 0;\n                    if ((e | 0) != (c[f >> 2] | 0))\n                        do {\n                            Wc(e, d);\n                            e = ((c[m >> 2] | 0) + 44) | 0;\n                            c[m >> 2] = e;\n                        } while ((e | 0) != (c[f >> 2] | 0));\n                    mg(m);\n                    ng(n) | 0;\n                } while (jg(n, k) | 0);\n            }\n            V = o;\n            return;\n        }\n        function Ng(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            Bg(a);\n            b = c[(a + 4) >> 2] | 0;\n            d = c[(a + 8) >> 2] | 0;\n            if ((b | 0) != (d | 0))\n                do {\n                    Da(c[b >> 2] | 0, 4092);\n                    b = (b + 4) | 0;\n                } while ((b | 0) != (d | 0));\n            dg(a);\n            return;\n        }\n        function Og(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            Md(a);\n            c[a >> 2] = 4924;\n            c[(a + 4) >> 2] = b;\n            c[(a + 8) >> 2] = d;\n            return;\n        }\n        function Pg(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0;\n            d = V;\n            V = (V + 16) | 0;\n            e = d;\n            c[a >> 2] = b;\n            f = eq(16) | 0;\n            c[(f + 4) >> 2] = 0;\n            c[(f + 8) >> 2] = 0;\n            c[f >> 2] = 4944;\n            c[(f + 12) >> 2] = b;\n            c[(a + 4) >> 2] = f;\n            c[e >> 2] = b;\n            c[(e + 4) >> 2] = b;\n            Wg(a, e);\n            V = d;\n            return;\n        }\n        function Qg(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return Tg(c[(a + 8) >> 2] | 0, c[(a + 4) >> 2] | 0, b) | 0;\n        }\n        function Rg(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            c[a >> 2] = 4924;\n            d = (a + 8) | 0;\n            b = c[d >> 2] | 0;\n            c[d >> 2] = 0;\n            if (b | 0) {\n                Vg(b);\n                jp(b);\n            }\n            Qd(a);\n            return;\n        }\n        function Sg(a) {\n            a = a | 0;\n            Rg(a);\n            jp(a);\n            return;\n        }\n        function Tg(a, b, c) {\n            a = a | 0;\n            b = b | 0;\n            c = c | 0;\n            return Ug((a + 4784) | 0, b, Be(a, b, c) | 0) | 0;\n        }\n        function Ug(b, c, d) {\n            b = b | 0;\n            c = c | 0;\n            d = d | 0;\n            if (a[b >> 0] | 0) {\n                nc(c);\n                a[b >> 0] = 0;\n            }\n            return d | 0;\n        }\n        function Vg(a) {\n            a = a | 0;\n            ze(a);\n            return;\n        }\n        function Wg(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return;\n        }\n        function Xg(a) {\n            a = a | 0;\n            pq(a);\n            jp(a);\n            return;\n        }\n        function Yg(a) {\n            a = a | 0;\n            a = c[(a + 12) >> 2] | 0;\n            if (a | 0)\n                ca[c[((c[a >> 2] | 0) + 8) >> 2] & 255](a);\n            return;\n        }\n        function Zg(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return ((c[(b + 4) >> 2] | 0) == 12004 ? (a + 12) | 0 : 0) | 0;\n        }\n        function _g(a) {\n            a = a | 0;\n            Da(a, 16);\n            return;\n        }\n        function $g(b) {\n            b = b | 0;\n            a[b >> 0] = 1;\n            return;\n        }\n        function ah(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            Md(a);\n            c[a >> 2] = 4972;\n            c[(a + 4) >> 2] = b;\n            c[(a + 8) >> 2] = d;\n            return;\n        }\n        function bh(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0;\n            d = V;\n            V = (V + 16) | 0;\n            e = d;\n            c[a >> 2] = b;\n            f = eq(16) | 0;\n            c[(f + 4) >> 2] = 0;\n            c[(f + 8) >> 2] = 0;\n            c[f >> 2] = 4992;\n            c[(f + 12) >> 2] = b;\n            c[(a + 4) >> 2] = f;\n            c[e >> 2] = b;\n            c[(e + 4) >> 2] = b;\n            Wg(a, e);\n            V = d;\n            return;\n        }\n        function ch(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return fh(c[(a + 8) >> 2] | 0, c[(a + 4) >> 2] | 0, b) | 0;\n        }\n        function dh(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            c[a >> 2] = 4972;\n            d = (a + 8) | 0;\n            b = c[d >> 2] | 0;\n            c[d >> 2] = 0;\n            if (b | 0) {\n                hh(b);\n                jp(b);\n            }\n            Qd(a);\n            return;\n        }\n        function eh(a) {\n            a = a | 0;\n            dh(a);\n            jp(a);\n            return;\n        }\n        function fh(a, b, c) {\n            a = a | 0;\n            b = b | 0;\n            c = c | 0;\n            return gh((a + 4784) | 0, b, Be(a, b, c) | 0) | 0;\n        }\n        function gh(a, b, c) {\n            a = a | 0;\n            b = b | 0;\n            c = c | 0;\n            return Ug((a + 328) | 0, b, qf(a, b, c) | 0) | 0;\n        }\n        function hh(a) {\n            a = a | 0;\n            ih((a + 4784) | 0);\n            ze(a);\n            return;\n        }\n        function ih(a) {\n            a = a | 0;\n            of(a);\n            return;\n        }\n        function jh(a) {\n            a = a | 0;\n            pq(a);\n            jp(a);\n            return;\n        }\n        function kh(a) {\n            a = a | 0;\n            a = c[(a + 12) >> 2] | 0;\n            if (a | 0)\n                ca[c[((c[a >> 2] | 0) + 8) >> 2] & 255](a);\n            return;\n        }\n        function lh(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return ((c[(b + 4) >> 2] | 0) == 12827 ? (a + 12) | 0 : 0) | 0;\n        }\n        function mh(a) {\n            a = a | 0;\n            Da(a, 16);\n            return;\n        }\n        function nh(a) {\n            a = a | 0;\n            cf(a);\n            $g((a + 328) | 0);\n            return;\n        }\n        function oh(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            Md(a);\n            c[a >> 2] = 5020;\n            c[(a + 4) >> 2] = b;\n            c[(a + 8) >> 2] = d;\n            return;\n        }\n        function ph(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0;\n            d = V;\n            V = (V + 16) | 0;\n            e = d;\n            c[a >> 2] = b;\n            f = eq(16) | 0;\n            c[(f + 4) >> 2] = 0;\n            c[(f + 8) >> 2] = 0;\n            c[f >> 2] = 5040;\n            c[(f + 12) >> 2] = b;\n            c[(a + 4) >> 2] = f;\n            c[e >> 2] = b;\n            c[(e + 4) >> 2] = b;\n            Wg(a, e);\n            V = d;\n            return;\n        }\n        function qh(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return th(c[(a + 8) >> 2] | 0, c[(a + 4) >> 2] | 0, b) | 0;\n        }\n        function rh(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            c[a >> 2] = 5020;\n            d = (a + 8) | 0;\n            b = c[d >> 2] | 0;\n            c[d >> 2] = 0;\n            if (b | 0) {\n                vh(b);\n                jp(b);\n            }\n            Qd(a);\n            return;\n        }\n        function sh(a) {\n            a = a | 0;\n            rh(a);\n            jp(a);\n            return;\n        }\n        function th(a, b, c) {\n            a = a | 0;\n            b = b | 0;\n            c = c | 0;\n            return uh((a + 4784) | 0, b, Be(a, b, c) | 0) | 0;\n        }\n        function uh(a, b, c) {\n            a = a | 0;\n            b = b | 0;\n            c = c | 0;\n            return Ug((a + 316) | 0, b, If(a, b, c) | 0) | 0;\n        }\n        function vh(a) {\n            a = a | 0;\n            wh((a + 4784) | 0);\n            ze(a);\n            return;\n        }\n        function wh(a) {\n            a = a | 0;\n            Hf(a);\n            return;\n        }\n        function xh(a) {\n            a = a | 0;\n            pq(a);\n            jp(a);\n            return;\n        }\n        function yh(a) {\n            a = a | 0;\n            a = c[(a + 12) >> 2] | 0;\n            if (a | 0)\n                ca[c[((c[a >> 2] | 0) + 8) >> 2] & 255](a);\n            return;\n        }\n        function zh(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return ((c[(b + 4) >> 2] | 0) == 13672 ? (a + 12) | 0 : 0) | 0;\n        }\n        function Ah(a) {\n            a = a | 0;\n            Da(a, 16);\n            return;\n        }\n        function Bh(a) {\n            a = a | 0;\n            Cf(a);\n            $g((a + 316) | 0);\n            return;\n        }\n        function Ch(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            Md(a);\n            c[a >> 2] = 5068;\n            c[(a + 4) >> 2] = b;\n            c[(a + 8) >> 2] = d;\n            return;\n        }\n        function Dh(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0;\n            d = V;\n            V = (V + 16) | 0;\n            e = d;\n            c[a >> 2] = b;\n            f = eq(16) | 0;\n            c[(f + 4) >> 2] = 0;\n            c[(f + 8) >> 2] = 0;\n            c[f >> 2] = 5088;\n            c[(f + 12) >> 2] = b;\n            c[(a + 4) >> 2] = f;\n            c[e >> 2] = b;\n            c[(e + 4) >> 2] = b;\n            Wg(a, e);\n            V = d;\n            return;\n        }\n        function Eh(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return Hh(c[(a + 8) >> 2] | 0, c[(a + 4) >> 2] | 0, b) | 0;\n        }\n        function Fh(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            c[a >> 2] = 5068;\n            d = (a + 8) | 0;\n            b = c[d >> 2] | 0;\n            c[d >> 2] = 0;\n            if (b | 0) {\n                Jh(b);\n                jp(b);\n            }\n            Qd(a);\n            return;\n        }\n        function Gh(a) {\n            a = a | 0;\n            Fh(a);\n            jp(a);\n            return;\n        }\n        function Hh(a, b, c) {\n            a = a | 0;\n            b = b | 0;\n            c = c | 0;\n            return Ih((a + 4784) | 0, b, Be(a, b, c) | 0) | 0;\n        }\n        function Ih(a, b, c) {\n            a = a | 0;\n            b = b | 0;\n            c = c | 0;\n            return uh((a + 328) | 0, b, qf(a, b, c) | 0) | 0;\n        }\n        function Jh(a) {\n            a = a | 0;\n            Kh((a + 4784) | 0);\n            ze(a);\n            return;\n        }\n        function Kh(a) {\n            a = a | 0;\n            wh((a + 328) | 0);\n            of(a);\n            return;\n        }\n        function Lh(a) {\n            a = a | 0;\n            pq(a);\n            jp(a);\n            return;\n        }\n        function Mh(a) {\n            a = a | 0;\n            a = c[(a + 12) >> 2] | 0;\n            if (a | 0)\n                ca[c[((c[a >> 2] | 0) + 8) >> 2] & 255](a);\n            return;\n        }\n        function Nh(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return ((c[(b + 4) >> 2] | 0) == 14573 ? (a + 12) | 0 : 0) | 0;\n        }\n        function Oh(a) {\n            a = a | 0;\n            Da(a, 16);\n            return;\n        }\n        function Ph(a) {\n            a = a | 0;\n            cf(a);\n            Bh((a + 328) | 0);\n            return;\n        }\n        function Qh(a) {\n            a = a | 0;\n            return (a + 20) | 0;\n        }\n        function Rh(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            c[a >> 2] = b;\n            c[(a + 4) >> 2] = d;\n            c[(a + 8) >> 2] = 0;\n            return;\n        }\n        function Sh(a, b) {\n            a = a | 0;\n            b = b | 0;\n            c[a >> 2] = b;\n            c[(a + 4) >> 2] = 0;\n            c[(a + 8) >> 2] = -1;\n            return;\n        }\n        function Th(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0, f = 0, g = 0;\n            d = V;\n            V = (V + 16) | 0;\n            e = (d + 4) | 0;\n            g = d;\n            f = eq(24) | 0;\n            ii(f, b);\n            c[g >> 2] = 0;\n            c[e >> 2] = c[g >> 2];\n            ji(a, f, e);\n            V = d;\n            return;\n        }\n        function Uh(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            a = c[(a + 4) >> 2] | 0;\n            if (a | 0 ? ((d = (a + 4) | 0), (b = c[d >> 2] | 0), (c[d >> 2] = b + -1), (b | 0) == 0) : 0) {\n                ca[c[((c[a >> 2] | 0) + 8) >> 2] & 255](a);\n                qq(a);\n            }\n            return;\n        }\n        function Vh(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0;\n            d = V;\n            V = (V + 16) | 0;\n            e = d;\n            c[a >> 2] = b;\n            f = eq(16) | 0;\n            c[(f + 4) >> 2] = 0;\n            c[(f + 8) >> 2] = 0;\n            c[f >> 2] = 5116;\n            c[(f + 12) >> 2] = b;\n            c[(a + 4) >> 2] = f;\n            c[e >> 2] = b;\n            c[(e + 4) >> 2] = b;\n            Xh(a, e);\n            V = d;\n            return;\n        }\n        function Wh(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            a = c[(a + 4) >> 2] | 0;\n            if (a | 0 ? ((d = (a + 4) | 0), (b = c[d >> 2] | 0), (c[d >> 2] = b + -1), (b | 0) == 0) : 0) {\n                ca[c[((c[a >> 2] | 0) + 8) >> 2] & 255](a);\n                qq(a);\n            }\n            return;\n        }\n        function Xh(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return;\n        }\n        function Yh(a) {\n            a = a | 0;\n            pq(a);\n            jp(a);\n            return;\n        }\n        function Zh(a) {\n            a = a | 0;\n            a = c[(a + 12) >> 2] | 0;\n            if (a | 0)\n                jp(a);\n            return;\n        }\n        function _h(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return ((c[(b + 4) >> 2] | 0) == 14966 ? (a + 12) | 0 : 0) | 0;\n        }\n        function $h(a) {\n            a = a | 0;\n            Da(a, 16);\n            return;\n        }\n        function ai(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0;\n            d = V;\n            V = (V + 16) | 0;\n            e = d;\n            c[a >> 2] = b;\n            f = eq(16) | 0;\n            c[(f + 4) >> 2] = 0;\n            c[(f + 8) >> 2] = 0;\n            c[f >> 2] = 5144;\n            c[(f + 12) >> 2] = b;\n            c[(a + 4) >> 2] = f;\n            c[e >> 2] = b;\n            c[(e + 4) >> 2] = b;\n            ci(a, e);\n            V = d;\n            return;\n        }\n        function bi(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            a = c[(a + 4) >> 2] | 0;\n            if (a | 0 ? ((d = (a + 4) | 0), (b = c[d >> 2] | 0), (c[d >> 2] = b + -1), (b | 0) == 0) : 0) {\n                ca[c[((c[a >> 2] | 0) + 8) >> 2] & 255](a);\n                qq(a);\n            }\n            return;\n        }\n        function ci(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return;\n        }\n        function di(a) {\n            a = a | 0;\n            pq(a);\n            jp(a);\n            return;\n        }\n        function ei(a) {\n            a = a | 0;\n            a = c[(a + 12) >> 2] | 0;\n            if (a | 0) {\n                hi(a);\n                jp(a);\n            }\n            return;\n        }\n        function fi(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return ((c[(b + 4) >> 2] | 0) == 15127 ? (a + 12) | 0 : 0) | 0;\n        }\n        function gi(a) {\n            a = a | 0;\n            Da(a, 16);\n            return;\n        }\n        function hi(a) {\n            a = a | 0;\n            return;\n        }\n        function ii(b, d) {\n            b = b | 0;\n            d = d | 0;\n            Md(b);\n            c[b >> 2] = 5172;\n            c[(b + 4) >> 2] = d;\n            c[(b + 8) >> 2] = 0;\n            c[(b + 12) >> 2] = 0;\n            c[(b + 16) >> 2] = 0;\n            a[(b + 20) >> 0] = 1;\n            return;\n        }\n        function ji(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0;\n            d = V;\n            V = (V + 16) | 0;\n            e = d;\n            c[a >> 2] = b;\n            f = eq(16) | 0;\n            c[(f + 4) >> 2] = 0;\n            c[(f + 8) >> 2] = 0;\n            c[f >> 2] = 5192;\n            c[(f + 12) >> 2] = b;\n            c[(a + 4) >> 2] = f;\n            c[e >> 2] = b;\n            c[(e + 4) >> 2] = b;\n            pi(a, e);\n            V = d;\n            return;\n        }\n        function ki(b, d) {\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, k = 0;\n            k = V;\n            V = (V + 16) | 0;\n            h = k;\n            e = c[(b + 8) >> 2] | 0;\n            i = c[(b + 12) >> 2] | 0;\n            if ((e | 0) != (i | 0)) {\n                j = (h + 4) | 0;\n                do {\n                    f = c[e >> 2] | 0;\n                    c[h >> 2] = f;\n                    g = c[(e + 4) >> 2] | 0;\n                    c[j >> 2] = g;\n                    if (g | 0) {\n                        g = (g + 4) | 0;\n                        c[g >> 2] = (c[g >> 2] | 0) + 1;\n                    }\n                    d = $[c[((c[f >> 2] | 0) + 12) >> 2] & 63](f, d) | 0;\n                    Sd(h);\n                    e = (e + 8) | 0;\n                } while ((e | 0) != (i | 0));\n            }\n            e = (b + 20) | 0;\n            if (a[e >> 0] | 0) {\n                a[e >> 0] = 0;\n                ni(c[(b + 4) >> 2] | 0);\n            }\n            V = k;\n            return d | 0;\n        }\n        function li(a) {\n            a = a | 0;\n            c[a >> 2] = 5172;\n            Td((a + 8) | 0);\n            Qd(a);\n            return;\n        }\n        function mi(a) {\n            a = a | 0;\n            li(a);\n            jp(a);\n            return;\n        }\n        function ni(a) {\n            a = a | 0;\n            var b = 0;\n            b = ((oi(c[a >> 2] | 0) | 0) & 255) << 24;\n            b = (((oi(c[a >> 2] | 0) | 0) & 255) << 16) | b;\n            b = b | (((oi(c[a >> 2] | 0) | 0) & 255) << 8);\n            c[(a + 4) >> 2] = b | ((oi(c[a >> 2] | 0) | 0) & 255);\n            return;\n        }\n        function oi(b) {\n            b = b | 0;\n            var d = 0, e = 0;\n            d = c[b >> 2] | 0;\n            e = (b + 8) | 0;\n            b = c[e >> 2] | 0;\n            c[e >> 2] = b + 1;\n            return a[(d + b) >> 0] | 0;\n        }\n        function pi(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return;\n        }\n        function qi(a) {\n            a = a | 0;\n            pq(a);\n            jp(a);\n            return;\n        }\n        function ri(a) {\n            a = a | 0;\n            a = c[(a + 12) >> 2] | 0;\n            if (a | 0)\n                ca[c[((c[a >> 2] | 0) + 8) >> 2] & 255](a);\n            return;\n        }\n        function si(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return ((c[(b + 4) >> 2] | 0) == 15450 ? (a + 12) | 0 : 0) | 0;\n        }\n        function ti(a) {\n            a = a | 0;\n            Da(a, 16);\n            return;\n        }\n        function ui(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, k = 0, l = 0;\n            j = V;\n            V = (V + 32) | 0;\n            e = (j + 12) | 0;\n            f = j;\n            b = (j + 8) | 0;\n            h = eq(180) | 0;\n            wi(h, c[(a + 4) >> 2] | 0);\n            g = (a + 8) | 0;\n            c[b >> 2] = 0;\n            c[e >> 2] = c[b >> 2];\n            xi(f, h, e);\n            h = (a + 12) | 0;\n            b = c[h >> 2] | 0;\n            i = (a + 16) | 0;\n            do\n                if (b >>> 0 >= (c[i >> 2] | 0) >>> 0) {\n                    b = (((b - (c[g >> 2] | 0)) >> 3) + 1) | 0;\n                    d = ee(g) | 0;\n                    if (d >>> 0 < b >>> 0)\n                        cr(g);\n                    else {\n                        k = c[g >> 2] | 0;\n                        l = ((c[i >> 2] | 0) - k) | 0;\n                        i = l >> 2;\n                        be(e, (l >> 3) >>> 0 < (d >>> 1) >>> 0 ? (i >>> 0 < b >>> 0 ? b : i) : d, ((c[h >> 2] | 0) - k) >> 3, (a + 16) | 0);\n                        i = (e + 8) | 0;\n                        h = c[i >> 2] | 0;\n                        c[h >> 2] = c[f >> 2];\n                        a = (f + 4) | 0;\n                        c[(h + 4) >> 2] = c[a >> 2];\n                        c[f >> 2] = 0;\n                        c[a >> 2] = 0;\n                        c[i >> 2] = h + 8;\n                        ce(g, e);\n                        de(e);\n                        break;\n                    }\n                }\n                else {\n                    $d(e, g, 1);\n                    l = (e + 4) | 0;\n                    k = c[l >> 2] | 0;\n                    c[k >> 2] = c[f >> 2];\n                    i = (f + 4) | 0;\n                    c[(k + 4) >> 2] = c[i >> 2];\n                    c[f >> 2] = 0;\n                    c[i >> 2] = 0;\n                    c[l >> 2] = k + 8;\n                    ae(e);\n                }\n            while (0);\n            Sd(f);\n            V = j;\n            return;\n        }\n        function vi(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, k = 0, l = 0;\n            j = V;\n            V = (V + 32) | 0;\n            e = (j + 12) | 0;\n            f = j;\n            b = (j + 8) | 0;\n            h = eq(180) | 0;\n            Ui(h, c[(a + 4) >> 2] | 0);\n            g = (a + 8) | 0;\n            c[b >> 2] = 0;\n            c[e >> 2] = c[b >> 2];\n            Vi(f, h, e);\n            h = (a + 12) | 0;\n            b = c[h >> 2] | 0;\n            i = (a + 16) | 0;\n            do\n                if (b >>> 0 >= (c[i >> 2] | 0) >>> 0) {\n                    b = (((b - (c[g >> 2] | 0)) >> 3) + 1) | 0;\n                    d = ee(g) | 0;\n                    if (d >>> 0 < b >>> 0)\n                        cr(g);\n                    else {\n                        k = c[g >> 2] | 0;\n                        l = ((c[i >> 2] | 0) - k) | 0;\n                        i = l >> 2;\n                        be(e, (l >> 3) >>> 0 < (d >>> 1) >>> 0 ? (i >>> 0 < b >>> 0 ? b : i) : d, ((c[h >> 2] | 0) - k) >> 3, (a + 16) | 0);\n                        i = (e + 8) | 0;\n                        h = c[i >> 2] | 0;\n                        c[h >> 2] = c[f >> 2];\n                        a = (f + 4) | 0;\n                        c[(h + 4) >> 2] = c[a >> 2];\n                        c[f >> 2] = 0;\n                        c[a >> 2] = 0;\n                        c[i >> 2] = h + 8;\n                        ce(g, e);\n                        de(e);\n                        break;\n                    }\n                }\n                else {\n                    $d(e, g, 1);\n                    l = (e + 4) | 0;\n                    k = c[l >> 2] | 0;\n                    c[k >> 2] = c[f >> 2];\n                    i = (f + 4) | 0;\n                    c[(k + 4) >> 2] = c[i >> 2];\n                    c[f >> 2] = 0;\n                    c[i >> 2] = 0;\n                    c[l >> 2] = k + 8;\n                    ae(e);\n                }\n            while (0);\n            Sd(f);\n            V = j;\n            return;\n        }\n        function wi(a, b) {\n            a = a | 0;\n            b = b | 0;\n            fe(a);\n            c[a >> 2] = 5220;\n            c[(a + 4) >> 2] = b;\n            yi((a + 8) | 0);\n            return;\n        }\n        function xi(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0;\n            d = V;\n            V = (V + 16) | 0;\n            e = d;\n            c[a >> 2] = b;\n            f = eq(16) | 0;\n            c[(f + 4) >> 2] = 0;\n            c[(f + 8) >> 2] = 0;\n            c[f >> 2] = 5244;\n            c[(f + 12) >> 2] = b;\n            c[(a + 4) >> 2] = f;\n            c[e >> 2] = b;\n            c[(e + 4) >> 2] = b;\n            Xe(a, e);\n            V = d;\n            return;\n        }\n        function yi(b) {\n            b = b | 0;\n            xe(b, 32, 1, 8, 0);\n            mc((b + 80) | 0, 32, 1, 8, 0);\n            a[(b + 160) >> 0] = 0;\n            a[(b + 161) >> 0] = 0;\n            Ci((b + 164) | 0);\n            return;\n        }\n        function zi(a) {\n            a = a | 0;\n            c[a >> 2] = 5220;\n            Di((a + 8) | 0);\n            le(a);\n            return;\n        }\n        function Ai(a) {\n            a = a | 0;\n            zi(a);\n            jp(a);\n            return;\n        }\n        function Bi(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return Ei((a + 8) | 0, c[(a + 4) >> 2] | 0, b) | 0;\n        }\n        function Ci(b) {\n            b = b | 0;\n            a[(b + 4) >> 0] = 0;\n            return;\n        }\n        function Di(a) {\n            a = a | 0;\n            qc((a + 80) | 0);\n            ye(a);\n            return;\n        }\n        function Ei(b, d, e) {\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            var f = 0, g = 0, h = 0;\n            h = V;\n            V = (V + 16) | 0;\n            f = h;\n            if (!(a[(b + 161) >> 0] | 0))\n                oc((b + 80) | 0);\n            g = (b + 164) | 0;\n            if (Fi(g) | 0) {\n                d = Gi((b + 80) | 0, d, c[g >> 2] | 0, 0) | 0;\n                c[f >> 2] = d;\n                Se(d, e);\n            }\n            else {\n                Ii(Hi(d) | 0, e, 4);\n                c[f >> 2] = Ne(e) | 0;\n            }\n            Ji(g, f);\n            V = h;\n            return (e + 4) | 0;\n        }\n        function Fi(b) {\n            b = b | 0;\n            return ((a[(b + 4) >> 0] | 0) != 0) | 0;\n        }\n        function Gi(a, b, d, e) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            d = ((Ki(a, b, ((c[(a + 36) >> 2] | 0) + ((e * 44) | 0)) | 0) | 0) + d) | 0;\n            b = c[(a + 24) >> 2] | 0;\n            if ((d | 0) < 0)\n                return (d + b) | 0;\n            else\n                return (d - (d >>> 0 < b >>> 0 ? 0 : b)) | 0;\n            return 0;\n        }\n        function Hi(a) {\n            a = a | 0;\n            return c[a >> 2] | 0;\n        }\n        function Ii(b, c, d) {\n            b = b | 0;\n            c = c | 0;\n            d = d | 0;\n            var e = 0;\n            if ((d | 0) > 0) {\n                e = 0;\n                do {\n                    a[(c + e) >> 0] = oi(b) | 0;\n                    e = (e + 1) | 0;\n                } while ((e | 0) != (d | 0));\n            }\n            return;\n        }\n        function Ji(b, d) {\n            b = b | 0;\n            d = d | 0;\n            var e = 0;\n            e = (b + 4) | 0;\n            if (!(a[e >> 0] | 0))\n                a[e >> 0] = 1;\n            c[b >> 2] = c[d >> 2];\n            return;\n        }\n        function Ki(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0;\n            d = Li(b, d) | 0;\n            c[a >> 2] = d;\n            do\n                if (d) {\n                    if (d >>> 0 >= 32) {\n                        d = c[(a + 28) >> 2] | 0;\n                        break;\n                    }\n                    e = c[(a + 12) >> 2] | 0;\n                    if (d >>> 0 > e >>> 0) {\n                        e = (d - e) | 0;\n                        d = Li(b, ((c[(a + 68) >> 2] | 0) + ((((d + -1) | 0) * 44) | 0)) | 0) | 0;\n                        e = (d << e) | (Mi(b, e) | 0);\n                    }\n                    else\n                        e = Li(b, ((c[(a + 68) >> 2] | 0) + ((((d + -1) | 0) * 44) | 0)) | 0) | 0;\n                    d = c[a >> 2] | 0;\n                    if ((e | 0) < ((1 << (d + -1)) | 0)) {\n                        d = (e + 1 + (-1 << d)) | 0;\n                        break;\n                    }\n                    else {\n                        d = (e + 1) | 0;\n                        break;\n                    }\n                }\n                else\n                    d = Ni(b, (a + 48) | 0) | 0;\n            while (0);\n            return d | 0;\n        }\n        function Li(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0;\n            n = (a + 8) | 0;\n            m = c[n >> 2] | 0;\n            f = c[(b + 16) >> 2] | 0;\n            if (f) {\n                e = (a + 4) | 0;\n                d = c[e >> 2] | 0;\n                l = m >>> 15;\n                c[n >> 2] = l;\n                j = ((d >>> 0) / (l >>> 0)) | 0;\n                i = j >>> (c[(b + 40) >> 2] | 0);\n                g = c[(f + (i << 2)) >> 2] | 0;\n                i = ((c[(f + ((i + 1) << 2)) >> 2] | 0) + 1) | 0;\n                h = (g + 1) | 0;\n                k = c[(b + 8) >> 2] | 0;\n                if (i >>> 0 > h >>> 0) {\n                    f = g;\n                    g = i;\n                    do {\n                        h = ((g + f) | 0) >>> 1;\n                        i = (c[(k + (h << 2)) >> 2] | 0) >>> 0 > j >>> 0;\n                        f = i ? f : h;\n                        g = i ? h : g;\n                        h = (f + 1) | 0;\n                    } while (g >>> 0 > h >>> 0);\n                    g = f;\n                }\n                f = q(c[(k + (g << 2)) >> 2] | 0, l) | 0;\n                if ((g | 0) == (c[(b + 32) >> 2] | 0))\n                    h = m;\n                else\n                    h = q(c[(k + (h << 2)) >> 2] | 0, l) | 0;\n            }\n            else {\n                k = m >>> 15;\n                c[n >> 2] = k;\n                i = c[b >> 2] | 0;\n                l = c[(b + 8) >> 2] | 0;\n                e = (a + 4) | 0;\n                d = c[e >> 2] | 0;\n                j = i >>> 1;\n                f = 0;\n                h = m;\n                g = 0;\n                do {\n                    o = q(c[(l + (j << 2)) >> 2] | 0, k) | 0;\n                    m = o >>> 0 > d >>> 0;\n                    h = m ? o : h;\n                    f = m ? f : o;\n                    g = m ? g : j;\n                    i = m ? j : i;\n                    j = ((g + i) | 0) >>> 1;\n                } while ((j | 0) != (g | 0));\n            }\n            c[e >> 2] = d - f;\n            o = (h - f) | 0;\n            c[n >> 2] = o;\n            if (o >>> 0 < 16777216)\n                Oi(a);\n            n = ((c[(b + 12) >> 2] | 0) + (g << 2)) | 0;\n            c[n >> 2] = (c[n >> 2] | 0) + 1;\n            n = (b + 28) | 0;\n            o = ((c[n >> 2] | 0) + -1) | 0;\n            c[n >> 2] = o;\n            if (!o)\n                Xc(b);\n            return g | 0;\n        }\n        function Mi(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0, f = 0, g = 0;\n            if (b >>> 0 > 19) {\n                d = (Pi(a) | 0) & 65535;\n                return ((Mi(a, (b + -16) | 0) | 0) << 16) | d | 0;\n            }\n            e = (a + 4) | 0;\n            f = c[e >> 2] | 0;\n            g = (a + 8) | 0;\n            d = (c[g >> 2] | 0) >>> b;\n            c[g >> 2] = d;\n            b = ((f >>> 0) / (d >>> 0)) | 0;\n            c[e >> 2] = f - (q(b, d) | 0);\n            if (d >>> 0 < 16777216)\n                Oi(a);\n            return b | 0;\n        }\n        function Ni(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0, f = 0, g = 0, h = 0, i = 0;\n            e = (a + 8) | 0;\n            f = c[e >> 2] | 0;\n            d = q(f >>> 13, c[(b + 8) >> 2] | 0) | 0;\n            g = (a + 4) | 0;\n            h = c[g >> 2] | 0;\n            i = h >>> 0 >= d >>> 0;\n            if (i) {\n                c[g >> 2] = h - d;\n                d = (f - d) | 0;\n                c[e >> 2] = d;\n            }\n            else {\n                c[e >> 2] = d;\n                h = (b + 12) | 0;\n                c[h >> 2] = (c[h >> 2] | 0) + 1;\n            }\n            if (d >>> 0 < 16777216)\n                Oi(a);\n            h = (b + 4) | 0;\n            a = ((c[h >> 2] | 0) + -1) | 0;\n            c[h >> 2] = a;\n            if (!a)\n                cd(b);\n            return (i & 1) | 0;\n        }\n        function Oi(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0, f = 0;\n            b = (a + 4) | 0;\n            d = (a + 8) | 0;\n            e = c[b >> 2] | 0;\n            do {\n                e = (e << 8) | ((oi(c[a >> 2] | 0) | 0) & 255);\n                c[b >> 2] = e;\n                f = c[d >> 2] << 8;\n                c[d >> 2] = f;\n            } while (f >>> 0 < 16777216);\n            return;\n        }\n        function Pi(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0, f = 0;\n            d = (a + 4) | 0;\n            f = c[d >> 2] | 0;\n            b = (a + 8) | 0;\n            e = (c[b >> 2] | 0) >>> 16;\n            c[b >> 2] = e;\n            b = ((f >>> 0) / (e >>> 0)) | 0;\n            c[d >> 2] = f - (q(b, e) | 0);\n            Oi(a);\n            return (b & 65535) | 0;\n        }\n        function Qi(a) {\n            a = a | 0;\n            pq(a);\n            jp(a);\n            return;\n        }\n        function Ri(a) {\n            a = a | 0;\n            a = c[(a + 12) >> 2] | 0;\n            if (a | 0)\n                ca[c[((c[a >> 2] | 0) + 4) >> 2] & 255](a);\n            return;\n        }\n        function Si(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return ((c[(b + 4) >> 2] | 0) == 15904 ? (a + 12) | 0 : 0) | 0;\n        }\n        function Ti(a) {\n            a = a | 0;\n            Da(a, 16);\n            return;\n        }\n        function Ui(a, b) {\n            a = a | 0;\n            b = b | 0;\n            fe(a);\n            c[a >> 2] = 5272;\n            c[(a + 4) >> 2] = b;\n            Wi((a + 8) | 0);\n            return;\n        }\n        function Vi(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0;\n            d = V;\n            V = (V + 16) | 0;\n            e = d;\n            c[a >> 2] = b;\n            f = eq(16) | 0;\n            c[(f + 4) >> 2] = 0;\n            c[(f + 8) >> 2] = 0;\n            c[f >> 2] = 5296;\n            c[(f + 12) >> 2] = b;\n            c[(a + 4) >> 2] = f;\n            c[e >> 2] = b;\n            c[(e + 4) >> 2] = b;\n            Xe(a, e);\n            V = d;\n            return;\n        }\n        function Wi(b) {\n            b = b | 0;\n            xe(b, 32, 1, 8, 0);\n            mc((b + 80) | 0, 32, 1, 8, 0);\n            a[(b + 160) >> 0] = 0;\n            a[(b + 161) >> 0] = 0;\n            _i((b + 164) | 0);\n            return;\n        }\n        function Xi(a) {\n            a = a | 0;\n            c[a >> 2] = 5272;\n            $i((a + 8) | 0);\n            le(a);\n            return;\n        }\n        function Yi(a) {\n            a = a | 0;\n            Xi(a);\n            jp(a);\n            return;\n        }\n        function Zi(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return aj((a + 8) | 0, c[(a + 4) >> 2] | 0, b) | 0;\n        }\n        function _i(b) {\n            b = b | 0;\n            a[(b + 4) >> 0] = 0;\n            return;\n        }\n        function $i(a) {\n            a = a | 0;\n            qc((a + 80) | 0);\n            ye(a);\n            return;\n        }\n        function aj(b, d, e) {\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            var f = 0, g = 0, h = 0;\n            h = V;\n            V = (V + 16) | 0;\n            f = h;\n            if (!(a[(b + 161) >> 0] | 0))\n                oc((b + 80) | 0);\n            g = (b + 164) | 0;\n            if (bj(g) | 0) {\n                d = Gi((b + 80) | 0, d, c[g >> 2] | 0, 0) | 0;\n                c[f >> 2] = d;\n                We(d, e);\n            }\n            else {\n                Ii(Hi(d) | 0, e, 4);\n                c[f >> 2] = Re(e) | 0;\n            }\n            cj(g, f);\n            V = h;\n            return (e + 4) | 0;\n        }\n        function bj(b) {\n            b = b | 0;\n            return ((a[(b + 4) >> 0] | 0) != 0) | 0;\n        }\n        function cj(b, d) {\n            b = b | 0;\n            d = d | 0;\n            var e = 0;\n            e = (b + 4) | 0;\n            if (!(a[e >> 0] | 0))\n                a[e >> 0] = 1;\n            c[b >> 2] = c[d >> 2];\n            return;\n        }\n        function dj(a) {\n            a = a | 0;\n            pq(a);\n            jp(a);\n            return;\n        }\n        function ej(a) {\n            a = a | 0;\n            a = c[(a + 12) >> 2] | 0;\n            if (a | 0)\n                ca[c[((c[a >> 2] | 0) + 4) >> 2] & 255](a);\n            return;\n        }\n        function fj(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return ((c[(b + 4) >> 2] | 0) == 16402 ? (a + 12) | 0 : 0) | 0;\n        }\n        function gj(a) {\n            a = a | 0;\n            Da(a, 16);\n            return;\n        }\n        function hj(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, k = 0, l = 0;\n            j = V;\n            V = (V + 32) | 0;\n            e = (j + 12) | 0;\n            f = j;\n            b = (j + 8) | 0;\n            h = eq(172) | 0;\n            jj(h, c[(a + 4) >> 2] | 0);\n            g = (a + 8) | 0;\n            c[b >> 2] = 0;\n            c[e >> 2] = c[b >> 2];\n            kj(f, h, e);\n            h = (a + 12) | 0;\n            b = c[h >> 2] | 0;\n            i = (a + 16) | 0;\n            do\n                if (b >>> 0 >= (c[i >> 2] | 0) >>> 0) {\n                    b = (((b - (c[g >> 2] | 0)) >> 3) + 1) | 0;\n                    d = ee(g) | 0;\n                    if (d >>> 0 < b >>> 0)\n                        cr(g);\n                    else {\n                        k = c[g >> 2] | 0;\n                        l = ((c[i >> 2] | 0) - k) | 0;\n                        i = l >> 2;\n                        be(e, (l >> 3) >>> 0 < (d >>> 1) >>> 0 ? (i >>> 0 < b >>> 0 ? b : i) : d, ((c[h >> 2] | 0) - k) >> 3, (a + 16) | 0);\n                        i = (e + 8) | 0;\n                        h = c[i >> 2] | 0;\n                        c[h >> 2] = c[f >> 2];\n                        a = (f + 4) | 0;\n                        c[(h + 4) >> 2] = c[a >> 2];\n                        c[f >> 2] = 0;\n                        c[a >> 2] = 0;\n                        c[i >> 2] = h + 8;\n                        ce(g, e);\n                        de(e);\n                        break;\n                    }\n                }\n                else {\n                    $d(e, g, 1);\n                    l = (e + 4) | 0;\n                    k = c[l >> 2] | 0;\n                    c[k >> 2] = c[f >> 2];\n                    i = (f + 4) | 0;\n                    c[(k + 4) >> 2] = c[i >> 2];\n                    c[f >> 2] = 0;\n                    c[i >> 2] = 0;\n                    c[l >> 2] = k + 8;\n                    ae(e);\n                }\n            while (0);\n            Sd(f);\n            V = j;\n            return;\n        }\n        function ij(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, k = 0, l = 0;\n            j = V;\n            V = (V + 32) | 0;\n            e = (j + 12) | 0;\n            f = j;\n            b = (j + 8) | 0;\n            h = eq(176) | 0;\n            Aj(h, c[(a + 4) >> 2] | 0);\n            g = (a + 8) | 0;\n            c[b >> 2] = 0;\n            c[e >> 2] = c[b >> 2];\n            Bj(f, h, e);\n            h = (a + 12) | 0;\n            b = c[h >> 2] | 0;\n            i = (a + 16) | 0;\n            do\n                if (b >>> 0 >= (c[i >> 2] | 0) >>> 0) {\n                    b = (((b - (c[g >> 2] | 0)) >> 3) + 1) | 0;\n                    d = ee(g) | 0;\n                    if (d >>> 0 < b >>> 0)\n                        cr(g);\n                    else {\n                        k = c[g >> 2] | 0;\n                        l = ((c[i >> 2] | 0) - k) | 0;\n                        i = l >> 2;\n                        be(e, (l >> 3) >>> 0 < (d >>> 1) >>> 0 ? (i >>> 0 < b >>> 0 ? b : i) : d, ((c[h >> 2] | 0) - k) >> 3, (a + 16) | 0);\n                        i = (e + 8) | 0;\n                        h = c[i >> 2] | 0;\n                        c[h >> 2] = c[f >> 2];\n                        a = (f + 4) | 0;\n                        c[(h + 4) >> 2] = c[a >> 2];\n                        c[f >> 2] = 0;\n                        c[a >> 2] = 0;\n                        c[i >> 2] = h + 8;\n                        ce(g, e);\n                        de(e);\n                        break;\n                    }\n                }\n                else {\n                    $d(e, g, 1);\n                    l = (e + 4) | 0;\n                    k = c[l >> 2] | 0;\n                    c[k >> 2] = c[f >> 2];\n                    i = (f + 4) | 0;\n                    c[(k + 4) >> 2] = c[i >> 2];\n                    c[f >> 2] = 0;\n                    c[i >> 2] = 0;\n                    c[l >> 2] = k + 8;\n                    ae(e);\n                }\n            while (0);\n            Sd(f);\n            V = j;\n            return;\n        }\n        function jj(a, b) {\n            a = a | 0;\n            b = b | 0;\n            fe(a);\n            c[a >> 2] = 5324;\n            c[(a + 4) >> 2] = b;\n            lj((a + 8) | 0);\n            return;\n        }\n        function kj(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0;\n            d = V;\n            V = (V + 16) | 0;\n            e = d;\n            c[a >> 2] = b;\n            f = eq(16) | 0;\n            c[(f + 4) >> 2] = 0;\n            c[(f + 8) >> 2] = 0;\n            c[f >> 2] = 5348;\n            c[(f + 12) >> 2] = b;\n            c[(a + 4) >> 2] = f;\n            c[e >> 2] = b;\n            c[(e + 4) >> 2] = b;\n            Xe(a, e);\n            V = d;\n            return;\n        }\n        function lj(b) {\n            b = b | 0;\n            xe(b, 8, 1, 8, 0);\n            mc((b + 80) | 0, 8, 1, 8, 0);\n            a[(b + 160) >> 0] = 0;\n            a[(b + 161) >> 0] = 0;\n            pj((b + 162) | 0);\n            return;\n        }\n        function mj(a) {\n            a = a | 0;\n            c[a >> 2] = 5324;\n            qj((a + 8) | 0);\n            le(a);\n            return;\n        }\n        function nj(a) {\n            a = a | 0;\n            mj(a);\n            jp(a);\n            return;\n        }\n        function oj(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return rj((a + 8) | 0, c[(a + 4) >> 2] | 0, b) | 0;\n        }\n        function pj(b) {\n            b = b | 0;\n            a[(b + 1) >> 0] = 0;\n            return;\n        }\n        function qj(a) {\n            a = a | 0;\n            qc((a + 80) | 0);\n            ye(a);\n            return;\n        }\n        function rj(b, c, d) {\n            b = b | 0;\n            c = c | 0;\n            d = d | 0;\n            var e = 0, f = 0, g = 0;\n            g = V;\n            V = (V + 16) | 0;\n            e = g;\n            if (!(a[(b + 161) >> 0] | 0))\n                oc((b + 80) | 0);\n            f = (b + 162) | 0;\n            if (sj(f) | 0) {\n                c = (Gi((b + 80) | 0, c, a[f >> 0] | 0, 0) | 0) & 255;\n                a[e >> 0] = c;\n                tj(c, d);\n            }\n            else {\n                Ii(Hi(c) | 0, d, 1);\n                a[e >> 0] = uj(d) | 0;\n            }\n            vj(f, e);\n            V = g;\n            return (d + 1) | 0;\n        }\n        function sj(b) {\n            b = b | 0;\n            return ((a[(b + 1) >> 0] | 0) != 0) | 0;\n        }\n        function tj(b, c) {\n            b = b | 0;\n            c = c | 0;\n            a[c >> 0] = b;\n            return;\n        }\n        function uj(b) {\n            b = b | 0;\n            return a[b >> 0] | 0;\n        }\n        function vj(b, c) {\n            b = b | 0;\n            c = c | 0;\n            var d = 0;\n            d = (b + 1) | 0;\n            if (!(a[d >> 0] | 0))\n                a[d >> 0] = 1;\n            a[b >> 0] = a[c >> 0] | 0;\n            return;\n        }\n        function wj(a) {\n            a = a | 0;\n            pq(a);\n            jp(a);\n            return;\n        }\n        function xj(a) {\n            a = a | 0;\n            a = c[(a + 12) >> 2] | 0;\n            if (a | 0)\n                ca[c[((c[a >> 2] | 0) + 4) >> 2] & 255](a);\n            return;\n        }\n        function yj(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return ((c[(b + 4) >> 2] | 0) == 16900 ? (a + 12) | 0 : 0) | 0;\n        }\n        function zj(a) {\n            a = a | 0;\n            Da(a, 16);\n            return;\n        }\n        function Aj(a, b) {\n            a = a | 0;\n            b = b | 0;\n            fe(a);\n            c[a >> 2] = 5376;\n            c[(a + 4) >> 2] = b;\n            Cj((a + 8) | 0);\n            return;\n        }\n        function Bj(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0;\n            d = V;\n            V = (V + 16) | 0;\n            e = d;\n            c[a >> 2] = b;\n            f = eq(16) | 0;\n            c[(f + 4) >> 2] = 0;\n            c[(f + 8) >> 2] = 0;\n            c[f >> 2] = 5400;\n            c[(f + 12) >> 2] = b;\n            c[(a + 4) >> 2] = f;\n            c[e >> 2] = b;\n            c[(e + 4) >> 2] = b;\n            Xe(a, e);\n            V = d;\n            return;\n        }\n        function Cj(b) {\n            b = b | 0;\n            xe(b, 16, 1, 8, 0);\n            mc((b + 80) | 0, 16, 1, 8, 0);\n            a[(b + 160) >> 0] = 0;\n            a[(b + 161) >> 0] = 0;\n            Gj((b + 162) | 0);\n            return;\n        }\n        function Dj(a) {\n            a = a | 0;\n            c[a >> 2] = 5376;\n            Hj((a + 8) | 0);\n            le(a);\n            return;\n        }\n        function Ej(a) {\n            a = a | 0;\n            Dj(a);\n            jp(a);\n            return;\n        }\n        function Fj(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return Ij((a + 8) | 0, c[(a + 4) >> 2] | 0, b) | 0;\n        }\n        function Gj(b) {\n            b = b | 0;\n            a[(b + 2) >> 0] = 0;\n            return;\n        }\n        function Hj(a) {\n            a = a | 0;\n            qc((a + 80) | 0);\n            ye(a);\n            return;\n        }\n        function Ij(c, d, e) {\n            c = c | 0;\n            d = d | 0;\n            e = e | 0;\n            var f = 0, g = 0, h = 0;\n            h = V;\n            V = (V + 16) | 0;\n            f = h;\n            if (!(a[(c + 161) >> 0] | 0))\n                oc((c + 80) | 0);\n            g = (c + 162) | 0;\n            if (Jj(g) | 0) {\n                d = (Gi((c + 80) | 0, d, b[g >> 1] | 0, 0) | 0) & 65535;\n                b[f >> 1] = d;\n                Kj(d, e);\n            }\n            else {\n                Ii(Hi(d) | 0, e, 2);\n                b[f >> 1] = Lj(e) | 0;\n            }\n            Mj(g, f);\n            V = h;\n            return (e + 2) | 0;\n        }\n        function Jj(b) {\n            b = b | 0;\n            return ((a[(b + 2) >> 0] | 0) != 0) | 0;\n        }\n        function Kj(a, b) {\n            a = a | 0;\n            b = b | 0;\n            Te(a, b);\n            return;\n        }\n        function Lj(a) {\n            a = a | 0;\n            return Oe(a) | 0;\n        }\n        function Mj(c, d) {\n            c = c | 0;\n            d = d | 0;\n            var e = 0;\n            e = (c + 2) | 0;\n            if (!(a[e >> 0] | 0))\n                a[e >> 0] = 1;\n            b[c >> 1] = b[d >> 1] | 0;\n            return;\n        }\n        function Nj(a) {\n            a = a | 0;\n            pq(a);\n            jp(a);\n            return;\n        }\n        function Oj(a) {\n            a = a | 0;\n            a = c[(a + 12) >> 2] | 0;\n            if (a | 0)\n                ca[c[((c[a >> 2] | 0) + 4) >> 2] & 255](a);\n            return;\n        }\n        function Pj(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return ((c[(b + 4) >> 2] | 0) == 17398 ? (a + 12) | 0 : 0) | 0;\n        }\n        function Qj(a) {\n            a = a | 0;\n            Da(a, 16);\n            return;\n        }\n        function Rj(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, k = 0, l = 0;\n            j = V;\n            V = (V + 32) | 0;\n            e = (j + 12) | 0;\n            f = j;\n            b = (j + 8) | 0;\n            h = eq(172) | 0;\n            Tj(h, c[(a + 4) >> 2] | 0);\n            g = (a + 8) | 0;\n            c[b >> 2] = 0;\n            c[e >> 2] = c[b >> 2];\n            Uj(f, h, e);\n            h = (a + 12) | 0;\n            b = c[h >> 2] | 0;\n            i = (a + 16) | 0;\n            do\n                if (b >>> 0 >= (c[i >> 2] | 0) >>> 0) {\n                    b = (((b - (c[g >> 2] | 0)) >> 3) + 1) | 0;\n                    d = ee(g) | 0;\n                    if (d >>> 0 < b >>> 0)\n                        cr(g);\n                    else {\n                        k = c[g >> 2] | 0;\n                        l = ((c[i >> 2] | 0) - k) | 0;\n                        i = l >> 2;\n                        be(e, (l >> 3) >>> 0 < (d >>> 1) >>> 0 ? (i >>> 0 < b >>> 0 ? b : i) : d, ((c[h >> 2] | 0) - k) >> 3, (a + 16) | 0);\n                        i = (e + 8) | 0;\n                        h = c[i >> 2] | 0;\n                        c[h >> 2] = c[f >> 2];\n                        a = (f + 4) | 0;\n                        c[(h + 4) >> 2] = c[a >> 2];\n                        c[f >> 2] = 0;\n                        c[a >> 2] = 0;\n                        c[i >> 2] = h + 8;\n                        ce(g, e);\n                        de(e);\n                        break;\n                    }\n                }\n                else {\n                    $d(e, g, 1);\n                    l = (e + 4) | 0;\n                    k = c[l >> 2] | 0;\n                    c[k >> 2] = c[f >> 2];\n                    i = (f + 4) | 0;\n                    c[(k + 4) >> 2] = c[i >> 2];\n                    c[f >> 2] = 0;\n                    c[i >> 2] = 0;\n                    c[l >> 2] = k + 8;\n                    ae(e);\n                }\n            while (0);\n            Sd(f);\n            V = j;\n            return;\n        }\n        function Sj(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, k = 0, l = 0;\n            j = V;\n            V = (V + 32) | 0;\n            e = (j + 12) | 0;\n            f = j;\n            b = (j + 8) | 0;\n            h = eq(176) | 0;\n            gk(h, c[(a + 4) >> 2] | 0);\n            g = (a + 8) | 0;\n            c[b >> 2] = 0;\n            c[e >> 2] = c[b >> 2];\n            hk(f, h, e);\n            h = (a + 12) | 0;\n            b = c[h >> 2] | 0;\n            i = (a + 16) | 0;\n            do\n                if (b >>> 0 >= (c[i >> 2] | 0) >>> 0) {\n                    b = (((b - (c[g >> 2] | 0)) >> 3) + 1) | 0;\n                    d = ee(g) | 0;\n                    if (d >>> 0 < b >>> 0)\n                        cr(g);\n                    else {\n                        k = c[g >> 2] | 0;\n                        l = ((c[i >> 2] | 0) - k) | 0;\n                        i = l >> 2;\n                        be(e, (l >> 3) >>> 0 < (d >>> 1) >>> 0 ? (i >>> 0 < b >>> 0 ? b : i) : d, ((c[h >> 2] | 0) - k) >> 3, (a + 16) | 0);\n                        i = (e + 8) | 0;\n                        h = c[i >> 2] | 0;\n                        c[h >> 2] = c[f >> 2];\n                        a = (f + 4) | 0;\n                        c[(h + 4) >> 2] = c[a >> 2];\n                        c[f >> 2] = 0;\n                        c[a >> 2] = 0;\n                        c[i >> 2] = h + 8;\n                        ce(g, e);\n                        de(e);\n                        break;\n                    }\n                }\n                else {\n                    $d(e, g, 1);\n                    l = (e + 4) | 0;\n                    k = c[l >> 2] | 0;\n                    c[k >> 2] = c[f >> 2];\n                    i = (f + 4) | 0;\n                    c[(k + 4) >> 2] = c[i >> 2];\n                    c[f >> 2] = 0;\n                    c[i >> 2] = 0;\n                    c[l >> 2] = k + 8;\n                    ae(e);\n                }\n            while (0);\n            Sd(f);\n            V = j;\n            return;\n        }\n        function Tj(a, b) {\n            a = a | 0;\n            b = b | 0;\n            fe(a);\n            c[a >> 2] = 5428;\n            c[(a + 4) >> 2] = b;\n            Vj((a + 8) | 0);\n            return;\n        }\n        function Uj(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0;\n            d = V;\n            V = (V + 16) | 0;\n            e = d;\n            c[a >> 2] = b;\n            f = eq(16) | 0;\n            c[(f + 4) >> 2] = 0;\n            c[(f + 8) >> 2] = 0;\n            c[f >> 2] = 5452;\n            c[(f + 12) >> 2] = b;\n            c[(a + 4) >> 2] = f;\n            c[e >> 2] = b;\n            c[(e + 4) >> 2] = b;\n            Xe(a, e);\n            V = d;\n            return;\n        }\n        function Vj(b) {\n            b = b | 0;\n            xe(b, 8, 1, 8, 0);\n            mc((b + 80) | 0, 8, 1, 8, 0);\n            a[(b + 160) >> 0] = 0;\n            a[(b + 161) >> 0] = 0;\n            Zj((b + 162) | 0);\n            return;\n        }\n        function Wj(a) {\n            a = a | 0;\n            c[a >> 2] = 5428;\n            _j((a + 8) | 0);\n            le(a);\n            return;\n        }\n        function Xj(a) {\n            a = a | 0;\n            Wj(a);\n            jp(a);\n            return;\n        }\n        function Yj(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return $j((a + 8) | 0, c[(a + 4) >> 2] | 0, b) | 0;\n        }\n        function Zj(b) {\n            b = b | 0;\n            a[(b + 1) >> 0] = 0;\n            return;\n        }\n        function _j(a) {\n            a = a | 0;\n            qc((a + 80) | 0);\n            ye(a);\n            return;\n        }\n        function $j(b, c, e) {\n            b = b | 0;\n            c = c | 0;\n            e = e | 0;\n            var f = 0, g = 0, h = 0;\n            h = V;\n            V = (V + 16) | 0;\n            f = h;\n            if (!(a[(b + 161) >> 0] | 0))\n                oc((b + 80) | 0);\n            g = (b + 162) | 0;\n            if (ak(g) | 0) {\n                c = (Gi((b + 80) | 0, c, d[g >> 0] | 0, 0) | 0) & 255;\n                a[f >> 0] = c;\n                Ue(c, e);\n            }\n            else {\n                Ii(Hi(c) | 0, e, 1);\n                a[f >> 0] = Pe(e) | 0;\n            }\n            bk(g, f);\n            V = h;\n            return (e + 1) | 0;\n        }\n        function ak(b) {\n            b = b | 0;\n            return ((a[(b + 1) >> 0] | 0) != 0) | 0;\n        }\n        function bk(b, c) {\n            b = b | 0;\n            c = c | 0;\n            var d = 0;\n            d = (b + 1) | 0;\n            if (!(a[d >> 0] | 0))\n                a[d >> 0] = 1;\n            a[b >> 0] = a[c >> 0] | 0;\n            return;\n        }\n        function ck(a) {\n            a = a | 0;\n            pq(a);\n            jp(a);\n            return;\n        }\n        function dk(a) {\n            a = a | 0;\n            a = c[(a + 12) >> 2] | 0;\n            if (a | 0)\n                ca[c[((c[a >> 2] | 0) + 4) >> 2] & 255](a);\n            return;\n        }\n        function ek(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return ((c[(b + 4) >> 2] | 0) == 17896 ? (a + 12) | 0 : 0) | 0;\n        }\n        function fk(a) {\n            a = a | 0;\n            Da(a, 16);\n            return;\n        }\n        function gk(a, b) {\n            a = a | 0;\n            b = b | 0;\n            fe(a);\n            c[a >> 2] = 5480;\n            c[(a + 4) >> 2] = b;\n            ik((a + 8) | 0);\n            return;\n        }\n        function hk(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0;\n            d = V;\n            V = (V + 16) | 0;\n            e = d;\n            c[a >> 2] = b;\n            f = eq(16) | 0;\n            c[(f + 4) >> 2] = 0;\n            c[(f + 8) >> 2] = 0;\n            c[f >> 2] = 5504;\n            c[(f + 12) >> 2] = b;\n            c[(a + 4) >> 2] = f;\n            c[e >> 2] = b;\n            c[(e + 4) >> 2] = b;\n            Xe(a, e);\n            V = d;\n            return;\n        }\n        function ik(b) {\n            b = b | 0;\n            xe(b, 16, 1, 8, 0);\n            mc((b + 80) | 0, 16, 1, 8, 0);\n            a[(b + 160) >> 0] = 0;\n            a[(b + 161) >> 0] = 0;\n            mk((b + 162) | 0);\n            return;\n        }\n        function jk(a) {\n            a = a | 0;\n            c[a >> 2] = 5480;\n            nk((a + 8) | 0);\n            le(a);\n            return;\n        }\n        function kk(a) {\n            a = a | 0;\n            jk(a);\n            jp(a);\n            return;\n        }\n        function lk(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return ok((a + 8) | 0, c[(a + 4) >> 2] | 0, b) | 0;\n        }\n        function mk(b) {\n            b = b | 0;\n            a[(b + 2) >> 0] = 0;\n            return;\n        }\n        function nk(a) {\n            a = a | 0;\n            qc((a + 80) | 0);\n            ye(a);\n            return;\n        }\n        function ok(c, d, f) {\n            c = c | 0;\n            d = d | 0;\n            f = f | 0;\n            var g = 0, h = 0, i = 0;\n            i = V;\n            V = (V + 16) | 0;\n            g = i;\n            if (!(a[(c + 161) >> 0] | 0))\n                oc((c + 80) | 0);\n            h = (c + 162) | 0;\n            if (pk(h) | 0) {\n                d = (Gi((c + 80) | 0, d, e[h >> 1] | 0, 0) | 0) & 65535;\n                b[g >> 1] = d;\n                Te(d, f);\n            }\n            else {\n                Ii(Hi(d) | 0, f, 2);\n                b[g >> 1] = Oe(f) | 0;\n            }\n            qk(h, g);\n            V = i;\n            return (f + 2) | 0;\n        }\n        function pk(b) {\n            b = b | 0;\n            return ((a[(b + 2) >> 0] | 0) != 0) | 0;\n        }\n        function qk(c, d) {\n            c = c | 0;\n            d = d | 0;\n            var e = 0;\n            e = (c + 2) | 0;\n            if (!(a[e >> 0] | 0))\n                a[e >> 0] = 1;\n            b[c >> 1] = b[d >> 1] | 0;\n            return;\n        }\n        function rk(a) {\n            a = a | 0;\n            pq(a);\n            jp(a);\n            return;\n        }\n        function sk(a) {\n            a = a | 0;\n            a = c[(a + 12) >> 2] | 0;\n            if (a | 0)\n                ca[c[((c[a >> 2] | 0) + 4) >> 2] & 255](a);\n            return;\n        }\n        function tk(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return ((c[(b + 4) >> 2] | 0) == 18394 ? (a + 12) | 0 : 0) | 0;\n        }\n        function uk(a) {\n            a = a | 0;\n            Da(a, 16);\n            return;\n        }\n        function vk() {\n            return;\n        }\n        function wk(a) {\n            a = a | 0;\n            return Ek(a) | 0;\n        }\n        function xk() {\n            return 0;\n        }\n        function yk() {\n            return 0;\n        }\n        function zk(a) {\n            a = a | 0;\n            if (a | 0) {\n                Fk(a);\n                jp(a);\n            }\n            return;\n        }\n        function Ak() {\n            return Gk() | 0;\n        }\n        function Bk() {\n            return Hk() | 0;\n        }\n        function Ck() {\n            return Ik() | 0;\n        }\n        function Dk() {\n            return 0;\n        }\n        function Ek(a) {\n            a = a | 0;\n            return 3360;\n        }\n        function Fk(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0, f = 0;\n            b = V;\n            V = (V + 16) | 0;\n            e = b;\n            c[e >> 2] = c[a >> 2];\n            c[a >> 2] = 0;\n            d = (a + 4) | 0;\n            c[(e + 4) >> 2] = c[d >> 2];\n            c[d >> 2] = 0;\n            wa(e);\n            d = (a + 8) | 0;\n            c[e >> 2] = c[d >> 2];\n            c[d >> 2] = 0;\n            f = (a + 12) | 0;\n            c[(e + 4) >> 2] = c[f >> 2];\n            c[f >> 2] = 0;\n            Ga(e);\n            Ga(d);\n            wa(a);\n            V = b;\n            return;\n        }\n        function Gk() {\n            return 3360;\n        }\n        function Hk() {\n            return 3368;\n        }\n        function Ik() {\n            return 3384;\n        }\n        function Jk() {\n            return 18579;\n        }\n        function Kk() {\n            return 18582;\n        }\n        function Lk() {\n            return 18584;\n        }\n        function Mk() {\n            var a = 0;\n            a = eq(16) | 0;\n            Tk(a);\n            return a | 0;\n        }\n        function Nk(a) {\n            a = a | 0;\n            var b = 0, c = 0, d = 0, e = 0;\n            b = V;\n            V = (V + 16) | 0;\n            c = b;\n            e = Ak() | 0;\n            d = Pk(c) | 0;\n            c = Qk(c) | 0;\n            E(e | 0, d | 0, c | 0, Jk() | 0, 12, a | 0);\n            V = b;\n            return;\n        }\n        function Ok(a) {\n            a = a | 0;\n            return Rk(Y[a & 3]() | 0) | 0;\n        }\n        function Pk(a) {\n            a = a | 0;\n            return 1;\n        }\n        function Qk(a) {\n            a = a | 0;\n            return Sk() | 0;\n        }\n        function Rk(a) {\n            a = a | 0;\n            return a | 0;\n        }\n        function Sk() {\n            return 5524;\n        }\n        function Tk(a) {\n            a = a | 0;\n            c[a >> 2] = 0;\n            c[(a + 4) >> 2] = 0;\n            c[(a + 8) >> 2] = 0;\n            c[(a + 12) >> 2] = 0;\n            return;\n        }\n        function Uk(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0, f = 0, g = 0, h = 0;\n            d = V;\n            V = (V + 16) | 0;\n            e = d;\n            f = (d + 8) | 0;\n            h = c[(b + 4) >> 2] | 0;\n            c[e >> 2] = c[b >> 2];\n            c[(e + 4) >> 2] = h;\n            h = Ak() | 0;\n            g = Wk(f) | 0;\n            f = Xk(f) | 0;\n            b = bl() | 0;\n            F(h | 0, a | 0, g | 0, f | 0, b | 0, 4, Yk(e) | 0, 0);\n            V = d;\n            return;\n        }\n        function Vk(a, b, d, e) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            var f = 0, g = 0;\n            g = Zk(b) | 0;\n            b = c[a >> 2] | 0;\n            f = c[(a + 4) >> 2] | 0;\n            a = (g + (f >> 1)) | 0;\n            if (f & 1)\n                b = c[((c[a >> 2] | 0) + b) >> 2] | 0;\n            f = _k(d) | 0;\n            g = $k(e) | 0;\n            ea[b & 15](a, f, g);\n            return;\n        }\n        function Wk(a) {\n            a = a | 0;\n            return 4;\n        }\n        function Xk(a) {\n            a = a | 0;\n            return al() | 0;\n        }\n        function Yk(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            b = eq(8) | 0;\n            d = c[(a + 4) >> 2] | 0;\n            c[b >> 2] = c[a >> 2];\n            c[(b + 4) >> 2] = d;\n            return b | 0;\n        }\n        function Zk(a) {\n            a = a | 0;\n            return a | 0;\n        }\n        function _k(a) {\n            a = a | 0;\n            return a | 0;\n        }\n        function $k(a) {\n            a = a | 0;\n            return a | 0;\n        }\n        function al() {\n            return 144;\n        }\n        function bl() {\n            return 18587;\n        }\n        function cl(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0, f = 0, g = 0, h = 0;\n            d = V;\n            V = (V + 16) | 0;\n            e = d;\n            f = (d + 8) | 0;\n            h = c[(b + 4) >> 2] | 0;\n            c[e >> 2] = c[b >> 2];\n            c[(e + 4) >> 2] = h;\n            h = Ak() | 0;\n            g = el(f) | 0;\n            f = fl(f) | 0;\n            b = jl() | 0;\n            F(h | 0, a | 0, g | 0, f | 0, b | 0, 7, gl(e) | 0, 0);\n            V = d;\n            return;\n        }\n        function dl(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0;\n            f = Zk(b) | 0;\n            b = c[a >> 2] | 0;\n            e = c[(a + 4) >> 2] | 0;\n            a = (f + (e >> 1)) | 0;\n            if (e & 1)\n                b = c[((c[a >> 2] | 0) + b) >> 2] | 0;\n            f = hl(d) | 0;\n            da[b & 15](a, f);\n            return;\n        }\n        function el(a) {\n            a = a | 0;\n            return 3;\n        }\n        function fl(a) {\n            a = a | 0;\n            return il() | 0;\n        }\n        function gl(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            b = eq(8) | 0;\n            d = c[(a + 4) >> 2] | 0;\n            c[b >> 2] = c[a >> 2];\n            c[(b + 4) >> 2] = d;\n            return b | 0;\n        }\n        function hl(a) {\n            a = a | 0;\n            return a | 0;\n        }\n        function il() {\n            return 5528;\n        }\n        function jl() {\n            return 18593;\n        }\n        function kl(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0, f = 0, g = 0, h = 0;\n            d = V;\n            V = (V + 16) | 0;\n            e = d;\n            f = (d + 8) | 0;\n            h = c[(b + 4) >> 2] | 0;\n            c[e >> 2] = c[b >> 2];\n            c[(e + 4) >> 2] = h;\n            h = Ak() | 0;\n            g = ml(f) | 0;\n            f = nl(f) | 0;\n            b = rl() | 0;\n            F(h | 0, a | 0, g | 0, f | 0, b | 0, 41, ol(e) | 0, 0);\n            V = d;\n            return;\n        }\n        function ll(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0, f = 0, g = 0;\n            e = V;\n            V = (V + 16) | 0;\n            d = e;\n            g = Zk(b) | 0;\n            b = c[a >> 2] | 0;\n            f = c[(a + 4) >> 2] | 0;\n            a = (g + (f >> 1)) | 0;\n            if (f & 1)\n                b = c[((c[a >> 2] | 0) + b) >> 2] | 0;\n            c[d >> 2] = Z[b & 15](a) | 0;\n            g = pl(d) | 0;\n            V = e;\n            return g | 0;\n        }\n        function ml(a) {\n            a = a | 0;\n            return 2;\n        }\n        function nl(a) {\n            a = a | 0;\n            return ql() | 0;\n        }\n        function ol(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            b = eq(8) | 0;\n            d = c[(a + 4) >> 2] | 0;\n            c[b >> 2] = c[a >> 2];\n            c[(b + 4) >> 2] = d;\n            return b | 0;\n        }\n        function pl(a) {\n            a = a | 0;\n            return c[a >> 2] | 0;\n        }\n        function ql() {\n            return 5540;\n        }\n        function rl() {\n            return 18598;\n        }\n        function sl() {\n            return;\n        }\n        function tl(a) {\n            a = a | 0;\n            return Al(a) | 0;\n        }\n        function ul() {\n            return 0;\n        }\n        function vl() {\n            return 0;\n        }\n        function wl(a) {\n            a = a | 0;\n            if (a | 0) {\n                Bl(a);\n                jp(a);\n            }\n            return;\n        }\n        function xl() {\n            return Cl() | 0;\n        }\n        function yl() {\n            return Dl() | 0;\n        }\n        function zl() {\n            return El() | 0;\n        }\n        function Al(a) {\n            a = a | 0;\n            return 3400;\n        }\n        function Bl(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0, f = 0;\n            b = V;\n            V = (V + 16) | 0;\n            e = b;\n            c[e >> 2] = c[a >> 2];\n            c[a >> 2] = 0;\n            d = (a + 4) | 0;\n            c[(e + 4) >> 2] = c[d >> 2];\n            c[d >> 2] = 0;\n            Wh(e);\n            d = (a + 16) | 0;\n            c[e >> 2] = c[d >> 2];\n            c[d >> 2] = 0;\n            f = (a + 20) | 0;\n            c[(e + 4) >> 2] = c[f >> 2];\n            c[f >> 2] = 0;\n            Uh(e);\n            c[e >> 2] = c[d >> 2];\n            c[d >> 2] = 0;\n            c[(e + 4) >> 2] = c[f >> 2];\n            c[f >> 2] = 0;\n            Uh(e);\n            Uh(d);\n            bi((a + 8) | 0);\n            Wh(a);\n            V = b;\n            return;\n        }\n        function Cl() {\n            return 3400;\n        }\n        function Dl() {\n            return 3408;\n        }\n        function El() {\n            return 3424;\n        }\n        function Fl() {\n            var a = 0;\n            a = eq(24) | 0;\n            Ml(a);\n            return a | 0;\n        }\n        function Gl(a) {\n            a = a | 0;\n            var b = 0, c = 0, d = 0, e = 0;\n            b = V;\n            V = (V + 16) | 0;\n            c = b;\n            e = xl() | 0;\n            d = Il(c) | 0;\n            c = Jl(c) | 0;\n            E(e | 0, d | 0, c | 0, Jk() | 0, 13, a | 0);\n            V = b;\n            return;\n        }\n        function Hl(a) {\n            a = a | 0;\n            return Kl(Y[a & 3]() | 0) | 0;\n        }\n        function Il(a) {\n            a = a | 0;\n            return 1;\n        }\n        function Jl(a) {\n            a = a | 0;\n            return Ll() | 0;\n        }\n        function Kl(a) {\n            a = a | 0;\n            return a | 0;\n        }\n        function Ll() {\n            return 5548;\n        }\n        function Ml(a) {\n            a = a | 0;\n            c[a >> 2] = 0;\n            c[(a + 4) >> 2] = 0;\n            c[(a + 8) >> 2] = 0;\n            c[(a + 12) >> 2] = 0;\n            c[(a + 16) >> 2] = 0;\n            c[(a + 20) >> 2] = 0;\n            return;\n        }\n        function Nl(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0, f = 0, g = 0, h = 0;\n            d = V;\n            V = (V + 16) | 0;\n            e = d;\n            f = (d + 8) | 0;\n            h = c[(b + 4) >> 2] | 0;\n            c[e >> 2] = c[b >> 2];\n            c[(e + 4) >> 2] = h;\n            h = xl() | 0;\n            g = Pl(f) | 0;\n            f = Ql(f) | 0;\n            b = bl() | 0;\n            F(h | 0, a | 0, g | 0, f | 0, b | 0, 5, Rl(e) | 0, 0);\n            V = d;\n            return;\n        }\n        function Ol(a, b, d, e) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            var f = 0, g = 0;\n            g = Sl(b) | 0;\n            b = c[a >> 2] | 0;\n            f = c[(a + 4) >> 2] | 0;\n            a = (g + (f >> 1)) | 0;\n            if (f & 1)\n                b = c[((c[a >> 2] | 0) + b) >> 2] | 0;\n            f = _k(d) | 0;\n            g = $k(e) | 0;\n            ea[b & 15](a, f, g);\n            return;\n        }\n        function Pl(a) {\n            a = a | 0;\n            return 4;\n        }\n        function Ql(a) {\n            a = a | 0;\n            return Tl() | 0;\n        }\n        function Rl(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            b = eq(8) | 0;\n            d = c[(a + 4) >> 2] | 0;\n            c[b >> 2] = c[a >> 2];\n            c[(b + 4) >> 2] = d;\n            return b | 0;\n        }\n        function Sl(a) {\n            a = a | 0;\n            return a | 0;\n        }\n        function Tl() {\n            return 160;\n        }\n        function Ul(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0, f = 0, g = 0, h = 0;\n            d = V;\n            V = (V + 16) | 0;\n            e = d;\n            f = (d + 8) | 0;\n            h = c[(b + 4) >> 2] | 0;\n            c[e >> 2] = c[b >> 2];\n            c[(e + 4) >> 2] = h;\n            h = xl() | 0;\n            g = Wl(f) | 0;\n            f = Xl(f) | 0;\n            b = jl() | 0;\n            F(h | 0, a | 0, g | 0, f | 0, b | 0, 8, Yl(e) | 0, 0);\n            V = d;\n            return;\n        }\n        function Vl(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0;\n            f = Sl(b) | 0;\n            b = c[a >> 2] | 0;\n            e = c[(a + 4) >> 2] | 0;\n            a = (f + (e >> 1)) | 0;\n            if (e & 1)\n                b = c[((c[a >> 2] | 0) + b) >> 2] | 0;\n            f = $k(d) | 0;\n            da[b & 15](a, f);\n            return;\n        }\n        function Wl(a) {\n            a = a | 0;\n            return 3;\n        }\n        function Xl(a) {\n            a = a | 0;\n            return Zl() | 0;\n        }\n        function Yl(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            b = eq(8) | 0;\n            d = c[(a + 4) >> 2] | 0;\n            c[b >> 2] = c[a >> 2];\n            c[(b + 4) >> 2] = d;\n            return b | 0;\n        }\n        function Zl() {\n            return 5552;\n        }\n        function _l(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0, f = 0, g = 0, h = 0;\n            d = V;\n            V = (V + 16) | 0;\n            e = d;\n            f = (d + 8) | 0;\n            h = c[(b + 4) >> 2] | 0;\n            c[e >> 2] = c[b >> 2];\n            c[(e + 4) >> 2] = h;\n            h = xl() | 0;\n            g = am(f) | 0;\n            f = bm(f) | 0;\n            b = jl() | 0;\n            F(h | 0, a | 0, g | 0, f | 0, b | 0, 9, cm(e) | 0, 0);\n            V = d;\n            return;\n        }\n        function $l(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0;\n            f = Sl(b) | 0;\n            b = c[a >> 2] | 0;\n            e = c[(a + 4) >> 2] | 0;\n            a = (f + (e >> 1)) | 0;\n            if (e & 1)\n                b = c[((c[a >> 2] | 0) + b) >> 2] | 0;\n            f = hl(d) | 0;\n            da[b & 15](a, f);\n            return;\n        }\n        function am(a) {\n            a = a | 0;\n            return 3;\n        }\n        function bm(a) {\n            a = a | 0;\n            return dm() | 0;\n        }\n        function cm(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            b = eq(8) | 0;\n            d = c[(a + 4) >> 2] | 0;\n            c[b >> 2] = c[a >> 2];\n            c[(b + 4) >> 2] = d;\n            return b | 0;\n        }\n        function dm() {\n            return 5564;\n        }\n        function em() {\n            ja();\n            return;\n        }\n        function fm() {\n            gm();\n            return;\n        }\n        function gm() {\n            hm(22144);\n            return;\n        }\n        function hm(a) {\n            a = a | 0;\n            var b = 0;\n            b = V;\n            V = (V + 16) | 0;\n            c[b >> 2] = a;\n            im();\n            V = b;\n            return;\n        }\n        function im() {\n            M(jm() | 0, 18653);\n            C(km() | 0, 18658, 1, 1, 0);\n            lm(18663);\n            mm(18668);\n            nm(18680);\n            om(18694);\n            pm(18700);\n            qm(18715);\n            rm(18719);\n            sm(18732);\n            tm(18737);\n            um(18751);\n            vm(18757);\n            K(wm() | 0, 18764);\n            K(xm() | 0, 18776);\n            L(ym() | 0, 4, 18809);\n            L(zm() | 0, 2, 18822);\n            L(Am() | 0, 4, 18837);\n            G(Bm() | 0, 18852);\n            Cm(18868);\n            Dm(18898);\n            Em(18935);\n            Fm(18974);\n            Gm(19005);\n            Hm(19045);\n            Im(19074);\n            Jm(19112);\n            Km(19142);\n            Dm(19181);\n            Em(19213);\n            Fm(19246);\n            Gm(19279);\n            Hm(19313);\n            Im(19346);\n            Lm(19380);\n            Mm(19411);\n            Nm(19443);\n            return;\n        }\n        function jm() {\n            return _n() | 0;\n        }\n        function km() {\n            return Zn() | 0;\n        }\n        function lm(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            b = V;\n            V = (V + 16) | 0;\n            d = b;\n            c[d >> 2] = a;\n            a = Xn() | 0;\n            I(a | 0, c[d >> 2] | 0, 1, ((-128 << 24) >> 24) | 0, ((127 << 24) >> 24) | 0);\n            V = b;\n            return;\n        }\n        function mm(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            b = V;\n            V = (V + 16) | 0;\n            d = b;\n            c[d >> 2] = a;\n            a = Vn() | 0;\n            I(a | 0, c[d >> 2] | 0, 1, ((-128 << 24) >> 24) | 0, ((127 << 24) >> 24) | 0);\n            V = b;\n            return;\n        }\n        function nm(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            b = V;\n            V = (V + 16) | 0;\n            d = b;\n            c[d >> 2] = a;\n            a = Tn() | 0;\n            I(a | 0, c[d >> 2] | 0, 1, 0, 255);\n            V = b;\n            return;\n        }\n        function om(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            b = V;\n            V = (V + 16) | 0;\n            d = b;\n            c[d >> 2] = a;\n            a = Rn() | 0;\n            I(a | 0, c[d >> 2] | 0, 2, ((-32768 << 16) >> 16) | 0, ((32767 << 16) >> 16) | 0);\n            V = b;\n            return;\n        }\n        function pm(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            b = V;\n            V = (V + 16) | 0;\n            d = b;\n            c[d >> 2] = a;\n            a = Pn() | 0;\n            I(a | 0, c[d >> 2] | 0, 2, 0, 65535);\n            V = b;\n            return;\n        }\n        function qm(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            b = V;\n            V = (V + 16) | 0;\n            d = b;\n            c[d >> 2] = a;\n            a = Nn() | 0;\n            I(a | 0, c[d >> 2] | 0, 4, -2147483648, 2147483647);\n            V = b;\n            return;\n        }\n        function rm(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            b = V;\n            V = (V + 16) | 0;\n            d = b;\n            c[d >> 2] = a;\n            a = Ln() | 0;\n            I(a | 0, c[d >> 2] | 0, 4, 0, -1);\n            V = b;\n            return;\n        }\n        function sm(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            b = V;\n            V = (V + 16) | 0;\n            d = b;\n            c[d >> 2] = a;\n            a = Jn() | 0;\n            I(a | 0, c[d >> 2] | 0, 4, -2147483648, 2147483647);\n            V = b;\n            return;\n        }\n        function tm(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            b = V;\n            V = (V + 16) | 0;\n            d = b;\n            c[d >> 2] = a;\n            a = Hn() | 0;\n            I(a | 0, c[d >> 2] | 0, 4, 0, -1);\n            V = b;\n            return;\n        }\n        function um(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            b = V;\n            V = (V + 16) | 0;\n            d = b;\n            c[d >> 2] = a;\n            a = Fn() | 0;\n            H(a | 0, c[d >> 2] | 0, 4);\n            V = b;\n            return;\n        }\n        function vm(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            b = V;\n            V = (V + 16) | 0;\n            d = b;\n            c[d >> 2] = a;\n            a = Dn() | 0;\n            H(a | 0, c[d >> 2] | 0, 8);\n            V = b;\n            return;\n        }\n        function wm() {\n            return Cn() | 0;\n        }\n        function xm() {\n            return Bn() | 0;\n        }\n        function ym() {\n            return An() | 0;\n        }\n        function zm() {\n            return zn() | 0;\n        }\n        function Am() {\n            return yn() | 0;\n        }\n        function Bm() {\n            return xn() | 0;\n        }\n        function Cm(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0;\n            b = V;\n            V = (V + 16) | 0;\n            d = b;\n            c[d >> 2] = a;\n            e = un() | 0;\n            a = vn() | 0;\n            J(e | 0, a | 0, c[d >> 2] | 0);\n            V = b;\n            return;\n        }\n        function Dm(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0;\n            b = V;\n            V = (V + 16) | 0;\n            d = b;\n            c[d >> 2] = a;\n            e = rn() | 0;\n            a = sn() | 0;\n            J(e | 0, a | 0, c[d >> 2] | 0);\n            V = b;\n            return;\n        }\n        function Em(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0;\n            b = V;\n            V = (V + 16) | 0;\n            d = b;\n            c[d >> 2] = a;\n            e = on() | 0;\n            a = pn() | 0;\n            J(e | 0, a | 0, c[d >> 2] | 0);\n            V = b;\n            return;\n        }\n        function Fm(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0;\n            b = V;\n            V = (V + 16) | 0;\n            d = b;\n            c[d >> 2] = a;\n            e = ln() | 0;\n            a = mn() | 0;\n            J(e | 0, a | 0, c[d >> 2] | 0);\n            V = b;\n            return;\n        }\n        function Gm(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0;\n            b = V;\n            V = (V + 16) | 0;\n            d = b;\n            c[d >> 2] = a;\n            e = hn() | 0;\n            a = jn() | 0;\n            J(e | 0, a | 0, c[d >> 2] | 0);\n            V = b;\n            return;\n        }\n        function Hm(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0;\n            b = V;\n            V = (V + 16) | 0;\n            d = b;\n            c[d >> 2] = a;\n            e = en() | 0;\n            a = fn() | 0;\n            J(e | 0, a | 0, c[d >> 2] | 0);\n            V = b;\n            return;\n        }\n        function Im(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0;\n            b = V;\n            V = (V + 16) | 0;\n            d = b;\n            c[d >> 2] = a;\n            e = bn() | 0;\n            a = cn() | 0;\n            J(e | 0, a | 0, c[d >> 2] | 0);\n            V = b;\n            return;\n        }\n        function Jm(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0;\n            b = V;\n            V = (V + 16) | 0;\n            d = b;\n            c[d >> 2] = a;\n            e = _m() | 0;\n            a = $m() | 0;\n            J(e | 0, a | 0, c[d >> 2] | 0);\n            V = b;\n            return;\n        }\n        function Km(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0;\n            b = V;\n            V = (V + 16) | 0;\n            d = b;\n            c[d >> 2] = a;\n            e = Xm() | 0;\n            a = Ym() | 0;\n            J(e | 0, a | 0, c[d >> 2] | 0);\n            V = b;\n            return;\n        }\n        function Lm(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0;\n            b = V;\n            V = (V + 16) | 0;\n            d = b;\n            c[d >> 2] = a;\n            e = Um() | 0;\n            a = Vm() | 0;\n            J(e | 0, a | 0, c[d >> 2] | 0);\n            V = b;\n            return;\n        }\n        function Mm(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0;\n            b = V;\n            V = (V + 16) | 0;\n            d = b;\n            c[d >> 2] = a;\n            e = Rm() | 0;\n            a = Sm() | 0;\n            J(e | 0, a | 0, c[d >> 2] | 0);\n            V = b;\n            return;\n        }\n        function Nm(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0;\n            b = V;\n            V = (V + 16) | 0;\n            d = b;\n            c[d >> 2] = a;\n            e = Om() | 0;\n            a = Pm() | 0;\n            J(e | 0, a | 0, c[d >> 2] | 0);\n            V = b;\n            return;\n        }\n        function Om() {\n            return Qm() | 0;\n        }\n        function Pm() {\n            return 7;\n        }\n        function Qm() {\n            return 3440;\n        }\n        function Rm() {\n            return Tm() | 0;\n        }\n        function Sm() {\n            return 7;\n        }\n        function Tm() {\n            return 3448;\n        }\n        function Um() {\n            return Wm() | 0;\n        }\n        function Vm() {\n            return 6;\n        }\n        function Wm() {\n            return 3456;\n        }\n        function Xm() {\n            return Zm() | 0;\n        }\n        function Ym() {\n            return 5;\n        }\n        function Zm() {\n            return 3464;\n        }\n        function _m() {\n            return an() | 0;\n        }\n        function $m() {\n            return 4;\n        }\n        function an() {\n            return 3472;\n        }\n        function bn() {\n            return dn() | 0;\n        }\n        function cn() {\n            return 5;\n        }\n        function dn() {\n            return 3480;\n        }\n        function en() {\n            return gn() | 0;\n        }\n        function fn() {\n            return 4;\n        }\n        function gn() {\n            return 3488;\n        }\n        function hn() {\n            return kn() | 0;\n        }\n        function jn() {\n            return 3;\n        }\n        function kn() {\n            return 3496;\n        }\n        function ln() {\n            return nn() | 0;\n        }\n        function mn() {\n            return 2;\n        }\n        function nn() {\n            return 3504;\n        }\n        function on() {\n            return qn() | 0;\n        }\n        function pn() {\n            return 1;\n        }\n        function qn() {\n            return 3512;\n        }\n        function rn() {\n            return tn() | 0;\n        }\n        function sn() {\n            return 0;\n        }\n        function tn() {\n            return 3520;\n        }\n        function un() {\n            return wn() | 0;\n        }\n        function vn() {\n            return 0;\n        }\n        function wn() {\n            return 3528;\n        }\n        function xn() {\n            return 3536;\n        }\n        function yn() {\n            return 3544;\n        }\n        function zn() {\n            return 3576;\n        }\n        function An() {\n            return 3600;\n        }\n        function Bn() {\n            return 3624;\n        }\n        function Cn() {\n            return 3648;\n        }\n        function Dn() {\n            return En() | 0;\n        }\n        function En() {\n            return 4144;\n        }\n        function Fn() {\n            return Gn() | 0;\n        }\n        function Gn() {\n            return 4136;\n        }\n        function Hn() {\n            return In() | 0;\n        }\n        function In() {\n            return 4128;\n        }\n        function Jn() {\n            return Kn() | 0;\n        }\n        function Kn() {\n            return 4120;\n        }\n        function Ln() {\n            return Mn() | 0;\n        }\n        function Mn() {\n            return 4112;\n        }\n        function Nn() {\n            return On() | 0;\n        }\n        function On() {\n            return 4104;\n        }\n        function Pn() {\n            return Qn() | 0;\n        }\n        function Qn() {\n            return 4096;\n        }\n        function Rn() {\n            return Sn() | 0;\n        }\n        function Sn() {\n            return 4088;\n        }\n        function Tn() {\n            return Un() | 0;\n        }\n        function Un() {\n            return 4072;\n        }\n        function Vn() {\n            return Wn() | 0;\n        }\n        function Wn() {\n            return 4080;\n        }\n        function Xn() {\n            return Yn() | 0;\n        }\n        function Yn() {\n            return 4064;\n        }\n        function Zn() {\n            return 4056;\n        }\n        function _n() {\n            return 4040;\n        }\n        function $n(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0, f = 0;\n            b = V;\n            V = (V + 16) | 0;\n            d = (b + 8) | 0;\n            e = (b + 4) | 0;\n            f = b;\n            c[f >> 2] = a;\n            c[e >> 2] = c[f >> 2];\n            c[d >> 2] = c[((c[e >> 2] | 0) + 4) >> 2];\n            a = Jo(c[d >> 2] | 0) | 0;\n            V = b;\n            return a | 0;\n        }\n        function ao() {\n            return 21636;\n        }\n        function bo(a) {\n            a = a | 0;\n            return (((a + -48) | 0) >>> 0 < 10) | 0;\n        }\n        function co() {\n            return 5576;\n        }\n        function eo(b, c) {\n            b = b | 0;\n            c = c | 0;\n            var d = 0, e = 0;\n            d = a[b >> 0] | 0;\n            e = a[c >> 0] | 0;\n            if ((d << 24) >> 24 == 0 ? 1 : (d << 24) >> 24 != (e << 24) >> 24)\n                b = e;\n            else {\n                do {\n                    b = (b + 1) | 0;\n                    c = (c + 1) | 0;\n                    d = a[b >> 0] | 0;\n                    e = a[c >> 0] | 0;\n                } while (!((d << 24) >> 24 == 0 ? 1 : (d << 24) >> 24 != (e << 24) >> 24));\n                b = e;\n            }\n            return ((d & 255) - (b & 255)) | 0;\n        }\n        function fo(b) {\n            b = b | 0;\n            var d = 0, e = 0, f = 0;\n            f = b;\n            a: do\n                if (!(f & 3))\n                    e = 5;\n                else {\n                    d = f;\n                    while (1) {\n                        if (!(a[b >> 0] | 0)) {\n                            b = d;\n                            break a;\n                        }\n                        b = (b + 1) | 0;\n                        d = b;\n                        if (!(d & 3)) {\n                            e = 5;\n                            break;\n                        }\n                    }\n                }\n            while (0);\n            if ((e | 0) == 5) {\n                while (1) {\n                    d = c[b >> 2] | 0;\n                    if (!(((d & -2139062144) ^ -2139062144) & (d + -16843009)))\n                        b = (b + 4) | 0;\n                    else\n                        break;\n                }\n                if (((d & 255) << 24) >> 24)\n                    do\n                        b = (b + 1) | 0;\n                    while ((a[b >> 0] | 0) != 0);\n            }\n            return (b - f) | 0;\n        }\n        function go(a) {\n            a = a | 0;\n            return;\n        }\n        function ho(a) {\n            a = a | 0;\n            return 1;\n        }\n        function io(b) {\n            b = b | 0;\n            var d = 0, e = 0;\n            d = (b + 74) | 0;\n            e = a[d >> 0] | 0;\n            a[d >> 0] = (e + 255) | e;\n            d = c[b >> 2] | 0;\n            if (!(d & 8)) {\n                c[(b + 8) >> 2] = 0;\n                c[(b + 4) >> 2] = 0;\n                e = c[(b + 44) >> 2] | 0;\n                c[(b + 28) >> 2] = e;\n                c[(b + 20) >> 2] = e;\n                c[(b + 16) >> 2] = e + (c[(b + 48) >> 2] | 0);\n                b = 0;\n            }\n            else {\n                c[b >> 2] = d | 32;\n                b = -1;\n            }\n            return b | 0;\n        }\n        function jo(b, d, e) {\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            var f = 0, g = 0, h = 0, i = 0, j = 0;\n            f = (e + 16) | 0;\n            g = c[f >> 2] | 0;\n            if (!g)\n                if (!(io(e) | 0)) {\n                    g = c[f >> 2] | 0;\n                    h = 5;\n                }\n                else\n                    f = 0;\n            else\n                h = 5;\n            a: do\n                if ((h | 0) == 5) {\n                    j = (e + 20) | 0;\n                    i = c[j >> 2] | 0;\n                    f = i;\n                    if (((g - i) | 0) >>> 0 < d >>> 0) {\n                        f = aa[c[(e + 36) >> 2] & 7](e, b, d) | 0;\n                        break;\n                    }\n                    b: do\n                        if (((a[(e + 75) >> 0] | 0) < 0) | ((d | 0) == 0)) {\n                            h = 0;\n                            g = b;\n                        }\n                        else {\n                            i = d;\n                            while (1) {\n                                g = (i + -1) | 0;\n                                if ((a[(b + g) >> 0] | 0) == 10)\n                                    break;\n                                if (!g) {\n                                    h = 0;\n                                    g = b;\n                                    break b;\n                                }\n                                else\n                                    i = g;\n                            }\n                            f = aa[c[(e + 36) >> 2] & 7](e, b, i) | 0;\n                            if (f >>> 0 < i >>> 0)\n                                break a;\n                            h = i;\n                            g = (b + i) | 0;\n                            d = (d - i) | 0;\n                            f = c[j >> 2] | 0;\n                        }\n                    while (0);\n                    ur(f | 0, g | 0, d | 0) | 0;\n                    c[j >> 2] = (c[j >> 2] | 0) + d;\n                    f = (h + d) | 0;\n                }\n            while (0);\n            return f | 0;\n        }\n        function ko(a, b) {\n            a = a | 0;\n            b = b | 0;\n            if (!b)\n                b = 0;\n            else\n                b = lo(c[b >> 2] | 0, c[(b + 4) >> 2] | 0, a) | 0;\n            return ((b | 0) == 0 ? a : b) | 0;\n        }\n        function lo(b, d, e) {\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            var f = 0, g = 0, h = 0, i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0;\n            o = ((c[b >> 2] | 0) + 1794895138) | 0;\n            h = mo(c[(b + 8) >> 2] | 0, o) | 0;\n            f = mo(c[(b + 12) >> 2] | 0, o) | 0;\n            g = mo(c[(b + 16) >> 2] | 0, o) | 0;\n            a: do\n                if ((h >>> 0 < (d >>> 2) >>> 0\n                    ? ((n = (d - (h << 2)) | 0), (f >>> 0 < n >>> 0) & (g >>> 0 < n >>> 0))\n                    : 0)\n                    ? (((g | f) & 3) | 0) == 0\n                    : 0) {\n                    n = f >>> 2;\n                    m = g >>> 2;\n                    l = 0;\n                    while (1) {\n                        j = h >>> 1;\n                        k = (l + j) | 0;\n                        i = k << 1;\n                        g = (i + n) | 0;\n                        f = mo(c[(b + (g << 2)) >> 2] | 0, o) | 0;\n                        g = mo(c[(b + ((g + 1) << 2)) >> 2] | 0, o) | 0;\n                        if (!((g >>> 0 < d >>> 0) & (f >>> 0 < ((d - g) | 0) >>> 0))) {\n                            f = 0;\n                            break a;\n                        }\n                        if (a[(b + (g + f)) >> 0] | 0) {\n                            f = 0;\n                            break a;\n                        }\n                        f = eo(e, (b + g) | 0) | 0;\n                        if (!f)\n                            break;\n                        f = (f | 0) < 0;\n                        if ((h | 0) == 1) {\n                            f = 0;\n                            break a;\n                        }\n                        l = f ? l : k;\n                        h = f ? j : (h - j) | 0;\n                    }\n                    f = (i + m) | 0;\n                    g = mo(c[(b + (f << 2)) >> 2] | 0, o) | 0;\n                    f = mo(c[(b + ((f + 1) << 2)) >> 2] | 0, o) | 0;\n                    if ((f >>> 0 < d >>> 0) & (g >>> 0 < ((d - f) | 0) >>> 0))\n                        f = (a[(b + (f + g)) >> 0] | 0) == 0 ? (b + f) | 0 : 0;\n                    else\n                        f = 0;\n                }\n                else\n                    f = 0;\n            while (0);\n            return f | 0;\n        }\n        function mo(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var c = 0;\n            c = tr(a | 0) | 0;\n            return ((b | 0) == 0 ? a : c) | 0;\n        }\n        function no(b, d, e) {\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            var f = 0, g = 0, h = 0;\n            h = d & 255;\n            f = (e | 0) != 0;\n            a: do\n                if (f & (((b & 3) | 0) != 0)) {\n                    g = d & 255;\n                    while (1) {\n                        if ((a[b >> 0] | 0) == (g << 24) >> 24) {\n                            g = 6;\n                            break a;\n                        }\n                        b = (b + 1) | 0;\n                        e = (e + -1) | 0;\n                        f = (e | 0) != 0;\n                        if (!(f & (((b & 3) | 0) != 0))) {\n                            g = 5;\n                            break;\n                        }\n                    }\n                }\n                else\n                    g = 5;\n            while (0);\n            if ((g | 0) == 5)\n                if (f)\n                    g = 6;\n                else\n                    b = 0;\n            b: do\n                if ((g | 0) == 6) {\n                    if ((a[b >> 0] | 0) != ((d & 255) << 24) >> 24) {\n                        f = q(h, 16843009) | 0;\n                        c: do\n                            if (e >>> 0 > 3)\n                                do {\n                                    h = c[b >> 2] ^ f;\n                                    if ((((h & -2139062144) ^ -2139062144) & (h + -16843009)) | 0)\n                                        break c;\n                                    b = (b + 4) | 0;\n                                    e = (e + -4) | 0;\n                                } while (e >>> 0 > 3);\n                        while (0);\n                    }\n                    if (!e)\n                        b = 0;\n                    else {\n                        f = d & 255;\n                        while (1) {\n                            if ((a[b >> 0] | 0) == (f << 24) >> 24)\n                                break b;\n                            e = (e + -1) | 0;\n                            if (!e) {\n                                b = 0;\n                                break;\n                            }\n                            else\n                                b = (b + 1) | 0;\n                        }\n                    }\n                }\n            while (0);\n            return b | 0;\n        }\n        function oo(a, b, c) {\n            a = a | 0;\n            b = b | 0;\n            c = c | 0;\n            return ro(a, b, c, 1, 8) | 0;\n        }\n        function po(b, e, f, g, h, i) {\n            b = b | 0;\n            e = +e;\n            f = f | 0;\n            g = g | 0;\n            h = h | 0;\n            i = i | 0;\n            var j = 0, k = 0, l = 0, m = 0, n = 0, o = 0, p = 0, r = 0.0, s = 0, t = 0, v = 0, w = 0, x = 0, y = 0, z = 0, A = 0, B = 0, C = 0, D = 0, E = 0, F = 0, G = 0, H = 0;\n            H = V;\n            V = (V + 560) | 0;\n            l = (H + 32) | 0;\n            w = (H + 536) | 0;\n            G = H;\n            F = G;\n            m = (H + 540) | 0;\n            c[w >> 2] = 0;\n            E = (m + 12) | 0;\n            Do(e) | 0;\n            j = u() | 0;\n            if ((j | 0) < 0) {\n                e = -e;\n                Do(e) | 0;\n                D = 1;\n                C = 20247;\n                j = u() | 0;\n            }\n            else {\n                D = (((h & 2049) | 0) != 0) & 1;\n                C = ((h & 2048) | 0) == 0 ? (((h & 1) | 0) == 0 ? 20248 : 20253) : 20250;\n            }\n            do\n                if ((0 == 0) & (((j & 2146435072) | 0) == 2146435072)) {\n                    G = ((i & 32) | 0) != 0;\n                    j = (D + 3) | 0;\n                    zo(b, 32, f, j, h & -65537);\n                    to(b, C, D);\n                    to(b, (e != e) | (0.0 != 0.0) ? (G ? 20274 : 20278) : G ? 20266 : 20270, 3);\n                    zo(b, 32, f, j, h ^ 8192);\n                }\n                else {\n                    r = +Eo(e, w) * 2.0;\n                    j = r != 0.0;\n                    if (j)\n                        c[w >> 2] = (c[w >> 2] | 0) + -1;\n                    v = i | 32;\n                    if ((v | 0) == 97) {\n                        o = i & 32;\n                        s = (o | 0) == 0 ? C : (C + 9) | 0;\n                        p = D | 2;\n                        j = (12 - g) | 0;\n                        do\n                            if (!((g >>> 0 > 11) | ((j | 0) == 0))) {\n                                e = 8.0;\n                                do {\n                                    j = (j + -1) | 0;\n                                    e = e * 16.0;\n                                } while ((j | 0) != 0);\n                                if ((a[s >> 0] | 0) == 45) {\n                                    e = -(e + (-r - e));\n                                    break;\n                                }\n                                else {\n                                    e = r + e - e;\n                                    break;\n                                }\n                            }\n                            else\n                                e = r;\n                        while (0);\n                        k = c[w >> 2] | 0;\n                        j = (k | 0) < 0 ? (0 - k) | 0 : k;\n                        j = yo(j, (((j | 0) < 0) << 31) >> 31, E) | 0;\n                        if ((j | 0) == (E | 0)) {\n                            j = (m + 11) | 0;\n                            a[j >> 0] = 48;\n                        }\n                        a[(j + -1) >> 0] = ((k >> 31) & 2) + 43;\n                        n = (j + -2) | 0;\n                        a[n >> 0] = i + 15;\n                        k = (g | 0) < 1;\n                        l = ((h & 8) | 0) == 0;\n                        m = G;\n                        do {\n                            D = ~~e;\n                            j = (m + 1) | 0;\n                            a[m >> 0] = o | d[(640 + D) >> 0];\n                            e = (e - +(D | 0)) * 16.0;\n                            if (((j - F) | 0) == 1 ? !(l & (k & (e == 0.0))) : 0) {\n                                a[j >> 0] = 46;\n                                m = (m + 2) | 0;\n                            }\n                            else\n                                m = j;\n                        } while (e != 0.0);\n                        if ((g | 0) != 0 ? ((-2 - F + m) | 0) < (g | 0) : 0) {\n                            k = E;\n                            l = n;\n                            j = (g + 2 + k - l) | 0;\n                        }\n                        else {\n                            k = E;\n                            l = n;\n                            j = (k - F - l + m) | 0;\n                        }\n                        E = (j + p) | 0;\n                        zo(b, 32, f, E, h);\n                        to(b, s, p);\n                        zo(b, 48, f, E, h ^ 65536);\n                        F = (m - F) | 0;\n                        to(b, G, F);\n                        G = (k - l) | 0;\n                        zo(b, 48, (j - (F + G)) | 0, 0, 0);\n                        to(b, n, G);\n                        zo(b, 32, f, E, h ^ 8192);\n                        j = E;\n                        break;\n                    }\n                    k = (g | 0) < 0 ? 6 : g;\n                    if (j) {\n                        j = ((c[w >> 2] | 0) + -28) | 0;\n                        c[w >> 2] = j;\n                        e = r * 268435456.0;\n                    }\n                    else {\n                        e = r;\n                        j = c[w >> 2] | 0;\n                    }\n                    B = (j | 0) < 0 ? l : (l + 288) | 0;\n                    l = B;\n                    do {\n                        z = ~~e >>> 0;\n                        c[l >> 2] = z;\n                        l = (l + 4) | 0;\n                        e = (e - +(z >>> 0)) * 1.0e9;\n                    } while (e != 0.0);\n                    z = B;\n                    if ((j | 0) > 0) {\n                        o = B;\n                        while (1) {\n                            n = (j | 0) < 29 ? j : 29;\n                            j = (l + -4) | 0;\n                            if (j >>> 0 >= o >>> 0) {\n                                m = 0;\n                                do {\n                                    t = rr(c[j >> 2] | 0, 0, n | 0) | 0;\n                                    t = lr(t | 0, u() | 0, m | 0, 0) | 0;\n                                    x = u() | 0;\n                                    m = pr(t | 0, x | 0, 1e9, 0) | 0;\n                                    y = kr(m | 0, u() | 0, 1e9, 0) | 0;\n                                    y = mr(t | 0, x | 0, y | 0, u() | 0) | 0;\n                                    u() | 0;\n                                    c[j >> 2] = y;\n                                    j = (j + -4) | 0;\n                                } while (j >>> 0 >= o >>> 0);\n                                if (m) {\n                                    y = (o + -4) | 0;\n                                    c[y >> 2] = m;\n                                    m = y;\n                                }\n                                else\n                                    m = o;\n                            }\n                            else\n                                m = o;\n                            a: do\n                                if (l >>> 0 > m >>> 0) {\n                                    j = l;\n                                    while (1) {\n                                        l = (j + -4) | 0;\n                                        if (c[l >> 2] | 0) {\n                                            l = j;\n                                            break a;\n                                        }\n                                        if (l >>> 0 > m >>> 0)\n                                            j = l;\n                                        else\n                                            break;\n                                    }\n                                }\n                            while (0);\n                            j = ((c[w >> 2] | 0) - n) | 0;\n                            c[w >> 2] = j;\n                            if ((j | 0) > 0)\n                                o = m;\n                            else\n                                break;\n                        }\n                    }\n                    else\n                        m = B;\n                    if ((j | 0) < 0) {\n                        g = (((((k + 25) | 0) / 9) | 0) + 1) | 0;\n                        t = (v | 0) == 102;\n                        do {\n                            s = (0 - j) | 0;\n                            s = (s | 0) < 9 ? s : 9;\n                            if (m >>> 0 < l >>> 0) {\n                                n = ((1 << s) + -1) | 0;\n                                o = 1e9 >>> s;\n                                p = 0;\n                                j = m;\n                                do {\n                                    y = c[j >> 2] | 0;\n                                    c[j >> 2] = (y >>> s) + p;\n                                    p = q(y & n, o) | 0;\n                                    j = (j + 4) | 0;\n                                } while (j >>> 0 < l >>> 0);\n                                m = (c[m >> 2] | 0) == 0 ? (m + 4) | 0 : m;\n                                if (p) {\n                                    c[l >> 2] = p;\n                                    l = (l + 4) | 0;\n                                }\n                            }\n                            else\n                                m = (c[m >> 2] | 0) == 0 ? (m + 4) | 0 : m;\n                            j = t ? B : m;\n                            l = (((l - j) >> 2) | 0) > (g | 0) ? (j + (g << 2)) | 0 : l;\n                            j = ((c[w >> 2] | 0) + s) | 0;\n                            c[w >> 2] = j;\n                        } while ((j | 0) < 0);\n                        t = m;\n                    }\n                    else\n                        t = m;\n                    if (t >>> 0 < l >>> 0) {\n                        j = (((z - t) >> 2) * 9) | 0;\n                        n = c[t >> 2] | 0;\n                        if (n >>> 0 >= 10) {\n                            m = 10;\n                            do {\n                                m = (m * 10) | 0;\n                                j = (j + 1) | 0;\n                            } while (n >>> 0 >= m >>> 0);\n                        }\n                    }\n                    else\n                        j = 0;\n                    x = (v | 0) == 103;\n                    y = (k | 0) != 0;\n                    m = (k - ((v | 0) == 102 ? 0 : j) + (((y & x) << 31) >> 31)) | 0;\n                    if ((m | 0) < ((((((l - z) >> 2) * 9) | 0) + -9) | 0)) {\n                        w = (m + 9216) | 0;\n                        m = ((w | 0) / 9) | 0;\n                        g = (B + 4 + ((m + -1024) << 2)) | 0;\n                        m = (w - ((m * 9) | 0)) | 0;\n                        if ((m | 0) < 8) {\n                            n = 10;\n                            while (1) {\n                                n = (n * 10) | 0;\n                                if ((m | 0) < 7)\n                                    m = (m + 1) | 0;\n                                else\n                                    break;\n                            }\n                        }\n                        else\n                            n = 10;\n                        p = c[g >> 2] | 0;\n                        m = ((p >>> 0) / (n >>> 0)) | 0;\n                        s = (p - (q(m, n) | 0)) | 0;\n                        o = ((g + 4) | 0) == (l | 0);\n                        if (!(o & ((s | 0) == 0))) {\n                            r = ((m & 1) | 0) == 0 ? 9007199254740992.0 : 9007199254740994.0;\n                            w = n >>> 1;\n                            e = s >>> 0 < w >>> 0 ? 0.5 : o & ((s | 0) == (w | 0)) ? 1.0 : 1.5;\n                            if (D) {\n                                w = (a[C >> 0] | 0) == 45;\n                                e = w ? -e : e;\n                                r = w ? -r : r;\n                            }\n                            m = (p - s) | 0;\n                            c[g >> 2] = m;\n                            if (r + e != r) {\n                                w = (m + n) | 0;\n                                c[g >> 2] = w;\n                                if (w >>> 0 > 999999999) {\n                                    n = g;\n                                    j = t;\n                                    while (1) {\n                                        m = (n + -4) | 0;\n                                        c[n >> 2] = 0;\n                                        if (m >>> 0 < j >>> 0) {\n                                            j = (j + -4) | 0;\n                                            c[j >> 2] = 0;\n                                        }\n                                        w = ((c[m >> 2] | 0) + 1) | 0;\n                                        c[m >> 2] = w;\n                                        if (w >>> 0 > 999999999)\n                                            n = m;\n                                        else {\n                                            n = j;\n                                            break;\n                                        }\n                                    }\n                                }\n                                else {\n                                    m = g;\n                                    n = t;\n                                }\n                                j = (((z - n) >> 2) * 9) | 0;\n                                p = c[n >> 2] | 0;\n                                if (p >>> 0 >= 10) {\n                                    o = 10;\n                                    do {\n                                        o = (o * 10) | 0;\n                                        j = (j + 1) | 0;\n                                    } while (p >>> 0 >= o >>> 0);\n                                }\n                            }\n                            else {\n                                m = g;\n                                n = t;\n                            }\n                        }\n                        else {\n                            m = g;\n                            n = t;\n                        }\n                        w = (m + 4) | 0;\n                        l = l >>> 0 > w >>> 0 ? w : l;\n                    }\n                    else\n                        n = t;\n                    g = (0 - j) | 0;\n                    b: do\n                        if (l >>> 0 > n >>> 0)\n                            while (1) {\n                                m = (l + -4) | 0;\n                                if (c[m >> 2] | 0) {\n                                    w = l;\n                                    v = 1;\n                                    break b;\n                                }\n                                if (m >>> 0 > n >>> 0)\n                                    l = m;\n                                else {\n                                    w = m;\n                                    v = 0;\n                                    break;\n                                }\n                            }\n                        else {\n                            w = l;\n                            v = 0;\n                        }\n                    while (0);\n                    do\n                        if (x) {\n                            k = (k + ((y ^ 1) & 1)) | 0;\n                            if (((k | 0) > (j | 0)) & ((j | 0) > -5)) {\n                                o = (i + -1) | 0;\n                                k = (k + -1 - j) | 0;\n                            }\n                            else {\n                                o = (i + -2) | 0;\n                                k = (k + -1) | 0;\n                            }\n                            if (!(h & 8)) {\n                                if (v ? ((A = c[(w + -4) >> 2] | 0), (A | 0) != 0) : 0)\n                                    if (!((A >>> 0) % 10 | 0)) {\n                                        m = 0;\n                                        l = 10;\n                                        do {\n                                            l = (l * 10) | 0;\n                                            m = (m + 1) | 0;\n                                        } while (!((A >>> 0) % (l >>> 0) | 0 | 0));\n                                    }\n                                    else\n                                        m = 0;\n                                else\n                                    m = 9;\n                                l = (((((w - z) >> 2) * 9) | 0) + -9) | 0;\n                                if ((o | 32 | 0) == 102) {\n                                    i = (l - m) | 0;\n                                    i = (i | 0) > 0 ? i : 0;\n                                    k = (k | 0) < (i | 0) ? k : i;\n                                    break;\n                                }\n                                else {\n                                    i = (l + j - m) | 0;\n                                    i = (i | 0) > 0 ? i : 0;\n                                    k = (k | 0) < (i | 0) ? k : i;\n                                    break;\n                                }\n                            }\n                        }\n                        else\n                            o = i;\n                    while (0);\n                    t = (k | 0) != 0;\n                    p = t ? 1 : (h >>> 3) & 1;\n                    s = (o | 32 | 0) == 102;\n                    if (s) {\n                        x = 0;\n                        j = (j | 0) > 0 ? j : 0;\n                    }\n                    else {\n                        l = (j | 0) < 0 ? g : j;\n                        l = yo(l, (((l | 0) < 0) << 31) >> 31, E) | 0;\n                        m = E;\n                        if (((m - l) | 0) < 2)\n                            do {\n                                l = (l + -1) | 0;\n                                a[l >> 0] = 48;\n                            } while (((m - l) | 0) < 2);\n                        a[(l + -1) >> 0] = ((j >> 31) & 2) + 43;\n                        j = (l + -2) | 0;\n                        a[j >> 0] = o;\n                        x = j;\n                        j = (m - j) | 0;\n                    }\n                    j = (D + 1 + k + p + j) | 0;\n                    zo(b, 32, f, j, h);\n                    to(b, C, D);\n                    zo(b, 48, f, j, h ^ 65536);\n                    if (s) {\n                        p = n >>> 0 > B >>> 0 ? B : n;\n                        s = (G + 9) | 0;\n                        n = s;\n                        o = (G + 8) | 0;\n                        m = p;\n                        do {\n                            l = yo(c[m >> 2] | 0, 0, s) | 0;\n                            if ((m | 0) == (p | 0)) {\n                                if ((l | 0) == (s | 0)) {\n                                    a[o >> 0] = 48;\n                                    l = o;\n                                }\n                            }\n                            else if (l >>> 0 > G >>> 0) {\n                                wr(G | 0, 48, (l - F) | 0) | 0;\n                                do\n                                    l = (l + -1) | 0;\n                                while (l >>> 0 > G >>> 0);\n                            }\n                            to(b, l, (n - l) | 0);\n                            m = (m + 4) | 0;\n                        } while (m >>> 0 <= B >>> 0);\n                        if (!((((h & 8) | 0) == 0) & (t ^ 1)))\n                            to(b, 20282, 1);\n                        if ((m >>> 0 < w >>> 0) & ((k | 0) > 0))\n                            while (1) {\n                                l = yo(c[m >> 2] | 0, 0, s) | 0;\n                                if (l >>> 0 > G >>> 0) {\n                                    wr(G | 0, 48, (l - F) | 0) | 0;\n                                    do\n                                        l = (l + -1) | 0;\n                                    while (l >>> 0 > G >>> 0);\n                                }\n                                to(b, l, (k | 0) < 9 ? k : 9);\n                                m = (m + 4) | 0;\n                                l = (k + -9) | 0;\n                                if (!((m >>> 0 < w >>> 0) & ((k | 0) > 9))) {\n                                    k = l;\n                                    break;\n                                }\n                                else\n                                    k = l;\n                            }\n                        zo(b, 48, (k + 9) | 0, 9, 0);\n                    }\n                    else {\n                        w = v ? w : (n + 4) | 0;\n                        if ((n >>> 0 < w >>> 0) & ((k | 0) > -1)) {\n                            g = (G + 9) | 0;\n                            t = ((h & 8) | 0) == 0;\n                            v = g;\n                            p = (0 - F) | 0;\n                            s = (G + 8) | 0;\n                            o = n;\n                            do {\n                                l = yo(c[o >> 2] | 0, 0, g) | 0;\n                                if ((l | 0) == (g | 0)) {\n                                    a[s >> 0] = 48;\n                                    l = s;\n                                }\n                                do\n                                    if ((o | 0) == (n | 0)) {\n                                        m = (l + 1) | 0;\n                                        to(b, l, 1);\n                                        if (t & ((k | 0) < 1)) {\n                                            l = m;\n                                            break;\n                                        }\n                                        to(b, 20282, 1);\n                                        l = m;\n                                    }\n                                    else {\n                                        if (l >>> 0 <= G >>> 0)\n                                            break;\n                                        wr(G | 0, 48, (l + p) | 0) | 0;\n                                        do\n                                            l = (l + -1) | 0;\n                                        while (l >>> 0 > G >>> 0);\n                                    }\n                                while (0);\n                                F = (v - l) | 0;\n                                to(b, l, (k | 0) > (F | 0) ? F : k);\n                                k = (k - F) | 0;\n                                o = (o + 4) | 0;\n                            } while ((o >>> 0 < w >>> 0) & ((k | 0) > -1));\n                        }\n                        zo(b, 48, (k + 18) | 0, 18, 0);\n                        to(b, x, (E - x) | 0);\n                    }\n                    zo(b, 32, f, j, h ^ 8192);\n                }\n            while (0);\n            V = H;\n            return ((j | 0) < (f | 0) ? f : j) | 0;\n        }\n        function qo(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0.0, e = 0;\n            e = ((c[b >> 2] | 0) + (8 - 1)) & ~(8 - 1);\n            d = +g[e >> 3];\n            c[b >> 2] = e + 8;\n            g[a >> 3] = d;\n            return;\n        }\n        function ro(b, d, e, f, g) {\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            f = f | 0;\n            g = g | 0;\n            var h = 0, i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0, p = 0, q = 0, r = 0, s = 0, t = 0;\n            t = V;\n            V = (V + 224) | 0;\n            p = (t + 208) | 0;\n            q = (t + 160) | 0;\n            r = (t + 80) | 0;\n            s = t;\n            h = q;\n            i = (h + 40) | 0;\n            do {\n                c[h >> 2] = 0;\n                h = (h + 4) | 0;\n            } while ((h | 0) < (i | 0));\n            c[p >> 2] = c[e >> 2];\n            if ((so(0, d, p, r, q, f, g) | 0) < 0)\n                e = -1;\n            else {\n                if ((c[(b + 76) >> 2] | 0) > -1)\n                    o = ho(b) | 0;\n                else\n                    o = 0;\n                e = c[b >> 2] | 0;\n                n = e & 32;\n                if ((a[(b + 74) >> 0] | 0) < 1)\n                    c[b >> 2] = e & -33;\n                h = (b + 48) | 0;\n                if (!(c[h >> 2] | 0)) {\n                    i = (b + 44) | 0;\n                    j = c[i >> 2] | 0;\n                    c[i >> 2] = s;\n                    k = (b + 28) | 0;\n                    c[k >> 2] = s;\n                    l = (b + 20) | 0;\n                    c[l >> 2] = s;\n                    c[h >> 2] = 80;\n                    m = (b + 16) | 0;\n                    c[m >> 2] = s + 80;\n                    e = so(b, d, p, r, q, f, g) | 0;\n                    if (j) {\n                        aa[c[(b + 36) >> 2] & 7](b, 0, 0) | 0;\n                        e = (c[l >> 2] | 0) == 0 ? -1 : e;\n                        c[i >> 2] = j;\n                        c[h >> 2] = 0;\n                        c[m >> 2] = 0;\n                        c[k >> 2] = 0;\n                        c[l >> 2] = 0;\n                    }\n                }\n                else\n                    e = so(b, d, p, r, q, f, g) | 0;\n                h = c[b >> 2] | 0;\n                c[b >> 2] = h | n;\n                if (o | 0)\n                    go(b);\n                e = ((h & 32) | 0) == 0 ? e : -1;\n            }\n            V = t;\n            return e | 0;\n        }\n        function so(d, e, f, h, i, j, k) {\n            d = d | 0;\n            e = e | 0;\n            f = f | 0;\n            h = h | 0;\n            i = i | 0;\n            j = j | 0;\n            k = k | 0;\n            var l = 0, m = 0, n = 0, o = 0, p = 0, q = 0, r = 0, s = 0, t = 0, v = 0, w = 0, x = 0, y = 0, z = 0, A = 0, B = 0, C = 0, D = 0, E = 0, F = 0, G = 0, H = 0, I = 0, J = 0, K = 0;\n            J = V;\n            V = (V + 64) | 0;\n            G = (J + 56) | 0;\n            I = (J + 40) | 0;\n            B = J;\n            D = (J + 48) | 0;\n            E = (J + 60) | 0;\n            c[G >> 2] = e;\n            y = (d | 0) != 0;\n            z = (B + 40) | 0;\n            A = z;\n            B = (B + 39) | 0;\n            C = (D + 4) | 0;\n            l = 0;\n            e = 0;\n            n = 0;\n            a: while (1) {\n                do {\n                    do\n                        if ((e | 0) > -1)\n                            if ((l | 0) > ((2147483647 - e) | 0)) {\n                                c[(ao() | 0) >> 2] = 61;\n                                e = -1;\n                                break;\n                            }\n                            else {\n                                e = (l + e) | 0;\n                                break;\n                            }\n                    while (0);\n                    r = c[G >> 2] | 0;\n                    l = a[r >> 0] | 0;\n                    if (!((l << 24) >> 24)) {\n                        x = 92;\n                        break a;\n                    }\n                    m = r;\n                    b: while (1) {\n                        switch ((l << 24) >> 24) {\n                            case 37: {\n                                x = 10;\n                                break b;\n                            }\n                            case 0: {\n                                l = m;\n                                break b;\n                            }\n                            default: {\n                            }\n                        }\n                        w = (m + 1) | 0;\n                        c[G >> 2] = w;\n                        l = a[w >> 0] | 0;\n                        m = w;\n                    }\n                    c: do\n                        if ((x | 0) == 10) {\n                            x = 0;\n                            l = m;\n                            do {\n                                if ((a[(m + 1) >> 0] | 0) != 37)\n                                    break c;\n                                l = (l + 1) | 0;\n                                m = (m + 2) | 0;\n                                c[G >> 2] = m;\n                            } while ((a[m >> 0] | 0) == 37);\n                        }\n                    while (0);\n                    l = (l - r) | 0;\n                    if (y)\n                        to(d, r, l);\n                } while ((l | 0) != 0);\n                w = (bo(a[((c[G >> 2] | 0) + 1) >> 0] | 0) | 0) == 0;\n                m = c[G >> 2] | 0;\n                if (!w ? (a[(m + 2) >> 0] | 0) == 36 : 0) {\n                    t = ((a[(m + 1) >> 0] | 0) + -48) | 0;\n                    p = 1;\n                    l = 3;\n                }\n                else {\n                    t = -1;\n                    p = n;\n                    l = 1;\n                }\n                l = (m + l) | 0;\n                c[G >> 2] = l;\n                m = a[l >> 0] | 0;\n                n = (((m << 24) >> 24) + -32) | 0;\n                if ((n >>> 0 > 31) | ((((1 << n) & 75913) | 0) == 0))\n                    o = 0;\n                else {\n                    o = 0;\n                    do {\n                        o = (1 << n) | o;\n                        l = (l + 1) | 0;\n                        c[G >> 2] = l;\n                        m = a[l >> 0] | 0;\n                        n = (((m << 24) >> 24) + -32) | 0;\n                    } while (!((n >>> 0 > 31) | ((((1 << n) & 75913) | 0) == 0)));\n                }\n                if ((m << 24) >> 24 == 42) {\n                    if ((bo(a[(l + 1) >> 0] | 0) | 0) != 0\n                        ? ((H = c[G >> 2] | 0), (a[(H + 2) >> 0] | 0) == 36)\n                        : 0) {\n                        l = (H + 1) | 0;\n                        c[(i + (((a[l >> 0] | 0) + -48) << 2)) >> 2] = 10;\n                        l = c[(h + (((a[l >> 0] | 0) + -48) << 3)) >> 2] | 0;\n                        n = 1;\n                        m = (H + 3) | 0;\n                    }\n                    else {\n                        if (p | 0) {\n                            e = -1;\n                            break;\n                        }\n                        if (y) {\n                            w = ((c[f >> 2] | 0) + (4 - 1)) & ~(4 - 1);\n                            l = c[w >> 2] | 0;\n                            c[f >> 2] = w + 4;\n                        }\n                        else\n                            l = 0;\n                        n = 0;\n                        m = ((c[G >> 2] | 0) + 1) | 0;\n                    }\n                    c[G >> 2] = m;\n                    w = (l | 0) < 0;\n                    v = w ? (0 - l) | 0 : l;\n                    o = w ? o | 8192 : o;\n                    w = n;\n                }\n                else {\n                    l = uo(G) | 0;\n                    if ((l | 0) < 0) {\n                        e = -1;\n                        break;\n                    }\n                    v = l;\n                    w = p;\n                    m = c[G >> 2] | 0;\n                }\n                do\n                    if ((a[m >> 0] | 0) == 46) {\n                        l = (m + 1) | 0;\n                        if ((a[l >> 0] | 0) != 42) {\n                            c[G >> 2] = l;\n                            l = uo(G) | 0;\n                            m = c[G >> 2] | 0;\n                            break;\n                        }\n                        if (bo(a[(m + 2) >> 0] | 0) | 0 ? ((F = c[G >> 2] | 0), (a[(F + 3) >> 0] | 0) == 36) : 0) {\n                            l = (F + 2) | 0;\n                            c[(i + (((a[l >> 0] | 0) + -48) << 2)) >> 2] = 10;\n                            l = c[(h + (((a[l >> 0] | 0) + -48) << 3)) >> 2] | 0;\n                            m = (F + 4) | 0;\n                            c[G >> 2] = m;\n                            break;\n                        }\n                        if (w | 0) {\n                            e = -1;\n                            break a;\n                        }\n                        if (y) {\n                            s = ((c[f >> 2] | 0) + (4 - 1)) & ~(4 - 1);\n                            l = c[s >> 2] | 0;\n                            c[f >> 2] = s + 4;\n                        }\n                        else\n                            l = 0;\n                        m = ((c[G >> 2] | 0) + 2) | 0;\n                        c[G >> 2] = m;\n                    }\n                    else\n                        l = -1;\n                while (0);\n                s = 0;\n                while (1) {\n                    if ((((a[m >> 0] | 0) + -65) | 0) >>> 0 > 57) {\n                        e = -1;\n                        break a;\n                    }\n                    n = m;\n                    m = (m + 1) | 0;\n                    c[G >> 2] = m;\n                    n = a[((a[n >> 0] | 0) + -65 + (176 + ((s * 58) | 0))) >> 0] | 0;\n                    p = n & 255;\n                    if (((p + -1) | 0) >>> 0 >= 8)\n                        break;\n                    else\n                        s = p;\n                }\n                if (!((n << 24) >> 24)) {\n                    e = -1;\n                    break;\n                }\n                q = (t | 0) > -1;\n                do\n                    if ((n << 24) >> 24 == 19)\n                        if (q) {\n                            e = -1;\n                            break a;\n                        }\n                        else\n                            x = 54;\n                    else {\n                        if (q) {\n                            c[(i + (t << 2)) >> 2] = p;\n                            q = (h + (t << 3)) | 0;\n                            t = c[(q + 4) >> 2] | 0;\n                            x = I;\n                            c[x >> 2] = c[q >> 2];\n                            c[(x + 4) >> 2] = t;\n                            x = 54;\n                            break;\n                        }\n                        if (!y) {\n                            e = 0;\n                            break a;\n                        }\n                        vo(I, p, f, k);\n                        m = c[G >> 2] | 0;\n                        x = 55;\n                    }\n                while (0);\n                if ((x | 0) == 54) {\n                    x = 0;\n                    if (y)\n                        x = 55;\n                    else\n                        l = 0;\n                }\n                d: do\n                    if ((x | 0) == 55) {\n                        x = 0;\n                        m = a[(m + -1) >> 0] | 0;\n                        m = ((s | 0) != 0) & (((m & 15) | 0) == 3) ? m & -33 : m;\n                        n = o & -65537;\n                        t = ((o & 8192) | 0) == 0 ? o : n;\n                        e: do\n                            switch (m | 0) {\n                                case 110:\n                                    switch (((s & 255) << 24) >> 24) {\n                                        case 0: {\n                                            c[c[I >> 2] >> 2] = e;\n                                            l = 0;\n                                            break d;\n                                        }\n                                        case 1: {\n                                            c[c[I >> 2] >> 2] = e;\n                                            l = 0;\n                                            break d;\n                                        }\n                                        case 2: {\n                                            l = c[I >> 2] | 0;\n                                            c[l >> 2] = e;\n                                            c[(l + 4) >> 2] = (((e | 0) < 0) << 31) >> 31;\n                                            l = 0;\n                                            break d;\n                                        }\n                                        case 3: {\n                                            b[c[I >> 2] >> 1] = e;\n                                            l = 0;\n                                            break d;\n                                        }\n                                        case 4: {\n                                            a[c[I >> 2] >> 0] = e;\n                                            l = 0;\n                                            break d;\n                                        }\n                                        case 6: {\n                                            c[c[I >> 2] >> 2] = e;\n                                            l = 0;\n                                            break d;\n                                        }\n                                        case 7: {\n                                            l = c[I >> 2] | 0;\n                                            c[l >> 2] = e;\n                                            c[(l + 4) >> 2] = (((e | 0) < 0) << 31) >> 31;\n                                            l = 0;\n                                            break d;\n                                        }\n                                        default: {\n                                            l = 0;\n                                            break d;\n                                        }\n                                    }\n                                case 112: {\n                                    m = 120;\n                                    l = l >>> 0 > 8 ? l : 8;\n                                    n = t | 8;\n                                    x = 67;\n                                    break;\n                                }\n                                case 88:\n                                case 120: {\n                                    n = t;\n                                    x = 67;\n                                    break;\n                                }\n                                case 111: {\n                                    q = I;\n                                    q = xo(c[q >> 2] | 0, c[(q + 4) >> 2] | 0, z) | 0;\n                                    n = (A - q) | 0;\n                                    o = 0;\n                                    p = 20230;\n                                    l = (((t & 8) | 0) == 0) | ((l | 0) > (n | 0)) ? l : (n + 1) | 0;\n                                    n = t;\n                                    x = 73;\n                                    break;\n                                }\n                                case 105:\n                                case 100: {\n                                    n = I;\n                                    m = c[n >> 2] | 0;\n                                    n = c[(n + 4) >> 2] | 0;\n                                    if ((n | 0) < 0) {\n                                        m = mr(0, 0, m | 0, n | 0) | 0;\n                                        n = u() | 0;\n                                        o = I;\n                                        c[o >> 2] = m;\n                                        c[(o + 4) >> 2] = n;\n                                        o = 1;\n                                        p = 20230;\n                                        x = 72;\n                                        break e;\n                                    }\n                                    else {\n                                        o = (((t & 2049) | 0) != 0) & 1;\n                                        p = ((t & 2048) | 0) == 0 ? (((t & 1) | 0) == 0 ? 20230 : 20232) : 20231;\n                                        x = 72;\n                                        break e;\n                                    }\n                                }\n                                case 117: {\n                                    n = I;\n                                    o = 0;\n                                    p = 20230;\n                                    m = c[n >> 2] | 0;\n                                    n = c[(n + 4) >> 2] | 0;\n                                    x = 72;\n                                    break;\n                                }\n                                case 99: {\n                                    a[B >> 0] = c[I >> 2];\n                                    r = B;\n                                    o = 0;\n                                    p = 20230;\n                                    q = 1;\n                                    m = n;\n                                    l = A;\n                                    break;\n                                }\n                                case 115: {\n                                    s = c[I >> 2] | 0;\n                                    s = (s | 0) == 0 ? 20240 : s;\n                                    t = no(s, 0, l) | 0;\n                                    K = (t | 0) == 0;\n                                    r = s;\n                                    o = 0;\n                                    p = 20230;\n                                    q = K ? l : (t - s) | 0;\n                                    m = n;\n                                    l = K ? (s + l) | 0 : t;\n                                    break;\n                                }\n                                case 67: {\n                                    c[D >> 2] = c[I >> 2];\n                                    c[C >> 2] = 0;\n                                    c[I >> 2] = D;\n                                    p = -1;\n                                    x = 79;\n                                    break;\n                                }\n                                case 83: {\n                                    if (!l) {\n                                        zo(d, 32, v, 0, t);\n                                        l = 0;\n                                        x = 89;\n                                    }\n                                    else {\n                                        p = l;\n                                        x = 79;\n                                    }\n                                    break;\n                                }\n                                case 65:\n                                case 71:\n                                case 70:\n                                case 69:\n                                case 97:\n                                case 103:\n                                case 102:\n                                case 101: {\n                                    l = _[j & 1](d, +g[I >> 3], v, l, t, m) | 0;\n                                    break d;\n                                }\n                                default: {\n                                    o = 0;\n                                    p = 20230;\n                                    q = l;\n                                    m = t;\n                                    l = A;\n                                }\n                            }\n                        while (0);\n                        f: do\n                            if ((x | 0) == 67) {\n                                q = I;\n                                q = wo(c[q >> 2] | 0, c[(q + 4) >> 2] | 0, z, m & 32) | 0;\n                                p = I;\n                                p = (((n & 8) | 0) == 0) | (((c[p >> 2] | 0) == 0) & ((c[(p + 4) >> 2] | 0) == 0));\n                                o = p ? 0 : 2;\n                                p = p ? 20230 : (20230 + (m >>> 4)) | 0;\n                                x = 73;\n                            }\n                            else if ((x | 0) == 72) {\n                                q = yo(m, n, z) | 0;\n                                n = t;\n                                x = 73;\n                            }\n                            else if ((x | 0) == 79) {\n                                x = 0;\n                                o = c[I >> 2] | 0;\n                                l = 0;\n                                while (1) {\n                                    m = c[o >> 2] | 0;\n                                    if (!m)\n                                        break;\n                                    m = Ao(E, m) | 0;\n                                    n = (m | 0) < 0;\n                                    if (n | (m >>> 0 > ((p - l) | 0) >>> 0)) {\n                                        x = 83;\n                                        break;\n                                    }\n                                    l = (m + l) | 0;\n                                    if (p >>> 0 > l >>> 0)\n                                        o = (o + 4) | 0;\n                                    else\n                                        break;\n                                }\n                                if ((x | 0) == 83) {\n                                    x = 0;\n                                    if (n) {\n                                        e = -1;\n                                        break a;\n                                    }\n                                }\n                                zo(d, 32, v, l, t);\n                                if (!l) {\n                                    l = 0;\n                                    x = 89;\n                                }\n                                else {\n                                    n = c[I >> 2] | 0;\n                                    o = 0;\n                                    while (1) {\n                                        m = c[n >> 2] | 0;\n                                        if (!m) {\n                                            x = 89;\n                                            break f;\n                                        }\n                                        m = Ao(E, m) | 0;\n                                        o = (m + o) | 0;\n                                        if ((o | 0) > (l | 0)) {\n                                            x = 89;\n                                            break f;\n                                        }\n                                        to(d, E, m);\n                                        if (o >>> 0 >= l >>> 0) {\n                                            x = 89;\n                                            break;\n                                        }\n                                        else\n                                            n = (n + 4) | 0;\n                                    }\n                                }\n                            }\n                        while (0);\n                        if ((x | 0) == 73) {\n                            x = 0;\n                            m = I;\n                            m = ((c[m >> 2] | 0) != 0) | ((c[(m + 4) >> 2] | 0) != 0);\n                            K = ((l | 0) != 0) | m;\n                            m = (A - q + ((m ^ 1) & 1)) | 0;\n                            r = K ? q : z;\n                            q = K ? ((l | 0) > (m | 0) ? l : m) : 0;\n                            m = (l | 0) > -1 ? n & -65537 : n;\n                            l = A;\n                        }\n                        else if ((x | 0) == 89) {\n                            x = 0;\n                            zo(d, 32, v, l, t ^ 8192);\n                            l = (v | 0) > (l | 0) ? v : l;\n                            break;\n                        }\n                        t = (l - r) | 0;\n                        s = (q | 0) < (t | 0) ? t : q;\n                        K = (s + o) | 0;\n                        l = (v | 0) < (K | 0) ? K : v;\n                        zo(d, 32, l, K, m);\n                        to(d, p, o);\n                        zo(d, 48, l, K, m ^ 65536);\n                        zo(d, 48, s, t, 0);\n                        to(d, r, t);\n                        zo(d, 32, l, K, m ^ 8192);\n                    }\n                while (0);\n                n = w;\n            }\n            g: do\n                if ((x | 0) == 92)\n                    if (!d)\n                        if (!n)\n                            e = 0;\n                        else {\n                            e = 1;\n                            while (1) {\n                                l = c[(i + (e << 2)) >> 2] | 0;\n                                if (!l)\n                                    break;\n                                vo((h + (e << 3)) | 0, l, f, k);\n                                e = (e + 1) | 0;\n                                if (e >>> 0 >= 10) {\n                                    e = 1;\n                                    break g;\n                                }\n                            }\n                            while (1) {\n                                if (c[(i + (e << 2)) >> 2] | 0) {\n                                    e = -1;\n                                    break g;\n                                }\n                                e = (e + 1) | 0;\n                                if (e >>> 0 >= 10) {\n                                    e = 1;\n                                    break;\n                                }\n                            }\n                        }\n            while (0);\n            V = J;\n            return e | 0;\n        }\n        function to(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            if (!(c[a >> 2] & 32))\n                jo(b, d, a) | 0;\n            return;\n        }\n        function uo(b) {\n            b = b | 0;\n            var d = 0, e = 0;\n            if (!(bo(a[c[b >> 2] >> 0] | 0) | 0))\n                d = 0;\n            else {\n                d = 0;\n                do {\n                    e = c[b >> 2] | 0;\n                    d = (((d * 10) | 0) + -48 + (a[e >> 0] | 0)) | 0;\n                    e = (e + 1) | 0;\n                    c[b >> 2] = e;\n                } while ((bo(a[e >> 0] | 0) | 0) != 0);\n            }\n            return d | 0;\n        }\n        function vo(a, b, d, e) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            var f = 0, h = 0.0;\n            a: do\n                if (b >>> 0 <= 20)\n                    do\n                        switch (b | 0) {\n                            case 9: {\n                                b = ((c[d >> 2] | 0) + (4 - 1)) & ~(4 - 1);\n                                e = c[b >> 2] | 0;\n                                c[d >> 2] = b + 4;\n                                c[a >> 2] = e;\n                                break a;\n                            }\n                            case 10: {\n                                e = ((c[d >> 2] | 0) + (4 - 1)) & ~(4 - 1);\n                                b = c[e >> 2] | 0;\n                                c[d >> 2] = e + 4;\n                                e = a;\n                                c[e >> 2] = b;\n                                c[(e + 4) >> 2] = (((b | 0) < 0) << 31) >> 31;\n                                break a;\n                            }\n                            case 11: {\n                                e = ((c[d >> 2] | 0) + (4 - 1)) & ~(4 - 1);\n                                b = c[e >> 2] | 0;\n                                c[d >> 2] = e + 4;\n                                e = a;\n                                c[e >> 2] = b;\n                                c[(e + 4) >> 2] = 0;\n                                break a;\n                            }\n                            case 12: {\n                                e = ((c[d >> 2] | 0) + (8 - 1)) & ~(8 - 1);\n                                b = e;\n                                f = c[b >> 2] | 0;\n                                b = c[(b + 4) >> 2] | 0;\n                                c[d >> 2] = e + 8;\n                                e = a;\n                                c[e >> 2] = f;\n                                c[(e + 4) >> 2] = b;\n                                break a;\n                            }\n                            case 13: {\n                                f = ((c[d >> 2] | 0) + (4 - 1)) & ~(4 - 1);\n                                e = c[f >> 2] | 0;\n                                c[d >> 2] = f + 4;\n                                e = ((e & 65535) << 16) >> 16;\n                                f = a;\n                                c[f >> 2] = e;\n                                c[(f + 4) >> 2] = (((e | 0) < 0) << 31) >> 31;\n                                break a;\n                            }\n                            case 14: {\n                                f = ((c[d >> 2] | 0) + (4 - 1)) & ~(4 - 1);\n                                e = c[f >> 2] | 0;\n                                c[d >> 2] = f + 4;\n                                f = a;\n                                c[f >> 2] = e & 65535;\n                                c[(f + 4) >> 2] = 0;\n                                break a;\n                            }\n                            case 15: {\n                                f = ((c[d >> 2] | 0) + (4 - 1)) & ~(4 - 1);\n                                e = c[f >> 2] | 0;\n                                c[d >> 2] = f + 4;\n                                e = ((e & 255) << 24) >> 24;\n                                f = a;\n                                c[f >> 2] = e;\n                                c[(f + 4) >> 2] = (((e | 0) < 0) << 31) >> 31;\n                                break a;\n                            }\n                            case 16: {\n                                f = ((c[d >> 2] | 0) + (4 - 1)) & ~(4 - 1);\n                                e = c[f >> 2] | 0;\n                                c[d >> 2] = f + 4;\n                                f = a;\n                                c[f >> 2] = e & 255;\n                                c[(f + 4) >> 2] = 0;\n                                break a;\n                            }\n                            case 17: {\n                                f = ((c[d >> 2] | 0) + (8 - 1)) & ~(8 - 1);\n                                h = +g[f >> 3];\n                                c[d >> 2] = f + 8;\n                                g[a >> 3] = h;\n                                break a;\n                            }\n                            case 18: {\n                                da[e & 15](a, d);\n                                break a;\n                            }\n                            default:\n                                break a;\n                        }\n                    while (0);\n            while (0);\n            return;\n        }\n        function wo(b, c, e, f) {\n            b = b | 0;\n            c = c | 0;\n            e = e | 0;\n            f = f | 0;\n            if (!(((b | 0) == 0) & ((c | 0) == 0)))\n                do {\n                    e = (e + -1) | 0;\n                    a[e >> 0] = d[(640 + (b & 15)) >> 0] | 0 | f;\n                    b = qr(b | 0, c | 0, 4) | 0;\n                    c = u() | 0;\n                } while (!(((b | 0) == 0) & ((c | 0) == 0)));\n            return e | 0;\n        }\n        function xo(b, c, d) {\n            b = b | 0;\n            c = c | 0;\n            d = d | 0;\n            if (!(((b | 0) == 0) & ((c | 0) == 0)))\n                do {\n                    d = (d + -1) | 0;\n                    a[d >> 0] = (b & 7) | 48;\n                    b = qr(b | 0, c | 0, 3) | 0;\n                    c = u() | 0;\n                } while (!(((b | 0) == 0) & ((c | 0) == 0)));\n            return d | 0;\n        }\n        function yo(b, c, d) {\n            b = b | 0;\n            c = c | 0;\n            d = d | 0;\n            var e = 0, f = 0, g = 0;\n            if ((c >>> 0 > 0) | (((c | 0) == 0) & (b >>> 0 > 4294967295))) {\n                do {\n                    e = b;\n                    b = pr(b | 0, c | 0, 10, 0) | 0;\n                    f = c;\n                    c = u() | 0;\n                    g = kr(b | 0, c | 0, 10, 0) | 0;\n                    g = mr(e | 0, f | 0, g | 0, u() | 0) | 0;\n                    u() | 0;\n                    d = (d + -1) | 0;\n                    a[d >> 0] = (g & 255) | 48;\n                } while ((f >>> 0 > 9) | (((f | 0) == 9) & (e >>> 0 > 4294967295)));\n                c = b;\n            }\n            else\n                c = b;\n            if (c)\n                do {\n                    g = c;\n                    c = ((c >>> 0) / 10) | 0;\n                    d = (d + -1) | 0;\n                    a[d >> 0] = (g - ((c * 10) | 0)) | 48;\n                } while (g >>> 0 >= 10);\n            return d | 0;\n        }\n        function zo(a, b, c, d, e) {\n            a = a | 0;\n            b = b | 0;\n            c = c | 0;\n            d = d | 0;\n            e = e | 0;\n            var f = 0, g = 0;\n            g = V;\n            V = (V + 256) | 0;\n            f = g;\n            if (((c | 0) > (d | 0)) & (((e & 73728) | 0) == 0)) {\n                e = (c - d) | 0;\n                wr(f | 0, ((b << 24) >> 24) | 0, (e >>> 0 < 256 ? e : 256) | 0) | 0;\n                if (e >>> 0 > 255) {\n                    b = (c - d) | 0;\n                    do {\n                        to(a, f, 256);\n                        e = (e + -256) | 0;\n                    } while (e >>> 0 > 255);\n                    e = b & 255;\n                }\n                to(a, f, e);\n            }\n            V = g;\n            return;\n        }\n        function Ao(a, b) {\n            a = a | 0;\n            b = b | 0;\n            if (!a)\n                a = 0;\n            else\n                a = Bo(a, b, 0) | 0;\n            return a | 0;\n        }\n        function Bo(b, d, e) {\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            do\n                if (b) {\n                    if (d >>> 0 < 128) {\n                        a[b >> 0] = d;\n                        b = 1;\n                        break;\n                    }\n                    if (!(c[c[((Co() | 0) + 176) >> 2] >> 2] | 0))\n                        if (((d & -128) | 0) == 57216) {\n                            a[b >> 0] = d;\n                            b = 1;\n                            break;\n                        }\n                        else {\n                            c[(ao() | 0) >> 2] = 25;\n                            b = -1;\n                            break;\n                        }\n                    if (d >>> 0 < 2048) {\n                        a[b >> 0] = (d >>> 6) | 192;\n                        a[(b + 1) >> 0] = (d & 63) | 128;\n                        b = 2;\n                        break;\n                    }\n                    if ((d >>> 0 < 55296) | (((d & -8192) | 0) == 57344)) {\n                        a[b >> 0] = (d >>> 12) | 224;\n                        a[(b + 1) >> 0] = ((d >>> 6) & 63) | 128;\n                        a[(b + 2) >> 0] = (d & 63) | 128;\n                        b = 3;\n                        break;\n                    }\n                    if (((d + -65536) | 0) >>> 0 < 1048576) {\n                        a[b >> 0] = (d >>> 18) | 240;\n                        a[(b + 1) >> 0] = ((d >>> 12) & 63) | 128;\n                        a[(b + 2) >> 0] = ((d >>> 6) & 63) | 128;\n                        a[(b + 3) >> 0] = (d & 63) | 128;\n                        b = 4;\n                        break;\n                    }\n                    else {\n                        c[(ao() | 0) >> 2] = 25;\n                        b = -1;\n                        break;\n                    }\n                }\n                else\n                    b = 1;\n            while (0);\n            return b | 0;\n        }\n        function Co() {\n            return co() | 0;\n        }\n        function Do(a) {\n            a = +a;\n            var b = 0;\n            g[h >> 3] = a;\n            b = c[h >> 2] | 0;\n            t(c[(h + 4) >> 2] | 0);\n            return b | 0;\n        }\n        function Eo(a, b) {\n            a = +a;\n            b = b | 0;\n            var d = 0, e = 0, f = 0;\n            g[h >> 3] = a;\n            d = c[h >> 2] | 0;\n            e = c[(h + 4) >> 2] | 0;\n            f = qr(d | 0, e | 0, 52) | 0;\n            u() | 0;\n            switch (f & 2047) {\n                case 0: {\n                    if (a != 0.0) {\n                        a = +Eo(a * 18446744073709551616.0, b);\n                        d = ((c[b >> 2] | 0) + -64) | 0;\n                    }\n                    else\n                        d = 0;\n                    c[b >> 2] = d;\n                    break;\n                }\n                case 2047:\n                    break;\n                default: {\n                    c[b >> 2] = (f & 2047) + -1022;\n                    c[h >> 2] = d;\n                    c[(h + 4) >> 2] = (e & -2146435073) | 1071644672;\n                    a = +g[h >> 3];\n                }\n            }\n            return +a;\n        }\n        function Fo(b, c, d) {\n            b = b | 0;\n            c = c | 0;\n            d = d | 0;\n            var e = 0, f = 0;\n            a: do\n                if (!d)\n                    b = 0;\n                else {\n                    while (1) {\n                        e = a[b >> 0] | 0;\n                        f = a[c >> 0] | 0;\n                        if ((e << 24) >> 24 != (f << 24) >> 24)\n                            break;\n                        d = (d + -1) | 0;\n                        if (!d) {\n                            b = 0;\n                            break a;\n                        }\n                        else {\n                            b = (b + 1) | 0;\n                            c = (c + 1) | 0;\n                        }\n                    }\n                    b = ((e & 255) - (f & 255)) | 0;\n                }\n            while (0);\n            return b | 0;\n        }\n        function Go(a, b, d, e) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            var f = 0, g = 0;\n            f = V;\n            V = (V + 16) | 0;\n            g = f;\n            c[g >> 2] = e;\n            e = Ho(a, b, d, g) | 0;\n            V = f;\n            return e | 0;\n        }\n        function Ho(b, d, e, f) {\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            f = f | 0;\n            var g = 0, h = 0, i = 0, j = 0;\n            j = V;\n            V = (V + 160) | 0;\n            g = (j + 144) | 0;\n            i = j;\n            ur(i | 0, 3672, 144) | 0;\n            if (((d + -1) | 0) >>> 0 > 2147483646)\n                if (!d) {\n                    b = g;\n                    d = 1;\n                    h = 4;\n                }\n                else {\n                    c[(ao() | 0) >> 2] = 61;\n                    d = -1;\n                }\n            else\n                h = 4;\n            if ((h | 0) == 4) {\n                h = (-2 - b) | 0;\n                h = d >>> 0 > h >>> 0 ? h : d;\n                c[(i + 48) >> 2] = h;\n                g = (i + 20) | 0;\n                c[g >> 2] = b;\n                c[(i + 44) >> 2] = b;\n                d = (b + h) | 0;\n                b = (i + 16) | 0;\n                c[b >> 2] = d;\n                c[(i + 28) >> 2] = d;\n                d = oo(i, e, f) | 0;\n                if (h) {\n                    i = c[g >> 2] | 0;\n                    a[(i + ((((i | 0) == (c[b >> 2] | 0)) << 31) >> 31)) >> 0] = 0;\n                }\n            }\n            V = j;\n            return d | 0;\n        }\n        function Io(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0;\n            e = (a + 20) | 0;\n            f = c[e >> 2] | 0;\n            a = ((c[(a + 16) >> 2] | 0) - f) | 0;\n            a = a >>> 0 > d >>> 0 ? d : a;\n            ur(f | 0, b | 0, a | 0) | 0;\n            c[e >> 2] = (c[e >> 2] | 0) + a;\n            return d | 0;\n        }\n        function Jo(a) {\n            a = a | 0;\n            var b = 0, c = 0;\n            b = ((fo(a) | 0) + 1) | 0;\n            c = dr(b) | 0;\n            if (!c)\n                a = 0;\n            else\n                a = ur(c | 0, a | 0, b | 0) | 0;\n            return a | 0;\n        }\n        function Ko(b, e) {\n            b = b | 0;\n            e = e | 0;\n            var f = 0, g = 0;\n            f = 0;\n            while (1) {\n                if ((d[(656 + f) >> 0] | 0) == (b | 0)) {\n                    g = 4;\n                    break;\n                }\n                f = (f + 1) | 0;\n                if ((f | 0) == 87) {\n                    b = 87;\n                    g = 5;\n                    break;\n                }\n            }\n            if ((g | 0) == 4)\n                if (!f)\n                    f = 752;\n                else {\n                    b = f;\n                    g = 5;\n                }\n            if ((g | 0) == 5) {\n                f = 752;\n                do {\n                    do {\n                        g = f;\n                        f = (f + 1) | 0;\n                    } while ((a[g >> 0] | 0) != 0);\n                    b = (b + -1) | 0;\n                } while ((b | 0) != 0);\n            }\n            return Lo(f, c[(e + 20) >> 2] | 0) | 0;\n        }\n        function Lo(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return ko(a, b) | 0;\n        }\n        function Mo(a) {\n            a = a | 0;\n            return Ko(a, c[((No() | 0) + 176) >> 2] | 0) | 0;\n        }\n        function No() {\n            return co() | 0;\n        }\n        function Oo(b, c, d) {\n            b = b | 0;\n            c = c | 0;\n            d = d | 0;\n            var e = 0;\n            e = Mo(b) | 0;\n            b = fo(e) | 0;\n            if (b >>> 0 >= d >>> 0) {\n                b = (d + -1) | 0;\n                if (!d)\n                    b = 68;\n                else {\n                    ur(c | 0, e | 0, b | 0) | 0;\n                    a[(c + b) >> 0] = 0;\n                    b = 68;\n                }\n            }\n            else {\n                ur(c | 0, e | 0, (b + 1) | 0) | 0;\n                b = 0;\n            }\n            return b | 0;\n        }\n        function Po() {\n            var a = 0, b = 0, d = 0, e = 0, f = 0, g = 0, h = 0;\n            e = V;\n            V = (V + 48) | 0;\n            g = (e + 32) | 0;\n            b = (e + 24) | 0;\n            h = (e + 16) | 0;\n            f = e;\n            e = (e + 36) | 0;\n            a = Qo() | 0;\n            if (a | 0 ? ((d = c[a >> 2] | 0), d | 0) : 0) {\n                a = (d + 48) | 0;\n                if (!(Ro(a) | 0)) {\n                    c[b >> 2] = 20420;\n                    To(20370, b);\n                }\n                b = So(a) | 0;\n                if (((b | 0) == 1126902529) & ((u() | 0) == 1129074247))\n                    a = c[(d + 44) >> 2] | 0;\n                else\n                    a = (d + 80) | 0;\n                c[e >> 2] = a;\n                d = c[d >> 2] | 0;\n                a = c[(d + 4) >> 2] | 0;\n                if (aa[c[((c[954] | 0) + 16) >> 2] & 7](3816, d, e) | 0) {\n                    h = c[e >> 2] | 0;\n                    h = Z[c[((c[h >> 2] | 0) + 8) >> 2] & 15](h) | 0;\n                    c[f >> 2] = 20420;\n                    c[(f + 4) >> 2] = a;\n                    c[(f + 8) >> 2] = h;\n                    To(20284, f);\n                }\n                else {\n                    c[h >> 2] = 20420;\n                    c[(h + 4) >> 2] = a;\n                    To(20329, h);\n                }\n            }\n            To(20408, g);\n        }\n        function Qo() {\n            return 21640;\n        }\n        function Ro(a) {\n            a = a | 0;\n            a = So(a) | 0;\n            return ((((a & -256) | 0) == 1126902528) & ((u() | 0) == 1129074247)) | 0;\n        }\n        function So(a) {\n            a = a | 0;\n            var b = 0;\n            b = a;\n            a = c[b >> 2] | 0;\n            t(c[(b + 4) >> 2] | 0);\n            return a | 0;\n        }\n        function To(a, b) {\n            a = a | 0;\n            b = b | 0;\n            U();\n        }\n        function Uo(a) {\n            a = a | 0;\n            return;\n        }\n        function Vo(a) {\n            a = a | 0;\n            Uo(a);\n            jp(a);\n            return;\n        }\n        function Wo(a) {\n            a = a | 0;\n            return;\n        }\n        function Xo(a) {\n            a = a | 0;\n            return;\n        }\n        function Yo(d, e, f) {\n            d = d | 0;\n            e = e | 0;\n            f = f | 0;\n            var g = 0, h = 0, i = 0, j = 0, k = 0, l = 0;\n            l = V;\n            V = (V + 64) | 0;\n            j = l;\n            if (!(ap(d, e, 0) | 0))\n                if ((e | 0) != 0 ? ((k = ep(e, 3840, 3824, 0) | 0), (k | 0) != 0) : 0) {\n                    c[j >> 2] = k;\n                    c[(j + 4) >> 2] = 0;\n                    c[(j + 8) >> 2] = d;\n                    c[(j + 12) >> 2] = -1;\n                    d = (j + 16) | 0;\n                    e = (j + 24) | 0;\n                    g = (j + 48) | 0;\n                    h = d;\n                    i = (h + 36) | 0;\n                    do {\n                        c[h >> 2] = 0;\n                        h = (h + 4) | 0;\n                    } while ((h | 0) < (i | 0));\n                    b[(d + 36) >> 1] = 0;\n                    a[(d + 38) >> 0] = 0;\n                    c[g >> 2] = 1;\n                    fa[c[((c[k >> 2] | 0) + 28) >> 2] & 7](k, j, c[f >> 2] | 0, 1);\n                    if ((c[e >> 2] | 0) == 1) {\n                        c[f >> 2] = c[d >> 2];\n                        d = 1;\n                    }\n                    else\n                        d = 0;\n                }\n                else\n                    d = 0;\n            else\n                d = 1;\n            V = l;\n            return d | 0;\n        }\n        function Zo(a, b, d, e, f, g) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            f = f | 0;\n            g = g | 0;\n            if (ap(a, c[(b + 8) >> 2] | 0, g) | 0)\n                dp(0, b, d, e, f);\n            return;\n        }\n        function _o(b, d, e, f, g) {\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            f = f | 0;\n            g = g | 0;\n            var h = 0;\n            do\n                if (!(ap(b, c[(d + 8) >> 2] | 0, g) | 0)) {\n                    if (ap(b, c[d >> 2] | 0, g) | 0) {\n                        if ((c[(d + 16) >> 2] | 0) != (e | 0)\n                            ? ((h = (d + 20) | 0), (c[h >> 2] | 0) != (e | 0))\n                            : 0) {\n                            c[(d + 32) >> 2] = f;\n                            c[h >> 2] = e;\n                            g = (d + 40) | 0;\n                            c[g >> 2] = (c[g >> 2] | 0) + 1;\n                            if ((c[(d + 36) >> 2] | 0) == 1 ? (c[(d + 24) >> 2] | 0) == 2 : 0)\n                                a[(d + 54) >> 0] = 1;\n                            c[(d + 44) >> 2] = 4;\n                            break;\n                        }\n                        if ((f | 0) == 1)\n                            c[(d + 32) >> 2] = 1;\n                    }\n                }\n                else\n                    cp(0, d, e, f);\n            while (0);\n            return;\n        }\n        function $o(a, b, d, e) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            if (ap(a, c[(b + 8) >> 2] | 0, 0) | 0)\n                bp(0, b, d, e);\n            return;\n        }\n        function ap(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            if (d)\n                if ((a | 0) == (b | 0))\n                    a = 1;\n                else\n                    a = (eo(c[(a + 4) >> 2] | 0, c[(b + 4) >> 2] | 0) | 0) == 0;\n            else\n                a = (c[(a + 4) >> 2] | 0) == (c[(b + 4) >> 2] | 0);\n            return a | 0;\n        }\n        function bp(b, d, e, f) {\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            f = f | 0;\n            var g = 0;\n            b = (d + 16) | 0;\n            g = c[b >> 2] | 0;\n            do\n                if (g) {\n                    if ((g | 0) != (e | 0)) {\n                        f = (d + 36) | 0;\n                        c[f >> 2] = (c[f >> 2] | 0) + 1;\n                        c[(d + 24) >> 2] = 2;\n                        a[(d + 54) >> 0] = 1;\n                        break;\n                    }\n                    b = (d + 24) | 0;\n                    if ((c[b >> 2] | 0) == 2)\n                        c[b >> 2] = f;\n                }\n                else {\n                    c[b >> 2] = e;\n                    c[(d + 24) >> 2] = f;\n                    c[(d + 36) >> 2] = 1;\n                }\n            while (0);\n            return;\n        }\n        function cp(a, b, d, e) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            var f = 0;\n            if ((c[(b + 4) >> 2] | 0) == (d | 0) ? ((f = (b + 28) | 0), (c[f >> 2] | 0) != 1) : 0)\n                c[f >> 2] = e;\n            return;\n        }\n        function dp(b, d, e, f, g) {\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            f = f | 0;\n            g = g | 0;\n            a[(d + 53) >> 0] = 1;\n            do\n                if ((c[(d + 4) >> 2] | 0) == (f | 0)) {\n                    a[(d + 52) >> 0] = 1;\n                    b = (d + 16) | 0;\n                    f = c[b >> 2] | 0;\n                    if (!f) {\n                        c[b >> 2] = e;\n                        c[(d + 24) >> 2] = g;\n                        c[(d + 36) >> 2] = 1;\n                        if (!((g | 0) == 1 ? (c[(d + 48) >> 2] | 0) == 1 : 0))\n                            break;\n                        a[(d + 54) >> 0] = 1;\n                        break;\n                    }\n                    if ((f | 0) != (e | 0)) {\n                        g = (d + 36) | 0;\n                        c[g >> 2] = (c[g >> 2] | 0) + 1;\n                        a[(d + 54) >> 0] = 1;\n                        break;\n                    }\n                    f = (d + 24) | 0;\n                    b = c[f >> 2] | 0;\n                    if ((b | 0) == 2) {\n                        c[f >> 2] = g;\n                        b = g;\n                    }\n                    if ((b | 0) == 1 ? (c[(d + 48) >> 2] | 0) == 1 : 0)\n                        a[(d + 54) >> 0] = 1;\n                }\n            while (0);\n            return;\n        }\n        function ep(d, e, f, g) {\n            d = d | 0;\n            e = e | 0;\n            f = f | 0;\n            g = g | 0;\n            var h = 0, i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0, p = 0;\n            p = V;\n            V = (V + 64) | 0;\n            n = p;\n            m = c[d >> 2] | 0;\n            o = (d + (c[(m + -8) >> 2] | 0)) | 0;\n            m = c[(m + -4) >> 2] | 0;\n            c[n >> 2] = f;\n            c[(n + 4) >> 2] = d;\n            c[(n + 8) >> 2] = e;\n            c[(n + 12) >> 2] = g;\n            d = (n + 16) | 0;\n            e = (n + 20) | 0;\n            g = (n + 24) | 0;\n            h = (n + 28) | 0;\n            i = (n + 32) | 0;\n            j = (n + 40) | 0;\n            k = d;\n            l = (k + 36) | 0;\n            do {\n                c[k >> 2] = 0;\n                k = (k + 4) | 0;\n            } while ((k | 0) < (l | 0));\n            b[(d + 36) >> 1] = 0;\n            a[(d + 38) >> 0] = 0;\n            a: do\n                if (ap(m, f, 0) | 0) {\n                    c[(n + 48) >> 2] = 1;\n                    ha[c[((c[m >> 2] | 0) + 20) >> 2] & 3](m, n, o, o, 1, 0);\n                    d = (c[g >> 2] | 0) == 1 ? o : 0;\n                }\n                else {\n                    ga[c[((c[m >> 2] | 0) + 24) >> 2] & 3](m, n, o, 1, 0);\n                    switch (c[(n + 36) >> 2] | 0) {\n                        case 0: {\n                            d =\n                                ((c[j >> 2] | 0) == 1) & ((c[h >> 2] | 0) == 1) & ((c[i >> 2] | 0) == 1)\n                                    ? c[e >> 2] | 0\n                                    : 0;\n                            break a;\n                        }\n                        case 1:\n                            break;\n                        default: {\n                            d = 0;\n                            break a;\n                        }\n                    }\n                    if ((c[g >> 2] | 0) != 1\n                        ? !(((c[j >> 2] | 0) == 0) & ((c[h >> 2] | 0) == 1) & ((c[i >> 2] | 0) == 1))\n                        : 0) {\n                        d = 0;\n                        break;\n                    }\n                    d = c[d >> 2] | 0;\n                }\n            while (0);\n            V = p;\n            return d | 0;\n        }\n        function fp(a) {\n            a = a | 0;\n            Uo(a);\n            jp(a);\n            return;\n        }\n        function gp(a, b, d, e, f, g) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            f = f | 0;\n            g = g | 0;\n            if (ap(a, c[(b + 8) >> 2] | 0, g) | 0)\n                dp(0, b, d, e, f);\n            else {\n                a = c[(a + 8) >> 2] | 0;\n                ha[c[((c[a >> 2] | 0) + 20) >> 2] & 3](a, b, d, e, f, g);\n            }\n            return;\n        }\n        function hp(b, d, e, f, g) {\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            f = f | 0;\n            g = g | 0;\n            var h = 0, i = 0, j = 0;\n            a: do\n                if (!(ap(b, c[(d + 8) >> 2] | 0, g) | 0)) {\n                    if (!(ap(b, c[d >> 2] | 0, g) | 0)) {\n                        i = c[(b + 8) >> 2] | 0;\n                        ga[c[((c[i >> 2] | 0) + 24) >> 2] & 3](i, d, e, f, g);\n                        break;\n                    }\n                    if ((c[(d + 16) >> 2] | 0) != (e | 0) ? ((i = (d + 20) | 0), (c[i >> 2] | 0) != (e | 0)) : 0) {\n                        c[(d + 32) >> 2] = f;\n                        f = (d + 44) | 0;\n                        do\n                            if ((c[f >> 2] | 0) != 4) {\n                                h = (d + 52) | 0;\n                                a[h >> 0] = 0;\n                                j = (d + 53) | 0;\n                                a[j >> 0] = 0;\n                                b = c[(b + 8) >> 2] | 0;\n                                ha[c[((c[b >> 2] | 0) + 20) >> 2] & 3](b, d, e, e, 1, g);\n                                if (a[j >> 0] | 0) {\n                                    j = (a[h >> 0] | 0) == 0;\n                                    c[f >> 2] = 3;\n                                    if (j)\n                                        break;\n                                    else\n                                        break a;\n                                }\n                                else {\n                                    c[f >> 2] = 4;\n                                    break;\n                                }\n                            }\n                        while (0);\n                        c[i >> 2] = e;\n                        j = (d + 40) | 0;\n                        c[j >> 2] = (c[j >> 2] | 0) + 1;\n                        if ((c[(d + 36) >> 2] | 0) != 1)\n                            break;\n                        if ((c[(d + 24) >> 2] | 0) != 2)\n                            break;\n                        a[(d + 54) >> 0] = 1;\n                        break;\n                    }\n                    if ((f | 0) == 1)\n                        c[(d + 32) >> 2] = 1;\n                }\n                else\n                    cp(0, d, e, f);\n            while (0);\n            return;\n        }\n        function ip(a, b, d, e) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            if (ap(a, c[(b + 8) >> 2] | 0, 0) | 0)\n                bp(0, b, d, e);\n            else {\n                a = c[(a + 8) >> 2] | 0;\n                fa[c[((c[a >> 2] | 0) + 28) >> 2] & 7](a, b, d, e);\n            }\n            return;\n        }\n        function jp(a) {\n            a = a | 0;\n            er(a);\n            return;\n        }\n        function kp(a) {\n            a = a | 0;\n            return;\n        }\n        function lp() {\n            var a = 0, b = 0;\n            a = Qo() | 0;\n            if ((a | 0 ? ((b = c[a >> 2] | 0), b | 0) : 0) ? Ro((b + 48) | 0) | 0 : 0)\n                mp(c[(b + 12) >> 2] | 0);\n            mp(np() | 0);\n        }\n        function mp(a) {\n            a = a | 0;\n            var b = 0;\n            b = V;\n            V = (V + 16) | 0;\n            ba[a & 3]();\n            To(20559, b);\n        }\n        function np() {\n            return 2;\n        }\n        function op(a) {\n            a = a | 0;\n            return;\n        }\n        function pp(a) {\n            a = a | 0;\n            jp(a);\n            return;\n        }\n        function qp(a) {\n            a = a | 0;\n            return 20599;\n        }\n        function rp(a) {\n            a = a | 0;\n            c[a >> 2] = 5916;\n            vp((a + 4) | 0);\n            return;\n        }\n        function sp(a) {\n            a = a | 0;\n            rp(a);\n            jp(a);\n            return;\n        }\n        function tp(a) {\n            a = a | 0;\n            return up((a + 4) | 0) | 0;\n        }\n        function up(a) {\n            a = a | 0;\n            return c[a >> 2] | 0;\n        }\n        function vp(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            if (wp(a) | 0\n                ? ((b = xp(c[a >> 2] | 0) | 0),\n                    (d = (b + 8) | 0),\n                    (a = c[d >> 2] | 0),\n                    (c[d >> 2] = a + -1),\n                    (a | 0) < 1)\n                : 0)\n                jp(b);\n            return;\n        }\n        function wp(a) {\n            a = a | 0;\n            return 1;\n        }\n        function xp(a) {\n            a = a | 0;\n            return (a + -12) | 0;\n        }\n        function yp(a) {\n            a = a | 0;\n            c[a >> 2] = 5936;\n            vp((a + 4) | 0);\n            return;\n        }\n        function zp(a) {\n            a = a | 0;\n            yp(a);\n            jp(a);\n            return;\n        }\n        function Ap(a) {\n            a = a | 0;\n            return up((a + 4) | 0) | 0;\n        }\n        function Bp(a) {\n            a = a | 0;\n            rp(a);\n            jp(a);\n            return;\n        }\n        function Cp(a) {\n            a = a | 0;\n            rp(a);\n            jp(a);\n            return;\n        }\n        function Dp() {\n            var a = 0;\n            a = V;\n            V = (V + 16) | 0;\n            To(20848, a);\n        }\n        function Ep(a) {\n            a = a | 0;\n            Uo(a);\n            jp(a);\n            return;\n        }\n        function Fp(a, b, c) {\n            a = a | 0;\n            b = b | 0;\n            c = c | 0;\n            return ap(a, b, 0) | 0;\n        }\n        function Gp(a) {\n            a = a | 0;\n            Uo(a);\n            jp(a);\n            return;\n        }\n        function Hp(d, e, f) {\n            d = d | 0;\n            e = e | 0;\n            f = f | 0;\n            var g = 0, h = 0, i = 0, j = 0, k = 0, l = 0, m = 0, n = 0;\n            n = V;\n            V = (V + 64) | 0;\n            l = n;\n            do\n                if (!(ap(e, 4048, 0) | 0)) {\n                    if (Ip(d, e, 0) | 0) {\n                        e = c[f >> 2] | 0;\n                        if (!e) {\n                            e = 1;\n                            break;\n                        }\n                        c[f >> 2] = c[e >> 2];\n                        e = 1;\n                        break;\n                    }\n                    if ((e | 0) != 0 ? ((g = ep(e, 3840, 3976, 0) | 0), (g | 0) != 0) : 0) {\n                        e = c[f >> 2] | 0;\n                        if (e | 0)\n                            c[f >> 2] = c[e >> 2];\n                        e = c[(g + 8) >> 2] | 0;\n                        i = (d + 8) | 0;\n                        h = c[i >> 2] | 0;\n                        if (((e & 7 & (h ^ 7)) | 0) == 0 ? ((((e & 96) ^ 96) & h) | 0) == 0 : 0) {\n                            h = (d + 12) | 0;\n                            d = c[h >> 2] | 0;\n                            g = (g + 12) | 0;\n                            e = c[g >> 2] | 0;\n                            if (!(ap(d, e, 0) | 0)) {\n                                if (ap(d, 4040, 0) | 0) {\n                                    if (!e) {\n                                        e = 1;\n                                        break;\n                                    }\n                                    e = (ep(e, 3840, 3992, 0) | 0) == 0;\n                                    break;\n                                }\n                                if (d) {\n                                    e = ep(d, 3840, 3976, 0) | 0;\n                                    if (e | 0) {\n                                        if (!(c[i >> 2] & 1)) {\n                                            e = 0;\n                                            break;\n                                        }\n                                        e = Jp(e, c[g >> 2] | 0) | 0;\n                                        break;\n                                    }\n                                    e = c[h >> 2] | 0;\n                                    if (e) {\n                                        e = ep(e, 3840, 4008, 0) | 0;\n                                        if (e | 0) {\n                                            if (!(c[i >> 2] & 1)) {\n                                                e = 0;\n                                                break;\n                                            }\n                                            e = Kp(e, c[g >> 2] | 0) | 0;\n                                            break;\n                                        }\n                                        e = c[h >> 2] | 0;\n                                        if ((((e | 0) != 0 ? ((j = ep(e, 3840, 3824, 0) | 0), (j | 0) != 0) : 0)\n                                            ? ((k = c[g >> 2] | 0), (k | 0) != 0)\n                                            : 0)\n                                            ? ((m = ep(k, 3840, 3824, 0) | 0), (m | 0) != 0)\n                                            : 0) {\n                                            c[l >> 2] = m;\n                                            c[(l + 4) >> 2] = 0;\n                                            c[(l + 8) >> 2] = j;\n                                            c[(l + 12) >> 2] = -1;\n                                            e = (l + 16) | 0;\n                                            d = (l + 24) | 0;\n                                            g = (l + 48) | 0;\n                                            h = e;\n                                            i = (h + 36) | 0;\n                                            do {\n                                                c[h >> 2] = 0;\n                                                h = (h + 4) | 0;\n                                            } while ((h | 0) < (i | 0));\n                                            b[(e + 36) >> 1] = 0;\n                                            a[(e + 38) >> 0] = 0;\n                                            c[g >> 2] = 1;\n                                            fa[c[((c[m >> 2] | 0) + 28) >> 2] & 7](m, l, c[f >> 2] | 0, 1);\n                                            do\n                                                if ((c[d >> 2] | 0) == 1) {\n                                                    if (!(c[f >> 2] | 0)) {\n                                                        e = 1;\n                                                        break;\n                                                    }\n                                                    c[f >> 2] = c[e >> 2];\n                                                    e = 1;\n                                                }\n                                                else\n                                                    e = 0;\n                                            while (0);\n                                        }\n                                        else\n                                            e = 0;\n                                    }\n                                    else\n                                        e = 0;\n                                }\n                                else\n                                    e = 0;\n                            }\n                            else\n                                e = 1;\n                        }\n                        else\n                            e = 0;\n                    }\n                    else\n                        e = 0;\n                }\n                else {\n                    c[f >> 2] = 0;\n                    e = 1;\n                }\n            while (0);\n            V = n;\n            return e | 0;\n        }\n        function Ip(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0;\n            if (!(c[(a + 8) >> 2] & 24))\n                if ((b | 0) != 0 ? ((e = ep(b, 3840, 3960, 0) | 0), (e | 0) != 0) : 0) {\n                    d = ((c[(e + 8) >> 2] & 24) | 0) != 0;\n                    f = 5;\n                }\n                else\n                    d = 0;\n            else {\n                d = 1;\n                f = 5;\n            }\n            if ((f | 0) == 5)\n                d = ap(a, b, d) | 0;\n            return d | 0;\n        }\n        function Jp(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0, f = 0, g = 0, h = 0;\n            while (1) {\n                if (!b) {\n                    b = 0;\n                    break;\n                }\n                d = ep(b, 3840, 3976, 0) | 0;\n                if (!d) {\n                    b = 0;\n                    break;\n                }\n                f = c[(a + 8) >> 2] | 0;\n                if ((c[(d + 8) >> 2] & ~f) | 0) {\n                    b = 0;\n                    break;\n                }\n                e = (a + 12) | 0;\n                b = c[e >> 2] | 0;\n                d = (d + 12) | 0;\n                if (ap(b, c[d >> 2] | 0, 0) | 0) {\n                    b = 1;\n                    break;\n                }\n                if ((((f & 1) | 0) == 0) | ((b | 0) == 0)) {\n                    b = 0;\n                    break;\n                }\n                a = ep(b, 3840, 3976, 0) | 0;\n                if (!a) {\n                    h = 9;\n                    break;\n                }\n                b = c[d >> 2] | 0;\n            }\n            if ((h | 0) == 9) {\n                b = c[e >> 2] | 0;\n                if ((b | 0) != 0 ? ((g = ep(b, 3840, 4008, 0) | 0), (g | 0) != 0) : 0)\n                    b = Kp(g, c[d >> 2] | 0) | 0;\n                else\n                    b = 0;\n            }\n            return b | 0;\n        }\n        function Kp(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0;\n            if ((((b | 0) != 0 ? ((d = ep(b, 3840, 4008, 0) | 0), (d | 0) != 0) : 0)\n                ? ((c[(d + 8) >> 2] & ~c[(a + 8) >> 2]) | 0) == 0\n                : 0)\n                ? ap(c[(a + 12) >> 2] | 0, c[(d + 12) >> 2] | 0, 0) | 0\n                : 0)\n                a = ap(c[(a + 16) >> 2] | 0, c[(d + 16) >> 2] | 0, 0) | 0;\n            else\n                a = 0;\n            return a | 0;\n        }\n        function Lp(a) {\n            a = a | 0;\n            Uo(a);\n            jp(a);\n            return;\n        }\n        function Mp(b, d, e, f, g, h) {\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            f = f | 0;\n            g = g | 0;\n            h = h | 0;\n            var i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0, p = 0, q = 0, r = 0;\n            if (ap(b, c[(d + 8) >> 2] | 0, h) | 0)\n                dp(0, d, e, f, g);\n            else {\n                r = (d + 52) | 0;\n                j = a[r >> 0] | 0;\n                q = (d + 53) | 0;\n                i = a[q >> 0] | 0;\n                p = c[(b + 12) >> 2] | 0;\n                m = (b + 16 + (p << 3)) | 0;\n                a[r >> 0] = 0;\n                a[q >> 0] = 0;\n                Qp((b + 16) | 0, d, e, f, g, h);\n                k = a[r >> 0] | 0;\n                j = k | j;\n                l = a[q >> 0] | 0;\n                i = l | i;\n                a: do\n                    if ((p | 0) > 1) {\n                        n = (d + 24) | 0;\n                        o = (b + 8) | 0;\n                        p = (d + 54) | 0;\n                        b = (b + 24) | 0;\n                        do {\n                            i = i & 1;\n                            j = j & 1;\n                            if (a[p >> 0] | 0)\n                                break a;\n                            if (!((k << 24) >> 24)) {\n                                if ((l << 24) >> 24 ? ((c[o >> 2] & 1) | 0) == 0 : 0)\n                                    break a;\n                            }\n                            else {\n                                if ((c[n >> 2] | 0) == 1)\n                                    break a;\n                                if (!(c[o >> 2] & 2))\n                                    break a;\n                            }\n                            a[r >> 0] = 0;\n                            a[q >> 0] = 0;\n                            Qp(b, d, e, f, g, h);\n                            k = a[r >> 0] | 0;\n                            j = k | j;\n                            l = a[q >> 0] | 0;\n                            i = l | i;\n                            b = (b + 8) | 0;\n                        } while (b >>> 0 < m >>> 0);\n                    }\n                while (0);\n                a[r >> 0] = ((j << 24) >> 24 != 0) & 1;\n                a[q >> 0] = ((i << 24) >> 24 != 0) & 1;\n            }\n            return;\n        }\n        function Np(b, d, e, f, g) {\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            f = f | 0;\n            g = g | 0;\n            var h = 0, i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0, p = 0;\n            a: do\n                if (!(ap(b, c[(d + 8) >> 2] | 0, g) | 0)) {\n                    if (!(ap(b, c[d >> 2] | 0, g) | 0)) {\n                        p = c[(b + 12) >> 2] | 0;\n                        k = (b + 16 + (p << 3)) | 0;\n                        Rp((b + 16) | 0, d, e, f, g);\n                        h = (b + 24) | 0;\n                        if ((p | 0) <= 1)\n                            break;\n                        b = c[(b + 8) >> 2] | 0;\n                        if (((b & 2) | 0) == 0 ? ((j = (d + 36) | 0), (c[j >> 2] | 0) != 1) : 0) {\n                            if (!(b & 1)) {\n                                b = (d + 54) | 0;\n                                while (1) {\n                                    if (a[b >> 0] | 0)\n                                        break a;\n                                    if ((c[j >> 2] | 0) == 1)\n                                        break a;\n                                    Rp(h, d, e, f, g);\n                                    h = (h + 8) | 0;\n                                    if (h >>> 0 >= k >>> 0)\n                                        break a;\n                                }\n                            }\n                            b = (d + 24) | 0;\n                            i = (d + 54) | 0;\n                            while (1) {\n                                if (a[i >> 0] | 0)\n                                    break a;\n                                if ((c[j >> 2] | 0) == 1 ? (c[b >> 2] | 0) == 1 : 0)\n                                    break a;\n                                Rp(h, d, e, f, g);\n                                h = (h + 8) | 0;\n                                if (h >>> 0 >= k >>> 0)\n                                    break a;\n                            }\n                        }\n                        b = (d + 54) | 0;\n                        while (1) {\n                            if (a[b >> 0] | 0)\n                                break a;\n                            Rp(h, d, e, f, g);\n                            h = (h + 8) | 0;\n                            if (h >>> 0 >= k >>> 0)\n                                break a;\n                        }\n                    }\n                    if ((c[(d + 16) >> 2] | 0) != (e | 0) ? ((p = (d + 20) | 0), (c[p >> 2] | 0) != (e | 0)) : 0) {\n                        c[(d + 32) >> 2] = f;\n                        o = (d + 44) | 0;\n                        if ((c[o >> 2] | 0) != 4) {\n                            j = (b + 16 + (c[(b + 12) >> 2] << 3)) | 0;\n                            k = (d + 52) | 0;\n                            f = (d + 53) | 0;\n                            l = (d + 54) | 0;\n                            m = (b + 8) | 0;\n                            n = (d + 24) | 0;\n                            h = 0;\n                            i = (b + 16) | 0;\n                            b = 0;\n                            b: while (1) {\n                                if (i >>> 0 >= j >>> 0) {\n                                    i = 18;\n                                    break;\n                                }\n                                a[k >> 0] = 0;\n                                a[f >> 0] = 0;\n                                Qp(i, d, e, e, 1, g);\n                                if (a[l >> 0] | 0) {\n                                    i = 18;\n                                    break;\n                                }\n                                do\n                                    if (a[f >> 0] | 0) {\n                                        if (!(a[k >> 0] | 0))\n                                            if (!(c[m >> 2] & 1)) {\n                                                i = 19;\n                                                break b;\n                                            }\n                                            else {\n                                                b = 1;\n                                                break;\n                                            }\n                                        if ((c[n >> 2] | 0) == 1) {\n                                            h = 1;\n                                            i = 19;\n                                            break b;\n                                        }\n                                        if (!(c[m >> 2] & 2)) {\n                                            h = 1;\n                                            i = 19;\n                                            break b;\n                                        }\n                                        else {\n                                            h = 1;\n                                            b = 1;\n                                        }\n                                    }\n                                while (0);\n                                i = (i + 8) | 0;\n                            }\n                            if ((i | 0) == 18)\n                                if (b)\n                                    i = 19;\n                                else\n                                    b = 4;\n                            if ((i | 0) == 19)\n                                b = 3;\n                            c[o >> 2] = b;\n                            if (h & 1)\n                                break;\n                        }\n                        c[p >> 2] = e;\n                        e = (d + 40) | 0;\n                        c[e >> 2] = (c[e >> 2] | 0) + 1;\n                        if ((c[(d + 36) >> 2] | 0) != 1)\n                            break;\n                        if ((c[(d + 24) >> 2] | 0) != 2)\n                            break;\n                        a[(d + 54) >> 0] = 1;\n                        break;\n                    }\n                    if ((f | 0) == 1)\n                        c[(d + 32) >> 2] = 1;\n                }\n                else\n                    cp(0, d, e, f);\n            while (0);\n            return;\n        }\n        function Op(b, d, e, f) {\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            f = f | 0;\n            var g = 0, h = 0;\n            a: do\n                if (!(ap(b, c[(d + 8) >> 2] | 0, 0) | 0)) {\n                    h = c[(b + 12) >> 2] | 0;\n                    g = (b + 16 + (h << 3)) | 0;\n                    Pp((b + 16) | 0, d, e, f);\n                    if ((h | 0) > 1) {\n                        h = (d + 54) | 0;\n                        b = (b + 24) | 0;\n                        do {\n                            Pp(b, d, e, f);\n                            if (a[h >> 0] | 0)\n                                break a;\n                            b = (b + 8) | 0;\n                        } while (b >>> 0 < g >>> 0);\n                    }\n                }\n                else\n                    bp(0, d, e, f);\n            while (0);\n            return;\n        }\n        function Pp(a, b, d, e) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            var f = 0, g = 0;\n            g = c[(a + 4) >> 2] | 0;\n            if (d) {\n                f = g >> 8;\n                if (g & 1)\n                    f = c[((c[d >> 2] | 0) + f) >> 2] | 0;\n            }\n            else\n                f = 0;\n            a = c[a >> 2] | 0;\n            fa[c[((c[a >> 2] | 0) + 28) >> 2] & 7](a, b, (d + f) | 0, ((g & 2) | 0) == 0 ? 2 : e);\n            return;\n        }\n        function Qp(a, b, d, e, f, g) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            f = f | 0;\n            g = g | 0;\n            var h = 0, i = 0;\n            i = c[(a + 4) >> 2] | 0;\n            h = i >> 8;\n            if (i & 1)\n                h = c[((c[e >> 2] | 0) + h) >> 2] | 0;\n            a = c[a >> 2] | 0;\n            ha[c[((c[a >> 2] | 0) + 20) >> 2] & 3](a, b, d, (e + h) | 0, ((i & 2) | 0) == 0 ? 2 : f, g);\n            return;\n        }\n        function Rp(a, b, d, e, f) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            f = f | 0;\n            var g = 0, h = 0;\n            h = c[(a + 4) >> 2] | 0;\n            g = h >> 8;\n            if (h & 1)\n                g = c[((c[d >> 2] | 0) + g) >> 2] | 0;\n            a = c[a >> 2] | 0;\n            ga[c[((c[a >> 2] | 0) + 24) >> 2] & 3](a, b, (d + g) | 0, ((h & 2) | 0) == 0 ? 2 : e, f);\n            return;\n        }\n        function Sp(a) {\n            a = a | 0;\n            c[a >> 2] = 5896;\n            return;\n        }\n        function Tp(a) {\n            a = a | 0;\n            var b = 0, c = 0;\n            b = V;\n            V = (V + 16) | 0;\n            c = b;\n            Up(c, a);\n            a = Vp(c) | 0;\n            V = b;\n            return a | 0;\n        }\n        function Up(a, b) {\n            a = a | 0;\n            b = b | 0;\n            _p(a, b);\n            return;\n        }\n        function Vp(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            b = V;\n            V = (V + 16) | 0;\n            d = b;\n            Wp(d, c[(a + 4) >> 2] | 0);\n            if (!(((Xp(d) | 0) << 24) >> 24))\n                a = Zp(Yp(a) | 0) | 0;\n            else\n                a = 0;\n            V = b;\n            return a | 0;\n        }\n        function Wp(a, b) {\n            a = a | 0;\n            b = b | 0;\n            c[a >> 2] = b;\n            return;\n        }\n        function Xp(b) {\n            b = b | 0;\n            return a[c[b >> 2] >> 0] | 0;\n        }\n        function Yp(a) {\n            a = a | 0;\n            return a | 0;\n        }\n        function Zp(b) {\n            b = b | 0;\n            var d = 0, e = 0, f = 0, g = 0;\n            g = V;\n            V = (V + 16) | 0;\n            f = g;\n            b = c[(b + 8) >> 2] | 0;\n            d = a[b >> 0] | 0;\n            do\n                if ((d << 24) >> 24 != 1)\n                    if (!(d & 2)) {\n                        a[b >> 0] = 2;\n                        e = 1;\n                        break;\n                    }\n                    else\n                        To(20985, f);\n                else\n                    e = 0;\n            while (0);\n            V = g;\n            return e | 0;\n        }\n        function _p(a, b) {\n            a = a | 0;\n            b = b | 0;\n            c[a >> 2] = b;\n            c[(a + 4) >> 2] = b;\n            c[(a + 8) >> 2] = b + 1;\n            c[(a + 12) >> 2] = 0;\n            return;\n        }\n        function $p(a) {\n            a = a | 0;\n            var b = 0, c = 0;\n            b = V;\n            V = (V + 16) | 0;\n            c = b;\n            Up(c, a);\n            aq(c);\n            V = b;\n            return;\n        }\n        function aq(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            b = V;\n            V = (V + 16) | 0;\n            d = b;\n            Wp(d, c[(a + 4) >> 2] | 0);\n            bq(d);\n            cq(Yp(a) | 0);\n            V = b;\n            return;\n        }\n        function bq(b) {\n            b = b | 0;\n            a[c[b >> 2] >> 0] = 1;\n            return;\n        }\n        function cq(b) {\n            b = b | 0;\n            a[c[(b + 8) >> 2] >> 0] = 1;\n            return;\n        }\n        function dq() {\n            return 0;\n        }\n        function eq(a) {\n            a = a | 0;\n            var b = 0, c = 0;\n            c = (a | 0) == 0 ? 1 : a;\n            while (1) {\n                b = dr(c) | 0;\n                if (b | 0) {\n                    a = 6;\n                    break;\n                }\n                a = dq() | 0;\n                if (!a) {\n                    a = 5;\n                    break;\n                }\n                ba[a & 3]();\n            }\n            if ((a | 0) == 5) {\n                c = v(4) | 0;\n                Sp(c);\n                x(c | 0, 3880, 121);\n            }\n            else if ((a | 0) == 6)\n                return b | 0;\n            return 0;\n        }\n        function fq(a) {\n            a = a | 0;\n            return eq(a) | 0;\n        }\n        function gq(a) {\n            a = a | 0;\n            jp(a);\n            return;\n        }\n        function hq(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0;\n            f = V;\n            V = (V + 16) | 0;\n            e = f;\n            c[e >> 2] = c[d >> 2];\n            a = aa[c[((c[a >> 2] | 0) + 16) >> 2] & 7](a, b, e) | 0;\n            if (a)\n                c[d >> 2] = c[e >> 2];\n            V = f;\n            return (a & 1) | 0;\n        }\n        function iq(a) {\n            a = a | 0;\n            if (!a)\n                a = 0;\n            else\n                a = ((ep(a, 3840, 3976, 0) | 0) != 0) & 1;\n            return a | 0;\n        }\n        function jq(a) {\n            a = a | 0;\n            return 0;\n        }\n        function kq() {\n            return ((lq() | 0) > 0) | 0;\n        }\n        function lq() {\n            return y() | 0;\n        }\n        function mq(a) {\n            a = a | 0;\n            return;\n        }\n        function nq(a) {\n            a = a | 0;\n            mq(a);\n            jp(a);\n            return;\n        }\n        function oq(a) {\n            a = a | 0;\n            return 21039;\n        }\n        function pq(a) {\n            a = a | 0;\n            return;\n        }\n        function qq(a) {\n            a = a | 0;\n            var b = 0, d = 0;\n            b = (a + 8) | 0;\n            if (!((c[b >> 2] | 0) != 0 ? ((d = c[b >> 2] | 0), (c[b >> 2] = d + -1), (d | 0) != 0) : 0))\n                ca[c[((c[a >> 2] | 0) + 16) >> 2] & 255](a);\n            return;\n        }\n        function rq(a) {\n            a = a | 0;\n            a = jq(a) | 0;\n            if (!a)\n                return;\n            else\n                br(a, 21145);\n        }\n        function sq(a) {\n            a = a | 0;\n            return;\n        }\n        function tq(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0;\n            e = fo(b) | 0;\n            d = eq((e + 13) | 0) | 0;\n            c[d >> 2] = e;\n            c[(d + 4) >> 2] = e;\n            c[(d + 8) >> 2] = 0;\n            d = uq(d) | 0;\n            ur(d | 0, b | 0, (e + 1) | 0) | 0;\n            c[a >> 2] = d;\n            return;\n        }\n        function uq(a) {\n            a = a | 0;\n            return (a + 12) | 0;\n        }\n        function vq(a, b) {\n            a = a | 0;\n            b = b | 0;\n            c[a >> 2] = 5916;\n            tq((a + 4) | 0, b);\n            return;\n        }\n        function wq(b, d) {\n            b = b | 0;\n            d = d | 0;\n            c[b >> 2] = 5936;\n            tq((b + 4) | 0, (a[(d + 11) >> 0] | 0) < 0 ? c[d >> 2] | 0 : d);\n            return;\n        }\n        function xq(a, b) {\n            a = a | 0;\n            b = b | 0;\n            c[a >> 2] = 5936;\n            tq((a + 4) | 0, b);\n            return;\n        }\n        function yq(a) {\n            a = a | 0;\n            a = v(8) | 0;\n            vq(a, 21163);\n            c[a >> 2] = 5956;\n            x(a | 0, 3928, 123);\n        }\n        function zq(a) {\n            a = a | 0;\n            a = v(8) | 0;\n            vq(a, 21163);\n            c[a >> 2] = 5976;\n            x(a | 0, 3944, 123);\n        }\n        function Aq(b, d, e) {\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            var f = 0, g = 0, h = 0, i = 0;\n            g = V;\n            V = (V + 16) | 0;\n            f = g;\n            if (e >>> 0 > 4294967279)\n                yq(b);\n            if (e >>> 0 < 11)\n                a[(b + 11) >> 0] = e;\n            else {\n                i = (e + 16) & -16;\n                h = eq(i) | 0;\n                c[b >> 2] = h;\n                c[(b + 8) >> 2] = i | -2147483648;\n                c[(b + 4) >> 2] = e;\n                b = h;\n            }\n            Bq(b, d, e) | 0;\n            a[f >> 0] = 0;\n            nb((b + e) | 0, f);\n            V = g;\n            return;\n        }\n        function Bq(a, b, c) {\n            a = a | 0;\n            b = b | 0;\n            c = c | 0;\n            if (c | 0)\n                ur(a | 0, b | 0, c | 0) | 0;\n            return a | 0;\n        }\n        function Cq(b) {\n            b = b | 0;\n            if ((a[(b + 11) >> 0] | 0) < 0)\n                Da(c[b >> 2] | 0, c[(b + 8) >> 2] & 2147483647);\n            return;\n        }\n        function Dq(b, d, e, f, g, h, i, j) {\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            f = f | 0;\n            g = g | 0;\n            h = h | 0;\n            i = i | 0;\n            j = j | 0;\n            var k = 0, l = 0, m = 0, n = 0, o = 0;\n            o = V;\n            V = (V + 16) | 0;\n            n = o;\n            if (((-18 - d) | 0) >>> 0 < e >>> 0)\n                yq(b);\n            if ((a[(b + 11) >> 0] | 0) < 0)\n                m = c[b >> 2] | 0;\n            else\n                m = b;\n            if (d >>> 0 < 2147483623) {\n                k = (e + d) | 0;\n                l = d << 1;\n                k = k >>> 0 < l >>> 0 ? l : k;\n                k = k >>> 0 < 11 ? 11 : (k + 16) & -16;\n            }\n            else\n                k = -17;\n            l = eq(k) | 0;\n            if (g | 0)\n                Bq(l, m, g) | 0;\n            if (i | 0)\n                Bq((l + g) | 0, j, i) | 0;\n            f = (f - h) | 0;\n            e = (f - g) | 0;\n            if (e | 0)\n                Bq((l + g + i) | 0, (m + g + h) | 0, e) | 0;\n            e = (d + 1) | 0;\n            if ((e | 0) != 11)\n                Da(m, e);\n            c[b >> 2] = l;\n            c[(b + 8) >> 2] = k | -2147483648;\n            i = (f + i) | 0;\n            c[(b + 4) >> 2] = i;\n            a[n >> 0] = 0;\n            nb((l + i) | 0, n);\n            V = o;\n            return;\n        }\n        function Eq(b, d, e) {\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            var f = 0, g = 0, h = 0, i = 0, j = 0, k = 0;\n            k = V;\n            V = (V + 16) | 0;\n            i = k;\n            j = (b + 11) | 0;\n            f = a[j >> 0] | 0;\n            h = (f << 24) >> 24 < 0;\n            if (h) {\n                g = ((c[(b + 8) >> 2] & 2147483647) + -1) | 0;\n                f = c[(b + 4) >> 2] | 0;\n            }\n            else {\n                g = 10;\n                f = f & 255;\n            }\n            if (((g - f) | 0) >>> 0 >= e >>> 0) {\n                if (e | 0) {\n                    if (h)\n                        g = c[b >> 2] | 0;\n                    else\n                        g = b;\n                    Bq((g + f) | 0, d, e) | 0;\n                    f = (f + e) | 0;\n                    if ((a[j >> 0] | 0) < 0)\n                        c[(b + 4) >> 2] = f;\n                    else\n                        a[j >> 0] = f;\n                    a[i >> 0] = 0;\n                    nb((g + f) | 0, i);\n                }\n            }\n            else\n                Dq(b, g, (f + e - g) | 0, f, f, 0, e, d);\n            V = k;\n            return b | 0;\n        }\n        function Fq(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return Eq(a, b, lb(b) | 0) | 0;\n        }\n        function Gq(a, b, c) {\n            a = a | 0;\n            b = b | 0;\n            c = c | 0;\n            if (!c)\n                a = 0;\n            else\n                a = Fo(a, b, c) | 0;\n            return a | 0;\n        }\n        function Hq(b, d, e, f, g) {\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            f = f | 0;\n            g = g | 0;\n            var h = 0, i = 0;\n            h = a[(b + 11) >> 0] | 0;\n            i = (h << 24) >> 24 < 0;\n            if (i)\n                h = c[(b + 4) >> 2] | 0;\n            else\n                h = h & 255;\n            if (((g | 0) == -1) | (h >>> 0 < d >>> 0))\n                zq(b);\n            h = (h - d) | 0;\n            e = h >>> 0 < e >>> 0 ? h : e;\n            if (i)\n                b = c[b >> 2] | 0;\n            h = e >>> 0 > g >>> 0;\n            b = Gq((b + d) | 0, f, h ? g : e) | 0;\n            if (!b)\n                return (e >>> 0 < g >>> 0 ? -1 : h & 1) | 0;\n            else\n                return b | 0;\n            return 0;\n        }\n        function Iq(a) {\n            a = a | 0;\n            return;\n        }\n        function Jq(a) {\n            a = a | 0;\n            jp(a);\n            return;\n        }\n        function Kq(a) {\n            a = a | 0;\n            return 21228;\n        }\n        function Lq(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            c[a >> 2] = d;\n            c[(a + 4) >> 2] = b;\n            return;\n        }\n        function Mq(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0;\n            f = V;\n            V = (V + 16) | 0;\n            e = f;\n            ea[c[((c[a >> 2] | 0) + 12) >> 2] & 15](e, a, b);\n            if ((c[(e + 4) >> 2] | 0) == (c[(d + 4) >> 2] | 0))\n                a = (c[e >> 2] | 0) == (c[d >> 2] | 0);\n            else\n                a = 0;\n            V = f;\n            return a | 0;\n        }\n        function Nq(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            return ((c[b >> 2] | 0) == (d | 0) ? (c[(b + 4) >> 2] | 0) == (a | 0) : 0) | 0;\n        }\n        function Oq(a, b, c) {\n            a = a | 0;\n            b = b | 0;\n            c = c | 0;\n            if ((c | 0) > 256)\n                Aq(a, 21176, lb(21176) | 0);\n            else\n                Pq(a, 0, c);\n            return;\n        }\n        function Pq(a, b, c) {\n            a = a | 0;\n            b = b | 0;\n            c = c | 0;\n            Qq(a, c);\n            return;\n        }\n        function Qq(b, d) {\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0, g = 0, h = 0, i = 0;\n            i = V;\n            V = (V + 1040) | 0;\n            g = (i + 1024) | 0;\n            e = i;\n            h = c[(ao() | 0) >> 2] | 0;\n            f = Rq(Oo(d, e, 1024) | 0, e) | 0;\n            if (!(a[f >> 0] | 0)) {\n                c[g >> 2] = d;\n                Go(e, 1024, 21211, g) | 0;\n            }\n            else\n                e = f;\n            c[(ao() | 0) >> 2] = h;\n            Aq(b, e, lb(e) | 0);\n            V = i;\n            return;\n        }\n        function Rq(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0;\n            switch (a | 0) {\n                case 0: {\n                    d = b;\n                    break;\n                }\n                case -1: {\n                    a = c[(ao() | 0) >> 2] | 0;\n                    e = 3;\n                    break;\n                }\n                default:\n                    e = 3;\n            }\n            if ((e | 0) == 3)\n                if ((a | 0) == 28)\n                    d = 22145;\n                else\n                    P();\n            return d | 0;\n        }\n        function Sq(a) {\n            a = a | 0;\n            jp(a);\n            return;\n        }\n        function Tq(a) {\n            a = a | 0;\n            return 21353;\n        }\n        function Uq(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            if ((d | 0) > 256) {\n                Wq() | 0;\n                b = 6180;\n            }\n            else {\n                Xq() | 0;\n                b = 6176;\n            }\n            c[a >> 2] = d;\n            c[(a + 4) >> 2] = b;\n            return;\n        }\n        function Vq(a, b, c) {\n            a = a | 0;\n            b = b | 0;\n            c = c | 0;\n            if ((c | 0) > 256)\n                Aq(a, 21319, lb(21319) | 0);\n            else\n                Pq(a, 0, c);\n            return;\n        }\n        function Wq() {\n            if ((a[21488] | 0) == 0 ? Tp(21488) | 0 : 0)\n                $p(21488);\n            return 6180;\n        }\n        function Xq() {\n            if ((a[21480] | 0) == 0 ? Tp(21480) | 0 : 0)\n                $p(21480);\n            return 6176;\n        }\n        function Yq(a) {\n            a = a | 0;\n            yp(a);\n            return;\n        }\n        function Zq(a) {\n            a = a | 0;\n            Yq(a);\n            jp(a);\n            return;\n        }\n        function _q(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0;\n            d = c[(b + 4) >> 2] | 0;\n            ea[c[((c[d >> 2] | 0) + 24) >> 2] & 15](a, d, c[b >> 2] | 0);\n            return;\n        }\n        function $q(b, d, e) {\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            var f = 0, g = 0, h = 0;\n            h = V;\n            V = (V + 16) | 0;\n            g = h;\n            if (c[d >> 2] | 0) {\n                f = a[(e + 11) >> 0] | 0;\n                if ((f << 24) >> 24 < 0)\n                    f = c[(e + 4) >> 2] | 0;\n                else\n                    f = f & 255;\n                if (f | 0)\n                    Fq(e, 21417) | 0;\n                _q(g, d);\n                d = a[(g + 11) >> 0] | 0;\n                f = (d << 24) >> 24 < 0;\n                Eq(e, f ? c[g >> 2] | 0 : g, f ? c[(g + 4) >> 2] | 0 : d & 255) | 0;\n                Cq(g);\n            }\n            c[b >> 2] = c[e >> 2];\n            c[(b + 4) >> 2] = c[(e + 4) >> 2];\n            c[(b + 8) >> 2] = c[(e + 8) >> 2];\n            f = 0;\n            while (1) {\n                if ((f | 0) == 3)\n                    break;\n                c[(e + (f << 2)) >> 2] = 0;\n                f = (f + 1) | 0;\n            }\n            V = h;\n            return;\n        }\n        function ar(a, b, d) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            var e = 0, f = 0, g = 0;\n            e = V;\n            V = (V + 32) | 0;\n            g = (e + 12) | 0;\n            f = e;\n            Aq(f, d, lb(d) | 0);\n            $q(g, b, f);\n            wq(a, g);\n            Cq(g);\n            Cq(f);\n            c[a >> 2] = 6192;\n            f = b;\n            b = c[(f + 4) >> 2] | 0;\n            d = (a + 8) | 0;\n            c[d >> 2] = c[f >> 2];\n            c[(d + 4) >> 2] = b;\n            V = e;\n            return;\n        }\n        function br(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var d = 0, e = 0, f = 0;\n            f = V;\n            V = (V + 16) | 0;\n            e = (f + 8) | 0;\n            d = v(16) | 0;\n            Wq() | 0;\n            c[f >> 2] = a;\n            c[(f + 4) >> 2] = 6180;\n            c[e >> 2] = c[f >> 2];\n            c[(e + 4) >> 2] = c[(f + 4) >> 2];\n            ar(d, e, b);\n            x(d | 0, 4272, 136);\n        }\n        function cr(a) {\n            a = a | 0;\n            a = v(8) | 0;\n            vq(a, 21420);\n            c[a >> 2] = 5956;\n            x(a | 0, 3928, 123);\n        }\n        function dr(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0, p = 0, q = 0, r = 0, s = 0, t = 0, u = 0, v = 0, w = 0;\n            w = V;\n            V = (V + 16) | 0;\n            n = w;\n            do\n                if (a >>> 0 < 245) {\n                    k = a >>> 0 < 11 ? 16 : (a + 11) & -8;\n                    a = k >>> 3;\n                    m = c[5412] | 0;\n                    d = m >>> a;\n                    if ((d & 3) | 0) {\n                        b = (((d & 1) ^ 1) + a) | 0;\n                        a = (21688 + ((b << 1) << 2)) | 0;\n                        d = (a + 8) | 0;\n                        e = c[d >> 2] | 0;\n                        f = (e + 8) | 0;\n                        g = c[f >> 2] | 0;\n                        if ((g | 0) == (a | 0))\n                            c[5412] = m & ~(1 << b);\n                        else {\n                            c[(g + 12) >> 2] = a;\n                            c[d >> 2] = g;\n                        }\n                        v = b << 3;\n                        c[(e + 4) >> 2] = v | 3;\n                        v = (e + v + 4) | 0;\n                        c[v >> 2] = c[v >> 2] | 1;\n                        v = f;\n                        V = w;\n                        return v | 0;\n                    }\n                    l = c[5414] | 0;\n                    if (k >>> 0 > l >>> 0) {\n                        if (d | 0) {\n                            b = 2 << a;\n                            b = (d << a) & (b | (0 - b));\n                            b = ((b & (0 - b)) + -1) | 0;\n                            i = (b >>> 12) & 16;\n                            b = b >>> i;\n                            d = (b >>> 5) & 8;\n                            b = b >>> d;\n                            g = (b >>> 2) & 4;\n                            b = b >>> g;\n                            a = (b >>> 1) & 2;\n                            b = b >>> a;\n                            e = (b >>> 1) & 1;\n                            e = ((d | i | g | a | e) + (b >>> e)) | 0;\n                            b = (21688 + ((e << 1) << 2)) | 0;\n                            a = (b + 8) | 0;\n                            g = c[a >> 2] | 0;\n                            i = (g + 8) | 0;\n                            d = c[i >> 2] | 0;\n                            if ((d | 0) == (b | 0)) {\n                                a = m & ~(1 << e);\n                                c[5412] = a;\n                            }\n                            else {\n                                c[(d + 12) >> 2] = b;\n                                c[a >> 2] = d;\n                                a = m;\n                            }\n                            v = e << 3;\n                            h = (v - k) | 0;\n                            c[(g + 4) >> 2] = k | 3;\n                            f = (g + k) | 0;\n                            c[(f + 4) >> 2] = h | 1;\n                            c[(g + v) >> 2] = h;\n                            if (l | 0) {\n                                e = c[5417] | 0;\n                                b = l >>> 3;\n                                d = (21688 + ((b << 1) << 2)) | 0;\n                                b = 1 << b;\n                                if (!(a & b)) {\n                                    c[5412] = a | b;\n                                    b = d;\n                                    a = (d + 8) | 0;\n                                }\n                                else {\n                                    a = (d + 8) | 0;\n                                    b = c[a >> 2] | 0;\n                                }\n                                c[a >> 2] = e;\n                                c[(b + 12) >> 2] = e;\n                                c[(e + 8) >> 2] = b;\n                                c[(e + 12) >> 2] = d;\n                            }\n                            c[5414] = h;\n                            c[5417] = f;\n                            v = i;\n                            V = w;\n                            return v | 0;\n                        }\n                        g = c[5413] | 0;\n                        if (g) {\n                            d = ((g & (0 - g)) + -1) | 0;\n                            f = (d >>> 12) & 16;\n                            d = d >>> f;\n                            e = (d >>> 5) & 8;\n                            d = d >>> e;\n                            h = (d >>> 2) & 4;\n                            d = d >>> h;\n                            i = (d >>> 1) & 2;\n                            d = d >>> i;\n                            j = (d >>> 1) & 1;\n                            j = c[(21952 + (((e | f | h | i | j) + (d >>> j)) << 2)) >> 2] | 0;\n                            d = j;\n                            i = j;\n                            j = ((c[(j + 4) >> 2] & -8) - k) | 0;\n                            while (1) {\n                                a = c[(d + 16) >> 2] | 0;\n                                if (!a) {\n                                    a = c[(d + 20) >> 2] | 0;\n                                    if (!a)\n                                        break;\n                                }\n                                h = ((c[(a + 4) >> 2] & -8) - k) | 0;\n                                f = h >>> 0 < j >>> 0;\n                                d = a;\n                                i = f ? a : i;\n                                j = f ? h : j;\n                            }\n                            h = (i + k) | 0;\n                            if (h >>> 0 > i >>> 0) {\n                                f = c[(i + 24) >> 2] | 0;\n                                b = c[(i + 12) >> 2] | 0;\n                                do\n                                    if ((b | 0) == (i | 0)) {\n                                        a = (i + 20) | 0;\n                                        b = c[a >> 2] | 0;\n                                        if (!b) {\n                                            a = (i + 16) | 0;\n                                            b = c[a >> 2] | 0;\n                                            if (!b) {\n                                                d = 0;\n                                                break;\n                                            }\n                                        }\n                                        while (1) {\n                                            e = (b + 20) | 0;\n                                            d = c[e >> 2] | 0;\n                                            if (!d) {\n                                                e = (b + 16) | 0;\n                                                d = c[e >> 2] | 0;\n                                                if (!d)\n                                                    break;\n                                                else {\n                                                    b = d;\n                                                    a = e;\n                                                }\n                                            }\n                                            else {\n                                                b = d;\n                                                a = e;\n                                            }\n                                        }\n                                        c[a >> 2] = 0;\n                                        d = b;\n                                    }\n                                    else {\n                                        d = c[(i + 8) >> 2] | 0;\n                                        c[(d + 12) >> 2] = b;\n                                        c[(b + 8) >> 2] = d;\n                                        d = b;\n                                    }\n                                while (0);\n                                do\n                                    if (f | 0) {\n                                        b = c[(i + 28) >> 2] | 0;\n                                        a = (21952 + (b << 2)) | 0;\n                                        if ((i | 0) == (c[a >> 2] | 0)) {\n                                            c[a >> 2] = d;\n                                            if (!d) {\n                                                c[5413] = g & ~(1 << b);\n                                                break;\n                                            }\n                                        }\n                                        else {\n                                            v = (f + 16) | 0;\n                                            c[((c[v >> 2] | 0) == (i | 0) ? v : (f + 20) | 0) >> 2] = d;\n                                            if (!d)\n                                                break;\n                                        }\n                                        c[(d + 24) >> 2] = f;\n                                        b = c[(i + 16) >> 2] | 0;\n                                        if (b | 0) {\n                                            c[(d + 16) >> 2] = b;\n                                            c[(b + 24) >> 2] = d;\n                                        }\n                                        b = c[(i + 20) >> 2] | 0;\n                                        if (b | 0) {\n                                            c[(d + 20) >> 2] = b;\n                                            c[(b + 24) >> 2] = d;\n                                        }\n                                    }\n                                while (0);\n                                if (j >>> 0 < 16) {\n                                    v = (j + k) | 0;\n                                    c[(i + 4) >> 2] = v | 3;\n                                    v = (i + v + 4) | 0;\n                                    c[v >> 2] = c[v >> 2] | 1;\n                                }\n                                else {\n                                    c[(i + 4) >> 2] = k | 3;\n                                    c[(h + 4) >> 2] = j | 1;\n                                    c[(h + j) >> 2] = j;\n                                    if (l | 0) {\n                                        e = c[5417] | 0;\n                                        b = l >>> 3;\n                                        d = (21688 + ((b << 1) << 2)) | 0;\n                                        b = 1 << b;\n                                        if (!(b & m)) {\n                                            c[5412] = b | m;\n                                            b = d;\n                                            a = (d + 8) | 0;\n                                        }\n                                        else {\n                                            a = (d + 8) | 0;\n                                            b = c[a >> 2] | 0;\n                                        }\n                                        c[a >> 2] = e;\n                                        c[(b + 12) >> 2] = e;\n                                        c[(e + 8) >> 2] = b;\n                                        c[(e + 12) >> 2] = d;\n                                    }\n                                    c[5414] = j;\n                                    c[5417] = h;\n                                }\n                                v = (i + 8) | 0;\n                                V = w;\n                                return v | 0;\n                            }\n                            else\n                                m = k;\n                        }\n                        else\n                            m = k;\n                    }\n                    else\n                        m = k;\n                }\n                else if (a >>> 0 <= 4294967231) {\n                    a = (a + 11) | 0;\n                    k = a & -8;\n                    e = c[5413] | 0;\n                    if (e) {\n                        f = (0 - k) | 0;\n                        a = a >>> 8;\n                        if (a)\n                            if (k >>> 0 > 16777215)\n                                j = 31;\n                            else {\n                                m = (((a + 1048320) | 0) >>> 16) & 8;\n                                q = a << m;\n                                i = (((q + 520192) | 0) >>> 16) & 4;\n                                q = q << i;\n                                j = (((q + 245760) | 0) >>> 16) & 2;\n                                j = (14 - (i | m | j) + ((q << j) >>> 15)) | 0;\n                                j = ((k >>> ((j + 7) | 0)) & 1) | (j << 1);\n                            }\n                        else\n                            j = 0;\n                        d = c[(21952 + (j << 2)) >> 2] | 0;\n                        a: do\n                            if (!d) {\n                                d = 0;\n                                a = 0;\n                                q = 61;\n                            }\n                            else {\n                                a = 0;\n                                i = k << ((j | 0) == 31 ? 0 : (25 - (j >>> 1)) | 0);\n                                g = 0;\n                                while (1) {\n                                    h = ((c[(d + 4) >> 2] & -8) - k) | 0;\n                                    if (h >>> 0 < f >>> 0)\n                                        if (!h) {\n                                            a = d;\n                                            f = 0;\n                                            q = 65;\n                                            break a;\n                                        }\n                                        else {\n                                            a = d;\n                                            f = h;\n                                        }\n                                    q = c[(d + 20) >> 2] | 0;\n                                    d = c[(d + 16 + ((i >>> 31) << 2)) >> 2] | 0;\n                                    g = ((q | 0) == 0) | ((q | 0) == (d | 0)) ? g : q;\n                                    if (!d) {\n                                        d = g;\n                                        q = 61;\n                                        break;\n                                    }\n                                    else\n                                        i = i << 1;\n                                }\n                            }\n                        while (0);\n                        if ((q | 0) == 61) {\n                            if (((d | 0) == 0) & ((a | 0) == 0)) {\n                                a = 2 << j;\n                                a = (a | (0 - a)) & e;\n                                if (!a) {\n                                    m = k;\n                                    break;\n                                }\n                                m = ((a & (0 - a)) + -1) | 0;\n                                h = (m >>> 12) & 16;\n                                m = m >>> h;\n                                g = (m >>> 5) & 8;\n                                m = m >>> g;\n                                i = (m >>> 2) & 4;\n                                m = m >>> i;\n                                j = (m >>> 1) & 2;\n                                m = m >>> j;\n                                d = (m >>> 1) & 1;\n                                a = 0;\n                                d = c[(21952 + (((g | h | i | j | d) + (m >>> d)) << 2)) >> 2] | 0;\n                            }\n                            if (!d) {\n                                i = a;\n                                h = f;\n                            }\n                            else\n                                q = 65;\n                        }\n                        if ((q | 0) == 65) {\n                            g = d;\n                            while (1) {\n                                m = ((c[(g + 4) >> 2] & -8) - k) | 0;\n                                d = m >>> 0 < f >>> 0;\n                                f = d ? m : f;\n                                a = d ? g : a;\n                                d = c[(g + 16) >> 2] | 0;\n                                if (!d)\n                                    d = c[(g + 20) >> 2] | 0;\n                                if (!d) {\n                                    i = a;\n                                    h = f;\n                                    break;\n                                }\n                                else\n                                    g = d;\n                            }\n                        }\n                        if (((i | 0) != 0 ? h >>> 0 < (((c[5414] | 0) - k) | 0) >>> 0 : 0)\n                            ? ((l = (i + k) | 0), l >>> 0 > i >>> 0)\n                            : 0) {\n                            g = c[(i + 24) >> 2] | 0;\n                            b = c[(i + 12) >> 2] | 0;\n                            do\n                                if ((b | 0) == (i | 0)) {\n                                    a = (i + 20) | 0;\n                                    b = c[a >> 2] | 0;\n                                    if (!b) {\n                                        a = (i + 16) | 0;\n                                        b = c[a >> 2] | 0;\n                                        if (!b) {\n                                            b = 0;\n                                            break;\n                                        }\n                                    }\n                                    while (1) {\n                                        f = (b + 20) | 0;\n                                        d = c[f >> 2] | 0;\n                                        if (!d) {\n                                            f = (b + 16) | 0;\n                                            d = c[f >> 2] | 0;\n                                            if (!d)\n                                                break;\n                                            else {\n                                                b = d;\n                                                a = f;\n                                            }\n                                        }\n                                        else {\n                                            b = d;\n                                            a = f;\n                                        }\n                                    }\n                                    c[a >> 2] = 0;\n                                }\n                                else {\n                                    v = c[(i + 8) >> 2] | 0;\n                                    c[(v + 12) >> 2] = b;\n                                    c[(b + 8) >> 2] = v;\n                                }\n                            while (0);\n                            do\n                                if (g) {\n                                    a = c[(i + 28) >> 2] | 0;\n                                    d = (21952 + (a << 2)) | 0;\n                                    if ((i | 0) == (c[d >> 2] | 0)) {\n                                        c[d >> 2] = b;\n                                        if (!b) {\n                                            e = e & ~(1 << a);\n                                            c[5413] = e;\n                                            break;\n                                        }\n                                    }\n                                    else {\n                                        v = (g + 16) | 0;\n                                        c[((c[v >> 2] | 0) == (i | 0) ? v : (g + 20) | 0) >> 2] = b;\n                                        if (!b)\n                                            break;\n                                    }\n                                    c[(b + 24) >> 2] = g;\n                                    a = c[(i + 16) >> 2] | 0;\n                                    if (a | 0) {\n                                        c[(b + 16) >> 2] = a;\n                                        c[(a + 24) >> 2] = b;\n                                    }\n                                    a = c[(i + 20) >> 2] | 0;\n                                    if (a) {\n                                        c[(b + 20) >> 2] = a;\n                                        c[(a + 24) >> 2] = b;\n                                    }\n                                }\n                            while (0);\n                            b: do\n                                if (h >>> 0 < 16) {\n                                    v = (h + k) | 0;\n                                    c[(i + 4) >> 2] = v | 3;\n                                    v = (i + v + 4) | 0;\n                                    c[v >> 2] = c[v >> 2] | 1;\n                                }\n                                else {\n                                    c[(i + 4) >> 2] = k | 3;\n                                    c[(l + 4) >> 2] = h | 1;\n                                    c[(l + h) >> 2] = h;\n                                    b = h >>> 3;\n                                    if (h >>> 0 < 256) {\n                                        d = (21688 + ((b << 1) << 2)) | 0;\n                                        a = c[5412] | 0;\n                                        b = 1 << b;\n                                        if (!(a & b)) {\n                                            c[5412] = a | b;\n                                            b = d;\n                                            a = (d + 8) | 0;\n                                        }\n                                        else {\n                                            a = (d + 8) | 0;\n                                            b = c[a >> 2] | 0;\n                                        }\n                                        c[a >> 2] = l;\n                                        c[(b + 12) >> 2] = l;\n                                        c[(l + 8) >> 2] = b;\n                                        c[(l + 12) >> 2] = d;\n                                        break;\n                                    }\n                                    b = h >>> 8;\n                                    if (b)\n                                        if (h >>> 0 > 16777215)\n                                            d = 31;\n                                        else {\n                                            u = (((b + 1048320) | 0) >>> 16) & 8;\n                                            v = b << u;\n                                            t = (((v + 520192) | 0) >>> 16) & 4;\n                                            v = v << t;\n                                            d = (((v + 245760) | 0) >>> 16) & 2;\n                                            d = (14 - (t | u | d) + ((v << d) >>> 15)) | 0;\n                                            d = ((h >>> ((d + 7) | 0)) & 1) | (d << 1);\n                                        }\n                                    else\n                                        d = 0;\n                                    b = (21952 + (d << 2)) | 0;\n                                    c[(l + 28) >> 2] = d;\n                                    a = (l + 16) | 0;\n                                    c[(a + 4) >> 2] = 0;\n                                    c[a >> 2] = 0;\n                                    a = 1 << d;\n                                    if (!(e & a)) {\n                                        c[5413] = e | a;\n                                        c[b >> 2] = l;\n                                        c[(l + 24) >> 2] = b;\n                                        c[(l + 12) >> 2] = l;\n                                        c[(l + 8) >> 2] = l;\n                                        break;\n                                    }\n                                    b = c[b >> 2] | 0;\n                                    c: do\n                                        if (((c[(b + 4) >> 2] & -8) | 0) != (h | 0)) {\n                                            e = h << ((d | 0) == 31 ? 0 : (25 - (d >>> 1)) | 0);\n                                            while (1) {\n                                                d = (b + 16 + ((e >>> 31) << 2)) | 0;\n                                                a = c[d >> 2] | 0;\n                                                if (!a)\n                                                    break;\n                                                if (((c[(a + 4) >> 2] & -8) | 0) == (h | 0)) {\n                                                    b = a;\n                                                    break c;\n                                                }\n                                                else {\n                                                    e = e << 1;\n                                                    b = a;\n                                                }\n                                            }\n                                            c[d >> 2] = l;\n                                            c[(l + 24) >> 2] = b;\n                                            c[(l + 12) >> 2] = l;\n                                            c[(l + 8) >> 2] = l;\n                                            break b;\n                                        }\n                                    while (0);\n                                    u = (b + 8) | 0;\n                                    v = c[u >> 2] | 0;\n                                    c[(v + 12) >> 2] = l;\n                                    c[u >> 2] = l;\n                                    c[(l + 8) >> 2] = v;\n                                    c[(l + 12) >> 2] = b;\n                                    c[(l + 24) >> 2] = 0;\n                                }\n                            while (0);\n                            v = (i + 8) | 0;\n                            V = w;\n                            return v | 0;\n                        }\n                        else\n                            m = k;\n                    }\n                    else\n                        m = k;\n                }\n                else\n                    m = -1;\n            while (0);\n            d = c[5414] | 0;\n            if (d >>> 0 >= m >>> 0) {\n                b = (d - m) | 0;\n                a = c[5417] | 0;\n                if (b >>> 0 > 15) {\n                    v = (a + m) | 0;\n                    c[5417] = v;\n                    c[5414] = b;\n                    c[(v + 4) >> 2] = b | 1;\n                    c[(a + d) >> 2] = b;\n                    c[(a + 4) >> 2] = m | 3;\n                }\n                else {\n                    c[5414] = 0;\n                    c[5417] = 0;\n                    c[(a + 4) >> 2] = d | 3;\n                    v = (a + d + 4) | 0;\n                    c[v >> 2] = c[v >> 2] | 1;\n                }\n                v = (a + 8) | 0;\n                V = w;\n                return v | 0;\n            }\n            h = c[5415] | 0;\n            if (h >>> 0 > m >>> 0) {\n                t = (h - m) | 0;\n                c[5415] = t;\n                v = c[5418] | 0;\n                u = (v + m) | 0;\n                c[5418] = u;\n                c[(u + 4) >> 2] = t | 1;\n                c[(v + 4) >> 2] = m | 3;\n                v = (v + 8) | 0;\n                V = w;\n                return v | 0;\n            }\n            if (!(c[5530] | 0)) {\n                c[5532] = 4096;\n                c[5531] = 4096;\n                c[5533] = -1;\n                c[5534] = -1;\n                c[5535] = 0;\n                c[5523] = 0;\n                c[5530] = (n & -16) ^ 1431655768;\n                a = 4096;\n            }\n            else\n                a = c[5532] | 0;\n            i = (m + 48) | 0;\n            j = (m + 47) | 0;\n            g = (a + j) | 0;\n            f = (0 - a) | 0;\n            k = g & f;\n            if (k >>> 0 <= m >>> 0) {\n                v = 0;\n                V = w;\n                return v | 0;\n            }\n            a = c[5522] | 0;\n            if (a | 0\n                ? ((l = c[5520] | 0), (n = (l + k) | 0), (n >>> 0 <= l >>> 0) | (n >>> 0 > a >>> 0))\n                : 0) {\n                v = 0;\n                V = w;\n                return v | 0;\n            }\n            d: do\n                if (!(c[5523] & 4)) {\n                    d = c[5418] | 0;\n                    e: do\n                        if (d) {\n                            e = 22096;\n                            while (1) {\n                                n = c[e >> 2] | 0;\n                                if (n >>> 0 <= d >>> 0 ? ((n + (c[(e + 4) >> 2] | 0)) | 0) >>> 0 > d >>> 0 : 0)\n                                    break;\n                                a = c[(e + 8) >> 2] | 0;\n                                if (!a) {\n                                    q = 128;\n                                    break e;\n                                }\n                                else\n                                    e = a;\n                            }\n                            b = (g - h) & f;\n                            if (b >>> 0 < 2147483647) {\n                                a = fr(b) | 0;\n                                if ((a | 0) == (((c[e >> 2] | 0) + (c[(e + 4) >> 2] | 0)) | 0)) {\n                                    if ((a | 0) != (-1 | 0)) {\n                                        h = b;\n                                        g = a;\n                                        q = 145;\n                                        break d;\n                                    }\n                                }\n                                else {\n                                    e = a;\n                                    q = 136;\n                                }\n                            }\n                            else\n                                b = 0;\n                        }\n                        else\n                            q = 128;\n                    while (0);\n                    do\n                        if ((q | 0) == 128) {\n                            d = fr(0) | 0;\n                            if ((d | 0) != (-1 | 0)\n                                ? ((b = d),\n                                    (o = c[5531] | 0),\n                                    (p = (o + -1) | 0),\n                                    (b = ((((p & b) | 0) == 0 ? 0 : (((p + b) & (0 - o)) - b) | 0) + k) | 0),\n                                    (o = c[5520] | 0),\n                                    (p = (b + o) | 0),\n                                    (b >>> 0 > m >>> 0) & (b >>> 0 < 2147483647))\n                                : 0) {\n                                n = c[5522] | 0;\n                                if (n | 0 ? (p >>> 0 <= o >>> 0) | (p >>> 0 > n >>> 0) : 0) {\n                                    b = 0;\n                                    break;\n                                }\n                                a = fr(b) | 0;\n                                if ((a | 0) == (d | 0)) {\n                                    h = b;\n                                    g = d;\n                                    q = 145;\n                                    break d;\n                                }\n                                else {\n                                    e = a;\n                                    q = 136;\n                                }\n                            }\n                            else\n                                b = 0;\n                        }\n                    while (0);\n                    do\n                        if ((q | 0) == 136) {\n                            d = (0 - b) | 0;\n                            if (!((i >>> 0 > b >>> 0) & ((b >>> 0 < 2147483647) & ((e | 0) != (-1 | 0)))))\n                                if ((e | 0) == (-1 | 0)) {\n                                    b = 0;\n                                    break;\n                                }\n                                else {\n                                    h = b;\n                                    g = e;\n                                    q = 145;\n                                    break d;\n                                }\n                            a = c[5532] | 0;\n                            a = (j - b + a) & (0 - a);\n                            if (a >>> 0 >= 2147483647) {\n                                h = b;\n                                g = e;\n                                q = 145;\n                                break d;\n                            }\n                            if ((fr(a) | 0) == (-1 | 0)) {\n                                fr(d) | 0;\n                                b = 0;\n                                break;\n                            }\n                            else {\n                                h = (a + b) | 0;\n                                g = e;\n                                q = 145;\n                                break d;\n                            }\n                        }\n                    while (0);\n                    c[5523] = c[5523] | 4;\n                    q = 143;\n                }\n                else {\n                    b = 0;\n                    q = 143;\n                }\n            while (0);\n            if (((q | 0) == 143 ? k >>> 0 < 2147483647 : 0)\n                ? ((t = fr(k) | 0),\n                    (p = fr(0) | 0),\n                    (r = (p - t) | 0),\n                    (s = r >>> 0 > ((m + 40) | 0) >>> 0),\n                    !(((t | 0) == (-1 | 0)) |\n                        (s ^ 1) |\n                        (((t >>> 0 < p >>> 0) & (((t | 0) != (-1 | 0)) & ((p | 0) != (-1 | 0)))) ^ 1)))\n                : 0) {\n                h = s ? r : b;\n                g = t;\n                q = 145;\n            }\n            if ((q | 0) == 145) {\n                b = ((c[5520] | 0) + h) | 0;\n                c[5520] = b;\n                if (b >>> 0 > (c[5521] | 0) >>> 0)\n                    c[5521] = b;\n                j = c[5418] | 0;\n                f: do\n                    if (j) {\n                        b = 22096;\n                        while (1) {\n                            a = c[b >> 2] | 0;\n                            d = c[(b + 4) >> 2] | 0;\n                            if ((g | 0) == ((a + d) | 0)) {\n                                q = 154;\n                                break;\n                            }\n                            e = c[(b + 8) >> 2] | 0;\n                            if (!e)\n                                break;\n                            else\n                                b = e;\n                        }\n                        if (((q | 0) == 154 ? ((u = (b + 4) | 0), ((c[(b + 12) >> 2] & 8) | 0) == 0) : 0)\n                            ? (g >>> 0 > j >>> 0) & (a >>> 0 <= j >>> 0)\n                            : 0) {\n                            c[u >> 2] = d + h;\n                            v = ((c[5415] | 0) + h) | 0;\n                            t = (j + 8) | 0;\n                            t = ((t & 7) | 0) == 0 ? 0 : (0 - t) & 7;\n                            u = (j + t) | 0;\n                            t = (v - t) | 0;\n                            c[5418] = u;\n                            c[5415] = t;\n                            c[(u + 4) >> 2] = t | 1;\n                            c[(j + v + 4) >> 2] = 40;\n                            c[5419] = c[5534];\n                            break;\n                        }\n                        if (g >>> 0 < (c[5416] | 0) >>> 0)\n                            c[5416] = g;\n                        d = (g + h) | 0;\n                        b = 22096;\n                        while (1) {\n                            if ((c[b >> 2] | 0) == (d | 0)) {\n                                q = 162;\n                                break;\n                            }\n                            a = c[(b + 8) >> 2] | 0;\n                            if (!a)\n                                break;\n                            else\n                                b = a;\n                        }\n                        if ((q | 0) == 162 ? ((c[(b + 12) >> 2] & 8) | 0) == 0 : 0) {\n                            c[b >> 2] = g;\n                            l = (b + 4) | 0;\n                            c[l >> 2] = (c[l >> 2] | 0) + h;\n                            l = (g + 8) | 0;\n                            l = (g + (((l & 7) | 0) == 0 ? 0 : (0 - l) & 7)) | 0;\n                            b = (d + 8) | 0;\n                            b = (d + (((b & 7) | 0) == 0 ? 0 : (0 - b) & 7)) | 0;\n                            k = (l + m) | 0;\n                            i = (b - l - m) | 0;\n                            c[(l + 4) >> 2] = m | 3;\n                            g: do\n                                if ((j | 0) == (b | 0)) {\n                                    v = ((c[5415] | 0) + i) | 0;\n                                    c[5415] = v;\n                                    c[5418] = k;\n                                    c[(k + 4) >> 2] = v | 1;\n                                }\n                                else {\n                                    if ((c[5417] | 0) == (b | 0)) {\n                                        v = ((c[5414] | 0) + i) | 0;\n                                        c[5414] = v;\n                                        c[5417] = k;\n                                        c[(k + 4) >> 2] = v | 1;\n                                        c[(k + v) >> 2] = v;\n                                        break;\n                                    }\n                                    a = c[(b + 4) >> 2] | 0;\n                                    if (((a & 3) | 0) == 1) {\n                                        h = a & -8;\n                                        e = a >>> 3;\n                                        h: do\n                                            if (a >>> 0 < 256) {\n                                                a = c[(b + 8) >> 2] | 0;\n                                                d = c[(b + 12) >> 2] | 0;\n                                                if ((d | 0) == (a | 0)) {\n                                                    c[5412] = c[5412] & ~(1 << e);\n                                                    break;\n                                                }\n                                                else {\n                                                    c[(a + 12) >> 2] = d;\n                                                    c[(d + 8) >> 2] = a;\n                                                    break;\n                                                }\n                                            }\n                                            else {\n                                                g = c[(b + 24) >> 2] | 0;\n                                                a = c[(b + 12) >> 2] | 0;\n                                                do\n                                                    if ((a | 0) == (b | 0)) {\n                                                        d = (b + 16) | 0;\n                                                        e = (d + 4) | 0;\n                                                        a = c[e >> 2] | 0;\n                                                        if (!a) {\n                                                            a = c[d >> 2] | 0;\n                                                            if (!a) {\n                                                                a = 0;\n                                                                break;\n                                                            }\n                                                        }\n                                                        else\n                                                            d = e;\n                                                        while (1) {\n                                                            f = (a + 20) | 0;\n                                                            e = c[f >> 2] | 0;\n                                                            if (!e) {\n                                                                f = (a + 16) | 0;\n                                                                e = c[f >> 2] | 0;\n                                                                if (!e)\n                                                                    break;\n                                                                else {\n                                                                    a = e;\n                                                                    d = f;\n                                                                }\n                                                            }\n                                                            else {\n                                                                a = e;\n                                                                d = f;\n                                                            }\n                                                        }\n                                                        c[d >> 2] = 0;\n                                                    }\n                                                    else {\n                                                        v = c[(b + 8) >> 2] | 0;\n                                                        c[(v + 12) >> 2] = a;\n                                                        c[(a + 8) >> 2] = v;\n                                                    }\n                                                while (0);\n                                                if (!g)\n                                                    break;\n                                                d = c[(b + 28) >> 2] | 0;\n                                                e = (21952 + (d << 2)) | 0;\n                                                do\n                                                    if ((c[e >> 2] | 0) != (b | 0)) {\n                                                        v = (g + 16) | 0;\n                                                        c[((c[v >> 2] | 0) == (b | 0) ? v : (g + 20) | 0) >> 2] = a;\n                                                        if (!a)\n                                                            break h;\n                                                    }\n                                                    else {\n                                                        c[e >> 2] = a;\n                                                        if (a | 0)\n                                                            break;\n                                                        c[5413] = c[5413] & ~(1 << d);\n                                                        break h;\n                                                    }\n                                                while (0);\n                                                c[(a + 24) >> 2] = g;\n                                                d = (b + 16) | 0;\n                                                e = c[d >> 2] | 0;\n                                                if (e | 0) {\n                                                    c[(a + 16) >> 2] = e;\n                                                    c[(e + 24) >> 2] = a;\n                                                }\n                                                d = c[(d + 4) >> 2] | 0;\n                                                if (!d)\n                                                    break;\n                                                c[(a + 20) >> 2] = d;\n                                                c[(d + 24) >> 2] = a;\n                                            }\n                                        while (0);\n                                        b = (b + h) | 0;\n                                        f = (h + i) | 0;\n                                    }\n                                    else\n                                        f = i;\n                                    b = (b + 4) | 0;\n                                    c[b >> 2] = c[b >> 2] & -2;\n                                    c[(k + 4) >> 2] = f | 1;\n                                    c[(k + f) >> 2] = f;\n                                    b = f >>> 3;\n                                    if (f >>> 0 < 256) {\n                                        d = (21688 + ((b << 1) << 2)) | 0;\n                                        a = c[5412] | 0;\n                                        b = 1 << b;\n                                        if (!(a & b)) {\n                                            c[5412] = a | b;\n                                            b = d;\n                                            a = (d + 8) | 0;\n                                        }\n                                        else {\n                                            a = (d + 8) | 0;\n                                            b = c[a >> 2] | 0;\n                                        }\n                                        c[a >> 2] = k;\n                                        c[(b + 12) >> 2] = k;\n                                        c[(k + 8) >> 2] = b;\n                                        c[(k + 12) >> 2] = d;\n                                        break;\n                                    }\n                                    b = f >>> 8;\n                                    do\n                                        if (!b)\n                                            e = 0;\n                                        else {\n                                            if (f >>> 0 > 16777215) {\n                                                e = 31;\n                                                break;\n                                            }\n                                            u = (((b + 1048320) | 0) >>> 16) & 8;\n                                            v = b << u;\n                                            t = (((v + 520192) | 0) >>> 16) & 4;\n                                            v = v << t;\n                                            e = (((v + 245760) | 0) >>> 16) & 2;\n                                            e = (14 - (t | u | e) + ((v << e) >>> 15)) | 0;\n                                            e = ((f >>> ((e + 7) | 0)) & 1) | (e << 1);\n                                        }\n                                    while (0);\n                                    b = (21952 + (e << 2)) | 0;\n                                    c[(k + 28) >> 2] = e;\n                                    a = (k + 16) | 0;\n                                    c[(a + 4) >> 2] = 0;\n                                    c[a >> 2] = 0;\n                                    a = c[5413] | 0;\n                                    d = 1 << e;\n                                    if (!(a & d)) {\n                                        c[5413] = a | d;\n                                        c[b >> 2] = k;\n                                        c[(k + 24) >> 2] = b;\n                                        c[(k + 12) >> 2] = k;\n                                        c[(k + 8) >> 2] = k;\n                                        break;\n                                    }\n                                    b = c[b >> 2] | 0;\n                                    i: do\n                                        if (((c[(b + 4) >> 2] & -8) | 0) != (f | 0)) {\n                                            e = f << ((e | 0) == 31 ? 0 : (25 - (e >>> 1)) | 0);\n                                            while (1) {\n                                                d = (b + 16 + ((e >>> 31) << 2)) | 0;\n                                                a = c[d >> 2] | 0;\n                                                if (!a)\n                                                    break;\n                                                if (((c[(a + 4) >> 2] & -8) | 0) == (f | 0)) {\n                                                    b = a;\n                                                    break i;\n                                                }\n                                                else {\n                                                    e = e << 1;\n                                                    b = a;\n                                                }\n                                            }\n                                            c[d >> 2] = k;\n                                            c[(k + 24) >> 2] = b;\n                                            c[(k + 12) >> 2] = k;\n                                            c[(k + 8) >> 2] = k;\n                                            break g;\n                                        }\n                                    while (0);\n                                    u = (b + 8) | 0;\n                                    v = c[u >> 2] | 0;\n                                    c[(v + 12) >> 2] = k;\n                                    c[u >> 2] = k;\n                                    c[(k + 8) >> 2] = v;\n                                    c[(k + 12) >> 2] = b;\n                                    c[(k + 24) >> 2] = 0;\n                                }\n                            while (0);\n                            v = (l + 8) | 0;\n                            V = w;\n                            return v | 0;\n                        }\n                        b = 22096;\n                        while (1) {\n                            a = c[b >> 2] | 0;\n                            if (a >>> 0 <= j >>> 0 ? ((v = (a + (c[(b + 4) >> 2] | 0)) | 0), v >>> 0 > j >>> 0) : 0)\n                                break;\n                            b = c[(b + 8) >> 2] | 0;\n                        }\n                        f = (v + -47) | 0;\n                        a = (f + 8) | 0;\n                        a = (f + (((a & 7) | 0) == 0 ? 0 : (0 - a) & 7)) | 0;\n                        f = (j + 16) | 0;\n                        a = a >>> 0 < f >>> 0 ? j : a;\n                        b = (a + 8) | 0;\n                        d = (h + -40) | 0;\n                        t = (g + 8) | 0;\n                        t = ((t & 7) | 0) == 0 ? 0 : (0 - t) & 7;\n                        u = (g + t) | 0;\n                        t = (d - t) | 0;\n                        c[5418] = u;\n                        c[5415] = t;\n                        c[(u + 4) >> 2] = t | 1;\n                        c[(g + d + 4) >> 2] = 40;\n                        c[5419] = c[5534];\n                        d = (a + 4) | 0;\n                        c[d >> 2] = 27;\n                        c[b >> 2] = c[5524];\n                        c[(b + 4) >> 2] = c[5525];\n                        c[(b + 8) >> 2] = c[5526];\n                        c[(b + 12) >> 2] = c[5527];\n                        c[5524] = g;\n                        c[5525] = h;\n                        c[5527] = 0;\n                        c[5526] = b;\n                        b = (a + 24) | 0;\n                        do {\n                            u = b;\n                            b = (b + 4) | 0;\n                            c[b >> 2] = 7;\n                        } while (((u + 8) | 0) >>> 0 < v >>> 0);\n                        if ((a | 0) != (j | 0)) {\n                            g = (a - j) | 0;\n                            c[d >> 2] = c[d >> 2] & -2;\n                            c[(j + 4) >> 2] = g | 1;\n                            c[a >> 2] = g;\n                            b = g >>> 3;\n                            if (g >>> 0 < 256) {\n                                d = (21688 + ((b << 1) << 2)) | 0;\n                                a = c[5412] | 0;\n                                b = 1 << b;\n                                if (!(a & b)) {\n                                    c[5412] = a | b;\n                                    b = d;\n                                    a = (d + 8) | 0;\n                                }\n                                else {\n                                    a = (d + 8) | 0;\n                                    b = c[a >> 2] | 0;\n                                }\n                                c[a >> 2] = j;\n                                c[(b + 12) >> 2] = j;\n                                c[(j + 8) >> 2] = b;\n                                c[(j + 12) >> 2] = d;\n                                break;\n                            }\n                            b = g >>> 8;\n                            if (b)\n                                if (g >>> 0 > 16777215)\n                                    e = 31;\n                                else {\n                                    u = (((b + 1048320) | 0) >>> 16) & 8;\n                                    v = b << u;\n                                    t = (((v + 520192) | 0) >>> 16) & 4;\n                                    v = v << t;\n                                    e = (((v + 245760) | 0) >>> 16) & 2;\n                                    e = (14 - (t | u | e) + ((v << e) >>> 15)) | 0;\n                                    e = ((g >>> ((e + 7) | 0)) & 1) | (e << 1);\n                                }\n                            else\n                                e = 0;\n                            d = (21952 + (e << 2)) | 0;\n                            c[(j + 28) >> 2] = e;\n                            c[(j + 20) >> 2] = 0;\n                            c[f >> 2] = 0;\n                            b = c[5413] | 0;\n                            a = 1 << e;\n                            if (!(b & a)) {\n                                c[5413] = b | a;\n                                c[d >> 2] = j;\n                                c[(j + 24) >> 2] = d;\n                                c[(j + 12) >> 2] = j;\n                                c[(j + 8) >> 2] = j;\n                                break;\n                            }\n                            b = c[d >> 2] | 0;\n                            j: do\n                                if (((c[(b + 4) >> 2] & -8) | 0) != (g | 0)) {\n                                    e = g << ((e | 0) == 31 ? 0 : (25 - (e >>> 1)) | 0);\n                                    while (1) {\n                                        d = (b + 16 + ((e >>> 31) << 2)) | 0;\n                                        a = c[d >> 2] | 0;\n                                        if (!a)\n                                            break;\n                                        if (((c[(a + 4) >> 2] & -8) | 0) == (g | 0)) {\n                                            b = a;\n                                            break j;\n                                        }\n                                        else {\n                                            e = e << 1;\n                                            b = a;\n                                        }\n                                    }\n                                    c[d >> 2] = j;\n                                    c[(j + 24) >> 2] = b;\n                                    c[(j + 12) >> 2] = j;\n                                    c[(j + 8) >> 2] = j;\n                                    break f;\n                                }\n                            while (0);\n                            u = (b + 8) | 0;\n                            v = c[u >> 2] | 0;\n                            c[(v + 12) >> 2] = j;\n                            c[u >> 2] = j;\n                            c[(j + 8) >> 2] = v;\n                            c[(j + 12) >> 2] = b;\n                            c[(j + 24) >> 2] = 0;\n                        }\n                    }\n                    else {\n                        v = c[5416] | 0;\n                        if (((v | 0) == 0) | (g >>> 0 < v >>> 0))\n                            c[5416] = g;\n                        c[5524] = g;\n                        c[5525] = h;\n                        c[5527] = 0;\n                        c[5421] = c[5530];\n                        c[5420] = -1;\n                        c[5425] = 21688;\n                        c[5424] = 21688;\n                        c[5427] = 21696;\n                        c[5426] = 21696;\n                        c[5429] = 21704;\n                        c[5428] = 21704;\n                        c[5431] = 21712;\n                        c[5430] = 21712;\n                        c[5433] = 21720;\n                        c[5432] = 21720;\n                        c[5435] = 21728;\n                        c[5434] = 21728;\n                        c[5437] = 21736;\n                        c[5436] = 21736;\n                        c[5439] = 21744;\n                        c[5438] = 21744;\n                        c[5441] = 21752;\n                        c[5440] = 21752;\n                        c[5443] = 21760;\n                        c[5442] = 21760;\n                        c[5445] = 21768;\n                        c[5444] = 21768;\n                        c[5447] = 21776;\n                        c[5446] = 21776;\n                        c[5449] = 21784;\n                        c[5448] = 21784;\n                        c[5451] = 21792;\n                        c[5450] = 21792;\n                        c[5453] = 21800;\n                        c[5452] = 21800;\n                        c[5455] = 21808;\n                        c[5454] = 21808;\n                        c[5457] = 21816;\n                        c[5456] = 21816;\n                        c[5459] = 21824;\n                        c[5458] = 21824;\n                        c[5461] = 21832;\n                        c[5460] = 21832;\n                        c[5463] = 21840;\n                        c[5462] = 21840;\n                        c[5465] = 21848;\n                        c[5464] = 21848;\n                        c[5467] = 21856;\n                        c[5466] = 21856;\n                        c[5469] = 21864;\n                        c[5468] = 21864;\n                        c[5471] = 21872;\n                        c[5470] = 21872;\n                        c[5473] = 21880;\n                        c[5472] = 21880;\n                        c[5475] = 21888;\n                        c[5474] = 21888;\n                        c[5477] = 21896;\n                        c[5476] = 21896;\n                        c[5479] = 21904;\n                        c[5478] = 21904;\n                        c[5481] = 21912;\n                        c[5480] = 21912;\n                        c[5483] = 21920;\n                        c[5482] = 21920;\n                        c[5485] = 21928;\n                        c[5484] = 21928;\n                        c[5487] = 21936;\n                        c[5486] = 21936;\n                        v = (h + -40) | 0;\n                        t = (g + 8) | 0;\n                        t = ((t & 7) | 0) == 0 ? 0 : (0 - t) & 7;\n                        u = (g + t) | 0;\n                        t = (v - t) | 0;\n                        c[5418] = u;\n                        c[5415] = t;\n                        c[(u + 4) >> 2] = t | 1;\n                        c[(g + v + 4) >> 2] = 40;\n                        c[5419] = c[5534];\n                    }\n                while (0);\n                b = c[5415] | 0;\n                if (b >>> 0 > m >>> 0) {\n                    t = (b - m) | 0;\n                    c[5415] = t;\n                    v = c[5418] | 0;\n                    u = (v + m) | 0;\n                    c[5418] = u;\n                    c[(u + 4) >> 2] = t | 1;\n                    c[(v + 4) >> 2] = m | 3;\n                    v = (v + 8) | 0;\n                    V = w;\n                    return v | 0;\n                }\n            }\n            c[(ao() | 0) >> 2] = 48;\n            v = 0;\n            V = w;\n            return v | 0;\n        }\n        function er(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0;\n            if (!a)\n                return;\n            d = (a + -8) | 0;\n            f = c[5416] | 0;\n            a = c[(a + -4) >> 2] | 0;\n            b = a & -8;\n            j = (d + b) | 0;\n            do\n                if (!(a & 1)) {\n                    e = c[d >> 2] | 0;\n                    if (!(a & 3))\n                        return;\n                    h = (d + (0 - e)) | 0;\n                    g = (e + b) | 0;\n                    if (h >>> 0 < f >>> 0)\n                        return;\n                    if ((c[5417] | 0) == (h | 0)) {\n                        a = (j + 4) | 0;\n                        b = c[a >> 2] | 0;\n                        if (((b & 3) | 0) != 3) {\n                            i = h;\n                            b = g;\n                            break;\n                        }\n                        c[5414] = g;\n                        c[a >> 2] = b & -2;\n                        c[(h + 4) >> 2] = g | 1;\n                        c[(h + g) >> 2] = g;\n                        return;\n                    }\n                    d = e >>> 3;\n                    if (e >>> 0 < 256) {\n                        a = c[(h + 8) >> 2] | 0;\n                        b = c[(h + 12) >> 2] | 0;\n                        if ((b | 0) == (a | 0)) {\n                            c[5412] = c[5412] & ~(1 << d);\n                            i = h;\n                            b = g;\n                            break;\n                        }\n                        else {\n                            c[(a + 12) >> 2] = b;\n                            c[(b + 8) >> 2] = a;\n                            i = h;\n                            b = g;\n                            break;\n                        }\n                    }\n                    f = c[(h + 24) >> 2] | 0;\n                    a = c[(h + 12) >> 2] | 0;\n                    do\n                        if ((a | 0) == (h | 0)) {\n                            b = (h + 16) | 0;\n                            d = (b + 4) | 0;\n                            a = c[d >> 2] | 0;\n                            if (!a) {\n                                a = c[b >> 2] | 0;\n                                if (!a) {\n                                    a = 0;\n                                    break;\n                                }\n                            }\n                            else\n                                b = d;\n                            while (1) {\n                                e = (a + 20) | 0;\n                                d = c[e >> 2] | 0;\n                                if (!d) {\n                                    e = (a + 16) | 0;\n                                    d = c[e >> 2] | 0;\n                                    if (!d)\n                                        break;\n                                    else {\n                                        a = d;\n                                        b = e;\n                                    }\n                                }\n                                else {\n                                    a = d;\n                                    b = e;\n                                }\n                            }\n                            c[b >> 2] = 0;\n                        }\n                        else {\n                            i = c[(h + 8) >> 2] | 0;\n                            c[(i + 12) >> 2] = a;\n                            c[(a + 8) >> 2] = i;\n                        }\n                    while (0);\n                    if (f) {\n                        b = c[(h + 28) >> 2] | 0;\n                        d = (21952 + (b << 2)) | 0;\n                        if ((c[d >> 2] | 0) == (h | 0)) {\n                            c[d >> 2] = a;\n                            if (!a) {\n                                c[5413] = c[5413] & ~(1 << b);\n                                i = h;\n                                b = g;\n                                break;\n                            }\n                        }\n                        else {\n                            i = (f + 16) | 0;\n                            c[((c[i >> 2] | 0) == (h | 0) ? i : (f + 20) | 0) >> 2] = a;\n                            if (!a) {\n                                i = h;\n                                b = g;\n                                break;\n                            }\n                        }\n                        c[(a + 24) >> 2] = f;\n                        b = (h + 16) | 0;\n                        d = c[b >> 2] | 0;\n                        if (d | 0) {\n                            c[(a + 16) >> 2] = d;\n                            c[(d + 24) >> 2] = a;\n                        }\n                        b = c[(b + 4) >> 2] | 0;\n                        if (b) {\n                            c[(a + 20) >> 2] = b;\n                            c[(b + 24) >> 2] = a;\n                            i = h;\n                            b = g;\n                        }\n                        else {\n                            i = h;\n                            b = g;\n                        }\n                    }\n                    else {\n                        i = h;\n                        b = g;\n                    }\n                }\n                else {\n                    i = d;\n                    h = d;\n                }\n            while (0);\n            if (h >>> 0 >= j >>> 0)\n                return;\n            a = (j + 4) | 0;\n            e = c[a >> 2] | 0;\n            if (!(e & 1))\n                return;\n            if (!(e & 2)) {\n                if ((c[5418] | 0) == (j | 0)) {\n                    j = ((c[5415] | 0) + b) | 0;\n                    c[5415] = j;\n                    c[5418] = i;\n                    c[(i + 4) >> 2] = j | 1;\n                    if ((i | 0) != (c[5417] | 0))\n                        return;\n                    c[5417] = 0;\n                    c[5414] = 0;\n                    return;\n                }\n                if ((c[5417] | 0) == (j | 0)) {\n                    j = ((c[5414] | 0) + b) | 0;\n                    c[5414] = j;\n                    c[5417] = h;\n                    c[(i + 4) >> 2] = j | 1;\n                    c[(h + j) >> 2] = j;\n                    return;\n                }\n                f = ((e & -8) + b) | 0;\n                d = e >>> 3;\n                do\n                    if (e >>> 0 < 256) {\n                        b = c[(j + 8) >> 2] | 0;\n                        a = c[(j + 12) >> 2] | 0;\n                        if ((a | 0) == (b | 0)) {\n                            c[5412] = c[5412] & ~(1 << d);\n                            break;\n                        }\n                        else {\n                            c[(b + 12) >> 2] = a;\n                            c[(a + 8) >> 2] = b;\n                            break;\n                        }\n                    }\n                    else {\n                        g = c[(j + 24) >> 2] | 0;\n                        a = c[(j + 12) >> 2] | 0;\n                        do\n                            if ((a | 0) == (j | 0)) {\n                                b = (j + 16) | 0;\n                                d = (b + 4) | 0;\n                                a = c[d >> 2] | 0;\n                                if (!a) {\n                                    a = c[b >> 2] | 0;\n                                    if (!a) {\n                                        d = 0;\n                                        break;\n                                    }\n                                }\n                                else\n                                    b = d;\n                                while (1) {\n                                    e = (a + 20) | 0;\n                                    d = c[e >> 2] | 0;\n                                    if (!d) {\n                                        e = (a + 16) | 0;\n                                        d = c[e >> 2] | 0;\n                                        if (!d)\n                                            break;\n                                        else {\n                                            a = d;\n                                            b = e;\n                                        }\n                                    }\n                                    else {\n                                        a = d;\n                                        b = e;\n                                    }\n                                }\n                                c[b >> 2] = 0;\n                                d = a;\n                            }\n                            else {\n                                d = c[(j + 8) >> 2] | 0;\n                                c[(d + 12) >> 2] = a;\n                                c[(a + 8) >> 2] = d;\n                                d = a;\n                            }\n                        while (0);\n                        if (g | 0) {\n                            a = c[(j + 28) >> 2] | 0;\n                            b = (21952 + (a << 2)) | 0;\n                            if ((c[b >> 2] | 0) == (j | 0)) {\n                                c[b >> 2] = d;\n                                if (!d) {\n                                    c[5413] = c[5413] & ~(1 << a);\n                                    break;\n                                }\n                            }\n                            else {\n                                e = (g + 16) | 0;\n                                c[((c[e >> 2] | 0) == (j | 0) ? e : (g + 20) | 0) >> 2] = d;\n                                if (!d)\n                                    break;\n                            }\n                            c[(d + 24) >> 2] = g;\n                            a = (j + 16) | 0;\n                            b = c[a >> 2] | 0;\n                            if (b | 0) {\n                                c[(d + 16) >> 2] = b;\n                                c[(b + 24) >> 2] = d;\n                            }\n                            a = c[(a + 4) >> 2] | 0;\n                            if (a | 0) {\n                                c[(d + 20) >> 2] = a;\n                                c[(a + 24) >> 2] = d;\n                            }\n                        }\n                    }\n                while (0);\n                c[(i + 4) >> 2] = f | 1;\n                c[(h + f) >> 2] = f;\n                if ((i | 0) == (c[5417] | 0)) {\n                    c[5414] = f;\n                    return;\n                }\n            }\n            else {\n                c[a >> 2] = e & -2;\n                c[(i + 4) >> 2] = b | 1;\n                c[(h + b) >> 2] = b;\n                f = b;\n            }\n            a = f >>> 3;\n            if (f >>> 0 < 256) {\n                d = (21688 + ((a << 1) << 2)) | 0;\n                b = c[5412] | 0;\n                a = 1 << a;\n                if (!(b & a)) {\n                    c[5412] = b | a;\n                    a = d;\n                    b = (d + 8) | 0;\n                }\n                else {\n                    b = (d + 8) | 0;\n                    a = c[b >> 2] | 0;\n                }\n                c[b >> 2] = i;\n                c[(a + 12) >> 2] = i;\n                c[(i + 8) >> 2] = a;\n                c[(i + 12) >> 2] = d;\n                return;\n            }\n            a = f >>> 8;\n            if (a)\n                if (f >>> 0 > 16777215)\n                    e = 31;\n                else {\n                    h = (((a + 1048320) | 0) >>> 16) & 8;\n                    j = a << h;\n                    g = (((j + 520192) | 0) >>> 16) & 4;\n                    j = j << g;\n                    e = (((j + 245760) | 0) >>> 16) & 2;\n                    e = (14 - (g | h | e) + ((j << e) >>> 15)) | 0;\n                    e = ((f >>> ((e + 7) | 0)) & 1) | (e << 1);\n                }\n            else\n                e = 0;\n            a = (21952 + (e << 2)) | 0;\n            c[(i + 28) >> 2] = e;\n            c[(i + 20) >> 2] = 0;\n            c[(i + 16) >> 2] = 0;\n            b = c[5413] | 0;\n            d = 1 << e;\n            a: do\n                if (!(b & d)) {\n                    c[5413] = b | d;\n                    c[a >> 2] = i;\n                    c[(i + 24) >> 2] = a;\n                    c[(i + 12) >> 2] = i;\n                    c[(i + 8) >> 2] = i;\n                }\n                else {\n                    a = c[a >> 2] | 0;\n                    b: do\n                        if (((c[(a + 4) >> 2] & -8) | 0) != (f | 0)) {\n                            e = f << ((e | 0) == 31 ? 0 : (25 - (e >>> 1)) | 0);\n                            while (1) {\n                                d = (a + 16 + ((e >>> 31) << 2)) | 0;\n                                b = c[d >> 2] | 0;\n                                if (!b)\n                                    break;\n                                if (((c[(b + 4) >> 2] & -8) | 0) == (f | 0)) {\n                                    a = b;\n                                    break b;\n                                }\n                                else {\n                                    e = e << 1;\n                                    a = b;\n                                }\n                            }\n                            c[d >> 2] = i;\n                            c[(i + 24) >> 2] = a;\n                            c[(i + 12) >> 2] = i;\n                            c[(i + 8) >> 2] = i;\n                            break a;\n                        }\n                    while (0);\n                    h = (a + 8) | 0;\n                    j = c[h >> 2] | 0;\n                    c[(j + 12) >> 2] = i;\n                    c[h >> 2] = i;\n                    c[(i + 8) >> 2] = j;\n                    c[(i + 12) >> 2] = a;\n                    c[(i + 24) >> 2] = 0;\n                }\n            while (0);\n            j = ((c[5420] | 0) + -1) | 0;\n            c[5420] = j;\n            if (j | 0)\n                return;\n            a = 22104;\n            while (1) {\n                a = c[a >> 2] | 0;\n                if (!a)\n                    break;\n                else\n                    a = (a + 8) | 0;\n            }\n            c[5420] = -1;\n            return;\n        }\n        function fr(a) {\n            a = a | 0;\n            var b = 0, d = 0, e = 0;\n            e = (a + 3) & -4;\n            a = sr() | 0;\n            b = c[a >> 2] | 0;\n            d = (b + e) | 0;\n            do\n                if (((e | 0) < 1) | (d >>> 0 > b >>> 0)) {\n                    if (d >>> 0 > (R() | 0) >>> 0 ? (T(d | 0) | 0) == 0 : 0)\n                        break;\n                    c[a >> 2] = d;\n                    e = b;\n                    return e | 0;\n                }\n            while (0);\n            c[(ao() | 0) >> 2] = 48;\n            e = -1;\n            return e | 0;\n        }\n        function gr(a) {\n            a = a | 0;\n            var b = 0;\n            b = V;\n            V = (V + a) | 0;\n            V = (V + 15) & -16;\n            return b | 0;\n        }\n        function hr(a) {\n            a = a | 0;\n            V = a;\n        }\n        function ir() {\n            return V | 0;\n        }\n        function jr(a, b) {\n            a = a | 0;\n            b = b | 0;\n            var c = 0, d = 0, e = 0, f = 0;\n            f = a & 65535;\n            e = b & 65535;\n            c = q(e, f) | 0;\n            d = a >>> 16;\n            a = ((c >>> 16) + (q(e, d) | 0)) | 0;\n            e = b >>> 16;\n            b = q(e, f) | 0;\n            return ((t(((a >>> 16) + (q(e, d) | 0) + ((((a & 65535) + b) | 0) >>> 16)) | 0),\n                ((a + b) << 16) | (c & 65535) | 0) | 0);\n        }\n        function kr(a, b, c, d) {\n            a = a | 0;\n            b = b | 0;\n            c = c | 0;\n            d = d | 0;\n            var e = 0, f = 0;\n            e = a;\n            f = c;\n            c = jr(e, f) | 0;\n            a = u() | 0;\n            return (t(((q(b, f) | 0) + (q(d, e) | 0) + a) | (a & 0) | 0), c | 0 | 0) | 0;\n        }\n        function lr(a, b, c, d) {\n            a = a | 0;\n            b = b | 0;\n            c = c | 0;\n            d = d | 0;\n            c = (a + c) >>> 0;\n            return (t(((b + d + ((c >>> 0 < a >>> 0) | 0)) >>> 0) | 0), c | 0) | 0;\n        }\n        function mr(a, b, c, d) {\n            a = a | 0;\n            b = b | 0;\n            c = c | 0;\n            d = d | 0;\n            d = (b - d - ((c >>> 0 > a >>> 0) | 0)) >>> 0;\n            return (t(d | 0), ((a - c) >>> 0) | 0) | 0;\n        }\n        function nr(a) {\n            a = a | 0;\n            return (a ? (31 - (r(a ^ (a - 1)) | 0)) | 0 : 32) | 0;\n        }\n        function or(a, b, d, e, f) {\n            a = a | 0;\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            f = f | 0;\n            var g = 0, h = 0, i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0, p = 0;\n            l = a;\n            j = b;\n            k = j;\n            h = d;\n            n = e;\n            i = n;\n            if (!k) {\n                g = (f | 0) != 0;\n                if (!i) {\n                    if (g) {\n                        c[f >> 2] = (l >>> 0) % (h >>> 0);\n                        c[(f + 4) >> 2] = 0;\n                    }\n                    n = 0;\n                    f = ((l >>> 0) / (h >>> 0)) >>> 0;\n                    return (t(n | 0), f) | 0;\n                }\n                else {\n                    if (!g) {\n                        n = 0;\n                        f = 0;\n                        return (t(n | 0), f) | 0;\n                    }\n                    c[f >> 2] = a | 0;\n                    c[(f + 4) >> 2] = b & 0;\n                    n = 0;\n                    f = 0;\n                    return (t(n | 0), f) | 0;\n                }\n            }\n            g = (i | 0) == 0;\n            do\n                if (h) {\n                    if (!g) {\n                        g = ((r(i | 0) | 0) - (r(k | 0) | 0)) | 0;\n                        if (g >>> 0 <= 31) {\n                            m = (g + 1) | 0;\n                            i = (31 - g) | 0;\n                            b = (g - 31) >> 31;\n                            h = m;\n                            a = ((l >>> (m >>> 0)) & b) | (k << i);\n                            b = (k >>> (m >>> 0)) & b;\n                            g = 0;\n                            i = l << i;\n                            break;\n                        }\n                        if (!f) {\n                            n = 0;\n                            f = 0;\n                            return (t(n | 0), f) | 0;\n                        }\n                        c[f >> 2] = a | 0;\n                        c[(f + 4) >> 2] = j | (b & 0);\n                        n = 0;\n                        f = 0;\n                        return (t(n | 0), f) | 0;\n                    }\n                    g = (h - 1) | 0;\n                    if ((g & h) | 0) {\n                        i = ((r(h | 0) | 0) + 33 - (r(k | 0) | 0)) | 0;\n                        p = (64 - i) | 0;\n                        m = (32 - i) | 0;\n                        j = m >> 31;\n                        o = (i - 32) | 0;\n                        b = o >> 31;\n                        h = i;\n                        a = (((m - 1) >> 31) & (k >>> (o >>> 0))) | (((k << m) | (l >>> (i >>> 0))) & b);\n                        b = b & (k >>> (i >>> 0));\n                        g = (l << p) & j;\n                        i = (((k << p) | (l >>> (o >>> 0))) & j) | ((l << m) & ((i - 33) >> 31));\n                        break;\n                    }\n                    if (f | 0) {\n                        c[f >> 2] = g & l;\n                        c[(f + 4) >> 2] = 0;\n                    }\n                    if ((h | 0) == 1) {\n                        o = j | (b & 0);\n                        p = a | 0 | 0;\n                        return (t(o | 0), p) | 0;\n                    }\n                    else {\n                        p = nr(h | 0) | 0;\n                        o = (k >>> (p >>> 0)) | 0;\n                        p = (k << (32 - p)) | (l >>> (p >>> 0)) | 0;\n                        return (t(o | 0), p) | 0;\n                    }\n                }\n                else {\n                    if (g) {\n                        if (f | 0) {\n                            c[f >> 2] = (k >>> 0) % (h >>> 0);\n                            c[(f + 4) >> 2] = 0;\n                        }\n                        o = 0;\n                        p = ((k >>> 0) / (h >>> 0)) >>> 0;\n                        return (t(o | 0), p) | 0;\n                    }\n                    if (!l) {\n                        if (f | 0) {\n                            c[f >> 2] = 0;\n                            c[(f + 4) >> 2] = (k >>> 0) % (i >>> 0);\n                        }\n                        o = 0;\n                        p = ((k >>> 0) / (i >>> 0)) >>> 0;\n                        return (t(o | 0), p) | 0;\n                    }\n                    g = (i - 1) | 0;\n                    if (!(g & i)) {\n                        if (f | 0) {\n                            c[f >> 2] = a | 0;\n                            c[(f + 4) >> 2] = (g & k) | (b & 0);\n                        }\n                        o = 0;\n                        p = k >>> ((nr(i | 0) | 0) >>> 0);\n                        return (t(o | 0), p) | 0;\n                    }\n                    g = ((r(i | 0) | 0) - (r(k | 0) | 0)) | 0;\n                    if (g >>> 0 <= 30) {\n                        b = (g + 1) | 0;\n                        i = (31 - g) | 0;\n                        h = b;\n                        a = (k << i) | (l >>> (b >>> 0));\n                        b = k >>> (b >>> 0);\n                        g = 0;\n                        i = l << i;\n                        break;\n                    }\n                    if (!f) {\n                        o = 0;\n                        p = 0;\n                        return (t(o | 0), p) | 0;\n                    }\n                    c[f >> 2] = a | 0;\n                    c[(f + 4) >> 2] = j | (b & 0);\n                    o = 0;\n                    p = 0;\n                    return (t(o | 0), p) | 0;\n                }\n            while (0);\n            if (!h) {\n                k = i;\n                j = 0;\n                i = 0;\n            }\n            else {\n                m = d | 0 | 0;\n                l = n | (e & 0);\n                k = lr(m | 0, l | 0, -1, -1) | 0;\n                d = u() | 0;\n                j = i;\n                i = 0;\n                do {\n                    e = j;\n                    j = (g >>> 31) | (j << 1);\n                    g = i | (g << 1);\n                    e = (a << 1) | (e >>> 31) | 0;\n                    n = (a >>> 31) | (b << 1) | 0;\n                    mr(k | 0, d | 0, e | 0, n | 0) | 0;\n                    p = u() | 0;\n                    o = (p >> 31) | (((p | 0) < 0 ? -1 : 0) << 1);\n                    i = o & 1;\n                    a =\n                        mr(e | 0, n | 0, (o & m) | 0, (((((p | 0) < 0 ? -1 : 0) >> 31) | (((p | 0) < 0 ? -1 : 0) << 1)) & l) | 0) | 0;\n                    b = u() | 0;\n                    h = (h - 1) | 0;\n                } while ((h | 0) != 0);\n                k = j;\n                j = 0;\n            }\n            h = 0;\n            if (f | 0) {\n                c[f >> 2] = a;\n                c[(f + 4) >> 2] = b;\n            }\n            o = ((g | 0) >>> 31) | ((k | h) << 1) | (((h << 1) | (g >>> 31)) & 0) | j;\n            p = (((g << 1) | (0 >>> 31)) & -2) | i;\n            return (t(o | 0), p) | 0;\n        }\n        function pr(a, b, c, d) {\n            a = a | 0;\n            b = b | 0;\n            c = c | 0;\n            d = d | 0;\n            return or(a, b, c, d, 0) | 0;\n        }\n        function qr(a, b, c) {\n            a = a | 0;\n            b = b | 0;\n            c = c | 0;\n            if ((c | 0) < 32) {\n                t((b >>> c) | 0);\n                return (a >>> c) | ((b & ((1 << c) - 1)) << (32 - c));\n            }\n            t(0);\n            return (b >>> (c - 32)) | 0;\n        }\n        function rr(a, b, c) {\n            a = a | 0;\n            b = b | 0;\n            c = c | 0;\n            if ((c | 0) < 32) {\n                t((b << c) | ((a & (((1 << c) - 1) << (32 - c))) >>> (32 - c)) | 0);\n                return a << c;\n            }\n            t((a << (c - 32)) | 0);\n            return 0;\n        }\n        function sr() {\n            return 22176;\n        }\n        function tr(a) {\n            a = a | 0;\n            return (((a & 255) << 24) | (((a >> 8) & 255) << 16) | (((a >> 16) & 255) << 8) | (a >>> 24) | 0);\n        }\n        function ur(b, d, e) {\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            var f = 0, g = 0, h = 0;\n            if ((e | 0) >= 512) {\n                S(b | 0, d | 0, e | 0) | 0;\n                return b | 0;\n            }\n            h = b | 0;\n            g = (b + e) | 0;\n            if ((b & 3) == (d & 3)) {\n                while (b & 3) {\n                    if (!e)\n                        return h | 0;\n                    a[b >> 0] = a[d >> 0] | 0;\n                    b = (b + 1) | 0;\n                    d = (d + 1) | 0;\n                    e = (e - 1) | 0;\n                }\n                e = (g & -4) | 0;\n                f = (e - 64) | 0;\n                while ((b | 0) <= (f | 0)) {\n                    c[b >> 2] = c[d >> 2];\n                    c[(b + 4) >> 2] = c[(d + 4) >> 2];\n                    c[(b + 8) >> 2] = c[(d + 8) >> 2];\n                    c[(b + 12) >> 2] = c[(d + 12) >> 2];\n                    c[(b + 16) >> 2] = c[(d + 16) >> 2];\n                    c[(b + 20) >> 2] = c[(d + 20) >> 2];\n                    c[(b + 24) >> 2] = c[(d + 24) >> 2];\n                    c[(b + 28) >> 2] = c[(d + 28) >> 2];\n                    c[(b + 32) >> 2] = c[(d + 32) >> 2];\n                    c[(b + 36) >> 2] = c[(d + 36) >> 2];\n                    c[(b + 40) >> 2] = c[(d + 40) >> 2];\n                    c[(b + 44) >> 2] = c[(d + 44) >> 2];\n                    c[(b + 48) >> 2] = c[(d + 48) >> 2];\n                    c[(b + 52) >> 2] = c[(d + 52) >> 2];\n                    c[(b + 56) >> 2] = c[(d + 56) >> 2];\n                    c[(b + 60) >> 2] = c[(d + 60) >> 2];\n                    b = (b + 64) | 0;\n                    d = (d + 64) | 0;\n                }\n                while ((b | 0) < (e | 0)) {\n                    c[b >> 2] = c[d >> 2];\n                    b = (b + 4) | 0;\n                    d = (d + 4) | 0;\n                }\n            }\n            else {\n                e = (g - 4) | 0;\n                while ((b | 0) < (e | 0)) {\n                    a[b >> 0] = a[d >> 0] | 0;\n                    a[(b + 1) >> 0] = a[(d + 1) >> 0] | 0;\n                    a[(b + 2) >> 0] = a[(d + 2) >> 0] | 0;\n                    a[(b + 3) >> 0] = a[(d + 3) >> 0] | 0;\n                    b = (b + 4) | 0;\n                    d = (d + 4) | 0;\n                }\n            }\n            while ((b | 0) < (g | 0)) {\n                a[b >> 0] = a[d >> 0] | 0;\n                b = (b + 1) | 0;\n                d = (d + 1) | 0;\n            }\n            return h | 0;\n        }\n        function vr(b, c, d) {\n            b = b | 0;\n            c = c | 0;\n            d = d | 0;\n            var e = 0;\n            if (((c | 0) < (b | 0)) & ((b | 0) < ((c + d) | 0))) {\n                e = b;\n                c = (c + d) | 0;\n                b = (b + d) | 0;\n                while ((d | 0) > 0) {\n                    b = (b - 1) | 0;\n                    c = (c - 1) | 0;\n                    d = (d - 1) | 0;\n                    a[b >> 0] = a[c >> 0] | 0;\n                }\n                b = e;\n            }\n            else\n                ur(b, c, d) | 0;\n            return b | 0;\n        }\n        function wr(b, d, e) {\n            b = b | 0;\n            d = d | 0;\n            e = e | 0;\n            var f = 0, g = 0, h = 0, i = 0;\n            h = (b + e) | 0;\n            d = d & 255;\n            if ((e | 0) >= 67) {\n                while (b & 3) {\n                    a[b >> 0] = d;\n                    b = (b + 1) | 0;\n                }\n                f = (h & -4) | 0;\n                i = d | (d << 8) | (d << 16) | (d << 24);\n                g = (f - 64) | 0;\n                while ((b | 0) <= (g | 0)) {\n                    c[b >> 2] = i;\n                    c[(b + 4) >> 2] = i;\n                    c[(b + 8) >> 2] = i;\n                    c[(b + 12) >> 2] = i;\n                    c[(b + 16) >> 2] = i;\n                    c[(b + 20) >> 2] = i;\n                    c[(b + 24) >> 2] = i;\n                    c[(b + 28) >> 2] = i;\n                    c[(b + 32) >> 2] = i;\n                    c[(b + 36) >> 2] = i;\n                    c[(b + 40) >> 2] = i;\n                    c[(b + 44) >> 2] = i;\n                    c[(b + 48) >> 2] = i;\n                    c[(b + 52) >> 2] = i;\n                    c[(b + 56) >> 2] = i;\n                    c[(b + 60) >> 2] = i;\n                    b = (b + 64) | 0;\n                }\n                while ((b | 0) < (f | 0)) {\n                    c[b >> 2] = i;\n                    b = (b + 4) | 0;\n                }\n            }\n            while ((b | 0) < (h | 0)) {\n                a[b >> 0] = d;\n                b = (b + 1) | 0;\n            }\n            return (h - e) | 0;\n        }\n        function xr(a) {\n            a = a | 0;\n            return Y[a & 3]() | 0;\n        }\n        function yr(a, b) {\n            a = a | 0;\n            b = b | 0;\n            return Z[a & 15](b | 0) | 0;\n        }\n        function zr(a, b, c, d, e, f, g) {\n            a = a | 0;\n            b = b | 0;\n            c = +c;\n            d = d | 0;\n            e = e | 0;\n            f = f | 0;\n            g = g | 0;\n            return _[a & 1](b | 0, +c, d | 0, e | 0, f | 0, g | 0) | 0;\n        }\n        function Ar(a, b, c) {\n            a = a | 0;\n            b = b | 0;\n            c = c | 0;\n            return $[a & 63](b | 0, c | 0) | 0;\n        }\n        function Br(a, b, c, d) {\n            a = a | 0;\n            b = b | 0;\n            c = c | 0;\n            d = d | 0;\n            return aa[a & 7](b | 0, c | 0, d | 0) | 0;\n        }\n        function Cr(a) {\n            a = a | 0;\n            ba[a & 3]();\n        }\n        function Dr(a, b) {\n            a = a | 0;\n            b = b | 0;\n            ca[a & 255](b | 0);\n        }\n        function Er(a, b, c) {\n            a = a | 0;\n            b = b | 0;\n            c = c | 0;\n            da[a & 15](b | 0, c | 0);\n        }\n        function Fr(a, b, c, d) {\n            a = a | 0;\n            b = b | 0;\n            c = c | 0;\n            d = d | 0;\n            ea[a & 15](b | 0, c | 0, d | 0);\n        }\n        function Gr(a, b, c, d, e) {\n            a = a | 0;\n            b = b | 0;\n            c = c | 0;\n            d = d | 0;\n            e = e | 0;\n            fa[a & 7](b | 0, c | 0, d | 0, e | 0);\n        }\n        function Hr(a, b, c, d, e, f) {\n            a = a | 0;\n            b = b | 0;\n            c = c | 0;\n            d = d | 0;\n            e = e | 0;\n            f = f | 0;\n            ga[a & 3](b | 0, c | 0, d | 0, e | 0, f | 0);\n        }\n        function Ir(a, b, c, d, e, f, g) {\n            a = a | 0;\n            b = b | 0;\n            c = c | 0;\n            d = d | 0;\n            e = e | 0;\n            f = f | 0;\n            g = g | 0;\n            ha[a & 3](b | 0, c | 0, d | 0, e | 0, f | 0, g | 0);\n        }\n        function Jr() {\n            s(0);\n            return 0;\n        }\n        function Kr(a) {\n            a = a | 0;\n            s(1);\n            return 0;\n        }\n        function Lr(a, b, c, d, e, f) {\n            a = a | 0;\n            b = +b;\n            c = c | 0;\n            d = d | 0;\n            e = e | 0;\n            f = f | 0;\n            s(2);\n            return 0;\n        }\n        function Mr(a, b) {\n            a = a | 0;\n            b = b | 0;\n            s(3);\n            return 0;\n        }\n        function Nr(a, b, c) {\n            a = a | 0;\n            b = b | 0;\n            c = c | 0;\n            s(4);\n            return 0;\n        }\n        function Or() {\n            s(5);\n        }\n        function Pr(a) {\n            a = a | 0;\n            s(6);\n        }\n        function Qr(a, b) {\n            a = a | 0;\n            b = b | 0;\n            s(7);\n        }\n        function Rr(a, b, c) {\n            a = a | 0;\n            b = b | 0;\n            c = c | 0;\n            s(8);\n        }\n        function Sr(a, b, c, d) {\n            a = a | 0;\n            b = b | 0;\n            c = c | 0;\n            d = d | 0;\n            s(9);\n        }\n        function Tr(a, b, c, d, e) {\n            a = a | 0;\n            b = b | 0;\n            c = c | 0;\n            d = d | 0;\n            e = e | 0;\n            s(10);\n        }\n        function Ur(a, b, c, d, e, f) {\n            a = a | 0;\n            b = b | 0;\n            c = c | 0;\n            d = d | 0;\n            e = e | 0;\n            f = f | 0;\n            s(11);\n        }\n        // EMSCRIPTEN_END_FUNCS\n        var Y = [Jr, Mk, Fl, Jr];\n        var Z = [Kr, Ap, zb, Fb, qp, tp, oq, Kq, Tq, wk, na, tl, Ok, Hl, Kr, Kr];\n        var _ = [Lr, po];\n        var $ = [\n            Mr,\n            Ba,\n            Ka,\n            Eb,\n            jd,\n            Nd,\n            Xd,\n            je,\n            ke,\n            ne,\n            _e,\n            ff,\n            yf,\n            Ff,\n            Of,\n            Vf,\n            Hg,\n            Qg,\n            Zg,\n            ch,\n            lh,\n            qh,\n            zh,\n            Eh,\n            Nh,\n            _h,\n            fi,\n            ki,\n            si,\n            Bi,\n            Si,\n            Zi,\n            fj,\n            oj,\n            yj,\n            Fj,\n            Pj,\n            Yj,\n            ek,\n            lk,\n            tk,\n            ll,\n            Mr,\n            Mr,\n            Mr,\n            Mr,\n            Mr,\n            Mr,\n            Mr,\n            Mr,\n            Mr,\n            Mr,\n            Mr,\n            Mr,\n            Mr,\n            Mr,\n            Mr,\n            Mr,\n            Mr,\n            Mr,\n            Mr,\n            Mr,\n            Mr,\n            Mr\n        ];\n        var aa = [Nr, Io, Yo, Fp, Hp, Mq, Nq, Nr];\n        var ba = [Or, Dp, Po, Or];\n        var ca = [\n            Pr,\n            pq,\n            za,\n            Aa,\n            Ca,\n            Ia,\n            Ja,\n            La,\n            yp,\n            ob,\n            Gb,\n            yb,\n            Bb,\n            Cb,\n            Lb,\n            Mb,\n            Xb,\n            Yb,\n            sc,\n            tc,\n            uc,\n            Nc,\n            hd,\n            id,\n            kd,\n            Jd,\n            Od,\n            Pd,\n            Qd,\n            Rd,\n            Vd,\n            Wd,\n            Yd,\n            he,\n            ie,\n            le,\n            me,\n            Ye,\n            Ze,\n            $e,\n            df,\n            ef,\n            wf,\n            xf,\n            zf,\n            Df,\n            Ef,\n            Mf,\n            Nf,\n            Pf,\n            Tf,\n            Uf,\n            Fg,\n            Gg,\n            Ig,\n            Rg,\n            Sg,\n            Xg,\n            Yg,\n            _g,\n            dh,\n            eh,\n            jh,\n            kh,\n            mh,\n            rh,\n            sh,\n            xh,\n            yh,\n            Ah,\n            Fh,\n            Gh,\n            Lh,\n            Mh,\n            Oh,\n            Yh,\n            Zh,\n            $h,\n            di,\n            ei,\n            gi,\n            li,\n            mi,\n            qi,\n            ri,\n            ti,\n            zi,\n            Ai,\n            Qi,\n            Ri,\n            Ti,\n            Xi,\n            Yi,\n            dj,\n            ej,\n            gj,\n            mj,\n            nj,\n            wj,\n            xj,\n            zj,\n            Dj,\n            Ej,\n            Nj,\n            Oj,\n            Qj,\n            Wj,\n            Xj,\n            ck,\n            dk,\n            fk,\n            jk,\n            kk,\n            rk,\n            sk,\n            uk,\n            Uo,\n            Vo,\n            Wo,\n            Xo,\n            fp,\n            op,\n            pp,\n            rp,\n            sp,\n            zp,\n            Bp,\n            Cp,\n            Ep,\n            Gp,\n            Lp,\n            mq,\n            nq,\n            Iq,\n            Jq,\n            Sq,\n            Yq,\n            Zq,\n            zk,\n            wl,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr,\n            Pr\n        ];\n        var da = [Qr, Ab, Db, ma, pa, qa, ra, sa, qo, Qr, Qr, Qr, Qr, Qr, Qr, Qr];\n        var ea = [Rr, Lq, Oq, Uq, Vq, la, oa, dl, Vl, $l, Rr, Rr, Rr, Rr, Rr, Rr];\n        var fa = [Sr, $o, ip, Op, Vk, Ol, Sr, Sr];\n        var ga = [Tr, _o, hp, Np];\n        var ha = [Ur, Zo, gp, Mp];\n        return {\n            __ZSt18uncaught_exceptionv: kq,\n            ___cxa_can_catch: hq,\n            ___cxa_is_pointer_type: iq,\n            ___embind_register_native_and_builtin_types: im,\n            ___errno_location: ao,\n            ___getTypeName: $n,\n            ___muldi3: kr,\n            ___udivdi3: pr,\n            _bitshift64Lshr: qr,\n            _bitshift64Shl: rr,\n            _emscripten_get_sbrk_ptr: sr,\n            _free: er,\n            _i64Add: lr,\n            _i64Subtract: mr,\n            _llvm_bswap_i32: tr,\n            _malloc: dr,\n            _memcpy: ur,\n            _memmove: vr,\n            _memset: wr,\n            dynCall_i: xr,\n            dynCall_ii: yr,\n            dynCall_iidiiii: zr,\n            dynCall_iii: Ar,\n            dynCall_iiii: Br,\n            dynCall_v: Cr,\n            dynCall_vi: Dr,\n            dynCall_vii: Er,\n            dynCall_viii: Fr,\n            dynCall_viiii: Gr,\n            dynCall_viiiii: Hr,\n            dynCall_viiiiii: Ir,\n            globalCtors: ia,\n            stackAlloc: gr,\n            stackRestore: hr,\n            stackSave: ir\n        };\n    })(\n    // EMSCRIPTEN_END_ASM\n    asmGlobalArg, asmLibraryArg, buffer);\n    var __ZSt18uncaught_exceptionv = (Module['__ZSt18uncaught_exceptionv'] =\n        asm['__ZSt18uncaught_exceptionv']);\n    var ___cxa_can_catch = (Module['___cxa_can_catch'] = asm['___cxa_can_catch']);\n    var ___cxa_is_pointer_type = (Module['___cxa_is_pointer_type'] = asm['___cxa_is_pointer_type']);\n    var ___embind_register_native_and_builtin_types = (Module['___embind_register_native_and_builtin_types'] = asm['___embind_register_native_and_builtin_types']);\n    var ___errno_location = (Module['___errno_location'] = asm['___errno_location']);\n    var ___getTypeName = (Module['___getTypeName'] = asm['___getTypeName']);\n    var ___muldi3 = (Module['___muldi3'] = asm['___muldi3']);\n    var ___udivdi3 = (Module['___udivdi3'] = asm['___udivdi3']);\n    var _bitshift64Lshr = (Module['_bitshift64Lshr'] = asm['_bitshift64Lshr']);\n    var _bitshift64Shl = (Module['_bitshift64Shl'] = asm['_bitshift64Shl']);\n    var _emscripten_get_sbrk_ptr = (Module['_emscripten_get_sbrk_ptr'] =\n        asm['_emscripten_get_sbrk_ptr']);\n    var _free = (Module['_free'] = asm['_free']);\n    var _i64Add = (Module['_i64Add'] = asm['_i64Add']);\n    var _i64Subtract = (Module['_i64Subtract'] = asm['_i64Subtract']);\n    var _llvm_bswap_i32 = (Module['_llvm_bswap_i32'] = asm['_llvm_bswap_i32']);\n    var _malloc = (Module['_malloc'] = asm['_malloc']);\n    var _memcpy = (Module['_memcpy'] = asm['_memcpy']);\n    var _memmove = (Module['_memmove'] = asm['_memmove']);\n    var _memset = (Module['_memset'] = asm['_memset']);\n    var globalCtors = (Module['globalCtors'] = asm['globalCtors']);\n    var stackAlloc = (Module['stackAlloc'] = asm['stackAlloc']);\n    var stackRestore = (Module['stackRestore'] = asm['stackRestore']);\n    var stackSave = (Module['stackSave'] = asm['stackSave']);\n    var dynCall_i = (Module['dynCall_i'] = asm['dynCall_i']);\n    var dynCall_ii = (Module['dynCall_ii'] = asm['dynCall_ii']);\n    var dynCall_iidiiii = (Module['dynCall_iidiiii'] = asm['dynCall_iidiiii']);\n    var dynCall_iii = (Module['dynCall_iii'] = asm['dynCall_iii']);\n    var dynCall_iiii = (Module['dynCall_iiii'] = asm['dynCall_iiii']);\n    var dynCall_v = (Module['dynCall_v'] = asm['dynCall_v']);\n    var dynCall_vi = (Module['dynCall_vi'] = asm['dynCall_vi']);\n    var dynCall_vii = (Module['dynCall_vii'] = asm['dynCall_vii']);\n    var dynCall_viii = (Module['dynCall_viii'] = asm['dynCall_viii']);\n    var dynCall_viiii = (Module['dynCall_viiii'] = asm['dynCall_viiii']);\n    var dynCall_viiiii = (Module['dynCall_viiiii'] = asm['dynCall_viiiii']);\n    var dynCall_viiiiii = (Module['dynCall_viiiiii'] = asm['dynCall_viiiiii']);\n    Module['asm'] = asm;\n    if (memoryInitializer) {\n        if (!isDataURI(memoryInitializer)) {\n            memoryInitializer = locateFile(memoryInitializer);\n        }\n        if (ENVIRONMENT_IS_NODE || ENVIRONMENT_IS_SHELL) {\n            var data = readBinary(memoryInitializer);\n            HEAPU8.set(data, GLOBAL_BASE);\n        }\n        else {\n            addRunDependency('memory initializer');\n            var applyMemoryInitializer = function (data) {\n                if (data.byteLength)\n                    data = new Uint8Array(data);\n                HEAPU8.set(data, GLOBAL_BASE);\n                if (Module['memoryInitializerRequest'])\n                    delete Module['memoryInitializerRequest'].response;\n                removeRunDependency('memory initializer');\n            };\n            var doBrowserLoad = function () {\n                readAsync(memoryInitializer, applyMemoryInitializer, function () {\n                    var e = new Error('could not load memory initializer ' + memoryInitializer);\n                    throw e;\n                });\n            };\n            var memoryInitializerBytes = tryParseAsDataURI(memoryInitializer);\n            if (memoryInitializerBytes) {\n                applyMemoryInitializer(memoryInitializerBytes.buffer);\n            }\n            else if (Module['memoryInitializerRequest']) {\n                var useRequest = function () {\n                    var request = Module['memoryInitializerRequest'];\n                    var response = request.response;\n                    if (request.status !== 200 && request.status !== 0) {\n                        var data = tryParseAsDataURI(Module['memoryInitializerRequestURL']);\n                        if (data) {\n                            response = data.buffer;\n                        }\n                        else {\n                            console.warn('a problem seems to have happened with Module.memoryInitializerRequest, status: ' +\n                                request.status +\n                                ', retrying ' +\n                                memoryInitializer);\n                            doBrowserLoad();\n                            return;\n                        }\n                    }\n                    applyMemoryInitializer(response);\n                };\n                if (Module['memoryInitializerRequest'].response) {\n                    setTimeout(useRequest, 0);\n                }\n                else {\n                    Module['memoryInitializerRequest'].addEventListener('load', useRequest);\n                }\n            }\n            else {\n                doBrowserLoad();\n            }\n        }\n    }\n    var calledRun;\n    function ExitStatus(status) {\n        this.name = 'ExitStatus';\n        this.message = 'Program terminated with exit(' + status + ')';\n        this.status = status;\n    }\n    dependenciesFulfilled = function runCaller() {\n        if (!calledRun)\n            run();\n        if (!calledRun)\n            dependenciesFulfilled = runCaller;\n    };\n    function run(args) {\n        args = args || arguments_;\n        if (runDependencies > 0) {\n            return;\n        }\n        preRun();\n        if (runDependencies > 0)\n            return;\n        function doRun() {\n            if (calledRun)\n                return;\n            calledRun = true;\n            Module['calledRun'] = true;\n            if (ABORT)\n                return;\n            initRuntime();\n            preMain();\n            if (Module['onRuntimeInitialized'])\n                Module['onRuntimeInitialized']();\n            postRun();\n        }\n        if (Module['setStatus']) {\n            Module['setStatus']('Running...');\n            setTimeout(function () {\n                setTimeout(function () {\n                    Module['setStatus']('');\n                }, 1);\n                doRun();\n            }, 1);\n        }\n        else {\n            doRun();\n        }\n    }\n    Module['run'] = run;\n    if (Module['preInit']) {\n        if (typeof Module['preInit'] == 'function')\n            Module['preInit'] = [Module['preInit']];\n        while (Module['preInit'].length > 0) {\n            Module['preInit'].pop()();\n        }\n    }\n    noExitRuntime = true;\n    run();\n    return Module;\n}\n//# sourceMappingURL=laz-perf.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport getModule from \"../../libs/laz-perf/laz-perf.js\";\nlet Module = null;\nconst POINT_FORMAT_READERS = {\n    0: (dv) => {\n        return {\n            position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],\n            intensity: dv.getUint16(12, true),\n            classification: dv.getUint8(15)\n        };\n    },\n    1: (dv) => {\n        return {\n            position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],\n            intensity: dv.getUint16(12, true),\n            classification: dv.getUint8(15)\n        };\n    },\n    2: (dv) => {\n        return {\n            position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],\n            intensity: dv.getUint16(12, true),\n            classification: dv.getUint8(15),\n            color: [dv.getUint16(20, true), dv.getUint16(22, true), dv.getUint16(24, true)]\n        };\n    },\n    3: (dv) => {\n        return {\n            position: [dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],\n            intensity: dv.getUint16(12, true),\n            classification: dv.getUint8(15),\n            color: [dv.getUint16(28, true), dv.getUint16(30, true), dv.getUint16(32, true)]\n        };\n    }\n};\n/**\n * Reads incoming binary data depends on the Type parameter\n * @param buf\n * @param Type\n * @param offset\n * @param count\n * @returns number | number[] from incoming binary data\n */\nfunction readAs(buf, Type = {}, offset, count) {\n    count = count === undefined || count === 0 ? 1 : count;\n    const sub = buf.slice(offset, offset + Type.BYTES_PER_ELEMENT * count);\n    const r = new Type(sub);\n    if (count === 1) {\n        return r[0];\n    }\n    const ret = [];\n    for (let i = 0; i < count; i++) {\n        ret.push(r[i]);\n    }\n    return ret;\n}\n/**\n * Parsing of header's attributes\n * @param arraybuffer\n * @returns header as LASHeader\n */\nfunction parseLASHeader(arraybuffer) {\n    let start = 32 * 3 + 35;\n    const o = {\n        pointsOffset: readAs(arraybuffer, Uint32Array, 32 * 3),\n        pointsFormatId: readAs(arraybuffer, Uint8Array, 32 * 3 + 8),\n        pointsStructSize: readAs(arraybuffer, Uint16Array, 32 * 3 + 8 + 1),\n        pointsCount: readAs(arraybuffer, Uint32Array, 32 * 3 + 11),\n        scale: readAs(arraybuffer, Float64Array, start, 3)\n    };\n    start += 24; // 8*3\n    o.offset = readAs(arraybuffer, Float64Array, start, 3);\n    start += 24;\n    const bounds = readAs(arraybuffer, Float64Array, start, 6);\n    start += 48; // 8*6;\n    o.maxs = [bounds[0], bounds[2], bounds[4]];\n    o.mins = [bounds[1], bounds[3], bounds[5]];\n    const colorPointFormats = new Set([2, 3]);\n    o.hasColor = colorPointFormats.has(o.pointsFormatId & 0x3f);\n    return o;\n}\n// LAS Loader\n// Loads uncompressed files\n//\nclass LASLoader {\n    arraybuffer;\n    readOffset = 0;\n    header = {\n        pointsOffset: 0,\n        pointsFormatId: 0,\n        pointsStructSize: 0,\n        pointsCount: 0,\n        scale: [0, 0, 0],\n        offset: [0, 0, 0],\n        maxs: [0],\n        mins: [0],\n        totalToRead: 0,\n        totalRead: 0,\n        versionAsString: '',\n        isCompressed: true,\n        hasColor: false\n    };\n    constructor(arraybuffer) {\n        this.arraybuffer = arraybuffer;\n    }\n    /**\n     * @returns boolean\n     */\n    open() {\n        // Nothing needs to be done to open this\n        return true;\n    }\n    /**\n     * Parsing of incoming binary\n     * @returns LASHeader\n     */\n    getHeader() {\n        this.header = parseLASHeader(this.arraybuffer);\n        return this.header;\n    }\n    /**\n     * Reading data\n     * @param count\n     * @param skip\n     * @returns new ArrayBuffer, count, hasMoreData\n     */\n    readData(count, skip) {\n        const { header, arraybuffer } = this;\n        if (!header) {\n            throw new Error('Cannot start reading data till a header request is issued');\n        }\n        let { readOffset } = this;\n        let start;\n        if (skip <= 1) {\n            count = Math.min(count, header.pointsCount - readOffset);\n            start = header.pointsOffset + readOffset * header.pointsStructSize;\n            const end = start + count * header.pointsStructSize;\n            readOffset += count;\n            this.readOffset = readOffset;\n            return {\n                buffer: arraybuffer.slice(start, end),\n                count,\n                hasMoreData: readOffset < header.pointsCount\n            };\n        }\n        const pointsToRead = Math.min(count * skip, header.pointsCount - readOffset);\n        const bufferSize = Math.ceil(pointsToRead / skip);\n        let pointsRead = 0;\n        const buf = new Uint8Array(bufferSize * header.pointsStructSize);\n        for (let i = 0; i < pointsToRead; i++) {\n            if (i % skip === 0) {\n                start = header.pointsOffset + readOffset * header.pointsStructSize;\n                const src = new Uint8Array(arraybuffer, start, header.pointsStructSize);\n                buf.set(src, pointsRead * header.pointsStructSize);\n                pointsRead++;\n            }\n            readOffset++;\n        }\n        this.readOffset = readOffset;\n        return {\n            buffer: buf.buffer,\n            count: pointsRead,\n            hasMoreData: readOffset < header.pointsCount\n        };\n    }\n    /**\n     * Method which brings data to null to close the file\n     * @returns\n     */\n    close() {\n        // @ts-ignore Possibly null\n        this.arraybuffer = null;\n        return true;\n    }\n}\n/**\n * LAZ Loader\n * Uses NaCL module to load LAZ files\n */\nclass LAZLoader {\n    arraybuffer;\n    instance = null; // LASZip instance\n    header = null;\n    constructor(arraybuffer) {\n        this.arraybuffer = arraybuffer;\n        if (!Module) {\n            // Avoid executing laz-perf on import\n            Module = getModule();\n        }\n    }\n    /**\n     * Opens the file\n     * @returns boolean\n     */\n    open() {\n        try {\n            const { arraybuffer } = this;\n            this.instance = new Module.LASZip();\n            const abInt = new Uint8Array(arraybuffer);\n            const buf = Module._malloc(arraybuffer.byteLength);\n            this.instance.arraybuffer = arraybuffer;\n            this.instance.buf = buf;\n            Module.HEAPU8.set(abInt, buf);\n            this.instance.open(buf, arraybuffer.byteLength);\n            this.instance.readOffset = 0;\n            return true;\n        }\n        catch (error) {\n            throw new Error(`Failed to open file: ${error.message}`);\n        }\n    }\n    getHeader() {\n        if (!this.instance) {\n            throw new Error('You need to open the file before trying to read header');\n        }\n        try {\n            const header = parseLASHeader(this.instance.arraybuffer);\n            header.pointsFormatId &= 0x3f;\n            this.header = header;\n            return header;\n        }\n        catch (error) {\n            throw new Error(`Failed to get header: ${error.message}`);\n        }\n    }\n    /**\n     * @param count\n     * @param skip\n     * @returns Data\n     */\n    readData(count, skip) {\n        if (!this.instance) {\n            throw new Error('You need to open the file before trying to read stuff');\n        }\n        const { header, instance } = this;\n        if (!header) {\n            throw new Error('You need to query header before reading, I maintain state that way, sorry :(');\n        }\n        try {\n            const pointsToRead = Math.min(count * skip, header.pointsCount - instance.readOffset);\n            const bufferSize = Math.ceil(pointsToRead / skip);\n            let pointsRead = 0;\n            const thisBuf = new Uint8Array(bufferSize * header.pointsStructSize);\n            const bufRead = Module._malloc(header.pointsStructSize);\n            for (let i = 0; i < pointsToRead; i++) {\n                instance.getPoint(bufRead);\n                if (i % skip === 0) {\n                    const a = new Uint8Array(Module.HEAPU8.buffer, bufRead, header.pointsStructSize);\n                    thisBuf.set(a, pointsRead * header.pointsStructSize);\n                    pointsRead++;\n                }\n                instance.readOffset++;\n            }\n            Module._free(bufRead);\n            return {\n                buffer: thisBuf.buffer,\n                count: pointsRead,\n                hasMoreData: instance.readOffset < header.pointsCount\n            };\n        }\n        catch (error) {\n            throw new Error(`Failed to read data: ${error.message}`);\n        }\n    }\n    /**\n     * Deletes the instance\n     * @returns boolean\n     */\n    close() {\n        try {\n            if (this.instance !== null) {\n                Module._free(this.instance.buf);\n                this.instance.delete();\n                this.instance = null;\n            }\n            return true;\n        }\n        catch (error) {\n            throw new Error(`Failed to close file: ${error.message}`);\n        }\n    }\n}\n/**\n * Helper class: Decodes LAS records into points\n */\nclass LASDecoder {\n    arrayb;\n    decoder;\n    pointsCount;\n    pointSize;\n    scale;\n    offset;\n    mins;\n    maxs;\n    constructor(buffer, len, header) {\n        this.arrayb = buffer;\n        this.decoder = POINT_FORMAT_READERS[header.pointsFormatId];\n        this.pointsCount = len;\n        this.pointSize = header.pointsStructSize;\n        this.scale = header.scale;\n        this.offset = header.offset;\n        this.mins = header.mins;\n        this.maxs = header.maxs;\n    }\n    /**\n     * Decodes data depends on this point size\n     * @param index\n     * @returns New object\n     */\n    getPoint(index) {\n        if (index < 0 || index >= this.pointsCount) {\n            throw new Error('Point index out of range');\n        }\n        const dv = new DataView(this.arrayb, index * this.pointSize, this.pointSize);\n        return this.decoder(dv);\n    }\n}\n/**\n * A single consistent interface for loading LAS/LAZ files\n */\nexport class LASFile {\n    arraybuffer;\n    formatId = 0;\n    loader;\n    isCompressed = true;\n    isOpen = false;\n    version = 0;\n    versionAsString = '';\n    constructor(arraybuffer) {\n        this.arraybuffer = arraybuffer;\n        if (this.determineVersion() > 13) {\n            throw new Error('Only file versions <= 1.3 are supported at this time');\n        }\n        this.determineFormat();\n        if (POINT_FORMAT_READERS[this.formatId] === undefined) {\n            throw new Error('The point format ID is not supported');\n        }\n        this.loader = this.isCompressed\n            ? new LAZLoader(this.arraybuffer)\n            : new LASLoader(this.arraybuffer);\n    }\n    /**\n     * Determines format in parameters of LASHeaer\n     */\n    determineFormat() {\n        const formatId = readAs(this.arraybuffer, Uint8Array, 32 * 3 + 8);\n        const bit7 = (formatId & 0x80) >> 7;\n        const bit6 = (formatId & 0x40) >> 6;\n        if (bit7 === 1 && bit6 === 1) {\n            throw new Error('Old style compression not supported');\n        }\n        this.formatId = formatId & 0x3f;\n        this.isCompressed = bit7 === 1 || bit6 === 1;\n    }\n    /**\n     * Determines version\n     * @returns version\n     */\n    determineVersion() {\n        const ver = new Int8Array(this.arraybuffer, 24, 2);\n        this.version = ver[0] * 10 + ver[1];\n        this.versionAsString = `${ver[0]}.${ver[1]}`;\n        return this.version;\n    }\n    /**\n     * Reads if the file is open\n     * @returns boolean\n     */\n    open() {\n        if (this.loader.open()) {\n            this.isOpen = true;\n        }\n    }\n    /**\n     * Gets the header\n     * @returns Header\n     */\n    getHeader() {\n        return this.loader.getHeader();\n    }\n    /**\n     * @param count\n     * @param skip\n     * @returns Data\n     */\n    readData(count, skip) {\n        return this.loader.readData(count, skip);\n    }\n    /**\n     * Closes the file\n     */\n    close() {\n        if (this.loader.close()) {\n            this.isOpen = false;\n        }\n    }\n    /**\n     */\n    getUnpacker() {\n        return LASDecoder;\n    }\n}\nexport const LASModuleWasLoaded = false;\n/* eslint no-use-before-define: 2 */\n//# sourceMappingURL=laslaz-decoder.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { getMeshBoundingBox /* , convertMeshToTable */ } from '@loaders.gl/schema-utils';\nimport { getLASSchema } from \"../get-las-schema.js\";\nimport { LASFile } from \"./laslaz-decoder.js\";\n/**\n * Parsing of .las file\n * @param arrayBuffer\n * @param options\n * @returns LASMesh\n */\nexport function parseLAS(arrayBuffer, options) {\n    return parseLASMesh(arrayBuffer, options);\n    // This code breaks pointcloud example on the website\n    // const mesh = parseLASMesh(arrayBuffer, options);\n    // return convertMeshToTable(mesh, options?.las?.shape || 'mesh') as LASMesh | ArrowTable | ColumnarTable;\n}\n/**\n * Parsing of .las file\n * @param arrayBuffer\n * @param options\n * @returns LASHeader\n */\nfunction parseLASMesh(arrayBuffer, options = {}) {\n    let pointIndex = 0;\n    let positions;\n    let colors;\n    let intensities;\n    let classifications;\n    let originalHeader;\n    const lasMesh = {\n        loader: 'las',\n        loaderData: {},\n        // shape: 'mesh',\n        schema: { fields: [], metadata: {} },\n        header: {\n            vertexCount: 0,\n            boundingBox: [\n                [0, 0, 0],\n                [0, 0, 0]\n            ]\n        },\n        attributes: {},\n        topology: 'point-list',\n        mode: 0 // GL.POINTS\n    };\n    /* eslint-disable max-statements */\n    // @ts-ignore Possibly undefined\n    parseLASChunked(arrayBuffer, options.las?.skip, (decoder = {}, lasHeader) => {\n        if (!originalHeader) {\n            originalHeader = lasHeader;\n            const total = lasHeader.totalToRead;\n            const PositionsType = options.las?.fp64 ? Float64Array : Float32Array;\n            positions = new PositionsType(total * 3);\n            // laslaz-decoder.js `pointFormatReaders`\n            colors = lasHeader.hasColor ? new Uint8Array(total * 4) : null;\n            intensities = new Uint16Array(total);\n            classifications = new Uint8Array(total);\n            lasMesh.loaderData = lasHeader;\n            lasMesh.attributes = {\n                POSITION: { value: positions, size: 3 },\n                // non-gltf attributes, use non-capitalized names for now\n                intensity: { value: intensities, size: 1 },\n                classification: { value: classifications, size: 1 }\n            };\n            if (colors) {\n                lasMesh.attributes.COLOR_0 = { value: colors, size: 4 };\n            }\n        }\n        const batchSize = decoder.pointsCount;\n        const { scale: [scaleX, scaleY, scaleZ], offset: [offsetX, offsetY, offsetZ] } = lasHeader;\n        const twoByteColor = detectTwoByteColors(decoder, batchSize, options.las?.colorDepth);\n        for (let i = 0; i < batchSize; i++) {\n            const { position, color, intensity, classification } = decoder.getPoint(i);\n            positions[pointIndex * 3] = position[0] * scaleX + offsetX;\n            positions[pointIndex * 3 + 1] = position[1] * scaleY + offsetY;\n            positions[pointIndex * 3 + 2] = position[2] * scaleZ + offsetZ;\n            if (color && colors) {\n                if (twoByteColor) {\n                    colors[pointIndex * 4] = color[0] / 256;\n                    colors[pointIndex * 4 + 1] = color[1] / 256;\n                    colors[pointIndex * 4 + 2] = color[2] / 256;\n                }\n                else {\n                    colors[pointIndex * 4] = color[0];\n                    colors[pointIndex * 4 + 1] = color[1];\n                    colors[pointIndex * 4 + 2] = color[2];\n                }\n                colors[pointIndex * 4 + 3] = 255;\n            }\n            intensities[pointIndex] = intensity;\n            classifications[pointIndex] = classification;\n            pointIndex++;\n        }\n        const meshBatch = {\n            ...lasMesh,\n            header: {\n                vertexCount: lasHeader.totalRead\n            },\n            progress: lasHeader.totalRead / lasHeader.totalToRead\n        };\n        options?.onProgress?.(meshBatch);\n    });\n    /* eslint-enable max-statements */\n    lasMesh.header = {\n        vertexCount: originalHeader.totalToRead,\n        boundingBox: getMeshBoundingBox(lasMesh?.attributes || {})\n    };\n    if (lasMesh) {\n        lasMesh.schema = getLASSchema(lasMesh.loaderData, lasMesh.attributes);\n    }\n    return lasMesh;\n}\n/**\n * parse laz data\n * @param rawData\n * @param skip\n * @param onParseData\n * @return parsed point cloud\n */\n/* eslint-enable max-statements */\nexport function parseLASChunked(rawData, skip, onParseData = {}) {\n    const dataHandler = new LASFile(rawData);\n    try {\n        // open data\n        dataHandler.open();\n        const header = dataHandler.getHeader();\n        // start loading\n        const Unpacker = dataHandler.getUnpacker();\n        const totalToRead = Math.ceil(header.pointsCount / Math.max(1, skip));\n        header.totalToRead = totalToRead;\n        let totalRead = 0;\n        /* eslint-disable no-constant-condition */\n        while (true) {\n            const chunk = dataHandler.readData(1000 * 100, skip);\n            totalRead += chunk.count;\n            header.totalRead = totalRead;\n            const unpacker = new Unpacker(chunk.buffer, chunk.count, header);\n            // surface unpacker and progress via call back\n            // use unpacker.pointsCount and unpacker.getPoint(i) to handle data in app\n            onParseData(unpacker, header);\n            if (!chunk.hasMoreData || totalRead >= totalToRead) {\n                break;\n            }\n        }\n    }\n    catch (e) {\n        throw e;\n    }\n    finally {\n        dataHandler.close();\n    }\n}\n/**\n * @param decoder\n * @param batchSize\n * @param colorDepth\n * @returns boolean\n */\nfunction detectTwoByteColors(decoder = {}, batchSize, colorDepth) {\n    let twoByteColor = false;\n    switch (colorDepth) {\n        case 8:\n            twoByteColor = false;\n            break;\n        case 16:\n            twoByteColor = true;\n            break;\n        case 'auto':\n            if (decoder.getPoint(0).color) {\n                for (let i = 0; i < batchSize; i++) {\n                    const { color } = decoder.getPoint(i);\n                    // eslint-disable-next-line max-depth\n                    if (color[0] > 255 || color[1] > 255 || color[2] > 255) {\n                        twoByteColor = true;\n                    }\n                }\n            }\n            break;\n        default:\n            // eslint-disable-next-line\n            console.warn('las: illegal value for options.las.colorDepth');\n            break;\n    }\n    return twoByteColor;\n}\n//# sourceMappingURL=parse-las.js.map","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { LASWorkerLoader } from \"./las-loader.js\";\nimport { parseLAS } from \"./lib/laz-perf/parse-las.js\";\n/**\n * Loader for the LAS (LASer) point cloud format\n * @note Does not support LAS v1.4\n */\nexport const LAZPerfLoader = {\n    ...LASWorkerLoader,\n    parse: async (arrayBuffer, options) => parseLAS(arrayBuffer, options),\n    parseSync: (arrayBuffer, options) => parseLAS(arrayBuffer, options)\n};\n//# sourceMappingURL=lazperf-loader.js.map","export default function (defs) {\n  defs('EPSG:4326', '+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees');\n  defs('EPSG:4269', '+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees');\n  defs('EPSG:3857', '+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs');\n  // UTM WGS84\n  for (var i = 1; i <= 60; ++i) {\n    defs('EPSG:' + (32600 + i), '+proj=utm +zone=' + i + ' +datum=WGS84 +units=m');\n    defs('EPSG:' + (32700 + i), '+proj=utm +zone=' + i + ' +south +datum=WGS84 +units=m');\n  }\n  defs('EPSG:5041', '+title=WGS 84 / UPS North (E,N) +proj=stere +lat_0=90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m');\n  defs('EPSG:5042', '+title=WGS 84 / UPS South (E,N) +proj=stere +lat_0=-90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m');\n\n  defs.WGS84 = defs['EPSG:4326'];\n  defs['EPSG:3785'] = defs['EPSG:3857']; // maintain backward compat, official code is 3857\n  defs.GOOGLE = defs['EPSG:3857'];\n  defs['EPSG:900913'] = defs['EPSG:3857'];\n  defs['EPSG:102113'] = defs['EPSG:3857'];\n}\n","export var PJD_3PARAM = 1;\nexport var PJD_7PARAM = 2;\nexport var PJD_GRIDSHIFT = 3;\nexport var PJD_WGS84 = 4; // WGS84 or equivalent\nexport var PJD_NODATUM = 5; // WGS84 or equivalent\nexport var SRS_WGS84_SEMIMAJOR = 6378137.0; // only used in grid shift transforms\nexport var SRS_WGS84_SEMIMINOR = 6356752.314; // only used in grid shift transforms\nexport var SRS_WGS84_ESQUARED = 0.0066943799901413165; // only used in grid shift transforms\nexport var SEC_TO_RAD = 4.84813681109535993589914102357e-6;\nexport var HALF_PI = Math.PI / 2;\n// ellipoid pj_set_ell.c\nexport var SIXTH = 0.1666666666666666667;\n/* 1/6 */\nexport var RA4 = 0.04722222222222222222;\n/* 17/360 */\nexport var RA6 = 0.02215608465608465608;\nexport var EPSLN = 1.0e-10;\n// you'd think you could use Number.EPSILON above but that makes\n// Mollweide get into an infinate loop.\n\nexport var D2R = 0.01745329251994329577;\nexport var R2D = 57.29577951308232088;\nexport var FORTPI = Math.PI / 4;\nexport var TWO_PI = Math.PI * 2;\n// SPI is slightly greater than Math.PI, so values that exceed the -180..180\n// degree range by a tiny amount don't get wrapped. This prevents points that\n// have drifted from their original location along the 180th meridian (due to\n// floating point error) from changing their sign.\nexport var SPI = 3.14159265359;\n","var primeMeridian = {};\n\nprimeMeridian.greenwich = 0.0; // \"0dE\",\nprimeMeridian.lisbon = -9.131906111111; // \"9d07'54.862\\\"W\",\nprimeMeridian.paris = 2.337229166667; // \"2d20'14.025\\\"E\",\nprimeMeridian.bogota = -74.080916666667; // \"74d04'51.3\\\"W\",\nprimeMeridian.madrid = -3.687938888889; // \"3d41'16.58\\\"W\",\nprimeMeridian.rome = 12.452333333333; // \"12d27'8.4\\\"E\",\nprimeMeridian.bern = 7.439583333333; // \"7d26'22.5\\\"E\",\nprimeMeridian.jakarta = 106.807719444444; // \"106d48'27.79\\\"E\",\nprimeMeridian.ferro = -17.666666666667; // \"17d40'W\",\nprimeMeridian.brussels = 4.367975; // \"4d22'4.71\\\"E\",\nprimeMeridian.stockholm = 18.058277777778; // \"18d3'29.8\\\"E\",\nprimeMeridian.athens = 23.7163375; // \"23d42'58.815\\\"E\",\nprimeMeridian.oslo = 10.722916666667; // \"10d43'22.5\\\"E\"\n\nexport default primeMeridian;\n","export default {\n  mm: { to_meter: 0.001 },\n  cm: { to_meter: 0.01 },\n  ft: { to_meter: 0.3048 },\n  'us-ft': { to_meter: 1200 / 3937 },\n  fath: { to_meter: 1.8288 },\n  kmi: { to_meter: 1852 },\n  'us-ch': { to_meter: 20.1168402336805 },\n  'us-mi': { to_meter: 1609.34721869444 },\n  km: { to_meter: 1000 },\n  'ind-ft': { to_meter: 0.30479841 },\n  'ind-yd': { to_meter: 0.91439523 },\n  mi: { to_meter: 1609.344 },\n  yd: { to_meter: 0.9144 },\n  ch: { to_meter: 20.1168 },\n  link: { to_meter: 0.201168 },\n  dm: { to_meter: 0.1 },\n  in: { to_meter: 0.0254 },\n  'ind-ch': { to_meter: 20.11669506 },\n  'us-in': { to_meter: 0.025400050800101 },\n  'us-yd': { to_meter: 0.914401828803658 }\n};\n","var ignoredChar = /[\\s_\\-\\/\\(\\)]/g;\nexport default function match(obj, key) {\n  if (obj[key]) {\n    return obj[key];\n  }\n  var keys = Object.keys(obj);\n  var lkey = key.toLowerCase().replace(ignoredChar, '');\n  var i = -1;\n  var testkey, processedKey;\n  while (++i < keys.length) {\n    testkey = keys[i];\n    processedKey = testkey.toLowerCase().replace(ignoredChar, '');\n    if (processedKey === lkey) {\n      return obj[testkey];\n    }\n  }\n}\n","import { D2R } from './constants/values';\nimport PrimeMeridian from './constants/PrimeMeridian';\nimport units from './constants/units';\nimport match from './match';\n\n/**\n * @param {string} defData\n * @returns {import('./defs').ProjectionDefinition}\n */\nexport default function (defData) {\n  /** @type {import('./defs').ProjectionDefinition} */\n  var self = {};\n  var paramObj = defData.split('+').map(function (v) {\n    return v.trim();\n  }).filter(function (a) {\n    return a;\n  }).reduce(function (p, a) {\n    /** @type {Array<?>} */\n    var split = a.split('=');\n    split.push(true);\n    p[split[0].toLowerCase()] = split[1];\n    return p;\n  }, {});\n  var paramName, paramVal, paramOutname;\n  var params = {\n    proj: 'projName',\n    datum: 'datumCode',\n    rf: function (v) {\n      self.rf = parseFloat(v);\n    },\n    lat_0: function (v) {\n      self.lat0 = v * D2R;\n    },\n    lat_1: function (v) {\n      self.lat1 = v * D2R;\n    },\n    lat_2: function (v) {\n      self.lat2 = v * D2R;\n    },\n    lat_ts: function (v) {\n      self.lat_ts = v * D2R;\n    },\n    lon_0: function (v) {\n      self.long0 = v * D2R;\n    },\n    lon_1: function (v) {\n      self.long1 = v * D2R;\n    },\n    lon_2: function (v) {\n      self.long2 = v * D2R;\n    },\n    alpha: function (v) {\n      self.alpha = parseFloat(v) * D2R;\n    },\n    gamma: function (v) {\n      self.rectified_grid_angle = parseFloat(v) * D2R;\n    },\n    lonc: function (v) {\n      self.longc = v * D2R;\n    },\n    x_0: function (v) {\n      self.x0 = parseFloat(v);\n    },\n    y_0: function (v) {\n      self.y0 = parseFloat(v);\n    },\n    k_0: function (v) {\n      self.k0 = parseFloat(v);\n    },\n    k: function (v) {\n      self.k0 = parseFloat(v);\n    },\n    a: function (v) {\n      self.a = parseFloat(v);\n    },\n    b: function (v) {\n      self.b = parseFloat(v);\n    },\n    r: function (v) {\n      self.a = self.b = parseFloat(v);\n    },\n    r_a: function () {\n      self.R_A = true;\n    },\n    zone: function (v) {\n      self.zone = parseInt(v, 10);\n    },\n    south: function () {\n      self.utmSouth = true;\n    },\n    towgs84: function (v) {\n      self.datum_params = v.split(',').map(function (a) {\n        return parseFloat(a);\n      });\n    },\n    to_meter: function (v) {\n      self.to_meter = parseFloat(v);\n    },\n    units: function (v) {\n      self.units = v;\n      var unit = match(units, v);\n      if (unit) {\n        self.to_meter = unit.to_meter;\n      }\n    },\n    from_greenwich: function (v) {\n      self.from_greenwich = v * D2R;\n    },\n    pm: function (v) {\n      var pm = match(PrimeMeridian, v);\n      self.from_greenwich = (pm ? pm : parseFloat(v)) * D2R;\n    },\n    nadgrids: function (v) {\n      if (v === '@null') {\n        self.datumCode = 'none';\n      } else {\n        self.nadgrids = v;\n      }\n    },\n    axis: function (v) {\n      var legalAxis = 'ewnsud';\n      if (v.length === 3 && legalAxis.indexOf(v.substr(0, 1)) !== -1 && legalAxis.indexOf(v.substr(1, 1)) !== -1 && legalAxis.indexOf(v.substr(2, 1)) !== -1) {\n        self.axis = v;\n      }\n    },\n    approx: function () {\n      self.approx = true;\n    },\n    over: function () {\n      self.over = true;\n    }\n  };\n  for (paramName in paramObj) {\n    paramVal = paramObj[paramName];\n    if (paramName in params) {\n      paramOutname = params[paramName];\n      if (typeof paramOutname === 'function') {\n        paramOutname(paramVal);\n      } else {\n        self[paramOutname] = paramVal;\n      }\n    } else {\n      self[paramName] = paramVal;\n    }\n  }\n  if (typeof self.datumCode === 'string' && self.datumCode !== 'WGS84') {\n    self.datumCode = self.datumCode.toLowerCase();\n  }\n  self['projStr'] = defData;\n  return self;\n}\n","class PROJJSONBuilderBase {\n  static getId(node) {\n    const idNode = node.find((child) => Array.isArray(child) && child[0] === 'ID');\n    if (idNode && idNode.length >= 3) {\n      return {\n        authority: idNode[1],\n        code: parseInt(idNode[2], 10),\n      };\n    }\n    return null;\n  }\n\n  static convertUnit(node, type = 'unit') {\n    if (!node || node.length < 3) {\n      return { type, name: 'unknown', conversion_factor: null };\n    }\n\n    const name = node[1];\n    const conversionFactor = parseFloat(node[2]) || null;\n\n    const idNode = node.find((child) => Array.isArray(child) && child[0] === 'ID');\n    const id = idNode\n      ? {\n        authority: idNode[1],\n        code: parseInt(idNode[2], 10),\n      }\n      : null;\n\n    return {\n      type,\n      name,\n      conversion_factor: conversionFactor,\n      id,\n    };\n  }\n\n  static convertAxis(node) {\n    const name = node[1] || 'Unknown';\n\n    // Determine the direction\n    let direction;\n    const abbreviationMatch = name.match(/^\\((.)\\)$/); // Match abbreviations like \"(E)\" or \"(N)\"\n    if (abbreviationMatch) {\n      // Use the abbreviation to determine the direction\n      const abbreviation = abbreviationMatch[1].toUpperCase();\n      if (abbreviation === 'E') direction = 'east';\n      else if (abbreviation === 'N') direction = 'north';\n      else if (abbreviation === 'U') direction = 'up';\n      else if (node[2]) direction = node[2];\n      else throw new Error(`Unknown axis abbreviation: ${abbreviation}`);\n    } else {\n      // Use the explicit direction provided in the AXIS node\n      direction = node[2] || 'unknown';\n    }\n\n    const orderNode = node.find((child) => Array.isArray(child) && child[0] === 'ORDER');\n    const order = orderNode ? parseInt(orderNode[1], 10) : null;\n\n    const unitNode = node.find(\n      (child) =>\n        Array.isArray(child) &&\n        (child[0] === 'LENGTHUNIT' || child[0] === 'ANGLEUNIT' || child[0] === 'SCALEUNIT')\n    );\n    const unit = this.convertUnit(unitNode);\n\n    return {\n      name,\n      direction, // Use the valid PROJJSON direction value\n      unit,\n      order,\n    };\n  }\n\n  static extractAxes(node) {\n    return node\n      .filter((child) => Array.isArray(child) && child[0] === 'AXIS')\n      .map((axis) => this.convertAxis(axis))\n      .sort((a, b) => (a.order || 0) - (b.order || 0)); // Sort by the \"order\" property\n  }\n\n  static convert(node, result = {}) {\n\n    switch (node[0]) {\n      case 'PROJCRS':\n        result.type = 'ProjectedCRS';\n        result.name = node[1];\n        result.base_crs = node.find((child) => Array.isArray(child) && child[0] === 'BASEGEOGCRS')\n          ? this.convert(node.find((child) => Array.isArray(child) && child[0] === 'BASEGEOGCRS'))\n          : null;\n        result.conversion = node.find((child) => Array.isArray(child) && child[0] === 'CONVERSION')\n          ? this.convert(node.find((child) => Array.isArray(child) && child[0] === 'CONVERSION'))\n          : null;\n\n        const csNode = node.find((child) => Array.isArray(child) && child[0] === 'CS');\n        if (csNode) {\n          result.coordinate_system = {\n            type: csNode[1],\n            axis: this.extractAxes(node),\n          };\n        }\n\n        const lengthUnitNode = node.find((child) => Array.isArray(child) && child[0] === 'LENGTHUNIT');\n        if (lengthUnitNode) {\n          const unit = this.convertUnit(lengthUnitNode);\n          result.coordinate_system.unit = unit; // Add unit to coordinate_system\n        }\n\n        result.id = this.getId(node);\n        break;\n\n      case 'BASEGEOGCRS':\n      case 'GEOGCRS':\n      case 'GEODCRS':\n        result.type = node[0] === 'GEODCRS' ? 'GeodeticCRS' : 'GeographicCRS';\n        result.name = node[1];\n      \n        // Handle DATUM or ENSEMBLE\n        const datumOrEnsembleNode = node.find(\n          (child) => Array.isArray(child) && (child[0] === 'DATUM' || child[0] === 'ENSEMBLE')\n        );\n        if (datumOrEnsembleNode) {\n          const datumOrEnsemble = this.convert(datumOrEnsembleNode);\n          if (datumOrEnsembleNode[0] === 'ENSEMBLE') {\n            result.datum_ensemble = datumOrEnsemble;\n          } else {\n            result.datum = datumOrEnsemble;\n          }\n          const primem = node.find((child) => Array.isArray(child) && child[0] === 'PRIMEM');\n          if (primem && primem[1] !== 'Greenwich') {\n            datumOrEnsemble.prime_meridian = {\n              name: primem[1],\n              longitude: parseFloat(primem[2]),\n            }\n          }\n        }\n      \n        result.coordinate_system = {\n          type: 'ellipsoidal',\n          axis: this.extractAxes(node),\n        };\n      \n        result.id = this.getId(node);\n        break;\n\n      case 'DATUM':\n        result.type = 'GeodeticReferenceFrame';\n        result.name = node[1];\n        result.ellipsoid = node.find((child) => Array.isArray(child) && child[0] === 'ELLIPSOID')\n          ? this.convert(node.find((child) => Array.isArray(child) && child[0] === 'ELLIPSOID'))\n          : null;\n        break;\n      \n      case 'ENSEMBLE':\n        result.type = 'DatumEnsemble';\n        result.name = node[1];\n      \n        // Extract ensemble members\n        result.members = node\n          .filter((child) => Array.isArray(child) && child[0] === 'MEMBER')\n          .map((member) => ({\n            type: 'DatumEnsembleMember',\n            name: member[1],\n            id: this.getId(member), // Extract ID as { authority, code }\n          }));\n      \n        // Extract accuracy\n        const accuracyNode = node.find((child) => Array.isArray(child) && child[0] === 'ENSEMBLEACCURACY');\n        if (accuracyNode) {\n          result.accuracy = parseFloat(accuracyNode[1]);\n        }\n      \n        // Extract ellipsoid\n        const ellipsoidNode = node.find((child) => Array.isArray(child) && child[0] === 'ELLIPSOID');\n        if (ellipsoidNode) {\n          result.ellipsoid = this.convert(ellipsoidNode); // Convert the ellipsoid node\n        }\n      \n        // Extract identifier for the ensemble\n        result.id = this.getId(node);\n        break;\n\n      case 'ELLIPSOID':\n        result.type = 'Ellipsoid';\n        result.name = node[1];\n        result.semi_major_axis = parseFloat(node[2]);\n        result.inverse_flattening = parseFloat(node[3]);\n        const units = node.find((child) => Array.isArray(child) && child[0] === 'LENGTHUNIT')\n          ? this.convert(node.find((child) => Array.isArray(child) && child[0] === 'LENGTHUNIT'), result)\n          : null;\n        break;\n\n      case 'CONVERSION':\n        result.type = 'Conversion';\n        result.name = node[1];\n        result.method = node.find((child) => Array.isArray(child) && child[0] === 'METHOD')\n          ? this.convert(node.find((child) => Array.isArray(child) && child[0] === 'METHOD'))\n          : null;\n        result.parameters = node\n          .filter((child) => Array.isArray(child) && child[0] === 'PARAMETER')\n          .map((param) => this.convert(param));\n        break;\n\n      case 'METHOD':\n        result.type = 'Method';\n        result.name = node[1];\n        result.id = this.getId(node);\n        break;\n\n      case 'PARAMETER':\n        result.type = 'Parameter';\n        result.name = node[1];\n        result.value = parseFloat(node[2]);\n        result.unit = this.convertUnit(\n          node.find(\n            (child) =>\n              Array.isArray(child) &&\n              (child[0] === 'LENGTHUNIT' || child[0] === 'ANGLEUNIT' || child[0] === 'SCALEUNIT')\n          )\n        );\n        result.id = this.getId(node);\n        break;\n\n      case 'BOUNDCRS':\n        result.type = 'BoundCRS';\n\n        // Process SOURCECRS\n        const sourceCrsNode = node.find((child) => Array.isArray(child) && child[0] === 'SOURCECRS');\n        if (sourceCrsNode) {\n          const sourceCrsContent = sourceCrsNode.find((child) => Array.isArray(child));\n          result.source_crs = sourceCrsContent ? this.convert(sourceCrsContent) : null;\n        }\n\n        // Process TARGETCRS\n        const targetCrsNode = node.find((child) => Array.isArray(child) && child[0] === 'TARGETCRS');\n        if (targetCrsNode) {\n          const targetCrsContent = targetCrsNode.find((child) => Array.isArray(child));\n          result.target_crs = targetCrsContent ? this.convert(targetCrsContent) : null;\n        }\n\n        // Process ABRIDGEDTRANSFORMATION\n        const transformationNode = node.find((child) => Array.isArray(child) && child[0] === 'ABRIDGEDTRANSFORMATION');\n        if (transformationNode) {\n          result.transformation = this.convert(transformationNode);\n        } else {\n          result.transformation = null;\n        }\n        break;\n\n      case 'ABRIDGEDTRANSFORMATION':\n        result.type = 'Transformation';\n        result.name = node[1];\n        result.method = node.find((child) => Array.isArray(child) && child[0] === 'METHOD')\n          ? this.convert(node.find((child) => Array.isArray(child) && child[0] === 'METHOD'))\n          : null;\n\n        result.parameters = node\n          .filter((child) => Array.isArray(child) && (child[0] === 'PARAMETER' || child[0] === 'PARAMETERFILE'))\n          .map((param) => {\n            if (param[0] === 'PARAMETER') {\n              return this.convert(param);\n            } else if (param[0] === 'PARAMETERFILE') {\n              return {\n                name: param[1],\n                value: param[2],\n                id: {\n                  'authority': 'EPSG',\n                  'code': 8656\n                }\n              };\n            }\n          });\n\n        // Adjust the Scale difference parameter if present\n        if (result.parameters.length === 7) {\n          const scaleDifference = result.parameters[6];\n          if (scaleDifference.name === 'Scale difference') {\n            scaleDifference.value = Math.round((scaleDifference.value - 1) * 1e12) / 1e6;\n          }\n        }\n\n        result.id = this.getId(node);\n        break;\n      \n      case 'AXIS':\n        if (!result.coordinate_system) {\n          result.coordinate_system = { type: 'unspecified', axis: [] };\n        }\n        result.coordinate_system.axis.push(this.convertAxis(node));\n        break;\n      \n      case 'LENGTHUNIT':\n        const unit = this.convertUnit(node, 'LinearUnit');\n        if (result.coordinate_system && result.coordinate_system.axis) {\n          result.coordinate_system.axis.forEach((axis) => {\n            if (!axis.unit) {\n              axis.unit = unit;\n            }\n          });\n        }\n        if (unit.conversion_factor && unit.conversion_factor !== 1) {\n          if (result.semi_major_axis) {\n            result.semi_major_axis = {\n              value: result.semi_major_axis,\n              unit,\n            }\n          }\n        }\n        break;\n\n      default:\n        result.keyword = node[0];\n        break;\n    }\n\n    return result;\n  }\n}\n\nexport default PROJJSONBuilderBase;","import PROJJSONBuilderBase from './PROJJSONBuilderBase.js';\n\nclass PROJJSONBuilder2015 extends PROJJSONBuilderBase {\n  static convert(node, result = {}) {\n    super.convert(node, result);\n\n    // Skip `CS` and `USAGE` nodes for WKT2-2015\n    if (result.coordinate_system && result.coordinate_system.subtype === 'Cartesian') {\n      delete result.coordinate_system;\n    }\n    if (result.usage) {\n      delete result.usage;\n    }\n\n    return result;\n  }\n}\n\nexport default PROJJSONBuilder2015;","import PROJJSONBuilderBase from './PROJJSONBuilderBase.js';\n\nclass PROJJSONBuilder2019 extends PROJJSONBuilderBase {\n  static convert(node, result = {}) {\n    super.convert(node, result);\n\n    // Handle `CS` node for WKT2-2019\n    const csNode = node.find((child) => Array.isArray(child) && child[0] === 'CS');\n    if (csNode) {\n      result.coordinate_system = {\n        subtype: csNode[1],\n        axis: this.extractAxes(node),\n      };\n    }\n\n    // Handle `USAGE` node for WKT2-2019\n    const usageNode = node.find((child) => Array.isArray(child) && child[0] === 'USAGE');\n    if (usageNode) {\n      const scope = usageNode.find((child) => Array.isArray(child) && child[0] === 'SCOPE');\n      const area = usageNode.find((child) => Array.isArray(child) && child[0] === 'AREA');\n      const bbox = usageNode.find((child) => Array.isArray(child) && child[0] === 'BBOX');\n      result.usage = {};\n      if (scope) {\n        result.usage.scope = scope[1];\n      }\n      if (area) {\n        result.usage.area = area[1];\n      }\n      if (bbox) {\n        result.usage.bbox = bbox.slice(1);\n      }\n    }\n\n    return result;\n  }\n}\n\nexport default PROJJSONBuilder2019;","import PROJJSONBuilder2015 from './PROJJSONBuilder2015.js';\nimport PROJJSONBuilder2019 from './PROJJSONBuilder2019.js';\n\n/**\n * Detects the WKT2 version based on the structure of the WKT.\n * @param {Array} root The root WKT array node.\n * @returns {string} The detected version (\"2015\" or \"2019\").\n */\nfunction detectWKT2Version(root) {\n  // Check for WKT2-2019-specific nodes\n  if (root.find((child) => Array.isArray(child) && child[0] === 'USAGE')) {\n    return '2019'; // `USAGE` is specific to WKT2-2019\n  }\n\n  // Check for WKT2-2015-specific nodes\n  if (root.find((child) => Array.isArray(child) && child[0] === 'CS')) {\n    return '2015'; // `CS` is valid in both, but default to 2015 unless `USAGE` is present\n  }\n\n  if (root[0] === 'BOUNDCRS' || root[0] === 'PROJCRS' || root[0] === 'GEOGCRS') {\n    return '2015'; // These are valid in both, but default to 2015\n  }\n\n  // Default to WKT2-2015 if no specific indicators are found\n  return '2015';\n}\n\n/**\n * Builds a PROJJSON object from a WKT array structure.\n * @param {Array} root The root WKT array node.\n * @returns {Object} The PROJJSON object.\n */\nexport function buildPROJJSON(root) {\n  const version = detectWKT2Version(root);\n  const builder = version === '2019' ? PROJJSONBuilder2019 : PROJJSONBuilder2015;\n  return builder.convert(root);\n}\n","/**\n * Detects whether the WKT string is WKT1 or WKT2.\n * @param {string} wkt The WKT string.\n * @returns {string} The detected version (\"WKT1\" or \"WKT2\").\n */\nexport function detectWKTVersion(wkt) {\n  // Normalize the WKT string for easier keyword matching\n  const normalizedWKT = wkt.toUpperCase();\n\n  // Check for WKT2-specific keywords\n  if (\n    normalizedWKT.includes('PROJCRS') ||\n    normalizedWKT.includes('GEOGCRS') ||\n    normalizedWKT.includes('BOUNDCRS') ||\n    normalizedWKT.includes('VERTCRS') ||\n    normalizedWKT.includes('LENGTHUNIT') ||\n    normalizedWKT.includes('ANGLEUNIT') ||\n    normalizedWKT.includes('SCALEUNIT')\n  ) {\n    return 'WKT2';\n  }\n\n  // Check for WKT1-specific keywords\n  if (\n    normalizedWKT.includes('PROJCS') ||\n    normalizedWKT.includes('GEOGCS') ||\n    normalizedWKT.includes('LOCAL_CS') ||\n    normalizedWKT.includes('VERT_CS') ||\n    normalizedWKT.includes('UNIT')\n  ) {\n    return 'WKT1';\n  }\n\n  // Default to WKT1 if no specific indicators are found\n  return 'WKT1';\n}","export default parseString;\n\nvar NEUTRAL = 1;\nvar KEYWORD = 2;\nvar NUMBER = 3;\nvar QUOTED = 4;\nvar AFTERQUOTE = 5;\nvar ENDED = -1;\nvar whitespace = /\\s/;\nvar latin = /[A-Za-z]/;\nvar keyword = /[A-Za-z84_]/;\nvar endThings = /[,\\]]/;\nvar digets = /[\\d\\.E\\-\\+]/;\n// const ignoredChar = /[\\s_\\-\\/\\(\\)]/g;\nfunction Parser(text) {\n  if (typeof text !== 'string') {\n    throw new Error('not a string');\n  }\n  this.text = text.trim();\n  this.level = 0;\n  this.place = 0;\n  this.root = null;\n  this.stack = [];\n  this.currentObject = null;\n  this.state = NEUTRAL;\n}\nParser.prototype.readCharicter = function() {\n  var char = this.text[this.place++];\n  if (this.state !== QUOTED) {\n    while (whitespace.test(char)) {\n      if (this.place >= this.text.length) {\n        return;\n      }\n      char = this.text[this.place++];\n    }\n  }\n  switch (this.state) {\n    case NEUTRAL:\n      return this.neutral(char);\n    case KEYWORD:\n      return this.keyword(char)\n    case QUOTED:\n      return this.quoted(char);\n    case AFTERQUOTE:\n      return this.afterquote(char);\n    case NUMBER:\n      return this.number(char);\n    case ENDED:\n      return;\n  }\n};\nParser.prototype.afterquote = function(char) {\n  if (char === '\"') {\n    this.word += '\"';\n    this.state = QUOTED;\n    return;\n  }\n  if (endThings.test(char)) {\n    this.word = this.word.trim();\n    this.afterItem(char);\n    return;\n  }\n  throw new Error('havn\\'t handled \"' +char + '\" in afterquote yet, index ' + this.place);\n};\nParser.prototype.afterItem = function(char) {\n  if (char === ',') {\n    if (this.word !== null) {\n      this.currentObject.push(this.word);\n    }\n    this.word = null;\n    this.state = NEUTRAL;\n    return;\n  }\n  if (char === ']') {\n    this.level--;\n    if (this.word !== null) {\n      this.currentObject.push(this.word);\n      this.word = null;\n    }\n    this.state = NEUTRAL;\n    this.currentObject = this.stack.pop();\n    if (!this.currentObject) {\n      this.state = ENDED;\n    }\n\n    return;\n  }\n};\nParser.prototype.number = function(char) {\n  if (digets.test(char)) {\n    this.word += char;\n    return;\n  }\n  if (endThings.test(char)) {\n    this.word = parseFloat(this.word);\n    this.afterItem(char);\n    return;\n  }\n  throw new Error('havn\\'t handled \"' +char + '\" in number yet, index ' + this.place);\n};\nParser.prototype.quoted = function(char) {\n  if (char === '\"') {\n    this.state = AFTERQUOTE;\n    return;\n  }\n  this.word += char;\n  return;\n};\nParser.prototype.keyword = function(char) {\n  if (keyword.test(char)) {\n    this.word += char;\n    return;\n  }\n  if (char === '[') {\n    var newObjects = [];\n    newObjects.push(this.word);\n    this.level++;\n    if (this.root === null) {\n      this.root = newObjects;\n    } else {\n      this.currentObject.push(newObjects);\n    }\n    this.stack.push(this.currentObject);\n    this.currentObject = newObjects;\n    this.state = NEUTRAL;\n    return;\n  }\n  if (endThings.test(char)) {\n    this.afterItem(char);\n    return;\n  }\n  throw new Error('havn\\'t handled \"' +char + '\" in keyword yet, index ' + this.place);\n};\nParser.prototype.neutral = function(char) {\n  if (latin.test(char)) {\n    this.word = char;\n    this.state = KEYWORD;\n    return;\n  }\n  if (char === '\"') {\n    this.word = '';\n    this.state = QUOTED;\n    return;\n  }\n  if (digets.test(char)) {\n    this.word = char;\n    this.state = NUMBER;\n    return;\n  }\n  if (endThings.test(char)) {\n    this.afterItem(char);\n    return;\n  }\n  throw new Error('havn\\'t handled \"' +char + '\" in neutral yet, index ' + this.place);\n};\nParser.prototype.output = function() {\n  while (this.place < this.text.length) {\n    this.readCharicter();\n  }\n  if (this.state === ENDED) {\n    return this.root;\n  }\n  throw new Error('unable to parse string \"' +this.text + '\". State is ' + this.state);\n};\n\nfunction parseString(txt) {\n  var parser = new Parser(txt);\n  return parser.output();\n}\n","\n\nfunction mapit(obj, key, value) {\n  if (Array.isArray(key)) {\n    value.unshift(key);\n    key = null;\n  }\n  var thing = key ? {} : obj;\n\n  var out = value.reduce(function(newObj, item) {\n    sExpr(item, newObj);\n    return newObj\n  }, thing);\n  if (key) {\n    obj[key] = out;\n  }\n}\n\nexport function sExpr(v, obj) {\n  if (!Array.isArray(v)) {\n    obj[v] = true;\n    return;\n  }\n  var key = v.shift();\n  if (key === 'PARAMETER') {\n    key = v.shift();\n  }\n  if (v.length === 1) {\n    if (Array.isArray(v[0])) {\n      obj[key] = {};\n      sExpr(v[0], obj[key]);\n      return;\n    }\n    obj[key] = v[0];\n    return;\n  }\n  if (!v.length) {\n    obj[key] = true;\n    return;\n  }\n  if (key === 'TOWGS84') {\n    obj[key] = v;\n    return;\n  }\n  if (key === 'AXIS') {\n    if (!(key in obj)) {\n      obj[key] = [];\n    }\n    obj[key].push(v);\n    return;\n  }\n  if (!Array.isArray(key)) {\n    obj[key] = {};\n  }\n\n  var i;\n  switch (key) {\n    case 'UNIT':\n    case 'PRIMEM':\n    case 'VERT_DATUM':\n      obj[key] = {\n        name: v[0].toLowerCase(),\n        convert: v[1]\n      };\n      if (v.length === 3) {\n        sExpr(v[2], obj[key]);\n      }\n      return;\n    case 'SPHEROID':\n    case 'ELLIPSOID':\n      obj[key] = {\n        name: v[0],\n        a: v[1],\n        rf: v[2]\n      };\n      if (v.length === 4) {\n        sExpr(v[3], obj[key]);\n      }\n      return;\n    case 'EDATUM':\n    case 'ENGINEERINGDATUM':\n    case 'LOCAL_DATUM':\n    case 'DATUM':\n    case 'VERT_CS':\n    case 'VERTCRS':\n    case 'VERTICALCRS':\n      v[0] = ['name', v[0]];\n      mapit(obj, key, v);\n      return;\n    case 'COMPD_CS':\n    case 'COMPOUNDCRS':\n    case 'FITTED_CS':\n    // the followings are the crs defined in\n    // https://github.com/proj4js/proj4js/blob/1da4ed0b865d0fcb51c136090569210cdcc9019e/lib/parseCode.js#L11\n    case 'PROJECTEDCRS':\n    case 'PROJCRS':\n    case 'GEOGCS':\n    case 'GEOCCS':\n    case 'PROJCS':\n    case 'LOCAL_CS':\n    case 'GEODCRS':\n    case 'GEODETICCRS':\n    case 'GEODETICDATUM':\n    case 'ENGCRS':\n    case 'ENGINEERINGCRS':\n      v[0] = ['name', v[0]];\n      mapit(obj, key, v);\n      obj[key].type = key;\n      return;\n    default:\n      i = -1;\n      while (++i < v.length) {\n        if (!Array.isArray(v[i])) {\n          return sExpr(v, obj[key]);\n        }\n      }\n      return mapit(obj, key, v);\n  }\n}\n","var D2R = 0.01745329251994329577;\n\nexport function d2r(input) {\n  return input * D2R;\n}\n\nexport function applyProjectionDefaults(wkt) {\n  // Normalize projName for WKT2 compatibility\n  const normalizedProjName = (wkt.projName || '').toLowerCase().replace(/_/g, ' ');\n\n  if (wkt.long0 === undefined && wkt.longc !== undefined) {\n    wkt.long0 = wkt.longc; // keep in the projection's native prime meridian frame\n  }\n  if (!wkt.lat_ts && wkt.lat1 && (normalizedProjName === 'stereographic south pole' || normalizedProjName === 'polar stereographic (variant b)')) {\n    wkt.lat0 = d2r(wkt.lat1 > 0 ? 90 : -90);\n    wkt.lat_ts = wkt.lat1;\n    delete wkt.lat1;\n  } else if (!wkt.lat_ts && wkt.lat0 && (normalizedProjName === 'polar stereographic' || normalizedProjName === 'polar stereographic (variant a)')) {\n    wkt.lat_ts = wkt.lat0;\n    wkt.lat0 = d2r(wkt.lat0 > 0 ? 90 : -90);\n    delete wkt.lat1;\n  }\n}","import { applyProjectionDefaults } from './util.js';\n\n// Helper function to process units and to_meter\nfunction processUnit(unit) {\n  let result = { units: null, to_meter: undefined };\n\n  if (typeof unit === 'string') {\n    result.units = unit.toLowerCase();\n    if (result.units === 'metre') {\n      result.units = 'meter'; // Normalize 'metre' to 'meter'\n    }\n    if (result.units === 'meter') {\n      result.to_meter = 1; // Only set to_meter if units are 'meter'\n    }\n  } else if (unit && unit.name) {\n    result.units = unit.name.toLowerCase();\n    if (result.units === 'metre') {\n      result.units = 'meter'; // Normalize 'metre' to 'meter'\n    }\n    result.to_meter = unit.conversion_factor;\n  }\n\n  return result;\n}\n\nfunction toValue(valueOrObject) {\n  if (typeof valueOrObject === 'object') {\n    return valueOrObject.value * valueOrObject.unit.conversion_factor;\n  }\n  return valueOrObject;\n}\n\nfunction calculateEllipsoid(value, result) {\n  if (value.ellipsoid.radius) {\n    result.a = value.ellipsoid.radius;\n    result.rf = 0;\n  } else {\n    result.a = toValue(value.ellipsoid.semi_major_axis);\n    if (value.ellipsoid.inverse_flattening !== undefined) {\n      result.rf = value.ellipsoid.inverse_flattening;\n    } else if (value.ellipsoid.semi_major_axis !== undefined && value.ellipsoid.semi_minor_axis !== undefined) {\n      result.rf = result.a / (result.a - toValue(value.ellipsoid.semi_minor_axis));\n    }\n  }\n}\n\nexport function transformPROJJSON(projjson, result = {}) {\n  if (!projjson || typeof projjson !== 'object') {\n    return projjson; // Return primitive values as-is\n  }\n\n  if (projjson.type === 'BoundCRS') {\n    transformPROJJSON(projjson.source_crs, result);\n\n    if (projjson.transformation) {\n      if (projjson.transformation.method && projjson.transformation.method.name === 'NTv2') {\n        // Set nadgrids to the filename from the parameterfile\n        result.nadgrids = projjson.transformation.parameters[0].value;\n      } else {\n        // Populate datum_params if no parameterfile is found\n        result.datum_params = projjson.transformation.parameters.map((param) => param.value);\n      }\n    }\n    return result; // Return early for BoundCRS\n  }\n\n  // Handle specific keys in PROJJSON\n  Object.keys(projjson).forEach((key) => {\n    const value = projjson[key];\n    if (value === null) {\n      return;\n    }\n\n    switch (key) {\n      case 'name':\n        if (result.srsCode) {\n          break;\n        }\n        result.name = value;\n        result.srsCode = value; // Map `name` to `srsCode`\n        break;\n\n      case 'type':\n        if (value === 'GeographicCRS') {\n          result.projName = 'longlat';\n        } else if (value === 'GeodeticCRS') {\n          if (projjson.coordinate_system && projjson.coordinate_system.subtype === 'Cartesian') {\n            result.projName = 'geocent';\n          } else {\n            result.projName = 'longlat';\n          }\n        } else if (value === 'ProjectedCRS' && projjson.conversion && projjson.conversion.method) {\n          result.projName = projjson.conversion.method.name; // Retain original capitalization\n        }\n        break;\n\n      case 'datum':\n      case 'datum_ensemble': // Handle both datum and ensemble\n        if (value.ellipsoid) {\n          // Extract ellipsoid properties\n          result.ellps = value.ellipsoid.name;\n          calculateEllipsoid(value, result);\n        }\n        if (value.prime_meridian) {\n          result.from_greenwich = value.prime_meridian.longitude * Math.PI / 180; // Convert to radians\n        }\n        break;\n\n      case 'ellipsoid':\n        result.ellps = value.name;\n        calculateEllipsoid(value, result);\n        break;\n\n      case 'prime_meridian':\n        result.long0 = (value.longitude || 0) * Math.PI / 180; // Convert to radians\n        break;\n\n      case 'coordinate_system':\n        if (value.axis) {\n          const directionMap = {\n            'east': 'e',\n            'north': 'n',\n            'west': 'w',\n            'south': 's',\n            'up': 'u',\n            'down': 'd',\n            'geocentricx': 'e',\n            'geocentricy': 'n',\n            'geocentricz': 'u',\n          };\n          const mapped = value.axis.map((axis) => directionMap[axis.direction.toLowerCase()]);\n          if (mapped.every(Boolean)) {\n            result.axis = mapped.join('');\n            if (result.axis.length === 2) {\n              result.axis += 'u';\n            }\n          }\n\n          if (value.unit) {\n            const { units, to_meter } = processUnit(value.unit);\n            result.units = units;\n            result.to_meter = to_meter;\n          } else if (value.axis[0] && value.axis[0].unit) {\n            const { units, to_meter } = processUnit(value.axis[0].unit);\n            result.units = units;\n            result.to_meter = to_meter;\n          }\n        }\n        break;\n        \n      case 'id':\n        if (value.authority && value.code) {\n          result.title = value.authority + ':' + value.code;\n        }\n        break;\n\n      case 'conversion':\n        if (value.method && value.method.name) {\n          result.projName = value.method.name; // Retain original capitalization\n        }\n        if (value.parameters) {\n          value.parameters.forEach((param) => {\n            const paramName = param.name.toLowerCase().replace(/\\s+/g, '_');\n            const paramValue = param.value;\n            if (param.unit && param.unit.conversion_factor) {\n              result[paramName] = paramValue * param.unit.conversion_factor; // Convert to radians or meters\n            } else if (param.unit === 'degree') {\n              result[paramName] = paramValue * Math.PI / 180; // Convert to radians\n            } else {\n              result[paramName] = paramValue;\n            }\n          });\n        }\n        break;\n\n      case 'unit':\n        if (value.name) {\n          result.units = value.name.toLowerCase();\n          if (result.units === 'metre') {\n            result.units = 'meter';\n          }\n        }\n        if (value.conversion_factor) {\n          result.to_meter = value.conversion_factor;\n        }\n        break;\n\n      case 'base_crs':\n        transformPROJJSON(value, result); // Pass `result` directly\n        result.datumCode = value.id ? value.id.authority + '_' + value.id.code : value.name; // Set datumCode\n        break;\n\n      default:\n        // Ignore irrelevant or unneeded properties\n        break;\n    }\n  });\n\n  // Additional calculated properties\n  if (result.latitude_of_false_origin !== undefined) {\n    result.lat0 = result.latitude_of_false_origin; // Already in radians\n  }\n  if (result.longitude_of_false_origin !== undefined) {\n    result.long0 = result.longitude_of_false_origin;\n  }\n  if (result.latitude_of_standard_parallel !== undefined) {\n    result.lat0 = result.latitude_of_standard_parallel;\n    result.lat1 = result.latitude_of_standard_parallel;\n  }\n  if (result.latitude_of_1st_standard_parallel !== undefined) {\n    result.lat1 = result.latitude_of_1st_standard_parallel;\n  }\n  if (result.latitude_of_2nd_standard_parallel !== undefined) {\n    result.lat2 = result.latitude_of_2nd_standard_parallel; \n  }\n  if (result.latitude_of_projection_centre !== undefined) {\n    result.lat0 = result.latitude_of_projection_centre;\n  }\n  if (result.longitude_of_projection_centre !== undefined) {\n    result.longc = result.longitude_of_projection_centre;\n  }\n  if (result.easting_at_false_origin !== undefined) {\n    result.x0 = result.easting_at_false_origin;\n  }\n  if (result.northing_at_false_origin !== undefined) {\n    result.y0 = result.northing_at_false_origin;\n  }\n  if (result.latitude_of_natural_origin !== undefined) {\n    result.lat0 = result.latitude_of_natural_origin;\n  }\n  if (result.longitude_of_natural_origin !== undefined) {\n    result.long0 = result.longitude_of_natural_origin;\n  }\n  if (result.longitude_of_origin !== undefined) {\n    result.long0 = result.longitude_of_origin;\n  }\n  if (result.false_easting !== undefined) {\n    result.x0 = result.false_easting;\n  }\n  if (result.easting_at_projection_centre) {\n    result.x0 = result.easting_at_projection_centre;\n  }\n  if (result.false_northing !== undefined) {\n    result.y0 = result.false_northing;\n  }\n  if (result.northing_at_projection_centre) {\n    result.y0 = result.northing_at_projection_centre;\n  }\n  if (result.standard_parallel_1 !== undefined) {\n    result.lat1 = result.standard_parallel_1;\n  }\n  if (result.standard_parallel_2 !== undefined) {\n    result.lat2 = result.standard_parallel_2;\n  }\n  if (result.scale_factor_at_natural_origin !== undefined) {\n    result.k0 = result.scale_factor_at_natural_origin;\n  }\n  if (result.scale_factor_at_projection_centre !== undefined) {\n    result.k0 = result.scale_factor_at_projection_centre;\n  }\n  if (result.scale_factor_on_pseudo_standard_parallel !== undefined) {  \n    result.k0 = result.scale_factor_on_pseudo_standard_parallel;\n  }\n  if (result.azimuth !== undefined) {\n    result.alpha = result.azimuth;\n  }\n  if (result.azimuth_at_projection_centre !== undefined) {\n    result.alpha = result.azimuth_at_projection_centre;\n  }\n  if (result.angle_from_rectified_to_skew_grid) {\n    result.rectified_grid_angle = result.angle_from_rectified_to_skew_grid;\n  }\n\n  // Apply projection defaults\n  applyProjectionDefaults(result);\n\n  return result;\n}","import { buildPROJJSON } from './buildPROJJSON.js';\nimport { detectWKTVersion } from './detectWKTVersion.js';\nimport parser from './parser.js';\nimport {sExpr} from './process.js';\nimport { transformPROJJSON } from './transformPROJJSON.js';\nimport { applyProjectionDefaults, d2r } from './util.js';\n\nvar knownTypes = ['PROJECTEDCRS', 'PROJCRS', 'GEOGCS', 'GEOCCS', 'PROJCS', 'LOCAL_CS', 'GEODCRS',\n  'GEODETICCRS', 'GEODETICDATUM', 'ENGCRS', 'ENGINEERINGCRS'];\n\nfunction rename(obj, params) {\n  var outName = params[0];\n  var inName = params[1];\n  if (!(outName in obj) && (inName in obj)) {\n    obj[outName] = obj[inName];\n    if (params.length === 3) {\n      obj[outName] = params[2](obj[outName]);\n    }\n  }\n}\n\nfunction cleanWKT(wkt) {\n  var keys = Object.keys(wkt);\n  for (var i = 0, ii = keys.length; i <ii; ++i) {\n    var key = keys[i];\n    // the followings are the crs defined in\n    // https://github.com/proj4js/proj4js/blob/1da4ed0b865d0fcb51c136090569210cdcc9019e/lib/parseCode.js#L11\n    if (knownTypes.indexOf(key) !== -1) {\n      setPropertiesFromWkt(wkt[key]);\n    }\n    if (typeof wkt[key] === 'object') {\n      cleanWKT(wkt[key]);\n    }\n  }\n}\n\nfunction setPropertiesFromWkt(wkt) {\n  if (wkt.AUTHORITY) {\n    var authority = Object.keys(wkt.AUTHORITY)[0];\n    if (authority && authority in wkt.AUTHORITY) {\n      wkt.title = authority + ':' + wkt.AUTHORITY[authority];\n    }\n  }\n  if (wkt.type === 'GEOGCS') {\n    wkt.projName = 'longlat';\n  } else if (wkt.type === 'LOCAL_CS') {\n    wkt.projName = 'identity';\n    wkt.local = true;\n  } else {\n    if (typeof wkt.PROJECTION === 'object') {\n      wkt.projName = Object.keys(wkt.PROJECTION)[0];\n    } else {\n      wkt.projName = wkt.PROJECTION;\n    }\n  }\n  if (wkt.AXIS) {\n    var axisOrder = '';\n    for (var i = 0, ii = wkt.AXIS.length; i < ii; ++i) {\n      var axis = [wkt.AXIS[i][0].toLowerCase(), wkt.AXIS[i][1].toLowerCase()];\n      if (axis[0].indexOf('north') !== -1 || ((axis[0] === 'y' || axis[0] === 'lat') && axis[1] === 'north')) {\n        axisOrder += 'n';\n      } else if (axis[0].indexOf('south') !== -1 || ((axis[0] === 'y' || axis[0] === 'lat') && axis[1] === 'south')) {\n        axisOrder += 's';\n      } else if (axis[0].indexOf('east') !== -1 || ((axis[0] === 'x' || axis[0] === 'lon') && axis[1] === 'east')) {\n        axisOrder += 'e';\n      } else if (axis[0].indexOf('west') !== -1 || ((axis[0] === 'x' || axis[0] === 'lon') && axis[1] === 'west')) {\n        axisOrder += 'w';\n      }\n    }\n    if (axisOrder.length === 2) {\n      axisOrder += 'u';\n    }\n    if (axisOrder.length === 3) {\n      wkt.axis = axisOrder;\n    }\n  }\n  if (wkt.UNIT) {\n    wkt.units = wkt.UNIT.name.toLowerCase();\n    if (wkt.units === 'metre') {\n      wkt.units = 'meter';\n    }\n    if (wkt.UNIT.convert) {\n      if (wkt.type === 'GEOGCS') {\n        if (wkt.DATUM && wkt.DATUM.SPHEROID) {\n          wkt.to_meter = wkt.UNIT.convert*wkt.DATUM.SPHEROID.a;\n        }\n      } else {\n        wkt.to_meter = wkt.UNIT.convert;\n      }\n    }\n  }\n  var geogcs = wkt.GEOGCS;\n  if (wkt.type === 'GEOGCS') {\n    geogcs = wkt;\n  }\n  if (geogcs) {\n    if (geogcs.PRIMEM && geogcs.PRIMEM.convert) {\n      wkt.from_greenwich = d2r(geogcs.PRIMEM.convert);\n    }\n    if (geogcs.DATUM) {\n      wkt.datumCode = geogcs.DATUM.name.toLowerCase();\n    } else {\n      wkt.datumCode = geogcs.name.toLowerCase();\n    }\n    if (wkt.datumCode.slice(0, 2) === 'd_') {\n      wkt.datumCode = wkt.datumCode.slice(2);\n    }\n    if (wkt.datumCode === 'new_zealand_1949') {\n      wkt.datumCode = 'nzgd49';\n    }\n    if (wkt.datumCode === 'wgs_1984' || wkt.datumCode === 'world_geodetic_system_1984') {\n      if (wkt.PROJECTION === 'Mercator_Auxiliary_Sphere') {\n        wkt.sphere = true;\n      }\n      wkt.datumCode = 'wgs84';\n    }\n    if (wkt.datumCode === 'belge_1972') {\n      wkt.datumCode = 'rnb72';\n    }\n    if (geogcs.DATUM && geogcs.DATUM.SPHEROID) {\n      wkt.ellps = geogcs.DATUM.SPHEROID.name.replace('_19', '').replace(/[Cc]larke\\_18/, 'clrk');\n      if (wkt.ellps.toLowerCase().slice(0, 13) === 'international') {\n        wkt.ellps = 'intl';\n      }\n\n      wkt.a = geogcs.DATUM.SPHEROID.a;\n      wkt.rf = parseFloat(geogcs.DATUM.SPHEROID.rf);\n    }\n\n    if (geogcs.DATUM && geogcs.DATUM.TOWGS84) {\n      wkt.datum_params = geogcs.DATUM.TOWGS84;\n    }\n    if (~wkt.datumCode.indexOf('osgb_1936')) {\n      wkt.datumCode = 'osgb36';\n    }\n    if (~wkt.datumCode.indexOf('osni_1952')) {\n      wkt.datumCode = 'osni52';\n    }\n    if (~wkt.datumCode.indexOf('tm65')\n      || ~wkt.datumCode.indexOf('geodetic_datum_of_1965')) {\n      wkt.datumCode = 'ire65';\n    }\n    if (wkt.datumCode === 'ch1903+') {\n      wkt.datumCode = 'ch1903';\n    }\n    if (~wkt.datumCode.indexOf('israel')) {\n      wkt.datumCode = 'isr93';\n    }\n  }\n  if (wkt.b && !isFinite(wkt.b)) {\n    wkt.b = wkt.a;\n  }\n  if (wkt.rectified_grid_angle) {\n    wkt.rectified_grid_angle = d2r(wkt.rectified_grid_angle);\n  }\n\n  function toMeter(input) {\n    var ratio = wkt.to_meter || 1;\n    return input * ratio;\n  }\n  var renamer = function(a) {\n    return rename(wkt, a);\n  };\n  var list = [\n    ['standard_parallel_1', 'Standard_Parallel_1'],\n    ['standard_parallel_1', 'Latitude of 1st standard parallel'],\n    ['standard_parallel_2', 'Standard_Parallel_2'],\n    ['standard_parallel_2', 'Latitude of 2nd standard parallel'],\n    ['false_easting', 'False_Easting'],\n    ['false_easting', 'False easting'],\n    ['false-easting', 'Easting at false origin'],\n    ['false_northing', 'False_Northing'],\n    ['false_northing', 'False northing'],\n    ['false_northing', 'Northing at false origin'],\n    ['central_meridian', 'Central_Meridian'],\n    ['central_meridian', 'Longitude of natural origin'],\n    ['central_meridian', 'Longitude of false origin'],\n    ['latitude_of_origin', 'Latitude_Of_Origin'],\n    ['latitude_of_origin', 'Central_Parallel'],\n    ['latitude_of_origin', 'Latitude of natural origin'],\n    ['latitude_of_origin', 'Latitude of false origin'],\n    ['scale_factor', 'Scale_Factor'],\n    ['k0', 'scale_factor'],\n    ['latitude_of_center', 'Latitude_Of_Center'],\n    ['latitude_of_center', 'Latitude_of_center'],\n    ['lat0', 'latitude_of_center', d2r],\n    ['longitude_of_center', 'Longitude_Of_Center'],\n    ['longitude_of_center', 'Longitude_of_center'],\n    ['longc', 'longitude_of_center', d2r],\n    ['x0', 'false_easting', toMeter],\n    ['y0', 'false_northing', toMeter],\n    ['long0', 'central_meridian', d2r],\n    ['lat0', 'latitude_of_origin', d2r],\n    ['lat0', 'standard_parallel_1', d2r],\n    ['lat1', 'standard_parallel_1', d2r],\n    ['lat2', 'standard_parallel_2', d2r],\n    ['azimuth', 'Azimuth'],\n    ['alpha', 'azimuth', d2r],\n    ['srsCode', 'name']\n  ];\n  list.forEach(renamer);\n  applyProjectionDefaults(wkt);\n}\nexport default function(wkt) {\n  if (typeof wkt === 'object') {\n    return transformPROJJSON(wkt);\n  }\n  const version = detectWKTVersion(wkt);\n  var lisp = parser(wkt);\n  if (version === 'WKT2') {\n    const projjson = buildPROJJSON(lisp);\n    return transformPROJJSON(projjson);\n  }\n  var type = lisp[0];\n  var obj = {};\n  sExpr(lisp, obj);\n  cleanWKT(obj);\n  return obj[type];\n}\n","import globals from './global';\nimport parseProj from './projString';\nimport wkt from 'wkt-parser';\n\n/**\n * @typedef {Object} ProjectionDefinition\n * @property {string} title\n * @property {string} [projName]\n * @property {string} [ellps]\n * @property {import('./Proj.js').DatumDefinition} [datum]\n * @property {string} [datumName]\n * @property {number} [rf]\n * @property {number} [lat0]\n * @property {number} [lat1]\n * @property {number} [lat2]\n * @property {number} [lat_ts]\n * @property {number} [long0]\n * @property {number} [long1]\n * @property {number} [long2]\n * @property {number} [alpha]\n * @property {number} [longc]\n * @property {number} [x0]\n * @property {number} [y0]\n * @property {number} [k0]\n * @property {number} [a]\n * @property {number} [b]\n * @property {true} [R_A]\n * @property {number} [zone]\n * @property {true} [utmSouth]\n * @property {string|Array<number>} [datum_params]\n * @property {number} [to_meter]\n * @property {string} [units]\n * @property {number} [from_greenwich]\n * @property {string} [datumCode]\n * @property {string} [nadgrids]\n * @property {string} [axis]\n * @property {boolean} [sphere]\n * @property {number} [rectified_grid_angle]\n * @property {boolean} [approx]\n * @property {boolean} [over]\n * @property {string} [projStr]\n * @property {<T extends import('./core').TemplateCoordinates>(coordinates: T, enforceAxis?: boolean) => T} inverse\n * @property {<T extends import('./core').TemplateCoordinates>(coordinates: T, enforceAxis?: boolean) => T} forward\n */\n\n/**\n * @overload\n * @param {string} name\n * @param {string|ProjectionDefinition|import('./core.js').PROJJSONDefinition} projection\n * @returns {void}\n */\n/**\n * @overload\n * @param {Array<[string, string]>} name\n * @returns {Array<ProjectionDefinition|undefined>}\n */\n/**\n * @overload\n * @param {string} name\n * @returns {ProjectionDefinition}\n */\n\n/**\n * @param {string | Array<Array<string>> | Partial<Record<'EPSG'|'ESRI'|'IAU2000', ProjectionDefinition>>} name\n * @returns {ProjectionDefinition | Array<ProjectionDefinition|undefined> | void}\n */\nfunction defs(name) {\n  /* global console */\n  var that = this;\n  if (arguments.length === 2) {\n    var def = arguments[1];\n    if (typeof def === 'string') {\n      if (def.charAt(0) === '+') {\n        defs[/** @type {string} */ (name)] = parseProj(arguments[1]);\n      } else {\n        defs[/** @type {string} */ (name)] = wkt(arguments[1]);\n      }\n    } else if (def && typeof def === 'object' && !('projName' in def)) {\n      // PROJJSON\n      defs[/** @type {string} */ (name)] = wkt(arguments[1]);\n    } else {\n      defs[/** @type {string} */ (name)] = def;\n      if (!def) {\n        delete defs[/** @type {string} */ (name)];\n      }\n    }\n  } else if (arguments.length === 1) {\n    if (Array.isArray(name)) {\n      return name.map(function (v) {\n        if (Array.isArray(v)) {\n          return defs.apply(that, v);\n        } else {\n          return defs(v);\n        }\n      });\n    } else if (typeof name === 'string') {\n      if (name in defs) {\n        return defs[name];\n      }\n    } else if ('EPSG' in name) {\n      defs['EPSG:' + name.EPSG] = name;\n    } else if ('ESRI' in name) {\n      defs['ESRI:' + name.ESRI] = name;\n    } else if ('IAU2000' in name) {\n      defs['IAU2000:' + name.IAU2000] = name;\n    } else {\n      console.log(name);\n    }\n    return;\n  }\n}\nglobals(defs);\nexport default defs;\n","import defs from './defs';\nimport wkt from 'wkt-parser';\nimport projStr from './projString';\nimport match from './match';\nfunction testObj(code) {\n  return typeof code === 'string';\n}\nfunction testDef(code) {\n  return code in defs;\n}\nfunction testWKT(code) {\n  return (code.indexOf('+') !== 0 && code.indexOf('[') !== -1) || (typeof code === 'object' && !('srsCode' in code));\n}\nvar codes = ['3857', '900913', '3785', '102113'];\nfunction checkMercator(item) {\n  if (item.title) {\n    return item.title.toLowerCase().indexOf('epsg:') === 0 && codes.indexOf(item.title.substr(5)) > -1;\n  }\n  var auth = match(item, 'authority');\n  if (!auth) {\n    return;\n  }\n  var code = match(auth, 'epsg');\n  return code && codes.indexOf(code) > -1;\n}\nfunction checkProjStr(item) {\n  var ext = match(item, 'extension');\n  if (!ext) {\n    return;\n  }\n  return match(ext, 'proj4');\n}\nfunction testProj(code) {\n  return code[0] === '+';\n}\n/**\n * @param {string | import('./core').PROJJSONDefinition | import('./defs').ProjectionDefinition} code\n * @returns {import('./defs').ProjectionDefinition}\n */\nfunction parse(code) {\n  let out;\n  if (testObj(code)) {\n    // check to see if this is a WKT string\n    if (testDef(code)) {\n      out = defs[code];\n    } else if (testWKT(code)) {\n      out = wkt(code);\n      var maybeProjStr = checkProjStr(out);\n      if (maybeProjStr) {\n        out = projStr(maybeProjStr);\n      }\n    } else if (testProj(code)) {\n      out = projStr(code);\n    }\n  } else if (!('projName' in code)) {\n    out = wkt(code);\n  } else {\n    out = code;\n  }\n  // test for special Web Mercator case, due to this being a very common and often malformed\n  return out && checkMercator(out) ? defs['EPSG:3857'] : out;\n}\n\nexport default parse;\n","export default function (destination, source) {\n  destination = destination || {};\n  var value, property;\n  if (!source) {\n    return destination;\n  }\n  for (property in source) {\n    value = source[property];\n    if (value !== undefined) {\n      destination[property] = value;\n    }\n  }\n  return destination;\n}\n","export default function (eccent, sinphi, cosphi) {\n  var con = eccent * sinphi;\n  return cosphi / (Math.sqrt(1 - con * con));\n}\n","export default function (x) {\n  return x < 0 ? -1 : 1;\n}\n","import { TWO_PI, SPI } from '../constants/values';\nimport sign from './sign';\n\nexport default function (x, skipAdjust) {\n  if (skipAdjust) {\n    return x;\n  }\n  return (Math.abs(x) <= SPI) ? x : (x - (sign(x) * TWO_PI));\n}\n","import { HALF_PI } from '../constants/values';\n\nexport default function (eccent, phi, sinphi) {\n  var con = eccent * sinphi;\n  var com = 0.5 * eccent;\n  con = Math.pow(((1 - con) / (1 + con)), com);\n  return (Math.tan(0.5 * (HALF_PI - phi)) / con);\n}\n","import { HALF_PI } from '../constants/values';\n\nexport default function (eccent, ts) {\n  var eccnth = 0.5 * eccent;\n  var con, dphi;\n  var phi = HALF_PI - 2 * Math.atan(ts);\n  for (var i = 0; i <= 15; i++) {\n    con = eccent * Math.sin(phi);\n    dphi = HALF_PI - 2 * Math.atan(ts * (Math.pow(((1 - con) / (1 + con)), eccnth))) - phi;\n    phi += dphi;\n    if (Math.abs(dphi) <= 0.0000000001) {\n      return phi;\n    }\n  }\n  // console.log(\"phi2z has NoConvergence\");\n  return -9999;\n}\n","import msfnz from '../common/msfnz';\n\nimport adjust_lon from '../common/adjust_lon';\nimport tsfnz from '../common/tsfnz';\nimport phi2z from '../common/phi2z';\nimport { FORTPI, R2D, EPSLN, HALF_PI } from '../constants/values';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} es\n * @property {number} e\n * @property {number} k\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  var con = this.b / this.a;\n  this.es = 1 - con * con;\n  if (!('x0' in this)) {\n    this.x0 = 0;\n  }\n  if (!('y0' in this)) {\n    this.y0 = 0;\n  }\n  this.e = Math.sqrt(this.es);\n  if (this.lat_ts) {\n    if (this.sphere) {\n      this.k0 = Math.cos(this.lat_ts);\n    } else {\n      this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));\n    }\n  } else {\n    if (!this.k0) {\n      if (this.k) {\n        this.k0 = this.k;\n      } else {\n        this.k0 = 1;\n      }\n    }\n  }\n}\n\n/* Mercator forward equations--mapping lat,long to x,y\n  -------------------------------------------------- */\n\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n  // convert to radians\n  if (lat * R2D > 90 && lat * R2D < -90 && lon * R2D > 180 && lon * R2D < -180) {\n    return null;\n  }\n\n  var x, y;\n  if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) {\n    return null;\n  } else {\n    if (this.sphere) {\n      x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0, this.over);\n      y = this.y0 + this.a * this.k0 * Math.log(Math.tan(FORTPI + 0.5 * lat));\n    } else {\n      var sinphi = Math.sin(lat);\n      var ts = tsfnz(this.e, lat, sinphi);\n      x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0, this.over);\n      y = this.y0 - this.a * this.k0 * Math.log(ts);\n    }\n    p.x = x;\n    p.y = y;\n    return p;\n  }\n}\n\n/* Mercator inverse equations--mapping x,y to lat/long\n  -------------------------------------------------- */\nexport function inverse(p) {\n  var x = p.x - this.x0;\n  var y = p.y - this.y0;\n  var lon, lat;\n\n  if (this.sphere) {\n    lat = HALF_PI - 2 * Math.atan(Math.exp(-y / (this.a * this.k0)));\n  } else {\n    var ts = Math.exp(-y / (this.a * this.k0));\n    lat = phi2z(this.e, ts);\n    if (lat === -9999) {\n      return null;\n    }\n  }\n  lon = adjust_lon(this.long0 + x / (this.a * this.k0), this.over);\n\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = ['Mercator', 'Popular Visualisation Pseudo Mercator', 'Mercator_1SP', 'Mercator_Auxiliary_Sphere', 'Mercator_Variant_A', 'merc'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","export function init() {\n  // no-op for longlat\n}\n\nfunction identity(pt) {\n  return pt;\n}\nexport { identity as forward };\nexport { identity as inverse };\nexport var names = ['longlat', 'identity'];\nexport default {\n  init: init,\n  forward: identity,\n  inverse: identity,\n  names: names\n};\n","import merc from './projections/merc';\nimport longlat from './projections/longlat';\n/** @type {Array<Partial<import('./Proj').default>>} */\nvar projs = [merc, longlat];\nvar names = {};\nvar projStore = [];\n\n/**\n * @param {import('./Proj').default} proj\n * @param {number} i\n */\nexport function add(proj, i) {\n  var len = projStore.length;\n  if (!proj.names) {\n    console.log(i);\n    return true;\n  }\n  projStore[len] = proj;\n  proj.names.forEach(function (n) {\n    names[n.toLowerCase()] = len;\n  });\n  return this;\n}\n\nexport function getNormalizedProjName(n) {\n  return n.replace(/[-\\(\\)\\s]+/g, ' ').trim().replace(/ /g, '_');\n}\n\n/**\n * Get a projection by name.\n * @param {string} name\n * @returns {import('./Proj').default|false}\n */\nexport function get(name) {\n  if (!name) {\n    return false;\n  }\n  var n = name.toLowerCase();\n  if (typeof names[n] !== 'undefined' && projStore[names[n]]) {\n    return projStore[names[n]];\n  }\n  n = getNormalizedProjName(n);\n  if (n in names && projStore[names[n]]) {\n    return projStore[names[n]];\n  }\n}\n\nexport function start() {\n  projs.forEach(add);\n}\nexport default {\n  start: start,\n  add: add,\n  get: get\n};\n","var ellipsoids = {\n  MERIT: {\n    a: 6378137,\n    rf: 298.257,\n    ellipseName: 'MERIT 1983'\n  },\n  SGS85: {\n    a: 6378136,\n    rf: 298.257,\n    ellipseName: 'Soviet Geodetic System 85'\n  },\n  GRS80: {\n    a: 6378137,\n    rf: 298.257222101,\n    ellipseName: 'GRS 1980(IUGG, 1980)'\n  },\n  IAU76: {\n    a: 6378140,\n    rf: 298.257,\n    ellipseName: 'IAU 1976'\n  },\n  airy: {\n    a: 6377563.396,\n    b: 6356256.91,\n    ellipseName: 'Airy 1830'\n  },\n  APL4: {\n    a: 6378137,\n    rf: 298.25,\n    ellipseName: 'Appl. Physics. 1965'\n  },\n  NWL9D: {\n    a: 6378145,\n    rf: 298.25,\n    ellipseName: 'Naval Weapons Lab., 1965'\n  },\n  mod_airy: {\n    a: 6377340.189,\n    b: 6356034.446,\n    ellipseName: 'Modified Airy'\n  },\n  andrae: {\n    a: 6377104.43,\n    rf: 300,\n    ellipseName: 'Andrae 1876 (Den., Iclnd.)'\n  },\n  aust_SA: {\n    a: 6378160,\n    rf: 298.25,\n    ellipseName: 'Australian Natl & S. Amer. 1969'\n  },\n  GRS67: {\n    a: 6378160,\n    rf: 298.247167427,\n    ellipseName: 'GRS 67(IUGG 1967)'\n  },\n  bessel: {\n    a: 6377397.155,\n    rf: 299.1528128,\n    ellipseName: 'Bessel 1841'\n  },\n  bess_nam: {\n    a: 6377483.865,\n    rf: 299.1528128,\n    ellipseName: 'Bessel 1841 (Namibia)'\n  },\n  clrk66: {\n    a: 6378206.4,\n    b: 6356583.8,\n    ellipseName: 'Clarke 1866'\n  },\n  clrk80: {\n    a: 6378249.145,\n    rf: 293.4663,\n    ellipseName: 'Clarke 1880 mod.'\n  },\n  clrk80ign: {\n    a: 6378249.2,\n    b: 6356515,\n    rf: 293.4660213,\n    ellipseName: 'Clarke 1880 (IGN)'\n  },\n  clrk58: {\n    a: 6378293.645208759,\n    rf: 294.2606763692654,\n    ellipseName: 'Clarke 1858'\n  },\n  CPM: {\n    a: 6375738.7,\n    rf: 334.29,\n    ellipseName: 'Comm. des Poids et Mesures 1799'\n  },\n  delmbr: {\n    a: 6376428,\n    rf: 311.5,\n    ellipseName: 'Delambre 1810 (Belgium)'\n  },\n  engelis: {\n    a: 6378136.05,\n    rf: 298.2566,\n    ellipseName: 'Engelis 1985'\n  },\n  evrst30: {\n    a: 6377276.345,\n    rf: 300.8017,\n    ellipseName: 'Everest 1830'\n  },\n  evrst48: {\n    a: 6377304.063,\n    rf: 300.8017,\n    ellipseName: 'Everest 1948'\n  },\n  evrst56: {\n    a: 6377301.243,\n    rf: 300.8017,\n    ellipseName: 'Everest 1956'\n  },\n  evrst69: {\n    a: 6377295.664,\n    rf: 300.8017,\n    ellipseName: 'Everest 1969'\n  },\n  evrstSS: {\n    a: 6377298.556,\n    rf: 300.8017,\n    ellipseName: 'Everest (Sabah & Sarawak)'\n  },\n  fschr60: {\n    a: 6378166,\n    rf: 298.3,\n    ellipseName: 'Fischer (Mercury Datum) 1960'\n  },\n  fschr60m: {\n    a: 6378155,\n    rf: 298.3,\n    ellipseName: 'Fischer 1960'\n  },\n  fschr68: {\n    a: 6378150,\n    rf: 298.3,\n    ellipseName: 'Fischer 1968'\n  },\n  helmert: {\n    a: 6378200,\n    rf: 298.3,\n    ellipseName: 'Helmert 1906'\n  },\n  hough: {\n    a: 6378270,\n    rf: 297,\n    ellipseName: 'Hough'\n  },\n  intl: {\n    a: 6378388,\n    rf: 297,\n    ellipseName: 'International 1909 (Hayford)'\n  },\n  kaula: {\n    a: 6378163,\n    rf: 298.24,\n    ellipseName: 'Kaula 1961'\n  },\n  lerch: {\n    a: 6378139,\n    rf: 298.257,\n    ellipseName: 'Lerch 1979'\n  },\n  mprts: {\n    a: 6397300,\n    rf: 191,\n    ellipseName: 'Maupertius 1738'\n  },\n  new_intl: {\n    a: 6378157.5,\n    b: 6356772.2,\n    ellipseName: 'New International 1967'\n  },\n  plessis: {\n    a: 6376523,\n    rf: 6355863,\n    ellipseName: 'Plessis 1817 (France)'\n  },\n  krass: {\n    a: 6378245,\n    rf: 298.3,\n    ellipseName: 'Krassovsky, 1942'\n  },\n  SEasia: {\n    a: 6378155,\n    b: 6356773.3205,\n    ellipseName: 'Southeast Asia'\n  },\n  walbeck: {\n    a: 6376896,\n    b: 6355834.8467,\n    ellipseName: 'Walbeck'\n  },\n  WGS60: {\n    a: 6378165,\n    rf: 298.3,\n    ellipseName: 'WGS 60'\n  },\n  WGS66: {\n    a: 6378145,\n    rf: 298.25,\n    ellipseName: 'WGS 66'\n  },\n  WGS7: {\n    a: 6378135,\n    rf: 298.26,\n    ellipseName: 'WGS 72'\n  },\n  WGS84: {\n    a: 6378137,\n    rf: 298.257223563,\n    ellipseName: 'WGS 84'\n  },\n  sphere: {\n    a: 6370997,\n    b: 6370997,\n    ellipseName: 'Normal Sphere (r=6370997)'\n  }\n};\n\nexport default ellipsoids;\n","import { SIXTH, RA4, RA6, EPSLN } from './constants/values';\nimport { default as Ellipsoid } from './constants/Ellipsoid';\nimport match from './match';\n\nconst WGS84 = Ellipsoid.WGS84; // default ellipsoid\n\nexport function eccentricity(a, b, rf, R_A) {\n  var a2 = a * a; // used in geocentric\n  var b2 = b * b; // used in geocentric\n  var es = (a2 - b2) / a2; // e ^ 2\n  var e = 0;\n  if (R_A) {\n    a *= 1 - es * (SIXTH + es * (RA4 + es * RA6));\n    a2 = a * a;\n    es = 0;\n  } else {\n    e = Math.sqrt(es); // eccentricity\n  }\n  var ep2 = (a2 - b2) / b2; // used in geocentric\n  return {\n    es: es,\n    e: e,\n    ep2: ep2\n  };\n}\nexport function sphere(a, b, rf, ellps, sphere) {\n  if (!a) { // do we have an ellipsoid?\n    var ellipse = match(Ellipsoid, ellps);\n    if (!ellipse) {\n      ellipse = WGS84;\n    }\n    a = ellipse.a;\n    b = ellipse.b;\n    rf = ellipse.rf;\n  }\n\n  if (rf && !b) {\n    b = (1.0 - 1.0 / rf) * a;\n  }\n  if (rf === 0 || Math.abs(a - b) < EPSLN) {\n    sphere = true;\n    b = a;\n  }\n  return {\n    a: a,\n    b: b,\n    rf: rf,\n    sphere: sphere\n  };\n}\n","var datums = {\n  wgs84: {\n    towgs84: '0,0,0',\n    ellipse: 'WGS84',\n    datumName: 'WGS84'\n  },\n  ch1903: {\n    towgs84: '674.374,15.056,405.346',\n    ellipse: 'bessel',\n    datumName: 'swiss'\n  },\n  ggrs87: {\n    towgs84: '-199.87,74.79,246.62',\n    ellipse: 'GRS80',\n    datumName: 'Greek_Geodetic_Reference_System_1987'\n  },\n  nad83: {\n    towgs84: '0,0,0',\n    ellipse: 'GRS80',\n    datumName: 'North_American_Datum_1983'\n  },\n  nad27: {\n    nadgrids: '@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat',\n    ellipse: 'clrk66',\n    datumName: 'North_American_Datum_1927'\n  },\n  potsdam: {\n    towgs84: '598.1,73.7,418.2,0.202,0.045,-2.455,6.7',\n    ellipse: 'bessel',\n    datumName: 'Potsdam Rauenberg 1950 DHDN'\n  },\n  carthage: {\n    towgs84: '-263.0,6.0,431.0',\n    ellipse: 'clark80',\n    datumName: 'Carthage 1934 Tunisia'\n  },\n  hermannskogel: {\n    towgs84: '577.326,90.129,463.919,5.137,1.474,5.297,2.4232',\n    ellipse: 'bessel',\n    datumName: 'Hermannskogel'\n  },\n  mgi: {\n    towgs84: '577.326,90.129,463.919,5.137,1.474,5.297,2.4232',\n    ellipse: 'bessel',\n    datumName: 'Militar-Geographische Institut'\n  },\n  osni52: {\n    towgs84: '482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15',\n    ellipse: 'airy',\n    datumName: 'Irish National'\n  },\n  ire65: {\n    towgs84: '482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15',\n    ellipse: 'mod_airy',\n    datumName: 'Ireland 1965'\n  },\n  rassadiran: {\n    towgs84: '-133.63,-157.5,-158.62',\n    ellipse: 'intl',\n    datumName: 'Rassadiran'\n  },\n  nzgd49: {\n    towgs84: '59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993',\n    ellipse: 'intl',\n    datumName: 'New Zealand Geodetic Datum 1949'\n  },\n  osgb36: {\n    towgs84: '446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894',\n    ellipse: 'airy',\n    datumName: 'Ordnance Survey of Great Britain 1936'\n  },\n  s_jtsk: {\n    towgs84: '589,76,480',\n    ellipse: 'bessel',\n    datumName: 'S-JTSK (Ferro)'\n  },\n  beduaram: {\n    towgs84: '-106,-87,188',\n    ellipse: 'clrk80',\n    datumName: 'Beduaram'\n  },\n  gunung_segara: {\n    towgs84: '-403,684,41',\n    ellipse: 'bessel',\n    datumName: 'Gunung Segara Jakarta'\n  },\n  rnb72: {\n    towgs84: '106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1',\n    ellipse: 'intl',\n    datumName: 'Reseau National Belge 1972'\n  },\n  EPSG_5451: {\n    towgs84: '6.41,-49.05,-11.28,1.5657,0.5242,6.9718,-5.7649'\n  },\n  IGNF_LURESG: {\n    towgs84: '-192.986,13.673,-39.309,-0.4099,-2.9332,2.6881,0.43'\n  },\n  EPSG_4614: {\n    towgs84: '-119.4248,-303.65872,-11.00061,1.164298,0.174458,1.096259,3.657065'\n  },\n  EPSG_4615: {\n    towgs84: '-494.088,-312.129,279.877,-1.423,-1.013,1.59,-0.748'\n  },\n  ESRI_37241: {\n    towgs84: '-76.822,257.457,-12.817,2.136,-0.033,-2.392,-0.031'\n  },\n  ESRI_37249: {\n    towgs84: '-440.296,58.548,296.265,1.128,10.202,4.559,-0.438'\n  },\n  ESRI_37245: {\n    towgs84: '-511.151,-181.269,139.609,1.05,2.703,1.798,3.071'\n  },\n  EPSG_4178: {\n    towgs84: '24.9,-126.4,-93.2,-0.063,-0.247,-0.041,1.01'\n  },\n  EPSG_4622: {\n    towgs84: '-472.29,-5.63,-304.12,0.4362,-0.8374,0.2563,1.8984'\n  },\n  EPSG_4625: {\n    towgs84: '126.93,547.94,130.41,-2.7867,5.1612,-0.8584,13.8227'\n  },\n  EPSG_5252: {\n    towgs84: '0.023,0.036,-0.068,0.00176,0.00912,-0.01136,0.00439'\n  },\n  EPSG_4314: {\n    towgs84: '597.1,71.4,412.1,0.894,0.068,-1.563,7.58'\n  },\n  EPSG_4282: {\n    towgs84: '-178.3,-316.7,-131.5,5.278,6.077,10.979,19.166'\n  },\n  EPSG_4231: {\n    towgs84: '-83.11,-97.38,-117.22,0.005693,-0.044698,0.044285,0.1218'\n  },\n  EPSG_4274: {\n    towgs84: '-230.994,102.591,25.199,0.633,-0.239,0.9,1.95'\n  },\n  EPSG_4134: {\n    towgs84: '-180.624,-225.516,173.919,-0.81,-1.898,8.336,16.71006'\n  },\n  EPSG_4254: {\n    towgs84: '18.38,192.45,96.82,0.056,-0.142,-0.2,-0.0013'\n  },\n  EPSG_4159: {\n    towgs84: '-194.513,-63.978,-25.759,-3.4027,3.756,-3.352,-0.9175'\n  },\n  EPSG_4687: {\n    towgs84: '0.072,-0.507,-0.245,0.0183,-0.0003,0.007,-0.0093'\n  },\n  EPSG_4227: {\n    towgs84: '-83.58,-397.54,458.78,-17.595,-2.847,4.256,3.225'\n  },\n  EPSG_4746: {\n    towgs84: '599.4,72.4,419.2,-0.062,-0.022,-2.723,6.46'\n  },\n  EPSG_4745: {\n    towgs84: '612.4,77,440.2,-0.054,0.057,-2.797,2.55'\n  },\n  EPSG_6311: {\n    towgs84: '8.846,-4.394,-1.122,-0.00237,-0.146528,0.130428,0.783926'\n  },\n  EPSG_4289: {\n    towgs84: '565.7381,50.4018,465.2904,-0.395026,0.330772,-1.876073,4.07244'\n  },\n  EPSG_4230: {\n    towgs84: '-68.863,-134.888,-111.49,-0.53,-0.14,0.57,-3.4'\n  },\n  EPSG_4154: {\n    towgs84: '-123.02,-158.95,-168.47'\n  },\n  EPSG_4156: {\n    towgs84: '570.8,85.7,462.8,4.998,1.587,5.261,3.56'\n  },\n  EPSG_4299: {\n    towgs84: '482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15'\n  },\n  EPSG_4179: {\n    towgs84: '33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84'\n  },\n  EPSG_4313: {\n    towgs84: '-106.8686,52.2978,-103.7239,0.3366,-0.457,1.8422,-1.2747'\n  },\n  EPSG_4194: {\n    towgs84: '163.511,127.533,-159.789'\n  },\n  EPSG_4195: {\n    towgs84: '105,326,-102.5'\n  },\n  EPSG_4196: {\n    towgs84: '-45,417,-3.5'\n  },\n  EPSG_4611: {\n    towgs84: '-162.619,-276.959,-161.764,0.067753,-2.243648,-1.158828,-1.094246'\n  },\n  EPSG_4633: {\n    towgs84: '137.092,131.66,91.475,-1.9436,-11.5993,-4.3321,-7.4824'\n  },\n  EPSG_4641: {\n    towgs84: '-408.809,366.856,-412.987,1.8842,-0.5308,2.1655,-121.0993'\n  },\n  EPSG_4643: {\n    towgs84: '-480.26,-438.32,-643.429,16.3119,20.1721,-4.0349,-111.7002'\n  },\n  EPSG_4300: {\n    towgs84: '482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15'\n  },\n  EPSG_4188: {\n    towgs84: '482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15'\n  },\n  EPSG_4660: {\n    towgs84: '982.6087,552.753,-540.873,6.681627,-31.611492,-19.848161,16.805'\n  },\n  EPSG_4662: {\n    towgs84: '97.295,-263.247,310.882,-1.5999,0.8386,3.1409,13.3259'\n  },\n  EPSG_3906: {\n    towgs84: '577.88891,165.22205,391.18289,4.9145,-0.94729,-13.05098,7.78664'\n  },\n  EPSG_4307: {\n    towgs84: '-209.3622,-87.8162,404.6198,0.0046,3.4784,0.5805,-1.4547'\n  },\n  EPSG_6892: {\n    towgs84: '-76.269,-16.683,68.562,-6.275,10.536,-4.286,-13.686'\n  },\n  EPSG_4690: {\n    towgs84: '221.597,152.441,176.523,2.403,1.3893,0.884,11.4648'\n  },\n  EPSG_4691: {\n    towgs84: '218.769,150.75,176.75,3.5231,2.0037,1.288,10.9817'\n  },\n  EPSG_4629: {\n    towgs84: '72.51,345.411,79.241,-1.5862,-0.8826,-0.5495,1.3653'\n  },\n  EPSG_4630: {\n    towgs84: '165.804,216.213,180.26,-0.6251,-0.4515,-0.0721,7.4111'\n  },\n  EPSG_4692: {\n    towgs84: '217.109,86.452,23.711,0.0183,-0.0003,0.007,-0.0093'\n  },\n  EPSG_9333: {\n    towgs84: '0,0,0,-0.008393,0.000749,-0.010276,0'\n  },\n  EPSG_9059: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4312: {\n    towgs84: '601.705,84.263,485.227,4.7354,1.3145,5.393,-2.3887'\n  },\n  EPSG_4123: {\n    towgs84: '-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496'\n  },\n  EPSG_4309: {\n    towgs84: '-124.45,183.74,44.64,-0.4384,0.5446,-0.9706,-2.1365'\n  },\n  ESRI_104106: {\n    towgs84: '-283.088,-70.693,117.445,-1.157,0.059,-0.652,-4.058'\n  },\n  EPSG_4281: {\n    towgs84: '-219.247,-73.802,269.529'\n  },\n  EPSG_4322: {\n    towgs84: '0,0,4.5'\n  },\n  EPSG_4324: {\n    towgs84: '0,0,1.9'\n  },\n  EPSG_4284: {\n    towgs84: '43.822,-108.842,-119.585,1.455,-0.761,0.737,0.549'\n  },\n  EPSG_4277: {\n    towgs84: '446.448,-125.157,542.06,0.15,0.247,0.842,-20.489'\n  },\n  EPSG_4207: {\n    towgs84: '-282.1,-72.2,120,-1.529,0.145,-0.89,-4.46'\n  },\n  EPSG_4688: {\n    towgs84: '347.175,1077.618,2623.677,33.9058,-70.6776,9.4013,186.0647'\n  },\n  EPSG_4689: {\n    towgs84: '410.793,54.542,80.501,-2.5596,-2.3517,-0.6594,17.3218'\n  },\n  EPSG_4720: {\n    towgs84: '0,0,4.5'\n  },\n  EPSG_4273: {\n    towgs84: '278.3,93,474.5,7.889,0.05,-6.61,6.21'\n  },\n  EPSG_4240: {\n    towgs84: '204.64,834.74,293.8'\n  },\n  EPSG_4817: {\n    towgs84: '278.3,93,474.5,7.889,0.05,-6.61,6.21'\n  },\n  ESRI_104131: {\n    towgs84: '426.62,142.62,460.09,4.98,4.49,-12.42,-17.1'\n  },\n  EPSG_4265: {\n    towgs84: '-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68'\n  },\n  EPSG_4263: {\n    towgs84: '-111.92,-87.85,114.5,1.875,0.202,0.219,0.032'\n  },\n  EPSG_4298: {\n    towgs84: '-689.5937,623.84046,-65.93566,-0.02331,1.17094,-0.80054,5.88536'\n  },\n  EPSG_4270: {\n    towgs84: '-253.4392,-148.452,386.5267,0.15605,0.43,-0.1013,-0.0424'\n  },\n  EPSG_4229: {\n    towgs84: '-121.8,98.1,-10.7'\n  },\n  EPSG_4220: {\n    towgs84: '-55.5,-348,-229.2'\n  },\n  EPSG_4214: {\n    towgs84: '12.646,-155.176,-80.863'\n  },\n  EPSG_4232: {\n    towgs84: '-345,3,223'\n  },\n  EPSG_4238: {\n    towgs84: '-1.977,-13.06,-9.993,0.364,0.254,0.689,-1.037'\n  },\n  EPSG_4168: {\n    towgs84: '-170,33,326'\n  },\n  EPSG_4131: {\n    towgs84: '199,931,318.9'\n  },\n  EPSG_4152: {\n    towgs84: '-0.9102,2.0141,0.5602,0.029039,0.010065,0.010101,0'\n  },\n  EPSG_5228: {\n    towgs84: '572.213,85.334,461.94,4.9732,1.529,5.2484,3.5378'\n  },\n  EPSG_8351: {\n    towgs84: '485.021,169.465,483.839,7.786342,4.397554,4.102655,0'\n  },\n  EPSG_4683: {\n    towgs84: '-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06'\n  },\n  EPSG_4133: {\n    towgs84: '0,0,0'\n  },\n  EPSG_7373: {\n    towgs84: '0.819,-0.5762,-1.6446,-0.00378,-0.03317,0.00318,0.0693'\n  },\n  EPSG_9075: {\n    towgs84: '-0.9102,2.0141,0.5602,0.029039,0.010065,0.010101,0'\n  },\n  EPSG_9072: {\n    towgs84: '-0.9102,2.0141,0.5602,0.029039,0.010065,0.010101,0'\n  },\n  EPSG_9294: {\n    towgs84: '1.16835,-1.42001,-2.24431,-0.00822,-0.05508,0.01818,0.23388'\n  },\n  EPSG_4212: {\n    towgs84: '-267.434,173.496,181.814,-13.4704,8.7154,7.3926,14.7492'\n  },\n  EPSG_4191: {\n    towgs84: '-44.183,-0.58,-38.489,2.3867,2.7072,-3.5196,-8.2703'\n  },\n  EPSG_4237: {\n    towgs84: '52.684,-71.194,-13.975,-0.312,-0.1063,-0.3729,1.0191'\n  },\n  EPSG_4740: {\n    towgs84: '-1.08,-0.27,-0.9'\n  },\n  EPSG_4124: {\n    towgs84: '419.3836,99.3335,591.3451,0.850389,1.817277,-7.862238,-0.99496'\n  },\n  EPSG_5681: {\n    towgs84: '584.9636,107.7175,413.8067,1.1155,0.2824,-3.1384,7.9922'\n  },\n  EPSG_4141: {\n    towgs84: '23.772,17.49,17.859,-0.3132,-1.85274,1.67299,-5.4262'\n  },\n  EPSG_4204: {\n    towgs84: '-85.645,-273.077,-79.708,2.289,-1.421,2.532,3.194'\n  },\n  EPSG_4319: {\n    towgs84: '226.702,-193.337,-35.371,-2.229,-4.391,9.238,0.9798'\n  },\n  EPSG_4200: {\n    towgs84: '24.82,-131.21,-82.66'\n  },\n  EPSG_4130: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4127: {\n    towgs84: '-82.875,-57.097,-156.768,-2.158,1.524,-0.982,-0.359'\n  },\n  EPSG_4149: {\n    towgs84: '674.374,15.056,405.346'\n  },\n  EPSG_4617: {\n    towgs84: '-0.991,1.9072,0.5129,0.02579,0.00965,0.01166,0'\n  },\n  EPSG_4663: {\n    towgs84: '-210.502,-66.902,-48.476,2.094,-15.067,-5.817,0.485'\n  },\n  EPSG_4664: {\n    towgs84: '-211.939,137.626,58.3,-0.089,0.251,0.079,0.384'\n  },\n  EPSG_4665: {\n    towgs84: '-105.854,165.589,-38.312,-0.003,-0.026,0.024,-0.048'\n  },\n  EPSG_4666: {\n    towgs84: '631.392,-66.551,481.442,1.09,-4.445,-4.487,-4.43'\n  },\n  EPSG_4756: {\n    towgs84: '-192.873,-39.382,-111.202,-0.00205,-0.0005,0.00335,0.0188'\n  },\n  EPSG_4723: {\n    towgs84: '-179.483,-69.379,-27.584,-7.862,8.163,6.042,-13.925'\n  },\n  EPSG_4726: {\n    towgs84: '8.853,-52.644,180.304,-0.393,-2.323,2.96,-24.081'\n  },\n  EPSG_4267: {\n    towgs84: '-8.0,160.0,176.0'\n  },\n  EPSG_5365: {\n    towgs84: '-0.16959,0.35312,0.51846,0.03385,-0.16325,0.03446,0.03693'\n  },\n  EPSG_4218: {\n    towgs84: '304.5,306.5,-318.1'\n  },\n  EPSG_4242: {\n    towgs84: '-33.722,153.789,94.959,-8.581,-4.478,4.54,8.95'\n  },\n  EPSG_4216: {\n    towgs84: '-292.295,248.758,429.447,4.9971,2.99,6.6906,1.0289'\n  },\n  ESRI_104105: {\n    towgs84: '631.392,-66.551,481.442,1.09,-4.445,-4.487,-4.43'\n  },\n  ESRI_104129: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4673: {\n    towgs84: '174.05,-25.49,112.57'\n  },\n  EPSG_4202: {\n    towgs84: '-124,-60,154'\n  },\n  EPSG_4203: {\n    towgs84: '-117.763,-51.51,139.061,0.292,0.443,0.277,-0.191'\n  },\n  EPSG_3819: {\n    towgs84: '595.48,121.69,515.35,4.115,-2.9383,0.853,-3.408'\n  },\n  EPSG_8694: {\n    towgs84: '-93.799,-132.737,-219.073,-1.844,0.648,-6.37,-0.169'\n  },\n  EPSG_4145: {\n    towgs84: '275.57,676.78,229.6'\n  },\n  EPSG_4283: {\n    towgs84: '0.06155,-0.01087,-0.04019,0.039492,0.032722,0.032898,-0.009994'\n  },\n  EPSG_4317: {\n    towgs84: '2.3287,-147.0425,-92.0802,-0.309248,0.324822,0.497299,5.689063'\n  },\n  EPSG_4272: {\n    towgs84: '59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993'\n  },\n  EPSG_4248: {\n    towgs84: '-307.7,265.3,-363.5'\n  },\n  EPSG_5561: {\n    towgs84: '24,-121,-76'\n  },\n  EPSG_5233: {\n    towgs84: '-0.293,766.95,87.713,0.195704,1.695068,3.473016,-0.039338'\n  },\n  ESRI_104130: {\n    towgs84: '-86,-98,-119'\n  },\n  ESRI_104102: {\n    towgs84: '682,-203,480'\n  },\n  ESRI_37207: {\n    towgs84: '7,-10,-26'\n  },\n  EPSG_4675: {\n    towgs84: '59.935,118.4,-10.871'\n  },\n  ESRI_104109: {\n    towgs84: '-89.121,-348.182,260.871'\n  },\n  ESRI_104112: {\n    towgs84: '-185.583,-230.096,281.361'\n  },\n  ESRI_104113: {\n    towgs84: '25.1,-275.6,222.6'\n  },\n  IGNF_WGS72G: {\n    towgs84: '0,12,6'\n  },\n  IGNF_NTFG: {\n    towgs84: '-168,-60,320'\n  },\n  IGNF_EFATE57G: {\n    towgs84: '-127,-769,472'\n  },\n  IGNF_PGP50G: {\n    towgs84: '324.8,153.6,172.1'\n  },\n  IGNF_REUN47G: {\n    towgs84: '94,-948,-1262'\n  },\n  IGNF_CSG67G: {\n    towgs84: '-186,230,110'\n  },\n  IGNF_GUAD48G: {\n    towgs84: '-467,-16,-300'\n  },\n  IGNF_TAHI51G: {\n    towgs84: '162,117,154'\n  },\n  IGNF_TAHAAG: {\n    towgs84: '65,342,77'\n  },\n  IGNF_NUKU72G: {\n    towgs84: '84,274,65'\n  },\n  IGNF_PETRELS72G: {\n    towgs84: '365,194,166'\n  },\n  IGNF_WALL78G: {\n    towgs84: '253,-133,-127'\n  },\n  IGNF_MAYO50G: {\n    towgs84: '-382,-59,-262'\n  },\n  IGNF_TANNAG: {\n    towgs84: '-139,-967,436'\n  },\n  IGNF_IGN72G: {\n    towgs84: '-13,-348,292'\n  },\n  IGNF_ATIGG: {\n    towgs84: '1118,23,66'\n  },\n  IGNF_FANGA84G: {\n    towgs84: '150.57,158.33,118.32'\n  },\n  IGNF_RUSAT84G: {\n    towgs84: '202.13,174.6,-15.74'\n  },\n  IGNF_KAUE70G: {\n    towgs84: '126.74,300.1,-75.49'\n  },\n  IGNF_MOP90G: {\n    towgs84: '-10.8,-1.8,12.77'\n  },\n  IGNF_MHPF67G: {\n    towgs84: '338.08,212.58,-296.17'\n  },\n  IGNF_TAHI79G: {\n    towgs84: '160.61,116.05,153.69'\n  },\n  IGNF_ANAA92G: {\n    towgs84: '1.5,3.84,4.81'\n  },\n  IGNF_MARQUI72G: {\n    towgs84: '330.91,-13.92,58.56'\n  },\n  IGNF_APAT86G: {\n    towgs84: '143.6,197.82,74.05'\n  },\n  IGNF_TUBU69G: {\n    towgs84: '237.17,171.61,-77.84'\n  },\n  IGNF_STPM50G: {\n    towgs84: '11.363,424.148,373.13'\n  },\n  EPSG_4150: {\n    towgs84: '674.374,15.056,405.346'\n  },\n  EPSG_4754: {\n    towgs84: '-208.4058,-109.8777,-2.5764'\n  },\n  ESRI_104101: {\n    towgs84: '372.87,149.23,585.29'\n  },\n  EPSG_4693: {\n    towgs84: '0,-0.15,0.68'\n  },\n  EPSG_6207: {\n    towgs84: '293.17,726.18,245.36'\n  },\n  EPSG_4153: {\n    towgs84: '-133.63,-157.5,-158.62'\n  },\n  EPSG_4132: {\n    towgs84: '-241.54,-163.64,396.06'\n  },\n  EPSG_4221: {\n    towgs84: '-154.5,150.7,100.4'\n  },\n  EPSG_4266: {\n    towgs84: '-80.7,-132.5,41.1'\n  },\n  EPSG_4193: {\n    towgs84: '-70.9,-151.8,-41.4'\n  },\n  EPSG_5340: {\n    towgs84: '-0.41,0.46,-0.35'\n  },\n  EPSG_4246: {\n    towgs84: '-294.7,-200.1,525.5'\n  },\n  EPSG_4318: {\n    towgs84: '-3.2,-5.7,2.8'\n  },\n  EPSG_4121: {\n    towgs84: '-199.87,74.79,246.62'\n  },\n  EPSG_4223: {\n    towgs84: '-260.1,5.5,432.2'\n  },\n  EPSG_4158: {\n    towgs84: '-0.465,372.095,171.736'\n  },\n  EPSG_4285: {\n    towgs84: '-128.16,-282.42,21.93'\n  },\n  EPSG_4613: {\n    towgs84: '-404.78,685.68,45.47'\n  },\n  EPSG_4607: {\n    towgs84: '195.671,332.517,274.607'\n  },\n  EPSG_4475: {\n    towgs84: '-381.788,-57.501,-256.673'\n  },\n  EPSG_4208: {\n    towgs84: '-157.84,308.54,-146.6'\n  },\n  EPSG_4743: {\n    towgs84: '70.995,-335.916,262.898'\n  },\n  EPSG_4710: {\n    towgs84: '-323.65,551.39,-491.22'\n  },\n  EPSG_7881: {\n    towgs84: '-0.077,0.079,0.086'\n  },\n  EPSG_4682: {\n    towgs84: '283.729,735.942,261.143'\n  },\n  EPSG_4739: {\n    towgs84: '-156,-271,-189'\n  },\n  EPSG_4679: {\n    towgs84: '-80.01,253.26,291.19'\n  },\n  EPSG_4750: {\n    towgs84: '-56.263,16.136,-22.856'\n  },\n  EPSG_4644: {\n    towgs84: '-10.18,-350.43,291.37'\n  },\n  EPSG_4695: {\n    towgs84: '-103.746,-9.614,-255.95'\n  },\n  EPSG_4292: {\n    towgs84: '-355,21,72'\n  },\n  EPSG_4302: {\n    towgs84: '-61.702,284.488,472.052'\n  },\n  EPSG_4143: {\n    towgs84: '-124.76,53,466.79'\n  },\n  EPSG_4606: {\n    towgs84: '-153,153,307'\n  },\n  EPSG_4699: {\n    towgs84: '-770.1,158.4,-498.2'\n  },\n  EPSG_4247: {\n    towgs84: '-273.5,110.6,-357.9'\n  },\n  EPSG_4160: {\n    towgs84: '8.88,184.86,106.69'\n  },\n  EPSG_4161: {\n    towgs84: '-233.43,6.65,173.64'\n  },\n  EPSG_9251: {\n    towgs84: '-9.5,122.9,138.2'\n  },\n  EPSG_9253: {\n    towgs84: '-78.1,101.6,133.3'\n  },\n  EPSG_4297: {\n    towgs84: '-198.383,-240.517,-107.909'\n  },\n  EPSG_4269: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4301: {\n    towgs84: '-147,506,687'\n  },\n  EPSG_4618: {\n    towgs84: '-59,-11,-52'\n  },\n  EPSG_4612: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4678: {\n    towgs84: '44.585,-131.212,-39.544'\n  },\n  EPSG_4250: {\n    towgs84: '-130,29,364'\n  },\n  EPSG_4144: {\n    towgs84: '214,804,268'\n  },\n  EPSG_4147: {\n    towgs84: '-17.51,-108.32,-62.39'\n  },\n  EPSG_4259: {\n    towgs84: '-254.1,-5.36,-100.29'\n  },\n  EPSG_4164: {\n    towgs84: '-76,-138,67'\n  },\n  EPSG_4211: {\n    towgs84: '-378.873,676.002,-46.255'\n  },\n  EPSG_4182: {\n    towgs84: '-422.651,-172.995,84.02'\n  },\n  EPSG_4224: {\n    towgs84: '-143.87,243.37,-33.52'\n  },\n  EPSG_4225: {\n    towgs84: '-205.57,168.77,-4.12'\n  },\n  EPSG_5527: {\n    towgs84: '-67.35,3.88,-38.22'\n  },\n  EPSG_4752: {\n    towgs84: '98,390,-22'\n  },\n  EPSG_4310: {\n    towgs84: '-30,190,89'\n  },\n  EPSG_9248: {\n    towgs84: '-192.26,65.72,132.08'\n  },\n  EPSG_4680: {\n    towgs84: '124.5,-63.5,-281'\n  },\n  EPSG_4701: {\n    towgs84: '-79.9,-158,-168.9'\n  },\n  EPSG_4706: {\n    towgs84: '-146.21,112.63,4.05'\n  },\n  EPSG_4805: {\n    towgs84: '682,-203,480'\n  },\n  EPSG_4201: {\n    towgs84: '-165,-11,206'\n  },\n  EPSG_4210: {\n    towgs84: '-157,-2,-299'\n  },\n  EPSG_4183: {\n    towgs84: '-104,167,-38'\n  },\n  EPSG_4139: {\n    towgs84: '11,72,-101'\n  },\n  EPSG_4668: {\n    towgs84: '-86,-98,-119'\n  },\n  EPSG_4717: {\n    towgs84: '-2,151,181'\n  },\n  EPSG_4732: {\n    towgs84: '102,52,-38'\n  },\n  EPSG_4280: {\n    towgs84: '-377,681,-50'\n  },\n  EPSG_4209: {\n    towgs84: '-138,-105,-289'\n  },\n  EPSG_4261: {\n    towgs84: '31,146,47'\n  },\n  EPSG_4658: {\n    towgs84: '-73,46,-86'\n  },\n  EPSG_4721: {\n    towgs84: '265.025,384.929,-194.046'\n  },\n  EPSG_4222: {\n    towgs84: '-136,-108,-292'\n  },\n  EPSG_4601: {\n    towgs84: '-255,-15,71'\n  },\n  EPSG_4602: {\n    towgs84: '725,685,536'\n  },\n  EPSG_4603: {\n    towgs84: '72,213.7,93'\n  },\n  EPSG_4605: {\n    towgs84: '9,183,236'\n  },\n  EPSG_4621: {\n    towgs84: '137,248,-430'\n  },\n  EPSG_4657: {\n    towgs84: '-28,199,5'\n  },\n  EPSG_4316: {\n    towgs84: '103.25,-100.4,-307.19'\n  },\n  EPSG_4642: {\n    towgs84: '-13,-348,292'\n  },\n  EPSG_4698: {\n    towgs84: '145,-187,103'\n  },\n  EPSG_4192: {\n    towgs84: '-206.1,-174.7,-87.7'\n  },\n  EPSG_4311: {\n    towgs84: '-265,120,-358'\n  },\n  EPSG_4135: {\n    towgs84: '58,-283,-182'\n  },\n  ESRI_104138: {\n    towgs84: '198,-226,-347'\n  },\n  EPSG_4245: {\n    towgs84: '-11,851,5'\n  },\n  EPSG_4142: {\n    towgs84: '-125,53,467'\n  },\n  EPSG_4213: {\n    towgs84: '-106,-87,188'\n  },\n  EPSG_4253: {\n    towgs84: '-133,-77,-51'\n  },\n  EPSG_4129: {\n    towgs84: '-132,-110,-335'\n  },\n  EPSG_4713: {\n    towgs84: '-77,-128,142'\n  },\n  EPSG_4239: {\n    towgs84: '217,823,299'\n  },\n  EPSG_4146: {\n    towgs84: '295,736,257'\n  },\n  EPSG_4155: {\n    towgs84: '-83,37,124'\n  },\n  EPSG_4165: {\n    towgs84: '-173,253,27'\n  },\n  EPSG_4672: {\n    towgs84: '175,-38,113'\n  },\n  EPSG_4236: {\n    towgs84: '-637,-549,-203'\n  },\n  EPSG_4251: {\n    towgs84: '-90,40,88'\n  },\n  EPSG_4271: {\n    towgs84: '-2,374,172'\n  },\n  EPSG_4175: {\n    towgs84: '-88,4,101'\n  },\n  EPSG_4716: {\n    towgs84: '298,-304,-375'\n  },\n  EPSG_4315: {\n    towgs84: '-23,259,-9'\n  },\n  EPSG_4744: {\n    towgs84: '-242.2,-144.9,370.3'\n  },\n  EPSG_4244: {\n    towgs84: '-97,787,86'\n  },\n  EPSG_4293: {\n    towgs84: '616,97,-251'\n  },\n  EPSG_4714: {\n    towgs84: '-127,-769,472'\n  },\n  EPSG_4736: {\n    towgs84: '260,12,-147'\n  },\n  EPSG_6883: {\n    towgs84: '-235,-110,393'\n  },\n  EPSG_6894: {\n    towgs84: '-63,176,185'\n  },\n  EPSG_4205: {\n    towgs84: '-43,-163,45'\n  },\n  EPSG_4256: {\n    towgs84: '41,-220,-134'\n  },\n  EPSG_4262: {\n    towgs84: '639,405,60'\n  },\n  EPSG_4604: {\n    towgs84: '174,359,365'\n  },\n  EPSG_4169: {\n    towgs84: '-115,118,426'\n  },\n  EPSG_4620: {\n    towgs84: '-106,-129,165'\n  },\n  EPSG_4184: {\n    towgs84: '-203,141,53'\n  },\n  EPSG_4616: {\n    towgs84: '-289,-124,60'\n  },\n  EPSG_9403: {\n    towgs84: '-307,-92,127'\n  },\n  EPSG_4684: {\n    towgs84: '-133,-321,50'\n  },\n  EPSG_4708: {\n    towgs84: '-491,-22,435'\n  },\n  EPSG_4707: {\n    towgs84: '114,-116,-333'\n  },\n  EPSG_4709: {\n    towgs84: '145,75,-272'\n  },\n  EPSG_4712: {\n    towgs84: '-205,107,53'\n  },\n  EPSG_4711: {\n    towgs84: '124,-234,-25'\n  },\n  EPSG_4718: {\n    towgs84: '230,-199,-752'\n  },\n  EPSG_4719: {\n    towgs84: '211,147,111'\n  },\n  EPSG_4724: {\n    towgs84: '208,-435,-229'\n  },\n  EPSG_4725: {\n    towgs84: '189,-79,-202'\n  },\n  EPSG_4735: {\n    towgs84: '647,1777,-1124'\n  },\n  EPSG_4722: {\n    towgs84: '-794,119,-298'\n  },\n  EPSG_4728: {\n    towgs84: '-307,-92,127'\n  },\n  EPSG_4734: {\n    towgs84: '-632,438,-609'\n  },\n  EPSG_4727: {\n    towgs84: '912,-58,1227'\n  },\n  EPSG_4729: {\n    towgs84: '185,165,42'\n  },\n  EPSG_4730: {\n    towgs84: '170,42,84'\n  },\n  EPSG_4733: {\n    towgs84: '276,-57,149'\n  },\n  ESRI_37218: {\n    towgs84: '230,-199,-752'\n  },\n  ESRI_37240: {\n    towgs84: '-7,215,225'\n  },\n  ESRI_37221: {\n    towgs84: '252,-209,-751'\n  },\n  ESRI_4305: {\n    towgs84: '-123,-206,219'\n  },\n  ESRI_104139: {\n    towgs84: '-73,-247,227'\n  },\n  EPSG_4748: {\n    towgs84: '51,391,-36'\n  },\n  EPSG_4219: {\n    towgs84: '-384,664,-48'\n  },\n  EPSG_4255: {\n    towgs84: '-333,-222,114'\n  },\n  EPSG_4257: {\n    towgs84: '-587.8,519.75,145.76'\n  },\n  EPSG_4646: {\n    towgs84: '-963,510,-359'\n  },\n  EPSG_6881: {\n    towgs84: '-24,-203,268'\n  },\n  EPSG_6882: {\n    towgs84: '-183,-15,273'\n  },\n  EPSG_4715: {\n    towgs84: '-104,-129,239'\n  },\n  IGNF_RGF93GDD: {\n    towgs84: '0,0,0'\n  },\n  IGNF_RGM04GDD: {\n    towgs84: '0,0,0'\n  },\n  IGNF_RGSPM06GDD: {\n    towgs84: '0,0,0'\n  },\n  IGNF_RGTAAF07GDD: {\n    towgs84: '0,0,0'\n  },\n  IGNF_RGFG95GDD: {\n    towgs84: '0,0,0'\n  },\n  IGNF_RGNCG: {\n    towgs84: '0,0,0'\n  },\n  IGNF_RGPFGDD: {\n    towgs84: '0,0,0'\n  },\n  IGNF_ETRS89G: {\n    towgs84: '0,0,0'\n  },\n  IGNF_RGR92GDD: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4173: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4180: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4619: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4667: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4075: {\n    towgs84: '0,0,0'\n  },\n  EPSG_6706: {\n    towgs84: '0,0,0'\n  },\n  EPSG_7798: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4661: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4669: {\n    towgs84: '0,0,0'\n  },\n  EPSG_8685: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4151: {\n    towgs84: '0,0,0'\n  },\n  EPSG_9702: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4758: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4761: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4765: {\n    towgs84: '0,0,0'\n  },\n  EPSG_8997: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4023: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4670: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4694: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4148: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4163: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4167: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4189: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4190: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4176: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4659: {\n    towgs84: '0,0,0'\n  },\n  EPSG_3824: {\n    towgs84: '0,0,0'\n  },\n  EPSG_3889: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4046: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4081: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4558: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4483: {\n    towgs84: '0,0,0'\n  },\n  EPSG_5013: {\n    towgs84: '0,0,0'\n  },\n  EPSG_5264: {\n    towgs84: '0,0,0'\n  },\n  EPSG_5324: {\n    towgs84: '0,0,0'\n  },\n  EPSG_5354: {\n    towgs84: '0,0,0'\n  },\n  EPSG_5371: {\n    towgs84: '0,0,0'\n  },\n  EPSG_5373: {\n    towgs84: '0,0,0'\n  },\n  EPSG_5381: {\n    towgs84: '0,0,0'\n  },\n  EPSG_5393: {\n    towgs84: '0,0,0'\n  },\n  EPSG_5489: {\n    towgs84: '0,0,0'\n  },\n  EPSG_5593: {\n    towgs84: '0,0,0'\n  },\n  EPSG_6135: {\n    towgs84: '0,0,0'\n  },\n  EPSG_6365: {\n    towgs84: '0,0,0'\n  },\n  EPSG_5246: {\n    towgs84: '0,0,0'\n  },\n  EPSG_7886: {\n    towgs84: '0,0,0'\n  },\n  EPSG_8431: {\n    towgs84: '0,0,0'\n  },\n  EPSG_8427: {\n    towgs84: '0,0,0'\n  },\n  EPSG_8699: {\n    towgs84: '0,0,0'\n  },\n  EPSG_8818: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4757: {\n    towgs84: '0,0,0'\n  },\n  EPSG_9140: {\n    towgs84: '0,0,0'\n  },\n  EPSG_8086: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4686: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4737: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4702: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4747: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4749: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4674: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4755: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4759: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4762: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4763: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4764: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4166: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4170: {\n    towgs84: '0,0,0'\n  },\n  EPSG_5546: {\n    towgs84: '0,0,0'\n  },\n  EPSG_7844: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4818: {\n    towgs84: '589,76,480'\n  },\n  EPSG_10328: {\n    towgs84: '0,0,0'\n  },\n  EPSG_9782: {\n    towgs84: '0,0,0'\n  },\n  EPSG_9777: {\n    towgs84: '0,0,0'\n  },\n  EPSG_10690: {\n    towgs84: '0,0,0'\n  },\n  EPSG_10639: {\n    towgs84: '0,0,0'\n  },\n  EPSG_10739: {\n    towgs84: '0,0,0'\n  },\n  EPSG_7686: {\n    towgs84: '0,0,0'\n  },\n  EPSG_8900: {\n    towgs84: '0,0,0'\n  },\n  EPSG_5886: {\n    towgs84: '0,0,0'\n  },\n  EPSG_7683: {\n    towgs84: '0,0,0'\n  },\n  EPSG_6668: {\n    towgs84: '0,0,0'\n  },\n  EPSG_20046: {\n    towgs84: '0,0,0'\n  },\n  EPSG_10299: {\n    towgs84: '0,0,0'\n  },\n  EPSG_10310: {\n    towgs84: '0,0,0'\n  },\n  EPSG_10475: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4742: {\n    towgs84: '0,0,0'\n  },\n  EPSG_10671: {\n    towgs84: '0,0,0'\n  },\n  EPSG_10762: {\n    towgs84: '0,0,0'\n  },\n  EPSG_10725: {\n    towgs84: '0,0,0'\n  },\n  EPSG_10791: {\n    towgs84: '0,0,0'\n  },\n  EPSG_10800: {\n    towgs84: '0,0,0'\n  },\n  EPSG_10305: {\n    towgs84: '0,0,0'\n  },\n  EPSG_10941: {\n    towgs84: '0,0,0'\n  },\n  EPSG_10968: {\n    towgs84: '0,0,0'\n  },\n  EPSG_10875: {\n    towgs84: '0,0,0'\n  },\n  EPSG_6318: {\n    towgs84: '0,0,0'\n  },\n  EPSG_10910: {\n    towgs84: '0,0,0'\n  }\n};\n\nfor (var key in datums) {\n  var datum = datums[key];\n  if (!datum.datumName) {\n    continue;\n  }\n  datums[datum.datumName] = datum;\n}\n\nexport default datums;\n","import { PJD_3PARAM, PJD_7PARAM, PJD_GRIDSHIFT, PJD_WGS84, PJD_NODATUM, SEC_TO_RAD } from './constants/values';\n\nfunction datum(datumCode, datum_params, a, b, es, ep2, nadgrids) {\n  var out = {};\n\n  if (datumCode === undefined || datumCode === 'none') {\n    out.datum_type = PJD_NODATUM;\n  } else {\n    out.datum_type = PJD_WGS84;\n  }\n\n  if (datum_params) {\n    out.datum_params = datum_params.map(parseFloat);\n    if (out.datum_params[0] !== 0 || out.datum_params[1] !== 0 || out.datum_params[2] !== 0) {\n      out.datum_type = PJD_3PARAM;\n    }\n    if (out.datum_params.length > 3) {\n      if (out.datum_params[3] !== 0 || out.datum_params[4] !== 0 || out.datum_params[5] !== 0 || out.datum_params[6] !== 0) {\n        out.datum_type = PJD_7PARAM;\n        out.datum_params[3] *= SEC_TO_RAD;\n        out.datum_params[4] *= SEC_TO_RAD;\n        out.datum_params[5] *= SEC_TO_RAD;\n        out.datum_params[6] = (out.datum_params[6] / 1000000.0) + 1.0;\n      }\n    }\n  }\n\n  if (nadgrids) {\n    out.datum_type = PJD_GRIDSHIFT;\n    out.grids = nadgrids;\n  }\n  out.a = a; // datum object also uses these values\n  out.b = b;\n  out.es = es;\n  out.ep2 = ep2;\n  return out;\n}\n\nexport default datum;\n","/**\n * Resources for details of NTv2 file formats:\n * - https://web.archive.org/web/20140127204822if_/http://www.mgs.gov.on.ca:80/stdprodconsume/groups/content/@mgs/@iandit/documents/resourcelist/stel02_047447.pdf\n * - http://mimaka.com/help/gs/html/004_NTV2%20Data%20Format.htm\n */\n\n/**\n * @typedef {Object} NadgridInfo\n * @property {string} name The name of the NAD grid or 'null' if not specified.\n * @property {boolean} mandatory Indicates if the grid is mandatory (true) or optional (false).\n * @property {*} grid The loaded NAD grid object, or null if not loaded or not applicable.\n * @property {boolean} isNull True if the grid is explicitly 'null', otherwise false.\n */\n\n/**\n * @typedef {Object} NTV2GridOptions\n * @property {boolean} [includeErrorFields=true] Whether to include error fields in the subgrids.\n */\n\n/**\n * @typedef {Object} NadgridHeader\n * @property {number} [nFields] Number of fields in the header.\n * @property {number} [nSubgridFields] Number of fields in each subgrid header.\n * @property {number} nSubgrids Number of subgrids in the file.\n * @property {string} [shiftType] Type of shift (e.g., \"SECONDS\").\n * @property {number} [fromSemiMajorAxis] Source ellipsoid semi-major axis.\n * @property {number} [fromSemiMinorAxis] Source ellipsoid semi-minor axis.\n * @property {number} [toSemiMajorAxis] Target ellipsoid semi-major axis.\n * @property {number} [toSemiMinorAxis] Target ellipsoid semi-minor axis.\n */\n\n/**\n * @typedef {Object} Subgrid\n * @property {Array<number>} ll Lower left corner of the grid in radians [longitude, latitude].\n * @property {Array<number>} del Grid spacing in radians [longitude interval, latitude interval].\n * @property {Array<number>} lim Number of columns in the grid [longitude columns, latitude columns].\n * @property {number} [count] Total number of grid nodes.\n * @property {Array} cvs Mapped node values for the grid.\n */\n\n/** @typedef {{header: NadgridHeader, subgrids: Array<Subgrid>}} NADGrid */\n\n/**\n * @typedef {Object} GeoTIFF\n * @property {() => Promise<number>} getImageCount - Returns the number of images in the GeoTIFF.\n * @property {(index: number) => Promise<GeoTIFFImage>} getImage - Returns a GeoTIFFImage for the given index.\n */\n\n/**\n * @typedef {Object} GeoTIFFImage\n * @property {() => number} getWidth - Returns the width of the image.\n * @property {() => number} getHeight - Returns the height of the image.\n * @property {() => number[]} getBoundingBox - Returns the bounding box as [minX, minY, maxX, maxY] in degrees.\n * @property {() => Promise<ArrayLike<ArrayLike<number>>>} readRasters - Returns the raster data as an array of bands.\n * @property {Object} fileDirectory - The file directory object containing metadata.\n * @property {Object} fileDirectory.ModelPixelScale - The pixel scale array [scaleX, scaleY, scaleZ] in degrees.\n */\n\nvar loadedNadgrids = {};\n\n/**\n * @overload\n * @param {string} key - The key to associate with the loaded grid.\n * @param {ArrayBuffer} data - The NTv2 grid data as an ArrayBuffer.\n * @param {NTV2GridOptions} [options] - Optional parameters for loading the grid.\n * @returns {NADGrid} - The loaded NAD grid information.\n */\n/**\n * @overload\n * @param {string} key - The key to associate with the loaded grid.\n * @param {GeoTIFF} data - The GeoTIFF instance to read the grid from.\n * @returns {{ready: Promise<NADGrid>}} - A promise that resolves to the loaded grid information.\n */\n/**\n * Load either a NTv2 file (.gsb) or a Geotiff (.tif) to a key that can be used in a proj string like +nadgrids=<key>. Pass the NTv2 file\n * as an ArrayBuffer. Pass Geotiff as a GeoTIFF instance from the geotiff.js library.\n * @param {string} key - The key to associate with the loaded grid.\n * @param {ArrayBuffer|GeoTIFF} data The data to load, either an ArrayBuffer for NTv2 or a GeoTIFF instance.\n * @param {NTV2GridOptions} [options] Optional parameters.\n * @returns {{ready: Promise<NADGrid>}|NADGrid} - A promise that resolves to the loaded grid information.\n */\nexport default function nadgrid(key, data, options) {\n  if (data instanceof ArrayBuffer) {\n    return readNTV2Grid(key, data, options);\n  }\n  return { ready: readGeotiffGrid(key, data) };\n}\n\n/**\n * @param {string} key The key to associate with the loaded grid.\n * @param {ArrayBuffer} data The NTv2 grid data as an ArrayBuffer.\n * @param {NTV2GridOptions} [options] Optional parameters for loading the grid.\n * @returns {NADGrid} The loaded NAD grid information.\n */\nfunction readNTV2Grid(key, data, options) {\n  var includeErrorFields = true;\n  if (options !== undefined && options.includeErrorFields === false) {\n    includeErrorFields = false;\n  }\n  var view = new DataView(data);\n  var isLittleEndian = detectLittleEndian(view);\n  var header = readHeader(view, isLittleEndian);\n  var subgrids = readSubgrids(view, header, isLittleEndian, includeErrorFields);\n  var nadgrid = { header: header, subgrids: subgrids };\n  loadedNadgrids[key] = nadgrid;\n  return nadgrid;\n}\n\n/**\n * @param {string} key The key to associate with the loaded grid.\n * @param {GeoTIFF} tiff The GeoTIFF instance to read the grid from.\n * @returns {Promise<NADGrid>} A promise that resolves to the loaded NAD grid information.\n */\nasync function readGeotiffGrid(key, tiff) {\n  var subgrids = [];\n  var subGridCount = await tiff.getImageCount();\n  // proj produced tiff grid shift files appear to organize lower res subgrids first, higher res/ child subgrids last.\n  for (var subgridIndex = subGridCount - 1; subgridIndex >= 0; subgridIndex--) {\n    var image = await tiff.getImage(subgridIndex);\n\n    var rasters = await image.readRasters();\n    var data = rasters;\n    var lim = [image.getWidth(), image.getHeight()];\n    var imageBBoxRadians = image.getBoundingBox().map(degreesToRadians);\n    var del = [image.fileDirectory.ModelPixelScale[0], image.fileDirectory.ModelPixelScale[1]].map(degreesToRadians);\n\n    var maxX = imageBBoxRadians[0] + (lim[0] - 1) * del[0];\n    var minY = imageBBoxRadians[3] - (lim[1] - 1) * del[1];\n\n    var latitudeOffsetBand = data[0];\n    var longitudeOffsetBand = data[1];\n    var nodes = [];\n\n    for (let i = lim[1] - 1; i >= 0; i--) {\n      for (let j = lim[0] - 1; j >= 0; j--) {\n        var index = i * lim[0] + j;\n        nodes.push([-secondsToRadians(longitudeOffsetBand[index]), secondsToRadians(latitudeOffsetBand[index])]);\n      }\n    }\n\n    subgrids.push({\n      del: del,\n      lim: lim,\n      ll: [-maxX, minY],\n      cvs: nodes\n    });\n  }\n\n  var tifGrid = {\n    header: {\n      nSubgrids: subGridCount\n    },\n    subgrids: subgrids\n  };\n  loadedNadgrids[key] = tifGrid;\n  return tifGrid;\n};\n\n/**\n * Given a proj4 value for nadgrids, return an array of loaded grids\n * @param {string} nadgrids A comma-separated list of grid names, optionally prefixed with '@' to indicate optional grids.\n * @returns\n */\nexport function getNadgrids(nadgrids) {\n  // Format details: http://proj.maptools.org/gen_parms.html\n  if (nadgrids === undefined) {\n    return null;\n  }\n  var grids = nadgrids.split(',');\n  return grids.map(parseNadgridString);\n}\n\n/**\n * @param {string} value The nadgrid string to get information for.\n * @returns {NadgridInfo|null} An object with grid information, or null if the input is empty.\n */\nfunction parseNadgridString(value) {\n  if (value.length === 0) {\n    return null;\n  }\n  var optional = value[0] === '@';\n  if (optional) {\n    value = value.slice(1);\n  }\n  if (value === 'null') {\n    return { name: 'null', mandatory: !optional, grid: null, isNull: true };\n  }\n  return {\n    name: value,\n    mandatory: !optional,\n    grid: loadedNadgrids[value] || null,\n    isNull: false\n  };\n}\n\nfunction degreesToRadians(degrees) {\n  return (degrees) * Math.PI / 180;\n}\n\nfunction secondsToRadians(seconds) {\n  return (seconds / 3600) * Math.PI / 180;\n}\n\nfunction detectLittleEndian(view) {\n  var nFields = view.getInt32(8, false);\n  if (nFields === 11) {\n    return false;\n  }\n  nFields = view.getInt32(8, true);\n  if (nFields !== 11) {\n    console.warn('Failed to detect nadgrid endian-ness, defaulting to little-endian');\n  }\n  return true;\n}\n\nfunction readHeader(view, isLittleEndian) {\n  return {\n    nFields: view.getInt32(8, isLittleEndian),\n    nSubgridFields: view.getInt32(24, isLittleEndian),\n    nSubgrids: view.getInt32(40, isLittleEndian),\n    shiftType: decodeString(view, 56, 56 + 8).trim(),\n    fromSemiMajorAxis: view.getFloat64(120, isLittleEndian),\n    fromSemiMinorAxis: view.getFloat64(136, isLittleEndian),\n    toSemiMajorAxis: view.getFloat64(152, isLittleEndian),\n    toSemiMinorAxis: view.getFloat64(168, isLittleEndian)\n  };\n}\n\nfunction decodeString(view, start, end) {\n  return String.fromCharCode.apply(null, new Uint8Array(view.buffer.slice(start, end)));\n}\n\nfunction readSubgrids(view, header, isLittleEndian, includeErrorFields) {\n  var gridOffset = 176;\n  var grids = [];\n  for (var i = 0; i < header.nSubgrids; i++) {\n    var subHeader = readGridHeader(view, gridOffset, isLittleEndian);\n    var nodes = readGridNodes(view, gridOffset, subHeader, isLittleEndian, includeErrorFields);\n    var lngColumnCount = Math.round(\n      1 + (subHeader.upperLongitude - subHeader.lowerLongitude) / subHeader.longitudeInterval);\n    var latColumnCount = Math.round(\n      1 + (subHeader.upperLatitude - subHeader.lowerLatitude) / subHeader.latitudeInterval);\n    // Proj4 operates on radians whereas the coordinates are in seconds in the grid\n    grids.push({\n      ll: [secondsToRadians(subHeader.lowerLongitude), secondsToRadians(subHeader.lowerLatitude)],\n      del: [secondsToRadians(subHeader.longitudeInterval), secondsToRadians(subHeader.latitudeInterval)],\n      lim: [lngColumnCount, latColumnCount],\n      count: subHeader.gridNodeCount,\n      cvs: mapNodes(nodes)\n    });\n    var rowSize = 16;\n    if (includeErrorFields === false) {\n      rowSize = 8;\n    }\n    gridOffset += 176 + subHeader.gridNodeCount * rowSize;\n  }\n  return grids;\n}\n\n/**\n * @param {*} nodes\n * @returns Array<Array<number>>\n */\nfunction mapNodes(nodes) {\n  return nodes.map(function (r) {\n    return [secondsToRadians(r.longitudeShift), secondsToRadians(r.latitudeShift)];\n  });\n}\n\nfunction readGridHeader(view, offset, isLittleEndian) {\n  return {\n    name: decodeString(view, offset + 8, offset + 16).trim(),\n    parent: decodeString(view, offset + 24, offset + 24 + 8).trim(),\n    lowerLatitude: view.getFloat64(offset + 72, isLittleEndian),\n    upperLatitude: view.getFloat64(offset + 88, isLittleEndian),\n    lowerLongitude: view.getFloat64(offset + 104, isLittleEndian),\n    upperLongitude: view.getFloat64(offset + 120, isLittleEndian),\n    latitudeInterval: view.getFloat64(offset + 136, isLittleEndian),\n    longitudeInterval: view.getFloat64(offset + 152, isLittleEndian),\n    gridNodeCount: view.getInt32(offset + 168, isLittleEndian)\n  };\n}\n\nfunction readGridNodes(view, offset, gridHeader, isLittleEndian, includeErrorFields) {\n  var nodesOffset = offset + 176;\n  var gridRecordLength = 16;\n\n  if (includeErrorFields === false) {\n    gridRecordLength = 8;\n  }\n\n  var gridShiftRecords = [];\n  for (var i = 0; i < gridHeader.gridNodeCount; i++) {\n    var record = {\n      latitudeShift: view.getFloat32(nodesOffset + i * gridRecordLength, isLittleEndian),\n      longitudeShift: view.getFloat32(nodesOffset + i * gridRecordLength + 4, isLittleEndian)\n\n    };\n\n    if (includeErrorFields !== false) {\n      record.latitudeAccuracy = view.getFloat32(nodesOffset + i * gridRecordLength + 8, isLittleEndian);\n      record.longitudeAccuracy = view.getFloat32(nodesOffset + i * gridRecordLength + 12, isLittleEndian);\n    }\n\n    gridShiftRecords.push(record);\n  }\n  return gridShiftRecords;\n}\n","import parseCode from './parseCode';\nimport extend from './extend';\nimport projections from './projections';\nimport { sphere as dc_sphere, eccentricity as dc_eccentricity } from './deriveConstants';\nimport Datum from './constants/Datum';\nimport datum from './datum';\nimport match from './match';\nimport { getNadgrids } from './nadgrid';\n\n/**\n * @typedef {Object} DatumDefinition\n * @property {number} datum_type - The type of datum.\n * @property {number} a - Semi-major axis of the ellipsoid.\n * @property {number} b - Semi-minor axis of the ellipsoid.\n * @property {number} es - Eccentricity squared of the ellipsoid.\n * @property {number} ep2 - Second eccentricity squared of the ellipsoid.\n */\n\n/**\n * @param {string | import('./core').PROJJSONDefinition | import('./defs').ProjectionDefinition} srsCode\n * @param {(errorMessage?: string, instance?: Projection) => void} [callback]\n */\nfunction Projection(srsCode, callback) {\n  if (!(this instanceof Projection)) {\n    return new Projection(srsCode);\n  }\n  /** @type {<T extends import('./core').TemplateCoordinates>(coordinates: T, enforceAxis?: boolean) => T} */\n  this.forward = null;\n  /** @type {<T extends import('./core').TemplateCoordinates>(coordinates: T, enforceAxis?: boolean) => T} */\n  this.inverse = null;\n  /** @type {function(): void} */\n  this.init = null;\n  /** @type {string} */\n  this.name;\n  /** @type {Array<string>} */\n  this.names = null;\n  /** @type {string} */\n  this.title;\n  callback = callback || function (error) {\n    if (error) {\n      throw error;\n    }\n  };\n  var json = parseCode(srsCode);\n  if (typeof json !== 'object') {\n    callback('Could not parse to valid json: ' + srsCode);\n    return;\n  }\n  var ourProj = Projection.projections.get(json.projName);\n  if (!ourProj) {\n    callback('Could not get projection name from: ' + srsCode);\n    return;\n  }\n  if (json.datumCode && json.datumCode !== 'none') {\n    var datumDef = match(Datum, json.datumCode);\n    if (datumDef) {\n      json.datum_params = json.datum_params || (datumDef.towgs84 ? datumDef.towgs84.split(',') : null);\n      json.ellps = datumDef.ellipse;\n      json.datumName = datumDef.datumName ? datumDef.datumName : json.datumCode;\n    }\n  }\n  json.k0 = json.k0 || 1.0;\n  json.axis = json.axis || 'enu';\n  json.ellps = json.ellps || 'wgs84';\n  json.lat1 = json.lat1 || json.lat0; // Lambert_Conformal_Conic_1SP, for example, needs this\n\n  var sphere_ = dc_sphere(json.a, json.b, json.rf, json.ellps, json.sphere);\n  var ecc = dc_eccentricity(sphere_.a, sphere_.b, sphere_.rf, json.R_A);\n  var nadgrids = getNadgrids(json.nadgrids);\n  /** @type {DatumDefinition} */\n  var datumObj = json.datum || datum(json.datumCode, json.datum_params, sphere_.a, sphere_.b, ecc.es, ecc.ep2,\n    nadgrids);\n\n  extend(this, json); // transfer everything over from the projection because we don't know what we'll need\n  extend(this, ourProj); // transfer all the methods from the projection\n\n  // copy the 4 things over we calculated in deriveConstants.sphere\n  this.a = sphere_.a;\n  this.b = sphere_.b;\n  this.rf = sphere_.rf;\n  this.sphere = sphere_.sphere;\n\n  // copy the 3 things we calculated in deriveConstants.eccentricity\n  this.es = ecc.es;\n  this.e = ecc.e;\n  this.ep2 = ecc.ep2;\n\n  // add in the datum object\n  this.datum = datumObj;\n\n  // init the projection\n  if ('init' in this && typeof this.init === 'function') {\n    this.init();\n  }\n\n  // legecy callback from back in the day when it went to spatialreference.org\n  callback(null, this);\n}\nProjection.projections = projections;\nProjection.projections.start();\nexport default Projection;\n","'use strict';\nimport { PJD_3PARAM, PJD_7PARAM, HALF_PI } from './constants/values';\nexport function compareDatums(source, dest) {\n  if (source.datum_type !== dest.datum_type) {\n    return false; // false, datums are not equal\n  } else if (source.a !== dest.a || Math.abs(source.es - dest.es) > 0.000000000050) {\n    // the tolerance for es is to ensure that GRS80 and WGS84\n    // are considered identical\n    return false;\n  } else if (source.datum_type === PJD_3PARAM) {\n    return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2]);\n  } else if (source.datum_type === PJD_7PARAM) {\n    return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2] && source.datum_params[3] === dest.datum_params[3] && source.datum_params[4] === dest.datum_params[4] && source.datum_params[5] === dest.datum_params[5] && source.datum_params[6] === dest.datum_params[6]);\n  } else {\n    return true; // datums are equal\n  }\n} // cs_compare_datums()\n\n/*\n * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates\n * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z),\n * according to the current ellipsoid parameters.\n *\n *    Latitude  : Geodetic latitude in radians                     (input)\n *    Longitude : Geodetic longitude in radians                    (input)\n *    Height    : Geodetic height, in meters                       (input)\n *    X         : Calculated Geocentric X coordinate, in meters    (output)\n *    Y         : Calculated Geocentric Y coordinate, in meters    (output)\n *    Z         : Calculated Geocentric Z coordinate, in meters    (output)\n *\n */\nexport function geodeticToGeocentric(p, es, a) {\n  var Longitude = p.x;\n  var Latitude = p.y;\n  var Height = p.z ? p.z : 0; // Z value not always supplied\n\n  var Rn; /*  Earth radius at location  */\n  var Sin_Lat; /*  Math.sin(Latitude)  */\n  var Sin2_Lat; /*  Square of Math.sin(Latitude)  */\n  var Cos_Lat; /*  Math.cos(Latitude)  */\n\n  /*\n   ** Don't blow up if Latitude is just a little out of the value\n   ** range as it may just be a rounding issue.  Also removed longitude\n   ** test, it should be wrapped by Math.cos() and Math.sin().  NFW for PROJ.4, Sep/2001.\n   */\n  if (Latitude < -HALF_PI && Latitude > -1.001 * HALF_PI) {\n    Latitude = -HALF_PI;\n  } else if (Latitude > HALF_PI && Latitude < 1.001 * HALF_PI) {\n    Latitude = HALF_PI;\n  } else if (Latitude < -HALF_PI) {\n    /* Latitude out of range */\n    // ..reportError('geocent:lat out of range:' + Latitude);\n    return { x: -Infinity, y: -Infinity, z: p.z };\n  } else if (Latitude > HALF_PI) {\n    /* Latitude out of range */\n    return { x: Infinity, y: Infinity, z: p.z };\n  }\n\n  if (Longitude > Math.PI) {\n    Longitude -= (2 * Math.PI);\n  }\n  Sin_Lat = Math.sin(Latitude);\n  Cos_Lat = Math.cos(Latitude);\n  Sin2_Lat = Sin_Lat * Sin_Lat;\n  Rn = a / (Math.sqrt(1.0e0 - es * Sin2_Lat));\n  return {\n    x: (Rn + Height) * Cos_Lat * Math.cos(Longitude),\n    y: (Rn + Height) * Cos_Lat * Math.sin(Longitude),\n    z: ((Rn * (1 - es)) + Height) * Sin_Lat\n  };\n} // cs_geodetic_to_geocentric()\n\nexport function geocentricToGeodetic(p, es, a, b) {\n  /* local defintions and variables */\n  /* end-criterium of loop, accuracy of sin(Latitude) */\n  var genau = 1e-12;\n  var genau2 = (genau * genau);\n  var maxiter = 30;\n\n  var P; /* distance between semi-minor axis and location */\n  var RR; /* distance between center and location */\n  var CT; /* sin of geocentric latitude */\n  var ST; /* cos of geocentric latitude */\n  var RX;\n  var RK;\n  var RN; /* Earth radius at location */\n  var CPHI0; /* cos of start or old geodetic latitude in iterations */\n  var SPHI0; /* sin of start or old geodetic latitude in iterations */\n  var CPHI; /* cos of searched geodetic latitude */\n  var SPHI; /* sin of searched geodetic latitude */\n  var SDPHI; /* end-criterium: addition-theorem of sin(Latitude(iter)-Latitude(iter-1)) */\n  var iter; /* # of continous iteration, max. 30 is always enough (s.a.) */\n\n  var X = p.x;\n  var Y = p.y;\n  var Z = p.z ? p.z : 0.0; // Z value not always supplied\n  var Longitude;\n  var Latitude;\n  var Height;\n\n  P = Math.sqrt(X * X + Y * Y);\n  RR = Math.sqrt(X * X + Y * Y + Z * Z);\n\n  /*      special cases for latitude and longitude */\n  if (P / a < genau) {\n    /*  special case, if P=0. (X=0., Y=0.) */\n    Longitude = 0.0;\n\n    /*  if (X,Y,Z)=(0.,0.,0.) then Height becomes semi-minor axis\n     *  of ellipsoid (=center of mass), Latitude becomes PI/2 */\n    if (RR / a < genau) {\n      Latitude = HALF_PI;\n      Height = -b;\n      return {\n        x: p.x,\n        y: p.y,\n        z: p.z\n      };\n    }\n  } else {\n    /*  ellipsoidal (geodetic) longitude\n     *  interval: -PI < Longitude <= +PI */\n    Longitude = Math.atan2(Y, X);\n  }\n\n  /* --------------------------------------------------------------\n   * Following iterative algorithm was developped by\n   * \"Institut for Erdmessung\", University of Hannover, July 1988.\n   * Internet: www.ife.uni-hannover.de\n   * Iterative computation of CPHI,SPHI and Height.\n   * Iteration of CPHI and SPHI to 10**-12 radian resp.\n   * 2*10**-7 arcsec.\n   * --------------------------------------------------------------\n   */\n  CT = Z / RR;\n  ST = P / RR;\n  RX = 1.0 / Math.sqrt(1.0 - es * (2.0 - es) * ST * ST);\n  CPHI0 = ST * (1.0 - es) * RX;\n  SPHI0 = CT * RX;\n  iter = 0;\n\n  /* loop to find sin(Latitude) resp. Latitude\n   * until |sin(Latitude(iter)-Latitude(iter-1))| < genau */\n  do {\n    iter++;\n    RN = a / Math.sqrt(1.0 - es * SPHI0 * SPHI0);\n\n    /*  ellipsoidal (geodetic) height */\n    Height = P * CPHI0 + Z * SPHI0 - RN * (1.0 - es * SPHI0 * SPHI0);\n\n    RK = es * RN / (RN + Height);\n    RX = 1.0 / Math.sqrt(1.0 - RK * (2.0 - RK) * ST * ST);\n    CPHI = ST * (1.0 - RK) * RX;\n    SPHI = CT * RX;\n    SDPHI = SPHI * CPHI0 - CPHI * SPHI0;\n    CPHI0 = CPHI;\n    SPHI0 = SPHI;\n  }\n  while (SDPHI * SDPHI > genau2 && iter < maxiter);\n\n  /*      ellipsoidal (geodetic) latitude */\n  Latitude = Math.atan(SPHI / Math.abs(CPHI));\n  return {\n    x: Longitude,\n    y: Latitude,\n    z: Height\n  };\n} // cs_geocentric_to_geodetic()\n\n/****************************************************************/\n// pj_geocentic_to_wgs84( p )\n//  p = point to transform in geocentric coordinates (x,y,z)\n\n/** point object, nothing fancy, just allows values to be\n    passed back and forth by reference rather than by value.\n    Other point classes may be used as long as they have\n    x and y properties, which will get modified in the transform method.\n*/\nexport function geocentricToWgs84(p, datum_type, datum_params) {\n  if (datum_type === PJD_3PARAM) {\n    // if( x[io] === HUGE_VAL )\n    //    continue;\n    return {\n      x: p.x + datum_params[0],\n      y: p.y + datum_params[1],\n      z: p.z + datum_params[2]\n    };\n  } else if (datum_type === PJD_7PARAM) {\n    var Dx_BF = datum_params[0];\n    var Dy_BF = datum_params[1];\n    var Dz_BF = datum_params[2];\n    var Rx_BF = datum_params[3];\n    var Ry_BF = datum_params[4];\n    var Rz_BF = datum_params[5];\n    var M_BF = datum_params[6];\n    // if( x[io] === HUGE_VAL )\n    //    continue;\n    return {\n      x: M_BF * (p.x - Rz_BF * p.y + Ry_BF * p.z) + Dx_BF,\n      y: M_BF * (Rz_BF * p.x + p.y - Rx_BF * p.z) + Dy_BF,\n      z: M_BF * (-Ry_BF * p.x + Rx_BF * p.y + p.z) + Dz_BF\n    };\n  }\n} // cs_geocentric_to_wgs84\n\n/****************************************************************/\n// pj_geocentic_from_wgs84()\n//  coordinate system definition,\n//  point to transform in geocentric coordinates (x,y,z)\nexport function geocentricFromWgs84(p, datum_type, datum_params) {\n  if (datum_type === PJD_3PARAM) {\n    // if( x[io] === HUGE_VAL )\n    //    continue;\n    return {\n      x: p.x - datum_params[0],\n      y: p.y - datum_params[1],\n      z: p.z - datum_params[2]\n    };\n  } else if (datum_type === PJD_7PARAM) {\n    var Dx_BF = datum_params[0];\n    var Dy_BF = datum_params[1];\n    var Dz_BF = datum_params[2];\n    var Rx_BF = datum_params[3];\n    var Ry_BF = datum_params[4];\n    var Rz_BF = datum_params[5];\n    var M_BF = datum_params[6];\n    var x_tmp = (p.x - Dx_BF) / M_BF;\n    var y_tmp = (p.y - Dy_BF) / M_BF;\n    var z_tmp = (p.z - Dz_BF) / M_BF;\n    // if( x[io] === HUGE_VAL )\n    //    continue;\n\n    return {\n      x: x_tmp + Rz_BF * y_tmp - Ry_BF * z_tmp,\n      y: -Rz_BF * x_tmp + y_tmp + Rx_BF * z_tmp,\n      z: Ry_BF * x_tmp - Rx_BF * y_tmp + z_tmp\n    };\n  } // cs_geocentric_from_wgs84()\n}\n","import {\n  PJD_3PARAM,\n  PJD_7PARAM,\n  PJD_GRIDSHIFT,\n  PJD_NODATUM,\n  R2D,\n  SRS_WGS84_ESQUARED,\n  SRS_WGS84_SEMIMAJOR, SRS_WGS84_SEMIMINOR\n} from './constants/values';\n\nimport { geodeticToGeocentric, geocentricToGeodetic, geocentricToWgs84, geocentricFromWgs84, compareDatums } from './datumUtils';\nimport adjust_lon from './common/adjust_lon';\nfunction checkParams(type) {\n  return (type === PJD_3PARAM || type === PJD_7PARAM);\n}\n\nexport default function (source, dest, point) {\n  // Short cut if the datums are identical.\n  if (compareDatums(source, dest)) {\n    return point; // in this case, zero is sucess,\n    // whereas cs_compare_datums returns 1 to indicate TRUE\n    // confusing, should fix this\n  }\n\n  // Explicitly skip datum transform by setting 'datum=none' as parameter for either source or dest\n  if (source.datum_type === PJD_NODATUM || dest.datum_type === PJD_NODATUM) {\n    return point;\n  }\n\n  // If this datum requires grid shifts, then apply it to geodetic coordinates.\n  var source_a = source.a;\n  var source_es = source.es;\n  if (source.datum_type === PJD_GRIDSHIFT) {\n    var gridShiftCode = applyGridShift(source, false, point);\n    if (gridShiftCode !== 0) {\n      return undefined;\n    }\n    source_a = SRS_WGS84_SEMIMAJOR;\n    source_es = SRS_WGS84_ESQUARED;\n  }\n\n  var dest_a = dest.a;\n  var dest_b = dest.b;\n  var dest_es = dest.es;\n  if (dest.datum_type === PJD_GRIDSHIFT) {\n    dest_a = SRS_WGS84_SEMIMAJOR;\n    dest_b = SRS_WGS84_SEMIMINOR;\n    dest_es = SRS_WGS84_ESQUARED;\n  }\n\n  // Do we need to go through geocentric coordinates?\n  if (source_es === dest_es && source_a === dest_a && !checkParams(source.datum_type) && !checkParams(dest.datum_type)) {\n    return point;\n  }\n\n  // Convert to geocentric coordinates.\n  point = geodeticToGeocentric(point, source_es, source_a);\n  // Convert between datums\n  if (checkParams(source.datum_type)) {\n    point = geocentricToWgs84(point, source.datum_type, source.datum_params);\n  }\n  if (checkParams(dest.datum_type)) {\n    point = geocentricFromWgs84(point, dest.datum_type, dest.datum_params);\n  }\n  point = geocentricToGeodetic(point, dest_es, dest_a, dest_b);\n\n  if (dest.datum_type === PJD_GRIDSHIFT) {\n    var destGridShiftResult = applyGridShift(dest, true, point);\n    if (destGridShiftResult !== 0) {\n      return undefined;\n    }\n  }\n\n  return point;\n}\n\nexport function applyGridShift(source, inverse, point) {\n  if (source.grids === null || source.grids.length === 0) {\n    console.log('Grid shift grids not found');\n    return -1;\n  }\n  var input = { x: -point.x, y: point.y };\n  var output = { x: Number.NaN, y: Number.NaN };\n  var attemptedGrids = [];\n  outer:\n  for (var i = 0; i < source.grids.length; i++) {\n    var grid = source.grids[i];\n    attemptedGrids.push(grid.name);\n    if (grid.isNull) {\n      output = input;\n      break;\n    }\n    if (grid.grid === null) {\n      if (grid.mandatory) {\n        console.log('Unable to find mandatory grid \\'' + grid.name + '\\'');\n        return -1;\n      }\n      continue;\n    }\n    var subgrids = grid.grid.subgrids;\n    for (var j = 0, jj = subgrids.length; j < jj; j++) {\n      var subgrid = subgrids[j];\n      // skip tables that don't match our point at all\n      var epsilon = (Math.abs(subgrid.del[1]) + Math.abs(subgrid.del[0])) / 10000.0;\n      var minX = subgrid.ll[0] - epsilon;\n      var minY = subgrid.ll[1] - epsilon;\n      var maxX = subgrid.ll[0] + (subgrid.lim[0] - 1) * subgrid.del[0] + epsilon;\n      var maxY = subgrid.ll[1] + (subgrid.lim[1] - 1) * subgrid.del[1] + epsilon;\n      if (minY > input.y || minX > input.x || maxY < input.y || maxX < input.x) {\n        continue;\n      }\n      output = applySubgridShift(input, inverse, subgrid);\n      if (!isNaN(output.x)) {\n        break outer;\n      }\n    }\n  }\n  if (isNaN(output.x)) {\n    console.log('Failed to find a grid shift table for location \\''\n      + -input.x * R2D + ' ' + input.y * R2D + ' tried: \\'' + attemptedGrids + '\\'');\n    return -1;\n  }\n  point.x = -output.x;\n  point.y = output.y;\n  return 0;\n}\n\nfunction applySubgridShift(pin, inverse, ct) {\n  var val = { x: Number.NaN, y: Number.NaN };\n  if (isNaN(pin.x)) {\n    return val;\n  }\n  var tb = { x: pin.x, y: pin.y };\n  tb.x -= ct.ll[0];\n  tb.y -= ct.ll[1];\n  tb.x = adjust_lon(tb.x - Math.PI) + Math.PI;\n  var t = nadInterpolate(tb, ct);\n  if (inverse) {\n    if (isNaN(t.x)) {\n      return val;\n    }\n    t.x = tb.x - t.x;\n    t.y = tb.y - t.y;\n    var i = 9, tol = 1e-12;\n    var dif, del;\n    do {\n      del = nadInterpolate(t, ct);\n      if (isNaN(del.x)) {\n        console.log('Inverse grid shift iteration failed, presumably at grid edge.  Using first approximation.');\n        break;\n      }\n      dif = { x: tb.x - (del.x + t.x), y: tb.y - (del.y + t.y) };\n      t.x += dif.x;\n      t.y += dif.y;\n    } while (i-- && Math.abs(dif.x) > tol && Math.abs(dif.y) > tol);\n    if (i < 0) {\n      console.log('Inverse grid shift iterator failed to converge.');\n      return val;\n    }\n    val.x = adjust_lon(t.x + ct.ll[0]);\n    val.y = t.y + ct.ll[1];\n  } else {\n    if (!isNaN(t.x)) {\n      val.x = pin.x + t.x;\n      val.y = pin.y + t.y;\n    }\n  }\n  return val;\n}\n\nfunction nadInterpolate(pin, ct) {\n  var t = { x: pin.x / ct.del[0], y: pin.y / ct.del[1] };\n  var indx = { x: Math.floor(t.x), y: Math.floor(t.y) };\n  var frct = { x: t.x - 1.0 * indx.x, y: t.y - 1.0 * indx.y };\n  var val = { x: Number.NaN, y: Number.NaN };\n  var inx;\n  if (indx.x < 0 || indx.x >= ct.lim[0]) {\n    return val;\n  }\n  if (indx.y < 0 || indx.y >= ct.lim[1]) {\n    return val;\n  }\n  inx = (indx.y * ct.lim[0]) + indx.x;\n  var f00 = { x: ct.cvs[inx][0], y: ct.cvs[inx][1] };\n  inx++;\n  var f10 = { x: ct.cvs[inx][0], y: ct.cvs[inx][1] };\n  inx += ct.lim[0];\n  var f11 = { x: ct.cvs[inx][0], y: ct.cvs[inx][1] };\n  inx--;\n  var f01 = { x: ct.cvs[inx][0], y: ct.cvs[inx][1] };\n  var m11 = frct.x * frct.y, m10 = frct.x * (1.0 - frct.y),\n    m00 = (1.0 - frct.x) * (1.0 - frct.y), m01 = (1.0 - frct.x) * frct.y;\n  val.x = (m00 * f00.x + m10 * f10.x + m01 * f01.x + m11 * f11.x);\n  val.y = (m00 * f00.y + m10 * f10.y + m01 * f01.y + m11 * f11.y);\n  return val;\n}\n","export default function (crs, denorm, point) {\n  var xin = point.x,\n    yin = point.y,\n    zin = point.z || 0.0;\n  var v, t, i;\n  /** @type {import(\"./core\").InterfaceCoordinates} */\n  var out = {};\n  for (i = 0; i < 3; i++) {\n    if (denorm && i === 2 && point.z === undefined) {\n      continue;\n    }\n    if (i === 0) {\n      v = xin;\n      if ('ew'.indexOf(crs.axis[i]) !== -1) {\n        t = 'x';\n      } else {\n        t = 'y';\n      }\n    } else if (i === 1) {\n      v = yin;\n      if ('ns'.indexOf(crs.axis[i]) !== -1) {\n        t = 'y';\n      } else {\n        t = 'x';\n      }\n    } else {\n      v = zin;\n      t = 'z';\n    }\n    switch (crs.axis[i]) {\n      case 'e':\n        out[t] = v;\n        break;\n      case 'w':\n        out[t] = -v;\n        break;\n      case 'n':\n        out[t] = v;\n        break;\n      case 's':\n        out[t] = -v;\n        break;\n      case 'u':\n        if (point[t] !== undefined) {\n          out.z = v;\n        }\n        break;\n      case 'd':\n        if (point[t] !== undefined) {\n          out.z = -v;\n        }\n        break;\n      default:\n      // console.log(\"ERROR: unknow axis (\"+crs.axis[i]+\") - check definition of \"+crs.projName);\n        return null;\n    }\n  }\n  return out;\n}\n","/**\n * @param {Array<number>} array\n * @returns {import(\"../core\").InterfaceCoordinates}\n */\nexport default function (array) {\n  var out = {\n    x: array[0],\n    y: array[1]\n  };\n  if (array.length > 2) {\n    out.z = array[2];\n  }\n  if (array.length > 3) {\n    out.m = array[3];\n  }\n  return out;\n}\n","export default function (point) {\n  checkCoord(point.x);\n  checkCoord(point.y);\n}\nfunction checkCoord(num) {\n  if (typeof Number.isFinite === 'function') {\n    if (Number.isFinite(num)) {\n      return;\n    }\n    throw new TypeError('coordinates must be finite numbers');\n  }\n  if (typeof num !== 'number' || num !== num || !isFinite(num)) {\n    throw new TypeError('coordinates must be finite numbers');\n  }\n}\n","import { D2R, R2D, PJD_3PARAM, PJD_7PARAM, PJD_GRIDSHIFT } from './constants/values';\nimport datum_transform from './datum_transform';\nimport adjust_axis from './adjust_axis';\nimport proj from './Proj';\nimport toPoint from './common/toPoint';\nimport checkSanity from './checkSanity';\n\nfunction checkNotWGS(source, dest) {\n  return (\n    (source.datum.datum_type === PJD_3PARAM || source.datum.datum_type === PJD_7PARAM || source.datum.datum_type === PJD_GRIDSHIFT) && dest.datumCode !== 'WGS84')\n  || ((dest.datum.datum_type === PJD_3PARAM || dest.datum.datum_type === PJD_7PARAM || dest.datum.datum_type === PJD_GRIDSHIFT) && source.datumCode !== 'WGS84');\n}\n\n/**\n * @param {import('./defs').ProjectionDefinition} source\n * @param {import('./defs').ProjectionDefinition} dest\n * @param {import('./core').TemplateCoordinates} point\n * @param {boolean} enforceAxis\n * @returns {import('./core').InterfaceCoordinates | undefined}\n */\nexport default function transform(source, dest, point, enforceAxis) {\n  var wgs84;\n  if (Array.isArray(point)) {\n    point = toPoint(point);\n  } else {\n    // Clone the point object so inputs don't get modified\n    point = {\n      x: point.x,\n      y: point.y,\n      z: point.z,\n      m: point.m\n    };\n  }\n  var hasZ = point.z !== undefined;\n  checkSanity(point);\n  // Workaround for datum shifts towgs84, if either source or destination projection is not wgs84\n  if (source.datum && dest.datum && checkNotWGS(source, dest)) {\n    wgs84 = new proj('WGS84');\n    point = transform(source, wgs84, point, enforceAxis);\n    source = wgs84;\n  }\n  // DGR, 2010/11/12\n  if (enforceAxis && source.axis !== 'enu') {\n    point = adjust_axis(source, false, point);\n  }\n  // Transform source points to long/lat, if they aren't already.\n  if (source.projName === 'longlat') {\n    point = {\n      x: point.x * D2R,\n      y: point.y * D2R,\n      z: point.z || 0\n    };\n  } else {\n    if (source.to_meter) {\n      point = {\n        x: point.x * source.to_meter,\n        y: point.y * source.to_meter,\n        z: point.z || 0\n      };\n    }\n    point = source.inverse(point); // Convert Cartesian to longlat\n    if (!point) {\n      return;\n    }\n  }\n  // Adjust for the prime meridian if necessary\n  if (source.from_greenwich) {\n    point.x += source.from_greenwich;\n  }\n\n  // Convert datums if needed, and if possible.\n  point = datum_transform(source.datum, dest.datum, point);\n  if (!point) {\n    return;\n  }\n\n  point = /** @type {import('./core').InterfaceCoordinates} */ (point);\n\n  // Adjust for the prime meridian if necessary\n  if (dest.from_greenwich) {\n    point = {\n      x: point.x - dest.from_greenwich,\n      y: point.y,\n      z: point.z || 0\n    };\n  }\n\n  if (dest.projName === 'longlat') {\n    // convert radians to decimal degrees\n    point = {\n      x: point.x * R2D,\n      y: point.y * R2D,\n      z: point.z || 0\n    };\n  } else { // else project\n    point = dest.forward(point);\n    if (dest.to_meter) {\n      point = {\n        x: point.x / dest.to_meter,\n        y: point.y / dest.to_meter,\n        z: point.z || 0\n      };\n    }\n  }\n\n  // DGR, 2010/11/12\n  if (enforceAxis && dest.axis !== 'enu') {\n    return adjust_axis(dest, true, point);\n  }\n\n  if (point && !hasZ && dest.projName !== 'geocent') {\n    delete point.z;\n  }\n  return point;\n}\n","import proj from './Proj';\nimport transform from './transform';\nvar wgs84 = proj('WGS84');\n\n/**\n * @typedef {{x: number, y: number, z?: number, m?: number}} InterfaceCoordinates\n */\n\n/**\n * @typedef {Array<number> | InterfaceCoordinates} TemplateCoordinates\n */\n\n/**\n * @typedef {Object} Converter\n * @property {<T extends TemplateCoordinates>(coordinates: T, enforceAxis?: boolean) => T} forward\n * @property {<T extends TemplateCoordinates>(coordinates: T, enforceAxis?: boolean) => T} inverse\n * @property {proj} [oProj]\n */\n\n/**\n * @typedef {Object} PROJJSONDefinition\n * @property {string} [$schema]\n * @property {string} type\n * @property {string} [name]\n * @property {{authority: string, code: number}} [id]\n * @property {string} [scope]\n * @property {string} [area]\n * @property {{south_latitude: number, west_longitude: number, north_latitude: number, east_longitude: number}} [bbox]\n * @property {PROJJSONDefinition[]} [components]\n * @property {{type: string, name: string}} [datum]\n * @property {{\n *   name: string,\n *   members: Array<{\n *     name: string,\n *     id?: {authority: string, code: number}\n *   }>,\n *   ellipsoid?: {\n *     name: string,\n *     semi_major_axis: number,\n *     inverse_flattening?: number\n *   },\n *   accuracy?: string,\n *   id?: {authority: string, code: number}\n * }} [datum_ensemble]\n * @property {{\n *   subtype: string,\n *   axis: Array<{\n *     name: string,\n *     abbreviation?: string,\n *     direction: string,\n *     unit: string\n *   }>\n * }} [coordinate_system]\n * @property {{\n *   name: string,\n *   method: {name: string},\n *   parameters: Array<{\n *     name: string,\n *     value: number,\n *     unit?: string\n *   }>\n * }} [conversion]\n * @property {{\n *   name: string,\n *   method: {name: string},\n *   parameters: Array<{\n *     name: string,\n *     value: number,\n *     unit?: string,\n *     type?: string,\n *     file_name?: string\n *   }>\n * }} [transformation]\n */\n\n/**\n * @template {TemplateCoordinates} T\n * @param {proj} from\n * @param {proj} to\n * @param {T} coords\n * @param {boolean} [enforceAxis]\n * @returns {T}\n */\nfunction transformer(from, to, coords, enforceAxis) {\n  var transformedArray, out, keys;\n  if (Array.isArray(coords)) {\n    transformedArray = transform(from, to, coords, enforceAxis) || { x: NaN, y: NaN };\n    if (coords.length > 2) {\n      if ((typeof from.name !== 'undefined' && from.name === 'geocent') || (typeof to.name !== 'undefined' && to.name === 'geocent')) {\n        if (typeof transformedArray.z === 'number') {\n          return /** @type {T} */ ([transformedArray.x, transformedArray.y, transformedArray.z].concat(coords.slice(3)));\n        } else {\n          return /** @type {T} */ ([transformedArray.x, transformedArray.y, coords[2]].concat(coords.slice(3)));\n        }\n      } else {\n        return /** @type {T} */ ([transformedArray.x, transformedArray.y].concat(coords.slice(2)));\n      }\n    } else {\n      return /** @type {T} */ ([transformedArray.x, transformedArray.y]);\n    }\n  } else {\n    out = transform(from, to, coords, enforceAxis);\n    keys = Object.keys(coords);\n    if (keys.length === 2) {\n      return /** @type {T} */ (out);\n    }\n    keys.forEach(function (key) {\n      if ((typeof from.name !== 'undefined' && from.name === 'geocent') || (typeof to.name !== 'undefined' && to.name === 'geocent')) {\n        if (key === 'x' || key === 'y' || key === 'z') {\n          return;\n        }\n      } else {\n        if (key === 'x' || key === 'y') {\n          return;\n        }\n      }\n      out[key] = coords[key];\n    });\n    return /** @type {T} */ (out);\n  }\n}\n\n/**\n * @param {proj | string | PROJJSONDefinition | Converter} item\n * @returns {import('./Proj').default}\n */\nfunction checkProj(item) {\n  if (item instanceof proj) {\n    return item;\n  }\n  if (typeof item === 'object' && 'oProj' in item) {\n    return item.oProj;\n  }\n  return proj(/** @type {string | PROJJSONDefinition} */ (item));\n}\n\n/**\n * @overload\n * @param {string | PROJJSONDefinition | proj} toProj\n * @returns {Converter}\n */\n/**\n * @overload\n * @param {string | PROJJSONDefinition | proj} fromProj\n * @param {string | PROJJSONDefinition | proj} toProj\n * @returns {Converter}\n */\n/**\n * @template {TemplateCoordinates} T\n * @overload\n * @param {string | PROJJSONDefinition | proj} toProj\n * @param {T} coord\n * @returns {T}\n */\n/**\n * @template {TemplateCoordinates} T\n * @overload\n * @param {string | PROJJSONDefinition | proj} fromProj\n * @param {string | PROJJSONDefinition | proj} toProj\n * @param {T} coord\n * @returns {T}\n */\n/**\n * @template {TemplateCoordinates} T\n * @param {string | PROJJSONDefinition | proj} fromProjOrToProj\n * @param {string | PROJJSONDefinition | proj | TemplateCoordinates} [toProjOrCoord]\n * @param {T} [coord]\n * @returns {T|Converter}\n */\nfunction proj4(fromProjOrToProj, toProjOrCoord, coord) {\n  /** @type {proj} */\n  var fromProj;\n  /** @type {proj} */\n  var toProj;\n  var single = false;\n  /** @type {Converter} */\n  var obj;\n  if (typeof toProjOrCoord === 'undefined') {\n    toProj = checkProj(fromProjOrToProj);\n    fromProj = wgs84;\n    single = true;\n  } else if (typeof /** @type {?} */ (toProjOrCoord).x !== 'undefined' || Array.isArray(toProjOrCoord)) {\n    coord = /** @type {T} */ (/** @type {?} */ (toProjOrCoord));\n    toProj = checkProj(fromProjOrToProj);\n    fromProj = wgs84;\n    single = true;\n  }\n  if (!fromProj) {\n    fromProj = checkProj(fromProjOrToProj);\n  }\n  if (!toProj) {\n    toProj = checkProj(/** @type {string | PROJJSONDefinition | proj } */ (toProjOrCoord));\n  }\n  if (coord) {\n    return transformer(fromProj, toProj, coord);\n  } else {\n    obj = {\n      /**\n       * @template {TemplateCoordinates} T\n       * @param {T} coords\n       * @param {boolean=} enforceAxis\n       * @returns {T}\n       */\n      forward: function (coords, enforceAxis) {\n        return transformer(fromProj, toProj, coords, enforceAxis);\n      },\n      /**\n       * @template {TemplateCoordinates} T\n       * @param {T} coords\n       * @param {boolean=} enforceAxis\n       * @returns {T}\n       */\n      inverse: function (coords, enforceAxis) {\n        return transformer(toProj, fromProj, coords, enforceAxis);\n      }\n    };\n    if (single) {\n      obj.oProj = toProj;\n    }\n    return obj;\n  }\n}\n\nexport default proj4;\n","\n\n\n/**\n * UTM zones are grouped, and assigned to one of a group of 6\n * sets.\n *\n * {int} @private\n */\nvar NUM_100K_SETS = 6;\n\n/**\n * The column letters (for easting) of the lower left value, per\n * set.\n *\n * {string} @private\n */\nvar SET_ORIGIN_COLUMN_LETTERS = 'AJSAJS';\n\n/**\n * The row letters (for northing) of the lower left value, per\n * set.\n *\n * {string} @private\n */\nvar SET_ORIGIN_ROW_LETTERS = 'AFAFAF';\n\nvar A = 65; // A\nvar I = 73; // I\nvar O = 79; // O\nvar V = 86; // V\nvar Z = 90; // Z\nexport default {\n  forward: forward,\n  inverse: inverse,\n  toPoint: toPoint\n};\n/**\n * Conversion of lat/lon to MGRS.\n *\n * @param {object} ll Object literal with lat and lon properties on a\n *     WGS84 ellipsoid.\n * @param {int} accuracy Accuracy in digits (5 for 1 m, 4 for 10 m, 3 for\n *      100 m, 2 for 1000 m or 1 for 10000 m). Optional, default is 5.\n * @return {string} the MGRS string for the given location and accuracy.\n */\nexport function forward(ll, accuracy) {\n  accuracy = accuracy || 5; // default accuracy 1m\n  return encode(LLtoUTM({\n    lat: ll[1],\n    lon: ll[0]\n  }), accuracy);\n};\n\n/**\n * Conversion of MGRS to lat/lon.\n *\n * @param {string} mgrs MGRS string.\n * @return {array} An array with left (longitude), bottom (latitude), right\n *     (longitude) and top (latitude) values in WGS84, representing the\n *     bounding box for the provided MGRS reference.\n */\nexport function inverse(mgrs) {\n  var bbox = UTMtoLL(decode(mgrs.toUpperCase()));\n  if (bbox.lat && bbox.lon) {\n    return [bbox.lon, bbox.lat, bbox.lon, bbox.lat];\n  }\n  return [bbox.left, bbox.bottom, bbox.right, bbox.top];\n};\n\nexport function toPoint(mgrs) {\n  var bbox = UTMtoLL(decode(mgrs.toUpperCase()));\n  if (bbox.lat && bbox.lon) {\n    return [bbox.lon, bbox.lat];\n  }\n  return [(bbox.left + bbox.right) / 2, (bbox.top + bbox.bottom) / 2];\n};\n/**\n * Conversion from degrees to radians.\n *\n * @private\n * @param {number} deg the angle in degrees.\n * @return {number} the angle in radians.\n */\nfunction degToRad(deg) {\n  return (deg * (Math.PI / 180.0));\n}\n\n/**\n * Conversion from radians to degrees.\n *\n * @private\n * @param {number} rad the angle in radians.\n * @return {number} the angle in degrees.\n */\nfunction radToDeg(rad) {\n  return (180.0 * (rad / Math.PI));\n}\n\n/**\n * Converts a set of Longitude and Latitude co-ordinates to UTM\n * using the WGS84 ellipsoid.\n *\n * @private\n * @param {object} ll Object literal with lat and lon properties\n *     representing the WGS84 coordinate to be converted.\n * @return {object} Object literal containing the UTM value with easting,\n *     northing, zoneNumber and zoneLetter properties, and an optional\n *     accuracy property in digits. Returns null if the conversion failed.\n */\nfunction LLtoUTM(ll) {\n  var Lat = ll.lat;\n  var Long = ll.lon;\n  var a = 6378137.0; //ellip.radius;\n  var eccSquared = 0.00669438; //ellip.eccsq;\n  var k0 = 0.9996;\n  var LongOrigin;\n  var eccPrimeSquared;\n  var N, T, C, A, M;\n  var LatRad = degToRad(Lat);\n  var LongRad = degToRad(Long);\n  var LongOriginRad;\n  var ZoneNumber;\n  // (int)\n  ZoneNumber = Math.floor((Long + 180) / 6) + 1;\n\n  //Make sure the longitude 180.00 is in Zone 60\n  if (Long === 180) {\n    ZoneNumber = 60;\n  }\n\n  // Special zone for Norway\n  if (Lat >= 56.0 && Lat < 64.0 && Long >= 3.0 && Long < 12.0) {\n    ZoneNumber = 32;\n  }\n\n  // Special zones for Svalbard\n  if (Lat >= 72.0 && Lat < 84.0) {\n    if (Long >= 0.0 && Long < 9.0) {\n      ZoneNumber = 31;\n    }\n    else if (Long >= 9.0 && Long < 21.0) {\n      ZoneNumber = 33;\n    }\n    else if (Long >= 21.0 && Long < 33.0) {\n      ZoneNumber = 35;\n    }\n    else if (Long >= 33.0 && Long < 42.0) {\n      ZoneNumber = 37;\n    }\n  }\n\n  LongOrigin = (ZoneNumber - 1) * 6 - 180 + 3; //+3 puts origin\n  // in middle of\n  // zone\n  LongOriginRad = degToRad(LongOrigin);\n\n  eccPrimeSquared = (eccSquared) / (1 - eccSquared);\n\n  N = a / Math.sqrt(1 - eccSquared * Math.sin(LatRad) * Math.sin(LatRad));\n  T = Math.tan(LatRad) * Math.tan(LatRad);\n  C = eccPrimeSquared * Math.cos(LatRad) * Math.cos(LatRad);\n  A = Math.cos(LatRad) * (LongRad - LongOriginRad);\n\n  M = a * ((1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256) * LatRad - (3 * eccSquared / 8 + 3 * eccSquared * eccSquared / 32 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(2 * LatRad) + (15 * eccSquared * eccSquared / 256 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(4 * LatRad) - (35 * eccSquared * eccSquared * eccSquared / 3072) * Math.sin(6 * LatRad));\n\n  var UTMEasting = (k0 * N * (A + (1 - T + C) * A * A * A / 6.0 + (5 - 18 * T + T * T + 72 * C - 58 * eccPrimeSquared) * A * A * A * A * A / 120.0) + 500000.0);\n\n  var UTMNorthing = (k0 * (M + N * Math.tan(LatRad) * (A * A / 2 + (5 - T + 9 * C + 4 * C * C) * A * A * A * A / 24.0 + (61 - 58 * T + T * T + 600 * C - 330 * eccPrimeSquared) * A * A * A * A * A * A / 720.0)));\n  if (Lat < 0.0) {\n    UTMNorthing += 10000000.0; //10000000 meter offset for\n    // southern hemisphere\n  }\n\n  return {\n    northing: Math.round(UTMNorthing),\n    easting: Math.round(UTMEasting),\n    zoneNumber: ZoneNumber,\n    zoneLetter: getLetterDesignator(Lat)\n  };\n}\n\n/**\n * Converts UTM coords to lat/long, using the WGS84 ellipsoid. This is a convenience\n * class where the Zone can be specified as a single string eg.\"60N\" which\n * is then broken down into the ZoneNumber and ZoneLetter.\n *\n * @private\n * @param {object} utm An object literal with northing, easting, zoneNumber\n *     and zoneLetter properties. If an optional accuracy property is\n *     provided (in meters), a bounding box will be returned instead of\n *     latitude and longitude.\n * @return {object} An object literal containing either lat and lon values\n *     (if no accuracy was provided), or top, right, bottom and left values\n *     for the bounding box calculated according to the provided accuracy.\n *     Returns null if the conversion failed.\n */\nfunction UTMtoLL(utm) {\n\n  var UTMNorthing = utm.northing;\n  var UTMEasting = utm.easting;\n  var zoneLetter = utm.zoneLetter;\n  var zoneNumber = utm.zoneNumber;\n  // check the ZoneNummber is valid\n  if (zoneNumber < 0 || zoneNumber > 60) {\n    return null;\n  }\n\n  var k0 = 0.9996;\n  var a = 6378137.0; //ellip.radius;\n  var eccSquared = 0.00669438; //ellip.eccsq;\n  var eccPrimeSquared;\n  var e1 = (1 - Math.sqrt(1 - eccSquared)) / (1 + Math.sqrt(1 - eccSquared));\n  var N1, T1, C1, R1, D, M;\n  var LongOrigin;\n  var mu, phi1Rad;\n\n  // remove 500,000 meter offset for longitude\n  var x = UTMEasting - 500000.0;\n  var y = UTMNorthing;\n\n  // We must know somehow if we are in the Northern or Southern\n  // hemisphere, this is the only time we use the letter So even\n  // if the Zone letter isn't exactly correct it should indicate\n  // the hemisphere correctly\n  if (zoneLetter < 'N') {\n    y -= 10000000.0; // remove 10,000,000 meter offset used\n    // for southern hemisphere\n  }\n\n  // There are 60 zones with zone 1 being at West -180 to -174\n  LongOrigin = (zoneNumber - 1) * 6 - 180 + 3; // +3 puts origin\n  // in middle of\n  // zone\n\n  eccPrimeSquared = (eccSquared) / (1 - eccSquared);\n\n  M = y / k0;\n  mu = M / (a * (1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256));\n\n  phi1Rad = mu + (3 * e1 / 2 - 27 * e1 * e1 * e1 / 32) * Math.sin(2 * mu) + (21 * e1 * e1 / 16 - 55 * e1 * e1 * e1 * e1 / 32) * Math.sin(4 * mu) + (151 * e1 * e1 * e1 / 96) * Math.sin(6 * mu);\n  // double phi1 = ProjMath.radToDeg(phi1Rad);\n\n  N1 = a / Math.sqrt(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad));\n  T1 = Math.tan(phi1Rad) * Math.tan(phi1Rad);\n  C1 = eccPrimeSquared * Math.cos(phi1Rad) * Math.cos(phi1Rad);\n  R1 = a * (1 - eccSquared) / Math.pow(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad), 1.5);\n  D = x / (N1 * k0);\n\n  var lat = phi1Rad - (N1 * Math.tan(phi1Rad) / R1) * (D * D / 2 - (5 + 3 * T1 + 10 * C1 - 4 * C1 * C1 - 9 * eccPrimeSquared) * D * D * D * D / 24 + (61 + 90 * T1 + 298 * C1 + 45 * T1 * T1 - 252 * eccPrimeSquared - 3 * C1 * C1) * D * D * D * D * D * D / 720);\n  lat = radToDeg(lat);\n\n  var lon = (D - (1 + 2 * T1 + C1) * D * D * D / 6 + (5 - 2 * C1 + 28 * T1 - 3 * C1 * C1 + 8 * eccPrimeSquared + 24 * T1 * T1) * D * D * D * D * D / 120) / Math.cos(phi1Rad);\n  lon = LongOrigin + radToDeg(lon);\n\n  var result;\n  if (utm.accuracy) {\n    var topRight = UTMtoLL({\n      northing: utm.northing + utm.accuracy,\n      easting: utm.easting + utm.accuracy,\n      zoneLetter: utm.zoneLetter,\n      zoneNumber: utm.zoneNumber\n    });\n    result = {\n      top: topRight.lat,\n      right: topRight.lon,\n      bottom: lat,\n      left: lon\n    };\n  }\n  else {\n    result = {\n      lat: lat,\n      lon: lon\n    };\n  }\n  return result;\n}\n\n/**\n * Calculates the MGRS letter designator for the given latitude.\n *\n * @private\n * @param {number} lat The latitude in WGS84 to get the letter designator\n *     for.\n * @return {char} The letter designator.\n */\nfunction getLetterDesignator(lat) {\n  //This is here as an error flag to show that the Latitude is\n  //outside MGRS limits\n  var LetterDesignator = 'Z';\n\n  if ((84 >= lat) && (lat >= 72)) {\n    LetterDesignator = 'X';\n  }\n  else if ((72 > lat) && (lat >= 64)) {\n    LetterDesignator = 'W';\n  }\n  else if ((64 > lat) && (lat >= 56)) {\n    LetterDesignator = 'V';\n  }\n  else if ((56 > lat) && (lat >= 48)) {\n    LetterDesignator = 'U';\n  }\n  else if ((48 > lat) && (lat >= 40)) {\n    LetterDesignator = 'T';\n  }\n  else if ((40 > lat) && (lat >= 32)) {\n    LetterDesignator = 'S';\n  }\n  else if ((32 > lat) && (lat >= 24)) {\n    LetterDesignator = 'R';\n  }\n  else if ((24 > lat) && (lat >= 16)) {\n    LetterDesignator = 'Q';\n  }\n  else if ((16 > lat) && (lat >= 8)) {\n    LetterDesignator = 'P';\n  }\n  else if ((8 > lat) && (lat >= 0)) {\n    LetterDesignator = 'N';\n  }\n  else if ((0 > lat) && (lat >= -8)) {\n    LetterDesignator = 'M';\n  }\n  else if ((-8 > lat) && (lat >= -16)) {\n    LetterDesignator = 'L';\n  }\n  else if ((-16 > lat) && (lat >= -24)) {\n    LetterDesignator = 'K';\n  }\n  else if ((-24 > lat) && (lat >= -32)) {\n    LetterDesignator = 'J';\n  }\n  else if ((-32 > lat) && (lat >= -40)) {\n    LetterDesignator = 'H';\n  }\n  else if ((-40 > lat) && (lat >= -48)) {\n    LetterDesignator = 'G';\n  }\n  else if ((-48 > lat) && (lat >= -56)) {\n    LetterDesignator = 'F';\n  }\n  else if ((-56 > lat) && (lat >= -64)) {\n    LetterDesignator = 'E';\n  }\n  else if ((-64 > lat) && (lat >= -72)) {\n    LetterDesignator = 'D';\n  }\n  else if ((-72 > lat) && (lat >= -80)) {\n    LetterDesignator = 'C';\n  }\n  return LetterDesignator;\n}\n\n/**\n * Encodes a UTM location as MGRS string.\n *\n * @private\n * @param {object} utm An object literal with easting, northing,\n *     zoneLetter, zoneNumber\n * @param {number} accuracy Accuracy in digits (1-5).\n * @return {string} MGRS string for the given UTM location.\n */\nfunction encode(utm, accuracy) {\n  // prepend with leading zeroes\n  var seasting = \"00000\" + utm.easting,\n    snorthing = \"00000\" + utm.northing;\n\n  return utm.zoneNumber + utm.zoneLetter + get100kID(utm.easting, utm.northing, utm.zoneNumber) + seasting.substr(seasting.length - 5, accuracy) + snorthing.substr(snorthing.length - 5, accuracy);\n}\n\n/**\n * Get the two letter 100k designator for a given UTM easting,\n * northing and zone number value.\n *\n * @private\n * @param {number} easting\n * @param {number} northing\n * @param {number} zoneNumber\n * @return the two letter 100k designator for the given UTM location.\n */\nfunction get100kID(easting, northing, zoneNumber) {\n  var setParm = get100kSetForZone(zoneNumber);\n  var setColumn = Math.floor(easting / 100000);\n  var setRow = Math.floor(northing / 100000) % 20;\n  return getLetter100kID(setColumn, setRow, setParm);\n}\n\n/**\n * Given a UTM zone number, figure out the MGRS 100K set it is in.\n *\n * @private\n * @param {number} i An UTM zone number.\n * @return {number} the 100k set the UTM zone is in.\n */\nfunction get100kSetForZone(i) {\n  var setParm = i % NUM_100K_SETS;\n  if (setParm === 0) {\n    setParm = NUM_100K_SETS;\n  }\n\n  return setParm;\n}\n\n/**\n * Get the two-letter MGRS 100k designator given information\n * translated from the UTM northing, easting and zone number.\n *\n * @private\n * @param {number} column the column index as it relates to the MGRS\n *        100k set spreadsheet, created from the UTM easting.\n *        Values are 1-8.\n * @param {number} row the row index as it relates to the MGRS 100k set\n *        spreadsheet, created from the UTM northing value. Values\n *        are from 0-19.\n * @param {number} parm the set block, as it relates to the MGRS 100k set\n *        spreadsheet, created from the UTM zone. Values are from\n *        1-60.\n * @return two letter MGRS 100k code.\n */\nfunction getLetter100kID(column, row, parm) {\n  // colOrigin and rowOrigin are the letters at the origin of the set\n  var index = parm - 1;\n  var colOrigin = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(index);\n  var rowOrigin = SET_ORIGIN_ROW_LETTERS.charCodeAt(index);\n\n  // colInt and rowInt are the letters to build to return\n  var colInt = colOrigin + column - 1;\n  var rowInt = rowOrigin + row;\n  var rollover = false;\n\n  if (colInt > Z) {\n    colInt = colInt - Z + A - 1;\n    rollover = true;\n  }\n\n  if (colInt === I || (colOrigin < I && colInt > I) || ((colInt > I || colOrigin < I) && rollover)) {\n    colInt++;\n  }\n\n  if (colInt === O || (colOrigin < O && colInt > O) || ((colInt > O || colOrigin < O) && rollover)) {\n    colInt++;\n\n    if (colInt === I) {\n      colInt++;\n    }\n  }\n\n  if (colInt > Z) {\n    colInt = colInt - Z + A - 1;\n  }\n\n  if (rowInt > V) {\n    rowInt = rowInt - V + A - 1;\n    rollover = true;\n  }\n  else {\n    rollover = false;\n  }\n\n  if (((rowInt === I) || ((rowOrigin < I) && (rowInt > I))) || (((rowInt > I) || (rowOrigin < I)) && rollover)) {\n    rowInt++;\n  }\n\n  if (((rowInt === O) || ((rowOrigin < O) && (rowInt > O))) || (((rowInt > O) || (rowOrigin < O)) && rollover)) {\n    rowInt++;\n\n    if (rowInt === I) {\n      rowInt++;\n    }\n  }\n\n  if (rowInt > V) {\n    rowInt = rowInt - V + A - 1;\n  }\n\n  var twoLetter = String.fromCharCode(colInt) + String.fromCharCode(rowInt);\n  return twoLetter;\n}\n\n/**\n * Decode the UTM parameters from a MGRS string.\n *\n * @private\n * @param {string} mgrsString an UPPERCASE coordinate string is expected.\n * @return {object} An object literal with easting, northing, zoneLetter,\n *     zoneNumber and accuracy (in meters) properties.\n */\nfunction decode(mgrsString) {\n\n  if (mgrsString && mgrsString.length === 0) {\n    throw (\"MGRSPoint coverting from nothing\");\n  }\n\n  var length = mgrsString.length;\n\n  var hunK = null;\n  var sb = \"\";\n  var testChar;\n  var i = 0;\n\n  // get Zone number\n  while (!(/[A-Z]/).test(testChar = mgrsString.charAt(i))) {\n    if (i >= 2) {\n      throw (\"MGRSPoint bad conversion from: \" + mgrsString);\n    }\n    sb += testChar;\n    i++;\n  }\n\n  var zoneNumber = parseInt(sb, 10);\n\n  if (i === 0 || i + 3 > length) {\n    // A good MGRS string has to be 4-5 digits long,\n    // ##AAA/#AAA at least.\n    throw (\"MGRSPoint bad conversion from: \" + mgrsString);\n  }\n\n  var zoneLetter = mgrsString.charAt(i++);\n\n  // Should we check the zone letter here? Why not.\n  if (zoneLetter <= 'A' || zoneLetter === 'B' || zoneLetter === 'Y' || zoneLetter >= 'Z' || zoneLetter === 'I' || zoneLetter === 'O') {\n    throw (\"MGRSPoint zone letter \" + zoneLetter + \" not handled: \" + mgrsString);\n  }\n\n  hunK = mgrsString.substring(i, i += 2);\n\n  var set = get100kSetForZone(zoneNumber);\n\n  var east100k = getEastingFromChar(hunK.charAt(0), set);\n  var north100k = getNorthingFromChar(hunK.charAt(1), set);\n\n  // We have a bug where the northing may be 2000000 too low.\n  // How\n  // do we know when to roll over?\n\n  while (north100k < getMinNorthing(zoneLetter)) {\n    north100k += 2000000;\n  }\n\n  // calculate the char index for easting/northing separator\n  var remainder = length - i;\n\n  if (remainder % 2 !== 0) {\n    throw (\"MGRSPoint has to have an even number \\nof digits after the zone letter and two 100km letters - front \\nhalf for easting meters, second half for \\nnorthing meters\" + mgrsString);\n  }\n\n  var sep = remainder / 2;\n\n  var sepEasting = 0.0;\n  var sepNorthing = 0.0;\n  var accuracyBonus, sepEastingString, sepNorthingString, easting, northing;\n  if (sep > 0) {\n    accuracyBonus = 100000.0 / Math.pow(10, sep);\n    sepEastingString = mgrsString.substring(i, i + sep);\n    sepEasting = parseFloat(sepEastingString) * accuracyBonus;\n    sepNorthingString = mgrsString.substring(i + sep);\n    sepNorthing = parseFloat(sepNorthingString) * accuracyBonus;\n  }\n\n  easting = sepEasting + east100k;\n  northing = sepNorthing + north100k;\n\n  return {\n    easting: easting,\n    northing: northing,\n    zoneLetter: zoneLetter,\n    zoneNumber: zoneNumber,\n    accuracy: accuracyBonus\n  };\n}\n\n/**\n * Given the first letter from a two-letter MGRS 100k zone, and given the\n * MGRS table set for the zone number, figure out the easting value that\n * should be added to the other, secondary easting value.\n *\n * @private\n * @param {char} e The first letter from a two-letter MGRS 100´k zone.\n * @param {number} set The MGRS table set for the zone number.\n * @return {number} The easting value for the given letter and set.\n */\nfunction getEastingFromChar(e, set) {\n  // colOrigin is the letter at the origin of the set for the\n  // column\n  var curCol = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(set - 1);\n  var eastingValue = 100000.0;\n  var rewindMarker = false;\n\n  while (curCol !== e.charCodeAt(0)) {\n    curCol++;\n    if (curCol === I) {\n      curCol++;\n    }\n    if (curCol === O) {\n      curCol++;\n    }\n    if (curCol > Z) {\n      if (rewindMarker) {\n        throw (\"Bad character: \" + e);\n      }\n      curCol = A;\n      rewindMarker = true;\n    }\n    eastingValue += 100000.0;\n  }\n\n  return eastingValue;\n}\n\n/**\n * Given the second letter from a two-letter MGRS 100k zone, and given the\n * MGRS table set for the zone number, figure out the northing value that\n * should be added to the other, secondary northing value. You have to\n * remember that Northings are determined from the equator, and the vertical\n * cycle of letters mean a 2000000 additional northing meters. This happens\n * approx. every 18 degrees of latitude. This method does *NOT* count any\n * additional northings. You have to figure out how many 2000000 meters need\n * to be added for the zone letter of the MGRS coordinate.\n *\n * @private\n * @param {char} n Second letter of the MGRS 100k zone\n * @param {number} set The MGRS table set number, which is dependent on the\n *     UTM zone number.\n * @return {number} The northing value for the given letter and set.\n */\nfunction getNorthingFromChar(n, set) {\n\n  if (n > 'V') {\n    throw (\"MGRSPoint given invalid Northing \" + n);\n  }\n\n  // rowOrigin is the letter at the origin of the set for the\n  // column\n  var curRow = SET_ORIGIN_ROW_LETTERS.charCodeAt(set - 1);\n  var northingValue = 0.0;\n  var rewindMarker = false;\n\n  while (curRow !== n.charCodeAt(0)) {\n    curRow++;\n    if (curRow === I) {\n      curRow++;\n    }\n    if (curRow === O) {\n      curRow++;\n    }\n    // fixing a bug making whole application hang in this loop\n    // when 'n' is a wrong character\n    if (curRow > V) {\n      if (rewindMarker) { // making sure that this loop ends\n        throw (\"Bad character: \" + n);\n      }\n      curRow = A;\n      rewindMarker = true;\n    }\n    northingValue += 100000.0;\n  }\n\n  return northingValue;\n}\n\n/**\n * The function getMinNorthing returns the minimum northing value of a MGRS\n * zone.\n *\n * Ported from Geotrans' c Lattitude_Band_Value structure table.\n *\n * @private\n * @param {char} zoneLetter The MGRS zone to get the min northing for.\n * @return {number}\n */\nfunction getMinNorthing(zoneLetter) {\n  var northing;\n  switch (zoneLetter) {\n  case 'C':\n    northing = 1100000.0;\n    break;\n  case 'D':\n    northing = 2000000.0;\n    break;\n  case 'E':\n    northing = 2800000.0;\n    break;\n  case 'F':\n    northing = 3700000.0;\n    break;\n  case 'G':\n    northing = 4600000.0;\n    break;\n  case 'H':\n    northing = 5500000.0;\n    break;\n  case 'J':\n    northing = 6400000.0;\n    break;\n  case 'K':\n    northing = 7300000.0;\n    break;\n  case 'L':\n    northing = 8200000.0;\n    break;\n  case 'M':\n    northing = 9100000.0;\n    break;\n  case 'N':\n    northing = 0.0;\n    break;\n  case 'P':\n    northing = 800000.0;\n    break;\n  case 'Q':\n    northing = 1700000.0;\n    break;\n  case 'R':\n    northing = 2600000.0;\n    break;\n  case 'S':\n    northing = 3500000.0;\n    break;\n  case 'T':\n    northing = 4400000.0;\n    break;\n  case 'U':\n    northing = 5300000.0;\n    break;\n  case 'V':\n    northing = 6200000.0;\n    break;\n  case 'W':\n    northing = 7000000.0;\n    break;\n  case 'X':\n    northing = 7900000.0;\n    break;\n  default:\n    northing = -1.0;\n  }\n  if (northing >= 0.0) {\n    return northing;\n  }\n  else {\n    throw (\"Invalid zone letter: \" + zoneLetter);\n  }\n\n}\n","import { toPoint, forward } from 'mgrs';\n\n/**\n * @deprecated v3.0.0 - use proj4.toPoint instead\n * @param {number | import('./core').TemplateCoordinates | string} x\n * @param {number} [y]\n * @param {number} [z]\n */\nfunction Point(x, y, z) {\n  if (!(this instanceof Point)) {\n    return new Point(x, y, z);\n  }\n  if (Array.isArray(x)) {\n    this.x = x[0];\n    this.y = x[1];\n    this.z = x[2] || 0.0;\n  } else if (typeof x === 'object') {\n    this.x = x.x;\n    this.y = x.y;\n    this.z = x.z || 0.0;\n  } else if (typeof x === 'string' && typeof y === 'undefined') {\n    var coords = x.split(',');\n    this.x = parseFloat(coords[0]);\n    this.y = parseFloat(coords[1]);\n    this.z = parseFloat(coords[2]) || 0.0;\n  } else {\n    this.x = x;\n    this.y = y;\n    this.z = z || 0.0;\n  }\n  console.warn('proj4.Point will be removed in version 3, use proj4.toPoint');\n}\n\nPoint.fromMGRS = function (mgrsStr) {\n  return new Point(toPoint(mgrsStr));\n};\nPoint.prototype.toMGRS = function (accuracy) {\n  return forward([this.x, this.y], accuracy);\n};\nexport default Point;\n","var C00 = 1;\nvar C02 = 0.25;\nvar C04 = 0.046875;\nvar C06 = 0.01953125;\nvar C08 = 0.01068115234375;\nvar C22 = 0.75;\nvar C44 = 0.46875;\nvar C46 = 0.01302083333333333333;\nvar C48 = 0.00712076822916666666;\nvar C66 = 0.36458333333333333333;\nvar C68 = 0.00569661458333333333;\nvar C88 = 0.3076171875;\n\nexport default function (es) {\n  var en = [];\n  en[0] = C00 - es * (C02 + es * (C04 + es * (C06 + es * C08)));\n  en[1] = es * (C22 - es * (C04 + es * (C06 + es * C08)));\n  var t = es * es;\n  en[2] = t * (C44 - es * (C46 + es * C48));\n  t *= es;\n  en[3] = t * (C66 - es * C68);\n  en[4] = t * es * C88;\n  return en;\n}\n","export default function (phi, sphi, cphi, en) {\n  cphi *= sphi;\n  sphi *= sphi;\n  return (en[0] * phi - cphi * (en[1] + sphi * (en[2] + sphi * (en[3] + sphi * en[4]))));\n}\n","import pj_mlfn from './pj_mlfn';\nimport { EPSLN } from '../constants/values';\n\nvar MAX_ITER = 20;\n\nexport default function (arg, es, en) {\n  var k = 1 / (1 - es);\n  var phi = arg;\n  for (var i = MAX_ITER; i; --i) { /* rarely goes over 2 iterations */\n    var s = Math.sin(phi);\n    var t = 1 - es * s * s;\n    // t = this.pj_mlfn(phi, s, Math.cos(phi), en) - arg;\n    // phi -= t * (t * Math.sqrt(t)) * k;\n    t = (pj_mlfn(phi, s, Math.cos(phi), en) - arg) * (t * Math.sqrt(t)) * k;\n    phi -= t;\n    if (Math.abs(t) < EPSLN) {\n      return phi;\n    }\n  }\n  // ..reportError(\"cass:pj_inv_mlfn: Convergence error\");\n  return phi;\n}\n","// Heavily based on this tmerc projection implementation\n// https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/tmerc.js\n\nimport pj_enfn from '../common/pj_enfn';\nimport pj_mlfn from '../common/pj_mlfn';\nimport pj_inv_mlfn from '../common/pj_inv_mlfn';\nimport adjust_lon from '../common/adjust_lon';\n\nimport { EPSLN, HALF_PI } from '../constants/values';\nimport sign from '../common/sign';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} es\n * @property {Array<number>} en\n * @property {number} ml0\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  this.x0 = this.x0 !== undefined ? this.x0 : 0;\n  this.y0 = this.y0 !== undefined ? this.y0 : 0;\n  this.long0 = this.long0 !== undefined ? this.long0 : 0;\n  this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;\n\n  if (this.es) {\n    this.en = pj_enfn(this.es);\n    this.ml0 = pj_mlfn(this.lat0, Math.sin(this.lat0), Math.cos(this.lat0), this.en);\n  }\n}\n\n/**\n    Transverse Mercator Forward  - long/lat to x/y\n    long/lat in radians\n  */\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n\n  var delta_lon = adjust_lon(lon - this.long0, this.over);\n  var con;\n  var x, y;\n  var sin_phi = Math.sin(lat);\n  var cos_phi = Math.cos(lat);\n\n  if (!this.es) {\n    var b = cos_phi * Math.sin(delta_lon);\n\n    if ((Math.abs(Math.abs(b) - 1)) < EPSLN) {\n      return (93);\n    } else {\n      x = 0.5 * this.a * this.k0 * Math.log((1 + b) / (1 - b)) + this.x0;\n      y = cos_phi * Math.cos(delta_lon) / Math.sqrt(1 - Math.pow(b, 2));\n      b = Math.abs(y);\n\n      if (b >= 1) {\n        if ((b - 1) > EPSLN) {\n          return (93);\n        } else {\n          y = 0;\n        }\n      } else {\n        y = Math.acos(y);\n      }\n\n      if (lat < 0) {\n        y = -y;\n      }\n\n      y = this.a * this.k0 * (y - this.lat0) + this.y0;\n    }\n  } else {\n    var al = cos_phi * delta_lon;\n    var als = Math.pow(al, 2);\n    var c = this.ep2 * Math.pow(cos_phi, 2);\n    var cs = Math.pow(c, 2);\n    var tq = Math.abs(cos_phi) > EPSLN ? Math.tan(lat) : 0;\n    var t = Math.pow(tq, 2);\n    var ts = Math.pow(t, 2);\n    con = 1 - this.es * Math.pow(sin_phi, 2);\n    al = al / Math.sqrt(con);\n    var ml = pj_mlfn(lat, sin_phi, cos_phi, this.en);\n\n    x = this.a * (this.k0 * al * (1\n      + als / 6 * (1 - t + c\n        + als / 20 * (5 - 18 * t + ts + 14 * c - 58 * t * c\n          + als / 42 * (61 + 179 * ts - ts * t - 479 * t)))))\n        + this.x0;\n\n    y = this.a * (this.k0 * (ml - this.ml0\n      + sin_phi * delta_lon * al / 2 * (1\n        + als / 12 * (5 - t + 9 * c + 4 * cs\n          + als / 30 * (61 + ts - 58 * t + 270 * c - 330 * t * c\n            + als / 56 * (1385 + 543 * ts - ts * t - 3111 * t))))))\n          + this.y0;\n  }\n\n  p.x = x;\n  p.y = y;\n\n  return p;\n}\n\n/**\n    Transverse Mercator Inverse  -  x/y to long/lat\n  */\nexport function inverse(p) {\n  var con, phi;\n  var lat, lon;\n  var x = (p.x - this.x0) * (1 / this.a);\n  var y = (p.y - this.y0) * (1 / this.a);\n\n  if (!this.es) {\n    var f = Math.exp(x / this.k0);\n    var g = 0.5 * (f - 1 / f);\n    var temp = this.lat0 + y / this.k0;\n    var h = Math.cos(temp);\n    con = Math.sqrt((1 - Math.pow(h, 2)) / (1 + Math.pow(g, 2)));\n    lat = Math.asin(con);\n\n    if (y < 0) {\n      lat = -lat;\n    }\n\n    if ((g === 0) && (h === 0)) {\n      lon = 0;\n    } else {\n      lon = adjust_lon(Math.atan2(g, h) + this.long0, this.over);\n    }\n  } else { // ellipsoidal form\n    con = this.ml0 + y / this.k0;\n    phi = pj_inv_mlfn(con, this.es, this.en);\n\n    if (Math.abs(phi) < HALF_PI) {\n      var sin_phi = Math.sin(phi);\n      var cos_phi = Math.cos(phi);\n      var tan_phi = Math.abs(cos_phi) > EPSLN ? Math.tan(phi) : 0;\n      var c = this.ep2 * Math.pow(cos_phi, 2);\n      var cs = Math.pow(c, 2);\n      var t = Math.pow(tan_phi, 2);\n      var ts = Math.pow(t, 2);\n      con = 1 - this.es * Math.pow(sin_phi, 2);\n      var d = x * Math.sqrt(con) / this.k0;\n      var ds = Math.pow(d, 2);\n      con = con * tan_phi;\n\n      lat = phi - (con * ds / (1 - this.es)) * 0.5 * (1\n        - ds / 12 * (5 + 3 * t - 9 * c * t + c - 4 * cs\n          - ds / 30 * (61 + 90 * t - 252 * c * t + 45 * ts + 46 * c\n            - ds / 56 * (1385 + 3633 * t + 4095 * ts + 1574 * ts * t))));\n\n      lon = adjust_lon(this.long0 + (d * (1\n        - ds / 6 * (1 + 2 * t + c\n          - ds / 20 * (5 + 28 * t + 24 * ts + 8 * c * t + 6 * c\n            - ds / 42 * (61 + 662 * t + 1320 * ts + 720 * ts * t)))) / cos_phi), this.over);\n    } else {\n      lat = HALF_PI * sign(y);\n      lon = 0;\n    }\n  }\n\n  p.x = lon;\n  p.y = lat;\n\n  return p;\n}\n\nexport var names = ['Fast_Transverse_Mercator', 'Fast Transverse Mercator'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","export default function (x) {\n  var r = Math.exp(x);\n  r = (r - 1 / r) / 2;\n  return r;\n}\n","export default function (x, y) {\n  x = Math.abs(x);\n  y = Math.abs(y);\n  var a = Math.max(x, y);\n  var b = Math.min(x, y) / (a ? a : 1);\n\n  return a * Math.sqrt(1 + Math.pow(b, 2));\n}\n","export default function (x) {\n  var y = 1 + x;\n  var z = y - 1;\n\n  return z === 0 ? x : x * Math.log(y) / z;\n}\n","import hypot from './hypot';\nimport log1py from './log1py';\n\nexport default function (x) {\n  var y = Math.abs(x);\n  y = log1py(y * (1 + y / (hypot(1, y) + 1)));\n\n  return x < 0 ? -y : y;\n}\n","export default function (pp, B) {\n  var cos_2B = 2 * Math.cos(2 * B);\n  var i = pp.length - 1;\n  var h1 = pp[i];\n  var h2 = 0;\n  var h;\n\n  while (--i >= 0) {\n    h = -h2 + cos_2B * h1 + pp[i];\n    h2 = h1;\n    h1 = h;\n  }\n\n  return (B + h * Math.sin(2 * B));\n}\n","export default function (pp, arg_r) {\n  var r = 2 * Math.cos(arg_r);\n  var i = pp.length - 1;\n  var hr1 = pp[i];\n  var hr2 = 0;\n  var hr;\n\n  while (--i >= 0) {\n    hr = -hr2 + r * hr1 + pp[i];\n    hr2 = hr1;\n    hr1 = hr;\n  }\n\n  return Math.sin(arg_r) * hr;\n}\n","export default function (x) {\n  var r = Math.exp(x);\n  r = (r + 1 / r) / 2;\n  return r;\n}\n","import sinh from './sinh';\nimport cosh from './cosh';\n\nexport default function (pp, arg_r, arg_i) {\n  var sin_arg_r = Math.sin(arg_r);\n  var cos_arg_r = Math.cos(arg_r);\n  var sinh_arg_i = sinh(arg_i);\n  var cosh_arg_i = cosh(arg_i);\n  var r = 2 * cos_arg_r * cosh_arg_i;\n  var i = -2 * sin_arg_r * sinh_arg_i;\n  var j = pp.length - 1;\n  var hr = pp[j];\n  var hi1 = 0;\n  var hr1 = 0;\n  var hi = 0;\n  var hr2;\n  var hi2;\n\n  while (--j >= 0) {\n    hr2 = hr1;\n    hi2 = hi1;\n    hr1 = hr;\n    hi1 = hi;\n    hr = -hr2 + r * hr1 - i * hi1 + pp[j];\n    hi = -hi2 + i * hr1 + r * hi1;\n  }\n\n  r = sin_arg_r * cosh_arg_i;\n  i = cos_arg_r * sinh_arg_i;\n\n  return [r * hr - i * hi, r * hi + i * hr];\n}\n","// Heavily based on this etmerc projection implementation\n// https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/etmerc.js\n\nimport tmerc from '../projections/tmerc';\nimport sinh from '../common/sinh';\nimport hypot from '../common/hypot';\nimport asinhy from '../common/asinhy';\nimport gatg from '../common/gatg';\nimport clens from '../common/clens';\nimport clens_cmplx from '../common/clens_cmplx';\nimport adjust_lon from '../common/adjust_lon';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} es\n * @property {Array<number>} cbg\n * @property {Array<number>} cgb\n * @property {Array<number>} utg\n * @property {Array<number>} gtu\n * @property {number} Qn\n * @property {number} Zb\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  if (!this.approx && (isNaN(this.es) || this.es <= 0)) {\n    throw new Error('Incorrect elliptical usage. Try using the +approx option in the proj string, or PROJECTION[\"Fast_Transverse_Mercator\"] in the WKT.');\n  }\n  if (this.approx) {\n    // When '+approx' is set, use tmerc instead\n    tmerc.init.apply(this);\n    this.forward = tmerc.forward;\n    this.inverse = tmerc.inverse;\n  }\n\n  this.x0 = this.x0 !== undefined ? this.x0 : 0;\n  this.y0 = this.y0 !== undefined ? this.y0 : 0;\n  this.long0 = this.long0 !== undefined ? this.long0 : 0;\n  this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;\n\n  this.cgb = [];\n  this.cbg = [];\n  this.utg = [];\n  this.gtu = [];\n\n  var f = this.es / (1 + Math.sqrt(1 - this.es));\n  var n = f / (2 - f);\n  var np = n;\n\n  this.cgb[0] = n * (2 + n * (-2 / 3 + n * (-2 + n * (116 / 45 + n * (26 / 45 + n * (-2854 / 675))))));\n  this.cbg[0] = n * (-2 + n * (2 / 3 + n * (4 / 3 + n * (-82 / 45 + n * (32 / 45 + n * (4642 / 4725))))));\n\n  np = np * n;\n  this.cgb[1] = np * (7 / 3 + n * (-8 / 5 + n * (-227 / 45 + n * (2704 / 315 + n * (2323 / 945)))));\n  this.cbg[1] = np * (5 / 3 + n * (-16 / 15 + n * (-13 / 9 + n * (904 / 315 + n * (-1522 / 945)))));\n\n  np = np * n;\n  this.cgb[2] = np * (56 / 15 + n * (-136 / 35 + n * (-1262 / 105 + n * (73814 / 2835))));\n  this.cbg[2] = np * (-26 / 15 + n * (34 / 21 + n * (8 / 5 + n * (-12686 / 2835))));\n\n  np = np * n;\n  this.cgb[3] = np * (4279 / 630 + n * (-332 / 35 + n * (-399572 / 14175)));\n  this.cbg[3] = np * (1237 / 630 + n * (-12 / 5 + n * (-24832 / 14175)));\n\n  np = np * n;\n  this.cgb[4] = np * (4174 / 315 + n * (-144838 / 6237));\n  this.cbg[4] = np * (-734 / 315 + n * (109598 / 31185));\n\n  np = np * n;\n  this.cgb[5] = np * (601676 / 22275);\n  this.cbg[5] = np * (444337 / 155925);\n\n  np = Math.pow(n, 2);\n  this.Qn = this.k0 / (1 + n) * (1 + np * (1 / 4 + np * (1 / 64 + np / 256)));\n\n  this.utg[0] = n * (-0.5 + n * (2 / 3 + n * (-37 / 96 + n * (1 / 360 + n * (81 / 512 + n * (-96199 / 604800))))));\n  this.gtu[0] = n * (0.5 + n * (-2 / 3 + n * (5 / 16 + n * (41 / 180 + n * (-127 / 288 + n * (7891 / 37800))))));\n\n  this.utg[1] = np * (-1 / 48 + n * (-1 / 15 + n * (437 / 1440 + n * (-46 / 105 + n * (1118711 / 3870720)))));\n  this.gtu[1] = np * (13 / 48 + n * (-3 / 5 + n * (557 / 1440 + n * (281 / 630 + n * (-1983433 / 1935360)))));\n\n  np = np * n;\n  this.utg[2] = np * (-17 / 480 + n * (37 / 840 + n * (209 / 4480 + n * (-5569 / 90720))));\n  this.gtu[2] = np * (61 / 240 + n * (-103 / 140 + n * (15061 / 26880 + n * (167603 / 181440))));\n\n  np = np * n;\n  this.utg[3] = np * (-4397 / 161280 + n * (11 / 504 + n * (830251 / 7257600)));\n  this.gtu[3] = np * (49561 / 161280 + n * (-179 / 168 + n * (6601661 / 7257600)));\n\n  np = np * n;\n  this.utg[4] = np * (-4583 / 161280 + n * (108847 / 3991680));\n  this.gtu[4] = np * (34729 / 80640 + n * (-3418889 / 1995840));\n\n  np = np * n;\n  this.utg[5] = np * (-20648693 / 638668800);\n  this.gtu[5] = np * (212378941 / 319334400);\n\n  var Z = gatg(this.cbg, this.lat0);\n  this.Zb = -this.Qn * (Z + clens(this.gtu, 2 * Z));\n}\n\nexport function forward(p) {\n  var Ce = adjust_lon(p.x - this.long0, this.over);\n  var Cn = p.y;\n\n  Cn = gatg(this.cbg, Cn);\n  var sin_Cn = Math.sin(Cn);\n  var cos_Cn = Math.cos(Cn);\n  var sin_Ce = Math.sin(Ce);\n  var cos_Ce = Math.cos(Ce);\n\n  Cn = Math.atan2(sin_Cn, cos_Ce * cos_Cn);\n  Ce = Math.atan2(sin_Ce * cos_Cn, hypot(sin_Cn, cos_Cn * cos_Ce));\n  Ce = asinhy(Math.tan(Ce));\n\n  var tmp = clens_cmplx(this.gtu, 2 * Cn, 2 * Ce);\n\n  Cn = Cn + tmp[0];\n  Ce = Ce + tmp[1];\n\n  var x;\n  var y;\n\n  if (Math.abs(Ce) <= 2.623395162778) {\n    x = this.a * (this.Qn * Ce) + this.x0;\n    y = this.a * (this.Qn * Cn + this.Zb) + this.y0;\n  } else {\n    x = Infinity;\n    y = Infinity;\n  }\n\n  p.x = x;\n  p.y = y;\n\n  return p;\n}\n\nexport function inverse(p) {\n  var Ce = (p.x - this.x0) * (1 / this.a);\n  var Cn = (p.y - this.y0) * (1 / this.a);\n\n  Cn = (Cn - this.Zb) / this.Qn;\n  Ce = Ce / this.Qn;\n\n  var lon;\n  var lat;\n\n  if (Math.abs(Ce) <= 2.623395162778) {\n    var tmp = clens_cmplx(this.utg, 2 * Cn, 2 * Ce);\n\n    Cn = Cn + tmp[0];\n    Ce = Ce + tmp[1];\n    Ce = Math.atan(sinh(Ce));\n\n    var sin_Cn = Math.sin(Cn);\n    var cos_Cn = Math.cos(Cn);\n    var sin_Ce = Math.sin(Ce);\n    var cos_Ce = Math.cos(Ce);\n\n    Cn = Math.atan2(sin_Cn * cos_Ce, hypot(sin_Ce, cos_Ce * cos_Cn));\n    Ce = Math.atan2(sin_Ce, cos_Ce * cos_Cn);\n\n    lon = adjust_lon(Ce + this.long0, this.over);\n    lat = gatg(this.cgb, Cn);\n  } else {\n    lon = Infinity;\n    lat = Infinity;\n  }\n\n  p.x = lon;\n  p.y = lat;\n\n  return p;\n}\n\nexport var names = ['Extended_Transverse_Mercator', 'Extended Transverse Mercator', 'etmerc', 'Transverse_Mercator', 'Transverse Mercator', 'Gauss Kruger', 'Gauss_Kruger', 'tmerc'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import adjust_lon from './adjust_lon';\n\nexport default function (zone, lon) {\n  if (zone === undefined) {\n    zone = Math.floor((adjust_lon(lon) + Math.PI) * 30 / Math.PI) + 1;\n\n    if (zone < 0) {\n      return 0;\n    } else if (zone > 60) {\n      return 60;\n    }\n  }\n  return zone;\n}\n","import adjust_zone from '../common/adjust_zone';\nimport etmerc from './etmerc';\nexport var dependsOn = 'etmerc';\nimport { D2R } from '../constants/values';\n\n/** @this {import('../defs.js').ProjectionDefinition} */\nexport function init() {\n  var zone = adjust_zone(this.zone, this.long0);\n  if (zone === undefined) {\n    throw new Error('unknown utm zone');\n  }\n  this.lat0 = 0;\n  this.long0 = ((6 * Math.abs(zone)) - 183) * D2R;\n  this.x0 = 500000;\n  this.y0 = this.utmSouth ? 10000000 : 0;\n  this.k0 = 0.9996;\n\n  etmerc.init.apply(this);\n  this.forward = etmerc.forward;\n  this.inverse = etmerc.inverse;\n}\n\nexport var names = ['Universal Transverse Mercator System', 'utm'];\nexport default {\n  init: init,\n  names: names,\n  dependsOn: dependsOn\n};\n","export default function (esinp, exp) {\n  return (Math.pow((1 - esinp) / (1 + esinp), exp));\n}\n","import srat from '../common/srat';\nvar MAX_ITER = 20;\nimport { HALF_PI, FORTPI } from '../constants/values';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} rc\n * @property {number} C\n * @property {number} phic0\n * @property {number} ratexp\n * @property {number} K\n * @property {number} e\n * @property {number} es\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  var sphi = Math.sin(this.lat0);\n  var cphi = Math.cos(this.lat0);\n  cphi *= cphi;\n  this.rc = Math.sqrt(1 - this.es) / (1 - this.es * sphi * sphi);\n  this.C = Math.sqrt(1 + this.es * cphi * cphi / (1 - this.es));\n  this.phic0 = Math.asin(sphi / this.C);\n  this.ratexp = 0.5 * this.C * this.e;\n  this.K = Math.tan(0.5 * this.phic0 + FORTPI) / (Math.pow(Math.tan(0.5 * this.lat0 + FORTPI), this.C) * srat(this.e * sphi, this.ratexp));\n}\n\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n\n  p.y = 2 * Math.atan(this.K * Math.pow(Math.tan(0.5 * lat + FORTPI), this.C) * srat(this.e * Math.sin(lat), this.ratexp)) - HALF_PI;\n  p.x = this.C * lon;\n  return p;\n}\n\nexport function inverse(p) {\n  var DEL_TOL = 1e-14;\n  var lon = p.x / this.C;\n  var lat = p.y;\n  var num = Math.pow(Math.tan(0.5 * lat + FORTPI) / this.K, 1 / this.C);\n  for (var i = MAX_ITER; i > 0; --i) {\n    lat = 2 * Math.atan(num * srat(this.e * Math.sin(p.y), -0.5 * this.e)) - HALF_PI;\n    if (Math.abs(lat - p.y) < DEL_TOL) {\n      break;\n    }\n    p.y = lat;\n  }\n  /* convergence failed */\n  if (!i) {\n    return null;\n  }\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = ['gauss'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import gauss from './gauss';\nimport adjust_lon from '../common/adjust_lon';\nimport hypot from '../common/hypot';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} sinc0\n * @property {number} cosc0\n * @property {number} R2\n * @property {number} rc\n * @property {number} phic0\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  gauss.init.apply(this);\n  if (!this.rc) {\n    return;\n  }\n  this.sinc0 = Math.sin(this.phic0);\n  this.cosc0 = Math.cos(this.phic0);\n  this.R2 = 2 * this.rc;\n  if (!this.title) {\n    this.title = 'Oblique Stereographic Alternative';\n  }\n}\n\nexport function forward(p) {\n  var sinc, cosc, cosl, k;\n  p.x = adjust_lon(p.x - this.long0, this.over);\n  gauss.forward.apply(this, [p]);\n  sinc = Math.sin(p.y);\n  cosc = Math.cos(p.y);\n  cosl = Math.cos(p.x);\n  k = this.k0 * this.R2 / (1 + this.sinc0 * sinc + this.cosc0 * cosc * cosl);\n  p.x = k * cosc * Math.sin(p.x);\n  p.y = k * (this.cosc0 * sinc - this.sinc0 * cosc * cosl);\n  p.x = this.a * p.x + this.x0;\n  p.y = this.a * p.y + this.y0;\n  return p;\n}\n\nexport function inverse(p) {\n  var sinc, cosc, lon, lat, rho;\n  p.x = (p.x - this.x0) / this.a;\n  p.y = (p.y - this.y0) / this.a;\n\n  p.x /= this.k0;\n  p.y /= this.k0;\n  if ((rho = hypot(p.x, p.y))) {\n    var c = 2 * Math.atan2(rho, this.R2);\n    sinc = Math.sin(c);\n    cosc = Math.cos(c);\n    lat = Math.asin(cosc * this.sinc0 + p.y * sinc * this.cosc0 / rho);\n    lon = Math.atan2(p.x * sinc, rho * this.cosc0 * cosc - p.y * this.sinc0 * sinc);\n  } else {\n    lat = this.phic0;\n    lon = 0;\n  }\n\n  p.x = lon;\n  p.y = lat;\n  gauss.inverse.apply(this, [p]);\n  p.x = adjust_lon(p.x + this.long0, this.over);\n  return p;\n}\n\nexport var names = ['Stereographic_North_Pole', 'Oblique_Stereographic', 'sterea', 'Oblique Stereographic Alternative', 'Double_Stereographic'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import { EPSLN, HALF_PI } from '../constants/values';\n\nimport sign from '../common/sign';\nimport msfnz from '../common/msfnz';\nimport tsfnz from '../common/tsfnz';\nimport phi2z from '../common/phi2z';\nimport adjust_lon from '../common/adjust_lon';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} coslat0\n * @property {number} sinlat0\n * @property {number} ms1\n * @property {number} X0\n * @property {number} cosX0\n * @property {number} sinX0\n * @property {number} con\n * @property {number} cons\n * @property {number} e\n */\n\nexport function ssfn_(phit, sinphi, eccen) {\n  sinphi *= eccen;\n  return (Math.tan(0.5 * (HALF_PI + phit)) * Math.pow((1 - sinphi) / (1 + sinphi), 0.5 * eccen));\n}\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  // setting default parameters\n  this.x0 = this.x0 || 0;\n  this.y0 = this.y0 || 0;\n  this.lat0 = this.lat0 || 0;\n  this.long0 = this.long0 || 0;\n\n  this.coslat0 = Math.cos(this.lat0);\n  this.sinlat0 = Math.sin(this.lat0);\n  if (this.sphere) {\n    if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) {\n      this.k0 = 0.5 * (1 + sign(this.lat0) * Math.sin(this.lat_ts));\n    }\n  } else {\n    if (Math.abs(this.coslat0) <= EPSLN) {\n      if (this.lat0 > 0) {\n        // North pole\n        // trace('stere:north pole');\n        this.con = 1;\n      } else {\n        // South pole\n        // trace('stere:south pole');\n        this.con = -1;\n      }\n    }\n    this.cons = Math.sqrt(Math.pow(1 + this.e, 1 + this.e) * Math.pow(1 - this.e, 1 - this.e));\n    if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN && Math.abs(Math.cos(this.lat_ts)) > EPSLN) {\n      // When k0 is 1 (default value) and lat_ts is a vaild number and lat0 is at a pole and lat_ts is not at a pole\n      // Recalculate k0 using formula 21-35 from p161 of Snyder, 1987\n      this.k0 = 0.5 * this.cons * msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts)) / tsfnz(this.e, this.con * this.lat_ts, this.con * Math.sin(this.lat_ts));\n    }\n    this.ms1 = msfnz(this.e, this.sinlat0, this.coslat0);\n    this.X0 = 2 * Math.atan(ssfn_(this.lat0, this.sinlat0, this.e)) - HALF_PI;\n    this.cosX0 = Math.cos(this.X0);\n    this.sinX0 = Math.sin(this.X0);\n  }\n}\n\n// Stereographic forward equations--mapping lat,long to x,y\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n  var sinlat = Math.sin(lat);\n  var coslat = Math.cos(lat);\n  var A, X, sinX, cosX, ts, rh;\n  var dlon = adjust_lon(lon - this.long0, this.over);\n\n  if (Math.abs(Math.abs(lon - this.long0) - Math.PI) <= EPSLN && Math.abs(lat + this.lat0) <= EPSLN) {\n    // case of the origine point\n    // trace('stere:this is the origin point');\n    p.x = NaN;\n    p.y = NaN;\n    return p;\n  }\n  if (this.sphere) {\n    // trace('stere:sphere case');\n    A = 2 * this.k0 / (1 + this.sinlat0 * sinlat + this.coslat0 * coslat * Math.cos(dlon));\n    p.x = this.a * A * coslat * Math.sin(dlon) + this.x0;\n    p.y = this.a * A * (this.coslat0 * sinlat - this.sinlat0 * coslat * Math.cos(dlon)) + this.y0;\n    return p;\n  } else {\n    X = 2 * Math.atan(ssfn_(lat, sinlat, this.e)) - HALF_PI;\n    cosX = Math.cos(X);\n    sinX = Math.sin(X);\n    if (Math.abs(this.coslat0) <= EPSLN) {\n      ts = tsfnz(this.e, lat * this.con, this.con * sinlat);\n      rh = 2 * this.a * this.k0 * ts / this.cons;\n      p.x = this.x0 + rh * Math.sin(lon - this.long0);\n      p.y = this.y0 - this.con * rh * Math.cos(lon - this.long0);\n      // trace(p.toString());\n      return p;\n    } else if (Math.abs(this.sinlat0) < EPSLN) {\n      // Eq\n      // trace('stere:equateur');\n      A = 2 * this.a * this.k0 / (1 + cosX * Math.cos(dlon));\n      p.y = A * sinX;\n    } else {\n      // other case\n      // trace('stere:normal case');\n      A = 2 * this.a * this.k0 * this.ms1 / (this.cosX0 * (1 + this.sinX0 * sinX + this.cosX0 * cosX * Math.cos(dlon)));\n      p.y = A * (this.cosX0 * sinX - this.sinX0 * cosX * Math.cos(dlon)) + this.y0;\n    }\n    p.x = A * cosX * Math.sin(dlon) + this.x0;\n  }\n  // trace(p.toString());\n  return p;\n}\n\n//* Stereographic inverse equations--mapping x,y to lat/long\nexport function inverse(p) {\n  p.x -= this.x0;\n  p.y -= this.y0;\n  var lon, lat, ts, ce, Chi;\n  var rh = Math.sqrt(p.x * p.x + p.y * p.y);\n  if (this.sphere) {\n    var c = 2 * Math.atan(rh / (2 * this.a * this.k0));\n    lon = this.long0;\n    lat = this.lat0;\n    if (rh <= EPSLN) {\n      p.x = lon;\n      p.y = lat;\n      return p;\n    }\n    lat = Math.asin(Math.cos(c) * this.sinlat0 + p.y * Math.sin(c) * this.coslat0 / rh);\n    if (Math.abs(this.coslat0) < EPSLN) {\n      if (this.lat0 > 0) {\n        lon = adjust_lon(this.long0 + Math.atan2(p.x, -1 * p.y), this.over);\n      } else {\n        lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y), this.over);\n      }\n    } else {\n      lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(c), rh * this.coslat0 * Math.cos(c) - p.y * this.sinlat0 * Math.sin(c)), this.over);\n    }\n    p.x = lon;\n    p.y = lat;\n    return p;\n  } else {\n    if (Math.abs(this.coslat0) <= EPSLN) {\n      if (rh <= EPSLN) {\n        lat = this.lat0;\n        lon = this.long0;\n        p.x = lon;\n        p.y = lat;\n        // trace(p.toString());\n        return p;\n      }\n      p.x *= this.con;\n      p.y *= this.con;\n      ts = rh * this.cons / (2 * this.a * this.k0);\n      lat = this.con * phi2z(this.e, ts);\n      lon = this.con * adjust_lon(this.con * this.long0 + Math.atan2(p.x, -1 * p.y), this.over);\n    } else {\n      ce = 2 * Math.atan(rh * this.cosX0 / (2 * this.a * this.k0 * this.ms1));\n      lon = this.long0;\n      if (rh <= EPSLN) {\n        Chi = this.X0;\n      } else {\n        Chi = Math.asin(Math.cos(ce) * this.sinX0 + p.y * Math.sin(ce) * this.cosX0 / rh);\n        lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(ce), rh * this.cosX0 * Math.cos(ce) - p.y * this.sinX0 * Math.sin(ce)), this.over);\n      }\n      lat = -1 * phi2z(this.e, Math.tan(0.5 * (HALF_PI + Chi)));\n    }\n  }\n  p.x = lon;\n  p.y = lat;\n\n  // trace(p.toString());\n  return p;\n}\n\nexport var names = ['stere', 'Stereographic_South_Pole', 'Polar_Stereographic_variant_A', 'Polar_Stereographic_variant_B', 'Polar_Stereographic'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names,\n  ssfn_: ssfn_\n};\n","/*\n  references:\n    Formules et constantes pour le Calcul pour la\n    projection cylindrique conforme à axe oblique et pour la transformation entre\n    des systèmes de référence.\n    http://www.swisstopo.admin.ch/internet/swisstopo/fr/home/topics/survey/sys/refsys/switzerland.parsysrelated1.31216.downloadList.77004.DownloadFile.tmp/swissprojectionfr.pdf\n  */\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} lambda0\n * @property {number} e\n * @property {number} R\n * @property {number} b0\n * @property {number} K\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  var phy0 = this.lat0;\n  this.lambda0 = this.long0;\n  var sinPhy0 = Math.sin(phy0);\n  var semiMajorAxis = this.a;\n  var invF = this.rf;\n  var flattening = 1 / invF;\n  var e2 = 2 * flattening - Math.pow(flattening, 2);\n  var e = this.e = Math.sqrt(e2);\n  this.R = this.k0 * semiMajorAxis * Math.sqrt(1 - e2) / (1 - e2 * Math.pow(sinPhy0, 2));\n  this.alpha = Math.sqrt(1 + e2 / (1 - e2) * Math.pow(Math.cos(phy0), 4));\n  this.b0 = Math.asin(sinPhy0 / this.alpha);\n  var k1 = Math.log(Math.tan(Math.PI / 4 + this.b0 / 2));\n  var k2 = Math.log(Math.tan(Math.PI / 4 + phy0 / 2));\n  var k3 = Math.log((1 + e * sinPhy0) / (1 - e * sinPhy0));\n  this.K = k1 - this.alpha * k2 + this.alpha * e / 2 * k3;\n}\n\nexport function forward(p) {\n  var Sa1 = Math.log(Math.tan(Math.PI / 4 - p.y / 2));\n  var Sa2 = this.e / 2 * Math.log((1 + this.e * Math.sin(p.y)) / (1 - this.e * Math.sin(p.y)));\n  var S = -this.alpha * (Sa1 + Sa2) + this.K;\n\n  // spheric latitude\n  var b = 2 * (Math.atan(Math.exp(S)) - Math.PI / 4);\n\n  // spheric longitude\n  var I = this.alpha * (p.x - this.lambda0);\n\n  // psoeudo equatorial rotation\n  var rotI = Math.atan(Math.sin(I) / (Math.sin(this.b0) * Math.tan(b) + Math.cos(this.b0) * Math.cos(I)));\n\n  var rotB = Math.asin(Math.cos(this.b0) * Math.sin(b) - Math.sin(this.b0) * Math.cos(b) * Math.cos(I));\n\n  p.y = this.R / 2 * Math.log((1 + Math.sin(rotB)) / (1 - Math.sin(rotB))) + this.y0;\n  p.x = this.R * rotI + this.x0;\n  return p;\n}\n\nexport function inverse(p) {\n  var Y = p.x - this.x0;\n  var X = p.y - this.y0;\n\n  var rotI = Y / this.R;\n  var rotB = 2 * (Math.atan(Math.exp(X / this.R)) - Math.PI / 4);\n\n  var b = Math.asin(Math.cos(this.b0) * Math.sin(rotB) + Math.sin(this.b0) * Math.cos(rotB) * Math.cos(rotI));\n  var I = Math.atan(Math.sin(rotI) / (Math.cos(this.b0) * Math.cos(rotI) - Math.sin(this.b0) * Math.tan(rotB)));\n\n  var lambda = this.lambda0 + I / this.alpha;\n\n  var S = 0;\n  var phy = b;\n  var prevPhy = -1000;\n  var iteration = 0;\n  while (Math.abs(phy - prevPhy) > 0.0000001) {\n    if (++iteration > 20) {\n      // ...reportError(\"omercFwdInfinity\");\n      return;\n    }\n    // S = Math.log(Math.tan(Math.PI / 4 + phy / 2));\n    S = 1 / this.alpha * (Math.log(Math.tan(Math.PI / 4 + b / 2)) - this.K) + this.e * Math.log(Math.tan(Math.PI / 4 + Math.asin(this.e * Math.sin(phy)) / 2));\n    prevPhy = phy;\n    phy = 2 * Math.atan(Math.exp(S)) - Math.PI / 2;\n  }\n\n  p.x = lambda;\n  p.y = phy;\n  return p;\n}\n\nexport var names = ['somerc'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import tsfnz from '../common/tsfnz';\nimport adjust_lon from '../common/adjust_lon';\nimport phi2z from '../common/phi2z';\nimport { EPSLN, HALF_PI, TWO_PI, FORTPI } from '../constants/values';\nimport { getNormalizedProjName } from '../projections';\n\n/**\n * @typedef {Object} LocalThis\n * @property {boolean} no_off\n * @property {boolean} no_rot\n * @property {number} rectified_grid_angle\n * @property {number} es\n * @property {number} A\n * @property {number} B\n * @property {number} E\n * @property {number} e\n * @property {number} lam0\n * @property {number} singam\n * @property {number} cosgam\n * @property {number} sinrot\n * @property {number} cosrot\n * @property {number} rB\n * @property {number} ArB\n * @property {number} BrA\n * @property {number} u_0\n * @property {number} v_pole_n\n * @property {number} v_pole_s\n */\n\nvar TOL = 1e-7;\n\nfunction isTypeA(P) {\n  var typeAProjections = ['Hotine_Oblique_Mercator', 'Hotine_Oblique_Mercator_variant_A', 'Hotine_Oblique_Mercator_Azimuth_Natural_Origin'];\n  var projectionName = typeof P.projName === 'object' ? Object.keys(P.projName)[0] : P.projName;\n\n  return 'no_uoff' in P || 'no_off' in P || typeAProjections.indexOf(projectionName) !== -1 || typeAProjections.indexOf(getNormalizedProjName(projectionName)) !== -1;\n}\n\n/**\n * Initialize the Oblique Mercator  projection\n * @this {import('../defs.js').ProjectionDefinition & LocalThis}\n */\nexport function init() {\n  var con, com, cosph0, D, F, H, L, sinph0, p, J, gamma = 0,\n    gamma0, lamc = 0, lam1 = 0, lam2 = 0, phi1 = 0, phi2 = 0, alpha_c = 0;\n\n  // only Type A uses the no_off or no_uoff property\n  // https://github.com/OSGeo/proj.4/issues/104\n  this.no_off = isTypeA(this);\n  this.no_rot = 'no_rot' in this;\n\n  var alp = false;\n  if ('alpha' in this) {\n    alp = true;\n  }\n\n  var gam = false;\n  if ('rectified_grid_angle' in this) {\n    gam = true;\n  }\n\n  if (alp) {\n    alpha_c = this.alpha;\n  }\n\n  if (gam) {\n    gamma = this.rectified_grid_angle;\n  }\n\n  if (alp || gam) {\n    lamc = this.longc;\n  } else {\n    lam1 = this.long1;\n    phi1 = this.lat1;\n    lam2 = this.long2;\n    phi2 = this.lat2;\n\n    if (Math.abs(phi1 - phi2) <= TOL || (con = Math.abs(phi1)) <= TOL\n      || Math.abs(con - HALF_PI) <= TOL || Math.abs(Math.abs(this.lat0) - HALF_PI) <= TOL\n      || Math.abs(Math.abs(phi2) - HALF_PI) <= TOL) {\n      throw new Error();\n    }\n  }\n\n  var one_es = 1.0 - this.es;\n  com = Math.sqrt(one_es);\n\n  if (Math.abs(this.lat0) > EPSLN) {\n    sinph0 = Math.sin(this.lat0);\n    cosph0 = Math.cos(this.lat0);\n    con = 1 - this.es * sinph0 * sinph0;\n    this.B = cosph0 * cosph0;\n    this.B = Math.sqrt(1 + this.es * this.B * this.B / one_es);\n    this.A = this.B * this.k0 * com / con;\n    D = this.B * com / (cosph0 * Math.sqrt(con));\n    F = D * D - 1;\n\n    if (F <= 0) {\n      F = 0;\n    } else {\n      F = Math.sqrt(F);\n      if (this.lat0 < 0) {\n        F = -F;\n      }\n    }\n\n    this.E = F += D;\n    this.E *= Math.pow(tsfnz(this.e, this.lat0, sinph0), this.B);\n  } else {\n    this.B = 1 / com;\n    this.A = this.k0;\n    this.E = D = F = 1;\n  }\n\n  if (alp || gam) {\n    if (alp) {\n      gamma0 = Math.asin(Math.sin(alpha_c) / D);\n      if (!gam) {\n        gamma = alpha_c;\n      }\n    } else {\n      gamma0 = gamma;\n      alpha_c = Math.asin(D * Math.sin(gamma0));\n    }\n    this.lam0 = lamc - Math.asin(0.5 * (F - 1 / F) * Math.tan(gamma0)) / this.B;\n  } else {\n    H = Math.pow(tsfnz(this.e, phi1, Math.sin(phi1)), this.B);\n    L = Math.pow(tsfnz(this.e, phi2, Math.sin(phi2)), this.B);\n    F = this.E / H;\n    p = (L - H) / (L + H);\n    J = this.E * this.E;\n    J = (J - L * H) / (J + L * H);\n    con = lam1 - lam2;\n\n    if (con < -Math.PI) {\n      lam2 -= TWO_PI;\n    } else if (con > Math.PI) {\n      lam2 += TWO_PI;\n    }\n\n    this.lam0 = adjust_lon(0.5 * (lam1 + lam2) - Math.atan(J * Math.tan(0.5 * this.B * (lam1 - lam2)) / p) / this.B, this.over);\n    gamma0 = Math.atan(2 * Math.sin(this.B * adjust_lon(lam1 - this.lam0, this.over)) / (F - 1 / F));\n    gamma = alpha_c = Math.asin(D * Math.sin(gamma0));\n  }\n\n  this.singam = Math.sin(gamma0);\n  this.cosgam = Math.cos(gamma0);\n  this.sinrot = Math.sin(gamma);\n  this.cosrot = Math.cos(gamma);\n\n  this.rB = 1 / this.B;\n  this.ArB = this.A * this.rB;\n  this.BrA = 1 / this.ArB;\n\n  if (this.no_off) {\n    this.u_0 = 0;\n  } else {\n    this.u_0 = Math.abs(this.ArB * Math.atan(Math.sqrt(D * D - 1) / Math.cos(alpha_c)));\n\n    if (this.lat0 < 0) {\n      this.u_0 = -this.u_0;\n    }\n  }\n\n  F = 0.5 * gamma0;\n  this.v_pole_n = this.ArB * Math.log(Math.tan(FORTPI - F));\n  this.v_pole_s = this.ArB * Math.log(Math.tan(FORTPI + F));\n}\n\n/* Oblique Mercator forward equations--mapping lat,long to x,y\n    ---------------------------------------------------------- */\nexport function forward(p) {\n  var coords = {};\n  var S, T, U, V, W, temp, u, v;\n  p.x = p.x - this.lam0;\n\n  if (Math.abs(Math.abs(p.y) - HALF_PI) > EPSLN) {\n    W = this.E / Math.pow(tsfnz(this.e, p.y, Math.sin(p.y)), this.B);\n\n    temp = 1 / W;\n    S = 0.5 * (W - temp);\n    T = 0.5 * (W + temp);\n    V = Math.sin(this.B * p.x);\n    U = (S * this.singam - V * this.cosgam) / T;\n\n    if (Math.abs(Math.abs(U) - 1.0) < EPSLN) {\n      throw new Error();\n    }\n\n    v = 0.5 * this.ArB * Math.log((1 - U) / (1 + U));\n    temp = Math.cos(this.B * p.x);\n\n    if (Math.abs(temp) < TOL) {\n      u = this.A * p.x;\n    } else {\n      u = this.ArB * Math.atan2((S * this.cosgam + V * this.singam), temp);\n    }\n  } else {\n    v = p.y > 0 ? this.v_pole_n : this.v_pole_s;\n    u = this.ArB * p.y;\n  }\n\n  if (this.no_rot) {\n    coords.x = u;\n    coords.y = v;\n  } else {\n    u -= this.u_0;\n    coords.x = v * this.cosrot + u * this.sinrot;\n    coords.y = u * this.cosrot - v * this.sinrot;\n  }\n\n  coords.x = (this.a * coords.x + this.x0);\n  coords.y = (this.a * coords.y + this.y0);\n\n  return coords;\n}\n\nexport function inverse(p) {\n  var u, v, Qp, Sp, Tp, Vp, Up;\n  var coords = {};\n\n  p.x = (p.x - this.x0) * (1.0 / this.a);\n  p.y = (p.y - this.y0) * (1.0 / this.a);\n\n  if (this.no_rot) {\n    v = p.y;\n    u = p.x;\n  } else {\n    v = p.x * this.cosrot - p.y * this.sinrot;\n    u = p.y * this.cosrot + p.x * this.sinrot + this.u_0;\n  }\n\n  Qp = Math.exp(-this.BrA * v);\n  Sp = 0.5 * (Qp - 1 / Qp);\n  Tp = 0.5 * (Qp + 1 / Qp);\n  Vp = Math.sin(this.BrA * u);\n  Up = (Vp * this.cosgam + Sp * this.singam) / Tp;\n\n  if (Math.abs(Math.abs(Up) - 1) < EPSLN) {\n    coords.x = 0;\n    coords.y = Up < 0 ? -HALF_PI : HALF_PI;\n  } else {\n    coords.y = this.E / Math.sqrt((1 + Up) / (1 - Up));\n    coords.y = phi2z(this.e, Math.pow(coords.y, 1 / this.B));\n\n    if (coords.y === Infinity) {\n      throw new Error();\n    }\n\n    coords.x = -this.rB * Math.atan2((Sp * this.cosgam - Vp * this.singam), Math.cos(this.BrA * u));\n  }\n\n  coords.x += this.lam0;\n\n  return coords;\n}\n\nexport var names = ['Hotine_Oblique_Mercator', 'Hotine Oblique Mercator', 'Hotine_Oblique_Mercator_variant_A', 'Hotine_Oblique_Mercator_Variant_B', 'Hotine_Oblique_Mercator_Azimuth_Natural_Origin', 'Hotine_Oblique_Mercator_Two_Point_Natural_Origin', 'Hotine_Oblique_Mercator_Azimuth_Center', 'Oblique_Mercator', 'omerc'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import msfnz from '../common/msfnz';\nimport tsfnz from '../common/tsfnz';\nimport sign from '../common/sign';\nimport adjust_lon from '../common/adjust_lon';\nimport phi2z from '../common/phi2z';\nimport { HALF_PI, EPSLN } from '../constants/values';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} e\n * @property {number} ns\n * @property {number} f0\n * @property {number} rh\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  // double lat0;                    /* the reference latitude               */\n  // double long0;                   /* the reference longitude              */\n  // double lat1;                    /* first standard parallel              */\n  // double lat2;                    /* second standard parallel             */\n  // double r_maj;                   /* major axis                           */\n  // double r_min;                   /* minor axis                           */\n  // double false_east;              /* x offset in meters                   */\n  // double false_north;             /* y offset in meters                   */\n\n  // the above value can be set with proj4.defs\n  // example: proj4.defs(\"EPSG:2154\",\"+proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs\");\n\n  if (!this.lat2) {\n    this.lat2 = this.lat1;\n  } // if lat2 is not defined\n  if (!this.k0) {\n    this.k0 = 1;\n  }\n  this.x0 = this.x0 || 0;\n  this.y0 = this.y0 || 0;\n  // Standard Parallels cannot be equal and on opposite sides of the equator\n  if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n    return;\n  }\n\n  var temp = this.b / this.a;\n  this.e = Math.sqrt(1 - temp * temp);\n\n  var sin1 = Math.sin(this.lat1);\n  var cos1 = Math.cos(this.lat1);\n  var ms1 = msfnz(this.e, sin1, cos1);\n  var ts1 = tsfnz(this.e, this.lat1, sin1);\n\n  var sin2 = Math.sin(this.lat2);\n  var cos2 = Math.cos(this.lat2);\n  var ms2 = msfnz(this.e, sin2, cos2);\n  var ts2 = tsfnz(this.e, this.lat2, sin2);\n\n  var ts0 = Math.abs(Math.abs(this.lat0) - HALF_PI) < EPSLN\n    ? 0 // Handle poles by setting ts0 to 0\n    : tsfnz(this.e, this.lat0, Math.sin(this.lat0));\n\n  if (Math.abs(this.lat1 - this.lat2) > EPSLN) {\n    this.ns = Math.log(ms1 / ms2) / Math.log(ts1 / ts2);\n  } else {\n    this.ns = sin1;\n  }\n  if (isNaN(this.ns)) {\n    this.ns = sin1;\n  }\n  this.f0 = ms1 / (this.ns * Math.pow(ts1, this.ns));\n  this.rh = this.a * this.f0 * Math.pow(ts0, this.ns);\n  if (!this.title) {\n    this.title = 'Lambert Conformal Conic';\n  }\n}\n\n// Lambert Conformal conic forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n\n  // singular cases :\n  if (Math.abs(2 * Math.abs(lat) - Math.PI) <= EPSLN) {\n    lat = sign(lat) * (HALF_PI - 2 * EPSLN);\n  }\n\n  var con = Math.abs(Math.abs(lat) - HALF_PI);\n  var ts, rh1;\n  if (con > EPSLN) {\n    ts = tsfnz(this.e, lat, Math.sin(lat));\n    rh1 = this.a * this.f0 * Math.pow(ts, this.ns);\n  } else {\n    con = lat * this.ns;\n    if (con <= 0) {\n      return null;\n    }\n    rh1 = 0;\n  }\n  var theta = this.ns * adjust_lon(lon - this.long0, this.over);\n  p.x = this.k0 * (rh1 * Math.sin(theta)) + this.x0;\n  p.y = this.k0 * (this.rh - rh1 * Math.cos(theta)) + this.y0;\n\n  return p;\n}\n\n// Lambert Conformal Conic inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexport function inverse(p) {\n  var rh1, con, ts;\n  var lat, lon;\n  var x = (p.x - this.x0) / this.k0;\n  var y = (this.rh - (p.y - this.y0) / this.k0);\n  if (this.ns > 0) {\n    rh1 = Math.sqrt(x * x + y * y);\n    con = 1;\n  } else {\n    rh1 = -Math.sqrt(x * x + y * y);\n    con = -1;\n  }\n  var theta = 0;\n  if (rh1 !== 0) {\n    theta = Math.atan2((con * x), (con * y));\n  }\n  if ((rh1 !== 0) || (this.ns > 0)) {\n    con = 1 / this.ns;\n    ts = Math.pow((rh1 / (this.a * this.f0)), con);\n    lat = phi2z(this.e, ts);\n    if (lat === -9999) {\n      return null;\n    }\n  } else {\n    lat = -HALF_PI;\n  }\n  lon = adjust_lon(theta / this.ns + this.long0, this.over);\n\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = [\n  'Lambert Tangential Conformal Conic Projection',\n  'Lambert_Conformal_Conic',\n  'Lambert_Conformal_Conic_1SP',\n  'Lambert_Conformal_Conic_2SP',\n  'lcc',\n  'Lambert Conic Conformal (1SP)',\n  'Lambert Conic Conformal (2SP)'\n];\n\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import adjust_lon from '../common/adjust_lon';\n\nexport function init() {\n  this.a = 6377397.155;\n  this.es = 0.006674372230614;\n  this.e = Math.sqrt(this.es);\n  if (!this.lat0) {\n    this.lat0 = 0.863937979737193;\n  }\n  if (!this.long0) {\n    this.long0 = 0.7417649320975901 - 0.308341501185665; // 42.5° from Ferro = 24.833° from Greenwich\n  }\n  /* if scale not set default to 0.9999 */\n  if (!this.k0) {\n    this.k0 = 0.9999;\n  }\n  this.s45 = 0.785398163397448; /* 45 */\n  this.s90 = 2 * this.s45;\n  this.fi0 = this.lat0;\n  this.e2 = this.es;\n  this.e = Math.sqrt(this.e2);\n  this.alfa = Math.sqrt(1 + (this.e2 * Math.pow(Math.cos(this.fi0), 4)) / (1 - this.e2));\n  this.uq = 1.04216856380474;\n  this.u0 = Math.asin(Math.sin(this.fi0) / this.alfa);\n  this.g = Math.pow((1 + this.e * Math.sin(this.fi0)) / (1 - this.e * Math.sin(this.fi0)), this.alfa * this.e / 2);\n  this.k = Math.tan(this.u0 / 2 + this.s45) / Math.pow(Math.tan(this.fi0 / 2 + this.s45), this.alfa) * this.g;\n  this.k1 = this.k0;\n  this.n0 = this.a * Math.sqrt(1 - this.e2) / (1 - this.e2 * Math.pow(Math.sin(this.fi0), 2));\n  this.s0 = 1.37008346281555;\n  this.n = Math.sin(this.s0);\n  this.ro0 = this.k1 * this.n0 / Math.tan(this.s0);\n  this.ad = this.s90 - this.uq;\n}\n\n/* ellipsoid */\n/* calculate xy from lat/lon */\n/* Constants, identical to inverse transform function */\nexport function forward(p) {\n  var gfi, u, deltav, s, d, eps, ro;\n  var lon = p.x;\n  var lat = p.y;\n  var delta_lon = adjust_lon(lon - this.long0, this.over);\n  /* Transformation */\n  gfi = Math.pow(((1 + this.e * Math.sin(lat)) / (1 - this.e * Math.sin(lat))), (this.alfa * this.e / 2));\n  u = 2 * (Math.atan(this.k * Math.pow(Math.tan(lat / 2 + this.s45), this.alfa) / gfi) - this.s45);\n  deltav = -delta_lon * this.alfa;\n  s = Math.asin(Math.cos(this.ad) * Math.sin(u) + Math.sin(this.ad) * Math.cos(u) * Math.cos(deltav));\n  d = Math.asin(Math.cos(u) * Math.sin(deltav) / Math.cos(s));\n  eps = this.n * d;\n  ro = this.ro0 * Math.pow(Math.tan(this.s0 / 2 + this.s45), this.n) / Math.pow(Math.tan(s / 2 + this.s45), this.n);\n  p.y = ro * Math.cos(eps) / 1;\n  p.x = ro * Math.sin(eps) / 1;\n\n  if (!this.czech) {\n    p.y *= -1;\n    p.x *= -1;\n  }\n  return (p);\n}\n\n/* calculate lat/lon from xy */\nexport function inverse(p) {\n  var u, deltav, s, d, eps, ro, fi1;\n  var ok;\n\n  /* Transformation */\n  /* revert y, x */\n  var tmp = p.x;\n  p.x = p.y;\n  p.y = tmp;\n  if (!this.czech) {\n    p.y *= -1;\n    p.x *= -1;\n  }\n  ro = Math.sqrt(p.x * p.x + p.y * p.y);\n  eps = Math.atan2(p.y, p.x);\n  d = eps / Math.sin(this.s0);\n  s = 2 * (Math.atan(Math.pow(this.ro0 / ro, 1 / this.n) * Math.tan(this.s0 / 2 + this.s45)) - this.s45);\n  u = Math.asin(Math.cos(this.ad) * Math.sin(s) - Math.sin(this.ad) * Math.cos(s) * Math.cos(d));\n  deltav = Math.asin(Math.cos(s) * Math.sin(d) / Math.cos(u));\n  p.x = this.long0 - deltav / this.alfa;\n  fi1 = u;\n  ok = 0;\n  var iter = 0;\n  do {\n    p.y = 2 * (Math.atan(Math.pow(this.k, -1 / this.alfa) * Math.pow(Math.tan(u / 2 + this.s45), 1 / this.alfa) * Math.pow((1 + this.e * Math.sin(fi1)) / (1 - this.e * Math.sin(fi1)), this.e / 2)) - this.s45);\n    if (Math.abs(fi1 - p.y) < 0.0000000001) {\n      ok = 1;\n    }\n    fi1 = p.y;\n    iter += 1;\n  } while (ok === 0 && iter < 15);\n  if (iter >= 15) {\n    return null;\n  }\n\n  return (p);\n}\n\nexport var names = ['Krovak', 'Krovak Modified', 'Krovak (North Orientated)', 'Krovak Modified (North Orientated)', 'krovak'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","export default function (e0, e1, e2, e3, phi) {\n  return (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi));\n}\n","export default function (x) {\n  return (1 - 0.25 * x * (1 + x / 16 * (3 + 1.25 * x)));\n}\n","export default function (x) {\n  return (0.375 * x * (1 + 0.25 * x * (1 + 0.46875 * x)));\n}\n","export default function (x) {\n  return (0.05859375 * x * x * (1 + 0.75 * x));\n}\n","export default function (x) {\n  return (x * x * x * (35 / 3072));\n}\n","export default function (a, e, sinphi) {\n  var temp = e * sinphi;\n  return a / Math.sqrt(1 - temp * temp);\n}\n","import { HALF_PI } from '../constants/values';\nimport sign from './sign';\n\nexport default function (x) {\n  return (Math.abs(x) < HALF_PI) ? x : (x - (sign(x) * Math.PI));\n}\n","export default function (ml, e0, e1, e2, e3) {\n  var phi;\n  var dphi;\n\n  phi = ml / e0;\n  for (var i = 0; i < 15; i++) {\n    dphi = (ml - (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi))) / (e0 - 2 * e1 * Math.cos(2 * phi) + 4 * e2 * Math.cos(4 * phi) - 6 * e3 * Math.cos(6 * phi));\n    phi += dphi;\n    if (Math.abs(dphi) <= 0.0000000001) {\n      return phi;\n    }\n  }\n\n  // ..reportError(\"IMLFN-CONV:Latitude failed to converge after 15 iterations\");\n  return NaN;\n}\n","import mlfn from '../common/mlfn';\nimport e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport gN from '../common/gN';\nimport adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport imlfn from '../common/imlfn';\nimport { HALF_PI, EPSLN } from '../constants/values';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} es\n * @property {number} e0\n * @property {number} e1\n * @property {number} e2\n * @property {number} e3\n * @property {number} ml0\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  if (!this.sphere) {\n    this.e0 = e0fn(this.es);\n    this.e1 = e1fn(this.es);\n    this.e2 = e2fn(this.es);\n    this.e3 = e3fn(this.es);\n    this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);\n  }\n}\n\n/* Cassini forward equations--mapping lat,long to x,y\n  ----------------------------------------------------------------------- */\nexport function forward(p) {\n  /* Forward equations\n      ----------------- */\n  var x, y;\n  var lam = p.x;\n  var phi = p.y;\n  lam = adjust_lon(lam - this.long0, this.over);\n\n  if (this.sphere) {\n    x = this.a * Math.asin(Math.cos(phi) * Math.sin(lam));\n    y = this.a * (Math.atan2(Math.tan(phi), Math.cos(lam)) - this.lat0);\n  } else {\n    // ellipsoid\n    var sinphi = Math.sin(phi);\n    var cosphi = Math.cos(phi);\n    var nl = gN(this.a, this.e, sinphi);\n    var tl = Math.tan(phi) * Math.tan(phi);\n    var al = lam * Math.cos(phi);\n    var asq = al * al;\n    var cl = this.es * cosphi * cosphi / (1 - this.es);\n    var ml = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);\n\n    x = nl * al * (1 - asq * tl * (1 / 6 - (8 - tl + 8 * cl) * asq / 120));\n    y = ml - this.ml0 + nl * sinphi / cosphi * asq * (0.5 + (5 - tl + 6 * cl) * asq / 24);\n  }\n\n  p.x = x + this.x0;\n  p.y = y + this.y0;\n  return p;\n}\n\n/* Inverse equations\n  ----------------- */\nexport function inverse(p) {\n  p.x -= this.x0;\n  p.y -= this.y0;\n  var x = p.x / this.a;\n  var y = p.y / this.a;\n  var phi, lam;\n\n  if (this.sphere) {\n    var dd = y + this.lat0;\n    phi = Math.asin(Math.sin(dd) * Math.cos(x));\n    lam = Math.atan2(Math.tan(x), Math.cos(dd));\n  } else {\n    /* ellipsoid */\n    var ml1 = this.ml0 / this.a + y;\n    var phi1 = imlfn(ml1, this.e0, this.e1, this.e2, this.e3);\n    if (Math.abs(Math.abs(phi1) - HALF_PI) <= EPSLN) {\n      p.x = this.long0;\n      p.y = HALF_PI;\n      if (y < 0) {\n        p.y *= -1;\n      }\n      return p;\n    }\n    var nl1 = gN(this.a, this.e, Math.sin(phi1));\n\n    var rl1 = nl1 * nl1 * nl1 / this.a / this.a * (1 - this.es);\n    var tl1 = Math.pow(Math.tan(phi1), 2);\n    var dl = x * this.a / nl1;\n    var dsq = dl * dl;\n    phi = phi1 - nl1 * Math.tan(phi1) / rl1 * dl * dl * (0.5 - (1 + 3 * tl1) * dl * dl / 24);\n    lam = dl * (1 - dsq * (tl1 / 3 + (1 + 3 * tl1) * tl1 * dsq / 15)) / Math.cos(phi1);\n  }\n\n  p.x = adjust_lon(lam + this.long0, this.over);\n  p.y = adjust_lat(phi);\n  return p;\n}\n\nexport var names = ['Cassini', 'Cassini_Soldner', 'cass'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","export default function (eccent, sinphi) {\n  var con;\n  if (eccent > 1.0e-7) {\n    con = eccent * sinphi;\n    return ((1 - eccent * eccent) * (sinphi / (1 - con * con) - (0.5 / eccent) * Math.log((1 - con) / (1 + con))));\n  } else {\n    return (2 * sinphi);\n  }\n}\n","import { HALF_PI, EPSLN, FORTPI } from '../constants/values';\n\nimport qsfnz from '../common/qsfnz';\nimport adjust_lon from '../common/adjust_lon';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} mode\n * @property {Array<number>} apa\n * @property {number} dd\n * @property {number} e\n * @property {number} es\n * @property {number} mmf\n * @property {number} rq\n * @property {number} qp\n * @property {number} sinb1\n * @property {number} cosb1\n * @property {number} ymf\n * @property {number} xmf\n * @property {number} sinph0\n * @property {number} cosph0\n */\n\n/*\n  reference\n    \"New Equal-Area Map Projections for Noncircular Regions\", John P. Snyder,\n    The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.\n  */\n\nexport var S_POLE = 1;\nexport var N_POLE = 2;\nexport var EQUIT = 3;\nexport var OBLIQ = 4;\n\n/**\n * Initialize the Lambert Azimuthal Equal Area projection\n * @this {import('../defs.js').ProjectionDefinition & LocalThis}\n */\nexport function init() {\n  var t = Math.abs(this.lat0);\n  if (Math.abs(t - HALF_PI) < EPSLN) {\n    this.mode = this.lat0 < 0 ? S_POLE : N_POLE;\n  } else if (Math.abs(t) < EPSLN) {\n    this.mode = EQUIT;\n  } else {\n    this.mode = OBLIQ;\n  }\n  if (this.es > 0) {\n    var sinphi;\n\n    this.qp = qsfnz(this.e, 1);\n    this.mmf = 0.5 / (1 - this.es);\n    this.apa = authset(this.es);\n    switch (this.mode) {\n      case N_POLE:\n        this.dd = 1;\n        break;\n      case S_POLE:\n        this.dd = 1;\n        break;\n      case EQUIT:\n        this.rq = Math.sqrt(0.5 * this.qp);\n        this.dd = 1 / this.rq;\n        this.xmf = 1;\n        this.ymf = 0.5 * this.qp;\n        break;\n      case OBLIQ:\n        this.rq = Math.sqrt(0.5 * this.qp);\n        sinphi = Math.sin(this.lat0);\n        this.sinb1 = qsfnz(this.e, sinphi) / this.qp;\n        this.cosb1 = Math.sqrt(1 - this.sinb1 * this.sinb1);\n        this.dd = Math.cos(this.lat0) / (Math.sqrt(1 - this.es * sinphi * sinphi) * this.rq * this.cosb1);\n        this.ymf = (this.xmf = this.rq) / this.dd;\n        this.xmf *= this.dd;\n        break;\n    }\n  } else {\n    if (this.mode === OBLIQ) {\n      this.sinph0 = Math.sin(this.lat0);\n      this.cosph0 = Math.cos(this.lat0);\n    }\n  }\n}\n\n/* Lambert Azimuthal Equal Area forward equations--mapping lat,long to x,y\n  ----------------------------------------------------------------------- */\nexport function forward(p) {\n  /* Forward equations\n      ----------------- */\n  var x, y, coslam, sinlam, sinphi, q, sinb, cosb, b, cosphi;\n  var lam = p.x;\n  var phi = p.y;\n\n  lam = adjust_lon(lam - this.long0, this.over);\n  if (this.sphere) {\n    sinphi = Math.sin(phi);\n    cosphi = Math.cos(phi);\n    coslam = Math.cos(lam);\n    if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n      y = (this.mode === this.EQUIT) ? 1 + cosphi * coslam : 1 + this.sinph0 * sinphi + this.cosph0 * cosphi * coslam;\n      if (y <= EPSLN) {\n        return null;\n      }\n      y = Math.sqrt(2 / y);\n      x = y * cosphi * Math.sin(lam);\n      y *= (this.mode === this.EQUIT) ? sinphi : this.cosph0 * sinphi - this.sinph0 * cosphi * coslam;\n    } else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {\n      if (this.mode === this.N_POLE) {\n        coslam = -coslam;\n      }\n      if (Math.abs(phi + this.lat0) < EPSLN) {\n        return null;\n      }\n      y = FORTPI - phi * 0.5;\n      y = 2 * ((this.mode === this.S_POLE) ? Math.cos(y) : Math.sin(y));\n      x = y * Math.sin(lam);\n      y *= coslam;\n    }\n  } else {\n    sinb = 0;\n    cosb = 0;\n    b = 0;\n    coslam = Math.cos(lam);\n    sinlam = Math.sin(lam);\n    sinphi = Math.sin(phi);\n    q = qsfnz(this.e, sinphi);\n    if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n      sinb = q / this.qp;\n      cosb = Math.sqrt(1 - sinb * sinb);\n    }\n    switch (this.mode) {\n      case this.OBLIQ:\n        b = 1 + this.sinb1 * sinb + this.cosb1 * cosb * coslam;\n        break;\n      case this.EQUIT:\n        b = 1 + cosb * coslam;\n        break;\n      case this.N_POLE:\n        b = HALF_PI + phi;\n        q = this.qp - q;\n        break;\n      case this.S_POLE:\n        b = phi - HALF_PI;\n        q = this.qp + q;\n        break;\n    }\n    if (Math.abs(b) < EPSLN) {\n      return null;\n    }\n    switch (this.mode) {\n      case this.OBLIQ:\n      case this.EQUIT:\n        b = Math.sqrt(2 / b);\n        if (this.mode === this.OBLIQ) {\n          y = this.ymf * b * (this.cosb1 * sinb - this.sinb1 * cosb * coslam);\n        } else {\n          y = (b = Math.sqrt(2 / (1 + cosb * coslam))) * sinb * this.ymf;\n        }\n        x = this.xmf * b * cosb * sinlam;\n        break;\n      case this.N_POLE:\n      case this.S_POLE:\n        if (q >= 0) {\n          x = (b = Math.sqrt(q)) * sinlam;\n          y = coslam * ((this.mode === this.S_POLE) ? b : -b);\n        } else {\n          x = y = 0;\n        }\n        break;\n    }\n  }\n\n  p.x = this.a * x + this.x0;\n  p.y = this.a * y + this.y0;\n  return p;\n}\n\n/* Inverse equations\n  ----------------- */\nexport function inverse(p) {\n  p.x -= this.x0;\n  p.y -= this.y0;\n  var x = p.x / this.a;\n  var y = p.y / this.a;\n  var lam, phi, cCe, sCe, q, rho, ab;\n  if (this.sphere) {\n    var cosz = 0,\n      rh, sinz = 0;\n\n    rh = Math.sqrt(x * x + y * y);\n    phi = rh * 0.5;\n    if (phi > 1) {\n      return null;\n    }\n    phi = 2 * Math.asin(phi);\n    if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n      sinz = Math.sin(phi);\n      cosz = Math.cos(phi);\n    }\n    switch (this.mode) {\n      case this.EQUIT:\n        phi = (Math.abs(rh) <= EPSLN) ? 0 : Math.asin(y * sinz / rh);\n        x *= sinz;\n        y = cosz * rh;\n        break;\n      case this.OBLIQ:\n        phi = (Math.abs(rh) <= EPSLN) ? this.lat0 : Math.asin(cosz * this.sinph0 + y * sinz * this.cosph0 / rh);\n        x *= sinz * this.cosph0;\n        y = (cosz - Math.sin(phi) * this.sinph0) * rh;\n        break;\n      case this.N_POLE:\n        y = -y;\n        phi = HALF_PI - phi;\n        break;\n      case this.S_POLE:\n        phi -= HALF_PI;\n        break;\n    }\n    lam = (y === 0 && (this.mode === this.EQUIT || this.mode === this.OBLIQ)) ? 0 : Math.atan2(x, y);\n  } else {\n    ab = 0;\n    if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n      x /= this.dd;\n      y *= this.dd;\n      rho = Math.sqrt(x * x + y * y);\n      if (rho < EPSLN) {\n        p.x = this.long0;\n        p.y = this.lat0;\n        return p;\n      }\n      sCe = 2 * Math.asin(0.5 * rho / this.rq);\n      cCe = Math.cos(sCe);\n      x *= (sCe = Math.sin(sCe));\n      if (this.mode === this.OBLIQ) {\n        ab = cCe * this.sinb1 + y * sCe * this.cosb1 / rho;\n        q = this.qp * ab;\n        y = rho * this.cosb1 * cCe - y * this.sinb1 * sCe;\n      } else {\n        ab = y * sCe / rho;\n        q = this.qp * ab;\n        y = rho * cCe;\n      }\n    } else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {\n      if (this.mode === this.N_POLE) {\n        y = -y;\n      }\n      q = (x * x + y * y);\n      if (!q) {\n        p.x = this.long0;\n        p.y = this.lat0;\n        return p;\n      }\n      ab = 1 - q / this.qp;\n      if (this.mode === this.S_POLE) {\n        ab = -ab;\n      }\n    }\n    lam = Math.atan2(x, y);\n    phi = authlat(Math.asin(ab), this.apa);\n  }\n\n  p.x = adjust_lon(this.long0 + lam, this.over);\n  p.y = phi;\n  return p;\n}\n\n/* determine latitude from authalic latitude */\nvar P00 = 0.33333333333333333333;\n\nvar P01 = 0.17222222222222222222;\nvar P02 = 0.10257936507936507936;\nvar P10 = 0.06388888888888888888;\nvar P11 = 0.06640211640211640211;\nvar P20 = 0.01641501294219154443;\n\nfunction authset(es) {\n  var t;\n  var APA = [];\n  APA[0] = es * P00;\n  t = es * es;\n  APA[0] += t * P01;\n  APA[1] = t * P10;\n  t *= es;\n  APA[0] += t * P02;\n  APA[1] += t * P11;\n  APA[2] = t * P20;\n  return APA;\n}\n\nfunction authlat(beta, APA) {\n  var t = beta + beta;\n  return (beta + APA[0] * Math.sin(t) + APA[1] * Math.sin(t + t) + APA[2] * Math.sin(t + t + t));\n}\n\nexport var names = ['Lambert Azimuthal Equal Area', 'Lambert_Azimuthal_Equal_Area', 'laea'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names,\n  S_POLE: S_POLE,\n  N_POLE: N_POLE,\n  EQUIT: EQUIT,\n  OBLIQ: OBLIQ\n};\n","export default function (x) {\n  if (Math.abs(x) > 1) {\n    x = (x > 1) ? 1 : -1;\n  }\n  return Math.asin(x);\n}\n","import msfnz from '../common/msfnz';\nimport qsfnz from '../common/qsfnz';\nimport adjust_lon from '../common/adjust_lon';\nimport asinz from '../common/asinz';\nimport { EPSLN } from '../constants/values';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} temp\n * @property {number} es\n * @property {number} e3\n * @property {number} sin_po\n * @property {number} cos_po\n * @property {number} t1\n * @property {number} con\n * @property {number} ms1\n * @property {number} qs1\n * @property {number} t2\n * @property {number} ms2\n * @property {number} qs2\n * @property {number} t3\n * @property {number} qs0\n * @property {number} ns0\n * @property {number} c\n * @property {number} rh\n * @property {number} sin_phi\n * @property {number} cos_phi\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n    return;\n  }\n  this.temp = this.b / this.a;\n  this.es = 1 - Math.pow(this.temp, 2);\n  this.e3 = Math.sqrt(this.es);\n\n  this.sin_po = Math.sin(this.lat1);\n  this.cos_po = Math.cos(this.lat1);\n  this.t1 = this.sin_po;\n  this.con = this.sin_po;\n  this.ms1 = msfnz(this.e3, this.sin_po, this.cos_po);\n  this.qs1 = qsfnz(this.e3, this.sin_po);\n\n  this.sin_po = Math.sin(this.lat2);\n  this.cos_po = Math.cos(this.lat2);\n  this.t2 = this.sin_po;\n  this.ms2 = msfnz(this.e3, this.sin_po, this.cos_po);\n  this.qs2 = qsfnz(this.e3, this.sin_po);\n\n  this.sin_po = Math.sin(this.lat0);\n  this.cos_po = Math.cos(this.lat0);\n  this.t3 = this.sin_po;\n  this.qs0 = qsfnz(this.e3, this.sin_po);\n\n  if (Math.abs(this.lat1 - this.lat2) > EPSLN) {\n    this.ns0 = (this.ms1 * this.ms1 - this.ms2 * this.ms2) / (this.qs2 - this.qs1);\n  } else {\n    this.ns0 = this.con;\n  }\n  this.c = this.ms1 * this.ms1 + this.ns0 * this.qs1;\n  this.rh = this.a * Math.sqrt(this.c - this.ns0 * this.qs0) / this.ns0;\n}\n\n/* Albers Conical Equal Area forward equations--mapping lat,long to x,y\n  ------------------------------------------------------------------- */\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n\n  this.sin_phi = Math.sin(lat);\n  this.cos_phi = Math.cos(lat);\n\n  var qs = qsfnz(this.e3, this.sin_phi);\n  var rh1 = this.a * Math.sqrt(this.c - this.ns0 * qs) / this.ns0;\n  var theta = this.ns0 * adjust_lon(lon - this.long0, this.over);\n  var x = rh1 * Math.sin(theta) + this.x0;\n  var y = this.rh - rh1 * Math.cos(theta) + this.y0;\n\n  p.x = x;\n  p.y = y;\n  return p;\n}\n\nexport function inverse(p) {\n  var rh1, qs, con, theta, lon, lat;\n\n  p.x -= this.x0;\n  p.y = this.rh - p.y + this.y0;\n  if (this.ns0 >= 0) {\n    rh1 = Math.sqrt(p.x * p.x + p.y * p.y);\n    con = 1;\n  } else {\n    rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);\n    con = -1;\n  }\n  theta = 0;\n  if (rh1 !== 0) {\n    theta = Math.atan2(con * p.x, con * p.y);\n  }\n  con = rh1 * this.ns0 / this.a;\n  if (this.sphere) {\n    lat = Math.asin((this.c - con * con) / (2 * this.ns0));\n  } else {\n    qs = (this.c - con * con) / this.ns0;\n    lat = this.phi1z(this.e3, qs);\n  }\n\n  lon = adjust_lon(theta / this.ns0 + this.long0, this.over);\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\n/* Function to compute phi1, the latitude for the inverse of the\n   Albers Conical Equal-Area projection.\n------------------------------------------- */\nexport function phi1z(eccent, qs) {\n  var sinphi, cosphi, con, com, dphi;\n  var phi = asinz(0.5 * qs);\n  if (eccent < EPSLN) {\n    return phi;\n  }\n\n  var eccnts = eccent * eccent;\n  for (var i = 1; i <= 25; i++) {\n    sinphi = Math.sin(phi);\n    cosphi = Math.cos(phi);\n    con = eccent * sinphi;\n    com = 1 - con * con;\n    dphi = 0.5 * com * com / cosphi * (qs / (1 - eccnts) - sinphi / com + 0.5 / eccent * Math.log((1 - con) / (1 + con)));\n    phi = phi + dphi;\n    if (Math.abs(dphi) <= 1e-7) {\n      return phi;\n    }\n  }\n  return null;\n}\n\nexport var names = ['Albers_Conic_Equal_Area', 'Albers_Equal_Area', 'Albers', 'aea'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names,\n  phi1z: phi1z\n};\n","import adjust_lon from '../common/adjust_lon';\nimport asinz from '../common/asinz';\nimport { EPSLN } from '../constants/values';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} sin_p14\n * @property {number} cos_p14\n * @property {number} infinity_dist\n * @property {number} rc\n */\n\n/**\n  reference:\n    Wolfram Mathworld \"Gnomonic Projection\"\n    http://mathworld.wolfram.com/GnomonicProjection.html\n    Accessed: 12th November 2009\n   @this {import('../defs.js').ProjectionDefinition & LocalThis}\n */\nexport function init() {\n  /* Place parameters in static storage for common use\n      ------------------------------------------------- */\n  this.sin_p14 = Math.sin(this.lat0);\n  this.cos_p14 = Math.cos(this.lat0);\n  // Approximation for projecting points to the horizon (infinity)\n  this.infinity_dist = 1000 * this.a;\n  this.rc = 1;\n}\n\n/* Gnomonic forward equations--mapping lat,long to x,y\n    --------------------------------------------------- */\nexport function forward(p) {\n  var sinphi, cosphi; /* sin and cos value        */\n  var dlon; /* delta longitude value      */\n  var coslon; /* cos of longitude        */\n  var ksp; /* scale factor          */\n  var g;\n  var x, y;\n  var lon = p.x;\n  var lat = p.y;\n  /* Forward equations\n      ----------------- */\n  dlon = adjust_lon(lon - this.long0, this.over);\n\n  sinphi = Math.sin(lat);\n  cosphi = Math.cos(lat);\n\n  coslon = Math.cos(dlon);\n  g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;\n  ksp = 1;\n  if ((g > 0) || (Math.abs(g) <= EPSLN)) {\n    x = this.x0 + this.a * ksp * cosphi * Math.sin(dlon) / g;\n    y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon) / g;\n  } else {\n    // Point is in the opposing hemisphere and is unprojectable\n    // We still need to return a reasonable point, so we project\n    // to infinity, on a bearing\n    // equivalent to the northern hemisphere equivalent\n    // This is a reasonable approximation for short shapes and lines that\n    // straddle the horizon.\n\n    x = this.x0 + this.infinity_dist * cosphi * Math.sin(dlon);\n    y = this.y0 + this.infinity_dist * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);\n  }\n  p.x = x;\n  p.y = y;\n  return p;\n}\n\nexport function inverse(p) {\n  var rh; /* Rho */\n  var sinc, cosc;\n  var c;\n  var lon, lat;\n\n  /* Inverse equations\n      ----------------- */\n  p.x = (p.x - this.x0) / this.a;\n  p.y = (p.y - this.y0) / this.a;\n\n  p.x /= this.k0;\n  p.y /= this.k0;\n\n  if ((rh = Math.sqrt(p.x * p.x + p.y * p.y))) {\n    c = Math.atan2(rh, this.rc);\n    sinc = Math.sin(c);\n    cosc = Math.cos(c);\n\n    lat = asinz(cosc * this.sin_p14 + (p.y * sinc * this.cos_p14) / rh);\n    lon = Math.atan2(p.x * sinc, rh * this.cos_p14 * cosc - p.y * this.sin_p14 * sinc);\n    lon = adjust_lon(this.long0 + lon, this.over);\n  } else {\n    lat = this.phic0;\n    lon = 0;\n  }\n\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = ['gnom'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import { HALF_PI } from '../constants/values';\n\nexport default function (eccent, q) {\n  var temp = 1 - (1 - eccent * eccent) / (2 * eccent) * Math.log((1 - eccent) / (1 + eccent));\n  if (Math.abs(Math.abs(q) - temp) < 1.0E-6) {\n    if (q < 0) {\n      return (-1 * HALF_PI);\n    } else {\n      return HALF_PI;\n    }\n  }\n  // var phi = 0.5* q/(1-eccent*eccent);\n  var phi = Math.asin(0.5 * q);\n  var dphi;\n  var sin_phi;\n  var cos_phi;\n  var con;\n  for (var i = 0; i < 30; i++) {\n    sin_phi = Math.sin(phi);\n    cos_phi = Math.cos(phi);\n    con = eccent * sin_phi;\n    dphi = Math.pow(1 - con * con, 2) / (2 * cos_phi) * (q / (1 - eccent * eccent) - sin_phi / (1 - con * con) + 0.5 / eccent * Math.log((1 - con) / (1 + con)));\n    phi += dphi;\n    if (Math.abs(dphi) <= 0.0000000001) {\n      return phi;\n    }\n  }\n\n  // console.log(\"IQSFN-CONV:Latitude failed to converge after 30 iterations\");\n  return NaN;\n}\n","import adjust_lon from '../common/adjust_lon';\nimport qsfnz from '../common/qsfnz';\nimport msfnz from '../common/msfnz';\nimport iqsfnz from '../common/iqsfnz';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} e\n */\n\n/**\n  reference:\n    \"Cartographic Projection Procedures for the UNIX Environment-\n    A User's Manual\" by Gerald I. Evenden,\n    USGS Open File Report 90-284and Release 4 Interim Reports (2003)\n  @this {import('../defs.js').ProjectionDefinition & LocalThis}\n*/\nexport function init() {\n  // no-op\n  if (!this.sphere) {\n    this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));\n  }\n}\n\n/* Cylindrical Equal Area forward equations--mapping lat,long to x,y\n    ------------------------------------------------------------ */\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n  var x, y;\n  /* Forward equations\n      ----------------- */\n  var dlon = adjust_lon(lon - this.long0, this.over);\n  if (this.sphere) {\n    x = this.x0 + this.a * dlon * Math.cos(this.lat_ts);\n    y = this.y0 + this.a * Math.sin(lat) / Math.cos(this.lat_ts);\n  } else {\n    var qs = qsfnz(this.e, Math.sin(lat));\n    x = this.x0 + this.a * this.k0 * dlon;\n    y = this.y0 + this.a * qs * 0.5 / this.k0;\n  }\n\n  p.x = x;\n  p.y = y;\n  return p;\n}\n\n/* Cylindrical Equal Area inverse equations--mapping x,y to lat/long\n    ------------------------------------------------------------ */\nexport function inverse(p) {\n  p.x -= this.x0;\n  p.y -= this.y0;\n  var lon, lat;\n\n  if (this.sphere) {\n    lon = adjust_lon(this.long0 + (p.x / this.a) / Math.cos(this.lat_ts), this.over);\n    lat = Math.asin((p.y / this.a) * Math.cos(this.lat_ts));\n  } else {\n    lat = iqsfnz(this.e, 2 * p.y * this.k0 / this.a);\n    lon = adjust_lon(this.long0 + p.x / (this.a * this.k0), this.over);\n  }\n\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = ['cea'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\n\nexport function init() {\n  this.x0 = this.x0 || 0;\n  this.y0 = this.y0 || 0;\n  this.lat0 = this.lat0 || 0;\n  this.long0 = this.long0 || 0;\n  this.lat_ts = this.lat_ts || 0;\n  this.title = this.title || 'Equidistant Cylindrical (Plate Carre)';\n\n  this.rc = Math.cos(this.lat_ts);\n}\n\n// forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n\n  var dlon = adjust_lon(lon - this.long0, this.over);\n  var dlat = adjust_lat(lat - this.lat0);\n  p.x = this.x0 + (this.a * dlon * this.rc);\n  p.y = this.y0 + (this.a * dlat);\n  return p;\n}\n\n// inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexport function inverse(p) {\n  var x = p.x;\n  var y = p.y;\n\n  p.x = adjust_lon(this.long0 + ((x - this.x0) / (this.a * this.rc)), this.over);\n  p.y = adjust_lat(this.lat0 + ((y - this.y0) / (this.a)));\n  return p;\n}\n\nexport var names = ['Equirectangular', 'Equidistant_Cylindrical', 'Equidistant_Cylindrical_Spherical', 'eqc'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport mlfn from '../common/mlfn';\nimport { EPSLN } from '../constants/values';\n\nimport gN from '../common/gN';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} temp\n * @property {number} es\n * @property {number} e\n * @property {number} e0\n * @property {number} e1\n * @property {number} e2\n * @property {number} e3\n * @property {number} ml0\n */\n\nvar MAX_ITER = 20;\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  /* Place parameters in static storage for common use\n      ------------------------------------------------- */\n  this.temp = this.b / this.a;\n  this.es = 1 - Math.pow(this.temp, 2); // devait etre dans tmerc.js mais n y est pas donc je commente sinon retour de valeurs nulles\n  this.e = Math.sqrt(this.es);\n  this.e0 = e0fn(this.es);\n  this.e1 = e1fn(this.es);\n  this.e2 = e2fn(this.es);\n  this.e3 = e3fn(this.es);\n  this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0); // si que des zeros le calcul ne se fait pas\n}\n\n/* Polyconic forward equations--mapping lat,long to x,y\n    --------------------------------------------------- */\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n  var x, y, el;\n  var dlon = adjust_lon(lon - this.long0, this.over);\n  el = dlon * Math.sin(lat);\n  if (this.sphere) {\n    if (Math.abs(lat) <= EPSLN) {\n      x = this.a * dlon;\n      y = -1 * this.a * this.lat0;\n    } else {\n      x = this.a * Math.sin(el) / Math.tan(lat);\n      y = this.a * (adjust_lat(lat - this.lat0) + (1 - Math.cos(el)) / Math.tan(lat));\n    }\n  } else {\n    if (Math.abs(lat) <= EPSLN) {\n      x = this.a * dlon;\n      y = -1 * this.ml0;\n    } else {\n      var nl = gN(this.a, this.e, Math.sin(lat)) / Math.tan(lat);\n      x = nl * Math.sin(el);\n      y = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, lat) - this.ml0 + nl * (1 - Math.cos(el));\n    }\n  }\n  p.x = x + this.x0;\n  p.y = y + this.y0;\n  return p;\n}\n\n/* Inverse equations\n  ----------------- */\nexport function inverse(p) {\n  var lon, lat, x, y, i;\n  var al, bl;\n  var phi, dphi;\n  x = p.x - this.x0;\n  y = p.y - this.y0;\n\n  if (this.sphere) {\n    if (Math.abs(y + this.a * this.lat0) <= EPSLN) {\n      lon = adjust_lon(x / this.a + this.long0, this.over);\n      lat = 0;\n    } else {\n      al = this.lat0 + y / this.a;\n      bl = x * x / this.a / this.a + al * al;\n      phi = al;\n      var tanphi;\n      for (i = MAX_ITER; i; --i) {\n        tanphi = Math.tan(phi);\n        dphi = -1 * (al * (phi * tanphi + 1) - phi - 0.5 * (phi * phi + bl) * tanphi) / ((phi - al) / tanphi - 1);\n        phi += dphi;\n        if (Math.abs(dphi) <= EPSLN) {\n          lat = phi;\n          break;\n        }\n      }\n      lon = adjust_lon(this.long0 + (Math.asin(x * Math.tan(phi) / this.a)) / Math.sin(lat), this.over);\n    }\n  } else {\n    if (Math.abs(y + this.ml0) <= EPSLN) {\n      lat = 0;\n      lon = adjust_lon(this.long0 + x / this.a, this.over);\n    } else {\n      al = (this.ml0 + y) / this.a;\n      bl = x * x / this.a / this.a + al * al;\n      phi = al;\n      var cl, mln, mlnp, ma;\n      var con;\n      for (i = MAX_ITER; i; --i) {\n        con = this.e * Math.sin(phi);\n        cl = Math.sqrt(1 - con * con) * Math.tan(phi);\n        mln = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);\n        mlnp = this.e0 - 2 * this.e1 * Math.cos(2 * phi) + 4 * this.e2 * Math.cos(4 * phi) - 6 * this.e3 * Math.cos(6 * phi);\n        ma = mln / this.a;\n        dphi = (al * (cl * ma + 1) - ma - 0.5 * cl * (ma * ma + bl)) / (this.es * Math.sin(2 * phi) * (ma * ma + bl - 2 * al * ma) / (4 * cl) + (al - ma) * (cl * mlnp - 2 / Math.sin(2 * phi)) - mlnp);\n        phi -= dphi;\n        if (Math.abs(dphi) <= EPSLN) {\n          lat = phi;\n          break;\n        }\n      }\n\n      // lat=phi4z(this.e,this.e0,this.e1,this.e2,this.e3,al,bl,0,0);\n      cl = Math.sqrt(1 - this.es * Math.pow(Math.sin(lat), 2)) * Math.tan(lat);\n      lon = adjust_lon(this.long0 + Math.asin(x * cl / this.a) / Math.sin(lat), this.over);\n    }\n  }\n\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = ['Polyconic', 'American_Polyconic', 'poly'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import { SEC_TO_RAD } from '../constants/values';\n\n/*\n  reference\n    Department of Land and Survey Technical Circular 1973/32\n      http://www.linz.govt.nz/docs/miscellaneous/nz-map-definition.pdf\n    OSG Technical Report 4.1\n      http://www.linz.govt.nz/docs/miscellaneous/nzmg.pdf\n  */\n\n/**\n * iterations: Number of iterations to refine inverse transform.\n *     0 -> km accuracy\n *     1 -> m accuracy -- suitable for most mapping applications\n *     2 -> mm accuracy\n */\nexport var iterations = 1;\n\nexport function init() {\n  this.A = [];\n  this.A[1] = 0.6399175073;\n  this.A[2] = -0.1358797613;\n  this.A[3] = 0.063294409;\n  this.A[4] = -0.02526853;\n  this.A[5] = 0.0117879;\n  this.A[6] = -0.0055161;\n  this.A[7] = 0.0026906;\n  this.A[8] = -0.001333;\n  this.A[9] = 0.00067;\n  this.A[10] = -0.00034;\n\n  this.B_re = [];\n  this.B_im = [];\n  this.B_re[1] = 0.7557853228;\n  this.B_im[1] = 0;\n  this.B_re[2] = 0.249204646;\n  this.B_im[2] = 0.003371507;\n  this.B_re[3] = -0.001541739;\n  this.B_im[3] = 0.041058560;\n  this.B_re[4] = -0.10162907;\n  this.B_im[4] = 0.01727609;\n  this.B_re[5] = -0.26623489;\n  this.B_im[5] = -0.36249218;\n  this.B_re[6] = -0.6870983;\n  this.B_im[6] = -1.1651967;\n\n  this.C_re = [];\n  this.C_im = [];\n  this.C_re[1] = 1.3231270439;\n  this.C_im[1] = 0;\n  this.C_re[2] = -0.577245789;\n  this.C_im[2] = -0.007809598;\n  this.C_re[3] = 0.508307513;\n  this.C_im[3] = -0.112208952;\n  this.C_re[4] = -0.15094762;\n  this.C_im[4] = 0.18200602;\n  this.C_re[5] = 1.01418179;\n  this.C_im[5] = 1.64497696;\n  this.C_re[6] = 1.9660549;\n  this.C_im[6] = 2.5127645;\n\n  this.D = [];\n  this.D[1] = 1.5627014243;\n  this.D[2] = 0.5185406398;\n  this.D[3] = -0.03333098;\n  this.D[4] = -0.1052906;\n  this.D[5] = -0.0368594;\n  this.D[6] = 0.007317;\n  this.D[7] = 0.01220;\n  this.D[8] = 0.00394;\n  this.D[9] = -0.0013;\n}\n\n/**\n    New Zealand Map Grid Forward  - long/lat to x/y\n    long/lat in radians\n  */\nexport function forward(p) {\n  var n;\n  var lon = p.x;\n  var lat = p.y;\n\n  var delta_lat = lat - this.lat0;\n  var delta_lon = lon - this.long0;\n\n  // 1. Calculate d_phi and d_psi    ...                          // and d_lambda\n  // For this algorithm, delta_latitude is in seconds of arc x 10-5, so we need to scale to those units. Longitude is radians.\n  var d_phi = delta_lat / SEC_TO_RAD * 1E-5;\n  var d_lambda = delta_lon;\n  var d_phi_n = 1; // d_phi^0\n\n  var d_psi = 0;\n  for (n = 1; n <= 10; n++) {\n    d_phi_n = d_phi_n * d_phi;\n    d_psi = d_psi + this.A[n] * d_phi_n;\n  }\n\n  // 2. Calculate theta\n  var th_re = d_psi;\n  var th_im = d_lambda;\n\n  // 3. Calculate z\n  var th_n_re = 1;\n  var th_n_im = 0; // theta^0\n  var th_n_re1;\n  var th_n_im1;\n\n  var z_re = 0;\n  var z_im = 0;\n  for (n = 1; n <= 6; n++) {\n    th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n    th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n    th_n_re = th_n_re1;\n    th_n_im = th_n_im1;\n    z_re = z_re + this.B_re[n] * th_n_re - this.B_im[n] * th_n_im;\n    z_im = z_im + this.B_im[n] * th_n_re + this.B_re[n] * th_n_im;\n  }\n\n  // 4. Calculate easting and northing\n  p.x = (z_im * this.a) + this.x0;\n  p.y = (z_re * this.a) + this.y0;\n\n  return p;\n}\n\n/**\n    New Zealand Map Grid Inverse  -  x/y to long/lat\n  */\nexport function inverse(p) {\n  var n;\n  var x = p.x;\n  var y = p.y;\n\n  var delta_x = x - this.x0;\n  var delta_y = y - this.y0;\n\n  // 1. Calculate z\n  var z_re = delta_y / this.a;\n  var z_im = delta_x / this.a;\n\n  // 2a. Calculate theta - first approximation gives km accuracy\n  var z_n_re = 1;\n  var z_n_im = 0; // z^0\n  var z_n_re1;\n  var z_n_im1;\n\n  var th_re = 0;\n  var th_im = 0;\n  for (n = 1; n <= 6; n++) {\n    z_n_re1 = z_n_re * z_re - z_n_im * z_im;\n    z_n_im1 = z_n_im * z_re + z_n_re * z_im;\n    z_n_re = z_n_re1;\n    z_n_im = z_n_im1;\n    th_re = th_re + this.C_re[n] * z_n_re - this.C_im[n] * z_n_im;\n    th_im = th_im + this.C_im[n] * z_n_re + this.C_re[n] * z_n_im;\n  }\n\n  // 2b. Iterate to refine the accuracy of the calculation\n  //        0 iterations gives km accuracy\n  //        1 iteration gives m accuracy -- good enough for most mapping applications\n  //        2 iterations bives mm accuracy\n  for (var i = 0; i < this.iterations; i++) {\n    var th_n_re = th_re;\n    var th_n_im = th_im;\n    var th_n_re1;\n    var th_n_im1;\n\n    var num_re = z_re;\n    var num_im = z_im;\n    for (n = 2; n <= 6; n++) {\n      th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n      th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n      th_n_re = th_n_re1;\n      th_n_im = th_n_im1;\n      num_re = num_re + (n - 1) * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);\n      num_im = num_im + (n - 1) * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);\n    }\n\n    th_n_re = 1;\n    th_n_im = 0;\n    var den_re = this.B_re[1];\n    var den_im = this.B_im[1];\n    for (n = 2; n <= 6; n++) {\n      th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n      th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n      th_n_re = th_n_re1;\n      th_n_im = th_n_im1;\n      den_re = den_re + n * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);\n      den_im = den_im + n * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);\n    }\n\n    // Complex division\n    var den2 = den_re * den_re + den_im * den_im;\n    th_re = (num_re * den_re + num_im * den_im) / den2;\n    th_im = (num_im * den_re - num_re * den_im) / den2;\n  }\n\n  // 3. Calculate d_phi              ...                                    // and d_lambda\n  var d_psi = th_re;\n  var d_lambda = th_im;\n  var d_psi_n = 1; // d_psi^0\n\n  var d_phi = 0;\n  for (n = 1; n <= 9; n++) {\n    d_psi_n = d_psi_n * d_psi;\n    d_phi = d_phi + this.D[n] * d_psi_n;\n  }\n\n  // 4. Calculate latitude and longitude\n  // d_phi is calcuated in second of arc * 10^-5, so we need to scale back to radians. d_lambda is in radians.\n  var lat = this.lat0 + (d_phi * SEC_TO_RAD * 1E5);\n  var lon = this.long0 + d_lambda;\n\n  p.x = lon;\n  p.y = lat;\n\n  return p;\n}\n\nexport var names = ['New_Zealand_Map_Grid', 'nzmg'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import adjust_lon from '../common/adjust_lon';\n\n/*\n  reference\n    \"New Equal-Area Map Projections for Noncircular Regions\", John P. Snyder,\n    The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.\n  */\n\n/* Initialize the Miller Cylindrical projection\n  ------------------------------------------- */\nexport function init() {\n  // no-op\n}\n\n/* Miller Cylindrical forward equations--mapping lat,long to x,y\n    ------------------------------------------------------------ */\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n  /* Forward equations\n      ----------------- */\n  var dlon = adjust_lon(lon - this.long0, this.over);\n  var x = this.x0 + this.a * dlon;\n  var y = this.y0 + this.a * Math.log(Math.tan((Math.PI / 4) + (lat / 2.5))) * 1.25;\n\n  p.x = x;\n  p.y = y;\n  return p;\n}\n\n/* Miller Cylindrical inverse equations--mapping x,y to lat/long\n    ------------------------------------------------------------ */\nexport function inverse(p) {\n  p.x -= this.x0;\n  p.y -= this.y0;\n\n  var lon = adjust_lon(this.long0 + p.x / this.a, this.over);\n  var lat = 2.5 * (Math.atan(Math.exp(0.8 * p.y / this.a)) - Math.PI / 4);\n\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = ['Miller_Cylindrical', 'mill'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport pj_enfn from '../common/pj_enfn';\nvar MAX_ITER = 20;\nimport pj_mlfn from '../common/pj_mlfn';\nimport pj_inv_mlfn from '../common/pj_inv_mlfn';\nimport { EPSLN, HALF_PI } from '../constants/values';\n\nimport asinz from '../common/asinz';\n\n/**\n * @typedef {Object} LocalThis\n * @property {Array<number>} en\n * @property {number} n\n * @property {number} m\n * @property {number} C_y\n * @property {number} C_x\n * @property {number} es\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  /* Place parameters in static storage for common use\n    ------------------------------------------------- */\n  this.long0 = this.long0 || 0;\n\n  if (!this.sphere) {\n    this.en = pj_enfn(this.es);\n  } else {\n    this.n = 1;\n    this.m = 0;\n    this.es = 0;\n    this.C_y = Math.sqrt((this.m + 1) / this.n);\n    this.C_x = this.C_y / (this.m + 1);\n  }\n}\n\n/* Sinusoidal forward equations--mapping lat,long to x,y\n  ----------------------------------------------------- */\nexport function forward(p) {\n  var x, y;\n  var lon = p.x;\n  var lat = p.y;\n  /* Forward equations\n    ----------------- */\n  lon = adjust_lon(lon - this.long0, this.over);\n\n  if (this.sphere) {\n    if (!this.m) {\n      lat = this.n !== 1 ? Math.asin(this.n * Math.sin(lat)) : lat;\n    } else {\n      var k = this.n * Math.sin(lat);\n      for (var i = MAX_ITER; i; --i) {\n        var V = (this.m * lat + Math.sin(lat) - k) / (this.m + Math.cos(lat));\n        lat -= V;\n        if (Math.abs(V) < EPSLN) {\n          break;\n        }\n      }\n    }\n    x = this.a * this.C_x * lon * (this.m + Math.cos(lat));\n    y = this.a * this.C_y * lat;\n  } else {\n    var s = Math.sin(lat);\n    var c = Math.cos(lat);\n    y = this.a * pj_mlfn(lat, s, c, this.en);\n    x = this.a * lon * c / Math.sqrt(1 - this.es * s * s);\n  }\n\n  p.x = x;\n  p.y = y;\n  return p;\n}\n\nexport function inverse(p) {\n  var lat, temp, lon, s;\n\n  p.x -= this.x0;\n  lon = p.x / this.a;\n  p.y -= this.y0;\n  lat = p.y / this.a;\n\n  if (this.sphere) {\n    lat /= this.C_y;\n    lon = lon / (this.C_x * (this.m + Math.cos(lat)));\n    if (this.m) {\n      lat = asinz((this.m * lat + Math.sin(lat)) / this.n);\n    } else if (this.n !== 1) {\n      lat = asinz(Math.sin(lat) / this.n);\n    }\n    lon = adjust_lon(lon + this.long0, this.over);\n    lat = adjust_lat(lat);\n  } else {\n    lat = pj_inv_mlfn(p.y / this.a, this.es, this.en);\n    s = Math.abs(lat);\n    if (s < HALF_PI) {\n      s = Math.sin(lat);\n      temp = this.long0 + p.x * Math.sqrt(1 - this.es * s * s) / (this.a * Math.cos(lat));\n      // temp = this.long0 + p.x / (this.a * Math.cos(lat));\n      lon = adjust_lon(temp, this.over);\n    } else if ((s - EPSLN) < HALF_PI) {\n      lon = this.long0;\n    }\n  }\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = ['Sinusoidal', 'sinu'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport { EPSLN } from '../constants/values';\n\n/** @this {import('../defs.js').ProjectionDefinition} */\nexport function init() {\n  this.x0 = this.x0 !== undefined ? this.x0 : 0;\n  this.y0 = this.y0 !== undefined ? this.y0 : 0;\n  this.long0 = this.long0 !== undefined ? this.long0 : 0;\n}\n\n/* Mollweide forward equations--mapping lat,long to x,y\n    ---------------------------------------------------- */\nexport function forward(p) {\n  /* Forward equations\n      ----------------- */\n  var lon = p.x;\n  var lat = p.y;\n\n  var delta_lon = adjust_lon(lon - this.long0, this.over);\n  var theta = lat;\n  var con = Math.PI * Math.sin(lat);\n\n  /* Iterate using the Newton-Raphson method to find theta\n      ----------------------------------------------------- */\n  while (true) {\n    var delta_theta = -(theta + Math.sin(theta) - con) / (1 + Math.cos(theta));\n    theta += delta_theta;\n    if (Math.abs(delta_theta) < EPSLN) {\n      break;\n    }\n  }\n  theta /= 2;\n\n  /* If the latitude is 90 deg, force the x coordinate to be \"0 + false easting\"\n       this is done here because of precision problems with \"cos(theta)\"\n       -------------------------------------------------------------------------- */\n  if (Math.PI / 2 - Math.abs(lat) < EPSLN) {\n    delta_lon = 0;\n  }\n  var x = 0.900316316158 * this.a * delta_lon * Math.cos(theta) + this.x0;\n  var y = 1.4142135623731 * this.a * Math.sin(theta) + this.y0;\n\n  p.x = x;\n  p.y = y;\n  return p;\n}\n\nexport function inverse(p) {\n  var theta;\n  var arg;\n\n  /* Inverse equations\n      ----------------- */\n  p.x -= this.x0;\n  p.y -= this.y0;\n  arg = p.y / (1.4142135623731 * this.a);\n\n  /* Because of division by zero problems, 'arg' can not be 1.  Therefore\n       a number very close to one is used instead.\n       ------------------------------------------------------------------- */\n  if (Math.abs(arg) > 0.999999999999) {\n    arg = 0.999999999999;\n  }\n  theta = Math.asin(arg);\n  var lon = adjust_lon(this.long0 + (p.x / (0.900316316158 * this.a * Math.cos(theta))), this.over);\n  if (lon < (-Math.PI)) {\n    lon = -Math.PI;\n  }\n  if (lon > Math.PI) {\n    lon = Math.PI;\n  }\n  arg = (2 * theta + Math.sin(2 * theta)) / Math.PI;\n  if (Math.abs(arg) > 1) {\n    arg = 1;\n  }\n  var lat = Math.asin(arg);\n\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = ['Mollweide', 'moll'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport msfnz from '../common/msfnz';\nimport mlfn from '../common/mlfn';\nimport adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport imlfn from '../common/imlfn';\nimport { EPSLN } from '../constants/values';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} temp\n * @property {number} es\n * @property {number} e\n * @property {number} e0\n * @property {number} e1\n * @property {number} e2\n * @property {number} e3\n * @property {number} sin_phi\n * @property {number} cos_phi\n * @property {number} ms1\n * @property {number} ml1\n * @property {number} ms2\n * @property {number} ml2\n * @property {number} ns\n * @property {number} g\n * @property {number} ml0\n * @property {number} rh\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  /* Place parameters in static storage for common use\n      ------------------------------------------------- */\n  // Standard Parallels cannot be equal and on opposite sides of the equator\n  if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n    return;\n  }\n  this.lat2 = this.lat2 || this.lat1;\n  this.temp = this.b / this.a;\n  this.es = 1 - Math.pow(this.temp, 2);\n  this.e = Math.sqrt(this.es);\n  this.e0 = e0fn(this.es);\n  this.e1 = e1fn(this.es);\n  this.e2 = e2fn(this.es);\n  this.e3 = e3fn(this.es);\n\n  this.sin_phi = Math.sin(this.lat1);\n  this.cos_phi = Math.cos(this.lat1);\n\n  this.ms1 = msfnz(this.e, this.sin_phi, this.cos_phi);\n  this.ml1 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat1);\n\n  if (Math.abs(this.lat1 - this.lat2) < EPSLN) {\n    this.ns = this.sin_phi;\n  } else {\n    this.sin_phi = Math.sin(this.lat2);\n    this.cos_phi = Math.cos(this.lat2);\n    this.ms2 = msfnz(this.e, this.sin_phi, this.cos_phi);\n    this.ml2 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat2);\n    this.ns = (this.ms1 - this.ms2) / (this.ml2 - this.ml1);\n  }\n  this.g = this.ml1 + this.ms1 / this.ns;\n  this.ml0 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);\n  this.rh = this.a * (this.g - this.ml0);\n}\n\n/* Equidistant Conic forward equations--mapping lat,long to x,y\n  ----------------------------------------------------------- */\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n  var rh1;\n\n  /* Forward equations\n      ----------------- */\n  if (this.sphere) {\n    rh1 = this.a * (this.g - lat);\n  } else {\n    var ml = mlfn(this.e0, this.e1, this.e2, this.e3, lat);\n    rh1 = this.a * (this.g - ml);\n  }\n  var theta = this.ns * adjust_lon(lon - this.long0, this.over);\n  var x = this.x0 + rh1 * Math.sin(theta);\n  var y = this.y0 + this.rh - rh1 * Math.cos(theta);\n  p.x = x;\n  p.y = y;\n  return p;\n}\n\n/* Inverse equations\n  ----------------- */\nexport function inverse(p) {\n  p.x -= this.x0;\n  p.y = this.rh - p.y + this.y0;\n  var con, rh1, lat, lon;\n  if (this.ns >= 0) {\n    rh1 = Math.sqrt(p.x * p.x + p.y * p.y);\n    con = 1;\n  } else {\n    rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);\n    con = -1;\n  }\n  var theta = 0;\n  if (rh1 !== 0) {\n    theta = Math.atan2(con * p.x, con * p.y);\n  }\n\n  if (this.sphere) {\n    lon = adjust_lon(this.long0 + theta / this.ns, this.over);\n    lat = adjust_lat(this.g - rh1 / this.a);\n    p.x = lon;\n    p.y = lat;\n    return p;\n  } else {\n    var ml = this.g - rh1 / this.a;\n    lat = imlfn(ml, this.e0, this.e1, this.e2, this.e3);\n    lon = adjust_lon(this.long0 + theta / this.ns, this.over);\n    p.x = lon;\n    p.y = lat;\n    return p;\n  }\n}\n\nexport var names = ['Equidistant_Conic', 'eqdc'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import adjust_lon from '../common/adjust_lon';\n\nimport { HALF_PI, EPSLN } from '../constants/values';\n\nimport asinz from '../common/asinz';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} R - Radius of the Earth\n */\n\n/**\n * Initialize the Van Der Grinten projection\n * @this {import('../defs.js').ProjectionDefinition & LocalThis}\n */\nexport function init() {\n  // this.R = 6370997; //Radius of earth\n  this.R = this.a;\n}\n\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n\n  /* Forward equations\n    ----------------- */\n  var dlon = adjust_lon(lon - this.long0, this.over);\n  var x, y;\n\n  if (Math.abs(lat) <= EPSLN) {\n    x = this.x0 + this.R * dlon;\n    y = this.y0;\n  }\n  var theta = asinz(2 * Math.abs(lat / Math.PI));\n  if ((Math.abs(dlon) <= EPSLN) || (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN)) {\n    x = this.x0;\n    if (lat >= 0) {\n      y = this.y0 + Math.PI * this.R * Math.tan(0.5 * theta);\n    } else {\n      y = this.y0 + Math.PI * this.R * -Math.tan(0.5 * theta);\n    }\n    //  return(OK);\n  }\n  var al = 0.5 * Math.abs((Math.PI / dlon) - (dlon / Math.PI));\n  var asq = al * al;\n  var sinth = Math.sin(theta);\n  var costh = Math.cos(theta);\n\n  var g = costh / (sinth + costh - 1);\n  var gsq = g * g;\n  var m = g * (2 / sinth - 1);\n  var msq = m * m;\n  var con = Math.PI * this.R * (al * (g - msq) + Math.sqrt(asq * (g - msq) * (g - msq) - (msq + asq) * (gsq - msq))) / (msq + asq);\n  if (dlon < 0) {\n    con = -con;\n  }\n  x = this.x0 + con;\n  // con = Math.abs(con / (Math.PI * this.R));\n  var q = asq + g;\n  con = Math.PI * this.R * (m * q - al * Math.sqrt((msq + asq) * (asq + 1) - q * q)) / (msq + asq);\n  if (lat >= 0) {\n    // y = this.y0 + Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);\n    y = this.y0 + con;\n  } else {\n    // y = this.y0 - Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);\n    y = this.y0 - con;\n  }\n  p.x = x;\n  p.y = y;\n  return p;\n}\n\n/* Van Der Grinten inverse equations--mapping x,y to lat/long\n  --------------------------------------------------------- */\nexport function inverse(p) {\n  var lon, lat;\n  var xx, yy, xys, c1, c2, c3;\n  var a1;\n  var m1;\n  var con;\n  var th1;\n  var d;\n\n  /* inverse equations\n    ----------------- */\n  p.x -= this.x0;\n  p.y -= this.y0;\n  con = Math.PI * this.R;\n  xx = p.x / con;\n  yy = p.y / con;\n  xys = xx * xx + yy * yy;\n  c1 = -Math.abs(yy) * (1 + xys);\n  c2 = c1 - 2 * yy * yy + xx * xx;\n  c3 = -2 * c1 + 1 + 2 * yy * yy + xys * xys;\n  d = yy * yy / c3 + (2 * c2 * c2 * c2 / c3 / c3 / c3 - 9 * c1 * c2 / c3 / c3) / 27;\n  a1 = (c1 - c2 * c2 / 3 / c3) / c3;\n  m1 = 2 * Math.sqrt(-a1 / 3);\n  con = ((3 * d) / a1) / m1;\n  if (Math.abs(con) > 1) {\n    if (con >= 0) {\n      con = 1;\n    } else {\n      con = -1;\n    }\n  }\n  th1 = Math.acos(con) / 3;\n  if (p.y >= 0) {\n    lat = (-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;\n  } else {\n    lat = -(-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;\n  }\n\n  if (Math.abs(xx) < EPSLN) {\n    lon = this.long0;\n  } else {\n    lon = adjust_lon(this.long0 + Math.PI * (xys - 1 + Math.sqrt(1 + 2 * (xx * xx - yy * yy) + xys * xys)) / 2 / xx, this.over);\n  }\n\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = ['Van_der_Grinten_I', 'VanDerGrinten', 'Van_der_Grinten', 'vandg'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","/**\n * Calculates the inverse geodesic problem using Vincenty's formulae.\n * Computes the forward azimuth and ellipsoidal distance between two points\n * specified by latitude and longitude on the surface of an ellipsoid.\n *\n * @param {number} lat1 Latitude of the first point in radians.\n * @param {number} lon1 Longitude of the first point in radians.\n * @param {number} lat2 Latitude of the second point in radians.\n * @param {number} lon2 Longitude of the second point in radians.\n * @param {number} a Semi-major axis of the ellipsoid (meters).\n * @param {number} f Flattening of the ellipsoid.\n * @returns {{ azi1: number, s12: number }} An object containing:\n *   - azi1: Forward azimuth from the first point to the second point (radians).\n *   - s12: Ellipsoidal distance between the two points (meters).\n */\nexport function vincentyInverse(lat1, lon1, lat2, lon2, a, f) {\n  const L = lon2 - lon1;\n  const U1 = Math.atan((1 - f) * Math.tan(lat1));\n  const U2 = Math.atan((1 - f) * Math.tan(lat2));\n  const sinU1 = Math.sin(U1), cosU1 = Math.cos(U1);\n  const sinU2 = Math.sin(U2), cosU2 = Math.cos(U2);\n\n  let lambda = L, lambdaP, iterLimit = 100;\n  let sinLambda, cosLambda, sinSigma, cosSigma, sigma, sinAlpha, cos2Alpha, cos2SigmaM, C;\n  let uSq, A, B, deltaSigma, s;\n\n  do {\n    sinLambda = Math.sin(lambda);\n    cosLambda = Math.cos(lambda);\n    sinSigma = Math.sqrt(\n      (cosU2 * sinLambda) * (cosU2 * sinLambda)\n      + (cosU1 * sinU2 - sinU1 * cosU2 * cosLambda)\n      * (cosU1 * sinU2 - sinU1 * cosU2 * cosLambda)\n    );\n    if (sinSigma === 0) {\n      return { azi1: 0, s12: 0 }; // coincident points\n    }\n    cosSigma = sinU1 * sinU2 + cosU1 * cosU2 * cosLambda;\n    sigma = Math.atan2(sinSigma, cosSigma);\n    sinAlpha = cosU1 * cosU2 * sinLambda / sinSigma;\n    cos2Alpha = 1 - sinAlpha * sinAlpha;\n    cos2SigmaM = (cos2Alpha !== 0) ? (cosSigma - 2 * sinU1 * sinU2 / cos2Alpha) : 0;\n    C = f / 16 * cos2Alpha * (4 + f * (4 - 3 * cos2Alpha));\n    lambdaP = lambda;\n    lambda = L + (1 - C) * f * sinAlpha\n    * (sigma + C * sinSigma * (cos2SigmaM + C * cosSigma * (-1 + 2 * cos2SigmaM * cos2SigmaM)));\n  } while (Math.abs(lambda - lambdaP) > 1e-12 && --iterLimit > 0);\n\n  if (iterLimit === 0) {\n    return { azi1: NaN, s12: NaN }; // formula failed to converge\n  }\n\n  uSq = cos2Alpha * (a * a - (a * (1 - f)) * (a * (1 - f))) / ((a * (1 - f)) * (a * (1 - f)));\n  A = 1 + uSq / 16384 * (4096 + uSq * (-768 + uSq * (320 - 175 * uSq)));\n  B = uSq / 1024 * (256 + uSq * (-128 + uSq * (74 - 47 * uSq)));\n  deltaSigma = B * sinSigma * (cos2SigmaM + B / 4 * (cosSigma * (-1 + 2 * cos2SigmaM * cos2SigmaM)\n    - B / 6 * cos2SigmaM * (-3 + 4 * sinSigma * sinSigma) * (-3 + 4 * cos2SigmaM * cos2SigmaM)));\n\n  s = (a * (1 - f)) * A * (sigma - deltaSigma);\n\n  // Forward azimuth\n  const azi1 = Math.atan2(cosU2 * sinLambda, cosU1 * sinU2 - sinU1 * cosU2 * cosLambda);\n\n  return { azi1, s12: s };\n}\n\n/**\n * Solves the direct geodetic problem using Vincenty's formulae.\n * Given a starting point, initial azimuth, and distance, computes the destination point on the ellipsoid.\n *\n * @param {number} lat1 Latitude of the starting point in radians.\n * @param {number} lon1 Longitude of the starting point in radians.\n * @param {number} azi1 Initial azimuth (forward azimuth) in radians.\n * @param {number} s12 Distance to travel from the starting point in meters.\n * @param {number} a Semi-major axis of the ellipsoid in meters.\n * @param {number} f Flattening of the ellipsoid.\n * @returns {{lat2: number, lon2: number}} The latitude and longitude (in radians) of the destination point.\n */\nexport function vincentyDirect(lat1, lon1, azi1, s12, a, f) {\n  const U1 = Math.atan((1 - f) * Math.tan(lat1));\n  const sinU1 = Math.sin(U1), cosU1 = Math.cos(U1);\n  const sinAlpha1 = Math.sin(azi1), cosAlpha1 = Math.cos(azi1);\n\n  const sigma1 = Math.atan2(sinU1, cosU1 * cosAlpha1);\n  const sinAlpha = cosU1 * sinAlpha1;\n  const cos2Alpha = 1 - sinAlpha * sinAlpha;\n  const uSq = cos2Alpha * (a * a - (a * (1 - f)) * (a * (1 - f))) / ((a * (1 - f)) * (a * (1 - f)));\n  const A = 1 + uSq / 16384 * (4096 + uSq * (-768 + uSq * (320 - 175 * uSq)));\n  const B = uSq / 1024 * (256 + uSq * (-128 + uSq * (74 - 47 * uSq)));\n\n  let sigma = s12 / ((a * (1 - f)) * A), sigmaP, iterLimit = 100;\n  let cos2SigmaM, sinSigma, cosSigma, deltaSigma;\n\n  do {\n    cos2SigmaM = Math.cos(2 * sigma1 + sigma);\n    sinSigma = Math.sin(sigma);\n    cosSigma = Math.cos(sigma);\n    deltaSigma = B * sinSigma * (cos2SigmaM + B / 4 * (cosSigma * (-1 + 2 * cos2SigmaM * cos2SigmaM)\n      - B / 6 * cos2SigmaM * (-3 + 4 * sinSigma * sinSigma) * (-3 + 4 * cos2SigmaM * cos2SigmaM)));\n    sigmaP = sigma;\n    sigma = s12 / ((a * (1 - f)) * A) + deltaSigma;\n  } while (Math.abs(sigma - sigmaP) > 1e-12 && --iterLimit > 0);\n\n  if (iterLimit === 0) {\n    return { lat2: NaN, lon2: NaN };\n  }\n\n  const tmp = sinU1 * sinSigma - cosU1 * cosSigma * cosAlpha1;\n  const lat2 = Math.atan2(\n    sinU1 * cosSigma + cosU1 * sinSigma * cosAlpha1,\n    (1 - f) * Math.sqrt(sinAlpha * sinAlpha + tmp * tmp)\n  );\n  const lambda = Math.atan2(\n    sinSigma * sinAlpha1,\n    cosU1 * cosSigma - sinU1 * sinSigma * cosAlpha1\n  );\n  const C = f / 16 * cos2Alpha * (4 + f * (4 - 3 * cos2Alpha));\n  const L = lambda - (1 - C) * f * sinAlpha\n    * (sigma + C * sinSigma * (cos2SigmaM + C * cosSigma * (-1 + 2 * cos2SigmaM * cos2SigmaM)));\n  const lon2 = lon1 + L;\n\n  return { lat2, lon2 };\n}\n","import adjust_lon from '../common/adjust_lon';\nimport { HALF_PI, EPSLN } from '../constants/values';\nimport mlfn from '../common/mlfn';\nimport e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport asinz from '../common/asinz';\nimport imlfn from '../common/imlfn';\nimport { vincentyDirect, vincentyInverse } from '../common/vincenty';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} es\n * @property {number} sin_p12\n * @property {number} cos_p12\n * @property {number} a\n * @property {number} f\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  this.sin_p12 = Math.sin(this.lat0);\n  this.cos_p12 = Math.cos(this.lat0);\n  // flattening for ellipsoid\n  this.f = this.es / (1 + Math.sqrt(1 - this.es));\n}\n\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n  var sinphi = Math.sin(p.y);\n  var cosphi = Math.cos(p.y);\n  var dlon = adjust_lon(lon - this.long0, this.over);\n  var e0, e1, e2, e3, Mlp, Ml, c, kp, cos_c, vars, azi1;\n  if (this.sphere) {\n    if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n      // North Pole case\n      p.x = this.x0 + this.a * (HALF_PI - lat) * Math.sin(dlon);\n      p.y = this.y0 - this.a * (HALF_PI - lat) * Math.cos(dlon);\n      return p;\n    } else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n      // South Pole case\n      p.x = this.x0 + this.a * (HALF_PI + lat) * Math.sin(dlon);\n      p.y = this.y0 + this.a * (HALF_PI + lat) * Math.cos(dlon);\n      return p;\n    } else {\n      // default case\n      cos_c = this.sin_p12 * sinphi + this.cos_p12 * cosphi * Math.cos(dlon);\n      c = Math.acos(cos_c);\n      kp = c ? c / Math.sin(c) : 1;\n      p.x = this.x0 + this.a * kp * cosphi * Math.sin(dlon);\n      p.y = this.y0 + this.a * kp * (this.cos_p12 * sinphi - this.sin_p12 * cosphi * Math.cos(dlon));\n      return p;\n    }\n  } else {\n    e0 = e0fn(this.es);\n    e1 = e1fn(this.es);\n    e2 = e2fn(this.es);\n    e3 = e3fn(this.es);\n    if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n      // North Pole case\n      Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n      Ml = this.a * mlfn(e0, e1, e2, e3, lat);\n      p.x = this.x0 + (Mlp - Ml) * Math.sin(dlon);\n      p.y = this.y0 - (Mlp - Ml) * Math.cos(dlon);\n      return p;\n    } else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n      // South Pole case\n      Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n      Ml = this.a * mlfn(e0, e1, e2, e3, lat);\n      p.x = this.x0 + (Mlp + Ml) * Math.sin(dlon);\n      p.y = this.y0 + (Mlp + Ml) * Math.cos(dlon);\n      return p;\n    } else {\n      // Default case\n      if (Math.abs(lon) < EPSLN && Math.abs(lat - this.lat0) < EPSLN) {\n        p.x = p.y = 0;\n        return p;\n      }\n      vars = vincentyInverse(this.lat0, this.long0, lat, lon, this.a, this.f);\n      azi1 = vars.azi1;\n      p.x = vars.s12 * Math.sin(azi1);\n      p.y = vars.s12 * Math.cos(azi1);\n      return p;\n    }\n  }\n}\n\nexport function inverse(p) {\n  p.x -= this.x0;\n  p.y -= this.y0;\n  var rh, z, sinz, cosz, lon, lat, con, e0, e1, e2, e3, Mlp, M, azi1, s12, vars;\n  if (this.sphere) {\n    rh = Math.sqrt(p.x * p.x + p.y * p.y);\n    if (rh > (2 * HALF_PI * this.a)) {\n      return;\n    }\n    z = rh / this.a;\n\n    sinz = Math.sin(z);\n    cosz = Math.cos(z);\n\n    lon = this.long0;\n    if (Math.abs(rh) <= EPSLN) {\n      lat = this.lat0;\n    } else {\n      lat = asinz(cosz * this.sin_p12 + (p.y * sinz * this.cos_p12) / rh);\n      con = Math.abs(this.lat0) - HALF_PI;\n      if (Math.abs(con) <= EPSLN) {\n        if (this.lat0 >= 0) {\n          lon = adjust_lon(this.long0 + Math.atan2(p.x, -p.y), this.over);\n        } else {\n          lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y), this.over);\n        }\n      } else {\n        lon = adjust_lon(this.long0 + Math.atan2(p.x * sinz, rh * this.cos_p12 * cosz - p.y * this.sin_p12 * sinz), this.over);\n      }\n    }\n\n    p.x = lon;\n    p.y = lat;\n    return p;\n  } else {\n    e0 = e0fn(this.es);\n    e1 = e1fn(this.es);\n    e2 = e2fn(this.es);\n    e3 = e3fn(this.es);\n    if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n      // North pole case\n      Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n      rh = Math.sqrt(p.x * p.x + p.y * p.y);\n      M = Mlp - rh;\n      lat = imlfn(M / this.a, e0, e1, e2, e3);\n      lon = adjust_lon(this.long0 + Math.atan2(p.x, -1 * p.y), this.over);\n      p.x = lon;\n      p.y = lat;\n      return p;\n    } else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n      // South pole case\n      Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n      rh = Math.sqrt(p.x * p.x + p.y * p.y);\n      M = rh - Mlp;\n\n      lat = imlfn(M / this.a, e0, e1, e2, e3);\n      lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y), this.over);\n      p.x = lon;\n      p.y = lat;\n      return p;\n    } else {\n      // default case\n      azi1 = Math.atan2(p.x, p.y);\n      s12 = Math.sqrt(p.x * p.x + p.y * p.y);\n      vars = vincentyDirect(this.lat0, this.long0, azi1, s12, this.a, this.f);\n\n      p.x = vars.lon2;\n      p.y = vars.lat2;\n      return p;\n    }\n  }\n}\n\nexport var names = ['Azimuthal_Equidistant', 'aeqd'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport asinz from '../common/asinz';\nimport { EPSLN, HALF_PI } from '../constants/values';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} sin_p14\n * @property {number} cos_p14\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  // double temp;      /* temporary variable    */\n\n  /* Place parameters in static storage for common use\n      ------------------------------------------------- */\n  this.sin_p14 = Math.sin(this.lat0 || 0);\n  this.cos_p14 = Math.cos(this.lat0 || 0);\n}\n\n/* Orthographic forward equations--mapping lat,long to x,y\n    --------------------------------------------------- */\nexport function forward(p) {\n  var sinphi, cosphi; /* sin and cos value        */\n  var dlon; /* delta longitude value      */\n  var coslon; /* cos of longitude        */\n  var ksp; /* scale factor          */\n  var g, x, y;\n  var lon = p.x;\n  var lat = p.y;\n  /* Forward equations\n      ----------------- */\n  dlon = adjust_lon(lon - (this.long0 || 0), this.over);\n\n  sinphi = Math.sin(lat);\n  cosphi = Math.cos(lat);\n\n  coslon = Math.cos(dlon);\n  g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;\n  ksp = 1;\n  if ((g > 0) || (Math.abs(g) <= EPSLN)) {\n    x = this.a * ksp * cosphi * Math.sin(dlon);\n    y = (this.y0 || 0) + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);\n  }\n  p.x = x;\n  p.y = y;\n  return p;\n}\n\nexport function inverse(p) {\n  var rh; /* height above ellipsoid      */\n  var z; /* angle          */\n  var sinz, cosz; /* sin of z and cos of z      */\n  var con;\n  var lon, lat;\n  var long0, lat0;\n  /* Inverse equations\n      ----------------- */\n  p.x -= this.x0 || 0;\n  p.y -= this.y0 || 0;\n  rh = Math.sqrt(p.x * p.x + p.y * p.y);\n  z = asinz(rh / this.a);\n\n  sinz = Math.sin(z);\n  cosz = Math.cos(z);\n\n  long0 = this.long0 || 0;\n  lat0 = this.lat0 || 0;\n  lon = long0;\n  if (Math.abs(rh) <= EPSLN) {\n    lat = lat0;\n    p.x = lon;\n    p.y = lat;\n    return p;\n  }\n  lat = asinz(cosz * this.sin_p14 + (p.y * sinz * this.cos_p14) / rh);\n  con = Math.abs(lat0) - HALF_PI;\n  if (Math.abs(con) <= EPSLN) {\n    if (lat0 >= 0) {\n      lon = adjust_lon(long0 + Math.atan2(p.x, -p.y), this.over);\n    } else {\n      lon = adjust_lon(long0 - Math.atan2(-p.x, p.y), this.over);\n    }\n    p.x = lon;\n    p.y = lat;\n    return p;\n  }\n  lon = adjust_lon(long0 + Math.atan2((p.x * sinz), rh * this.cos_p14 * cosz - p.y * this.sin_p14 * sinz), this.over);\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = ['ortho'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","// QSC projection rewritten from the original PROJ4\n// https://github.com/OSGeo/proj.4/blob/master/src/PJ_qsc.c\n\nimport { EPSLN, TWO_PI, SPI, HALF_PI, FORTPI } from '../constants/values';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} face\n * @property {number} x0\n * @property {number} y0\n * @property {number} es\n * @property {number} one_minus_f\n * @property {number} one_minus_f_squared\n */\n\n/* constants */\nvar FACE_ENUM = {\n  FRONT: 1,\n  RIGHT: 2,\n  BACK: 3,\n  LEFT: 4,\n  TOP: 5,\n  BOTTOM: 6\n};\n\nvar AREA_ENUM = {\n  AREA_0: 1,\n  AREA_1: 2,\n  AREA_2: 3,\n  AREA_3: 4\n};\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  this.x0 = this.x0 || 0;\n  this.y0 = this.y0 || 0;\n  this.lat0 = this.lat0 || 0;\n  this.long0 = this.long0 || 0;\n  this.lat_ts = this.lat_ts || 0;\n  this.title = this.title || 'Quadrilateralized Spherical Cube';\n\n  /* Determine the cube face from the center of projection. */\n  if (this.lat0 >= HALF_PI - FORTPI / 2.0) {\n    this.face = FACE_ENUM.TOP;\n  } else if (this.lat0 <= -(HALF_PI - FORTPI / 2.0)) {\n    this.face = FACE_ENUM.BOTTOM;\n  } else if (Math.abs(this.long0) <= FORTPI) {\n    this.face = FACE_ENUM.FRONT;\n  } else if (Math.abs(this.long0) <= HALF_PI + FORTPI) {\n    this.face = this.long0 > 0.0 ? FACE_ENUM.RIGHT : FACE_ENUM.LEFT;\n  } else {\n    this.face = FACE_ENUM.BACK;\n  }\n\n  /* Fill in useful values for the ellipsoid <-> sphere shift\n   * described in [LK12]. */\n  if (this.es !== 0) {\n    this.one_minus_f = 1 - (this.a - this.b) / this.a;\n    this.one_minus_f_squared = this.one_minus_f * this.one_minus_f;\n  }\n}\n\n// QSC forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexport function forward(p) {\n  var xy = { x: 0, y: 0 };\n  var lat, lon;\n  var theta, phi;\n  var t, mu;\n  /* nu; */\n  var area = { value: 0 };\n\n  // move lon according to projection's lon\n  p.x -= this.long0;\n\n  /* Convert the geodetic latitude to a geocentric latitude.\n   * This corresponds to the shift from the ellipsoid to the sphere\n   * described in [LK12]. */\n  if (this.es !== 0) { // if (P->es != 0) {\n    lat = Math.atan(this.one_minus_f_squared * Math.tan(p.y));\n  } else {\n    lat = p.y;\n  }\n\n  /* Convert the input lat, lon into theta, phi as used by QSC.\n   * This depends on the cube face and the area on it.\n   * For the top and bottom face, we can compute theta and phi\n   * directly from phi, lam. For the other faces, we must use\n   * unit sphere cartesian coordinates as an intermediate step. */\n  lon = p.x; // lon = lp.lam;\n  if (this.face === FACE_ENUM.TOP) {\n    phi = HALF_PI - lat;\n    if (lon >= FORTPI && lon <= HALF_PI + FORTPI) {\n      area.value = AREA_ENUM.AREA_0;\n      theta = lon - HALF_PI;\n    } else if (lon > HALF_PI + FORTPI || lon <= -(HALF_PI + FORTPI)) {\n      area.value = AREA_ENUM.AREA_1;\n      theta = (lon > 0.0 ? lon - SPI : lon + SPI);\n    } else if (lon > -(HALF_PI + FORTPI) && lon <= -FORTPI) {\n      area.value = AREA_ENUM.AREA_2;\n      theta = lon + HALF_PI;\n    } else {\n      area.value = AREA_ENUM.AREA_3;\n      theta = lon;\n    }\n  } else if (this.face === FACE_ENUM.BOTTOM) {\n    phi = HALF_PI + lat;\n    if (lon >= FORTPI && lon <= HALF_PI + FORTPI) {\n      area.value = AREA_ENUM.AREA_0;\n      theta = -lon + HALF_PI;\n    } else if (lon < FORTPI && lon >= -FORTPI) {\n      area.value = AREA_ENUM.AREA_1;\n      theta = -lon;\n    } else if (lon < -FORTPI && lon >= -(HALF_PI + FORTPI)) {\n      area.value = AREA_ENUM.AREA_2;\n      theta = -lon - HALF_PI;\n    } else {\n      area.value = AREA_ENUM.AREA_3;\n      theta = (lon > 0.0 ? -lon + SPI : -lon - SPI);\n    }\n  } else {\n    var q, r, s;\n    var sinlat, coslat;\n    var sinlon, coslon;\n\n    if (this.face === FACE_ENUM.RIGHT) {\n      lon = qsc_shift_lon_origin(lon, +HALF_PI);\n    } else if (this.face === FACE_ENUM.BACK) {\n      lon = qsc_shift_lon_origin(lon, +SPI);\n    } else if (this.face === FACE_ENUM.LEFT) {\n      lon = qsc_shift_lon_origin(lon, -HALF_PI);\n    }\n    sinlat = Math.sin(lat);\n    coslat = Math.cos(lat);\n    sinlon = Math.sin(lon);\n    coslon = Math.cos(lon);\n    q = coslat * coslon;\n    r = coslat * sinlon;\n    s = sinlat;\n\n    if (this.face === FACE_ENUM.FRONT) {\n      phi = Math.acos(q);\n      theta = qsc_fwd_equat_face_theta(phi, s, r, area);\n    } else if (this.face === FACE_ENUM.RIGHT) {\n      phi = Math.acos(r);\n      theta = qsc_fwd_equat_face_theta(phi, s, -q, area);\n    } else if (this.face === FACE_ENUM.BACK) {\n      phi = Math.acos(-q);\n      theta = qsc_fwd_equat_face_theta(phi, s, -r, area);\n    } else if (this.face === FACE_ENUM.LEFT) {\n      phi = Math.acos(-r);\n      theta = qsc_fwd_equat_face_theta(phi, s, q, area);\n    } else {\n      /* Impossible */\n      phi = theta = 0;\n      area.value = AREA_ENUM.AREA_0;\n    }\n  }\n\n  /* Compute mu and nu for the area of definition.\n   * For mu, see Eq. (3-21) in [OL76], but note the typos:\n   * compare with Eq. (3-14). For nu, see Eq. (3-38). */\n  mu = Math.atan((12 / SPI) * (theta + Math.acos(Math.sin(theta) * Math.cos(FORTPI)) - HALF_PI));\n  t = Math.sqrt((1 - Math.cos(phi)) / (Math.cos(mu) * Math.cos(mu)) / (1 - Math.cos(Math.atan(1 / Math.cos(theta)))));\n\n  /* Apply the result to the real area. */\n  if (area.value === AREA_ENUM.AREA_1) {\n    mu += HALF_PI;\n  } else if (area.value === AREA_ENUM.AREA_2) {\n    mu += SPI;\n  } else if (area.value === AREA_ENUM.AREA_3) {\n    mu += 1.5 * SPI;\n  }\n\n  /* Now compute x, y from mu and nu */\n  xy.x = t * Math.cos(mu);\n  xy.y = t * Math.sin(mu);\n  xy.x = xy.x * this.a + this.x0;\n  xy.y = xy.y * this.a + this.y0;\n\n  p.x = xy.x;\n  p.y = xy.y;\n  return p;\n}\n\n// QSC inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexport function inverse(p) {\n  var lp = { lam: 0, phi: 0 };\n  var mu, nu, cosmu, tannu;\n  var tantheta, theta, cosphi, phi;\n  var t;\n  var area = { value: 0 };\n\n  /* de-offset */\n  p.x = (p.x - this.x0) / this.a;\n  p.y = (p.y - this.y0) / this.a;\n\n  /* Convert the input x, y to the mu and nu angles as used by QSC.\n   * This depends on the area of the cube face. */\n  nu = Math.atan(Math.sqrt(p.x * p.x + p.y * p.y));\n  mu = Math.atan2(p.y, p.x);\n  if (p.x >= 0.0 && p.x >= Math.abs(p.y)) {\n    area.value = AREA_ENUM.AREA_0;\n  } else if (p.y >= 0.0 && p.y >= Math.abs(p.x)) {\n    area.value = AREA_ENUM.AREA_1;\n    mu -= HALF_PI;\n  } else if (p.x < 0.0 && -p.x >= Math.abs(p.y)) {\n    area.value = AREA_ENUM.AREA_2;\n    mu = (mu < 0.0 ? mu + SPI : mu - SPI);\n  } else {\n    area.value = AREA_ENUM.AREA_3;\n    mu += HALF_PI;\n  }\n\n  /* Compute phi and theta for the area of definition.\n   * The inverse projection is not described in the original paper, but some\n   * good hints can be found here (as of 2011-12-14):\n   * http://fits.gsfc.nasa.gov/fitsbits/saf.93/saf.9302\n   * (search for \"Message-Id: <9302181759.AA25477 at fits.cv.nrao.edu>\") */\n  t = (SPI / 12) * Math.tan(mu);\n  tantheta = Math.sin(t) / (Math.cos(t) - (1 / Math.sqrt(2)));\n  theta = Math.atan(tantheta);\n  cosmu = Math.cos(mu);\n  tannu = Math.tan(nu);\n  cosphi = 1 - cosmu * cosmu * tannu * tannu * (1 - Math.cos(Math.atan(1 / Math.cos(theta))));\n  if (cosphi < -1) {\n    cosphi = -1;\n  } else if (cosphi > +1) {\n    cosphi = +1;\n  }\n\n  /* Apply the result to the real area on the cube face.\n   * For the top and bottom face, we can compute phi and lam directly.\n   * For the other faces, we must use unit sphere cartesian coordinates\n   * as an intermediate step. */\n  if (this.face === FACE_ENUM.TOP) {\n    phi = Math.acos(cosphi);\n    lp.phi = HALF_PI - phi;\n    if (area.value === AREA_ENUM.AREA_0) {\n      lp.lam = theta + HALF_PI;\n    } else if (area.value === AREA_ENUM.AREA_1) {\n      lp.lam = (theta < 0.0 ? theta + SPI : theta - SPI);\n    } else if (area.value === AREA_ENUM.AREA_2) {\n      lp.lam = theta - HALF_PI;\n    } else /* area.value == AREA_ENUM.AREA_3 */ {\n      lp.lam = theta;\n    }\n  } else if (this.face === FACE_ENUM.BOTTOM) {\n    phi = Math.acos(cosphi);\n    lp.phi = phi - HALF_PI;\n    if (area.value === AREA_ENUM.AREA_0) {\n      lp.lam = -theta + HALF_PI;\n    } else if (area.value === AREA_ENUM.AREA_1) {\n      lp.lam = -theta;\n    } else if (area.value === AREA_ENUM.AREA_2) {\n      lp.lam = -theta - HALF_PI;\n    } else /* area.value == AREA_ENUM.AREA_3 */ {\n      lp.lam = (theta < 0.0 ? -theta - SPI : -theta + SPI);\n    }\n  } else {\n    /* Compute phi and lam via cartesian unit sphere coordinates. */\n    var q, r, s;\n    q = cosphi;\n    t = q * q;\n    if (t >= 1) {\n      s = 0;\n    } else {\n      s = Math.sqrt(1 - t) * Math.sin(theta);\n    }\n    t += s * s;\n    if (t >= 1) {\n      r = 0;\n    } else {\n      r = Math.sqrt(1 - t);\n    }\n    /* Rotate q,r,s into the correct area. */\n    if (area.value === AREA_ENUM.AREA_1) {\n      t = r;\n      r = -s;\n      s = t;\n    } else if (area.value === AREA_ENUM.AREA_2) {\n      r = -r;\n      s = -s;\n    } else if (area.value === AREA_ENUM.AREA_3) {\n      t = r;\n      r = s;\n      s = -t;\n    }\n    /* Rotate q,r,s into the correct cube face. */\n    if (this.face === FACE_ENUM.RIGHT) {\n      t = q;\n      q = -r;\n      r = t;\n    } else if (this.face === FACE_ENUM.BACK) {\n      q = -q;\n      r = -r;\n    } else if (this.face === FACE_ENUM.LEFT) {\n      t = q;\n      q = r;\n      r = -t;\n    }\n    /* Now compute phi and lam from the unit sphere coordinates. */\n    lp.phi = Math.acos(-s) - HALF_PI;\n    lp.lam = Math.atan2(r, q);\n    if (this.face === FACE_ENUM.RIGHT) {\n      lp.lam = qsc_shift_lon_origin(lp.lam, -HALF_PI);\n    } else if (this.face === FACE_ENUM.BACK) {\n      lp.lam = qsc_shift_lon_origin(lp.lam, -SPI);\n    } else if (this.face === FACE_ENUM.LEFT) {\n      lp.lam = qsc_shift_lon_origin(lp.lam, +HALF_PI);\n    }\n  }\n\n  /* Apply the shift from the sphere to the ellipsoid as described\n   * in [LK12]. */\n  if (this.es !== 0) {\n    var invert_sign;\n    var tanphi, xa;\n    invert_sign = (lp.phi < 0 ? 1 : 0);\n    tanphi = Math.tan(lp.phi);\n    xa = this.b / Math.sqrt(tanphi * tanphi + this.one_minus_f_squared);\n    lp.phi = Math.atan(Math.sqrt(this.a * this.a - xa * xa) / (this.one_minus_f * xa));\n    if (invert_sign) {\n      lp.phi = -lp.phi;\n    }\n  }\n\n  lp.lam += this.long0;\n  p.x = lp.lam;\n  p.y = lp.phi;\n  return p;\n}\n\n/* Helper function for forward projection: compute the theta angle\n * and determine the area number. */\nfunction qsc_fwd_equat_face_theta(phi, y, x, area) {\n  var theta;\n  if (phi < EPSLN) {\n    area.value = AREA_ENUM.AREA_0;\n    theta = 0.0;\n  } else {\n    theta = Math.atan2(y, x);\n    if (Math.abs(theta) <= FORTPI) {\n      area.value = AREA_ENUM.AREA_0;\n    } else if (theta > FORTPI && theta <= HALF_PI + FORTPI) {\n      area.value = AREA_ENUM.AREA_1;\n      theta -= HALF_PI;\n    } else if (theta > HALF_PI + FORTPI || theta <= -(HALF_PI + FORTPI)) {\n      area.value = AREA_ENUM.AREA_2;\n      theta = (theta >= 0.0 ? theta - SPI : theta + SPI);\n    } else {\n      area.value = AREA_ENUM.AREA_3;\n      theta += HALF_PI;\n    }\n  }\n  return theta;\n}\n\n/* Helper function: shift the longitude. */\nfunction qsc_shift_lon_origin(lon, offset) {\n  var slon = lon + offset;\n  if (slon < -SPI) {\n    slon += TWO_PI;\n  } else if (slon > +SPI) {\n    slon -= TWO_PI;\n  }\n  return slon;\n}\n\nexport var names = ['Quadrilateralized Spherical Cube', 'Quadrilateralized_Spherical_Cube', 'qsc'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","// Robinson projection\n// Based on https://github.com/OSGeo/proj.4/blob/master/src/PJ_robin.c\n// Polynomial coeficients from http://article.gmane.org/gmane.comp.gis.proj-4.devel/6039\n\nimport { HALF_PI, D2R, R2D, EPSLN } from '../constants/values';\nimport adjust_lon from '../common/adjust_lon';\n\nvar COEFS_X = [\n  [1.0000, 2.2199e-17, -7.15515e-05, 3.1103e-06],\n  [0.9986, -0.000482243, -2.4897e-05, -1.3309e-06],\n  [0.9954, -0.00083103, -4.48605e-05, -9.86701e-07],\n  [0.9900, -0.00135364, -5.9661e-05, 3.6777e-06],\n  [0.9822, -0.00167442, -4.49547e-06, -5.72411e-06],\n  [0.9730, -0.00214868, -9.03571e-05, 1.8736e-08],\n  [0.9600, -0.00305085, -9.00761e-05, 1.64917e-06],\n  [0.9427, -0.00382792, -6.53386e-05, -2.6154e-06],\n  [0.9216, -0.00467746, -0.00010457, 4.81243e-06],\n  [0.8962, -0.00536223, -3.23831e-05, -5.43432e-06],\n  [0.8679, -0.00609363, -0.000113898, 3.32484e-06],\n  [0.8350, -0.00698325, -6.40253e-05, 9.34959e-07],\n  [0.7986, -0.00755338, -5.00009e-05, 9.35324e-07],\n  [0.7597, -0.00798324, -3.5971e-05, -2.27626e-06],\n  [0.7186, -0.00851367, -7.01149e-05, -8.6303e-06],\n  [0.6732, -0.00986209, -0.000199569, 1.91974e-05],\n  [0.6213, -0.010418, 8.83923e-05, 6.24051e-06],\n  [0.5722, -0.00906601, 0.000182, 6.24051e-06],\n  [0.5322, -0.00677797, 0.000275608, 6.24051e-06]\n];\n\nvar COEFS_Y = [\n  [-5.20417e-18, 0.0124, 1.21431e-18, -8.45284e-11],\n  [0.0620, 0.0124, -1.26793e-09, 4.22642e-10],\n  [0.1240, 0.0124, 5.07171e-09, -1.60604e-09],\n  [0.1860, 0.0123999, -1.90189e-08, 6.00152e-09],\n  [0.2480, 0.0124002, 7.10039e-08, -2.24e-08],\n  [0.3100, 0.0123992, -2.64997e-07, 8.35986e-08],\n  [0.3720, 0.0124029, 9.88983e-07, -3.11994e-07],\n  [0.4340, 0.0123893, -3.69093e-06, -4.35621e-07],\n  [0.4958, 0.0123198, -1.02252e-05, -3.45523e-07],\n  [0.5571, 0.0121916, -1.54081e-05, -5.82288e-07],\n  [0.6176, 0.0119938, -2.41424e-05, -5.25327e-07],\n  [0.6769, 0.011713, -3.20223e-05, -5.16405e-07],\n  [0.7346, 0.0113541, -3.97684e-05, -6.09052e-07],\n  [0.7903, 0.0109107, -4.89042e-05, -1.04739e-06],\n  [0.8435, 0.0103431, -6.4615e-05, -1.40374e-09],\n  [0.8936, 0.00969686, -6.4636e-05, -8.547e-06],\n  [0.9394, 0.00840947, -0.000192841, -4.2106e-06],\n  [0.9761, 0.00616527, -0.000256, -4.2106e-06],\n  [1.0000, 0.00328947, -0.000319159, -4.2106e-06]\n];\n\nvar FXC = 0.8487;\nvar FYC = 1.3523;\nvar C1 = R2D / 5; // rad to 5-degree interval\nvar RC1 = 1 / C1;\nvar NODES = 18;\n\nvar poly3_val = function (coefs, x) {\n  return coefs[0] + x * (coefs[1] + x * (coefs[2] + x * coefs[3]));\n};\n\nvar poly3_der = function (coefs, x) {\n  return coefs[1] + x * (2 * coefs[2] + x * 3 * coefs[3]);\n};\n\nfunction newton_rapshon(f_df, start, max_err, iters) {\n  var x = start;\n  for (; iters; --iters) {\n    var upd = f_df(x);\n    x -= upd;\n    if (Math.abs(upd) < max_err) {\n      break;\n    }\n  }\n  return x;\n}\n\nexport function init() {\n  this.x0 = this.x0 || 0;\n  this.y0 = this.y0 || 0;\n  this.long0 = this.long0 || 0;\n  this.es = 0;\n  this.title = this.title || 'Robinson';\n}\n\nexport function forward(ll) {\n  var lon = adjust_lon(ll.x - this.long0, this.over);\n\n  var dphi = Math.abs(ll.y);\n  var i = Math.floor(dphi * C1);\n  if (i < 0) {\n    i = 0;\n  } else if (i >= NODES) {\n    i = NODES - 1;\n  }\n  dphi = R2D * (dphi - RC1 * i);\n  var xy = {\n    x: poly3_val(COEFS_X[i], dphi) * lon,\n    y: poly3_val(COEFS_Y[i], dphi)\n  };\n  if (ll.y < 0) {\n    xy.y = -xy.y;\n  }\n\n  xy.x = xy.x * this.a * FXC + this.x0;\n  xy.y = xy.y * this.a * FYC + this.y0;\n  return xy;\n}\n\nexport function inverse(xy) {\n  var ll = {\n    x: (xy.x - this.x0) / (this.a * FXC),\n    y: Math.abs(xy.y - this.y0) / (this.a * FYC)\n  };\n\n  if (ll.y >= 1) { // pathologic case\n    ll.x /= COEFS_X[NODES][0];\n    ll.y = xy.y < 0 ? -HALF_PI : HALF_PI;\n  } else {\n    // find table interval\n    var i = Math.floor(ll.y * NODES);\n    if (i < 0) {\n      i = 0;\n    } else if (i >= NODES) {\n      i = NODES - 1;\n    }\n    for (;;) {\n      if (COEFS_Y[i][0] > ll.y) {\n        --i;\n      } else if (COEFS_Y[i + 1][0] <= ll.y) {\n        ++i;\n      } else {\n        break;\n      }\n    }\n    // linear interpolation in 5 degree interval\n    var coefs = COEFS_Y[i];\n    var t = 5 * (ll.y - coefs[0]) / (COEFS_Y[i + 1][0] - coefs[0]);\n    // find t so that poly3_val(coefs, t) = ll.y\n    t = newton_rapshon(function (x) {\n      return (poly3_val(coefs, x) - ll.y) / poly3_der(coefs, x);\n    }, t, EPSLN, 100);\n\n    ll.x /= poly3_val(COEFS_X[i], t);\n    ll.y = (5 * i + t) * D2R;\n    if (xy.y < 0) {\n      ll.y = -ll.y;\n    }\n  }\n\n  ll.x = adjust_lon(ll.x + this.long0, this.over);\n  return ll;\n}\n\nexport var names = ['Robinson', 'robin'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import {\n  geodeticToGeocentric,\n  geocentricToGeodetic\n} from '../datumUtils';\n\nexport function init() {\n  this.name = 'geocent';\n}\n\nexport function forward(p) {\n  var point = geodeticToGeocentric(p, this.es, this.a);\n  return point;\n}\n\nexport function inverse(p) {\n  var point = geocentricToGeodetic(p, this.es, this.a, this.b);\n  return point;\n}\n\nexport var names = ['Geocentric', 'geocentric', 'geocent', 'Geocent'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import { D2R, HALF_PI, EPSLN } from '../constants/values';\nimport hypot from '../common/hypot';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} mode\n * @property {number} sinph0\n * @property {number} cosph0\n * @property {number} pn1\n * @property {number} h\n * @property {number} rp\n * @property {number} p\n * @property {number} h1\n * @property {number} pfact\n * @property {number} es\n * @property {number} tilt\n * @property {number} azi\n * @property {number} cg\n * @property {number} sg\n * @property {number} cw\n * @property {number} sw\n */\n\nvar mode = {\n  N_POLE: 0,\n  S_POLE: 1,\n  EQUIT: 2,\n  OBLIQ: 3\n};\n\nvar params = {\n  h: { def: 100000, num: true }, // default is Karman line, no default in PROJ.7\n  azi: { def: 0, num: true, degrees: true }, // default is North\n  tilt: { def: 0, num: true, degrees: true }, // default is Nadir\n  long0: { def: 0, num: true }, // default is Greenwich, conversion to rad is automatic\n  lat0: { def: 0, num: true } // default is Equator, conversion to rad is automatic\n};\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  Object.keys(params).forEach(function (p) {\n    if (typeof this[p] === 'undefined') {\n      this[p] = params[p].def;\n    } else if (params[p].num && isNaN(this[p])) {\n      throw new Error('Invalid parameter value, must be numeric ' + p + ' = ' + this[p]);\n    } else if (params[p].num) {\n      this[p] = parseFloat(this[p]);\n    }\n    if (params[p].degrees) {\n      this[p] = this[p] * D2R;\n    }\n  }.bind(this));\n\n  if (Math.abs((Math.abs(this.lat0) - HALF_PI)) < EPSLN) {\n    this.mode = this.lat0 < 0 ? mode.S_POLE : mode.N_POLE;\n  } else if (Math.abs(this.lat0) < EPSLN) {\n    this.mode = mode.EQUIT;\n  } else {\n    this.mode = mode.OBLIQ;\n    this.sinph0 = Math.sin(this.lat0);\n    this.cosph0 = Math.cos(this.lat0);\n  }\n\n  this.pn1 = this.h / this.a; // Normalize relative to the Earth's radius\n\n  if (this.pn1 <= 0 || this.pn1 > 1e10) {\n    throw new Error('Invalid height');\n  }\n\n  this.p = 1 + this.pn1;\n  this.rp = 1 / this.p;\n  this.h1 = 1 / this.pn1;\n  this.pfact = (this.p + 1) * this.h1;\n  this.es = 0;\n\n  var omega = this.tilt;\n  var gamma = this.azi;\n  this.cg = Math.cos(gamma);\n  this.sg = Math.sin(gamma);\n  this.cw = Math.cos(omega);\n  this.sw = Math.sin(omega);\n}\n\nexport function forward(p) {\n  p.x -= this.long0;\n  var sinphi = Math.sin(p.y);\n  var cosphi = Math.cos(p.y);\n  var coslam = Math.cos(p.x);\n  var x, y;\n  switch (this.mode) {\n    case mode.OBLIQ:\n      y = this.sinph0 * sinphi + this.cosph0 * cosphi * coslam;\n      break;\n    case mode.EQUIT:\n      y = cosphi * coslam;\n      break;\n    case mode.S_POLE:\n      y = -sinphi;\n      break;\n    case mode.N_POLE:\n      y = sinphi;\n      break;\n  }\n  y = this.pn1 / (this.p - y);\n  x = y * cosphi * Math.sin(p.x);\n\n  switch (this.mode) {\n    case mode.OBLIQ:\n      y *= this.cosph0 * sinphi - this.sinph0 * cosphi * coslam;\n      break;\n    case mode.EQUIT:\n      y *= sinphi;\n      break;\n    case mode.N_POLE:\n      y *= -(cosphi * coslam);\n      break;\n    case mode.S_POLE:\n      y *= cosphi * coslam;\n      break;\n  }\n\n  // Tilt\n  var yt, ba;\n  yt = y * this.cg + x * this.sg;\n  ba = 1 / (yt * this.sw * this.h1 + this.cw);\n  x = (x * this.cg - y * this.sg) * this.cw * ba;\n  y = yt * ba;\n\n  p.x = x * this.a;\n  p.y = y * this.a;\n  return p;\n}\n\nexport function inverse(p) {\n  p.x /= this.a;\n  p.y /= this.a;\n  var r = { x: p.x, y: p.y };\n\n  // Un-Tilt\n  var bm, bq, yt;\n  yt = 1 / (this.pn1 - p.y * this.sw);\n  bm = this.pn1 * p.x * yt;\n  bq = this.pn1 * p.y * this.cw * yt;\n  p.x = bm * this.cg + bq * this.sg;\n  p.y = bq * this.cg - bm * this.sg;\n\n  var rh = hypot(p.x, p.y);\n  if (Math.abs(rh) < EPSLN) {\n    r.x = 0;\n    r.y = p.y;\n  } else {\n    var cosz, sinz;\n    sinz = 1 - rh * rh * this.pfact;\n    sinz = (this.p - Math.sqrt(sinz)) / (this.pn1 / rh + rh / this.pn1);\n    cosz = Math.sqrt(1 - sinz * sinz);\n    switch (this.mode) {\n      case mode.OBLIQ:\n        r.y = Math.asin(cosz * this.sinph0 + p.y * sinz * this.cosph0 / rh);\n        p.y = (cosz - this.sinph0 * Math.sin(r.y)) * rh;\n        p.x *= sinz * this.cosph0;\n        break;\n      case mode.EQUIT:\n        r.y = Math.asin(p.y * sinz / rh);\n        p.y = cosz * rh;\n        p.x *= sinz;\n        break;\n      case mode.N_POLE:\n        r.y = Math.asin(cosz);\n        p.y = -p.y;\n        break;\n      case mode.S_POLE:\n        r.y = -Math.asin(cosz);\n        break;\n    }\n    r.x = Math.atan2(p.x, p.y);\n  }\n\n  p.x = r.x + this.long0;\n  p.y = r.y;\n  return p;\n}\n\nexport var names = ['Tilted_Perspective', 'tpers'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import hypot from '../common/hypot';\n\n/**\n * @typedef {Object} LocalThis\n * @property {1 | 0} flip_axis\n * @property {number} h\n * @property {number} radius_g_1\n * @property {number} radius_g\n * @property {number} radius_p\n * @property {number} radius_p2\n * @property {number} radius_p_inv2\n * @property {'ellipse'|'sphere'} shape\n * @property {number} C\n * @property {string} sweep\n * @property {number} es\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  this.flip_axis = (this.sweep === 'x' ? 1 : 0);\n  this.h = Number(this.h);\n  this.radius_g_1 = this.h / this.a;\n\n  if (this.radius_g_1 <= 0 || this.radius_g_1 > 1e10) {\n    throw new Error();\n  }\n\n  this.radius_g = 1.0 + this.radius_g_1;\n  this.C = this.radius_g * this.radius_g - 1.0;\n\n  if (this.es !== 0.0) {\n    var one_es = 1.0 - this.es;\n    var rone_es = 1 / one_es;\n\n    this.radius_p = Math.sqrt(one_es);\n    this.radius_p2 = one_es;\n    this.radius_p_inv2 = rone_es;\n\n    this.shape = 'ellipse'; // Use as a condition in the forward and inverse functions.\n  } else {\n    this.radius_p = 1.0;\n    this.radius_p2 = 1.0;\n    this.radius_p_inv2 = 1.0;\n\n    this.shape = 'sphere'; // Use as a condition in the forward and inverse functions.\n  }\n\n  if (!this.title) {\n    this.title = 'Geostationary Satellite View';\n  }\n}\n\nfunction forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n  var tmp, v_x, v_y, v_z;\n  lon = lon - this.long0;\n\n  if (this.shape === 'ellipse') {\n    lat = Math.atan(this.radius_p2 * Math.tan(lat));\n    var r = this.radius_p / hypot(this.radius_p * Math.cos(lat), Math.sin(lat));\n\n    v_x = r * Math.cos(lon) * Math.cos(lat);\n    v_y = r * Math.sin(lon) * Math.cos(lat);\n    v_z = r * Math.sin(lat);\n\n    if (((this.radius_g - v_x) * v_x - v_y * v_y - v_z * v_z * this.radius_p_inv2) < 0.0) {\n      p.x = Number.NaN;\n      p.y = Number.NaN;\n      return p;\n    }\n\n    tmp = this.radius_g - v_x;\n    if (this.flip_axis) {\n      p.x = this.radius_g_1 * Math.atan(v_y / hypot(v_z, tmp));\n      p.y = this.radius_g_1 * Math.atan(v_z / tmp);\n    } else {\n      p.x = this.radius_g_1 * Math.atan(v_y / tmp);\n      p.y = this.radius_g_1 * Math.atan(v_z / hypot(v_y, tmp));\n    }\n  } else if (this.shape === 'sphere') {\n    tmp = Math.cos(lat);\n    v_x = Math.cos(lon) * tmp;\n    v_y = Math.sin(lon) * tmp;\n    v_z = Math.sin(lat);\n    tmp = this.radius_g - v_x;\n\n    if (this.flip_axis) {\n      p.x = this.radius_g_1 * Math.atan(v_y / hypot(v_z, tmp));\n      p.y = this.radius_g_1 * Math.atan(v_z / tmp);\n    } else {\n      p.x = this.radius_g_1 * Math.atan(v_y / tmp);\n      p.y = this.radius_g_1 * Math.atan(v_z / hypot(v_y, tmp));\n    }\n  }\n  p.x = p.x * this.a;\n  p.y = p.y * this.a;\n  return p;\n}\n\nfunction inverse(p) {\n  var v_x = -1.0;\n  var v_y = 0.0;\n  var v_z = 0.0;\n  var a, b, det, k;\n\n  p.x = p.x / this.a;\n  p.y = p.y / this.a;\n\n  if (this.shape === 'ellipse') {\n    if (this.flip_axis) {\n      v_z = Math.tan(p.y / this.radius_g_1);\n      v_y = Math.tan(p.x / this.radius_g_1) * hypot(1.0, v_z);\n    } else {\n      v_y = Math.tan(p.x / this.radius_g_1);\n      v_z = Math.tan(p.y / this.radius_g_1) * hypot(1.0, v_y);\n    }\n\n    var v_zp = v_z / this.radius_p;\n    a = v_y * v_y + v_zp * v_zp + v_x * v_x;\n    b = 2 * this.radius_g * v_x;\n    det = (b * b) - 4 * a * this.C;\n\n    if (det < 0.0) {\n      p.x = Number.NaN;\n      p.y = Number.NaN;\n      return p;\n    }\n\n    k = (-b - Math.sqrt(det)) / (2.0 * a);\n    v_x = this.radius_g + k * v_x;\n    v_y *= k;\n    v_z *= k;\n\n    p.x = Math.atan2(v_y, v_x);\n    p.y = Math.atan(v_z * Math.cos(p.x) / v_x);\n    p.y = Math.atan(this.radius_p_inv2 * Math.tan(p.y));\n  } else if (this.shape === 'sphere') {\n    if (this.flip_axis) {\n      v_z = Math.tan(p.y / this.radius_g_1);\n      v_y = Math.tan(p.x / this.radius_g_1) * Math.sqrt(1.0 + v_z * v_z);\n    } else {\n      v_y = Math.tan(p.x / this.radius_g_1);\n      v_z = Math.tan(p.y / this.radius_g_1) * Math.sqrt(1.0 + v_y * v_y);\n    }\n\n    a = v_y * v_y + v_z * v_z + v_x * v_x;\n    b = 2 * this.radius_g * v_x;\n    det = (b * b) - 4 * a * this.C;\n    if (det < 0.0) {\n      p.x = Number.NaN;\n      p.y = Number.NaN;\n      return p;\n    }\n\n    k = (-b - Math.sqrt(det)) / (2.0 * a);\n    v_x = this.radius_g + k * v_x;\n    v_y *= k;\n    v_z *= k;\n\n    p.x = Math.atan2(v_y, v_x);\n    p.y = Math.atan(v_z * Math.cos(p.x) / v_x);\n  }\n  p.x = p.x + this.long0;\n  return p;\n}\n\nexport var names = ['Geostationary Satellite View', 'Geostationary_Satellite', 'geos'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","/**\n * Copyright 2018 Bernie Jenny, Monash University, Melbourne, Australia.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * Equal Earth is a projection inspired by the Robinson projection, but unlike\n * the Robinson projection retains the relative size of areas. The projection\n * was designed in 2018 by Bojan Savric, Tom Patterson and Bernhard Jenny.\n *\n * Publication:\n * Bojan Savric, Tom Patterson & Bernhard Jenny (2018). The Equal Earth map\n * projection, International Journal of Geographical Information Science,\n * DOI: 10.1080/13658816.2018.1504949\n *\n * Code released August 2018\n * Ported to JavaScript and adapted for mapshaper-proj by Matthew Bloch August 2018\n * Modified for proj4js by Andreas Hocevar by Andreas Hocevar March 2024\n */\n\nimport adjust_lon from '../common/adjust_lon';\n\nvar A1 = 1.340264,\n  A2 = -0.081106,\n  A3 = 0.000893,\n  A4 = 0.003796,\n  M = Math.sqrt(3) / 2.0;\n\nexport function init() {\n  this.es = 0;\n  this.long0 = this.long0 !== undefined ? this.long0 : 0;\n  this.x0 = this.x0 !== undefined ? this.x0 : 0;\n  this.y0 = this.y0 !== undefined ? this.y0 : 0;\n}\n\nexport function forward(p) {\n  var lam = adjust_lon(p.x - this.long0, this.over);\n  var phi = p.y;\n  var paramLat = Math.asin(M * Math.sin(phi)),\n    paramLatSq = paramLat * paramLat,\n    paramLatPow6 = paramLatSq * paramLatSq * paramLatSq;\n  p.x = lam * Math.cos(paramLat)\n    / (M * (A1 + 3 * A2 * paramLatSq + paramLatPow6 * (7 * A3 + 9 * A4 * paramLatSq)));\n  p.y = paramLat * (A1 + A2 * paramLatSq + paramLatPow6 * (A3 + A4 * paramLatSq));\n\n  p.x = this.a * p.x + this.x0;\n  p.y = this.a * p.y + this.y0;\n  return p;\n}\n\nexport function inverse(p) {\n  p.x = (p.x - this.x0) / this.a;\n  p.y = (p.y - this.y0) / this.a;\n\n  var EPS = 1e-9,\n    NITER = 12,\n    paramLat = p.y,\n    paramLatSq, paramLatPow6, fy, fpy, dlat, i;\n\n  for (i = 0; i < NITER; ++i) {\n    paramLatSq = paramLat * paramLat;\n    paramLatPow6 = paramLatSq * paramLatSq * paramLatSq;\n    fy = paramLat * (A1 + A2 * paramLatSq + paramLatPow6 * (A3 + A4 * paramLatSq)) - p.y;\n    fpy = A1 + 3 * A2 * paramLatSq + paramLatPow6 * (7 * A3 + 9 * A4 * paramLatSq);\n    paramLat -= dlat = fy / fpy;\n    if (Math.abs(dlat) < EPS) {\n      break;\n    }\n  }\n  paramLatSq = paramLat * paramLat;\n  paramLatPow6 = paramLatSq * paramLatSq * paramLatSq;\n  p.x = M * p.x * (A1 + 3 * A2 * paramLatSq + paramLatPow6 * (7 * A3 + 9 * A4 * paramLatSq))\n    / Math.cos(paramLat);\n  p.y = Math.asin(Math.sin(paramLat) / M);\n\n  p.x = adjust_lon(p.x + this.long0, this.over);\n  return p;\n}\n\nexport var names = ['eqearth', 'Equal Earth', 'Equal_Earth'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import adjust_lat from '../common/adjust_lat';\nimport adjust_lon from '../common/adjust_lon';\nimport hypot from '../common/hypot';\nimport pj_enfn from '../common/pj_enfn';\nimport pj_inv_mlfn from '../common/pj_inv_mlfn';\nimport pj_mlfn from '../common/pj_mlfn';\nimport { HALF_PI } from '../constants/values';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} phi1\n * @property {number} cphi1\n * @property {number} es\n * @property {Array<number>} en\n * @property {number} m1\n * @property {number} am1\n */\n\nvar EPS10 = 1e-10;\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  var c;\n\n  this.phi1 = this.lat1;\n  if (Math.abs(this.phi1) < EPS10) {\n    throw new Error();\n  }\n  if (this.es) {\n    this.en = pj_enfn(this.es);\n    this.m1 = pj_mlfn(this.phi1, this.am1 = Math.sin(this.phi1),\n      c = Math.cos(this.phi1), this.en);\n    this.am1 = c / (Math.sqrt(1 - this.es * this.am1 * this.am1) * this.am1);\n    this.inverse = e_inv;\n    this.forward = e_fwd;\n  } else {\n    if (Math.abs(this.phi1) + EPS10 >= HALF_PI) {\n      this.cphi1 = 0;\n    } else {\n      this.cphi1 = 1 / Math.tan(this.phi1);\n    }\n    this.inverse = s_inv;\n    this.forward = s_fwd;\n  }\n}\n\nfunction e_fwd(p) {\n  var lam = adjust_lon(p.x - (this.long0 || 0), this.over);\n  var phi = p.y;\n  var rh, E, c;\n  rh = this.am1 + this.m1 - pj_mlfn(phi, E = Math.sin(phi), c = Math.cos(phi), this.en);\n  E = c * lam / (rh * Math.sqrt(1 - this.es * E * E));\n  p.x = rh * Math.sin(E);\n  p.y = this.am1 - rh * Math.cos(E);\n\n  p.x = this.a * p.x + (this.x0 || 0);\n  p.y = this.a * p.y + (this.y0 || 0);\n  return p;\n}\n\nfunction e_inv(p) {\n  p.x = (p.x - (this.x0 || 0)) / this.a;\n  p.y = (p.y - (this.y0 || 0)) / this.a;\n\n  var s, rh, lam, phi;\n  rh = hypot(p.x, p.y = this.am1 - p.y);\n  phi = pj_inv_mlfn(this.am1 + this.m1 - rh, this.es, this.en);\n  if ((s = Math.abs(phi)) < HALF_PI) {\n    s = Math.sin(phi);\n    lam = rh * Math.atan2(p.x, p.y) * Math.sqrt(1 - this.es * s * s) / Math.cos(phi);\n  } else if (Math.abs(s - HALF_PI) <= EPS10) {\n    lam = 0;\n  } else {\n    throw new Error();\n  }\n  p.x = adjust_lon(lam + (this.long0 || 0), this.over);\n  p.y = adjust_lat(phi);\n  return p;\n}\n\nfunction s_fwd(p) {\n  var lam = adjust_lon(p.x - (this.long0 || 0), this.over);\n  var phi = p.y;\n  var E, rh;\n  rh = this.cphi1 + this.phi1 - phi;\n  if (Math.abs(rh) > EPS10) {\n    p.x = rh * Math.sin(E = lam * Math.cos(phi) / rh);\n    p.y = this.cphi1 - rh * Math.cos(E);\n  } else {\n    p.x = p.y = 0;\n  }\n\n  p.x = this.a * p.x + (this.x0 || 0);\n  p.y = this.a * p.y + (this.y0 || 0);\n  return p;\n}\n\nfunction s_inv(p) {\n  p.x = (p.x - (this.x0 || 0)) / this.a;\n  p.y = (p.y - (this.y0 || 0)) / this.a;\n\n  var lam, phi;\n  var rh = hypot(p.x, p.y = this.cphi1 - p.y);\n  phi = this.cphi1 + this.phi1 - rh;\n  if (Math.abs(phi) > HALF_PI) {\n    throw new Error();\n  }\n  if (Math.abs(Math.abs(phi) - HALF_PI) <= EPS10) {\n    lam = 0;\n  } else {\n    lam = rh * Math.atan2(p.x, p.y) / Math.cos(phi);\n  }\n  p.x = adjust_lon(lam + (this.long0 || 0), this.over);\n  p.y = adjust_lat(phi);\n  return p;\n}\n\nexport var names = ['bonne', 'Bonne (Werner lat_1=90)'];\nexport default {\n  init: init,\n  names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport { D2R, R2D, HALF_PI, EPSLN } from '../constants/values';\nimport Proj from '../Proj';\nimport { names as longLatNames } from './longlat';\n\n/**\n    Original projection implementation:\n        https://github.com/OSGeo/PROJ/blob/46c47e9adf6376ae06afabe5d24a0016a05ced82/src/projections/ob_tran.cpp\n\n    Documentation:\n        https://proj.org/operations/projections/ob_tran.html\n\n    References/Formulas:\n        https://pubs.usgs.gov/pp/1395/report.pdf\n\n    Examples:\n        +proj=ob_tran +o_proj=moll +o_lat_p=45 +o_lon_p=-90\n        +proj=ob_tran +o_proj=moll +o_lat_p=45 +o_lon_p=-90 +lon_0=60\n        +proj=ob_tran +o_proj=moll +o_lat_p=45 +o_lon_p=-90 +lon_0=-90\n*/\n\nconst projectionType = {\n  OBLIQUE: {\n    forward: forwardOblique,\n    inverse: inverseOblique\n  },\n  TRANSVERSE: {\n    forward: forwardTransverse,\n    inverse: inverseTransverse\n  }\n};\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} lamp\n * @property {number} cphip\n * @property {number} sphip\n * @property {Object} projectionType\n * @property {string | undefined} o_proj\n * @property {string | undefined} o_lon_p\n * @property {string | undefined} o_lat_p\n * @property {string | undefined} o_alpha\n * @property {string | undefined} o_lon_c\n * @property {string | undefined} o_lat_c\n * @property {string | undefined} o_lon_1\n * @property {string | undefined} o_lat_1\n * @property {string | undefined} o_lon_2\n * @property {string | undefined} o_lat_2\n * @property {number | undefined} oLongP\n * @property {number | undefined} oLatP\n * @property {number | undefined} oAlpha\n * @property {number | undefined} oLongC\n * @property {number | undefined} oLatC\n * @property {number | undefined} oLong1\n * @property {number | undefined} oLat1\n * @property {number | undefined} oLong2\n * @property {number | undefined} oLat2\n * @property {boolean} isIdentity\n * @property {import('..').Converter} obliqueProjection\n *\n */\n\n/**\n *    Parameters can be from the following sets:\n *       New pole --> o_lat_p, o_lon_p\n *       Rotate about point --> o_alpha, o_lon_c, o_lat_c\n *       New equator points --> lon_1, lat_1, lon_2, lat_2\n *\n *    Per the original source code, the parameter sets are\n *    checked in the order of the object below.\n */\nconst paramSets = {\n  ROTATE: {\n    o_alpha: 'oAlpha',\n    o_lon_c: 'oLongC',\n    o_lat_c: 'oLatC'\n  },\n  NEW_POLE: {\n    o_lat_p: 'oLatP',\n    o_lon_p: 'oLongP'\n  },\n  NEW_EQUATOR: {\n    o_lon_1: 'oLong1',\n    o_lat_1: 'oLat1',\n    o_lon_2: 'oLong2',\n    o_lat_2: 'oLat2'\n  }\n};\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  this.x0 = this.x0 || 0;\n  this.y0 = this.y0 || 0;\n  this.long0 = this.long0 || 0;\n  this.title = this.title || 'General Oblique Transformation';\n  this.isIdentity = longLatNames.includes(this.o_proj);\n\n  /** Verify required parameters exist */\n  if (!this.o_proj) {\n    throw new Error('Missing parameter: o_proj');\n  }\n\n  if (this.o_proj === `ob_tran`) {\n    throw new Error('Invalid value for o_proj: ' + this.o_proj);\n  }\n\n  const newProjStr = this.projStr.replace('+proj=ob_tran', '').replace('+o_proj=', '+proj=').trim();\n\n  /** @type {import('../defs.js').ProjectionDefinition} */\n  const oProj = Proj(newProjStr);\n  if (!oProj) {\n    throw new Error('Invalid parameter: o_proj. Unknown projection ' + this.o_proj);\n  }\n  oProj.long0 = 0; // we handle long0 before/after forward/inverse\n  this.obliqueProjection = oProj;\n\n  let matchedSet;\n  const paramSetsKeys = Object.keys(paramSets);\n\n  /**\n   * parse strings, convert to radians, throw on NaN\n   * @param {string} name\n   * @returns {number | undefined}\n   */\n  const parseParam = (name) => {\n    if (typeof this[name] === `undefined`) {\n      return undefined;\n    }\n    const val = parseFloat(this[name]) * D2R;\n    if (isNaN(val)) {\n      throw new Error('Invalid value for ' + name + ': ' + this[name]);\n    }\n    return val;\n  };\n\n  for (let i = 0; i < paramSetsKeys.length; i++) {\n    const setKey = paramSetsKeys[i];\n    const set = paramSets[setKey];\n    const params = Object.entries(set);\n    const setHasParams = params.some(\n      ([p]) => typeof this[p] !== 'undefined'\n    );\n    if (!setHasParams) {\n      continue;\n    }\n    matchedSet = set;\n    for (let ii = 0; ii < params.length; ii++) {\n      const [inputParam, param] = params[ii];\n      const val = parseParam(inputParam);\n      if (typeof val === 'undefined') {\n        throw new Error('Missing parameter: ' + inputParam + '.');\n      }\n      this[param] = val;\n    }\n    break;\n  }\n\n  if (!matchedSet) {\n    throw new Error('No valid parameters provided for ob_tran projection.');\n  }\n\n  const { lamp, phip } = createRotation(this, matchedSet);\n  this.lamp = lamp;\n\n  if (Math.abs(phip) > EPSLN) {\n    this.cphip = Math.cos(phip);\n    this.sphip = Math.sin(phip);\n    this.projectionType = projectionType.OBLIQUE;\n  } else {\n    this.projectionType = projectionType.TRANSVERSE;\n  }\n}\n\n// ob_tran forward equations--mapping (lat,long) to (x,y)\n// transverse (90 degrees from normal orientation) - forwardTransverse\n// or oblique (arbitrary angle) used based on parameters - forwardOblique\n// -----------------------------------------------------------------\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function forward(p) {\n  return this.projectionType.forward(this, p);\n}\n\n// inverse equations--mapping (x,y) to (lat,long)\n// transverse: inverseTransverse\n// oblique: inverseOblique\n// -----------------------------------------------------------------\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function inverse(p) {\n  return this.projectionType.inverse(this, p);\n}\n\n/**\n * @param {import('../defs.js').ProjectionDefinition & LocalThis} params - Initialized projection definition\n * @param {Object} how - Transformation method\n * @returns {{phip: number, lamp: number}}\n */\nfunction createRotation(params, how) {\n  let phip, lamp;\n  if (how === paramSets.ROTATE) {\n    let lamc = params.oLongC;\n    let phic = params.oLatC;\n    let alpha = params.oAlpha;\n    if (Math.abs(Math.abs(phic) - HALF_PI) <= EPSLN) {\n      throw new Error('Invalid value for o_lat_c: ' + params.o_lat_c + ' should be < 90°');\n    }\n    lamp = lamc + Math.atan2(-1 * Math.cos(alpha), -1 * Math.sin(alpha) * Math.sin(phic));\n    phip = Math.asin(Math.cos(phic) * Math.sin(alpha));\n  } else if (how === paramSets.NEW_POLE) {\n    lamp = params.oLongP;\n    phip = params.oLatP;\n  } else {\n    let lam1 = params.oLong1;\n    let phi1 = params.oLat1;\n    let lam2 = params.oLong2;\n    let phi2 = params.oLat2;\n    let con = Math.abs(phi1);\n\n    if (Math.abs(phi1) > HALF_PI - EPSLN) {\n      throw new Error('Invalid value for o_lat_1: ' + params.o_lat_1 + ' should be < 90°');\n    }\n\n    if (Math.abs(phi2) > HALF_PI - EPSLN) {\n      throw new Error('Invalid value for o_lat_2: ' + params.o_lat_2 + ' should be < 90°');\n    }\n\n    if (Math.abs(phi1 - phi2) < EPSLN) {\n      throw new Error('Invalid value for o_lat_1 and o_lat_2: o_lat_1 should be different from o_lat_2');\n    }\n    if (con < EPSLN) {\n      throw new Error('Invalid value for o_lat_1: o_lat_1 should be different from zero');\n    }\n\n    lamp = Math.atan2(\n      (Math.cos(phi1) * Math.sin(phi2) * Math.cos(lam1))\n      - (Math.sin(phi1) * Math.cos(phi2) * Math.cos(lam2)),\n      (Math.sin(phi1) * Math.cos(phi2) * Math.sin(lam2))\n      - (Math.cos(phi1) * Math.sin(phi2) * Math.sin(lam1))\n    );\n\n    phip = Math.atan(-1 * Math.cos(lamp - lam1) / Math.tan(phi1));\n  }\n\n  return { lamp, phip };\n}\n\n/**\n * Forward (lng, lat) to (x, y) for oblique case\n * @param {import('../defs.js').ProjectionDefinition & LocalThis} self\n * @param {{x: number, y: number}} lp - lambda, phi\n */\nfunction forwardOblique(self, lp) {\n  let { x: lam, y: phi } = lp;\n  lam += self.long0;\n  const coslam = Math.cos(lam);\n  const sinphi = Math.sin(phi);\n  const cosphi = Math.cos(phi);\n\n  lp.x = adjust_lon(\n    Math.atan2(\n      cosphi * Math.sin(lam),\n      (self.sphip * cosphi * coslam) + (self.cphip * sinphi)\n    ) + self.lamp\n  );\n  lp.y = Math.asin(\n    (self.sphip * sinphi) - (self.cphip * cosphi * coslam)\n  );\n\n  const result = self.obliqueProjection.forward(lp);\n  if (self.isIdentity) {\n    result.x *= R2D;\n    result.y *= R2D;\n  }\n  return result;\n}\n\n/**\n * Forward (lng, lat) to (x, y) for transverse case\n * @param {import('../defs.js').ProjectionDefinition & LocalThis} self\n * @param {{x: number, y: number}} lp - lambda, phi\n */\nfunction forwardTransverse(self, lp) {\n  let { x: lam, y: phi } = lp;\n  lam += self.long0;\n  const cosphi = Math.cos(phi);\n  const coslam = Math.cos(lam);\n  lp.x = adjust_lon(\n    Math.atan2(\n      cosphi * Math.sin(lam),\n      Math.sin(phi)\n    ) + self.lamp\n  );\n  lp.y = Math.asin(-1 * cosphi * coslam);\n\n  const result = self.obliqueProjection.forward(lp);\n\n  if (self.isIdentity) {\n    result.x *= R2D;\n    result.y *= R2D;\n  }\n  return result;\n}\n\n/**\n * Inverse (x, y) to (lng, lat) for oblique case\n * @param {import('../defs.js').ProjectionDefinition & LocalThis} self\n * @param {{x: number, y: number}} lp - lambda, phi\n */\nfunction inverseOblique(self, lp) {\n  if (self.isIdentity) {\n    lp.x *= D2R;\n    lp.y *= D2R;\n  }\n\n  const innerLp = self.obliqueProjection.inverse(lp);\n  let { x: lam, y: phi } = innerLp;\n\n  if (lam < Number.MAX_VALUE) {\n    lam -= self.lamp;\n    const coslam = Math.cos(lam);\n    const sinphi = Math.sin(phi);\n    const cosphi = Math.cos(phi);\n    lp.x = Math.atan2(\n      cosphi * Math.sin(lam),\n      (self.sphip * cosphi * coslam) - (self.cphip * sinphi)\n    );\n    lp.y = Math.asin(\n      (self.sphip * sinphi) + (self.cphip * cosphi * coslam)\n    );\n  }\n\n  lp.x = adjust_lon(lp.x + self.long0);\n  return lp;\n}\n\n/**\n * Inverse (x, y) to (lng, lat) for transverse case\n * @param {import('../defs.js').ProjectionDefinition & LocalThis} self\n * @param {{x: number, y: number}} lp - lambda, phi\n */\nfunction inverseTransverse(self, lp) {\n  if (self.isIdentity) {\n    lp.x *= D2R;\n    lp.y *= D2R;\n  }\n\n  const innerLp = self.obliqueProjection.inverse(lp);\n  let { x: lam, y: phi } = innerLp;\n\n  if (lam < Number.MAX_VALUE) {\n    const cosphi = Math.cos(phi);\n    lam -= self.lamp;\n    lp.x = Math.atan2(\n      cosphi * Math.sin(lam),\n      -1 * Math.sin(phi)\n    );\n    lp.y = Math.asin(\n      cosphi * Math.cos(lam)\n    );\n  }\n\n  lp.x = adjust_lon(lp.x + self.long0);\n  return lp;\n}\n\nexport var names = ['General Oblique Transformation', 'General_Oblique_Transformation', 'ob_tran'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import tmerc from './lib/projections/tmerc';\nimport etmerc from './lib/projections/etmerc';\nimport utm from './lib/projections/utm';\nimport sterea from './lib/projections/sterea';\nimport stere from './lib/projections/stere';\nimport somerc from './lib/projections/somerc';\nimport omerc from './lib/projections/omerc';\nimport lcc from './lib/projections/lcc';\nimport krovak from './lib/projections/krovak';\nimport cass from './lib/projections/cass';\nimport laea from './lib/projections/laea';\nimport aea from './lib/projections/aea';\nimport gnom from './lib/projections/gnom';\nimport cea from './lib/projections/cea';\nimport eqc from './lib/projections/eqc';\nimport poly from './lib/projections/poly';\nimport nzmg from './lib/projections/nzmg';\nimport mill from './lib/projections/mill';\nimport sinu from './lib/projections/sinu';\nimport moll from './lib/projections/moll';\nimport eqdc from './lib/projections/eqdc';\nimport vandg from './lib/projections/vandg';\nimport aeqd from './lib/projections/aeqd';\nimport ortho from './lib/projections/ortho';\nimport qsc from './lib/projections/qsc';\nimport robin from './lib/projections/robin';\nimport geocent from './lib/projections/geocent';\nimport tpers from './lib/projections/tpers';\nimport geos from './lib/projections/geos';\nimport eqearth from './lib/projections/eqearth';\nimport bonne from './lib/projections/bonne';\nimport ob_tran from './lib/projections/ob_tran';\nexport default function (proj4) {\n  proj4.Proj.projections.add(tmerc);\n  proj4.Proj.projections.add(etmerc);\n  proj4.Proj.projections.add(utm);\n  proj4.Proj.projections.add(sterea);\n  proj4.Proj.projections.add(stere);\n  proj4.Proj.projections.add(somerc);\n  proj4.Proj.projections.add(omerc);\n  proj4.Proj.projections.add(lcc);\n  proj4.Proj.projections.add(krovak);\n  proj4.Proj.projections.add(cass);\n  proj4.Proj.projections.add(laea);\n  proj4.Proj.projections.add(aea);\n  proj4.Proj.projections.add(gnom);\n  proj4.Proj.projections.add(cea);\n  proj4.Proj.projections.add(eqc);\n  proj4.Proj.projections.add(poly);\n  proj4.Proj.projections.add(nzmg);\n  proj4.Proj.projections.add(mill);\n  proj4.Proj.projections.add(sinu);\n  proj4.Proj.projections.add(moll);\n  proj4.Proj.projections.add(eqdc);\n  proj4.Proj.projections.add(vandg);\n  proj4.Proj.projections.add(aeqd);\n  proj4.Proj.projections.add(ortho);\n  proj4.Proj.projections.add(qsc);\n  proj4.Proj.projections.add(robin);\n  proj4.Proj.projections.add(geocent);\n  proj4.Proj.projections.add(tpers);\n  proj4.Proj.projections.add(geos);\n  proj4.Proj.projections.add(eqearth);\n  proj4.Proj.projections.add(bonne);\n  proj4.Proj.projections.add(ob_tran);\n}\n","import core from './core';\nimport Proj from './Proj';\nimport Point from './Point';\nimport common from './common/toPoint';\nimport defs from './defs';\nimport nadgrid from './nadgrid';\nimport transform from './transform';\nimport mgrs from 'mgrs';\nimport includedProjections from '../projs';\n\n/**\n * @typedef {Object} Mgrs\n * @property {(lonlat: [number, number]) => string} forward\n * @property {(mgrsString: string) => [number, number, number, number]} inverse\n * @property {(mgrsString: string) => [number, number]} toPoint\n */\n\n/**\n * @typedef {import('./defs').ProjectionDefinition} ProjectionDefinition\n * @typedef {import('./core').TemplateCoordinates} TemplateCoordinates\n * @typedef {import('./core').InterfaceCoordinates} InterfaceCoordinates\n * @typedef {import('./core').Converter} Converter\n * @typedef {import('./Proj').DatumDefinition} DatumDefinition\n */\n\n/**\n * @template {import('./core').TemplateCoordinates} T\n * @type {core<T> & {defaultDatum: string, Proj: typeof Proj, WGS84: Proj, Point: typeof Point, toPoint: typeof common, defs: typeof defs, nadgrid: typeof nadgrid, transform: typeof transform, mgrs: Mgrs, version: string}}\n */\nconst proj4 = Object.assign(core, {\n  defaultDatum: 'WGS84',\n  Proj,\n  WGS84: new Proj('WGS84'),\n  Point,\n  toPoint: common,\n  defs,\n  nadgrid,\n  transform,\n  mgrs,\n  version: '__VERSION__'\n});\nincludedProjections(proj4);\nexport default proj4;\n","import { Copc, Hierarchy, Getter, Las } from 'copc';\nimport type { Copc as CopcType } from 'copc';\nimport { createLazPerf, type LazPerf } from 'laz-perf';\nimport { load } from '@loaders.gl/core';\nimport { LASLoader } from '@loaders.gl/las';\nimport proj4 from 'proj4';\nimport type { PointCloudData, ExtraPointAttributes, AttributeArray } from './types';\nimport type { PointCloudBounds } from '../core/types';\n\n/**\n * Configuration for attribute storage types\n */\ninterface AttributeConfig {\n  arrayType: 'float64' | 'float32' | 'uint32' | 'uint16' | 'uint8' | 'int32' | 'int16' | 'int8';\n  scale?: number; // Optional scale factor to apply when reading\n}\n\n/**\n * Known LAS dimension configurations\n * Maps dimension names to their optimal storage types\n */\nconst DIMENSION_CONFIGS: Record<string, AttributeConfig> = {\n  // Standard LAS dimensions\n  'GpsTime': { arrayType: 'float64' },\n  'ReturnNumber': { arrayType: 'uint8' },\n  'NumberOfReturns': { arrayType: 'uint8' },\n  'ScanDirectionFlag': { arrayType: 'uint8' },\n  'EdgeOfFlightLine': { arrayType: 'uint8' },\n  'ScanAngleRank': { arrayType: 'int8' },\n  'ScanAngle': { arrayType: 'float32' },\n  'UserData': { arrayType: 'uint8' },\n  'PointSourceId': { arrayType: 'uint16' },\n  // LAS 1.4 dimensions\n  'ScannerChannel': { arrayType: 'uint8' },\n  'Synthetic': { arrayType: 'uint8' },\n  'KeyPoint': { arrayType: 'uint8' },\n  'Withheld': { arrayType: 'uint8' },\n  'Overlap': { arrayType: 'uint8' },\n  'ClassFlags': { arrayType: 'uint8' },\n  // NIR if available\n  'Nir': { arrayType: 'uint16' },\n  'NearInfrared': { arrayType: 'uint16' },\n};\n\n/**\n * Core dimensions that are handled separately (not as extra attributes)\n */\nconst CORE_DIMENSIONS = new Set([\n  'X', 'Y', 'Z',\n  'Intensity',\n  'Classification',\n  'Red', 'Green', 'Blue',\n]);\n\n/**\n * Creates a typed array of the appropriate type for an attribute\n */\nfunction createAttributeArray(type: AttributeConfig['arrayType'], length: number): AttributeArray {\n  switch (type) {\n    case 'float64': return new Float64Array(length);\n    case 'float32': return new Float32Array(length);\n    case 'uint32': return new Uint32Array(length);\n    case 'uint16': return new Uint16Array(length);\n    case 'uint8': return new Uint8Array(length);\n    case 'int32': return new Int32Array(length);\n    case 'int16': return new Int16Array(length);\n    case 'int8': return new Int8Array(length);\n    default: return new Float32Array(length);\n  }\n}\n\n// LazPerf instance for COPC decompression\nlet lazPerfInstance: LazPerf | null = null;\n\nasync function getLazPerf(): Promise<LazPerf> {\n  if (!lazPerfInstance) {\n    lazPerfInstance = await createLazPerf({\n      locateFile: (path: string) => {\n        // Load WASM from CDN for reliable loading in all environments\n        if (path.endsWith('.wasm')) {\n          return 'https://unpkg.com/laz-perf@0.0.7/lib/web/laz-perf.wasm';\n        }\n        return path;\n      },\n    });\n  }\n  return lazPerfInstance;\n}\n\n/**\n * Creates a getter function from an ArrayBuffer for copc.js\n */\nfunction createBufferGetter(buffer: ArrayBuffer): Getter {\n  const uint8 = new Uint8Array(buffer);\n  return async (begin: number, end: number): Promise<Uint8Array> => {\n    return uint8.slice(begin, end);\n  };\n}\n\n/**\n * Extracts the PROJCS section from a WKT string (handles COMPD_CS)\n */\nfunction extractProjcsFromWkt(wkt: string): string {\n  // If it's a compound CS, extract the PROJCS part\n  if (wkt.startsWith('COMPD_CS[')) {\n    const projcsStart = wkt.indexOf('PROJCS[');\n    if (projcsStart === -1) return wkt;\n\n    // Find matching bracket for PROJCS\n    let depth = 0;\n    let projcsEnd = projcsStart;\n    for (let i = projcsStart; i < wkt.length; i++) {\n      if (wkt[i] === '[') depth++;\n      if (wkt[i] === ']') {\n        depth--;\n        if (depth === 0) {\n          projcsEnd = i + 1;\n          break;\n        }\n      }\n    }\n    return wkt.substring(projcsStart, projcsEnd);\n  }\n  return wkt;\n}\n\n/**\n * Detects if the WKT uses feet as the linear unit\n * Returns the conversion factor to meters (1.0 if already in meters)\n */\nfunction getVerticalUnitConversionFactor(wkt: string): number {\n  // Conversion factor: 1 foot = 0.3048 meters\n  const FEET_TO_METERS = 0.3048;\n  const US_SURVEY_FEET_TO_METERS = 0.3048006096012192;\n\n  const wktLower = wkt.toLowerCase();\n\n  // Check for US Survey Foot first (more specific)\n  if (wktLower.includes('us survey foot') ||\n      wktLower.includes('us_survey_foot') ||\n      wktLower.includes('foot_us')) {\n    return US_SURVEY_FEET_TO_METERS;\n  }\n\n  // Check for various foot unit indicators in WKT\n  // Look for UNIT[\"foot\" or UNIT[\"Foot\" patterns\n  const footPatterns = [\n    /unit\\s*\\[\\s*\"foot/i,\n    /unit\\s*\\[\\s*\"international foot/i,\n    /,\\s*foot\\s*\\]/i,\n    /\"ft\"/i,\n  ];\n\n  for (const pattern of footPatterns) {\n    if (pattern.test(wkt)) {\n      return FEET_TO_METERS;\n    }\n  }\n\n  // No feet detected, assume meters\n  return 1.0;\n}\n\n/**\n * Loads and parses LiDAR point cloud files (LAS, LAZ, COPC).\n * Uses copc.js for COPC/LAZ files with LAS 1.4 support.\n */\nexport class PointCloudLoader {\n  /**\n   * Creates a new PointCloudLoader instance.\n   */\n  constructor() {\n    // Reserved for future options\n  }\n\n  private _onProgress?: (progress: number, message: string) => void;\n\n  /**\n   * Loads a point cloud from a URL, File, or ArrayBuffer.\n   *\n   * @param source - URL string, File object, or ArrayBuffer\n   * @param onProgress - Optional progress callback (progress: 0-100, message: string)\n   * @returns Normalized point cloud data\n   */\n  async load(\n    source: string | File | ArrayBuffer,\n    onProgress?: (progress: number, message: string) => void\n  ): Promise<PointCloudData> {\n    this._onProgress = onProgress;\n\n    if (typeof source === 'string') {\n      // URL - check if it's HTTP(S) for remote loading\n      if (source.startsWith('http://') || source.startsWith('https://')) {\n        return await this._loadCopcFromUrl(source);\n      } else {\n        // Local file path or data URL - fetch and load as buffer\n        this._reportProgress(5, 'Fetching file...');\n        const response = await fetch(source);\n        const buffer = await response.arrayBuffer();\n        return await this._loadCopcFromBuffer(buffer);\n      }\n    } else if (source instanceof File) {\n      // File object - read as ArrayBuffer\n      this._reportProgress(5, 'Reading file...');\n      const buffer = await source.arrayBuffer();\n      return await this._loadCopcFromBuffer(buffer);\n    } else {\n      // ArrayBuffer directly\n      return await this._loadCopcFromBuffer(source);\n    }\n  }\n\n  /**\n   * Reports progress to the callback if set.\n   */\n  private _reportProgress(progress: number, message: string): void {\n    if (this._onProgress) {\n      this._onProgress(progress, message);\n    }\n  }\n\n  /**\n   * Yields to the event loop to allow UI updates.\n   */\n  private async _yieldToUI(): Promise<void> {\n    return new Promise((resolve) => setTimeout(resolve, 0));\n  }\n\n  /**\n   * Loads a COPC file from a URL using the copc.js library.\n   * Falls back to loaders.gl for unsupported LAS versions (e.g., 1.3).\n   */\n  private async _loadCopcFromUrl(url: string): Promise<PointCloudData> {\n    this._reportProgress(5, 'Initializing decoder...');\n    await this._yieldToUI();\n\n    // Initialize LazPerf for decompression\n    const lazPerf = await getLazPerf();\n\n    this._reportProgress(10, 'Reading file header...');\n    await this._yieldToUI();\n\n    // Parse COPC header and metadata\n    let copc;\n    try {\n      copc = await Copc.create(url);\n    } catch (error) {\n      // Check if this is likely a CORS error\n      if (error instanceof TypeError && error.message === 'Failed to fetch') {\n        throw new Error(\n          `Failed to fetch from URL. This is likely a CORS (Cross-Origin Resource Sharing) error. ` +\n          `The server at \"${new URL(url).hostname}\" doesn't allow requests from this origin. ` +\n          `Solutions: (1) Download the file locally and load it as a file, ` +\n          `(2) Use a CORS proxy, or (3) Host the file on a CORS-enabled server.`\n        );\n      }\n      // Check if this is an error that requires fallback to loaders.gl:\n      // - \"Invalid version\" - LAS version not supported by copc.js (only 1.2 and 1.4)\n      // - \"COPC info VLR is required\" - Regular LAS file, not COPC format\n      if (error instanceof Error && (\n        error.message.includes('Invalid version') ||\n        error.message.includes('COPC info VLR is required')\n      )) {\n        console.warn('copc.js cannot load this file, falling back to loaders.gl:', error.message);\n        this._reportProgress(10, 'Using alternative decoder...');\n        return await this._loadUrlWithLoadersGL(url);\n      }\n      throw error;\n    }\n\n    this._reportProgress(15, 'Loading hierarchy...');\n    await this._yieldToUI();\n\n    // Load the full hierarchy using URL as source\n    const hierarchy = await this._loadFullHierarchy(url, copc.info);\n\n    return await this._processCopcData(url, copc, hierarchy, lazPerf);\n  }\n\n  /**\n   * Loads a COPC file from an ArrayBuffer using the copc.js library.\n   * Falls back to loaders.gl for unsupported LAS versions (e.g., 1.3).\n   */\n  private async _loadCopcFromBuffer(buffer: ArrayBuffer): Promise<PointCloudData> {\n    this._reportProgress(10, 'Initializing decoder...');\n    await this._yieldToUI();\n\n    // Initialize LazPerf for decompression\n    const lazPerf = await getLazPerf();\n\n    // Create a getter function from the buffer\n    const getter = createBufferGetter(buffer);\n\n    this._reportProgress(15, 'Reading file header...');\n    await this._yieldToUI();\n\n    // Parse COPC header and metadata\n    try {\n      const copc = await Copc.create(getter);\n\n      this._reportProgress(20, 'Loading hierarchy...');\n      await this._yieldToUI();\n\n      // Load the full hierarchy (all pages recursively)\n      const hierarchy = await this._loadFullHierarchy(getter, copc.info);\n\n      return await this._processCopcData(getter, copc, hierarchy, lazPerf);\n    } catch (error) {\n      // Check if this is an error that requires fallback:\n      // - \"Invalid version\" - LAS version not supported by copc.js (only 1.2 and 1.4)\n      // - \"COPC info VLR is required\" - Regular LAS file, not COPC format\n      if (error instanceof Error) {\n        if (error.message.includes('COPC info VLR is required')) {\n          // Regular LAS 1.2/1.4 file - try loading with Las module from copc.js\n          console.warn('Not a COPC file, trying to load as regular LAS:', error.message);\n          this._reportProgress(15, 'Loading as regular LAS file...');\n          try {\n            return await this._loadRegularLasFromBuffer(buffer, lazPerf);\n          } catch (lasError) {\n            // If Las module also fails, try loaders.gl\n            console.warn('Las module failed, falling back to loaders.gl:', lasError);\n            return await this._loadWithLoadersGL(buffer);\n          }\n        }\n        if (error.message.includes('Invalid version')) {\n          // LAS 1.0/1.1/1.3 - use loaders.gl\n          console.warn('copc.js does not support this LAS version, falling back to loaders.gl:', error.message);\n          this._reportProgress(15, 'Using alternative decoder...');\n          return await this._loadWithLoadersGL(buffer);\n        }\n      }\n      throw error;\n    }\n  }\n\n  /**\n   * Loads a regular LAS 1.2/1.4 file using copc.js Las module.\n   */\n  private async _loadRegularLasFromBuffer(buffer: ArrayBuffer, lazPerf: LazPerf): Promise<PointCloudData> {\n    this._reportProgress(20, 'Parsing LAS header...');\n    await this._yieldToUI();\n\n    const uint8 = new Uint8Array(buffer);\n\n    // Parse header\n    const header = Las.Header.parse(uint8);\n\n    // Check if file is compressed (LAZ)\n    const isCompressed = (header.pointDataRecordFormat & 0x80) !== 0 ||\n      header.generatingSoftware.toLowerCase().includes('laszip');\n\n    let pointData: Uint8Array;\n\n    if (isCompressed) {\n      this._reportProgress(30, 'Decompressing LAZ data...');\n      await this._yieldToUI();\n      pointData = await Las.PointData.decompressFile(uint8, lazPerf);\n    } else {\n      // For uncompressed LAS, extract point data directly\n      pointData = uint8.slice(header.pointDataOffset);\n    }\n\n    this._reportProgress(50, 'Processing points...');\n    await this._yieldToUI();\n\n    // Setup coordinate transformation\n    let transformer: ((coord: [number, number]) => [number, number]) | null = null;\n    let needsTransform = false;\n    let verticalUnitFactor = 1.0;\n    let wkt: string | undefined;\n\n    // Try to get WKT from VLRs\n    const getter = createBufferGetter(buffer);\n    try {\n      const vlrs = await Las.Vlr.walk(getter, header);\n      for (const vlr of vlrs) {\n        if (vlr.userId === 'LASF_Projection' && vlr.recordId === 2112) {\n          const vlrData = await Las.Vlr.fetch(getter, vlr);\n          wkt = new TextDecoder().decode(vlrData).replace(/\\0/g, '');\n          break;\n        }\n      }\n    } catch (e) {\n      console.warn('Failed to read VLRs:', e);\n    }\n\n    if (wkt) {\n      try {\n        const wktToUse = extractProjcsFromWkt(wkt);\n        const projConverter = proj4(wktToUse, 'EPSG:4326');\n        transformer = (coord: [number, number]) => projConverter.forward(coord) as [number, number];\n        needsTransform = true;\n        verticalUnitFactor = getVerticalUnitConversionFactor(wkt);\n      } catch (e) {\n        console.warn('Failed to setup coordinate transformation:', e);\n      }\n    }\n\n    // Create view for reading point data\n    const pointFormat = header.pointDataRecordFormat & 0x7F; // Mask off compression bit\n\n    // Create view - it needs header info and the point data buffer\n    const view = Las.View.create(pointData, header);\n\n    // Calculate bounds\n    let bounds: PointCloudBounds;\n    let coordinateOrigin: [number, number, number];\n\n    if (needsTransform && transformer) {\n      const [minLng, minLat] = transformer([header.min[0], header.min[1]]);\n      const [maxLng, maxLat] = transformer([header.max[0], header.max[1]]);\n\n      bounds = {\n        minX: Math.min(minLng, maxLng),\n        minY: Math.min(minLat, maxLat),\n        minZ: header.min[2] * verticalUnitFactor,\n        maxX: Math.max(minLng, maxLng),\n        maxY: Math.max(minLat, maxLat),\n        maxZ: header.max[2] * verticalUnitFactor,\n      };\n    } else {\n      bounds = {\n        minX: header.min[0],\n        minY: header.min[1],\n        minZ: header.min[2],\n        maxX: header.max[0],\n        maxY: header.max[1],\n        maxZ: header.max[2],\n      };\n    }\n\n    coordinateOrigin = [\n      (bounds.minX + bounds.maxX) / 2,\n      (bounds.minY + bounds.maxY) / 2,\n      0,\n    ];\n\n    const totalPoints = header.pointCount;\n\n    this._reportProgress(60, `Allocating memory for ${totalPoints.toLocaleString()} points...`);\n    await this._yieldToUI();\n\n    // Allocate arrays\n    const positions = new Float32Array(totalPoints * 3);\n    const intensities = new Float32Array(totalPoints);\n    const classifications = new Uint8Array(totalPoints);\n\n    // Check if color data is available\n    const colorFormats = [2, 3, 5, 7, 8, 10];\n    const hasColor = colorFormats.includes(pointFormat);\n    let colors: Uint8Array | undefined;\n    if (hasColor) {\n      colors = new Uint8Array(totalPoints * 4);\n    }\n\n    // Get dimension getters\n    const xGetter = view.getter('X');\n    const yGetter = view.getter('Y');\n    const zGetter = view.getter('Z');\n    const intensityGetter = view.getter('Intensity');\n    const classGetter = view.getter('Classification');\n    const redGetter = hasColor ? view.getter('Red') : null;\n    const greenGetter = hasColor ? view.getter('Green') : null;\n    const blueGetter = hasColor ? view.getter('Blue') : null;\n\n    this._reportProgress(70, 'Processing point coordinates...');\n    await this._yieldToUI();\n\n    // Process points\n    for (let i = 0; i < totalPoints; i++) {\n      const x = xGetter(i);\n      const y = yGetter(i);\n      const z = zGetter(i) * verticalUnitFactor;\n\n      if (needsTransform && transformer) {\n        const [lng, lat] = transformer([x, y]);\n        positions[i * 3] = lng - coordinateOrigin[0];\n        positions[i * 3 + 1] = lat - coordinateOrigin[1];\n        positions[i * 3 + 2] = z;\n      } else {\n        positions[i * 3] = x - coordinateOrigin[0];\n        positions[i * 3 + 1] = y - coordinateOrigin[1];\n        positions[i * 3 + 2] = z;\n      }\n\n      intensities[i] = intensityGetter(i) / 65535;\n      classifications[i] = classGetter(i);\n\n      if (hasColor && colors && redGetter && greenGetter && blueGetter) {\n        colors[i * 4] = redGetter(i) >> 8;\n        colors[i * 4 + 1] = greenGetter(i) >> 8;\n        colors[i * 4 + 2] = blueGetter(i) >> 8;\n        colors[i * 4 + 3] = 255;\n      }\n\n      // Yield periodically\n      if (i % 100000 === 0 && i > 0) {\n        const progress = 70 + (i / totalPoints) * 25;\n        this._reportProgress(progress, `Processing points... ${i.toLocaleString()} / ${totalPoints.toLocaleString()}`);\n        await this._yieldToUI();\n      }\n    }\n\n    this._reportProgress(95, 'Finalizing...');\n\n    return {\n      positions,\n      intensities,\n      classifications,\n      colors,\n      pointCount: totalPoints,\n      bounds,\n      hasRGB: hasColor,\n      hasIntensity: true,\n      hasClassification: true,\n      coordinateOrigin,\n      wkt,\n    };\n  }\n\n  /**\n   * Loads a point cloud using loaders.gl (fallback for LAS 1.0/1.1/1.3).\n   */\n  private async _loadWithLoadersGL(buffer: ArrayBuffer): Promise<PointCloudData> {\n    this._reportProgress(20, 'Parsing point cloud data...');\n    await this._yieldToUI();\n\n    // Load using loaders.gl LASLoader\n    const data = await load(buffer, LASLoader, {\n      las: {\n        shape: 'mesh',\n        fp64: false,\n      },\n      worker: false,\n    });\n\n    this._reportProgress(50, 'Processing points...');\n    await this._yieldToUI();\n\n    // Extract header info from loaders.gl result\n    // loaders.gl stores header in loaderData.header\n    const loaderData = data.loaderData || {};\n    const header = loaderData.header || {};\n    const totalPoints = header.pointsCount || header.vertexCount ||\n      (data.attributes?.POSITION?.value?.length ? data.attributes.POSITION.value.length / 3 : 0);\n\n    // Get position data\n    const positionAttr = data.attributes?.POSITION || data.attributes?.positions;\n    const sourcePositions = positionAttr?.value;\n\n    if (!sourcePositions || totalPoints === 0) {\n      throw new Error('No point data found in file');\n    }\n\n    // Setup coordinate transformation if WKT/projection is available\n    // loaders.gl stores projection info in various places\n    let transformer: ((coord: [number, number]) => [number, number]) | null = null;\n    let needsTransform = false;\n    let verticalUnitFactor = 1.0;\n\n    // Try to find WKT in various locations where loaders.gl might store it\n    let wkt: string | undefined;\n    if (loaderData.vlrs) {\n      // Look for GeoKeyDirectoryTag or WKT in VLRs\n      for (const vlr of loaderData.vlrs) {\n        if (vlr.userId === 'LASF_Projection') {\n          if (vlr.recordId === 2112) {\n            // OGC WKT\n            wkt = new TextDecoder().decode(vlr.data);\n          }\n        }\n      }\n    }\n    // Also check header.wkt as fallback\n    wkt = wkt || header.wkt || header.projection?.wkt;\n\n    if (wkt) {\n      try {\n        const wktToUse = extractProjcsFromWkt(wkt);\n        const projConverter = proj4(wktToUse, 'EPSG:4326');\n        transformer = (coord: [number, number]) => projConverter.forward(coord) as [number, number];\n        needsTransform = true;\n        verticalUnitFactor = getVerticalUnitConversionFactor(wkt);\n      } catch (e) {\n        console.warn('Failed to setup coordinate transformation:', e);\n      }\n    }\n\n    // Check if coordinates look like they need transformation\n    // (i.e., they're not in valid WGS84 range)\n    const sampleX = sourcePositions[0];\n    const sampleY = sourcePositions[1];\n    const looksLikeProjected = Math.abs(sampleX) > 180 || Math.abs(sampleY) > 90;\n\n    if (looksLikeProjected && !needsTransform) {\n      console.warn(\n        'Point cloud appears to be in a projected coordinate system but no WKT/projection info was found. ' +\n        'Coordinates may not display correctly on the map.'\n      );\n    }\n\n    // Calculate bounds from raw data\n    let minX = Infinity, minY = Infinity, minZ = Infinity;\n    let maxX = -Infinity, maxY = -Infinity, maxZ = -Infinity;\n\n    for (let i = 0; i < totalPoints; i++) {\n      const x = sourcePositions[i * 3];\n      const y = sourcePositions[i * 3 + 1];\n      const z = sourcePositions[i * 3 + 2];\n\n      if (needsTransform && transformer) {\n        const [lng, lat] = transformer([x, y]);\n        minX = Math.min(minX, lng);\n        maxX = Math.max(maxX, lng);\n        minY = Math.min(minY, lat);\n        maxY = Math.max(maxY, lat);\n      } else {\n        minX = Math.min(minX, x);\n        maxX = Math.max(maxX, x);\n        minY = Math.min(minY, y);\n        maxY = Math.max(maxY, y);\n      }\n      const zScaled = z * verticalUnitFactor;\n      minZ = Math.min(minZ, zScaled);\n      maxZ = Math.max(maxZ, zScaled);\n    }\n\n    // Validate that bounds are in valid WGS84 range\n    if (Math.abs(minY) > 90 || Math.abs(maxY) > 90 || Math.abs(minX) > 180 || Math.abs(maxX) > 180) {\n      throw new Error(\n        'Point cloud coordinates are not in WGS84 (latitude/longitude) format. ' +\n        'The file appears to use a projected coordinate system but no valid projection information was found. ' +\n        'Please ensure the LAS file contains proper CRS metadata (WKT in VLR records).'\n      );\n    }\n\n    const bounds: PointCloudBounds = { minX, minY, minZ, maxX, maxY, maxZ };\n    const coordinateOrigin: [number, number, number] = [\n      (bounds.minX + bounds.maxX) / 2,\n      (bounds.minY + bounds.maxY) / 2,\n      0,\n    ];\n\n    this._reportProgress(70, 'Allocating arrays...');\n    await this._yieldToUI();\n\n    // Allocate output arrays\n    const positions = new Float32Array(totalPoints * 3);\n    const intensities = new Float32Array(totalPoints);\n    const classifications = new Uint8Array(totalPoints);\n\n    // Check for color data\n    const colorAttr = data.attributes?.COLOR_0 || data.attributes?.colors;\n    const sourceColors = colorAttr?.value;\n    const hasColor = sourceColors && sourceColors.length >= totalPoints * 3;\n    let colors: Uint8Array | undefined;\n    if (hasColor) {\n      colors = new Uint8Array(totalPoints * 4);\n    }\n\n    // Check for intensity\n    const intensityAttr = data.attributes?.intensity;\n    const sourceIntensity = intensityAttr?.value;\n    const hasIntensity = sourceIntensity && sourceIntensity.length >= totalPoints;\n\n    // Check for classification\n    const classAttr = data.attributes?.classification;\n    const sourceClass = classAttr?.value;\n    const hasClassification = sourceClass && sourceClass.length >= totalPoints;\n\n    this._reportProgress(80, 'Transforming coordinates...');\n    await this._yieldToUI();\n\n    // Process points\n    for (let i = 0; i < totalPoints; i++) {\n      const x = sourcePositions[i * 3];\n      const y = sourcePositions[i * 3 + 1];\n      const z = sourcePositions[i * 3 + 2] * verticalUnitFactor;\n\n      if (needsTransform && transformer) {\n        const [lng, lat] = transformer([x, y]);\n        positions[i * 3] = lng - coordinateOrigin[0];\n        positions[i * 3 + 1] = lat - coordinateOrigin[1];\n        positions[i * 3 + 2] = z;\n      } else {\n        positions[i * 3] = x - coordinateOrigin[0];\n        positions[i * 3 + 1] = y - coordinateOrigin[1];\n        positions[i * 3 + 2] = z;\n      }\n\n      // Intensity (normalize to 0-1)\n      if (hasIntensity) {\n        intensities[i] = sourceIntensity[i] / 65535;\n      }\n\n      // Classification\n      if (hasClassification) {\n        classifications[i] = sourceClass[i];\n      }\n\n      // Colors\n      if (hasColor && colors) {\n        const colorSize = colorAttr.size || 3;\n        if (colorSize === 4) {\n          colors[i * 4] = sourceColors[i * 4];\n          colors[i * 4 + 1] = sourceColors[i * 4 + 1];\n          colors[i * 4 + 2] = sourceColors[i * 4 + 2];\n          colors[i * 4 + 3] = sourceColors[i * 4 + 3];\n        } else {\n          colors[i * 4] = sourceColors[i * 3];\n          colors[i * 4 + 1] = sourceColors[i * 3 + 1];\n          colors[i * 4 + 2] = sourceColors[i * 3 + 2];\n          colors[i * 4 + 3] = 255;\n        }\n      }\n    }\n\n    this._reportProgress(95, 'Finalizing...');\n\n    return {\n      positions,\n      intensities,\n      classifications,\n      colors,\n      pointCount: totalPoints,\n      bounds,\n      hasRGB: hasColor,\n      hasIntensity,\n      hasClassification,\n      coordinateOrigin,\n      wkt,\n    };\n  }\n\n  /**\n   * Loads a point cloud from URL using loaders.gl (fallback for unsupported LAS versions).\n   */\n  private async _loadUrlWithLoadersGL(url: string): Promise<PointCloudData> {\n    this._reportProgress(15, 'Downloading file...');\n    await this._yieldToUI();\n\n    // Fetch the file\n    const response = await fetch(url);\n    if (!response.ok) {\n      throw new Error(`Failed to fetch: ${response.status} ${response.statusText}`);\n    }\n    const buffer = await response.arrayBuffer();\n\n    return await this._loadWithLoadersGL(buffer);\n  }\n\n  /**\n   * Recursively loads all hierarchy pages from a COPC file.\n   * @param source - URL string or Getter function\n   * @param info - COPC info containing root hierarchy page\n   */\n  private async _loadFullHierarchy(\n    source: string | Getter,\n    info: { rootHierarchyPage: Hierarchy.Page }\n  ): Promise<Hierarchy.Subtree> {\n    const allNodes: Record<string, Hierarchy.Node> = {};\n\n    const loadPage = async (page: Hierarchy.Page): Promise<void> => {\n      const subtree = await Hierarchy.load(source, page);\n\n      // Add all nodes from this page\n      for (const [key, node] of Object.entries(subtree.nodes)) {\n        if (node) {\n          allNodes[key] = node;\n        }\n      }\n\n      // Recursively load sub-pages\n      for (const [, subPage] of Object.entries(subtree.pages)) {\n        if (subPage) {\n          await loadPage(subPage);\n        }\n      }\n    };\n\n    await loadPage(info.rootHierarchyPage);\n\n    return { nodes: allNodes, pages: {} };\n  }\n\n  /**\n   * Process COPC data and extract point cloud information.\n   */\n  private async _processCopcData(\n    source: string | Getter,\n    copc: CopcType,\n    hierarchy: Hierarchy.Subtree,\n    lazPerf: LazPerf\n  ): Promise<PointCloudData> {\n    const { header } = copc;\n\n    // Setup coordinate transformation if WKT is available\n    let transformer: ((coord: [number, number]) => [number, number]) | null = null;\n    let needsTransform = false;\n    let verticalUnitFactor = 1.0; // Conversion factor for elevation (feet to meters)\n\n    if (copc.wkt) {\n      try {\n        // Extract PROJCS from compound coordinate system (COMPD_CS) if present\n        const wktToUse = extractProjcsFromWkt(copc.wkt);\n\n        // Create a proj4 converter from source CRS to WGS84\n        const projConverter = proj4(wktToUse, 'EPSG:4326');\n        transformer = (coord: [number, number]) => projConverter.forward(coord) as [number, number];\n        needsTransform = true;\n\n        // Detect if vertical units are in feet and need conversion to meters\n        verticalUnitFactor = getVerticalUnitConversionFactor(copc.wkt);\n      } catch (e) {\n        console.warn('Failed to setup coordinate transformation:', e);\n      }\n    }\n\n    // Collect all nodes to load\n    const nodesToLoad: { key: string; node: Hierarchy.Node }[] = [];\n    for (const [key, node] of Object.entries(hierarchy.nodes)) {\n      if (node) {\n        nodesToLoad.push({ key, node });\n      }\n    }\n\n    // Calculate total points\n    const totalPoints = nodesToLoad.reduce((sum, { node }) => sum + node.pointCount, 0);\n\n    // Calculate bounds FIRST - we need these to compute the coordinate origin\n    // This avoids Float32 precision loss by storing positions as small offsets\n    let bounds: PointCloudBounds;\n    let coordinateOrigin: [number, number, number];\n\n    if (needsTransform && transformer) {\n      const [minLng, minLat] = transformer([header.min[0], header.min[1]]);\n      const [maxLng, maxLat] = transformer([header.max[0], header.max[1]]);\n\n      bounds = {\n        minX: Math.min(minLng, maxLng),\n        minY: Math.min(minLat, maxLat),\n        minZ: header.min[2] * verticalUnitFactor,\n        maxX: Math.max(minLng, maxLng),\n        maxY: Math.max(minLat, maxLat),\n        maxZ: header.max[2] * verticalUnitFactor,\n      };\n      // Coordinate origin is the center of the bounding box\n      coordinateOrigin = [\n        (bounds.minX + bounds.maxX) / 2,\n        (bounds.minY + bounds.maxY) / 2,\n        0,\n      ];\n    } else {\n      bounds = {\n        minX: header.min[0],\n        minY: header.min[1],\n        minZ: header.min[2],\n        maxX: header.max[0],\n        maxY: header.max[1],\n        maxZ: header.max[2],\n      };\n      coordinateOrigin = [\n        (bounds.minX + bounds.maxX) / 2,\n        (bounds.minY + bounds.maxY) / 2,\n        0,\n      ];\n    }\n\n    this._reportProgress(25, `Allocating memory for ${totalPoints.toLocaleString()} points...`);\n    await this._yieldToUI();\n\n    // Allocate arrays - positions will be stored as OFFSETS from coordinateOrigin\n    // This maintains Float32 precision for geographic coordinates\n    const positions = new Float32Array(totalPoints * 3);\n    const intensities = new Float32Array(totalPoints);\n    const classifications = new Uint8Array(totalPoints);\n    let colors: Uint8Array | undefined;\n\n    // Check if color data is available (point formats 2, 3, 5, 7, 8, 10)\n    const colorFormats = [2, 3, 5, 7, 8, 10];\n    const hasColor = colorFormats.includes(header.pointDataRecordFormat);\n    if (hasColor) {\n      colors = new Uint8Array(totalPoints * 4);\n    }\n\n    // Extra attributes will be populated dynamically based on available dimensions\n    const extraAttributes: ExtraPointAttributes = {};\n    // Track which dimensions we've detected as available\n    const availableDimensions: Set<string> = new Set();\n    // First pass flag - we'll detect dimensions on first node\n    let dimensionsDetected = false;\n\n    let pointIndex = 0;\n    let lastYieldTime = Date.now();\n    const YIELD_INTERVAL_MS = 50; // Yield every 50ms to keep UI responsive\n\n    // Load point data from each node\n    for (let nodeIdx = 0; nodeIdx < nodesToLoad.length; nodeIdx++) {\n      const { node } = nodesToLoad[nodeIdx];\n\n      // Report progress (25-90% range for point loading)\n      const loadProgress = 25 + (nodeIdx / nodesToLoad.length) * 65;\n      const pointsLoaded = pointIndex.toLocaleString();\n      this._reportProgress(loadProgress, `Loading points... ${pointsLoaded} / ${totalPoints.toLocaleString()}`);\n\n      try {\n        const view = await Copc.loadPointDataView(source, copc, node, { lazPerf });\n\n        // On first node, detect all available dimensions\n        if (!dimensionsDetected) {\n          // Get all dimension names from the view\n          const allDimensions = Object.keys(view.dimensions || {});\n          for (const dimName of allDimensions) {\n            if (!CORE_DIMENSIONS.has(dimName)) {\n              availableDimensions.add(dimName);\n              // Allocate array for this dimension\n              const config = DIMENSION_CONFIGS[dimName] || { arrayType: 'float32' };\n              extraAttributes[dimName] = createAttributeArray(config.arrayType, totalPoints);\n            }\n          }\n          dimensionsDetected = true;\n        }\n\n        // Get dimensions - core attributes\n        const xGetter = view.getter('X');\n        const yGetter = view.getter('Y');\n        const zGetter = view.getter('Z');\n        const intensityGetter = view.getter('Intensity');\n        const classGetter = view.getter('Classification');\n        const redGetter = hasColor ? view.getter('Red') : null;\n        const greenGetter = hasColor ? view.getter('Green') : null;\n        const blueGetter = hasColor ? view.getter('Blue') : null;\n\n        // Build getters for all available extra dimensions\n        const extraGetters: Map<string, (i: number) => number> = new Map();\n        for (const dimName of availableDimensions) {\n          try {\n            const getter = view.getter(dimName);\n            if (getter) {\n              extraGetters.set(dimName, getter);\n            }\n          } catch {\n            // Dimension not available in this node, skip\n          }\n        }\n\n        for (let i = 0; i < node.pointCount; i++) {\n          // copc.js getters already return scaled/offset coordinates, NOT raw integers\n          const x = xGetter(i);\n          const y = yGetter(i);\n          const z = zGetter(i);\n\n          // Transform coordinates to WGS84 if needed\n          if (needsTransform && transformer) {\n            const [lng, lat] = transformer([x, y]);\n\n            // Store as OFFSET from coordinateOrigin - these small values maintain Float32 precision\n            positions[pointIndex * 3] = lng - coordinateOrigin[0];\n            positions[pointIndex * 3 + 1] = lat - coordinateOrigin[1];\n            positions[pointIndex * 3 + 2] = z * verticalUnitFactor; // elevation in meters\n          } else {\n            positions[pointIndex * 3] = x - coordinateOrigin[0];\n            positions[pointIndex * 3 + 1] = y - coordinateOrigin[1];\n            positions[pointIndex * 3 + 2] = z;\n          }\n\n          // Intensity (normalize to 0-1)\n          intensities[pointIndex] = intensityGetter(i) / 65535;\n\n          // Classification\n          classifications[pointIndex] = classGetter(i);\n\n          // Color (if available)\n          if (colors && redGetter && greenGetter && blueGetter) {\n            // LAS colors are 16-bit, convert to 8-bit\n            colors[pointIndex * 4] = redGetter(i) >> 8;\n            colors[pointIndex * 4 + 1] = greenGetter(i) >> 8;\n            colors[pointIndex * 4 + 2] = blueGetter(i) >> 8;\n            colors[pointIndex * 4 + 3] = 255;\n          }\n\n          // Extra attributes - dynamically loaded based on available dimensions\n          for (const [dimName, getter] of extraGetters) {\n            const arr = extraAttributes[dimName];\n            if (arr) {\n              arr[pointIndex] = getter(i);\n            }\n          }\n\n          pointIndex++;\n\n          // Periodically yield to the UI thread\n          if (i % 50000 === 0) {\n            const now = Date.now();\n            if (now - lastYieldTime > YIELD_INTERVAL_MS) {\n              await this._yieldToUI();\n              lastYieldTime = now;\n            }\n          }\n        }\n      } catch (e) {\n        console.warn(`Failed to load node: ${e}`);\n      }\n    }\n\n    this._reportProgress(92, 'Processing complete, preparing visualization...');\n\n    // Trim extra attributes arrays to actual point count\n    const trimmedExtraAttributes: ExtraPointAttributes = {};\n    for (const [name, arr] of Object.entries(extraAttributes)) {\n      trimmedExtraAttributes[name] = arr.subarray(0, pointIndex) as AttributeArray;\n    }\n\n    return {\n      positions: positions.subarray(0, pointIndex * 3),\n      coordinateOrigin,\n      colors: colors?.subarray(0, pointIndex * 4),\n      intensities: intensities.subarray(0, pointIndex),\n      classifications: classifications.subarray(0, pointIndex),\n      extraAttributes: Object.keys(trimmedExtraAttributes).length > 0 ? trimmedExtraAttributes : undefined,\n      pointCount: pointIndex,\n      bounds,\n      hasRGB: !!colors,\n      hasIntensity: true,\n      hasClassification: true,\n      wkt: copc.wkt,\n    };\n  }\n}\n","import { Copc, Hierarchy, Getter } from 'copc';\nimport type { Copc as CopcType } from 'copc';\nimport { createLazPerf, type LazPerf } from 'laz-perf';\nimport proj4 from 'proj4';\n\n// Register common projected coordinate systems that might not have WKT in files\n// EPSG:2180 - ETRS89 / Poland CS92 (commonly used in Poland)\nproj4.defs('EPSG:2180', '+proj=tmerc +lat_0=0 +lon_0=19 +k=0.9993 +x_0=500000 +y_0=-5300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +type=crs');\nimport type {\n  NodeKey,\n  CachedNode,\n  StreamingLoaderOptions,\n  ViewportInfo,\n  StreamingProgressEvent,\n  StreamingLoaderEvent,\n  StreamingLoaderEventHandler,\n} from './streaming-types';\nimport type { PointCloudData, ExtraPointAttributes, AttributeArray } from './types';\nimport type { PointCloudBounds } from '../core/types';\n\n/**\n * Source type for streaming loader - can be URL, File, or ArrayBuffer\n */\nexport type StreamingSource = string | File | ArrayBuffer;\n\n/**\n * Creates a getter function from an ArrayBuffer for copc.js\n * Uses subarray for better performance (no copy, just a view)\n */\nfunction createBufferGetter(buffer: ArrayBuffer): Getter {\n  const uint8 = new Uint8Array(buffer);\n  return async (begin: number, end: number): Promise<Uint8Array> => {\n    // Use subarray for performance - creates a view without copying\n    // Then create a copy since copc.js might modify the data\n    return new Uint8Array(uint8.subarray(begin, end));\n  };\n}\n\n/**\n * Configuration for attribute storage types\n */\ninterface AttributeConfig {\n  arrayType: 'float64' | 'float32' | 'uint32' | 'uint16' | 'uint8' | 'int32' | 'int16' | 'int8';\n}\n\n/**\n * Known LAS dimension configurations\n */\nconst DIMENSION_CONFIGS: Record<string, AttributeConfig> = {\n  'GpsTime': { arrayType: 'float64' },\n  'ReturnNumber': { arrayType: 'uint8' },\n  'NumberOfReturns': { arrayType: 'uint8' },\n  'ScanDirectionFlag': { arrayType: 'uint8' },\n  'EdgeOfFlightLine': { arrayType: 'uint8' },\n  'ScanAngleRank': { arrayType: 'int8' },\n  'ScanAngle': { arrayType: 'float32' },\n  'UserData': { arrayType: 'uint8' },\n  'PointSourceId': { arrayType: 'uint16' },\n  'ScannerChannel': { arrayType: 'uint8' },\n  'Synthetic': { arrayType: 'uint8' },\n  'KeyPoint': { arrayType: 'uint8' },\n  'Withheld': { arrayType: 'uint8' },\n  'Overlap': { arrayType: 'uint8' },\n  'ClassFlags': { arrayType: 'uint8' },\n  'Nir': { arrayType: 'uint16' },\n  'NearInfrared': { arrayType: 'uint16' },\n};\n\n/**\n * Core dimensions that are handled separately\n */\nconst CORE_DIMENSIONS = new Set([\n  'X', 'Y', 'Z',\n  'Intensity',\n  'Classification',\n  'Red', 'Green', 'Blue',\n]);\n\n/**\n * Creates a typed array of the appropriate type\n */\nfunction createAttributeArray(type: AttributeConfig['arrayType'], length: number): AttributeArray {\n  switch (type) {\n    case 'float64': return new Float64Array(length);\n    case 'float32': return new Float32Array(length);\n    case 'uint32': return new Uint32Array(length);\n    case 'uint16': return new Uint16Array(length);\n    case 'uint8': return new Uint8Array(length);\n    case 'int32': return new Int32Array(length);\n    case 'int16': return new Int16Array(length);\n    case 'int8': return new Int8Array(length);\n    default: return new Float32Array(length);\n  }\n}\n\n/**\n * Prevents 8bit double cast\n */\nfunction toUint8Color(value: number): number {\n  return value > 255 ? value >> 8 : value;\n}\n\n// LazPerf instance for COPC decompression\nlet lazPerfInstance: LazPerf | null = null;\n\nasync function getLazPerf(): Promise<LazPerf> {\n  if (!lazPerfInstance) {\n    lazPerfInstance = await createLazPerf({\n      locateFile: (path: string) => {\n        // Load WASM from CDN for reliable loading in all environments\n        if (path.endsWith('.wasm')) {\n          return 'https://unpkg.com/laz-perf@0.0.7/lib/web/laz-perf.wasm';\n        }\n        return path;\n      },\n    });\n  }\n  return lazPerfInstance;\n}\n\n/**\n * Extracts the PROJCS section from a WKT string (handles COMPD_CS)\n */\nfunction extractProjcsFromWkt(wkt: string): string {\n  if (wkt.startsWith('COMPD_CS[')) {\n    const projcsStart = wkt.indexOf('PROJCS[');\n    if (projcsStart === -1) return wkt;\n\n    let depth = 0;\n    let projcsEnd = projcsStart;\n    for (let i = projcsStart; i < wkt.length; i++) {\n      if (wkt[i] === '[') depth++;\n      if (wkt[i] === ']') {\n        depth--;\n        if (depth === 0) {\n          projcsEnd = i + 1;\n          break;\n        }\n      }\n    }\n    return wkt.substring(projcsStart, projcsEnd);\n  }\n  return wkt;\n}\n\n/**\n * Detects if the WKT uses feet as the linear unit\n */\nfunction getVerticalUnitConversionFactor(wkt: string): number {\n  const FEET_TO_METERS = 0.3048;\n  const US_SURVEY_FEET_TO_METERS = 0.3048006096012192;\n\n  const wktLower = wkt.toLowerCase();\n\n  if (wktLower.includes('us survey foot') ||\n      wktLower.includes('us_survey_foot') ||\n      wktLower.includes('foot_us')) {\n    return US_SURVEY_FEET_TO_METERS;\n  }\n\n  const footPatterns = [\n    /unit\\s*\\[\\s*\"foot/i,\n    /unit\\s*\\[\\s*\"international foot/i,\n    /,\\s*foot\\s*\\]/i,\n    /\"ft\"/i,\n  ];\n\n  for (const pattern of footPatterns) {\n    if (pattern.test(wkt)) {\n      return FEET_TO_METERS;\n    }\n  }\n\n  return 1.0;\n}\n\n/**\n * Clamps latitude and longitude values to valid WGS84 ranges.\n * Latitude is clamped to [-90, 90] and longitude to [-180, 180].\n * Logs a warning if clamping occurs.\n *\n * @param lng - Longitude value\n * @param lat - Latitude value\n * @param context - Context string for logging (e.g., \"header bounds\", \"node bounds\")\n * @returns Clamped [lng, lat] tuple\n */\nfunction clampLatLng(lng: number, lat: number, context: string = ''): [number, number] {\n  let clampedLng = lng;\n  let clampedLat = lat;\n  let wasClamped = false;\n\n  if (lat > 90) {\n    clampedLat = 90;\n    wasClamped = true;\n  } else if (lat < -90) {\n    clampedLat = -90;\n    wasClamped = true;\n  }\n\n  if (lng > 180) {\n    clampedLng = 180;\n    wasClamped = true;\n  } else if (lng < -180) {\n    clampedLng = -180;\n    wasClamped = true;\n  }\n\n  if (wasClamped) {\n    console.warn(\n      `COPC: Clamped transformed coordinates to valid WGS84 range${context ? ` (${context})` : ''}:`,\n      `[${lng.toFixed(6)}, ${lat.toFixed(6)}] -> [${clampedLng.toFixed(6)}, ${clampedLat.toFixed(6)}]`\n    );\n  }\n\n  return [clampedLng, clampedLat];\n}\n\n/**\n * Default options for streaming loader\n */\nconst DEFAULT_OPTIONS: Required<StreamingLoaderOptions> = {\n  pointBudget: 5_000_000,\n  maxConcurrentRequests: 8,\n  viewportDebounceMs: 100,\n  minDetailZoom: 10,\n  maxOctreeDepth: 20,\n  maxSubtreesPerViewport: 60, // Not used by COPC, but required by interface\n};\n\n/**\n * Streams COPC point cloud data on-demand based on viewport.\n * Implements center-first priority loading and respects point budget.\n * Supports both URL and local file (File/ArrayBuffer) sources.\n */\nexport class CopcStreamingLoader {\n  private _originalSource: StreamingSource;\n  private _source: string | Getter | null = null; // URL string or Getter for buffer\n  private _copc: CopcType | null = null;\n  private _lazPerf: LazPerf | null = null;\n  private _options: Required<StreamingLoaderOptions>;\n\n  // Hierarchy cache - loaded on-demand per page\n  private _hierarchyPages: Map<string, Hierarchy.Subtree> = new Map();\n  private _loadedHierarchyKeys: Set<string> = new Set();\n  private _rootHierarchyPage: Hierarchy.Page | null = null;\n\n  // Node cache - tracks all known nodes and their state\n  private _nodeCache: Map<string, CachedNode> = new Map();\n\n  // Point data buffers - pre-allocated for point budget\n  private _positions: Float32Array | null = null;\n  private _colors: Uint8Array | null = null;\n  private _intensities: Float32Array | null = null;\n  private _classifications: Uint8Array | null = null;\n  private _extraAttributes: ExtraPointAttributes = {};\n  private _coordinateOrigin: [number, number, number] = [0, 0, 0];\n  private _bounds: PointCloudBounds | null = null;\n\n  // Loading state\n  private _loadingQueue: CachedNode[] = [];\n  private _activeRequests: number = 0;\n  private _totalLoadedPoints: number = 0;\n  private _totalLoadedNodes: number = 0;\n  private _isInitialized: boolean = false;\n\n  // Coordinate transformation\n  private _transformer: ((coord: [number, number]) => [number, number]) | null = null;\n  private _verticalUnitFactor: number = 1.0;\n  private _needsTransform: boolean = false;\n\n  // Point format info\n  private _hasColor: boolean = false;\n  private _totalPointsInFile: number = 0;\n  private _octreeCube: number[] = [];\n  private _spacing: number = 0;\n  private _spacingInMeters: number = 0;\n\n  // Extra dimensions detection\n  private _availableDimensions: Set<string> = new Set();\n  private _dimensionsDetected: boolean = false;\n\n  // Events\n  private _eventHandlers: Map<StreamingLoaderEvent, Set<StreamingLoaderEventHandler>> = new Map();\n\n  // Batched layer update\n  private _pendingLayerUpdate: boolean = false;\n  private _updateBatchTimeout: ReturnType<typeof setTimeout> | null = null;\n  private _onPointsLoaded?: (data: PointCloudData) => void;\n\n  /**\n   * Creates a new CopcStreamingLoader instance.\n   *\n   * @param source - URL string, File object, or ArrayBuffer\n   * @param options - Streaming options\n   */\n  constructor(source: StreamingSource, options?: StreamingLoaderOptions) {\n    this._originalSource = source;\n    this._options = { ...DEFAULT_OPTIONS, ...options };\n  }\n\n  /**\n   * Initializes the COPC file - reads header and root hierarchy.\n   * Must be called before any loading operations.\n   *\n   * @returns Initial info about the point cloud\n   */\n  async initialize(): Promise<{\n    bounds: PointCloudBounds;\n    totalPoints: number;\n    hasRGB: boolean;\n    spacing: number;\n  }> {\n    // Initialize LazPerf for decompression\n    this._lazPerf = await getLazPerf();\n\n    // Setup source - URL string or Getter for local files\n    if (typeof this._originalSource === 'string') {\n      // URL source\n      this._source = this._originalSource;\n      try {\n        this._copc = await Copc.create(this._source);\n      } catch (error) {\n        // Check if this is likely a CORS error\n        if (error instanceof TypeError && error.message === 'Failed to fetch') {\n          throw new Error(\n            `Failed to fetch from URL. This is likely a CORS (Cross-Origin Resource Sharing) error. ` +\n            `The server at \"${new URL(this._source).hostname}\" doesn't allow requests from this origin. ` +\n            `Solutions: (1) Download the file locally and load it as a file, ` +\n            `(2) Use a CORS proxy, or (3) Host the file on a CORS-enabled server.`\n          );\n        }\n        throw error;\n      }\n    } else if (this._originalSource instanceof File) {\n      // File source - read into buffer first\n      const buffer = await this._originalSource.arrayBuffer();\n      this._source = createBufferGetter(buffer);\n      this._copc = await Copc.create(this._source);\n    } else {\n      // ArrayBuffer source\n      this._source = createBufferGetter(this._originalSource);\n      this._copc = await Copc.create(this._source);\n    }\n\n    const { header, info } = this._copc;\n\n    // Store root hierarchy page for later traversal\n    this._rootHierarchyPage = info.rootHierarchyPage;\n    this._octreeCube = info.cube;\n    this._spacing = info.spacing;\n    this._totalPointsInFile = header.pointCount;\n\n    // Check if color data is available\n    const colorFormats = [2, 3, 5, 7, 8, 10];\n    this._hasColor = colorFormats.includes(header.pointDataRecordFormat);\n\n    // Setup coordinate transformation if WKT is available\n    if (this._copc.wkt) {\n      try {\n        const wktToUse = extractProjcsFromWkt(this._copc.wkt);\n        const projConverter = proj4(wktToUse, 'EPSG:4326');\n        this._transformer = (coord: [number, number]) =>\n          projConverter.forward(coord) as [number, number];\n        this._needsTransform = true;\n        this._verticalUnitFactor = getVerticalUnitConversionFactor(this._copc.wkt);\n      } catch (e) {\n        console.warn('Failed to setup coordinate transformation:', e);\n      }\n    } else {\n      // No WKT - try to detect coordinate system based on coordinate ranges\n      const minX = header.min[0];\n      const minY = header.min[1];\n      const maxX = header.max[0];\n      const maxY = header.max[1];\n\n      // Detect if coordinates are likely in a projected system\n      let detectedEPSG: string | null = null;\n\n      // Polish coordinate systems (EPSG:2176-2180)\n      // EPSG:2180 (Poland CS92): X: ~170,000-860,000, Y: ~140,000-780,000\n      if (minX >= 100000 && maxX <= 900000 && minY >= 100000 && maxY <= 800000) {\n        detectedEPSG = 'EPSG:2180';\n      }\n\n      // Try to setup transformation with detected EPSG\n      if (detectedEPSG) {\n        try {\n          const projConverter = proj4(detectedEPSG, 'EPSG:4326');\n          this._transformer = (coord: [number, number]) =>\n            projConverter.forward(coord) as [number, number];\n          this._needsTransform = true;\n        } catch (e) {\n          console.warn(`Failed to setup coordinate transformation from ${detectedEPSG}:`, e);\n        }\n      }\n    }\n\n    // Calculate bounds\n    if (this._needsTransform && this._transformer) {\n      const [rawMinLng, rawMinLat] = this._transformer([header.min[0], header.min[1]]);\n      const [rawMaxLng, rawMaxLat] = this._transformer([header.max[0], header.max[1]]);\n\n      // Clamp transformed coordinates to valid WGS84 range\n      const [minLng, minLat] = clampLatLng(rawMinLng, rawMinLat, 'header bounds min');\n      const [maxLng, maxLat] = clampLatLng(rawMaxLng, rawMaxLat, 'header bounds max');\n\n      this._bounds = {\n        minX: Math.min(minLng, maxLng),\n        minY: Math.min(minLat, maxLat),\n        minZ: header.min[2] * this._verticalUnitFactor,\n        maxX: Math.max(minLng, maxLng),\n        maxY: Math.max(minLat, maxLat),\n        maxZ: header.max[2] * this._verticalUnitFactor,\n      };\n    } else {\n      this._bounds = {\n        minX: header.min[0],\n        minY: header.min[1],\n        minZ: header.min[2],\n        maxX: header.max[0],\n        maxY: header.max[1],\n        maxZ: header.max[2],\n      };\n    }\n\n    // Coordinate origin is the center of the bounding box\n    this._coordinateOrigin = [\n      (this._bounds.minX + this._bounds.maxX) / 2,\n      (this._bounds.minY + this._bounds.maxY) / 2,\n      0,\n    ];\n\n    // Convert spacing to meters. When the source CRS is geographic (lng/lat\n    // in degrees), info.spacing is in degrees and must be converted before it\n    // can be compared to screen ground resolution in meters. We detect a\n    // geographic source as one where no projection transformation was set up\n    // and the header bounds fall within valid lng/lat ranges.\n    const looksGeographic =\n      !this._needsTransform &&\n      Math.abs(header.min[0]) <= 180 &&\n      Math.abs(header.max[0]) <= 180 &&\n      Math.abs(header.min[1]) <= 90 &&\n      Math.abs(header.max[1]) <= 90;\n    if (looksGeographic) {\n      const centerLat = (this._bounds.minY + this._bounds.maxY) / 2;\n      const metersPerDegreeLng = 111320 * Math.cos((centerLat * Math.PI) / 180);\n      this._spacingInMeters = this._spacing * Math.max(metersPerDegreeLng, 1);\n    } else {\n      this._spacingInMeters = this._spacing;\n    }\n\n    // Pre-allocate buffers for point budget\n    this._allocateBuffers();\n\n    this._isInitialized = true;\n\n    return {\n      bounds: this._bounds,\n      totalPoints: this._totalPointsInFile,\n      hasRGB: this._hasColor,\n      spacing: this._spacingInMeters,\n    };\n  }\n\n  /**\n   * Pre-allocates buffers for the point budget.\n   */\n  private _allocateBuffers(): void {\n    const budget = this._options.pointBudget;\n    this._positions = new Float32Array(budget * 3);\n    this._intensities = new Float32Array(budget);\n    this._classifications = new Uint8Array(budget);\n    if (this._hasColor) {\n      this._colors = new Uint8Array(budget * 4);\n    }\n  }\n\n  /**\n   * Gets the octree spacing value in meters (useful for ViewportManager).\n   * Always returned in meters even when the source CRS is geographic.\n   */\n  getSpacing(): number {\n    return this._spacingInMeters;\n  }\n\n  /**\n   * Parses a node key string to array format.\n   *\n   * @param key - Node key in format \"depth-x-y-z\"\n   * @returns NodeKey array [depth, x, y, z]\n   */\n  private _parseNodeKey(key: string): NodeKey {\n    const parts = key.split('-').map(Number);\n    return [parts[0], parts[1], parts[2], parts[3]];\n  }\n\n  /**\n   * Calculates the bounding box of an octree node.\n   *\n   * @param key - Node key [depth, x, y, z]\n   * @returns Node bounds in source CRS and WGS84\n   */\n  private _calculateNodeBounds(key: NodeKey): {\n    bounds: PointCloudBounds;\n    boundsWgs84: PointCloudBounds;\n  } {\n    const [depth, x, y, z] = key;\n\n    // Root cube from copc.info.cube: [minX, minY, minZ, maxX, maxY, maxZ]\n    const cube = this._octreeCube;\n    const cubeMinX = cube[0];\n    const cubeMinY = cube[1];\n    const cubeMinZ = cube[2];\n    const cubeMaxX = cube[3];\n\n    const cubeSize = cubeMaxX - cubeMinX; // Assuming cubic octree\n\n    // Each level subdivides by 2 in each dimension\n    const scale = 1 / Math.pow(2, depth);\n    const nodeSize = cubeSize * scale;\n\n    const minX = cubeMinX + x * nodeSize;\n    const minY = cubeMinY + y * nodeSize;\n    const minZ = cubeMinZ + z * nodeSize;\n\n    const bounds: PointCloudBounds = {\n      minX,\n      minY,\n      minZ,\n      maxX: minX + nodeSize,\n      maxY: minY + nodeSize,\n      maxZ: minZ + nodeSize,\n    };\n\n    // Transform to WGS84 for viewport intersection\n    let boundsWgs84 = bounds;\n    if (this._needsTransform && this._transformer) {\n      const [rawSwLng, rawSwLat] = this._transformer([minX, minY]);\n      const [rawNeLng, rawNeLat] = this._transformer([minX + nodeSize, minY + nodeSize]);\n\n      // Clamp transformed coordinates to valid WGS84 range\n      const [sw_lng, sw_lat] = clampLatLng(rawSwLng, rawSwLat, 'node bounds SW');\n      const [ne_lng, ne_lat] = clampLatLng(rawNeLng, rawNeLat, 'node bounds NE');\n\n      boundsWgs84 = {\n        minX: Math.min(sw_lng, ne_lng),\n        minY: Math.min(sw_lat, ne_lat),\n        minZ: minZ * this._verticalUnitFactor,\n        maxX: Math.max(sw_lng, ne_lng),\n        maxY: Math.max(sw_lat, ne_lat),\n        maxZ: (minZ + nodeSize) * this._verticalUnitFactor,\n      };\n    }\n\n    return { bounds, boundsWgs84 };\n  }\n\n  /**\n   * Checks if a node's bounds intersect the viewport.\n   * Adds a buffer around viewport to catch edge/corner nodes.\n   *\n   * @param nodeBounds - Node bounds in WGS84\n   * @param viewport - Current viewport info\n   * @returns True if bounds intersect\n   */\n  private _boundsIntersectsViewport(\n    nodeBounds: PointCloudBounds,\n    viewport: ViewportInfo\n  ): boolean {\n    const [west, south, east, north] = viewport.bounds;\n\n    // Add 20% buffer around viewport to catch edge/corner nodes\n    // This helps with:\n    // 1. Tilted views where getBounds() underestimates visible area\n    // 2. Nodes at the edge that might be partially visible\n    const width = east - west;\n    const height = north - south;\n    const bufferX = width * 0.2;\n    const bufferY = height * 0.2;\n\n    const bufferedWest = west - bufferX;\n    const bufferedEast = east + bufferX;\n    const bufferedSouth = south - bufferY;\n    const bufferedNorth = north + bufferY;\n\n    return !(\n      nodeBounds.maxX < bufferedWest ||\n      nodeBounds.minX > bufferedEast ||\n      nodeBounds.maxY < bufferedSouth ||\n      nodeBounds.minY > bufferedNorth\n    );\n  }\n\n  /**\n   * Calculates node priority based on distance from viewport center.\n   * Lower values = higher priority (closer to center).\n   *\n   * @param nodeBounds - Node bounds in WGS84\n   * @param viewport - Current viewport info\n   * @returns Priority value (distance from center)\n   */\n  private _calculateNodePriority(\n    nodeBounds: PointCloudBounds,\n    viewport: ViewportInfo\n  ): number {\n    const nodeCenterX = (nodeBounds.minX + nodeBounds.maxX) / 2;\n    const nodeCenterY = (nodeBounds.minY + nodeBounds.maxY) / 2;\n\n    const dx = nodeCenterX - viewport.center[0];\n    const dy = nodeCenterY - viewport.center[1];\n\n    return Math.sqrt(dx * dx + dy * dy);\n  }\n\n  /**\n   * Ensures the hierarchy page containing a node key is loaded.\n   *\n   * @param nodeKey - Node key to ensure hierarchy for\n   */\n  private async _ensureHierarchyLoaded(nodeKey: string): Promise<void> {\n    if (this._loadedHierarchyKeys.has(nodeKey)) return;\n    if (!this._rootHierarchyPage) return;\n\n    // Check if we have a hierarchy page for this key's region\n    // For now, we load all pages from root\n    if (this._hierarchyPages.size === 0) {\n      await this._loadHierarchyRecursive(this._rootHierarchyPage);\n    }\n  }\n\n  /**\n   * Recursively loads hierarchy pages.\n   *\n   * @param page - Hierarchy page to load\n   */\n  private async _loadHierarchyRecursive(page: Hierarchy.Page): Promise<void> {\n    const subtree = await Hierarchy.load(this._source!, page);\n\n    // Store all nodes from this page\n    for (const [key, node] of Object.entries(subtree.nodes)) {\n      if (node) {\n        this._loadedHierarchyKeys.add(key);\n        // Create cached node entry if not exists\n        if (!this._nodeCache.has(key)) {\n          const keyArray = this._parseNodeKey(key);\n          const { bounds, boundsWgs84 } = this._calculateNodeBounds(keyArray);\n          this._nodeCache.set(key, {\n            key,\n            keyArray,\n            state: 'pending',\n            pointCount: node.pointCount,\n            pointDataOffset: node.pointDataOffset,\n            pointDataLength: node.pointDataLength,\n            bounds,\n            boundsWgs84,\n          });\n        }\n      }\n    }\n\n    // Recursively load sub-pages\n    for (const [, subPage] of Object.entries(subtree.pages)) {\n      if (subPage) {\n        await this._loadHierarchyRecursive(subPage);\n      }\n    }\n  }\n\n  /**\n   * Finds nodes that intersect the viewport and should be loaded.\n   * Implements center-first priority and LOD selection.\n   * Loads nodes at ALL depths up to targetDepth to ensure full coverage\n   * (parent nodes fill gaps where child nodes don't exist in sparse octrees).\n   *\n   * @param viewport - Current viewport information\n   * @returns Sorted array of nodes to load (by priority)\n   */\n  async selectNodesForViewport(viewport: ViewportInfo): Promise<CachedNode[]> {\n    if (!this._isInitialized) {\n      throw new Error('CopcStreamingLoader not initialized. Call initialize() first.');\n    }\n\n    // Ensure hierarchy is loaded\n    await this._ensureHierarchyLoaded('0-0-0-0');\n\n    const nodesToLoad: CachedNode[] = [];\n    const targetDepth = viewport.targetDepth;\n\n    // Load ALL nodes that intersect viewport, from depth 0 up to targetDepth + 1\n    // This ensures parent nodes provide coverage where child nodes don't exist\n    for (const [, node] of this._nodeCache) {\n      const depth = node.keyArray[0];\n\n      // Skip nodes deeper than we need\n      if (depth > targetDepth + 1) continue;\n\n      // Check viewport intersection\n      if (!this._boundsIntersectsViewport(node.boundsWgs84, viewport)) {\n        continue;\n      }\n\n      // Add to load list if not already loaded/loading\n      if (node.state !== 'loaded' && node.state !== 'loading') {\n        // Calculate priority: distance from center, with depth bonus\n        // Deeper nodes (more detail) get slightly higher priority\n        const distPriority = this._calculateNodePriority(node.boundsWgs84, viewport);\n        // Normalize depth bonus: deeper = lower priority number = higher priority\n        node.priority = distPriority - (depth * 0.0001);\n        nodesToLoad.push(node);\n      }\n    }\n\n    // Sort by priority (center-first, deeper nodes slightly preferred)\n    nodesToLoad.sort((a, b) => (a.priority || Infinity) - (b.priority || Infinity));\n\n    return nodesToLoad;\n  }\n\n  /**\n   * Queues a node for loading.\n   *\n   * @param node - Node to queue\n   */\n  queueNode(node: CachedNode): void {\n    if (node.state !== 'pending') return;\n\n    // Check if already in queue\n    if (this._loadingQueue.find((n) => n.key === node.key)) return;\n\n    this._loadingQueue.push(node);\n\n    // Sort queue by priority\n    this._loadingQueue.sort((a, b) => (a.priority || Infinity) - (b.priority || Infinity));\n  }\n\n  /**\n   * Loads nodes from the queue, respecting point budget and concurrency limits.\n   */\n  async loadQueuedNodes(): Promise<void> {\n    while (\n      this._loadingQueue.length > 0 &&\n      this._activeRequests < this._options.maxConcurrentRequests &&\n      this._totalLoadedPoints < this._options.pointBudget\n    ) {\n      const node = this._loadingQueue.shift()!;\n\n      // Check if loading this node would exceed budget\n      if (this._totalLoadedPoints + node.pointCount > this._options.pointBudget) {\n        this._emit('budgetreached', this._getProgressEvent());\n        break;\n      }\n\n      // Start loading node (don't await, let multiple load in parallel)\n      this._loadNode(node);\n    }\n  }\n\n  /**\n   * Removes queued nodes that are outside the current viewport and re-sorts priorities.\n   *\n   * @param viewport - Current viewport information\n   */\n  pruneQueueForViewport(viewport: ViewportInfo): void {\n    if (this._loadingQueue.length === 0) return;\n\n    this._loadingQueue = this._loadingQueue.filter((node) =>\n      this._boundsIntersectsViewport(node.boundsWgs84, viewport)\n    );\n\n    for (const node of this._loadingQueue) {\n      const distPriority = this._calculateNodePriority(node.boundsWgs84, viewport);\n      const depth = node.keyArray[0];\n      node.priority = distPriority - (depth * 0.0001);\n    }\n\n    this._loadingQueue.sort((a, b) => (a.priority || Infinity) - (b.priority || Infinity));\n  }\n\n  /**\n   * Evicts loaded nodes outside the current viewport and compacts point buffers.\n   * Hierarchy metadata is kept so evicted nodes can be loaded again later.\n   *\n   * @param viewport - Current viewport information\n   * @returns True if eviction completed, or false if active requests are still writing buffers\n   */\n  evictLoadedNodesOutsideViewport(viewport: ViewportInfo): boolean {\n    if (this._activeRequests > 0) return false;\n\n    const loadedNodes = Array.from(this._nodeCache.values())\n      .filter((node) => node.state === 'loaded' && node.bufferStartIndex !== undefined);\n    if (loadedNodes.length === 0) return true;\n\n    const keepNodes = loadedNodes\n      .filter((node) => this._boundsIntersectsViewport(node.boundsWgs84, viewport))\n      .sort((a, b) => a.bufferStartIndex! - b.bufferStartIndex!);\n    const keepNodeKeys = new Set(keepNodes.map((node) => node.key));\n\n    let nextStart = 0;\n    for (const node of keepNodes) {\n      const oldStart = node.bufferStartIndex!;\n      if (oldStart !== nextStart) {\n        this._copyNodeBufferRange(oldStart, nextStart, node.pointCount);\n      }\n      node.bufferStartIndex = nextStart;\n      nextStart += node.pointCount;\n    }\n\n    let evictedCount = 0;\n    for (const node of this._nodeCache.values()) {\n      if (node.state === 'loaded' && keepNodeKeys.has(node.key)) continue;\n      if (node.state !== 'loaded' && node.state !== 'error') continue;\n\n      node.state = 'pending';\n      node.bufferStartIndex = undefined;\n      node.error = undefined;\n      node.priority = undefined;\n      evictedCount++;\n    }\n\n    const pointsChanged = nextStart !== this._totalLoadedPoints;\n    if (evictedCount > 0 || pointsChanged) {\n      this._totalLoadedPoints = nextStart;\n      this._totalLoadedNodes = keepNodes.length;\n      this._emit('progress', this._getProgressEvent());\n      this._scheduleLayerUpdate();\n    }\n\n    return true;\n  }\n\n  /**\n   * Resets loaded node data while retaining the COPC hierarchy cache.\n   *\n   * @returns True if reset completed, or false if active requests are still writing buffers\n   */\n  resetLoadedData(): boolean {\n    if (this._activeRequests > 0) return false;\n\n    this._loadingQueue = [];\n    this._totalLoadedPoints = 0;\n    this._totalLoadedNodes = 0;\n\n    for (const node of this._nodeCache.values()) {\n      if (node.state === 'loaded' || node.state === 'loading' || node.state === 'error') {\n        node.state = 'pending';\n        node.bufferStartIndex = undefined;\n        node.error = undefined;\n        node.priority = undefined;\n      }\n    }\n\n    this._emit('progress', this._getProgressEvent());\n    this._scheduleLayerUpdate();\n    return true;\n  }\n\n  /**\n   * Copies a node's point data from one buffer range to another.\n   *\n   * @param fromStart - Source point index\n   * @param toStart - Destination point index\n   * @param pointCount - Number of points to copy\n   */\n  private _copyNodeBufferRange(fromStart: number, toStart: number, pointCount: number): void {\n    this._positions!.copyWithin(toStart * 3, fromStart * 3, (fromStart + pointCount) * 3);\n    this._intensities!.copyWithin(toStart, fromStart, fromStart + pointCount);\n    this._classifications!.copyWithin(toStart, fromStart, fromStart + pointCount);\n\n    if (this._colors) {\n      this._colors.copyWithin(toStart * 4, fromStart * 4, (fromStart + pointCount) * 4);\n    }\n\n    for (const arr of Object.values(this._extraAttributes)) {\n      arr.copyWithin(toStart, fromStart, fromStart + pointCount);\n    }\n  }\n\n  /**\n   * Loads a single node's point data.\n   *\n   * @param node - Node to load\n   */\n  private async _loadNode(node: CachedNode): Promise<void> {\n    if (node.state === 'loaded' || node.state === 'loading') return;\n\n    node.state = 'loading';\n    this._activeRequests++;\n\n    // IMPORTANT: Reserve buffer space BEFORE async operations to prevent race conditions\n    // When multiple nodes load concurrently, each must have its own unique buffer region\n    const startIndex = this._totalLoadedPoints;\n    node.bufferStartIndex = startIndex;\n    this._totalLoadedPoints += node.pointCount; // Reserve space immediately\n\n    try {\n      const hierarchyNode: Hierarchy.Node = {\n        pointCount: node.pointCount,\n        pointDataOffset: node.pointDataOffset,\n        pointDataLength: node.pointDataLength,\n      };\n\n      const view = await Copc.loadPointDataView(\n        this._source!,\n        this._copc!,\n        hierarchyNode,\n        { lazPerf: this._lazPerf! }\n      );\n\n      // Detect dimensions on first node\n      if (!this._dimensionsDetected) {\n        const allDimensions = Object.keys(view.dimensions || {});\n        for (const dimName of allDimensions) {\n          if (!CORE_DIMENSIONS.has(dimName)) {\n            this._availableDimensions.add(dimName);\n            const config = DIMENSION_CONFIGS[dimName] || { arrayType: 'float32' };\n            this._extraAttributes[dimName] = createAttributeArray(\n              config.arrayType,\n              this._options.pointBudget\n            );\n          }\n        }\n        this._dimensionsDetected = true;\n      }\n\n      // Extract point data into buffers (using pre-reserved startIndex)\n      await this._extractPointData(view, node, startIndex);\n\n      node.state = 'loaded';\n      this._totalLoadedNodes++;\n\n      this._emit('nodeloaded', node);\n      this._emit('progress', this._getProgressEvent());\n\n      // Schedule batched layer update\n      this._scheduleLayerUpdate();\n    } catch (error) {\n      node.state = 'error';\n      node.error = error instanceof Error ? error.message : String(error);\n      console.warn(`Failed to load node ${node.key}:`, error);\n      this._emit('error', error as Error);\n    } finally {\n      this._activeRequests--;\n      // Continue loading more nodes\n      this.loadQueuedNodes();\n    }\n  }\n\n  /**\n   * Extracts point data from a view into the buffers.\n   *\n   * @param view - Point data view from copc.js\n   * @param node - Node being loaded\n   * @param startIndex - Starting index in buffers\n   */\n  private async _extractPointData(\n    view: Awaited<ReturnType<typeof Copc.loadPointDataView>>,\n    node: CachedNode,\n    startIndex: number\n  ): Promise<void> {\n    const xGetter = view.getter('X');\n    const yGetter = view.getter('Y');\n    const zGetter = view.getter('Z');\n    const intensityGetter = view.getter('Intensity');\n    const classGetter = view.getter('Classification');\n    const redGetter = this._hasColor ? view.getter('Red') : null;\n    const greenGetter = this._hasColor ? view.getter('Green') : null;\n    const blueGetter = this._hasColor ? view.getter('Blue') : null;\n\n    // Build getters for extra dimensions\n    const extraGetters: Map<string, (i: number) => number> = new Map();\n    for (const dimName of this._availableDimensions) {\n      try {\n        const getter = view.getter(dimName);\n        if (getter) {\n          extraGetters.set(dimName, getter);\n        }\n      } catch {\n        // Dimension not available in this node\n      }\n    }\n\n    for (let i = 0; i < node.pointCount; i++) {\n      const pointIndex = startIndex + i;\n\n      const x = xGetter(i);\n      const y = yGetter(i);\n      const z = zGetter(i);\n\n      // Transform coordinates to WGS84 if needed\n      if (this._needsTransform && this._transformer) {\n        const [rawLng, rawLat] = this._transformer([x, y]);\n        // Clamp to valid WGS84 range (silently - no logging for individual points to avoid console spam)\n        const [lng, lat] = clampLatLng(rawLng, rawLat, '');\n        this._positions![pointIndex * 3] = lng - this._coordinateOrigin[0];\n        this._positions![pointIndex * 3 + 1] = lat - this._coordinateOrigin[1];\n        this._positions![pointIndex * 3 + 2] = z * this._verticalUnitFactor;\n      } else {\n        this._positions![pointIndex * 3] = x - this._coordinateOrigin[0];\n        this._positions![pointIndex * 3 + 1] = y - this._coordinateOrigin[1];\n        this._positions![pointIndex * 3 + 2] = z;\n      }\n\n      // Intensity (normalize to 0-1)\n      this._intensities![pointIndex] = intensityGetter(i) / 65535;\n\n      // Classification\n      this._classifications![pointIndex] = classGetter(i);\n\n      // Color (if available)\n      if (this._colors && redGetter && greenGetter && blueGetter) {\n        this._colors[pointIndex * 4] = toUint8Color(redGetter(i));\n        this._colors[pointIndex * 4 + 1] = toUint8Color(greenGetter(i));\n        this._colors[pointIndex * 4 + 2] = toUint8Color(blueGetter(i));\n        this._colors[pointIndex * 4 + 3] = 255;\n      }\n\n      // Extra attributes\n      for (const [dimName, getter] of extraGetters) {\n        const arr = this._extraAttributes[dimName];\n        if (arr) {\n          arr[pointIndex] = getter(i);\n        }\n      }\n    }\n  }\n\n  /**\n   * Schedules a batched layer update.\n   */\n  private _scheduleLayerUpdate(): void {\n    if (this._pendingLayerUpdate) return;\n    this._pendingLayerUpdate = true;\n\n    // Batch updates every 100ms\n    this._updateBatchTimeout = setTimeout(() => {\n      this._performLayerUpdate();\n      this._pendingLayerUpdate = false;\n      this._updateBatchTimeout = null;\n    }, 100);\n  }\n\n  /**\n   * Performs the layer update callback.\n   */\n  private _performLayerUpdate(): void {\n    if (this._onPointsLoaded) {\n      const data = this.getLoadedPointCloudData();\n      this._onPointsLoaded(data);\n    }\n  }\n\n  /**\n   * Sets the callback for when points are loaded.\n   *\n   * @param callback - Function to call with updated point cloud data\n   */\n  setOnPointsLoaded(callback: (data: PointCloudData) => void): void {\n    this._onPointsLoaded = callback;\n  }\n\n  /**\n   * Gets the current loaded point cloud data for rendering.\n   *\n   * @returns Current loaded data\n   */\n  getLoadedPointCloudData(): PointCloudData {\n    const pointCount = this._totalLoadedPoints;\n\n    // Build trimmed extra attributes\n    const trimmedExtraAttributes: ExtraPointAttributes = {};\n    for (const [name, arr] of Object.entries(this._extraAttributes)) {\n      trimmedExtraAttributes[name] = arr.subarray(0, pointCount) as AttributeArray;\n    }\n\n    return {\n      positions: this._positions!.subarray(0, pointCount * 3),\n      coordinateOrigin: this._coordinateOrigin,\n      colors: this._colors?.subarray(0, pointCount * 4),\n      intensities: this._intensities!.subarray(0, pointCount),\n      classifications: this._classifications!.subarray(0, pointCount),\n      extraAttributes:\n        Object.keys(trimmedExtraAttributes).length > 0\n          ? trimmedExtraAttributes\n          : undefined,\n      pointCount,\n      bounds: this._bounds!,\n      hasRGB: this._hasColor,\n      hasIntensity: true,\n      hasClassification: true,\n      wkt: this._copc?.wkt,\n    };\n  }\n\n  /**\n   * Gets the current streaming progress.\n   *\n   * @returns Progress event data\n   */\n  private _getProgressEvent(): StreamingProgressEvent {\n    return {\n      totalNodesInView: this._nodeCache.size,\n      loadedNodes: this._totalLoadedNodes,\n      loadedPoints: this._totalLoadedPoints,\n      pointBudget: this._options.pointBudget,\n      isLoading: this._activeRequests > 0 || this._loadingQueue.length > 0,\n      queueSize: this._loadingQueue.length,\n    };\n  }\n\n  /**\n   * Registers an event handler.\n   *\n   * @param event - Event type\n   * @param handler - Handler function\n   */\n  on(event: StreamingLoaderEvent, handler: StreamingLoaderEventHandler): void {\n    if (!this._eventHandlers.has(event)) {\n      this._eventHandlers.set(event, new Set());\n    }\n    this._eventHandlers.get(event)!.add(handler);\n  }\n\n  /**\n   * Removes an event handler.\n   *\n   * @param event - Event type\n   * @param handler - Handler function\n   */\n  off(event: StreamingLoaderEvent, handler: StreamingLoaderEventHandler): void {\n    this._eventHandlers.get(event)?.delete(handler);\n  }\n\n  /**\n   * Emits an event to all registered handlers.\n   *\n   * @param event - Event type\n   * @param data - Event data\n   */\n  private _emit(\n    event: StreamingLoaderEvent,\n    data: StreamingProgressEvent | CachedNode | Error\n  ): void {\n    const handlers = this._eventHandlers.get(event);\n    if (handlers) {\n      for (const handler of handlers) {\n        handler(event, data);\n      }\n    }\n  }\n\n  /**\n   * Gets the total number of loaded points.\n   */\n  getLoadedPointCount(): number {\n    return this._totalLoadedPoints;\n  }\n\n  /**\n   * Gets the configured point budget.\n   *\n   * @returns Maximum point count for the streaming buffers\n   */\n  getPointBudget(): number {\n    return this._options.pointBudget;\n  }\n\n  /**\n   * Estimates viewport coverage ratio by loaded nodes.\n   *\n   * @param viewport - Current viewport information\n   * @param minDepth - Minimum octree depth to consider\n   * @returns Coverage ratio from 0 to 1\n   */\n  getViewportCoverageRatio(viewport: ViewportInfo, minDepth: number = 0): number {\n    const [west, south, east, north] = viewport.bounds;\n    const viewportArea = (east - west) * (north - south);\n    if (viewportArea <= 0) return 0;\n\n    let coveredArea = 0;\n\n    for (const node of this._nodeCache.values()) {\n      if (node.state !== 'loaded') continue;\n      if (node.keyArray[0] < minDepth) continue;\n\n      const intersectWest = Math.max(west, node.boundsWgs84.minX);\n      const intersectEast = Math.min(east, node.boundsWgs84.maxX);\n      const intersectSouth = Math.max(south, node.boundsWgs84.minY);\n      const intersectNorth = Math.min(north, node.boundsWgs84.maxY);\n\n      if (intersectWest < intersectEast && intersectSouth < intersectNorth) {\n        coveredArea += (intersectEast - intersectWest) * (intersectNorth - intersectSouth);\n      }\n    }\n\n    return Math.min(1.0, coveredArea / viewportArea);\n  }\n\n  /**\n   * Gets the total number of loaded nodes.\n   */\n  getLoadedNodeCount(): number {\n    return this._totalLoadedNodes;\n  }\n\n  /**\n   * Checks if the loader is currently loading.\n   */\n  isLoading(): boolean {\n    return this._activeRequests > 0 || this._loadingQueue.length > 0;\n  }\n\n  /**\n   * Gets the full COPC metadata for the loaded file.\n   *\n   * @returns COPC metadata or undefined if not initialized\n   */\n  getCopcMetadata(): import('../core/types').CopcMetadata | undefined {\n    if (!this._copc) return undefined;\n\n    const { header, info } = this._copc;\n\n    // Extract dimension info\n    const dimensions: import('../core/types').DimensionInfo[] = [];\n    if (header.pointDataRecordFormat !== undefined) {\n      // Standard LAS dimensions based on point data record format\n      const standardDims = ['X', 'Y', 'Z', 'Intensity', 'ReturnNumber', 'NumberOfReturns',\n                           'ScanDirectionFlag', 'EdgeOfFlightLine', 'Classification',\n                           'ScanAngleRank', 'UserData', 'PointSourceId'];\n      for (const dimName of standardDims) {\n        dimensions.push({\n          name: dimName,\n          type: dimName === 'X' || dimName === 'Y' || dimName === 'Z' ? 'float' :\n                dimName === 'Intensity' ? 'uint16' : 'uint8',\n          size: dimName === 'X' || dimName === 'Y' || dimName === 'Z' ? 8 :\n                dimName === 'Intensity' ? 2 : 1,\n          scale: dimName === 'X' ? header.scale[0] :\n                 dimName === 'Y' ? header.scale[1] :\n                 dimName === 'Z' ? header.scale[2] : undefined,\n          offset: dimName === 'X' ? header.offset[0] :\n                  dimName === 'Y' ? header.offset[1] :\n                  dimName === 'Z' ? header.offset[2] : undefined,\n        });\n      }\n      // Add RGB if available\n      const colorFormats = [2, 3, 5, 7, 8, 10];\n      if (colorFormats.includes(header.pointDataRecordFormat)) {\n        dimensions.push({ name: 'Red', type: 'uint16', size: 2 });\n        dimensions.push({ name: 'Green', type: 'uint16', size: 2 });\n        dimensions.push({ name: 'Blue', type: 'uint16', size: 2 });\n      }\n    }\n\n    return {\n      lasVersion: `${header.majorVersion}.${header.minorVersion}`,\n      pointDataRecordFormat: header.pointDataRecordFormat,\n      generatingSoftware: header.generatingSoftware || 'Unknown',\n      creationDate: header.fileCreationYear ? {\n        year: header.fileCreationYear,\n        dayOfYear: header.fileCreationDayOfYear || 1,\n      } : undefined,\n      scale: header.scale as [number, number, number],\n      offset: header.offset as [number, number, number],\n      nativeBounds: {\n        min: header.min as [number, number, number],\n        max: header.max as [number, number, number],\n      },\n      copcInfo: {\n        spacing: info.spacing,\n        rootHierarchyOffset: info.rootHierarchyPage?.pageOffset || 0,\n        pointSpacing: this._calculateNominalSpacing(header),\n      },\n      dimensions,\n    };\n  }\n\n  /**\n   * Calculates the nominal point spacing from bounding box area.\n   * Uses formula: sqrt(area / pointCount) * unitFactor\n   *\n   * @param header - COPC header with bounds and point count\n   * @returns Estimated point spacing in meters\n   */\n  private _calculateNominalSpacing(header: { min: number[]; max: number[]; pointCount: number }): number {\n    const width = header.max[0] - header.min[0];\n    const height = header.max[1] - header.min[1];\n    const area = width * height;\n\n    if (area <= 0 || header.pointCount <= 0) {\n      return 0;\n    }\n\n    const spacingInSourceUnits = Math.sqrt(area / header.pointCount);\n    return spacingInSourceUnits * this._verticalUnitFactor;\n  }\n\n  /**\n   * Gets the WKT coordinate reference system string.\n   *\n   * @returns WKT string or undefined if not available\n   */\n  getWkt(): string | undefined {\n    return this._copc?.wkt;\n  }\n\n  /**\n   * Destroys the streaming loader and cleans up resources.\n   */\n  destroy(): void {\n    // Clear timeout\n    if (this._updateBatchTimeout) {\n      clearTimeout(this._updateBatchTimeout);\n    }\n\n    // Clear all state\n    this._loadingQueue = [];\n    this._nodeCache.clear();\n    this._hierarchyPages.clear();\n    this._loadedHierarchyKeys.clear();\n    this._eventHandlers.clear();\n\n    // Release buffers\n    this._positions = null;\n    this._colors = null;\n    this._intensities = null;\n    this._classifications = null;\n    this._extraAttributes = {};\n  }\n}\n","import { load } from '@loaders.gl/core';\nimport { LASLoader } from '@loaders.gl/las';\nimport proj4 from 'proj4';\nimport type {\n  NodeKey,\n  StreamingLoaderOptions,\n  ViewportInfo,\n  StreamingProgressEvent,\n  StreamingLoaderEvent,\n  StreamingLoaderEventHandler,\n} from './streaming-types';\nimport type {\n  EptMetadata,\n  EptDimension,\n  EptHierarchy,\n  EptCachedNode,\n  ParsedDimension,\n} from './ept-types';\nimport type { PointCloudData, ExtraPointAttributes, AttributeArray } from './types';\nimport type { PointCloudBounds } from '../core/types';\n\n/**\n * Configuration for attribute storage types\n */\ninterface AttributeConfig {\n  arrayType: 'float64' | 'float32' | 'uint32' | 'uint16' | 'uint8' | 'int32' | 'int16' | 'int8';\n}\n\n/**\n * Known LAS dimension configurations\n */\nconst DIMENSION_CONFIGS: Record<string, AttributeConfig> = {\n  'GpsTime': { arrayType: 'float64' },\n  'ReturnNumber': { arrayType: 'uint8' },\n  'NumberOfReturns': { arrayType: 'uint8' },\n  'ScanDirectionFlag': { arrayType: 'uint8' },\n  'EdgeOfFlightLine': { arrayType: 'uint8' },\n  'ScanAngleRank': { arrayType: 'int8' },\n  'ScanAngle': { arrayType: 'float32' },\n  'UserData': { arrayType: 'uint8' },\n  'PointSourceId': { arrayType: 'uint16' },\n  'ScannerChannel': { arrayType: 'uint8' },\n  'Synthetic': { arrayType: 'uint8' },\n  'KeyPoint': { arrayType: 'uint8' },\n  'Withheld': { arrayType: 'uint8' },\n  'Overlap': { arrayType: 'uint8' },\n  'ClassFlags': { arrayType: 'uint8' },\n  'Nir': { arrayType: 'uint16' },\n  'NearInfrared': { arrayType: 'uint16' },\n  'OriginId': { arrayType: 'uint32' },\n};\n\n/**\n * Core dimensions that are handled separately\n */\nconst CORE_DIMENSIONS = new Set([\n  'X', 'Y', 'Z',\n  'Intensity',\n  'Classification',\n  'Red', 'Green', 'Blue',\n]);\n\n/**\n * Creates a typed array of the appropriate type\n */\nfunction createAttributeArray(type: AttributeConfig['arrayType'], length: number): AttributeArray {\n  switch (type) {\n    case 'float64': return new Float64Array(length);\n    case 'float32': return new Float32Array(length);\n    case 'uint32': return new Uint32Array(length);\n    case 'uint16': return new Uint16Array(length);\n    case 'uint8': return new Uint8Array(length);\n    case 'int32': return new Int32Array(length);\n    case 'int16': return new Int16Array(length);\n    case 'int8': return new Int8Array(length);\n    default: return new Float32Array(length);\n  }\n}\n\n/**\n * Clamps latitude and longitude values to valid WGS84 ranges.\n * Latitude is clamped to [-90, 90] and longitude to [-180, 180].\n * Logs a warning if clamping occurs.\n *\n * @param lng - Longitude value\n * @param lat - Latitude value\n * @param context - Context string for logging (e.g., \"header bounds\", \"node bounds\")\n * @returns Clamped [lng, lat] tuple\n */\nfunction clampLatLng(lng: number, lat: number, context: string = ''): [number, number] {\n  let clampedLng = lng;\n  let clampedLat = lat;\n  let wasClamped = false;\n\n  if (lat > 90) {\n    clampedLat = 90;\n    wasClamped = true;\n  } else if (lat < -90) {\n    clampedLat = -90;\n    wasClamped = true;\n  }\n\n  if (lng > 180) {\n    clampedLng = 180;\n    wasClamped = true;\n  } else if (lng < -180) {\n    clampedLng = -180;\n    wasClamped = true;\n  }\n\n  if (wasClamped && context) {\n    console.warn(\n      `EPT: Clamped transformed coordinates to valid WGS84 range${context ? ` (${context})` : ''}:`,\n      `[${lng.toFixed(6)}, ${lat.toFixed(6)}] -> [${clampedLng.toFixed(6)}, ${clampedLat.toFixed(6)}]`\n    );\n  }\n\n  return [clampedLng, clampedLat];\n}\n\n/**\n * Extracts the PROJCS section from a WKT string (handles COMPD_CS)\n */\nfunction extractProjcsFromWkt(wkt: string): string {\n  if (wkt.startsWith('COMPD_CS[')) {\n    const projcsStart = wkt.indexOf('PROJCS[');\n    if (projcsStart === -1) return wkt;\n\n    let depth = 0;\n    let projcsEnd = projcsStart;\n    for (let i = projcsStart; i < wkt.length; i++) {\n      if (wkt[i] === '[') depth++;\n      if (wkt[i] === ']') {\n        depth--;\n        if (depth === 0) {\n          projcsEnd = i + 1;\n          break;\n        }\n      }\n    }\n    return wkt.substring(projcsStart, projcsEnd);\n  }\n  return wkt;\n}\n\n/**\n * Detects if the WKT uses feet as the linear unit\n */\nfunction getVerticalUnitConversionFactor(wkt: string): number {\n  const FEET_TO_METERS = 0.3048;\n  const US_SURVEY_FEET_TO_METERS = 0.3048006096012192;\n\n  const wktLower = wkt.toLowerCase();\n\n  if (wktLower.includes('us survey foot') ||\n      wktLower.includes('us_survey_foot') ||\n      wktLower.includes('foot_us')) {\n    return US_SURVEY_FEET_TO_METERS;\n  }\n\n  const footPatterns = [\n    /unit\\s*\\[\\s*\"foot/i,\n    /unit\\s*\\[\\s*\"international foot/i,\n    /,\\s*foot\\s*\\]/i,\n    /\"ft\"/i,\n  ];\n\n  for (const pattern of footPatterns) {\n    if (pattern.test(wkt)) {\n      return FEET_TO_METERS;\n    }\n  }\n\n  return 1.0;\n}\n\n/**\n * Default options for streaming loader\n */\nconst DEFAULT_OPTIONS: Required<StreamingLoaderOptions> = {\n  pointBudget: 5_000_000,\n  maxConcurrentRequests: 8,\n  viewportDebounceMs: 100,\n  minDetailZoom: 10,\n  maxOctreeDepth: 20,\n  maxSubtreesPerViewport: 60,\n};\n\n/**\n * Streams Entwine Point Tile (EPT) data on-demand based on viewport.\n * Implements center-first priority loading and respects point budget.\n *\n * EPT format uses:\n * - ept.json for metadata\n * - ept-hierarchy/ for octree node structure\n * - ept-data/ for point data (LAZ or binary)\n */\nexport class EptStreamingLoader {\n  private _baseUrl: string;\n  private _options: Required<StreamingLoaderOptions>;\n  private _metadata: EptMetadata | null = null;\n\n  // Hierarchy cache\n  private _hierarchyCache: Map<string, EptHierarchy> = new Map();\n  private _hierarchyLoading: Set<string> = new Set();\n  private _hierarchyFailures: Map<string, number> = new Map();\n  private _subtreeRoots: Set<string> = new Set();\n  private _rootHierarchyLoaded: boolean = false;\n\n  // Node cache\n  private _nodeCache: Map<string, EptCachedNode> = new Map();\n\n  // Point data buffers\n  private _positions: Float32Array | null = null;\n  private _colors: Uint8Array | null = null;\n  private _intensities: Float32Array | null = null;\n  private _classifications: Uint8Array | null = null;\n  private _extraAttributes: ExtraPointAttributes = {};\n  private _coordinateOrigin: [number, number, number] = [0, 0, 0];\n  private _bounds: PointCloudBounds | null = null;\n\n  // Loading state\n  private _loadingQueue: EptCachedNode[] = [];\n  private _activeRequests: number = 0;\n  private _totalLoadedPoints: number = 0;\n  private _totalLoadedNodes: number = 0;\n  private _isInitialized: boolean = false;\n\n  // Coordinate transformation\n  private _transformer: ((coord: [number, number]) => [number, number]) | null = null;\n  private _verticalUnitFactor: number = 1.0;\n  private _needsTransform: boolean = false;\n\n  // Point format info\n  private _hasColor: boolean = false;\n  private _hasIntensity: boolean = false;\n  private _totalPointsInFile: number = 0;\n  private _pointByteLength: number = 0;\n  private _parsedSchema: ParsedDimension[] = [];\n\n  // Extra dimensions detection\n  private _availableDimensions: Set<string> = new Set();\n  private _dimensionsDetected: boolean = false;\n\n  // Events\n  private _eventHandlers: Map<StreamingLoaderEvent, Set<StreamingLoaderEventHandler>> = new Map();\n\n  // Batched layer update\n  private _pendingLayerUpdate: boolean = false;\n  private _updateBatchTimeout: ReturnType<typeof setTimeout> | null = null;\n  private _onPointsLoaded?: (data: PointCloudData) => void;\n  private _isResetting: boolean = false;\n\n  /**\n   * Creates a new EptStreamingLoader instance.\n   *\n   * @param eptUrl - URL to ept.json or base EPT directory\n   * @param options - Streaming options\n   */\n  constructor(eptUrl: string, options?: StreamingLoaderOptions) {\n    // Normalize base URL (remove trailing /ept.json if present)\n    this._baseUrl = eptUrl.endsWith('/ept.json')\n      ? eptUrl.slice(0, -9)\n      : eptUrl.replace(/\\/$/, '');\n    this._options = { ...DEFAULT_OPTIONS, ...options };\n  }\n\n  /**\n   * Initializes the EPT dataset - reads metadata and root hierarchy.\n   * Must be called before any loading operations.\n   *\n   * @returns Initial info about the point cloud\n   */\n  async initialize(): Promise<{\n    bounds: PointCloudBounds;\n    totalPoints: number;\n    hasRGB: boolean;\n    spacing: number;\n  }> {\n    // Fetch and parse ept.json\n    try {\n      const response = await fetch(`${this._baseUrl}/ept.json`);\n      if (!response.ok) {\n        throw new Error(`Failed to fetch ept.json: ${response.status} ${response.statusText}`);\n      }\n      this._metadata = await response.json() as EptMetadata;\n    } catch (error) {\n      if (error instanceof TypeError && error.message === 'Failed to fetch') {\n        throw new Error(\n          `Failed to fetch from URL. This is likely a CORS (Cross-Origin Resource Sharing) error. ` +\n          `The server doesn't allow requests from this origin. ` +\n          `Solutions: (1) Use a CORS proxy, or (2) Host the EPT data on a CORS-enabled server.`\n        );\n      }\n      throw error;\n    }\n\n    // Handle both 'numPoints' (standard) and 'points' (some older versions)\n    this._totalPointsInFile = this._metadata.numPoints ?? (this._metadata as unknown as { points?: number }).points ?? 0;\n\n    // Parse schema to build dimension getters\n    this._parseSchema();\n\n    // Check for color and intensity\n    this._hasColor = this._parsedSchema.some(p => p.dimension.name === 'Red');\n    this._hasIntensity = this._parsedSchema.some(p => p.dimension.name === 'Intensity');\n\n    // Setup coordinate transformation if WKT is available\n    if (this._metadata.srs?.wkt) {\n      try {\n        const wktToUse = extractProjcsFromWkt(this._metadata.srs.wkt);\n        const projConverter = proj4(wktToUse, 'EPSG:4326');\n        this._transformer = (coord: [number, number]) =>\n          projConverter.forward(coord) as [number, number];\n        this._needsTransform = true;\n        this._verticalUnitFactor = getVerticalUnitConversionFactor(this._metadata.srs.wkt);\n      } catch (e) {\n        console.warn('Failed to setup EPT coordinate transformation:', e);\n      }\n    }\n\n    // Calculate bounds from boundsConforming (tighter bounds)\n    const [minX, minY, minZ, maxX, maxY, maxZ] = this._metadata.boundsConforming;\n\n    if (this._needsTransform && this._transformer) {\n      const [rawMinLng, rawMinLat] = this._transformer([minX, minY]);\n      const [rawMaxLng, rawMaxLat] = this._transformer([maxX, maxY]);\n\n      // Validate transformed coordinates\n      if (isNaN(rawMinLng) || isNaN(rawMinLat) || isNaN(rawMaxLng) || isNaN(rawMaxLat) ||\n          !isFinite(rawMinLng) || !isFinite(rawMinLat) || !isFinite(rawMaxLng) || !isFinite(rawMaxLat)) {\n        console.error('EPT coordinate transformation produced invalid bounds:', {\n          input: { minX, minY, maxX, maxY },\n          output: { rawMinLng, rawMinLat, rawMaxLng, rawMaxLat }\n        });\n        // Fall back to source coordinates\n        this._bounds = { minX, minY, minZ, maxX, maxY, maxZ };\n        this._needsTransform = false;\n        this._transformer = null;\n      } else {\n        // Clamp transformed coordinates to valid WGS84 range\n        const [minLng, minLat] = clampLatLng(rawMinLng, rawMinLat, 'header bounds min');\n        const [maxLng, maxLat] = clampLatLng(rawMaxLng, rawMaxLat, 'header bounds max');\n\n        this._bounds = {\n          minX: Math.min(minLng, maxLng),\n          minY: Math.min(minLat, maxLat),\n          minZ: minZ * this._verticalUnitFactor,\n          maxX: Math.max(minLng, maxLng),\n          maxY: Math.max(minLat, maxLat),\n          maxZ: maxZ * this._verticalUnitFactor,\n        };\n      }\n    } else {\n      this._bounds = { minX, minY, minZ, maxX, maxY, maxZ };\n    }\n\n    // Coordinate origin is the center of the bounding box\n    this._coordinateOrigin = [\n      (this._bounds.minX + this._bounds.maxX) / 2,\n      (this._bounds.minY + this._bounds.maxY) / 2,\n      0,\n    ];\n\n    // Pre-allocate buffers\n    this._allocateBuffers();\n\n    this._isInitialized = true;\n\n    // Calculate spacing from bounds and span\n    const cubeSize = this._metadata.bounds[3] - this._metadata.bounds[0];\n    const spacing = cubeSize / this._metadata.span;\n\n    return {\n      bounds: this._bounds,\n      totalPoints: this._totalPointsInFile,\n      hasRGB: this._hasColor,\n      spacing,\n    };\n  }\n\n  /**\n   * Parses the EPT schema and builds dimension getters.\n   */\n  private _parseSchema(): void {\n    if (!this._metadata) return;\n\n    let byteOffset = 0;\n    this._parsedSchema = [];\n\n    for (const dim of this._metadata.schema) {\n      const getter = this._createDimensionGetter(dim, byteOffset);\n      this._parsedSchema.push({\n        dimension: dim,\n        byteOffset,\n        getter,\n      });\n      byteOffset += dim.size;\n    }\n\n    this._pointByteLength = byteOffset;\n  }\n\n  /**\n   * Creates a getter function for a dimension.\n   *\n   * @param dim - Dimension definition\n   * @param offset - Byte offset within point record\n   * @returns Getter function\n   */\n  private _createDimensionGetter(\n    dim: EptDimension,\n    offset: number\n  ): (dataView: DataView, pointByteOffset: number) => number {\n    const scale = dim.scale ?? 1;\n    const dimOffset = dim.offset ?? 0;\n\n    if (dim.type === 'float') {\n      if (dim.size === 4) {\n        return (dv, po) => dv.getFloat32(po + offset, true) * scale + dimOffset;\n      }\n      if (dim.size === 8) {\n        return (dv, po) => dv.getFloat64(po + offset, true) * scale + dimOffset;\n      }\n    } else if (dim.type === 'signed') {\n      if (dim.size === 1) {\n        return (dv, po) => dv.getInt8(po + offset) * scale + dimOffset;\n      }\n      if (dim.size === 2) {\n        return (dv, po) => dv.getInt16(po + offset, true) * scale + dimOffset;\n      }\n      if (dim.size === 4) {\n        return (dv, po) => dv.getInt32(po + offset, true) * scale + dimOffset;\n      }\n      if (dim.size === 8) {\n        // JavaScript doesn't have native int64, use BigInt\n        return (dv, po) => Number(dv.getBigInt64(po + offset, true)) * scale + dimOffset;\n      }\n    } else { // unsigned\n      if (dim.size === 1) {\n        return (dv, po) => dv.getUint8(po + offset) * scale + dimOffset;\n      }\n      if (dim.size === 2) {\n        return (dv, po) => dv.getUint16(po + offset, true) * scale + dimOffset;\n      }\n      if (dim.size === 4) {\n        return (dv, po) => dv.getUint32(po + offset, true) * scale + dimOffset;\n      }\n      if (dim.size === 8) {\n        return (dv, po) => Number(dv.getBigUint64(po + offset, true)) * scale + dimOffset;\n      }\n    }\n\n    return () => 0;\n  }\n\n  /**\n   * Pre-allocates buffers for the point budget.\n   */\n  private _allocateBuffers(): void {\n    const budget = this._options.pointBudget;\n    this._positions = new Float32Array(budget * 3);\n    this._intensities = new Float32Array(budget);\n    this._classifications = new Uint8Array(budget);\n    if (this._hasColor) {\n      this._colors = new Uint8Array(budget * 4);\n    }\n  }\n\n  /**\n   * Gets the octree spacing value.\n   */\n  getSpacing(): number {\n    if (!this._metadata) return 1;\n    const cubeSize = this._metadata.bounds[3] - this._metadata.bounds[0];\n    return cubeSize / this._metadata.span;\n  }\n\n  /**\n   * Parses a node key string to array format.\n   *\n   * @param key - Node key in format \"depth-x-y-z\"\n   * @returns NodeKey array [depth, x, y, z]\n   */\n  private _parseNodeKey(key: string): NodeKey {\n    const parts = key.split('-').map(Number);\n    return [parts[0], parts[1], parts[2], parts[3]];\n  }\n\n  /**\n   * Calculates the bounding box of an octree node.\n   *\n   * @param key - Node key [depth, x, y, z]\n   * @returns Node bounds in source CRS and WGS84\n   */\n  private _calculateNodeBounds(key: NodeKey): {\n    bounds: PointCloudBounds;\n    boundsWgs84: PointCloudBounds;\n  } {\n    if (!this._metadata) {\n      throw new Error('Metadata not loaded');\n    }\n\n    const [depth, x, y, z] = key;\n    const [cubeMinX, cubeMinY, cubeMinZ, cubeMaxX] = this._metadata.bounds;\n    const cubeSize = cubeMaxX - cubeMinX;\n\n    // Each level subdivides by 2 in each dimension\n    const scale = 1 / Math.pow(2, depth);\n    const nodeSize = cubeSize * scale;\n\n    const minX = cubeMinX + x * nodeSize;\n    const minY = cubeMinY + y * nodeSize;\n    const minZ = cubeMinZ + z * nodeSize;\n\n    const bounds: PointCloudBounds = {\n      minX,\n      minY,\n      minZ,\n      maxX: minX + nodeSize,\n      maxY: minY + nodeSize,\n      maxZ: minZ + nodeSize,\n    };\n\n    // Transform to WGS84 for viewport intersection\n    let boundsWgs84 = bounds;\n    if (this._needsTransform && this._transformer) {\n      const [rawSwLng, rawSwLat] = this._transformer([minX, minY]);\n      const [rawNeLng, rawNeLat] = this._transformer([minX + nodeSize, minY + nodeSize]);\n\n      // Clamp transformed coordinates to valid WGS84 range\n      const [sw_lng, sw_lat] = clampLatLng(rawSwLng, rawSwLat, 'node bounds SW');\n      const [ne_lng, ne_lat] = clampLatLng(rawNeLng, rawNeLat, 'node bounds NE');\n\n      boundsWgs84 = {\n        minX: Math.min(sw_lng, ne_lng),\n        minY: Math.min(sw_lat, ne_lat),\n        minZ: minZ * this._verticalUnitFactor,\n        maxX: Math.max(sw_lng, ne_lng),\n        maxY: Math.max(sw_lat, ne_lat),\n        maxZ: (minZ + nodeSize) * this._verticalUnitFactor,\n      };\n    }\n\n    return { bounds, boundsWgs84 };\n  }\n\n  /**\n   * Checks if a node's bounds intersect the viewport.\n   *\n   * @param nodeBounds - Node bounds in WGS84\n   * @param viewport - Current viewport info\n   * @returns True if bounds intersect\n   */\n  private _boundsIntersectsViewport(\n    nodeBounds: PointCloudBounds,\n    viewport: ViewportInfo\n  ): boolean {\n    const [west, south, east, north] = viewport.bounds;\n\n    // Add 20% buffer around viewport\n    const width = east - west;\n    const height = north - south;\n    const bufferX = width * 0.2;\n    const bufferY = height * 0.2;\n\n    const bufferedWest = west - bufferX;\n    const bufferedEast = east + bufferX;\n    const bufferedSouth = south - bufferY;\n    const bufferedNorth = north + bufferY;\n\n    return !(\n      nodeBounds.maxX < bufferedWest ||\n      nodeBounds.minX > bufferedEast ||\n      nodeBounds.maxY < bufferedSouth ||\n      nodeBounds.minY > bufferedNorth\n    );\n  }\n\n  /**\n   * Calculates node priority based on distance from viewport center.\n   *\n   * @param nodeBounds - Node bounds in WGS84\n   * @param viewport - Current viewport info\n   * @returns Priority value (lower = higher priority)\n   */\n  private _calculateNodePriority(\n    nodeBounds: PointCloudBounds,\n    viewport: ViewportInfo\n  ): number {\n    const nodeCenterX = (nodeBounds.minX + nodeBounds.maxX) / 2;\n    const nodeCenterY = (nodeBounds.minY + nodeBounds.maxY) / 2;\n\n    const dx = nodeCenterX - viewport.center[0];\n    const dy = nodeCenterY - viewport.center[1];\n\n    return Math.sqrt(dx * dx + dy * dy);\n  }\n\n  /**\n   * Loads hierarchy from a hierarchy JSON file.\n   *\n   * @param key - Hierarchy key (e.g., \"0-0-0-0\")\n   */\n  private async _loadHierarchy(key: string): Promise<void> {\n    if (this._hierarchyCache.has(key) || this._hierarchyLoading.has(key)) return;\n\n    const url = `${this._baseUrl}/ept-hierarchy/${key}.json`;\n    this._hierarchyLoading.add(key);\n    try {\n      const response = await fetch(url);\n      if (!response.ok) {\n        this._hierarchyFailures.set(key, Date.now());\n        console.warn(`Failed to load hierarchy ${key}: ${response.status}`);\n        return;\n      }\n\n      const hierarchy: EptHierarchy = await response.json();\n      this._hierarchyCache.set(key, hierarchy);\n      this._hierarchyFailures.delete(key);\n\n      // Process hierarchy entries\n      for (const [nodeKey, value] of Object.entries(hierarchy)) {\n        const keyArray = this._parseNodeKey(nodeKey);\n        const { bounds, boundsWgs84 } = this._calculateNodeBounds(keyArray);\n        const existingNode = this._nodeCache.get(nodeKey);\n\n        if (value === -1) {\n          // Subtree root - create a placeholder entry and mark for later loading\n          this._subtreeRoots.add(nodeKey);\n          if (!existingNode) {\n            this._nodeCache.set(nodeKey, {\n              key: nodeKey,\n              keyArray,\n              state: 'subtree', // Special state for subtree roots\n              pointCount: 0,\n              bounds,\n              boundsWgs84,\n            });\n          }\n        } else if (value > 0) {\n          if (existingNode?.state === 'subtree') {\n            // Subtree root entries appear again in their own hierarchy file\n            existingNode.state = 'pending';\n            existingNode.pointCount = value;\n            existingNode.bounds = bounds;\n            existingNode.boundsWgs84 = boundsWgs84;\n          } else if (!existingNode) {\n            // Create node cache entry\n            this._nodeCache.set(nodeKey, {\n              key: nodeKey,\n              keyArray,\n              state: 'pending',\n              pointCount: value,\n              bounds,\n              boundsWgs84,\n            });\n          }\n        }\n      }\n    } catch (error) {\n      this._hierarchyFailures.set(key, Date.now());\n      console.warn(`Error loading hierarchy ${key}:`, error);\n    } finally {\n      this._hierarchyLoading.delete(key);\n    }\n  }\n\n  /**\n   * Ensures root hierarchy is loaded.\n   * Subtree hierarchies are loaded on-demand in selectNodesForViewport.\n   */\n  private async _ensureHierarchyLoaded(): Promise<void> {\n    // Load root hierarchy first\n    if (!this._rootHierarchyLoaded) {\n      await this._loadHierarchy('0-0-0-0');\n      this._rootHierarchyLoaded = true;\n    }\n    // Note: Subtree hierarchies are loaded on-demand when they intersect the viewport\n  }\n\n  /**\n   * Finds nodes that intersect the viewport and should be loaded.\n   *\n   * @param viewport - Current viewport information\n   * @returns Sorted array of nodes to load (by priority)\n   */\n  async selectNodesForViewport(viewport: ViewportInfo): Promise<EptCachedNode[]> {\n    if (!this._isInitialized) {\n      throw new Error('EptStreamingLoader not initialized. Call initialize() first.');\n    }\n\n    // Ensure root hierarchy is loaded\n    await this._ensureHierarchyLoaded();\n\n    const targetDepth = viewport.targetDepth;\n\n    // Load subtree hierarchies in multiple passes to discover nested subtrees\n    // Each pass may reveal new subtrees that need to be loaded\n    const maxSubtreesToLoad = Math.max(1, this._options.maxSubtreesPerViewport);\n    const loadedSubtrees = new Set<string>();\n    const maxPasses = 3;\n    const now = Date.now();\n    const hierarchyRetryCooldownMs = 5000;\n\n    for (let pass = 0; pass < maxPasses; pass++) {\n      // Find subtrees that intersect viewport and haven't been loaded yet\n      const subtreeCandidates: Array<{ key: string; priority: number }> = [];\n      for (const [, node] of this._nodeCache) {\n        const depth = node.keyArray[0];\n\n        // Only check subtrees within our target depth range\n        if (depth > targetDepth + 3) continue;\n\n        // Check if this subtree intersects viewport and hasn't been processed\n        const lastFailure = this._hierarchyFailures.get(node.key);\n        if (node.state === 'subtree' &&\n            !this._hierarchyCache.has(node.key) &&\n            !this._hierarchyLoading.has(node.key) &&\n            !loadedSubtrees.has(node.key) &&\n            (!lastFailure || (now - lastFailure) >= hierarchyRetryCooldownMs) &&\n            this._boundsIntersectsViewport(node.boundsWgs84, viewport)) {\n          const priority = this._calculateNodePriority(node.boundsWgs84, viewport);\n          subtreeCandidates.push({ key: node.key, priority });\n        }\n      }\n\n      // No more subtrees to load - done\n      if (subtreeCandidates.length === 0) break;\n\n      // Sort by priority (closest to center first) and limit per pass\n      subtreeCandidates.sort((a, b) => a.priority - b.priority);\n      const perPassLimit = Math.ceil(maxSubtreesToLoad / maxPasses);\n      const subtreesToProcess = subtreeCandidates.slice(0, perPassLimit).map(s => s.key);\n\n      // Fire requests in parallel\n      await Promise.all(subtreesToProcess.map(subtreeKey => this._loadHierarchy(subtreeKey)));\n      subtreesToProcess.forEach(key => loadedSubtrees.add(key));\n\n      // If we've loaded enough subtrees total, stop\n      if (loadedSubtrees.size >= maxSubtreesToLoad) break;\n    }\n\n    // Second pass: collect loadable nodes\n    const nodesToLoad: EptCachedNode[] = [];\n    const retryCooldownMs = 5000; // Wait 5 seconds before retrying failed nodes\n\n    for (const [, node] of this._nodeCache) {\n      const depth = node.keyArray[0];\n\n      // Skip subtree placeholders (they have no point data)\n      if (node.state === 'subtree') continue;\n\n      // Skip permanently failed nodes\n      if (node.state === 'error') continue;\n\n      // Skip nodes that recently failed (cooldown period)\n      if (node.lastFailedAt && (now - node.lastFailedAt) < retryCooldownMs) {\n        continue;\n      }\n\n      // Skip nodes deeper than we need\n      // Use +2 to allow loading slightly more detailed nodes for better coverage\n      if (depth > targetDepth + 2) continue;\n\n      // Check viewport intersection\n      if (!this._boundsIntersectsViewport(node.boundsWgs84, viewport)) {\n        continue;\n      }\n\n      // Add to load list if not already loaded/loading\n      if (node.state !== 'loaded' && node.state !== 'loading') {\n        const distPriority = this._calculateNodePriority(node.boundsWgs84, viewport);\n        node.priority = distPriority - (depth * 0.0001);\n        nodesToLoad.push(node);\n      }\n    }\n\n    // Sort by priority (center-first)\n    nodesToLoad.sort((a, b) => (a.priority || Infinity) - (b.priority || Infinity));\n\n    return nodesToLoad;\n  }\n\n  /**\n   * Queues a node for loading.\n   *\n   * @param node - Node to queue\n   */\n  queueNode(node: EptCachedNode): void {\n    if (node.state !== 'pending') return;\n    if (this._loadingQueue.find((n) => n.key === node.key)) return;\n\n    this._loadingQueue.push(node);\n    this._loadingQueue.sort((a, b) => (a.priority || Infinity) - (b.priority || Infinity));\n  }\n\n  /**\n   * Loads nodes from the queue, respecting point budget and concurrency limits.\n   */\n  async loadQueuedNodes(): Promise<void> {\n    while (\n      this._loadingQueue.length > 0 &&\n      this._activeRequests < this._options.maxConcurrentRequests &&\n      this._totalLoadedPoints < this._options.pointBudget\n    ) {\n      const node = this._loadingQueue.shift()!;\n\n      if (this._totalLoadedPoints + node.pointCount > this._options.pointBudget) {\n        this._emit('budgetreached', this._getProgressEvent());\n        break;\n      }\n\n      this._loadNode(node);\n    }\n  }\n\n  /**\n   * Gets the data URL for a node.\n   *\n   * @param key - Node key\n   * @returns URL to the data file\n   */\n  private _getDataUrl(key: string): string {\n    const ext = this._metadata?.dataType === 'binary' ? 'bin' : 'laz';\n    return `${this._baseUrl}/ept-data/${key}.${ext}`;\n  }\n\n  /**\n   * Loads a single node's point data.\n   *\n   * @param node - Node to load\n   */\n  private async _loadNode(node: EptCachedNode): Promise<void> {\n    if (node.state === 'loaded' || node.state === 'loading') return;\n\n    node.state = 'loading';\n    this._activeRequests++;\n\n    // Reserve buffer space before async operations\n    const startIndex = this._totalLoadedPoints;\n    node.bufferStartIndex = startIndex;\n    const reservedPoints = node.pointCount;\n    this._totalLoadedPoints += reservedPoints;\n\n    try {\n      const dataUrl = this._getDataUrl(node.key);\n\n      if (this._metadata?.dataType === 'laszip') {\n        // Use @loaders.gl/las to load and decompress LAZ files\n        await this._loadLazNode(dataUrl, node, startIndex);\n      } else {\n        // Binary format - load and parse directly\n        await this._loadBinaryNode(dataUrl, node, startIndex);\n      }\n\n      node.state = 'loaded';\n      this._totalLoadedNodes++;\n\n      this._emit('nodeloaded', node);\n      this._emit('progress', this._getProgressEvent());\n\n      this._scheduleLayerUpdate();\n    } catch (error) {\n      // Release the reserved buffer space on failure\n      this._totalLoadedPoints -= reservedPoints;\n      node.bufferStartIndex = undefined;\n\n      // Track retry count and set cooldown timestamp\n      node.retryCount = (node.retryCount || 0) + 1;\n      node.lastFailedAt = Date.now();\n      const maxRetries = 3;\n\n      if (node.retryCount < maxRetries) {\n        // Mark as pending to allow retry after cooldown\n        node.state = 'pending';\n        node.error = error instanceof Error ? error.message : String(error);\n\n        // Only log first failure\n        if (node.retryCount === 1) {\n          console.warn(`Failed to load EPT node ${node.key} (will retry): ${node.error}`);\n        }\n      } else {\n        // Max retries reached, mark as permanently failed\n        node.state = 'error';\n        node.error = error instanceof Error ? error.message : String(error);\n        console.warn(`Failed to load EPT node ${node.key} after ${maxRetries} attempts: ${node.error}`);\n      }\n    } finally {\n      this._activeRequests--;\n      this.loadQueuedNodes();\n    }\n  }\n\n  /**\n   * Loads a LAZ node using @loaders.gl/las.\n   *\n   * @param url - URL to the LAZ file\n   * @param _node - Node being loaded (unused, point count from file)\n   * @param startIndex - Starting index in buffers\n   */\n  private async _loadLazNode(\n    url: string,\n    _node: EptCachedNode,\n    startIndex: number\n  ): Promise<void> {\n    // Load LAZ file using loaders.gl\n    const data = await load(url, LASLoader, {\n      las: {\n        shape: 'mesh',\n        fp64: false,\n      },\n      worker: false,\n    }) as any;\n\n    // Get point data from the loaded result (loaders.gl mesh format)\n    const positionAttr = data.attributes?.POSITION || data.attributes?.positions;\n    const positions = positionAttr?.value as Float64Array | Float32Array | undefined;\n    const colorAttr = data.attributes?.COLOR_0 || data.attributes?.colors;\n    const colors = colorAttr?.value as Uint8Array | undefined;\n\n    // loaderData contains additional attributes\n    const loaderData = data.loaderData || {};\n\n    if (!positions) {\n      throw new Error('No position data in LAZ file');\n    }\n\n    const actualPointCount = positions.length / 3;\n\n    // Detect extra dimensions on first node\n    if (!this._dimensionsDetected) {\n      const availableDims = Object.keys(data.attributes || {});\n      for (const dimName of availableDims) {\n        if (!CORE_DIMENSIONS.has(dimName) && dimName !== 'POSITION' && dimName !== 'COLOR_0' && dimName !== 'positions' && dimName !== 'colors') {\n          this._availableDimensions.add(dimName);\n          const config = DIMENSION_CONFIGS[dimName] || { arrayType: 'float32' };\n          this._extraAttributes[dimName] = createAttributeArray(\n            config.arrayType,\n            this._options.pointBudget\n          );\n        }\n      }\n      this._dimensionsDetected = true;\n    }\n\n    // Get intensity and classification arrays if available\n    const intensityAttr = data.attributes?.intensity || loaderData.intensity;\n    const intensity = intensityAttr?.value as Uint16Array | undefined;\n    const classificationAttr = data.attributes?.classification || loaderData.classification;\n    const classification = classificationAttr?.value as Uint8Array | undefined;\n\n    // Copy point data to our buffers\n    for (let i = 0; i < actualPointCount; i++) {\n      const pointIndex = startIndex + i;\n      if (pointIndex >= this._options.pointBudget) break;\n\n      const x = positions[i * 3];\n      const y = positions[i * 3 + 1];\n      const z = positions[i * 3 + 2];\n\n      // Transform coordinates to WGS84 if needed\n      if (this._needsTransform && this._transformer) {\n        const [rawLng, rawLat] = this._transformer([x, y]);\n        // Clamp to valid WGS84 range (silently - no logging for individual points to avoid console spam)\n        const [lng, lat] = clampLatLng(rawLng, rawLat, '');\n        this._positions![pointIndex * 3] = lng - this._coordinateOrigin[0];\n        this._positions![pointIndex * 3 + 1] = lat - this._coordinateOrigin[1];\n        this._positions![pointIndex * 3 + 2] = z * this._verticalUnitFactor;\n      } else {\n        this._positions![pointIndex * 3] = x - this._coordinateOrigin[0];\n        this._positions![pointIndex * 3 + 1] = y - this._coordinateOrigin[1];\n        this._positions![pointIndex * 3 + 2] = z;\n      }\n\n      // Intensity (normalize to 0-1)\n      if (intensity) {\n        this._intensities![pointIndex] = intensity[i] / 65535;\n      }\n\n      // Classification\n      if (classification) {\n        this._classifications![pointIndex] = classification[i];\n      }\n\n      // Colors\n      if (this._colors && colors) {\n        // loaders.gl returns RGBA colors\n        const colorStride = colors.length / actualPointCount;\n        const colorOffset = i * colorStride;\n        this._colors[pointIndex * 4] = colors[colorOffset];\n        this._colors[pointIndex * 4 + 1] = colors[colorOffset + 1];\n        this._colors[pointIndex * 4 + 2] = colors[colorOffset + 2];\n        this._colors[pointIndex * 4 + 3] = 255;\n      }\n    }\n  }\n\n  /**\n   * Loads a binary node.\n   *\n   * @param url - URL to the binary file\n   * @param node - Node being loaded\n   * @param startIndex - Starting index in buffers\n   */\n  private async _loadBinaryNode(\n    url: string,\n    node: EptCachedNode,\n    startIndex: number\n  ): Promise<void> {\n    const response = await fetch(url);\n    if (!response.ok) {\n      throw new Error(`Failed to fetch binary data: ${response.status}`);\n    }\n\n    const buffer = await response.arrayBuffer();\n    const dataView = new DataView(buffer);\n\n    // Find dimension getters\n    const xGetter = this._parsedSchema.find(p => p.dimension.name === 'X')?.getter;\n    const yGetter = this._parsedSchema.find(p => p.dimension.name === 'Y')?.getter;\n    const zGetter = this._parsedSchema.find(p => p.dimension.name === 'Z')?.getter;\n    const intensityGetter = this._parsedSchema.find(p => p.dimension.name === 'Intensity')?.getter;\n    const classGetter = this._parsedSchema.find(p => p.dimension.name === 'Classification')?.getter;\n    const redGetter = this._hasColor ? this._parsedSchema.find(p => p.dimension.name === 'Red')?.getter : null;\n    const greenGetter = this._hasColor ? this._parsedSchema.find(p => p.dimension.name === 'Green')?.getter : null;\n    const blueGetter = this._hasColor ? this._parsedSchema.find(p => p.dimension.name === 'Blue')?.getter : null;\n\n    if (!xGetter || !yGetter || !zGetter) {\n      throw new Error('Missing required X, Y, Z dimensions in EPT schema');\n    }\n\n    // Detect extra dimensions on first node\n    if (!this._dimensionsDetected) {\n      for (const parsed of this._parsedSchema) {\n        const dimName = parsed.dimension.name;\n        if (!CORE_DIMENSIONS.has(dimName)) {\n          this._availableDimensions.add(dimName);\n          const config = DIMENSION_CONFIGS[dimName] || { arrayType: 'float32' };\n          this._extraAttributes[dimName] = createAttributeArray(\n            config.arrayType,\n            this._options.pointBudget\n          );\n        }\n      }\n      this._dimensionsDetected = true;\n    }\n\n    // Build getters for extra dimensions\n    const extraGetters: Map<string, ParsedDimension> = new Map();\n    for (const dimName of this._availableDimensions) {\n      const parsed = this._parsedSchema.find(p => p.dimension.name === dimName);\n      if (parsed) {\n        extraGetters.set(dimName, parsed);\n      }\n    }\n\n    for (let i = 0; i < node.pointCount; i++) {\n      const pointIndex = startIndex + i;\n      if (pointIndex >= this._options.pointBudget) break;\n\n      const byteOffset = i * this._pointByteLength;\n\n      const x = xGetter(dataView, byteOffset);\n      const y = yGetter(dataView, byteOffset);\n      const z = zGetter(dataView, byteOffset);\n\n      // Transform coordinates to WGS84 if needed\n      if (this._needsTransform && this._transformer) {\n        const [rawLng, rawLat] = this._transformer([x, y]);\n        // Clamp to valid WGS84 range (silently - no logging for individual points to avoid console spam)\n        const [lng, lat] = clampLatLng(rawLng, rawLat, '');\n        this._positions![pointIndex * 3] = lng - this._coordinateOrigin[0];\n        this._positions![pointIndex * 3 + 1] = lat - this._coordinateOrigin[1];\n        this._positions![pointIndex * 3 + 2] = z * this._verticalUnitFactor;\n      } else {\n        this._positions![pointIndex * 3] = x - this._coordinateOrigin[0];\n        this._positions![pointIndex * 3 + 1] = y - this._coordinateOrigin[1];\n        this._positions![pointIndex * 3 + 2] = z;\n      }\n\n      // Intensity (normalize to 0-1)\n      if (intensityGetter) {\n        this._intensities![pointIndex] = intensityGetter(dataView, byteOffset) / 65535;\n      }\n\n      // Classification\n      if (classGetter) {\n        this._classifications![pointIndex] = classGetter(dataView, byteOffset);\n      }\n\n      // Color (if available)\n      if (this._colors && redGetter && greenGetter && blueGetter) {\n        // EPT colors can be 8-bit or 16-bit depending on schema\n        const redDim = this._parsedSchema.find(p => p.dimension.name === 'Red')?.dimension;\n        const is16Bit = redDim?.size === 2;\n\n        if (is16Bit) {\n          this._colors[pointIndex * 4] = redGetter(dataView, byteOffset) >> 8;\n          this._colors[pointIndex * 4 + 1] = greenGetter(dataView, byteOffset) >> 8;\n          this._colors[pointIndex * 4 + 2] = blueGetter(dataView, byteOffset) >> 8;\n        } else {\n          this._colors[pointIndex * 4] = redGetter(dataView, byteOffset);\n          this._colors[pointIndex * 4 + 1] = greenGetter(dataView, byteOffset);\n          this._colors[pointIndex * 4 + 2] = blueGetter(dataView, byteOffset);\n        }\n        this._colors[pointIndex * 4 + 3] = 255;\n      }\n\n      // Extra attributes\n      for (const [dimName, parsed] of extraGetters) {\n        const arr = this._extraAttributes[dimName];\n        if (arr) {\n          arr[pointIndex] = parsed.getter(dataView, byteOffset);\n        }\n      }\n    }\n  }\n\n  /**\n   * Schedules a batched layer update.\n   */\n  private _scheduleLayerUpdate(): void {\n    if (this._pendingLayerUpdate) return;\n    this._pendingLayerUpdate = true;\n\n    this._updateBatchTimeout = setTimeout(() => {\n      this._performLayerUpdate();\n      this._pendingLayerUpdate = false;\n      this._updateBatchTimeout = null;\n    }, 100);\n  }\n\n  /**\n   * Performs the layer update callback.\n   */\n  private _performLayerUpdate(): void {\n    if (this._onPointsLoaded) {\n      const data = this.getLoadedPointCloudData();\n      this._onPointsLoaded(data);\n    }\n  }\n\n  /**\n   * Sets the callback for when points are loaded.\n   *\n   * @param callback - Function to call with updated point cloud data\n   */\n  setOnPointsLoaded(callback: (data: PointCloudData) => void): void {\n    this._onPointsLoaded = callback;\n  }\n\n  /**\n   * Gets the current loaded point cloud data for rendering.\n   *\n   * @returns Current loaded data\n   */\n  getLoadedPointCloudData(): PointCloudData {\n    const pointCount = this._totalLoadedPoints;\n\n    // Build trimmed extra attributes\n    const trimmedExtraAttributes: ExtraPointAttributes = {};\n    for (const [name, arr] of Object.entries(this._extraAttributes)) {\n      trimmedExtraAttributes[name] = arr.subarray(0, pointCount) as AttributeArray;\n    }\n\n    return {\n      positions: this._positions!.subarray(0, pointCount * 3),\n      coordinateOrigin: this._coordinateOrigin,\n      colors: this._colors?.subarray(0, pointCount * 4),\n      intensities: this._intensities!.subarray(0, pointCount),\n      classifications: this._classifications!.subarray(0, pointCount),\n      extraAttributes:\n        Object.keys(trimmedExtraAttributes).length > 0\n          ? trimmedExtraAttributes\n          : undefined,\n      pointCount,\n      bounds: this._bounds!,\n      hasRGB: this._hasColor,\n      hasIntensity: this._hasIntensity,\n      hasClassification: true,\n      wkt: this._metadata?.srs?.wkt,\n    };\n  }\n\n  /**\n   * Checks whether there are subtree hierarchies still pending for the viewport.\n   *\n   * @param viewport - Current viewport information\n   * @returns True if more subtree hierarchies should be loaded\n   */\n  hasPendingSubtrees(viewport: ViewportInfo): boolean {\n    if (!this._isInitialized) return false;\n\n    const targetDepth = viewport.targetDepth;\n    const now = Date.now();\n    const hierarchyRetryCooldownMs = 5000;\n\n    for (const [, node] of this._nodeCache) {\n      const depth = node.keyArray[0];\n      if (depth > targetDepth + 3) continue;\n\n      const lastFailure = this._hierarchyFailures.get(node.key);\n      if (node.state === 'subtree' &&\n          !this._hierarchyCache.has(node.key) &&\n          !this._hierarchyLoading.has(node.key) &&\n          (!lastFailure || (now - lastFailure) >= hierarchyRetryCooldownMs) &&\n          this._boundsIntersectsViewport(node.boundsWgs84, viewport)) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  /**\n   * Gets the current streaming progress.\n   */\n  private _getProgressEvent(): StreamingProgressEvent {\n    return {\n      totalNodesInView: this._nodeCache.size,\n      loadedNodes: this._totalLoadedNodes,\n      loadedPoints: this._totalLoadedPoints,\n      pointBudget: this._options.pointBudget,\n      isLoading: this._activeRequests > 0 || this._loadingQueue.length > 0,\n      queueSize: this._loadingQueue.length,\n    };\n  }\n\n  /**\n   * Registers an event handler.\n   *\n   * @param event - Event type\n   * @param handler - Handler function\n   */\n  on(event: StreamingLoaderEvent, handler: StreamingLoaderEventHandler): void {\n    if (!this._eventHandlers.has(event)) {\n      this._eventHandlers.set(event, new Set());\n    }\n    this._eventHandlers.get(event)!.add(handler);\n  }\n\n  /**\n   * Removes an event handler.\n   *\n   * @param event - Event type\n   * @param handler - Handler function\n   */\n  off(event: StreamingLoaderEvent, handler: StreamingLoaderEventHandler): void {\n    this._eventHandlers.get(event)?.delete(handler);\n  }\n\n  /**\n   * Emits an event to all registered handlers.\n   *\n   * @param event - Event type\n   * @param data - Event data\n   */\n  private _emit(\n    event: StreamingLoaderEvent,\n    data: StreamingProgressEvent | EptCachedNode | Error\n  ): void {\n    const handlers = this._eventHandlers.get(event);\n    if (handlers) {\n      for (const handler of handlers) {\n        // Cast EptCachedNode to unknown first to satisfy the handler type\n        // (handlers don't use COPC-specific fields like pointDataOffset)\n        handler(event, data as Parameters<StreamingLoaderEventHandler>[1]);\n      }\n    }\n  }\n\n  /**\n   * Gets the total number of loaded points.\n   */\n  getLoadedPointCount(): number {\n    return this._totalLoadedPoints;\n  }\n\n  /**\n   * Gets the current point budget.\n   */\n  getPointBudget(): number {\n    return this._options.pointBudget;\n  }\n\n  /**\n   * Checks if any nodes intersecting the viewport have already been loaded.\n   *\n   * @param viewport - Current viewport information\n   * @returns True if viewport has loaded coverage\n   */\n  hasLoadedNodesInViewport(viewport: ViewportInfo, minDepth: number = 0): boolean {\n    for (const [, node] of this._nodeCache) {\n      if (node.state !== 'loaded') continue;\n      if (node.keyArray[0] < minDepth) continue;\n      if (this._boundsIntersectsViewport(node.boundsWgs84, viewport)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Estimates viewport coverage ratio by loaded nodes.\n   * Returns a value from 0 to 1 representing how much of the viewport\n   * is covered by loaded tiles.\n   *\n   * @param viewport - Current viewport information\n   * @param minDepth - Minimum octree depth to consider\n   * @returns Coverage ratio (0-1)\n   */\n  getViewportCoverageRatio(viewport: ViewportInfo, minDepth: number = 0): number {\n    const [west, south, east, north] = viewport.bounds;\n    const viewportArea = (east - west) * (north - south);\n    if (viewportArea <= 0) return 0;\n\n    let coveredArea = 0;\n\n    for (const [, node] of this._nodeCache) {\n      if (node.state !== 'loaded') continue;\n      if (node.keyArray[0] < minDepth) continue;\n\n      // Calculate intersection area with viewport\n      const nodeWest = node.boundsWgs84.minX;\n      const nodeSouth = node.boundsWgs84.minY;\n      const nodeEast = node.boundsWgs84.maxX;\n      const nodeNorth = node.boundsWgs84.maxY;\n\n      const intersectWest = Math.max(west, nodeWest);\n      const intersectEast = Math.min(east, nodeEast);\n      const intersectSouth = Math.max(south, nodeSouth);\n      const intersectNorth = Math.min(north, nodeNorth);\n\n      if (intersectWest < intersectEast && intersectSouth < intersectNorth) {\n        const intersectArea = (intersectEast - intersectWest) * (intersectNorth - intersectSouth);\n        coveredArea += intersectArea;\n      }\n    }\n\n    // Cap at 1.0 (overlapping nodes can cause > 1)\n    return Math.min(1.0, coveredArea / viewportArea);\n  }\n\n  /**\n   * Gets the total number of loaded nodes.\n   */\n  getLoadedNodeCount(): number {\n    return this._totalLoadedNodes;\n  }\n\n  /**\n   * Checks if the loader is currently loading.\n   */\n  isLoading(): boolean {\n    return this._activeRequests > 0 || this._loadingQueue.length > 0;\n  }\n\n  /**\n   * Removes queued nodes that are outside the current viewport and re-sorts priorities.\n   *\n   * @param viewport - Current viewport information\n   */\n  pruneQueueForViewport(viewport: ViewportInfo): void {\n    if (this._loadingQueue.length === 0) return;\n\n    this._loadingQueue = this._loadingQueue.filter((node) =>\n      this._boundsIntersectsViewport(node.boundsWgs84, viewport)\n    );\n\n    for (const node of this._loadingQueue) {\n      const distPriority = this._calculateNodePriority(node.boundsWgs84, viewport);\n      const depth = node.keyArray[0];\n      node.priority = distPriority - (depth * 0.0001);\n    }\n\n    this._loadingQueue.sort((a, b) => (a.priority || Infinity) - (b.priority || Infinity));\n  }\n\n  /**\n   * Resets loaded node data to allow loading a new area.\n   * Keeps hierarchy cache intact but clears loaded points and node states.\n   *\n   * @returns True if reset occurred\n   */\n  resetLoadedData(): boolean {\n    if (this._activeRequests > 0 || this._isResetting) return false;\n    this._isResetting = true;\n\n    this._loadingQueue = [];\n    this._totalLoadedPoints = 0;\n    this._totalLoadedNodes = 0;\n\n    for (const [, node] of this._nodeCache) {\n      if (node.state === 'loaded' || node.state === 'loading' || node.state === 'error') {\n        node.state = 'pending';\n        node.bufferStartIndex = undefined;\n        node.error = undefined;\n        node.retryCount = undefined;\n        node.lastFailedAt = undefined;\n      }\n    }\n\n    // Force a render update so old points are cleared.\n    this._scheduleLayerUpdate();\n\n    this._isResetting = false;\n    return true;\n  }\n\n  /**\n   * Gets the EPT metadata.\n   */\n  getMetadata(): EptMetadata | null {\n    return this._metadata;\n  }\n\n  /**\n   * Gets the extended EPT metadata for the metadata panel.\n   *\n   * @returns Extended EPT metadata or undefined if not initialized\n   */\n  getExtendedMetadata(): import('../core/types').EptExtendedMetadata | undefined {\n    if (!this._metadata) return undefined;\n\n    const meta = this._metadata;\n\n    // Build dimension info from EPT schema\n    const dimensions: import('../core/types').DimensionInfo[] = [];\n    if (meta.schema) {\n      for (const dim of meta.schema) {\n        dimensions.push({\n          name: dim.name,\n          type: dim.type,\n          size: dim.size,\n          scale: dim.scale,\n          offset: dim.offset,\n        });\n      }\n    }\n\n    // Calculate nominal point spacing from bbox area: sqrt(area / pointCount)\n    let pointSpacing: number | undefined;\n    if (meta.bounds && meta.bounds.length >= 6 && this._totalPointsInFile > 0) {\n      const width = meta.bounds[3] - meta.bounds[0];\n      const height = meta.bounds[4] - meta.bounds[1];\n      const area = width * height;\n      if (area > 0) {\n        const spacingInSourceUnits = Math.sqrt(area / this._totalPointsInFile);\n        pointSpacing = spacingInSourceUnits * this._verticalUnitFactor;\n      }\n    }\n\n    return {\n      version: meta.version || '1.0',\n      dataType: meta.dataType || 'laszip',\n      hierarchyType: meta.hierarchyType || 'json',\n      span: meta.span || 128,\n      nativeBounds: meta.bounds || [],\n      srs: meta.srs ? {\n        authority: meta.srs.authority,\n        horizontal: meta.srs.horizontal,\n        vertical: meta.srs.vertical,\n        wkt: meta.srs.wkt,\n      } : undefined,\n      dimensions,\n      pointSpacing,\n    };\n  }\n\n  /**\n   * Destroys the streaming loader and cleans up resources.\n   */\n  destroy(): void {\n    if (this._updateBatchTimeout) {\n      clearTimeout(this._updateBatchTimeout);\n    }\n\n    this._loadingQueue = [];\n    this._nodeCache.clear();\n    this._hierarchyCache.clear();\n    this._hierarchyLoading.clear();\n    this._hierarchyFailures.clear();\n    this._subtreeRoots.clear();\n    this._eventHandlers.clear();\n\n    this._positions = null;\n    this._colors = null;\n    this._intensities = null;\n    this._classifications = null;\n    this._extraAttributes = {};\n  }\n}\n","/**\n * Clamps a value between a minimum and maximum.\n *\n * @param value - The value to clamp\n * @param min - The minimum allowed value\n * @param max - The maximum allowed value\n * @returns The clamped value\n */\nexport function clamp(value: number, min: number, max: number): number {\n  return Math.min(Math.max(value, min), max);\n}\n\n/**\n * Formats a numeric value with appropriate decimal places based on step size.\n *\n * @param value - The value to format\n * @param step - The step size to determine decimal places\n * @returns The formatted value as a string\n */\nexport function formatNumericValue(value: number, step: number): string {\n  if (step === 0) return value.toString();\n  const decimals = Math.max(0, -Math.floor(Math.log10(step)));\n  return value.toFixed(decimals);\n}\n\n/**\n * Generates a unique ID string.\n *\n * @param prefix - Optional prefix for the ID\n * @returns A unique ID string\n */\nexport function generateId(prefix?: string): string {\n  const id = Math.random().toString(36).substring(2, 9);\n  return prefix ? `${prefix}-${id}` : id;\n}\n\n/**\n * Debounces a function call.\n *\n * @param fn - The function to debounce\n * @param delay - The delay in milliseconds\n * @returns A debounced version of the function\n */\nexport function debounce<T extends (...args: unknown[]) => void>(\n  fn: T,\n  delay: number\n): (...args: Parameters<T>) => void {\n  let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n  return (...args: Parameters<T>) => {\n    if (timeoutId) {\n      clearTimeout(timeoutId);\n    }\n    timeoutId = setTimeout(() => {\n      fn(...args);\n      timeoutId = null;\n    }, delay);\n  };\n}\n\n/**\n * Throttles a function call.\n *\n * @param fn - The function to throttle\n * @param limit - The minimum time between calls in milliseconds\n * @returns A throttled version of the function\n */\nexport function throttle<T extends (...args: unknown[]) => void>(\n  fn: T,\n  limit: number\n): (...args: Parameters<T>) => void {\n  let inThrottle = false;\n\n  return (...args: Parameters<T>) => {\n    if (!inThrottle) {\n      fn(...args);\n      inThrottle = true;\n      setTimeout(() => {\n        inThrottle = false;\n      }, limit);\n    }\n  };\n}\n\n/**\n * Creates a CSS class string from an object of class names.\n *\n * @param classes - Object with class names as keys and boolean values\n * @returns A space-separated string of class names\n */\nexport function classNames(classes: Record<string, boolean>): string {\n  return Object.entries(classes)\n    .filter(([, value]) => value)\n    .map(([key]) => key)\n    .join(' ');\n}\n\n/**\n * Formats a number with thousand separators.\n *\n * @param num - The number to format\n * @returns Formatted string with commas\n */\nexport function formatNumber(num: number): string {\n  return num.toLocaleString();\n}\n\n/**\n * Formats bytes into human-readable size.\n *\n * @param bytes - Number of bytes\n * @returns Human-readable size string\n */\nexport function formatBytes(bytes: number): string {\n  if (bytes === 0) return '0 B';\n  const k = 1024;\n  const sizes = ['B', 'KB', 'MB', 'GB'];\n  const i = Math.floor(Math.log(bytes) / Math.log(k));\n  return `${parseFloat((bytes / Math.pow(k, i)).toFixed(1))} ${sizes[i]}`;\n}\n\n/**\n * Extracts filename from a path or URL.\n *\n * @param path - File path or URL\n * @returns Filename without path\n */\nexport function getFilename(path: string): string {\n  // Handle both Unix and Windows path separators\n  const normalized = path.replace(/\\\\/g, '/');\n  return normalized.split('/').pop()?.split('?')[0] || 'unknown';\n}\n\n/**\n * Computes the percentile value of a Float32Array using the linear interpolation method.\n * Uses sampling for large arrays to improve performance.\n *\n * @param arr - The Float32Array to compute the percentile from\n * @param percentile - The percentile to compute (0-100)\n * @param maxSamples - Maximum number of samples to use for large arrays (default: 100000)\n * @returns The value at the given percentile\n */\nexport function computePercentile(\n  arr: Float32Array,\n  percentile: number,\n  maxSamples: number = 100000\n): number {\n  if (arr.length === 0) return 0;\n  if (arr.length === 1) return arr[0];\n\n  // Sample the array if it's too large\n  let values: number[];\n  if (arr.length > maxSamples) {\n    // Stratified sampling for better representation\n    const step = arr.length / maxSamples;\n    values = [];\n    for (let i = 0; i < maxSamples; i++) {\n      const idx = Math.floor(i * step);\n      values.push(arr[idx]);\n    }\n  } else {\n    values = Array.from(arr);\n  }\n\n  // Sort the sampled values\n  values.sort((a, b) => a - b);\n\n  // Compute the index for the percentile\n  const p = percentile / 100;\n  const index = p * (values.length - 1);\n  const lower = Math.floor(index);\n  const upper = Math.ceil(index);\n\n  if (lower === upper) {\n    return values[lower];\n  }\n\n  // Linear interpolation between the two closest values\n  const fraction = index - lower;\n  return values[lower] * (1 - fraction) + values[upper] * fraction;\n}\n\n/**\n * Computes percentile bounds (e.g., 2nd and 98th percentile) for a Float32Array.\n *\n * @param arr - The Float32Array to compute bounds from\n * @param lowerPercentile - Lower percentile (default: 2)\n * @param upperPercentile - Upper percentile (default: 98)\n * @returns Object with min and max values at the specified percentiles\n */\nexport function computePercentileBounds(\n  arr: Float32Array,\n  lowerPercentile: number = 2,\n  upperPercentile: number = 98\n): { min: number; max: number } {\n  if (arr.length === 0) return { min: 0, max: 1 };\n\n  const min = computePercentile(arr, lowerPercentile);\n  const max = computePercentile(arr, upperPercentile);\n\n  // Ensure we have a valid range\n  if (min === max) {\n    return { min: min - 0.5, max: max + 0.5 };\n  }\n\n  return { min, max };\n}\n\n","import type { ColorRamp } from './types';\n\n/**\n * Available colormap names (matplotlib-style)\n */\nexport type ColormapName =\n  | 'viridis'\n  | 'plasma'\n  | 'inferno'\n  | 'magma'\n  | 'cividis'\n  | 'turbo'\n  | 'jet'\n  | 'rainbow'\n  | 'terrain'\n  | 'coolwarm'\n  | 'gray';\n\n/**\n * Viridis colormap - perceptually uniform, colorblind-friendly (default)\n */\nconst VIRIDIS: ColorRamp = [\n  [68, 1, 84],\n  [72, 40, 120],\n  [62, 74, 137],\n  [49, 104, 142],\n  [38, 130, 142],\n  [31, 158, 137],\n  [53, 183, 121],\n  [109, 205, 89],\n  [180, 222, 44],\n  [253, 231, 37],\n];\n\n/**\n * Plasma colormap - perceptually uniform, purple-orange\n */\nconst PLASMA: ColorRamp = [\n  [13, 8, 135],\n  [75, 3, 161],\n  [125, 3, 168],\n  [168, 34, 150],\n  [203, 70, 121],\n  [229, 107, 93],\n  [248, 148, 65],\n  [253, 195, 40],\n  [240, 249, 33],\n  [240, 249, 33],\n];\n\n/**\n * Inferno colormap - perceptually uniform, black-red-yellow\n */\nconst INFERNO: ColorRamp = [\n  [0, 0, 4],\n  [40, 11, 84],\n  [89, 13, 115],\n  [137, 31, 107],\n  [179, 55, 79],\n  [213, 87, 49],\n  [240, 130, 24],\n  [253, 184, 43],\n  [249, 251, 146],\n  [252, 255, 164],\n];\n\n/**\n * Magma colormap - perceptually uniform, black-purple-pink-white\n */\nconst MAGMA: ColorRamp = [\n  [0, 0, 4],\n  [28, 16, 68],\n  [79, 18, 123],\n  [129, 37, 129],\n  [181, 54, 122],\n  [229, 80, 100],\n  [251, 135, 97],\n  [254, 194, 135],\n  [254, 247, 187],\n  [252, 253, 191],\n];\n\n/**\n * Cividis colormap - perceptually uniform, colorblind-friendly (blue-yellow)\n */\nconst CIVIDIS: ColorRamp = [\n  [0, 32, 77],\n  [0, 58, 103],\n  [52, 77, 105],\n  [87, 95, 108],\n  [115, 113, 112],\n  [143, 132, 108],\n  [171, 152, 97],\n  [200, 173, 79],\n  [231, 196, 55],\n  [253, 231, 37],\n];\n\n/**\n * Turbo colormap - improved rainbow, perceptually balanced\n */\nconst TURBO: ColorRamp = [\n  [48, 18, 59],\n  [70, 107, 227],\n  [40, 170, 225],\n  [35, 221, 162],\n  [122, 249, 85],\n  [194, 241, 45],\n  [241, 206, 51],\n  [250, 144, 42],\n  [229, 68, 25],\n  [122, 4, 3],\n];\n\n/**\n * Jet colormap - classic rainbow (not perceptually uniform)\n */\nconst JET: ColorRamp = [\n  [0, 0, 127],\n  [0, 0, 255],\n  [0, 127, 255],\n  [0, 255, 255],\n  [127, 255, 127],\n  [255, 255, 0],\n  [255, 127, 0],\n  [255, 0, 0],\n  [127, 0, 0],\n  [127, 0, 0],\n];\n\n/**\n * Rainbow colormap - HSV-based rainbow\n */\nconst RAINBOW: ColorRamp = [\n  [150, 0, 90],\n  [0, 0, 200],\n  [0, 125, 255],\n  [0, 200, 255],\n  [0, 255, 125],\n  [125, 255, 0],\n  [255, 255, 0],\n  [255, 125, 0],\n  [255, 0, 0],\n  [128, 0, 0],\n];\n\n/**\n * Terrain colormap - earth tones for elevation data\n */\nconst TERRAIN: ColorRamp = [\n  [51, 51, 153],\n  [51, 102, 153],\n  [51, 153, 153],\n  [102, 178, 102],\n  [153, 204, 102],\n  [204, 229, 102],\n  [204, 204, 153],\n  [178, 153, 102],\n  [153, 102, 51],\n  [255, 255, 255],\n];\n\n/**\n * Coolwarm colormap - diverging blue-red\n */\nconst COOLWARM: ColorRamp = [\n  [59, 76, 192],\n  [98, 130, 234],\n  [141, 176, 254],\n  [184, 208, 249],\n  [221, 221, 221],\n  [245, 196, 173],\n  [244, 154, 123],\n  [222, 96, 77],\n  [180, 4, 38],\n  [180, 4, 38],\n];\n\n/**\n * Gray colormap - grayscale\n */\nconst GRAY: ColorRamp = [\n  [0, 0, 0],\n  [28, 28, 28],\n  [57, 57, 57],\n  [85, 85, 85],\n  [113, 113, 113],\n  [142, 142, 142],\n  [170, 170, 170],\n  [198, 198, 198],\n  [227, 227, 227],\n  [255, 255, 255],\n];\n\n/**\n * All available colormaps\n */\nexport const COLORMAPS: Record<ColormapName, ColorRamp> = {\n  viridis: VIRIDIS,\n  plasma: PLASMA,\n  inferno: INFERNO,\n  magma: MAGMA,\n  cividis: CIVIDIS,\n  turbo: TURBO,\n  jet: JET,\n  rainbow: RAINBOW,\n  terrain: TERRAIN,\n  coolwarm: COOLWARM,\n  gray: GRAY,\n};\n\n/**\n * List of all available colormap names\n */\nexport const COLORMAP_NAMES: ColormapName[] = [\n  'viridis',\n  'plasma',\n  'inferno',\n  'magma',\n  'cividis',\n  'turbo',\n  'jet',\n  'rainbow',\n  'terrain',\n  'coolwarm',\n  'gray',\n];\n\n/**\n * Human-readable display names for colormaps\n */\nexport const COLORMAP_LABELS: Record<ColormapName, string> = {\n  viridis: 'Viridis',\n  plasma: 'Plasma',\n  inferno: 'Inferno',\n  magma: 'Magma',\n  cividis: 'Cividis',\n  turbo: 'Turbo',\n  jet: 'Jet',\n  rainbow: 'Rainbow',\n  terrain: 'Terrain',\n  coolwarm: 'Cool-Warm',\n  gray: 'Grayscale',\n};\n\n/**\n * Gets a colormap by name.\n *\n * @param name - The colormap name\n * @returns The color ramp array\n */\nexport function getColormap(name: ColormapName): ColorRamp {\n  return COLORMAPS[name] || COLORMAPS.viridis;\n}\n","import type { PointCloudData } from '../loaders/types';\nimport type { ColorScheme, ColorSchemeConfig, ColormapName, ColorRangeConfig } from '../core/types';\nimport type { RGBColor, ColorRamp, ClassificationColorMap } from './types';\nimport { computePercentileBounds } from '../utils/helpers';\nimport { COLORMAPS } from './Colormaps';\n\n/**\n * ASPRS LAS classification standard colors\n */\nexport const CLASSIFICATION_COLORS: ClassificationColorMap = {\n  0: [128, 128, 128],   // Created, never classified\n  1: [128, 128, 128],   // Unclassified\n  2: [165, 113, 78],    // Ground (brown)\n  3: [144, 238, 144],   // Low Vegetation (light green)\n  4: [34, 139, 34],     // Medium Vegetation (green)\n  5: [0, 100, 0],       // High Vegetation (dark green)\n  6: [255, 165, 0],     // Building (orange)\n  7: [255, 0, 0],       // Low Point (noise) (red)\n  8: [128, 128, 128],   // Reserved\n  9: [0, 0, 255],       // Water (blue)\n  10: [139, 90, 43],    // Rail\n  11: [128, 128, 128],  // Road Surface\n  12: [128, 128, 128],  // Reserved\n  13: [255, 255, 0],    // Wire - Guard (yellow)\n  14: [255, 200, 0],    // Wire - Conductor\n  15: [200, 200, 0],    // Transmission Tower\n  16: [100, 100, 100],  // Wire-Structure Connector\n  17: [0, 128, 255],    // Bridge Deck\n  18: [255, 0, 255],    // High Noise\n};\n\n/**\n * Options for color generation\n */\nexport interface ColorOptions {\n  /** Whether to use percentile range (2-98%) for elevation/intensity coloring (deprecated) */\n  usePercentile?: boolean;\n  /** Colormap to use for elevation/intensity coloring */\n  colormap?: ColormapName;\n  /** Configuration for color range mapping */\n  colorRange?: ColorRangeConfig;\n  /** Set of classification codes to hide (set alpha to 0) */\n  hiddenClassifications?: Set<number>;\n}\n\n/**\n * Result of color processing including computed bounds\n */\nexport interface ColorResult {\n  /** The color array */\n  colors: Uint8Array;\n  /** The computed bounds used for coloring */\n  bounds?: { min: number; max: number };\n}\n\n/**\n * Processes point cloud data into color arrays based on color scheme.\n */\nexport class ColorSchemeProcessor {\n  /** Last computed color bounds (for colorbar display) */\n  private _lastComputedBounds?: { min: number; max: number };\n\n  /**\n   * Generates a color array for the point cloud based on the color scheme.\n   *\n   * @param data - Point cloud data\n   * @param scheme - Color scheme to apply\n   * @param options - Optional color generation options\n   * @returns Uint8Array of RGBA colors (length = pointCount * 4)\n   */\n  getColors(data: PointCloudData, scheme: ColorScheme, options: ColorOptions = {}): Uint8Array {\n    const result = this.getColorsWithBounds(data, scheme, options);\n    return result.colors;\n  }\n\n  /**\n   * Generates a color array and returns the computed bounds.\n   *\n   * @param data - Point cloud data\n   * @param scheme - Color scheme to apply\n   * @param options - Optional color generation options\n   * @returns ColorResult containing colors and computed bounds\n   */\n  getColorsWithBounds(data: PointCloudData, scheme: ColorScheme, options: ColorOptions = {}): ColorResult {\n    const colors = new Uint8Array(data.pointCount * 4);\n    const colormap = options.colormap ?? 'viridis';\n    const colorRange = options.colorRange;\n    const usePercentile = options.usePercentile ?? true;\n\n    if (typeof scheme === 'string') {\n      switch (scheme) {\n        case 'elevation':\n          return this._colorByElevation(data, colors, colormap, colorRange, usePercentile);\n        case 'intensity':\n          return this._colorByIntensity(data, colors, colormap, colorRange, usePercentile);\n        case 'classification':\n          return { colors: this._colorByClassification(data, colors, options.hiddenClassifications) };\n        case 'rgb':\n          return { colors: this._colorByRGB(data, colors) };\n        default:\n          return this._colorByElevation(data, colors, colormap, colorRange, usePercentile);\n      }\n    } else {\n      return { colors: this._colorByCustom(data, colors, scheme, colormap, colorRange, usePercentile) };\n    }\n  }\n\n  /**\n   * Gets the last computed color bounds (for colorbar display).\n   *\n   * @returns The last computed bounds or undefined\n   */\n  getLastComputedBounds(): { min: number; max: number } | undefined {\n    return this._lastComputedBounds;\n  }\n\n  /**\n   * Computes the color bounds based on the configuration.\n   *\n   * @param values - Array of values to compute bounds for\n   * @param dataBounds - Data bounds (min/max)\n   * @param colorRange - Color range configuration\n   * @param usePercentile - Legacy percentile flag\n   * @returns Computed min and max bounds\n   */\n  private _computeBounds(\n    values: Float32Array,\n    dataBounds: { min: number; max: number },\n    colorRange?: ColorRangeConfig,\n    usePercentile?: boolean\n  ): { min: number; max: number } {\n    if (colorRange) {\n      if (colorRange.mode === 'absolute') {\n        return {\n          min: colorRange.absoluteMin ?? dataBounds.min,\n          max: colorRange.absoluteMax ?? dataBounds.max,\n        };\n      } else {\n        // Percentile mode with configurable values\n        const pLow = colorRange.percentileLow ?? 2;\n        const pHigh = colorRange.percentileHigh ?? 98;\n        return computePercentileBounds(values, pLow, pHigh);\n      }\n    } else if (usePercentile) {\n      // Legacy behavior: 2-98% percentile\n      return computePercentileBounds(values, 2, 98);\n    } else {\n      // Full range\n      return dataBounds;\n    }\n  }\n\n  /**\n   * Colors points by elevation using the specified colormap.\n   *\n   * @param data - Point cloud data\n   * @param colors - Output color array\n   * @param colormap - Colormap name to use\n   * @param colorRange - Color range configuration\n   * @param usePercentile - Legacy percentile flag\n   * @returns ColorResult with colors and computed bounds\n   */\n  private _colorByElevation(\n    data: PointCloudData,\n    colors: Uint8Array,\n    colormap: ColormapName,\n    colorRange?: ColorRangeConfig,\n    usePercentile?: boolean\n  ): ColorResult {\n    // Guard against missing positions\n    if (!data.positions || data.positions.length === 0) {\n      return { colors };\n    }\n\n    // Extract Z values\n    const zValues = new Float32Array(data.pointCount);\n    for (let i = 0; i < data.pointCount; i++) {\n      zValues[i] = data.positions[i * 3 + 2] ?? 0;\n    }\n\n    // Compute data bounds\n    const dataBounds = {\n      min: data.bounds?.minZ ?? 0,\n      max: data.bounds?.maxZ ?? 1,\n    };\n\n    // Compute color bounds based on configuration\n    const bounds = this._computeBounds(zValues, dataBounds, colorRange, usePercentile);\n    this._lastComputedBounds = bounds;\n\n    const { min: minZ, max: maxZ } = bounds;\n    const range = maxZ - minZ || 1;\n    const ramp = COLORMAPS[colormap] || COLORMAPS.viridis;\n\n    for (let i = 0; i < data.pointCount; i++) {\n      const z = zValues[i];\n      const t = (z - minZ) / range;\n      const color = this._interpolateRamp(ramp, t);\n      colors[i * 4] = color[0];\n      colors[i * 4 + 1] = color[1];\n      colors[i * 4 + 2] = color[2];\n      colors[i * 4 + 3] = 255;\n    }\n\n    return { colors, bounds };\n  }\n\n  /**\n   * Colors points by intensity using the specified colormap.\n   *\n   * @param data - Point cloud data\n   * @param colors - Output color array\n   * @param colormap - Colormap name to use\n   * @param colorRange - Color range configuration\n   * @param usePercentile - Legacy percentile flag\n   * @returns ColorResult with colors and computed bounds\n   */\n  private _colorByIntensity(\n    data: PointCloudData,\n    colors: Uint8Array,\n    colormap: ColormapName,\n    colorRange?: ColorRangeConfig,\n    usePercentile?: boolean\n  ): ColorResult {\n    if (!data.hasIntensity || !data.intensities) {\n      // Fall back to elevation if no intensity data\n      return this._colorByElevation(data, colors, colormap, colorRange, usePercentile);\n    }\n\n    // Compute data bounds\n    let minI = Infinity;\n    let maxI = -Infinity;\n    for (let i = 0; i < data.pointCount; i++) {\n      const intensity = data.intensities[i];\n      if (intensity < minI) minI = intensity;\n      if (intensity > maxI) maxI = intensity;\n    }\n    const dataBounds = { min: minI, max: maxI };\n\n    // Compute color bounds based on configuration\n    const bounds = this._computeBounds(data.intensities, dataBounds, colorRange, usePercentile);\n    this._lastComputedBounds = bounds;\n\n    const { min: minVal, max: maxVal } = bounds;\n    const range = maxVal - minVal || 1;\n    const ramp = COLORMAPS[colormap] || COLORMAPS.gray;\n\n    for (let i = 0; i < data.pointCount; i++) {\n      const intensity = data.intensities[i];\n      const t = (intensity - minVal) / range;\n      const color = this._interpolateRamp(ramp, t);\n      colors[i * 4] = color[0];\n      colors[i * 4 + 1] = color[1];\n      colors[i * 4 + 2] = color[2];\n      colors[i * 4 + 3] = 255;\n    }\n\n    return { colors, bounds };\n  }\n\n  /**\n   * Colors points by classification using ASPRS standard colors.\n   *\n   * @param data - Point cloud data\n   * @param colors - Output color array\n   * @param hiddenClassifications - Optional set of classification codes to hide (alpha=0)\n   * @returns Color array\n   */\n  private _colorByClassification(\n    data: PointCloudData,\n    colors: Uint8Array,\n    hiddenClassifications?: Set<number>\n  ): Uint8Array {\n    if (!data.hasClassification || !data.classifications) {\n      // Fall back to elevation if no classification data\n      const result = this._colorByElevation(data, colors, 'viridis', undefined, true);\n      return result.colors;\n    }\n\n    for (let i = 0; i < data.pointCount; i++) {\n      const cls = data.classifications[i];\n      const color = CLASSIFICATION_COLORS[cls] || [128, 128, 128];\n      colors[i * 4] = color[0];\n      colors[i * 4 + 1] = color[1];\n      colors[i * 4 + 2] = color[2];\n      // Set alpha to 0 if classification is hidden, otherwise 255\n      colors[i * 4 + 3] = hiddenClassifications?.has(cls) ? 0 : 255;\n    }\n    return colors;\n  }\n\n  /**\n   * Uses embedded RGB colors from the point cloud.\n   *\n   * @param data - Point cloud data\n   * @param colors - Output color array\n   * @returns Color array\n   */\n  private _colorByRGB(data: PointCloudData, colors: Uint8Array): Uint8Array {\n    if (!data.hasRGB || !data.colors) {\n      // Fall back to elevation if no RGB data\n      const result = this._colorByElevation(data, colors, 'viridis', undefined, true);\n      return result.colors;\n    }\n\n    // data.colors is stored as RGBA (4 bytes per point)\n    for (let i = 0; i < data.pointCount; i++) {\n      colors[i * 4] = data.colors[i * 4];\n      colors[i * 4 + 1] = data.colors[i * 4 + 1];\n      colors[i * 4 + 2] = data.colors[i * 4 + 2];\n      colors[i * 4 + 3] = 255;\n    }\n    return colors;\n  }\n\n  /**\n   * Applies a custom color scheme configuration.\n   *\n   * @param data - Point cloud data\n   * @param colors - Output color array\n   * @param _config - Custom color scheme config\n   * @param colormap - Colormap name to use\n   * @param colorRange - Color range configuration\n   * @param usePercentile - Legacy percentile flag\n   * @returns Color array\n   */\n  private _colorByCustom(\n    data: PointCloudData,\n    colors: Uint8Array,\n    _config: ColorSchemeConfig,\n    colormap: ColormapName,\n    colorRange?: ColorRangeConfig,\n    usePercentile?: boolean\n  ): Uint8Array {\n    // For now, fall back to elevation for custom configs\n    // This can be extended to support custom gradients\n    const result = this._colorByElevation(data, colors, colormap, colorRange, usePercentile);\n    return result.colors;\n  }\n\n  /**\n   * Interpolates a color from a color ramp.\n   *\n   * @param ramp - Color ramp array\n   * @param t - Interpolation parameter (0-1)\n   * @returns Interpolated RGB color\n   */\n  private _interpolateRamp(ramp: ColorRamp, t: number): RGBColor {\n    // Handle NaN or invalid t values\n    if (!Number.isFinite(t)) {\n      return ramp[0];\n    }\n\n    const clampedT = Math.max(0, Math.min(1, t));\n    const idx = Math.min(\n      Math.floor(clampedT * (ramp.length - 1)),\n      ramp.length - 2\n    );\n    const localT = clampedT * (ramp.length - 1) - idx;\n\n    return [\n      Math.round(ramp[idx][0] + (ramp[idx + 1][0] - ramp[idx][0]) * localT),\n      Math.round(ramp[idx][1] + (ramp[idx + 1][1] - ramp[idx][1]) * localT),\n      Math.round(ramp[idx][2] + (ramp[idx + 1][2] - ramp[idx][2]) * localT),\n    ];\n  }\n}\n\n/**\n * Gets the name of a classification code.\n */\nexport function getClassificationName(code: number): string {\n  const names: Record<number, string> = {\n    0: 'Never Classified',\n    1: 'Unclassified',\n    2: 'Ground',\n    3: 'Low Vegetation',\n    4: 'Medium Vegetation',\n    5: 'High Vegetation',\n    6: 'Building',\n    7: 'Low Point (Noise)',\n    8: 'Reserved',\n    9: 'Water',\n    10: 'Rail',\n    11: 'Road Surface',\n    12: 'Reserved',\n    13: 'Wire - Guard',\n    14: 'Wire - Conductor',\n    15: 'Transmission Tower',\n    16: 'Wire-Structure Connector',\n    17: 'Bridge Deck',\n    18: 'High Noise',\n  };\n  return names[code] || `Class ${code}`;\n}\n\n/**\n * Extracts the set of unique classification codes present in the point cloud data.\n *\n * @param data - Point cloud data\n * @returns Set of classification codes found in the data\n */\nexport function getAvailableClassifications(data: PointCloudData): Set<number> {\n  const classifications = new Set<number>();\n  if (data.hasClassification && data.classifications) {\n    for (let i = 0; i < data.pointCount; i++) {\n      classifications.add(data.classifications[i]);\n    }\n  }\n  return classifications;\n}\n","import { PointCloudLayer } from '@deck.gl/layers';\nimport { COORDINATE_SYSTEM } from '@deck.gl/core';\nimport type { PickingInfo } from '@deck.gl/core';\nimport type { DeckOverlay } from '../core/DeckOverlay';\nimport type { PointCloudData } from '../loaders/types';\nimport type { ColorScheme, PointCloudBounds, ColormapName, ColorRangeConfig } from '../core/types';\nimport type { PointCloudLayerOptions, PickedPointInfo } from './types';\nimport { ColorSchemeProcessor } from '../colorizers/ColorScheme';\n\n/**\n * Internal point cloud data with computed colors\n */\ninterface ManagedPointCloud {\n  id: string;\n  data: PointCloudData;\n  colors: Uint8Array;\n  coordinateOrigin: [number, number, number]; // [lng, lat, 0] center point\n  /** Per-layer visibility (default: true) */\n  visible: boolean;\n  /** Per-layer opacity override (null means use global) */\n  opacityOverride: number | null;\n  /** Number of deck.gl chunk layers currently created for this point cloud */\n  chunkCount: number;\n}\n\n/**\n * Manages deck.gl PointCloudLayer instances for visualization.\n */\nexport class PointCloudManager {\n  private _deckOverlay: DeckOverlay;\n  private _pointClouds: Map<string, ManagedPointCloud>;\n  private _options: PointCloudLayerOptions;\n  private _colorProcessor: ColorSchemeProcessor;\n  private _lastComputedBounds?: { min: number; max: number };\n\n  constructor(deckOverlay: DeckOverlay, options: Partial<PointCloudLayerOptions> = {}) {\n    this._deckOverlay = deckOverlay;\n    this._pointClouds = new Map();\n    this._colorProcessor = new ColorSchemeProcessor();\n    this._options = {\n      pointSize: options.pointSize ?? 2,\n      opacity: options.opacity ?? 1.0,\n      colorScheme: options.colorScheme ?? 'elevation',\n      usePercentile: options.usePercentile ?? true,\n      colormap: options.colormap ?? 'viridis',\n      colorRange: options.colorRange,\n      elevationRange: options.elevationRange ?? null,\n      pickable: options.pickable ?? false,\n      zOffset: options.zOffset ?? 0,\n      onHover: options.onHover,\n    };\n  }\n\n  /**\n   * Sets the hover callback.\n   *\n   * @param callback - Function called when a point is hovered\n   */\n  setOnHover(callback: ((info: PickedPointInfo | null) => void) | undefined): void {\n    this._options.onHover = callback;\n  }\n\n  /**\n   * Adds a point cloud to the visualization.\n   *\n   * @param id - Unique identifier for the point cloud\n   * @param data - Point cloud data (positions are already offsets from coordinateOrigin)\n   */\n  addPointCloud(id: string, data: PointCloudData): void {\n    const result = this._colorProcessor.getColorsWithBounds(data, this._options.colorScheme, {\n      usePercentile: this._options.usePercentile,\n      colormap: this._options.colormap,\n      colorRange: this._options.colorRange,\n      hiddenClassifications: this._options.hiddenClassifications,\n    });\n\n    // Store the computed bounds for colorbar display\n    if (result.bounds) {\n      this._lastComputedBounds = result.bounds;\n    }\n\n    // Use the coordinate origin from the data - positions are already stored as offsets\n    const coordinateOrigin = data.coordinateOrigin;\n\n    this._pointClouds.set(id, {\n      id,\n      data,\n      colors: result.colors,\n      coordinateOrigin,\n      visible: true,\n      opacityOverride: null,\n      chunkCount: 0,\n    });\n    this._createLayer(id);\n  }\n\n  /**\n   * Updates an existing point cloud with new data.\n   * Used for streaming/incremental loading where points are added over time.\n   *\n   * @param id - Unique identifier for the point cloud\n   * @param data - Updated point cloud data\n   */\n  updatePointCloud(id: string, data: PointCloudData): void {\n    const existing = this._pointClouds.get(id);\n\n    if (!data.positions || data.pointCount === 0) {\n      if (existing) {\n        this._pointClouds.set(id, {\n          id,\n          data,\n          colors: new Uint8Array(0),\n          coordinateOrigin: data.coordinateOrigin,\n          visible: existing.visible,\n          opacityOverride: existing.opacityOverride,\n          chunkCount: existing.chunkCount,\n        });\n        this._createLayer(id);\n      }\n      return;\n    }\n\n    if (existing) {\n      // Recalculate colors for new data\n      const result = this._colorProcessor.getColorsWithBounds(data, this._options.colorScheme, {\n        usePercentile: this._options.usePercentile,\n        colormap: this._options.colormap,\n        colorRange: this._options.colorRange,\n        hiddenClassifications: this._options.hiddenClassifications,\n      });\n\n      // Store the computed bounds for colorbar display\n      if (result.bounds) {\n        this._lastComputedBounds = result.bounds;\n      }\n\n      this._pointClouds.set(id, {\n        id,\n        data,\n        colors: result.colors,\n        coordinateOrigin: data.coordinateOrigin,\n        visible: existing.visible,\n        opacityOverride: existing.opacityOverride,\n        chunkCount: existing.chunkCount,\n      });\n\n      // Recreate layers with new data\n      this._createLayer(id);\n    } else {\n      // New point cloud - use existing addPointCloud\n      this.addPointCloud(id, data);\n    }\n  }\n\n  /**\n   * Gets the current point count for a point cloud.\n   *\n   * @param id - Point cloud ID\n   * @returns Point count or 0 if not found\n   */\n  getPointCount(id: string): number {\n    return this._pointClouds.get(id)?.data.pointCount || 0;\n  }\n\n  /**\n   * Removes a point cloud from the visualization.\n   *\n   * @param id - ID of the point cloud to remove\n   */\n  removePointCloud(id: string): void {\n    const pc = this._pointClouds.get(id);\n    if (pc) {\n      // Remove all chunk layers\n      for (let chunk = 0; chunk < pc.chunkCount; chunk++) {\n        this._deckOverlay.removeLayer(`pointcloud-${id}-chunk${chunk}`);\n      }\n    }\n    this._pointClouds.delete(id);\n  }\n\n  /**\n   * Checks if a point cloud exists.\n   *\n   * @param id - Point cloud ID\n   * @returns True if exists\n   */\n  hasPointCloud(id: string): boolean {\n    return this._pointClouds.has(id);\n  }\n\n  /**\n   * Gets all point cloud IDs.\n   *\n   * @returns Array of point cloud IDs\n   */\n  getPointCloudIds(): string[] {\n    return Array.from(this._pointClouds.keys());\n  }\n\n  /**\n   * Gets the bounds of a point cloud.\n   *\n   * @param id - Point cloud ID\n   * @returns Bounds or undefined if not found\n   */\n  getPointCloudBounds(id: string): PointCloudBounds | undefined {\n    return this._pointClouds.get(id)?.data.bounds;\n  }\n\n  /**\n   * Updates styling options for all point clouds.\n   *\n   * @param options - New style options\n   */\n  updateStyle(options: Partial<PointCloudLayerOptions>): void {\n    const colorSchemeChanged = options.colorScheme !== undefined &&\n      options.colorScheme !== this._options.colorScheme;\n    const percentileChanged = options.usePercentile !== undefined &&\n      options.usePercentile !== this._options.usePercentile;\n    const colormapChanged = options.colormap !== undefined &&\n      options.colormap !== this._options.colormap;\n    const colorRangeChanged = options.colorRange !== undefined;\n    const hiddenClassificationsChanged = options.hiddenClassifications !== undefined;\n\n    this._options = { ...this._options, ...options };\n\n    // If color-related settings changed, recompute colors\n    if (colorSchemeChanged || percentileChanged || colormapChanged || colorRangeChanged || hiddenClassificationsChanged) {\n      for (const [id, pc] of this._pointClouds) {\n        const result = this._colorProcessor.getColorsWithBounds(pc.data, this._options.colorScheme, {\n          usePercentile: this._options.usePercentile,\n          colormap: this._options.colormap,\n          colorRange: this._options.colorRange,\n          hiddenClassifications: this._options.hiddenClassifications,\n        });\n\n        // Store the computed bounds for colorbar display\n        if (result.bounds) {\n          this._lastComputedBounds = result.bounds;\n        }\n\n        this._pointClouds.set(id, {\n          ...pc,\n          colors: result.colors,\n          coordinateOrigin: pc.coordinateOrigin,\n          visible: pc.visible,\n          opacityOverride: pc.opacityOverride,\n        });\n      }\n    }\n\n    // Recreate all layers with new options\n    this._updateAllLayers();\n  }\n\n  /**\n   * Sets the point size.\n   *\n   * @param size - Point size in pixels\n   */\n  setPointSize(size: number): void {\n    this.updateStyle({ pointSize: size });\n  }\n\n  /**\n   * Sets the global opacity for all point clouds.\n   * This also clears any per-layer opacity overrides so the global value takes effect.\n   *\n   * @param opacity - Opacity value (0-1)\n   */\n  setOpacity(opacity: number): void {\n    // Clear all per-layer opacity overrides so global opacity takes effect\n    for (const [id, pc] of this._pointClouds) {\n      if (pc.opacityOverride !== null) {\n        this._pointClouds.set(id, { ...pc, opacityOverride: null });\n      }\n    }\n    this.updateStyle({ opacity });\n  }\n\n  /**\n   * Sets the color scheme.\n   *\n   * @param scheme - Color scheme to apply\n   */\n  setColorScheme(scheme: ColorScheme): void {\n    this.updateStyle({ colorScheme: scheme });\n  }\n\n  /**\n   * Sets whether to use percentile range for elevation/intensity coloring.\n   *\n   * @param usePercentile - Whether to use percentile range (2-98%)\n   */\n  setUsePercentile(usePercentile: boolean): void {\n    this.updateStyle({ usePercentile });\n  }\n\n  /**\n   * Sets the colormap for elevation/intensity coloring.\n   *\n   * @param colormap - Colormap name\n   */\n  setColormap(colormap: ColormapName): void {\n    this.updateStyle({ colormap });\n  }\n\n  /**\n   * Sets the color range configuration.\n   *\n   * @param colorRange - Color range configuration\n   */\n  setColorRange(colorRange: ColorRangeConfig): void {\n    this.updateStyle({ colorRange });\n  }\n\n  /**\n   * Sets the elevation range filter.\n   *\n   * @param range - [min, max] elevation or null to disable\n   */\n  setElevationRange(range: [number, number] | null): void {\n    this.updateStyle({ elevationRange: range });\n  }\n\n  /**\n   * Sets whether points are pickable (enables hover/click interactions).\n   *\n   * @param pickable - Whether points should be pickable\n   */\n  setPickable(pickable: boolean): void {\n    this.updateStyle({ pickable });\n  }\n\n  /**\n   * Sets the Z offset for vertical adjustment.\n   *\n   * @param offset - Z offset in meters\n   */\n  setZOffset(offset: number): void {\n    this.updateStyle({ zOffset: offset });\n  }\n\n  /**\n   * Sets the hidden classifications for filtering.\n   *\n   * @param hidden - Set of classification codes to hide\n   */\n  setHiddenClassifications(hidden: Set<number>): void {\n    this.updateStyle({ hiddenClassifications: hidden });\n  }\n\n  /**\n   * Sets visibility for a specific point cloud.\n   *\n   * @param id - Point cloud ID\n   * @param visible - Whether the point cloud should be visible\n   */\n  setPointCloudVisibility(id: string, visible: boolean): void {\n    const pc = this._pointClouds.get(id);\n    if (pc) {\n      this._pointClouds.set(id, { ...pc, visible });\n      this._createLayer(id);\n    }\n  }\n\n  /**\n   * Gets visibility for a specific point cloud.\n   *\n   * @param id - Point cloud ID\n   * @returns Whether the point cloud is visible, or undefined if not found\n   */\n  getPointCloudVisibility(id: string): boolean | undefined {\n    return this._pointClouds.get(id)?.visible;\n  }\n\n  /**\n   * Sets opacity for a specific point cloud.\n   *\n   * @param id - Point cloud ID\n   * @param opacity - Opacity value (0-1), or null to use global opacity\n   */\n  setPointCloudOpacity(id: string, opacity: number | null): void {\n    const pc = this._pointClouds.get(id);\n    if (pc) {\n      this._pointClouds.set(id, { ...pc, opacityOverride: opacity });\n      this._createLayer(id);\n    }\n  }\n\n  /**\n   * Gets opacity for a specific point cloud.\n   *\n   * @param id - Point cloud ID\n   * @returns Opacity value (0-1), or undefined if not found\n   */\n  getPointCloudOpacity(id: string): number | undefined {\n    const pc = this._pointClouds.get(id);\n    if (!pc) return undefined;\n    return pc.opacityOverride ?? this._options.opacity;\n  }\n\n  /**\n   * Clears all point clouds.\n   */\n  clear(): void {\n    for (const [id, pc] of this._pointClouds) {\n      // Remove all chunk layers\n      for (let chunk = 0; chunk < pc.chunkCount; chunk++) {\n        this._deckOverlay.removeLayer(`pointcloud-${id}-chunk${chunk}`);\n      }\n    }\n    this._pointClouds.clear();\n  }\n\n  /**\n   * Gets the current options.\n   */\n  getOptions(): PointCloudLayerOptions {\n    return { ...this._options };\n  }\n\n  /**\n   * Gets the last computed color bounds.\n   * Used for displaying accurate colorbar min/max values.\n   */\n  getLastComputedBounds(): { min: number; max: number } | undefined {\n    return this._lastComputedBounds;\n  }\n\n  /**\n   * Gets merged point cloud data from all loaded point clouds.\n   * Used for cross-section profile extraction.\n   *\n   * @returns Merged point cloud data or null if no data loaded\n   */\n  getMergedPointCloudData(): PointCloudData | null {\n    if (this._pointClouds.size === 0) return null;\n\n    // If only one point cloud, return it directly\n    if (this._pointClouds.size === 1) {\n      const [first] = this._pointClouds.values();\n      return first.data;\n    }\n\n    // Merge multiple point clouds\n    // Calculate total point count\n    let totalPoints = 0;\n    for (const pc of this._pointClouds.values()) {\n      totalPoints += pc.data.pointCount;\n    }\n\n    if (totalPoints === 0) return null;\n\n    // Use the first point cloud's coordinate origin\n    const [firstPc] = this._pointClouds.values();\n    const originLng = firstPc.coordinateOrigin[0];\n    const originLat = firstPc.coordinateOrigin[1];\n\n    // Allocate merged arrays\n    const positions = new Float32Array(totalPoints * 3);\n    const intensities = new Float32Array(totalPoints);\n    const classifications = new Uint8Array(totalPoints);\n\n    let offset = 0;\n    for (const pc of this._pointClouds.values()) {\n      const data = pc.data;\n      const count = data.pointCount;\n\n      // Adjust positions to common origin\n      const dLng = pc.coordinateOrigin[0] - originLng;\n      const dLat = pc.coordinateOrigin[1] - originLat;\n\n      for (let i = 0; i < count; i++) {\n        positions[(offset + i) * 3] = data.positions[i * 3] + dLng;\n        positions[(offset + i) * 3 + 1] = data.positions[i * 3 + 1] + dLat;\n        positions[(offset + i) * 3 + 2] = data.positions[i * 3 + 2];\n      }\n\n      if (data.intensities) {\n        intensities.set(data.intensities.subarray(0, count), offset);\n      }\n\n      if (data.classifications) {\n        classifications.set(data.classifications.subarray(0, count), offset);\n      }\n\n      offset += count;\n    }\n\n    return {\n      positions,\n      coordinateOrigin: [originLng, originLat, 0],\n      intensities,\n      classifications,\n      pointCount: totalPoints,\n      bounds: firstPc.data.bounds,\n      hasRGB: firstPc.data.hasRGB,\n      hasIntensity: true,\n      hasClassification: true,\n    };\n  }\n\n  /**\n   * Creates a deck.gl layer for a point cloud.\n   * Chunks large point clouds into multiple layers to avoid WebGL buffer limits.\n   * Uses coordinateOrigin + LNGLAT_OFFSETS to maintain Float32 precision.\n   * Applies elevation filter if set.\n   */\n  private _createLayer(id: string): void {\n    const pc = this._pointClouds.get(id);\n    if (!pc) return;\n\n    const { data, colors, coordinateOrigin, visible, opacityOverride } = pc;\n    const elevationRange = this._options.elevationRange;\n    const zOffset = this._options.zOffset ?? 0;\n    const layerOpacity = opacityOverride ?? this._options.opacity;\n\n    // Remove existing chunk layers first.\n    for (let chunk = 0; chunk < pc.chunkCount; chunk++) {\n      this._deckOverlay.removeLayer(`pointcloud-${id}-chunk${chunk}`);\n    }\n\n    // If layer is not visible, don't create any layers\n    if (!visible) {\n      this._pointClouds.set(id, { ...pc, chunkCount: 0 });\n      return;\n    }\n\n    // Build filtered indices list\n    const filteredIndices: number[] = [];\n\n    for (let i = 0; i < data.pointCount; i++) {\n      const elevation = data.positions[i * 3 + 2];\n      if (elevationRange === null ||\n          (elevation >= elevationRange[0] && elevation <= elevationRange[1])) {\n        filteredIndices.push(i);\n      }\n    }\n\n    // If no points pass the filter, don't create any layers\n    if (filteredIndices.length === 0) {\n      this._pointClouds.set(id, { ...pc, chunkCount: 0 });\n      return;\n    }\n\n    // Chunk size - 1 million points per layer to stay within WebGL limits\n    const CHUNK_SIZE = 1000000;\n    const numChunks = Math.ceil(filteredIndices.length / CHUNK_SIZE);\n\n    for (let chunk = 0; chunk < numChunks; chunk++) {\n      const chunkStart = chunk * CHUNK_SIZE;\n      const chunkEnd = Math.min(chunkStart + CHUNK_SIZE, filteredIndices.length);\n      const chunkSize = chunkEnd - chunkStart;\n\n      const chunkPositions = new Float32Array(chunkSize * 3);\n      const chunkColors = new Uint8Array(chunkSize * 4);\n      const originalIndices: number[] = [];\n\n      for (let i = 0; i < chunkSize; i++) {\n        const srcIdx = filteredIndices[chunkStart + i];\n        originalIndices.push(srcIdx);\n\n        chunkPositions[i * 3] = data.positions[srcIdx * 3];\n        chunkPositions[i * 3 + 1] = data.positions[srcIdx * 3 + 1];\n        // Apply Z offset to elevation\n        chunkPositions[i * 3 + 2] = data.positions[srcIdx * 3 + 2] + zOffset;\n\n        chunkColors[i * 4] = colors[srcIdx * 4];\n        chunkColors[i * 4 + 1] = colors[srcIdx * 4 + 1];\n        chunkColors[i * 4 + 2] = colors[srcIdx * 4 + 2];\n        chunkColors[i * 4 + 3] = colors[srcIdx * 4 + 3];\n      }\n\n      // Create hover handler for this chunk\n      const handleHover = (info: PickingInfo) => {\n        if (!this._options.onHover) return;\n\n        if (info.index >= 0 && info.picked && info.index < originalIndices.length) {\n          const originalIndex = originalIndices[info.index];\n          const pointInfo: PickedPointInfo = {\n            index: originalIndex,\n            longitude: coordinateOrigin[0] + chunkPositions[info.index * 3],\n            latitude: coordinateOrigin[1] + chunkPositions[info.index * 3 + 1],\n            elevation: chunkPositions[info.index * 3 + 2],\n            x: info.x,\n            y: info.y,\n          };\n\n          if (data.intensities) {\n            pointInfo.intensity = data.intensities[originalIndex];\n          }\n\n          if (data.classifications) {\n            pointInfo.classification = data.classifications[originalIndex];\n          }\n\n          // Add RGB colors if available\n          if (data.colors && data.hasRGB) {\n            pointInfo.red = data.colors[originalIndex * 4];\n            pointInfo.green = data.colors[originalIndex * 4 + 1];\n            pointInfo.blue = data.colors[originalIndex * 4 + 2];\n          }\n\n          // Add all extra attributes dynamically\n          if (data.extraAttributes) {\n            const attributes: Record<string, number> = {};\n            for (const [name, arr] of Object.entries(data.extraAttributes)) {\n              if (arr && originalIndex < arr.length) {\n                attributes[name] = arr[originalIndex];\n              }\n            }\n            if (Object.keys(attributes).length > 0) {\n              pointInfo.attributes = attributes;\n            }\n          }\n\n          this._options.onHover(pointInfo);\n        } else {\n          this._options.onHover(null);\n        }\n      };\n\n      // Create a unique data fingerprint to force deck.gl to update\n      const elevationKey = elevationRange ? `${elevationRange[0]}-${elevationRange[1]}` : 'none';\n      const zOffsetKey = zOffset;\n\n      const layer = new PointCloudLayer({\n        id: `pointcloud-${id}-chunk${chunk}`,\n        coordinateSystem: COORDINATE_SYSTEM.LNGLAT_OFFSETS,\n        coordinateOrigin: coordinateOrigin,\n        data: {\n          length: chunkSize,\n          attributes: {\n            getPosition: { value: chunkPositions, size: 3 },\n            getColor: { value: chunkColors, size: 4 },\n          },\n        },\n        pointSize: this._options.pointSize,\n        sizeUnits: 'pixels',\n        opacity: layerOpacity,\n        getNormal: [0, 0, 1],\n        pickable: this._options.pickable,\n        onHover: this._options.pickable ? handleHover : undefined,\n        autoHighlight: this._options.pickable,\n        highlightColor: [255, 255, 0, 200],\n        // Force update when these values change\n        updateTriggers: {\n          getPosition: [elevationKey, zOffsetKey, chunkSize],\n          getColor: [elevationKey, chunkSize],\n        },\n      });\n\n      this._deckOverlay.addLayer(`pointcloud-${id}-chunk${chunk}`, layer);\n    }\n\n    this._pointClouds.set(id, { ...pc, chunkCount: numChunks });\n  }\n\n  /**\n   * Updates all layers with current options.\n   */\n  private _updateAllLayers(): void {\n    for (const id of this._pointClouds.keys()) {\n      this._createLayer(id);\n    }\n  }\n}\n","import type { Map as MapLibreMap } from 'maplibre-gl';\nimport type { ViewportInfo } from '../loaders/streaming-types';\nimport { debounce } from '../utils/helpers';\n\n/**\n * Options for the ViewportManager\n */\nexport interface ViewportManagerOptions {\n  /**\n   * Debounce time for viewport changes in ms\n   * @default 150\n   */\n  debounceMs?: number;\n\n  /**\n   * Minimum zoom level to start loading high-detail nodes\n   * @default 10\n   */\n  minDetailZoom?: number;\n\n  /**\n   * Maximum octree depth to load\n   * @default 20\n   */\n  maxOctreeDepth?: number;\n\n  /**\n   * Octree spacing value from COPC file (for more accurate depth calculation)\n   */\n  spacing?: number;\n}\n\n/**\n * Manages viewport state and triggers node loading based on map view changes.\n * Listens to MapLibre GL map events and calculates the appropriate octree\n * depth for the current zoom level and pitch.\n */\nexport class ViewportManager {\n  private _map: MapLibreMap;\n  private _debounceMs: number;\n  private _onViewportChange: (viewport: ViewportInfo) => void;\n  private _debouncedHandler: () => void;\n  private _isActive: boolean = false;\n\n  // Zoom to octree depth mapping configuration\n  private _minDetailZoom: number;\n  private _maxOctreeDepth: number;\n  private _spacing: number | null;\n\n  /**\n   * Creates a new ViewportManager instance.\n   *\n   * @param map - MapLibre GL map instance\n   * @param onViewportChange - Callback fired when viewport changes\n   * @param options - Configuration options\n   */\n  constructor(\n    map: MapLibreMap,\n    onViewportChange: (viewport: ViewportInfo) => void,\n    options?: ViewportManagerOptions\n  ) {\n    this._map = map;\n    this._onViewportChange = onViewportChange;\n    this._debounceMs = options?.debounceMs ?? 150;\n    this._minDetailZoom = options?.minDetailZoom ?? 10;\n    this._maxOctreeDepth = options?.maxOctreeDepth ?? 20;\n    this._spacing = options?.spacing ?? null;\n\n    this._debouncedHandler = debounce(\n      () => this._handleViewportChange(),\n      this._debounceMs\n    );\n  }\n\n  /**\n   * Starts listening to map viewport changes.\n   */\n  start(): void {\n    if (this._isActive) return;\n    this._isActive = true;\n\n    this._map.on('moveend', this._debouncedHandler);\n    this._map.on('zoomend', this._debouncedHandler);\n    this._map.on('pitchend', this._debouncedHandler);\n\n    // Trigger initial viewport calculation\n    this._handleViewportChange();\n  }\n\n  /**\n   * Stops listening to map viewport changes.\n   */\n  stop(): void {\n    if (!this._isActive) return;\n    this._isActive = false;\n\n    this._map.off('moveend', this._debouncedHandler);\n    this._map.off('zoomend', this._debouncedHandler);\n    this._map.off('pitchend', this._debouncedHandler);\n  }\n\n  /**\n   * Gets the current viewport information.\n   *\n   * @returns ViewportInfo object with bounds, center, zoom, pitch, and targetDepth\n   */\n  getCurrentViewport(): ViewportInfo {\n    const bounds = this._map.getBounds();\n    const center = this._map.getCenter();\n    const zoom = this._map.getZoom();\n    const pitch = this._map.getPitch();\n\n    return {\n      bounds: [\n        bounds.getWest(),\n        bounds.getSouth(),\n        bounds.getEast(),\n        bounds.getNorth(),\n      ],\n      center: [center.lng, center.lat],\n      zoom,\n      pitch,\n      targetDepth: this._calculateTargetDepth(zoom, pitch),\n    };\n  }\n\n  /**\n   * Calculates target octree depth based on zoom level and pitch.\n   *\n   * Mapping strategy:\n   * - Zoom 0-10: depth 0-2 (overview)\n   * - Zoom 10-14: depth 2-6 (city level)\n   * - Zoom 14-18: depth 6-12 (block level)\n   * - Zoom 18+: depth 12+ (detail level)\n   *\n   * Pitch adjustment: higher pitch (3D view) reduces depth to avoid\n   * loading too many nodes in the distance.\n   *\n   * @param zoom - Current map zoom level\n   * @param pitch - Current map pitch in degrees\n   * @returns Target octree depth\n   */\n  private _calculateTargetDepth(zoom: number, pitch: number): number {\n    let depth: number;\n\n    if (this._spacing !== null) {\n      // Use spacing-based calculation for more accurate depth\n      // Ground resolution at current zoom (meters per pixel at equator)\n      const groundRes = 156543.03 / Math.pow(2, zoom);\n\n      // Target point spacing on screen (1 point every 2 pixels)\n      const targetPointSpacing = groundRes * 2;\n\n      // Calculate depth needed to achieve this spacing\n      depth = Math.floor(Math.log2(this._spacing / targetPointSpacing));\n      depth = Math.max(0, depth);\n    } else {\n      // Fallback: simple zoom-based mapping\n      if (zoom < this._minDetailZoom) {\n        // Low zoom - use very coarse LOD\n        depth = Math.floor(zoom / 5);\n      } else {\n        // Map zoom to depth with a reasonable curve\n        // zoom 10 -> depth 2\n        // zoom 14 -> depth 6\n        // zoom 18 -> depth 10\n        // zoom 22 -> depth 14\n        depth = Math.floor(2 + (zoom - this._minDetailZoom) * 1.0);\n      }\n    }\n\n    // Pitch adjustment: reduce depth for tilted views\n    // At 60 degrees pitch, reduce depth by 2\n    const pitchRadians = (pitch * Math.PI) / 180;\n    const pitchFactor = Math.cos(pitchRadians);\n    const pitchReduction = Math.floor((1 - pitchFactor) * 3);\n    depth = Math.max(0, depth - pitchReduction);\n\n    // Clamp to max depth\n    return Math.min(depth, this._maxOctreeDepth);\n  }\n\n  /**\n   * Handles viewport change events.\n   */\n  private _handleViewportChange(): void {\n    if (!this._isActive) return;\n    const viewport = this.getCurrentViewport();\n    this._onViewportChange(viewport);\n  }\n\n  /**\n   * Forces a viewport update (e.g., after initial data load or fly animation).\n   */\n  forceUpdate(): void {\n    this._handleViewportChange();\n  }\n\n  /**\n   * Updates the spacing value used for depth calculation.\n   *\n   * @param spacing - Octree spacing from COPC file\n   */\n  setSpacing(spacing: number): void {\n    this._spacing = spacing;\n  }\n\n  /**\n   * Checks if the viewport manager is currently active.\n   *\n   * @returns True if listening for viewport changes\n   */\n  isActive(): boolean {\n    return this._isActive;\n  }\n\n  /**\n   * Destroys the viewport manager and removes all event listeners.\n   */\n  destroy(): void {\n    this.stop();\n  }\n}\n","/**\n * Options for creating a file input\n */\nexport interface FileInputOptions {\n  accept?: string;\n  onChange: (file: File) => void;\n  label?: string;\n}\n\n/**\n * Creates a styled file input with drag-and-drop support.\n */\nexport class FileInput {\n  private _options: FileInputOptions;\n  private _input?: HTMLInputElement;\n  private _label?: HTMLElement;\n\n  constructor(options: FileInputOptions) {\n    this._options = {\n      accept: '.las,.laz',\n      label: 'Drop LAS/LAZ file here or click to browse',\n      ...options,\n    };\n  }\n\n  /**\n   * Renders the file input element.\n   *\n   * @returns The file input container element\n   */\n  render(): HTMLElement {\n    const wrapper = document.createElement('div');\n    wrapper.className = 'lidar-file-input-wrapper';\n\n    const labelEl = document.createElement('div');\n    labelEl.className = 'lidar-file-input-label';\n    labelEl.innerHTML = `\n      <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n        <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/>\n        <polyline points=\"17 8 12 3 7 8\"/>\n        <line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"15\"/>\n      </svg>\n      <span>${this._options.label}</span>\n    `;\n    this._label = labelEl;\n\n    const input = document.createElement('input');\n    input.type = 'file';\n    input.className = 'lidar-file-input';\n    input.accept = this._options.accept || '';\n    this._input = input;\n\n    input.addEventListener('change', () => {\n      const file = input.files?.[0];\n      if (file) {\n        this._options.onChange(file);\n        // Reset the input so the same file can be selected again\n        input.value = '';\n      }\n    });\n\n    // Drag and drop handling\n    labelEl.addEventListener('dragover', (e) => {\n      e.preventDefault();\n      e.stopPropagation();\n      labelEl.classList.add('drag-over');\n    });\n\n    labelEl.addEventListener('dragleave', (e) => {\n      e.preventDefault();\n      e.stopPropagation();\n      labelEl.classList.remove('drag-over');\n    });\n\n    labelEl.addEventListener('drop', (e) => {\n      e.preventDefault();\n      e.stopPropagation();\n      labelEl.classList.remove('drag-over');\n\n      const file = e.dataTransfer?.files?.[0];\n      if (file && this._isValidFile(file)) {\n        this._options.onChange(file);\n      }\n    });\n\n    wrapper.appendChild(input);\n    wrapper.appendChild(labelEl);\n\n    return wrapper;\n  }\n\n  /**\n   * Sets the label text.\n   *\n   * @param text - New label text\n   */\n  setLabel(text: string): void {\n    if (this._label) {\n      const span = this._label.querySelector('span');\n      if (span) {\n        span.textContent = text;\n      }\n    }\n  }\n\n  /**\n   * Resets the label to default.\n   */\n  resetLabel(): void {\n    this.setLabel(this._options.label || 'Drop LAS/LAZ file here or click to browse');\n  }\n\n  /**\n   * Enables or disables the input.\n   *\n   * @param enabled - Whether to enable\n   */\n  setEnabled(enabled: boolean): void {\n    if (this._input) {\n      this._input.disabled = !enabled;\n    }\n    if (this._label) {\n      this._label.style.pointerEvents = enabled ? 'auto' : 'none';\n      this._label.style.opacity = enabled ? '1' : '0.5';\n    }\n  }\n\n  /**\n   * Checks if a file has a valid extension.\n   */\n  private _isValidFile(file: File): boolean {\n    const accept = this._options.accept || '';\n    const extensions = accept.split(',').map((ext) => ext.trim().toLowerCase());\n    const fileName = file.name.toLowerCase();\n    return extensions.some((ext) => fileName.endsWith(ext.replace('*', '')));\n  }\n}\n","import { formatNumericValue } from '../utils/helpers';\n\n/**\n * Options for creating a range slider\n */\nexport interface RangeSliderOptions {\n  label: string;\n  min: number;\n  max: number;\n  step: number;\n  value: number;\n  onChange: (value: number) => void;\n  formatValue?: (value: number) => string;\n}\n\n/**\n * Creates a styled range slider with label and value display.\n */\nexport class RangeSlider {\n  private _options: RangeSliderOptions;\n  private _slider?: HTMLInputElement;\n  private _valueDisplay?: HTMLElement;\n\n  constructor(options: RangeSliderOptions) {\n    this._options = options;\n  }\n\n  /**\n   * Renders the slider element.\n   *\n   * @returns The slider container element\n   */\n  render(): HTMLElement {\n    const group = document.createElement('div');\n    group.className = 'lidar-control-group';\n\n    const labelRow = document.createElement('div');\n    labelRow.className = 'lidar-control-label-row';\n\n    const label = document.createElement('label');\n    label.className = 'lidar-control-label';\n    label.textContent = this._options.label;\n\n    const valueSpan = document.createElement('span');\n    valueSpan.className = 'lidar-control-value';\n    valueSpan.textContent = this._formatValue(this._options.value);\n    this._valueDisplay = valueSpan;\n\n    labelRow.appendChild(label);\n    labelRow.appendChild(valueSpan);\n\n    const slider = document.createElement('input');\n    slider.type = 'range';\n    slider.className = 'lidar-control-slider';\n    slider.min = String(this._options.min);\n    slider.max = String(this._options.max);\n    slider.step = String(this._options.step);\n    slider.value = String(this._options.value);\n    this._slider = slider;\n\n    slider.addEventListener('input', () => {\n      const value = parseFloat(slider.value);\n      this._valueDisplay!.textContent = this._formatValue(value);\n      this._options.onChange(value);\n    });\n\n    group.appendChild(labelRow);\n    group.appendChild(slider);\n\n    return group;\n  }\n\n  /**\n   * Sets the slider value programmatically.\n   *\n   * @param value - New value\n   */\n  setValue(value: number): void {\n    if (this._slider) {\n      this._slider.value = String(value);\n    }\n    if (this._valueDisplay) {\n      this._valueDisplay.textContent = this._formatValue(value);\n    }\n  }\n\n  /**\n   * Gets the current value.\n   *\n   * @returns Current slider value\n   */\n  getValue(): number {\n    return this._slider ? parseFloat(this._slider.value) : this._options.value;\n  }\n\n  /**\n   * Enables or disables the slider.\n   *\n   * @param enabled - Whether to enable\n   */\n  setEnabled(enabled: boolean): void {\n    if (this._slider) {\n      this._slider.disabled = !enabled;\n    }\n  }\n\n  /**\n   * Sets the slider min and max bounds.\n   *\n   * @param min - New minimum value\n   * @param max - New maximum value\n   */\n  setBounds(min: number, max: number): void {\n    this._options.min = min;\n    this._options.max = max;\n    if (this._slider) {\n      this._slider.min = String(min);\n      this._slider.max = String(max);\n    }\n  }\n\n  /**\n   * Formats the value for display.\n   */\n  private _formatValue(value: number): string {\n    if (this._options.formatValue) {\n      return this._options.formatValue(value);\n    }\n    return formatNumericValue(value, this._options.step);\n  }\n}\n","/**\n * Options for creating a dual-handle range slider\n */\nexport interface DualRangeSliderOptions {\n  label: string;\n  min: number;\n  max: number;\n  step: number;\n  valueLow: number;\n  valueHigh: number;\n  onChange: (low: number, high: number) => void;\n  formatValue?: (value: number) => string;\n}\n\n/**\n * Creates a dual-handle range slider for selecting a range.\n */\nexport class DualRangeSlider {\n  private _options: DualRangeSliderOptions;\n  private _sliderLow?: HTMLInputElement;\n  private _sliderHigh?: HTMLInputElement;\n  private _valueDisplay?: HTMLElement;\n  private _rangeHighlight?: HTMLElement;\n\n  constructor(options: DualRangeSliderOptions) {\n    this._options = options;\n  }\n\n  /**\n   * Renders the dual slider element.\n   *\n   * @returns The slider container element\n   */\n  render(): HTMLElement {\n    const group = document.createElement('div');\n    group.className = 'lidar-control-group';\n\n    const labelRow = document.createElement('div');\n    labelRow.className = 'lidar-control-label-row';\n\n    const label = document.createElement('label');\n    label.className = 'lidar-control-label';\n    label.textContent = this._options.label;\n\n    const valueSpan = document.createElement('span');\n    valueSpan.className = 'lidar-control-value';\n    valueSpan.textContent = this._formatRange(this._options.valueLow, this._options.valueHigh);\n    this._valueDisplay = valueSpan;\n\n    labelRow.appendChild(label);\n    labelRow.appendChild(valueSpan);\n    group.appendChild(labelRow);\n\n    // Slider container with relative positioning for overlapping sliders\n    const sliderContainer = document.createElement('div');\n    sliderContainer.style.cssText = `\n      position: relative;\n      height: 20px;\n      margin-top: 8px;\n    `;\n\n    // Track background\n    const track = document.createElement('div');\n    track.style.cssText = `\n      position: absolute;\n      top: 8px;\n      left: 0;\n      right: 0;\n      height: 4px;\n      background: #e0e0e0;\n      border-radius: 2px;\n    `;\n    sliderContainer.appendChild(track);\n\n    // Selected range highlight\n    const range = document.createElement('div');\n    range.style.cssText = `\n      position: absolute;\n      top: 8px;\n      height: 4px;\n      background: #159895;\n      border-radius: 2px;\n    `;\n    this._rangeHighlight = range;\n    sliderContainer.appendChild(range);\n\n    // Low slider\n    const sliderLow = document.createElement('input');\n    sliderLow.type = 'range';\n    sliderLow.min = String(this._options.min);\n    sliderLow.max = String(this._options.max);\n    sliderLow.step = String(this._options.step);\n    sliderLow.value = String(this._options.valueLow);\n    sliderLow.style.cssText = `\n      position: absolute;\n      top: 0;\n      left: 0;\n      width: 100%;\n      height: 20px;\n      -webkit-appearance: none;\n      appearance: none;\n      background: transparent;\n      pointer-events: none;\n      z-index: 2;\n    `;\n    this._sliderLow = sliderLow;\n\n    // High slider\n    const sliderHigh = document.createElement('input');\n    sliderHigh.type = 'range';\n    sliderHigh.min = String(this._options.min);\n    sliderHigh.max = String(this._options.max);\n    sliderHigh.step = String(this._options.step);\n    sliderHigh.value = String(this._options.valueHigh);\n    sliderHigh.style.cssText = `\n      position: absolute;\n      top: 0;\n      left: 0;\n      width: 100%;\n      height: 20px;\n      -webkit-appearance: none;\n      appearance: none;\n      background: transparent;\n      pointer-events: none;\n      z-index: 2;\n    `;\n    this._sliderHigh = sliderHigh;\n\n    // Add thumb styles\n    const style = document.createElement('style');\n    style.textContent = `\n      .dual-range-slider input[type=\"range\"]::-webkit-slider-thumb {\n        -webkit-appearance: none;\n        appearance: none;\n        width: 16px;\n        height: 16px;\n        border-radius: 50%;\n        background: #159895;\n        cursor: pointer;\n        pointer-events: auto;\n        border: 2px solid #fff;\n        box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);\n      }\n      .dual-range-slider input[type=\"range\"]::-moz-range-thumb {\n        width: 16px;\n        height: 16px;\n        border-radius: 50%;\n        background: #159895;\n        cursor: pointer;\n        pointer-events: auto;\n        border: 2px solid #fff;\n        box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);\n      }\n    `;\n    group.appendChild(style);\n\n    sliderContainer.classList.add('dual-range-slider');\n    sliderContainer.appendChild(sliderLow);\n    sliderContainer.appendChild(sliderHigh);\n    group.appendChild(sliderContainer);\n\n    // Update range highlight\n    const updateRange = () => {\n      const low = parseFloat(sliderLow.value);\n      const high = parseFloat(sliderHigh.value);\n      const min = this._options.min;\n      const max = this._options.max;\n      const percentLow = ((low - min) / (max - min)) * 100;\n      const percentHigh = ((high - min) / (max - min)) * 100;\n      range.style.left = `${percentLow}%`;\n      range.style.width = `${percentHigh - percentLow}%`;\n    };\n\n    updateRange();\n\n    // Event handlers\n    sliderLow.addEventListener('input', () => {\n      let low = parseFloat(sliderLow.value);\n      const high = parseFloat(sliderHigh.value);\n\n      // Prevent low from exceeding high\n      if (low > high) {\n        low = high;\n        sliderLow.value = String(low);\n      }\n\n      this._valueDisplay!.textContent = this._formatRange(low, high);\n      updateRange();\n      this._options.onChange(low, high);\n    });\n\n    sliderHigh.addEventListener('input', () => {\n      const low = parseFloat(sliderLow.value);\n      let high = parseFloat(sliderHigh.value);\n\n      // Prevent high from going below low\n      if (high < low) {\n        high = low;\n        sliderHigh.value = String(high);\n      }\n\n      this._valueDisplay!.textContent = this._formatRange(low, high);\n      updateRange();\n      this._options.onChange(low, high);\n    });\n\n    return group;\n  }\n\n  /**\n   * Sets the slider range programmatically.\n   */\n  setRange(low: number, high: number): void {\n    if (this._sliderLow) {\n      this._sliderLow.value = String(low);\n    }\n    if (this._sliderHigh) {\n      this._sliderHigh.value = String(high);\n    }\n    if (this._valueDisplay) {\n      this._valueDisplay.textContent = this._formatRange(low, high);\n    }\n    this._updateRangeHighlight();\n  }\n\n  /**\n   * Updates the min/max bounds of the slider.\n   */\n  setBounds(min: number, max: number): void {\n    this._options.min = min;\n    this._options.max = max;\n    if (this._sliderLow) {\n      this._sliderLow.min = String(min);\n      this._sliderLow.max = String(max);\n    }\n    if (this._sliderHigh) {\n      this._sliderHigh.min = String(min);\n      this._sliderHigh.max = String(max);\n    }\n    this._updateRangeHighlight();\n  }\n\n  /**\n   * Updates the step value of the slider.\n   */\n  setStep(step: number): void {\n    this._options.step = step;\n    if (this._sliderLow) {\n      this._sliderLow.step = String(step);\n    }\n    if (this._sliderHigh) {\n      this._sliderHigh.step = String(step);\n    }\n  }\n\n  /**\n   * Updates the visual range highlight bar.\n   */\n  private _updateRangeHighlight(): void {\n    if (!this._rangeHighlight || !this._sliderLow || !this._sliderHigh) return;\n\n    const low = parseFloat(this._sliderLow.value);\n    const high = parseFloat(this._sliderHigh.value);\n    const min = this._options.min;\n    const max = this._options.max;\n    const percentLow = ((low - min) / (max - min)) * 100;\n    const percentHigh = ((high - min) / (max - min)) * 100;\n    this._rangeHighlight.style.left = `${percentLow}%`;\n    this._rangeHighlight.style.width = `${percentHigh - percentLow}%`;\n  }\n\n  /**\n   * Gets the current range values.\n   */\n  getRange(): [number, number] {\n    const low = this._sliderLow ? parseFloat(this._sliderLow.value) : this._options.valueLow;\n    const high = this._sliderHigh ? parseFloat(this._sliderHigh.value) : this._options.valueHigh;\n    return [low, high];\n  }\n\n  /**\n   * Formats the range for display.\n   */\n  private _formatRange(low: number, high: number): string {\n    const format = this._options.formatValue || ((v: number) => v.toFixed(1));\n    return `${format(low)} - ${format(high)}`;\n  }\n}\n","import { CLASSIFICATION_COLORS, getClassificationName } from '../colorizers/ColorScheme';\n\n/**\n * Options for creating a classification legend\n */\nexport interface ClassificationLegendOptions {\n  /** Classification codes to display */\n  classifications: number[];\n  /** Set of currently hidden classification codes */\n  hiddenClassifications: Set<number>;\n  /** Callback when a classification visibility is toggled */\n  onToggle: (classificationCode: number, visible: boolean) => void;\n  /** Callback to show all classifications */\n  onShowAll: () => void;\n  /** Callback to hide all classifications */\n  onHideAll: () => void;\n}\n\n/**\n * Creates a classification legend with toggleable visibility checkboxes.\n * Shows color swatches and names for each classification type found in the data.\n */\nexport class ClassificationLegend {\n  private _options: ClassificationLegendOptions;\n  private _container?: HTMLElement;\n  private _listContainer?: HTMLElement;\n  private _checkboxes: Map<number, HTMLInputElement> = new Map();\n\n  constructor(options: ClassificationLegendOptions) {\n    this._options = options;\n  }\n\n  /**\n   * Renders the legend element.\n   *\n   * @returns The legend container element\n   */\n  render(): HTMLElement {\n    const container = document.createElement('div');\n    container.className = 'lidar-classification-legend';\n    this._container = container;\n\n    // Header with Show All / Hide All buttons\n    const header = document.createElement('div');\n    header.className = 'lidar-classification-legend-header';\n\n    const showAllBtn = document.createElement('button');\n    showAllBtn.type = 'button';\n    showAllBtn.className = 'lidar-legend-action-btn';\n    showAllBtn.textContent = 'Show All';\n    showAllBtn.addEventListener('click', () => this._options.onShowAll());\n\n    const hideAllBtn = document.createElement('button');\n    hideAllBtn.type = 'button';\n    hideAllBtn.className = 'lidar-legend-action-btn';\n    hideAllBtn.textContent = 'Hide All';\n    hideAllBtn.addEventListener('click', () => this._options.onHideAll());\n\n    header.appendChild(showAllBtn);\n    header.appendChild(hideAllBtn);\n    container.appendChild(header);\n\n    // Legend items list\n    const list = document.createElement('div');\n    list.className = 'lidar-classification-legend-list';\n    this._listContainer = list;\n\n    // Sort classifications by code for consistent ordering\n    const sortedClassifications = [...this._options.classifications].sort((a, b) => a - b);\n\n    if (sortedClassifications.length === 0) {\n      // Show placeholder message\n      const placeholder = document.createElement('div');\n      placeholder.className = 'lidar-classification-empty';\n      placeholder.textContent = 'Loading classifications...';\n      list.appendChild(placeholder);\n    } else {\n      for (const code of sortedClassifications) {\n        list.appendChild(this._buildLegendItem(code));\n      }\n    }\n\n    container.appendChild(list);\n    return container;\n  }\n\n  /**\n   * Builds a single legend item with checkbox, color swatch, and label.\n   *\n   * @param code - Classification code\n   * @returns The legend item element\n   */\n  private _buildLegendItem(code: number): HTMLElement {\n    const item = document.createElement('div');\n    item.className = 'lidar-classification-legend-item';\n\n    // Checkbox\n    const checkbox = document.createElement('input');\n    checkbox.type = 'checkbox';\n    checkbox.checked = !this._options.hiddenClassifications.has(code);\n    checkbox.id = `lidar-class-${code}`;\n    checkbox.addEventListener('change', () => {\n      this._options.onToggle(code, checkbox.checked);\n    });\n    this._checkboxes.set(code, checkbox);\n\n    // Color swatch\n    const swatch = document.createElement('span');\n    swatch.className = 'lidar-classification-swatch';\n    const color = CLASSIFICATION_COLORS[code] || [128, 128, 128];\n    swatch.style.backgroundColor = `rgb(${color[0]}, ${color[1]}, ${color[2]})`;\n\n    // Label\n    const label = document.createElement('label');\n    label.htmlFor = `lidar-class-${code}`;\n    label.className = 'lidar-classification-label';\n    label.textContent = getClassificationName(code);\n\n    item.appendChild(checkbox);\n    item.appendChild(swatch);\n    item.appendChild(label);\n\n    return item;\n  }\n\n  /**\n   * Updates visibility of a specific classification checkbox.\n   *\n   * @param code - Classification code\n   * @param visible - Whether it should be visible (checked)\n   */\n  updateClassification(code: number, visible: boolean): void {\n    const checkbox = this._checkboxes.get(code);\n    if (checkbox) {\n      checkbox.checked = visible;\n    }\n  }\n\n  /**\n   * Updates all classification checkboxes at once.\n   *\n   * @param hiddenClassifications - Set of hidden classification codes\n   */\n  updateAll(hiddenClassifications: Set<number>): void {\n    for (const [code, checkbox] of this._checkboxes) {\n      checkbox.checked = !hiddenClassifications.has(code);\n    }\n  }\n\n  /**\n   * Updates the list of available classifications and re-renders the list.\n   *\n   * @param classifications - Array of classification codes to display\n   * @param hiddenClassifications - Set of hidden classification codes\n   */\n  setClassifications(classifications: number[], hiddenClassifications: Set<number>): void {\n    this._options.classifications = classifications;\n    this._options.hiddenClassifications = hiddenClassifications;\n\n    // Re-render the list\n    if (this._listContainer) {\n      // Clear existing items\n      this._listContainer.innerHTML = '';\n      this._checkboxes.clear();\n\n      if (classifications.length === 0) {\n        // Show placeholder message\n        const placeholder = document.createElement('div');\n        placeholder.className = 'lidar-classification-empty';\n        placeholder.textContent = 'No classifications found';\n        this._listContainer.appendChild(placeholder);\n      } else {\n        // Sort and rebuild\n        const sortedClassifications = [...classifications].sort((a, b) => a - b);\n\n        for (const code of sortedClassifications) {\n          this._listContainer.appendChild(this._buildLegendItem(code));\n        }\n      }\n    }\n  }\n\n  /**\n   * Gets the container element.\n   *\n   * @returns The container element or undefined if not rendered\n   */\n  getContainer(): HTMLElement | undefined {\n    return this._container;\n  }\n}\n","import type { ColormapName } from '../core/types';\nimport { COLORMAPS } from '../colorizers/Colormaps';\n\n/**\n * Options for the Colorbar component\n */\nexport interface ColorbarOptions {\n  /** Colormap to display */\n  colormap: ColormapName;\n  /** Minimum value for the colorbar */\n  minValue: number;\n  /** Maximum value for the colorbar */\n  maxValue: number;\n  /** Label for the colorbar (e.g., \"Elevation (m)\") */\n  label?: string;\n}\n\n/**\n * A visual colorbar legend component that displays a color gradient\n * with min/max value labels.\n */\nexport class Colorbar {\n  private _options: ColorbarOptions;\n  private _canvas?: HTMLCanvasElement;\n  private _minLabel?: HTMLElement;\n  private _maxLabel?: HTMLElement;\n\n  /**\n   * Creates a new Colorbar instance.\n   *\n   * @param options - Colorbar configuration options\n   */\n  constructor(options: ColorbarOptions) {\n    this._options = { ...options };\n  }\n\n  /**\n   * Renders the colorbar component.\n   *\n   * @returns The colorbar container element\n   */\n  render(): HTMLElement {\n    const container = document.createElement('div');\n    container.className = 'lidar-colorbar';\n\n    // Optional label\n    if (this._options.label) {\n      const label = document.createElement('div');\n      label.className = 'lidar-colorbar-label';\n      label.textContent = this._options.label;\n      container.appendChild(label);\n    }\n\n    // Canvas for gradient\n    const canvas = document.createElement('canvas');\n    canvas.className = 'lidar-colorbar-gradient';\n    canvas.width = 200;\n    canvas.height = 14;\n    this._canvas = canvas;\n    container.appendChild(canvas);\n\n    // Labels container\n    const labelsContainer = document.createElement('div');\n    labelsContainer.className = 'lidar-colorbar-labels';\n\n    const minLabel = document.createElement('span');\n    minLabel.className = 'lidar-colorbar-min';\n    this._minLabel = minLabel;\n\n    const maxLabel = document.createElement('span');\n    maxLabel.className = 'lidar-colorbar-max';\n    this._maxLabel = maxLabel;\n\n    labelsContainer.appendChild(minLabel);\n    labelsContainer.appendChild(maxLabel);\n    container.appendChild(labelsContainer);\n\n    // Draw the gradient and update labels\n    this._drawGradient();\n    this._updateLabels();\n\n    return container;\n  }\n\n  /**\n   * Updates the colorbar with new options.\n   *\n   * @param options - Partial options to update\n   */\n  update(options: Partial<ColorbarOptions>): void {\n    if (options.colormap !== undefined) {\n      this._options.colormap = options.colormap;\n    }\n    if (options.minValue !== undefined) {\n      this._options.minValue = options.minValue;\n    }\n    if (options.maxValue !== undefined) {\n      this._options.maxValue = options.maxValue;\n    }\n    if (options.label !== undefined) {\n      this._options.label = options.label;\n    }\n\n    this._drawGradient();\n    this._updateLabels();\n  }\n\n  /**\n   * Sets the colormap.\n   *\n   * @param colormap - The colormap name\n   */\n  setColormap(colormap: ColormapName): void {\n    this._options.colormap = colormap;\n    this._drawGradient();\n  }\n\n  /**\n   * Sets the value range.\n   *\n   * @param min - Minimum value\n   * @param max - Maximum value\n   */\n  setRange(min: number, max: number): void {\n    this._options.minValue = min;\n    this._options.maxValue = max;\n    this._updateLabels();\n  }\n\n  /**\n   * Gets the current colormap.\n   *\n   * @returns The current colormap name\n   */\n  getColormap(): ColormapName {\n    return this._options.colormap;\n  }\n\n  /**\n   * Gets the current value range.\n   *\n   * @returns Object with min and max values\n   */\n  getRange(): { min: number; max: number } {\n    return {\n      min: this._options.minValue,\n      max: this._options.maxValue,\n    };\n  }\n\n  /**\n   * Draws the color gradient on the canvas.\n   */\n  private _drawGradient(): void {\n    if (!this._canvas) return;\n\n    const ctx = this._canvas.getContext('2d');\n    if (!ctx) return;\n\n    const width = this._canvas.width;\n    const height = this._canvas.height;\n    const ramp = COLORMAPS[this._options.colormap] || COLORMAPS.viridis;\n\n    // Create gradient\n    const gradient = ctx.createLinearGradient(0, 0, width, 0);\n\n    // Add color stops from the ramp\n    for (let i = 0; i < ramp.length; i++) {\n      const t = i / (ramp.length - 1);\n      const [r, g, b] = ramp[i];\n      gradient.addColorStop(t, `rgb(${r}, ${g}, ${b})`);\n    }\n\n    // Fill with gradient\n    ctx.fillStyle = gradient;\n    ctx.fillRect(0, 0, width, height);\n  }\n\n  /**\n   * Updates the min/max value labels.\n   */\n  private _updateLabels(): void {\n    if (this._minLabel) {\n      this._minLabel.textContent = this._formatValue(this._options.minValue);\n    }\n    if (this._maxLabel) {\n      this._maxLabel.textContent = this._formatValue(this._options.maxValue);\n    }\n  }\n\n  /**\n   * Formats a value for display.\n   *\n   * @param value - The value to format\n   * @returns Formatted string\n   */\n  private _formatValue(value: number): string {\n    if (!Number.isFinite(value)) {\n      return '—';\n    }\n    // Use appropriate precision based on the range\n    const range = Math.abs(this._options.maxValue - this._options.minValue);\n    if (range < 1) {\n      return value.toFixed(3);\n    } else if (range < 10) {\n      return value.toFixed(2);\n    } else if (range < 100) {\n      return value.toFixed(1);\n    } else {\n      return value.toFixed(0);\n    }\n  }\n}\n","import type { ColorRangeConfig } from '../core/types';\nimport { DualRangeSlider } from './DualRangeSlider';\n\n/** Default percentile values */\nconst DEFAULT_PERCENTILE_LOW = 2;\nconst DEFAULT_PERCENTILE_HIGH = 98;\n\n/**\n * Options for the PercentileRangeControl component\n */\nexport interface PercentileRangeControlOptions {\n  /** Current color range configuration */\n  config: ColorRangeConfig;\n  /** Data bounds for reference (used in absolute mode) */\n  dataBounds?: { min: number; max: number };\n  /** Actual computed bounds from percentile calculation (for mode switching) */\n  computedBounds?: { min: number; max: number };\n  /** Callback when the configuration changes */\n  onChange: (config: ColorRangeConfig) => void;\n}\n\n/**\n * A control component for configuring color range mapping.\n * Allows switching between percentile and absolute value modes.\n * Uses dual range sliders for intuitive range selection.\n */\nexport class PercentileRangeControl {\n  private _options: PercentileRangeControlOptions;\n  private _percentileRadio?: HTMLInputElement;\n  private _absoluteRadio?: HTMLInputElement;\n  private _percentileSliderContainer?: HTMLElement;\n  private _absoluteSliderContainer?: HTMLElement;\n  private _percentileSlider?: DualRangeSlider;\n  private _absoluteSlider?: DualRangeSlider;\n  private _computedBounds?: { min: number; max: number };\n\n  /**\n   * Creates a new PercentileRangeControl instance.\n   *\n   * @param options - Control configuration options\n   */\n  constructor(options: PercentileRangeControlOptions) {\n    this._options = { ...options };\n    this._computedBounds = options.computedBounds;\n  }\n\n  /**\n   * Renders the control component.\n   *\n   * @returns The control container element\n   */\n  render(): HTMLElement {\n    const container = document.createElement('div');\n    container.className = 'lidar-color-range';\n\n    // Label row with Reset button\n    const labelRow = document.createElement('div');\n    labelRow.className = 'lidar-color-range-header';\n\n    const label = document.createElement('div');\n    label.className = 'lidar-control-label';\n    label.textContent = 'Color Range';\n    labelRow.appendChild(label);\n\n    // Reset button\n    const resetButton = document.createElement('button');\n    resetButton.className = 'lidar-range-reset-btn';\n    resetButton.textContent = 'Reset';\n    resetButton.title = 'Reset to default (2-98% percentile)';\n    resetButton.addEventListener('click', () => this._onReset());\n    labelRow.appendChild(resetButton);\n\n    container.appendChild(labelRow);\n\n    // Mode toggle (radio buttons)\n    const modeContainer = document.createElement('div');\n    modeContainer.className = 'lidar-range-mode';\n\n    // Percentile radio\n    const percentileLabel = document.createElement('label');\n    const percentileRadio = document.createElement('input');\n    percentileRadio.type = 'radio';\n    percentileRadio.name = 'lidar-range-mode';\n    percentileRadio.value = 'percentile';\n    percentileRadio.checked = this._options.config.mode === 'percentile';\n    this._percentileRadio = percentileRadio;\n    percentileLabel.appendChild(percentileRadio);\n    percentileLabel.appendChild(document.createTextNode(' Percentile'));\n    modeContainer.appendChild(percentileLabel);\n\n    // Absolute radio\n    const absoluteLabel = document.createElement('label');\n    const absoluteRadio = document.createElement('input');\n    absoluteRadio.type = 'radio';\n    absoluteRadio.name = 'lidar-range-mode';\n    absoluteRadio.value = 'absolute';\n    absoluteRadio.checked = this._options.config.mode === 'absolute';\n    this._absoluteRadio = absoluteRadio;\n    absoluteLabel.appendChild(absoluteRadio);\n    absoluteLabel.appendChild(document.createTextNode(' Absolute'));\n    modeContainer.appendChild(absoluteLabel);\n\n    container.appendChild(modeContainer);\n\n    // Percentile slider container\n    const percentileSliderContainer = document.createElement('div');\n    percentileSliderContainer.style.display = this._options.config.mode === 'percentile' ? 'block' : 'none';\n    this._percentileSliderContainer = percentileSliderContainer;\n\n    // Create percentile dual range slider (0-100%)\n    this._percentileSlider = new DualRangeSlider({\n      label: '',\n      min: 0,\n      max: 100,\n      step: 1,\n      valueLow: this._options.config.percentileLow ?? DEFAULT_PERCENTILE_LOW,\n      valueHigh: this._options.config.percentileHigh ?? DEFAULT_PERCENTILE_HIGH,\n      onChange: (low, high) => this._onPercentileChange(low, high),\n      formatValue: (v) => `${v.toFixed(0)}%`,\n    });\n    percentileSliderContainer.appendChild(this._percentileSlider.render());\n\n    container.appendChild(percentileSliderContainer);\n\n    // Absolute slider container\n    const absoluteSliderContainer = document.createElement('div');\n    absoluteSliderContainer.style.display = this._options.config.mode === 'absolute' ? 'block' : 'none';\n    this._absoluteSliderContainer = absoluteSliderContainer;\n\n    // Create absolute dual range slider\n    const dataBounds = this._options.dataBounds || { min: 0, max: 100 };\n    const absMin = this._options.config.absoluteMin ?? dataBounds.min;\n    const absMax = this._options.config.absoluteMax ?? dataBounds.max;\n\n    this._absoluteSlider = new DualRangeSlider({\n      label: '',\n      min: dataBounds.min,\n      max: dataBounds.max,\n      step: this._getAbsoluteStep(dataBounds),\n      valueLow: absMin,\n      valueHigh: absMax,\n      onChange: (low, high) => this._onAbsoluteChange(low, high),\n      formatValue: (v) => this._formatAbsoluteValue(v),\n    });\n    absoluteSliderContainer.appendChild(this._absoluteSlider.render());\n\n    container.appendChild(absoluteSliderContainer);\n\n    // Event listeners for mode toggle\n    percentileRadio.addEventListener('change', () => this._onModeChange());\n    absoluteRadio.addEventListener('change', () => this._onModeChange());\n\n    return container;\n  }\n\n  /**\n   * Updates the control with new configuration.\n   *\n   * @param config - New color range configuration\n   */\n  setConfig(config: ColorRangeConfig): void {\n    this._options.config = { ...config };\n\n    if (this._percentileRadio && this._absoluteRadio) {\n      this._percentileRadio.checked = config.mode === 'percentile';\n      this._absoluteRadio.checked = config.mode === 'absolute';\n    }\n\n    if (this._percentileSlider) {\n      this._percentileSlider.setRange(\n        config.percentileLow ?? DEFAULT_PERCENTILE_LOW,\n        config.percentileHigh ?? DEFAULT_PERCENTILE_HIGH\n      );\n    }\n\n    if (this._absoluteSlider) {\n      const dataBounds = this._options.dataBounds || { min: 0, max: 100 };\n      this._absoluteSlider.setRange(\n        config.absoluteMin ?? dataBounds.min,\n        config.absoluteMax ?? dataBounds.max\n      );\n    }\n\n    this._updateSlidersVisibility();\n  }\n\n  /**\n   * Updates the data bounds (for absolute mode reference).\n   *\n   * @param bounds - Data bounds\n   */\n  setDataBounds(bounds: { min: number; max: number }): void {\n    this._options.dataBounds = bounds;\n\n    // Update absolute slider bounds and step\n    if (this._absoluteSlider) {\n      this._absoluteSlider.setBounds(bounds.min, bounds.max);\n      this._absoluteSlider.setStep(this._getAbsoluteStep(bounds));\n\n      // If absolute values not explicitly set, use the bounds\n      if (this._options.config.absoluteMin === undefined) {\n        this._options.config.absoluteMin = bounds.min;\n      }\n      if (this._options.config.absoluteMax === undefined) {\n        this._options.config.absoluteMax = bounds.max;\n      }\n\n      // Clamp existing values to new bounds\n      const currentMin = this._options.config.absoluteMin ?? bounds.min;\n      const currentMax = this._options.config.absoluteMax ?? bounds.max;\n      const clampedMin = Math.max(bounds.min, Math.min(bounds.max, currentMin));\n      const clampedMax = Math.max(bounds.min, Math.min(bounds.max, currentMax));\n\n      this._absoluteSlider.setRange(clampedMin, clampedMax);\n    }\n  }\n\n  /**\n   * Sets the actual computed bounds from percentile calculation.\n   * These bounds are used when switching from percentile to absolute mode.\n   *\n   * @param bounds - The actual computed bounds\n   */\n  setComputedBounds(bounds: { min: number; max: number }): void {\n    this._computedBounds = bounds;\n  }\n\n  /**\n   * Gets the current configuration.\n   *\n   * @returns The current color range configuration\n   */\n  getConfig(): ColorRangeConfig {\n    return { ...this._options.config };\n  }\n\n  /**\n   * Handles percentile slider change.\n   */\n  private _onPercentileChange(low: number, high: number): void {\n    this._options.config.percentileLow = low;\n    this._options.config.percentileHigh = high;\n    this._emitChange();\n  }\n\n  /**\n   * Handles absolute slider change.\n   */\n  private _onAbsoluteChange(low: number, high: number): void {\n    this._options.config.absoluteMin = low;\n    this._options.config.absoluteMax = high;\n    this._emitChange();\n  }\n\n  /**\n   * Handles mode change (percentile/absolute toggle).\n   * Syncs values when switching between modes using actual computed bounds.\n   */\n  private _onModeChange(): void {\n    const newMode = this._percentileRadio?.checked ? 'percentile' : 'absolute';\n    const oldMode = this._options.config.mode;\n\n    // Sync values when switching modes\n    if (newMode !== oldMode) {\n      if (newMode === 'absolute') {\n        // Switching from percentile to absolute: use actual computed bounds\n        if (this._computedBounds) {\n          // Use the actual computed percentile bounds\n          this._options.config.absoluteMin = this._computedBounds.min;\n          this._options.config.absoluteMax = this._computedBounds.max;\n        } else if (this._options.dataBounds) {\n          // Fallback to linear approximation if no computed bounds available\n          const { min: dataMin, max: dataMax } = this._options.dataBounds;\n          const range = dataMax - dataMin;\n          const pLow = this._options.config.percentileLow ?? DEFAULT_PERCENTILE_LOW;\n          const pHigh = this._options.config.percentileHigh ?? DEFAULT_PERCENTILE_HIGH;\n\n          this._options.config.absoluteMin = parseFloat((dataMin + range * (pLow / 100)).toFixed(2));\n          this._options.config.absoluteMax = parseFloat((dataMin + range * (pHigh / 100)).toFixed(2));\n        }\n\n        // Update absolute slider\n        if (this._absoluteSlider && this._options.config.absoluteMin !== undefined && this._options.config.absoluteMax !== undefined) {\n          this._absoluteSlider.setRange(this._options.config.absoluteMin, this._options.config.absoluteMax);\n        }\n      }\n      // When switching from absolute to percentile, keep existing percentile values\n    }\n\n    this._options.config.mode = newMode;\n    this._updateSlidersVisibility();\n    this._emitChange();\n  }\n\n  /**\n   * Handles reset button click.\n   * Resets to default percentile mode with 2-98% range.\n   */\n  private _onReset(): void {\n    // Reset to default percentile mode\n    this._options.config.mode = 'percentile';\n    this._options.config.percentileLow = DEFAULT_PERCENTILE_LOW;\n    this._options.config.percentileHigh = DEFAULT_PERCENTILE_HIGH;\n\n    // Calculate corresponding absolute values for reference\n    if (this._options.dataBounds) {\n      const { min: dataMin, max: dataMax } = this._options.dataBounds;\n      const range = dataMax - dataMin;\n      this._options.config.absoluteMin = parseFloat((dataMin + range * (DEFAULT_PERCENTILE_LOW / 100)).toFixed(2));\n      this._options.config.absoluteMax = parseFloat((dataMin + range * (DEFAULT_PERCENTILE_HIGH / 100)).toFixed(2));\n    }\n\n    // Update UI\n    if (this._percentileRadio) {\n      this._percentileRadio.checked = true;\n    }\n    if (this._absoluteRadio) {\n      this._absoluteRadio.checked = false;\n    }\n    if (this._percentileSlider) {\n      this._percentileSlider.setRange(DEFAULT_PERCENTILE_LOW, DEFAULT_PERCENTILE_HIGH);\n    }\n    if (this._absoluteSlider && this._options.config.absoluteMin !== undefined && this._options.config.absoluteMax !== undefined) {\n      this._absoluteSlider.setRange(this._options.config.absoluteMin, this._options.config.absoluteMax);\n    }\n\n    this._updateSlidersVisibility();\n    this._emitChange();\n  }\n\n  /**\n   * Updates the visibility of slider containers based on mode.\n   */\n  private _updateSlidersVisibility(): void {\n    if (this._percentileSliderContainer) {\n      this._percentileSliderContainer.style.display =\n        this._options.config.mode === 'percentile' ? 'block' : 'none';\n    }\n    if (this._absoluteSliderContainer) {\n      this._absoluteSliderContainer.style.display =\n        this._options.config.mode === 'absolute' ? 'block' : 'none';\n    }\n  }\n\n  /**\n   * Gets the appropriate step value for absolute slider based on data range.\n   */\n  private _getAbsoluteStep(bounds: { min: number; max: number }): number {\n    const range = bounds.max - bounds.min;\n    if (range <= 1) {\n      return 0.01;\n    } else if (range <= 10) {\n      return 0.1;\n    } else if (range <= 100) {\n      return 1;\n    } else if (range <= 1000) {\n      return 1;\n    } else {\n      return Math.round(range / 100);\n    }\n  }\n\n  /**\n   * Formats absolute value for display based on the data range.\n   */\n  private _formatAbsoluteValue(value: number): string {\n    const bounds = this._options.dataBounds || { min: 0, max: 100 };\n    const range = bounds.max - bounds.min;\n\n    if (range <= 1) {\n      return value.toFixed(2);\n    } else if (range <= 10) {\n      return value.toFixed(1);\n    } else {\n      return value.toFixed(0);\n    }\n  }\n\n  /**\n   * Emits a change event with the current configuration.\n   */\n  private _emitChange(): void {\n    this._options.onChange({ ...this._options.config });\n  }\n}\n","import type {\n  LidarState,\n  ColorScheme,\n  PointCloudInfo,\n  ColormapName,\n  ColorRangeConfig,\n  LidarSampleDataset,\n} from '../core/types';\nimport { FileInput } from './FileInput';\nimport { RangeSlider } from './RangeSlider';\nimport { DualRangeSlider } from './DualRangeSlider';\nimport { ClassificationLegend } from './ClassificationLegend';\nimport { Colorbar } from './Colorbar';\nimport { PercentileRangeControl } from './PercentileRangeControl';\nimport { formatNumber } from '../utils/helpers';\nimport { COLORMAP_NAMES, COLORMAP_LABELS } from '../colorizers/Colormaps';\n\n/**\n * Callbacks for panel interactions\n */\nexport interface PanelBuilderCallbacks {\n  onFileSelect: (file: File) => void;\n  onUrlSubmit: (url: string) => void;\n  onPointSizeChange: (size: number) => void;\n  onOpacityChange: (opacity: number) => void;\n  onColorSchemeChange: (scheme: ColorScheme) => void;\n  onColormapChange: (colormap: ColormapName) => void;\n  onColorRangeChange: (config: ColorRangeConfig) => void;\n  onUsePercentileChange: (usePercentile: boolean) => void;\n  onElevationRangeChange: (range: [number, number] | null) => void;\n  onPickableChange: (pickable: boolean) => void;\n  onZOffsetEnabledChange: (enabled: boolean) => void;\n  onZOffsetChange: (offset: number) => void;\n  onTerrainChange: (enabled: boolean) => void;\n  onUnload: (id: string) => void;\n  onZoomTo: (id: string) => void;\n  onClassificationToggle: (classificationCode: number, visible: boolean) => void;\n  onClassificationShowAll: () => void;\n  onClassificationHideAll: () => void;\n  onShowMetadata?: (id: string) => void;\n  onCrossSectionPanel?: () => HTMLElement | null;\n  onShareUrl?: () => string;\n}\n\n/**\n * Builds and manages the LiDAR control panel UI.\n */\nexport class PanelBuilder {\n  private _callbacks: PanelBuilderCallbacks;\n  private _state: LidarState;\n  private _sampleData: LidarSampleDataset[];\n  private _sampleDataLabel: string;\n\n  // UI component references\n  private _fileInput?: FileInput;\n  private _urlInput?: HTMLInputElement;\n  private _loadButton?: HTMLButtonElement;\n  private _colorSelect?: HTMLSelectElement;\n  private _colormapSelect?: HTMLSelectElement;\n  private _colormapGroup?: HTMLElement;\n  private _colorbar?: Colorbar;\n  private _colorbarContainer?: HTMLElement;\n  private _colorRangeControl?: PercentileRangeControl;\n  private _colorRangeContainer?: HTMLElement;\n  private _percentileCheckbox?: HTMLInputElement;\n  private _percentileGroup?: HTMLElement;\n  private _pointSizeSlider?: RangeSlider;\n  private _opacitySlider?: RangeSlider;\n  private _pointCloudsList?: HTMLElement;\n  private _pickableCheckbox?: HTMLInputElement;\n  private _elevationSlider?: DualRangeSlider;\n  private _elevationCheckbox?: HTMLInputElement;\n  private _zOffsetCheckbox?: HTMLInputElement;\n  private _zOffsetSlider?: RangeSlider;\n  private _zOffsetSliderContainer?: HTMLElement;\n  private _terrainCheckbox?: HTMLInputElement;\n  private _loadingIndicator?: HTMLElement;\n  private _errorMessage?: HTMLElement;\n  private _classificationLegend?: ClassificationLegend;\n  private _classificationLegendContainer?: HTMLElement;\n  private _shareFeedbackTimeout?: ReturnType<typeof setTimeout>;\n\n  constructor(\n    callbacks: PanelBuilderCallbacks,\n    initialState: LidarState,\n    options?: { sampleData?: LidarSampleDataset[]; sampleDataLabel?: string },\n  ) {\n    this._callbacks = callbacks;\n    this._state = initialState;\n    this._sampleData = options?.sampleData ?? [];\n    this._sampleDataLabel = options?.sampleDataLabel ?? 'Load sample data...';\n  }\n\n  /**\n   * Builds and returns the panel content.\n   *\n   * @returns The panel content element\n   */\n  build(): HTMLElement {\n    const content = document.createElement('div');\n    content.className = 'lidar-control-content';\n    // The content fills the panel (flex: 1) and scrolls as needed; the panel's\n    // own height/max-height is managed by LidarControl._updatePanelPosition().\n\n    // File input section\n    content.appendChild(this._buildFileSection());\n\n    // Styling section\n    content.appendChild(this._buildStylingSection());\n\n    // Point clouds list\n    content.appendChild(this._buildPointCloudsList());\n\n    // Cross-section panel (if callback provided)\n    const crossSectionPanel = this._buildCrossSectionSection();\n    if (crossSectionPanel) {\n      content.appendChild(crossSectionPanel);\n    }\n\n    // Loading indicator\n    content.appendChild(this._buildLoadingIndicator());\n\n    // Error message\n    content.appendChild(this._buildErrorMessage());\n\n    const shareSection = this._buildShareSection();\n    if (shareSection) {\n      content.appendChild(shareSection);\n    }\n\n    return content;\n  }\n\n  /**\n   * Updates the UI to reflect the current state.\n   *\n   * @param state - New state\n   */\n  updateState(state: LidarState): void {\n    this._state = state;\n\n    // Update loading state\n    if (this._loadingIndicator) {\n      if (state.loading) {\n        this._loadingIndicator.classList.add('active');\n      } else {\n        this._loadingIndicator.classList.remove('active');\n      }\n    }\n\n    // Update error message\n    if (this._errorMessage) {\n      if (state.error) {\n        this._errorMessage.textContent = state.error;\n        this._errorMessage.style.display = 'block';\n      } else {\n        this._errorMessage.style.display = 'none';\n      }\n    }\n\n    // Update point clouds list\n    this._updatePointCloudsList();\n\n    // Update sliders\n    if (this._pointSizeSlider) {\n      this._pointSizeSlider.setValue(state.pointSize);\n    }\n    if (this._opacitySlider) {\n      this._opacitySlider.setValue(state.opacity);\n    }\n\n    // Update color scheme\n    if (this._colorSelect && typeof state.colorScheme === 'string') {\n      this._colorSelect.value = state.colorScheme;\n      this._updatePercentileVisibility(state.colorScheme);\n    }\n\n    // Update colormap selector\n    if (this._colormapSelect && state.colormap) {\n      this._colormapSelect.value = state.colormap;\n    }\n\n    // Update colorbar\n    if (this._colorbar) {\n      if (state.colormap) {\n        this._colorbar.setColormap(state.colormap);\n      }\n      if (state.computedColorBounds) {\n        this._colorbar.setRange(state.computedColorBounds.min, state.computedColorBounds.max);\n      }\n    }\n\n    // Update color range control\n    if (this._colorRangeControl && state.colorRange) {\n      this._colorRangeControl.setConfig(state.colorRange);\n      // Also update data bounds based on current color scheme\n      const bounds = this._getDataBoundsForCurrentScheme();\n      this._colorRangeControl.setDataBounds(bounds);\n      // Update computed bounds for mode switching\n      if (state.computedColorBounds) {\n        this._colorRangeControl.setComputedBounds(state.computedColorBounds);\n      }\n    }\n\n    // Update percentile checkbox (legacy)\n    if (this._percentileCheckbox) {\n      this._percentileCheckbox.checked = state.usePercentile ?? true;\n    }\n\n    // Update pickable checkbox\n    if (this._pickableCheckbox) {\n      this._pickableCheckbox.checked = state.pickable ?? false;\n    }\n\n    // Update Z offset controls\n    if (this._zOffsetCheckbox) {\n      this._zOffsetCheckbox.checked = state.zOffsetEnabled ?? false;\n    }\n    if (this._zOffsetSliderContainer) {\n      this._zOffsetSliderContainer.style.display = state.zOffsetEnabled ? 'block' : 'none';\n    }\n    if (this._zOffsetSlider) {\n      // Update slider bounds centered around -zOffsetBase (the default z-offset)\n      if (state.zOffsetBase !== undefined) {\n        const defaultOffset = -state.zOffsetBase;\n        const sliderMin = defaultOffset - 100;\n        const sliderMax = defaultOffset + 100;\n        this._zOffsetSlider.setBounds(sliderMin, sliderMax);\n      }\n      this._zOffsetSlider.setValue(state.zOffset ?? 0);\n    }\n\n    // Update terrain checkbox\n    if (this._terrainCheckbox) {\n      this._terrainCheckbox.checked = state.terrainEnabled ?? false;\n    }\n\n    // Update elevation slider bounds when point clouds change\n    if (this._elevationSlider && state.pointClouds.length > 0) {\n      const bounds = this._getElevationBounds();\n      this._elevationSlider.setBounds(bounds.min, bounds.max);\n      // If filter is not active, reset range to full bounds\n      if (!this._elevationCheckbox?.checked) {\n        this._elevationSlider.setRange(bounds.min, bounds.max);\n      }\n    }\n\n    // Update classification legend\n    if (this._classificationLegend && state.availableClassifications) {\n      this._classificationLegend.setClassifications(\n        Array.from(state.availableClassifications),\n        state.hiddenClassifications || new Set()\n      );\n    }\n\n    // Disable/enable inputs during loading\n    const enabled = !state.loading;\n    this._fileInput?.setEnabled(enabled);\n    if (this._urlInput) this._urlInput.disabled = !enabled;\n    if (this._loadButton) this._loadButton.disabled = !enabled;\n  }\n\n  /**\n   * Updates the loading progress display.\n   *\n   * @param progress - Progress value (0-100)\n   * @param message - Optional progress message\n   */\n  updateLoadingProgress(progress: number, message?: string): void {\n    if (!this._loadingIndicator) return;\n\n    const progressBar = this._loadingIndicator.querySelector('.lidar-loading-bar-fill') as HTMLElement;\n    const progressText = this._loadingIndicator.querySelector('.lidar-loading-progress') as HTMLElement;\n\n    if (progressBar) {\n      progressBar.style.width = `${progress}%`;\n    }\n\n    if (progressText && message) {\n      progressText.textContent = message;\n    }\n  }\n\n  /**\n   * Builds the file input section.\n   */\n  private _buildFileSection(): HTMLElement {\n    const section = document.createElement('div');\n    section.className = 'lidar-control-section';\n\n    // File upload\n    this._fileInput = new FileInput({\n      accept: '.las,.laz',\n      onChange: (file) => this._callbacks.onFileSelect(file),\n    });\n    section.appendChild(this._fileInput.render());\n\n    // Sample-data dropdown (opt-in; fills the URL input)\n    const sampleDropdown = this._buildSampleDropdown();\n    if (sampleDropdown) section.appendChild(sampleDropdown);\n\n    // URL input\n    const urlGroup = document.createElement('div');\n    urlGroup.className = 'lidar-control-group';\n    urlGroup.style.marginTop = '12px';\n\n    const urlLabel = document.createElement('label');\n    urlLabel.className = 'lidar-control-label';\n    urlLabel.textContent = 'Load COPC or EPT from URL';\n    urlGroup.appendChild(urlLabel);\n\n    const urlRow = document.createElement('div');\n    urlRow.className = 'lidar-control-flex';\n\n    const urlInput = document.createElement('input');\n    urlInput.type = 'text';\n    urlInput.className = 'lidar-control-input';\n    urlInput.placeholder = 'https://example.com/pointcloud.laz';\n    urlInput.style.flex = '1';\n    this._urlInput = urlInput;\n\n    const loadBtn = document.createElement('button');\n    loadBtn.type = 'button';\n    loadBtn.className = 'lidar-control-button';\n    loadBtn.textContent = 'Load';\n    loadBtn.addEventListener('click', () => {\n      const url = urlInput.value.trim();\n      if (url) {\n        this._callbacks.onUrlSubmit(url);\n        urlInput.value = '';\n      }\n    });\n    this._loadButton = loadBtn;\n\n    // Allow Enter key to submit\n    urlInput.addEventListener('keypress', (e) => {\n      if (e.key === 'Enter') {\n        loadBtn.click();\n      }\n    });\n\n    urlRow.appendChild(urlInput);\n    urlRow.appendChild(loadBtn);\n    urlGroup.appendChild(urlRow);\n    section.appendChild(urlGroup);\n\n    return section;\n  }\n\n  /**\n   * Builds the \"Load sample data\" dropdown: a custom (not native `<select>`)\n   * dropdown so the menu themes correctly in dark mode. Picking an entry fills\n   * the URL input. Returns null when no samples are configured.\n   */\n  private _buildSampleDropdown(): HTMLElement | null {\n    if (this._sampleData.length === 0) return null;\n\n    const group = document.createElement('div');\n    group.className = 'lidar-control-group';\n    group.style.marginTop = '12px';\n\n    const label = document.createElement('label');\n    label.className = 'lidar-control-label';\n    label.textContent = 'Sample data';\n    group.appendChild(label);\n\n    const triggerLabel = document.createElement('span');\n    triggerLabel.className = 'lidar-sample-trigger-label';\n    triggerLabel.textContent = this._sampleDataLabel;\n    const caret = document.createElement('span');\n    caret.className = 'lidar-sample-caret';\n    caret.textContent = '▾';\n    const trigger = document.createElement('button');\n    trigger.type = 'button';\n    trigger.className = 'lidar-sample-trigger';\n    trigger.setAttribute('aria-haspopup', 'listbox');\n    trigger.setAttribute('aria-expanded', 'false');\n    trigger.setAttribute('aria-label', this._sampleDataLabel);\n    trigger.appendChild(triggerLabel);\n    trigger.appendChild(caret);\n\n    const menu = document.createElement('div');\n    menu.className = 'lidar-sample-menu';\n    menu.setAttribute('role', 'listbox');\n    menu.hidden = true;\n\n    let menuOpen = false;\n    const setMenuOpen = (open: boolean): void => {\n      menuOpen = open;\n      menu.hidden = !open;\n      trigger.setAttribute('aria-expanded', String(open));\n      trigger.classList.toggle('open', open);\n      if (open) (menu.firstElementChild as HTMLElement | null)?.focus();\n    };\n\n    for (const sample of this._sampleData) {\n      const option = document.createElement('button');\n      option.type = 'button';\n      option.className = 'lidar-sample-option';\n      option.setAttribute('role', 'option');\n      option.textContent = sample.label;\n      option.title = sample.url;\n      option.addEventListener('click', () => {\n        setMenuOpen(false);\n        trigger.focus();\n        if (this._urlInput) this._urlInput.value = sample.url;\n      });\n      menu.appendChild(option);\n    }\n\n    trigger.addEventListener('click', () => setMenuOpen(!menuOpen));\n\n    const dropdown = document.createElement('div');\n    dropdown.className = 'lidar-sample-dropdown';\n    dropdown.appendChild(trigger);\n    dropdown.appendChild(menu);\n    group.appendChild(dropdown);\n\n    // Close on Escape or when focus leaves the dropdown (no document listener).\n    group.addEventListener('keydown', (e) => {\n      if (e.key === 'Escape' && menuOpen) {\n        setMenuOpen(false);\n        trigger.focus();\n      }\n    });\n    group.addEventListener('focusout', (e) => {\n      const next = e.relatedTarget as Node | null;\n      if (!next || !group.contains(next)) setMenuOpen(false);\n    });\n\n    return group;\n  }\n\n  /**\n   * Builds the styling controls section.\n   */\n  private _buildStylingSection(): HTMLElement {\n    const section = document.createElement('div');\n    section.className = 'lidar-control-section';\n\n    // Section header\n    const header = document.createElement('div');\n    header.className = 'lidar-control-section-header';\n    header.textContent = 'Styling';\n    section.appendChild(header);\n\n    // Color scheme selector\n    const colorGroup = document.createElement('div');\n    colorGroup.className = 'lidar-control-group';\n\n    const colorLabel = document.createElement('label');\n    colorLabel.className = 'lidar-control-label';\n    colorLabel.textContent = 'Color By';\n    colorGroup.appendChild(colorLabel);\n\n    const colorSelect = document.createElement('select');\n    colorSelect.className = 'lidar-control-select';\n    colorSelect.innerHTML = `\n      <option value=\"elevation\">Elevation</option>\n      <option value=\"intensity\">Intensity</option>\n      <option value=\"classification\">Classification</option>\n      <option value=\"rgb\">RGB (if available)</option>\n    `;\n    colorSelect.value = typeof this._state.colorScheme === 'string' ? this._state.colorScheme : 'elevation';\n    colorSelect.addEventListener('change', () => {\n      this._callbacks.onColorSchemeChange(colorSelect.value as ColorScheme);\n      // Show/hide percentile option based on color scheme\n      this._updatePercentileVisibility(colorSelect.value);\n    });\n    this._colorSelect = colorSelect;\n    colorGroup.appendChild(colorSelect);\n    section.appendChild(colorGroup);\n\n    // Colormap selector (shown only for elevation and intensity)\n    section.appendChild(this._buildColormapSelector());\n\n    // Colorbar (shown only for elevation and intensity)\n    section.appendChild(this._buildColorbar());\n\n    // Classification legend (shown only when classification scheme is selected)\n    section.appendChild(this._buildClassificationLegend());\n\n    // Color range control (replaces percentile checkbox)\n    section.appendChild(this._buildColorRangeControl());\n\n    // Point size slider\n    this._pointSizeSlider = new RangeSlider({\n      label: 'Point Size',\n      min: 1,\n      max: 10,\n      step: 0.5,\n      value: this._state.pointSize,\n      onChange: (v) => this._callbacks.onPointSizeChange(v),\n    });\n    section.appendChild(this._pointSizeSlider.render());\n\n    // Opacity slider\n    this._opacitySlider = new RangeSlider({\n      label: 'Opacity',\n      min: 0,\n      max: 1,\n      step: 0.05,\n      value: this._state.opacity,\n      onChange: (v) => this._callbacks.onOpacityChange(v),\n    });\n    section.appendChild(this._opacitySlider.render());\n\n    // 3D Terrain toggle\n    section.appendChild(this._buildTerrainCheckbox());\n\n    // Pickable checkbox\n    section.appendChild(this._buildPickableCheckbox());\n\n    // Elevation filter (collapsible)\n    section.appendChild(this._buildElevationFilter());\n\n    // Z offset control (collapsible)\n    section.appendChild(this._buildZOffsetControl());\n\n    return section;\n  }\n\n  /**\n   * Builds the elevation filter controls with checkbox and dual slider.\n   */\n  private _buildElevationFilter(): HTMLElement {\n    const group = document.createElement('div');\n    group.className = 'lidar-control-group';\n\n    // Checkbox row\n    const labelRow = document.createElement('div');\n    labelRow.className = 'lidar-control-label-row';\n    labelRow.style.cursor = 'pointer';\n\n    const checkbox = document.createElement('input');\n    checkbox.type = 'checkbox';\n    checkbox.id = 'lidar-elevation-filter-checkbox';\n    checkbox.style.marginRight = '6px';\n    this._elevationCheckbox = checkbox;\n\n    const label = document.createElement('label');\n    label.className = 'lidar-control-label';\n    label.htmlFor = 'lidar-elevation-filter-checkbox';\n    label.style.display = 'inline';\n    label.style.cursor = 'pointer';\n    label.textContent = 'Elevation Filter';\n\n    labelRow.appendChild(checkbox);\n    labelRow.appendChild(label);\n    group.appendChild(labelRow);\n\n    // Slider container (hidden by default)\n    const sliderContainer = document.createElement('div');\n    sliderContainer.style.display = 'none';\n    sliderContainer.style.marginTop = '8px';\n\n    // Get elevation bounds from loaded point clouds\n    const bounds = this._getElevationBounds();\n\n    // Create dual range slider\n    this._elevationSlider = new DualRangeSlider({\n      label: 'Range (m)',\n      min: bounds.min,\n      max: bounds.max,\n      step: 1,\n      valueLow: bounds.min,\n      valueHigh: bounds.max,\n      onChange: (low, high) => {\n        if (checkbox.checked) {\n          this._callbacks.onElevationRangeChange([low, high]);\n        }\n      },\n      formatValue: (v) => v.toFixed(0),\n    });\n\n    sliderContainer.appendChild(this._elevationSlider.render());\n    group.appendChild(sliderContainer);\n\n    // Toggle visibility and filter\n    checkbox.addEventListener('change', () => {\n      sliderContainer.style.display = checkbox.checked ? 'block' : 'none';\n      if (checkbox.checked) {\n        // Update bounds when enabling filter\n        const newBounds = this._getElevationBounds();\n        this._elevationSlider?.setBounds(newBounds.min, newBounds.max);\n        this._elevationSlider?.setRange(newBounds.min, newBounds.max);\n        // Apply current range\n        const range = this._elevationSlider?.getRange();\n        if (range) {\n          this._callbacks.onElevationRangeChange(range);\n        }\n      } else {\n        this._callbacks.onElevationRangeChange(null);\n      }\n    });\n\n    return group;\n  }\n\n  /**\n   * Builds the Z offset control with checkbox and slider.\n   */\n  private _buildZOffsetControl(): HTMLElement {\n    const group = document.createElement('div');\n    group.className = 'lidar-control-group';\n\n    // Checkbox row\n    const labelRow = document.createElement('div');\n    labelRow.className = 'lidar-control-label-row';\n    labelRow.style.cursor = 'pointer';\n\n    const checkbox = document.createElement('input');\n    checkbox.type = 'checkbox';\n    checkbox.id = 'lidar-zoffset-checkbox';\n    checkbox.checked = this._state.zOffsetEnabled ?? false;\n    checkbox.style.marginRight = '6px';\n    this._zOffsetCheckbox = checkbox;\n\n    const label = document.createElement('label');\n    label.className = 'lidar-control-label';\n    label.htmlFor = 'lidar-zoffset-checkbox';\n    label.style.display = 'inline';\n    label.style.cursor = 'pointer';\n    label.textContent = 'Z Offset';\n\n    labelRow.appendChild(checkbox);\n    labelRow.appendChild(label);\n    group.appendChild(labelRow);\n\n    // Slider container (hidden by default)\n    const sliderContainer = document.createElement('div');\n    sliderContainer.style.display = this._state.zOffsetEnabled ? 'block' : 'none';\n    sliderContainer.style.marginTop = '8px';\n    this._zOffsetSliderContainer = sliderContainer;\n\n    // Slider range centered around -zOffsetBase (the default z-offset for relative height)\n    // Range: [-zOffsetBase - 100, -zOffsetBase + 100]\n    const zOffsetBase = this._state.zOffsetBase ?? 0;\n    const defaultOffset = -zOffsetBase;\n    const sliderMin = defaultOffset - 100;\n    const sliderMax = defaultOffset + 100;\n\n    // Create slider\n    this._zOffsetSlider = new RangeSlider({\n      label: 'Offset (m)',\n      min: sliderMin,\n      max: sliderMax,\n      step: 1,\n      value: this._state.zOffset ?? defaultOffset,\n      onChange: (v) => this._callbacks.onZOffsetChange(v),\n    });\n\n    sliderContainer.appendChild(this._zOffsetSlider.render());\n    group.appendChild(sliderContainer);\n\n    // Toggle visibility and enable/disable offset\n    checkbox.addEventListener('change', () => {\n      sliderContainer.style.display = checkbox.checked ? 'block' : 'none';\n      this._callbacks.onZOffsetEnabledChange(checkbox.checked);\n      if (!checkbox.checked) {\n        // Reset offset to 0 when disabled\n        this._zOffsetSlider?.setValue(0);\n        this._callbacks.onZOffsetChange(0);\n      }\n    });\n\n    return group;\n  }\n\n  /**\n   * Builds the 3D terrain toggle checkbox.\n   */\n  private _buildTerrainCheckbox(): HTMLElement {\n    const group = document.createElement('div');\n    group.className = 'lidar-control-group';\n\n    const labelRow = document.createElement('div');\n    labelRow.className = 'lidar-control-label-row';\n    labelRow.style.cursor = 'pointer';\n\n    const checkbox = document.createElement('input');\n    checkbox.type = 'checkbox';\n    checkbox.id = 'lidar-terrain-checkbox';\n    checkbox.checked = this._state.terrainEnabled ?? false;\n    checkbox.style.marginRight = '6px';\n    this._terrainCheckbox = checkbox;\n\n    const label = document.createElement('label');\n    label.className = 'lidar-control-label';\n    label.htmlFor = 'lidar-terrain-checkbox';\n    label.style.display = 'inline';\n    label.style.cursor = 'pointer';\n    label.textContent = '3D Terrain';\n\n    labelRow.appendChild(checkbox);\n    labelRow.appendChild(label);\n    group.appendChild(labelRow);\n\n    checkbox.addEventListener('change', () => {\n      this._callbacks.onTerrainChange(checkbox.checked);\n    });\n\n    return group;\n  }\n\n  /**\n   * Gets the elevation bounds from loaded point clouds.\n   */\n  private _getElevationBounds(): { min: number; max: number } {\n    if (this._state.pointClouds.length === 0) {\n      return { min: 0, max: 100 };\n    }\n\n    let minZ = Infinity;\n    let maxZ = -Infinity;\n\n    for (const pc of this._state.pointClouds) {\n      minZ = Math.min(minZ, pc.bounds.minZ);\n      maxZ = Math.max(maxZ, pc.bounds.maxZ);\n    }\n\n    // Round to nice values\n    minZ = Math.floor(minZ);\n    maxZ = Math.ceil(maxZ);\n\n    return { min: minZ, max: maxZ };\n  }\n\n  /**\n   * Gets the intensity bounds.\n   * Intensity values are normalized to 0-1 range during loading.\n   */\n  private _getIntensityBounds(): { min: number; max: number } {\n    return { min: 0, max: 1 };\n  }\n\n  /**\n   * Gets the appropriate data bounds based on the current color scheme.\n   */\n  private _getDataBoundsForCurrentScheme(): { min: number; max: number } {\n    const colorScheme = typeof this._state.colorScheme === 'string' ? this._state.colorScheme : 'elevation';\n    if (colorScheme === 'intensity') {\n      return this._getIntensityBounds();\n    }\n    return this._getElevationBounds();\n  }\n\n  /**\n   * Builds the colormap selector dropdown.\n   */\n  private _buildColormapSelector(): HTMLElement {\n    const group = document.createElement('div');\n    group.className = 'lidar-colormap-group';\n    this._colormapGroup = group;\n\n    // Set initial visibility based on current color scheme\n    const currentScheme = typeof this._state.colorScheme === 'string' ? this._state.colorScheme : 'elevation';\n    const showColormap = currentScheme === 'elevation' || currentScheme === 'intensity';\n    group.style.display = showColormap ? 'block' : 'none';\n\n    const label = document.createElement('label');\n    label.className = 'lidar-control-label';\n    label.textContent = 'Colormap';\n    group.appendChild(label);\n\n    // Select dropdown\n    const select = document.createElement('select');\n    select.className = 'lidar-colormap-select';\n\n    for (const name of COLORMAP_NAMES) {\n      const option = document.createElement('option');\n      option.value = name;\n      option.textContent = COLORMAP_LABELS[name];\n      select.appendChild(option);\n    }\n    select.value = this._state.colormap || 'viridis';\n    this._colormapSelect = select;\n\n    select.addEventListener('change', () => {\n      const colormap = select.value as ColormapName;\n      this._callbacks.onColormapChange(colormap);\n    });\n\n    group.appendChild(select);\n\n    return group;\n  }\n\n  /**\n   * Builds the colorbar component.\n   */\n  private _buildColorbar(): HTMLElement {\n    const container = document.createElement('div');\n    container.className = 'lidar-control-group';\n    this._colorbarContainer = container;\n\n    // Set initial visibility based on current color scheme\n    const currentScheme = typeof this._state.colorScheme === 'string' ? this._state.colorScheme : 'elevation';\n    const showColorbar = (currentScheme === 'elevation' || currentScheme === 'intensity') && this._state.showColorbar;\n    container.style.display = showColorbar ? 'block' : 'none';\n\n    // Create the colorbar\n    this._colorbar = new Colorbar({\n      colormap: this._state.colormap || 'viridis',\n      minValue: this._state.computedColorBounds?.min ?? 0,\n      maxValue: this._state.computedColorBounds?.max ?? 100,\n    });\n\n    container.appendChild(this._colorbar.render());\n    return container;\n  }\n\n  /**\n   * Builds the color range control (replaces percentile checkbox).\n   */\n  private _buildColorRangeControl(): HTMLElement {\n    const container = document.createElement('div');\n    container.className = 'lidar-control-group';\n    this._colorRangeContainer = container;\n\n    // Set initial visibility based on current color scheme\n    const currentScheme = typeof this._state.colorScheme === 'string' ? this._state.colorScheme : 'elevation';\n    const showControl = currentScheme === 'elevation' || currentScheme === 'intensity';\n    container.style.display = showControl ? 'block' : 'none';\n\n    // Get data bounds based on current color scheme\n    const dataBounds = this._getDataBoundsForCurrentScheme();\n\n    // Create the control\n    this._colorRangeControl = new PercentileRangeControl({\n      config: this._state.colorRange || {\n        mode: 'percentile',\n        percentileLow: 2,\n        percentileHigh: 98,\n      },\n      dataBounds,\n      computedBounds: this._state.computedColorBounds,\n      onChange: (config) => {\n        this._callbacks.onColorRangeChange(config);\n      },\n    });\n\n    container.appendChild(this._colorRangeControl.render());\n    return container;\n  }\n\n  /**\n   * Updates the visibility of color-related controls based on color scheme.\n   * Shows colormap/colorbar/range for elevation and intensity.\n   * Shows classification legend for classification.\n   */\n  private _updatePercentileVisibility(colorScheme: string): void {\n    const showColorControls = colorScheme === 'elevation' || colorScheme === 'intensity';\n\n    // Show/hide colormap selector\n    if (this._colormapGroup) {\n      this._colormapGroup.style.display = showColorControls ? 'block' : 'none';\n    }\n\n    // Show/hide colorbar\n    if (this._colorbarContainer) {\n      this._colorbarContainer.style.display = showColorControls && this._state.showColorbar ? 'block' : 'none';\n    }\n\n    // Show/hide color range control and update bounds for the new scheme\n    if (this._colorRangeContainer) {\n      this._colorRangeContainer.style.display = showColorControls ? 'block' : 'none';\n    }\n    if (this._colorRangeControl && showColorControls) {\n      // Update data bounds when switching between elevation and intensity\n      const bounds = this._getDataBoundsForCurrentScheme();\n      this._colorRangeControl.setDataBounds(bounds);\n    }\n\n    // Legacy percentile group (keep for backward compatibility)\n    if (this._percentileGroup) {\n      this._percentileGroup.style.display = 'none'; // Hide legacy control\n    }\n\n    // Show/hide classification legend\n    if (this._classificationLegendContainer) {\n      this._classificationLegendContainer.style.display =\n        colorScheme === 'classification' ? 'block' : 'none';\n    }\n  }\n\n  /**\n   * Builds the classification legend component.\n   */\n  private _buildClassificationLegend(): HTMLElement {\n    const container = document.createElement('div');\n    container.className = 'lidar-control-group';\n    this._classificationLegendContainer = container;\n\n    // Set initial visibility based on current color scheme\n    const currentScheme = typeof this._state.colorScheme === 'string' ? this._state.colorScheme : 'elevation';\n    container.style.display = currentScheme === 'classification' ? 'block' : 'none';\n\n    // Create the legend component\n    this._classificationLegend = new ClassificationLegend({\n      classifications: Array.from(this._state.availableClassifications || new Set()),\n      hiddenClassifications: this._state.hiddenClassifications || new Set(),\n      onToggle: (code, visible) => this._callbacks.onClassificationToggle(code, visible),\n      onShowAll: () => this._callbacks.onClassificationShowAll(),\n      onHideAll: () => this._callbacks.onClassificationHideAll(),\n    });\n\n    container.appendChild(this._classificationLegend.render());\n    return container;\n  }\n\n  /**\n   * Builds the pickable checkbox control.\n   */\n  private _buildPickableCheckbox(): HTMLElement {\n    const group = document.createElement('div');\n    group.className = 'lidar-control-group';\n\n    const labelRow = document.createElement('div');\n    labelRow.className = 'lidar-control-label-row';\n    labelRow.style.cursor = 'pointer';\n\n    const checkbox = document.createElement('input');\n    checkbox.type = 'checkbox';\n    checkbox.id = 'lidar-pickable-checkbox';\n    checkbox.checked = this._state.pickable ?? false;\n    checkbox.style.marginRight = '6px';\n    this._pickableCheckbox = checkbox;\n\n    const label = document.createElement('label');\n    label.className = 'lidar-control-label';\n    label.htmlFor = 'lidar-pickable-checkbox';\n    label.style.display = 'inline';\n    label.style.cursor = 'pointer';\n    label.textContent = 'Enable point picking';\n\n    checkbox.addEventListener('change', () => {\n      this._callbacks.onPickableChange(checkbox.checked);\n    });\n\n    labelRow.appendChild(checkbox);\n    labelRow.appendChild(label);\n    group.appendChild(labelRow);\n\n    return group;\n  }\n\n  /**\n   * Builds the loaded point clouds list.\n   */\n  private _buildPointCloudsList(): HTMLElement {\n    const section = document.createElement('div');\n    section.className = 'lidar-control-section lidar-pointclouds-section';\n\n    const header = document.createElement('div');\n    header.className = 'lidar-control-section-header';\n    header.textContent = 'Loaded Point Clouds';\n    section.appendChild(header);\n\n    const list = document.createElement('div');\n    list.className = 'lidar-pointclouds-list';\n    this._pointCloudsList = list;\n    section.appendChild(list);\n\n    this._updatePointCloudsList();\n\n    return section;\n  }\n\n  /**\n   * Updates the point clouds list display.\n   */\n  private _updatePointCloudsList(): void {\n    if (!this._pointCloudsList) return;\n\n    this._pointCloudsList.innerHTML = '';\n\n    if (this._state.pointClouds.length === 0) {\n      const empty = document.createElement('div');\n      empty.className = 'lidar-pointclouds-empty';\n      empty.textContent = 'No point clouds loaded';\n      this._pointCloudsList.appendChild(empty);\n      return;\n    }\n\n    for (const pc of this._state.pointClouds) {\n      this._pointCloudsList.appendChild(this._buildPointCloudItem(pc));\n    }\n  }\n\n  /**\n   * Builds a single point cloud list item.\n   */\n  private _buildPointCloudItem(pc: PointCloudInfo): HTMLElement {\n    const item = document.createElement('div');\n    item.className = 'lidar-pointcloud-item';\n\n    const info = document.createElement('div');\n    info.className = 'lidar-pointcloud-info';\n\n    const name = document.createElement('div');\n    name.className = 'lidar-pointcloud-name';\n    name.textContent = pc.name;\n    name.title = pc.name;\n\n    const details = document.createElement('div');\n    details.className = 'lidar-pointcloud-details';\n    details.textContent = `${formatNumber(pc.pointCount)} points`;\n\n    info.appendChild(name);\n    info.appendChild(details);\n\n    const actions = document.createElement('div');\n    actions.className = 'lidar-pointcloud-actions';\n\n    // Info button\n    if (this._callbacks.onShowMetadata) {\n      const infoBtn = document.createElement('button');\n      infoBtn.type = 'button';\n      infoBtn.className = 'lidar-pointcloud-action info';\n      infoBtn.textContent = 'Info';\n      infoBtn.title = 'Show metadata';\n      infoBtn.addEventListener('click', (e) => {\n        e.stopPropagation();\n        this._callbacks.onShowMetadata!(pc.id);\n      });\n      actions.appendChild(infoBtn);\n    }\n\n    const zoomBtn = document.createElement('button');\n    zoomBtn.type = 'button';\n    zoomBtn.className = 'lidar-pointcloud-action';\n    zoomBtn.textContent = 'Zoom';\n    zoomBtn.title = 'Zoom to point cloud';\n    zoomBtn.addEventListener('click', () => this._callbacks.onZoomTo(pc.id));\n\n    const removeBtn = document.createElement('button');\n    removeBtn.type = 'button';\n    removeBtn.className = 'lidar-pointcloud-action remove';\n    removeBtn.textContent = 'Remove';\n    removeBtn.title = 'Remove point cloud';\n    removeBtn.addEventListener('click', (e) => {\n      e.stopPropagation(); // Prevent click-outside handler from collapsing panel\n      this._callbacks.onUnload(pc.id);\n    });\n\n    actions.appendChild(zoomBtn);\n    actions.appendChild(removeBtn);\n\n    item.appendChild(info);\n    item.appendChild(actions);\n\n    return item;\n  }\n\n  /**\n   * Builds the loading indicator.\n   */\n  private _buildLoadingIndicator(): HTMLElement {\n    const loading = document.createElement('div');\n    loading.className = 'lidar-loading';\n    loading.innerHTML = `\n      <div class=\"lidar-loading-spinner\"></div>\n      <div class=\"lidar-loading-text\">Loading point cloud...</div>\n      <div class=\"lidar-loading-progress\">Preparing...</div>\n      <div class=\"lidar-loading-bar\">\n        <div class=\"lidar-loading-bar-fill\"></div>\n      </div>\n    `;\n    this._loadingIndicator = loading;\n    return loading;\n  }\n\n  /**\n   * Builds the error message display.\n   */\n  private _buildErrorMessage(): HTMLElement {\n    const error = document.createElement('div');\n    error.className = 'lidar-error';\n    error.style.display = 'none';\n    this._errorMessage = error;\n    return error;\n  }\n\n  /**\n   * Builds the share URL button section if sharing is enabled.\n   */\n  private _buildShareSection(): HTMLElement | null {\n    if (!this._callbacks.onShareUrl) return null;\n\n    const section = document.createElement('div');\n    section.className = 'lidar-control-section lidar-share-section';\n\n    const button = document.createElement('button');\n    button.type = 'button';\n    button.className = 'lidar-control-button lidar-share-button';\n    button.textContent = 'Share URL';\n\n    const status = document.createElement('div');\n    status.className = 'lidar-share-status';\n    status.setAttribute('aria-live', 'polite');\n\n    button.addEventListener('click', async () => {\n      try {\n        const url = this._callbacks.onShareUrl?.();\n        if (!url) {\n          throw new Error('No share URL available');\n        }\n        await this._copyToClipboard(url);\n        this._setShareStatus(status, 'Copied');\n      } catch {\n        this._setShareStatus(status, 'Copy failed');\n      }\n    });\n\n    section.appendChild(button);\n    section.appendChild(status);\n\n    return section;\n  }\n\n  /**\n   * Copies text to the clipboard, falling back to a hidden textarea for older browsers.\n   */\n  private async _copyToClipboard(text: string): Promise<void> {\n    if (navigator.clipboard?.writeText) {\n      await navigator.clipboard.writeText(text);\n      return;\n    }\n\n    const textarea = document.createElement('textarea');\n    textarea.value = text;\n    textarea.setAttribute('readonly', '');\n    textarea.style.position = 'fixed';\n    textarea.style.left = '-9999px';\n    textarea.style.top = '0';\n    document.body.appendChild(textarea);\n    textarea.select();\n\n    const copied = document.execCommand('copy');\n    textarea.remove();\n\n    if (!copied) {\n      throw new Error('Clipboard copy failed');\n    }\n  }\n\n  /**\n   * Shows short share button feedback.\n   */\n  private _setShareStatus(status: HTMLElement, message: string): void {\n    status.textContent = message;\n    if (this._shareFeedbackTimeout) {\n      clearTimeout(this._shareFeedbackTimeout);\n    }\n    this._shareFeedbackTimeout = setTimeout(() => {\n      status.textContent = '';\n    }, 2000);\n  }\n\n  /**\n   * Builds the cross-section section if callback is provided.\n   *\n   * @returns Cross-section section or null if not available\n   */\n  private _buildCrossSectionSection(): HTMLElement | null {\n    if (!this._callbacks.onCrossSectionPanel) return null;\n\n    const panel = this._callbacks.onCrossSectionPanel();\n    if (!panel) return null;\n\n    const section = document.createElement('div');\n    section.className = 'lidar-control-section lidar-crosssection-section';\n\n    const header = document.createElement('div');\n    header.className = 'lidar-control-section-header lidar-section-collapsible';\n    header.innerHTML = '<span class=\"lidar-section-toggle\">▶</span> Cross-Section';\n    header.style.cursor = 'pointer';\n\n    const body = document.createElement('div');\n    body.className = 'lidar-section-body';\n    body.style.display = 'none';\n    body.appendChild(panel);\n\n    header.addEventListener('click', () => {\n      const toggle = header.querySelector('.lidar-section-toggle');\n      if (body.style.display === 'none') {\n        body.style.display = 'block';\n        if (toggle) toggle.textContent = '▼';\n      } else {\n        body.style.display = 'none';\n        if (toggle) toggle.textContent = '▶';\n      }\n    });\n\n    section.appendChild(header);\n    section.appendChild(body);\n\n    return section;\n  }\n}\n","import type { PointCloudFullMetadata, DimensionInfo } from '../core/types';\n\n/**\n * Options for MetadataPanel\n */\nexport interface MetadataPanelOptions {\n  /** Callback when panel is closed */\n  onClose: () => void;\n}\n\n/**\n * Modal panel for displaying full point cloud metadata.\n * Displays metadata in collapsible sections with copy functionality.\n */\nexport class MetadataPanel {\n  private _container: HTMLElement | null = null;\n  private _backdrop: HTMLElement | null = null;\n  private _options: MetadataPanelOptions;\n  private _metadata: PointCloudFullMetadata | null = null;\n\n  /**\n   * Creates a new MetadataPanel instance.\n   *\n   * @param options - Panel options\n   */\n  constructor(options: MetadataPanelOptions) {\n    this._options = options;\n  }\n\n  /**\n   * Shows the metadata panel with the given metadata.\n   *\n   * @param metadata - Full metadata to display\n   */\n  show(metadata: PointCloudFullMetadata): void {\n    this._metadata = metadata;\n    this._render();\n  }\n\n  /**\n   * Hides and destroys the metadata panel.\n   */\n  hide(): void {\n    this._backdrop?.remove();\n    this._container?.remove();\n    this._backdrop = null;\n    this._container = null;\n  }\n\n  /**\n   * Renders the metadata panel.\n   */\n  private _render(): void {\n    if (!this._metadata) return;\n\n    // Create backdrop\n    this._backdrop = document.createElement('div');\n    this._backdrop.className = 'lidar-metadata-backdrop';\n    this._backdrop.addEventListener('click', () => this._close());\n    document.body.appendChild(this._backdrop);\n\n    // Create panel\n    this._container = document.createElement('div');\n    this._container.className = 'lidar-metadata-panel';\n    this._container.addEventListener('click', (e) => e.stopPropagation());\n\n    // Header\n    const header = document.createElement('div');\n    header.className = 'lidar-metadata-header';\n    header.innerHTML = `\n      <span class=\"lidar-metadata-title\">Point Cloud Metadata</span>\n      <button type=\"button\" class=\"lidar-metadata-close\" title=\"Close\">&times;</button>\n    `;\n    header.querySelector('.lidar-metadata-close')?.addEventListener('click', () => this._close());\n    this._container.appendChild(header);\n\n    // Content\n    const content = document.createElement('div');\n    content.className = 'lidar-metadata-content';\n\n    // Basic Info section\n    content.appendChild(this._buildBasicInfoSection());\n\n    // Bounds section\n    content.appendChild(this._buildBoundsSection());\n\n    // CRS section\n    content.appendChild(this._buildCrsSection());\n\n    // Point Format section\n    content.appendChild(this._buildPointFormatSection());\n\n    // Dimensions section\n    content.appendChild(this._buildDimensionsSection());\n\n    this._container.appendChild(content);\n    document.body.appendChild(this._container);\n  }\n\n  /**\n   * Closes the panel and calls the onClose callback.\n   */\n  private _close(): void {\n    this.hide();\n    this._options.onClose();\n  }\n\n  /**\n   * Builds the basic info section.\n   *\n   * @returns Section element\n   */\n  private _buildBasicInfoSection(): HTMLElement {\n    const section = this._createSection('Basic Info', true);\n    const body = section.querySelector('.lidar-metadata-section-body')!;\n\n    const meta = this._metadata!;\n    const basic = meta.basic;\n\n    const rows = [\n      { label: 'Name', value: basic.name },\n      { label: 'Type', value: meta.type.toUpperCase() },\n      { label: 'Point Count', value: this._formatNumber(basic.pointCount) },\n      { label: 'Has RGB', value: basic.hasRGB ? 'Yes' : 'No' },\n      { label: 'Has Intensity', value: basic.hasIntensity ? 'Yes' : 'No' },\n      { label: 'Has Classification', value: basic.hasClassification ? 'Yes' : 'No' },\n      { label: 'Source', value: basic.source },\n    ];\n\n    // Add type-specific info\n    if (meta.type === 'copc' && meta.copc) {\n      rows.push({ label: 'LAS Version', value: meta.copc.lasVersion });\n      rows.push({ label: 'Point Format', value: String(meta.copc.pointDataRecordFormat) });\n      rows.push({ label: 'Generating Software', value: meta.copc.generatingSoftware });\n      if (meta.copc.creationDate) {\n        rows.push({\n          label: 'Creation Date',\n          value: `${meta.copc.creationDate.year}, Day ${meta.copc.creationDate.dayOfYear}`\n        });\n      }\n      if (meta.copc.copcInfo?.pointSpacing !== undefined && meta.copc.copcInfo.pointSpacing > 0) {\n        rows.push({ label: 'Point Spacing (est.)', value: '~' + meta.copc.copcInfo.pointSpacing.toFixed(2) + ' m' });\n      }\n    }\n\n    if (meta.type === 'ept' && meta.ept) {\n      rows.push({ label: 'EPT Version', value: meta.ept.version });\n      rows.push({ label: 'Data Type', value: meta.ept.dataType });\n      if (meta.ept.pointSpacing !== undefined && meta.ept.pointSpacing > 0) {\n        rows.push({ label: 'Point Spacing (est.)', value: '~' + meta.ept.pointSpacing.toFixed(2) + ' m' });\n      }\n    }\n\n    for (const row of rows) {\n      body.appendChild(this._createRow(row.label, row.value));\n    }\n\n    return section;\n  }\n\n  /**\n   * Builds the bounds section.\n   *\n   * @returns Section element\n   */\n  private _buildBoundsSection(): HTMLElement {\n    const section = this._createSection('Bounds', false);\n    const body = section.querySelector('.lidar-metadata-section-body')!;\n\n    const meta = this._metadata!;\n    const basic = meta.basic;\n\n    // WGS84 bounds (transformed)\n    body.appendChild(this._createSubheader('Geographic (WGS84)'));\n    body.appendChild(this._createRow('Min X (Lng)', basic.bounds.minX.toFixed(6) + '°'));\n    body.appendChild(this._createRow('Max X (Lng)', basic.bounds.maxX.toFixed(6) + '°'));\n    body.appendChild(this._createRow('Min Y (Lat)', basic.bounds.minY.toFixed(6) + '°'));\n    body.appendChild(this._createRow('Max Y (Lat)', basic.bounds.maxY.toFixed(6) + '°'));\n    body.appendChild(this._createRow('Min Z', basic.bounds.minZ.toFixed(2) + ' m'));\n    body.appendChild(this._createRow('Max Z', basic.bounds.maxZ.toFixed(2) + ' m'));\n\n    // Native bounds if available\n    if (meta.type === 'copc' && meta.copc?.nativeBounds) {\n      body.appendChild(this._createSubheader('Native CRS'));\n      const nb = meta.copc.nativeBounds;\n      body.appendChild(this._createRow('Min X', nb.min[0].toFixed(3)));\n      body.appendChild(this._createRow('Max X', nb.max[0].toFixed(3)));\n      body.appendChild(this._createRow('Min Y', nb.min[1].toFixed(3)));\n      body.appendChild(this._createRow('Max Y', nb.max[1].toFixed(3)));\n      body.appendChild(this._createRow('Min Z', nb.min[2].toFixed(3)));\n      body.appendChild(this._createRow('Max Z', nb.max[2].toFixed(3)));\n    }\n\n    if (meta.type === 'ept' && meta.ept?.nativeBounds && meta.ept.nativeBounds.length >= 6) {\n      body.appendChild(this._createSubheader('Native CRS'));\n      const nb = meta.ept.nativeBounds;\n      body.appendChild(this._createRow('Min X', nb[0].toFixed(3)));\n      body.appendChild(this._createRow('Max X', nb[3].toFixed(3)));\n      body.appendChild(this._createRow('Min Y', nb[1].toFixed(3)));\n      body.appendChild(this._createRow('Max Y', nb[4].toFixed(3)));\n      body.appendChild(this._createRow('Min Z', nb[2].toFixed(3)));\n      body.appendChild(this._createRow('Max Z', nb[5].toFixed(3)));\n    }\n\n    return section;\n  }\n\n  /**\n   * Builds the CRS section.\n   *\n   * @returns Section element\n   */\n  private _buildCrsSection(): HTMLElement {\n    const section = this._createSection('Coordinate Reference System', false);\n    const body = section.querySelector('.lidar-metadata-section-body')!;\n\n    const meta = this._metadata!;\n    const wkt = meta.basic.wkt;\n\n    if (wkt) {\n      // WKT display with copy button\n      const wktContainer = document.createElement('div');\n      wktContainer.className = 'lidar-metadata-wkt';\n\n      const copyBtn = document.createElement('button');\n      copyBtn.type = 'button';\n      copyBtn.className = 'lidar-metadata-copy-btn';\n      copyBtn.textContent = 'Copy WKT';\n      copyBtn.addEventListener('click', () => {\n        navigator.clipboard.writeText(wkt).then(() => {\n          copyBtn.textContent = 'Copied!';\n          setTimeout(() => {\n            copyBtn.textContent = 'Copy WKT';\n          }, 2000);\n        });\n      });\n      wktContainer.appendChild(copyBtn);\n\n      const wktCode = document.createElement('pre');\n      wktCode.className = 'lidar-metadata-code';\n      // Format WKT for better readability\n      wktCode.textContent = this._formatWkt(wkt);\n      wktContainer.appendChild(wktCode);\n\n      body.appendChild(wktContainer);\n    } else {\n      body.appendChild(this._createRow('WKT', 'Not available'));\n    }\n\n    // EPT SRS info\n    if (meta.type === 'ept' && meta.ept?.srs) {\n      const srs = meta.ept.srs;\n      if (srs.authority) {\n        body.appendChild(this._createRow('Authority', srs.authority));\n      }\n      if (srs.horizontal) {\n        body.appendChild(this._createRow('Horizontal', srs.horizontal));\n      }\n      if (srs.vertical) {\n        body.appendChild(this._createRow('Vertical', srs.vertical));\n      }\n    }\n\n    // COPC scale/offset\n    if (meta.type === 'copc' && meta.copc) {\n      body.appendChild(this._createSubheader('Scale & Offset'));\n      body.appendChild(this._createRow('Scale X', meta.copc.scale[0].toExponential(4)));\n      body.appendChild(this._createRow('Scale Y', meta.copc.scale[1].toExponential(4)));\n      body.appendChild(this._createRow('Scale Z', meta.copc.scale[2].toExponential(4)));\n      body.appendChild(this._createRow('Offset X', meta.copc.offset[0].toFixed(3)));\n      body.appendChild(this._createRow('Offset Y', meta.copc.offset[1].toFixed(3)));\n      body.appendChild(this._createRow('Offset Z', meta.copc.offset[2].toFixed(3)));\n    }\n\n    return section;\n  }\n\n  /**\n   * Builds the point format section.\n   *\n   * @returns Section element\n   */\n  private _buildPointFormatSection(): HTMLElement {\n    const section = this._createSection('Point Format', false);\n    const body = section.querySelector('.lidar-metadata-section-body')!;\n\n    const meta = this._metadata!;\n\n    if (meta.type === 'copc' && meta.copc) {\n      body.appendChild(this._createRow('Point Data Record Format', String(meta.copc.pointDataRecordFormat)));\n      body.appendChild(this._createRow('LAS Version', meta.copc.lasVersion));\n\n      // Describe point format\n      const format = meta.copc.pointDataRecordFormat;\n      const formatDescriptions: Record<number, string> = {\n        0: 'Core (XYZ, Intensity, Return, Classification)',\n        1: 'Format 0 + GPS Time',\n        2: 'Format 0 + RGB',\n        3: 'Format 0 + GPS Time + RGB',\n        6: 'Extended (14-bit Classification, NIR)',\n        7: 'Format 6 + RGB',\n        8: 'Format 6 + RGB + NIR',\n      };\n      if (formatDescriptions[format]) {\n        body.appendChild(this._createRow('Description', formatDescriptions[format]));\n      }\n    }\n\n    if (meta.type === 'ept' && meta.ept) {\n      body.appendChild(this._createRow('Data Encoding', meta.ept.dataType));\n    }\n\n    return section;\n  }\n\n  /**\n   * Builds the dimensions section.\n   *\n   * @returns Section element\n   */\n  private _buildDimensionsSection(): HTMLElement {\n    const section = this._createSection('Dimensions', false);\n    const body = section.querySelector('.lidar-metadata-section-body')!;\n\n    const meta = this._metadata!;\n    let dimensions: DimensionInfo[] = [];\n\n    if (meta.type === 'copc' && meta.copc?.dimensions) {\n      dimensions = meta.copc.dimensions;\n    } else if (meta.type === 'ept' && meta.ept?.dimensions) {\n      dimensions = meta.ept.dimensions;\n    }\n\n    if (dimensions.length > 0) {\n      // Create table\n      const table = document.createElement('table');\n      table.className = 'lidar-metadata-table';\n      table.innerHTML = `\n        <thead>\n          <tr>\n            <th>Name</th>\n            <th>Type</th>\n            <th>Size</th>\n          </tr>\n        </thead>\n        <tbody></tbody>\n      `;\n      const tbody = table.querySelector('tbody')!;\n\n      for (const dim of dimensions) {\n        const tr = document.createElement('tr');\n        tr.innerHTML = `\n          <td>${dim.name}</td>\n          <td>${dim.type}</td>\n          <td>${dim.size} bytes</td>\n        `;\n        tbody.appendChild(tr);\n      }\n\n      body.appendChild(table);\n    } else {\n      body.appendChild(this._createRow('Dimensions', 'Not available'));\n    }\n\n    return section;\n  }\n\n  /**\n   * Creates a collapsible section.\n   *\n   * @param title - Section title\n   * @param expanded - Whether section starts expanded\n   * @returns Section element\n   */\n  private _createSection(title: string, expanded: boolean): HTMLElement {\n    const section = document.createElement('div');\n    section.className = 'lidar-metadata-section';\n\n    const header = document.createElement('div');\n    header.className = 'lidar-metadata-section-header';\n    header.innerHTML = `\n      <span class=\"lidar-metadata-section-toggle\">${expanded ? '▼' : '▶'}</span>\n      <span class=\"lidar-metadata-section-title\">${title}</span>\n    `;\n\n    const body = document.createElement('div');\n    body.className = 'lidar-metadata-section-body';\n    body.style.display = expanded ? 'block' : 'none';\n\n    header.addEventListener('click', () => {\n      const toggle = header.querySelector('.lidar-metadata-section-toggle')!;\n      if (body.style.display === 'none') {\n        body.style.display = 'block';\n        toggle.textContent = '▼';\n      } else {\n        body.style.display = 'none';\n        toggle.textContent = '▶';\n      }\n    });\n\n    section.appendChild(header);\n    section.appendChild(body);\n\n    return section;\n  }\n\n  /**\n   * Creates a key-value row.\n   *\n   * @param label - Row label\n   * @param value - Row value\n   * @returns Row element\n   */\n  private _createRow(label: string, value: string): HTMLElement {\n    const row = document.createElement('div');\n    row.className = 'lidar-metadata-row';\n    row.innerHTML = `\n      <span class=\"lidar-metadata-label\">${label}:</span>\n      <span class=\"lidar-metadata-value\">${value}</span>\n    `;\n    return row;\n  }\n\n  /**\n   * Creates a subheader element.\n   *\n   * @param title - Subheader title\n   * @returns Subheader element\n   */\n  private _createSubheader(title: string): HTMLElement {\n    const subheader = document.createElement('div');\n    subheader.className = 'lidar-metadata-subheader';\n    subheader.textContent = title;\n    return subheader;\n  }\n\n  /**\n   * Formats a number with commas.\n   *\n   * @param n - Number to format\n   * @returns Formatted string\n   */\n  private _formatNumber(n: number): string {\n    return n.toLocaleString();\n  }\n\n  /**\n   * Formats a WKT string for display.\n   *\n   * @param wkt - WKT string\n   * @returns Formatted WKT\n   */\n  private _formatWkt(wkt: string): string {\n    // Simple formatting: add newlines after [ and before ]\n    let formatted = '';\n    let indent = 0;\n    for (let i = 0; i < wkt.length; i++) {\n      const char = wkt[i];\n      if (char === '[') {\n        formatted += '[\\n' + '  '.repeat(++indent);\n      } else if (char === ']') {\n        formatted += '\\n' + '  '.repeat(--indent) + ']';\n      } else if (char === ',') {\n        formatted += ',\\n' + '  '.repeat(indent);\n      } else {\n        formatted += char;\n      }\n    }\n    return formatted;\n  }\n}\n","import type { ElevationProfile, ProfilePoint } from '../core/types';\nimport type { ColormapName } from '../core/types';\nimport { getColormap } from '../colorizers/Colormaps';\n\n/**\n * Options for ElevationProfileChart\n */\nexport interface ElevationProfileChartOptions {\n  /** Chart width in pixels */\n  width?: number;\n  /** Chart height in pixels */\n  height?: number;\n  /** Colormap for elevation coloring */\n  colormap?: ColormapName;\n  /** Callback when a point is hovered */\n  onPointHover?: (point: ProfilePoint | null, x: number, y: number) => void;\n}\n\n/**\n * Canvas-based elevation profile chart.\n * Plots distance (x-axis) vs elevation (y-axis) with interactive hover.\n */\nexport class ElevationProfileChart {\n  private _container: HTMLElement;\n  private _canvas: HTMLCanvasElement;\n  private _ctx: CanvasRenderingContext2D;\n  private _tooltip: HTMLElement;\n  private _options: Required<ElevationProfileChartOptions>;\n  private _profile: ElevationProfile | null = null;\n  private _hoveredPointIndex: number = -1;\n  private _colors = {\n    bg: '#f8f8f8',\n    grid: '#dddddd',\n    axis: '#333333',\n    text: '#333333',\n    muted: '#888888',\n    highlight: '#000000',\n  };\n\n  // Chart dimensions (with margins)\n  private readonly MARGIN = { top: 20, right: 20, bottom: 40, left: 60 };\n\n  /**\n   * Creates a new ElevationProfileChart instance.\n   *\n   * @param options - Chart options\n   */\n  constructor(options?: ElevationProfileChartOptions) {\n    this._options = {\n      width: options?.width ?? 300,\n      height: options?.height ?? 150,\n      colormap: options?.colormap ?? 'viridis',\n      onPointHover: options?.onPointHover ?? (() => {}),\n    };\n\n    // Create container\n    this._container = document.createElement('div');\n    this._container.className = 'lidar-profile-chart-container';\n\n    // Create canvas\n    this._canvas = document.createElement('canvas');\n    this._canvas.className = 'lidar-profile-chart';\n    this._canvas.width = this._options.width;\n    this._canvas.height = this._options.height;\n    this._container.appendChild(this._canvas);\n\n    this._ctx = this._canvas.getContext('2d')!;\n\n    // Create tooltip\n    this._tooltip = document.createElement('div');\n    this._tooltip.className = 'lidar-profile-tooltip';\n    this._tooltip.style.display = 'none';\n    this._container.appendChild(this._tooltip);\n\n    // Setup mouse events\n    this._canvas.addEventListener('mousemove', this._handleMouseMove.bind(this));\n    this._canvas.addEventListener('mouseleave', this._handleMouseLeave.bind(this));\n  }\n\n  /**\n   * Renders the chart container element.\n   *\n   * @returns Container element\n   */\n  render(): HTMLElement {\n    return this._container;\n  }\n\n  /**\n   * Redraws the chart. Useful after a theme change since canvas colors are\n   * resolved from CSS variables at draw time.\n   */\n  redraw(): void {\n    this._draw();\n  }\n\n  /**\n   * Resolves the chart's theme colors from CSS custom properties so the\n   * canvas matches the active light/dark theme. Falls back to the light\n   * defaults when a variable is not defined.\n   *\n   * @returns Resolved theme colors\n   */\n  private _themeColors(): {\n    bg: string;\n    grid: string;\n    axis: string;\n    text: string;\n    muted: string;\n    highlight: string;\n  } {\n    const styles =\n      typeof window !== 'undefined'\n        ? window.getComputedStyle(document.documentElement)\n        : null;\n    const read = (name: string, fallback: string): string => {\n      const value = styles?.getPropertyValue(name)?.trim();\n      return value ? value : fallback;\n    };\n    return {\n      bg: read('--lidar-chart-bg', '#f8f8f8'),\n      grid: read('--lidar-chart-grid', '#dddddd'),\n      axis: read('--lidar-chart-axis', '#333333'),\n      text: read('--lidar-chart-text', '#333333'),\n      muted: read('--lidar-chart-muted', '#888888'),\n      highlight: read('--lidar-chart-highlight', '#000000'),\n    };\n  }\n\n  /**\n   * Sets the elevation profile data and redraws the chart.\n   *\n   * @param profile - Elevation profile to display\n   */\n  setProfile(profile: ElevationProfile | null): void {\n    this._profile = profile;\n    this._draw();\n  }\n\n  /**\n   * Sets the colormap and redraws the chart.\n   *\n   * @param colormap - Colormap name\n   */\n  setColormap(colormap: ColormapName): void {\n    this._options.colormap = colormap;\n    this._draw();\n  }\n\n  /**\n   * Resizes the chart.\n   *\n   * @param width - New width\n   * @param height - New height\n   */\n  resize(width: number, height: number): void {\n    // Ensure valid dimensions\n    const safeWidth = Math.max(100, Math.round(width));\n    const safeHeight = Math.max(80, Math.round(height));\n\n    this._options.width = safeWidth;\n    this._options.height = safeHeight;\n    this._canvas.width = safeWidth;\n    this._canvas.height = safeHeight;\n\n    // Re-acquire context after resize (some browsers need this)\n    const ctx = this._canvas.getContext('2d');\n    if (ctx) {\n      this._ctx = ctx;\n    }\n\n    this._draw();\n  }\n\n  /**\n   * Draws the chart.\n   */\n  private _draw(): void {\n    const { width, height } = this._options;\n    const ctx = this._ctx;\n\n    // Resolve theme colors (light/dark) from CSS variables at draw time.\n    this._colors = this._themeColors();\n\n    // Clear canvas\n    ctx.clearRect(0, 0, width, height);\n\n    // Draw background\n    ctx.fillStyle = this._colors.bg;\n    ctx.fillRect(0, 0, width, height);\n\n    if (!this._profile || this._profile.points.length === 0) {\n      this._drawNoData();\n      return;\n    }\n\n    // Calculate plot area\n    const plotWidth = width - this.MARGIN.left - this.MARGIN.right;\n    const plotHeight = height - this.MARGIN.top - this.MARGIN.bottom;\n\n    // Draw grid\n    this._drawGrid(plotWidth, plotHeight);\n\n    // Draw points\n    this._drawPoints(plotWidth, plotHeight);\n\n    // Draw axes\n    this._drawAxes(plotWidth, plotHeight);\n  }\n\n  /**\n   * Draws \"No data\" message.\n   */\n  private _drawNoData(): void {\n    const { width, height } = this._options;\n    const ctx = this._ctx;\n\n    ctx.fillStyle = this._colors.muted;\n    ctx.font = '12px sans-serif';\n    ctx.textAlign = 'center';\n    ctx.textBaseline = 'middle';\n    ctx.fillText('Draw a cross-section line to view elevation profile', width / 2, height / 2);\n  }\n\n  /**\n   * Draws grid lines.\n   *\n   * @param plotWidth - Plot area width\n   * @param plotHeight - Plot area height\n   */\n  private _drawGrid(plotWidth: number, plotHeight: number): void {\n    const ctx = this._ctx;\n    const { left, top } = this.MARGIN;\n\n    ctx.strokeStyle = this._colors.grid;\n    ctx.lineWidth = 1;\n\n    // Horizontal grid lines (5 lines)\n    for (let i = 0; i <= 4; i++) {\n      const y = top + (plotHeight * i) / 4;\n      ctx.beginPath();\n      ctx.moveTo(left, y);\n      ctx.lineTo(left + plotWidth, y);\n      ctx.stroke();\n    }\n\n    // Vertical grid lines (5 lines)\n    for (let i = 0; i <= 4; i++) {\n      const x = left + (plotWidth * i) / 4;\n      ctx.beginPath();\n      ctx.moveTo(x, top);\n      ctx.lineTo(x, top + plotHeight);\n      ctx.stroke();\n    }\n  }\n\n  /**\n   * Draws the profile points.\n   *\n   * @param plotWidth - Plot area width\n   * @param plotHeight - Plot area height\n   */\n  private _drawPoints(plotWidth: number, plotHeight: number): void {\n    if (!this._profile) return;\n\n    const ctx = this._ctx;\n    const { left, top } = this.MARGIN;\n    const { points, stats } = this._profile;\n    const colormap = getColormap(this._options.colormap);\n\n    const xScale = plotWidth / stats.totalDistance;\n    const yRange = stats.maxElevation - stats.minElevation;\n    const yScale = yRange > 0 ? plotHeight / yRange : 1;\n\n    // Draw points\n    const pointRadius = Math.max(1, Math.min(3, 500 / points.length));\n\n    for (let i = 0; i < points.length; i++) {\n      const point = points[i];\n      const x = left + point.distance * xScale;\n      const y = top + plotHeight - (point.elevation - stats.minElevation) * yScale;\n\n      // Get color from colormap\n      const t = yRange > 0 ? (point.elevation - stats.minElevation) / yRange : 0.5;\n      const colorIndex = Math.floor(t * (colormap.length - 1));\n      const color = colormap[Math.max(0, Math.min(colormap.length - 1, colorIndex))];\n\n      ctx.fillStyle = `rgb(${color[0]}, ${color[1]}, ${color[2]})`;\n\n      ctx.beginPath();\n      ctx.arc(x, y, pointRadius, 0, Math.PI * 2);\n      ctx.fill();\n\n      // Highlight hovered point\n      if (i === this._hoveredPointIndex) {\n        ctx.strokeStyle = this._colors.highlight;\n        ctx.lineWidth = 2;\n        ctx.beginPath();\n        ctx.arc(x, y, pointRadius + 2, 0, Math.PI * 2);\n        ctx.stroke();\n      }\n    }\n  }\n\n  /**\n   * Draws the axes and labels.\n   *\n   * @param plotWidth - Plot area width\n   * @param plotHeight - Plot area height\n   */\n  private _drawAxes(plotWidth: number, plotHeight: number): void {\n    if (!this._profile) return;\n\n    const ctx = this._ctx;\n    const { left, top } = this.MARGIN;\n    const { width, height } = this._options;\n    const { stats } = this._profile;\n\n    ctx.strokeStyle = this._colors.axis;\n    ctx.lineWidth = 1;\n\n    // Y axis\n    ctx.beginPath();\n    ctx.moveTo(left, top);\n    ctx.lineTo(left, top + plotHeight);\n    ctx.stroke();\n\n    // X axis\n    ctx.beginPath();\n    ctx.moveTo(left, top + plotHeight);\n    ctx.lineTo(left + plotWidth, top + plotHeight);\n    ctx.stroke();\n\n    // Axis labels\n    ctx.fillStyle = this._colors.text;\n    ctx.font = '10px sans-serif';\n    ctx.textAlign = 'center';\n    ctx.textBaseline = 'top';\n\n    // X axis labels\n    for (let i = 0; i <= 4; i++) {\n      const x = left + (plotWidth * i) / 4;\n      const dist = (stats.totalDistance * i) / 4;\n      ctx.fillText(this._formatDistance(dist), x, top + plotHeight + 5);\n    }\n\n    // X axis title\n    ctx.textBaseline = 'bottom';\n    ctx.fillText('Distance (m)', width / 2, height - 6);\n\n    // Y axis labels\n    ctx.textAlign = 'right';\n    ctx.textBaseline = 'middle';\n    const yRange = stats.maxElevation - stats.minElevation;\n\n    for (let i = 0; i <= 4; i++) {\n      const y = top + plotHeight - (plotHeight * i) / 4;\n      const elev = stats.minElevation + (yRange * i) / 4;\n      ctx.fillText(elev.toFixed(1), left - 5, y);\n    }\n\n    // Y axis title (rotated)\n    ctx.save();\n    ctx.translate(12, height / 2);\n    ctx.rotate(-Math.PI / 2);\n    ctx.textAlign = 'center';\n    ctx.fillText('Elevation (m)', 0, 0);\n    ctx.restore();\n  }\n\n  /**\n   * Formats distance for display.\n   *\n   * @param meters - Distance in meters\n   * @returns Formatted string\n   */\n  private _formatDistance(meters: number): string {\n    if (meters >= 1000) {\n      return (meters / 1000).toFixed(1) + 'km';\n    }\n    return Math.round(meters) + '';\n  }\n\n  /**\n   * Handles mouse move for hover interaction.\n   *\n   * @param event - Mouse event\n   */\n  private _handleMouseMove(event: MouseEvent): void {\n    if (!this._profile || this._profile.points.length === 0) {\n      this._hideTooltip();\n      return;\n    }\n\n    const rect = this._canvas.getBoundingClientRect();\n    const mouseX = event.clientX - rect.left;\n    const mouseY = event.clientY - rect.top;\n\n    const { left, top } = this.MARGIN;\n    const plotWidth = this._options.width - this.MARGIN.left - this.MARGIN.right;\n    const plotHeight = this._options.height - this.MARGIN.top - this.MARGIN.bottom;\n    const { points, stats } = this._profile;\n\n    const xScale = plotWidth / stats.totalDistance;\n    const yRange = stats.maxElevation - stats.minElevation;\n    const yScale = yRange > 0 ? plotHeight / yRange : 1;\n\n    // Find closest point\n    let closestIndex = -1;\n    let closestDist = Infinity;\n\n    for (let i = 0; i < points.length; i++) {\n      const point = points[i];\n      const px = left + point.distance * xScale;\n      const py = top + plotHeight - (point.elevation - stats.minElevation) * yScale;\n      const dist = Math.sqrt((mouseX - px) ** 2 + (mouseY - py) ** 2);\n\n      if (dist < closestDist && dist < 15) {\n        closestDist = dist;\n        closestIndex = i;\n      }\n    }\n\n    if (closestIndex !== this._hoveredPointIndex) {\n      this._hoveredPointIndex = closestIndex;\n      this._draw();\n\n      if (closestIndex >= 0) {\n        const point = points[closestIndex];\n        this._showTooltip(point, event.clientX, event.clientY);\n        this._options.onPointHover(point, event.clientX, event.clientY);\n      } else {\n        this._hideTooltip();\n        this._options.onPointHover(null, 0, 0);\n      }\n    }\n  }\n\n  /**\n   * Handles mouse leave.\n   */\n  private _handleMouseLeave(): void {\n    this._hoveredPointIndex = -1;\n    this._draw();\n    this._hideTooltip();\n    this._options.onPointHover(null, 0, 0);\n  }\n\n  /**\n   * Shows the tooltip.\n   *\n   * @param point - Profile point\n   * @param x - Screen X coordinate\n   * @param y - Screen Y coordinate\n   */\n  private _showTooltip(point: ProfilePoint, x: number, y: number): void {\n    const lines = [\n      `Distance: ${point.distance.toFixed(1)} m`,\n      `Elevation: ${point.elevation.toFixed(2)} m`,\n      `Offset: ${point.offsetFromLine.toFixed(2)} m`,\n    ];\n\n    if (point.classification !== undefined) {\n      lines.push(`Class: ${point.classification}`);\n    }\n\n    this._tooltip.innerHTML = lines.join('<br>');\n    this._tooltip.style.display = 'block';\n\n    // Position tooltip\n    const rect = this._container.getBoundingClientRect();\n    this._tooltip.style.left = `${x - rect.left + 10}px`;\n    this._tooltip.style.top = `${y - rect.top - 40}px`;\n  }\n\n  /**\n   * Hides the tooltip.\n   */\n  private _hideTooltip(): void {\n    this._tooltip.style.display = 'none';\n  }\n\n  /**\n   * Destroys the chart and cleans up resources.\n   */\n  destroy(): void {\n    this._canvas.removeEventListener('mousemove', this._handleMouseMove.bind(this));\n    this._canvas.removeEventListener('mouseleave', this._handleMouseLeave.bind(this));\n    this._container.remove();\n  }\n}\n","import type { ElevationProfile, ColormapName } from '../core/types';\nimport { ElevationProfileChart } from './ElevationProfileChart';\n\n/**\n * Callbacks for CrossSectionPanel interactions\n */\nexport interface CrossSectionPanelCallbacks {\n  /** Called when draw mode is toggled */\n  onDrawToggle: (enabled: boolean) => void;\n  /** Called when clear button is clicked */\n  onClear: () => void;\n  /** Called when buffer distance changes */\n  onBufferDistanceChange: (meters: number) => void;\n}\n\n/**\n * Options for CrossSectionPanel\n */\nexport interface CrossSectionPanelOptions {\n  /** Initial buffer distance in meters */\n  bufferDistance?: number;\n  /** Chart colormap */\n  colormap?: ColormapName;\n  /** Chart height */\n  chartHeight?: number;\n}\n\n/**\n * UI panel for cross-section tool containing controls and elevation profile chart.\n */\nexport class CrossSectionPanel {\n  private _container: HTMLElement;\n  private _callbacks: CrossSectionPanelCallbacks;\n  private _options: Required<CrossSectionPanelOptions>;\n\n  // UI elements\n  private _drawButton?: HTMLButtonElement;\n  private _clearButton?: HTMLButtonElement;\n  private _downloadButton?: HTMLButtonElement;\n  private _expandButton?: HTMLButtonElement;\n  private _bufferSlider?: HTMLInputElement;\n  private _bufferValue?: HTMLSpanElement;\n  private _statsContainer?: HTMLElement;\n  private _chartContainer?: HTMLElement;\n  private _chart: ElevationProfileChart;\n\n  // Popup elements\n  private _popupBackdrop?: HTMLElement;\n  private _popupContainer?: HTMLElement;\n  private _popupChartContainer?: HTMLElement;\n  private _popupChart?: ElevationProfileChart;\n  private _popupResizeObserver?: ResizeObserver;\n\n  private _isDrawing: boolean = false;\n  private _profile: ElevationProfile | null = null;\n\n  // Popup resize state\n  private _isResizing: boolean = false;\n  private _ignoreBackdropClick: boolean = false;\n  private _resizeStartX: number = 0;\n  private _resizeStartY: number = 0;\n  private _resizeStartWidth: number = 0;\n  private _resizeStartHeight: number = 0;\n  private _resizeObserver?: ResizeObserver;\n\n  // Bound handlers for cleanup\n  private _handlePopupResizeMouseMove: (e: MouseEvent) => void;\n  private _handlePopupResizeMouseUp: (e: MouseEvent) => void;\n\n  /**\n   * Creates a new CrossSectionPanel instance.\n   *\n   * @param callbacks - Panel callbacks\n   * @param options - Panel options\n   */\n  constructor(callbacks: CrossSectionPanelCallbacks, options?: CrossSectionPanelOptions) {\n    this._callbacks = callbacks;\n    this._options = {\n      bufferDistance: options?.bufferDistance ?? 10,\n      colormap: options?.colormap ?? 'viridis',\n      chartHeight: options?.chartHeight ?? 180,\n    };\n\n    // Create container\n    this._container = document.createElement('div');\n    this._container.className = 'lidar-crosssection-panel';\n\n    // Create inline chart (smaller, for panel)\n    this._chart = new ElevationProfileChart({\n      width: 320,\n      height: this._options.chartHeight,\n      colormap: this._options.colormap,\n    });\n\n    // Bind popup resize handlers\n    this._handlePopupResizeMouseMove = this._onPopupResizeMouseMove.bind(this);\n    this._handlePopupResizeMouseUp = this._onPopupResizeMouseUp.bind(this);\n\n    this._build();\n    this._setupResizeObserver();\n  }\n\n  /**\n   * Renders the panel element.\n   *\n   * @returns Container element\n   */\n  render(): HTMLElement {\n    return this._container;\n  }\n\n  /**\n   * Redraws the elevation charts so their canvas colors pick up the active\n   * light/dark theme.\n   */\n  refreshTheme(): void {\n    this._chart.redraw();\n    this._popupChart?.redraw();\n  }\n\n  /**\n   * Updates the elevation profile display.\n   *\n   * @param profile - Elevation profile data\n   */\n  setProfile(profile: ElevationProfile | null): void {\n    this._profile = profile;\n    this._chart.setProfile(profile);\n    this._popupChart?.setProfile(profile);\n    this._updateStats();\n    // Enable/disable buttons based on data availability\n    const hasData = profile && profile.points.length > 0;\n    if (this._downloadButton) {\n      this._downloadButton.disabled = !hasData;\n    }\n    if (this._expandButton) {\n      this._expandButton.disabled = !hasData;\n    }\n  }\n\n  /**\n   * Sets the drawing state.\n   *\n   * @param isDrawing - Whether drawing mode is active\n   */\n  setDrawing(isDrawing: boolean): void {\n    this._isDrawing = isDrawing;\n    if (this._drawButton) {\n      this._drawButton.textContent = isDrawing ? 'Cancel' : 'Draw Line';\n      this._drawButton.classList.toggle('active', isDrawing);\n    }\n  }\n\n  /**\n   * Sets the colormap.\n   *\n   * @param colormap - Colormap name\n   */\n  setColormap(colormap: ColormapName): void {\n    this._options.colormap = colormap;\n    this._chart.setColormap(colormap);\n    this._popupChart?.setColormap(colormap);\n  }\n\n  /**\n   * Sets the buffer distance.\n   *\n   * @param meters - Buffer distance in meters\n   */\n  setBufferDistance(meters: number): void {\n    this._options.bufferDistance = meters;\n    if (this._bufferSlider) {\n      this._bufferSlider.value = String(meters);\n    }\n    if (this._bufferValue) {\n      this._bufferValue.textContent = `${meters} m`;\n    }\n  }\n\n  /**\n   * Builds the panel UI.\n   */\n  private _build(): void {\n    // Controls row\n    const controls = document.createElement('div');\n    controls.className = 'lidar-crosssection-controls';\n\n    // Draw button\n    this._drawButton = document.createElement('button');\n    this._drawButton.type = 'button';\n    this._drawButton.className = 'lidar-control-button lidar-crosssection-draw';\n    this._drawButton.textContent = 'Draw Line';\n    this._drawButton.addEventListener('click', (e) => {\n      e.stopPropagation();\n      this._isDrawing = !this._isDrawing;\n      this.setDrawing(this._isDrawing);\n      this._callbacks.onDrawToggle(this._isDrawing);\n    });\n    controls.appendChild(this._drawButton);\n\n    // Clear button\n    this._clearButton = document.createElement('button');\n    this._clearButton.type = 'button';\n    this._clearButton.className = 'lidar-control-button lidar-crosssection-clear';\n    this._clearButton.textContent = 'Clear';\n    this._clearButton.addEventListener('click', (e) => {\n      e.stopPropagation();\n      this._callbacks.onClear();\n      this.setDrawing(false);\n    });\n    controls.appendChild(this._clearButton);\n\n    // Download CSV button\n    this._downloadButton = document.createElement('button');\n    this._downloadButton.type = 'button';\n    this._downloadButton.className = 'lidar-control-button secondary';\n    this._downloadButton.textContent = 'CSV';\n    this._downloadButton.title = 'Download profile data as CSV';\n    this._downloadButton.disabled = true;\n    this._downloadButton.addEventListener('click', (e) => {\n      e.stopPropagation();\n      this._downloadCSV();\n    });\n    controls.appendChild(this._downloadButton);\n\n    // Expand button\n    this._expandButton = document.createElement('button');\n    this._expandButton.type = 'button';\n    this._expandButton.className = 'lidar-control-button secondary';\n    this._expandButton.innerHTML = '⤢';\n    this._expandButton.title = 'Expand chart in popup';\n    this._expandButton.disabled = true;\n    this._expandButton.addEventListener('click', (e) => {\n      e.stopPropagation();\n      this._openPopup();\n    });\n    controls.appendChild(this._expandButton);\n\n    this._container.appendChild(controls);\n\n    // Buffer distance slider\n    const bufferGroup = document.createElement('div');\n    bufferGroup.className = 'lidar-control-group';\n\n    const bufferLabel = document.createElement('label');\n    bufferLabel.className = 'lidar-control-label';\n    bufferLabel.textContent = 'Buffer Distance: ';\n\n    this._bufferValue = document.createElement('span');\n    this._bufferValue.textContent = `${this._options.bufferDistance} m`;\n    bufferLabel.appendChild(this._bufferValue);\n    bufferGroup.appendChild(bufferLabel);\n\n    this._bufferSlider = document.createElement('input');\n    this._bufferSlider.type = 'range';\n    this._bufferSlider.className = 'lidar-control-slider';\n    this._bufferSlider.min = '1';\n    this._bufferSlider.max = '100';\n    this._bufferSlider.step = '1';\n    this._bufferSlider.value = String(this._options.bufferDistance);\n    this._bufferSlider.addEventListener('input', (e) => {\n      e.stopPropagation();\n      const meters = parseInt(this._bufferSlider!.value, 10);\n      this._bufferValue!.textContent = `${meters} m`;\n      this._callbacks.onBufferDistanceChange(meters);\n    });\n    bufferGroup.appendChild(this._bufferSlider);\n\n    this._container.appendChild(bufferGroup);\n\n    // Chart container (simple, no resize handle)\n    this._chartContainer = document.createElement('div');\n    this._chartContainer.className = 'lidar-crosssection-chart';\n    this._chartContainer.appendChild(this._chart.render());\n    this._container.appendChild(this._chartContainer);\n\n    // Statistics container\n    this._statsContainer = document.createElement('div');\n    this._statsContainer.className = 'lidar-crosssection-stats';\n    this._container.appendChild(this._statsContainer);\n    this._updateStats();\n  }\n\n  /**\n   * Updates the statistics display.\n   */\n  private _updateStats(): void {\n    if (!this._statsContainer) return;\n\n    if (!this._profile || this._profile.points.length === 0) {\n      this._statsContainer.innerHTML = '<div class=\"lidar-crosssection-stat\">No profile data</div>';\n      return;\n    }\n\n    const { stats } = this._profile;\n    this._statsContainer.innerHTML = `\n      <div class=\"lidar-crosssection-stat\">\n        <span class=\"lidar-crosssection-stat-label\">Points:</span>\n        <span class=\"lidar-crosssection-stat-value\">${stats.pointCount.toLocaleString()}</span>\n      </div>\n      <div class=\"lidar-crosssection-stat\">\n        <span class=\"lidar-crosssection-stat-label\">Distance:</span>\n        <span class=\"lidar-crosssection-stat-value\">${stats.totalDistance.toFixed(1)} m</span>\n      </div>\n      <div class=\"lidar-crosssection-stat\">\n        <span class=\"lidar-crosssection-stat-label\">Elevation:</span>\n        <span class=\"lidar-crosssection-stat-value\">${stats.minElevation.toFixed(1)} - ${stats.maxElevation.toFixed(1)} m</span>\n      </div>\n      <div class=\"lidar-crosssection-stat\">\n        <span class=\"lidar-crosssection-stat-label\">Mean:</span>\n        <span class=\"lidar-crosssection-stat-value\">${stats.meanElevation.toFixed(1)} m</span>\n      </div>\n    `;\n  }\n\n  /**\n   * Sets up ResizeObserver for responsive chart width.\n   */\n  private _setupResizeObserver(): void {\n    this._resizeObserver = new ResizeObserver((entries) => {\n      for (const entry of entries) {\n        if (entry.target === this._container) {\n          const containerWidth = entry.contentRect.width;\n          const chartWidth = Math.max(200, containerWidth - 4);\n          this._chart.resize(chartWidth, this._options.chartHeight);\n        }\n      }\n    });\n    this._resizeObserver.observe(this._container);\n  }\n\n  /**\n   * Opens the popup with a larger, resizable chart.\n   */\n  private _openPopup(): void {\n    if (!this._profile) return;\n\n    // Create backdrop\n    this._popupBackdrop = document.createElement('div');\n    this._popupBackdrop.className = 'lidar-chart-popup-backdrop';\n    this._popupBackdrop.addEventListener('click', (e) => {\n      if (this._ignoreBackdropClick) {\n        this._ignoreBackdropClick = false;\n        return;\n      }\n      if (e.target === this._popupBackdrop) {\n        this._closePopup();\n      }\n    });\n\n    // Create popup container\n    this._popupContainer = document.createElement('div');\n    this._popupContainer.className = 'lidar-chart-popup';\n\n    // Popup header\n    const header = document.createElement('div');\n    header.className = 'lidar-chart-popup-header';\n\n    const title = document.createElement('span');\n    title.className = 'lidar-chart-popup-title';\n    title.textContent = 'Cross-Section Elevation Profile';\n    header.appendChild(title);\n\n    const closeBtn = document.createElement('button');\n    closeBtn.className = 'lidar-chart-popup-close';\n    closeBtn.innerHTML = '×';\n    closeBtn.title = 'Close';\n    closeBtn.addEventListener('click', () => this._closePopup());\n    header.appendChild(closeBtn);\n\n    this._popupContainer.appendChild(header);\n\n    // Create popup chart (larger)\n    const popupChartContainer = document.createElement('div');\n    popupChartContainer.className = 'lidar-chart-popup-content';\n    this._popupChartContainer = popupChartContainer;\n\n    this._popupChart = new ElevationProfileChart({\n      width: 700,\n      height: 400,\n      colormap: this._options.colormap,\n    });\n    this._popupChart.setProfile(this._profile);\n    popupChartContainer.appendChild(this._popupChart.render());\n\n    this._popupContainer.appendChild(popupChartContainer);\n\n    // Stats in popup\n    const popupStats = document.createElement('div');\n    popupStats.className = 'lidar-chart-popup-stats';\n    const { stats } = this._profile;\n    popupStats.innerHTML = `\n      <span><strong>Points:</strong> ${stats.pointCount.toLocaleString()}</span>\n      <span><strong>Distance:</strong> ${stats.totalDistance.toFixed(1)} m</span>\n      <span><strong>Elevation:</strong> ${stats.minElevation.toFixed(1)} - ${stats.maxElevation.toFixed(1)} m</span>\n      <span><strong>Mean:</strong> ${stats.meanElevation.toFixed(1)} m</span>\n    `;\n    this._popupContainer.appendChild(popupStats);\n\n    // Resize handle (corner)\n    const resizeHandle = document.createElement('div');\n    resizeHandle.className = 'lidar-chart-popup-resize';\n    resizeHandle.title = 'Drag to resize';\n    resizeHandle.addEventListener('mousedown', (e) => {\n      e.preventDefault();\n      e.stopPropagation();\n      this._startPopupResize(e);\n    });\n    this._popupContainer.appendChild(resizeHandle);\n\n    this._popupBackdrop.appendChild(this._popupContainer);\n    document.body.appendChild(this._popupBackdrop);\n\n    // Prevent body scroll\n    document.body.style.overflow = 'hidden';\n\n    this._popupResizeObserver = new ResizeObserver(() => {\n      this._syncPopupChartSize();\n    });\n    this._popupResizeObserver.observe(popupChartContainer);\n    this._syncPopupChartSize();\n  }\n\n  /**\n   * Closes the popup.\n   */\n  private _closePopup(): void {\n    if (this._popupBackdrop) {\n      this._popupBackdrop.remove();\n      this._popupBackdrop = undefined;\n    }\n    if (this._popupChart) {\n      this._popupChart.destroy();\n      this._popupChart = undefined;\n    }\n    if (this._popupResizeObserver) {\n      this._popupResizeObserver.disconnect();\n      this._popupResizeObserver = undefined;\n    }\n    this._popupContainer = undefined;\n    this._popupChartContainer = undefined;\n    this._ignoreBackdropClick = false;\n    document.body.style.overflow = '';\n  }\n\n  /**\n   * Starts popup resize operation.\n   */\n  private _startPopupResize(e: MouseEvent): void {\n    if (!this._popupContainer) return;\n\n    this._isResizing = true;\n    this._ignoreBackdropClick = true;\n    this._resizeStartX = e.clientX;\n    this._resizeStartY = e.clientY;\n    const rect = this._popupContainer.getBoundingClientRect();\n    this._resizeStartWidth = rect.width;\n    this._resizeStartHeight = rect.height;\n\n    document.addEventListener('mousemove', this._handlePopupResizeMouseMove);\n    document.addEventListener('mouseup', this._handlePopupResizeMouseUp);\n    document.body.style.cursor = 'nwse-resize';\n    document.body.style.userSelect = 'none';\n  }\n\n  /**\n   * Handles popup resize mouse move.\n   */\n  private _onPopupResizeMouseMove(e: MouseEvent): void {\n    if (!this._isResizing || !this._popupContainer) return;\n\n    const deltaX = e.clientX - this._resizeStartX;\n    const deltaY = e.clientY - this._resizeStartY;\n\n    const newWidth = Math.max(400, Math.min(window.innerWidth - 40, this._resizeStartWidth + deltaX));\n    const newHeight = Math.max(300, Math.min(window.innerHeight - 40, this._resizeStartHeight + deltaY));\n\n    this._popupContainer.style.width = `${newWidth}px`;\n    this._popupContainer.style.height = `${newHeight}px`;\n    this._syncPopupChartSize();\n  }\n\n  /**\n   * Handles popup resize mouse up.\n   */\n  private _onPopupResizeMouseUp(): void {\n    this._isResizing = false;\n    document.removeEventListener('mousemove', this._handlePopupResizeMouseMove);\n    document.removeEventListener('mouseup', this._handlePopupResizeMouseUp);\n    document.body.style.cursor = '';\n    document.body.style.userSelect = '';\n\n    this._syncPopupChartSize();\n    window.setTimeout(() => {\n      this._ignoreBackdropClick = false;\n    }, 0);\n\n    // Re-apply profile data to ensure chart is properly rendered after resize\n    if (this._popupChart && this._profile) {\n      this._popupChart.setProfile(this._profile);\n    }\n  }\n\n  private _syncPopupChartSize(): void {\n    if (!this._popupChart || !this._popupChartContainer) return;\n\n    const rect = this._popupChartContainer.getBoundingClientRect();\n    const styles = window.getComputedStyle(this._popupChartContainer);\n    const paddingX =\n      (Number.parseFloat(styles.paddingLeft) || 0) + (Number.parseFloat(styles.paddingRight) || 0);\n    const paddingY =\n      (Number.parseFloat(styles.paddingTop) || 0) + (Number.parseFloat(styles.paddingBottom) || 0);\n    const chartWidth = Math.max(200, rect.width - paddingX);\n    const chartHeight = Math.max(150, rect.height - paddingY);\n\n    this._popupChart.resize(chartWidth, chartHeight);\n  }\n\n  /**\n   * Downloads the profile data as CSV.\n   */\n  private _downloadCSV(): void {\n    if (!this._profile || this._profile.points.length === 0) return;\n\n    const headers = ['distance', 'elevation', 'offsetFromLine', 'longitude', 'latitude', 'intensity', 'classification'];\n    const rows = [headers.join(',')];\n\n    for (const point of this._profile.points) {\n      const row = [\n        point.distance.toFixed(3),\n        point.elevation.toFixed(3),\n        point.offsetFromLine.toFixed(3),\n        point.longitude.toFixed(8),\n        point.latitude.toFixed(8),\n        point.intensity !== undefined ? point.intensity.toFixed(4) : '',\n        point.classification !== undefined ? String(point.classification) : '',\n      ];\n      rows.push(row.join(','));\n    }\n\n    const csvContent = rows.join('\\n');\n    const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });\n    const url = URL.createObjectURL(blob);\n\n    const link = document.createElement('a');\n    link.href = url;\n    link.download = `cross-section-profile-${Date.now()}.csv`;\n    link.style.display = 'none';\n    document.body.appendChild(link);\n    link.click();\n    document.body.removeChild(link);\n    URL.revokeObjectURL(url);\n  }\n\n  /**\n   * Destroys the panel and cleans up resources.\n   */\n  destroy(): void {\n    // Close popup if open\n    this._closePopup();\n\n    // Clean up resize observer\n    if (this._resizeObserver) {\n      this._resizeObserver.disconnect();\n      this._resizeObserver = undefined;\n    }\n\n    // Remove document event listeners if resizing\n    if (this._isResizing) {\n      document.removeEventListener('mousemove', this._handlePopupResizeMouseMove);\n      document.removeEventListener('mouseup', this._handlePopupResizeMouseUp);\n      document.body.style.cursor = '';\n      document.body.style.userSelect = '';\n    }\n\n    this._chart.destroy();\n    this._container.remove();\n  }\n}\n","import type { CrossSectionLine, ProfilePoint, ElevationProfile } from '../core/types';\nimport type { PointCloudData } from '../loaders/types';\n\n/**\n * Extracts elevation profile points from point cloud data along a cross-section line.\n * Calculates distances using Haversine formula and filters points within buffer distance.\n */\nexport class ElevationProfileExtractor {\n  private static readonly EARTH_RADIUS_M = 6371000;\n\n  /**\n   * Extracts points within the buffer distance of a cross-section line.\n   *\n   * @param line - The cross-section line definition\n   * @param pointCloudData - The point cloud data to extract from\n   * @param coordinateOrigin - The coordinate origin [lng, lat, z]\n   * @returns Elevation profile with sorted points and statistics\n   */\n  static extract(\n    line: CrossSectionLine,\n    pointCloudData: PointCloudData,\n    coordinateOrigin: [number, number, number]\n  ): ElevationProfile {\n    const points: ProfilePoint[] = [];\n    const { positions, intensities, classifications, pointCount } = pointCloudData;\n\n    // Pre-compute line properties\n    const lineStart = line.start;\n    const lineEnd = line.end;\n    const totalDistance = this.haversineDistance(lineStart, lineEnd);\n\n    // Line vector for projection\n    const dx = lineEnd[0] - lineStart[0];\n    const dy = lineEnd[1] - lineStart[1];\n    const lineLengthSq = dx * dx + dy * dy;\n\n    // Extract points within buffer\n    for (let i = 0; i < pointCount; i++) {\n      // Reconstruct absolute coordinates\n      const lng = positions[i * 3] + coordinateOrigin[0];\n      const lat = positions[i * 3 + 1] + coordinateOrigin[1];\n      const elevation = positions[i * 3 + 2];\n\n      // Calculate perpendicular distance from line\n      const { distance: distanceAlongLine, offset } = this.pointToLineDistance(\n        [lng, lat],\n        lineStart,\n        lineEnd,\n        lineLengthSq,\n        totalDistance\n      );\n\n      // Check if point is within buffer\n      if (offset <= line.bufferDistance && distanceAlongLine >= 0 && distanceAlongLine <= totalDistance) {\n        const point: ProfilePoint = {\n          distance: distanceAlongLine,\n          elevation,\n          offsetFromLine: offset,\n          longitude: lng,\n          latitude: lat,\n          intensity: intensities ? intensities[i] : undefined,\n          classification: classifications ? classifications[i] : undefined,\n        };\n        points.push(point);\n      }\n    }\n\n    // Sort by distance along line\n    points.sort((a, b) => a.distance - b.distance);\n\n    // Calculate statistics\n    const stats = this.calculateStats(points, totalDistance);\n\n    return {\n      line,\n      points,\n      stats,\n    };\n  }\n\n  /**\n   * Calculates the Haversine distance between two WGS84 points.\n   *\n   * @param p1 - First point [lng, lat]\n   * @param p2 - Second point [lng, lat]\n   * @returns Distance in meters\n   */\n  static haversineDistance(p1: [number, number], p2: [number, number]): number {\n    const lat1 = this.toRadians(p1[1]);\n    const lat2 = this.toRadians(p2[1]);\n    const dLat = this.toRadians(p2[1] - p1[1]);\n    const dLng = this.toRadians(p2[0] - p1[0]);\n\n    const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +\n              Math.cos(lat1) * Math.cos(lat2) *\n              Math.sin(dLng / 2) * Math.sin(dLng / 2);\n    const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n\n    return this.EARTH_RADIUS_M * c;\n  }\n\n  /**\n   * Calculates the distance along a line and perpendicular offset from a point.\n   *\n   * @param point - The point [lng, lat]\n   * @param lineStart - Line start [lng, lat]\n   * @param lineEnd - Line end [lng, lat]\n   * @param lineLengthSq - Squared length of line vector (for efficiency)\n   * @param totalLineDistance - Total line distance in meters\n   * @returns Distance along line (m) and perpendicular offset (m)\n   */\n  private static pointToLineDistance(\n    point: [number, number],\n    lineStart: [number, number],\n    lineEnd: [number, number],\n    lineLengthSq: number,\n    totalLineDistance: number\n  ): { distance: number; offset: number } {\n    // Project point onto line using parametric form\n    const dx = lineEnd[0] - lineStart[0];\n    const dy = lineEnd[1] - lineStart[1];\n    const px = point[0] - lineStart[0];\n    const py = point[1] - lineStart[1];\n\n    // Projection parameter t (0 = at start, 1 = at end)\n    let t = (px * dx + py * dy) / lineLengthSq;\n    t = Math.max(0, Math.min(1, t)); // Clamp to line segment\n\n    // Closest point on line\n    const closestLng = lineStart[0] + t * dx;\n    const closestLat = lineStart[1] + t * dy;\n\n    // Calculate distances using Haversine\n    const distanceAlongLine = t * totalLineDistance;\n    const offset = this.haversineDistance(point, [closestLng, closestLat]);\n\n    return { distance: distanceAlongLine, offset };\n  }\n\n  /**\n   * Calculates profile statistics.\n   *\n   * @param points - Profile points\n   * @param totalDistance - Total line distance\n   * @returns Statistics object\n   */\n  private static calculateStats(\n    points: ProfilePoint[],\n    totalDistance: number\n  ): ElevationProfile['stats'] {\n    if (points.length === 0) {\n      return {\n        minElevation: 0,\n        maxElevation: 0,\n        meanElevation: 0,\n        totalDistance,\n        pointCount: 0,\n      };\n    }\n\n    let minElevation = Infinity;\n    let maxElevation = -Infinity;\n    let sumElevation = 0;\n\n    for (const point of points) {\n      minElevation = Math.min(minElevation, point.elevation);\n      maxElevation = Math.max(maxElevation, point.elevation);\n      sumElevation += point.elevation;\n    }\n\n    return {\n      minElevation,\n      maxElevation,\n      meanElevation: sumElevation / points.length,\n      totalDistance,\n      pointCount: points.length,\n    };\n  }\n\n  /**\n   * Converts degrees to radians.\n   *\n   * @param degrees - Angle in degrees\n   * @returns Angle in radians\n   */\n  private static toRadians(degrees: number): number {\n    return degrees * (Math.PI / 180);\n  }\n\n  /**\n   * Creates a buffer polygon around a line for visualization.\n   * Returns GeoJSON coordinates for a polygon.\n   *\n   * @param line - The cross-section line\n   * @param numPoints - Number of points for end caps\n   * @returns GeoJSON polygon coordinates\n   */\n  static createBufferPolygon(\n    line: CrossSectionLine,\n    numPoints: number = 8\n  ): [number, number][] {\n    const [startLng, startLat] = line.start;\n    const [endLng, endLat] = line.end;\n    const bufferDegrees = this.metersToDegrees(line.bufferDistance, (startLat + endLat) / 2);\n\n    // Calculate perpendicular direction\n    const dx = endLng - startLng;\n    const dy = endLat - startLat;\n    const len = Math.sqrt(dx * dx + dy * dy);\n    const perpX = -dy / len;\n    const perpY = dx / len;\n\n    const coords: [number, number][] = [];\n\n    // Left side of line (start to end)\n    coords.push([startLng + perpX * bufferDegrees, startLat + perpY * bufferDegrees]);\n    coords.push([endLng + perpX * bufferDegrees, endLat + perpY * bufferDegrees]);\n\n    // End cap (semicircle around end point)\n    for (let i = 0; i <= numPoints; i++) {\n      const angle = Math.atan2(perpY, perpX) - Math.PI + (Math.PI * i) / numPoints;\n      coords.push([\n        endLng + Math.cos(angle) * bufferDegrees,\n        endLat + Math.sin(angle) * bufferDegrees,\n      ]);\n    }\n\n    // Right side of line (end to start)\n    coords.push([endLng - perpX * bufferDegrees, endLat - perpY * bufferDegrees]);\n    coords.push([startLng - perpX * bufferDegrees, startLat - perpY * bufferDegrees]);\n\n    // Start cap (semicircle around start point)\n    for (let i = 0; i <= numPoints; i++) {\n      const angle = Math.atan2(perpY, perpX) + (Math.PI * i) / numPoints;\n      coords.push([\n        startLng + Math.cos(angle) * bufferDegrees,\n        startLat + Math.sin(angle) * bufferDegrees,\n      ]);\n    }\n\n    // Close the polygon\n    coords.push(coords[0]);\n\n    return coords;\n  }\n\n  /**\n   * Converts meters to approximate degrees at a given latitude.\n   *\n   * @param meters - Distance in meters\n   * @param latitude - Latitude for conversion\n   * @returns Approximate degrees\n   */\n  private static metersToDegrees(meters: number, latitude: number): number {\n    const latRadians = this.toRadians(latitude);\n    return meters / (this.EARTH_RADIUS_M * Math.cos(latRadians) * (Math.PI / 180));\n  }\n}\n","import type { Map as MapLibreMap, MapMouseEvent } from 'maplibre-gl';\nimport type { CrossSectionLine } from '../core/types';\nimport type { DeckOverlay } from '../core/DeckOverlay';\nimport { GeoJsonLayer } from '@deck.gl/layers';\nimport { ElevationProfileExtractor } from './ElevationProfileExtractor';\n\n/**\n * Cross-section drawing tool for MapLibre.\n * Allows users to draw a line on the map and visualize the buffer zone.\n */\nexport class CrossSectionTool {\n  private _map: MapLibreMap;\n  private _deckOverlay: DeckOverlay;\n  private _enabled: boolean = false;\n  private _isDrawing: boolean = false;\n  private _startPoint: [number, number] | null = null;\n  private _endPoint: [number, number] | null = null;\n  private _bufferDistance: number = 10; // meters\n\n  // deck.gl layer ID\n  private readonly LAYER_ID = 'lidar-cross-section-layer';\n\n  // Event callbacks\n  private _onLineChange?: (line: CrossSectionLine | null) => void;\n\n  // Bound event handlers\n  private _handleClickBound: (e: MapMouseEvent) => void;\n  private _handleMouseMoveBound: (e: MapMouseEvent) => void;\n\n  /**\n   * Creates a new CrossSectionTool instance.\n   *\n   * @param map - MapLibre map instance\n   * @param deckOverlay - DeckOverlay instance for rendering\n   */\n  constructor(map: MapLibreMap, deckOverlay: DeckOverlay) {\n    this._map = map;\n    this._deckOverlay = deckOverlay;\n    this._handleClickBound = this._handleClick.bind(this);\n    this._handleMouseMoveBound = this._handleMouseMove.bind(this);\n  }\n\n  /**\n   * Enables cross-section drawing mode.\n   */\n  enable(): void {\n    if (this._enabled) return;\n\n    this._enabled = true;\n    this._addEventListeners();\n    this._map.getCanvas().style.cursor = 'crosshair';\n  }\n\n  /**\n   * Disables cross-section drawing mode.\n   */\n  disable(): void {\n    if (!this._enabled) return;\n\n    this._enabled = false;\n    this._removeEventListeners();\n    this._map.getCanvas().style.cursor = '';\n    this._isDrawing = false;\n  }\n\n  /**\n   * Checks if the tool is enabled.\n   *\n   * @returns True if enabled\n   */\n  isEnabled(): boolean {\n    return this._enabled;\n  }\n\n  /**\n   * Gets the current cross-section line.\n   *\n   * @returns Cross-section line or null if not defined\n   */\n  getLine(): CrossSectionLine | null {\n    if (!this._startPoint || !this._endPoint) return null;\n\n    return {\n      start: this._startPoint,\n      end: this._endPoint,\n      bufferDistance: this._bufferDistance,\n    };\n  }\n\n  /**\n   * Sets the buffer distance.\n   *\n   * @param meters - Buffer distance in meters\n   */\n  setBufferDistance(meters: number): void {\n    this._bufferDistance = meters;\n    this._updateVisualization();\n    this._notifyLineChange();\n  }\n\n  /**\n   * Gets the current buffer distance.\n   *\n   * @returns Buffer distance in meters\n   */\n  getBufferDistance(): number {\n    return this._bufferDistance;\n  }\n\n  /**\n   * Clears the current cross-section line.\n   */\n  clearLine(): void {\n    this._startPoint = null;\n    this._endPoint = null;\n    this._isDrawing = false;\n    // Remove the deck.gl layer when clearing\n    this._removeDeckLayers();\n    this._notifyLineChange();\n  }\n\n  /**\n   * Sets the callback for line changes.\n   *\n   * @param callback - Callback function\n   */\n  setOnLineChange(callback: (line: CrossSectionLine | null) => void): void {\n    this._onLineChange = callback;\n  }\n\n  /**\n   * Destroys the tool and cleans up resources.\n   */\n  destroy(): void {\n    this.disable();\n    this._removeDeckLayers();\n  }\n\n  /**\n   * Removes deck.gl layers.\n   */\n  private _removeDeckLayers(): void {\n    if (this._deckOverlay.hasLayer(this.LAYER_ID)) {\n      this._deckOverlay.removeLayer(this.LAYER_ID);\n    }\n  }\n\n  /**\n   * Adds event listeners for drawing.\n   */\n  private _addEventListeners(): void {\n    this._map.on('click', this._handleClickBound);\n    this._map.on('mousemove', this._handleMouseMoveBound);\n  }\n\n  /**\n   * Removes event listeners.\n   */\n  private _removeEventListeners(): void {\n    this._map.off('click', this._handleClickBound);\n    this._map.off('mousemove', this._handleMouseMoveBound);\n  }\n\n  /**\n   * Handles map click events.\n   *\n   * @param e - Map mouse event\n   */\n  private _handleClick(e: MapMouseEvent): void {\n    const lngLat = e.lngLat;\n\n    if (!this._isDrawing) {\n      // First click - set start point\n      this._startPoint = [lngLat.lng, lngLat.lat];\n      this._endPoint = null;\n      this._isDrawing = true;\n    } else {\n      // Second click - set end point\n      this._endPoint = [lngLat.lng, lngLat.lat];\n      this._isDrawing = false;\n      this._notifyLineChange();\n    }\n\n    this._updateVisualization();\n  }\n\n  /**\n   * Handles mouse move events for preview.\n   *\n   * @param e - Map mouse event\n   */\n  private _handleMouseMove(e: MapMouseEvent): void {\n    if (!this._isDrawing || !this._startPoint) return;\n\n    // Update end point for preview\n    this._endPoint = [e.lngLat.lng, e.lngLat.lat];\n    this._updateVisualization();\n  }\n\n  /**\n   * Updates the visualization on the map using deck.gl.\n   */\n  private _updateVisualization(): void {\n    const features: GeoJSON.Feature[] = [];\n\n    // Add start point\n    if (this._startPoint) {\n      features.push({\n        type: 'Feature',\n        properties: { type: 'point', position: 'start' },\n        geometry: {\n          type: 'Point',\n          coordinates: this._startPoint,\n        },\n      });\n    }\n\n    // Add end point and line\n    if (this._startPoint && this._endPoint) {\n      // End point\n      features.push({\n        type: 'Feature',\n        properties: { type: 'point', position: 'end' },\n        geometry: {\n          type: 'Point',\n          coordinates: this._endPoint,\n        },\n      });\n\n      // Line\n      features.push({\n        type: 'Feature',\n        properties: { type: 'line' },\n        geometry: {\n          type: 'LineString',\n          coordinates: [this._startPoint, this._endPoint],\n        },\n      });\n\n      // Buffer polygon\n      const bufferCoords = ElevationProfileExtractor.createBufferPolygon({\n        start: this._startPoint,\n        end: this._endPoint,\n        bufferDistance: this._bufferDistance,\n      });\n\n      features.push({\n        type: 'Feature',\n        properties: { type: 'buffer' },\n        geometry: {\n          type: 'Polygon',\n          coordinates: [bufferCoords],\n        },\n      });\n    }\n\n    const geojsonData: GeoJSON.FeatureCollection = {\n      type: 'FeatureCollection',\n      features,\n    };\n\n    // Create deck.gl GeoJsonLayer with styling for all feature types\n    // Use parameters.depthTest: false to ensure it renders on top of point clouds\n    const layer = new GeoJsonLayer({\n      id: this.LAYER_ID,\n      data: geojsonData,\n      pickable: false,\n      stroked: true,\n      filled: true,\n      // Disable depth testing so this layer always renders on top\n      parameters: {\n        depthTest: false,\n        depthMask: false,\n      },\n      // Fill color for polygons (buffer) and points\n      getFillColor: (f: GeoJSON.Feature) => {\n        if (f.properties?.type === 'point') {\n          return [255, 51, 51, 255]; // #ff3333\n        }\n        if (f.properties?.type === 'buffer') {\n          return [51, 136, 255, 50]; // #3388ff with 0.2 opacity\n        }\n        return [0, 0, 0, 0];\n      },\n      // Line color for lines and polygon borders\n      getLineColor: (f: GeoJSON.Feature) => {\n        if (f.properties?.type === 'line') {\n          return [51, 136, 255, 255]; // #3388ff\n        }\n        if (f.properties?.type === 'buffer') {\n          return [51, 136, 255, 100]; // Buffer border\n        }\n        if (f.properties?.type === 'point') {\n          return [255, 255, 255, 255]; // White stroke for points\n        }\n        return [0, 0, 0, 0];\n      },\n      getLineWidth: (f: GeoJSON.Feature) => {\n        if (f.properties?.type === 'line') {\n          return 3;\n        }\n        if (f.properties?.type === 'point') {\n          return 2;\n        }\n        return 1;\n      },\n      lineWidthUnits: 'pixels',\n      // Point styling\n      pointType: 'circle',\n      getPointRadius: 8,\n      pointRadiusUnits: 'pixels',\n    });\n\n    // Add or update the layer\n    if (this._deckOverlay.hasLayer(this.LAYER_ID)) {\n      this._deckOverlay.updateLayer(this.LAYER_ID, layer);\n    } else {\n      this._deckOverlay.addLayer(this.LAYER_ID, layer);\n    }\n  }\n\n  /**\n   * Notifies listeners of line change.\n   */\n  private _notifyLineChange(): void {\n    if (this._onLineChange) {\n      this._onLineChange(this.getLine());\n    }\n  }\n}\n","import type {\n  ColorRangeConfig,\n  ColorScheme,\n  ColormapName,\n  LidarState,\n} from '../core/types';\n\nexport const LIDAR_SHARE_PARAM = 'lidar';\nexport const LIDAR_SHARE_VERSION = 1;\nconst LEGACY_URL_PARAM = 'url';\nconst FLAT_SHARE_PARAMS = [\n  'url',\n  'lon',\n  'lat',\n  'zoom',\n  'bearing',\n  'pitch',\n  'size',\n  'opacity',\n  'color',\n  'cmap',\n  'range',\n  'plow',\n  'phigh',\n  'amin',\n  'amax',\n  'emin',\n  'emax',\n  'pick',\n  'zoff',\n  'zoffEnabled',\n  'terrain',\n  'hidden',\n];\n\nexport interface LidarShareMapState {\n  center: [number, number];\n  zoom: number;\n  bearing: number;\n  pitch: number;\n}\n\nexport interface LidarShareVisualization {\n  pointSize: number;\n  opacity: number;\n  colorScheme: ColorScheme;\n  colormap: ColormapName;\n  colorRange: ColorRangeConfig;\n  elevationRange: [number, number] | null;\n  pickable: boolean;\n  zOffsetEnabled: boolean;\n  zOffset: number;\n  terrainEnabled: boolean;\n  hiddenClassifications: number[];\n}\n\nexport interface LidarSharePayload {\n  v: typeof LIDAR_SHARE_VERSION;\n  map?: LidarShareMapState;\n  pointClouds: string[];\n  visualization: LidarShareVisualization;\n}\n\nfunction encodeBase64Url(value: string): string {\n  const bytes = new TextEncoder().encode(value);\n  let binary = '';\n\n  for (let i = 0; i < bytes.length; i += 0x8000) {\n    const chunk = bytes.subarray(i, i + 0x8000);\n    binary += String.fromCharCode(...chunk);\n  }\n\n  const base64 =\n    typeof btoa === 'function'\n      ? btoa(binary)\n      : Buffer.from(bytes).toString('base64');\n\n  return base64.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/g, '');\n}\n\nfunction decodeBase64Url(value: string): string {\n  const base64 = value.replace(/-/g, '+').replace(/_/g, '/');\n  const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, '=');\n\n  if (typeof atob === 'function') {\n    const binary = atob(padded);\n    const bytes = new Uint8Array(binary.length);\n    for (let i = 0; i < binary.length; i++) {\n      bytes[i] = binary.charCodeAt(i);\n    }\n    return new TextDecoder().decode(bytes);\n  }\n\n  return Buffer.from(padded, 'base64').toString('utf-8');\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isNumber(value: unknown): value is number {\n  return typeof value === 'number' && Number.isFinite(value);\n}\n\nfunction isMapState(value: unknown): value is LidarShareMapState {\n  if (!isRecord(value)) return false;\n\n  const center = value.center;\n  return (\n    Array.isArray(center) &&\n    center.length === 2 &&\n    center.every(isNumber) &&\n    isNumber(value.zoom) &&\n    isNumber(value.bearing) &&\n    isNumber(value.pitch)\n  );\n}\n\nfunction isElevationRange(value: unknown): value is [number, number] | null {\n  return (\n    value === null ||\n    (Array.isArray(value) &&\n      value.length === 2 &&\n      isNumber(value[0]) &&\n      isNumber(value[1]))\n  );\n}\n\nfunction isColorRange(value: unknown): value is ColorRangeConfig {\n  if (!isRecord(value)) return false;\n  if (value.mode !== 'percentile' && value.mode !== 'absolute') return false;\n  if (!isNumber(value.percentileLow) || !isNumber(value.percentileHigh)) return false;\n  if (value.absoluteMin !== undefined && !isNumber(value.absoluteMin)) return false;\n  if (value.absoluteMax !== undefined && !isNumber(value.absoluteMax)) return false;\n  return true;\n}\n\nfunction isVisualization(value: unknown): value is LidarShareVisualization {\n  if (!isRecord(value)) return false;\n\n  return (\n    isNumber(value.pointSize) &&\n    isNumber(value.opacity) &&\n    value.colorScheme !== undefined &&\n    typeof value.colormap === 'string' &&\n    isColorRange(value.colorRange) &&\n    isElevationRange(value.elevationRange) &&\n    typeof value.pickable === 'boolean' &&\n    typeof value.zOffsetEnabled === 'boolean' &&\n    isNumber(value.zOffset) &&\n    typeof value.terrainEnabled === 'boolean' &&\n    Array.isArray(value.hiddenClassifications) &&\n    value.hiddenClassifications.every(isNumber)\n  );\n}\n\nfunction normalizePointCloudSource(source: string, baseUrl?: string): string | null {\n  if (!source || source === 'file') return null;\n\n  if (!baseUrl) return source;\n\n  try {\n    return new URL(source, baseUrl).toString();\n  } catch {\n    return source;\n  }\n}\n\nexport function createLidarSharePayload(\n  state: LidarState,\n  map?: LidarShareMapState,\n  baseUrl?: string\n): LidarSharePayload {\n  const sources = new Set<string>();\n\n  for (const pointCloud of state.pointClouds) {\n    const source = normalizePointCloudSource(pointCloud.source, baseUrl);\n    if (source) {\n      sources.add(source);\n    }\n  }\n\n  return {\n    v: LIDAR_SHARE_VERSION,\n    map,\n    pointClouds: Array.from(sources),\n    visualization: {\n      pointSize: state.pointSize,\n      opacity: state.opacity,\n      colorScheme: state.colorScheme,\n      colormap: state.colormap,\n      colorRange: state.colorRange,\n      elevationRange: state.elevationRange,\n      pickable: state.pickable,\n      zOffsetEnabled: state.zOffsetEnabled,\n      zOffset: state.zOffset,\n      terrainEnabled: state.terrainEnabled,\n      hiddenClassifications: Array.from(state.hiddenClassifications).sort((a, b) => a - b),\n    },\n  };\n}\n\nexport function encodeLidarSharePayload(payload: LidarSharePayload): string {\n  return encodeBase64Url(JSON.stringify(payload));\n}\n\nexport function decodeLidarSharePayload(value: string): LidarSharePayload | null {\n  try {\n    const payload = JSON.parse(decodeBase64Url(value)) as unknown;\n    if (!isRecord(payload)) return null;\n    if (payload.v !== LIDAR_SHARE_VERSION) return null;\n    if (!Array.isArray(payload.pointClouds) || !payload.pointClouds.every((source) => typeof source === 'string')) {\n      return null;\n    }\n    if (!isVisualization(payload.visualization)) return null;\n    if (payload.map !== undefined && !isMapState(payload.map)) return null;\n\n    return {\n      v: LIDAR_SHARE_VERSION,\n      map: payload.map,\n      pointClouds: [...payload.pointClouds],\n      visualization: {\n        ...payload.visualization,\n        hiddenClassifications: [...payload.visualization.hiddenClassifications],\n      },\n    };\n  } catch {\n    return null;\n  }\n}\n\nexport function createLidarShareUrl(currentUrl: string, payload: LidarSharePayload): string {\n  const url = new URL(currentUrl);\n  for (const param of FLAT_SHARE_PARAMS) {\n    url.searchParams.delete(param);\n  }\n  url.searchParams.delete(LIDAR_SHARE_PARAM);\n\n  for (const source of payload.pointClouds) {\n    url.searchParams.append(LEGACY_URL_PARAM, source);\n  }\n\n  if (payload.map) {\n    url.searchParams.set('lon', formatQueryNumber(payload.map.center[0]));\n    url.searchParams.set('lat', formatQueryNumber(payload.map.center[1]));\n    url.searchParams.set('zoom', formatQueryNumber(payload.map.zoom));\n    url.searchParams.set('bearing', formatQueryNumber(payload.map.bearing));\n    url.searchParams.set('pitch', formatQueryNumber(payload.map.pitch));\n  }\n\n  const visualization = payload.visualization;\n  url.searchParams.set('size', formatQueryNumber(visualization.pointSize));\n  url.searchParams.set('opacity', formatQueryNumber(visualization.opacity));\n  url.searchParams.set(\n    'color',\n    typeof visualization.colorScheme === 'string'\n      ? visualization.colorScheme\n      : JSON.stringify(visualization.colorScheme)\n  );\n  url.searchParams.set('cmap', visualization.colormap);\n  url.searchParams.set('range', visualization.colorRange.mode);\n  url.searchParams.set('plow', formatQueryNumber(visualization.colorRange.percentileLow));\n  url.searchParams.set('phigh', formatQueryNumber(visualization.colorRange.percentileHigh));\n  if (visualization.colorRange.absoluteMin !== undefined) {\n    url.searchParams.set('amin', formatQueryNumber(visualization.colorRange.absoluteMin));\n  }\n  if (visualization.colorRange.absoluteMax !== undefined) {\n    url.searchParams.set('amax', formatQueryNumber(visualization.colorRange.absoluteMax));\n  }\n  if (visualization.elevationRange) {\n    url.searchParams.set('emin', formatQueryNumber(visualization.elevationRange[0]));\n    url.searchParams.set('emax', formatQueryNumber(visualization.elevationRange[1]));\n  }\n  url.searchParams.set('pick', formatQueryBoolean(visualization.pickable));\n  url.searchParams.set('zoffEnabled', formatQueryBoolean(visualization.zOffsetEnabled));\n  url.searchParams.set('zoff', formatQueryNumber(visualization.zOffset));\n  url.searchParams.set('terrain', formatQueryBoolean(visualization.terrainEnabled));\n  if (visualization.hiddenClassifications.length > 0) {\n    url.searchParams.set('hidden', visualization.hiddenClassifications.join(','));\n  }\n  url.hash = '';\n  return url.toString();\n}\n\nexport function parseLidarSharePayloadFromUrl(url: string): LidarSharePayload | null {\n  try {\n    const parsed = new URL(url);\n    const flatPayload = parseFlatLidarSharePayload(parsed.searchParams);\n    if (flatPayload) return flatPayload;\n\n    const value = parsed.searchParams.get(LIDAR_SHARE_PARAM);\n    return value ? decodeLidarSharePayload(value) : null;\n  } catch {\n    return null;\n  }\n}\n\nexport function hasLidarShareParams(url: string): boolean {\n  try {\n    const params = new URL(url).searchParams;\n    if (params.has(LIDAR_SHARE_PARAM)) return true;\n    return hasFlatLidarShareParams(params);\n  } catch {\n    return false;\n  }\n}\n\nfunction formatQueryNumber(value: number): string {\n  return Number.isInteger(value)\n    ? String(value)\n    : Number(value.toFixed(8)).toString();\n}\n\nfunction formatQueryBoolean(value: boolean): string {\n  return value ? '1' : '0';\n}\n\nfunction parseQueryNumber(value: string | null): number | undefined {\n  if (value === null || value.trim() === '') return undefined;\n  const parsed = Number(value);\n  return Number.isFinite(parsed) ? parsed : undefined;\n}\n\nfunction parseQueryBoolean(value: string | null, fallback: boolean): boolean {\n  if (value === null) return fallback;\n  return value === '1' || value.toLowerCase() === 'true';\n}\n\nfunction parseColorScheme(value: string | null): ColorScheme {\n  if (!value) return 'elevation';\n  if (value.trim().startsWith('{')) {\n    try {\n      const parsed = JSON.parse(value) as unknown;\n      if (isRecord(parsed) && (parsed.type === 'gradient' || parsed.type === 'categorical') && typeof parsed.attribute === 'string') {\n        return parsed as unknown as ColorScheme;\n      }\n    } catch {\n      return 'elevation';\n    }\n  }\n  return value as ColorScheme;\n}\n\nfunction hasFlatLidarShareParams(params: URLSearchParams): boolean {\n  return FLAT_SHARE_PARAMS.some((param) => param !== LEGACY_URL_PARAM && params.has(param));\n}\n\nfunction parseFlatLidarSharePayload(params: URLSearchParams): LidarSharePayload | null {\n  if (!hasFlatLidarShareParams(params)) return null;\n\n  const lon = parseQueryNumber(params.get('lon'));\n  const lat = parseQueryNumber(params.get('lat'));\n  const zoom = parseQueryNumber(params.get('zoom'));\n  const bearing = parseQueryNumber(params.get('bearing')) ?? 0;\n  const pitch = parseQueryNumber(params.get('pitch')) ?? 0;\n  const pointSize = parseQueryNumber(params.get('size')) ?? 2;\n  const opacity = parseQueryNumber(params.get('opacity')) ?? 1;\n  const percentileLow = parseQueryNumber(params.get('plow')) ?? 2;\n  const percentileHigh = parseQueryNumber(params.get('phigh')) ?? 98;\n  const absoluteMin = parseQueryNumber(params.get('amin'));\n  const absoluteMax = parseQueryNumber(params.get('amax'));\n  const elevationMin = parseQueryNumber(params.get('emin'));\n  const elevationMax = parseQueryNumber(params.get('emax'));\n  const zOffset = parseQueryNumber(params.get('zoff')) ?? 0;\n  const hiddenClassifications = (params.get('hidden') ?? '')\n    .split(',')\n    .map((value) => Number(value))\n    .filter((value) => Number.isFinite(value));\n\n  return {\n    v: LIDAR_SHARE_VERSION,\n    map:\n      lon !== undefined && lat !== undefined && zoom !== undefined\n        ? {\n            center: [lon, lat],\n            zoom,\n            bearing,\n            pitch,\n          }\n        : undefined,\n    pointClouds: params.getAll(LEGACY_URL_PARAM).filter((source) => source.trim() !== ''),\n    visualization: {\n      pointSize,\n      opacity,\n      colorScheme: parseColorScheme(params.get('color')),\n      colormap: (params.get('cmap') ?? 'viridis') as ColormapName,\n      colorRange: {\n        mode: params.get('range') === 'absolute' ? 'absolute' : 'percentile',\n        percentileLow,\n        percentileHigh,\n        ...(absoluteMin !== undefined ? { absoluteMin } : {}),\n        ...(absoluteMax !== undefined ? { absoluteMax } : {}),\n      },\n      elevationRange:\n        elevationMin !== undefined && elevationMax !== undefined\n          ? [elevationMin, elevationMax]\n          : null,\n      pickable: parseQueryBoolean(params.get('pick'), false),\n      zOffsetEnabled: parseQueryBoolean(params.get('zoffEnabled'), false),\n      zOffset,\n      terrainEnabled: parseQueryBoolean(params.get('terrain'), false),\n      hiddenClassifications,\n    },\n  };\n}\n","import type { IControl, Map as MapLibreMap } from 'maplibre-gl';\nimport type {\n  LidarControlOptions,\n  LidarState,\n  LidarControlEvent,\n  LidarControlEventHandler,\n  LidarEventData,\n  PointCloudInfo,\n  ColorScheme,\n  CopcLoadingMode,\n  ColormapName,\n  ColorRangeConfig,\n  PointCloudFullMetadata,\n  ElevationProfile,\n  CrossSectionLine,\n} from './types';\nimport type { PickedPointInfo } from '../layers/types';\nimport type { StreamingLoaderOptions, ViewportInfo, StreamingProgressEvent } from '../loaders/streaming-types';\nimport { DeckOverlay } from './DeckOverlay';\nimport { PointCloudLoader } from '../loaders/PointCloudLoader';\nimport { CopcStreamingLoader } from '../loaders/CopcStreamingLoader';\nimport { EptStreamingLoader } from '../loaders/EptStreamingLoader';\nimport { PointCloudManager } from '../layers/PointCloudManager';\nimport { ViewportManager } from './ViewportManager';\nimport { PanelBuilder } from '../gui/PanelBuilder';\nimport { MetadataPanel } from '../gui/MetadataPanel';\nimport { CrossSectionPanel } from '../gui/CrossSectionPanel';\nimport { CrossSectionTool } from '../tools/CrossSectionTool';\nimport { ElevationProfileExtractor } from '../tools/ElevationProfileExtractor';\nimport { generateId, getFilename, computePercentileBounds } from '../utils/helpers';\nimport {\n  createLidarSharePayload,\n  createLidarShareUrl,\n  parseLidarSharePayloadFromUrl,\n} from '../utils/share-url';\nimport { getAvailableClassifications } from '../colorizers/ColorScheme';\n\n/**\n * Default options for the LidarControl\n */\nconst DEFAULT_OPTIONS: Required<Omit<LidarControlOptions, 'pickInfoFields' | 'copcLoadingMode'>> & Pick<LidarControlOptions, 'pickInfoFields' | 'copcLoadingMode'> = {\n  collapsed: true,\n  position: 'top-right',\n  title: 'LiDAR Viewer',\n  panelWidth: 365,\n  maxHeight: 500,\n  theme: 'auto',\n  className: '',\n  pointSize: 2,\n  opacity: 1.0,\n  colorScheme: 'elevation',\n  usePercentile: true,\n  colormap: 'viridis',\n  colorRange: { mode: 'percentile', percentileLow: 2, percentileHigh: 98 },\n  showColorbar: true,\n  pointBudget: 1000000,\n  elevationRange: null,\n  pickable: false,\n  autoZoom: true,\n  pickInfoFields: undefined, // Show all fields by default\n  zOffsetEnabled: false,\n  zOffset: 0,\n  autoZOffset: true, // Automatically calculate Z offset from 2nd percentile\n  copcLoadingMode: undefined, // Auto-detect: 'dynamic' for COPC URLs, 'full' otherwise\n  streamingPointBudget: 5_000_000,\n  streamingMaxConcurrentRequests: 4,\n  streamingViewportDebounceMs: 150,\n  terrainEnabled: false,\n  terrainExaggeration: 1.0,\n  shareUrl: true,\n  restoreFromUrl: true,\n  sampleData: [],\n  sampleDataLabel: 'Load sample data...',\n  closeOnOutsideClick: true,\n};\n\n/**\n * Event handlers map type\n */\ntype EventHandlersMap = globalThis.Map<LidarControlEvent, Set<LidarControlEventHandler>>;\n\n/**\n * A MapLibre GL control for visualizing and styling LiDAR point clouds.\n *\n * @example\n * ```typescript\n * const lidarControl = new LidarControl({\n *   title: 'LiDAR Viewer',\n *   collapsed: true,\n *   pointSize: 2,\n *   colorScheme: 'elevation',\n * });\n * map.addControl(lidarControl, 'top-right');\n *\n * // Load a point cloud\n * await lidarControl.loadPointCloud('https://example.com/pointcloud.laz');\n * ```\n */\nexport class LidarControl implements IControl {\n  private _map?: MapLibreMap;\n  private _mapContainer?: HTMLElement;\n  private _container?: HTMLElement;\n  private _panel?: HTMLElement;\n  private _options: Required<Omit<LidarControlOptions, 'pickInfoFields' | 'copcLoadingMode'>> & Pick<LidarControlOptions, 'pickInfoFields' | 'copcLoadingMode'>;\n  private _state: LidarState;\n  private _eventHandlers: EventHandlersMap = new globalThis.Map();\n\n  // Panel positioning handlers\n  private _resizeHandler: (() => void) | null = null;\n  private _mapResizeHandler: (() => void) | null = null;\n  private _clickOutsideHandler: ((e: MouseEvent) => void) | null = null;\n\n  // User-defined panel size from dragging the resize handle (null = auto)\n  private _userPanelWidth: number | null = null;\n  private _userPanelHeight: number | null = null;\n  private _panelResizeCleanup: (() => void) | null = null;\n  private _maxHeightExplicit = false;\n\n  // Core components\n  private _deckOverlay?: DeckOverlay;\n  private _pointCloudManager?: PointCloudManager;\n  private _loader: PointCloudLoader;\n  private _panelBuilder?: PanelBuilder;\n  private _tooltip?: HTMLElement;\n\n  // Streaming components - Maps to support multiple streaming datasets\n  private _streamingLoaders: Map<string, CopcStreamingLoader> = new Map();\n  private _eptStreamingLoaders: Map<string, EptStreamingLoader> = new Map();\n  private _viewportManagers: Map<string, ViewportManager> = new Map();\n  private _copcViewportRequestIds: Map<string, number> = new Map();\n  private _eptViewportRequestIds: Map<string, number> = new Map();\n  private _eptLastViewport: Map<string, ViewportInfo> = new Map();\n\n  // Track whether the user has explicitly set zOffset (to skip autoZOffset)\n  private _manualZOffset = false;\n\n  // Metadata and cross-section components\n  private _metadataPanel?: MetadataPanel;\n  private _fullMetadata: Map<string, PointCloudFullMetadata> = new Map();\n  private _crossSectionTool?: CrossSectionTool;\n  private _crossSectionPanel?: CrossSectionPanel;\n  private _currentProfile: ElevationProfile | null = null;\n\n  /**\n   * Creates a new LidarControl instance.\n   *\n   * @param options - Configuration options for the control\n   */\n  constructor(options?: Partial<LidarControlOptions>) {\n    this._options = { ...DEFAULT_OPTIONS, ...options };\n    // Track whether the caller explicitly capped the panel height. When they\n    // did not, the panel fills the available vertical space instead.\n    this._maxHeightExplicit = options?.maxHeight !== undefined;\n    // Build default color range from options or use defaults\n    const defaultColorRange: ColorRangeConfig = this._options.colorRange ?? {\n      mode: 'percentile',\n      percentileLow: 2,\n      percentileHigh: 98,\n    };\n    this._state = {\n      collapsed: this._options.collapsed,\n      panelWidth: this._options.panelWidth,\n      maxHeight: this._options.maxHeight,\n      pointClouds: [],\n      activePointCloudId: null,\n      pointSize: this._options.pointSize,\n      opacity: this._options.opacity,\n      colorScheme: this._options.colorScheme,\n      colormap: this._options.colormap ?? 'viridis',\n      colorRange: defaultColorRange,\n      showColorbar: this._options.showColorbar ?? true,\n      usePercentile: this._options.usePercentile,\n      elevationRange: this._options.elevationRange,\n      pointBudget: this._options.pointBudget,\n      pickable: this._options.pickable,\n      loading: false,\n      error: null,\n      pickInfoFields: this._options.pickInfoFields,\n      zOffsetEnabled: this._options.zOffsetEnabled ?? false,\n      zOffset: this._options.zOffset ?? 0,\n      hiddenClassifications: new Set(),\n      availableClassifications: new Set(),\n      terrainEnabled: this._options.terrainEnabled ?? false,\n    };\n    this._loader = new PointCloudLoader();\n\n    // If the user explicitly provided zOffset or zOffsetEnabled, treat as manual\n    if (options?.zOffset !== undefined || options?.zOffsetEnabled !== undefined) {\n      this._manualZOffset = true;\n    }\n  }\n\n  /**\n   * Called when the control is added to the map.\n   * Implements the IControl interface.\n   *\n   * @param map - The MapLibre GL map instance\n   * @returns The control's container element\n   */\n  onAdd(map: MapLibreMap): HTMLElement {\n    this._map = map;\n    this._mapContainer = map.getContainer();\n\n    // Initialize deck.gl overlay\n    this._deckOverlay = new DeckOverlay(map);\n\n    // Initialize point cloud manager\n    this._pointCloudManager = new PointCloudManager(this._deckOverlay, {\n      pointSize: this._state.pointSize,\n      opacity: this._state.opacity,\n      colorScheme: this._state.colorScheme,\n      usePercentile: this._state.usePercentile,\n      elevationRange: this._state.elevationRange,\n      pickable: this._state.pickable,\n      zOffset: this._state.zOffset,\n      onHover: (info) => this._handlePointHover(info),\n    });\n\n    // Apply the color theme (sets a class on <html> so body-level panels\n    // and modals inherit the right CSS variables too).\n    this._applyTheme(this._options.theme);\n\n    // Create tooltip element\n    this._tooltip = this._createTooltip();\n    document.body.appendChild(this._tooltip);\n\n    // Create UI\n    this._container = this._createContainer();\n    this._panel = this._createPanel();\n\n    // Append panel to map container for independent positioning (avoids overlap with other controls)\n    this._mapContainer.appendChild(this._panel);\n\n    // Setup event listeners for panel positioning and click-outside\n    this._setupEventListeners();\n\n    // Set initial panel state\n    if (!this._state.collapsed) {\n      this._panel.classList.add('expanded');\n      // Update position after control is added to DOM\n      requestAnimationFrame(() => {\n        this._updatePanelPosition();\n      });\n    }\n\n    // Apply initial terrain state if enabled in options\n    if (this._state.terrainEnabled) {\n      this.setTerrain(true);\n    }\n\n    if (this._options.restoreFromUrl) {\n      this.restoreFromUrl().catch((err) => {\n        console.warn('Failed to restore LiDAR state from URL:', err);\n      });\n    }\n\n    return this._container;\n  }\n\n  /**\n   * Called when the control is removed from the map.\n   * Implements the IControl interface.\n   */\n  onRemove(): void {\n    // Stop streaming if active\n    this.stopStreaming();\n\n    // Clean up deck.gl overlay\n    this._deckOverlay?.destroy();\n\n    // Remove event listeners\n    if (this._resizeHandler) {\n      window.removeEventListener('resize', this._resizeHandler);\n      this._resizeHandler = null;\n    }\n    if (this._mapResizeHandler && this._map) {\n      this._map.off('resize', this._mapResizeHandler);\n      this._mapResizeHandler = null;\n    }\n    if (this._clickOutsideHandler) {\n      document.removeEventListener('click', this._clickOutsideHandler);\n      this._clickOutsideHandler = null;\n    }\n    if (this._panelResizeCleanup) {\n      this._panelResizeCleanup();\n      this._panelResizeCleanup = null;\n    }\n\n    // Remove the theme override class from the document root.\n    if (typeof document !== 'undefined') {\n      document.documentElement.classList.remove('lidar-theme-light', 'lidar-theme-dark');\n    }\n\n    // Remove tooltip\n    this._tooltip?.parentNode?.removeChild(this._tooltip);\n\n    // Remove panel from map container\n    this._panel?.parentNode?.removeChild(this._panel);\n\n    // Remove button container from control stack\n    this._container?.parentNode?.removeChild(this._container);\n\n    // Clear references\n    this._map = undefined;\n    this._mapContainer = undefined;\n    this._container = undefined;\n    this._panel = undefined;\n    this._deckOverlay = undefined;\n    this._pointCloudManager = undefined;\n    this._panelBuilder = undefined;\n    this._tooltip = undefined;\n    this._eventHandlers.clear();\n  }\n\n  /**\n   * Gets the current state of the control.\n   *\n   * @returns The current LiDAR state\n   */\n  getState(): LidarState {\n    return { ...this._state };\n  }\n\n  /**\n   * Creates a shareable URL that restores URL-loaded point clouds, map camera, and visualization state.\n   *\n   * @returns Shareable URL\n   */\n  getShareUrl(): string {\n    const currentUrl =\n      typeof window !== 'undefined' ? window.location.href : 'http://localhost/';\n    const payload = createLidarSharePayload(\n      this._state,\n      this._getShareMapState(),\n      currentUrl\n    );\n\n    return createLidarShareUrl(currentUrl, payload);\n  }\n\n  /**\n   * Restores point clouds, map camera, and visualization state from a share URL.\n   *\n   * @param url - URL to restore from. Defaults to the current browser URL.\n   * @returns Loaded point cloud info objects\n   */\n  async restoreFromUrl(url?: string): Promise<PointCloudInfo[]> {\n    const restoreUrl =\n      url ?? (typeof window !== 'undefined' ? window.location.href : undefined);\n    if (!restoreUrl) return [];\n\n    const payload = parseLidarSharePayloadFromUrl(restoreUrl);\n    if (!payload) return [];\n\n    const visualization = payload.visualization;\n    this.setPointSize(visualization.pointSize);\n    this.setOpacity(visualization.opacity);\n    this.setColorScheme(visualization.colorScheme);\n    this.setColormap(visualization.colormap);\n    this.setColorRange(visualization.colorRange);\n\n    if (visualization.elevationRange) {\n      this.setElevationRange(\n        visualization.elevationRange[0],\n        visualization.elevationRange[1]\n      );\n    } else {\n      this.clearElevationRange();\n    }\n\n    this.setPickable(visualization.pickable);\n    this.setZOffsetEnabled(visualization.zOffsetEnabled);\n    if (visualization.zOffsetEnabled) {\n      this.setZOffset(visualization.zOffset);\n    }\n    this.setTerrain(visualization.terrainEnabled);\n    this._panelBuilder?.updateState(this._state);\n\n    if (payload.map) {\n      this._applyShareMapState(payload.map);\n    }\n\n    const loadedPointClouds: PointCloudInfo[] = [];\n    const previousAutoZoom = this._options.autoZoom;\n    this._options.autoZoom = false;\n    try {\n      for (const source of payload.pointClouds) {\n        loadedPointClouds.push(await this.loadPointCloud(source));\n      }\n    } finally {\n      this._options.autoZoom = previousAutoZoom;\n    }\n\n    const hiddenClassifications = new Set(visualization.hiddenClassifications);\n    this._pointCloudManager?.setHiddenClassifications(hiddenClassifications);\n    this.setState({ hiddenClassifications });\n    this._emit('stylechange');\n\n    if (payload.map) {\n      this._applyShareMapState(payload.map);\n      if (typeof requestAnimationFrame === 'function') {\n        requestAnimationFrame(() => this._applyShareMapState(payload.map!));\n      }\n      globalThis.setTimeout(() => this._applyShareMapState(payload.map!), 250);\n      globalThis.setTimeout(() => this._applyShareMapState(payload.map!), 1250);\n    }\n\n    return loadedPointClouds;\n  }\n\n  /**\n   * Updates the control state.\n   *\n   * @param newState - Partial state to merge with current state\n   */\n  setState(newState: Partial<LidarState>): void {\n    this._state = { ...this._state, ...newState };\n    this._panelBuilder?.updateState(this._state);\n    if (!this._state.collapsed) {\n      this._updatePanelPosition();\n    }\n    this._emit('statechange');\n  }\n\n  /**\n   * Toggles the collapsed state of the control panel.\n   */\n  toggle(): void {\n    this._state.collapsed = !this._state.collapsed;\n\n    if (this._panel) {\n      if (this._state.collapsed) {\n        this._panel.classList.remove('expanded');\n        this._emit('collapse');\n      } else {\n        this._panel.classList.add('expanded');\n        this._updatePanelPosition();\n        this._emit('expand');\n      }\n    }\n\n    this._emit('statechange');\n  }\n\n  /**\n   * Expands the control panel.\n   */\n  expand(): void {\n    if (this._state.collapsed) {\n      this.toggle();\n    }\n  }\n\n  /**\n   * Collapses the control panel.\n   */\n  collapse(): void {\n    if (!this._state.collapsed) {\n      this.toggle();\n    }\n  }\n\n  /**\n   * Registers an event handler.\n   *\n   * @param event - The event type to listen for\n   * @param handler - The callback function\n   */\n  on(event: LidarControlEvent, handler: LidarControlEventHandler): void {\n    if (!this._eventHandlers.has(event)) {\n      this._eventHandlers.set(event, new Set());\n    }\n    this._eventHandlers.get(event)!.add(handler);\n  }\n\n  /**\n   * Removes an event handler.\n   *\n   * @param event - The event type\n   * @param handler - The callback function to remove\n   */\n  off(event: LidarControlEvent, handler: LidarControlEventHandler): void {\n    this._eventHandlers.get(event)?.delete(handler);\n  }\n\n  /**\n   * Gets the map instance.\n   *\n   * @returns The MapLibre GL map instance or undefined if not added to a map\n   */\n  getMap(): MapLibreMap | undefined {\n    return this._map;\n  }\n\n  /**\n   * Gets the control container element.\n   *\n   * @returns The container element or undefined if not added to a map\n   */\n  getContainer(): HTMLElement | undefined {\n    return this._container;\n  }\n\n  /**\n   * Gets the deck.gl overlay instance.\n   *\n   * @returns The DeckOverlay or undefined if not added to a map\n   */\n  getDeckOverlay(): DeckOverlay | undefined {\n    return this._deckOverlay;\n  }\n\n  // ==================== LiDAR API ====================\n\n  /**\n   * Loads a point cloud from a URL, File, or ArrayBuffer.\n   * For COPC files loaded from URL, defaults to dynamic streaming mode.\n   * Non-COPC files or local files use full download mode.\n   *\n   * @param source - URL string, File object, or ArrayBuffer\n   * @param options - Optional loading options including loadingMode override\n   * @returns Promise resolving to the point cloud info\n   */\n  async loadPointCloud(\n    source: string | File | ArrayBuffer,\n    options?: { loadingMode?: CopcLoadingMode }\n  ): Promise<PointCloudInfo> {\n    // Check if this is an EPT dataset (URL ending with ept.json)\n    const isEptUrl =\n      typeof source === 'string' &&\n      (source.endsWith('/ept.json') || source.includes('/ept.json?'));\n\n    // Route EPT URLs to EPT streaming loader\n    if (isEptUrl) {\n      return this.loadPointCloudEptStreaming(source as string);\n    }\n\n    // Check if this is a COPC file\n    const isCopcUrl =\n      typeof source === 'string' &&\n      (source.startsWith('http://') || source.startsWith('https://')) &&\n      /\\.copc\\./i.test(source);\n\n    const isCopcFile =\n      source instanceof File && /\\.copc\\./i.test(source.name);\n\n    const isCopc = isCopcUrl || isCopcFile;\n\n    // Determine loading mode:\n    // - If explicitly specified in options, use that\n    // - If set in control options, use that\n    // - For COPC (URL or local file), default to 'dynamic'\n    // - Otherwise default to 'full'\n    const mode =\n      options?.loadingMode ??\n      this._options.copcLoadingMode ??\n      (isCopc ? 'dynamic' : 'full');\n\n    // Use streaming mode for COPC sources with dynamic mode\n    if (mode === 'dynamic' && isCopc) {\n      return this.loadPointCloudStreaming(source);\n    }\n\n    const id = generateId('pc');\n\n    // Determine name\n    let name: string;\n    if (typeof source === 'string') {\n      name = getFilename(source);\n    } else if (source instanceof File) {\n      name = source.name;\n    } else {\n      name = `PointCloud ${id}`;\n    }\n\n    // Update state\n    this.setState({ loading: true, error: null });\n    this._emit('loadstart');\n\n    // Progress callback to update the UI\n    const onProgress = (progress: number, message: string) => {\n      this._panelBuilder?.updateLoadingProgress(progress, message);\n    };\n\n    try {\n      // Load the point cloud with progress reporting\n      const data = await this._loader.load(source, onProgress);\n\n      // Report final progress\n      onProgress(95, 'Creating visualization layers...');\n\n      // Add to manager\n      this._pointCloudManager?.addPointCloud(id, data);\n\n      // Auto Z offset: calculate and apply based on 2nd percentile of elevation\n      let zOffsetBase: number | undefined;\n      let zOffset: number | undefined;\n      let zOffsetEnabled = this._state.zOffsetEnabled;\n\n      if (this._options.autoZOffset && !this._manualZOffset && data.positions && data.pointCount > 0) {\n        // Extract Z values and compute 2nd percentile (same as used for elevation coloring)\n        const zValues = new Float32Array(data.pointCount);\n        for (let i = 0; i < data.pointCount; i++) {\n          zValues[i] = data.positions[i * 3 + 2] ?? 0;\n        }\n        const percentileBounds = computePercentileBounds(zValues, 2, 98);\n        zOffsetBase = percentileBounds.min; // 2% percentile value (ground level)\n        // Apply negative offset to convert absolute elevation to relative height above ground\n        zOffset = -zOffsetBase;\n        zOffsetEnabled = true;\n        this._pointCloudManager?.setZOffset(zOffset);\n        console.log(`Auto Z offset applied: zOffsetBase=${zOffsetBase.toFixed(1)}, zOffset=${zOffset.toFixed(1)}, enabled=${zOffsetEnabled}`);\n      } else if (this._manualZOffset) {\n        // User explicitly set zOffset — apply it now that the point cloud is loaded\n        this._pointCloudManager?.setZOffset(this._state.zOffset);\n        zOffset = this._state.zOffset;\n        zOffsetEnabled = this._state.zOffsetEnabled;\n        console.log(`Manual Z offset applied: zOffset=${zOffset}, enabled=${zOffsetEnabled}`);\n      } else {\n        console.log('Auto Z offset skipped - conditions not met');\n      }\n\n      onProgress(100, 'Complete!');\n\n      // Create info object\n      const info: PointCloudInfo = {\n        id,\n        name,\n        pointCount: data.pointCount,\n        bounds: data.bounds,\n        hasRGB: data.hasRGB,\n        hasIntensity: data.hasIntensity,\n        hasClassification: data.hasClassification,\n        source: typeof source === 'string' ? source : 'file',\n        wkt: data.wkt,\n      };\n\n      // Extract available classifications and merge with existing\n      const newClassifications = getAvailableClassifications(data);\n      const mergedClassifications = new Set([\n        ...this._state.availableClassifications,\n        ...newClassifications,\n      ]);\n\n      // Update state (include z-offset values to trigger panel update)\n      const pointClouds = [...this._state.pointClouds, info];\n      this.setState({\n        loading: false,\n        pointClouds,\n        activePointCloudId: id,\n        availableClassifications: mergedClassifications,\n        zOffsetBase,\n        zOffset: zOffset ?? this._state.zOffset,\n        zOffsetEnabled,\n      });\n\n      // Update computed color bounds for colorbar display\n      this._updateComputedColorBounds();\n      this._panelBuilder?.updateState(this._state);\n\n      // Emit load event\n      this._emitWithData('load', { pointCloud: info });\n\n      // Auto-zoom to the loaded point cloud\n      if (this._options.autoZoom) {\n        this.flyToPointCloud(id);\n      }\n\n      return info;\n    } catch (err) {\n      const error = err instanceof Error ? err : new Error(String(err));\n\n      // Check if this is a CORS error and source is a URL - fallback to download\n      const isCorsError =\n        error.message.includes('CORS') ||\n        error.message === 'Failed to fetch' ||\n        (err instanceof TypeError && error.message === 'Failed to fetch');\n\n      const isUrl =\n        typeof source === 'string' &&\n        (source.startsWith('http://') || source.startsWith('https://'));\n\n      if (isCorsError && isUrl) {\n        console.warn(\n          `CORS error detected for ${source}. Falling back to download mode...`\n        );\n\n        this._panelBuilder?.updateLoadingProgress(5, 'CORS blocked - downloading file...');\n\n        // Fallback to full download\n        return this._loadPointCloudFullDownload(source);\n      }\n\n      this.setState({\n        loading: false,\n        error: `Failed to load: ${error.message}`,\n      });\n      this._emitWithData('loaderror', { error });\n      throw error;\n    }\n  }\n\n  /**\n   * Unloads a point cloud.\n   *\n   * @param id - ID of the point cloud to unload (or undefined to unload all)\n   */\n  unloadPointCloud(id?: string): void {\n    if (id) {\n      // Check if this is a streaming point cloud (COPC or EPT)\n      if (this._streamingLoaders.has(id) || this._eptStreamingLoaders.has(id)) {\n        this.stopStreaming(id);\n        return;\n      }\n\n      this._pointCloudManager?.removePointCloud(id);\n      const pointClouds = this._state.pointClouds.filter((pc) => pc.id !== id);\n\n      // Reset classification state when removing datasets\n      // (classifications will be re-extracted when new data is loaded)\n      const stateUpdate: Partial<LidarState> = {\n        pointClouds,\n        activePointCloudId:\n          this._state.activePointCloudId === id\n            ? pointClouds[0]?.id || null\n            : this._state.activePointCloudId,\n        availableClassifications: new Set(),\n        hiddenClassifications: new Set(),\n      };\n\n      this.setState(stateUpdate);\n      this._emitWithData('unload', { pointCloud: { id } });\n    } else {\n      // Unload all including streaming\n      // Emit unload events for each point cloud before clearing\n      const allIds = this._state.pointClouds.map((pc) => pc.id);\n      this.stopStreaming();\n      this._pointCloudManager?.clear();\n      this.setState({\n        pointClouds: [],\n        activePointCloudId: null,\n        availableClassifications: new Set(),\n        hiddenClassifications: new Set(),\n      });\n      // Emit unload event for each removed point cloud\n      for (const removedId of allIds) {\n        this._emitWithData('unload', { pointCloud: { id: removedId } });\n      }\n    }\n  }\n\n  /**\n   * Loads a point cloud using streaming (on-demand) loading.\n   * Ideal for large COPC files - supports both URLs and local files.\n   * Points are loaded dynamically based on viewport and zoom level.\n   *\n   * @param source - URL string, File object, or ArrayBuffer\n   * @param options - Optional streaming options\n   * @returns Promise resolving to initial point cloud info\n   */\n  async loadPointCloudStreaming(\n    source: string | File | ArrayBuffer,\n    options?: StreamingLoaderOptions\n  ): Promise<PointCloudInfo> {\n    const id = generateId('pc-stream');\n\n    // Determine name based on source type\n    let name: string;\n    if (typeof source === 'string') {\n      name = getFilename(source);\n    } else if (source instanceof File) {\n      name = source.name;\n    } else {\n      name = `PointCloud ${id}`;\n    }\n\n    this.setState({ loading: true, error: null, streamingActive: true });\n    this._emit('loadstart');\n    this._emit('streamingstart');\n\n    try {\n      // Create streaming loader with options\n      const streamingLoader = new CopcStreamingLoader(source, {\n        pointBudget: options?.pointBudget ?? this._options.streamingPointBudget,\n        maxConcurrentRequests:\n          options?.maxConcurrentRequests ?? this._options.streamingMaxConcurrentRequests,\n        viewportDebounceMs:\n          options?.viewportDebounceMs ?? this._options.streamingViewportDebounceMs,\n        minDetailZoom: options?.minDetailZoom ?? 10,\n        maxOctreeDepth: options?.maxOctreeDepth ?? 20,\n      });\n\n      // Initialize - reads header and root hierarchy\n      this._panelBuilder?.updateLoadingProgress(10, 'Initializing COPC file...');\n      const { bounds, totalPoints, hasRGB, spacing } =\n        await streamingLoader.initialize();\n\n      this._panelBuilder?.updateLoadingProgress(20, 'Setting up streaming...');\n\n      // Track if auto Z offset has been applied for this streaming dataset\n      let autoZOffsetApplied = false;\n\n      // Setup callback for when points are loaded\n      streamingLoader.setOnPointsLoaded((data) => {\n        this._pointCloudManager?.updatePointCloud(id, data);\n\n        // Auto Z offset: use bounds.minZ from the COPC header (reliable source)\n        if (this._options.autoZOffset && !this._manualZOffset && !autoZOffsetApplied && data.bounds) {\n          // Use bounds.minZ as the ground level (from file header, always accurate)\n          const zOffsetBase = data.bounds.minZ;\n\n          // Apply negative offset to convert absolute elevation to relative height above ground\n          const zOffset = -zOffsetBase;\n          this._pointCloudManager?.setZOffset(zOffset);\n          console.log(`Auto Z offset applied (streaming): ${zOffset.toFixed(1)}m (ground level from bounds: ${zOffsetBase.toFixed(1)}m)`);\n          // Update state to trigger panel slider update\n          this.setState({\n            zOffsetBase,\n            zOffset,\n            zOffsetEnabled: true,\n          });\n          autoZOffsetApplied = true;\n        } else if (this._manualZOffset && !autoZOffsetApplied) {\n          this._pointCloudManager?.setZOffset(this._state.zOffset);\n          autoZOffsetApplied = true;\n        }\n\n        // Extract and merge classifications from streamed data\n        const newClassifications = getAvailableClassifications(data);\n        if (newClassifications.size > 0) {\n          const mergedClassifications = new Set([\n            ...this._state.availableClassifications,\n            ...newClassifications,\n          ]);\n          // Only update if we have new classifications\n          if (mergedClassifications.size > this._state.availableClassifications.size) {\n            this.setState({ availableClassifications: mergedClassifications });\n          }\n        }\n      });\n\n      // Setup event handlers\n      streamingLoader.on('progress', (_, data) => {\n        const progress = data as StreamingProgressEvent;\n        this.setState({\n          streamingProgress: {\n            loadedNodes: progress.loadedNodes,\n            loadedPoints: progress.loadedPoints,\n            queueSize: progress.queueSize,\n            isLoading: progress.isLoading,\n          },\n        });\n\n        const percent = Math.min(\n          99,\n          20 + Math.round((progress.loadedPoints / progress.pointBudget) * 70)\n        );\n        this._panelBuilder?.updateLoadingProgress(\n          percent,\n          `Streaming: ${progress.loadedPoints.toLocaleString()} points loaded`\n        );\n\n        this._emit('streamingprogress');\n      });\n\n      streamingLoader.on('budgetreached', () => {\n        this._emit('budgetreached');\n      });\n\n      // Store the streaming loader\n      this._streamingLoaders.set(id, streamingLoader);\n\n      // Create viewport manager for this dataset\n      const viewportManager = new ViewportManager(\n        this._map!,\n        (viewport) => this._handleViewportChangeForStreaming(viewport, id),\n        {\n          debounceMs:\n            options?.viewportDebounceMs ?? this._options.streamingViewportDebounceMs,\n          minDetailZoom: options?.minDetailZoom ?? 10,\n          maxOctreeDepth: options?.maxOctreeDepth ?? 20,\n          spacing,\n        }\n      );\n\n      // Store the viewport manager\n      this._viewportManagers.set(id, viewportManager);\n\n      // Create initial point cloud info\n      const info: PointCloudInfo = {\n        id,\n        name: `${name}`,\n        pointCount: totalPoints,\n        bounds,\n        hasRGB,\n        hasIntensity: true,\n        hasClassification: true,\n        source: typeof source === 'string' ? source : name,\n        wkt: undefined, // Will be available after first load\n      };\n\n      // Update state\n      const pointClouds = [...this._state.pointClouds, info];\n      this.setState({\n        loading: false,\n        pointClouds,\n        activePointCloudId: id,\n      });\n\n      // Update computed color bounds for colorbar display\n      this._updateComputedColorBounds();\n      this._panelBuilder?.updateState(this._state);\n\n      // Start viewport-based loading\n      viewportManager.start();\n\n      // Auto-zoom if enabled\n      if (this._options.autoZoom) {\n        // Validate and clamp bounds to valid WGS84 range before calling fitBounds\n        const clampedMinY = Math.max(-90, Math.min(90, bounds.minY));\n        const clampedMaxY = Math.max(-90, Math.min(90, bounds.maxY));\n        const clampedMinX = Math.max(-180, Math.min(180, bounds.minX));\n        const clampedMaxX = Math.max(-180, Math.min(180, bounds.maxX));\n\n        // First fly to bounds\n        this._map?.fitBounds(\n          [\n            [clampedMinX, clampedMinY],\n            [clampedMaxX, clampedMaxY],\n          ],\n          {\n            padding: 50,\n            duration: 1000,\n          }\n        );\n\n        // Wait for fly animation then trigger viewport update\n        setTimeout(() => {\n          viewportManager.forceUpdate();\n        }, 1100);\n      }\n\n      this._emitWithData('load', { pointCloud: info });\n\n      return info;\n    } catch (err) {\n      const error = err instanceof Error ? err : new Error(String(err));\n\n      // Check if this is a CORS error - fallback to downloading the file (only for URL sources)\n      const isCorsError =\n        error.message.includes('CORS') ||\n        error.message === 'Failed to fetch' ||\n        (err instanceof TypeError && error.message === 'Failed to fetch');\n\n      if (isCorsError && typeof source === 'string') {\n        console.warn(\n          `CORS error detected for ${source}. Falling back to download mode...`\n        );\n\n        // Clean up streaming state for this dataset\n        const streamingLoader = this._streamingLoaders.get(id);\n        if (streamingLoader) {\n          streamingLoader.destroy();\n          this._streamingLoaders.delete(id);\n        }\n        this._copcViewportRequestIds.delete(id);\n        const viewportManager = this._viewportManagers.get(id);\n        if (viewportManager) {\n          viewportManager.destroy();\n          this._viewportManagers.delete(id);\n        }\n\n        // Update streamingActive state based on remaining loaders\n        const hasActiveStreaming = this._streamingLoaders.size > 0;\n\n        // Reset state and try downloading\n        this.setState({\n          loading: true,\n          streamingActive: hasActiveStreaming,\n          error: null,\n        });\n\n        this._panelBuilder?.updateLoadingProgress(5, 'CORS blocked - downloading file...');\n\n        // Fallback to full download\n        return this._loadPointCloudFullDownload(source);\n      }\n\n      this.setState({\n        loading: false,\n        streamingActive: false,\n        error: `Failed to load: ${error.message}`,\n      });\n      const streamingLoader = this._streamingLoaders.get(id);\n      if (streamingLoader) {\n        streamingLoader.destroy();\n        this._streamingLoaders.delete(id);\n      }\n      this._copcViewportRequestIds.delete(id);\n      this._emitWithData('loaderror', { error });\n      throw error;\n    }\n  }\n\n  /**\n   * Loads an EPT (Entwine Point Tile) dataset using streaming (on-demand) loading.\n   * Points are loaded dynamically based on viewport and zoom level.\n   *\n   * @param eptUrl - URL to ept.json file\n   * @param options - Optional streaming options\n   * @returns Promise resolving to initial point cloud info\n   */\n  async loadPointCloudEptStreaming(\n    eptUrl: string,\n    options?: StreamingLoaderOptions\n  ): Promise<PointCloudInfo> {\n    const id = generateId('ept-stream');\n    const name = getFilename(eptUrl.replace('/ept.json', ''));\n\n    this.setState({ loading: true, error: null, streamingActive: true });\n    this._emit('loadstart');\n    this._emit('streamingstart');\n\n    try {\n      // Create EPT streaming loader\n      const eptLoader = new EptStreamingLoader(eptUrl, {\n        pointBudget: options?.pointBudget ?? this._options.streamingPointBudget,\n        maxConcurrentRequests:\n          options?.maxConcurrentRequests ?? this._options.streamingMaxConcurrentRequests,\n        viewportDebounceMs:\n          options?.viewportDebounceMs ?? this._options.streamingViewportDebounceMs,\n        minDetailZoom: options?.minDetailZoom ?? 10,\n        maxOctreeDepth: options?.maxOctreeDepth ?? 20,\n      });\n\n      // Initialize - reads ept.json metadata\n      this._panelBuilder?.updateLoadingProgress(10, 'Initializing EPT dataset...');\n      const { bounds, totalPoints, hasRGB, spacing } = await eptLoader.initialize();\n\n      this._panelBuilder?.updateLoadingProgress(20, 'Setting up streaming...');\n\n      // Track if auto Z offset has been applied\n      let autoZOffsetApplied = false;\n\n      // Setup callback for when points are loaded\n      eptLoader.setOnPointsLoaded((data) => {\n        this._pointCloudManager?.updatePointCloud(id, data);\n\n        // Auto Z offset\n        if (this._options.autoZOffset && !this._manualZOffset && !autoZOffsetApplied && data.bounds) {\n          const zOffsetBase = data.bounds.minZ;\n          const zOffset = -zOffsetBase;\n          this._pointCloudManager?.setZOffset(zOffset);\n          console.log(`Auto Z offset applied (EPT streaming): ${zOffset.toFixed(1)}m`);\n          this.setState({\n            zOffsetBase,\n            zOffset,\n            zOffsetEnabled: true,\n          });\n          autoZOffsetApplied = true;\n        } else if (this._manualZOffset && !autoZOffsetApplied) {\n          this._pointCloudManager?.setZOffset(this._state.zOffset);\n          autoZOffsetApplied = true;\n        }\n\n        // Extract and merge classifications\n        const newClassifications = getAvailableClassifications(data);\n        if (newClassifications.size > 0) {\n          const mergedClassifications = new Set([\n            ...this._state.availableClassifications,\n            ...newClassifications,\n          ]);\n          if (mergedClassifications.size > this._state.availableClassifications.size) {\n            this.setState({ availableClassifications: mergedClassifications });\n          }\n        }\n      });\n\n      // Setup event handlers\n      eptLoader.on('progress', (_, data) => {\n        const progress = data as StreamingProgressEvent;\n        this.setState({\n          streamingProgress: {\n            loadedNodes: progress.loadedNodes,\n            loadedPoints: progress.loadedPoints,\n            queueSize: progress.queueSize,\n            isLoading: progress.isLoading,\n          },\n        });\n\n        const percent = Math.min(\n          99,\n          20 + Math.round((progress.loadedPoints / progress.pointBudget) * 70)\n        );\n        this._panelBuilder?.updateLoadingProgress(\n          percent,\n          `Streaming EPT: ${progress.loadedPoints.toLocaleString()} points loaded`\n        );\n\n        this._emit('streamingprogress');\n      });\n\n      eptLoader.on('budgetreached', () => {\n        this._emit('budgetreached');\n      });\n\n      // Store the EPT loader\n      this._eptStreamingLoaders.set(id, eptLoader);\n\n      // Create viewport manager for this dataset\n      const viewportManager = new ViewportManager(\n        this._map!,\n        (viewport) => this._handleViewportChangeForEptStreaming(viewport, id),\n        {\n          debounceMs:\n            options?.viewportDebounceMs ?? this._options.streamingViewportDebounceMs,\n          minDetailZoom: options?.minDetailZoom ?? 10,\n          maxOctreeDepth: options?.maxOctreeDepth ?? 20,\n          spacing,\n        }\n      );\n\n      this._viewportManagers.set(id, viewportManager);\n\n      // Get metadata for WKT\n      const metadata = eptLoader.getMetadata();\n\n      // Create initial point cloud info\n      const info: PointCloudInfo = {\n        id,\n        name: `${name} (EPT)`,\n        pointCount: totalPoints,\n        bounds,\n        hasRGB,\n        hasIntensity: true,\n        hasClassification: true,\n        source: eptUrl,\n        wkt: metadata?.srs?.wkt,\n      };\n\n      // Update state\n      const pointClouds = [...this._state.pointClouds, info];\n      this.setState({\n        loading: false,\n        pointClouds,\n        activePointCloudId: id,\n      });\n\n      // Update computed color bounds for colorbar display\n      this._updateComputedColorBounds();\n      this._panelBuilder?.updateState(this._state);\n\n      // Start viewport-based loading\n      viewportManager.start();\n\n      // Auto-zoom if enabled\n      if (this._options.autoZoom) {\n        // Validate and clamp bounds to valid WGS84 range before calling fitBounds\n        const clampedMinY = Math.max(-90, Math.min(90, bounds.minY));\n        const clampedMaxY = Math.max(-90, Math.min(90, bounds.maxY));\n        const clampedMinX = Math.max(-180, Math.min(180, bounds.minX));\n        const clampedMaxX = Math.max(-180, Math.min(180, bounds.maxX));\n\n        this._map?.fitBounds(\n          [\n            [clampedMinX, clampedMinY],\n            [clampedMaxX, clampedMaxY],\n          ],\n          {\n            padding: 50,\n            duration: 1000,\n          }\n        );\n\n        setTimeout(() => {\n          viewportManager.forceUpdate();\n        }, 1100);\n      }\n\n      this._emitWithData('load', { pointCloud: info });\n\n      return info;\n    } catch (err) {\n      const error = err instanceof Error ? err : new Error(String(err));\n\n      // Clean up on error\n      const eptLoader = this._eptStreamingLoaders.get(id);\n      if (eptLoader) {\n        eptLoader.destroy();\n        this._eptStreamingLoaders.delete(id);\n      }\n      this._eptViewportRequestIds.delete(id);\n      this._eptLastViewport.delete(id);\n      const viewportManager = this._viewportManagers.get(id);\n      if (viewportManager) {\n        viewportManager.destroy();\n        this._viewportManagers.delete(id);\n      }\n\n      const hasActiveStreaming = this._streamingLoaders.size > 0 || this._eptStreamingLoaders.size > 0;\n\n      this.setState({\n        loading: false,\n        streamingActive: hasActiveStreaming,\n        error: `Failed to load EPT: ${error.message}`,\n      });\n      this._emitWithData('loaderror', { error });\n      throw error;\n    }\n  }\n\n  /**\n   * Handles viewport changes for EPT streaming mode.\n   *\n   * @param viewport - Current viewport information\n   * @param datasetId - ID of the EPT dataset\n   */\n  private _shouldResetEptForViewportChange(\n    previous: ViewportInfo | undefined,\n    current: ViewportInfo\n  ): boolean {\n    if (!previous) return false;\n\n    const [prevWest, prevSouth, prevEast, prevNorth] = previous.bounds;\n    const [curWest, curSouth, curEast, curNorth] = current.bounds;\n\n    const intersects = !(\n      curEast < prevWest ||\n      curWest > prevEast ||\n      curNorth < prevSouth ||\n      curSouth > prevNorth\n    );\n\n    // Reset if viewports don't intersect at all\n    if (!intersects) return true;\n\n    const prevWidth = prevEast - prevWest;\n    const prevHeight = prevNorth - prevSouth;\n    const dx = current.center[0] - previous.center[0];\n    const dy = current.center[1] - previous.center[1];\n    const centerDistance = Math.sqrt(dx * dx + dy * dy);\n\n    // Reset if center moved more than 30% of viewport dimension\n    const threshold = Math.max(prevWidth, prevHeight) * 0.3;\n\n    return centerDistance > threshold;\n  }\n\n  private async _handleViewportChangeForEptStreaming(\n    viewport: ViewportInfo,\n    datasetId: string,\n    requestId?: number\n  ): Promise<void> {\n    const eptLoader = this._eptStreamingLoaders.get(datasetId);\n    if (!eptLoader) return;\n\n    try {\n      const currentRequestId = requestId ?? (this._eptViewportRequestIds.get(datasetId) ?? 0) + 1;\n      if (requestId === undefined) {\n        this._eptViewportRequestIds.set(datasetId, currentRequestId);\n      }\n\n      if (this._eptViewportRequestIds.get(datasetId) !== currentRequestId) return;\n\n      const previousViewport = this._eptLastViewport.get(datasetId);\n      const shouldResetForMove = this._shouldResetEptForViewportChange(previousViewport, viewport);\n      this._eptLastViewport.set(datasetId, viewport);\n\n      eptLoader.pruneQueueForViewport(viewport);\n\n      if (shouldResetForMove) {\n        const resetSucceeded = eptLoader.resetLoadedData();\n        if (!resetSucceeded) {\n          setTimeout(() => {\n            this._handleViewportChangeForEptStreaming(viewport, datasetId, currentRequestId);\n          }, 200);\n          return;\n        }\n      }\n\n      let nodesToLoad = await eptLoader.selectNodesForViewport(viewport);\n\n      let resetSucceeded = false;\n      const loadedPoints = eptLoader.getLoadedPointCount();\n      const pointBudget = eptLoader.getPointBudget();\n      const budgetReached = loadedPoints >= pointBudget * 0.8; // 80% threshold\n      const minDepthForCoverage = Math.max(0, viewport.targetDepth - 2);\n\n      // Check coverage ratio - if less than 50% is covered, we need to load more\n      const coverageRatio = eptLoader.getViewportCoverageRatio(viewport, minDepthForCoverage);\n      const needsCoverage = coverageRatio < 0.5;\n\n      const hasPendingSubtrees = eptLoader.hasPendingSubtrees(viewport);\n      const hasPendingWork = nodesToLoad.length > 0 || hasPendingSubtrees;\n\n      // Reset if budget is reached but we need more coverage in current viewport\n      if (budgetReached && needsCoverage && hasPendingWork) {\n        resetSucceeded = eptLoader.resetLoadedData();\n        if (resetSucceeded) {\n          nodesToLoad = await eptLoader.selectNodesForViewport(viewport);\n        }\n      }\n\n      // Also check if we have very low coverage but some budget left -\n      // this means we haven't loaded this area's subtrees yet\n      if (!budgetReached && coverageRatio < 0.1 && nodesToLoad.length === 0) {\n        // Force another subtree discovery pass\n        nodesToLoad = await eptLoader.selectNodesForViewport(viewport);\n      }\n\n      for (const node of nodesToLoad) {\n        eptLoader.queueNode(node);\n      }\n\n      await eptLoader.loadQueuedNodes();\n\n      if (this._eptViewportRequestIds.get(datasetId) !== currentRequestId) return;\n\n      // Only retry if we need more coverage AND there's pending work\n      // Don't retry if coverage is already good (>= 50%)\n      if (budgetReached && needsCoverage && nodesToLoad.length > 0 && !resetSucceeded) {\n        setTimeout(() => {\n          this._handleViewportChangeForEptStreaming(viewport, datasetId, currentRequestId);\n        }, 200);\n        return;\n      }\n\n      // Continue loading subtrees if there are pending ones\n      if (hasPendingSubtrees) {\n        setTimeout(() => {\n          this._handleViewportChangeForEptStreaming(viewport, datasetId, currentRequestId);\n        }, 100);\n      }\n    } catch (err) {\n      console.warn('Failed to load EPT nodes for viewport:', err);\n    }\n  }\n\n  /**\n   * Downloads a file from URL and loads it fully.\n   * Used as fallback when streaming fails due to CORS.\n   */\n  private async _loadPointCloudFullDownload(url: string): Promise<PointCloudInfo> {\n    const id = generateId('pc');\n    const name = getFilename(url);\n\n    try {\n      this._panelBuilder?.updateLoadingProgress(10, 'Downloading file...');\n\n      // Download the entire file\n      const response = await fetch(url);\n      if (!response.ok) {\n        throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n      }\n\n      const contentLength = response.headers.get('content-length');\n      const total = contentLength ? parseInt(contentLength, 10) : 0;\n\n      // Stream download with progress\n      const reader = response.body?.getReader();\n      if (!reader) {\n        throw new Error('Failed to get response reader');\n      }\n\n      const chunks: Uint8Array[] = [];\n      let received = 0;\n\n      while (true) {\n        const { done, value } = await reader.read();\n        if (done) break;\n\n        chunks.push(value);\n        received += value.length;\n\n        if (total > 0) {\n          const percent = Math.round((received / total) * 50); // 0-50% for download\n          this._panelBuilder?.updateLoadingProgress(\n            10 + percent,\n            `Downloading: ${(received / 1024 / 1024).toFixed(1)} MB`\n          );\n        }\n      }\n\n      // Combine chunks into ArrayBuffer\n      const buffer = new Uint8Array(received);\n      let offset = 0;\n      for (const chunk of chunks) {\n        buffer.set(chunk, offset);\n        offset += chunk.length;\n      }\n\n      this._panelBuilder?.updateLoadingProgress(60, 'Processing point cloud...');\n\n      // Load from buffer using the standard loader\n      const onProgress = (progress: number, message: string) => {\n        // Map 0-100 to 60-100\n        const mappedProgress = 60 + (progress * 0.4);\n        this._panelBuilder?.updateLoadingProgress(mappedProgress, message);\n      };\n\n      const data = await this._loader.load(buffer.buffer, onProgress);\n\n      this._panelBuilder?.updateLoadingProgress(95, 'Creating visualization layers...');\n\n      // Add to manager\n      this._pointCloudManager?.addPointCloud(id, data);\n\n      // Auto Z offset: calculate and apply based on 2nd percentile of elevation\n      let zOffsetBase: number | undefined;\n      let zOffset: number | undefined;\n      let zOffsetEnabled = this._state.zOffsetEnabled;\n\n      if (this._options.autoZOffset && !this._manualZOffset && data.positions && data.pointCount > 0) {\n        const zValues = new Float32Array(data.pointCount);\n        for (let i = 0; i < data.pointCount; i++) {\n          zValues[i] = data.positions[i * 3 + 2] ?? 0;\n        }\n        const percentileBounds = computePercentileBounds(zValues, 2, 98);\n        zOffsetBase = percentileBounds.min; // 2% percentile value (ground level)\n        // Apply negative offset to convert absolute elevation to relative height above ground\n        zOffset = -zOffsetBase;\n        zOffsetEnabled = true;\n        this._pointCloudManager?.setZOffset(zOffset);\n        console.log(`Auto Z offset applied (download): ${zOffset.toFixed(1)}m (ground level: ${zOffsetBase.toFixed(1)}m)`);\n      } else if (this._manualZOffset) {\n        this._pointCloudManager?.setZOffset(this._state.zOffset);\n        zOffset = this._state.zOffset;\n        zOffsetEnabled = this._state.zOffsetEnabled;\n      }\n\n      this._panelBuilder?.updateLoadingProgress(100, 'Complete!');\n\n      // Create info object\n      const info: PointCloudInfo = {\n        id,\n        name,\n        pointCount: data.pointCount,\n        bounds: data.bounds,\n        hasRGB: data.hasRGB,\n        hasIntensity: data.hasIntensity,\n        hasClassification: data.hasClassification,\n        source: url,\n        wkt: data.wkt,\n      };\n\n      // Extract available classifications and merge with existing\n      const newClassifications = getAvailableClassifications(data);\n      const mergedClassifications = new Set([\n        ...this._state.availableClassifications,\n        ...newClassifications,\n      ]);\n\n      // Update state (include z-offset values to trigger panel update)\n      const pointClouds = [...this._state.pointClouds, info];\n      this.setState({\n        loading: false,\n        pointClouds,\n        activePointCloudId: id,\n        availableClassifications: mergedClassifications,\n        zOffsetBase,\n        zOffset: zOffset ?? this._state.zOffset,\n        zOffsetEnabled,\n      });\n\n      // Update computed color bounds for colorbar display\n      this._updateComputedColorBounds();\n      this._panelBuilder?.updateState(this._state);\n\n      this._emitWithData('load', { pointCloud: info });\n\n      // Auto-zoom\n      if (this._options.autoZoom) {\n        this.flyToPointCloud(id);\n      }\n\n      return info;\n    } catch (err) {\n      const error = err instanceof Error ? err : new Error(String(err));\n\n      // Check if this is also a CORS error\n      const isCorsError =\n        error.message.includes('CORS') ||\n        error.message === 'Failed to fetch' ||\n        (err instanceof TypeError && error.message === 'Failed to fetch');\n\n      let errorMessage: string;\n      if (isCorsError) {\n        const hostname = new URL(url).hostname;\n        errorMessage =\n          `Cannot load from \"${hostname}\" - server blocks cross-origin requests (CORS). ` +\n          `Please download the file manually and load it using the file picker above.`;\n      } else {\n        errorMessage = `Failed to download: ${error.message}`;\n      }\n\n      this.setState({\n        loading: false,\n        error: errorMessage,\n      });\n      this._emitWithData('loaderror', { error: new Error(errorMessage) });\n      throw new Error(errorMessage);\n    }\n  }\n\n  /**\n   * Handles viewport changes for streaming mode.\n   * Selects and loads nodes based on current viewport.\n   *\n   * @param viewport - Current viewport information\n   * @param datasetId - ID of the dataset to load nodes for\n   */\n  private async _handleViewportChangeForStreaming(\n    viewport: ViewportInfo,\n    datasetId: string,\n    requestId?: number\n  ): Promise<void> {\n    const streamingLoader = this._streamingLoaders.get(datasetId);\n    if (!streamingLoader) return;\n\n    try {\n      const currentRequestId = requestId ?? (this._copcViewportRequestIds.get(datasetId) ?? 0) + 1;\n      if (requestId === undefined) {\n        this._copcViewportRequestIds.set(datasetId, currentRequestId);\n      }\n\n      if (this._copcViewportRequestIds.get(datasetId) !== currentRequestId) return;\n\n      streamingLoader.pruneQueueForViewport(viewport);\n\n      const evictSucceeded = streamingLoader.evictLoadedNodesOutsideViewport(viewport);\n      if (!evictSucceeded) {\n        setTimeout(() => {\n          this._handleViewportChangeForStreaming(viewport, datasetId, currentRequestId);\n        }, 200);\n        return;\n      }\n\n      let nodesToLoad = await streamingLoader.selectNodesForViewport(viewport);\n\n      if (this._copcViewportRequestIds.get(datasetId) !== currentRequestId) return;\n\n      let resetSucceeded = false;\n      const loadedPoints = streamingLoader.getLoadedPointCount();\n      const pointBudget = streamingLoader.getPointBudget();\n      const budgetReached = loadedPoints >= pointBudget * 0.8;\n      const minDepthForCoverage = Math.max(0, viewport.targetDepth - 2);\n      const coverageRatio = streamingLoader.getViewportCoverageRatio(viewport, minDepthForCoverage);\n      const needsCoverage = coverageRatio < 0.5;\n      const hasPendingWork = nodesToLoad.length > 0;\n\n      if (budgetReached && needsCoverage && hasPendingWork) {\n        resetSucceeded = streamingLoader.resetLoadedData();\n        if (!resetSucceeded) {\n          setTimeout(() => {\n            this._handleViewportChangeForStreaming(viewport, datasetId, currentRequestId);\n          }, 200);\n          return;\n        }\n        nodesToLoad = await streamingLoader.selectNodesForViewport(viewport);\n      }\n\n      // Queue nodes for loading\n      for (const node of nodesToLoad) {\n        streamingLoader.queueNode(node);\n      }\n\n      // Start loading. The loader self-drains its queue as each request\n      // completes, so no follow-up pass is needed here.\n      await streamingLoader.loadQueuedNodes();\n    } catch (err) {\n      console.warn('Failed to load nodes for viewport:', err);\n    }\n  }\n\n  /**\n   * Stops streaming loading and cleans up resources.\n   *\n   * @param id - Optional ID of specific streaming dataset to stop. If not provided, stops all.\n   */\n  stopStreaming(id?: string): void {\n    if (id) {\n      // Stop specific streaming dataset\n      const viewportManager = this._viewportManagers.get(id);\n      if (viewportManager) {\n        viewportManager.destroy();\n        this._viewportManagers.delete(id);\n      }\n\n      // Check COPC streaming loader\n      const streamingLoader = this._streamingLoaders.get(id);\n      if (streamingLoader) {\n        streamingLoader.destroy();\n        this._streamingLoaders.delete(id);\n      }\n      this._copcViewportRequestIds.delete(id);\n\n      // Check EPT streaming loader\n      const eptLoader = this._eptStreamingLoaders.get(id);\n      if (eptLoader) {\n        eptLoader.destroy();\n        this._eptStreamingLoaders.delete(id);\n      }\n\n      // Remove point cloud from manager\n      this._pointCloudManager?.removePointCloud(id);\n\n      // Remove from state\n      const pointClouds = this._state.pointClouds.filter((pc) => pc.id !== id);\n      const hasActiveStreaming = this._streamingLoaders.size > 0 || this._eptStreamingLoaders.size > 0;\n\n      // Reset classification state when removing datasets\n      this.setState({\n        pointClouds,\n        activePointCloudId:\n          this._state.activePointCloudId === id\n            ? pointClouds[0]?.id || null\n            : this._state.activePointCloudId,\n        streamingActive: hasActiveStreaming,\n        streamingProgress: hasActiveStreaming ? this._state.streamingProgress : undefined,\n        availableClassifications: new Set(),\n        hiddenClassifications: new Set(),\n      });\n\n      this._emit('streamingstop');\n      this._emitWithData('unload', { pointCloud: { id } });\n    } else {\n      // Stop all streaming datasets (COPC and EPT)\n      const streamingIds = [\n        ...Array.from(this._streamingLoaders.keys()),\n        ...Array.from(this._eptStreamingLoaders.keys()),\n      ];\n\n      // Destroy all viewport managers\n      for (const viewportManager of this._viewportManagers.values()) {\n        viewportManager.destroy();\n      }\n      this._viewportManagers.clear();\n\n      // Destroy all COPC streaming loaders\n      for (const streamingLoader of this._streamingLoaders.values()) {\n        streamingLoader.destroy();\n      }\n      this._streamingLoaders.clear();\n      this._copcViewportRequestIds.clear();\n\n      // Destroy all EPT streaming loaders\n      for (const eptLoader of this._eptStreamingLoaders.values()) {\n        eptLoader.destroy();\n      }\n      this._eptStreamingLoaders.clear();\n      this._eptViewportRequestIds.clear();\n      this._eptLastViewport.clear();\n\n      // Remove all streaming point clouds from manager\n      for (const streamingId of streamingIds) {\n        this._pointCloudManager?.removePointCloud(streamingId);\n      }\n\n      // Remove streaming point clouds from state\n      const pointClouds = this._state.pointClouds.filter(\n        (pc) => !streamingIds.includes(pc.id)\n      );\n\n      // Reset classification state when removing datasets\n      this.setState({\n        pointClouds,\n        activePointCloudId:\n          streamingIds.includes(this._state.activePointCloudId || '')\n            ? pointClouds[0]?.id || null\n            : this._state.activePointCloudId,\n        streamingActive: false,\n        streamingProgress: undefined,\n        availableClassifications: new Set(),\n        hiddenClassifications: new Set(),\n      });\n\n      if (streamingIds.length > 0) {\n        this._emit('streamingstop');\n        // Emit unload event for each removed streaming layer\n        for (const removedId of streamingIds) {\n          this._emitWithData('unload', { pointCloud: { id: removedId } });\n        }\n      }\n    }\n  }\n\n  /**\n   * Checks if streaming mode is currently active.\n   *\n   * @param id - Optional ID to check specific dataset. If not provided, checks if any streaming is active.\n   * @returns True if streaming is active\n   */\n  isStreaming(id?: string): boolean {\n    if (id) {\n      return this._streamingLoaders.has(id) || this._eptStreamingLoaders.has(id);\n    }\n    return this._streamingLoaders.size > 0 || this._eptStreamingLoaders.size > 0;\n  }\n\n  /**\n   * Gets the current streaming progress.\n   *\n   * @returns Streaming progress or undefined if not streaming\n   */\n  getStreamingProgress(): LidarState['streamingProgress'] {\n    return this._state.streamingProgress;\n  }\n\n  /**\n   * Sets the point size.\n   *\n   * @param size - Point size in pixels\n   */\n  setPointSize(size: number): void {\n    this._state.pointSize = size;\n    this._pointCloudManager?.setPointSize(size);\n    this._emit('stylechange');\n    this._emit('statechange');\n  }\n\n  /**\n   * Sets the opacity.\n   *\n   * @param opacity - Opacity value (0-1)\n   */\n  setOpacity(opacity: number): void {\n    this._state.opacity = opacity;\n    this._pointCloudManager?.setOpacity(opacity);\n    this._emit('stylechange');\n    this._emit('statechange');\n  }\n\n  /**\n   * Sets the color scheme.\n   * Automatically switches colormap and resets color range when changing between elevation and intensity.\n   *\n   * @param scheme - Color scheme to apply\n   */\n  setColorScheme(scheme: ColorScheme): void {\n    const previousScheme = this._state.colorScheme;\n    this._state.colorScheme = scheme;\n    this._pointCloudManager?.setColorScheme(scheme);\n\n    // Auto-switch colormap and reset color range when changing between elevation and intensity\n    if (typeof scheme === 'string' && typeof previousScheme === 'string') {\n      const isNewElevationOrIntensity = scheme === 'elevation' || scheme === 'intensity';\n      const wasElevationOrIntensity = previousScheme === 'elevation' || previousScheme === 'intensity';\n      const switchedBetweenElevationAndIntensity = isNewElevationOrIntensity && wasElevationOrIntensity && scheme !== previousScheme;\n\n      if (switchedBetweenElevationAndIntensity) {\n        // Reset color range to default percentile mode\n        this._state.colorRange = {\n          mode: 'percentile',\n          percentileLow: 2,\n          percentileHigh: 98,\n        };\n        this._pointCloudManager?.setColorRange(this._state.colorRange);\n      }\n\n      if (scheme === 'intensity' && previousScheme !== 'intensity') {\n        // Switch to grayscale for intensity\n        this._state.colormap = 'gray';\n        this._pointCloudManager?.setColormap('gray');\n      } else if (scheme === 'elevation' && previousScheme === 'intensity') {\n        // Switch back to viridis for elevation\n        this._state.colormap = 'viridis';\n        this._pointCloudManager?.setColormap('viridis');\n      }\n    }\n\n    // Update computed color bounds for the new scheme\n    this._updateComputedColorBounds();\n\n    this._panelBuilder?.updateState(this._state);\n    this._emit('stylechange');\n    this._emit('statechange');\n  }\n\n  /**\n   * Sets the colormap for elevation/intensity coloring.\n   *\n   * @param colormap - The colormap name (e.g., 'viridis', 'plasma', 'turbo')\n   */\n  setColormap(colormap: ColormapName): void {\n    this._state.colormap = colormap;\n    this._pointCloudManager?.setColormap(colormap);\n    this._updateComputedColorBounds();\n    this._panelBuilder?.updateState(this._state);\n    this._emit('stylechange');\n    this._emit('statechange');\n  }\n\n  /**\n   * Gets the current colormap.\n   *\n   * @returns The current colormap name\n   */\n  getColormap(): ColormapName {\n    return this._state.colormap;\n  }\n\n  /**\n   * Sets the color range configuration.\n   *\n   * @param config - The color range configuration\n   */\n  setColorRange(config: ColorRangeConfig): void {\n    this._state.colorRange = config;\n    this._pointCloudManager?.setColorRange(config);\n    this._updateComputedColorBounds();\n    this._panelBuilder?.updateState(this._state);\n    this._emit('stylechange');\n    this._emit('statechange');\n  }\n\n  /**\n   * Gets the current color range configuration.\n   *\n   * @returns The current color range configuration\n   */\n  getColorRange(): ColorRangeConfig {\n    return this._state.colorRange;\n  }\n\n  /**\n   * Sets whether to use percentile range for elevation/intensity coloring.\n   *\n   * @param usePercentile - Whether to use percentile range (2-98%)\n   */\n  setUsePercentile(usePercentile: boolean): void {\n    this._state.usePercentile = usePercentile;\n    this._pointCloudManager?.setUsePercentile(usePercentile);\n    this._emit('stylechange');\n    this._emit('statechange');\n  }\n\n  /**\n   * Gets whether percentile range is being used for coloring.\n   *\n   * @returns True if using percentile range\n   */\n  getUsePercentile(): boolean {\n    return this._state.usePercentile;\n  }\n\n  /**\n   * Sets the elevation range filter.\n   *\n   * @param min - Minimum elevation\n   * @param max - Maximum elevation\n   */\n  setElevationRange(min: number, max: number): void {\n    this._state.elevationRange = [min, max];\n    this._pointCloudManager?.setElevationRange([min, max]);\n    this._emit('stylechange');\n    this._emit('statechange');\n  }\n\n  /**\n   * Clears the elevation range filter.\n   */\n  clearElevationRange(): void {\n    this._state.elevationRange = null;\n    this._pointCloudManager?.setElevationRange(null);\n    this._emit('stylechange');\n    this._emit('statechange');\n  }\n\n  /**\n   * Sets the point budget.\n   *\n   * @param budget - Maximum number of points to display\n   */\n  setPointBudget(budget: number): void {\n    this._state.pointBudget = budget;\n    this._emit('statechange');\n  }\n\n  /**\n   * Sets whether points are pickable (enables hover/click interactions).\n   *\n   * @param pickable - Whether points should be pickable\n   */\n  setPickable(pickable: boolean): void {\n    this._state.pickable = pickable;\n    this._pointCloudManager?.setPickable(pickable);\n\n    // Hide tooltip when disabling pickable\n    if (!pickable && this._tooltip) {\n      this._tooltip.style.display = 'none';\n    }\n\n    this._emit('stylechange');\n    this._emit('statechange');\n  }\n\n  /**\n   * Sets whether Z offset adjustment is enabled.\n   *\n   * @param enabled - Whether Z offset is enabled\n   */\n  setZOffsetEnabled(enabled: boolean): void {\n    this._state.zOffsetEnabled = enabled;\n    if (!enabled) {\n      // Reset offset to 0 when disabled\n      this._state.zOffset = 0;\n      this._pointCloudManager?.setZOffset(0);\n    }\n    this._emit('stylechange');\n    this._emit('statechange');\n  }\n\n  /**\n   * Sets the Z offset value for vertical adjustment.\n   *\n   * @param offset - Z offset in meters\n   */\n  setZOffset(offset: number): void {\n    this._manualZOffset = true;\n    this._state.zOffset = offset;\n    this._pointCloudManager?.setZOffset(offset);\n    this._emit('stylechange');\n    this._emit('statechange');\n  }\n\n  /**\n   * Gets the current Z offset value.\n   *\n   * @returns Z offset in meters\n   */\n  getZOffset(): number {\n    return this._state.zOffset;\n  }\n\n  /**\n   * Enables or disables 3D terrain visualization.\n   *\n   * @param enabled - Whether terrain should be enabled\n   */\n  setTerrain(enabled: boolean): void {\n    if (!this._map) return;\n\n    this._state.terrainEnabled = enabled;\n\n    if (enabled) {\n      // Add terrain source if not present (using AWS Terrain Tiles - free)\n      if (!this._map.getSource('terrain-dem')) {\n        this._map.addSource('terrain-dem', {\n          type: 'raster-dem',\n          tiles: ['https://s3.amazonaws.com/elevation-tiles-prod/terrarium/{z}/{x}/{y}.png'],\n          encoding: 'terrarium',\n          tileSize: 256,\n          maxzoom: 15,\n        });\n      }\n\n      // Enable terrain\n      this._map.setTerrain({\n        source: 'terrain-dem',\n        exaggeration: this._options.terrainExaggeration ?? 1.0,\n      });\n    } else {\n      // Disable terrain\n      this._map.setTerrain(null);\n    }\n\n    this._emit('stylechange');\n    this._emit('statechange');\n  }\n\n  /**\n   * Gets whether 3D terrain is currently enabled.\n   *\n   * @returns True if terrain is enabled\n   */\n  getTerrain(): boolean {\n    return this._state.terrainEnabled;\n  }\n\n  /**\n   * Gets information about loaded point clouds.\n   *\n   * @returns Array of point cloud info objects\n   */\n  getPointClouds(): PointCloudInfo[] {\n    return [...this._state.pointClouds];\n  }\n\n  /**\n   * Flies the map to a point cloud's bounds.\n   *\n   * @param id - ID of the point cloud (or undefined for active/first)\n   */\n  flyToPointCloud(id?: string): void {\n    const targetId = id || this._state.activePointCloudId || this._state.pointClouds[0]?.id;\n    if (!targetId || !this._map) return;\n\n    // Try to get bounds from point cloud manager first (for loaded data)\n    let bounds = this._pointCloudManager?.getPointCloudBounds(targetId);\n\n    // Fall back to bounds from PointCloudInfo (for EPT streaming before data loads)\n    if (!bounds) {\n      const pcInfo = this._state.pointClouds.find(pc => pc.id === targetId);\n      bounds = pcInfo?.bounds;\n    }\n\n    if (!bounds) {\n      console.warn('Cannot fly to point cloud: no bounds available');\n      return;\n    }\n\n    // Validate coordinates are in valid lat/lng range\n    if (Math.abs(bounds.minY) > 90 || Math.abs(bounds.maxY) > 90 ||\n        Math.abs(bounds.minX) > 180 || Math.abs(bounds.maxX) > 180) {\n      console.error('Cannot fly to point cloud: coordinates are not in WGS84 range', bounds);\n      return;\n    }\n\n    // Check for NaN or invalid values\n    if (isNaN(bounds.minX) || isNaN(bounds.minY) || isNaN(bounds.maxX) || isNaN(bounds.maxY)) {\n      console.error('Cannot fly to point cloud: bounds contain NaN values', bounds);\n      return;\n    }\n\n    // Fly to bounds\n    this._map.fitBounds(\n      [\n        [bounds.minX, bounds.minY],\n        [bounds.maxX, bounds.maxY],\n      ],\n      {\n        padding: 50,\n        duration: 1000,\n      }\n    );\n  }\n\n  // ==================== Private Methods ====================\n\n  /**\n   * Gets the current map camera state for share URLs.\n   */\n  private _getShareMapState():\n    | {\n        center: [number, number];\n        zoom: number;\n        bearing: number;\n        pitch: number;\n      }\n    | undefined {\n    if (!this._map) return undefined;\n\n    const center = this._map.getCenter();\n    return {\n      center: [center.lng, center.lat],\n      zoom: this._map.getZoom(),\n      bearing: this._map.getBearing(),\n      pitch: this._map.getPitch(),\n    };\n  }\n\n  /**\n   * Applies a shared camera state to the map.\n   */\n  private _applyShareMapState(mapState: {\n    center: [number, number];\n    zoom: number;\n    bearing: number;\n    pitch: number;\n  }): void {\n    if (!this._map) return;\n\n    this._map.jumpTo({\n      center: mapState.center,\n      zoom: mapState.zoom,\n      bearing: mapState.bearing,\n      pitch: mapState.pitch,\n    });\n  }\n\n  /**\n   * Emits an event to all registered handlers.\n   *\n   * @param event - The event type to emit\n   */\n  private _emit(event: LidarControlEvent): void {\n    const handlers = this._eventHandlers.get(event);\n    if (handlers) {\n      const eventData: LidarEventData = { type: event, state: this.getState() };\n      handlers.forEach((handler) => handler(eventData));\n    }\n  }\n\n  /**\n   * Emits an event with additional data.\n   *\n   * @param event - The event type to emit\n   * @param data - Additional event data\n   */\n  private _emitWithData(event: LidarControlEvent, data: Partial<LidarEventData>): void {\n    const handlers = this._eventHandlers.get(event);\n    if (handlers) {\n      const eventData: LidarEventData = { type: event, state: this.getState(), ...data };\n      handlers.forEach((handler) => handler(eventData));\n    }\n  }\n\n  /**\n   * Updates the computed color bounds based on the current color scheme and range settings.\n   * This is used to display accurate min/max values in the colorbar.\n   */\n  private _updateComputedColorBounds(): void {\n    if (this._state.pointClouds.length === 0) {\n      this._state.computedColorBounds = undefined;\n      return;\n    }\n\n    // Get the actual computed bounds from PointCloudManager\n    // This returns the real bounds used for coloring (including actual percentile calculations)\n    const actualBounds = this._pointCloudManager?.getLastComputedBounds();\n    if (actualBounds) {\n      this._state.computedColorBounds = actualBounds;\n    } else {\n      // Fallback to data bounds if no computed bounds available\n      const colorScheme = typeof this._state.colorScheme === 'string' ? this._state.colorScheme : 'elevation';\n      if (colorScheme === 'intensity') {\n        this._state.computedColorBounds = this._getIntensityBounds();\n      } else {\n        this._state.computedColorBounds = this._getElevationBounds();\n      }\n    }\n  }\n\n  /**\n   * Gets the elevation bounds from loaded point clouds.\n   */\n  private _getElevationBounds(): { min: number; max: number } {\n    if (this._state.pointClouds.length === 0) {\n      return { min: 0, max: 100 };\n    }\n\n    let minZ = Infinity;\n    let maxZ = -Infinity;\n\n    for (const pc of this._state.pointClouds) {\n      minZ = Math.min(minZ, pc.bounds.minZ);\n      maxZ = Math.max(maxZ, pc.bounds.maxZ);\n    }\n\n    return { min: minZ, max: maxZ };\n  }\n\n  /**\n   * Gets the intensity bounds from loaded point clouds.\n   * Intensity values are typically normalized to 0-1 range.\n   */\n  private _getIntensityBounds(): { min: number; max: number } {\n    // Intensity values are normalized to 0-1 during loading\n    // Default to this range if no data is available\n    return { min: 0, max: 1 };\n  }\n\n  /**\n   * Creates the main container element for the control.\n   *\n   * @returns The container element\n   */\n  private _createContainer(): HTMLElement {\n    const container = document.createElement('div');\n    container.className = `maplibregl-ctrl maplibregl-ctrl-group lidar-control${\n      this._options.className ? ` ${this._options.className}` : ''\n    }`;\n\n    // Create toggle button (29x29 to match navigation control)\n    const toggleBtn = document.createElement('button');\n    toggleBtn.className = 'lidar-control-toggle';\n    toggleBtn.type = 'button';\n    toggleBtn.setAttribute('aria-label', this._options.title);\n    toggleBtn.innerHTML = `\n      <span class=\"lidar-control-icon\">\n        <svg viewBox=\"0 0 24 24\" width=\"22\" height=\"22\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\">\n          <circle cx=\"12\" cy=\"12\" r=\"2\"/>\n          <circle cx=\"12\" cy=\"5\" r=\"1.5\"/>\n          <circle cx=\"12\" cy=\"19\" r=\"1.5\"/>\n          <circle cx=\"5\" cy=\"12\" r=\"1.5\"/>\n          <circle cx=\"19\" cy=\"12\" r=\"1.5\"/>\n          <circle cx=\"7\" cy=\"7\" r=\"1\"/>\n          <circle cx=\"17\" cy=\"7\" r=\"1\"/>\n          <circle cx=\"7\" cy=\"17\" r=\"1\"/>\n          <circle cx=\"17\" cy=\"17\" r=\"1\"/>\n        </svg>\n      </span>\n    `;\n    toggleBtn.addEventListener('click', () => this.toggle());\n\n    container.appendChild(toggleBtn);\n\n    return container;\n  }\n\n  /**\n   * Creates the panel element with header and content areas.\n   *\n   * @returns The panel element\n   */\n  private _createPanel(): HTMLElement {\n    const panel = document.createElement('div');\n    panel.className = 'lidar-control-panel';\n    panel.style.width = `${this._options.panelWidth}px`;\n\n    // Create header with title and close button\n    const header = document.createElement('div');\n    header.className = 'lidar-control-header';\n\n    const title = document.createElement('span');\n    title.className = 'lidar-control-title';\n    title.textContent = this._options.title;\n\n    const closeBtn = document.createElement('button');\n    closeBtn.className = 'lidar-control-close';\n    closeBtn.type = 'button';\n    closeBtn.setAttribute('aria-label', 'Close panel');\n    closeBtn.innerHTML = '&times;';\n    closeBtn.addEventListener('click', () => this.collapse());\n\n    header.appendChild(title);\n    header.appendChild(closeBtn);\n\n    // Create content area using PanelBuilder\n    this._panelBuilder = new PanelBuilder(\n      {\n        onFileSelect: (file) => this.loadPointCloud(file),\n        onUrlSubmit: (url) => this.loadPointCloud(url),\n        onPointSizeChange: (size) => this.setPointSize(size),\n        onOpacityChange: (opacity) => this.setOpacity(opacity),\n        onColorSchemeChange: (scheme) => this.setColorScheme(scheme),\n        onColormapChange: (colormap) => this.setColormap(colormap),\n        onColorRangeChange: (config) => this.setColorRange(config),\n        onUsePercentileChange: (usePercentile) => this.setUsePercentile(usePercentile),\n        onElevationRangeChange: (range) => {\n          if (range) {\n            this.setElevationRange(range[0], range[1]);\n          } else {\n            this.clearElevationRange();\n          }\n        },\n        onPickableChange: (pickable) => this.setPickable(pickable),\n        onZOffsetEnabledChange: (enabled) => this.setZOffsetEnabled(enabled),\n        onZOffsetChange: (offset) => this.setZOffset(offset),\n        onUnload: (id) => this.unloadPointCloud(id),\n        onZoomTo: (id) => this.flyToPointCloud(id),\n        onClassificationToggle: (code, visible) => this._toggleClassification(code, visible),\n        onClassificationShowAll: () => this._showAllClassifications(),\n        onClassificationHideAll: () => this._hideAllClassifications(),\n        onTerrainChange: (enabled) => this.setTerrain(enabled),\n        onShowMetadata: (id) => this.showMetadataPanel(id),\n        onCrossSectionPanel: () => this.getCrossSectionPanel().render(),\n        onShareUrl: this._options.shareUrl ? () => this.getShareUrl() : undefined,\n      },\n      this._state,\n      {\n        sampleData: this._options.sampleData,\n        sampleDataLabel: this._options.sampleDataLabel,\n      }\n    );\n\n    const content = this._panelBuilder.build();\n\n    panel.appendChild(header);\n    panel.appendChild(content);\n\n    // Drag-to-resize handles in both bottom corners.\n    this._addResizeHandles(panel);\n\n    return panel;\n  }\n\n  /**\n   * Creates the tooltip element for point picking.\n   *\n   * @returns The tooltip element\n   */\n  private _createTooltip(): HTMLElement {\n    const tooltip = document.createElement('div');\n    tooltip.className = 'lidar-tooltip';\n    tooltip.style.cssText = `\n      position: fixed;\n      pointer-events: none;\n      background: rgba(0, 0, 0, 0.85);\n      color: white;\n      padding: 8px 12px;\n      border-radius: 4px;\n      font-size: 12px;\n      font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n      z-index: 10000;\n      display: none;\n      white-space: nowrap;\n      box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);\n    `;\n    return tooltip;\n  }\n\n  /**\n   * Formats a GPS time value (GPS Week Seconds) to a readable string.\n   */\n  private _formatGpsTime(gpsTime: number): string {\n    // GPS epoch is January 6, 1980\n    // GPS time is typically in seconds since GPS epoch or week seconds\n    // We'll detect based on magnitude\n    if (gpsTime > 1e9) {\n      // Likely GPS seconds since epoch - convert to date\n      const gpsEpoch = Date.UTC(1980, 0, 6, 0, 0, 0);\n      const leapSeconds = 18; // Current leap seconds offset (as of 2024)\n      const utcTime = gpsEpoch + (gpsTime - leapSeconds) * 1000;\n      const date = new Date(utcTime);\n      return date.toISOString().replace('T', ' ').slice(0, 19);\n    }\n    // Otherwise return as raw seconds (week seconds format)\n    return gpsTime.toFixed(6);\n  }\n\n  /**\n   * Formats a value for display in the tooltip.\n   */\n  private _formatAttributeValue(name: string, value: number): string {\n    // Special formatting for known attribute types\n    const lowerName = name.toLowerCase();\n\n    if (lowerName === 'gpstime') {\n      return this._formatGpsTime(value);\n    }\n    if (lowerName === 'intensity') {\n      // Intensity is already normalized to 0-1\n      return `${(value * 100).toFixed(1)}%`;\n    }\n    if (lowerName === 'classification') {\n      return this._getClassificationName(value);\n    }\n    if (lowerName.includes('angle')) {\n      return `${value.toFixed(1)}°`;\n    }\n    // Boolean-like flags\n    if (['synthetic', 'keypoint', 'withheld', 'overlap', 'edgeofflightline', 'scandirectionflag'].includes(lowerName)) {\n      return value === 0 ? '0' : '1';\n    }\n    // Integer values\n    if (Number.isInteger(value) || ['returnnumber', 'numberofreturns', 'pointsourceid', 'userdata', 'scannerchannel'].includes(lowerName)) {\n      return Math.round(value).toString();\n    }\n    // Default: decimal with appropriate precision\n    if (Math.abs(value) < 0.01 || Math.abs(value) > 100000) {\n      return value.toExponential(4);\n    }\n    return value.toFixed(2);\n  }\n\n  /**\n   * Gets the classification name for a code.\n   */\n  private _getClassificationName(code: number): string {\n    const classNames: Record<number, string> = {\n      0: 'Never Classified',\n      1: 'Unassigned',\n      2: 'Ground',\n      3: 'Low Vegetation',\n      4: 'Medium Vegetation',\n      5: 'High Vegetation',\n      6: 'Building',\n      7: 'Low Point',\n      8: 'Reserved',\n      9: 'Water',\n      10: 'Rail',\n      11: 'Road Surface',\n      12: 'Reserved',\n      13: 'Wire - Guard',\n      14: 'Wire - Conductor',\n      15: 'Transmission Tower',\n      16: 'Wire - Connector',\n      17: 'Bridge Deck',\n      18: 'High Noise',\n    };\n    return classNames[code] || `Class ${code}`;\n  }\n\n  /**\n   * Checks if an attribute should be shown based on pickInfoFields config.\n   */\n  private _shouldShowAttribute(name: string): boolean {\n    const fields = this._state.pickInfoFields;\n    if (!fields || fields.length === 0) {\n      return true; // Show all if not specified\n    }\n    // Case-insensitive match\n    return fields.some(f => f.toLowerCase() === name.toLowerCase());\n  }\n\n  /**\n   * Handles point hover events from the point cloud layer.\n   *\n   * @param info - Picked point information or null if no point\n   */\n  private _handlePointHover(info: PickedPointInfo | null): void {\n    if (!this._tooltip) return;\n\n    if (info && this._state.pickable) {\n      let html = `\n        <div style=\"margin-bottom: 4px; font-weight: 600; border-bottom: 1px solid rgba(255,255,255,0.3); padding-bottom: 4px;\">Point Info</div>\n      `;\n\n      // Core attributes (always available)\n      if (this._shouldShowAttribute('X') || this._shouldShowAttribute('Longitude')) {\n        html += `<div>X: ${info.longitude.toFixed(6)}</div>`;\n      }\n      if (this._shouldShowAttribute('Y') || this._shouldShowAttribute('Latitude')) {\n        html += `<div>Y: ${info.latitude.toFixed(6)}</div>`;\n      }\n      if (this._shouldShowAttribute('Z') || this._shouldShowAttribute('Elevation')) {\n        html += `<div>Z: ${info.elevation.toFixed(2)}</div>`;\n      }\n\n      // Intensity\n      if (info.intensity !== undefined && this._shouldShowAttribute('Intensity')) {\n        html += `<div>Intensity: ${this._formatAttributeValue('Intensity', info.intensity)}</div>`;\n      }\n\n      // Classification\n      if (info.classification !== undefined && this._shouldShowAttribute('Classification')) {\n        html += `<div>Classification: ${this._getClassificationName(info.classification)}</div>`;\n      }\n\n      // RGB colors\n      if (info.red !== undefined && this._shouldShowAttribute('Red')) {\n        html += `<div>Red: ${info.red}</div>`;\n      }\n      if (info.green !== undefined && this._shouldShowAttribute('Green')) {\n        html += `<div>Green: ${info.green}</div>`;\n      }\n      if (info.blue !== undefined && this._shouldShowAttribute('Blue')) {\n        html += `<div>Blue: ${info.blue}</div>`;\n      }\n\n      // All extra attributes\n      if (info.attributes) {\n        for (const [name, value] of Object.entries(info.attributes)) {\n          if (this._shouldShowAttribute(name)) {\n            const formattedValue = this._formatAttributeValue(name, value);\n            html += `<div>${name}: ${formattedValue}</div>`;\n          }\n        }\n      }\n\n      this._tooltip.innerHTML = html;\n      this._tooltip.style.display = 'block';\n\n      // Get map container offset for correct positioning in embedded contexts (Jupyter, iframes)\n      const containerRect = this._mapContainer?.getBoundingClientRect();\n      const offsetX = containerRect?.left ?? 0;\n      const offsetY = containerRect?.top ?? 0;\n\n      this._tooltip.style.left = `${info.x + offsetX + 15}px`;\n      this._tooltip.style.top = `${info.y + offsetY + 15}px`;\n    } else {\n      this._tooltip.style.display = 'none';\n    }\n  }\n\n  /**\n   * Sets which fields to display in the pick point info panel.\n   *\n   * @param fields - Array of attribute names to show, or undefined/empty to show all\n   */\n  setPickInfoFields(fields?: string[]): void {\n    this._state.pickInfoFields = fields;\n    this._emit('statechange');\n  }\n\n  /**\n   * Gets the current list of fields shown in pick point info.\n   */\n  getPickInfoFields(): string[] | undefined {\n    return this._state.pickInfoFields;\n  }\n\n  // ==================== Classification Visibility API ====================\n\n  /**\n   * Toggles visibility of a specific classification.\n   *\n   * @param code - Classification code to toggle\n   * @param visible - Whether to show the classification\n   */\n  private _toggleClassification(code: number, visible: boolean): void {\n    const newHidden = new Set(this._state.hiddenClassifications);\n    if (visible) {\n      newHidden.delete(code);\n    } else {\n      newHidden.add(code);\n    }\n    this._pointCloudManager?.setHiddenClassifications(newHidden);\n    this.setState({ hiddenClassifications: newHidden });\n    this._emit('stylechange');\n  }\n\n  /**\n   * Shows all classifications.\n   */\n  private _showAllClassifications(): void {\n    const newHidden = new Set<number>();\n    this._pointCloudManager?.setHiddenClassifications(newHidden);\n    this.setState({ hiddenClassifications: newHidden });\n    this._emit('stylechange');\n  }\n\n  /**\n   * Hides all classifications.\n   */\n  private _hideAllClassifications(): void {\n    const newHidden = new Set(this._state.availableClassifications);\n    this._pointCloudManager?.setHiddenClassifications(newHidden);\n    this.setState({ hiddenClassifications: newHidden });\n    this._emit('stylechange');\n  }\n\n  /**\n   * Sets visibility for a specific classification.\n   *\n   * @param code - Classification code\n   * @param visible - Whether to show the classification\n   */\n  setClassificationVisibility(code: number, visible: boolean): void {\n    this._toggleClassification(code, visible);\n  }\n\n  /**\n   * Gets the set of hidden classification codes.\n   *\n   * @returns Array of hidden classification codes\n   */\n  getHiddenClassifications(): number[] {\n    return Array.from(this._state.hiddenClassifications);\n  }\n\n  /**\n   * Gets the set of available classification codes in the loaded data.\n   *\n   * @returns Array of available classification codes\n   */\n  getAvailableClassifications(): number[] {\n    return Array.from(this._state.availableClassifications);\n  }\n\n  /**\n   * Shows all classifications (makes all visible).\n   */\n  showAllClassifications(): void {\n    this._showAllClassifications();\n  }\n\n  /**\n   * Hides all classifications.\n   */\n  hideAllClassifications(): void {\n    this._hideAllClassifications();\n  }\n\n  /**\n   * Setup event listeners for panel positioning and click-outside behavior.\n   */\n  private _setupEventListeners(): void {\n    // Click outside to close (check both container and panel since they're now\n    // separate). Skipped when closeOnOutsideClick is false, so the panel stays\n    // open until the header close button is used.\n    if (this._options.closeOnOutsideClick !== false) {\n      this._clickOutsideHandler = (e: MouseEvent) => {\n        // Don't collapse if cross-section tool is active or has a line drawn\n        // (the second click to finish drawing should not collapse the panel)\n        if (this._crossSectionTool?.isEnabled() || this._crossSectionTool?.getLine()) {\n          return;\n        }\n\n        const target = e.target as Node;\n        if (\n          this._container &&\n          this._panel &&\n          !this._container.contains(target) &&\n          !this._panel.contains(target)\n        ) {\n          this.collapse();\n        }\n      };\n      document.addEventListener('click', this._clickOutsideHandler);\n    }\n\n    // Update panel position on window resize\n    this._resizeHandler = () => {\n      if (!this._state.collapsed) {\n        this._updatePanelPosition();\n      }\n    };\n    window.addEventListener('resize', this._resizeHandler);\n\n    // Update panel position on map resize (e.g., sidebar toggle)\n    this._mapResizeHandler = () => {\n      if (!this._state.collapsed) {\n        this._updatePanelPosition();\n      }\n    };\n    this._map?.on('resize', this._mapResizeHandler);\n  }\n\n  /**\n   * Detect which corner the control is positioned in.\n   *\n   * @returns The position: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'\n   */\n  private _getControlPosition(): 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' {\n    const parent = this._container?.parentElement;\n    if (!parent) return 'top-right'; // Default\n\n    if (parent.classList.contains('maplibregl-ctrl-top-left')) return 'top-left';\n    if (parent.classList.contains('maplibregl-ctrl-top-right')) return 'top-right';\n    if (parent.classList.contains('maplibregl-ctrl-bottom-left')) return 'bottom-left';\n    if (parent.classList.contains('maplibregl-ctrl-bottom-right')) return 'bottom-right';\n\n    return 'top-right'; // Default\n  }\n\n  /**\n   * Update the panel position based on button location and control corner.\n   * Positions the panel next to the button, expanding in the appropriate direction.\n   */\n  private _updatePanelPosition(): void {\n    if (!this._container || !this._panel || !this._mapContainer) return;\n\n    // Get the toggle button (first child of container)\n    const button = this._container.querySelector('.lidar-control-toggle');\n    if (!button) return;\n\n    const buttonRect = button.getBoundingClientRect();\n    const mapRect = this._mapContainer.getBoundingClientRect();\n    const position = this._getControlPosition();\n\n    // Calculate button position relative to map container\n    const buttonTop = buttonRect.top - mapRect.top;\n    const buttonBottom = mapRect.bottom - buttonRect.bottom;\n    const buttonLeft = buttonRect.left - mapRect.left;\n    const buttonRight = mapRect.right - buttonRect.right;\n\n    const panelGap = 5; // Gap between button and panel\n    let availableHeight = mapRect.height - panelGap * 2;\n    let availableWidth = mapRect.width - panelGap * 2;\n\n    // Reset all positioning\n    this._panel.style.top = '';\n    this._panel.style.bottom = '';\n    this._panel.style.left = '';\n    this._panel.style.right = '';\n\n    switch (position) {\n      case 'top-left':\n        // Panel expands down and to the right\n        this._panel.style.top = `${buttonTop + buttonRect.height + panelGap}px`;\n        this._panel.style.left = `${buttonLeft}px`;\n        availableHeight = mapRect.height - (buttonTop + buttonRect.height + panelGap) - panelGap;\n        availableWidth = mapRect.width - buttonLeft - panelGap;\n        break;\n\n      case 'top-right':\n        // Panel expands down and to the left\n        this._panel.style.top = `${buttonTop + buttonRect.height + panelGap}px`;\n        this._panel.style.right = `${buttonRight}px`;\n        availableHeight = mapRect.height - (buttonTop + buttonRect.height + panelGap) - panelGap;\n        availableWidth = mapRect.width - buttonRight - panelGap;\n        break;\n\n      case 'bottom-left':\n        // Panel expands up and to the right\n        this._panel.style.bottom = `${buttonBottom + buttonRect.height + panelGap}px`;\n        this._panel.style.left = `${buttonLeft}px`;\n        availableHeight = mapRect.height - (buttonBottom + buttonRect.height + panelGap) - panelGap;\n        availableWidth = mapRect.width - buttonLeft - panelGap;\n        break;\n\n      case 'bottom-right':\n        // Panel expands up and to the left\n        this._panel.style.bottom = `${buttonBottom + buttonRect.height + panelGap}px`;\n        this._panel.style.right = `${buttonRight}px`;\n        availableHeight = mapRect.height - (buttonBottom + buttonRect.height + panelGap) - panelGap;\n        availableWidth = mapRect.width - buttonRight - panelGap;\n        break;\n    }\n\n    availableHeight = Math.max(LidarControl.MIN_PANEL_HEIGHT, availableHeight);\n    availableWidth = Math.max(LidarControl.MIN_PANEL_WIDTH, availableWidth);\n\n    // Width: honor a user-dragged width (clamped), else the configured default.\n    const defaultWidth = this._userPanelWidth ?? this._options.panelWidth;\n    const width = Math.min(\n      Math.max(defaultWidth, LidarControl.MIN_PANEL_WIDTH),\n      availableWidth\n    );\n    this._panel.style.width = `${width}px`;\n\n    // Height: the flex content area scrolls vertically only when it overflows.\n    // A user-dragged height is honored (clamped to the available space). When\n    // no height is set, the panel sizes to its content, growing up to the\n    // available vertical space, unless the caller explicitly capped it via the\n    // `maxHeight` option.\n    if (this._userPanelHeight !== null) {\n      this._panel.style.maxHeight = `${availableHeight}px`;\n      const height = Math.min(\n        Math.max(this._userPanelHeight, LidarControl.MIN_PANEL_HEIGHT),\n        availableHeight\n      );\n      this._panel.style.height = `${height}px`;\n    } else if (this._maxHeightExplicit) {\n      // Caller capped the height: size to content up to the cap.\n      const cap = Math.min(\n        availableHeight,\n        Math.max(this._options.maxHeight, LidarControl.MIN_PANEL_HEIGHT)\n      );\n      this._panel.style.maxHeight = `${cap}px`;\n      this._panel.style.height = '';\n    } else {\n      // Default: size to content, growing up to the available space and\n      // scrolling the content area on overflow. No explicit height is set so\n      // the panel can shrink to fit short content and stay reducible.\n      this._panel.style.maxHeight = `${availableHeight}px`;\n      this._panel.style.height = '';\n    }\n  }\n\n  /** Minimum panel width when resizing (px). */\n  private static readonly MIN_PANEL_WIDTH = 240;\n  /** Minimum panel height when resizing (px). */\n  private static readonly MIN_PANEL_HEIGHT = 160;\n\n  /**\n   * Adds drag handles in the panel's bottom-left and bottom-right corners.\n   * Pointer drags resize the panel and the chosen size is kept (in\n   * {@link _userPanelWidth}/{@link _userPanelHeight}) so repositioning does\n   * not reset it.\n   *\n   * @param panel - The panel element to attach handles to\n   */\n  private _addResizeHandles(panel: HTMLElement): void {\n    for (const side of ['left', 'right'] as const) {\n      const handle = document.createElement('div');\n      handle.className = `lidar-control-resize-handle lidar-control-resize-${side}`;\n      handle.setAttribute('aria-hidden', 'true');\n      handle.addEventListener('pointerdown', (event) =>\n        this._beginResize(event, side, panel, handle)\n      );\n      panel.appendChild(handle);\n    }\n  }\n\n  /**\n   * Starts a pointer-driven resize from one of the bottom-corner handles.\n   *\n   * The panel is first frozen to explicit left/top pixels (clearing any\n   * right/bottom anchor) so the opposite edge stays put no matter which\n   * corner the control sits in. The right handle then grows the panel\n   * rightward, the left handle leftward; both grow it downward. Sizes are\n   * clamped to a sensible minimum and to the map container, and the chosen\n   * size is stored in {@link _userPanelWidth}/{@link _userPanelHeight} so\n   * {@link _updatePanelPosition} reapplies it on later repositioning.\n   *\n   * @param event - The pointerdown event\n   * @param side - Which corner handle started the drag\n   * @param panel - The panel element being resized\n   * @param handle - The handle element (for pointer capture)\n   */\n  private _beginResize(\n    event: PointerEvent,\n    side: 'left' | 'right',\n    panel: HTMLElement,\n    handle: HTMLElement\n  ): void {\n    if (!this._mapContainer) return;\n    event.preventDefault();\n    // Keep the drag from bubbling to the document click-outside handler.\n    event.stopPropagation();\n\n    const mapRect = this._mapContainer.getBoundingClientRect();\n    const rect = panel.getBoundingClientRect();\n    const startX = event.clientX;\n    const startY = event.clientY;\n    const startWidth = rect.width;\n    const startHeight = rect.height;\n    const startLeft = rect.left - mapRect.left;\n    const startRight = rect.right;\n    const startTop = rect.top;\n\n    const EDGE_MARGIN = 10;\n    // Clamp the preferred minimums to what the map can actually hold, so a\n    // small map container never forces the panel past its edges.\n    const minWidth = Math.min(\n      LidarControl.MIN_PANEL_WIDTH,\n      Math.max(120, mapRect.width - 2 * EDGE_MARGIN)\n    );\n    const minHeight = Math.min(\n      LidarControl.MIN_PANEL_HEIGHT,\n      Math.max(120, mapRect.height - 2 * EDGE_MARGIN)\n    );\n\n    // Pin the panel to its current rect so the size grows from the dragged\n    // corner regardless of the original anchor, and drop the CSS max-size\n    // caps for the duration of the drag.\n    panel.style.left = `${startLeft}px`;\n    panel.style.top = `${startTop - mapRect.top}px`;\n    panel.style.right = '';\n    panel.style.bottom = '';\n    panel.style.maxWidth = 'none';\n    panel.style.maxHeight = 'none';\n\n    const onMove = (moveEvent: PointerEvent): void => {\n      const dx = moveEvent.clientX - startX;\n      const dy = moveEvent.clientY - startY;\n\n      const maxHeight = Math.max(minHeight, mapRect.bottom - startTop - EDGE_MARGIN);\n      const nextHeight = Math.max(minHeight, Math.min(startHeight + dy, maxHeight));\n\n      let nextWidth: number;\n      let nextLeft = startLeft;\n      if (side === 'right') {\n        const maxWidth = Math.max(minWidth, mapRect.right - rect.left - EDGE_MARGIN);\n        nextWidth = Math.max(minWidth, Math.min(startWidth + dx, maxWidth));\n      } else {\n        const maxWidth = Math.max(minWidth, startRight - mapRect.left - EDGE_MARGIN);\n        nextWidth = Math.max(minWidth, Math.min(startWidth - dx, maxWidth));\n        // Hold the right edge fixed while the left edge follows the drag.\n        nextLeft = startLeft + (startWidth - nextWidth);\n      }\n\n      panel.style.width = `${nextWidth}px`;\n      panel.style.height = `${nextHeight}px`;\n      panel.style.left = `${nextLeft}px`;\n      this._userPanelWidth = nextWidth;\n      this._userPanelHeight = nextHeight;\n    };\n\n    const cleanup = (): void => {\n      handle.releasePointerCapture?.(event.pointerId);\n      handle.removeEventListener('pointermove', onMove);\n      handle.removeEventListener('pointerup', cleanup);\n      handle.removeEventListener('pointercancel', cleanup);\n      this._panelResizeCleanup = null;\n    };\n\n    handle.setPointerCapture?.(event.pointerId);\n    handle.addEventListener('pointermove', onMove);\n    handle.addEventListener('pointerup', cleanup);\n    handle.addEventListener('pointercancel', cleanup);\n    this._panelResizeCleanup = cleanup;\n  }\n\n  /**\n   * Applies a color theme by toggling a class on the document root. Using the\n   * root element (rather than the control) ensures panels and modals appended\n   * to <body> inherit the same theme variables. `'auto'` removes the override\n   * classes so the CSS `prefers-color-scheme` media query takes effect.\n   *\n   * @param theme - The theme to apply\n   */\n  private _applyTheme(theme: 'auto' | 'light' | 'dark'): void {\n    if (typeof document === 'undefined') return;\n    const root = document.documentElement;\n    root.classList.remove('lidar-theme-light', 'lidar-theme-dark');\n    if (theme === 'dark') {\n      root.classList.add('lidar-theme-dark');\n    } else if (theme === 'light') {\n      root.classList.add('lidar-theme-light');\n    }\n  }\n\n  /**\n   * Sets the color theme of the control at runtime.\n   *\n   * @param theme - `'auto'` (follow OS), `'light'`, or `'dark'`\n   */\n  setTheme(theme: 'auto' | 'light' | 'dark'): void {\n    this._options.theme = theme;\n    this._applyTheme(theme);\n    // Canvas charts resolve their colors from CSS variables, so redraw them.\n    this._crossSectionPanel?.refreshTheme();\n  }\n\n  /**\n   * Returns the currently configured theme.\n   */\n  getTheme(): 'auto' | 'light' | 'dark' {\n    return this._options.theme;\n  }\n\n  // ==================== Metadata Viewer API ====================\n\n  /**\n   * Gets the full metadata for a point cloud.\n   *\n   * @param id - Point cloud ID. If not provided, returns metadata for the active point cloud.\n   * @returns Full metadata or undefined if not available\n   */\n  getFullMetadata(id?: string): PointCloudFullMetadata | undefined {\n    const targetId = id ?? this._state.activePointCloudId;\n    if (!targetId) return undefined;\n    return this._fullMetadata.get(targetId);\n  }\n\n  /**\n   * Shows the metadata panel for a point cloud.\n   *\n   * @param id - Point cloud ID. If not provided, shows metadata for the active point cloud.\n   */\n  showMetadataPanel(id?: string): void {\n    const targetId = id ?? this._state.activePointCloudId;\n    if (!targetId) return;\n\n    // Build metadata if not cached\n    let metadata = this._fullMetadata.get(targetId);\n    if (!metadata) {\n      metadata = this._buildFullMetadata(targetId);\n      if (metadata) {\n        this._fullMetadata.set(targetId, metadata);\n      }\n    }\n\n    if (!metadata) return;\n\n    // Create panel if needed\n    if (!this._metadataPanel) {\n      this._metadataPanel = new MetadataPanel({\n        onClose: () => {\n          // Panel handles its own cleanup\n        },\n      });\n    }\n\n    this._metadataPanel.show(metadata);\n  }\n\n  /**\n   * Hides the metadata panel.\n   */\n  hideMetadataPanel(): void {\n    this._metadataPanel?.hide();\n  }\n\n  /**\n   * Builds full metadata for a point cloud.\n   *\n   * @param id - Point cloud ID\n   * @returns Full metadata or undefined\n   */\n  private _buildFullMetadata(id: string): PointCloudFullMetadata | undefined {\n    const basic = this._state.pointClouds.find(pc => pc.id === id);\n    if (!basic) return undefined;\n\n    // Check if this is a COPC streaming dataset\n    const copcLoader = this._streamingLoaders.get(id);\n    if (copcLoader) {\n      const copcMeta = copcLoader.getCopcMetadata();\n      return {\n        type: 'copc',\n        copc: copcMeta,\n        basic: { ...basic, wkt: copcLoader.getWkt() ?? basic.wkt },\n      };\n    }\n\n    // Check if this is an EPT streaming dataset\n    const eptLoader = this._eptStreamingLoaders.get(id);\n    if (eptLoader) {\n      const eptMeta = eptLoader.getExtendedMetadata();\n      return {\n        type: 'ept',\n        ept: eptMeta,\n        basic,\n      };\n    }\n\n    // Default to LAS type for non-streaming datasets\n    return {\n      type: 'las',\n      basic,\n    };\n  }\n\n  // ==================== Cross-Section API ====================\n\n  /**\n   * Enables cross-section drawing mode.\n   */\n  enableCrossSection(): void {\n    if (!this._map) return;\n\n    // Initialize cross-section tool if needed\n    if (!this._crossSectionTool && this._deckOverlay) {\n      this._crossSectionTool = new CrossSectionTool(this._map, this._deckOverlay);\n      this._crossSectionTool.setOnLineChange((line) => {\n        this._handleCrossSectionLineChange(line);\n      });\n    }\n\n    this._crossSectionTool?.enable();\n    this._crossSectionPanel?.setDrawing(true);\n  }\n\n  /**\n   * Disables cross-section drawing mode.\n   */\n  disableCrossSection(): void {\n    this._crossSectionTool?.disable();\n    this._crossSectionPanel?.setDrawing(false);\n  }\n\n  /**\n   * Checks if cross-section mode is enabled.\n   *\n   * @returns True if enabled\n   */\n  isCrossSectionEnabled(): boolean {\n    return this._crossSectionTool?.isEnabled() ?? false;\n  }\n\n  /**\n   * Gets the current cross-section elevation profile.\n   *\n   * @returns Elevation profile or null if not available\n   */\n  getCrossSectionProfile(): ElevationProfile | null {\n    return this._currentProfile;\n  }\n\n  /**\n   * Sets the cross-section buffer distance.\n   *\n   * @param meters - Buffer distance in meters\n   */\n  setCrossSectionBufferDistance(meters: number): void {\n    this._crossSectionTool?.setBufferDistance(meters);\n    this._crossSectionPanel?.setBufferDistance(meters);\n    // Re-extract profile if line exists\n    const line = this._crossSectionTool?.getLine();\n    if (line) {\n      this._extractElevationProfile(line);\n    }\n  }\n\n  /**\n   * Gets the current cross-section buffer distance.\n   *\n   * @returns Buffer distance in meters\n   */\n  getCrossSectionBufferDistance(): number {\n    return this._crossSectionTool?.getBufferDistance() ?? 10;\n  }\n\n  /**\n   * Clears the current cross-section.\n   */\n  clearCrossSection(): void {\n    this._crossSectionTool?.clearLine();\n    this._currentProfile = null;\n    this._crossSectionPanel?.setProfile(null);\n  }\n\n  /**\n   * Gets the current cross-section line.\n   *\n   * @returns Cross-section line or null\n   */\n  getCrossSectionLine(): CrossSectionLine | null {\n    return this._crossSectionTool?.getLine() ?? null;\n  }\n\n  /**\n   * Handles cross-section line changes.\n   *\n   * @param line - New line or null if cleared\n   */\n  private _handleCrossSectionLineChange(line: CrossSectionLine | null): void {\n    if (line) {\n      this._extractElevationProfile(line);\n      // Disable drawing mode after line is complete\n      this._crossSectionTool?.disable();\n      this._crossSectionPanel?.setDrawing(false);\n    } else {\n      this._currentProfile = null;\n      this._crossSectionPanel?.setProfile(null);\n    }\n  }\n\n  /**\n   * Extracts elevation profile for the current cross-section line.\n   *\n   * @param line - Cross-section line\n   */\n  private _extractElevationProfile(line: CrossSectionLine): void {\n    // Get point cloud data from the manager\n    const pointCloudData = this._pointCloudManager?.getMergedPointCloudData();\n    if (!pointCloudData || pointCloudData.pointCount === 0) {\n      this._currentProfile = null;\n      this._crossSectionPanel?.setProfile(null);\n      return;\n    }\n\n    // Extract profile\n    this._currentProfile = ElevationProfileExtractor.extract(\n      line,\n      pointCloudData,\n      pointCloudData.coordinateOrigin as [number, number, number]\n    );\n\n    this._crossSectionPanel?.setProfile(this._currentProfile);\n  }\n\n  /**\n   * Gets the cross-section panel for adding to the UI.\n   * Creates the panel if it doesn't exist.\n   *\n   * @returns CrossSectionPanel instance\n   */\n  getCrossSectionPanel(): CrossSectionPanel {\n    if (!this._crossSectionPanel) {\n      this._crossSectionPanel = new CrossSectionPanel({\n        onDrawToggle: (enabled) => {\n          if (enabled) {\n            this.enableCrossSection();\n          } else {\n            this.disableCrossSection();\n          }\n        },\n        onClear: () => this.clearCrossSection(),\n        onBufferDistanceChange: (meters) => this.setCrossSectionBufferDistance(meters),\n      }, {\n        colormap: this._state.colormap,\n      });\n    }\n    return this._crossSectionPanel;\n  }\n\n  getPanelElement(): HTMLElement | null {\n    return this._panel ?? null;\n  }\n}\n","import type { CustomLayerAdapter, LayerState } from 'maplibre-gl-layer-control';\nimport type { LidarControl } from '../core/LidarControl';\n\n/**\n * Adapter for integrating LiDAR point cloud layers with maplibre-gl-layer-control.\n *\n * This adapter allows LiDAR point clouds to appear in the layer control panel,\n * enabling visibility toggles and opacity sliders for each loaded point cloud.\n *\n * @example\n * ```typescript\n * import { LidarControl, LidarLayerAdapter } from 'maplibre-gl-lidar';\n * import { LayerControl } from 'maplibre-gl-layer-control';\n *\n * const lidarControl = new LidarControl({ ... });\n * map.addControl(lidarControl, 'top-right');\n *\n * // Create adapter after adding lidar control\n * const lidarAdapter = new LidarLayerAdapter(lidarControl);\n *\n * // Add layer control with the adapter\n * const layerControl = new LayerControl({\n *   customLayerAdapters: [lidarAdapter],\n * });\n * map.addControl(layerControl, 'top-left');\n * ```\n */\nexport class LidarLayerAdapter implements CustomLayerAdapter {\n  readonly type = 'lidar';\n\n  private _lidarControl: LidarControl;\n  private _changeCallbacks: Array<(event: 'add' | 'remove', layerId: string) => void> = [];\n  private _unsubscribe?: () => void;\n\n  /**\n   * Creates a new LidarLayerAdapter.\n   *\n   * @param lidarControl - The LidarControl instance to adapt\n   */\n  constructor(lidarControl: LidarControl) {\n    this._lidarControl = lidarControl;\n    this._setupEventListeners();\n  }\n\n  /**\n   * Sets up event listeners on the LidarControl to detect layer changes.\n   */\n  private _setupEventListeners(): void {\n    // Listen for load and unload events\n    const handleLoad = (event: { pointCloud?: { id: string } }) => {\n      if (event.pointCloud?.id) {\n        this._notifyLayerAdded(event.pointCloud.id);\n      }\n    };\n\n    const handleUnload = (event: { pointCloud?: { id: string } }) => {\n      if (event.pointCloud?.id) {\n        this.notifyLayerRemoved(event.pointCloud.id);\n      }\n    };\n\n    this._lidarControl.on('load', handleLoad as any);\n    this._lidarControl.on('unload', handleUnload as any);\n\n    this._unsubscribe = () => {\n      this._lidarControl.off('load', handleLoad as any);\n      this._lidarControl.off('unload', handleUnload as any);\n    };\n  }\n\n  /**\n   * Gets all layer IDs managed by this adapter.\n   *\n   * @returns Array of point cloud layer IDs\n   */\n  getLayerIds(): string[] {\n    return this._lidarControl.getPointClouds().map((pc) => pc.id);\n  }\n\n  /**\n   * Gets the current state of a layer.\n   *\n   * @param layerId - Point cloud ID\n   * @returns LayerState or null if not found\n   */\n  getLayerState(layerId: string): LayerState | null {\n    const pointClouds = this._lidarControl.getPointClouds();\n    const pc = pointClouds.find((p) => p.id === layerId);\n    if (!pc) return null;\n\n    // Access the point cloud manager through internal state\n    const state = this._lidarControl.getState();\n    const manager = (this._lidarControl as any)._pointCloudManager;\n\n    const visible = manager?.getPointCloudVisibility(layerId) ?? true;\n    const opacity = manager?.getPointCloudOpacity(layerId) ?? state.opacity;\n\n    return {\n      visible,\n      opacity,\n      name: this.getName(layerId),\n      isCustomLayer: true,\n      customLayerType: 'lidar',\n    };\n  }\n\n  /**\n   * Sets layer visibility.\n   *\n   * @param layerId - Point cloud ID\n   * @param visible - Whether the layer should be visible\n   */\n  setVisibility(layerId: string, visible: boolean): void {\n    const manager = (this._lidarControl as any)._pointCloudManager;\n    manager?.setPointCloudVisibility(layerId, visible);\n  }\n\n  /**\n   * Sets layer opacity.\n   *\n   * @param layerId - Point cloud ID\n   * @param opacity - Opacity value (0-1)\n   */\n  setOpacity(layerId: string, opacity: number): void {\n    const manager = (this._lidarControl as any)._pointCloudManager;\n    manager?.setPointCloudOpacity(layerId, opacity);\n  }\n\n  /**\n   * Gets display name for a layer.\n   *\n   * @param layerId - Point cloud ID\n   * @returns Display name for the layer\n   */\n  getName(layerId: string): string {\n    const pointClouds = this._lidarControl.getPointClouds();\n    const pc = pointClouds.find((p) => p.id === layerId);\n    if (pc) {\n      return pc.name;\n    }\n    // Generate friendly name from ID\n    return layerId.replace(/[-_]/g, ' ').replace(/\\b\\w/g, (c) => c.toUpperCase());\n  }\n\n  /**\n   * Gets layer symbol type for UI display.\n   *\n   * @param _layerId - Point cloud ID (unused)\n   * @returns Symbol type string\n   */\n  getSymbolType(_layerId: string): string {\n    // Use 'circle' symbol for point clouds\n    return 'circle';\n  }\n\n  /**\n   * Removes a layer from the map by unloading the point cloud.\n   *\n   * @param layerId - Point cloud ID to remove\n   */\n  removeLayer(layerId: string): void {\n    this._lidarControl.unloadPointCloud(layerId);\n  }\n\n  /**\n   * Subscribes to layer changes (add/remove).\n   *\n   * @param callback - Function to call when layers are added or removed\n   * @returns Unsubscribe function\n   */\n  onLayerChange(callback: (event: 'add' | 'remove', layerId: string) => void): () => void {\n    this._changeCallbacks.push(callback);\n    return () => {\n      const idx = this._changeCallbacks.indexOf(callback);\n      if (idx >= 0) this._changeCallbacks.splice(idx, 1);\n    };\n  }\n\n  /**\n   * Notifies subscribers that a layer was added.\n   *\n   * @param layerId - ID of the added layer\n   */\n  private _notifyLayerAdded(layerId: string): void {\n    this._changeCallbacks.forEach((cb) => cb('add', layerId));\n  }\n\n  /**\n   * Notifies subscribers that a layer was removed.\n   * Currently unused as unload events don't provide specific layer IDs.\n   *\n   * @param layerId - ID of the removed layer\n   */\n  notifyLayerRemoved(layerId: string): void {\n    this._changeCallbacks.forEach((cb) => cb('remove', layerId));\n  }\n\n  /**\n   * Cleans up event listeners.\n   */\n  destroy(): void {\n    this._unsubscribe?.();\n    this._changeCallbacks = [];\n  }\n}\n"],"x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203],"mappings":"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AC/B,EAAG,IAAI,KAAM,KAAK,EAAG,IAAI,KAAM;GAC/B,EAAG,IAAI,KAAM,KAAK,EAAG,IAAI,KAAM;GAC/B,EAAG,IAAI,KAAM,KAAK,EAAG,IAAI,KAAM;GAC/B,EAAG,IAAI,KAAM,KAAK,EAAG,IAAI,KAAM;GAC/B,EAAG,IAAI,KAAM,KAAK,EAAG,IAAI,KAAM;GAC/B,EAAE,KAAK,KAAK;GACZ,EAAE,KAAK,KAAK,EAAE,KAAK;GACnB,EAAG,IAAI,KAAM,KAAK,EAAG,IAAI,KAAM;GAC/B,EAAG,IAAI,KAAM,KAAK,EAAG,IAAI,KAAM;GAC/B,EAAG,IAAI,KAAM,KAAK,EAAG,IAAI,KAAM;GAC/B,EAAG,IAAI,KAAM,KAAK,EAAG,IAAI,KAAM;GAC/B,EAAG,IAAI,KAAM,KAAK,EAAG,IAAI,KAAM;GAC/B,EAAG,IAAI,KAAM,KAAK,EAAG,IAAI,KAAM;GAC/B,EAAG,IAAI,KAAM,KAAK,EAAG,IAAI,KAAM;GAC/B,EAAE,KAAK,KAAK;GACZ,EAAE,KAAK,KAAK,EAAE,KAAK;GACnB,EAAG,IAAI,KAAM,KAAK,EAAG,IAAI,KAAM;GAC/B,EAAG,IAAI,KAAM,KAAK,EAAG,IAAI,KAAM;GAC/B,EAAG,IAAI,KAAM,KAAK,EAAG,IAAI,KAAM;GAC/B,EAAG,IAAI,KAAM,KAAK,EAAG,IAAI,KAAM;GAC/B,EAAG,IAAI,KAAM,KAAK,EAAG,IAAI,KAAM;GAC/B,EAAG,IAAI,KAAM,KAAK,EAAG,IAAI,KAAM;GAC/B,EAAG,IAAI,KAAM,KAAK,EAAG,IAAI,KAAM;GAC/B,EAAE,KAAK,KAAK;GACZ,EAAE,KAAK,KAAK,EAAE,KAAK;GACnB,EAAG,IAAI,KAAM,KAAK,EAAG,IAAI,KAAM;GAC/B,EAAG,IAAI,KAAM,KAAK,EAAG,IAAI,KAAM;GAC/B,EAAG,IAAI,KAAM,KAAK,EAAG,IAAI,KAAM;GAC/B,EAAG,IAAI,KAAM,KAAK,EAAG,IAAI,KAAM;GAC/B,EAAG,IAAI,KAAM,KAAK,EAAG,IAAI,KAAM;GAC/B,EAAG,IAAI,KAAM,KAAK,EAAG,IAAI,KAAM;GAC/B,EAAG,IAAI,KAAM,KA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X;EACA,SAAS,KAAK;GACV,OAAO;EACX;EACA,SAAS,KAAK;GACV,OAAO,GAAG,IAAI;EAClB;EACA,SAAS,KAAK;GACV,OAAO;EACX;EACA,SAAS,KAAK;GACV,OAAO;EACX;EACA,SAAS,KAAK;GACV,OAAO,GAAG,IAAI;EAClB;EACA,SAAS,KAAK;GACV,OAAO;EACX;EACA,SAAS,KAAK;GACV,OAAO;EACX;EACA,SAAS,KAAK;GACV,OAAO,GAAG,IAAI;EAClB;EACA,SAAS,KAAK;GACV,OAAO;EACX;EACA,SAAS,KAAK;GACV,OAAO;EACX;EACA,SAAS,KAAK;GACV,OAAO,GAAG,IAAI;EAClB;EACA,SAAS,KAAK;GACV,OAAO;EACX;EACA,SAAS,KAAK;GACV,OAAO;EACX;EACA,SAAS,KAAK;GACV,OAAO,GAAG,IAAI;EAClB;EACA,SAAS,KAAK;GACV,OAAO;EACX;EACA,SAAS,KAAK;GACV,OAAO;EACX;EACA,SAAS,KAAK;GACV,OAAO,GAAG,IAAI;EAClB;EACA,SAAS,KAAK;GACV,OAAO;EACX;EACA,SAAS,KAAK;GACV,OAAO;EACX;EACA,SAAS,KAAK;GACV,OAAO;EACX;EACA,SAAS,KAAK;GACV,OAAO;EACX;EACA,SAAS,KAAK;GACV,OAAO;EACX;EACA,SAAS,KAAK;GACV,OAAO;EACX;EACA,SAAS,KAAK;GACV,OAAO;EACX;EACA,SAAS,KAAK;GACV,OAAO;EACX;EACA,SAAS,KAAK;GACV,OAAO,GAAG,IAAI;EAClB;EACA,SAAS,KAAK;GACV,OAAO;EACX;EACA,SAAS,KAAK;GACV,OAAO,GAAG,IAAI;EAClB;EACA,SAAS,KAAK;GACV,OAAO;EACX;EACA,SAAS,KAAK;GACV,OAAO,GAAG,IAAI;EAClB;EACA,SAAS,KAAK;GACV,OAAO;EACX;EACA,SAAS,KAAK;GACV,OAAO,GAAG,IAAI;EAClB;EACA,SAAS,KAAK;GACV,OAAO;EACX;EACA,SAAS,KAAK;GACV,OAAO,GAAG,IAAI;EAClB;EACA,SAAS,KAAK;GACV,OAAO;EACX;EACA,SAAS,KAAK;GACV,OAAO,GA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A;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACJ;EACA,IAAI,KAAK;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EACxC,IAAI,KAAK;GAAC;GAAI;GAAI;GAAI;EAAE;EACxB,IAAI,KAAK;GACL;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;G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;EACT,SAAS;EACT,WAAW;CACb;CACA,WAAW,EACT,SAAS,kDACX;CACA,aAAa,EACX,SAAS,sDACX;CACA,WAAW,EACT,SAAS,qEACX;CACA,WAAW,EACT,SAAS,sDACX;CACA,YAAY,EACV,SAAS,qDACX;CACA,YAAY,EACV,SAAS,oDACX;CACA,YAAY,EACV,SAAS,mDACX;CACA,WAAW,EACT,SAAS,8CACX;CACA,WAAW,EACT,SAAS,qDACX;CACA,WAAW,EACT,SAAS,sDACX;CACA,WAAW,EACT,SAAS,sDACX;CACA,WAAW,EACT,SAAS,2CACX;CACA,WAAW,EACT,SAAS,iDACX;CACA,WAAW,EACT,SAAS,2DACX;CACA,WAAW,EACT,SAAS,gDACX;CACA,WAAW,EACT,SAAS,wDACX;CACA,WAAW,EACT,SAAS,+CACX;CACA,WAAW,EACT,SAAS,wDACX;CACA,WAAW,EACT,SAAS,mDACX;CACA,WAAW,EACT,SAAS,mDACX;CACA,WAAW,EACT,SAAS,6CACX;CACA,WAAW,EACT,SAAS,0CACX;CACA,WAAW,EACT,SAAS,2DACX;CACA,WAAW,EACT,SAAS,iEACX;CACA,WAAW,EACT,SAAS,iDACX;CACA,WAAW,EACT,SAAS,0BACX;CACA,WAAW,EACT,SAAS,0CACX;CACA,WAAW,EACT,SAAS,+CACX;CACA,WAAW,EACT,SAAS,8CACX;CACA,WAAW,EACT,SAAS,2DACX;CACA,WAAW,EACT,SAAS,2BACX;CACA,WAAW,EACT,SAAS,iBACX;CACA,WAAW,EACT,SAAS,eACX;CACA,WAAW,EACT,SAAS,oEACX;CACA,WAAW,EACT,SAAS,yDACX;CACA,WAAW,EACT,SAAS,4DACX;CACA,WAAW,EACT,SAAS,6DACX;CACA,WAAW,EACT,SAAS,+CACX;CACA,WAAW,EACT,SAAS,+CACX;CACA,WAAW,EACT,SAAS,kEACX;CACA,WAAW,EACT,SAAS,wDACX;CACA,WAAW,EACT,SAAS,kEACX;CACA,WAAW,EACT,SAAS,2DACX;CACA,WAAW,EACT,SAAS,sDACX;CACA,WAAW,EACT,SAAS,qDACX;CACA,WAAW,EACT,SAAS,oDACX;CACA,WAAW,EACT,SAAS,sDACX;CACA,WAAW,EACT,SAAS,wDACX;CACA,WAAW,EACT,SAAS,qDACX;CACA,WAAW,EACT,SAAS,uCACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,qDACX;CACA,WAAW,EACT,SAAS,oDACX;CACA,WAAW,EACT,SAAS,sDACX;CACA,aAAa,EACX,SAAS,sDACX;CACA,WAAW,EACT,SAAS,2BACX;CACA,WAAW,EACT,SAAS,UACX;CACA,WAAW,EACT,SAAS,UACX;CACA,WAAW,EACT,SAAS,oDACX;CACA,WAAW,EACT,SAAS,mDACX;CACA,WAAW,EACT,SAAS,4CACX;CACA,WAAW,EACT,SAAS,6DACX;CACA,WAAW,EACT,SAAS,wDACX;CACA,WAAW,EACT,SAAS,UACX;CACA,WAAW,EACT,SAAS,uCACX;CACA,WAAW,EACT,SAAS,sBACX;CACA,WAAW,EACT,SAAS,uCACX;CACA,aAAa,EACX,SAAS,8CACX;CACA,WAAW,EACT,SAAS,8CACX;CACA,WAAW,EACT,SAAS,+CACX;CACA,WAAW,EACT,SAAS,kEACX;CACA,WAAW,EACT,SAAS,2DACX;CACA,WAAW,EACT,SAAS,oBACX;CACA,WAAW,EACT,SAAS,oBACX;CACA,WAAW,EACT,SAAS,0BACX;CACA,WAAW,EACT,SAAS,aACX;CACA,WAAW,EACT,SAAS,gDACX;CACA,WAAW,EACT,SAAS,cACX;CACA,WAAW,EACT,SAAS,gBACX;CACA,WAAW,EACT,SAAS,qDACX;CACA,WAAW,EACT,SAAS,mDACX;CACA,WAAW,EACT,SAAS,uDACX;CACA,WAAW,EACT,SAAS,iDACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,yDACX;CACA,WAAW,EACT,SAAS,qDACX;CACA,WAAW,EACT,SAAS,qDACX;CACA,WAAW,EACT,SAAS,8DACX;CACA,WAAW,EACT,SAAS,0DACX;CACA,WAAW,EACT,SAAS,sDACX;CACA,WAAW,EACT,SAAS,uDACX;CACA,WAAW,EACT,SAAS,mBACX;CACA,WAAW,EACT,SAAS,iEACX;CACA,WAAW,EACT,SAAS,0DACX;CACA,WAAW,EACT,SAAS,uDACX;CACA,WAAW,EACT,SAAS,oDACX;CACA,WAAW,EACT,SAAS,sDACX;CACA,WAAW,EACT,SAAS,uBACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,sDACX;CACA,WAAW,EACT,SAAS,yBACX;CACA,WAAW,EACT,SAAS,iDACX;CACA,WAAW,EACT,SAAS,sDACX;CACA,WAAW,EACT,SAAS,iDACX;CACA,WAAW,EACT,SAAS,sDACX;CACA,WAAW,EACT,SAAS,mDACX;CACA,WAAW,EACT,SAAS,4DACX;CACA,WAAW,EACT,SAAS,sDACX;CACA,WAAW,EACT,SAAS,mDACX;CACA,WAAW,EACT,SAAS,mBACX;CACA,WAAW,EACT,SAAS,4DACX;CACA,WAAW,EACT,SAAS,qBACX;CACA,WAAW,EACT,SAAS,iDACX;CACA,WAAW,EACT,SAAS,qDACX;CACA,aAAa,EACX,SAAS,mDACX;CACA,aAAa,EACX,SAAS,QACX;CACA,WAAW,EACT,SAAS,uBACX;CACA,WAAW,EACT,SAAS,eACX;CACA,WAAW,EACT,SAAS,mDACX;CACA,WAAW,EACT,SAAS,kDACX;CACA,WAAW,EACT,SAAS,sDACX;CACA,WAAW,EACT,SAAS,sBACX;CACA,WAAW,EACT,SAAS,iEACX;CACA,WAAW,EACT,SAAS,iEACX;CACA,WAAW,EACT,SAAS,6CACX;CACA,WAAW,EACT,SAAS,sBACX;CACA,WAAW,EACT,SAAS,cACX;CACA,WAAW,EACT,SAAS,4DACX;CACA,aAAa,EACX,SAAS,eACX;CACA,aAAa,EACX,SAAS,eACX;CACA,YAAY,EACV,SAAS,YACX;CACA,WAAW,EACT,SAAS,uBACX;CACA,aAAa,EACX,SAAS,2BACX;CACA,aAAa,EACX,SAAS,4BACX;CACA,aAAa,EACX,SAAS,oBACX;CACA,aAAa,EACX,SAAS,SACX;CACA,WAAW,EACT,SAAS,eACX;CACA,eAAe,EACb,SAAS,gBACX;CACA,aAAa,EACX,SAAS,oBACX;CACA,cAAc,EACZ,SAAS,gBACX;CACA,aAAa,EACX,SAAS,eACX;CACA,cAAc,EACZ,SAAS,gBACX;CACA,cAAc,EACZ,SAAS,cACX;CACA,aAAa,EACX,SAAS,YACX;CACA,cAAc,EACZ,SAAS,YACX;CACA,iBAAiB,EACf,SAAS,cACX;CACA,cAAc,EACZ,SAAS,gBACX;CACA,cAAc,EACZ,SAAS,gBACX;CACA,aAAa,EACX,SAAS,gBACX;CACA,aAAa,EACX,SAAS,eACX;CACA,YAAY,EACV,SAAS,aACX;CACA,eAAe,EACb,SAAS,uBACX;CACA,eAAe,EACb,SAAS,sBACX;CACA,cAAc,EACZ,SAAS,sBACX;CACA,aAAa,EACX,SAAS,mBACX;CACA,cAAc,EACZ,SAAS,wBACX;CACA,cAAc,EACZ,SAAS,uBACX;CACA,cAAc,EACZ,SAAS,gBACX;CACA,gBAAgB,EACd,SAAS,sBACX;CACA,cAAc,EACZ,SAAS,qBACX;CACA,cAAc,EACZ,SAAS,uBACX;CACA,cAAc,EACZ,SAAS,wBACX;CACA,WAAW,EACT,SAAS,yBACX;CACA,WAAW,EACT,SAAS,8BACX;CACA,aAAa,EACX,SAAS,uBACX;CACA,WAAW,EACT,SAAS,eACX;CACA,WAAW,EACT,SAAS,uBACX;CACA,WAAW,EACT,SAAS,yBACX;CACA,WAAW,EACT,SAAS,yBACX;CACA,WAAW,EACT,SAAS,qBACX;CACA,WAAW,EACT,SAAS,oBACX;CACA,WAAW,EACT,SAAS,qBACX;CACA,WAAW,EACT,SAAS,mBACX;CACA,WAAW,EACT,SAAS,sBACX;CACA,WAAW,EACT,SAAS,gBACX;CACA,WAAW,EACT,SAAS,uBACX;CACA,WAAW,EACT,SAAS,mBACX;CACA,WAAW,EACT,SAAS,yBACX;CACA,WAAW,EACT,SAAS,wBACX;CACA,WAAW,EACT,SAAS,uBACX;CACA,WAAW,EACT,SAAS,0BACX;CACA,WAAW,EACT,SAAS,4BACX;CACA,WAAW,EACT,SAAS,wBACX;CACA,WAAW,EACT,SAAS,0BACX;CACA,WAAW,EACT,SAAS,yBACX;CACA,WAAW,EACT,SAAS,qBACX;CACA,WAAW,EACT,SAAS,0BACX;CACA,WAAW,EACT,SAAS,iBACX;CACA,WAAW,EACT,SAAS,uBACX;CACA,WAAW,EACT,SAAS,yBACX;CACA,WAAW,EACT,SAAS,wBACX;CACA,WAAW,EACT,SAAS,0BACX;CACA,WAAW,EACT,SAAS,aACX;CACA,WAAW,EACT,SAAS,0BACX;CACA,WAAW,EACT,SAAS,oBACX;CACA,WAAW,EACT,SAAS,eACX;CACA,WAAW,EACT,SAAS,sBACX;CACA,WAAW,EACT,SAAS,sBACX;CACA,WAAW,EACT,SAAS,qBACX;CACA,WAAW,EACT,SAAS,sBACX;CACA,WAAW,EACT,SAAS,mBACX;CACA,WAAW,EACT,SAAS,oBACX;CACA,WAAW,EACT,SAAS,6BACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,eACX;CACA,WAAW,EACT,SAAS,cACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,0BACX;CACA,WAAW,EACT,SAAS,cACX;CACA,WAAW,EACT,SAAS,cACX;CACA,WAAW,EACT,SAAS,wBACX;CACA,WAAW,EACT,SAAS,uBACX;CACA,WAAW,EACT,SAAS,cACX;CACA,WAAW,EACT,SAAS,2BACX;CACA,WAAW,EACT,SAAS,0BACX;CACA,WAAW,EACT,SAAS,wBACX;CACA,WAAW,EACT,SAAS,uBACX;CACA,WAAW,EACT,SAAS,qBACX;CACA,WAAW,EACT,SAAS,aACX;CACA,WAAW,EACT,SAAS,aACX;CACA,WAAW,EACT,SAAS,uBACX;CACA,WAAW,EACT,SAAS,mBACX;CACA,WAAW,EACT,SAAS,oBACX;CACA,WAAW,EACT,SAAS,sBACX;CACA,WAAW,EACT,SAAS,eACX;CACA,WAAW,EACT,SAAS,eACX;CACA,WAAW,EACT,SAAS,eACX;CACA,WAAW,EACT,SAAS,eACX;CACA,WAAW,EACT,SAAS,aACX;CACA,WAAW,EACT,SAAS,eACX;CACA,WAAW,EACT,SAAS,aACX;CACA,WAAW,EACT,SAAS,aACX;CACA,WAAW,EACT,SAAS,eACX;CACA,WAAW,EACT,SAAS,iBACX;CACA,WAAW,EACT,SAAS,YACX;CACA,WAAW,EACT,SAAS,aACX;CACA,WAAW,EACT,SAAS,2BACX;CACA,WAAW,EACT,SAAS,iBACX;CACA,WAAW,EACT,SAAS,cACX;CACA,WAAW,EACT,SAAS,cACX;CACA,WAAW,EACT,SAAS,cACX;CACA,WAAW,EACT,SAAS,YACX;CACA,WAAW,EACT,SAAS,eACX;CACA,WAAW,EACT,SAAS,YACX;CACA,WAAW,EACT,SAAS,wBACX;CACA,WAAW,EACT,SAAS,eACX;CACA,WAAW,EACT,SAAS,eACX;CACA,WAAW,EACT,SAAS,sBACX;CACA,WAAW,EACT,SAAS,gBACX;CACA,WAAW,EACT,SAAS,eACX;CACA,aAAa,EACX,SAAS,gBACX;CACA,WAAW,EACT,SAAS,YACX;CACA,WAAW,EACT,SAAS,cACX;CACA,WAAW,EACT,SAAS,eACX;CACA,WAAW,EACT,SAAS,eACX;CACA,WAAW,EACT,SAAS,iBACX;CACA,WAAW,EACT,SAAS,eACX;CACA,WAAW,EACT,SAAS,cACX;CACA,WAAW,EACT,SAAS,cACX;CACA,WAAW,EACT,SAAS,aACX;CACA,WAAW,EACT,SAAS,cACX;CACA,WAAW,EACT,SAAS,cACX;CACA,WAAW,EACT,SAAS,iBACX;CACA,WAAW,EACT,SAAS,YACX;CACA,WAAW,EACT,SAAS,aACX;CACA,WAAW,EACT,SAAS,YACX;CACA,WAAW,EACT,SAAS,gBACX;CACA,WAAW,EACT,SAAS,aACX;CACA,WAAW,EACT,SAAS,sBACX;CACA,WAAW,EACT,SAAS,aACX;CACA,WAAW,EACT,SAAS,cACX;CACA,WAAW,EACT,SAAS,gBACX;CACA,WAAW,EACT,SAAS,cACX;CACA,WAAW,EACT,SAAS,gBACX;CACA,WAAW,EACT,SAAS,cACX;CACA,WAAW,EACT,SAAS,cACX;CACA,WAAW,EACT,SAAS,eACX;CACA,WAAW,EACT,SAAS,aACX;CACA,WAAW,EACT,SAAS,cACX;CACA,WAAW,EACT,SAAS,eACX;CACA,WAAW,EACT,SAAS,gBACX;CACA,WAAW,EACT,SAAS,cACX;CACA,WAAW,EACT,SAAS,eACX;CACA,WAAW,EACT,SAAS,eACX;CACA,WAAW,EACT,SAAS,eACX;CACA,WAAW,EACT,SAAS,eACX;CACA,WAAW,EACT,SAAS,gBACX;CACA,WAAW,EACT,SAAS,cACX;CACA,WAAW,EACT,SAAS,cACX;CACA,WAAW,EACT,SAAS,eACX;CACA,WAAW,EACT,SAAS,gBACX;CACA,WAAW,EACT,SAAS,cACX;CACA,WAAW,EACT,SAAS,gBACX;CACA,WAAW,EACT,SAAS,eACX;CACA,WAAW,EACT,SAAS,iBACX;CACA,WAAW,EACT,SAAS,gBACX;CACA,WAAW,EACT,SAAS,eACX;CACA,WAAW,EACT,SAAS,gBACX;CACA,WAAW,EACT,SAAS,eACX;CACA,WAAW,EACT,SAAS,aACX;CACA,WAAW,EACT,SAAS,YACX;CACA,WAAW,EACT,SAAS,cACX;CACA,YAAY,EACV,SAAS,gBACX;CACA,YAAY,EACV,SAAS,aACX;CACA,YAAY,EACV,SAAS,gBACX;CACA,WAAW,EACT,SAAS,gBACX;CACA,aAAa,EACX,SAAS,eACX;CACA,WAAW,EACT,SAAS,aACX;CACA,WAAW,EACT,SAAS,eACX;CACA,WAAW,EACT,SAAS,gBACX;CACA,WAAW,EACT,SAAS,uBACX;CACA,WAAW,EACT,SAAS,gBACX;CACA,WAAW,EACT,SAAS,eACX;CACA,WAAW,EACT,SAAS,eACX;CACA,WAAW,EACT,SAAS,gBACX;CACA,eAAe,EACb,SAAS,QACX;CACA,eAAe,EACb,SAAS,QACX;CACA,iBAAiB,EACf,SAAS,QACX;CACA,kBAAkB,EAChB,SAAS,QACX;CACA,gBAAgB,EACd,SAAS,QACX;CACA,YAAY,EACV,SAAS,QACX;CACA,cAAc,EACZ,SAAS,QACX;CACA,cAAc,EACZ,SAAS,QACX;CACA,eAAe,EACb,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,aACX;CACA,YAAY,EACV,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,YAAY,EACV,SAAS,QACX;CACA,YAAY,EACV,SAAS,QACX;CACA,YAAY,EACV,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,YAAY,EACV,SAAS,QACX;CACA,YAAY,EACV,SAAS,QACX;CACA,YAAY,EACV,SAAS,QACX;CACA,YAAY,EACV,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,YAAY,EACV,SAAS,QACX;CACA,YAAY,EACV,SAAS,QACX;CACA,YAAY,EACV,SAAS,QACX;CACA,YAAY,EACV,SAAS,QACX;CACA,YAAY,EACV,SAAS,QACX;CACA,YAAY,EACV,SAAS,QACX;CACA,YAAY,EACV,SAAS,QACX;CACA,YAAY,EACV,SAAS,QACX;CACA,YAAY,EACV,SAAS,QACX;CACA,WAAW,EACT,SAAS,QACX;CACA,YAAY,EACV,SAAS,QACX;AACF;AAEA,KAAK,IAAI,OAAO,QAAQ;CACtB,IAAIC,UAAQ,O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"}