leaflet-city-mapper 0.0.6 → 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -6
- package/cucumber.mjs +1 -3
- package/dist/leaflet-city-mapper-src.js +8574 -7879
- package/dist/leaflet-city-mapper-src.js.map +4 -4
- package/dist/leaflet-city-mapper-worker-src.js +2776 -0
- package/dist/leaflet-city-mapper-worker-src.js.map +4 -4
- package/dist/leaflet-city-mapper-worker.js +1 -1
- package/dist/leaflet-city-mapper-worker.js.map +4 -4
- package/dist/leaflet-city-mapper.js +5 -3
- package/dist/leaflet-city-mapper.js.map +4 -4
- package/libs/leaflet-lens.js +44 -27
- package/libs/leaflet.js +4 -4
- package/libs/openlayers-bindings.js +2 -1
- package/libs/openlayers-bindings.min.js +1 -1
- package/libs/openlayers-bindings.min.js.map +3 -3
- package/package.json +2 -2
- package/src/camera/mapCamera.js +7 -7
- package/src/camera/mapTryAnimatedPan.js +4 -4
- package/src/camera/setBearing.js +5 -0
- package/src/camera/setPitch.js +5 -0
- package/src/camera/updateMapCamera.js +8 -6
- package/src/cog/initCog.js +2 -2
- package/src/controls/cameraControls.js +27 -22
- package/src/core/cameraCircleBounds.js +2 -1
- package/src/core/closestCameraLayerPoint.js +2 -1
- package/src/core/constructLayer.js +9 -0
- package/src/core/extendLeafletClass.js +5 -0
- package/src/core/extendTerrainPixelBounds.js +31 -0
- package/src/core/gridlayerGetTiledPixelBounds.js +12 -4
- package/src/core/layerAddInitHook.js +7 -0
- package/src/core/layerCallInitHooks.js +13 -13
- package/src/core/layerMergeOptions.js +7 -0
- package/src/core/markerSetPos.js +1 -1
- package/src/core/popupGetEvents.js +1 -1
- package/src/core/popupUpdatePosition.js +8 -8
- package/src/core/projectNativePath.js +23 -0
- package/src/core/tooltipGetEvents.js +1 -1
- package/src/core/tooltipSetPosition.js +2 -2
- package/src/geometry/appendNativeTriangle.js +2 -2
- package/src/geometry/circleGeometry.js +4 -3
- package/src/geometry/createModelGeometry.js +2 -9
- package/src/geometry/dashedSegment.js +10 -5
- package/src/geometry/disk.js +1 -1
- package/src/geometry/fillNativePolygon.js +20 -0
- package/src/geometry/lineJoin.js +2 -2
- package/src/geometry/markerQuadCorners.js +6 -0
- package/src/geometry/nativeGeometry.js +1 -1
- package/src/geometry/polygon.js +4 -10
- package/src/geometry/segment.js +4 -3
- package/src/globals/colorTexture.js +6 -0
- package/src/globals/depthTexture.js +1 -0
- package/src/globals/drawMeshEntry.js +1 -1
- package/src/globals/layerControlAddItem.js +3 -0
- package/src/globals/leafletLayer.js +3 -0
- package/src/globals/meshPipeline.js +1 -0
- package/src/globals/mvtTextDecoder.js +1 -0
- package/src/globals/nativeScalableStyleKeys.js +1 -0
- package/src/globals/scenePass.js +1 -0
- package/src/globals/vectorStyleNamedColors.js +8 -0
- package/src/globals/vectorTileEvents.js +1 -0
- package/src/globals/workerCogSource.js +1 -0
- package/src/gpu/initializeRendererResources.js +10 -12
- package/src/gpu/mountRenderer.js +4 -11
- package/src/gpu/releaseRenderer.js +1 -0
- package/src/index.js +31 -22
- package/src/layer-controls/layerControlInputId.js +11 -0
- package/src/layer-controls/placeEntry.js +2 -0
- package/src/materials/createProgram.js +7 -6
- package/src/materials/createProgramUniforms.js +1 -0
- package/src/models/loadModel.js +6 -10
- package/src/models/loadModelResources.js +2 -8
- package/src/models/modelNode.js +3 -7
- package/src/models/prepareModel.js +19 -0
- package/src/models/prepareModelGeometry.js +25 -0
- package/src/models/prepareModelPrimitive.js +17 -0
- package/src/mvt/addMvtCrossings.js +17 -0
- package/src/mvt/appendMvtBandTriangles.js +31 -0
- package/src/mvt/appendMvtCoordinates.js +11 -0
- package/src/mvt/appendMvtPolygonTriangles.js +19 -0
- package/src/mvt/beginMvtPath.js +9 -0
- package/src/mvt/closeMvtPath.js +7 -0
- package/src/mvt/collectMvtEdges.js +19 -0
- package/src/mvt/createMvtReader.js +7 -0
- package/src/mvt/decodeVectorTile.js +32 -0
- package/src/mvt/expectMvtWire.js +3 -0
- package/src/mvt/finishMvtPath.js +5 -0
- package/src/mvt/finiteMvtCoordinate.js +7 -0
- package/src/mvt/groupMvtPolygons.js +25 -0
- package/src/mvt/isMvtFallbackError.js +6 -0
- package/src/mvt/mergeMvtActiveEdges.js +9 -0
- package/src/mvt/mvtEdgeX.js +4 -0
- package/src/mvt/mvtPathsVertices.js +8 -0
- package/src/mvt/mvtPolygonPaths.js +12 -0
- package/src/mvt/numericMvtValue.js +4 -0
- package/src/mvt/readMvtFeature.js +34 -0
- package/src/mvt/readMvtField.js +8 -0
- package/src/mvt/readMvtGeometry.js +29 -0
- package/src/mvt/readMvtInteger.js +12 -0
- package/src/mvt/readMvtKnownValue.js +21 -0
- package/src/mvt/readMvtLayer.js +31 -0
- package/src/mvt/readMvtMessage.js +10 -0
- package/src/mvt/readMvtNumber.js +9 -0
- package/src/mvt/readMvtNumbers.js +11 -0
- package/src/mvt/readMvtString.js +6 -0
- package/src/mvt/readMvtValue.js +19 -0
- package/src/mvt/skipMvtField.js +14 -0
- package/src/mvt/sortMvtActiveEdges.js +15 -0
- package/src/mvt/sortedMvtLevels.js +22 -0
- package/src/mvt/takeMvtBytes.js +8 -0
- package/src/mvt/tessellateVectorRings.js +19 -0
- package/src/mvt/triangulateVectorRings.js +19 -0
- package/src/native/beforeNativeRender.js +6 -0
- package/src/native/canScaleNativeStyle.js +17 -0
- package/src/native/createNativeMesh.js +31 -0
- package/src/native/disposeNativeLayer.js +1 -1
- package/src/native/getGridTerrainTile.js +34 -0
- package/src/native/gridTerrainElevation.js +26 -0
- package/src/native/loadGridTerrain.js +26 -0
- package/src/native/nativeLayer.js +2 -2
- package/src/native/nativeLayerMethod.js +5 -14
- package/src/native/nativeProgram.js +20 -0
- package/src/native/nativeTerrainElevation.js +16 -0
- package/src/native/nativeVectorGeometry.js +23 -0
- package/src/native/orderNativeGridLayer.js +14 -0
- package/src/native/prepareGridTerrainRequests.js +16 -0
- package/src/native/putNativeMesh.js +15 -21
- package/src/native/refreshNativeEvent.js +13 -2
- package/src/native/refreshNativeLayer.js +1 -0
- package/src/native/retainGridTerrain.js +10 -0
- package/src/native/syncGridLayer.js +17 -19
- package/src/native/syncGridTile.js +18 -0
- package/src/native/syncNativeStrokeAnchors.js +12 -0
- package/src/native/syncNativeStrokeZoom.js +29 -0
- package/src/native/syncTerrainGridTile.js +28 -0
- package/src/native/syncVectorLayer.js +15 -13
- package/src/native/terrainGridMesh.js +34 -0
- package/src/native/updateNativeStrokeRadius.js +9 -0
- package/src/projections/displayContainerPoint.js +23 -3
- package/src/projections/groundBounds.js +2 -2
- package/src/projections/localPixel.js +7 -2
- package/src/projections/localPixelForGeometry.js +4 -2
- package/src/projections/projectCameraPoint.js +6 -5
- package/src/rendering/collectVisibleMesh.js +5 -2
- package/src/rendering/drawGeometry.js +11 -11
- package/src/rendering/drawSceneMeshes.js +3 -1
- package/src/rendering/nativeStrokeExpansion.js +4 -0
- package/src/rendering/prepareMeshUniforms.js +2 -0
- package/src/rendering/resizeRenderer.js +20 -10
- package/src/scene/initializerFor.js +4 -5
- package/src/scene/layerInitialize.js +14 -12
- package/src/scene/resolveNextInitialization.js +1 -1
- package/src/shaders/materialShaders.js +1 -0
- package/src/shaders/materialVertexShader.js +7 -2
- package/src/shaders/nativeStrokeShader.js +6 -0
- package/src/shadows/drawShadowMeshes.js +6 -5
- package/src/sources/attachAreaMesh.js +5 -6
- package/src/sources/buildArea.js +4 -5
- package/src/sources/buildAreaFeature.js +3 -19
- package/src/sources/initVectorTiles.js +15 -0
- package/src/sources/isVectorTileSource.js +4 -0
- package/src/sources/pumpSourceAreas.js +1 -1
- package/src/sources/readyVectorTiles.js +10 -0
- package/src/sources/sourceAreaContext.js +1 -6
- package/src/sunlight/createSun.js +0 -1
- package/src/sunlight/initSunlight.js +19 -8
- package/src/terrain/initTerrain.js +7 -1
- package/src/terrain/loadTerrain.js +4 -1
- package/src/terrain/mapElevationOf.js +5 -1
- package/src/terrain/onTerrainAdd.js +11 -1
- package/src/terrain/onTerrainRemove.js +10 -1
- package/src/textures/nativeTextureFor.js +2 -3
- package/src/textures/uploadCanvasTexture.js +11 -2
- package/src/utils/yieldTask.js +5 -0
- package/src/vector-style/appendQuotedStyleCharacter.js +22 -0
- package/src/vector-style/arrayContainsRange.js +8 -0
- package/src/vector-style/evaluateBoolean.js +18 -0
- package/src/vector-style/evaluateCoalesceOrCase.js +21 -0
- package/src/vector-style/evaluateComparison.js +16 -0
- package/src/vector-style/evaluateIExpression.js +8 -0
- package/src/vector-style/evaluateInput.js +6 -0
- package/src/vector-style/evaluateInterpolate.js +27 -0
- package/src/vector-style/evaluateMatch.js +12 -0
- package/src/vector-style/evaluateMath.js +14 -0
- package/src/vector-style/evaluateMembership.js +18 -0
- package/src/vector-style/evaluateNegation.js +13 -0
- package/src/vector-style/evaluatePrimitive.js +9 -0
- package/src/vector-style/evaluateStep.js +11 -0
- package/src/vector-style/evaluateStyle.js +33 -0
- package/src/vector-style/evaluateToExpression.js +14 -0
- package/src/vector-style/fillVectorPaint.js +17 -0
- package/src/vector-style/lineVectorPaint.js +21 -0
- package/src/vector-style/parseFunctionalColor.js +14 -0
- package/src/vector-style/parseHexColor.js +13 -0
- package/src/vector-style/parseVectorStyle.js +13 -0
- package/src/vector-style/readPaintValue.js +6 -0
- package/src/vector-style/removeTrailingCommas.js +12 -0
- package/src/vector-style/scaleDashArray.js +13 -0
- package/src/vector-style/skipStyleComment.js +9 -0
- package/src/vector-style/stripStyleComments.js +21 -0
- package/src/vector-style/styleColor.js +11 -0
- package/src/vector-style/validateVectorLayers.js +10 -0
- package/src/vector-style/vectorPaint.js +8 -0
- package/src/vector-style/visibleStyle.js +7 -0
- package/src/vector-tiles/appendVectorBatch.js +22 -0
- package/src/vector-tiles/attachVectorTileBatch.js +17 -0
- package/src/vector-tiles/attachVectorTileBatches.js +15 -0
- package/src/vector-tiles/compareVectorLabelPriority.js +3 -0
- package/src/vector-tiles/compareVectorTileDistance.js +3 -0
- package/src/vector-tiles/configureVectorTileLayer.js +28 -0
- package/src/vector-tiles/createVectorLabel.js +22 -0
- package/src/vector-tiles/forwardVectorTileError.js +5 -0
- package/src/vector-tiles/loadVectorSprite.js +5 -0
- package/src/vector-tiles/loadVectorTile.js +36 -0
- package/src/vector-tiles/onVectorTileAdd.js +39 -0
- package/src/vector-tiles/onVectorTileMessage.js +10 -0
- package/src/vector-tiles/onVectorTileRemove.js +20 -0
- package/src/vector-tiles/onVectorTileWorkerError.js +11 -0
- package/src/vector-tiles/paintVectorTileBatch.js +12 -0
- package/src/vector-tiles/prepareVectorLabel.js +25 -0
- package/src/vector-tiles/prepareVectorStyleLayer.js +30 -0
- package/src/vector-tiles/prepareVectorTile.js +16 -0
- package/src/vector-tiles/projectVectorPaths.js +15 -0
- package/src/vector-tiles/projectVectorPoint.js +6 -0
- package/src/vector-tiles/projectVectorTriangles.js +18 -0
- package/src/vector-tiles/pruneVectorTiles.js +11 -0
- package/src/vector-tiles/pumpVectorTiles.js +18 -0
- package/src/vector-tiles/readTileJSON.js +17 -0
- package/src/vector-tiles/readVectorStyle.js +17 -0
- package/src/vector-tiles/refreshVectorTiles.js +5 -0
- package/src/vector-tiles/reserveVectorLabelCells.js +6 -0
- package/src/vector-tiles/retireVectorTileGroup.js +13 -0
- package/src/vector-tiles/revokeVectorWorkerUrl.js +9 -0
- package/src/vector-tiles/rotateVectorLabel.js +12 -0
- package/src/vector-tiles/rotateVectorLabels.js +6 -0
- package/src/vector-tiles/simplifyVectorPath.js +21 -0
- package/src/vector-tiles/updateVectorLabelMarker.js +27 -0
- package/src/vector-tiles/updateVectorLabelStyle.js +8 -0
- package/src/vector-tiles/updateVectorTileLabels.js +28 -0
- package/src/vector-tiles/updateVectorTilePaint.js +20 -0
- package/src/vector-tiles/updateVectorTiles.js +29 -0
- package/src/vector-tiles/validateVectorTileZooms.js +6 -0
- package/src/vector-tiles/vectorFeaturePaint.js +15 -0
- package/src/vector-tiles/vectorFeaturePaths.js +16 -0
- package/src/vector-tiles/vectorFeatureZoom.js +8 -0
- package/src/vector-tiles/vectorLabelAnchors.js +24 -0
- package/src/vector-tiles/vectorLabelCandidates.js +11 -0
- package/src/vector-tiles/vectorLabelCells.js +23 -0
- package/src/vector-tiles/vectorLabelIcon.js +30 -0
- package/src/vector-tiles/vectorLabelProperty.js +3 -0
- package/src/vector-tiles/vectorLabelText.js +10 -0
- package/src/vector-tiles/vectorSpriteIcon.js +11 -0
- package/src/vector-tiles/vectorStraightRun.js +14 -0
- package/src/vector-tiles/vectorStyleDependencies.js +15 -0
- package/src/vector-tiles/vectorStyleValue.js +5 -0
- package/src/vector-tiles/vectorStyleZoom.js +6 -0
- package/src/vector-tiles/vectorTileAwaited.js +9 -0
- package/src/vector-tiles/vectorTileOverlaps.js +4 -0
- package/src/vector-tiles/vectorTilePaint.js +10 -0
- package/src/vector-tiles/vectorTileSettings.js +17 -0
- package/src/vector-tiles/vectorTilesIdle.js +3 -0
- package/src/vector-tiles/vectorTolerance.js +4 -0
- package/src/vector-tiles/wrapVectorLabel.js +11 -0
- package/src/walk/initWalk.js +19 -6
- package/src/weakmaps/nativeProgramsByRenderer.js +1 -0
- package/src/weakmaps/pathProjectionByMap.js +1 -0
- package/src/weakmaps/streamTerrainByLayer.js +1 -0
- package/src/weakmaps/streamTerrainByMap.js +1 -0
- package/src/weakmaps/vectorTileOptionsByLayer.js +1 -0
- package/src/weakmaps/vectorWorkerByLayer.js +1 -0
- package/src/weakmaps/workerMapByLayer.js +1 -0
- package/src/workers/buildAreaInWorker.js +3 -27
- package/src/workers/cogWorker.js +20 -0
- package/src/workers/createGeometryWorker.js +1 -0
- package/src/workers/geometryWorker.js +15 -0
- package/src/workers/getCogInWorker.js +7 -0
- package/src/workers/modelWorker.js +10 -0
- package/src/workers/openCogInWorker.js +14 -0
- package/src/workers/runSourceWorker.js +32 -0
- package/src/workers/settleGeometryWorker.js +1 -1
- package/src/workers/vectorTileWorker.js +10 -0
- package/src/geometry/buildExtrudedPolygon.js +0 -10
- package/src/globals/layerCallInitHooks.js +0 -1
- package/src/sources/buildAreaPoint.js +0 -7
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
(()=>{var L0=Object.defineProperty;var M=(e,t,r)=>()=>{if(r)throw r[0];try{return e&&(t=e(e=0)),t}catch(o){throw r=[o],o}};var B0=(e,t)=>{for(var r in t)L0(e,r,{get:t[r],enumerable:!0})};var h,b=M(()=>{h=globalThis.L});var T,X=M(()=>{T=Math.PI/180});var He,Yr=M(()=>{He=180/Math.PI});var nn,qs=M(()=>{nn=new WeakMap});function k(e){return nn.get(e)??0}var H=M(()=>{qs()});var an,Hs=M(()=>{an=new WeakMap});function S(e){return an.get(e)??0}var W=M(()=>{Hs()});var bo,ta=M(()=>{bo=Object.freeze({})});var je,oa=M(()=>{je=new WeakMap});function ia(){let e=this.getSize().y,t=k(this)*T,r=e*this.options.pitchMaxDistance,o=e*1.5,i=e/2-r*Math.abs(Math.cos(t))*o/(o+Math.sin(t)*r);i>0&&!je.get(this)&&(je.set(this,h.DomUtil.create("div","leaflet-pitch-sky",this.getContainer())),je.get(this).setAttribute("aria-hidden","true"),je.get(this).style.cssText="position:absolute;inset:0 0 auto;height:0;z-index:0;pointer-events:none;background:var(--leaflet-sky-background,linear-gradient(#9ec5e8,#dfe9f0))"),je.get(this)&&(je.get(this).style.inset=t>Math.PI/2?"auto 0 0":"0 0 auto",je.get(this).style.height=`${Math.max(0,Math.ceil(i))}px`,je.get(this).style.display=i>0?"":"none")}var ym=M(()=>{oa();b();X();H()});function ze(e,t,r){if(!Number.isFinite(t)||!Number.isFinite(r))throw new TypeError("Camera angles must be finite numbers");if(!Number.isFinite(e.options.maxPitch)||e.options.maxPitch<0||e.options.maxPitch>180)throw new TypeError("maxPitch must be between 0 and 180 degrees");let o=k(e),i=S(e);return nn.set(e,Math.max(0,Math.min(e.options.maxPitch,t))),an.set(e,(r%360+360)%360),e._loaded&&(ia.call(e),i!==S(e)&&e.fire("rotate",{bearing:S(e)}),o!==k(e)&&e.fire("pitch",{pitch:k(e)})),e}var or=M(()=>{Hs();qs();H();W();ym()});var Ot,na=M(()=>{Ot=new WeakMap});var Lo,aa=M(()=>{Lo=new WeakMap});var nr,sa=M(()=>{nr=new Map});var gt,ma=M(()=>{gt={value:null}});function Bo(e){nr.delete(e),Ot.set(e,null),Lo.set(e,null),!nr.size&>.value!==null&&(cancelAnimationFrame(gt.value),gt.value=null)}var fa=M(()=>{na();aa();sa();ma()});var kr,ca=M(()=>{kr=new WeakMap});var To,xm=M(()=>{To=new WeakMap});var xi,vm=M(()=>{xi=new WeakMap});var ar,vi=M(()=>{ar=new WeakMap});var sr,wi=M(()=>{sr=new WeakMap});var wm,_l=M(()=>{wm={value:void 0}});var Mm,Il=M(()=>{Mm={value:void 0}});var bm,zl=M(()=>{bm={value:void 0}});var Lm,Al=M(()=>{Lm={value:void 0}});var la,Ol=M(()=>{la={value:void 0}});var yt,Po=M(()=>{yt=new WeakMap});var _r,ua=M(()=>{_r=new Set});var Mi,Bm=M(()=>{Mi=Object.freeze({capture:!0,passive:!1})});function Tm(){this._map.fire("cameratouchchange")}var Dl=M(()=>{});var Co,da=M(()=>{Co=Object.freeze([.8,.5])});var Rl,Gl=M(()=>{Rl=Object.freeze([.8,0])});var ha,Pm=M(()=>{ha=Object.freeze({preventScroll:!0})});var ga,Cm=M(()=>{ga=Object.freeze({animate:!0})});function Ul(e){gt.value=null;let t=[...nr];nr.clear();let r,o,i,n,a;for([o,i]of t)if(Lo.set(o,null),Ot.get(o)===i){n=i.duration?Math.min(1,(e-i.start)/(i.duration*1e3)):1,a=1-(1-n)**3;try{ze(o,i.fromPitch+(Math.max(0,Math.min(o.options.maxPitch,i.pitch))-i.fromPitch)*a,i.fromBearing+i.delta*a),n<1&&Ot.get(o)===i?ya(o,i):Ot.get(o)===i&&Ot.set(o,null)}catch(s){r||=s}}if(r)throw r}var Fl=M(()=>{na();aa();ma();sa();or();Sm()});function ya(e,t){nr.set(e,t),gt.value===null&&(gt.value=requestAnimationFrame(Ul)),Lo.set(e,gt.value)}var Sm=M(()=>{aa();sa();ma();Fl()});function So(e,t,r,o=bo){if(Bo(e),!Number.isFinite(t)||!Number.isFinite(r))throw new TypeError("Camera angles must be finite numbers");if(!o.animate||matchMedia("(prefers-reduced-motion: reduce)").matches)return ze(e,t,r);let i=o.duration??.3;if(!Number.isFinite(i)||i<0)throw new TypeError("Camera duration must be nonnegative");let n=performance.now(),a=k(e),s=S(e),m=((r-s)%360+540)%360-180,f={duration:i,start:n,fromPitch:a,fromBearing:s,pitch:t,delta:m};return Ot.set(e,f),ya(e,f),e}var xa=M(()=>{na();ta();or();H();W();fa();Sm()});function Nl(e,t=ga){return So(e,0,0,t)}var jl=M(()=>{Cm();xa()});function Dt(e,t,r){return So(e,k(e),t,r)}var bi=M(()=>{xa();H()});function Wl(e,t=ga){return Dt(e,0,t)}var Zl=M(()=>{Cm();bi()});function $l(e){let t=this._rotateControl,r=t._map;e.preventDefault(),t.options.visualizePitch?Nl(r):Wl(r),e.detail&&r.getContainer().focus(ha)}var Vl=M(()=>{Pm();jl();Zl()});function Ir(e,t,r){return So(e,t,S(e),r)}var va=M(()=>{xa();W()});function ql(e){let t=this._rotateControl,r=t._map,o=e.shiftKey?15:5;if(e.key==="ArrowLeft")Dt(r,S(r)-o);else if(e.key==="ArrowRight")Dt(r,S(r)+o);else if(e.key==="ArrowUp"&&t.options.visualizePitch)Ir(r,k(r)+o);else if(e.key==="ArrowDown"&&t.options.visualizePitch)Ir(r,k(r)-o);else if(e.key==="Home"||e.key===" ")this.click();else return;e.preventDefault(),e.stopPropagation()}var Hl=M(()=>{bi();W();va();H()});function wa(){let e=this._map,t=this.options.visualizePitch?k(e):0;this._arrow.style.transform=`scale(${1/Math.sqrt(Math.max(.01,Math.abs(Math.cos(t*T))))}) rotateX(${t}deg) rotate(${S(e)}deg)`,this._button.setAttribute("aria-description",`Bearing ${Math.round(S(e))} degrees, pitch ${Math.round(k(e))} degrees. Arrow keys adjust the camera; Home resets it.`),this._container.style.display=this.options.closeOnZeroBearing&&!S(e)&&!t&&!this._container.contains(document.activeElement)?"none":""}var Em=M(()=>{X();H();W()});var Ae,mr=M(()=>{Ae={value:new WeakMap}});var zr,Ma=M(()=>{zr={value:new Set}});function ba(e){return e.closest?.('input,textarea,select,[contenteditable="true"]')}var km=M(()=>{});function La(e){let t=Ae.value.get(this);if(t.drag||!t.accept(e)||ba(e.target))return;e.preventDefault(),e.stopPropagation(),t.moved=!1;let r=t.map.getContainer().getBoundingClientRect();t.drag={id:e.pointerId,x:e.clientX,y:e.clientY,cursor:t.element.style.cursor,cx:r.left+r.width/2,cy:r.top+r.height/2,dragging:t.map.dragging?.enabled()},t.map.dragging?.disable(),t.element.focus?.(ha),t.element.setPointerCapture(e.pointerId),t.element.style.cursor="grabbing"}var _m=M(()=>{mr();Pm();km()});function Ba(e){return Bo(e),e}var Im=M(()=>{fa()});function Ta(e){let t=Ae.value.get(this);if(!t.drag||t.drag.id!==e.pointerId)return;let r=e.clientX-t.drag.x,o=e.clientY-t.drag.y;if(Math.hypot(r,o)<3&&!t.moved)return;Ba(t.map),t.moved=!0,e.preventDefault();let i=r*t.sensitivity[0];if(t.orbit)if(Math.abs(t.drag.cy-t.drag.y)>100){let n=Math.atan2(e.clientY-t.drag.cy,e.clientX-t.drag.cx)-Math.atan2(e.clientY-t.drag.cy,t.drag.x-t.drag.cx);i=Math.atan2(Math.sin(n),Math.cos(n))*He}else i*=e.clientY<t.drag.cy?1:-1;ze(t.map,k(t.map)-o*t.sensitivity[1],S(t.map)+i),t.drag.x=e.clientX,t.drag.y=e.clientY}var zm=M(()=>{Yr();mr();Im();or();H();W()});function Eo(e,t){if(!e?.drag||t?.pointerId!==void 0&&t.pointerId!==e.drag.id)return;let r=e.drag;e.drag=null,e.element.hasPointerCapture?.(r.id)&&e.element.releasePointerCapture(r.id),r.dragging&&e.map.getContainer()._leaflet_id&&e.map.dragging.enable(),e.element.style.cursor=r.cursor}var Pa=M(()=>{});function fr(e){Eo(Ae.value.get(this),e)}var Am=M(()=>{mr();Pa()});function Ca(e){let t=Ae.value.get(this);t.moved&&(e.preventDefault(),e.stopPropagation(),t.moved=!1)}var Om=M(()=>{mr()});function Sa(e){let t=Ae.value.get(this);!t.drag&&!t.moved||(e.preventDefault(),e.stopPropagation())}var Dm=M(()=>{mr()});function Ea(){let e;for(e of zr.value)Eo(e)}var Rm=M(()=>{Ma();Pa()});function ka(e,t,r,o=Co,i=!1){let n={map:e,element:t,accept:r,sensitivity:o,orbit:i,drag:null,moved:!1};return Ae.value.set(t,n),zr.value.add(n),t.addEventListener("pointerdown",La,!0),t.addEventListener("pointermove",Ta),t.addEventListener("pointerup",fr),t.addEventListener("pointercancel",fr),t.addEventListener("lostpointercapture",fr),t.addEventListener("click",Ca,!0),t.addEventListener("contextmenu",Sa),window.addEventListener("blur",Ea),n}var Gm=M(()=>{da();mr();Ma();_m();zm();Am();Om();Dm();Rm()});function Yl(e){return e.button===0}var Xl=M(()=>{});function Kl(){wa.call(this._rotateControl)}var Jl=M(()=>{Em()});function Ql(e){let t=h.DomUtil.create("div","leaflet-control-rotate leaflet-bar"),r=h.DomUtil.create("a","leaflet-control-rotate-toggle",t);this._map=e,this._container=t,this._button=r,r._rotateControl=this,r.href="#",r.draggable=!1,r.setAttribute("role","button"),r.title=this.options.visualizePitch?"Reset bearing and pitch":"Reset bearing to north",r.setAttribute("aria-label",r.title),r.style.cssText="cursor:grab;touch-action:none";let o=h.DomUtil.create("span","leaflet-control-rotate-arrow",r);return this._arrow=o,o.setAttribute("aria-hidden","true"),o.style.cssText="display:block;width:100%;height:100%;pointer-events:none;background: no-repeat center / 29px 29px",o.style.backgroundImage='url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 29 29%27%3E%3Cpath fill=%27%23333%27 d=%27M10.5 14 14.5 6 18.5 14Z%27/%3E%3Cpath fill=%27%23ccc%27 d=%27M10.5 16 14.5 24 18.5 16Z%27/%3E%3C/svg%3E")',r.onclick=$l,r.onkeydown=ql,this._refresh=wa,e.on("rotate pitch",this._refresh,this),this._refresh(),this._dragState=ka(e,r,Yl,this.options.visualizePitch?Co:Rl),r.addEventListener("focusout",Kl),h.DomEvent.on(r,"dblclick contextmenu",h.DomEvent.stop),h.DomEvent.disableClickPropagation(t),h.DomEvent.disableScrollPropagation(t),t}var eu=M(()=>{b();da();Gl();Vl();Hl();Em();Gm();Xl();Jl()});function tu(e){Eo(e);let{element:t}=e;t.removeEventListener("pointerdown",La,!0),t.removeEventListener("pointermove",Ta),t.removeEventListener("pointerup",fr),t.removeEventListener("pointercancel",fr),t.removeEventListener("lostpointercapture",fr),t.removeEventListener("click",Ca,!0),t.removeEventListener("contextmenu",Sa),Ae.value.delete(t),zr.value.delete(e),zr.value.size||window.removeEventListener("blur",Ea)}var ru=M(()=>{mr();Ma();Pa();_m();zm();Am();Om();Dm();Rm()});function _a(){tu(this._dragState)}var Um=M(()=>{ru()});function ou(e){e.off("rotate pitch",this._refresh,this),_a.call(this)}var iu=M(()=>{Um()});function nu(e){return new h.Control.Rotate(e)}var au=M(()=>{b()});function su(e){let t=this._cameraShiftRotate;!e.shiftKey||ba(e.target)||e.target.closest(".leaflet-control")||(e.preventDefault(),e.stopImmediatePropagation(),Dt(t._map,S(t._map)+Math.sign(e.deltaY)*5))}var mu=M(()=>{bi();W();km()});function fu(){let e=this._map.getContainer();e._cameraShiftRotate=this,this._wheel=su,e.addEventListener("wheel",this._wheel,Mi)}var pu=M(()=>{Bm();mu()});function cu(){let e=this._map.getContainer();e.removeEventListener("wheel",this._wheel,!0),delete e._cameraShiftRotate}var lu=M(()=>{});function uu(e){return!e.target.closest(".leaflet-control,.leaflet-marker-icon,.leaflet-popup")&&(e.button===2||e.button===0&&e.ctrlKey)}var du=M(()=>{});function hu(){this._dragState=ka(this._map,this._map.getContainer(),uu,Co,!0)}var gu=M(()=>{da();Gm();du()});function yu(e){let t=this.handler,r=Number.isFinite(e.webkitCompassHeading)?-e.webkitCompassHeading:e.alpha,o=e.absolute?0:screen.orientation?.angle??window.orientation??0;Number.isFinite(r)&&Dt(t._map,r-o)}var xu=M(()=>{bi()});function Fm(e,t){e.disable(),e._map.fire("error",{error:t})}var vu=M(()=>{});function wu([e,t]){let{handler:r,generation:o}=e.value;if(!(!r.enabled()||r._generation!==o)){if(!window.DeviceOrientationEvent||t.status!=="fulfilled"||t.value!=="granted")return Fm(r,t.status==="rejected"?t.reason:new Error("Device compass permission unavailable or denied"));try{window.addEventListener("deviceorientation",r._orientation),window.addEventListener("deviceorientationabsolute",r._orientation)}catch(i){Fm(r,i)}}}var Mu=M(()=>{vu()});function bu(){this._compassGeneration=this._generation=(this._generation||0)+1,this._orientation={handler:this,handleEvent:yu};let e=window.DeviceOrientationEvent?.requestPermission,t;try{t=e?e.call(window.DeviceOrientationEvent):"granted"}catch(r){t=Promise.reject(r)}Promise.allSettled([Promise.resolve({handler:this,generation:this._generation}),t]).then(wu)}var Lu=M(()=>{xu();Mu()});function Bu(){this._generation++,window.removeEventListener("deviceorientation",this._orientation),window.removeEventListener("deviceorientationabsolute",this._orientation)}var Tu=M(()=>{});function Pu(e){e[0]?.target._containerResizeMap.invalidateSize()}var Cu=M(()=>{});function Su(){let e=this._map.getContainer();e._containerResizeMap=this._map,this._observer=new ResizeObserver(Pu),this._observer.observe(e)}var Eu=M(()=>{Cu()});function ku(){let e=this._map.getContainer();this._observer.disconnect(),delete e._containerResizeMap}var _u=M(()=>{});function Ia(e){let t=yt.get(this),{map:r,container:o}=t;if(t.touch||e.touches.length!==2||e.target.closest(".leaflet-control")||!sr.get(r).enabled()&&!ar.get(r).enabled())return;let[i,n]=e.touches;if(Math.hypot(n.clientX-i.clientX,n.clientY-i.clientY)<1)return;Ba(r);let a=o.getBoundingClientRect(),s=new h.Point((i.clientX+n.clientX)/2-a.left,(i.clientY+n.clientY)/2-a.top);t.touch={angle:Math.atan2(n.clientY-i.clientY,n.clientX-i.clientX),distance:Math.hypot(n.clientX-i.clientX,n.clientY-i.clientY),middle:s,anchor:r.containerPointToLatLng(s),zoom:r.getZoom(),bearing:S(r),pitch:k(r),zooming:r.touchZoom?.enabled(),dragging:r.dragging?.enabled(),currentMiddle:new h.Point(s.x,s.y)},r.dragging?.disable(),e.preventDefault(),e.stopImmediatePropagation(),t.nativeZoom!==void 0&&(t.touch.zooming=t.nativeZoom),t.touch.snap=r.options.zoomSnap,r.options.zoomSnap=0}var Nm=M(()=>{vi();wi();b();Po();Im();W();H()});function za(e){let t=yt.get(this),{map:r,container:o,touch:i}=t;if(!i||e.touches.length!==2)return;let[n,a]=e.touches,s=Math.atan2(a.clientY-n.clientY,a.clientX-n.clientX),m=o.getBoundingClientRect(),f=i.currentMiddle;f.x=(n.clientX+a.clientX)/2-m.left,f.y=(n.clientY+a.clientY)/2-m.top;let p=Math.atan2(Math.sin(s-i.angle),Math.cos(s-i.angle))*He;ze(r,ar.get(r).enabled()?i.pitch-(f.y-i.middle.y)*.25:i.pitch,sr.get(r).enabled()?i.bearing+p:i.bearing);let c=Math.hypot(a.clientX-n.clientX,a.clientY-n.clientY);if(c<1)return;let l=i.zooming?Math.max(r.getMinZoom(),Math.min(r.getMaxZoom(),i.zoom+Math.log2(c/i.distance))):i.zoom;if(r.setView(r.getCenter(),l,{animate:!1}),r.options.touchZoom!=="center"){let u=r.project(i.anchor).subtract(r.project(r.containerPointToLatLng(f)));r.setView(r.unproject(r.project(r.getCenter()).add(u)),r.getZoom(),{animate:!1})}e.preventDefault(),e.stopImmediatePropagation()}var jm=M(()=>{vi();wi();Yr();Po();or()});function pr(e,t){if(!e.touch||t?.touches?.length>=2)return;let{map:r,container:o,touch:i}=e;i.dragging&&o._leaflet_id&&r.dragging.enable(),r.options.zoomSnap=i.snap,i.zooming&&i.snap&&o._leaflet_id&&r.setZoom(Math.round(r.getZoom()/i.snap)*i.snap,{animate:!1}),e.touch=null}var Li=M(()=>{});function ko(e){pr(yt.get(this),e)}var Wm=M(()=>{Po();Li()});function Bi(){let e=kr.get(this),{map:t,container:r}=e,o=sr.get(t).enabled()||ar.get(t).enabled();o&&e.nativeZoom===void 0?(e.nativeZoom=t.touchZoom?.enabled(),t.touchZoom?.disable()):!o&&e.nativeZoom!==void 0&&(pr(e),e.nativeZoom&&r._leaflet_id&&t.touchZoom.enable(),e.nativeZoom=void 0)}var Zm=M(()=>{ca();vi();wi();Li()});function Aa(){let e;for(e of _r)pr(e)}var $m=M(()=>{ua();Li()});function Iu(){let e=kr.get(this);if(!e)return;let{container:t,map:r}=e;pr(e),t.removeEventListener("touchstart",Ia,!0),t.removeEventListener("touchmove",za,!0),t.removeEventListener("touchend",ko,!0),t.removeEventListener("touchcancel",ko,!0),_r.delete(e),_r.size||window.removeEventListener("blur",Aa),r.off("cameratouchchange",Bi,r),xi.get(r)?.remove(),yt.delete(t),kr.delete(r)}var zu=M(()=>{ca();vm();ua();Po();Li();Nm();jm();Wm();$m();Zm()});function Ar(e,t,r){let o=To.get(e);o||To.set(e,o=new Map);let i=new r(e);o.set(t,i),e._handlers.push(i),e.options[t]&&i.enable()}var Au=M(()=>{xm()});var Ou={};B0(Ou,{cameraControls:()=>T0});function T0(e){if(Ar(e,"trackContainerMutation",Mm.value),!e.options.rotate)return;Ar(e,"shiftKeyRotate",Lm.value),Ar(e,"pitchDrag",bm.value),Ar(e,"compassBearing",wm.value),Ar(e,"touchRotate",la.value),Ar(e,"touchPitch",la.value),sr.set(e,To.get(e).get("touchRotate")),ar.set(e,To.get(e).get("touchPitch"));let t=e.getContainer(),r={map:e,container:t,touch:null,nativeZoom:void 0};kr.set(e,r),yt.set(t,r),_r.add(r),t.addEventListener("touchstart",Ia,Mi),t.addEventListener("touchmove",za,Mi),t.addEventListener("touchend",ko,!0),t.addEventListener("touchcancel",ko,!0),window.addEventListener("blur",Aa),e.on("cameratouchchange",Bi,e),Bi.call(e),e.options.rotateControl&&(xi.set(e,new h.Control.Rotate(typeof e.options.rotateControl=="object"?e.options.rotateControl:bo)),xi.get(e).addTo(e)),e.once("unload",Iu,e)}var Du=M(()=>{ca();xm();vm();vi();wi();b();_l();Il();zl();Al();Ol();Po();ua();Bm();ta();Dl();eu();iu();au();pu();lu();gu();Um();Lu();Tu();Eu();_u();Nm();jm();Wm();Zm();zu();$m();Au();wm.value=h.Handler.extend({addHooks:bu,removeHooks:Bu});Mm.value=h.Handler.extend({addHooks:Su,removeHooks:ku});bm.value=h.Handler.extend({addHooks:hu,removeHooks:_a});Lm.value=h.Handler.extend({addHooks:fu,removeHooks:cu});la.value=h.Handler.extend({addHooks:Tm,removeHooks:Tm});h.Control.Rotate=h.Control.extend({options:{position:"topleft",closeOnZeroBearing:!0,visualizePitch:!0},onAdd:Ql,onRemove:ou});h.control&&(h.control.rotate=nu)});b();var Br={value:void 0};var Vi={value:void 0};var qi={value:void 0};b();var j={value:void 0};var Ve={value:void 0};var Hi={value:void 0};var Yi={value:void 0};var Xi={value:void 0};var Ki={value:void 0};var Ji={value:void 0};var Qi={value:void 0};var en={value:void 0};var xe=new WeakMap;var re=new WeakMap;var qr=new WeakMap;var qt=new WeakMap;b();b();var z=new WeakMap;var pt=new WeakMap;function ii(e){let t=pt.get(e.currentTarget);if(!t)return;let r;for(r of t)qe(r)}function ni(e){let t=pt.get(e.currentTarget);if(!t)return;let r;for(r of t)r.source.fire("error",{error:new Error("Unable to load native layer image")})}function tn(e,t){let r=pt.get(e);r&&(r.delete(t),r.size||pt.delete(e))}function yf(e,t){let r=pt.get(e);r||pt.set(e,r=new Set),r.add(t)}var et=new WeakMap;var kt=new Set;var G=new WeakMap;var v=new WeakMap;var Q=new WeakMap;var _t=new WeakMap;var Ht=new WeakMap;var tt=new WeakMap;var rn=[null];var Hr=new WeakMap;var ce=new WeakMap;var Ue=new WeakMap;var xf={subtree:!0};var ke=new WeakMap;b();function on(e){let t;for(t of Object.values(e._layers))t instanceof h.Marker?t.update():(t instanceof h.Popup||t instanceof h.Tooltip)&&t._updatePosition()}function vf(e,t){let r=e._map,o=Ue.get(e),i,n;for(n of ce.get(e).keys())if(n.effect.target===r._proxy){i=n;break}let a=i?.effect.getComputedTiming().progress??Math.min(1,(t-o.start)/250),s=r.getZoomScale(o.targetZoom,o.zoom),m=1+(s-1)*a,f=r.project(o.from,o.zoom),p=r.project(o.to,o.zoom);ke.set(r,{zoom:r.getScaleZoom(m,o.zoom),center:r.unproject(f.add(p.subtract(f).multiplyBy(s*a/m)),o.zoom)}),on(r)}function wf(e,t){let r=e._map,o,i,n;if(r._animatingZoom){ce.get(e)||ce.set(e,new Map);for(o of r.getContainer().getAnimations(xf))!(o instanceof CSSTransition)||o.transitionProperty!=="transform"||!o.effect.target.classList.contains("leaflet-zoom-animated")||ce.get(e).has(o)||(i=o.currentTime||0,o.pause(),ce.get(e).set(o,{start:t,time:i}));for([o,{start:n,time:i}]of ce.get(e))o.currentTime=Math.min(o.effect.getComputedTiming().endTime,i+t-n);Ue.get(e)&&vf(e,t)}}var Yt=new WeakMap;var ai={size:[null,null],format:"depth24plus",usage:null};async function Mf(e,t,r){try{await r}catch(o){e.fire("error",{error:o})}t.destroy()}function F(e,t){Mf(e,t,v.get(e).device.queue.onSubmittedWorkDone())}function bf(e,t){(!Yt.get(e)||!Yt.get(e).equals(t))&&(v.get(e).width=t.x,v.get(e).height=t.y,v.get(e).canvas.width=Math.round(t.x*v.get(e).dpr),v.get(e).canvas.height=Math.round(t.y*v.get(e).dpr),v.get(e).canvas.style.width=`${t.x}px`,v.get(e).canvas.style.height=`${t.y}px`,v.get(e).depthTexture&&F(e,v.get(e).depthTexture),v.get(e).depthTexture=v.get(e).device.createTexture((ai.size[0]=v.get(e).canvas.width,ai.size[1]=v.get(e).canvas.height,ai.usage=GPUTextureUsage.RENDER_ATTACHMENT,ai)),Yt.set(e,t))}var J=new WeakMap;var ne=new WeakMap;X();Yr();var Lf=2*Math.atan(1/3)*He;var Xt=2*Math.PI*6378137;var ae=new WeakMap;var rt=new WeakMap;var ve=new WeakMap;var Ye=new WeakMap;var de=new WeakMap;b();function Bf(e,t){let r=t?.get(`${Math.floor(e.x/64)}/${Math.floor(e.y/64)}`);if(!r)return null;let o,i,n,a,s,m,f;for(o of r)if(!(e.x<o.min[0]||e.x>o.max[0]||e.y<o.min[1]||e.y>o.max[1])){for([i,n,a]of o.triangles)if(s=(n[1]-a[1])*(i[0]-a[0])+(a[0]-n[0])*(i[1]-a[1]),m=((n[1]-a[1])*(e.x-a[0])+(a[0]-n[0])*(e.y-a[1]))/s,f=((a[1]-i[1])*(e.x-a[0])+(i[0]-a[0])*(e.y-a[1]))/s,m>=0&&f>=0&&m+f<=1)return m*i[2]+f*n[2]+(1-m-f)*a[2]}return null}function si(e,t,r){let o=Math.floor(t/256),i=Math.floor(r/256),n=e.get(`${o}/${i}`);if(!n)return null;let a=n[(r-i*256)*256+t-o*256];return Number.isFinite(a)&&a>-1e3?a:null}function Tf(e,t){let r=e.x-.5,o=e.y-.5,i=Math.floor(r),n=Math.floor(o),a=r-i,s=o-n,m=si(t,i,n),f=si(t,i+1,n),p=si(t,i,n+1),c=si(t,i+1,n+1);return!Number.isFinite(m)||!Number.isFinite(f)||!Number.isFinite(p)||!Number.isFinite(c)?Number.isFinite(m)?m:Number.isFinite(f)?f:Number.isFinite(p)?p:Number.isFinite(c)?c:null:(m*(1-a)+f*a)*(1-s)+(p*(1-a)+c*a)*s}function Kt(e,t){if(!e._map||!ve.get(e))return null;let r=t instanceof h.Point?t:e._map.project(t,de.get(e));return Bf(r,rt.get(e))??Tf(r,Ye.get(e))}function ct(e,t){let r=ae.get(e);return r&&Kt(r,t)}var It=new WeakMap;H();W();var Pf=Math.PI/360;function Xr(e){e.x||=[0,0,0],e.y||=[0,0,0],e.z||=[0,0,0],e.viewTransform||=new DOMMatrix,e.projectionTransform||=new DOMMatrix,e.projectionViewTransform||=new DOMMatrix;let{position:t,target:r,up:o,x:i,y:n,z:a,viewMatrix:s,projectionMatrix:m,projectionViewMatrix:f}=e,p;a[0]=t[0]-r[0],a[1]=t[1]-r[1],a[2]=t[2]-r[2];let c=Math.hypot(a[0],a[1],a[2])||1;a[0]/=c,a[1]/=c,a[2]/=c,i[0]=o[1]*a[2]-o[2]*a[1],i[1]=o[2]*a[0]-o[0]*a[2],i[2]=o[0]*a[1]-o[1]*a[0];let l=Math.hypot(i[0],i[1],i[2])||1;i[0]/=l,i[1]/=l,i[2]/=l,n[0]=a[1]*i[2]-a[2]*i[1],n[1]=a[2]*i[0]-a[0]*i[2],n[2]=a[0]*i[1]-a[1]*i[0];let u=e.viewTransform;u.m11=i[0],u.m12=i[1],u.m13=i[2],u.m14=0,u.m21=n[0],u.m22=n[1],u.m23=n[2],u.m24=0,u.m31=a[0],u.m32=a[1],u.m33=a[2],u.m34=0,u.m41=t[0],u.m42=t[1],u.m43=t[2],u.m44=1,u.invertSelf(),s[0]=u.m11,s[1]=u.m12,s[2]=u.m13,s[3]=u.m14,s[4]=u.m21,s[5]=u.m22,s[6]=u.m23,s[7]=u.m24,s[8]=u.m31,s[9]=u.m32,s[10]=u.m33,s[11]=u.m34,s[12]=u.m41,s[13]=u.m42,s[14]=u.m43,s[15]=u.m44;for(p of s)if(!Number.isFinite(p))throw new Error("Singular 3D transform");let d=1/Math.tan(e.fov*Pf),y=e.near,g=e.far;m[0]=d/e.aspect,m[1]=0,m[2]=0,m[3]=0,m[4]=0,m[5]=d,m[6]=0,m[7]=0,m[8]=0,m[9]=0,m[10]=g/(y-g),m[11]=-1,m[12]=0,m[13]=0,m[14]=g*y/(y-g),m[15]=0;let x=e.projectionTransform;x.m11=m[0],x.m12=m[1],x.m13=m[2],x.m14=m[3],x.m21=m[4],x.m22=m[5],x.m23=m[6],x.m24=m[7],x.m31=m[8],x.m32=m[9],x.m33=m[10],x.m34=m[11],x.m41=m[12],x.m42=m[13],x.m43=m[14],x.m44=m[15];let w=e.projectionViewTransform;w.m11=x.m11,w.m12=x.m12,w.m13=x.m13,w.m14=x.m14,w.m21=x.m21,w.m22=x.m22,w.m23=x.m23,w.m24=x.m24,w.m31=x.m31,w.m32=x.m32,w.m33=x.m33,w.m34=x.m34,w.m41=x.m41,w.m42=x.m42,w.m43=x.m43,w.m44=x.m44,w.multiplySelf(u),f[0]=w.m11,f[1]=w.m12,f[2]=w.m13,f[3]=w.m14,f[4]=w.m21,f[5]=w.m22,f[6]=w.m23,f[7]=w.m24,f[8]=w.m31,f[9]=w.m32,f[10]=w.m33,f[11]=w.m34,f[12]=w.m41,f[13]=w.m42,f[14]=w.m43,f[15]=w.m44}function Jt(e,t,r=!1){let o=ke.get(e);if(!o)return t;let i=e.getSize().divideBy(2),n=e.getZoomScale(o.zoom),a=e.project(e.getCenter(),o.zoom).subtract(e.project(o.center,o.zoom));return r?t.subtract(i).subtract(a).divideBy(n).add(i):t.subtract(i).multiplyBy(n).add(a).add(i)}function Cf(e,t){let r=e._map,o=ke.get(r)?.zoom??r.getZoom(),i=r.options.crs.scale(o)/(Xt*Math.cos(ne.get(e).lat*T)),n=Jt(r,j.value.layerPointToContainerPoint.call(r,r.project(ne.get(e)).subtract(r.getPixelOrigin()))),a=t.y*1.5/i,s=(t.x/2-n.x)/i,m=It.get(r)?.control?._walk,f=(ct(r,r.getCenter())??0)+(m?.saved?m.state.height:0),p=(t.y/2-n.y)/i,c=k(r)*T,l=S(r)*T,u=J.get(e);u.fov=Lf,u.aspect=t.x/t.y,u.near=Math.max(.1,a/1e4),u.far=Math.max(1e4,a*10),u.position[0]=s+Math.sin(l)*Math.sin(c)*a,u.position[1]=f+Math.cos(c)*a,u.position[2]=p+Math.cos(l)*Math.sin(c)*a,u.up[0]=-Math.sin(l)*Math.cos(c),u.up[1]=Math.sin(c),u.up[2]=-Math.cos(l)*Math.cos(c),u.target[0]=s,u.target[1]=f,u.target[2]=p,Xr(u)}var Tr=new WeakMap;function Sf(e,t){let r,o;if(e.matrix){let i=e._matrixState||=new Float64Array(16);for(r=0;r<16;r++)i[r]!==e.matrix[r]&&(t=!0),i[r]=e.matrix[r]}else{let i=e._transformState||=new Float64Array(9);for(r=0;r<9;r++)o=r<3?e.position[r]:r<6?e.rotation[r-3]:e.scale[r-6],i[r]!==o&&(t=!0),i[r]=o}return t}Yr();function Ef(e){let t=e._localTransform||=new DOMMatrix;return t.m11=1,t.m12=0,t.m13=0,t.m14=0,t.m21=0,t.m22=1,t.m23=0,t.m24=0,t.m31=0,t.m32=0,t.m33=1,t.m34=0,t.m41=0,t.m42=0,t.m43=0,t.m44=1,t.translateSelf(e.position[0],e.position[1],e.position[2]),t.rotateAxisAngleSelf(0,1,0,e.rotation[1]*He),t.rotateAxisAngleSelf(1,0,0,e.rotation[0]*He),t.rotateAxisAngleSelf(0,0,1,e.rotation[2]*He),t.scaleSelf(e.scale[0],e.scale[1],e.scale[2]),t}function we(e){let t=e.parent,r=t?._worldMatrixVersion||0,o=!!e.matrix,i=e._worldParent!==t||e._parentWorldVersion!==r||e._worldMatrixMode!==o,n;if(i=Sf(e,i),!i){for(n of e.children)we(n);return}let a,s;e.matrix?a=e.matrix:a=Ef(e),s=e._worldTransform||=new DOMMatrix,a instanceof DOMMatrix?(s.m11=a.m11,s.m12=a.m12,s.m13=a.m13,s.m14=a.m14,s.m21=a.m21,s.m22=a.m22,s.m23=a.m23,s.m24=a.m24,s.m31=a.m31,s.m32=a.m32,s.m33=a.m33,s.m34=a.m34,s.m41=a.m41,s.m42=a.m42,s.m43=a.m43,s.m44=a.m44):(s.m11=a[0],s.m12=a[1],s.m13=a[2],s.m14=a[3],s.m21=a[4],s.m22=a[5],s.m23=a[6],s.m24=a[7],s.m31=a[8],s.m32=a[9],s.m33=a[10],s.m34=a[11],s.m41=a[12],s.m42=a[13],s.m43=a[14],s.m44=a[15]),t&&s.preMultiplySelf(t._worldTransform),e.worldMatrix[0]=s.m11,e.worldMatrix[1]=s.m12,e.worldMatrix[2]=s.m13,e.worldMatrix[3]=s.m14,e.worldMatrix[4]=s.m21,e.worldMatrix[5]=s.m22,e.worldMatrix[6]=s.m23,e.worldMatrix[7]=s.m24,e.worldMatrix[8]=s.m31,e.worldMatrix[9]=s.m32,e.worldMatrix[10]=s.m33,e.worldMatrix[11]=s.m34,e.worldMatrix[12]=s.m41,e.worldMatrix[13]=s.m42,e.worldMatrix[14]=s.m43,e.worldMatrix[15]=s.m44,e._worldParent=t,e._parentWorldVersion=r,e._worldMatrixMode=o,e._worldMatrixVersion=(e._worldMatrixVersion||0)+1;for(n of e.children)we(n)}function Be(e){let t=[1/0,1/0,1/0],r=[-1/0,-1/0,-1/0],o=e.attributes.position.data,i,n,a,s;for(i=0;i<o.length;i+=3)n=o[i],a=o[i+1],s=o[i+2],t[0]=Math.min(t[0],n),r[0]=Math.max(r[0],n),t[1]=Math.min(t[1],a),r[1]=Math.max(r[1],a),t[2]=Math.min(t[2],s),r[2]=Math.max(r[2],s);let m=e.attributes.instanceOffset;if(m){let l,u,d,y;for(l=0;l<3;l++){for(d=1/0,y=-1/0,u=l;u<m.data.length;u+=m.size)d=Math.min(d,m.data[u]),y=Math.max(y,m.data[u]);t[l]=Math.fround(t[l]+d),r[l]=Math.fround(r[l]+y)}}let f=[(t[0]+r[0])/2,(t[1]+r[1])/2,(t[2]+r[2])/2],p=0;for(i=0;!m&&i<o.length;i+=3)n=o[i]-f[0],a=o[i+1]-f[1],s=o[i+2]-f[2],p=Math.max(p,n*n+a*a+s*s);let c=m?Math.hypot(r[0]-t[0],r[1]-t[1],r[2]-t[2])/2:Math.sqrt(p);if(!m&&(p===1/0||p<Number.MIN_VALUE/Number.EPSILON))for(c=0,i=0;i<o.length;i+=3)c=Math.max(c,Math.hypot(o[i]-f[0],o[i+1]-f[1],o[i+2]-f[2]));e.bounds={min:t,max:r,center:f,radius:c}}function kf(e,t,r,o,i){e.geometry.bounds||Be(e.geometry);let n=e.geometry.bounds,a=e.worldMatrix,s=e._cullingSphere;if(!s||s.bounds!==n||s.matrix!==a||s.version!==e._worldMatrixVersion||e._worldMatrixVersion===void 0){s||=e._cullingSphere={};let d=n.center;s.x=a[0]*d[0]+a[4]*d[1]+a[8]*d[2]+a[12],s.y=a[1]*d[0]+a[5]*d[1]+a[9]*d[2]+a[13],s.z=a[2]*d[0]+a[6]*d[1]+a[10]*d[2]+a[14],s.radius=n.radius*Math.max(Math.hypot(a[0],a[1],a[2]),Math.hypot(a[4],a[5],a[6]),Math.hypot(a[8],a[9],a[10])),s.bounds=n,s.matrix=a,s.version=e._worldMatrixVersion}let{x:m,y:f,z:p,radius:c}=s,l=t[2]*m+t[6]*f+t[10]*p+t[14],u=t[3]*m+t[7]*f+t[11]*p+t[15];e._sortDepth=l/u,e._visibleInFrame=r[0][0]*m+r[0][1]*f+r[0][2]*p+r[0][3]>=-c*o[0]&&r[1][0]*m+r[1][1]*f+r[1][2]*p+r[1][3]>=-c*o[1]&&r[2][0]*m+r[2][1]*f+r[2][2]*p+r[2][3]>=-c*o[2]&&r[3][0]*m+r[3][1]*f+r[3][2]*p+r[3][3]>=-c*o[3]&&r[4][0]*m+r[4][1]*f+r[4][2]*p+r[4][3]>=-c*o[4]&&r[5][0]*m+r[5][1]*f+r[5][2]*p+r[5][3]>=-c*o[5],e._visibleInFrame&&i.push(e)}function Ys(e,t,r,o,i,n,a){if(!e.visible)return;e.geometry&&(t?.altitude>=3&&!e.tile&&e._appearance!==0&&!e.program.nightLight&&e.program.depthTest!==!1&&a.push(e),kf(e,r,o,i,n));let s;for(s of e.children)Ys(s,t,r,o,i,n,a)}function _f(e,t,r){let i=J.get(e).projectionViewMatrix,n=v.get(e),a=n.frustum||=[new Float64Array(4),new Float64Array(4),new Float64Array(4),new Float64Array(4),new Float64Array(4),new Float64Array(4)],s=n.frustumLengths||=new Float64Array(6),m,f,p,c,l;for(m=0;m<6;m++){for(f=Math.floor(m/2),p=a[m],c=0;c<4;c++)l=c*4,p[c]=m===4?i[l+2]:m%2?i[l+3]-i[l+f]:i[l+3]+i[l+f];s[m]=Math.hypot(p[0],p[1],p[2])}let u=Tr.get(e);u||Tr.set(e,u=[]),u.length=0;let d=_t.get(e);d||_t.set(e,d=[]),d.length=0,r&&we(Q.get(e)),Ys(Q.get(e),t,i,a,s,u,d)}var I=new WeakMap;var A=new WeakMap;var Y=new WeakMap;var mi=new WeakMap;var se=new WeakMap;var Te=new WeakMap;b();var If=[];X();var zf=[];var Af={x:0,y:0};var Of={x:1,y:1};var Df={code:"@group(0)@binding(0)var source:texture_2d<f32>;@group(0)@binding(1)var sourceSampler:sampler;@group(0)@binding(2)var<uniform> opacity:f32;struct Varyings{@builtin(position)position:vec4f,@location(0)uv:vec2f};@vertex fn vertexMain(@builtin(vertex_index)index:u32)-> Varyings{let uv = vec2f(f32(index & 1u),f32(index >> 1u));return Varyings(vec4f(uv.x * 2.0 - 1.0,1.0 - uv.y * 2.0,0.0,1.0),uv);}@fragment fn fragmentMain(input:Varyings)->@location(0)vec4f{let color = textureSample(source,sourceSampler,input.uv);return vec4f(color.rgb,color.a * opacity);}"};var Kr={layout:"auto",vertex:{module:null,entryPoint:"vertexMain"},fragment:{module:null,entryPoint:"fragmentMain",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}}}]},primitive:{topology:"triangle-strip"}};var Rf={magFilter:"linear",minFilter:"linear"};function Gf(e){let t=e.device;if(!e.roofBlit){let r=t.createShaderModule(Df);e.roofBlit={pipeline:t.createRenderPipeline((Kr.vertex.module=r,Kr.fragment.module=r,Kr)),sampler:t.createSampler(Rf)},Kr.vertex.module=null,Kr.fragment.module=null}}var sn={size:null,usage:null};var mn={colorAttachments:[{view:null,clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}]};var fn={source:null};var pn={texture:null};var cn=[null,null];function Uf(e,t){let r=t.texture;r.uploaded!==r.image&&(e.queue.copyExternalImageToTexture((fn.source=t.image,fn),(pn.texture=r.texture,pn),(cn[0]=r.texture.width,cn[1]=r.texture.height,cn)),fn.source=null,pn.texture=null,r.uploaded=r.image)}var ot={layout:null,entries:[{binding:0,resource:null},{binding:1,resource:null},{binding:2,resource:{buffer:null,offset:null,size:4}}]};var ln=[null];var un={value:new Float32Array(64)};function Ff(e,t){return(e.layer.options.zIndex||0)-(t.layer.options.zIndex||0)||e.tile.coords.z-t.tile.coords.z}function Nf(e,t,r,o,i,n,a){let s=v.get(e),m=s.device,f=e._map,p=Math.max(1,t.length)*64;un.value.length<p&&(un.value=new Float32Array(p));let c=un.value,l=m.createBuffer((sn.size=c.byteLength,sn.usage=GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,sn)),u=m.createCommandEncoder(),d=u.beginRenderPass((mn.colorAttachments[0].view=Y.get(e).texture.texture.createView(),mn));mn.colorAttachments[0].view=null,d.setPipeline(s.roofBlit.pipeline),t.sort(Ff);let y,g,x,w,C,B,P,D;for([y,{tile:g,layer:x}]of t.entries())({coords:w}=g),C=g.texture,Uf(m,g),c[y*64]=x.options.opacity,B=256*f.getZoomScale(r,w.z),P=(w.x*B-o.x)*n/i.x,D=(w.y*B-o.y)*a/i.y,d.setViewport(P,D,Math.min(B*n/i.x,n-P),Math.min(B*a/i.y,a-D),0,1),d.setBindGroup(0,m.createBindGroup((ot.layout=s.roofBlit.pipeline.getBindGroupLayout(0),ot.entries[0].resource=C.texture.createView(),ot.entries[1].resource=s.roofBlit.sampler,ot.entries[2].resource.buffer=l,ot.entries[2].resource.offset=y*256,ot))),ot.layout=null,ot.entries[0].resource=null,ot.entries[1].resource=null,ot.entries[2].resource.buffer=null,d.draw(4);d.end(),m.queue.writeBuffer(l,0,c),m.queue.submit((ln[0]=u.finish(),ln)),ln[0]=null,l.destroy()}function jf(e,t){let r=-1/0,o,i;for(o of e)for(i of A.get(o).values())i.done&&!i.request.signal.aborted&&i.image&&(i._roofEntry||={tile:i,layer:o},t.push(i._roofEntry),r=Math.max(r,i.coords.z));return r}var Wf={size:[null,null],format:"rgba8unorm",usage:null};var Zf={addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"};function $f(e,t,r,o){let i=v.get(e),n=Wf;n.size[0]=r,n.size[1]=o,n.usage=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT,t.texture&&(t.texture.width!==r||t.texture.height!==o)&&(F(e,t.texture.texture),t.texture.texture=i.device.createTexture(n),t.texture.width=r,t.texture.height=o),t.texture||={device:i.device,texture:i.device.createTexture(n),sampler:i.device.createSampler(Zf),samplerOptions:{addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"},image:null,width:r,height:o,format:"rgba8unorm",srgb:!1,flipY:!1,uploaded:null}}function Vf(e,t,r,o){let i=e._map,n=v.get(e),a=zf;a.length=0;let s=jf(t,a),m=1/0,f=1/0,p=-1/0,c=-1/0,l,u;a.length||(s=i.getZoom());for({tile:{coords:l}}of a)u=256*i.getZoomScale(s,l.z),m=Math.min(m,l.x*u),f=Math.min(f,l.y*u),p=Math.max(p,(l.x+1)*u),c=Math.max(c,(l.y+1)*u);let d=i.project(ne.get(e),s),y=Af,g=Of;y.x=a.length?m:d.x,y.y=a.length?f:d.y,g.x=a.length?p-m:1,g.y=a.length?c-f:1;let x=Math.min(1,4096/Math.max(g.x,g.y)),w=Math.max(1,Math.ceil(g.x*x)),C=Math.max(1,Math.ceil(g.y*x)),B=i.options.crs.scale(s)/(Xt*Math.cos(ne.get(e).lat*T)),P={matrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],texture:Y.get(e)?.texture};Y.set(e,P),P.signature=r,P.updatedAt=o,P.matrix[0]=B/g.x,P.matrix[10]=B/g.y,P.matrix[12]=(d.x-y.x)/g.x,P.matrix[14]=(d.y-y.y)/g.y,$f(e,P,w,C),Gf(n);try{Nf(e,a,s,y,g,w,C)}finally{a.length=0}}function qf(e,t,r){let o=If;o.length=0;let i=!1,n;for(n of t)o.push(`${h.Util.stamp(n)}:${Te.get(n)||0}:${n.options.opacity}:${n.options.zIndex}`),i||=!!se.get(n);let a=o.join("|");o.length=0,(!Y.get(e)||Y.get(e).signature!==a&&(!i||r-Y.get(e).updatedAt>=50))&&Vf(e,t,a,r)}function Hf(e,t){let r=e._map,o=mi.get(e);o||mi.set(e,o=[]),o.length=0;let i=!1,n,a;for(n of G.get(e))if(n.options.roofTexture||n.options.wallTexture){i=!0;break}if(i){for(a of Object.values(r._layers))I.get(a)==="raster"&&A.get(a)&&a.options.opacity>0&&o.push(a);qf(e,o,t)}else Y.get(e)&&(F(e,Y.get(e).texture.texture),Y.set(e,null));return o}function Yf(e,t){return e.program.transparent?(e.renderOrder||0)-(t.renderOrder||0)||t._sortDepth-e._sortDepth||e.id-t.id:(e._sortDepth??0)-(t._sortDepth??0)||e.id-t.id}function Xf(e,t){return+!!t.ground-+!!e.ground||(e.ground&&t.ground?(e.renderOrder||0)-(t.renderOrder||0)||e.tile.coords.z-t.tile.coords.z:0)||Number(e.program.transparent)-Number(t.program.transparent)||Yf(e,t)}var R=new WeakMap;var Qt=new WeakMap;X();function Kf(e,t,r){let o=t._map,i=e.geometry.bounds,n=e.worldMatrix,a=Qt.get(r),s=o.project(ne.get(t),a),m=o.options.crs.scale(a)/(Xt*Math.cos(ne.get(t).lat*T)),f=1/0,p=1/0,c=-1/0,l=-1/0,u,d,y,g,x,w,C,B;for(u=0;u<8;u++)d=u&1?i.max[0]:i.min[0],y=u&2?i.max[1]:i.min[1],g=u&4?i.max[2]:i.min[2],x=s.x+(n[0]*d+n[4]*y+n[8]*g+n[12])*m,w=s.y+(n[2]*d+n[6]*y+n[10]*g+n[14])*m,f=Math.min(f,x),p=Math.min(p,w),c=Math.max(c,x),l=Math.max(l,w);return R.get(r).maxLat!==void 0&&R.get(r).minLon!==void 0&&R.get(r).minLat!==void 0&&R.get(r).maxLon!==void 0&&(C=o.project([R.get(r).maxLat,R.get(r).minLon],a),B=o.project([R.get(r).minLat,R.get(r).maxLon],a),f=Math.max(f,C.x),p=Math.max(p,C.y),c=Math.min(c,B.x),l=Math.min(l,B.y),f>=c||p>=l)?null:[f,p,c,l]}function Jf(e,t,r){let o=256*2**(r-t.coords.z),i=t.coords.x*o,n=t.coords.y*o,a=[],s,m,f,p,c,l,u,d;for([s,m,f,p]of e){if(c=Math.max(s,i),l=Math.max(m,n),u=Math.min(f,i+o),d=Math.min(p,n+o),c>=u||l>=d){a.push([s,m,f,p]);continue}m<l&&a.push([s,m,f,l]),d<p&&a.push([s,d,f,p]),s<c&&a.push([s,l,c,d]),u<f&&a.push([u,l,f,d])}return a}function Qf(e,t,r){let o=!1,i=!1,n,a,s,m;for(n of r){if(!R.get(n)){i=!0;continue}if(a=Kf(e,t,n),!!a){o=!0,s=[a];for(m of A.get(n).values())if(!(!m.done&&!m.error)&&(s=Jf(s,m,Qt.get(n)),!s.length))return!0}}return!o&&!i}function ep(e,t,r,o){let i,n;if(t.program.uniforms.roofTexture&&!r.length&&(t._roofRevealed=!0),t.program.uniforms.roofTexture&&!t._roofRevealed&&r.length){It.get(e._map)?.control?._walk?.saved&&(t._roofRevealed=!0,t.fadeStart=o-(t.fadeDuration||0)),t._roofCoverageSignature!==Y.get(e)?.signature&&(t._roofCoverageSignature=Y.get(e)?.signature,t._roofCovered=Qf(t,e,r)),n=!1;for(i of r)if(!R.get(i)||se.get(i)>0){n=!0;break}if(!t._roofRevealed&&!t._roofCovered&&n)return t._appearance=0,!1;t._roofRevealed=!0}return!0}function tp(e,t,r,o){let i=Tr.get(e),n=_t.get(e),a=v.get(e),s=!1,m,f;for(m of i)ep(e,m,t,r)&&(m.fadeDuration&&(m.fadeStart??=m.tile?.loadedAt??r,f=Math.min(1,(r-m.fadeStart)/m.fadeDuration),m._appearance=f*f*(3-2*f),s||=f<1),o.push(m));i.length=0,o.sort(Xf);let p=1/0,c=-1/0;for(m of o)m.ground&&(p=Math.min(p,m.tile.coords.z),c=Math.max(c,m.tile.coords.z));a.groundOverlap=p!==c;let l=0;for(m of n)m.visible&&m._appearance!==0&&(n[l++]=m);return n.length=l,s}var dn={size:null,usage:null};function rp(e,t,r){let o=v.get(e);(!o.uniformBuffer||o.uniformBuffer.size<(t.length*2+r.length+1)*256)&&(o.uniformBuffer&&F(e,o.uniformBuffer),o.uniformBuffer=o.device.createBuffer((dn.size=Math.max(64,t.length*4+r.length*2)*256,dn.usage=GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,dn)),o.uniformData=new Float32Array(o.uniformBuffer.size/4))}var L=new WeakMap;var Xe={layout:null,entries:[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null},{binding:3,resource:{buffer:null}}]};function hn(e){let t=v.get(e).sunlight;t.bindGroup=v.get(e).device.createBindGroup((Xe.layout=t.layout,Xe.entries[0].resource.buffer=t.buffer,Xe.entries[1].resource=t.texture.createView(),Xe.entries[2].resource=t.sampler,Xe.entries[3].resource.buffer=t.lights,Xe)),Xe.layout=null,Xe.entries[0].resource.buffer=null,Xe.entries[1].resource=null,Xe.entries[2].resource=null,Xe.entries[3].resource.buffer=null}function op(e,t,r,o,i){let n,a;for(n=0,a=o[r]*4;n<8;n++)i[a+n]=e[t+n];o[r]+=2}function ip(e,t,r,o,i,n,a,s){let m=e[t+3],f=e[t]-r,p=e[t+2]-o,c,l,u;for(c=Math.floor((p-m)/i);c<=Math.floor((p+m)/i);c++)for(l=Math.floor((f-m)/i);l<=Math.floor((f+m)/i);l++)u=c*n+l,s?op(e,t,u,a,s):a[u]++}function Xs(e,t,r,o,i,n,a){let s,m;for(s of e)for(m=0;m<s.length;m+=8)ip(s,m,t,r,o,i,n,a)}function np(e,t){let r=0,o,i,n,a;for(o of e)r+=o.length/8;let s=32,m;if(r){let f=1/0,p=1/0,c=-1/0,l=-1/0;for(o of e)for(i=0;i<o.length;i+=8)f=Math.min(f,o[i]-o[i+3]),c=Math.max(c,o[i]+o[i+3]),p=Math.min(p,o[i+2]-o[i+3]),l=Math.max(l,o[i+2]+o[i+3]);let u=Math.ceil((c-f)/s)+1,d=Math.ceil((l-p)/s)+1,y=new Uint32Array(u*d),g=new Uint32Array(u*d);Xs(e,f,p,s,u,y);let x=0;for(n of y)x+=n;let w=(2+u*d+x*2)*4;if(w*4>t)throw new Error("Streetlight grid exceeds GPU storage limit");m=new Float32Array(w),m[0]=f,m[1]=p,m[2]=s,m[3]=u,m[4]=d,m[5]=r;let C=2+u*d;for(a=0;a<y.length;a++)y[a]&&(m[(2+a)*4]=g[a]=C,m[(2+a)*4+1]=y[a],C+=y[a]*2);Xs(e,f,p,s,u,g,m)}else m=new Float32Array(8);return{data:m,count:r}}var ap=.03/(4*Math.PI);function sp(e,t){let r=new Float32Array(e.length*8),o,i,n,a,s,m,f,p;for(o=0;o<e.length;o++)({position:[i,n,a],radius:s,color:m,flux:f}=e[o]),p=t[3]*i+t[7]*n+t[11]*a+t[15],r[o*8]=(t[0]*i+t[4]*n+t[8]*a+t[12])/p,r[o*8+1]=(t[1]*i+t[5]*n+t[9]*a+t[13])/p,r[o*8+2]=(t[2]*i+t[6]*n+t[10]*a+t[14])/p,r[o*8+3]=s,r[o*8+4]=m[0],r[o*8+5]=m[1],r[o*8+6]=m[2],r[o*8+7]=f*ap;return r}function Ks(e,t,r){let o=t?.meshes.length===e.length,i,n,a,s,m,f,p;for(i=0;i<e.length;i++){for(n=e[i],a=n.worldMatrix,s=n.extras.lights,m=n._worldLights,f=!!m,p=0;p<a.length&&f;p++)f=a[p]===m.matrix[p];(!f||m.lights!==s)&&(m=n._worldLights={lights:s,matrix:[...a],data:sp(s,a)}),o&&=t.meshes[i].mesh===n&&t.meshes[i].cache===m}if(o)return t;let c=new Array(e.length),l=new Array(e.length);for(i=0;i<e.length;i++)n=e[i],m=n._worldLights,c[i]=m.data,l[i]={mesh:n,cache:m};return{...np(c,r),meshes:l}}var it=[];function Js(e,t,r){if(!e.visible)return;e.extras?.lights&&(e.extras.dynamicLights?r:t).push(e);let o;for(o of e.children||it)Js(o,t,r)}function mp(e){let{device:t,sunlight:r}=v.get(e),o=[],i=[],n;for(n of G.get(e))!n.options.nightLight||!L.get(n).visible||Js(L.get(n),o,i);let a=t.limits.maxStorageBufferBindingSize,s=Ks(o,r.staticLightGrid,a),m=Ks(i,r.dynamicLightGrid,a);if(s===r.staticLightGrid&&m===r.dynamicLightGrid)return;let f=s.data.byteLength+m.data.byteLength;if(f>a)throw new Error("Streetlight grid exceeds GPU storage limit");let p=s!==r.staticLightGrid;r.lights.size<f&&(F(e,r.lights),r.lights=t.createBuffer({size:f,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST}),hn(e),p=!0),s.data[6]=s.data.length/4,p&&t.queue.writeBuffer(r.lights,0,s.data),t.queue.writeBuffer(r.lights,s.data.byteLength,m.data),r.lightCount=s.count+m.count,r.staticLightGrid=s,r.dynamicLightGrid=m}function fp(e,t,r,o){let i=v.get(e),n=J.get(e),a=n.viewMatrix,s=o?.direction,m=s?s[0]:-300,f=s?s[1]:500,p=s?s[2]:300,c=a[0]*m+a[4]*f+a[8]*p,l=a[1]*m+a[5]*f+a[9]*p,u=a[2]*m+a[6]*f+a[10]*p,d=Math.hypot(c,l,u)||1,y=Math.hypot(a[4],a[5],a[6])||1;rp(e,t,r);let g=i.uniformData;g.set(n.viewMatrix,0),g.set(n.projectionMatrix,16),Y.get(e)?.matrix?g.set(Y.get(e).matrix,32):(g.fill(0,32,48),g[32]=g[37]=g[42]=g[47]=1),g[48]=c/d,g[49]=l/d,g[50]=u/d,g[51]=o&&o.altitude<=0?0:1,g[52]=a[4]/y,g[53]=a[5]/y,g[54]=a[6]/y;let x=o?Math.max(0,Math.min(1,(3-o.altitude)/9)):0;g[55]=x*x*(3-2*x);let w=o?.tint;g[56]=w?w[0]:1,g[57]=w?w[1]:1,g[58]=w?w[2]:1,g[59]=0,x>0&&mp(e),i.uniformSlot=1}var Jr={colorAttachments:[{view:null,clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}],depthStencilAttachment:{view:null,depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}};var Qs=[null];var ge={layout:null,vertex:{module:null,entryPoint:"vertexMain",buffers:null},fragment:{module:null,entryPoint:"fragmentMain",targets:[{format:null,blend:null,writeMask:null}]},primitive:{topology:"triangle-list",cullMode:null,frontFace:null},depthStencil:{format:"depth24plus",depthWriteEnabled:null,depthCompare:null}};var pp={color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}};function cp(e,t,r,o){let{program:i}=t,n=i.depthTest===!1||t.ground&&e.groundOverlap?"always":"less-equal",a=`${r}:${o}:${n}`,s=i.pipelineCache.get(a);return s||(s=e.device.createRenderPipeline((ge.layout=i.pipelineLayout,ge.vertex.module=i.vertex,ge.vertex.buffers=i.vertexBuffers,ge.fragment.module=i.fragment,ge.fragment.targets[0].format=e.format,ge.fragment.targets[0].blend=i.transparent?pp:void 0,ge.fragment.targets[0].writeMask=GPUColorWrite.ALL,ge.primitive.cullMode=r,ge.primitive.frontFace=o,ge.depthStencil.depthWriteEnabled=i.depthWrite,ge.depthStencil.depthCompare=n,ge)),ge.layout=null,ge.vertex.module=null,ge.vertex.buffers=null,ge.fragment.module=null,i.pipelineCache.set(a,s)),s}function lp(e,t,r){let o=e.uniformData,i=(t._nativeSource||t._rasterSource)?.options.cutout;if(i&&(!Number.isFinite(i.x)||!Number.isFinite(i.y)||!Number.isFinite(i.radius)||i.radius<0))throw new Error("cutout requires finite x, y and a non-negative radius in CSS pixels");o[r+36]=(i?.x??0)*e.dpr,o[r+37]=(i?.y??0)*e.dpr,o[r+38]=(i?.radius??0)*e.dpr,o[r+39]=i?.outside?1:0}function up(e,t){let r=t.program.uniforms,o=e.uniformSlot++*256,i=e.uniformData,n=o/4;return i.set(t.worldMatrix,n),i.set(r.baseColor.value,n+16),i[n+19]=1,i[n+20]=r.metallic.value,i[n+21]=r.roughness.value,i[n+22]=r.opacity.value*(t.ground?t._appearance??1:1),i[n+23]=r.alphaCutoff.value,i.set(r.emissive.value,n+24),i[n+27]=r.occlusionStrength.value,i[n+28]=t.terrain?.[0]??0,i[n+29]=t.terrain?.[1]??0,i[n+30]=t.terrain?.[2]??0,i[n+31]=t.terrain?.[3]??0,i[n+32]=t.highlight?.[0]??0,i[n+33]=t.highlight?.[1]??0,i[n+34]=t.program.nightSparkle?i[55]:0,i[n+35]=t.ground?1:t._appearance??1,lp(e,t,n),o}var Pr={source:null,flipY:null};var Qr={texture:null};var eo=[null,null];function dp(e,t){t.uploaded!==t.image&&(e.queue.copyExternalImageToTexture((Pr.source=t.image,Pr.flipY=!!t.flipY,Pr),(Qr.texture=t.texture,Qr),(eo[0]=t.image.width,eo[1]=t.image.height,eo)),Pr.source=null,Qr.texture=null,t.uploaded=t.image)}var to={layout:null,entries:null};var hp=[];var gn={binding:0,resource:{buffer:null,size:160}};var yn={binding:1,resource:{buffer:null,size:240}};var xn={binding:2,resource:null};var fi=[{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null}];var pi=[{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null}];function gp(e,t,r){let{program:o}=t,i=hp;i.length=0,gn.resource.buffer=e.uniformBuffer,yn.resource.buffer=e.uniformBuffer,i.push(gn,yn),o.terrain&&(xn.resource=o.terrain.texture.createView(),i.push(xn)),t.boundBuffer=e.uniformBuffer;let n=t.boundTextures||=[];n.length=r.length;let a,s,m;for(a=0;a<r.length;a++)s=o.bindings[a],m=r[a],fi[a].binding=s.texture,fi[a].resource=m.texture.createView(),pi[a].binding=s.sampler,pi[a].resource=m.sampler,i.push(fi[a],pi[a]),n[a]||=[],n[a][0]=m.texture,n[a][1]=m.sampler;for(t.bindGroup=e.device.createBindGroup((to.layout=o.bindGroupLayout,to.entries=i,to)),to.layout=null,to.entries=null,gn.resource.buffer=null,yn.resource.buffer=null,xn.resource=null,a=0;a<r.length;a++)fi[a].resource=null,pi[a].resource=null;i.length=0}function yp(e,t){let{program:r}=t,{device:o}=e,i=t._textures||=[];i.length=0;let n,a,s;for(n of r.bindings){if(a=r.uniforms[n.name]?.value,!a)throw new Error(`Missing Layer3D texture: ${n.name}`);dp(o,a),i.push(a)}let m=!t.bindGroup||t.boundBuffer!==e.uniformBuffer||i.length!==t.boundTextures.length;for(s=0;!m&&s<i.length;s++)(i[s].texture!==t.boundTextures[s][0]||i[s].sampler!==t.boundTextures[s][1])&&(m=!0);m&&gp(e,t,i)}function vn(e,t,r,o,i){let{geometry:n}=t,a=v.get(e),{device:s}=a,m=cp(a,t,o,i),f=up(a,t);yp(a,t),r.setPipeline(m),r.setBindGroup(0,t.bindGroup,(Qs[0]=f,Qs)),r.setVertexBuffer(0,n.attributes.position.buffer),r.setVertexBuffer(1,n.attributes.normal.buffer),n.attributes.color&&r.setVertexBuffer(2,n.attributes.color.buffer),n.attributes.uv&&r.setVertexBuffer(3,n.attributes.uv.buffer);let p=n.attributes.instanceOffset;p&&r.setVertexBuffer(4,p.buffer);let c,l;for(c in n.attributes)l=n.attributes[c],l.needsUpdate&&(s.queue.writeBuffer(l.buffer,0,l.data),l.needsUpdate=!1,(c==="position"||c==="instanceOffset")&&(n.bounds=null));let u=n.attributes.index;u?(r.setIndexBuffer(u.buffer,u.indexFormat),r.drawIndexed(n.drawRange.count,p?.count??1,n.drawRange.start,0,0)):r.draw(n.drawRange.count,p?.count??1,n.drawRange.start,0)}function xp(e,t,r){let o=v.get(e),i=t.beginRenderPass((Jr.colorAttachments[0].view=o.context.getCurrentTexture().createView(),Jr.depthStencilAttachment.view=o.depthTexture.createView(),Jr));Jr.colorAttachments[0].view=null,Jr.depthStencilAttachment.view=null,i.setViewport(0,0,o.canvas.width,o.canvas.height,0,1),i.setBindGroup(1,o.sunlight.bindGroup);let n,a,s,m,f,p;for(n of r){if(a=n.worldMatrix,n.texture&&(n.program.uniforms.baseTexture.value=n.texture,n.program.uniforms.opacity.value=n.opacity),s=n.program.uniforms,s.roofTexture&&(s.roofTexture.value=Y.get(e)?.texture||o.roofFallbackTexture),!n._frontFace||n._frontFaceWorldVersion!==n._worldMatrixVersion||n._worldMatrixVersion===void 0){if(m=a[0]*(a[5]*a[10]-a[6]*a[9])-a[4]*(a[1]*a[10]-a[2]*a[9])+a[8]*(a[1]*a[6]-a[2]*a[5]),!Number.isFinite(m)||m===0)throw new Error("Singular 3D transform");n._frontFace=m<0?"cw":"ccw",n._frontFaceWorldVersion=n._worldMatrixVersion}f=n._frontFace,p=n.program,p.transparent&&p._layerMaterial.doubleSided&&!n._nativeSource?(vn(e,n,i,"front",f),vn(e,n,i,"back",f)):vn(e,n,i,p.cullMode,f)}i.end()}var vp=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0]);var wp=new Float32Array(20);function Mp(e,t){let r=e.meshes.get(t),o=t.geometry.drawRange;if(!(r&&r.world===t._worldMatrixVersion&&r.geometry===t.geometry&&r.start===o.start&&r.count===o.count&&r.appearance===(t._appearance??1)))return!1;let i;for(i of Object.values(t.geometry.attributes))if(i.needsUpdate)return!1;return!0}function bp(e,t,r){let o=e.cache,i=e.enabled&&o?.meshes.size===t.length,n,a;if(i){for(n=0;n<r.direction.length;n++)if(r.direction[n]!==o.direction[n]){i=!1;break}}if(i){for(a of t)if(!Mp(o,a)){i=!1;break}}return i}var Lp={min:[0,0,0],max:[0,0,0]};var Bp={position:[0,0,0],target:[0,0,0],up:[0,0,-1],x:[0,0,0],y:[0,0,0],z:[0,0,0],fov:45,aspect:1,near:1,far:500,viewMatrix:[],projectionMatrix:[],projectionViewMatrix:[]};var Tp=[0,0,0];var Pp=[0,0,0];function Cp(e,t,r){let o=e._shadowBounds;if(!o||o.version!==e._worldMatrixVersion||o.bounds!==t){o||=e._shadowBounds={min:[1/0,1/0,1/0],max:[-1/0,-1/0,-1/0]},o.version=e._worldMatrixVersion,o.bounds=t,o.min.fill(1/0),o.max.fill(-1/0);let i,n,a,s,m,f,p;for(i=0;i<8;i++)for(n=i&1?t.max[0]:t.min[0],a=i&2?t.max[1]:t.min[1],s=i&4?t.max[2]:t.min[2],m=r[3]*n+r[7]*a+r[11]*s+r[15],f=0;f<3;f++)p=(r[f]*n+r[f+4]*a+r[f+8]*s+r[f+12])/m,o.min[f]=Math.min(o.min[f],p),o.max[f]=Math.max(o.max[f],p)}return o}function Sp(e,t={min:[1/0,1/0,1/0],max:[-1/0,-1/0,-1/0]}){let{min:r,max:o}=t;r.fill(1/0),o.fill(-1/0);let i,n,a,s,m;for(i of e)for((!i.geometry.bounds||i.geometry.attributes.position.needsUpdate)&&Be(i.geometry),n=i.geometry.bounds,a=i.worldMatrix,s=Cp(i,n,a),m=0;m<3;m++)r[m]=Math.min(r[m],s.min[m]),o[m]=Math.max(o[m],s.max[m]);return r[1]=Math.min(0,r[1]),t}function Ep(e,t){let{min:r,max:o}=Sp(e,Lp),i=Bp;i.viewTransform||=new DOMMatrix,i.projectionTransform||=new DOMMatrix,i.projectionViewTransform||=new DOMMatrix;let n=Tp,a=Pp,s,m,f,p,c,l,u=Math.max(100,Math.hypot(o[0]-r[0],o[1]-r[1],o[2]-r[2]));for(s=0;s<3;s++)i.target[s]=(r[s]+o[s])/2,i.position[s]=i.target[s]+t.direction[s]*u*2;i.far=u*5,Xr(i);let d=i.viewMatrix;for(n.fill(1/0),a.fill(-1/0),s=0;s<8;s++)for(f=s&1?o[0]:r[0],p=s&2?o[1]:r[1],c=s&4?o[2]:r[2],m=0;m<3;m++)l=d[m]*f+d[m+4]*p+d[m+8]*c+d[m+12],n[m]=Math.min(n[m],l-20),a[m]=Math.max(a[m],l+20);let y=2/(a[0]-n[0]),g=2/(a[1]-n[1]),x=-1/(a[2]-n[2]),w=new Float32Array(16);for(s=0;s<16;s+=4)w[s]=d[s]*y,w[s+1]=d[s+1]*g,w[s+2]=d[s+2]*x,w[s+3]=d[s+3];return w[12]-=(a[0]+n[0])/(a[0]-n[0]),w[13]-=(a[1]+n[1])/(a[1]-n[1]),w[14]+=a[2]/(a[2]-n[2]),w}var em={entries:[{binding:0,visibility:null,buffer:{type:"uniform",hasDynamicOffset:!0}}]};var tm={entries:[{binding:0,visibility:null,buffer:{type:"uniform"}}]};var ro={layout:null,entries:[{binding:0,resource:{buffer:null}}]};var wn={code:null};var lt={layout:null,vertex:{module:null,entryPoint:"main",buffers:null},fragment:{module:null,entryPoint:"fragmentMain",targets:[]},primitive:{topology:"triangle-list",cullMode:"none"},depthStencil:{format:"depth32float",depthWriteEnabled:!0,depthCompare:"less",depthBias:2,depthBiasSlopeScale:2}};var oo={bindGroupLayouts:[null,null]};var io=Object.freeze({arrayStride:12,attributes:Object.freeze([Object.freeze({shaderLocation:0,offset:0,format:"float32x3"})])});var Mn=Object.freeze({arrayStride:16,stepMode:"instance",attributes:Object.freeze([Object.freeze({shaderLocation:4,offset:0,format:"float32x4"})])});var kp=[io,Mn];var _p=[io];function rm(e,t,r=!1){let o=r?"instancePipeline":"pipeline";if(!t[o]){t.meshLayout||(t.meshLayout=e.createBindGroupLayout((em.entries[0].visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,em)),t.depthLayout=e.createBindGroupLayout((tm.entries[0].visibility=GPUShaderStage.VERTEX,tm)),t.depthBindGroup=e.createBindGroup((ro.layout=t.depthLayout,ro.entries[0].resource.buffer=t.buffer,ro)),ro.layout=null,ro.entries[0].resource.buffer=null);let i=e.createShaderModule((wn.code=` struct Mesh{world:mat4x4<f32>,padding:array<vec4<f32>,4>,highlight:vec4<f32>};@group(0)@binding(0)var<uniform> mesh:Mesh;@group(1)@binding(0)var<uniform> matrix:mat4x4<f32>;@vertex fn main(@location(0)position:vec3<f32>${r?", @location(4) offset: vec4<f32>":""})->@builtin(position)vec4<f32>{return matrix * mesh.world * vec4<f32>(position${r?" + offset.xyz":""},1.0);}@fragment fn fragmentMain(@builtin(position)position:vec4<f32>){let noise = fract(52.9829189 * fract(dot(floor(position.xy),vec2<f32>(0.06711056,0.00583715))));if(mesh.highlight.w < 1.0 && noise >= mesh.highlight.w){discard;}}`,wn));wn.code=null;let n=r?kp:_p;t[o]=e.createRenderPipeline((lt.layout=e.createPipelineLayout((oo.bindGroupLayouts[0]=t.meshLayout,oo.bindGroupLayouts[1]=t.depthLayout,oo)),lt.vertex.module=i,lt.vertex.buffers=n,lt.fragment.module=i,lt)),oo.bindGroupLayouts[0]=null,oo.bindGroupLayouts[1]=null,lt.layout=null,lt.vertex.module=null,lt.vertex.buffers=null,lt.fragment.module=null}}var bn={colorAttachments:[],depthStencilAttachment:{view:null,depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}};var no={layout:null,entries:[{binding:0,resource:{buffer:null,size:144}}]};var om=[null];function Ip(e,t,r){let o=v.get(e),i=o.device,n=o.sunlight,a=t.beginRenderPass((bn.depthStencilAttachment.view=n.texture.createView(),bn));bn.depthStencilAttachment.view=null;let s=n.pipeline;a.setPipeline(s),a.setBindGroup(1,n.depthBindGroup);let m,f,p,c,l,u,d;for(m of r){f=m.geometry.attributes.instanceOffset,p=f?n.instancePipeline:n.pipeline,p!==s&&(s=p,a.setPipeline(s)),c=o.uniformSlot++*256,o.uniformData.set(m.worldMatrix,c/4),o.uniformData[c/4+35]=m._appearance??1,m._shadowBuffer!==o.uniformBuffer&&(m._shadowBuffer=o.uniformBuffer,m._shadowBindGroup=i.createBindGroup((no.layout=n.meshLayout,no.entries[0].resource.buffer=o.uniformBuffer,no)),no.layout=null,no.entries[0].resource.buffer=null);for(l of Object.values(m.geometry.attributes))l.needsUpdate&&(i.queue.writeBuffer(l.buffer,0,l.data),l.needsUpdate=!1);a.setBindGroup(0,m._shadowBindGroup,(om[0]=c,om)),a.setVertexBuffer(0,m.geometry.attributes.position.buffer),f&&a.setVertexBuffer(1,f.buffer),u=m.geometry.attributes.index,d=m.geometry.drawRange,u?(a.setIndexBuffer(u.buffer,u.indexFormat),a.drawIndexed(d.count,f?.count??1,d.start,0,0)):a.draw(d.count,f?.count??1,d.start,0)}a.end()}var ci={size:[null,null],format:"depth32float",usage:null};function Ln(e,t){let r=v.get(e).device,o=v.get(e).sunlight;o.size!==t&&(o.texture&&F(e,o.texture),o.size=t,o.texture=r.createTexture((ci.size[0]=t,ci.size[1]=t,ci.usage=GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC,ci)),hn(e))}function zp(e,t,r,o){let i=v.get(e),n=i.device,a=i.sunlight;if(!r.length||!o||o.altitude<3){if(!a.enabled)return;n.queue.writeBuffer(a.buffer,0,vp),a.enabled=!1,a.cache=null;return}if(bp(a,r,o))return;let s=wp;a.enabled=!0,Ln(e,Math.min(2048,n.limits.maxTextureDimension2D)),s.set(Ep(r,o)),s[16]=1,n.queue.writeBuffer(a.buffer,0,s),rm(n,a);let m;for(m of r)if(m.geometry.attributes.instanceOffset){rm(n,a,!0);break}Ip(e,t,r);let f=new Map,p;for(p of r)f.set(p,{world:p._worldMatrixVersion,geometry:p.geometry,start:p.geometry.drawRange.start,count:p.geometry.drawRange.count,appearance:p._appearance??1});a.cache={direction:[...o.direction],meshes:f}}function Bn(e){let t=et.get(e);kt.delete(e),et.set(e,null),!kt.size&&t!=null&&cancelAnimationFrame(t)}var zt=new WeakMap;var li=new WeakMap;var ui=new WeakMap;var me=new WeakMap;var Tn=new WeakMap;function Z(e,t){e.parent&&e.parent.children.splice(e.parent.children.indexOf(e),1),e.parent=t,t&&t.children.push(e)}function ao(e,t){Tn.get(e)?.abort();let r=A.get(e).get(t);r&&(Z(r,null),_(e),r.texture!==t.texture&&F(e,r.texture.texture),A.get(e).delete(t))}function so(e,t){let r=`${t.coords.z}/${t.coords.x}/${t.coords.y}`;A.get(e).get(r)===t&&(A.get(e).delete(r),Te.set(e,(Te.get(e)||0)+1),t.request.abort(),me.get(e)&&ao(me.get(e),t),t.mesh&&Z(t.mesh,null),t.texture&&F(e,t.texture.texture),t.image?.close(),e.fire("tileunload",{tile:t,coords:t.coords}),_(e))}function mo(e){let t=Ht.get(e),r=performance.now();if(li.get(e)===Te.get(e)&&ui.get(e)===t&&r<zt.get(e))return Number.isFinite(zt.get(e));li.set(e,Te.get(e)),ui.set(e,t),zt.set(e,1/0);let o=[],i,n,a,s,m,f;for(i of t)n=A.get(e).get(i),n?.done&&r-n.loadedAt<250&&zt.set(e,Math.min(zt.get(e),n.loadedAt+250)),(!n?.done||r-n.loadedAt<250)&&(a=i.split("/"),o.push({z:Number(a[0]),x:Number(a[1]),y:Number(a[2])}));for([i,n]of A.get(e))if(!t.has(i)){s=!1;for(m of o)if(f=Math.min(m.z,n.coords.z),Math.floor(m.x/2**(m.z-f))===Math.floor(n.coords.x/2**(n.coords.z-f))&&Math.floor(m.y/2**(m.z-f))===Math.floor(n.coords.y/2**(n.coords.z-f))){s=!0;break}s||so(e,n)}return Number.isFinite(zt.get(e))}b();function fo(e){return xe.get(e.source)===e&&e.map.hasLayer(e.source)}b();var Pn=Object.freeze([1,1,1]);var Cr=new WeakMap;b();function Cn(e,t,r,o){let{source:i,marker:n,paneOrder:a,order:s}=e;t.program.uniforms.baseColor.value=r,t.program.uniforms.opacity.value=o,i instanceof h.GridLayer&&(t.opacity=o);let m=n?i._zIndex+(Cr.get(i)||0):i.options.zIndex;t.renderOrder=a*1e6+(m||0)*1e3+s,t._nativeSource=i,t._nativeUsed=!0}var Ap=Object.freeze([0,2,1,1,2,3]);var im=Object.freeze([0,0,1,0,0,1,1,1]);var Op=Object.freeze({minFilter:"linear",magFilter:"linear"});function _e(e,t){if(!t)return;Z(t,null),_(e);let r;for(r of Object.values(t.geometry.attributes))r.buffer.destroy()}async function Rp(e,t,r,o,i,n,a){let s;try{if(s=await createImageBitmap(o),!fo(e)||e.textures.get(t)!==r)return;i.queue.copyExternalImageToTexture({source:s},{texture:r.texture},[n,a]),r.uploaded=o,r.pending=!1,qe(e)}catch(m){e.failed=!0,e.source.fire("error",{error:m})}finally{s?.close()}}function Gp(e,t,r,o,i,n,a){try{i.queue.copyExternalImageToTexture({source:o},{texture:r.texture},[n,a])}catch(s){throw r.texture.destroy(),e.textures.delete(t),s}r.uploaded=o}function Up(e,t,r){if(!(r instanceof HTMLImageElement)&&!(r instanceof HTMLCanvasElement))throw new Error("WebGPU native raster layers require image or canvas tiles");let{backend:o,textures:i,meshes:n}=e,a=i.get(t),s=r.currentSrc||r.src;if(!a||a.image!==r||a.url!==s){if(a){let c=n.get(t);c&&_e(o,c),n.delete(t),F(o,a.texture),i.delete(t)}let m=r.naturalWidth||r.width,f=r.naturalHeight||r.height;if(!m||!f)return;let{device:p}=v.get(o);a={device:p,image:r,url:s,format:"rgba8unorm",uploaded:null,texture:p.createTexture({size:[m,f],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:p.createSampler(Op)},i.set(t,a),r instanceof HTMLCanvasElement?(a.pending=!0,Rp(e,t,a,r,p,m,f)):Gp(e,t,a,r,p,m,f)}return a.used=!0,a.uploaded===r?a:void 0}b();var po=Object.freeze({});var Sn={size:null,usage:null};var ut={value:0};function Pe(){return{position:[0,0,0],rotation:[0,0,0],scale:[1,1,1],worldMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],children:[],highlightRange:[0,0],visible:!0}}var En={code:null};var kn={code:null};var co={bindGroupLayouts:[null,null]};var Fp=" fn demSample(pixel:vec2<i32>)-> f32{if(any(pixel < vec2<i32>(0))|| any(pixel >= vec2<i32>(textureDimensions(dem)))){return -1e9;}return textureLoad(dem,pixel,0).r;}fn elevation(pixel:vec2<f32>,base:f32)-> f32{let p = pixel - vec2<f32>(0.5);let f = fract(p);let i = vec2<i32>(floor(p));let v00 = demSample(i);let v10 = demSample(i + vec2<i32>(1,0));let v01 = demSample(i + vec2<i32>(0,1));let v11 = demSample(i + vec2<i32>(1,1));if(v00 > -1000.0 && v10 > -1000.0 && v01 > -1000.0 && v11 > -1000.0){return mix(mix(v00,v10,f.x),mix(v01,v11,f.x),f.y);}if(v00 > -1000.0){return v00;}if(v10 > -1000.0){return v10;}if(v01 > -1000.0){return v01;}if(v11 > -1000.0){return v11;}return base;}";var Np=Object.freeze({arrayStride:12,attributes:Object.freeze([Object.freeze({shaderLocation:1,offset:0,format:"float32x3"})])});var jp=Object.freeze({arrayStride:12,attributes:Object.freeze([Object.freeze({shaderLocation:2,offset:0,format:"float32x3"})])});var Wp=Object.freeze({arrayStride:8,attributes:Object.freeze([Object.freeze({shaderLocation:3,offset:0,format:"float32x2"})])});var _n={entries:null};var Zp=[];var nm={binding:0,visibility:null,buffer:{type:"uniform",hasDynamicOffset:!0}};var am={binding:1,visibility:null,buffer:{type:"uniform"}};var sm={binding:2,visibility:null,texture:{sampleType:"unfilterable-float",viewDimension:"2d"}};var $p=[{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}},{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}},{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}},{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}},{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}}];var Vp=[{binding:null,visibility:null,sampler:{type:"filtering"}},{binding:null,visibility:null,sampler:{type:"filtering"}},{binding:null,visibility:null,sampler:{type:"filtering"}},{binding:null,visibility:null,sampler:{type:"filtering"}},{binding:null,visibility:null,sampler:{type:"filtering"}}];function qp(e,t){let r=Zp;r.length=0,nm.visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,am.visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,r.push(nm,am),t.hasTerrain&&(sm.visibility=GPUShaderStage.VERTEX,r.push(sm));let o,i,n=0;for(o of t.bindings)i=$p[n],i.binding=o.texture,i.visibility=GPUShaderStage.FRAGMENT,r.push(i),i=Vp[n++],i.binding=o.sampler,i.visibility=GPUShaderStage.FRAGMENT,r.push(i);let a=e.createBindGroupLayout((_n.entries=r,_n));return _n.entries=null,a}function Hp(e){let t={baseColor:{value:e.color||[1,1,1]},metallic:{value:e.metallic??0},roughness:{value:e.roughness??.85},opacity:{value:e.opacity??1},alphaCutoff:{value:e.alphaCutoff??.5},occlusionStrength:{value:e.occlusionStrength??1},emissive:{value:e.emissive||[0,0,0]}};return e.baseTexture&&(t.baseTexture={value:e.baseTexture}),e.metalTexture&&(t.metalTexture={value:e.metalTexture}),e.emissiveTexture&&(t.emissiveTexture={value:e.emissiveTexture}),e.occlusionTexture&&(t.occlusionTexture={value:e.occlusionTexture}),(e.roofTexture||e.wallTexture)&&(t.roofTexture={value:null}),t}function lo(e,t,r){if(!r)return"";let o=3+e.length*2;return e.push({name:t,texture:o,sampler:o+1}),`@group(0)@binding(${o})var ${t}:texture_2d<f32>;@group(0)@binding(${o+1})var ${t}Sampler:sampler;`}function Yp(e){let t,r;for(t of["roofTexture","wallTexture"])if(r=e[t],r!==void 0&&typeof r!="boolean"&&(!Number.isFinite(r)||r<0||r>1))throw new Error(`${t} must be a boolean or a finite number between 0 and 1`)}function Xp(e){let t=Number(e.roofTexture??0);return` output.roofUv =(frame.roofMatrix * world).xz;output.roof = select(0.0,select(${Number(e.wallTexture??0).toFixed(8)},${t.toFixed(8)},input.normal.y >= 0.5),((${!!e.roofTexture} && input.normal.y >= 0.5)||(${!!e.wallTexture} && abs(input.normal.y)< 0.5))&& !highlighted);`}function Kp(e,t,r,o,i,n){let a=e.instanced?" + input.instanceOffset.xyz":"";return` struct Mesh{worldMatrix:mat4x4<f32>,baseColor:vec4<f32>,material:vec4<f32>,emissive:vec4<f32>,terrain:vec4<f32>,highlight:vec4<f32>,cutout:vec4<f32>,};struct Frame{viewMatrix:mat4x4<f32>,projectionMatrix:mat4x4<f32>,roofMatrix:mat4x4<f32>,lightDirection:vec4<f32>,skyDirection:vec4<f32>,atmosphereTint:vec4<f32>,};@group(0)@binding(0)var<uniform> u:Mesh;@group(0)@binding(1)var<uniform> frame:Frame;struct Solar{matrix:mat4x4<f32>,params:vec4<f32>};@group(1)@binding(0)var<uniform> solar:Solar;${o?`@group(0)@binding(2)var dem:texture_2d<f32>;${r}`:""} struct VertexInput{@location(0)position:vec3<f32>,@location(1)normal:vec3<f32>,${e.instanced?"@location(4) instanceOffset: vec4<f32>,":""} ${e.vertexColors?"@location(2) color: vec3<f32>,":""} ${i?"@location(3) uv: vec2<f32>,":""}};struct VertexOutput{@builtin(position)position:vec4<f32>,@location(0)color:vec3<f32>,@location(1)normal:vec3<f32>,@location(2)viewPosition:vec3<f32>,@location(6)shadowPosition:vec4<f32>,@location(7)worldPosition:vec3<f32>,${t?"@location(8) localPosition: vec3<f32>,":""} ${i?"@location(3) uv: vec2<f32>,":""} ${n?"@location(4) roofUv: vec2<f32>, @location(5) roof: f32,":""}};@vertex fn vertexMain(input:VertexInput,@builtin(vertex_index)vertexIndex:u32)-> VertexOutput{var output:VertexOutput;var position = input.position${a};${o?"position.y = elevation(u.terrain.xy + input.uv * u.terrain.z, u.terrain.w) - u.terrain.w;":""} let featureVertex = f32(vertexIndex)${e.instanced?" + input.instanceOffset.w":""};let highlighted = featureVertex >= u.highlight.x && featureVertex < u.highlight.y;output.color = ${e.vertexColors?"select(input.color, vec3<f32>(72.0 / 255.0, 217.0 / 255.0, 1.0), highlighted)":"u.baseColor.rgb"};let m = mat3x3<f32>(u.worldMatrix[0].xyz,u.worldMatrix[1].xyz,u.worldMatrix[2].xyz);let normal =(cross(m[1],m[2])* input.normal.x + cross(m[2],m[0])* input.normal.y + cross(m[0],m[1])* input.normal.z)/ determinant(m);output.normal =(frame.viewMatrix * vec4<f32>(normal,0.0)).xyz;let world = u.worldMatrix * vec4<f32>(position,1.0);output.shadowPosition = solar.matrix * world;output.worldPosition = world.xyz / world.w;${t?`output.localPosition = input.position${a};`:""} let viewPosition = frame.viewMatrix * world;output.viewPosition = viewPosition.xyz;${i?"output.uv = input.uv;":""} ${n?Xp(e):""} output.position = frame.projectionMatrix * viewPosition;return output;}`}function Jp(e,t,r){return` var normal = normalize(input.normal)* select(-1.0,1.0,frontFacing);let texel = ${t?"textureSample(baseTexture, baseTextureSampler, input.uv)":"vec4<f32>(1.0)"};let alpha = u.material.z * texel.a;${e.alphaMode==="MASK"?"if (alpha < u.material.w) { discard; }":""} ${e.alphaMode==="BLEND"?"if (alpha < 0.01) { discard; }":""} var base = ${e.vertexColors?"toLinear(min(input.color, vec3<f32>(1.0)))":"input.color"} * ${e.baseTexture?.srgb?"texel.rgb":"toLinear(texel.rgb)"};${r?" if(input.roof > 0.0 && all(input.roofUv >= vec2<f32>(0.0))&& all(input.roofUv <= vec2<f32>(1.0))){let roof = textureSampleLevel(roofTexture,roofTextureSampler,input.roofUv,0.0);base = mix(base,toLinear(roof.rgb),roof.a * input.roof);}":""}`}function Qp(e,t,r,o,i,n,a){return e.unlit?` let rasterTexel = ${r?"textureSample(baseTexture, baseTextureSampler, input.uv)":"vec4<f32>(input.color, 1.0)"};return vec4<f32>(toSRGB(toLinear(rasterTexel.rgb)*(frame.atmosphereTint.rgb *(0.55 + 0.45 * sunlight)+ artificial)),${e.alphaMode==="BLEND"?"u.material.z * rasterTexel.a":"1.0"});`:`${Jp(e,r,a)} let mr = ${o?"textureSample(metalTexture, metalTextureSampler, input.uv)":"vec4<f32>(1.0)"};let metal = clamp(u.material.x * mr.b,0.0,1.0);let rough = clamp(u.material.y * mr.g,0.08,1.0);let view = normalize(-input.viewPosition);let halfVector = normalize(view + frame.lightDirection.xyz);let nl = max(dot(normal,frame.lightDirection.xyz),0.0)* frame.lightDirection.w * sunlight;let nv = max(dot(normal,view),0.001);let nh = max(dot(normal,halfVector),0.0);let vh = max(dot(view,halfVector),0.0);let a2 = pow(rough,4.0);let d = a2 / max(PI * pow(nh * nh *(a2 - 1.0)+ 1.0,2.0),0.0001);let gv = nl * sqrt(nv * nv *(1.0 - a2)+ a2);let gl = nv * sqrt(nl * nl *(1.0 - a2)+ a2);let visibility = 0.5 / max(gv + gl,0.0001);let f0 = mix(vec3<f32>(0.04),base,metal);let fresnel = f0 +(1.0 - f0)* pow(1.0 - vh,5.0);let specular = d * visibility * fresnel;let diffuse =(1.0 - metal)* base / PI;let sky = dot(normal,frame.skyDirection.xyz)* 0.5 + 0.5;let ambient = mix(toLinear(vec3<f32>(0.455,0.412,0.322)),vec3<f32>(1.0),sky)*(2.0 / PI);let ao = ${n?"mix(1.0, textureSample(occlusionTexture, occlusionTextureSampler, input.uv).r, u.emissive.w)":"1.0"};${t?" let lattice =(fract(input.localPosition / 2.5)- 0.5)* 2.5;let pointGlow =(1.0 - smoothstep(0.16,0.42,length(lattice)))* u.highlight.z;":""} let glow = ${t?"vec3<f32>(3.0, 2.6, 1.8) * pointGlow +":""}${e.vertexColors?" max(input.color - vec3<f32>(1.0), vec3<f32>(0.0)) * (0.3 + 5.0 * frame.skyDirection.w) +":""} u.emissive.rgb * ${i?e.emissiveTexture.srgb?"textureSample(emissiveTexture, emissiveTextureSampler, input.uv).rgb":"toLinear(textureSample(emissiveTexture, emissiveTextureSampler, input.uv).rgb)":"vec3<f32>(1.0)"};var color = ambient * base *(1.0 - metal)* ao +(diffuse + specular)* nl * toLinear(vec3<f32>(1.0,0.937,0.835))* 3.0 + glow;${e.vertexColors?"color = base * (ambient + toLinear(vec3<f32>(1.0, 0.937, 0.835)) * (3.0 / PI) * nl) + glow;":""} color =(color - glow)* frame.atmosphereTint.rgb + base * artificial *(1.0 - metal * 0.5)+ glow;appearance(input.position.xy);return vec4<f32>(toSRGB(color),${e.alphaMode==="BLEND"?"alpha":"1.0"});`}function ec(e=po,t=!1,r=""){let o=!!e.baseTexture,i=!!e.metalTexture,n=!!e.emissiveTexture,a=!!e.occlusionTexture,s=!!(e.roofTexture||e.wallTexture);Yp(e);let m=!!e.terrain,f=o||i||n||a||e.nightLight,p=Kp(e,t,r,m,f,s),c=[],l=lo(c,"baseTexture",o),u=lo(c,"metalTexture",i),d=lo(c,"emissiveTexture",n),y=lo(c,"occlusionTexture",a),g=lo(c,"roofTexture",s),x=` struct Mesh{worldMatrix:mat4x4<f32>,baseColor:vec4<f32>,material:vec4<f32>,emissive:vec4<f32>,terrain:vec4<f32>,highlight:vec4<f32>,cutout:vec4<f32>,};struct Frame{viewMatrix:mat4x4<f32>,projectionMatrix:mat4x4<f32>,roofMatrix:mat4x4<f32>,lightDirection:vec4<f32>,skyDirection:vec4<f32>,atmosphereTint:vec4<f32>,};struct Solar{matrix:mat4x4<f32>,params:vec4<f32>,};@group(0)@binding(0)var<uniform> u:Mesh;@group(0)@binding(1)var<uniform> frame:Frame;@group(1)@binding(0)var<uniform> solar:Solar;@group(1)@binding(1)var shadowTexture:texture_depth_2d;@group(1)@binding(2)var shadowSampler:sampler_comparison;@group(1)@binding(3)var<storage,read> lightGrid:array<vec4<f32>>;${l}${u}${d}${y}${g} struct FragmentInput{@builtin(position)position:vec4<f32>,@location(0)color:vec3<f32>,@location(1)normal:vec3<f32>,@location(2)viewPosition:vec3<f32>,@location(6)shadowPosition:vec4<f32>,@location(7)worldPosition:vec3<f32>,${t?"@location(8) localPosition: vec3<f32>,":""} ${f?"@location(3) uv: vec2<f32>,":""} ${s?"@location(4) roofUv: vec2<f32>, @location(5) roof: f32,":""}};const PI:f32 = 3.14159265;fn toLinear(c:vec3<f32>)-> vec3<f32>{return select(c / 12.92,pow((c + vec3<f32>(0.055))/ 1.055,vec3<f32>(2.4)),c >= vec3<f32>(0.04045));}fn toSRGB(c:vec3<f32>)-> vec3<f32>{return select(c * 12.92,1.055 * pow(max(c,vec3<f32>(0.0)),vec3<f32>(1.0 / 2.4))- vec3<f32>(0.055),c >= vec3<f32>(0.0031308));}fn sunVisibility(position:vec4<f32>)-> f32{let p = position.xyz / position.w;let uv = vec2<f32>(p.x * 0.5 + 0.5,0.5 - p.y * 0.5);if(solar.params.x < 0.5 || any(uv < vec2<f32>(0.0))|| any(uv > vec2<f32>(1.0))|| p.z < 0.0 || p.z > 1.0){return 1.0;}return textureSampleCompareLevel(shadowTexture,shadowSampler,uv,p.z - 0.0003);}fn gridLighting(position:vec3<f32>,normal:vec3<f32>,offset:u32)-> vec3<f32>{let grid = lightGrid[offset];if(grid.w < 1.0){return vec3<f32>(0.0);}let cell = vec2<i32>(floor((position.xz - grid.xy)/ grid.z));if(any(cell < vec2<i32>(0))|| cell.x >= i32(grid.w)|| cell.y >= i32(lightGrid[offset + 1u].x)){return vec3<f32>(0.0);}let header = lightGrid[offset + 2u + u32(cell.y)* u32(grid.w)+ u32(cell.x)];var light = vec3<f32>(0.0);for(var i = 0u;i < u32(header.y);i++){let source = lightGrid[offset + u32(header.x)+ i * 2u];let colour = lightGrid[offset + u32(header.x)+ i * 2u + 1u];let delta = source.xyz - position;let distance2 = max(dot(delta,delta),1.0);let falloff = max(0.0,1.0 - distance2 /(source.w * source.w));let lambert = max(0.0,dot(normal,delta / sqrt(distance2)));light += toLinear(colour.rgb)* colour.w * lambert * falloff * falloff / distance2;}return light;}fn localLighting(position:vec3<f32>,normal:vec3<f32>)-> vec3<f32>{if(frame.skyDirection.w <= 0.0){return vec3<f32>(0.0);}var light = gridLighting(position,normal,0u);let moving = u32(lightGrid[1].z);if(moving > 0u){light += gridLighting(position,normal,moving);}return light * frame.skyDirection.w;}fn appearance(position:vec2<f32>){let noise = fract(52.9829189 * fract(dot(floor(position),vec2<f32>(0.06711056,0.00583715))));if(u.highlight.w < 1.0 && noise >= u.highlight.w){discard;}}@fragment fn fragmentMain(input:FragmentInput,@builtin(front_facing)frontFacing:bool)->@location(0)vec4<f32>{let cutoutDistance = distance(input.position.xy,u.cutout.xy);if(select((cutoutDistance < u.cutout.z),(cutoutDistance >= u.cutout.z),u.cutout.w > 0.0)){discard;}${e.nightLight?" if(input.uv.x <= 2.0){let radial = max(0.0,1.0 - dot(input.uv,input.uv));let alpha = radial * radial * frame.skyDirection.w * 0.65;if(alpha < 0.005){discard;}appearance(input.position.xy);return vec4<f32>(input.color,alpha);}":""} let sunlight = sunVisibility(input.shadowPosition);let worldNormal = normalize(transpose(mat3x3<f32>(frame.viewMatrix[0].xyz,frame.viewMatrix[1].xyz,frame.viewMatrix[2].xyz))* normalize(input.normal))* select(-1.0,1.0,frontFacing);let artificial = localLighting(input.worldPosition,worldNormal);${Qp(e,t,o,i,n,a,s)}}`;return{vertex:p,fragment:x,bindings:c,textured:f,hasTerrain:m}}async function tc(e,t){let r,o;try{let i=await Promise.all(t),n="",a=0;for(r of i)for(o of r.messages)o.type==="error"&&(n+=`${a++?`
|
|
2
|
-
`:""}${o.message}`);a&&e.fire("error",{error:new Error(`Unable to compile Layer3D WGSL: ${n}`)})}catch(i){e.fire("error",{error:i})}}function Ke(e,t=po){let r=ec(t,!!e.options.nightSparkle,t.terrain?Fp:""),o=v.get(e).device.createShaderModule((En.code=r.vertex,En));En.code=null;let i=v.get(e).device.createShaderModule((kn.code=r.fragment,kn));kn.code=null,tc(e,[o.getCompilationInfo(),i.getCompilationInfo()]);let n=[io,Np,t.vertexColors?jp:null,r.textured?Wp:null];t.instanced&&n.push(Mn);let a=qp(v.get(e).device,r),s=v.get(e).device.createPipelineLayout((co.bindGroupLayouts[0]=a,co.bindGroupLayouts[1]=v.get(e).sunlight.layout,co));co.bindGroupLayouts[0]=null,co.bindGroupLayouts[1]=null;let m=Hp(t);return{device:v.get(e).device,vertex:o,fragment:i,bindings:r.bindings,vertexBuffers:n,bindGroupLayout:a,pipelineLayout:s,pipelineCache:new Map,cullMode:t.doubleSided?"none":"back",transparent:t.alphaMode==="BLEND",depthWrite:t.depthWrite??t.alphaMode!=="BLEND",depthTest:t.depthTest!==!1,terrain:t.terrain,nightLight:!!t.nightLight,nightSparkle:!!e.options.nightSparkle,uniforms:m,_layerMaterial:t}}function er(e,t,r=po,o=0,i){let{device:n}=v.get(e),a={},s,m,f,p,c;for([s,m]of Object.entries(t))f=new Float32Array(m),p=s==="uv"?2:3,c=n.createBuffer((Sn.size=Math.max(4,f.byteLength),Sn.usage=GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST|o,Sn)),n.queue.writeBuffer(c,0,f),a[s]={size:p,data:f,count:f.length/p,buffer:c};let l={...Pe(),device:n,geometry:{device:n,attributes:a,drawRange:{start:0,count:a.position.count}},program:i||Ke(e,{vertexColors:!0,doubleSided:!0,...r}),id:ut.value++,renderOrder:0,extras:{}};return Z(l,L.get(e)),_(e),l}function In(e,t,r,o,i,n,a){let{backend:s,source:m,meshes:f}=e;if(!r.length)return;let p=f.get(t);if(!p||p.geometry.attributes.position.data.length!==r.length||p.program.uniforms.baseTexture?.value!==n){let c=[],l;for(l=0;l<r.length;l++)c.push(l%3===1?1:0);let u={position:r,normal:c};a&&(u.uv=a);let d={vertexColors:!1,color:o,opacity:i,unlit:!0,alphaMode:"BLEND"};n&&(d.baseTexture=n),p&&_e(s,p),p=er(s,u,d,0,m instanceof h.GridLayer?e.rasterProgram:void 0),m instanceof h.GridLayer&&(e.rasterProgram||=p.program,p.texture=n),f.set(t,p)}else{let c=p.geometry.attributes.position;c.data.set(r),c.needsUpdate=!0,p.geometry.bounds=null}return Cn(e,p,o,i),p}function uo(e,t,r,o,i){let n=Up(e,t,r);if(!n)return;let a=Ap,s=[],m=[],f;for(f of a)s.push(...o[f]),m.push(im[f*2],im[f*2+1]);return In(e,t,s,Pn,i,n,m)}var O=new WeakMap;X();function ho(e,t){let{map:r,backend:o}=e,i=r.options.crs,n=i.project(O.get(o)),a=i.project(t),s=Math.cos(O.get(o).lat*T);return[(a.x-n.x)*s,0,-(a.y-n.y)*s]}function zn(e,t){let r=[],o,i;for(o=0;o<4;o++)i=o===0?t.getNorthWest():o===1?t.getNorthEast():o===2?t.getSouthWest():t.getSouthEast(),r.push(ho(e,i));return r}function oc(e){let{source:t,textures:r,meshes:o}=e,i,n,a,s,m,f,p;for(i in t._tiles)Object.hasOwn(t._tiles,i)&&(n=t._tiles[i],!(!n.loaded||n.el instanceof HTMLImageElement&&!n.el.naturalWidth)&&(a=(t.options.opacity??1)*(n._gpuOpacity??1),s=r.get(i),m=o.get(i),m&&s?.image===n.el&&s.url===(n.el.currentSrc||n.el.src)?(s.used=!0,Cn(e,m,Pn,a)):([f,p]=t._tileCoordsToNwSe(n.coords),m=uo(e,i,n.el,zn(e,new h.LatLngBounds(f,p)),a)),m&&(m.renderOrder+=n.coords.z/100)))}function ic(e){let{source:t}=e;t._image?.complete&&t._image.naturalWidth&&uo(e,"image",t._image,zn(e,t.getBounds()),t.options.opacity??1)}var nc=Object.freeze(["m11","m12","m13","m14","m21","m22","m23","m24","m31","m32","m33","m34","m41","m42","m43","m44"]);b();X();W();function An(e,t,r){let o=e.options.rotation+(e.options.rotateWithView?S(e._map)*T:0);e.options.keepUpright&&Math.cos(o)<0&&(o+=Math.PI);let i=e.options.scale;return new h.Point((t*Math.cos(o)-r*Math.sin(o))*i,(t*Math.sin(o)+r*Math.cos(o))*i)}function di(e,t,r,o,i,n){return e.x=t.m11*r+t.m21*o+t.m31*i+t.m41*n,e.y=t.m12*r+t.m22*o+t.m32*i+t.m42*n,e.z=t.m13*r+t.m23*o+t.m33*i+t.m43*n,e.w=t.m14*r+t.m24*o+t.m34*i+t.m44*n,e}function ac(e,t,r){let o=e.source.options.icon.options,i=o[t==="shadow"?"shadowSize":"iconSize"],n=e.markerImageBounds||=[0,0,0,0];n[0]=i?i.x??i[0]:r.naturalWidth,n[1]=i?i.y??i[1]:r.naturalHeight;let a=t==="shadow"&&o.shadowAnchor||o.iconAnchor;return n[2]=a?a.x??a[0]:Math.floor(n[0]/2),n[3]=a?a.y??a[1]:Math.floor(n[1]/2),n}function sc(e,t,r){let{source:o,map:i,backend:n}=e,a=ho(e,o.getLatLng()),s=i.getSize(),m=e.markerMatrices||={root:new DOMMatrix,camera:new DOMMatrix,point:{x:0,y:0,z:0,w:1}},f=m.root,p=m.camera,c=m.point,l=L.get(n).worldMatrix,u=J.get(n).projectionViewMatrix,d,y;for(d=0;d<16;d++)y=nc[d],f[y]=l[d],p[y]=u[d];di(c,f,a[0],a[1],a[2],1),di(c,p,c.x,c.y,c.z,c.w);let g=c.x,x=c.y,w=c.z,C=c.w;p.invertSelf(),f.invertSelf();let[B,P,D,te]=ac(e,t,r),U=(g/C+1)*s.x/2,N=(1-x/C)*s.y/2,K=U-D,pe=N-te,ye=[],Qe,Le,ft,Ge,oi;for(d=0;d<4;d++)Qe=K+(d%2?B:0),Le=pe+(d<2?0:P),ft=An(o,Qe-U,Le-N),Ge=U+ft.x,oi=N+ft.y,di(c,p,Ge/s.x*2-1,1-oi/s.y*2,w/C,1),di(c,f,c.x/c.w,c.y/c.w,c.z/c.w,1),ye.push([c.x,c.y,c.z]);return ye}function mc(e){let{source:t}=e,r,o,i,n;for(r=0;r<2;r++)o=r?"icon":"shadow",i=r?t._icon:t._shadow,!(!(i instanceof HTMLImageElement)||!i.complete||!i.naturalWidth)&&(n=uo(e,o,i,sc(e,o,i),t.options.opacity??1),o==="shadow"&&n&&(n.renderOrder-=100*1e6))}var go=[];b();b();function Fe(e,t,r,o,i){return t.push(...e(r),...e(o),...e(i))}b();var hi=2*Math.PI;b();function mm(e,t,r,o,i){return new h.Point(e.x+t*Math.cos(i*hi/o),e.y+r*Math.sin(i*hi/o))}function Sr(e,t,r,o,i=r){if(!(r>0)||!(i>0))return;let n=Math.max(12,Math.min(128,Math.ceil(Math.PI*Math.sqrt(r)))),a;for(a=0;a<n;a++)Fe(e,o,t,mm(t,r,i,n,a),mm(t,r,i,n,a+1))}function On(e,t,r,o,i){let{options:n,width:a,stroke:s,point:m}=e,f=a/2,p=t.distanceTo(r);if(!p)return;let c=r.subtract(t).divideBy(p),l=new h.Point(-c.y*f,c.x*f);n.lineCap==="square"&&(o&&(t=t.subtract(c.multiplyBy(f))),i&&(r=r.add(c.multiplyBy(f)))),Fe(m,s,t.add(l),t.subtract(l),r.add(l)),Fe(m,s,r.add(l),t.subtract(l),r.subtract(l)),n.lineCap==="round"&&(o&&Sr(m,t,f,s),i&&Sr(m,r,f,s))}b();function fc(e,t,r,o,i){let{options:n,width:a,point:s,stroke:m}=e,f=t[r],p=a/2;if(n.lineJoin==="round"){Sr(s,f,p,m);return}let c=f.subtract(t[(r+t.length-1)%t.length]),l=Math.hypot(c.x,c.y);if(!l||!i)return;let u=c.divideBy(l),d=o.subtract(f).divideBy(i),y=u.x*d.y-u.y*d.x>0?-1:1,g=new h.Point(-u.y*y,u.x*y),x=new h.Point(-d.y*y,d.x*y),w=f.add(g.multiplyBy(p)),C=f.add(x.multiplyBy(p)),B=1+g.x*x.x+g.y*x.y,P=B>0?g.add(x).multiplyBy(p/B):null;Fe(s,m,w,f,C),n.lineJoin==="miter"&&P&&Math.hypot(P.x,P.y)<=p*4&&Fe(s,m,w,f.add(P),C)}function pc(e,t,r,o,i,n){let a=e.dash,s=0,m,f,p,c;for(;s<o;){for(m=((i+s)%n+n)%n,f=0;m>=a[f];)m-=a[f++];p=Math.min(o,s+a[f]-m),f%2===0&&(c=r.subtract(t).divideBy(o),On(e,t.add(c.multiplyBy(s)),t.add(c.multiplyBy(p)),!0,!0)),s=p}}function Dn(e,t,r){let{options:o,width:i,dash:n}=e;if(!o.stroke||i<=0||t.length<2)return;let a=Number(o.dashOffset)||0,s=0,m,f,p,c,l;for(m of n)s+=m;for(f=0;f<t.length-(r?0:1);f++)p=t[f],c=t[(f+1)%t.length],l=p.distanceTo(c),n.length?pc(e,p,c,l,a,s):(On(e,p,c,!r&&f===0,!r&&f===t.length-2),(r||f>0)&&fc(e,t,f,c,l)),a+=l}function cc(e){let t=1/0,r;for(r of e)t=Math.min(t,r.x);return t}function lc(e,t,r,o){let i=Math.min(r+o,e.length),n=Math.min(r+o*2,e.length),a=r,s=i,m;for(m=r;m<n;m++)a<i&&(s>=n||e[a].x<=e[s].x)?t[m]=e[a++]:t[m]=e[s++]}function uc(e){if(e.length<2)return e;let t=new Array(e.length),r=[],o,i,n,a,s;for(o of e)r.push({ring:o,x:cc(o)});let m=r,f=t;for(i=1;i<r.length;i*=2){for(n=0;n<r.length;n+=i*2)lc(m,f,n,i);a=m,m=f,f=a}for(s=0;s<e.length;s++)e[s]=m[s].ring;return e}function Me(e,t,r){return(t.x-e.x)*(r.y-e.y)-(t.y-e.y)*(r.x-e.x)}function nt(e,t){return e.x===t.x&&e.y===t.y}function dc(e){let t=!0,r,o,i,n;for(;t&&e.length>3;)for(t=!1,r=0;r<e.length;r++)if(o=e[(r+e.length-1)%e.length],i=e[r],n=e[(r+1)%e.length],nt(o,i)||Math.abs(Me(o,i,n))<1e-10){e.splice(r,1),t=!0;break}if(e.length<3)throw new Error("Degenerate polygon ring");return e}function Rn(e){let t=0,r,o,i;for(r=0;r<e.length;r++)o=e[r],i=e[(r+1)%e.length],t+=o.x*i.y-i.x*o.y;return t<0}function hc(e,t){let r=[],o=0,i,n,a;for(i=0;i<e.length;i++)n=e[i],a=dc(t.slice(o,o+=n.length)),Rn(a)!==!!i&&a.reverse(),r.push(a);return r}function Gn(e,t){let r=!1,o,i,n,a;for(o=0,i=t.length-1;o<t.length;i=o++)n=t[o],a=t[i],n.y>e.y!=a.y>e.y&&e.x<(a.x-n.x)*(e.y-n.y)/(a.y-n.y)+n.x&&(r=!r);return r}function gc(e,t){let r;for(r=1;r<t.length;r++)if(Gn(e,t[r]))return!0;return!1}function gi(e,t,r){return Math.min(e.x,t.x)<=r.x&&r.x<=Math.max(e.x,t.x)&&Math.min(e.y,t.y)<=r.y&&r.y<=Math.max(e.y,t.y)}function yc(e,t,r,o){if(nt(e,r)||nt(e,o)||nt(t,r)||nt(t,o))return!1;let i=Me(e,t,r),n=Me(e,t,o),a=Me(r,o,e),s=Me(r,o,t);return i*n<0&&a*s<0||i===0&&gi(e,t,r)||n===0&&gi(e,t,o)||a===0&&gi(r,o,e)||s===0&&gi(r,o,t)}function fm(e,t,r){let o;for(o=0;o<r.length;o++)if(yc(e,t,r[o],r[(o+1)%r.length]))return!0;return!1}function xc(e,t,r,o){if(fm(e,t,r))return!0;let i;for(i=1;i<o.length;i++)if(fm(e,t,o[i]))return!0;return!1}function vc(e,t,r,o){let i=-1,n=-1,a=1/0,s,m,f,p,c;for(s=0;s<t.length;s++)for(m=0;m<e.length;m++)f=t[s],p=e[m],c=(f.x-p.x)**2+(f.y-p.y)**2,!(c>=a)&&(o.x=(f.x+p.x)/2,o.y=(f.y+p.y)/2,!(!Gn(o,r[0])||gc(o,r))&&(xc(f,p,e,r)||(i=s,n=m,a=c)));if(i<0)throw new Error("Unable to connect polygon hole");return[...e.slice(0,n+1),...t.slice(i),...t.slice(0,i+1),e[n],...e.slice(n+1)]}function wc(e,t,r,o){let i;for(i of e)if(!nt(i,t)&&!nt(i,r)&&!nt(i,o)&&Me(t,r,i)>=0&&Me(r,o,i)>=0&&Me(o,t,i)>=0)return!0;return!1}function Mc(e){let t=[],r,o,i,n,a,s;for(;e.length>3;){for(r=!1,o=0;o<e.length;o++)if(i=e[(o+e.length-1)%e.length],n=e[o],a=e[(o+1)%e.length],!(Me(i,n,a)<=1e-10)&&!wc(e,i,n,a)){t.push([i.index,n.index,a.index]),e.splice(o,1),r=!0;break}if(!r)throw new Error("Unable to triangulate polygon: invalid or self-intersecting rings")}if(Me(...e)>1e-10){let m=[];for(s of e)m.push(s.index);t.push(m)}return t}function pm(e){let t=0,r,o,i;for(r=0;r<e.length;r++)o=e[r],i=e[(r+1)%e.length],t+=o.x*i.y-i.x*o.y;return Math.abs(t)/2}function bc(e,t,r){let o=0,i=0,n,a;for(n=1;n<e.length;n++)o+=pm(e[n]);let s=pm(e[0])-o;for(a of r)i+=Me(t[a[0]],t[a[1]],t[a[2]])/2;if(s<=0||Math.abs(i-s)>Math.max(1e-7,s*1e-8))throw new Error("Polygon triangulation area mismatch")}function yo(e,t=it){let r=[e,...t],o=r.flat(),i,n,a;for(i of o)if(!Number.isFinite(i.x)||!Number.isFinite(i.y))throw new Error("Invalid polygon coordinates");let s=[];for(n=0;n<o.length;n++)i=o[n],s.push({x:i.x-e[0].x,y:i.y-e[0].y,index:n});let m=hc(r,s),f=m[0].slice(),p=uc(m.slice(1)),c=p.length?{x:0,y:0}:null;for(a of p)f=vc(f,a,m,c);let l=Mc(f);return bc(m,s,l),l}function cm(e,t,r){let{options:o,fill:i,point:n,map:a}=e,s=[],m,f,p,c;for(m of t){f=[];for(p of m)f.push(a.project(p));s.push(f)}if(r&&o.fill&&s[0]?.length>=3){let l=[];for(m of s)m.length>=3&&l.push(m);let u=l.flat();for(c of yo(l[0],l.slice(1)))Fe(n,i,u[c[0]],u[c[1]],u[c[2]])}for(m of s)Dn(e,m,r)}function lm(e,t,r){if(!t.length)return;let o;if(t[0]instanceof h.LatLng)cm(e,[t],r);else if(r&&t[0][0]instanceof h.LatLng)cm(e,t,r);else for(o of t)lm(e,o,r)}function Lc(e){let t=Array.isArray(e.dashArray)?e.dashArray:String(e.dashArray||"").trim().split(/[ ,]+/),r=[],o,i=!0;for(o of t)r.push(Number(o));for(o of r){if(!Number.isFinite(o)||o<0)throw new Error("Invalid Leaflet dashArray");o!==0&&(i=!1)}return i&&(r.length=0),r.length%2&&r.push(...r),r}b();b();function tr(e,t,r,o,i,n=0){let a=i*hi/o;return new h.Point(e.x+Math.max(0,t+n)*Math.cos(a),e.y+Math.max(0,r+n)*Math.sin(a))}function Bc(e,t){let{map:r,point:o,fill:i,stroke:n,options:a,dash:s,width:m}=t,f=r.project(e.getLatLng()),p=e.getRadius(),c=p,l,u;if(e instanceof h.Circle){e._project();let y=e._point.add(r.getPixelOrigin());f.x=y.x,f.y=y.y,p=e._radius,c=e._radiusY||p}a.fill&&Sr(o,f,p,i,c);let d=Math.max(12,Math.min(128,Math.ceil(Math.PI*Math.sqrt(Math.max(p,c)))));if(s.length){let y=[];for(l=0;l<d;l++)y.push(tr(f,p,c,d,l));Dn(t,y,!0)}else if(a.stroke&&m>0)for(u=0;u<d;u++)Fe(o,n,tr(f,p,c,d,u,m/2),tr(f,p,c,d,u,-m/2),tr(f,p,c,d,u+1,m/2)),Fe(o,n,tr(f,p,c,d,u+1,m/2),tr(f,p,c,d,u,-m/2),tr(f,p,c,d,u+1,-m/2))}function Tc(e,t,r){let o=[],i=[],n=e.options,a=Number(n.weight)||0,s=Lc(n),m={fill:o,stroke:i,options:n,width:a,dash:s,point:r,map:t};if(e instanceof h.CircleMarker)Bc(e,m);else{let f=e instanceof h.Polygon;lm(m,e.getLatLngs(),f)}return{fill:o,stroke:i}}function Pc(e,t){return ho(e,e.map.unproject(t))}function Cc(e){return Pc(go[go.length-1],e)}function Un(e){return e<=.0031308?e*12.92:1.055*e**(1/2.4)-.055}function Fn(e,t,r,o){let i=(e+t*12)%12;return r-o*Math.max(-1,Math.min(i-3,9-i,1))}function Ie(e){if(e&&typeof e=="object"&&"h"in e){let n=e.s*Math.min(e.l,1-e.l);return{r:Un(Fn(0,e.h,e.l,n)),g:Un(Fn(8,e.h,e.l,n)),b:Un(Fn(4,e.h,e.l,n))}}if(e&&typeof e=="object"&&"r"in e)return e;if(typeof e=="number")return{r:(e>>16&255)/255,g:(e>>8&255)/255,b:(e&255)/255};if(typeof e!="string"||!CSS.supports("color",e))throw new Error("Invalid 3D color");let t=document.createElement("canvas").getContext("2d");t.fillStyle=e,t.fillRect(0,0,1,1);let[r,o,i]=t.getImageData(0,0,1,1).data;return{r:r/255,g:o/255,b:i/255}}function Sc(e){let{source:t}=e;go.push(e);let r;try{r=Tc(t,e.map,Cc)}finally{go.pop()}let{fill:o,stroke:i}=r,n,a,s,m,f,p,c,l;for(n=0;n<2;n++)a=n?"stroke":"fill",s=n?i:o,m=n?t.options.color:t.options.fillColor||t.options.color,f=n?t.options.opacity:t.options.fillOpacity,s.length&&({r:p,g:c,b:l}=Ie(m),In(e,a,s,[p,c,l],f??1))}function Ec(e){let{meshes:t,textures:r,backend:o}=e,i,n,a;for([a,i]of t)i._nativeUsed||(_e(o,i),t.delete(a),n=r.get(a),n&&F(o,n.texture),r.delete(a));for([a,n]of r)n.used||(F(o,n.texture),r.delete(a))}function Nn(e){let{source:t,meshes:r,textures:o}=e;if(!fo(e)||!v.get(e.backend)||e.failed||!e.dirty&&(!e.marker||!e.viewDirty))return;e.dirty=!1,e.viewDirty=!1;let i,n;for(i of r.values())i._nativeUsed=!1;for(n of o.values())n.used=!1;t instanceof h.GridLayer?oc(e):t instanceof h.ImageOverlay?ic(e):e.marker?mc(e):Sc(e),Ec(e)}function kc(e){try{Nn(e)}catch(t){e.failed=!0,e.source.fire("error",{error:t})}}function rr(e){if(Bn(e),z.get(e)!==e||!v.get(e))return;let t=e._map,r=performance.now(),o=t.getSize();if(!o.x||!o.y)return;wf(e,r),bf(e,o),Cf(e,o),we(Q.get(e));let i=!1,n,a;for(n of G.get(e))a=Hr.get(n),a&&(kc(a),i=!0);let s=tt.get(t);_f(e,s,i);let m=_t.get(e),f=v.get(e),p=Hf(e,r),c=f.frameMeshes||=[];c.length=0;let l=tp(e,p,r,c),u=f.device.createCommandEncoder();fp(e,c,m,s),zp(e,u,m,s),xp(e,u,c),f.device.queue.writeBuffer(f.uniformBuffer,0,f.uniformData,0,f.uniformSlot*64),f.device.queue.submit((rn[0]=u.finish(),rn)),rn[0]=null;for(n of G.get(e))Ht.get(n)&&(l=mo(n)||l);(t._animatingZoom||l)&&_(e)}function _c(){let e=[...kt];kt.clear();let t,r;for(r of e)if(et.set(r,null),!(z.get(r)!==r||!v.get(r)))try{rr(r)}catch(o){t||=o}if(t)throw t}function _(e){let t=z.get(e);if(!t)return e;if(t!==e)return _(t),e;if(et.get(e)!=null)return e;let r=kt.values().next().value;return kt.add(e),et.set(e,r?et.get(r):requestAnimationFrame(_c)),e}b();function jn(e){let{source:t}=e,r=t instanceof h.Marker&&t.options.icon instanceof h.DivIcon,o=r?null:t._icon,i=r?null:t._shadow,n,a;for(a of e.hidden)a===o||a===i||(a.classList.remove("leaflet-webgpu-target"),e.hidden.delete(a));for(n=0;n<2;n++)a=n?i:o,!(!a||e.hidden.has(a))&&(a.classList.add("leaflet-webgpu-target"),e.hidden.add(a))}function qe(e=this){e.dirty=!0,e.viewDirty=!0,e.failed=!1,jn(e);let t=e.source,r,o;for(o of e.images)o===t._icon||o===t._shadow||o===t._image||(o.removeEventListener("load",ii),o.removeEventListener("error",ni),tn(o,e),e.images.delete(o));for(r=0;r<3;r++)o=r===0?t._icon:r===1?t._shadow:t._image,!(!(o instanceof HTMLImageElement)||e.images.has(o))&&(e.images.add(o),yf(o,e),o.addEventListener("load",ii),o.addEventListener("error",ni));z.get(e.backend)&&_(e.backend)}function $(e,t,r){let o=xe.get(t),n=o.methods.get(e).original.apply(t,r),a,s;if((e==="bringToFront"||e==="bringToBack")&&t instanceof h.GridLayer){let m=e==="bringToFront"?-1/0:1/0;for(a of Object.values(o.map._layers))a===t||!(a instanceof h.GridLayer)||a.getPane()!==t.getPane()||(s=a.options.zIndex||0,m=e==="bringToFront"?Math.max(m,s):Math.min(m,s));let f=e==="bringToFront"?m+1:m-1;Number.isFinite(f)&&t.setZIndex(f)}return e==="bringToFront"&&(o.order=qt.get(o.map)+1,qt.set(o.map,o.order)),e==="bringToBack"&&(o.order=qr.get(o.map)-1,qr.set(o.map,o.order)),qe(o),n}function Ic(...e){return $("setLatLng",this,e)}function zc(...e){return $("setLatLngs",this,e)}function Ac(...e){return $("addLatLng",this,e)}function Oc(...e){return $("setRadius",this,e)}function Dc(...e){return $("setStyle",this,e)}function Rc(...e){return $("redraw",this,e)}function Gc(...e){return $("setIcon",this,e)}function Uc(...e){return $("setUrl",this,e)}function Fc(...e){return $("setBounds",this,e)}function Nc(...e){return $("setOpacity",this,e)}function jc(...e){return $("setZIndex",this,e)}function Wc(...e){return $("setZIndexOffset",this,e)}function Zc(...e){return $("bringToFront",this,e)}function $c(...e){return $("bringToBack",this,e)}var um={setLatLng:Ic,setLatLngs:zc,addLatLng:Ac,setRadius:Oc,setStyle:Dc,redraw:Rc,setIcon:Gc,setUrl:Uc,setBounds:Fc,setOpacity:Nc,setZIndex:jc,setZIndexOffset:Wc,bringToFront:Zc,bringToBack:$c};b();var xo=Object.freeze({});function Wn(e=xo){return new h.Layer(e)}b();var Er=new WeakMap;var ee=new WeakMap;var dt=new WeakMap;function Vc(e,t,r,o){let i=Math.min(r+o,e.length),n=Math.min(r+o*2,e.length),a=r,s=i,m;for(m=r;m<n;m++)a<i&&(s>=n||!(e[s].distance<e[a].distance))?t[m]=e[a++]:t[m]=e[s++]}function qc(e){if(e.length<2)return e;let t=new Array(e.length),r=e,o=t,i,n,a,s;for(i=1;i<e.length;i*=2){for(n=0;n<e.length;n+=i*2)Vc(r,o,n,i);a=r,r=o,o=a}if(r!==e)for(s=0;s<e.length;s++)e[s]=r[s];return e}function Hc(e,t,r,o){let n=new DOMMatrix(t.worldMatrix).invertSelf().toFloat64Array(),a,s,m,f,p;for(a of n)if(!Number.isFinite(a))throw new Error("Singular 3D transform");s=e.origin[0],m=e.origin[1],f=e.origin[2],p=n[3]*s+n[7]*m+n[11]*f+n[15],r[0]=(n[0]*s+n[4]*m+n[8]*f+n[12])/p,r[1]=(n[1]*s+n[5]*m+n[9]*f+n[13])/p,r[2]=(n[2]*s+n[6]*m+n[10]*f+n[14])/p,s=e.direction[0],m=e.direction[1],f=e.direction[2],o[0]=n[0]*s+n[4]*m+n[8]*f,o[1]=n[1]*s+n[5]*m+n[9]*f,o[2]=n[2]*s+n[6]*m+n[10]*f;let c=Math.hypot(...o)||1;o[0]/=c,o[1]/=c,o[2]/=c}function Yc(e,t,r){e.geometry.bounds||Be(e.geometry);let o=0,i=1/0,n,a,s;for(n=0;n<3;n++)if(Math.abs(r[n])<1e-12){if(t[n]<e.geometry.bounds.min[n]||t[n]>e.geometry.bounds.max[n]){i=-1/0;break}}else a=(e.geometry.bounds.min[n]-t[n])/r[n],s=(e.geometry.bounds.max[n]-t[n])/r[n],o=Math.max(o,Math.min(a,s)),i=Math.min(i,Math.max(a,s));return!(i<o)}function Zn(e,t){return t?.count??t?.data.length??e.count??e.data.length/(e.size??3)}function $n(e,t,r,o,i){let{position:n,index:a,instanceOffset:s}=e.geometry.attributes,m=n.size??3,f=Zn(n,a),p=s?t%f:t,c=s?Math.floor(t/f)*s.size:0,l=s?.data[c]??0,u=s?.data[c+1]??0,d=s?.data[c+2]??0,y=(a?a.data[p]:p)*m,g=(a?a.data[p+1]:p+1)*m,x=(a?a.data[p+2]:p+2)*m;r[0]=n.data[y],r[1]=n.data[y+1],r[2]=n.data[y+2],o[0]=n.data[g],o[1]=n.data[g+1],o[2]=n.data[g+2],i[0]=n.data[x],i[1]=n.data[x+1],i[2]=n.data[x+2],s&&(r[0]=Math.fround(r[0]+l),r[1]=Math.fround(r[1]+u),r[2]=Math.fround(r[2]+d),o[0]=Math.fround(o[0]+l),o[1]=Math.fround(o[1]+u),o[2]=Math.fround(o[2]+d),i[0]=Math.fround(i[0]+l),i[1]=Math.fround(i[1]+u),i[2]=Math.fround(i[2]+d))}function Xc(e,t,r,o,i){if(!e.program.nightLight)return!1;let{index:n,uv:{data:a}}=e.geometry.attributes,s=n?n.data[t]:t,m=n?n.data[t+1]:t+1,f=n?n.data[t+2]:t+2,p=a[s*2]*(1-r-o)+a[m*2]*r+a[f*2]*o,c=a[s*2+1]*(1-r-o)+a[m*2+1]*r+a[f*2+1]*o;return p<=2&&(!i||p*p+c*c>.9)}function Kc(e,t,r,o,i,n,a,s){let m=o[0]-r[0],f=o[1]-r[1],p=o[2]-r[2],c=i[0]-r[0],l=i[1]-r[1],u=i[2]-r[2],d=a[1]*u-a[2]*l,y=a[2]*c-a[0]*u,g=a[0]*l-a[1]*c,x=m*d+f*y+p*g;if(e.program.cullMode==="none"||e.program.cullFace===null?Math.abs(x)<1e-9:x<1e-9)return 1/0;let w=n[0]-r[0],C=n[1]-r[1],B=n[2]-r[2],P=(w*d+C*y+B*g)/x;if(P<0||P>1)return 1/0;let D=C*p-B*f,te=B*m-w*p,U=w*f-C*m,N=(a[0]*D+a[1]*te+a[2]*U)/x;return N<0||P+N>1||Xc(e,t,P,N,s)?1/0:(c*D+l*te+u*U)/x}function Jc(e,t,r,o,i,n){let a=o[0]*i+r[0],s=o[1]*i+r[1],m=o[2]*i+r[2],f=t.worldMatrix,p=f[3]*a+f[7]*s+f[11]*m+f[15],c=[(f[0]*a+f[4]*s+f[8]*m+f[12])/p,(f[1]*a+f[5]*s+f[9]*m+f[13])/p,(f[2]*a+f[6]*s+f[10]*m+f[14])/p];return{faceIndex:n,object:t,point:c,distance:Math.hypot(c[0]-e.origin[0],c[1]-e.origin[1],c[2]-e.origin[2])}}function Vn(e,t,r=0){let o=[],i=[0,0,0],n=[0,0,0],a=[0,0,0],s=[0,0,0],m=[0,0,0],f,p,c,l,u,d,y,g,x;for(f of t)if(Hc(e,f,s,m),!!Yc(f,s,m)){for({position:p,index:c,instanceOffset:l}=f.geometry.attributes,u=c?.count||p.count,d=1/0,y=void 0,g=0;g<u*(l?.count??1);g+=3)$n(f,g,i,n,a),x=Kc(f,g,i,n,a,s,m,r),x>0&&x<d&&(d=x,y=g/3);y!==void 0&&o.push(Jc(e,f,s,m,d,y))}return qc(o)}function At(e,t,r){if(t(e,r))return;let o;for(o of e.children)At(o,t,r)}function qn(e,t){if(!e.visible)return!0;e.geometry&&e._appearance!==0&&t.push(e)}function Qc(e,t,r,o){let i=1,n=t.length-1,a;for(;i<n;)a=i+Math.floor((n-i)/2),t[a]<r?i=a+1:n=a;let s=e[i-1],m=e[i],f=t[i]-t[i-1]||1,p=(r-t[i-1])/f;return o||={},o.x=s[0]+(m[0]-s[0])*p,o.y=(s[2]??0)+((m[2]??0)-(s[2]??0))*p,o.z=s[1]+(m[1]-s[1])*p,o.dx=(m[0]-s[0])/f,o.dz=(m[1]-s[1])/f,o}function vo(e,t,r){let{points:o,lengths:i,length:n}=t.lane,a=t.distance+e.elapsed*t.speed;a-=n*Math.floor(a/n);let s=Qc(o,i,a,r);return s.x-=s.dz*e.side,s.z+=s.dx*e.side,s}function el(e){if(!e.mesh||!e.stale)return;e.stale=!1;let{position:t,normal:r}=e.mesh.geometry.attributes,o=e.position||={},i,n,a,s,m,f,p,c,l,u,d,y,g;for(i=0;i<e.trips.length;i++)for(n=e.trips[i],{x:a,y:s,z:m,dx:f,dz:p}=vo(e,n,o),c=0,l=i*e.stride;c<e.stride;c+=3,l+=3)u=e.template.position[c],d=e.template.position[c+2],y=e.template.normal[c],g=e.template.normal[c+2],t.data[l]=a-u*p-d*f,t.data[l+1]=s+e.template.position[c+1],t.data[l+2]=m+u*f-d*p,r.data[l]=-y*p-g*f,r.data[l+1]=e.template.normal[c+1],r.data[l+2]=y*f-g*p}function tl(e){let t,r;for(t=1;t<=4;t++)for(r=1;r<=4;r++)if(!Number.isFinite(e[`m${t}${r}`]))throw new Error("Singular 3D transform")}function Hn(e,t,r=L.get(e).children,o=!0){if(!v.get(e))return[];let i=dt.get(e);i&&el(i);let n=e._map.getContainer().getBoundingClientRect();we(Q.get(e)),Xr(J.get(e));let a=ee.get(e).inverse,s=J.get(e).projectionViewMatrix;a.m11=s[0],a.m12=s[1],a.m13=s[2],a.m14=s[3],a.m21=s[4],a.m22=s[5],a.m23=s[6],a.m24=s[7],a.m31=s[8],a.m32=s[9],a.m33=s[10],a.m34=s[11],a.m41=s[12],a.m42=s[13],a.m43=s[14],a.m44=s[15],a.invertSelf();let m=(t.clientX-n.left)/n.width*2-1,f=-((t.clientY-n.top)/n.height)*2+1,p=a.m11*m+a.m21*f+a.m41,c=a.m12*m+a.m22*f+a.m42,l=a.m13*m+a.m23*f+a.m43,u=a.m14*m+a.m24*f+a.m44,d;tl(a),ee.get(e).origin[0]=J.get(e).position[0],ee.get(e).origin[1]=J.get(e).position[1],ee.get(e).origin[2]=J.get(e).position[2],ee.get(e).direction[0]=p/u-ee.get(e).origin[0],ee.get(e).direction[1]=c/u-ee.get(e).origin[1],ee.get(e).direction[2]=l/u-ee.get(e).origin[2];let y=ee.get(e).direction,g=Math.hypot(y[0],y[1],y[2])||1;ee.get(e).direction[0]/=g,ee.get(e).direction[1]/=g,ee.get(e).direction[2]/=g;let x=ee.get(e).meshes;x.length=0;for(d of r)o?At(d,qn,x):d.geometry&&d.visible&&d._appearance!==0&&x.push(d);return Vn(ee.get(e),x,v.get(e).uniformData?.[55])}function rl(){let{map:e,descriptor:t,handle:r}=this;e._fireDOMEvent===r&&(t?Object.defineProperty(e,"_fireDOMEvent",t):delete e._fireDOMEvent)}var ie=new WeakMap;var ol=new Set(["click","preclick","dblclick","contextmenu","mousedown","mouseup","mousemove","mouseover","mouseout","pointerdown","pointerup","pointermove","pointerover","pointerout"]);b();function il(e,t){return t.object.renderOrder-e.object.renderOrder||e.distance-t.distance}function nl(e,t,r){let o=[],i,n,a;if(r!==e.out)for(i of e.states)({source:n,backend:a}=i),!(n instanceof h.Marker||n.options.interactive===!1||!(n instanceof h.Path)&&!n.options.interactive)&&o.push(...Hn(a,t,i.meshes.values(),!1));return o.sort(il),o[0]?.object._nativeSource||null}function Yn(e,t,r,o){t.hovered!==o&&(t.hovered&&t.fireDOMEvent.call(e,r,t.out,[t.hovered]),t.hovered=o,o&&t.fireDOMEvent.call(e,r,t.over,[o]),e.getContainer().style.cursor=o?"pointer":"")}function al(e,t,r,o){let i=r.target,n=i instanceof Element&&i.closest(".leaflet-marker-icon,.leaflet-popup,.leaflet-tooltip,.leaflet-control");return n&&t.hovered&&(o===t.move||o===t.out)&&Yn(e,t,r,null),n||o===t.move&&(e.dragging?.moving()||e._animatingZoom)}function dm(e,t=e.type,r){let o=this,i=Er.get(o),n=i.fireDOMEvent,a=ie.get(o);if(!v.get(a)||r||!ol.has(t))return n.call(this,e,t,r);if(al(o,i,e,t))return n.call(this,e,t,r);let s=nl(i,e,t);return(t==="click"||t==="preclick")&&s&&o._draggableMoved(s)&&(s=null),(t===i.move||t===i.out)&&Yn(o,i,e,s),n.call(this,e,t,s?[s]:void 0)}function sl(e){let{map:t}=e,r=Er.get(t);if(!r){r={map:t,states:new Set,hovered:null};let o=h.version.startsWith("2");r.move=o?"pointermove":"mousemove",r.out=o?"pointerout":"mouseout",r.over=o?"pointerover":"mouseover",r.descriptor=Object.getOwnPropertyDescriptor(t,"_fireDOMEvent"),r.fireDOMEvent=t._fireDOMEvent,r.handle=dm,r.restore=rl,Er.set(t,r),t._fireDOMEvent=dm}r.states.add(e),e._nativeEventContext=r}function wo(){qe(this)}function Xn(){this.viewDirty=!0,z.get(this.backend)&&_(this.backend)}function ml(e){let t=e._nativeEventContext;if(!t)return;let{map:r}=t;t.states.delete(e),t.hovered===e.source&&(t.hovered=null,r.getContainer().style.cursor=""),e._nativeEventContext=null,!t.states.size&&(t.restore(),Er.delete(r))}function yi(){let e=this;if(e.disposed)return;e.disposed=!0;let{source:t,map:r,backend:o,meshes:i,textures:n,images:a}=e;t.off("load tileload tileunload move drag",wo,e),r.off("zoomend",wo,e),e.marker&&r.off("move zoom rotate pitch resize viewreset",Xn,e),ml(e);let m,f,p,c,l;for([m,f]of e.methods)f.own?Object.defineProperty(t,m,f.own):delete t[m];for(p of i.values())_e(o,p);i.clear();for(c of n.values())F(o,c.texture);n.clear();for(l of a)l.removeEventListener("load",ii),l.removeEventListener("error",ni),tn(l,e);Hr.delete(o),o.remove()}function fl(){this.ready.resolve()}function pl({error:e}){this.ready.reject(e)}function cl({error:e}){this.source.fire("error",{error:e})}async function ll(e){let{source:t,map:r}=e,o=e.backend=Wn({source:{type:"3d"}});e.meshes=new Map,e.textures=new Map,e.methods=new Map,e.images=new Set,qt.get(r)||qt.set(r,0),qr.get(r)||qr.set(r,0),e.dirty=!0,e.viewDirty=!0,e.failed=!1,e.order=qt.get(r)+1,qt.set(r,e.order),e.marker=t instanceof h.Marker,e.paneOrder=Number(getComputedStyle(t.getPane()).zIndex)||0,e.disposed=!1,t.on("load tileload tileunload move drag",wo,e),r.on("zoomend",wo,e),e.marker&&r.on("move zoom rotate pitch resize viewreset",Xn,e),sl(e);let n,a,s;for(n in um)typeof t[n]=="function"&&(a=Object.getOwnPropertyDescriptor(t,n),s=t[n],e.methods.set(n,{own:a,original:s}),t[n]=um[n]);let m=e.ready=Promise.withResolvers();o.once("ready",fl,e),o.once("error",pl,e),o.on("error",cl,e),qe(e),o.addTo(r);try{await m.promise}catch(f){throw yi.call(e),f}if(!fo(e))return t;Hr.set(o,e);try{Nn(e)}catch(f){throw yi.call(e),f}return _(e.backend),t}function ul(e){xe.get(e.source)===e&&xe.set(e.source,null),e.backend&&yi.call(e);let t;for(t of e.hidden)t.classList.remove("leaflet-webgpu-target")}function dl(e){return xe.get(e.source)!==e?e.source:ll(e)}function Kn(e,t){e.fire("error",{error:t})}function Jn(e,t){if(xe.get(e))return;if(!document.getElementById("leaflet-webgpu-targets")){let o=document.createElement("style");o.id="leaflet-webgpu-targets",o.textContent=".leaflet-webgpu-target{opacity:0!important}",document.head.append(o)}let r={source:e,map:t,hidden:new Set};xe.set(e,r),jn(r),e.once("remove",ul.bind(null,r)),re.set(e,Promise.resolve().then(dl.bind(null,r))),re.get(e).catch(Kn.bind(null,e))}var Qn=[1,0,1,0];b();function fe(e){return new h.Point(Array.isArray(e)?e[0]:e.x,Array.isArray(e)?e[1]:e.y)}X();W();H();function ea(e,t){let r=S(e)*T,o=k(e)*T;return t||=[],t[0]=Math.cos(r),t[1]=Math.sin(r),t[2]=Math.cos(o),t[3]=Math.sin(o),t}function Ne(e,t,r=!1,o=!1){let i=e.getSize(),n=i.x/2,a=i.y/2,s=i.y*1.5,m=fe(t);if(!s)return m;let[f,p,c,l]=ea(e,Qn),u=m.x-n,d=m.y-a;if(r){let w=i.y*e.options.pitchMaxDistance,C=c*s+l*d,B=C*c>0?d*s/C:-w;o&&(B=Math.max(-w,Math.min(w,B)));let P=u*(s-l*B)/s;return m.x=f*P+p*B+n,m.y=-p*P+f*B+a,m}let y=f*u-p*d,g=p*u+f*d,x=s/(s-l*g);return m.x=y*x+n,m.y=c*g*x+a,m}function hl(e){return Ne(this,Jt(this,j.value.layerPointToContainerPoint.call(this,e)))}function gl(e){return j.value.containerPointToLayerPoint.call(this,Jt(this,Ne(this,e,!0),!0))}function yl(){return j.value.containerPointToLayerPoint.call(this,this.getSize().divideBy(2))}function xl(e,t){let r=this.getSize().divideBy(2),o=r.subtract(Ne(this,r.subtract(fe(e)),!0));return j.value.panBy.call(this,o,t)}b();H();W();function vl(e,t,r){if(!k(this)&&!S(this))return j.value.setZoomAround.call(this,e,t,r);t=this._limitZoom(t);let o=this.getZoomScale(t),i=this.getSize().divideBy(2),n=e instanceof h.Point?e:this.latLngToContainerPoint(e),a=this.containerPointToLayerPoint(i),s=this.containerPointToLayerPoint(n),m=a.add(s.subtract(a).multiplyBy(1-1/o));return this.setView(this.layerPointToLatLng(m),t,{zoom:r})}var ht=Object.freeze([0,0]);H();W();function wl(e,t={}){if(!k(this)&&!S(this))return j.value.panInside.call(this,e,t);let r=fe(t.paddingTopLeft||t.padding||ht),o=this.getSize().subtract(fe(t.paddingBottomRight||t.padding||ht)),i=this.latLngToContainerPoint(e),n=r;if(n.x=Math.max(r.x,Math.min(o.x,i.x)),n.y=Math.max(r.y,Math.min(o.y,i.y)),n.equals(i))return this;let a=this.latLngToLayerPoint(e).subtract(this.containerPointToLayerPoint(n));return this.panTo(this.unproject(this.project(this.getCenter()).add(a)),t)}b();H();W();b();function Mo(e,t=ht){let r=fe(t).divideBy(2),o=e.getSize().subtract(r),i=new h.Bounds,n=r.x,a=r.y,s;for(s=0;s<4;s++)r.x=s%2?o.x:n,r.y=s<2?a:o.y,i.extend(Ne(e,r,!0,!0));return i}function Ml(e,t,r){if(!r||!this._loaded||!k(this)&&!S(this))return j.value._limitCenter.call(this,e,t,r);let o=this.getSize().divideBy(2),i=Mo(this),n=this.project(e,t),a=new h.Bounds(n.add(i.min.subtract(o)),n.add(i.max.subtract(o))),s=this._getBoundsOffset(a,r,t);return Math.abs(s.x)<=1&&Math.abs(s.y)<=1?e:this.unproject(n.add(s),t)}H();W();function bl(e,t){if(!t||!k(this)&&!S(this))return j.value._limitOffset.call(this,e,t);let r=this.getSize().divideBy(2),o=r.subtract(Ne(this,r.subtract(e),!0)),i=this.project(this.getCenter()),n=this.project(this._limitCenter(this.unproject(i.add(o)),this.getZoom(),t));return r.subtract(Ne(this,r.subtract(n.subtract(i))))}H();W();b();ta();function hm(e,t,r,o,i){return t*r+o*e>0?Math.max(-i,Math.min(i,e*r/(t*r+o*e))):-i}function ra(e,t,r=bo){t=t.getBounds?t.getBounds():t instanceof h.LatLngBounds?t:new h.LatLngBounds(t);let o=e.getZoom()??0,i=e.getSize().divideBy(2),n=e.getSize().y*1.5,a=fe(r.paddingTopLeft||r.padding||ht).subtract(i),s=i.subtract(fe(r.paddingBottomRight||r.padding||ht)),[m,f,p,c]=ea(e,Qn);if(p<0){let b0=a.y;a.y=-s.y,s.y=-b0}let l=e.getSize().y*e.options.pitchMaxDistance,u=hm(a.y,Math.abs(p),n,c,l),d=hm(s.y,Math.abs(p),n,c,l),y=e.project(t.getNorthWest(),o).add(e.project(t.getSouthEast(),o)).divideBy(2),g=1/0,x=-1/0,w=a.x*c/n,C=s.x*c/n,B=C-w,P=1/0,D=-1/0,te=[t.getNorthWest(),t.getNorthEast(),t.getSouthWest(),t.getSouthEast()],U,N,K,pe,ye;for(U=0;U<4;U++)N=te[U],K=e.project(N,o).subtract(y),pe=m*K.x-f*K.y,ye=f*K.x+m*K.y,g=Math.min(g,ye),x=Math.max(x,ye),P=Math.min(P,pe+w*ye),D=Math.max(D,pe+C*ye);let Qe=Math.min((d-u)/(x-g),(s.x-a.x-B*u)/(D-P-B*g)),Le=e.getScaleZoom(Qe,o),ft=e.options.zoomSnap;if(ft&&(Le=Math.floor(Math.round(Le/(ft/100))/100)*ft),Le=Math.max(e.getMinZoom(),Math.min(e.getMaxZoom(),r.maxZoom??1/0,Le)),!Number.isFinite(Le))return{center:t.getCenter(),zoom:Le};let Ge=e.getZoomScale(Le,o),oi=x*Ge-d,hf=g*Ge-u,M0=Math.max(oi,B?(Ge*(D-P)-s.x+a.x)/B:oi),Vs=(Math.min(hf,M0)+hf)/2,gf=(Ge*(P+D)-a.x-s.x-(w+C)*Vs)/2;return y.x+=(m*gf+f*Vs)/Ge,y.y+=(-f*gf+m*Vs)/Ge,{center:e.unproject(y,o),zoom:Le}}function Ll(e,t){return k(this)||S(this)?ra(this,e,t):j.value._getBoundsCenterZoom.call(this,e,t)}b();H();W();function Bl(e,t,r){if(!k(this)&&!S(this))return j.value.getBoundsZoom.call(this,e,t,r);if(!t)return ra(this,e,{padding:fe(r||ht).divideBy(2)}).zoom;e=e instanceof h.LatLngBounds?e:new h.LatLngBounds(e);let o=Mo(this,r).getSize(),i=this.project(e.getSouthEast()).subtract(this.project(e.getNorthWest())),n=this.getScaleZoom(Math.max(o.x/i.x,o.y/i.y)),a=this.options.zoomSnap;return Math.max(this.getMinZoom(),Math.min(this.getMaxZoom(),a?Math.ceil(n/a)*a:n))}function Tl(e,t){let r=this._getCenterOffset(e)._trunc();return t?.animate!==!0&&!this.getSize().contains(r)?!1:(j.value.panBy.call(this,r,t),!0)}b();H();W();function Pl(){if(!k(this)&&!S(this))return j.value.getBounds.call(this);let e=Mo(this),t=new h.LatLngBounds,r,o,i;for(r=0;r<2;r++)o=r?e.max:e.min,i=j.value.containerPointToLayerPoint.call(this,Jt(this,o,!0)),t.extend(this.layerPointToLatLng(i));return t}var Cl=new WeakSet;var gm=new WeakMap;or();ym();function Sl(){this.options.maxBounds&&this._panInsideMaxBounds()}var ir=new WeakMap;oa();fa();H();W();function pa(){let e=this,t=ir.get(e);if(!k(e)&&!S(e))return;let r=e.getSize().divideBy(2),o=t._newPos.subtract(t._startPos),i=r.subtract(Ne(e,r.subtract(o),!0));t._newPos=t._startPos.add(i)}function El(){Bo(this),je.get(this)?.remove(),ir.get(this)&&(ir.get(this).off("predrag",pa,this),ir.delete(this))}function kl(){let e=this.dragging?._draggable;e&&(ir.set(this,e),e.on("predrag",pa,this))}async function Ru(e){try{let{cameraControls:t}=await Promise.resolve().then(()=>(Du(),Ou));e._container?._leaflet_id&&t(e)}catch(t){throw e.fire("error",{error:t}),t}}function at(){}function Gu(){if(Cl.add(this),!document.getElementById("leaflet-camera-zoom-style")){let e=document.createElement("style");e.id="leaflet-camera-zoom-style",e.textContent=".leaflet-camera-zoom .leaflet-marker-icon,.leaflet-camera-zoom .leaflet-marker-shadow,.leaflet-camera-zoom .leaflet-popup,.leaflet-camera-zoom .leaflet-tooltip{transition:none!important}",document.head.append(e)}ze(this,this.options.pitch,this.options.bearing),this.on("load resize pitch",ia),this.on("rotate pitch",Sl,this),this.once("unload",El,this),this.whenReady(kl,this),(this.options.rotate||this.options.trackContainerMutation)&&(gm.set(this,Ru(this)),gm.get(this).catch(at))}b();function Uu(e){e instanceof h.DivIcon||(e.options.crossOrigin||=!0);let t=Ve.value.setIcon.call(this,e);return this._map&&!(e instanceof h.DivIcon)&&Jn(this,this._map),t}function Fu(){let e=Ve.value.getEvents.call(this);return e.rotate=e.pitch=e.move=this.update,e}function _o(e,t){return e.layerPointToContainerPoint(t).subtract(e._getMapPanePos())}function Nu(e){Ve.value._setPos.call(this,_o(this._map,e));let t,r,o,i,n,a;for(t=0;t<2;t++)r=t?this._shadow:this._icon,o=t?"shadowAnchor":"iconAnchor",r&&(i=An(this,1,0),n=this.options.icon.options,a=n[o]||n.iconAnchor,r.style.transformOrigin=a?`${a.x??a[0]}px ${a.y??a[1]}px`:"center",r.style.transform+=` rotate(${Math.atan2(i.y,i.x)}rad) scale(${this.options.scale})`)}function xt(e=this){let t=xe.get(e);t?.backend&&!t.disposed&&qe(t)}function ju(e){Ve.value._updateZIndex.call(this,e);let t=Cr.get(this)!==e;Cr.set(this,e),t&&xt(this)}var Or=new WeakMap;b();function Wu(e){let t=this._marker._map,r=h.DomUtil.getPosition(this._marker._icon).add(t._getMapPanePos()),o=t.containerPointToLayerPoint(r);h.DomUtil.setPosition(this._marker._icon,o),Or.get(this)._cameraOriginalOnDrag.call(this,e),this._marker._setPos(o)}b();H();W();var Ti=new Map;var Io={value:null};function Zu(){Io.value=null;let e=[...Ti];Ti.clear();let t,r;for([t,r]of e)t._panRequest=null,t._adjustPan(r)}function $u(e,t){Ti.set(e,t),Io.value===null&&(Io.value=requestAnimationFrame(Zu)),e._panRequest=Io.value}function Vu(e){let t=this._marker,r=t._map;if(!k(r)&&!S(r))return Or.get(this)._cameraOriginalAdjustPan.call(this,e);let o=h.DomUtil.getPosition(t._icon).add(r._getMapPanePos()),i=r.getSize(),n=fe(t.options.autoPanPadding),a=t.options.autoPanSpeed,s=o;if(s.x=(Math.max(0,o.x-i.x+n.x)-Math.max(0,n.x-o.x))/Math.max(1,n.x)*a,s.y=(Math.max(0,o.y-i.y+n.y)-Math.max(0,n.y-o.y))/Math.max(1,n.y)*a,!s.x&&!s.y)return;let m=r._getMapPanePos();r.panBy(s,{animate:!1});let f=m.subtract(r._getMapPanePos());this._draggable._newPos._add(f),this._draggable._startPos._add(f),h.DomUtil.setPosition(t._icon,this._draggable._newPos),this._onDrag(e),$u(this,e)}function qu(){if(!this.dragging||Or.has(this.dragging))return;let e=this.dragging,t=e._onDrag,r=e._adjustPan;Or.set(e,{_cameraOriginalOnDrag:t,_cameraOriginalAdjustPan:r}),e._onDrag=Wu,e._adjustPan=Vu,e.enabled()&&(e._draggable.off("drag",t,e),e._draggable.on("drag",e._onDrag,e))}function Hu(){let e=Ve.value._initInteraction.call(this);return qu.call(this),e}function Yu(){let e=Hi.value.call(this);return e.rotate=e.pitch=e.move=this._updatePosition,e}function Xu(){let e=Yi.value.call(this);return e.rotate=e.pitch=e.move=this._updatePosition,e}H();W();function Ku(){let e=this._map;if(!k(e)&&!S(e))return Ki.value.call(this);if(!this.options.autoPan)return;if(e._panAnim&&e._panAnim.stop(),this._autopanning){this._autopanning=!1;return}let t=this._container.getBoundingClientRect(),r=e.getContainer().getBoundingClientRect(),o=fe(this.options.autoPanPaddingTopLeft||this.options.autoPanPadding),i=e.getSize().subtract(fe(this.options.autoPanPaddingBottomRight||this.options.autoPanPadding)),n=t.left-r.left,a=t.top-r.top,s=t.right-r.left,m=t.bottom-r.top,f=Math.min(0,n-o.x)||Math.max(0,s-i.x),p=Math.min(0,a-o.y)||Math.max(0,m-i.y);if(!f&&!p)return;this.options.keepInView&&(this._autopanning=!0);let c=e.latLngToContainerPoint(this._latlng);c.x-=f,c.y-=p;let l=e.latLngToLayerPoint(this._latlng).subtract(e.containerPointToLayerPoint(c));e.fire("autopanstart"),e.panTo(e.unproject(e.project(e.getCenter()).add(l)))}b();function Ju(){if(Xi.value.call(this),!this._map)return;let e=this._map.latLngToLayerPoint(this._latlng),t=_o(this._map,e).subtract(e);this._zoomAnimated?h.DomUtil.setPosition(this._container,h.DomUtil.getPosition(this._container).add(t)):(this._container.style.left=`${this._containerLeft+t.x}px`,this._container.style.bottom=`${this._containerBottom-t.y}px`)}b();function Qu(e){Ji.value.call(this,e);let t=_o(this._map,e).subtract(e);h.DomUtil.setPosition(this._container,h.DomUtil.getPosition(this._container).add(t))}b();function ed(){let e=en.value.call(this);return e.rotate=e.pitch=h.Util.throttle(this._onMoveEnd,this.options.updateInterval,this),e}b();W();H();function td(e){if(!S(this._map)&&!k(this._map))return Qi.value.call(this,e);let t=this._map.getBounds();return new h.Bounds(this._map.project(t.getNorthWest(),this._tileZoom),this._map.project(t.getSouthEast(),this._tileZoom))}j.value=Object.defineProperties({},Object.getOwnPropertyDescriptors(h.Map.prototype));h.Map.mergeOptions({rotate:!0,bearing:0,pitch:0,maxPitch:85,pitchMaxDistance:3,rotateControl:!0,shiftKeyRotate:!0,pitchDrag:!0,touchRotate:!1,touchPitch:!1,compassBearing:!1});h.Map.include({layerPointToContainerPoint:hl,containerPointToLayerPoint:gl,_getCenterLayerPoint:yl,panBy:xl,setZoomAround:vl,panInside:wl,_limitCenter:Ml,_limitOffset:bl,_getBoundsCenterZoom:Ll,getBoundsZoom:Bl,_tryAnimatedPan:Tl,getBounds:Pl});h.Map.addInitHook(Gu);Ve.value=Object.defineProperties({},Object.getOwnPropertyDescriptors(h.Marker.prototype));h.Marker.mergeOptions({rotation:0,rotateWithView:!1,keepUpright:!1,scale:1});h.Marker.include({setIcon:Uu,getEvents:Fu,_setPos:Nu,_updateZIndex:ju,_initInteraction:Hu});Hi.value=h.Popup.prototype.getEvents;h.Popup.include({getEvents:Yu});Yi.value=h.Tooltip.prototype.getEvents;h.Tooltip.include({getEvents:Xu});Xi.value=h.Popup.prototype._updatePosition;Ki.value=h.Popup.prototype._adjustPan;h.Popup.include({_adjustPan:Ku,_updatePosition:Ju});Ji.value=h.Tooltip.prototype._setPosition;h.Tooltip.include({_setPosition:Qu});Qi.value=h.GridLayer.prototype._getTiledPixelBounds;en.value=h.GridLayer.prototype.getEvents;h.GridLayer.include({getEvents:ed,_getTiledPixelBounds:td});var le=new WeakMap;var V=new WeakMap;var cr=new WeakMap;var lr=new WeakMap;var q=new WeakMap;var We=new WeakMap;var Oe=new WeakMap;var ur=new WeakMap;var oe=new WeakMap;b();var Oa=new WeakMap;var Pi=new WeakMap;var vt=new WeakSet;var Vm=["rootDirectoryOffset","rootDirectoryLength","jsonMetadataOffset","jsonMetadataLength","leafDirectoryOffset","leafDirectoryLength","tileDataOffset","tileDataLength","numAddressedTiles","numTileEntries","numTileContents"];var qm=["clustered","internalCompression","tileCompression","tileType","minZoom","maxZoom"];var Hm=["minLon","minLat","maxLon","maxLat"];function Da(e){let t=e.byteLength>=127?new DataView(e):null;if(!t||t.getUint32(0,!0)!==1767132496||t.getUint32(4,!0)!==57894252)throw new Error("Expected a PMTiles v3 archive");let r={},o;for(o=0;o<Vm.length;o++)r[Vm[o]]=Number(t.getBigUint64(8+o*8,!0));for(o=0;o<qm.length;o++)r[qm[o]]=t.getUint8(96+o);for(o=0;o<Hm.length;o++)r[Hm[o]]=t.getInt32(102+o*4,!0)/1e7;return r.centerZoom=t.getUint8(118),r.centerLon=t.getInt32(119,!0)/1e7,r.centerLat=t.getInt32(123,!0)/1e7,r}var zo=new WeakMap;async function Ao(e,t,r,o){if(o?.throwIfAborted(),!Number.isSafeInteger(t)||!Number.isSafeInteger(r)||t<0||r<=0||!Number.isSafeInteger(t+r))throw new Error("Invalid PMTiles byte range");let i=await fetch(oe.get(e),{headers:{Range:`bytes=${t}-${t+r-1}`},signal:o});if(!i.ok)throw new Error(`Unable to read PMTiles: HTTP ${i.status}`);let n=i.headers.get("ETag");if(zo.get(e)&&n!==zo.get(e))throw new Error("PMTiles archive changed; recreate the layer");n&&zo.set(e,n);let a=await i.arrayBuffer();if(i.status===200)a=a.slice(t,t+r);else if(i.status!==206||!i.headers.get("Content-Range")?.startsWith(`bytes ${t}-${t+r-1}/`))throw new Error("Invalid PMTiles range response");if(a.byteLength!==r)throw new Error("Truncated PMTiles range");return a}function Dr(e){if(!vt.has(e))return e.getHeader();if(e.options.archive&&e.options.archive!==e)return Dr(e.options.archive);let t=Pi.get(e);return t||(t=Ao(e,0,127).then(Da),Pi.set(e,t)),t}var st=new WeakMap;var wt=new WeakMap;X();function Ra(e,t=!0){let r={enabled:t,loaded:0,skipped:0,pending:0,errors:[]},o;for(o of V.get(e).values())o.error?r.errors.push(o.error):o.done||r.pending++,r.loaded+=o.buildings??0,r.skipped+=o.skipped??0;e.fire("progress",r)}function rd(e){let{positions:t,normals:r,colors:o,featureFaces:i}=e;if(e.backend.options.nightLight||i.length<2)return e;let n=i[0].vertexEnd,a=n*3;if(!n||t.length!==a*i.length)return e;let s=Math.trunc(t[0]),m=Math.trunc(t[1]),f=Math.trunc(t[2]),p=new Float32Array(a),c,l,u,d;for(c=0;c<a;c++)p[c]=t[c]-(c%3===0?s:c%3===1?m:f);let y=new Float32Array(i.length*4);for(l=0;l<i.length;l++){if(u=i[l],d=l*a,u.vertexStart!==l*n||u.vertexEnd!==(l+1)*n)return e;for(y[l*4]=s+t[d]-t[0],y[l*4+1]=m+t[d+1]-t[1],y[l*4+2]=f+t[d+2]-t[2],y[l*4+3]=l*n,c=0;c<a;c++)if(Math.fround(p[c]+y[l*4+c%3])!==Math.fround(t[d+c])||Math.fround(r[c])!==Math.fround(r[d+c])||Math.fround(o[c])!==Math.fround(o[d+c]))return e}return{positions:p,normals:r.slice(0,a),colors:o.slice(0,a),instanceOffsets:y}}function od(e){let{backend:t,area:r}=e;if(!e.positions.length){r.mesh=null,r.buildings=0,r.skipped=e.skipped,r.done=!0;return}let o=v.get(t).device,i=e.preparedGeometry||rd(e),n={position:{size:3,data:i.positions instanceof Float32Array?i.positions:new Float32Array(i.positions)},normal:{size:3,data:i.normals instanceof Float32Array?i.normals:new Float32Array(i.normals)},color:{size:3,data:i.colors instanceof Float32Array?i.colors:new Float32Array(i.colors)}};i.instanceOffsets&&(n.instanceOffset={size:4,data:i.instanceOffsets}),t.options.nightLight&&(n.uv={size:2,data:e.uvs instanceof Float32Array?e.uvs:new Float32Array(e.uvs)});let a,s;for(a in n)s=n[a],s.count=s.data.length/s.size,s.buffer=o.createBuffer({size:Math.max(4,s.data.byteLength),usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),o.queue.writeBuffer(s.buffer,0,s.data);let m={device:o,bounds:i.bounds,attributes:n,drawRange:{start:0,count:n.position.count}};r.mesh={...Pe(),device:o,geometry:m,program:Ke(t,{instanced:!!i.instanceOffsets,vertexColors:!0,roofTexture:t.options.roofTexture,wallTexture:t.options.wallTexture,nightLight:!!t.options.nightLight,alphaMode:t.options.nightLight?"BLEND":void 0,doubleSided:!!t.options.nightLight}),id:ut.value++,renderOrder:0,fadeDuration:250,extras:{featureFaces:e.featureFaces,lights:e.lights}},r.buildings=e.featureFaces.length,r.skipped=e.skipped,r.done=!0,Z(r.mesh,L.get(t)),_(t)}var id=new TextDecoder;function nd(e,t,r){if(!Number.isInteger(e)||!Number.isInteger(t)||!Number.isInteger(r)||e<0||e>26||t<0||r<0||t>=2**e||r>=2**e)throw new Error("Invalid PMTiles tile coordinates");let o=(4**e-1)/3,i=2**e,n,a,s,m;for(n=i/2;n>=1;n/=2)a=t&n?1:0,s=r&n?1:0,o+=n*n*(3*a^s),s||(a&&(t=i-1-t,r=i-1-r),m=t,t=r,r=m);return o}var ad={bytes:null,cursor:0};function Oo(e){let{bytes:t}=e,r=0,o,i;for(o=1;o<=2**49;o*=128){if(e.cursor>=t.length)throw new Error("Truncated PMTiles directory");if(i=t[e.cursor++],r+=(i&127)*o,!Number.isSafeInteger(r))throw new Error("Invalid PMTiles directory integer");if(i<128)return r}throw new Error("Invalid PMTiles directory integer")}function sd(e){let t=ad,r=new Uint8Array(e);t.bytes=r,t.cursor=0;try{let o=Oo(t);if(o>(r.length-t.cursor)/4)throw new Error("Invalid PMTiles directory count");let i=new Array(o),n=0,a,s,m;for(a=0;a<o;a++){if(n+=Oo(t),!Number.isSafeInteger(n)||a&&n<=i[a-1].tileId)throw new Error("Invalid PMTiles directory tile IDs");i[a]={tileId:n,runLength:0,length:0,offset:0}}for(s of i)s.runLength=Oo(t);for(s of i)if(s.length=Oo(t),!s.length)throw new Error("Invalid PMTiles directory length");for(a=0;a<i.length;a++){if(s=i[a],m=Oo(t),!m&&!a)throw new Error("Invalid PMTiles directory offset");s.offset=m?m-1:i[a-1].offset+i[a-1].length}if(t.cursor!==r.length)throw new Error("Trailing PMTiles directory data");return i}finally{t.bytes=null,t.cursor=0}}async function Do(e,t){if(t===1)return e;if(t!==2)throw new Error(`Unsupported PMTiles compression: ${t}`);let r=new Blob([e]),o=new DecompressionStream("gzip");return new Response(r.stream().pipeThrough(o)).arrayBuffer()}async function md(e,t,r,o){return sd(await Do(await Ao(e,t,r),o))}async function fd(e,t,r,o){let i=lr.get(e),n=`${t}:${r}`;i.has(n)||(i.size>=32&&i.delete(i.keys().next().value),i.set(n,md(e,t,r,o)));let a=i.get(n);try{return await a}catch(s){throw i.get(n)===a&&i.delete(n),s}}function pd(e,t){let r=0,o=e.length-1,i;for(;r<=o;)i=r+o>>1,e[i].tileId<=t?r=i+1:o=i-1;return e[o]}async function cd(e,t,r,o,i){if(o-r.tileId>=r.runLength)return;if(r.offset+r.length>t.tileDataLength)throw new Error("PMTiles tile outside data section");let n=await Do(await Ao(e,t.tileDataOffset+r.offset,r.length,i),t.tileCompression);return i?.throwIfAborted(),{data:n}}async function ld(e,t,r,o){let i=t.rootDirectoryOffset,n=t.rootDirectoryLength,a=-1,s=-1,m=-1,f,p,c,l;for(f=0;f<4;f++){if(i===a||i===s||i===m)throw new Error("Cyclic PMTiles directory");if(f===0?a=i:f===1?s=i:f===2&&(m=i),p=await fd(e,i,n,t.internalCompression),o?.throwIfAborted(),c=pd(p,r),!c)return;if(c.runLength)return l=await cd(e,t,c,r,o),l;if(c.offset+c.length>t.leafDirectoryLength)throw new Error("PMTiles directory outside leaf section");i=t.leafDirectoryOffset+c.offset,n=c.length}throw new Error("PMTiles directory depth exceeds four levels")}async function Rr(e,t,r,o,i){if(!vt.has(e))return e.getZxy(t,r,o,i);if(e.options.archive&&e.options.archive!==e)return Rr(e.options.archive,t,r,o,i);let n=nd(t,r,o);i?.throwIfAborted();let a=await Dr(e);if(i?.throwIfAborted(),!(t<a.minZoom||t>a.maxZoom))return ld(e,a,n,i)}async function ud(e,t){if(q.get(e)){let{data:o,url:i}=e.options;if(o!==void 0&&i)throw new Error("GeoJSON source requires either data or url");if(o!==void 0)return o;if(!i)throw new Error("GeoJSON source requires either data or url");let n=new URL(i,document.baseURI),a=await fetch(n,{signal:t.request.signal});if(!a.ok)throw new Error(`Unable to load GeoJSON: HTTP ${a.status}`);return a.json()}let r=await Rr(e,t.coords.z,t.coords.x,t.coords.y,t.request.signal);return r?JSON.parse(id.decode(r.data)):{type:"FeatureCollection",features:[]}}X();function dd(e,t,r){let o=r.options.crs,i=o.project(O.get(e));return{backend:e,area:t,map:r,crs:o,origin:i,metres:Math.cos(O.get(e).lat*T),positions:[],normals:[],colors:[],uvs:[],featureFaces:[],lights:[],supports:new Set,skipped:0}}var hd=new URL("leaflet-city-mapper-worker.js",document.currentScript?.src||document.baseURI).href;function gd(e,t){if(t.type==="abort")e.reject(e.signal.reason);else if(t.type==="error")e.reject(new Error(`Geometry worker failed: ${t.message}`));else if(t.type==="messageerror")e.reject(new Error("Unable to receive geometry worker buffers"));else if(t.data.error){let r=new Error(t.data.error.message);r.name=t.data.error.name,e.reject(r)}else e.resolve(t.data)}function yd(e,t,r){if(e.resolve=t,e.reject=r,e.onEvent=gd.bind(null,e),e.worker.addEventListener("message",e.onEvent),e.worker.addEventListener("error",e.onEvent),e.worker.addEventListener("messageerror",e.onEvent),e.signal.addEventListener("abort",e.onEvent,{once:!0}),e.signal.aborted){r(e.signal.reason);return}e.worker.postMessage(e.input)}var Ym=new WeakMap;function xd(e){e.closed=!0;let t;for(t of e.entries)t.closed=!0,t.worker.terminate(),t.task&&t.task.reject(new DOMException("Map removed","AbortError"));e.entries.clear(),e.idle.length=0}function vd(e,t){let r=e,o,i;if(globalThis.location){let a=new URL(e,location.href);(a.protocol==="https:"||a.protocol==="http:")&&a.origin!==location.origin&&(o=URL.createObjectURL(new Blob([`import ${JSON.stringify(a.href)};`],{type:"text/javascript"})),r=o)}try{i=new Worker(r,{type:"module"})}finally{!i&&o&&URL.revokeObjectURL(o)}let n={url:e,pool:t,worker:i,blobUrl:o};return t&&t.entries.add(n),n}function wd(e,t){let r=e&&Ym.get(e);e&&!r&&(r={entries:new Set,idle:[],closed:!1},Ym.set(e,r),e.once("unload",xd.bind(null,r)));let o,i;if(r){if(r.closed)throw new DOMException("Map removed","AbortError");for(i=0;i<r.idle.length;i++)if(r.idle[i].url===t)return o=r.idle[i],r.idle.splice(i,1),o;o=r.idle.pop(),o&&(o.closed=!0,o.worker.terminate(),r.entries.delete(o))}return vd(t,r)}async function Md(e,t){let r=wd(e.map||e.backend._map,e.backend.options.workerUrl||hd),{worker:o,pool:i}=r,n={worker:o,signal:t,input:{jobs:e.jobs,nightLight:!!e.backend.options.nightLight}};r.task=n;let a=!1;try{let s=await new Promise(yd.bind(null,n)),m;for(m=0;m<s.ranges.length;m++)Object.assign(e.featureFaces[m],s.ranges[m]);e.positions=s.positions,e.uvs=s.uvs,e.lights=s.lights,e.preparedGeometry=s,a=!0}finally{o.removeEventListener("message",n.onEvent),o.removeEventListener("error",n.onEvent),o.removeEventListener("messageerror",n.onEvent),t.removeEventListener("abort",n.onEvent),r.task=null,a&&i&&!i.closed&&!t.aborted?i.idle.push(r):(r.closed||o.terminate(),i&&i.entries.delete(r)),r.blobUrl&&(URL.revokeObjectURL(r.blobUrl),r.blobUrl=null),e.jobs=null}}b();function Ga(e,t,r){let{backend:o,crs:i,origin:n,metres:a,map:s}=e,m=new h.LatLng(r,t),f=i.project(m),p=ct(s,m),c=L.get(o);return{x:(f.x-n.x)*a,y:(f.y-n.y)*a,ground:Number.isFinite(p)&&Number.isFinite(c.position[1])?p-c.position[1]:0}}var Ro=[];function Ua(e){return e.ground||0}function Gr(e,t,r,o,i,n,a,s,m,f,p){let{backend:c,positions:l,normals:u,colors:d,uvs:y}=e,g=o.x-t.x,x=i-r,w=t.y-o.y,C=n.x-t.x,B=a-r,P=t.y-n.y;if((x*P-w*B)*s+(w*C-g*P)*m+(g*B-x*C)*f<0){let D=o,te=i;o=n,i=a,n=D,a=te}l.push(t.x,r+Ua(t),-t.y,o.x,i+Ua(o),-o.y,n.x,a+Ua(n),-n.y),u.push(s,m,f,s,m,f,s,m,f),d.push(p.r,p.g,p.b,p.r,p.g,p.b,p.r,p.g,p.b),c.options.nightLight&&y.push(...t.uv,...o.uv,...n.uv)}function bd(...e){Gr(Ro[Ro.length-1],...e)}function Fa(e,t,r,o){Ro.push(e);try{t(r,o,bd)}finally{Ro.pop()}}var Ur=[{x:Math.cos(0*Math.PI/3),y:Math.sin(0*Math.PI/3),nx:Math.cos(.5*Math.PI/3),nz:-Math.sin(.5*Math.PI/3)},{x:Math.cos(1*Math.PI/3),y:Math.sin(1*Math.PI/3),nx:Math.cos(1.5*Math.PI/3),nz:-Math.sin(1.5*Math.PI/3)},{x:Math.cos(2*Math.PI/3),y:Math.sin(2*Math.PI/3),nx:Math.cos(2.5*Math.PI/3),nz:-Math.sin(2.5*Math.PI/3)},{x:Math.cos(3*Math.PI/3),y:Math.sin(3*Math.PI/3),nx:Math.cos(3.5*Math.PI/3),nz:-Math.sin(3.5*Math.PI/3)},{x:Math.cos(4*Math.PI/3),y:Math.sin(4*Math.PI/3),nx:Math.cos(4.5*Math.PI/3),nz:-Math.sin(4.5*Math.PI/3)},{x:Math.cos(5*Math.PI/3),y:Math.sin(5*Math.PI/3),nx:Math.cos(5.5*Math.PI/3),nz:-Math.sin(5.5*Math.PI/3)}];function Ld(e,t){let r=new Array(Ur.length),o;for(o=0;o<r.length;o++)r[o]={x:e.x+Ur[o].x*t,y:e.y+Ur[o].y*t,ground:e.ground,uv:[3,3]};return r}function Bd(e,t,r){let o=Ie(5264986),i=t.poleRadius;if(!Number.isFinite(i)||i<=0)throw new Error("Invalid lamp pole radius");let n={...e,uv:[3,3]},a,s,m,f,p,c,l,u,d,y;for(y=0;y<2;y++)for(a=y?i*2.5:i,s=y?t.top-.25:0,m=y?t.top+.15:t.top,f=Ld(e,a),p=0;p<6;p++)c=f[p],l=f[(p+1)%6],u=Ur[p].nx,d=Ur[p].nz,r(c,s,l,s,l,m,u,0,d,o),r(c,s,l,m,c,m,u,0,d,o),r(n,m,c,m,l,m,0,1,0,o),r(n,s,l,s,c,s,0,-1,0,o)}function Td(e,t,r,o,i,n,a,s,m,f){typeof s!="number"?(e(r,a,o,a,i,a,...s,t),e(r,a,i,a,n,a,...s,t)):(e(r,a,o,a,i,a,s,m,f,t),e(r,a,i,a,n,a,s,m,f,t))}function Ci(e,t,r,o){return{x:e.x+(o===2?0:t*.65),y:e.y+(o===1?0:o===2?t*.65:r*.65),ground:e.ground+(o===0?0:r*.65),uv:[t,r]}}function Pd(e,t,r){if(!Number.isFinite(t.lightRadius)||t.lightRadius<=0)throw new Error("Invalid light radius");let o=Ie(t.color),i;for(i=0;i<3;i++)Td(r,o,Ci(e,-1,-1,i),Ci(e,1,-1,i),Ci(e,1,1,i),Ci(e,-1,1,i),t.top,i===2?1:0,i===0?1:0,i===1?1:0)}var Na=[[0,0],[.35,.8],[.6,1],[.85,.7],[1,0]];var Go=[{x:Math.cos(0*Math.PI/4),y:Math.sin(0*Math.PI/4),nx:Math.cos(.5*Math.PI/4),nz:-Math.sin(.5*Math.PI/4)},{x:Math.cos(1*Math.PI/4),y:Math.sin(1*Math.PI/4),nx:Math.cos(1.5*Math.PI/4),nz:-Math.sin(1.5*Math.PI/4)},{x:Math.cos(2*Math.PI/4),y:Math.sin(2*Math.PI/4),nx:Math.cos(2.5*Math.PI/4),nz:-Math.sin(2.5*Math.PI/4)},{x:Math.cos(3*Math.PI/4),y:Math.sin(3*Math.PI/4),nx:Math.cos(3.5*Math.PI/4),nz:-Math.sin(3.5*Math.PI/4)},{x:Math.cos(4*Math.PI/4),y:Math.sin(4*Math.PI/4),nx:Math.cos(4.5*Math.PI/4),nz:-Math.sin(4.5*Math.PI/4)},{x:Math.cos(5*Math.PI/4),y:Math.sin(5*Math.PI/4),nx:Math.cos(5.5*Math.PI/4),nz:-Math.sin(5.5*Math.PI/4)},{x:Math.cos(6*Math.PI/4),y:Math.sin(6*Math.PI/4),nx:Math.cos(6.5*Math.PI/4),nz:-Math.sin(6.5*Math.PI/4)},{x:Math.cos(7*Math.PI/4),y:Math.sin(7*Math.PI/4),nx:Math.cos(7.5*Math.PI/4),nz:-Math.sin(7.5*Math.PI/4)}];function Si(e,t){let r=new Array(Go.length),o;for(o=0;o<r.length;o++)r[o]={x:e.x+Go[o].x*t,y:e.y+Go[o].y*t,ground:e.ground};return r}function ja(e,t,r,o,i,n,a){let s=Si(e,r),m=Si(e,i),f,p,c,l,u,d,y,g,x;for(f=0;f<8;f++)p=(f+1)%8,c=(r-i)/(n-o),l=Math.hypot(1,c),{nx:u,nz:d}=Go[f],y=c/l,g=u/l,x=d/l,r&&t(s[f],o,s[p],o,m[p],n,g,y,x,a),i&&t(s[f],o,m[p],n,m[f],n,g,y,x,a)}function Cd(e,t,r,o,i,n){if(!Number.isFinite(e)||!Number.isFinite(t)||!Number.isFinite(r)||e<=0||t<e||r<=o||r>=i||n!=="round"&&n!=="cone")throw new Error("Invalid tree dimensions or crown shape")}function Sd(e,t,r){let{top:o,bottom:i=0,trunkRadius:n,crownRadius:a,crownBottom:s,crownShape:m="round"}=t;Cd(n,a,s,i,o,m);let f=Ie(t.trunkColor??7491898),p=Ie(t.color??5210683);ja(e,r,n,i,n,s+(o-s)*.25,f);let c,l,u,d,y;if(m==="cone"){let g=Si(e,a);for(c=0;c<8;c++)r(e,s,g[c],s,g[(c+1)%8],s,0,-1,0,p);ja(e,r,a,s,0,o,p)}else for(c=1;c<Na.length;c++)[l,u]=Na[c-1],[d,y]=Na[c],ja(e,r,u*a,s+l*(o-s),y*a,s+d*(o-s),p)}function Ed(e,t,r,o,i){let{top:n}=r;if(e.backend.options.nightLight){if(!Number.isFinite(r.lightFlux)||r.lightFlux<=0)throw new Error("Invalid light flux");r.poleRadius>0&&!e.supports.has(i)&&(Fa(e,Bd,t,r),e.supports.add(i)),Fa(e,Pd,t,r),e.lights.push({position:[t.x,t.ground+n,-t.y],radius:Math.hypot(n,r.lightRadius),color:[o.r,o.g,o.b],flux:r.lightFlux})}else Fa(e,Sd,t,r)}function kd(e,t,r,o,i,n){let a=Ga(e,r,o);Ed(e,a,i,n,t.properties?.cod_ouvrag||`${r},${o}`)}b();function Wa(e,t){let{backend:r,crs:o,origin:i,metres:n,map:a}=e;if(t.length<4)throw new Error("Invalid GeoJSON polygon ring");let s=[],m=L.get(r),f,p,c,l,u,d;for(f=0;f<t.length-1;f++){if(p=t[f][0],c=t[f][1],!Number.isFinite(p)||!Number.isFinite(c))throw new Error("Invalid GeoJSON coordinates");l=new h.LatLng(c,p),u=o.project(l),d=ct(a,l),s.push({x:(u.x-i.x)*n,y:(u.y-i.y)*n,ground:Number.isFinite(d)&&Number.isFinite(m.position[1])?d-m.position[1]:0})}return s}function _d(e,t,r,o,i){let n=[],a,s,m,f,p,c,l,u,d,y,g;for(a of t)for(s of a)n.push(s);for([m,f,p]of yo(t[0],t.slice(1)))Gr(e,n[m],r,n[f],r,n[p],r,0,1,0,i),o>0&&Gr(e,n[m],o,n[f],o,n[p],o,0,-1,0,i);for(c=0;c<t.length;c++)for(a=t[c],l=Rn(a)===(c===0)?-1:1,u=0;u<a.length;u++)m=a[u],f=a[(u+1)%a.length],d=Math.hypot(f.x-m.x,f.y-m.y),d&&(y=l*(f.y-m.y)/d,g=l*(f.x-m.x)/d,Gr(e,m,o,f,o,f,r,y,0,g,i),Gr(e,m,o,f,r,m,r,y,0,g,i))}function Xm(e,t,r,o,i){if(!t.length)throw new Error("Empty GeoJSON polygon");let n=[],a;for(a of t)n.push(Wa(e,a));_d(e,n,r,o,i)}function Id(e,t){let r=e?.geometry,o=r?.type==="Point";if(t&&!o)throw new Error("Night lights require Point geometry");if(r?.type!=="Polygon"&&r?.type!=="MultiPolygon"&&!o)throw new Error("Unsupported GeoJSON geometry");let i=o?r.coordinates:r.type==="Polygon"?r.coordinates[0]?.[0]:r.coordinates[0]?.[0]?.[0];if(!Number.isFinite(i?.[0])||!Number.isFinite(i?.[1]))throw new Error("Invalid GeoJSON coordinates");return i}function zd(e,t){let r=e.options.style(t);if(r===null)return null;if(!r||typeof r!="object")throw new Error("style must return an extrusion style or null");let{top:o,bottom:i=0}=r;if(!Number.isFinite(o)||!Number.isFinite(i)||i<0||o<=i)throw new Error("Invalid extrusion heights: expected top > bottom >= 0");return r}function Ad(e,t){let r=t.type==="Polygon"?[t.coordinates]:t.type==="MultiPolygon"?t.coordinates:[],o=[],i,n,a;for(i of r){if(!i.length)throw new Error("Empty GeoJSON polygon");a=[];for(n of i)a.push(Wa(e,n));o.push(a)}return o}function Od(e,t,r,o,i,n){let a=t.geometry,s=Ad(e,a),m=a.type==="Point"?Ga(e,r,o):null,f=e.backend.options.nightLight,p=m?Ie(i.color??(f?void 0:5210683)):n,c=m&&!f?Ie(i.trunkColor??7491898):null;e.jobs.push({point:m,polygons:s,baseColor:{r:n.r,g:n.g,b:n.b},support:t.properties?.cod_ouvrag||`${r},${o}`,style:{top:i.top,bottom:i.bottom??0,color:{r:p.r,g:p.g,b:p.b},trunkColor:c?{r:c.r,g:c.g,b:c.b}:void 0,trunkRadius:i.trunkRadius,crownRadius:i.crownRadius,crownBottom:i.crownBottom,crownShape:i.crownShape,poleRadius:i.poleRadius,lightRadius:i.lightRadius,lightFlux:i.lightFlux}})}b();function Dd(e,t,r,o){if(!t)return!0;let i=e.project(new h.LatLng(o,r),t.z);return Math.floor(i.x/256)===t.x&&Math.floor(i.y/256)===t.y}function Rd(e,t){let{backend:r,area:o,map:i}=e,n=o.coords,a=Id(t,r.options.nightLight),s=t.geometry,m=s.type==="Point",f=a[0],p=a[1];if(!Dd(i,n,f,p))return;let c=zd(r,t);if(c===null){e.skipped++;return}let{top:l,bottom:u=0,color:d=14267276}=c,y=Ie(d);if(e.jobs){Od(e,t,f,p,c,y),e.featureFaces.push({id:t.id??t.properties?.objectid??JSON.stringify(s),properties:t.properties,baseColor:y});return}let g=e.positions.length/3;m&&kd(e,t,f,p,c,y);let x;if(s.type==="Polygon")Xm(e,s.coordinates,l,u,y);else if(s.type==="MultiPolygon")for(x of s.coordinates)Xm(e,x,l,u,y);let w=e.positions.length/3;e.featureFaces.push({id:t.id??t.properties?.objectid??JSON.stringify(s),properties:t.properties,baseColor:y,faceStart:g/3,faceEnd:w/3,vertexStart:g,vertexEnd:w})}async function Gd(e,t,r){let o=performance.now()+4,i;for(i of r){if(t.request.signal.aborted)return;if(performance.now()>=o){if(await new Promise(requestAnimationFrame),t.request.signal.aborted)return;o=performance.now()+4}Rd(e,i)}}async function Ud(e,t,r){try{if(await new Promise(requestAnimationFrame),await ke.get(r),t.request.signal.aborted)return;let o=await ud(e,t);if(t.request.signal.aborted)return;if(o?.type!=="FeatureCollection"||!Array.isArray(o.features))throw new Error("Invalid GeoJSON response");if(q.get(e)&&typeof e.options.style!="function")throw new Error("style must be a function");let i=dd(e,t,r);if(e.options.worker!==!1&&typeof Worker<"u"&&o.features.length>=64&&(i.jobs=[]),await Gd(i,t,o.features),t.request.signal.aborted||(i.jobs&&await Md(i,t.request.signal),t.request.signal.aborted))return;od(i)}catch(o){t.request.signal.aborted||(t.error=o.message,e.fire("error",{error:o}))}finally{We.set(e,We.get(e)-1),Ei(e,r)}}function Za(e,t){return e.distance-t.distance}function Fd(e,t){let r=[],o,i,n;for(o of e)for(i of V.get(o).values())i.started||i.request.signal.aborted||(n=i.coords&&t.project(t.getCenter(),i.coords.z).divideBy(256),r.push({layer:o,area:i,distance:n?Math.hypot(i.coords.x+.5-n.x,i.coords.y+.5-n.y)/2**i.coords.z:0}));return r.sort(Za),r}function Ei(e,t=e._map){let r=t&&ie.get(t);if(!r)return;let o=[],i,n,a;for(i of G.get(r))Number.isFinite(We.get(i))&&V.get(i)&&(oe.get(i)||q.get(i))&&o.push(i);let s=Fd(o,t),m=0;for(i of o)m+=We.get(i);for({layer:a,area:n}of s){if(m>=4)break;We.get(a)>=2||(n.started=!0,We.set(a,We.get(a)+1),m++,Ud(a,n,t))}for(i of o)Ra(i)}var Je=new WeakMap;var be=new WeakMap;function Mt(e,t){t?.model&&(t=null),!(Je.get(e)?.mesh===t?.mesh&&Je.get(e)?.vertexStart===t?.vertexStart)&&(Je.get(e)&&(Je.get(e).mesh.highlight=null),Je.set(e,t),t&&(t.mesh.highlightRange[0]=t.vertexStart,t.mesh.highlightRange[1]=t.vertexEnd,t.mesh.highlight=t.mesh.highlightRange),_(e))}var Ce=new WeakMap;var dr=new WeakMap;var Se=new WeakMap;function bt(e,t,r){let o=Se.get(e);if(!o)return;if(t){o.replaceChildren(e.options.tooltip(t)),o.hidden=!1;let a=Ce.get(e).getBoundingClientRect(),s=r.clientX-a.left,m=r.clientY-a.top;o.style.left=`${s+o.offsetWidth+16>a.width?s-o.offsetWidth-12:s+12}px`,o.style.top=`${m+o.offsetHeight+16>a.height?m-o.offsetHeight-12:m+12}px`}else o.hidden=!0;let i=z.get(e),n;if(i){let a=!1;for(n of G.get(i))if(Se.get(n)&&!Se.get(n).hidden){a=!0;break}a?(dr.get(i)===void 0&&dr.set(i,Ce.get(e).style.cursor),Ce.get(e).style.cursor="pointer"):dr.get(i)!==void 0&&(Ce.get(e).style.cursor=dr.get(i),dr.delete(i))}}function Fr(e,t){t.request.abort();let r;if(t.mesh){Je.get(e)?.mesh===t.mesh&&(Mt(e,null),be.set(e,null),bt(e,null)),Z(t.mesh,null),_(e);let o=t.mesh.geometry;for(r of Object.values(o.attributes))r.buffer.destroy();t.mesh.program.pipelineCache.clear()}}function Nd(e,t){return e.distance-t.distance}function Nr(e){if(!e._map||!z.get(e))return;if(q.get(e)){V.get(e).has("geojson")||V.get(e).set("geojson",{request:new AbortController}),Ei(e);return}if(!R.get(e))return;let t=R.get(e).minZoom,r=e._map.project(e._map.getCenter(),t).divideBy(256).floor(),o=e._map.getBounds(),i=e._map.project(o.getNorthWest(),t).divideBy(256).floor(),n=e._map.project(o.getSouthEast(),t).divideBy(256).floor(),a=e._map.project([R.get(e).maxLat,R.get(e).minLon],t).divideBy(256).floor(),s=e._map.project([R.get(e).minLat,R.get(e).maxLon],t).divideBy(256).floor(),m=new Map,f,p,c,l,u;for(f=Math.max(0,i.x-1,a.x);f<=Math.min(2**t-1,n.x+1,s.x);f++)for(p=Math.max(0,i.y-1,a.y);p<=Math.min(2**t-1,n.y+1,s.y);p++)m.set(`${f}/${p}`,{z:t,x:f,y:p});for([c,l]of V.get(e))m.has(c)||(Fr(e,l),V.get(e).delete(c));let d=[];for([c,u]of m)u.distance=Math.hypot(u.x+.5-r.x,u.y+.5-r.y)/2**t,d.push(u);d.sort(Nd);for(u of d)c=`${u.x}/${u.y}`,V.get(e).has(c)||V.get(e).set(c,{coords:u,request:new AbortController});Ei(e)}function Uo(e){if(!L.get(e)||!O.get(e))return;wt.get(e)==null&&wt.set(e,L.get(e).position[1]);let t=ae.get(e._map),r=t&&Kt(t,O.get(e)),o=Number.isFinite(r)?e.options.terrainOffset??0:0;L.get(e).position[1]=wt.get(e)+(r??0)+o}function jd(e,t){e.attributes.index?.data instanceof Uint8Array&&(e.attributes.index.data=new Uint16Array(e.attributes.index.data));let r,o,i;for(r in e.attributes)o=e.attributes[r],o.size||=1,o.count=o.data.length/o.size,o.indexFormat=o.data instanceof Uint32Array?"uint32":"uint16",i=o.buffer,o.buffer=t.createBuffer({size:Math.max(4,o.data.byteLength),usage:r==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),t.queue.writeBuffer(o.buffer,0,o.data),i?.destroy();e.device=t,e.drawRange.count=e.attributes.index?.count||e.attributes.position.count}function Wd(e,t){let r,o;for(r in e)r!=="baseTexture"&&r!=="metalTexture"&&r!=="emissiveTexture"&&r!=="occlusionTexture"||(o=e[r],!(!o||o.device===t)&&(o.device=t,o.texture=t.createTexture({size:[o.image.width,o.image.height],format:o.format,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),o.sampler=t.createSampler(o.samplerOptions),o.uploaded=null))}function Zd(e,t){let r=z.get(t),o;if(e.geometry&&e.geometry.device!==v.get(r).device){let i=e.geometry,n=e.program._layerMaterial,a=v.get(r).device;jd(i,a),e.bindGroup=null,e.boundTextures?e.boundTextures.length=0:e.boundTextures=[],Wd(n,a),e.program.pipelineCache.clear(),e.program=Ke(t,n),e.device=a}e.texture&&e.texture.device!==v.get(r).device&&(o=e.texture,o.device=v.get(r).device,o.texture=v.get(r).device.createTexture({size:[e.texture.image.width,e.texture.image.height],format:e.texture.format,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),o.sampler=v.get(r).device.createSampler(o.samplerOptions),o.uploaded=null)}var Fo=new WeakMap;function $d(e){let t=e.getContainer();if(t.querySelector(".leaflet-webgpu-warning"))return;let r=document.createElement("div");r.className="leaflet-webgpu-warning",r.setAttribute("role","alert"),r.style.cssText="position:absolute;z-index:1000;top:50%;left:50%;transform:translate(-50%,-50%);max-width:calc(100% - 32px);box-sizing:border-box;padding:12px 16px;border:1px solid #c98b24;border-radius:6px;background:#fff8e6;box-shadow:0 3px 12px #0005;color:#30251d;font:14px/1.5 sans-serif;text-align:center;pointer-events:auto",r.append("WebGPU is not available in this browser or device. ");let o=document.createElement("a");o.href="https://developer.mozilla.org/en-US/docs/Web/API/WebGPU_API#browser_compatibility",o.target="_blank",o.rel="noopener noreferrer",o.textContent="Learn more",r.append(o),t.append(r)}function hr(e,t,r){throw $d(r),st.get(t).reject(e),ie.delete(r),e}async function Vd(e,t){let r;try{r=await navigator.gpu.requestAdapter()}catch(o){hr(o,e,t)}return r||hr(new Error("Unable to acquire a WebGPU adapter"),e,t),r}async function qd(e,t,r){try{return await e.requestDevice()}catch(o){hr(o,t,r)}}function Hd(e){let t=Fo.get(e.currentTarget),r=ie.get(t);if(v.get(r)?.device!==e.currentTarget||!G.get(r))return;let o;for(o of G.get(r))o.fire("error",{error:e.error})}function Yd([e,t]){let r=Fo.get(t),o=ie.get(r);if(!o||v.get(o)?.device!==t)return;let i=new Error(`WebGPU device lost: ${e.message||e.reason}`),n;for(n of G.get(o))n.fire("error",{error:i})}function Xd(){return{position:[0,0,0],up:[0,1,0],target:[0,0,0],x:[0,0,0],y:[0,0,0],z:[0,0,0],viewMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],projectionMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],projectionViewMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],viewTransform:new DOMMatrix,projectionTransform:new DOMMatrix,projectionViewTransform:new DOMMatrix,fov:45,aspect:1,near:.1,far:1e4}}var No=new Float32Array(20);No[0]=No[5]=No[10]=No[15]=1;function Kd(e,t){let r=t.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"depth"}},{binding:2,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"comparison"}},{binding:3,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"read-only-storage"}}]}),o=v.get(e).device.createBuffer({size:80,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),i=v.get(e).device.createSampler({compare:"less-equal",minFilter:"linear",magFilter:"linear"}),n=v.get(e).device.createBuffer({size:32,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});v.get(e).sunlight={layout:r,buffer:o,sampler:i,lights:n,size:0},v.get(e).device.queue.writeBuffer(o,0,No),Ln(e,1);let a=document.createElement("canvas");a.width=1,a.height=1,v.get(e).roofFallbackTexture={device:t,texture:t.createTexture({size:[1,1],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:t.createSampler({addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}),image:a,format:"rgba8unorm",srgb:!1,uploaded:null}}var jr=new WeakMap;var $a=[];function Jd(){let e=$a.shift();jr.set(e,!1),!(z.get(e)!==e||!v.get(e))&&(e._map._animatingZoom?_(e):rr(e))}function ki(){let e=this;jr.get(e)||(jr.set(e,!0),$a.push(e),queueMicrotask(Jd))}var jo=new WeakMap;function _i(){jo.set(this,null)}var Va=[];function Qd(){let e=Va.shift();z.get(e)===e&&v.get(e)&&rr(e)}function Ii(e){let t=this._map;e&&!Ue.get(this)&&(Ue.set(this,{from:t.getCenter(),zoom:t.getZoom(),to:e.center,targetZoom:e.zoom,start:performance.now()}),t.getContainer().classList.add("leaflet-camera-zoom")),Va.push(this),queueMicrotask(Qd)}function zi(){let e=this,t;if(ce.get(e))for(t of ce.get(e).keys())t.finish();ce.set(e,null),Ue.set(e,null),ke.delete(e._map),e._map.getContainer().classList.remove("leaflet-camera-zoom"),on(e._map),jo.set(e,null),_(e)}function eh(e,t,r){Yt.set(e,null),r.className="leaflet-3d",r.style.cssText="position:absolute;top:0;left:0;pointer-events:none",r.setAttribute("role","img"),r.setAttribute("aria-label",e.options.ariaLabel??"3D scene");let o=t.getPane("webgpuPane");o||(o=t.createPane("webgpuPane",t.getContainer()),o.style.zIndex=1,o.style.pointerEvents="none"),o.append(r),t.on("move zoom rotate pitch resize viewreset layeradd layerremove",ki,e),t.on("zoomstart",_i,e),t.on("zoomanim",Ii,e),t.on("zoomend",zi,e)}async function th(e,t){let r=document.createElement("canvas");navigator.gpu||hr(new Error("Layer3D requires WebGPU"),e,t);let o=await Vd(e,t),i=await qd(o,e,t);Fo.set(i,t),i.addEventListener("uncapturederror",Hd),Promise.all([i.lost,Promise.resolve(i)]).then(Yd);let n=r.getContext("webgpu");n||(i.destroy(),hr(new Error("Unable to create a WebGPU canvas context"),e,t));let a=navigator.gpu.getPreferredCanvasFormat();n.configure({device:i,format:a,alphaMode:"premultiplied"}),t.getContainer().querySelector(".leaflet-webgpu-warning")?.remove(),z.set(e,e),G.set(e,new Set),ne.set(e,O.get(e)),Q.set(e,Pe()),J.set(e,Xd()),v.set(e,{device:i,context:n,format:a,canvas:r,dpr:Math.min(window.devicePixelRatio,2)}),Kd(e,i),eh(e,t,r)}async function Wo(e,t){let r=ie.get(t);st.get(r)&&await st.get(r).promise,r||(r=e,st.set(e,Promise.withResolvers()),st.get(e).promise.catch(at),ie.set(t,r),await th(e,t),st.get(e).resolve(),st.delete(r),rr(r),ie.set(t,r));let o=t.options.crs.project(ne.get(r)),i=t.options.crs.project(O.get(e)),n=Math.cos(ne.get(r).lat*T);wt.get(e)==null&&wt.set(e,L.get(e).position[1]),L.get(e).position[0]=(i.x-o.x)*n,L.get(e).position[1]=wt.get(e),L.get(e).position[2]=-(i.y-o.y)*n,Uo(e),L.get(e).scale.fill(n/Math.cos(O.get(e).lat*T)),z.set(e,r),v.set(e,v.get(r)),Q.set(e,Q.get(r)),J.set(e,J.get(r)),G.get(r).add(e),Z(L.get(e),Q.get(r)),At(L.get(e),Zd,e),_(r),(R.get(e)&&I.get(e)!=="raster"||q.get(e))&&Nr(e)}var De=new WeakMap;var rh=new TextDecoder;function oh(e){if(!e)return!1;let t,r;for(t of e)for(r of t.primitives)if(r.targets||r.mode!==void 0&&r.mode!==4)return!0;return!1}function ih(e){let t=new DataView(e),r=rh,o,i,n,a,s;if(t.getUint32(0,!0)===1179937895){if(t.getUint32(4,!0)!==2||t.getUint32(8,!0)!==e.byteLength)throw new Error("Invalid GLB header");let m;for(i=12;i<e.byteLength;){if(i+8>e.byteLength)throw new Error("Truncated GLB chunk");if(n=t.getUint32(i,!0),a=t.getUint32(i+4,!0),i+=8,i+n>e.byteLength)throw new Error("Truncated GLB data");s=e.slice(i,i+n),a===1313821514&&(o=JSON.parse(r.decode(s))),a===5130562&&(m=s),i+=n}if(!o)throw new Error("Missing GLB JSON");m&&(o.buffers[0].binary=m)}else o=JSON.parse(r.decode(e));if(o.skins?.length||o.animations?.length||o.extensionsRequired?.length||oh(o.meshes))throw new Error("Layer3D supports static triangle glTF models without required extensions");return o}X();b();function qa(e,t){let r=new Float32Array(e.length),o,i,n,a,s,m,f,p,c,l,u,d,y,g,x,w;for(o=0;o<(t?.length||e.length/3);o+=3)for(i=t?t[o]:o,n=t?t[o+1]:o+1,a=t?t[o+2]:o+2,s=e[n*3]-e[i*3],m=e[n*3+1]-e[i*3+1],f=e[n*3+2]-e[i*3+2],p=e[a*3]-e[i*3],c=e[a*3+1]-e[i*3+1],l=e[a*3+2]-e[i*3+2],d=m*l-f*c,y=f*p-s*l,g=s*c-m*p,u=0;u<3;u++)x=u===0?i:u===1?n:a,r[x*3]+=d,r[x*3+1]+=y,r[x*3+2]+=g;for(o=0;o<r.length;o+=3)for(w=Math.hypot(r[o],r[o+1],r[o+2])||1,u=0;u<3;u++)r[o+u]/=w;return r}function Km(e,t){e.geometry?.attributes.position&&t.push(e);let r;for(r of e.children)Km(r,t)}function Zo(e,t){if(!De.get(e))return;let r=[];Km(De.get(e),r);let o,i,n,a,s,m,f,p,c,l,u,d,y,g,x,w,C,B,P,D;if(!ve.get(t)||!e.options.terrainConform){for(o of r)i=o.geometry._terrainBasePositions,i&&(n=o.geometry,a=n.attributes.position,a.data.set(i),o.device.queue.writeBuffer(a.buffer,0,i),s=n._terrainBaseNormals,s&&(n.attributes.normal.data.set(s),o.device.queue.writeBuffer(n.attributes.normal.buffer,0,s)),Be(n));return}we(L.get(e));let te=e._map,U=te.options.crs,N=U.project(ne.get(z.get(e))),K=Math.cos(ne.get(z.get(e)).lat*T),pe=U.scale(de.get(t));for(o of r){for(n=o.geometry,m=n.attributes.position,n._terrainBasePositions||=m.data.slice(),f=n.attributes.normal,n._terrainBaseNormals||=f.data.slice(),m.data.set(n._terrainBasePositions),p=o.worldMatrix,c=new DOMMatrix(p).inverse().toFloat64Array(),l=0;l<m.data.length;l+=3)u=m.data[l],d=m.data[l+1],y=m.data[l+2],g=p[1]*u+p[5]*d+p[9]*y+p[13],x=Math.max(0,Math.min(1,1-(g-L.get(e).position[1])/8)),x&&(w=p[0]*u+p[4]*d+p[8]*y+p[12],C=p[2]*u+p[6]*d+p[10]*y+p[14],B=U.transformation.transform(new h.Point(N.x+w/K,N.y-C/K),pe),P=Kt(t,B),Number.isFinite(P)&&(D=(P-g)*x,m.data[l]+=c[4]*D,m.data[l+1]+=c[5]*D,m.data[l+2]+=c[6]*D));o.device.queue.writeBuffer(m.buffer,0,m.data),f.data.set(qa(m.data,n.attributes.index?.data)),o.device.queue.writeBuffer(f.buffer,0,f.data),Be(n)}_(e)}async function nh(e,t){if(e.binary)return;let r=await fetch(new URL(e.uri,t).href);if(!r.ok)throw new Error(`Unable to load model buffer: HTTP ${r.status}`);e.binary=await r.arrayBuffer()}var ah={premultiplyAlpha:"none",colorSpaceConversion:"none"};async function sh(e,t,r){let o;if(r.bufferView!==void 0){let i=e.bufferViews[r.bufferView],n=e.buffers[i.buffer].binary;o=new Blob([n.slice(i.byteOffset||0,(i.byteOffset||0)+i.byteLength)],{type:r.mimeType})}else{let i=await fetch(new URL(r.uri,t).href);if(!i.ok)throw new Error(`Unable to load model texture: HTTP ${i.status}`);o=await i.blob()}return createImageBitmap(o,ah)}async function mh(e,t,r){let o=[],i;for(i of t.buffers||it)o.push(nh(i,r));await Promise.all(o),await le.get(e).promise;let n=[],a;for(a of t.images||it)n.push(sh(t,r,a));let s=await Promise.all(n);return await ke.get(e._map),s}function fh(e){return{addressModeU:e?.wrapS===33071?"clamp-to-edge":e?.wrapS===33648?"mirror-repeat":"repeat",addressModeV:e?.wrapT===33071?"clamp-to-edge":e?.wrapT===33648?"mirror-repeat":"repeat",magFilter:e?.magFilter===9728?"nearest":"linear",minFilter:e?.minFilter===9728||e?.minFilter===9984||e?.minFilter===9986?"nearest":"linear"}}function Ai(e,t,r=!1){let{backend:o,description:i,images:n,textures:a}=e;if(!t)return null;if((t.texCoord||0)!==0||t.extensions)throw new Error("Model textures currently require untransformed TEXCOORD_0 UVs");let s=v.get(o).device,m=`${t.index}:${r}`;if(!a.has(m)){let f=i.textures[t.index],p=i.samplers?.[f.sampler],c=n[f.source],l=r?"rgba8unorm-srgb":"rgba8unorm",u=fh(p);a.set(m,{device:s,texture:s.createTexture({size:[c.width,c.height],format:l,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:s.createSampler(u),samplerOptions:u,format:l,srgb:r,image:c,flipY:!1,uploaded:null})}return a.get(m)}function ph(e,t){let{backend:r}=e,o=t.pbrMetallicRoughness;return{color:o?.baseColorFactor?o.baseColorFactor.slice(0,3):[1,1,1],opacity:o?.baseColorFactor?.[3]??1,metallic:o?.metallicFactor??1,roughness:o?.roughnessFactor??1,baseTexture:Ai(e,o?.baseColorTexture,!0),metalTexture:Ai(e,o?.metallicRoughnessTexture),emissiveTexture:Ai(e,t.emissiveTexture,!0),occlusionTexture:Ai(e,t.occlusionTexture),emissive:t.emissiveFactor||[0,0,0],occlusionStrength:t.occlusionTexture?.strength??1,alphaMode:r.options.alphaMode||t.alphaMode||"OPAQUE",alphaCutoff:t.alphaCutoff??.5,doubleSided:t.doubleSided}}function ch(e,t,r){let o={backend:e,description:t,images:r,textures:new Map,materials:[],active:new Set,resources:[]},i;for(i of t.materials||it)o.materials.push(ph(o,i));return o}var lh=[0,0,0,1];var uh=[1,1,1];var dh=[0,0,0];function hh(e){if(e.matrix)return Array.from(e.matrix);let[t,r,o,i]=e.rotation||lh,[n,a,s]=e.scale||uh;return[(1-2*(r*r+o*o))*n,2*(t*r+o*i)*n,2*(t*o-r*i)*n,0,2*(t*r-o*i)*a,(1-2*(t*t+o*o))*a,2*(r*o+t*i)*a,0,2*(t*o+r*i)*s,2*(r*o-t*i)*s,(1-2*(t*t+r*r))*s,0,...e.translation||dh,1]}var gh=[["POSITION","position"],["NORMAL","normal"],["TEXCOORD_0","uv"]];var Ha={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array};var yh={SCALAR:1,VEC2:2,VEC3:3,VEC4:4};function xh(e,t,r){return t===Int8Array?e.getInt8(r):t===Uint8Array?e.getUint8(r):t===Int16Array?e.getInt16(r,!0):t===Uint16Array?e.getUint16(r,!0):t===Uint32Array?e.getUint32(r,!0):e.getFloat32(r,!0)}function Ya(e,t,r,o,i,n,a,s,m,f){let p=e.bufferViews[a],c=t.BYTES_PER_ELEMENT,l=e.buffers[p.buffer].binary;if(f||=r*c,!l||f<r*c||s<0||(p.byteOffset||0)+p.byteLength>l.byteLength||(m-1)*f+r*c+s>p.byteLength)throw new Error("glTF accessor outside buffer view");let u=new DataView(l),d,y,g,x;for(d=0;d<m;d++){if(x=n?n[d]:d,n&&x>=i)throw new Error("Invalid sparse glTF index");for(y=0;y<r;y++)g=(p.byteOffset||0)+s+d*f+y*c,o[x*r+y]=xh(u,t,g)}}function vh(e,t,r,o,i){let n=t.sparse,a=Ha[n.indices.componentType];if(a!==Uint8Array&&a!==Uint16Array&&a!==Uint32Array)throw new Error("Invalid sparse glTF indices");let s=e.bufferViews[n.indices.bufferView],m=(s.byteOffset||0)+(n.indices.byteOffset||0);if(n.count>t.count||(n.indices.byteOffset||0)+n.count*a.BYTES_PER_ELEMENT>s.byteLength)throw new Error("Invalid sparse glTF indices");let f=new a(e.buffers[s.buffer].binary.slice(m,m+n.count*a.BYTES_PER_ELEMENT));Ya(e,r,o,i,t.count,f,n.values.bufferView,n.values.byteOffset||0,n.count,0)}function wh(e,t,r,o){let i=new Float32Array(r.length),n;for(n=0;n<r.length;n++)i[n]=e.normalized?Math.max(-1,r[n]/(t===Int8Array?127:t===Int16Array?32767:t===Uint8Array?255:t===Uint32Array?4294967295:65535)):r[n];return{data:i,size:o,indices:r}}function Xa(e,t){let r=e.accessors[t],o=Ha[r.componentType],i=yh[r.type];if(!o||!i||!Number.isInteger(r.count)||r.count<0)throw new Error("Invalid glTF accessor");let n=new o(r.count*i);return r.bufferView!==void 0&&Ya(e,o,i,n,r.count,null,r.bufferView,r.byteOffset||0,r.count,e.bufferViews[r.bufferView].byteStride),r.sparse&&vh(e,r,o,i,n),r.componentType===5126?{data:n,size:i}:wh(r,o,n,i)}function Mh(e,t){let r={},o,i;for([o,i]of gh)t.attributes[o]!==void 0&&(r[i]=Xa(e,t.attributes[o]));if(!r.position)throw new Error("glTF mesh has no positions");let n=r.position.data.length/3;if(r.position.size!==3||n<3)throw new Error("Invalid glTF vertex attributes");let a;for(a of Object.values(r))if(a.data.length/a.size!==n)throw new Error("Invalid glTF vertex attributes");return{attributes:r,vertexCount:n}}function bh(e,t,r,o){if(t.indices!==void 0){let i=Xa(e,t.indices);if(r.index={size:1,data:i.indices},!(i.indices instanceof Uint8Array||i.indices instanceof Uint16Array||i.indices instanceof Uint32Array)||i.size!==1||i.indices.length%3)throw new Error("Invalid glTF triangle indices");let n;for(n of i.indices)if(n>=o)throw new Error("Invalid glTF triangle indices")}else if(o%3)throw new Error("Incomplete glTF triangle")}function Lh(e,t,r){let o;r.normal||(o=qa(r.position.data,r.index?.data),r.normal={size:3,data:o});let i=e.materials[t.material]||{color:[1,1,1],metallic:1};if((i.baseTexture||i.metalTexture||i.emissiveTexture||i.occlusionTexture)&&!r.uv)throw new Error("Textured model mesh requires UV coordinates");let n=Ke(e.backend,i);e.resources.push(n);let a=v.get(e.backend).device;r.index?.data instanceof Uint8Array&&(r.index.data=Uint16Array.from(r.index.data));let s,m;for([s,m]of Object.entries(r))m.size||=1,m.count=m.data.length/m.size,m.indexFormat=m.data instanceof Uint32Array?"uint32":"uint16",m.buffer=a.createBuffer({size:Math.max(4,m.data.byteLength),usage:s==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),a.queue.writeBuffer(m.buffer,0,m.data);let f={device:a,attributes:r,drawRange:{start:0,count:r.index?.count||r.position.count}};return e.resources.push(f),{device:a,geometry:f,program:n}}function Jm(e,t){let{backend:r,description:o,active:i}=e;if(i.has(t))throw new Error("Cyclic glTF nodes");let n=o.nodes[t];if(!n)throw new Error("Invalid glTF node");i.add(t);let a={...Pe(),name:n.name};a.matrix=hh(n);let s,m,f,p,c,l,u;if(n.mesh!==void 0)for(s of o.meshes[n.mesh].primitives)m=Mh(o,s),f=m.attributes,p=m.vertexCount,bh(o,s,f,p),c=Lh(e,s,f),l={...Pe(),device:c.device,geometry:c.geometry,program:c.program,fadeDuration:250,id:ut.value++,renderOrder:0},l.name=o.meshes[n.mesh].name,l.extras=n.extras||{},Z(l,a);for(u of n.children||it)Z(Jm(e,u),a);return i.delete(t),a}function Bh(e){let t,r;for(t of e.resources)if(t.attributes)for(r of Object.values(t.attributes))r.buffer.destroy();else t.pipelineCache.clear()}function Th(e,t){let r=[],o;try{for(o of t.nodes)r.push(Jm(e,o))}catch(i){throw Bh(e),i}return r}function Ph(e){let t=De.get(e);if(e.options.rotation){let[r,o=r,i=r]=e.options.rotation;t.rotation[0]=r,t.rotation[1]=o,t.rotation[2]=i}if(e.options.scale){let[r,o=r,i=r]=e.options.scale;t.scale[0]=r,t.scale[1]=o,t.scale[2]=i}}async function Ch(e){await le.get(e).promise;let t=new URL(Oe.get(e),document.baseURI).href,r=await fetch(t);if(!r.ok)throw new Error(`Unable to load model: HTTP ${r.status}`);let o=await r.arrayBuffer(),i=ih(o),n=new URL(".",t).href,a=await mh(e,i,n),s=ch(e,i,a),m=i.scenes?.[i.scene||0];if(!m)throw new Error("Missing glTF scene");let f=Th(s,m),p={...Pe(),id:t,extras:i.extras||{}};if(!f.length)throw new Error("Expected a glTF model with a non-empty scene");let c;for(c of f)Z(c,p);De.set(e,p),Ph(e),Z(De.get(e),L.get(e)),Zo(e,ae.get(e._map))}async function Sh(e){try{return L.set(e,Pe()),ee.set(e,{origin:[0,0,0],direction:[0,0,0],inverse:new DOMMatrix,meshes:[]}),(oe.get(e)||q.get(e))&&(Oa.set(e,L.get(e)),oe.get(e)&&R.set(e,await Dr(e))),e._map&&(await Wo(e,e._map),le.get(e).resolve()),Oe.get(e)&&await Ch(e),z.get(e)&&_(e),e.fire("ready"),e}catch(t){throw e.fire("error",{error:t}),t}}b();b();function Eh(e,t,r){let o=e.closest("label");if(r.classList.contains("layer-count"))e.hasAttribute("aria-label")||e.setAttribute("aria-label",o.textContent.trim()),r.id=`leaflet-layer-count-${h.Util.stamp(t)}`,e.setAttribute("aria-describedby",r.id),o.append(r);else if(r.classList.contains("traffic-status")){let i=o.nextElementSibling;i?.classList.contains("traffic-status-group")||(i=h.DomUtil.create("div","traffic-status-group"),i.style.cssText="display:flex;flex-wrap:wrap;gap:4px 8px;max-width:200px;margin:2px 0 6px 20px;",i.setAttribute("role","group"),i.setAttribute("aria-label","Traffic counts"),o.after(i)),i.append(r)}else o.after(r)}function kh(e,t,r){let o,i;for(o of e.getContainer().querySelectorAll(".leaflet-control-layers-selector"))if(i=e._layers[o.layerId],o.layerId===h.Util.stamp(t)||i instanceof h.LayerGroup&&i.hasLayer(t))return Eh(o,t,r),!0;return!1}function Ka(e){let t=kh(e.map,e.layer,e.element),r=e.onPlace;return r?.(t),t}var Ja=[];function _h(){let e=Ja.shift();e?.map.hasLayer(e.layer)&&Ka(e)}function Qa(){Ja.push(this),queueMicrotask(_h)}function Ih(){this.map.off("layeradd layerremove",Qa,this);let e=this.element.parentElement;this.element.remove(),e?.classList.contains("traffic-status-group")&&!e.childElementCount&&e.remove()}function $o(e,t,r){let o={map:e._map,layer:e,element:t,onPlace:r};return o.map.on("layeradd layerremove",Qa,o),e.once("remove",Ih,o),Ka(o)}function zh(e,t,r,o){return o?`Unable to load: ${typeof o=="string"?o:o.message}`:`${t} loaded ${Oe.get(e)?"models":"elements"} in the current area${r?`; ${r} blocks loading`:""}`}function Ah(e,t,r,o){let i=cr.get(e),n=Oe.get(e),a=De.get(e);n&&(t=a?1:0);let s=r||(n?!a:!R.get(e)&&!q.get(e)),m=t.toLocaleString("en-US"),f=o?"Error":`${m}${s?"\u2026":""}`,p=zh(e,m,r,o);i.textContent!==f&&(i.textContent=f),i.title!==p&&(i.title=p),o&&i.getAttribute("role")!=="alert"?i.setAttribute("role","alert"):!o&&i.hasAttribute("role")&&i.removeAttribute("role")}function Qm(e){let t=e.target,r=cr.get(t);if(!t._map)return;e.type==="add"&&$o(t,r);let o=0,i=0,n=e.error,a;if(Number.isFinite(e.loaded))o=e.loaded,i=e.pending??0,n||=e.errors?.[0];else for(a of V.get(t).values())o+=a.buildings??0,!a.done&&!a.error&&i++,n||=a.error;Ah(t,o,i,n)}function Lt(e,t=xo){ur.set(e,!0),h.Util.setOptions(e,{ariaLabel:"3D scene",...t}),I.set(e,"3d");let r=!q.get(e)&&/\.(glb|gltf)(?:[?#]|$)/i.test(e.options.url);if(Oe.set(e,r?e.options.url:null),oe.set(e,e.options.url&&!r&&!q.get(e)?new URL(e.options.url,document.baseURI).href:null),lr.set(e,new Map),e.options.center&&O.set(e,new h.LatLng(e.options.center[0],e.options.center[1])),V.set(e,new Map),We.set(e,0),oe.get(e)||q.get(e)||r){let o=h.DomUtil.create("small","layer-count");o.style.cssText="float:right;margin-left:12px;color:#555;font-variant-numeric:tabular-nums",cr.set(e,o),e.on("add error",Qm),e.on("ready progress",h.Util.throttle(Qm,250,e))}le.set(e,Promise.withResolvers()),re.set(e,Promise.resolve().then(Sh.bind(null,e))),re.get(e).catch(at)}b();var Oh=new Map;var Dh=new Map;function Rh(e,t){return e.tile.coords.z-t.tile.coords.z||e.distance-t.distance}var Oi=[null];var Rt=new WeakMap;var Ze=new WeakMap;var Gt=new WeakMap;X();var es={x:0,y:0};var Ee=new WeakMap;var ue=new WeakMap;var Bt=new WeakMap;var Di={size:[null,null],format:"r32float",usage:null};var ts={texture:null};var ef={bytesPerRow:null};var rs=[null,null];function Gh(e,t,r,o){let i,n,a;for(i=0;i<256;i++)for(n=0;n<256;n++)a=t[i*256+n],!(!Number.isFinite(a)||a<=-1e3)&&(e.elevations[r+i*o*256+n]=a,e.low=Math.min(e.low,a),e.high=Math.max(e.high,a))}function Uh(e,t){let r=t.max.x-t.min.x+1,o=t.max.y-t.min.y+1,n={elevations:new Float32Array(r*o*65536).fill(-1e9),low:1/0,high:-1/0},a,s,m,f,p,c;for([a,s]of e)m=a.split("/"),f=Number(m[0]),p=Number(m[1]),c=(p-t.min.y)*256*r*256+(f-t.min.x)*256,Gh(n,s,c,r);return n}function Fh(e,t){let r=v.get(e).device;if(ue.get(e)?.device===r)return ue.get(e);let o=Rt.get(e),i=o.max.x-o.min.x+1,n=o.max.y-o.min.y+1,{elevations:a,low:s,high:m}=Uh(Ye.get(e),o);return Ee.get(e)&&F(e,Ee.get(e).texture),Ee.set(e,{texture:r.createTexture((Di.size[0]=i*256,Di.size[1]=n*256,Di.usage=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST,Di)),low:Number.isFinite(s)?s:Ze.get(e),high:Number.isFinite(m)?m:Ze.get(e)}),r.queue.writeTexture((ts.texture=Ee.get(e).texture,ts),a,(ef.bytesPerRow=i*1024,ef),(rs[0]=i*256,rs[1]=n*256,rs)),ts.texture=null,Bt.set(e,new Map),ue.set(e,Ke(e,{baseTexture:t,unlit:!0,terrain:Ee.get(e),alphaMode:"BLEND",depthWrite:!0,doubleSided:e.options.doubleSided})),ue.get(e)}var os={size:null,usage:null};function Nh(e){let t=(e+1)**2,r=new Float32Array(t*3),o=new Float32Array(t*3),i=new Float32Array(t*2),n=new Uint16Array(e*e*6),a,s,m,f,p,c,l=0,u=0;for(a=0;a<=e;a++)for(s=0;s<=e;s++)r[l*3]=s/e,r[l*3+2]=a/e,o[l*3+1]=1,i[l*2]=s/e,i[l*2+1]=a/e,l++,a<e&&s<e&&(m=a*(e+1)+s,f=m+1,p=m+e+1,c=p+1,n[u++]=m,n[u++]=p,n[u++]=f,n[u++]=f,n[u++]=p,n[u++]=c);return{position:{size:3,data:r},normal:{size:3,data:o},uv:{size:2,data:i},index:{data:n}}}function jh(e,t){let r=v.get(e).device,o=Bt.get(e).get(t);if(!o){o=Nh(t);let i,n;for([i,n]of Object.entries(o))n.size||=1,n.count=n.data.length/n.size,n.indexFormat="uint16",n.buffer=r.createBuffer((os.size=Math.max(4,n.data.byteLength),os.usage=i==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST,os)),r.queue.writeBuffer(n.buffer,0,n.data);Bt.get(e).set(t,o)}return o}function Wh(e,t,r,o){let i=Ze.get(e),n=Math.min(Ee.get(e).low,i)-i,a=Math.max(Ee.get(e).high,i)-i;return{device:v.get(e).device,attributes:t,drawRange:{start:0,count:t.index.count},bounds:{min:[0,n,0],max:[1,a,1],center:[.5,(n+a)/2,.5],radius:Math.hypot(r,a-n,o)/2/Math.max(r,1,o)}}}async function Zh(e,t,r,o){if(!await Gt.get(e)||!e._map||ae.get(e._map)!==e||me.get(t)!==e||o.request.signal.aborted||!A.get(t).has(`${r.z}/${r.x}/${r.y}`)||A.get(e).has(o))return;let n=Math.max(1,Math.min(64,256/2**(r.z-de.get(e)))),a=e._map,s=a.options.crs,m=s.project(O.get(e)),f=Math.cos(O.get(e).lat*T),p=s.scale(r.z),c=2**(de.get(e)-r.z),l=es;l.x=r.x*256,l.y=r.y*256;let u=s.transformation.untransform(l,p);l.x=(r.x+1)*256,l.y=(r.y+1)*256;let d=s.transformation.untransform(l,p),y=v.get(e).device,g=o.texture,x=Fh(e,g),w=jh(e,n),C=Ze.get(e),B=(d.x-u.x)*f,P=-(d.y-u.y)*f,D=Wh(e,w,B,P),te={position:[(u.x-m.x)*f,0,-(u.y-m.y)*f],rotation:[0,0,0],scale:[B,1,P],worldMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],children:[],visible:!0,device:y,geometry:D,program:x,texture:g,terrain:[r.x*256*c-Rt.get(e).min.x*256,r.y*256*c-Rt.get(e).min.y*256,256*c,C],tile:o,opacity:t.options.opacity??1,id:ut.value++,renderOrder:t.options.zIndex||0,fadeDuration:250,fadeStart:o.loadedAt,ground:!0,_rasterSource:t};o.mesh.visible=!1,Z(te,L.get(e)),_(e),A.get(e).set(o,te)}async function is(e,t,r){if(me.get(e)&&r.done&&!r.request.signal.aborted&&A.get(e).get(`${t.z}/${t.x}/${t.y}`)===r)try{await Zh(me.get(e),e,t,r)}catch(o){e.fire("tileerror",{tile:r,coords:t,error:o})}}var Tt=new WeakMap;X();var Ri={size:[null,null],format:"rgba8unorm",usage:null};var $h={addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",magFilter:"linear",minFilter:"linear"};var ns={size:null,usage:null};var Vh=[0,0,0,1,0,0,0,0,1,1,0,1];var qh=[0,1,0,0,1,0,0,1,0,0,1,0];var Hh=[0,0,1,0,0,1,1,1];var Yh=[0,2,1,1,2,3];function Xh(e){let t={position:{size:3,data:new Float32Array(Vh)},normal:{size:3,data:new Float32Array(qh)},uv:{size:2,data:new Float32Array(Hh)},index:{data:new Uint16Array(Yh)}},r,o;for([r,o]of Object.entries(t))o.count=o.data.length/(o.size||1),o.indexFormat="uint16",o.buffer=e.createBuffer((ns.size=o.data.byteLength,ns.usage=r==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST,ns)),e.queue.writeBuffer(o.buffer,0,o.data);return{device:e,attributes:t,drawRange:{start:0,count:t.index.count}}}function Kh(e,t){let r=v.get(e).device,o={device:r,texture:r.createTexture((Ri.size[0]=t.image.width,Ri.size[1]=t.image.height,Ri.usage=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT,Ri)),sampler:r.createSampler($h),image:t.image,format:"rgba8unorm",srgb:!1,uploaded:null},i=Pr,n=Qr,a=eo;i.source=t.image,i.flipY=!1,n.texture=o.texture,a[0]=t.image.width,a[1]=t.image.height,r.queue.copyExternalImageToTexture(i,n,a),i.source=null,n.texture=null,o.uploaded=t.image,ue.get(e)||ue.set(e,Ke(e,{baseTexture:o,unlit:!0,alphaMode:"BLEND",doubleSided:e.options.doubleSided})),Tt.get(e)||Tt.set(e,Xh(r));let{coords:s}=t,m=e._map.options.crs,f=m.project(O.get(e)),p=Math.cos(O.get(e).lat*T),c=m.scale(s.z),l=es;l.x=s.x*256,l.y=s.y*256;let u=m.transformation.untransform(l,c);l.x=(s.x+1)*256,l.y=(s.y+1)*256;let d=m.transformation.untransform(l,c),y=(d.x-u.x)*p,g=-(d.y-u.y)*p;t.texture=o,t.mesh={position:[(u.x-f.x)*p,0,-(u.y-f.y)*p],rotation:[0,0,0],scale:[y,1,g],worldMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],children:[],visible:!0,device:r,geometry:Tt.get(e),program:ue.get(e),texture:o,opacity:e.options.opacity,id:ut.value++,renderOrder:e.options.zIndex||0,tile:t,fadeDuration:250,ground:!0,_rasterSource:e},Z(t.mesh,L.get(e))}async function Jh(e,t){try{await re.get(e);let r=await Rr(e.options.archive,t.coords.z,t.coords.x,t.coords.y,t.request.signal);if(t.request.signal.aborted){r?.image?.close();return}if(!r)throw new Error(`Tile ${t.coords.z}/${t.coords.x}/${t.coords.y} is not in the offline archive`);try{if(r.image)t.image=r.image;else{Oi[0]=r.data;let o=new Blob(Oi);Oi[0]=null,t.image=await createImageBitmap(o)}}catch{throw Oi[0]=null,new Error(`Unable to decode tile ${t.coords.z}/${t.coords.x}/${t.coords.y}`)}if(t.request.signal.aborted){t.image.close(),t.image=null;return}Kh(e,t),t.loadedAt=performance.now(),t.done=!0,Te.set(e,(Te.get(e)||0)+1),is(e,t.coords,t),e.fire("tileload",{tile:t,coords:t.coords}),_(e)}catch(r){if(t.request.signal.aborted)return;t.error=r.message,Te.set(e,(Te.get(e)||0)+1),e.fire("tileerror",{tile:t,coords:t.coords,error:r}),e.fire("error",{error:r,coords:t.coords})}finally{se.set(e,se.get(e)-1),e._map&&(as(e),mo(e),se.get(e)||e.fire("load"),_(e))}}function Qh(e,t){t.started=!0;let r=se.get(e)===0;return se.set(e,se.get(e)+1),e.fire("tileloadstart",{tile:t,coords:t.coords}),r&&e.fire("loading"),Jh(e,t)}function as(e){let t=e._map;if(!t)return;let r=t.project(t.getCenter(),0).divideBy(256),o=[],i,n;for(i of A.get(e).values())i.started||i.request.signal.aborted||({coords:n}=i,o.push({tile:i,distance:Math.hypot((n.x+.5)/2**n.z-r.x,(n.y+.5)/2**n.z-r.y)}));o.sort(Rh);for({tile:i}of o){if(se.get(e)>=4)break;Qh(e,i)}}function eg(e,t){let r=A.get(e),o,i,n;for([o,i]of r)!t.has(o)&&!i.done&&so(e,i);for([o,n]of t)r.has(o)||(i={coords:n,request:new AbortController,done:!1},r.set(o,i))}var gr=[0,0];var yr=[0,0];function tg(e,t,r){let o=e.getBounds(),i=e.project(o.getNorthWest(),r).divideBy(256).floor(),n=e.project(o.getSouthEast(),r).divideBy(256).floor();gr[0]=t.maxLat,gr[1]=t.minLon,yr[0]=t.minLat,yr[1]=t.maxLon;let a=t.maxLat===void 0||t.minLon===void 0?null:e.project(gr,r).divideBy(256).floor(),s=t.minLat===void 0||t.maxLon===void 0?null:e.project(yr,r).divideBy(256).floor(),m=e.project(e.getCenter(),r).divideBy(256).floor();return{minX:Math.max(0,i.x,a?.x??0,m.x-6),maxX:Math.min(2**r-1,n.x,s?.x??2**r-1,m.x+6),minY:Math.max(0,i.y,a?.y??0,m.y-6),maxY:Math.min(2**r-1,n.y,s?.y??2**r-1,m.y+6)}}function ms(e){let t=e._map;if(!t||!z.get(e)||!R.get(e))return;let r=Math.max(R.get(e).minZoom??0,Math.min(Math.round(t.getZoom()),e.options.maxZoom,e.options.maxNativeZoom));Qt.set(e,r);let o=tg(t,R.get(e),r),i=Oh;i.clear();let n,a,s,m,f;for(n=o.minX;n<=o.maxX;n++)for(a=o.minY;a<=o.maxY;a++)i.set(`${r}/${n}/${a}`,{z:r,x:n,y:a});Ht.set(e,new Set(i.keys()));let p=Dh;p.clear();let c=Math.max(R.get(e).minZoom??0,r-2),l=2**(r-c);if(c<r)for([s,m]of i)A.get(e).get(s)?.done||(f={z:c,x:Math.floor(m.x/l),y:Math.floor(m.y/l)},p.set(`${f.z}/${f.x}/${f.y}`,f));let u=new Map(p);for([s,m]of i)u.set(s,m);i.clear(),p.clear(),eg(e,u),as(e),mo(e)}function rg(e){let t=ms.bind(null,e);return{moveend:t,zoomend:t,rotate:t,pitch:t,resize:t}}async function og(e,t){let r=await Dr(t);return e.options.archive=t,R.set(e,r),e.options.maxNativeZoom===void 0&&(e.options.maxNativeZoom=r.maxZoom),e.options.maxZoom=Math.max(e.options.minZoom||0,e.options.maxZoom),e.fire("ready"),e}function ig(e,t){throw e.fire("error",{error:t}),t}function Vo(e,t){if(!A.get(e)||me.get(e)===t)return;let r;for(r of A.get(e).values())me.get(e)&&ao(me.get(e),r),r.mesh&&(r.mesh.visible=!0,Z(r.mesh,L.get(e)));if(me.set(e,t||null),t)for(r of A.get(e).values())r.done&&is(e,r.coords,r)}async function ng(e,t,r){try{await r,le.get(e).resolve(),Vo(e,ae.get(t))}catch(o){e.fire("error",{error:o})}}async function ag(e,t,r){try{await Promise.all([r,re.get(e)]),e._map===t&&t.hasLayer(e)&&ms(e)}catch(o){e.fire("error",{error:o})}}function sg(e,t){O.get(e)||O.set(e,t.getCenter());let r=Wo(e,t);ng(e,t,r),ag(e,t,r)}function mg(e){let t,r;for(t of A.get(e).values())so(e,t);if(ue.get(e)?.pipelineCache.clear(),ue.set(e,null),Tt.get(e)){for(r of Object.values(Tt.get(e).attributes))F(e,r.buffer);Tt.set(e,null)}}var xr=new WeakMap;var Wr=new WeakMap;var Pt=new WeakMap;var Zr=new WeakMap;var vr=new WeakMap;var wr=new WeakMap;var qo=new WeakMap;var fs=new WeakMap;var Ho=new WeakMap;var Mr=new WeakMap;var br=new WeakMap;var Ut=new WeakMap;var ps=new WeakMap;var cs={_3d:ur,_added:le,_areas:V,_bridgeMesh:Wr,_bridges:rt,_cameraZIndexOffset:Cr,_countStatus:cr,_cursor:dr,_dem:Ee,_directories:lr,_etag:zo,_fadeFrame:wr,_fadeVersion:qo,_frame:et,_geojson:q,_header:Pi,_inflight:We,_layers:G,_loadingTiles:se,_nativeGPU:xe,_pointerEvents:xr,_pruneAfter:zt,_pruneVersion:li,_pruneWanted:ui,_queued:jr,_rasterGeometry:Tt,_rasterProgram:ue,_rasterTiles:A,_rasterVersion:Te,_rendererReady:st,_roofRaster:Y,_roofRasters:mi,_sceneOrigin:ne,_shadowMeshes:_t,_shared:z,_size:Yt,_terrain3D:me,_terrainArchive:fs,_terrainBaseY:wt,_terrainBounds:Rt,_terrainController:Ho,_terrainGrids:Bt,_terrainLoading:Mr,_terrainOriginElevation:Ze,_terrainPromise:Gt,_terrainReady:ve,_terrainRequest:Tn,_terrainTiles:Ye,_terrainZoom:de,_tileZoom:Qt,_tooltip:Se,_type:Ut,_visibleMeshes:Tr,_wantedRasterTiles:Ht,_zoomLevel:jo,_zoomTransitions:ce,_zoomView:Ue,camera:J,container:Ce,control:Pt,eventMap:Zr,events:vr,group:Oa,header:R,highlightedFeature:Je,hoveredFeature:be,kind:I,location:O,model:De,modelUrl:Oe,raycaster:ee,ready:re,renderer:v,root:L,scene:Q,terrainSource:br,url:oe,walker:ps};b();var fg=["_layers","_sceneOrigin","_size","_zoomLevel","_zoomTransitions","_zoomView","_cursor","_roofRaster"];function Yo(e){be.set(e,null),Mt(e,null),bt(e,null),e.fire("featurehover",{feature:null})}var cg=["_layers","_sceneOrigin","_size","_zoomLevel","_cursor"];async function lg(e,t){try{await e.device.queue.onSubmittedWorkDone(),e.depthTexture?.destroy(),e.roofFallbackTexture?.texture?.destroy(),e.uniformBuffer?.destroy(),e.sunlight?.texture?.destroy(),e.sunlight?.buffer?.destroy(),e.sunlight?.lights?.destroy()}catch(r){t.fire("error",{error:r})}e.device.destroy()}function ug(e,t){if(Y.get(e)&&F(e,Y.get(e).texture.texture),Y.set(e,null),ce.get(e)){let i;for(i of ce.get(e).keys())i.play()}ce.set(e,null),Ue.set(e,null),ke.delete(t),t.getContainer().classList.remove("leaflet-camera-zoom");let r=v.get(e);r.canvas.remove(),lg(r,e),ie.delete(t);let o;for(o of cg)cs[o].delete(e)}function Xo(e,t){le.set(e,Promise.withResolvers()),Ce.get(e)&&(Yo(e),h.DomEvent.off(Ce.get(e),xr.get(e),e),Ce.set(e,null));let r,o,i,n;for(r of V.get(e).values())Fr(e,r);V.get(e).clear(),Se.get(e)?.remove(),Se.set(e,null),(oe.get(e)||q.get(e))&&Ra(e,!1);let a=z.get(e);if(a){if(Z(L.get(e),null),G.get(a).delete(e),a===e)if(t.off("move zoom rotate pitch resize viewreset layeradd layerremove",ki,e),t.off("zoomstart",_i,e),t.off("zoomanim",Ii,e),t.off("zoomend",zi,e),Bn(e),G.get(e).size){let s=G.get(e).values().next().value;for(o of fg)n=cs[o],n.set(s,n.get(e)),n.delete(e);for(i of G.get(s))z.set(i,s);ie.set(t,s),t.on("move zoom rotate pitch resize viewreset layeradd layerremove",ki,s),t.on("zoomstart",_i,s),t.on("zoomanim",Ii,s),t.on("zoomend",zi,s),_(s)}else ug(e,t);else _(a);z.set(e,null),v.set(e,null),Q.set(e,null),J.set(e,null)}}function dg(e,t){mg(e),me.set(e,null),Xo(e,t)}b();function ls(e,t){I.set(e,"raster"),t={ariaLabel:"PMTiles raster",maxZoom:18,opacity:1,zIndex:0,...t},h.Util.setOptions(e,t),L.set(e,Pe()),V.set(e,new Map),A.set(e,new Map),se.set(e,0),le.set(e,Promise.withResolvers()),oe.set(e,new URL(t.url,document.baseURI).href),lr.set(e,new Map),re.set(e,Promise.resolve(e.options.archive||e).then(og.bind(null,e)).catch(ig.bind(null,e)))}var hg=Object.freeze([]);function gg(e){I.get(e)==="raster"&&Vo(e,null)}function yg(e,t){Ho.get(e)?.abort(),Mr.set(e,!1),ve.set(e,!1),t.eachLayer(gg);let r,o,i,n;for(r of A.get(e).keys())ao(e,r);ae.get(t)===e&&ae.delete(t);for(o of Object.values(t._layers))Zo(o,null),Uo(o);t.fire("terrainchange"),Ye.get(e).clear(),Ze.set(e,0),Gt.set(e,null),ue.get(e)&&ue.get(e).pipelineCache.clear(),ue.set(e,null),Ee.get(e)&&F(e,Ee.get(e).texture),Ee.set(e,null);for(i of Bt.get(e)?.values()||hg)for(n of Object.values(i))F(e,n.buffer);Bt.set(e,null),rt.set(e,null),_e(e,Wr.get(e)),Wr.set(e,null),Xo(e,t)}async function xg(e){let{backend:t,archive:r,controller:o,tiles:i}=e,n,a;for(;e.next<i.length;){if(o.signal.throwIfAborted(),n=i[e.next++],a=await Rr(r,n.z,n.x,n.y,o.signal),!a||a.data.byteLength!==256*256*4)throw new Error(`Missing or invalid Float32 terrain tile ${n.z}/${n.x}/${n.y}`);Ye.get(t).set(`${n.x}/${n.y}`,new Float32Array(a.data))}}function vg(e){if(!e.ok)throw new Error(`Bridges: HTTP ${e.status}`);return e.json()}b();function wg(e,t){let r=e._map;de.set(e,t.maxZoom),gr[0]=t.maxLat,gr[1]=t.minLon;let o=r.project(gr,de.get(e)).divideBy(256).floor();yr[0]=t.minLat,yr[1]=t.maxLon;let i=r.project(yr,de.get(e)).divideBy(256).floor();Rt.set(e,new h.Bounds(o,i));let n=[],a=r.project(r.getCenter(),de.get(e)).divideBy(256),s,m;for(s=o.x;s<=i.x;s++)for(m=o.y;m<=i.y;m++)n.push({z:de.get(e),x:s,y:m,distance:Math.hypot(s+.5-a.x,m+.5-a.y)});return n.sort(Za),n}X();b();function Mg([e,t,r],o,i,n,a){let s=o.project(new h.LatLng(t,e));return[(s.x-i.x)*n,r-a,-(s.y-i.y)*n]}function bg(e,t){let r=[],o=0,i,n,a;for(i of e){for(n=[],a=0;a<i.length;a++)n.push({x:t[o+a][0],y:t[o+a][1]});r.push(n),o+=i.length}return r}function Lg(e,t,r){let o=[],i=1/0,n=1/0,a=-1/0,s=-1/0,m,f,p,c,l,u,d,y;for(m of r){f=[];for(p of m)f.push(t[p]);o.push(f)}for(c of t)i=Math.min(i,c[0]),n=Math.min(n,c[1]),a=Math.max(a,c[0]),s=Math.max(s,c[1]);let g={triangles:o,min:[i,n],max:[a,s]};for(l=Math.floor(g.min[0]/64);l<=Math.floor(g.max[0]/64);l++)for(u=Math.floor(g.min[1]/64);u<=Math.floor(g.max[1]/64);u++)d=`${l}/${u}`,y=rt.get(e).get(d),y||rt.get(e).set(d,y=[]),y.push(g)}function Bg(e,t,r){let{position:o,normal:i,color:n}=e,a,s,m,f,p,c,l,u,d;for([a,s,m]of r)for(f=t[a],p=t[s],c=t[m],(p[2]-f[2])*(c[0]-f[0])-(p[0]-f[0])*(c[2]-f[2])<0&&(l=s,s=m,m=l),u=0;u<6;u++)l=u===0||u===3?a:u===1||u===5?s:m,d=t[l],o.push(d[0],d[1]-(u>=3?1.2:0),d[2]),i.push(0,u>=3?-1:1,0),n.push(.6,.58,.54)}function Tg(e,t,r){let{position:o,normal:i,color:n}=e,a=Math.hypot(r[0]-t[0],r[2]-t[2])||1,s=(r[2]-t[2])/a,m=-(r[0]-t[0])/a,f,p;for(f=0;f<6;f++)p=f===0||f===3||f===5?t:r,o.push(p[0],p[1]-(f===2||f>=4?1.2:0),p[2]),i.push(s,0,m),n.push(.6,.58,.54)}function Pg(e,t,r){let o=0,i,n;for(i of r){for(n=0;n<i.length;n++)Tg(e,t[o+n],t[o+(n+1)%i.length]);o+=i.length}}function Cg(e,t){let{backend:r,map:o,zoom:i,crs:n,origin:a,metres:s,base:m}=e,f=[],p,c,l,u,d,y,g,x,w,C,B;for(p of t)c=p.slice(0,-1),c.length>=3&&f.push(c);if(!f.length)return;let P=[],D=[];for(p of f)for([l,u,d]of p)y=o.project([u,l],i),P.push([y.x,y.y,d]);for(p of f)for(g of p)D.push(Mg(g,n,a,s,m));try{x=bg(f,P),[w,...C]=x,B=yo(w,C)}catch{return}Lg(r,P,B),Bg(e,D,B),Pg(e,D,f)}function Sg(e,t){let r=e._map,o=r.options.crs,i=de.get(e),n=o.project(O.get(e)),a=Math.cos(O.get(e).lat*T),s=L.get(e).position[1],m=[],f=[],p=[];rt.set(e,new Map);let c={backend:e,map:r,crs:o,zoom:i,origin:n,metres:a,base:s,position:m,normal:f,color:p},l,u,d;for({geometry:l}of t.features)if(!(l.type!=="Polygon"&&l.type!=="MultiPolygon"))for(u=l.coordinates,d=0;d<(l.type==="Polygon"?1:u.length);d++)Cg(c,l.type==="Polygon"?u:u[d]);m.length&&Wr.set(e,er(e,{position:m,normal:f,color:p}))}function Eg(e,t,r){ve.set(e,!0),Ze.set(e,Kt(e,O.get(e))??0);let o;for(o of Object.values(t._layers))Uo(o),Zo(o,e);r&&Sg(e,r),t.fire("terrainchange"),_(e),e.fire("terrainready")}async function us(e){if(Mr.get(e)||!e._map)return;Mr.set(e,!0),ve.set(e,!1);let t=new AbortController;Ho.set(e,t);let r;try{if(!br.get(e))throw new Error("Terrain layer requires a PMTiles or COG elevation archive");let o=Wn({source:{type:e.options.asset!==void 0||/\.tiff?(?:[?#]|$)/i.test(br.get(e))?"cog":"pmtiles",url:br.get(e),archive:e.options.archive,asset:e.options.asset}});fs.set(e,o),await re.get(o);let i=R.get(o);if(i.tileType!==0||i.minZoom!==i.maxZoom)throw new Error("Expected a single-zoom Float32 terrain archive");let n=e._map,a=wg(e,i),s={backend:e,archive:o,controller:t,tiles:a,next:0},m=[];for(r=0;r<Math.min(4,a.length);r++)m.push(xg(s));await Promise.all(m);let f=e.options.bridges&&await fetch(e.options.bridges,{signal:t.signal}).then(vg);return t.signal.aborted||e._map!==n?void 0:(Eg(e,n,f),!0)}catch(o){return t.signal.aborted||e.fire("error",{error:o}),!1}finally{Mr.set(e,!1)}}b();function ds(e,t){let r=De.get(e);if(!L.get(e)||!J.get(e))return null;let o,i,n,a,s,m,f;for(o of Hn(e,t,L.get(e).children,!!r)){if(r){for(i=o.object;i&&i!==r;)i=i.parent;if(i===r)return{id:r.id,properties:r.extras,model:r,mesh:o.object,point:o.point}}if(n=o.object.extras?.featureFaces,!!n)for(a=0,s=n.length-1;a<=s;)if(m=a+s>>1,f=n[m],o.faceIndex<f.faceStart)s=m-1;else if(o.faceIndex>=f.faceEnd)a=m+1;else return{...f,mesh:o.object,point:o.point}}return null}function kg(e,t){if(t.buttons||e._map.dragging?.moving()||e._map._animatingZoom){be.get(e)&&Yo(e);return}be.set(e,ds(e,t)),Mt(e,be.get(e)),bt(e,be.get(e),t),e.fire("featurehover",{feature:be.get(e),originalEvent:t})}function _g(e){kg(this,e)}function Ig(e,t){let r=ds(e,t);be.set(e,r),Mt(e,r),bt(e,r,t),e.fire("featureclick",{feature:r,originalEvent:t})}function zg(e){Ig(this,e)}function Ag(){Yo(this)}async function Og(e,t){try{await Wo(e,t),le.get(e).resolve()}catch(r){e.fire("error",{error:r})}}function hs(e,t){if(!O.get(e)){let r=t.getCenter();O.set(e,new h.LatLng(r.lat,r.lng))}(oe.get(e)||q.get(e)||e.options.tooltip||Oe.get(e))&&(Ce.set(e,t.getContainer()),xr.get(e)||xr.set(e,{mousemove:_g,click:zg,mouseleave:Ag}),e.options.tooltip&&(Se.set(e,h.DomUtil.create("div","leaflet-3d-tooltip",Ce.get(e))),Se.get(e).hidden=!0,Se.get(e).setAttribute("role","tooltip"),Se.get(e).setAttribute("aria-live","polite"),Se.get(e).style.cssText="position:absolute;z-index:600;max-width:220px;padding:10px 12px;border:1px solid #6b5140;border-radius:6px;background:#fffaf0;box-shadow:0 3px 12px #0005;color:#30251d;font:13px/1.45 sans-serif;pointer-events:none"),h.DomEvent.on(Ce.get(e),xr.get(e),e)),L.get(e)&&Og(e,t)}function Dg(){us(this.backend).then(this.resolve,this.reject)}function Rg(e){I.get(e)==="raster"&&Vo(e,this)}function Gg(e,t){if(ae.get(t)&&ae.get(t)!==e)throw new Error("Only one terrain layer can be active per map");if(ae.set(t,e),hs(e,t),L.get(e))Gt.set(e,us(e));else{let r=Promise.withResolvers();Gt.set(e,r.promise),e.once("ready",Dg,{backend:e,...r})}t.eachLayer(Rg,e),t.fire("terrainchange")}function Ug(e,t){let r=t.url,o={...t};delete o.url,Lt(e,o),br.set(e,r),Ye.set(e,new Map),A.set(e,new Map),ve.set(e,!1),I.set(e,"terrain")}b();var Ko=new WeakMap;var Gi=new WeakMap;var Ui=new WeakMap;b();oa();X();H();W();function Fg(e,t,r,o,i){let[n,a,s]=e,m=-n*Math.sin(o)*Math.sin(r)-a*Math.cos(r)-s*Math.cos(o)*Math.sin(r);return m>0?(i||={},i.left=t.x/2+t.y*1.5*(n*Math.cos(o)-s*Math.sin(o))/m,i.top=t.y/2-t.y*1.5*(-n*Math.sin(o)*Math.cos(r)+a*Math.sin(r)-s*Math.cos(o)*Math.cos(r))/m,i):null}function tf(e,t,r,o,i,n,a){if(e.hidden=!0,!r||!t||t.altitude<=0)return;e.parentNode!==r&&r.append(e);let s=Fg(t.direction,o,i,n,a);if(!s)return;let{left:m,top:f}=s;e.hidden=m<0||m>o.x||f<0||f>r.clientHeight||r.style.display==="none",e.style.left=`${m}px`,e.style.top=`${f}px`}function Ft({map:e,originalSky:t,sunDisc:r,moonDisc:o,projection:i}){let n=tt.get(e),a=je.get(e);n?e.getContainer().style.setProperty("--leaflet-sky-background",n.background):t?e.getContainer().style.setProperty("--leaflet-sky-background",t):e.getContainer().style.removeProperty("--leaflet-sky-background");let s=e.getSize(),m=k(e)*T,f=S(e)*T;tf(r,n,a,s,m,f,i),tf(o,n?.moon,a,s,m,f,i)}var Ng=[[-18,[3,7,20],[17,28,54],[.025,.04,.09]],[-6,[37,53,84],[182,106,86],[.12,.1,.14]],[0,[101,131,171],[246,170,115],[.38,.24,.18]],[10,[74,147,208],[197,221,237],[.8,.75,.68]],[25,[53,144,213],[223,238,250],[1,1,1]]];var rf=[0,0,0];function gs(e,t,r,o){o||=[],o.length=e.length;let i;for(i=0;i<e.length;i++)o[i]=e[i]+(t[i]-e[i])*r;return o}function of(e){let t="",r;for(r=0;r<e.length;r++)r&&(t+=", "),t+=Math.round(e[r]);return`rgb(${t})`}function jg(e){if(!Number.isFinite(e))throw new Error("Invalid solar altitude");let t=Ng,r=-1,o;for(o=0;o<t.length;o++)if(t[o][0]>=e){r=o;break}let i=t[r<0?t.length-1:r],n=t[Math.max(0,r-1)],a=n===i||r<0?1:(e-n[0])/(i[0]-n[0]);return{background:`linear-gradient(${of(gs(n[1],i[1],a,rf))}, ${of(gs(n[2],i[2],a,rf))})`,tint:gs(n[3],i[3],a)}}function ys(e,t,r){let o=e instanceof Date?Date.prototype.getTime.call(e):typeof e=="string"?Date.parse(e):new Date(e).getTime();if(!Number.isFinite(o)||!Number.isFinite(t)||Math.abs(t)>90||!Number.isFinite(r)||Math.abs(r)>180)throw new Error("Invalid solar date or location");return o}X();function xs(e,t,r,o,i){let n=(280.16+360.9856235*e+r)*T-o,a=t*T,s=Math.asin(Math.sin(a)*Math.sin(i)+Math.cos(a)*Math.cos(i)*Math.cos(n)),f=(Math.atan2(Math.sin(n),Math.cos(n)*Math.sin(a)-Math.tan(i)*Math.cos(a))/T+180+360)%360;return{altitude:s/T,azimuth:f,direction:[Math.sin(f*T)*Math.cos(s),Math.sin(s),-Math.cos(f*T)*Math.cos(s)]}}X();X();var Fi=Math.sin(23.4397*T);X();var Ni=Math.cos(23.4397*T);function Wg(e,t,r){let o=ys(e,t,r)/864e5-10957.5,i=(134.963+13.064993*o)*T,n=(218.316+13.176396*o+6.289*Math.sin(i))*T,a=5.128*Math.sin((93.272+13.22935*o)*T)*T,s=Math.cos(a)*Math.cos(n),m=Math.cos(a)*Math.sin(n)*Ni-Math.sin(a)*Fi,f=Math.cos(a)*Math.sin(n)*Fi+Math.sin(a)*Ni;return xs(o,t,r,Math.atan2(m,s),Math.asin(f))}X();function Zg(e,t,r){let i=ys(e,t,r)/864e5-10957.5,n=(357.5291+.98560028*i)*T,a=n+(1.9148*Math.sin(n)+.02*Math.sin(2*n)+3e-4*Math.sin(3*n)+102.9372+180)*T,s=Math.asin(Math.sin(a)*Fi),m=Math.atan2(Math.sin(a)*Ni,Math.cos(a));return xs(i,t,r,m,s)}function $r(e){let t=ie.get(e);t&&_(t)}function Lr(e){let{control:t,map:r,date:o,slider:i,output:n,status:a}=e;try{t.live&&(t.time=new Date);let s=t.time.toISOString();o.value=s.slice(0,10),i.value=String(t.time.getUTCHours()*60+t.time.getUTCMinutes()),n.textContent=`${s.slice(11,16)} UTC${t.live?" \xB7 now":""}`;let m=r.getCenter(),f=Zg(t.time,m.lat,m.lng);tt.set(r,f),Object.assign(f,jg(f.altitude)),f.moon=Wg(t.time,m.lat,m.lng),a.textContent=f.altitude<=0?"Night \xB7 no direct sunlight":f.altitude<3?"Low sun \xB7 shadows paused":`Sun altitude ${f.altitude.toFixed(1)}\xB0`,r.fire("simulationtimechange",{time:new Date(t.time),live:t.live}),Ft(e),$r(r)}catch(s){tt.delete(r),Ft(e),$r(r),a.textContent=`Error: ${s.message}`,console.error("Solar simulation",s)}}function $g(e){e.control.live=!0,Lr(e)}function Vg(e){let{control:t,map:r,date:o,slider:i,status:n}=e;if(t.live=!1,!o.value||!o.validity.valid){t.time=new Date(NaN),r.fire("simulationtimechange",{time:null,live:!1}),tt.delete(r),Ft(e),$r(r),n.textContent="Error: choose a valid solar date";return}t.time=new Date(`${o.value}T00:00:00Z`),t.time.setUTCMinutes(Number(i.value)),Lr(e)}function qg(e){let t="position:absolute;width:18px;height:18px;border-radius:50%;transform:translate(-50%,-50%);pointer-events:none;",r=h.DomUtil.create("div","sunlight-sun"),o=h.DomUtil.create("div","sunlight-moon");r.style.cssText=t+"background:#fff3bd;box-shadow:0 0 18px 7px #ffd27699;",o.style.cssText=t+"background:#dce5f2;box-shadow:0 0 10px 2px #cbdcff55;",r.setAttribute("role","img"),r.setAttribute("aria-label","Sun"),o.setAttribute("role","img"),o.setAttribute("aria-label","Moon");let i=h.DomUtil.create("div","sunlight-control");i.style.cssText="color:#222;width:min(200px,calc(100vw - 60px));font:12px/1.4 sans-serif;";let n=document.createElement("input");n.type="date",n.style.cssText="width:100%;box-sizing:border-box;",n.setAttribute("aria-label","Solar date (UTC)");let a=document.createElement("input");a.type="range",a.style.cssText="width:100%;box-sizing:border-box;margin:10px 0 4px;cursor:pointer;",a.min="0",a.max="1439",a.step="1",a.setAttribute("aria-label","Time of day (UTC)");let s=document.createElement("output");s.style.cssText="font-weight:bold;font-variant-numeric:tabular-nums;",s.setAttribute("aria-live","off");let m=document.createElement("button");m.type="button",m.textContent="Now";let f=document.createElement("div");f.className="sunlight-time",f.style.cssText="display:flex;justify-content:space-between;align-items:center;",f.append(s,m);let p=document.createElement("div");p.className="sunlight-status",p.style.marginTop="5px",p.setAttribute("role","status");let c=document.createElement("small");c.style.color="#555",c.textContent="Indicative \xB7 loaded geometry only. Streetlight illumination is estimated, not measured lux.",i.append(n,a,f,p,c);let l={control:null,map:e,originalSky:"",container:i,sunDisc:r,moonDisc:o,date:n,slider:a,output:s,status:p,projection:{left:0,top:0}};return l.update=Lr.bind(null,l),l.updateSky=Ft.bind(null,l),m.onclick=$g.bind(null,l),n.onchange=a.oninput=Vg.bind(null,l),h.DomEvent.disableClickPropagation(i),h.DomEvent.disableScrollPropagation(i),l}function Hg(e){e.control.live&&Lr(e)}function Yg(e,t){let r=Ui.get(t);if(r?.control&&r.control!==e)throw e._map=null,e.layer._map===t&&t.removeLayer(e.layer),new Error("Only one Time control can be active per map");return r||(r=qg(t),Ui.set(t,r)),r.control=e,r.originalSky=t.getContainer().style.getPropertyValue("--leaflet-sky-background"),Ko.set(t,e),Gi.set(e,r),r.update(),r.timer=setInterval(Hg,6e4,r),t.on("moveend",r.update),t.on("move rotate pitch resize",r.updateSky),r.container}b();function Xg(e){return Pt.get(this).addTo(e)}b();function Kg(){return h.Control.prototype.remove.call(Pt.get(this))}function Jg(e){h.Util.setOptions(this,e),this.live=!0,this.layer=new h.Layer,Pt.set(this.layer,this),I.set(this.layer,"time")}function Qg(e){return Yg(this,e)}b();function nf(e,t){e.classList.toggle("leaflet-control",!t),e.classList.toggle("leaflet-bar",!t),e.style.background=t?"":"#fff",e.style.padding=t?"2px 0 6px 20px":"8px",e.style.margin=t?"0":""}function ey(e){h.Control.prototype.addTo.call(this,e);let t=this.getContainer();return this.layer._map===e?$o(this.layer,t,nf.bind(null,t)):nf(t,!1),this}b();function ty(){return this._map?.hasLayer(this.layer)?(this._map.removeLayer(this.layer),this):h.Control.prototype.remove.call(this)}function ry(e){let{map:t,timer:r,sunDisc:o,moonDisc:i}=e,n=Ui.get(t);clearInterval(r),Ko.delete(t),t.fire("simulationtimechange",{time:null,live:!1}),t.off("moveend",e.update),t.off("move rotate pitch resize",e.updateSky),tt.delete(t),Ft(e),o.remove(),i.remove(),$r(t),n===e&&(n.control=null)}function oy(){let e=Gi.get(this);e&&(ry(e),Gi.delete(this))}h.Control.Time=h.Control.extend({options:{position:"bottomright"},initialize:Jg,onAdd:Qg,onRemove:oy,addTo:ey,remove:ty});b();var vs=Object.freeze({});var Nt=[[.86,.86,.88],[.1,.1,.12],[.5,.53,.57],[.65,.1,.08],[.12,.25,.55],[.85,.7,.15]];var jt=[.08,.07,.06];var mt=[.85,.64,.5];var Wt=[.16,.2,.32];function E(e,t,r,o){return[[e,r],[t,r],[t,o],[e,o]]}function iy(e){let t=Nt[e%Nt.length];return[[E(-.045,.045,-.85,-.25),.02,.62,jt],[E(-.045,.045,.25,.85),.02,.62,jt],[E(-.06,.06,-.5,.5),.4,.65,t],[E(-.32,.32,-.58,-.5),.95,1.02,jt],[E(-.1,.1,.15,.4),.85,.92,jt],[E(-.18,.18,-.12,.28),1,1.5,t],[E(-.11,.11,-.22,0),1.5,1.72,mt],[E(-.13,.13,-.23,.01),1.72,1.8,t],[E(-.25,-.15,-.5,-.05),1,1.25,mt],[E(.15,.25,-.5,-.05),1,1.25,mt],[E(-.2,-.08,0,.32),.3,1,Wt],[E(.08,.2,-.25,.07),.3,1,Wt]]}var af=[.75,.2,.15];var ws={body:[[E(-.17,.17,-.1,.1),.82,.95,Wt],[E(-.19,.19,-.11,.11),.95,1.44,af],[E(-.05,.05,-.05,.05),1.44,1.5,mt],[E(-.1,.1,-.11,.1),1.5,1.72,mt],[E(-.105,.105,-.06,.115),1.58,1.77,jt],[E(-.105,.105,-.115,-.06),1.7,1.77,jt]],leg:[[E(-.07,.07,-.07,.07),-.82,0,Wt],[E(-.07,.07,-.17,.07),-.9,-.82,jt]],arm:[[E(-.05,.05,-.05,.05),-.55,0,af],[E(-.045,.045,-.045,.045),-.66,-.55,mt]]};function ny(e){let t=ws.body.slice();return t[1]=[t[1][0],t[1][1],t[1][2],Nt[e%Nt.length]],t.push([E(-.16,-.02,-.07,.07),.08,.9,Wt],[E(.02,.16,-.07,.07),.08,.9,Wt],[E(-.3,-.2,-.05,.05),.76,1.42,mt],[E(.2,.3,-.05,.05),.76,1.42,mt]),t}function Jo(e){let t=e?.route_color;if(!/^[\da-f]{6}$/i.test(t))return[.1,.55,.65];let r=Number.parseInt(t,16);return[(r>>16&255)/255,(r>>8&255)/255,(r&255)/255]}var Vr=[.12,.15,.18];var Ct=[.92,.93,.92];var Qo=[.05,.05,.05];var Ms=[1.9,1.85,1.7];var bs=[1.7,.06,.05];function ei(e,t,r){let o=e-t/2,i=e+t/2;return[[E(-1.25,1.25,o,i),.45,1.25,r],[E(-1.2,1.2,o+.15,i-.15),1.25,2.65,Vr],[E(-1.25,1.25,o,i),2.65,3.1,Ct],[E(-1.15,-.85,o+1,o+2),0,.7,Qo],[E(.85,1.15,i-2,i-1),0,.7,Qo],[E(-.9,.9,o-.03,o),.8,1.05,Ms],[E(-.9,.9,i,i+.03),.8,1.05,bs]]}function ay(e,t){return ei(0,12,Jo(t))}function sy(e,t){let r=Jo(t),o=[],i;for(i=0;i<5;i++)o.push(...ei((i-2)*6.5,6,r));return o}function my(e,t){let r=Jo(t),o=[],i;for(i=0;i<5;i++)o.push(...ei((i-2)*15,14,r));return o}function Zt(e,t,r,o,...i){return[[E(e,t,r,o),...i],[E(-t,-e,r,o),...i]]}function fy(e){let t=Nt[e%Nt.length];return[...Zt(.7,.92,-1.68,-1.02,0,.64,Qo),...Zt(.7,.92,1.02,1.68,0,.64,Qo),[[[-.9,-1.95],[-.72,-2.25],[.72,-2.25],[.9,-1.95],[.9,2.05],[.76,2.25],[-.76,2.25],[-.9,2.05]],.28,.82,t],[E(-.84,.84,-.75,1.6),.82,1.38,Vr,E(-.7,.7,-.05,1.3)],[E(-.71,.71,-.06,1.31),1.38,1.46,t],...Zt(.38,.8,-2.3,-2.16,.56,.76,Ms),[E(-.78,.78,2.16,2.3),.6,.76,bs]]}var sf=[[-5.5,30],[5.5,30],[5.5,-20],[4,-26],[1.5,-30],[-1.5,-30],[-4,-26],[-5.5,-20]];function py(){let e=[],t;for(t=0;t<12;t++)e.push(...Zt(.5,3.8,-12+t*3,-11.3+t*3,3.9,4.4,[.62,.1,.1]));return e}function cy(){return[[sf,0,.8,[.1,.16,.26]],[sf,.8,1.4,Ct],[E(-5,5,-18,26),1.4,3.7,Vr,E(-4.6,4.6,-17.4,25.6)],...Zt(4.64,4.74,-17,25,3.25,3.45,[1.6,1.25,.8]),[E(-4.8,4.8,-17.8,25.8),3.7,3.9,Ct],...py(),...Zt(4.65,4.8,-13.6,25.8,3.9,4.8,Ct),[E(-4.8,4.8,25.65,25.8),3.9,4.8,Ct],[E(-2.2,2.2,-17.6,-14),3.9,4.7,Ct],[E(-2.2,2.2,-17.6,-14),4.7,5.5,Vr],[E(-2.5,2.5,-18,-13.6),5.5,5.7,Ct],[E(-2.45,-2.2,-16.2,-15.8),5,5.3,[2,.15,.1]],[E(2.2,2.45,-16.2,-15.8),5,5.3,[.1,2,.4]],[E(-.1,.1,-15.9,-15.7),5.7,6.6,Ct],[E(-.15,.15,-15.95,-15.65),6.6,6.8,[2,2,1.9]]]}var ly={bicycle:{side:.4,model:iy},pedestrian:{side:.3,model:ny},bus:{side:1.5,model:ay},tram:{side:0,model:sy},metro:{side:0,model:my},car:{side:1.8,model:fy,lights:[{position:[0,1.2,-6],radius:10,color:[1,.94,.82],flux:800}]},boat:{side:0,model:cy,lights:[{position:[0,8,4],radius:30,color:[1,.8,.55],flux:2e4}]}};var uy=" struct Params{seconds:f32,side:f32,vertices:u32,total:u32}struct Vehicle{start:u32,count:u32,base:f32,speed:f32}@group(0)@binding(0)var<uniform> params:Params;@group(0)@binding(1)var<storage,read> model:array<f32>;@group(0)@binding(2)var<storage,read> points:array<vec4f>;@group(0)@binding(3)var<storage,read> vehicles:array<Vehicle>;@group(0)@binding(4)var<storage,read_write> position:array<f32>;@group(0)@binding(5)var<storage,read_write> normal:array<f32>;var<workgroup> center:vec3f;var<workgroup> heading:vec2f;@compute@workgroup_size(64)fn main(@builtin(workgroup_id)group:vec3u,@builtin(local_invocation_index)thread:u32){let vehicleIndex = group.x;if(thread == 0u){let vehicle = vehicles[vehicleIndex];let last = vehicle.start + vehicle.count - 1u;let length = points[last].w;var s = vehicle.base + params.seconds * vehicle.speed;s -= length * floor(s / length);var i = vehicle.start + 1u;var end = last;while(i < end){let middle = i +(end - i)/ 2u;if(points[middle].w < s){i = middle + 1u;}else{end = middle;}}let a = points[i - 1u];let b = points[i];let d = select(b.w - a.w,1.0,b.w == a.w);let t =(s - a.w)/ d;heading =(b.xy - a.xy)/ d;center = vec3f(a.x +(b.x - a.x)* t - heading.y * params.side,a.z +(b.z - a.z)* t,a.y +(b.y - a.y)* t + heading.x * params.side);}workgroupBarrier();for(var vertex = thread;vertex < params.vertices;vertex += 64u){let k = vertex * 3u;let n = params.vertices * 3u + k;let o =(vehicleIndex * params.vertices + vertex)* 3u;position[o]= center.x - model[k]* heading.y - model[k + 2u]* heading.x;position[o + 1u]= center.y + model[k + 1u];position[o + 2u]= center.z + model[k]* heading.x - model[k + 2u]* heading.y;normal[o]= -model[n]* heading.y - model[n + 2u]* heading.x;normal[o + 1u]= model[n + 1u];normal[o + 2u]= model[n]* heading.x - model[n + 2u]* heading.y;}}";function ji(e,t,r,o,i,n,a){let s=i[0]-o[0],m=i[1]-o[1],f=i[2]-o[2],p=n[0]-o[0],c=n[1]-o[1],l=n[2]-o[2],u=m*l-f*c,d=f*p-s*l,y=s*c-m*p,g=Math.hypot(u,d,y),x,w;for(x=0;x<3;x++)w=x===0?o:x===1?i:n,e.push(...w),t.push(u/g,d/g,y/g),r.push(...a)}function ti(e){let t=[],r=[],o=[],i=[],n=[],a,s,m,f,p,c,l,u,d;for([a,s,m,f,p=a]of e){i.length=n.length=0;for([c,l]of a)i.push([c,s,l]);for([c,l]of p)n.push([c,m,l]);for(u=0;u<a.length;u++)d=(u+1)%a.length,ji(t,r,o,i[u],i[d],n[d],f),ji(t,r,o,i[u],n[d],n[u],f);for(u=1;u<a.length-1;u++)ji(t,r,o,n[0],n[u],n[u+1],f),ji(t,r,o,i[0],i[u+1],i[u],f)}return{position:t,normal:r,color:o}}function dy({properties:e}){let t=document.createElement("div");t.style.whiteSpace="pre-line";let r=e.name?String(e.name):"";return e.departure&&(r+=`${r?`
|
|
1
|
+
(()=>{var Pv=Object.defineProperty;var b=(e,t,r)=>()=>{if(r)throw r[0];try{return e&&(t=e(e=0)),t}catch(o){throw r=[o],o}};var Sv=(e,t)=>{for(var r in t)Pv(e,r,{get:t[r],enumerable:!0})};var d,L=b(()=>{d=globalThis.L});var B,$=b(()=>{B=Math.PI/180});var tt,yo=b(()=>{tt=180/Math.PI});var Tn,gm=b(()=>{Tn=new WeakMap});function _(e){return Tn.get(e)??0}var J=b(()=>{gm()});var Pn,ym=b(()=>{Pn=new WeakMap});function k(e){return Pn.get(e)??0}var Z=b(()=>{ym()});var No,va=b(()=>{No=Object.freeze({})});var Ye,La=b(()=>{Ye=new WeakMap});function ba(){let e=this.getSize().y,t=_(this)*B,r=e*this.options.pitchMaxDistance,o=e*1.5,i=e/2-r*Math.abs(Math.cos(t))*o/(o+Math.sin(t)*r);i>0&&!Ye.get(this)&&(Ye.set(this,d.DomUtil.create("div","leaflet-pitch-sky",this.getContainer())),Ye.get(this).setAttribute("aria-hidden","true"),Ye.get(this).style.cssText="position:absolute;inset:0 0 auto;height:0;z-index:0;pointer-events:none;background:var(--leaflet-sky-background,linear-gradient(#9ec5e8,#dfe9f0))"),Ye.get(this)&&(Ye.get(this).style.inset=t>Math.PI/2?"auto 0 0":"0 0 auto",Ye.get(this).style.height=`${Math.max(0,Math.ceil(i))}px`,Ye.get(this).style.display=i>0?"":"none")}var $m=b(()=>{La();L();$();J()});function Fe(e,t,r){if(!Number.isFinite(t)||!Number.isFinite(r))throw new TypeError("Camera angles must be finite numbers");if(!Number.isFinite(e.options.maxPitch)||e.options.maxPitch<0||e.options.maxPitch>180)throw new TypeError("maxPitch must be between 0 and 180 degrees");let o=_(e),i=k(e);return Tn.set(e,Math.max(0,Math.min(e.options.maxPitch,t))),Pn.set(e,(r%360+360)%360),e._loaded&&(ba.call(e),i!==k(e)&&e.fire("rotate",{bearing:k(e)}),o!==_(e)&&e.fire("pitch",{pitch:_(e)})),e}var vr=b(()=>{ym();gm();J();Z();$m()});var qt,Ma=b(()=>{qt=new WeakMap});var Fo,Ba=b(()=>{Fo=new WeakMap});var Lr,Ta=b(()=>{Lr=new Map});var St,Pa=b(()=>{St={value:null}});function jo(e){Lr.delete(e),qt.set(e,null),Fo.set(e,null),!Lr.size&&St.value!==null&&(cancelAnimationFrame(St.value),St.value=null)}var Sa=b(()=>{Ma();Ba();Ta();Pa()});var qr,Ca=b(()=>{qr=new WeakMap});var Wo,Vm=b(()=>{Wo=new WeakMap});var Gi,Zm=b(()=>{Gi=new WeakMap});var br,Ui=b(()=>{br=new WeakMap});var Mr,Ni=b(()=>{Mr=new WeakMap});var qm,Pu=b(()=>{qm={value:void 0}});var Hm,Su=b(()=>{Hm={value:void 0}});var Ym,ku=b(()=>{Ym={value:void 0}});var Xm,Cu=b(()=>{Xm={value:void 0}});var _a,_u=b(()=>{_a={value:void 0}});var kt,$o=b(()=>{kt=new WeakMap});var Hr,Ea=b(()=>{Hr=new Set});var Fi,Jm=b(()=>{Fi=Object.freeze({capture:!0,passive:!1})});function Km(){this._map.fire("cameratouchchange")}var Eu=b(()=>{});var Vo,Oa=b(()=>{Vo=Object.freeze([.8,.5])});var Ou,zu=b(()=>{Ou=Object.freeze([.8,0])});var za,Qm=b(()=>{za=Object.freeze({preventScroll:!0})});var Aa,ef=b(()=>{Aa=Object.freeze({animate:!0})});function Au(e){St.value=null;let t=[...Lr];Lr.clear();let r,o,i,n,a;for([o,i]of t)if(Fo.set(o,null),qt.get(o)===i){n=i.duration?Math.min(1,(e-i.start)/(i.duration*1e3)):1,a=1-(1-n)**3;try{Fe(o,i.fromPitch+(Math.max(0,Math.min(o.options.maxPitch,i.pitch))-i.fromPitch)*a,i.fromBearing+i.delta*a),n<1&&qt.get(o)===i?Ra(o,i):qt.get(o)===i&&qt.set(o,null)}catch(s){r||=s}}if(r)throw r}var Ru=b(()=>{Ma();Ba();Pa();Ta();vr();tf()});function Ra(e,t){Lr.set(e,t),St.value===null&&(St.value=requestAnimationFrame(Au)),Fo.set(e,St.value)}var tf=b(()=>{Ba();Ta();Pa();Ru()});function Zo(e,t,r,o=No){if(jo(e),!Number.isFinite(t)||!Number.isFinite(r))throw new TypeError("Camera angles must be finite numbers");if(!o.animate||matchMedia("(prefers-reduced-motion: reduce)").matches)return Fe(e,t,r);let i=o.duration??.3;if(!Number.isFinite(i)||i<0)throw new TypeError("Camera duration must be nonnegative");let n=performance.now(),a=_(e),s=k(e),m=((r-s)%360+540)%360-180,f={duration:i,start:n,fromPitch:a,fromBearing:s,pitch:t,delta:m};return qt.set(e,f),Ra(e,f),e}var Ia=b(()=>{Ma();va();vr();J();Z();Sa();tf()});function Iu(e,t=Aa){return Zo(e,0,0,t)}var Du=b(()=>{ef();Ia()});function dt(e,t,r){return Zo(e,_(e),t,r)}var qo=b(()=>{Ia();J()});function Gu(e,t=Aa){return dt(e,0,t)}var Uu=b(()=>{ef();qo()});function Nu(e){let t=this._rotateControl,r=t._map;e.preventDefault(),t.options.visualizePitch?Iu(r):Gu(r),e.detail&&r.getContainer().focus(za)}var Fu=b(()=>{Qm();Du();Uu()});function Ht(e,t,r){return Zo(e,t,k(e),r)}var ji=b(()=>{Ia();Z()});function ju(e){let t=this._rotateControl,r=t._map,o=e.shiftKey?15:5;if(e.key==="ArrowLeft")dt(r,k(r)-o);else if(e.key==="ArrowRight")dt(r,k(r)+o);else if(e.key==="ArrowUp"&&t.options.visualizePitch)Ht(r,_(r)+o);else if(e.key==="ArrowDown"&&t.options.visualizePitch)Ht(r,_(r)-o);else if(e.key==="Home"||e.key===" ")this.click();else return;e.preventDefault(),e.stopPropagation()}var Wu=b(()=>{qo();Z();ji();J()});function Da(){let e=this._map,t=this.options.visualizePitch?_(e):0;this._arrow.style.transform=`scale(${1/Math.sqrt(Math.max(.01,Math.abs(Math.cos(t*B))))}) rotateX(${t}deg) rotate(${k(e)}deg)`,this._button.setAttribute("aria-description",`Bearing ${Math.round(k(e))} degrees, pitch ${Math.round(_(e))} degrees. Arrow keys adjust the camera; Home resets it.`),this._container.style.display=this.options.closeOnZeroBearing&&!k(e)&&!t&&!this._container.contains(document.activeElement)?"none":""}var rf=b(()=>{$();J();Z()});var je,Br=b(()=>{je={value:new WeakMap}});var Yr,Ga=b(()=>{Yr={value:new Set}});function Ua(e){return e.closest?.('input,textarea,select,[contenteditable="true"]')}var of=b(()=>{});function Na(e){let t=je.value.get(this);if(t.drag||!t.accept(e)||Ua(e.target))return;e.preventDefault(),e.stopPropagation(),t.moved=!1;let r=t.map.getContainer().getBoundingClientRect();t.drag={id:e.pointerId,x:e.clientX,y:e.clientY,cursor:t.element.style.cursor,cx:r.left+r.width/2,cy:r.top+r.height/2,dragging:t.map.dragging?.enabled()},t.map.dragging?.disable(),t.element.focus?.(za),t.element.setPointerCapture(e.pointerId),t.element.style.cursor="grabbing"}var nf=b(()=>{Br();Qm();of()});function Fa(e){return jo(e),e}var af=b(()=>{Sa()});function ja(e){let t=je.value.get(this);if(!t.drag||t.drag.id!==e.pointerId)return;let r=e.clientX-t.drag.x,o=e.clientY-t.drag.y;if(Math.hypot(r,o)<3&&!t.moved)return;Fa(t.map),t.moved=!0,e.preventDefault();let i=r*t.sensitivity[0];if(t.orbit)if(Math.abs(t.drag.cy-t.drag.y)>100){let n=Math.atan2(e.clientY-t.drag.cy,e.clientX-t.drag.cx)-Math.atan2(e.clientY-t.drag.cy,t.drag.x-t.drag.cx);i=Math.atan2(Math.sin(n),Math.cos(n))*tt}else i*=e.clientY<t.drag.cy?1:-1;Fe(t.map,_(t.map)-o*t.sensitivity[1],k(t.map)+i),t.drag.x=e.clientX,t.drag.y=e.clientY}var sf=b(()=>{yo();Br();af();vr();J();Z()});function Ho(e,t){if(!e?.drag||t?.pointerId!==void 0&&t.pointerId!==e.drag.id)return;let r=e.drag;e.drag=null,e.element.hasPointerCapture?.(r.id)&&e.element.releasePointerCapture(r.id),r.dragging&&e.map.getContainer()._leaflet_id&&e.map.dragging.enable(),e.element.style.cursor=r.cursor}var Wa=b(()=>{});function Tr(e){Ho(je.value.get(this),e)}var mf=b(()=>{Br();Wa()});function $a(e){let t=je.value.get(this);t.moved&&(e.preventDefault(),e.stopPropagation(),t.moved=!1)}var ff=b(()=>{Br()});function Va(e){let t=je.value.get(this);!t.drag&&!t.moved||(e.preventDefault(),e.stopPropagation())}var pf=b(()=>{Br()});function Za(){let e;for(e of Yr.value)Ho(e)}var cf=b(()=>{Ga();Wa()});function qa(e,t,r,o=Vo,i=!1){let n={map:e,element:t,accept:r,sensitivity:o,orbit:i,drag:null,moved:!1};return je.value.set(t,n),Yr.value.add(n),t.addEventListener("pointerdown",Na,!0),t.addEventListener("pointermove",ja),t.addEventListener("pointerup",Tr),t.addEventListener("pointercancel",Tr),t.addEventListener("lostpointercapture",Tr),t.addEventListener("click",$a,!0),t.addEventListener("contextmenu",Va),window.addEventListener("blur",Za),n}var lf=b(()=>{Oa();Br();Ga();nf();sf();mf();ff();pf();cf()});function $u(e){return e.button===0}var Vu=b(()=>{});function Zu(){Da.call(this._rotateControl)}var qu=b(()=>{rf()});function Hu(e){let t=d.DomUtil.create("div","leaflet-control-rotate leaflet-bar"),r=d.DomUtil.create("a","leaflet-control-rotate-toggle",t);this._map=e,this._container=t,this._button=r,r._rotateControl=this,r.href="#",r.draggable=!1,r.setAttribute("role","button"),r.title=this.options.visualizePitch?"Reset bearing and pitch":"Reset bearing to north",r.setAttribute("aria-label",r.title),r.style.cssText="cursor:grab;touch-action:none";let o=d.DomUtil.create("span","leaflet-control-rotate-arrow",r);return this._arrow=o,o.setAttribute("aria-hidden","true"),o.style.cssText="display:block;width:100%;height:100%;pointer-events:none;background: no-repeat center / 29px 29px",o.style.backgroundImage='url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 29 29%27%3E%3Cpath fill=%27%23333%27 d=%27M10.5 14 14.5 6 18.5 14Z%27/%3E%3Cpath fill=%27%23ccc%27 d=%27M10.5 16 14.5 24 18.5 16Z%27/%3E%3C/svg%3E")',r.onclick=Nu,r.onkeydown=ju,this._refresh=Da,e.on("rotate pitch",this._refresh,this),this._refresh(),this._dragState=qa(e,r,$u,this.options.visualizePitch?Vo:Ou),r.addEventListener("focusout",Zu),d.DomEvent.on(r,"dblclick contextmenu",d.DomEvent.stop),d.DomEvent.disableClickPropagation(t),d.DomEvent.disableScrollPropagation(t),t}var Yu=b(()=>{L();Oa();zu();Fu();Wu();rf();lf();Vu();qu()});function Xu(e){Ho(e);let{element:t}=e;t.removeEventListener("pointerdown",Na,!0),t.removeEventListener("pointermove",ja),t.removeEventListener("pointerup",Tr),t.removeEventListener("pointercancel",Tr),t.removeEventListener("lostpointercapture",Tr),t.removeEventListener("click",$a,!0),t.removeEventListener("contextmenu",Va),je.value.delete(t),Yr.value.delete(e),Yr.value.size||window.removeEventListener("blur",Za)}var Ju=b(()=>{Br();Ga();Wa();nf();sf();mf();ff();pf();cf()});function Ha(){Xu(this._dragState)}var uf=b(()=>{Ju()});function Ku(e){e.off("rotate pitch",this._refresh,this),Ha.call(this)}var Qu=b(()=>{uf()});function ed(e){return new d.Control.Rotate(e)}var td=b(()=>{L()});function rd(e){let t=this._cameraShiftRotate;!e.shiftKey||Ua(e.target)||e.target.closest(".leaflet-control")||(e.preventDefault(),e.stopImmediatePropagation(),dt(t._map,k(t._map)+Math.sign(e.deltaY)*5))}var od=b(()=>{qo();Z();of()});function id(){let e=this._map.getContainer();e._cameraShiftRotate=this,this._wheel=rd,e.addEventListener("wheel",this._wheel,Fi)}var nd=b(()=>{Jm();od()});function ad(){let e=this._map.getContainer();e.removeEventListener("wheel",this._wheel,!0),delete e._cameraShiftRotate}var sd=b(()=>{});function md(e){return!e.target.closest(".leaflet-control,.leaflet-marker-icon,.leaflet-popup")&&(e.button===2||e.button===0&&e.ctrlKey)}var fd=b(()=>{});function pd(){this._dragState=qa(this._map,this._map.getContainer(),md,Vo,!0)}var cd=b(()=>{Oa();lf();fd()});function ld(e){let t=this.handler,r=Number.isFinite(e.webkitCompassHeading)?-e.webkitCompassHeading:e.alpha,o=e.absolute?0:screen.orientation?.angle??window.orientation??0;Number.isFinite(r)&&dt(t._map,r-o)}var ud=b(()=>{qo()});function df(e,t){e.disable(),e._map.fire("error",{error:t})}var dd=b(()=>{});function hd([e,t]){let{handler:r,generation:o}=e.value;if(!(!r.enabled()||r._generation!==o)){if(!window.DeviceOrientationEvent||t.status!=="fulfilled"||t.value!=="granted")return df(r,t.status==="rejected"?t.reason:new Error("Device compass permission unavailable or denied"));try{window.addEventListener("deviceorientation",r._orientation),window.addEventListener("deviceorientationabsolute",r._orientation)}catch(i){df(r,i)}}}var gd=b(()=>{dd()});function yd(){this._compassGeneration=this._generation=(this._generation||0)+1,this._orientation={handler:this,handleEvent:ld};let e=window.DeviceOrientationEvent?.requestPermission,t;try{t=e?e.call(window.DeviceOrientationEvent):"granted"}catch(r){t=Promise.reject(r)}Promise.allSettled([Promise.resolve({handler:this,generation:this._generation}),t]).then(hd)}var xd=b(()=>{ud();gd()});function vd(){this._generation++,window.removeEventListener("deviceorientation",this._orientation),window.removeEventListener("deviceorientationabsolute",this._orientation)}var wd=b(()=>{});function Ld(e){e[0]?.target._containerResizeMap.invalidateSize()}var bd=b(()=>{});function Md(){let e=this._map.getContainer();e._containerResizeMap=this._map,this._observer=new ResizeObserver(Ld),this._observer.observe(e)}var Bd=b(()=>{bd()});function Td(){let e=this._map.getContainer();this._observer.disconnect(),delete e._containerResizeMap}var Pd=b(()=>{});function Ya(e){let t=kt.get(this),{map:r,container:o}=t;if(t.touch||e.touches.length!==2||e.target.closest(".leaflet-control")||!Mr.get(r).enabled()&&!br.get(r).enabled())return;let[i,n]=e.touches;if(Math.hypot(n.clientX-i.clientX,n.clientY-i.clientY)<1)return;Fa(r);let a=o.getBoundingClientRect(),s=new d.Point((i.clientX+n.clientX)/2-a.left,(i.clientY+n.clientY)/2-a.top);t.touch={angle:Math.atan2(n.clientY-i.clientY,n.clientX-i.clientX),distance:Math.hypot(n.clientX-i.clientX,n.clientY-i.clientY),middle:s,anchor:r.containerPointToLatLng(s),zoom:r.getZoom(),bearing:k(r),pitch:_(r),zooming:r.touchZoom?.enabled(),dragging:r.dragging?.enabled(),currentMiddle:new d.Point(s.x,s.y)},r.dragging?.disable(),e.preventDefault(),e.stopImmediatePropagation(),t.nativeZoom!==void 0&&(t.touch.zooming=t.nativeZoom),t.touch.snap=r.options.zoomSnap,r.options.zoomSnap=0}var hf=b(()=>{Ui();Ni();L();$o();af();Z();J()});function Xa(e){let t=kt.get(this),{map:r,container:o,touch:i}=t;if(!i||e.touches.length!==2)return;let[n,a]=e.touches,s=Math.atan2(a.clientY-n.clientY,a.clientX-n.clientX),m=o.getBoundingClientRect(),f=i.currentMiddle;f.x=(n.clientX+a.clientX)/2-m.left,f.y=(n.clientY+a.clientY)/2-m.top;let p=Math.atan2(Math.sin(s-i.angle),Math.cos(s-i.angle))*tt;Fe(r,br.get(r).enabled()?i.pitch-(f.y-i.middle.y)*.25:i.pitch,Mr.get(r).enabled()?i.bearing+p:i.bearing);let c=Math.hypot(a.clientX-n.clientX,a.clientY-n.clientY);if(c<1)return;let l=i.zooming?Math.max(r.getMinZoom(),Math.min(r.getMaxZoom(),i.zoom+Math.log2(c/i.distance))):i.zoom;if(r.setView(r.getCenter(),l,{animate:!1}),r.options.touchZoom!=="center"){let u=r.project(i.anchor).subtract(r.project(r.containerPointToLatLng(f)));r.setView(r.unproject(r.project(r.getCenter()).add(u)),r.getZoom(),{animate:!1})}e.preventDefault(),e.stopImmediatePropagation()}var gf=b(()=>{Ui();Ni();yo();$o();vr()});function Pr(e,t){if(!e.touch||t?.touches?.length>=2)return;let{map:r,container:o,touch:i}=e;i.dragging&&o._leaflet_id&&r.dragging.enable(),r.options.zoomSnap=i.snap,i.zooming&&i.snap&&o._leaflet_id&&r.setZoom(Math.round(r.getZoom()/i.snap)*i.snap,{animate:!1}),e.touch=null}var Wi=b(()=>{});function Yo(e){Pr(kt.get(this),e)}var yf=b(()=>{$o();Wi()});function $i(){let e=qr.get(this),{map:t,container:r}=e,o=Mr.get(t).enabled()||br.get(t).enabled();o&&e.nativeZoom===void 0?(e.nativeZoom=t.touchZoom?.enabled(),t.touchZoom?.disable()):!o&&e.nativeZoom!==void 0&&(Pr(e),e.nativeZoom&&r._leaflet_id&&t.touchZoom.enable(),e.nativeZoom=void 0)}var xf=b(()=>{Ca();Ui();Ni();Wi()});function Ja(){let e;for(e of Hr)Pr(e)}var vf=b(()=>{Ea();Wi()});function Sd(){let e=qr.get(this);if(!e)return;let{container:t,map:r}=e;Pr(e),t.removeEventListener("touchstart",Ya,!0),t.removeEventListener("touchmove",Xa,!0),t.removeEventListener("touchend",Yo,!0),t.removeEventListener("touchcancel",Yo,!0),Hr.delete(e),Hr.size||window.removeEventListener("blur",Ja),r.off("cameratouchchange",$i,r),Gi.get(r)?.remove(),kt.delete(t),qr.delete(r)}var kd=b(()=>{Ca();Zm();Ea();$o();Wi();hf();gf();yf();vf();xf()});function Xr(e,t,r){let o=Wo.get(e);o||Wo.set(e,o=new Map);let i=new r(e);o.set(t,i),e._handlers.push(i),e.options[t]&&i.enable()}var Cd=b(()=>{Vm()});function ht(e){return d.version.startsWith("2.")?e:e.extend({})}var Ka=b(()=>{L()});var _d={};Sv(_d,{cameraControls:()=>kv});function kv(e){if(Xr(e,"trackContainerMutation",Hm.value),!e.options.rotate)return;Xr(e,"shiftKeyRotate",Xm.value),Xr(e,"pitchDrag",Ym.value),Xr(e,"compassBearing",qm.value),Xr(e,"touchRotate",_a.value),Xr(e,"touchPitch",_a.value),Mr.set(e,Wo.get(e).get("touchRotate")),br.set(e,Wo.get(e).get("touchPitch"));let t=e.getContainer(),r={map:e,container:t,touch:null,nativeZoom:void 0};qr.set(e,r),kt.set(t,r),Hr.add(r),t.addEventListener("touchstart",Ya,Fi),t.addEventListener("touchmove",Xa,Fi),t.addEventListener("touchend",Yo,!0),t.addEventListener("touchcancel",Yo,!0),window.addEventListener("blur",Ja),e.on("cameratouchchange",$i,e),$i.call(e),e.options.rotateControl&&(Gi.set(e,new d.Control.Rotate(typeof e.options.rotateControl=="object"?e.options.rotateControl:No)),Gi.get(e).addTo(e)),e.once("unload",Sd,e)}var Qa,es,ts,rs,os,Xo,Ed=b(()=>{Ca();Vm();Zm();Ui();Ni();L();Pu();Su();ku();Cu();_u();$o();Ea();Jm();va();Eu();Yu();Qu();td();nd();sd();cd();uf();xd();wd();Bd();Pd();hf();gf();yf();xf();kd();vf();Cd();Ka();Qa=class extends ht(d.Handler){};Object.assign(Qa.prototype,{addHooks:yd,removeHooks:vd});qm.value=Qa;es=class extends ht(d.Handler){};Object.assign(es.prototype,{addHooks:Md,removeHooks:Td});Hm.value=es;ts=class extends ht(d.Handler){};Object.assign(ts.prototype,{addHooks:pd,removeHooks:Ha});Ym.value=ts;rs=class extends ht(d.Handler){};Object.assign(rs.prototype,{addHooks:id,removeHooks:ad});Xm.value=rs;os=class extends ht(d.Handler){};Object.assign(os.prototype,{addHooks:Km,removeHooks:Km});_a.value=os;Xo=class extends ht(d.Control){static defaultOptions={position:"topleft",closeOnZeroBearing:!0,visualizePitch:!0}};Object.assign(Xo.prototype,{onAdd:Hu,onRemove:Ku});d.version.startsWith("1.")&&(Xo.prototype.options=Object.assign(Object.create(d.Control.prototype.options),Xo.defaultOptions));d.Control.Rotate=Xo;d.control&&(d.control.rotate=ed)});L();var mt={value:void 0};var dn={value:void 0};L();var j={value:void 0};var et={value:void 0};var hn={value:void 0};var gn={value:void 0};var yn={value:void 0};var xn={value:void 0};var vn={value:void 0};var wn={value:void 0};var Ln={value:void 0};var de=new WeakMap;var re=new WeakMap;var uo=new WeakMap;var ar=new WeakMap;L();var R=new WeakMap;var wt=new WeakMap;function Bi(e){let t=wt.get(e.currentTarget);if(!t)return;let r;for(r of t)De(r)}function Ti(e){let t=wt.get(e.currentTarget);if(!t)return;let r;for(r of t)r.source.fire("error",{error:new Error("Unable to load native layer image")})}function bn(e,t){let r=wt.get(e);r&&(r.delete(t),r.size||wt.delete(e))}function Yf(e,t){let r=wt.get(e);r||wt.set(e,r=new Set),r.add(t)}var ft=new WeakMap;var Nt=new Set;var F=new WeakMap;var w=new WeakMap;var oe=new WeakMap;var Ft=new WeakMap;var sr=new WeakMap;var pt=new WeakMap;var Mn=[null];var ho=new WeakMap;var he=new WeakMap;var qe=new WeakMap;var Xf={subtree:!0};var se=new WeakMap;L();function Bn(e){let t;for(t of Object.values(e._layers))t instanceof d.Marker?t.update():(t instanceof d.Popup||t instanceof d.Tooltip)&&t._updatePosition()}function Jf(e,t){let r=e._map,o=qe.get(e),i,n;for(n of he.get(e).keys())if(n.effect.target===r._proxy){i=n;break}let a=i?.effect.getComputedTiming().progress??Math.min(1,(t-o.start)/250),s=r.getZoomScale(o.targetZoom,o.zoom),m=1+(s-1)*a,f=r.project(o.from,o.zoom),p=r.project(o.to,o.zoom);se.set(r,{zoom:r.getScaleZoom(m,o.zoom),center:r.unproject(f.add(p.subtract(f).multiplyBy(s*a/m)),o.zoom)}),Bn(r)}function Kf(e,t){let r=e._map,o,i,n;if(r._animatingZoom){he.get(e)||he.set(e,new Map);for(o of r.getContainer().getAnimations(Xf))!(o instanceof CSSTransition)||o.transitionProperty!=="transform"||!o.effect.target.classList.contains("leaflet-zoom-animated")||he.get(e).has(o)||(i=o.currentTime||0,o.pause(),he.get(e).set(o,{start:t,time:i}));for([o,{start:n,time:i}]of he.get(e))o.currentTime=Math.min(o.effect.getComputedTiming().endTime,i+t-n);qe.get(e)&&Jf(e,t)}}var mr=new WeakMap;var Pi={size:[null,null],format:"depth24plus",sampleCount:4,usage:null};var go={size:[null,null],format:null,sampleCount:4,usage:null};async function Qf(e,t,r){try{await r}catch(o){e.fire("error",{error:o})}t.destroy()}function W(e,t){Qf(e,t,w.get(e).device.queue.onSubmittedWorkDone())}function ep(e,t){let r=w.get(e);(!mr.get(e)||!mr.get(e).equals(t))&&(r.width=t.x,r.height=t.y,r.canvas.width=Math.round(t.x*r.dpr),r.canvas.height=Math.round(t.y*r.dpr),r.canvas.style.width=`${t.x}px`,r.canvas.style.height=`${t.y}px`,r.depthTexture&&W(e,r.depthTexture),r.colorTexture?.destroy(),r.colorTexture=r.device.createTexture((go.size[0]=r.canvas.width,go.size[1]=r.canvas.height,go.format=r.format,go.usage=GPUTextureUsage.RENDER_ATTACHMENT,go)),r.depthTexture=r.device.createTexture((Pi.size[0]=r.canvas.width,Pi.size[1]=r.canvas.height,Pi.usage=GPUTextureUsage.RENDER_ATTACHMENT,Pi)),mr.set(e,t))}var ee=new WeakMap;var ie=new WeakMap;$();yo();var tp=2*Math.atan(1/3)*tt;var rt=2*Math.PI*6378137;var me=new WeakMap;var Be=new WeakMap;var ct=new WeakMap;var Te=new WeakMap;var ot=new WeakMap;var ye=new WeakMap;L();function rp(e,t){let r=t?.get(`${Math.floor(e.x/64)}/${Math.floor(e.y/64)}`);if(!r)return null;let o,i,n,a,s,m,f;for(o of r)if(!(e.x<o.min[0]||e.x>o.max[0]||e.y<o.min[1]||e.y>o.max[1])){for([i,n,a]of o.triangles)if(s=(n[1]-a[1])*(i[0]-a[0])+(a[0]-n[0])*(i[1]-a[1]),m=((n[1]-a[1])*(e.x-a[0])+(a[0]-n[0])*(e.y-a[1]))/s,f=((a[1]-i[1])*(e.x-a[0])+(i[0]-a[0])*(e.y-a[1]))/s,m>=0&&f>=0&&m+f<=1)return m*i[2]+f*n[2]+(1-m-f)*a[2]}return null}function Si(e,t,r){let o=Math.floor(t/256),i=Math.floor(r/256),n=e.get(`${o}/${i}`);if(!n)return null;let a=n[(r-i*256)*256+t-o*256];return Number.isFinite(a)&&a>-1e3?a:null}function fr(e,t){let r=e.x-.5,o=e.y-.5,i=Math.floor(r),n=Math.floor(o),a=r-i,s=o-n,m=Si(t,i,n),f=Si(t,i+1,n),p=Si(t,i,n+1),c=Si(t,i+1,n+1);return!Number.isFinite(m)||!Number.isFinite(f)||!Number.isFinite(p)||!Number.isFinite(c)?Number.isFinite(m)?m:Number.isFinite(f)?f:Number.isFinite(p)?p:Number.isFinite(c)?c:null:(m*(1-a)+f*a)*(1-s)+(p*(1-a)+c*a)*s}function pr(e,t){if(!e._map||!Te.get(e))return null;let r=t instanceof d.Point?t:e._map.project(t,ye.get(e));return rp(r,ct.get(e))??fr(r,ot.get(e))}function op(e,t,r,o,i){let n,a,s,m,f=`${r}:${o}:${i}`;for(n of Object.values(e.map._layers))if(a=de.get(n),!(a?.disposed||a?.terrainStream!==e)&&(s=a.terrainRequests?.get(f),!(!s?.tiles||n._tiles[f]!==s.tile)&&(m=fr(t,s.tiles),Number.isFinite(m))))return m;return null}function ip(e,t){let r=Math.max(0,Math.min(24,Math.round(e.map.getZoom()))),o=new Map,i,n,a,s,m,f,p,c,l,u,h;for(;r>=0;r--){if(i=e.map.project(t,r),n=2**r,a=Math.floor(i.x/256),s=Math.floor(i.y/256),h=op(e,i,a,s,r),Number.isFinite(h))return h;for(o.clear(),m=0;m<9;m++)f=m%3-1,p=Math.floor(m/3)-1,c=((a+f)%n+n)%n,l=Math.max(0,Math.min(n-1,s+p)),u=e.terrainCache.get(`${r}/${c}/${l}`),u?.data&&o.set(`${a+f}/${s+p}`,u.data);if(h=fr(i,o),Number.isFinite(h))return h}return null}function xe(e,t){let r=me.get(e);if(r)return pr(r,t);let o=Be.get(e);return o&&ip(o,t)}var jt=new WeakMap;J();Z();var np=Math.PI/360;function xo(e){e.x||=[0,0,0],e.y||=[0,0,0],e.z||=[0,0,0],e.viewTransform||=new DOMMatrix,e.projectionTransform||=new DOMMatrix,e.projectionViewTransform||=new DOMMatrix;let{position:t,target:r,up:o,x:i,y:n,z:a,viewMatrix:s,projectionMatrix:m,projectionViewMatrix:f}=e,p;a[0]=t[0]-r[0],a[1]=t[1]-r[1],a[2]=t[2]-r[2];let c=Math.hypot(a[0],a[1],a[2])||1;a[0]/=c,a[1]/=c,a[2]/=c,i[0]=o[1]*a[2]-o[2]*a[1],i[1]=o[2]*a[0]-o[0]*a[2],i[2]=o[0]*a[1]-o[1]*a[0];let l=Math.hypot(i[0],i[1],i[2])||1;i[0]/=l,i[1]/=l,i[2]/=l,n[0]=a[1]*i[2]-a[2]*i[1],n[1]=a[2]*i[0]-a[0]*i[2],n[2]=a[0]*i[1]-a[1]*i[0];let u=e.viewTransform;u.m11=i[0],u.m12=i[1],u.m13=i[2],u.m14=0,u.m21=n[0],u.m22=n[1],u.m23=n[2],u.m24=0,u.m31=a[0],u.m32=a[1],u.m33=a[2],u.m34=0,u.m41=t[0],u.m42=t[1],u.m43=t[2],u.m44=1,u.invertSelf(),s[0]=u.m11,s[1]=u.m12,s[2]=u.m13,s[3]=u.m14,s[4]=u.m21,s[5]=u.m22,s[6]=u.m23,s[7]=u.m24,s[8]=u.m31,s[9]=u.m32,s[10]=u.m33,s[11]=u.m34,s[12]=u.m41,s[13]=u.m42,s[14]=u.m43,s[15]=u.m44;for(p of s)if(!Number.isFinite(p))throw new Error("Singular 3D transform");let h=1/Math.tan(e.fov*np),x=e.near,g=e.far;m[0]=h/e.aspect,m[1]=0,m[2]=0,m[3]=0,m[4]=0,m[5]=h,m[6]=0,m[7]=0,m[8]=0,m[9]=0,m[10]=g/(x-g),m[11]=-1,m[12]=0,m[13]=0,m[14]=g*x/(x-g),m[15]=0;let y=e.projectionTransform;y.m11=m[0],y.m12=m[1],y.m13=m[2],y.m14=m[3],y.m21=m[4],y.m22=m[5],y.m23=m[6],y.m24=m[7],y.m31=m[8],y.m32=m[9],y.m33=m[10],y.m34=m[11],y.m41=m[12],y.m42=m[13],y.m43=m[14],y.m44=m[15];let v=e.projectionViewTransform;v.m11=y.m11,v.m12=y.m12,v.m13=y.m13,v.m14=y.m14,v.m21=y.m21,v.m22=y.m22,v.m23=y.m23,v.m24=y.m24,v.m31=y.m31,v.m32=y.m32,v.m33=y.m33,v.m34=y.m34,v.m41=y.m41,v.m42=y.m42,v.m43=y.m43,v.m44=y.m44,v.multiplySelf(u),f[0]=v.m11,f[1]=v.m12,f[2]=v.m13,f[3]=v.m14,f[4]=v.m21,f[5]=v.m22,f[6]=v.m23,f[7]=v.m24,f[8]=v.m31,f[9]=v.m32,f[10]=v.m33,f[11]=v.m34,f[12]=v.m41,f[13]=v.m42,f[14]=v.m43,f[15]=v.m44}function it(e,t,r=!1){let o=se.get(e);if(!o)return t;let i=e.getSize().divideBy(2),n=e.getZoomScale(o.zoom),a=e.project(e.getCenter(),o.zoom).subtract(e.project(o.center,o.zoom));return r?t.subtract(i).subtract(a).divideBy(n).add(i):t.subtract(i).multiplyBy(n).add(a).add(i)}function ap(e,t){let r=e._map,o=se.get(r)?.zoom??r.getZoom(),i=r.options.crs.scale(o)/(rt*Math.cos(ie.get(e).lat*B)),n=it(r,j.value.layerPointToContainerPoint.call(r,r.project(ie.get(e)).subtract(r.getPixelOrigin()))),a=t.y*1.5/i,s=(t.x/2-n.x)/i,m=jt.get(r)?.control?._walk,f=(xe(r,r.getCenter())??0)+(m?.saved?m.state.height:0),p=(t.y/2-n.y)/i,c=_(r)*B,l=k(r)*B,u=Math.sin(c),h=Math.cos(c),x=Math.sin(l),g=Math.cos(l),y=ee.get(e);y.fov=tp,y.aspect=t.x/t.y,y.near=Math.max(.1,a/1e4),y.far=Math.max(1e4,a*10),y.position[0]=s+x*u*a,y.position[1]=f+h*a,y.position[2]=p+g*u*a,y.up[0]=-x*h,y.up[1]=u,y.up[2]=-g*h,y.target[0]=s,y.target[1]=f,y.target[2]=p,xo(y)}var jr=new WeakMap;function sp(e,t){let r,o;if(e.matrix){let i=e._matrixState||=new Float64Array(16);for(r=0;r<16;r++)i[r]!==e.matrix[r]&&(t=!0),i[r]=e.matrix[r]}else{let i=e._transformState||=new Float64Array(9);for(r=0;r<9;r++)o=r<3?e.position[r]:r<6?e.rotation[r-3]:e.scale[r-6],i[r]!==o&&(t=!0),i[r]=o}return t}yo();function mp(e){let t=e._localTransform||=new DOMMatrix;return t.m11=1,t.m12=0,t.m13=0,t.m14=0,t.m21=0,t.m22=1,t.m23=0,t.m24=0,t.m31=0,t.m32=0,t.m33=1,t.m34=0,t.m41=0,t.m42=0,t.m43=0,t.m44=1,t.translateSelf(e.position[0],e.position[1],e.position[2]),t.rotateAxisAngleSelf(0,1,0,e.rotation[1]*tt),t.rotateAxisAngleSelf(1,0,0,e.rotation[0]*tt),t.rotateAxisAngleSelf(0,0,1,e.rotation[2]*tt),t.scaleSelf(e.scale[0],e.scale[1],e.scale[2]),t}function Pe(e){let t=e.parent,r=t?._worldMatrixVersion||0,o=!!e.matrix,i=e._worldParent!==t||e._parentWorldVersion!==r||e._worldMatrixMode!==o,n;if(i=sp(e,i),!i){for(n of e.children)Pe(n);return}let a,s;e.matrix?a=e.matrix:a=mp(e),s=e._worldTransform||=new DOMMatrix,a instanceof DOMMatrix?(s.m11=a.m11,s.m12=a.m12,s.m13=a.m13,s.m14=a.m14,s.m21=a.m21,s.m22=a.m22,s.m23=a.m23,s.m24=a.m24,s.m31=a.m31,s.m32=a.m32,s.m33=a.m33,s.m34=a.m34,s.m41=a.m41,s.m42=a.m42,s.m43=a.m43,s.m44=a.m44):(s.m11=a[0],s.m12=a[1],s.m13=a[2],s.m14=a[3],s.m21=a[4],s.m22=a[5],s.m23=a[6],s.m24=a[7],s.m31=a[8],s.m32=a[9],s.m33=a[10],s.m34=a[11],s.m41=a[12],s.m42=a[13],s.m43=a[14],s.m44=a[15]),t&&s.preMultiplySelf(t._worldTransform),e.worldMatrix[0]=s.m11,e.worldMatrix[1]=s.m12,e.worldMatrix[2]=s.m13,e.worldMatrix[3]=s.m14,e.worldMatrix[4]=s.m21,e.worldMatrix[5]=s.m22,e.worldMatrix[6]=s.m23,e.worldMatrix[7]=s.m24,e.worldMatrix[8]=s.m31,e.worldMatrix[9]=s.m32,e.worldMatrix[10]=s.m33,e.worldMatrix[11]=s.m34,e.worldMatrix[12]=s.m41,e.worldMatrix[13]=s.m42,e.worldMatrix[14]=s.m43,e.worldMatrix[15]=s.m44,e._worldParent=t,e._parentWorldVersion=r,e._worldMatrixMode=o,e._worldMatrixVersion=(e._worldMatrixVersion||0)+1;for(n of e.children)Pe(n)}function _e(e){let t=[1/0,1/0,1/0],r=[-1/0,-1/0,-1/0],o=e.attributes.position.data,i,n,a,s;for(i=0;i<o.length;i+=3)n=o[i],a=o[i+1],s=o[i+2],t[0]=Math.min(t[0],n),r[0]=Math.max(r[0],n),t[1]=Math.min(t[1],a),r[1]=Math.max(r[1],a),t[2]=Math.min(t[2],s),r[2]=Math.max(r[2],s);let m=e.attributes.instanceOffset;if(m){let l,u,h,x;for(l=0;l<3;l++){for(h=1/0,x=-1/0,u=l;u<m.data.length;u+=m.size)h=Math.min(h,m.data[u]),x=Math.max(x,m.data[u]);t[l]=Math.fround(t[l]+h),r[l]=Math.fround(r[l]+x)}}let f=[(t[0]+r[0])/2,(t[1]+r[1])/2,(t[2]+r[2])/2],p=0;for(i=0;!m&&i<o.length;i+=3)n=o[i]-f[0],a=o[i+1]-f[1],s=o[i+2]-f[2],p=Math.max(p,n*n+a*a+s*s);let c=m?Math.hypot(r[0]-t[0],r[1]-t[1],r[2]-t[2])/2:Math.sqrt(p);if(!m&&(p===1/0||p<Number.MIN_VALUE/Number.EPSILON))for(c=0,i=0;i<o.length;i+=3)c=Math.max(c,Math.hypot(o[i]-f[0],o[i+1]-f[1],o[i+2]-f[2]));e.bounds={min:t,max:r,center:f,radius:c}}function fp(e){let t=e.program?.uniforms?.strokeScale?.value??1;return Math.max(0,t-1)*(e.geometry.nativeStrokeRadius||0)}function pp(e,t,r,o,i){e.geometry.bounds||_e(e.geometry);let n=e.geometry.bounds,a=e.worldMatrix,s=e._cullingSphere;if(!s||s.bounds!==n||s.matrix!==a||s.version!==e._worldMatrixVersion||e._worldMatrixVersion===void 0){s||=e._cullingSphere={};let h=n.center;s.x=a[0]*h[0]+a[4]*h[1]+a[8]*h[2]+a[12],s.y=a[1]*h[0]+a[5]*h[1]+a[9]*h[2]+a[13],s.z=a[2]*h[0]+a[6]*h[1]+a[10]*h[2]+a[14],s.scale=Math.max(Math.hypot(a[0],a[1],a[2]),Math.hypot(a[4],a[5],a[6]),Math.hypot(a[8],a[9],a[10])),s.radius=n.radius*s.scale,s.bounds=n,s.matrix=a,s.version=e._worldMatrixVersion}let{x:m,y:f,z:p}=s,c=s.radius+fp(e)*s.scale,l=t[2]*m+t[6]*f+t[10]*p+t[14],u=t[3]*m+t[7]*f+t[11]*p+t[15];e._sortDepth=l/u,e._visibleInFrame=r[0][0]*m+r[0][1]*f+r[0][2]*p+r[0][3]>=-c*o[0]&&r[1][0]*m+r[1][1]*f+r[1][2]*p+r[1][3]>=-c*o[1]&&r[2][0]*m+r[2][1]*f+r[2][2]*p+r[2][3]>=-c*o[2]&&r[3][0]*m+r[3][1]*f+r[3][2]*p+r[3][3]>=-c*o[3]&&r[4][0]*m+r[4][1]*f+r[4][2]*p+r[4][3]>=-c*o[4]&&r[5][0]*m+r[5][1]*f+r[5][2]*p+r[5][3]>=-c*o[5],e._visibleInFrame&&i.push(e)}function xm(e,t,r,o,i,n,a){if(!e.visible)return;e.geometry&&(t?.altitude>=3&&!e.tile&&e._appearance!==0&&!e.program.nightLight&&e.program.depthTest!==!1&&a.push(e),pp(e,r,o,i,n));let s;for(s of e.children)xm(s,t,r,o,i,n,a)}function cp(e,t,r){let i=ee.get(e).projectionViewMatrix,n=w.get(e),a=n.frustum||=[new Float64Array(4),new Float64Array(4),new Float64Array(4),new Float64Array(4),new Float64Array(4),new Float64Array(4)],s=n.frustumLengths||=new Float64Array(6),m,f,p,c,l;for(m=0;m<6;m++){for(f=Math.floor(m/2),p=a[m],c=0;c<4;c++)l=c*4,p[c]=m===4?i[l+2]:m%2?i[l+3]-i[l+f]:i[l+3]+i[l+f];s[m]=Math.hypot(p[0],p[1],p[2])}let u=jr.get(e);u||jr.set(e,u=[]),u.length=0;let h=Ft.get(e);h||Ft.set(e,h=[]),h.length=0,r&&Pe(oe.get(e)),xm(oe.get(e),t,i,a,s,u,h)}var z=new WeakMap;var I=new WeakMap;var K=new WeakMap;var ki=new WeakMap;var fe=new WeakMap;var Ee=new WeakMap;L();var lp=[];$();var up=[];var dp={x:0,y:0};var hp={x:1,y:1};var gp={code:"@group(0)@binding(0)var source:texture_2d<f32>;@group(0)@binding(1)var sourceSampler:sampler;@group(0)@binding(2)var<uniform> opacity:f32;struct Varyings{@builtin(position)position:vec4f,@location(0)uv:vec2f};@vertex fn vertexMain(@builtin(vertex_index)index:u32)-> Varyings{let uv = vec2f(f32(index & 1u),f32(index >> 1u));return Varyings(vec4f(uv.x * 2.0 - 1.0,1.0 - uv.y * 2.0,0.0,1.0),uv);}@fragment fn fragmentMain(input:Varyings)->@location(0)vec4f{let color = textureSample(source,sourceSampler,input.uv);return vec4f(color.rgb,color.a * opacity);}"};var vo={layout:"auto",vertex:{module:null,entryPoint:"vertexMain"},fragment:{module:null,entryPoint:"fragmentMain",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}}}]},primitive:{topology:"triangle-strip"}};var yp={magFilter:"linear",minFilter:"linear"};function xp(e){let t=e.device;if(!e.roofBlit){let r=t.createShaderModule(gp);e.roofBlit={pipeline:t.createRenderPipeline((vo.vertex.module=r,vo.fragment.module=r,vo)),sampler:t.createSampler(yp)},vo.vertex.module=null,vo.fragment.module=null}}var Sn={size:null,usage:null};var kn={colorAttachments:[{view:null,clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}]};var Cn={source:null};var _n={texture:null};var En=[null,null];function vp(e,t){let r=t.texture;r.uploaded!==r.image&&(e.queue.copyExternalImageToTexture((Cn.source=t.image,Cn),(_n.texture=r.texture,_n),(En[0]=r.texture.width,En[1]=r.texture.height,En)),Cn.source=null,_n.texture=null,r.uploaded=r.image)}var lt={layout:null,entries:[{binding:0,resource:null},{binding:1,resource:null},{binding:2,resource:{buffer:null,offset:null,size:4}}]};var On=[null];var zn={value:new Float32Array(64)};function wp(e,t){return(e.layer.options.zIndex||0)-(t.layer.options.zIndex||0)||e.tile.coords.z-t.tile.coords.z}function Lp(e,t,r,o,i,n,a){let s=w.get(e),m=s.device,f=e._map,p=Math.max(1,t.length)*64;zn.value.length<p&&(zn.value=new Float32Array(p));let c=zn.value,l=m.createBuffer((Sn.size=c.byteLength,Sn.usage=GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,Sn)),u=m.createCommandEncoder(),h=u.beginRenderPass((kn.colorAttachments[0].view=K.get(e).texture.texture.createView(),kn));kn.colorAttachments[0].view=null,h.setPipeline(s.roofBlit.pipeline),t.sort(wp);let x,g,y,v,S,T,P,A;for([x,{tile:g,layer:y}]of t.entries())({coords:v}=g),S=g.texture,vp(m,g),c[x*64]=y.options.opacity,T=256*f.getZoomScale(r,v.z),P=(v.x*T-o.x)*n/i.x,A=(v.y*T-o.y)*a/i.y,h.setViewport(P,A,Math.min(T*n/i.x,n-P),Math.min(T*a/i.y,a-A),0,1),h.setBindGroup(0,m.createBindGroup((lt.layout=s.roofBlit.pipeline.getBindGroupLayout(0),lt.entries[0].resource=S.texture.createView(),lt.entries[1].resource=s.roofBlit.sampler,lt.entries[2].resource.buffer=l,lt.entries[2].resource.offset=x*256,lt))),lt.layout=null,lt.entries[0].resource=null,lt.entries[1].resource=null,lt.entries[2].resource.buffer=null,h.draw(4);h.end(),m.queue.writeBuffer(l,0,c),m.queue.submit((On[0]=u.finish(),On)),On[0]=null,l.destroy()}function bp(e,t){let r=-1/0,o,i;for(o of e)for(i of I.get(o).values())i.done&&!i.request.signal.aborted&&i.image&&(i._roofEntry||={tile:i,layer:o},t.push(i._roofEntry),r=Math.max(r,i.coords.z));return r}var Mp={size:[null,null],format:"rgba8unorm",usage:null};var Bp={addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"};function Tp(e,t,r,o){let i=w.get(e),n=Mp;n.size[0]=r,n.size[1]=o,n.usage=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT,t.texture&&(t.texture.width!==r||t.texture.height!==o)&&(W(e,t.texture.texture),t.texture.texture=i.device.createTexture(n),t.texture.width=r,t.texture.height=o),t.texture||={device:i.device,texture:i.device.createTexture(n),sampler:i.device.createSampler(Bp),samplerOptions:{addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"},image:null,width:r,height:o,format:"rgba8unorm",srgb:!1,flipY:!1,uploaded:null}}function Pp(e,t,r,o){let i=e._map,n=w.get(e),a=up;a.length=0;let s=bp(t,a),m=1/0,f=1/0,p=-1/0,c=-1/0,l,u;a.length||(s=i.getZoom());for({tile:{coords:l}}of a)u=256*i.getZoomScale(s,l.z),m=Math.min(m,l.x*u),f=Math.min(f,l.y*u),p=Math.max(p,(l.x+1)*u),c=Math.max(c,(l.y+1)*u);let h=i.project(ie.get(e),s),x=dp,g=hp;x.x=a.length?m:h.x,x.y=a.length?f:h.y,g.x=a.length?p-m:1,g.y=a.length?c-f:1;let y=Math.min(1,4096/Math.max(g.x,g.y)),v=Math.max(1,Math.ceil(g.x*y)),S=Math.max(1,Math.ceil(g.y*y)),T=i.options.crs.scale(s)/(rt*Math.cos(ie.get(e).lat*B)),P={matrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],texture:K.get(e)?.texture};K.set(e,P),P.signature=r,P.updatedAt=o,P.matrix[0]=T/g.x,P.matrix[10]=T/g.y,P.matrix[12]=(h.x-x.x)/g.x,P.matrix[14]=(h.y-x.y)/g.y,Tp(e,P,v,S),xp(n);try{Lp(e,a,s,x,g,v,S)}finally{a.length=0}}function Sp(e,t,r){let o=lp;o.length=0;let i=!1,n;for(n of t)o.push(`${d.Util.stamp(n)}:${Ee.get(n)||0}:${n.options.opacity}:${n.options.zIndex}`),i||=!!fe.get(n);let a=o.join("|");o.length=0,(!K.get(e)||K.get(e).signature!==a&&(!i||r-K.get(e).updatedAt>=50))&&Pp(e,t,a,r)}function kp(e,t){let r=e._map,o=ki.get(e);o||ki.set(e,o=[]),o.length=0;let i=!1,n,a;for(n of F.get(e))if(n.options.roofTexture||n.options.wallTexture){i=!0;break}if(i){for(a of Object.values(r._layers))z.get(a)==="raster"&&I.get(a)&&a.options.opacity>0&&o.push(a);Sp(e,o,t)}else K.get(e)&&(W(e,K.get(e).texture.texture),K.set(e,null));return o}function Cp(e,t){return e.program.transparent?(e.renderOrder||0)-(t.renderOrder||0)||t._sortDepth-e._sortDepth||e.id-t.id:(e._sortDepth??0)-(t._sortDepth??0)||e.id-t.id}function _p(e,t){return+!!t.ground-+!!e.ground||(e.ground&&t.ground?(e.renderOrder||0)-(t.renderOrder||0)||e.tile.coords.z-t.tile.coords.z:0)||Number(e.program.transparent)-Number(t.program.transparent)||Cp(e,t)}var U=new WeakMap;var cr=new WeakMap;$();function Ep(e,t,r){let o=t._map,i=e.geometry.bounds,n=e.worldMatrix,a=cr.get(r),s=o.project(ie.get(t),a),m=o.options.crs.scale(a)/(rt*Math.cos(ie.get(t).lat*B)),f=1/0,p=1/0,c=-1/0,l=-1/0,u,h,x,g,y,v,S,T;for(u=0;u<8;u++)h=u&1?i.max[0]:i.min[0],x=u&2?i.max[1]:i.min[1],g=u&4?i.max[2]:i.min[2],y=s.x+(n[0]*h+n[4]*x+n[8]*g+n[12])*m,v=s.y+(n[2]*h+n[6]*x+n[10]*g+n[14])*m,f=Math.min(f,y),p=Math.min(p,v),c=Math.max(c,y),l=Math.max(l,v);return U.get(r).maxLat!==void 0&&U.get(r).minLon!==void 0&&U.get(r).minLat!==void 0&&U.get(r).maxLon!==void 0&&(S=o.project([U.get(r).maxLat,U.get(r).minLon],a),T=o.project([U.get(r).minLat,U.get(r).maxLon],a),f=Math.max(f,S.x),p=Math.max(p,S.y),c=Math.min(c,T.x),l=Math.min(l,T.y),f>=c||p>=l)?null:[f,p,c,l]}function Op(e,t,r){let o=256*2**(r-t.coords.z),i=t.coords.x*o,n=t.coords.y*o,a=[],s,m,f,p,c,l,u,h;for([s,m,f,p]of e){if(c=Math.max(s,i),l=Math.max(m,n),u=Math.min(f,i+o),h=Math.min(p,n+o),c>=u||l>=h){a.push([s,m,f,p]);continue}m<l&&a.push([s,m,f,l]),h<p&&a.push([s,h,f,p]),s<c&&a.push([s,l,c,h]),u<f&&a.push([u,l,f,h])}return a}function zp(e,t,r){let o=!1,i=!1,n,a,s,m;for(n of r){if(!U.get(n)){i=!0;continue}if(a=Ep(e,t,n),!!a){o=!0,s=[a];for(m of I.get(n).values())if(!(!m.done&&!m.error)&&(s=Op(s,m,cr.get(n)),!s.length))return!0}}return!o&&!i}function Ap(e,t,r,o){let i,n;if(t.program.uniforms.roofTexture&&!r.length&&(t._roofRevealed=!0),t.program.uniforms.roofTexture&&!t._roofRevealed&&r.length){jt.get(e._map)?.control?._walk?.saved&&(t._roofRevealed=!0,t.fadeStart=o-(t.fadeDuration||0)),t._roofCoverageSignature!==K.get(e)?.signature&&(t._roofCoverageSignature=K.get(e)?.signature,t._roofCovered=zp(t,e,r)),n=!1;for(i of r)if(!U.get(i)||fe.get(i)>0){n=!0;break}if(!t._roofRevealed&&!t._roofCovered&&n)return t._appearance=0,!1;t._roofRevealed=!0}return!0}function Rp(e,t,r,o){let i=jr.get(e),n=Ft.get(e),a=w.get(e),s=!1,m,f;for(m of i)Ap(e,m,t,r)&&(m.fadeDuration&&(m.fadeStart??=m.tile?.loadedAt??r,f=Math.min(1,(r-m.fadeStart)/m.fadeDuration),m._appearance=f*f*(3-2*f),s||=f<1),o.push(m));i.length=0,o.sort(_p);let p=1/0,c=-1/0;for(m of o)m.ground&&(p=Math.min(p,m.tile.coords.z),c=Math.max(c,m.tile.coords.z));a.groundOverlap=p!==c;let l=0;for(m of n)m.visible&&m._appearance!==0&&(n[l++]=m);return n.length=l,s}var An={size:null,usage:null};function Ip(e,t,r){let o=w.get(e);(!o.uniformBuffer||o.uniformBuffer.size<(t.length*2+r.length+1)*256)&&(o.uniformBuffer&&W(e,o.uniformBuffer),o.uniformBuffer=o.device.createBuffer((An.size=Math.max(64,t.length*4+r.length*2)*256,An.usage=GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,An)),o.uniformData=new Float32Array(o.uniformBuffer.size/4))}var M=new WeakMap;var nt={layout:null,entries:[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null},{binding:3,resource:{buffer:null}}]};function Rn(e){let t=w.get(e).sunlight;t.bindGroup=w.get(e).device.createBindGroup((nt.layout=t.layout,nt.entries[0].resource.buffer=t.buffer,nt.entries[1].resource=t.texture.createView(),nt.entries[2].resource=t.sampler,nt.entries[3].resource.buffer=t.lights,nt)),nt.layout=null,nt.entries[0].resource.buffer=null,nt.entries[1].resource=null,nt.entries[2].resource=null,nt.entries[3].resource.buffer=null}function Dp(e,t,r,o,i){let n,a;for(n=0,a=o[r]*4;n<8;n++)i[a+n]=e[t+n];o[r]+=2}function Gp(e,t,r,o,i,n,a,s){let m=e[t+3],f=e[t]-r,p=e[t+2]-o,c,l,u;for(c=Math.floor((p-m)/i);c<=Math.floor((p+m)/i);c++)for(l=Math.floor((f-m)/i);l<=Math.floor((f+m)/i);l++)u=c*n+l,s?Dp(e,t,u,a,s):a[u]++}function vm(e,t,r,o,i,n,a){let s,m;for(s of e)for(m=0;m<s.length;m+=8)Gp(s,m,t,r,o,i,n,a)}function Up(e,t){let r=0,o,i,n,a;for(o of e)r+=o.length/8;let s=32,m;if(r){let f=1/0,p=1/0,c=-1/0,l=-1/0;for(o of e)for(i=0;i<o.length;i+=8)f=Math.min(f,o[i]-o[i+3]),c=Math.max(c,o[i]+o[i+3]),p=Math.min(p,o[i+2]-o[i+3]),l=Math.max(l,o[i+2]+o[i+3]);let u=Math.ceil((c-f)/s)+1,h=Math.ceil((l-p)/s)+1,x=new Uint32Array(u*h),g=new Uint32Array(u*h);vm(e,f,p,s,u,x);let y=0;for(n of x)y+=n;let v=(2+u*h+y*2)*4;if(v*4>t)throw new Error("Streetlight grid exceeds GPU storage limit");m=new Float32Array(v),m[0]=f,m[1]=p,m[2]=s,m[3]=u,m[4]=h,m[5]=r;let S=2+u*h;for(a=0;a<x.length;a++)x[a]&&(m[(2+a)*4]=g[a]=S,m[(2+a)*4+1]=x[a],S+=x[a]*2);vm(e,f,p,s,u,g,m)}else m=new Float32Array(8);return{data:m,count:r}}var Np=.03/(4*Math.PI);function Fp(e,t){let r=new Float32Array(e.length*8),o,i,n,a,s,m,f,p;for(o=0;o<e.length;o++)({position:[i,n,a],radius:s,color:m,flux:f}=e[o]),p=t[3]*i+t[7]*n+t[11]*a+t[15],r[o*8]=(t[0]*i+t[4]*n+t[8]*a+t[12])/p,r[o*8+1]=(t[1]*i+t[5]*n+t[9]*a+t[13])/p,r[o*8+2]=(t[2]*i+t[6]*n+t[10]*a+t[14])/p,r[o*8+3]=s,r[o*8+4]=m[0],r[o*8+5]=m[1],r[o*8+6]=m[2],r[o*8+7]=f*Np;return r}function wm(e,t,r){let o=t?.meshes.length===e.length,i,n,a,s,m,f,p;for(i=0;i<e.length;i++){for(n=e[i],a=n.worldMatrix,s=n.extras.lights,m=n._worldLights,f=!!m,p=0;p<a.length&&f;p++)f=a[p]===m.matrix[p];(!f||m.lights!==s)&&(m=n._worldLights={lights:s,matrix:[...a],data:Fp(s,a)}),o&&=t.meshes[i].mesh===n&&t.meshes[i].cache===m}if(o)return t;let c=new Array(e.length),l=new Array(e.length);for(i=0;i<e.length;i++)n=e[i],m=n._worldLights,c[i]=m.data,l[i]={mesh:n,cache:m};return{...Up(c,r),meshes:l}}var lr=[];function Lm(e,t,r){if(!e.visible)return;e.extras?.lights&&(e.extras.dynamicLights?r:t).push(e);let o;for(o of e.children||lr)Lm(o,t,r)}function jp(e){let{device:t,sunlight:r}=w.get(e),o=[],i=[],n;for(n of F.get(e))!n.options.nightLight||!M.get(n).visible||Lm(M.get(n),o,i);let a=t.limits.maxStorageBufferBindingSize,s=wm(o,r.staticLightGrid,a),m=wm(i,r.dynamicLightGrid,a);if(s===r.staticLightGrid&&m===r.dynamicLightGrid)return;let f=s.data.byteLength+m.data.byteLength;if(f>a)throw new Error("Streetlight grid exceeds GPU storage limit");let p=s!==r.staticLightGrid;r.lights.size<f&&(W(e,r.lights),r.lights=t.createBuffer({size:f,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST}),Rn(e),p=!0),s.data[6]=s.data.length/4,p&&t.queue.writeBuffer(r.lights,0,s.data),t.queue.writeBuffer(r.lights,s.data.byteLength,m.data),r.lightCount=s.count+m.count,r.staticLightGrid=s,r.dynamicLightGrid=m}function Wp(e,t,r,o){let i=w.get(e),n=ee.get(e),a=n.viewMatrix,s=o?.direction,m=s?s[0]:-300,f=s?s[1]:500,p=s?s[2]:300,c=a[0]*m+a[4]*f+a[8]*p,l=a[1]*m+a[5]*f+a[9]*p,u=a[2]*m+a[6]*f+a[10]*p,h=Math.hypot(c,l,u)||1,x=Math.hypot(a[4],a[5],a[6])||1;Ip(e,t,r);let g=i.uniformData;g.set(n.viewMatrix,0),g.set(n.projectionMatrix,16),K.get(e)?.matrix?g.set(K.get(e).matrix,32):(g.fill(0,32,48),g[32]=g[37]=g[42]=g[47]=1),g[48]=c/h,g[49]=l/h,g[50]=u/h,g[51]=o&&o.altitude<=0?0:1,g[52]=a[4]/x,g[53]=a[5]/x,g[54]=a[6]/x;let y=o?Math.max(0,Math.min(1,(3-o.altitude)/9)):0;g[55]=y*y*(3-2*y);let v=o?.tint;g[56]=v?v[0]:1,g[57]=v?v[1]:1,g[58]=v?v[2]:1,g[59]=0,y>0&&jp(e),i.uniformSlot=1}var ur={colorAttachments:[{view:null,resolveTarget:null,clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}],depthStencilAttachment:{view:null,depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}};var bm=[null];var we={layout:null,vertex:{module:null,entryPoint:"vertexMain",buffers:null},fragment:{module:null,entryPoint:"fragmentMain",targets:[{format:null,blend:null,writeMask:null}]},primitive:{topology:"triangle-list",cullMode:null,frontFace:null},multisample:{count:4},depthStencil:{format:"depth24plus",depthWriteEnabled:null,depthCompare:null}};var $p={color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}};function Vp(e,t,r,o){let{program:i}=t,n=i.depthTest===!1||t.ground&&e.groundOverlap?"always":"less-equal",a=`${r}:${o}:${n}`,s=i.pipelineCache.get(a);return s||(s=e.device.createRenderPipeline((we.layout=i.pipelineLayout,we.vertex.module=i.vertex,we.vertex.buffers=i.vertexBuffers,we.fragment.module=i.fragment,we.fragment.targets[0].format=e.format,we.fragment.targets[0].blend=i.transparent?$p:void 0,we.fragment.targets[0].writeMask=GPUColorWrite.ALL,we.primitive.cullMode=r,we.primitive.frontFace=o,we.depthStencil.depthWriteEnabled=i.depthWrite,we.depthStencil.depthCompare=n,we)),we.layout=null,we.vertex.module=null,we.vertex.buffers=null,we.fragment.module=null,i.pipelineCache.set(a,s)),s}function Zp(e,t,r){let o=e.uniformData,i=(t._nativeSource||t._rasterSource)?.options.cutout;if(i&&(!Number.isFinite(i.x)||!Number.isFinite(i.y)||!Number.isFinite(i.radius)||i.radius<0))throw new Error("cutout requires finite x, y and a non-negative radius in CSS pixels");o[r+36]=(i?.x??0)*e.dpr,o[r+37]=(i?.y??0)*e.dpr,o[r+38]=(i?.radius??0)*e.dpr,o[r+39]=i?.outside?1:0}function qp(e,t){let r=t.program.uniforms,o=e.uniformSlot++*256,i=e.uniformData,n=o/4;return i.set(t.worldMatrix,n),i.set(r.baseColor.value,n+16),i[n+19]=1,i[n+20]=r.metallic.value,i[n+21]=r.roughness.value,i[n+22]=r.opacity.value*(t.ground?t._appearance??1:1),i[n+23]=r.alphaCutoff.value,i.set(r.emissive.value,n+24),i[n+27]=r.occlusionStrength.value,i[n+28]=t.terrain?.[0]??0,i[n+29]=t.terrain?.[1]??0,i[n+30]=t.terrain?.[2]??0,i[n+31]=t.terrain?.[3]??0,i[n+32]=t.highlight?.[0]??0,i[n+33]=t.highlight?.[1]??0,i[n+34]=t.program.nightSparkle?i[55]:0,i[n+35]=t.ground?1:t._appearance??1,Zp(e,t,n),i[n+40]=r.strokeScale?.value??1,i[n+41]=i[n+42]=i[n+43]=0,o}var Wr={source:null,flipY:null};var wo={texture:null};var Lo=[null,null];function Hp(e,t){t.uploaded!==t.image&&(e.queue.copyExternalImageToTexture((Wr.source=t.image,Wr.flipY=!!t.flipY,Wr),(wo.texture=t.texture,wo),(Lo[0]=t.image.width,Lo[1]=t.image.height,Lo)),Wr.source=null,wo.texture=null,t.uploaded=t.image)}var bo={layout:null,entries:null};var Yp=[];var In={binding:0,resource:{buffer:null,size:176}};var Dn={binding:1,resource:{buffer:null,size:240}};var Gn={binding:2,resource:null};var Ci=[{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null}];var _i=[{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null}];function Xp(e,t,r){let{program:o}=t,i=Yp;i.length=0,In.resource.buffer=e.uniformBuffer,Dn.resource.buffer=e.uniformBuffer,i.push(In,Dn),o.terrain&&(Gn.resource=o.terrain.texture.createView(),i.push(Gn)),t.boundBuffer=e.uniformBuffer;let n=t.boundTextures||=[];n.length=r.length;let a,s,m;for(a=0;a<r.length;a++)s=o.bindings[a],m=r[a],Ci[a].binding=s.texture,Ci[a].resource=m.texture.createView(),_i[a].binding=s.sampler,_i[a].resource=m.sampler,i.push(Ci[a],_i[a]),n[a]||=[],n[a][0]=m.texture,n[a][1]=m.sampler;for(t.bindGroup=e.device.createBindGroup((bo.layout=o.bindGroupLayout,bo.entries=i,bo)),bo.layout=null,bo.entries=null,In.resource.buffer=null,Dn.resource.buffer=null,Gn.resource=null,a=0;a<r.length;a++)Ci[a].resource=null,_i[a].resource=null;i.length=0}function Jp(e,t){let{program:r}=t,{device:o}=e,i=t._textures||=[];i.length=0;let n,a,s;for(n of r.bindings){if(a=r.uniforms[n.name]?.value,!a)throw new Error(`Missing Layer3D texture: ${n.name}`);Hp(o,a),i.push(a)}let m=!t.bindGroup||t.boundBuffer!==e.uniformBuffer||i.length!==t.boundTextures.length;for(s=0;!m&&s<i.length;s++)(i[s].texture!==t.boundTextures[s][0]||i[s].sampler!==t.boundTextures[s][1])&&(m=!0);m&&Xp(e,t,i)}function Un(e,t,r,o,i){let{geometry:n}=t,{attributes:a,drawRange:s}=n,m=w.get(e),{device:f}=m,p=Vp(m,t,o,i),c=qp(m,t);Jp(m,t),r.setPipeline(p),r.setBindGroup(0,t.bindGroup,(bm[0]=c,bm)),r.setVertexBuffer(0,a.position.buffer),r.setVertexBuffer(1,a.normal.buffer),a.color&&r.setVertexBuffer(2,a.color.buffer),a.uv&&r.setVertexBuffer(3,a.uv.buffer);let l=a.instanceOffset;l&&r.setVertexBuffer(4,l.buffer);let u,h;for(u in a)h=a[u],h.needsUpdate&&(f.queue.writeBuffer(h.buffer,0,h.data),h.needsUpdate=!1,(u==="position"||u==="instanceOffset")&&(n.bounds=null));let x=a.index;x?(r.setIndexBuffer(x.buffer,x.indexFormat),r.drawIndexed(s.count,l?.count??1,s.start,0,0)):r.draw(s.count,l?.count??1,s.start,0)}function Kp(e,t,r){let o=w.get(e),i=t.beginRenderPass((ur.colorAttachments[0].view=o.colorTexture.createView(),ur.colorAttachments[0].resolveTarget=o.context.getCurrentTexture().createView(),ur.depthStencilAttachment.view=o.depthTexture.createView(),ur));ur.colorAttachments[0].view=null,ur.colorAttachments[0].resolveTarget=null,ur.depthStencilAttachment.view=null,i.setViewport(0,0,o.canvas.width,o.canvas.height,0,1),i.setBindGroup(1,o.sunlight.bindGroup);let n,a,s,m,f,p;for(n of r){if(a=n.worldMatrix,n.texture&&(n.program.uniforms.baseTexture.value=n.texture,n.program.uniforms.opacity.value=n.opacity),s=n.program.uniforms,s.roofTexture&&(s.roofTexture.value=K.get(e)?.texture||o.roofFallbackTexture),!n._frontFace||n._frontFaceWorldVersion!==n._worldMatrixVersion||n._worldMatrixVersion===void 0){if(m=a[0]*(a[5]*a[10]-a[6]*a[9])-a[4]*(a[1]*a[10]-a[2]*a[9])+a[8]*(a[1]*a[6]-a[2]*a[5]),!Number.isFinite(m)||m===0)throw new Error("Singular 3D transform");n._frontFace=m<0?"cw":"ccw",n._frontFaceWorldVersion=n._worldMatrixVersion}f=n._frontFace,p=n.program,p.transparent&&p._layerMaterial.doubleSided&&!n._nativeSource?(Un(e,n,i,"front",f),Un(e,n,i,"back",f)):Un(e,n,i,p.cullMode,f)}i.end()}var Qp=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0]);var ec=new Float32Array(20);function tc(e,t){let r=e.meshes.get(t),o=t.geometry.drawRange;if(!(r&&r.world===t._worldMatrixVersion&&r.geometry===t.geometry&&r.start===o.start&&r.count===o.count&&r.appearance===(t._appearance??1)))return!1;let i;for(i of Object.values(t.geometry.attributes))if(i.needsUpdate)return!1;return!0}function rc(e,t,r){let o=e.cache,i=e.enabled&&o?.meshes.size===t.length,n,a;if(i){for(n=0;n<r.direction.length;n++)if(r.direction[n]!==o.direction[n]){i=!1;break}}if(i){for(a of t)if(!tc(o,a)){i=!1;break}}return i}var oc={min:[0,0,0],max:[0,0,0]};var ic={position:[0,0,0],target:[0,0,0],up:[0,0,-1],x:[0,0,0],y:[0,0,0],z:[0,0,0],fov:45,aspect:1,near:1,far:500,viewMatrix:[],projectionMatrix:[],projectionViewMatrix:[]};var nc=[0,0,0];var ac=[0,0,0];function sc(e,t,r){let o=e._shadowBounds;if(!o||o.version!==e._worldMatrixVersion||o.bounds!==t){o||=e._shadowBounds={min:[1/0,1/0,1/0],max:[-1/0,-1/0,-1/0]},o.version=e._worldMatrixVersion,o.bounds=t,o.min.fill(1/0),o.max.fill(-1/0);let i,n,a,s,m,f,p;for(i=0;i<8;i++)for(n=i&1?t.max[0]:t.min[0],a=i&2?t.max[1]:t.min[1],s=i&4?t.max[2]:t.min[2],m=r[3]*n+r[7]*a+r[11]*s+r[15],f=0;f<3;f++)p=(r[f]*n+r[f+4]*a+r[f+8]*s+r[f+12])/m,o.min[f]=Math.min(o.min[f],p),o.max[f]=Math.max(o.max[f],p)}return o}function mc(e,t={min:[1/0,1/0,1/0],max:[-1/0,-1/0,-1/0]}){let{min:r,max:o}=t;r.fill(1/0),o.fill(-1/0);let i,n,a,s,m;for(i of e)for((!i.geometry.bounds||i.geometry.attributes.position.needsUpdate)&&_e(i.geometry),n=i.geometry.bounds,a=i.worldMatrix,s=sc(i,n,a),m=0;m<3;m++)r[m]=Math.min(r[m],s.min[m]),o[m]=Math.max(o[m],s.max[m]);return r[1]=Math.min(0,r[1]),t}function fc(e,t){let{min:r,max:o}=mc(e,oc),i=ic;i.viewTransform||=new DOMMatrix,i.projectionTransform||=new DOMMatrix,i.projectionViewTransform||=new DOMMatrix;let n=nc,a=ac,s,m,f,p,c,l,u=Math.max(100,Math.hypot(o[0]-r[0],o[1]-r[1],o[2]-r[2]));for(s=0;s<3;s++)i.target[s]=(r[s]+o[s])/2,i.position[s]=i.target[s]+t.direction[s]*u*2;i.far=u*5,xo(i);let h=i.viewMatrix;for(n.fill(1/0),a.fill(-1/0),s=0;s<8;s++)for(f=s&1?o[0]:r[0],p=s&2?o[1]:r[1],c=s&4?o[2]:r[2],m=0;m<3;m++)l=h[m]*f+h[m+4]*p+h[m+8]*c+h[m+12],n[m]=Math.min(n[m],l-20),a[m]=Math.max(a[m],l+20);let x=2/(a[0]-n[0]),g=2/(a[1]-n[1]),y=-1/(a[2]-n[2]),v=new Float32Array(16);for(s=0;s<16;s+=4)v[s]=h[s]*x,v[s+1]=h[s+1]*g,v[s+2]=h[s+2]*y,v[s+3]=h[s+3];return v[12]-=(a[0]+n[0])/(a[0]-n[0]),v[13]-=(a[1]+n[1])/(a[1]-n[1]),v[14]+=a[2]/(a[2]-n[2]),v}var Mm={entries:[{binding:0,visibility:null,buffer:{type:"uniform",hasDynamicOffset:!0}}]};var Bm={entries:[{binding:0,visibility:null,buffer:{type:"uniform"}}]};var Mo={layout:null,entries:[{binding:0,resource:{buffer:null}}]};var Nn={code:null};var Lt={layout:null,vertex:{module:null,entryPoint:"main",buffers:null},fragment:{module:null,entryPoint:"fragmentMain",targets:[]},primitive:{topology:"triangle-list",cullMode:"none"},depthStencil:{format:"depth32float",depthWriteEnabled:!0,depthCompare:"less",depthBias:2,depthBiasSlopeScale:2}};var Bo={bindGroupLayouts:[null,null]};var To=Object.freeze({arrayStride:12,attributes:Object.freeze([Object.freeze({shaderLocation:0,offset:0,format:"float32x3"})])});var Fn=Object.freeze({arrayStride:16,stepMode:"instance",attributes:Object.freeze([Object.freeze({shaderLocation:4,offset:0,format:"float32x4"})])});var pc=[To,Fn];var cc=[To];function Tm(e,t,r=!1){let o=r?"instancePipeline":"pipeline";if(!t[o]){t.meshLayout||(t.meshLayout=e.createBindGroupLayout((Mm.entries[0].visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,Mm)),t.depthLayout=e.createBindGroupLayout((Bm.entries[0].visibility=GPUShaderStage.VERTEX,Bm)),t.depthBindGroup=e.createBindGroup((Mo.layout=t.depthLayout,Mo.entries[0].resource.buffer=t.buffer,Mo)),Mo.layout=null,Mo.entries[0].resource.buffer=null);let i=e.createShaderModule((Nn.code=` struct Mesh{world:mat4x4<f32>,padding:array<vec4<f32>,4>,highlight:vec4<f32>};@group(0)@binding(0)var<uniform> mesh:Mesh;@group(1)@binding(0)var<uniform> matrix:mat4x4<f32>;@vertex fn main(@location(0)position:vec3<f32>${r?", @location(4) offset: vec4<f32>":""})->@builtin(position)vec4<f32>{return matrix * mesh.world * vec4<f32>(position${r?" + offset.xyz":""},1.0);}@fragment fn fragmentMain(@builtin(position)position:vec4<f32>){let noise = fract(52.9829189 * fract(dot(floor(position.xy),vec2<f32>(0.06711056,0.00583715))));if(mesh.highlight.w < 1.0 && noise >= mesh.highlight.w){discard;}}`,Nn));Nn.code=null;let n=r?pc:cc;t[o]=e.createRenderPipeline((Lt.layout=e.createPipelineLayout((Bo.bindGroupLayouts[0]=t.meshLayout,Bo.bindGroupLayouts[1]=t.depthLayout,Bo)),Lt.vertex.module=i,Lt.vertex.buffers=n,Lt.fragment.module=i,Lt)),Bo.bindGroupLayouts[0]=null,Bo.bindGroupLayouts[1]=null,Lt.layout=null,Lt.vertex.module=null,Lt.vertex.buffers=null,Lt.fragment.module=null}}var jn={colorAttachments:[],depthStencilAttachment:{view:null,depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}};var Po={layout:null,entries:[{binding:0,resource:{buffer:null,size:144}}]};var Pm=[null];function lc(e,t,r){let o=w.get(e),i=o.device,n=o.sunlight,a=t.beginRenderPass((jn.depthStencilAttachment.view=n.texture.createView(),jn));jn.depthStencilAttachment.view=null;let s=n.pipeline;a.setPipeline(s),a.setBindGroup(1,n.depthBindGroup);let m,f,p,c,l,u,h,x;for(m of r){f=m.geometry.attributes,p=f.instanceOffset,c=p?n.instancePipeline:n.pipeline,c!==s&&(s=c,a.setPipeline(s)),l=o.uniformSlot++*256,o.uniformData.set(m.worldMatrix,l/4),o.uniformData[l/4+35]=m._appearance??1,m._shadowBuffer!==o.uniformBuffer&&(m._shadowBuffer=o.uniformBuffer,m._shadowBindGroup=i.createBindGroup((Po.layout=n.meshLayout,Po.entries[0].resource.buffer=o.uniformBuffer,Po)),Po.layout=null,Po.entries[0].resource.buffer=null);for(u of Object.values(f))u.needsUpdate&&(i.queue.writeBuffer(u.buffer,0,u.data),u.needsUpdate=!1);a.setBindGroup(0,m._shadowBindGroup,(Pm[0]=l,Pm)),a.setVertexBuffer(0,f.position.buffer),p&&a.setVertexBuffer(1,p.buffer),h=f.index,x=m.geometry.drawRange,h?(a.setIndexBuffer(h.buffer,h.indexFormat),a.drawIndexed(x.count,p?.count??1,x.start,0,0)):a.draw(x.count,p?.count??1,x.start,0)}a.end()}var Ei={size:[null,null],format:"depth32float",usage:null};function Wn(e,t){let r=w.get(e).device,o=w.get(e).sunlight;o.size!==t&&(o.texture&&W(e,o.texture),o.size=t,o.texture=r.createTexture((Ei.size[0]=t,Ei.size[1]=t,Ei.usage=GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC,Ei)),Rn(e))}function uc(e,t,r,o){let i=w.get(e),n=i.device,a=i.sunlight;if(!r.length||!o||o.altitude<3){if(!a.enabled)return;n.queue.writeBuffer(a.buffer,0,Qp),a.enabled=!1,a.cache=null;return}if(rc(a,r,o))return;let s=ec;a.enabled=!0,Wn(e,Math.min(2048,n.limits.maxTextureDimension2D)),s.set(fc(r,o)),s[16]=1,n.queue.writeBuffer(a.buffer,0,s),Tm(n,a);let m;for(m of r)if(m.geometry.attributes.instanceOffset){Tm(n,a,!0);break}lc(e,t,r);let f=new Map,p;for(p of r)f.set(p,{world:p._worldMatrixVersion,geometry:p.geometry,start:p.geometry.drawRange.start,count:p.geometry.drawRange.count,appearance:p._appearance??1});a.cache={direction:[...o.direction],meshes:f}}function $n(e){let t=ft.get(e);Nt.delete(e),ft.set(e,null),!Nt.size&&t!=null&&cancelAnimationFrame(t)}var Wt=new WeakMap;var Oi=new WeakMap;var zi=new WeakMap;var pe=new WeakMap;var Vn=new WeakMap;function q(e,t){e.parent&&e.parent.children.splice(e.parent.children.indexOf(e),1),e.parent=t,t&&t.children.push(e)}function So(e,t){Vn.get(e)?.abort();let r=I.get(e).get(t);r&&(q(r,null),E(e),r.texture!==t.texture&&W(e,r.texture.texture),I.get(e).delete(t))}function ko(e,t){let r=`${t.coords.z}/${t.coords.x}/${t.coords.y}`;I.get(e).get(r)===t&&(I.get(e).delete(r),Ee.set(e,(Ee.get(e)||0)+1),t.request.abort(),pe.get(e)&&So(pe.get(e),t),t.mesh&&q(t.mesh,null),t.texture&&W(e,t.texture.texture),t.image?.close(),e.fire("tileunload",{tile:t,coords:t.coords}),E(e))}function Co(e){let t=sr.get(e),r=performance.now();if(Oi.get(e)===Ee.get(e)&&zi.get(e)===t&&r<Wt.get(e))return Number.isFinite(Wt.get(e));Oi.set(e,Ee.get(e)),zi.set(e,t),Wt.set(e,1/0);let o=[],i,n,a,s,m,f;for(i of t)n=I.get(e).get(i),n?.done&&r-n.loadedAt<250&&Wt.set(e,Math.min(Wt.get(e),n.loadedAt+250)),(!n?.done||r-n.loadedAt<250)&&(a=i.split("/"),o.push({z:Number(a[0]),x:Number(a[1]),y:Number(a[2])}));for([i,n]of I.get(e))if(!t.has(i)){s=!1;for(m of o)if(f=Math.min(m.z,n.coords.z),Math.floor(m.x/2**(m.z-f))===Math.floor(n.coords.x/2**(n.coords.z-f))&&Math.floor(m.y/2**(m.z-f))===Math.floor(n.coords.y/2**(n.coords.z-f))){s=!0;break}s||ko(e,n)}return Number.isFinite(Wt.get(e))}L();function _o(e){return de.get(e.source)===e&&e.map.hasLayer(e.source)}function dc(e){let t=Be.get(e.map);if(e.terrainStream!==t&&(e.terrainStream=t,e.terrainRequests=t?new Map:null),e.terrainRequests){let r;for(r of e.terrainRequests.keys())e.source._tiles[r]||e.terrainRequests.delete(r)}return t}L();var $t=Object.freeze([1,1,1]);var $r=new WeakMap;L();function bt(e,t,r,o){let{source:i,marker:n,paneOrder:a,order:s}=e;t.program.uniforms.baseColor.value=r,t.program.uniforms.opacity.value=o,i instanceof d.GridLayer&&(t.opacity=o);let m=n?i._zIndex+($r.get(i)||0):i.options.zIndex;t.renderOrder=a*1e6+(m||0)*1e3+s,t._nativeSource=i,t._nativeUsed=!0}var hc=Object.freeze([0,2,1,1,2,3]);var Sm=Object.freeze([0,0,1,0,0,1,1,1]);var gc=Object.freeze({minFilter:"linear",magFilter:"linear"});function Ge(e,t){if(!t)return;q(t,null),E(e);let r;for(r of Object.values(t.geometry.attributes))r.buffer.destroy()}async function xc(e,t,r,o,i,n,a){let s,m=o;try{if(o instanceof HTMLImageElement){let f=document.createElement("canvas");f.width=n,f.height=a;let p=f.getContext("2d");if(!p)throw new Error("Unable to rasterize SVG image");p.drawImage(o,0,0,n,a),m=f}if(s=await createImageBitmap(m),!_o(e)||e.textures.get(t)!==r)return;i.queue.copyExternalImageToTexture({source:s},{texture:r.texture},[n,a]),r.uploaded=o,r.pending=!1,De(e)}catch(f){e.failed=!0,e.source.fire("error",{error:f})}finally{s?.close()}}function vc(e,t,r,o,i,n,a){try{i.queue.copyExternalImageToTexture({source:o},{texture:r.texture},[n,a])}catch(s){throw r.texture.destroy(),e.textures.delete(t),s}r.uploaded=o}function Zn(e,t,r){if(!(r instanceof HTMLImageElement)&&!(r instanceof HTMLCanvasElement))throw new Error("WebGPU native raster layers require image or canvas tiles");let{backend:o,textures:i,meshes:n}=e,a=i.get(t),s=r.currentSrc||r.src;if(!a||a.image!==r||a.url!==s){a&&(Ge(o,n.get(t)),n.delete(t),W(o,a.texture),i.delete(t));let m=r.naturalWidth||r.width,f=r.naturalHeight||r.height;if(!m||!f)return;let{device:p}=w.get(o);a={device:p,image:r,url:s,format:"rgba8unorm",uploaded:null,texture:p.createTexture({size:[m,f],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:p.createSampler(gc)},i.set(t,a),r instanceof HTMLCanvasElement||s.startsWith("data:image/svg+xml")?(a.pending=!0,xc(e,t,a,r,p,m,f)):vc(e,t,a,r,p,m,f)}return a.used=!0,a.uploaded===r?a:void 0}L();L();var Eo=Object.freeze({});var qn={size:null,usage:null};var Mt={value:0};function Oe(){return{position:[0,0,0],rotation:[0,0,0],scale:[1,1,1],worldMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],children:[],highlightRange:[0,0],visible:!0}}var Hn={code:null};var Yn={code:null};var Oo={bindGroupLayouts:[null,null]};var wc=" fn demSample(pixel:vec2<i32>)-> f32{if(any(pixel < vec2<i32>(0))|| any(pixel >= vec2<i32>(textureDimensions(dem)))){return -1e9;}return textureLoad(dem,pixel,0).r;}fn elevation(pixel:vec2<f32>,base:f32)-> f32{let p = pixel - vec2<f32>(0.5);let f = fract(p);let i = vec2<i32>(floor(p));let v00 = demSample(i);let v10 = demSample(i + vec2<i32>(1,0));let v01 = demSample(i + vec2<i32>(0,1));let v11 = demSample(i + vec2<i32>(1,1));if(v00 > -1000.0 && v10 > -1000.0 && v01 > -1000.0 && v11 > -1000.0){return mix(mix(v00,v10,f.x),mix(v01,v11,f.x),f.y);}if(v00 > -1000.0){return v00;}if(v10 > -1000.0){return v10;}if(v01 > -1000.0){return v01;}if(v11 > -1000.0){return v11;}return base;}";var Lc=Object.freeze({arrayStride:12,attributes:Object.freeze([Object.freeze({shaderLocation:1,offset:0,format:"float32x3"})])});var bc=Object.freeze({arrayStride:12,attributes:Object.freeze([Object.freeze({shaderLocation:2,offset:0,format:"float32x3"})])});var Mc=Object.freeze({arrayStride:8,attributes:Object.freeze([Object.freeze({shaderLocation:3,offset:0,format:"float32x2"})])});var Xn={entries:null};var Bc=[];var km={binding:0,visibility:null,buffer:{type:"uniform",hasDynamicOffset:!0}};var Cm={binding:1,visibility:null,buffer:{type:"uniform"}};var _m={binding:2,visibility:null,texture:{sampleType:"unfilterable-float",viewDimension:"2d"}};var Tc=[{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}},{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}},{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}},{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}},{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}}];var Pc=[{binding:null,visibility:null,sampler:{type:"filtering"}},{binding:null,visibility:null,sampler:{type:"filtering"}},{binding:null,visibility:null,sampler:{type:"filtering"}},{binding:null,visibility:null,sampler:{type:"filtering"}},{binding:null,visibility:null,sampler:{type:"filtering"}}];function Sc(e,t){let r=Bc;r.length=0,km.visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,Cm.visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,r.push(km,Cm),t.hasTerrain&&(_m.visibility=GPUShaderStage.VERTEX,r.push(_m));let o,i,n=0;for(o of t.bindings)i=Tc[n],i.binding=o.texture,i.visibility=GPUShaderStage.FRAGMENT,r.push(i),i=Pc[n++],i.binding=o.sampler,i.visibility=GPUShaderStage.FRAGMENT,r.push(i);let a=e.createBindGroupLayout((Xn.entries=r,Xn));return Xn.entries=null,a}function Jn(e){let t={baseColor:{value:e.color||[1,1,1]},metallic:{value:e.metallic??0},roughness:{value:e.roughness??.85},opacity:{value:e.opacity??1},alphaCutoff:{value:e.alphaCutoff??.5},occlusionStrength:{value:e.occlusionStrength??1},emissive:{value:e.emissive||[0,0,0]}};return e.baseTexture&&(t.baseTexture={value:e.baseTexture}),e.metalTexture&&(t.metalTexture={value:e.metalTexture}),e.emissiveTexture&&(t.emissiveTexture={value:e.emissiveTexture}),e.occlusionTexture&&(t.occlusionTexture={value:e.occlusionTexture}),(e.roofTexture||e.wallTexture)&&(t.roofTexture={value:null}),e.nativeStroke&&(t.strokeScale={value:1}),t}function zo(e,t,r){if(!r)return"";let o=3+e.length*2;return e.push({name:t,texture:o,sampler:o+1}),`@group(0)@binding(${o})var ${t}:texture_2d<f32>;@group(0)@binding(${o+1})var ${t}Sampler:sampler;`}function kc(e){let t,r;for(t of["roofTexture","wallTexture"])if(r=e[t],r!==void 0&&typeof r!="boolean"&&(!Number.isFinite(r)||r<0||r>1))throw new Error(`${t} must be a boolean or a finite number between 0 and 1`)}function Cc(e){let t=Number(e.roofTexture??0);return` output.roofUv =(frame.roofMatrix * world).xz;output.roof = select(0.0,select(${Number(e.wallTexture??0).toFixed(8)},${t.toFixed(8)},input.normal.y >= 0.5),((${!!e.roofTexture} && input.normal.y >= 0.5)||(${!!e.wallTexture} && abs(input.normal.y)< 0.5))&& !highlighted);`}function _c(e){return{position:e.nativeStroke?"position = input.normal + (input.position - input.normal) * u.nativeStroke.x;":"",normal:e.nativeStroke?"let sourceNormal = vec3<f32>(0.0, 1.0, 0.0);":"let sourceNormal = input.normal;"}}function Ec(e,t,r,o,i,n){let a=e.instanced?" + input.instanceOffset.xyz":"",s=_c(e);return` struct Mesh{worldMatrix:mat4x4<f32>,baseColor:vec4<f32>,material:vec4<f32>,emissive:vec4<f32>,terrain:vec4<f32>,highlight:vec4<f32>,cutout:vec4<f32>,nativeStroke:vec4<f32>,};struct Frame{viewMatrix:mat4x4<f32>,projectionMatrix:mat4x4<f32>,roofMatrix:mat4x4<f32>,lightDirection:vec4<f32>,skyDirection:vec4<f32>,atmosphereTint:vec4<f32>,};@group(0)@binding(0)var<uniform> u:Mesh;@group(0)@binding(1)var<uniform> frame:Frame;struct Solar{matrix:mat4x4<f32>,params:vec4<f32>};@group(1)@binding(0)var<uniform> solar:Solar;${o?`@group(0)@binding(2)var dem:texture_2d<f32>;${r}`:""} struct VertexInput{@location(0)position:vec3<f32>,@location(1)normal:vec3<f32>,${e.instanced?"@location(4) instanceOffset: vec4<f32>,":""} ${e.vertexColors?"@location(2) color: vec3<f32>,":""} ${i?"@location(3) uv: vec2<f32>,":""}};struct VertexOutput{@builtin(position)position:vec4<f32>,@location(0)color:vec3<f32>,@location(1)normal:vec3<f32>,@location(2)viewPosition:vec3<f32>,@location(6)shadowPosition:vec4<f32>,@location(7)worldPosition:vec3<f32>,${t?"@location(8) localPosition: vec3<f32>,":""} ${i?"@location(3) uv: vec2<f32>,":""} ${n?"@location(4) roofUv: vec2<f32>, @location(5) roof: f32,":""}};@vertex fn vertexMain(input:VertexInput,@builtin(vertex_index)vertexIndex:u32)-> VertexOutput{var output:VertexOutput;var position = input.position${a};${s.position} ${o?"position.y = elevation(u.terrain.xy + input.uv * u.terrain.z, u.terrain.w) - u.terrain.w;":""} let featureVertex = f32(vertexIndex)${e.instanced?" + input.instanceOffset.w":""};let highlighted = featureVertex >= u.highlight.x && featureVertex < u.highlight.y;output.color = ${e.vertexColors?"select(input.color, vec3<f32>(72.0 / 255.0, 217.0 / 255.0, 1.0), highlighted)":"u.baseColor.rgb"};let m = mat3x3<f32>(u.worldMatrix[0].xyz,u.worldMatrix[1].xyz,u.worldMatrix[2].xyz);${s.normal} let normal =(cross(m[1],m[2])* sourceNormal.x + cross(m[2],m[0])* sourceNormal.y + cross(m[0],m[1])* sourceNormal.z)/ determinant(m);output.normal =(frame.viewMatrix * vec4<f32>(normal,0.0)).xyz;let world = u.worldMatrix * vec4<f32>(position,1.0);output.shadowPosition = solar.matrix * world;output.worldPosition = world.xyz / world.w;${t?`output.localPosition = input.position${a};`:""} let viewPosition = frame.viewMatrix * world;output.viewPosition = viewPosition.xyz;${i?"output.uv = input.uv;":""} ${n?Cc(e):""} output.position = frame.projectionMatrix * viewPosition;return output;}`}function Oc(e,t,r){return` var normal = normalize(input.normal)* select(-1.0,1.0,frontFacing);let texel = ${t?"textureSample(baseTexture, baseTextureSampler, input.uv)":"vec4<f32>(1.0)"};let alpha = u.material.z * texel.a;${e.alphaMode==="MASK"?"if (alpha < u.material.w) { discard; }":""} ${e.alphaMode==="BLEND"?"if (alpha < 0.01) { discard; }":""} var base = ${e.vertexColors?"toLinear(min(input.color, vec3<f32>(1.0)))":"input.color"} * ${e.baseTexture?.srgb?"texel.rgb":"toLinear(texel.rgb)"};${r?" if(input.roof > 0.0 && all(input.roofUv >= vec2<f32>(0.0))&& all(input.roofUv <= vec2<f32>(1.0))){let roof = textureSampleLevel(roofTexture,roofTextureSampler,input.roofUv,0.0);base = mix(base,toLinear(roof.rgb),roof.a * input.roof);}":""}`}function zc(e,t,r,o,i,n,a){return e.unlit?` let rasterTexel = ${r?"textureSample(baseTexture, baseTextureSampler, input.uv)":"vec4<f32>(input.color, 1.0)"};return vec4<f32>(toSRGB(toLinear(rasterTexel.rgb)*(frame.atmosphereTint.rgb *(0.55 + 0.45 * sunlight)+ artificial)),${e.alphaMode==="BLEND"?"u.material.z * rasterTexel.a":"1.0"});`:`${Oc(e,r,a)} let mr = ${o?"textureSample(metalTexture, metalTextureSampler, input.uv)":"vec4<f32>(1.0)"};let metal = clamp(u.material.x * mr.b,0.0,1.0);let rough = clamp(u.material.y * mr.g,0.08,1.0);let view = normalize(-input.viewPosition);let halfVector = normalize(view + frame.lightDirection.xyz);let nl = max(dot(normal,frame.lightDirection.xyz),0.0)* frame.lightDirection.w * sunlight;let nv = max(dot(normal,view),0.001);let nh = max(dot(normal,halfVector),0.0);let vh = max(dot(view,halfVector),0.0);let a2 = pow(rough,4.0);let d = a2 / max(PI * pow(nh * nh *(a2 - 1.0)+ 1.0,2.0),0.0001);let gv = nl * sqrt(nv * nv *(1.0 - a2)+ a2);let gl = nv * sqrt(nl * nl *(1.0 - a2)+ a2);let visibility = 0.5 / max(gv + gl,0.0001);let f0 = mix(vec3<f32>(0.04),base,metal);let fresnel = f0 +(1.0 - f0)* pow(1.0 - vh,5.0);let specular = d * visibility * fresnel;let diffuse =(1.0 - metal)* base / PI;let sky = dot(normal,frame.skyDirection.xyz)* 0.5 + 0.5;let ambient = mix(toLinear(vec3<f32>(0.455,0.412,0.322)),vec3<f32>(1.0),sky)*(2.0 / PI);let ao = ${n?"mix(1.0, textureSample(occlusionTexture, occlusionTextureSampler, input.uv).r, u.emissive.w)":"1.0"};${t?" let lattice =(fract(input.localPosition / 2.5)- 0.5)* 2.5;let pointGlow =(1.0 - smoothstep(0.16,0.42,length(lattice)))* u.highlight.z;":""} let glow = ${t?"vec3<f32>(3.0, 2.6, 1.8) * pointGlow +":""}${e.vertexColors?" max(input.color - vec3<f32>(1.0), vec3<f32>(0.0)) * (0.3 + 5.0 * frame.skyDirection.w) +":""} u.emissive.rgb * ${i?e.emissiveTexture.srgb?"textureSample(emissiveTexture, emissiveTextureSampler, input.uv).rgb":"toLinear(textureSample(emissiveTexture, emissiveTextureSampler, input.uv).rgb)":"vec3<f32>(1.0)"};var color = ambient * base *(1.0 - metal)* ao +(diffuse + specular)* nl * toLinear(vec3<f32>(1.0,0.937,0.835))* 3.0 + glow;${e.vertexColors?"color = base * (ambient + toLinear(vec3<f32>(1.0, 0.937, 0.835)) * (3.0 / PI) * nl) + glow;":""} color =(color - glow)* frame.atmosphereTint.rgb + base * artificial *(1.0 - metal * 0.5)+ glow;appearance(input.position.xy);return vec4<f32>(toSRGB(color),${e.alphaMode==="BLEND"?"alpha":"1.0"});`}function Ac(e=Eo,t=!1,r=""){let o=!!e.baseTexture,i=!!e.metalTexture,n=!!e.emissiveTexture,a=!!e.occlusionTexture,s=!!(e.roofTexture||e.wallTexture);kc(e);let m=!!e.terrain,f=o||i||n||a||e.nightLight,p=Ec(e,t,r,m,f,s),c=[],l=zo(c,"baseTexture",o),u=zo(c,"metalTexture",i),h=zo(c,"emissiveTexture",n),x=zo(c,"occlusionTexture",a),g=zo(c,"roofTexture",s),y=` struct Mesh{worldMatrix:mat4x4<f32>,baseColor:vec4<f32>,material:vec4<f32>,emissive:vec4<f32>,terrain:vec4<f32>,highlight:vec4<f32>,cutout:vec4<f32>,nativeStroke:vec4<f32>,};struct Frame{viewMatrix:mat4x4<f32>,projectionMatrix:mat4x4<f32>,roofMatrix:mat4x4<f32>,lightDirection:vec4<f32>,skyDirection:vec4<f32>,atmosphereTint:vec4<f32>,};struct Solar{matrix:mat4x4<f32>,params:vec4<f32>,};@group(0)@binding(0)var<uniform> u:Mesh;@group(0)@binding(1)var<uniform> frame:Frame;@group(1)@binding(0)var<uniform> solar:Solar;@group(1)@binding(1)var shadowTexture:texture_depth_2d;@group(1)@binding(2)var shadowSampler:sampler_comparison;@group(1)@binding(3)var<storage,read> lightGrid:array<vec4<f32>>;${l}${u}${h}${x}${g} struct FragmentInput{@builtin(position)position:vec4<f32>,@location(0)color:vec3<f32>,@location(1)normal:vec3<f32>,@location(2)viewPosition:vec3<f32>,@location(6)shadowPosition:vec4<f32>,@location(7)worldPosition:vec3<f32>,${t?"@location(8) localPosition: vec3<f32>,":""} ${f?"@location(3) uv: vec2<f32>,":""} ${s?"@location(4) roofUv: vec2<f32>, @location(5) roof: f32,":""}};const PI:f32 = 3.14159265;fn toLinear(c:vec3<f32>)-> vec3<f32>{return select(c / 12.92,pow((c + vec3<f32>(0.055))/ 1.055,vec3<f32>(2.4)),c >= vec3<f32>(0.04045));}fn toSRGB(c:vec3<f32>)-> vec3<f32>{return select(c * 12.92,1.055 * pow(max(c,vec3<f32>(0.0)),vec3<f32>(1.0 / 2.4))- vec3<f32>(0.055),c >= vec3<f32>(0.0031308));}fn sunVisibility(position:vec4<f32>)-> f32{let p = position.xyz / position.w;let uv = vec2<f32>(p.x * 0.5 + 0.5,0.5 - p.y * 0.5);if(solar.params.x < 0.5 || any(uv < vec2<f32>(0.0))|| any(uv > vec2<f32>(1.0))|| p.z < 0.0 || p.z > 1.0){return 1.0;}return textureSampleCompareLevel(shadowTexture,shadowSampler,uv,p.z - 0.0003);}fn gridLighting(position:vec3<f32>,normal:vec3<f32>,offset:u32)-> vec3<f32>{let grid = lightGrid[offset];if(grid.w < 1.0){return vec3<f32>(0.0);}let cell = vec2<i32>(floor((position.xz - grid.xy)/ grid.z));if(any(cell < vec2<i32>(0))|| cell.x >= i32(grid.w)|| cell.y >= i32(lightGrid[offset + 1u].x)){return vec3<f32>(0.0);}let header = lightGrid[offset + 2u + u32(cell.y)* u32(grid.w)+ u32(cell.x)];var light = vec3<f32>(0.0);for(var i = 0u;i < u32(header.y);i++){let source = lightGrid[offset + u32(header.x)+ i * 2u];let colour = lightGrid[offset + u32(header.x)+ i * 2u + 1u];let delta = source.xyz - position;let distance2 = max(dot(delta,delta),1.0);let falloff = max(0.0,1.0 - distance2 /(source.w * source.w));let lambert = max(0.0,dot(normal,delta / sqrt(distance2)));light += toLinear(colour.rgb)* colour.w * lambert * falloff * falloff / distance2;}return light;}fn localLighting(position:vec3<f32>,normal:vec3<f32>)-> vec3<f32>{if(frame.skyDirection.w <= 0.0){return vec3<f32>(0.0);}var light = gridLighting(position,normal,0u);let moving = u32(lightGrid[1].z);if(moving > 0u){light += gridLighting(position,normal,moving);}return light * frame.skyDirection.w;}fn appearance(position:vec2<f32>){let noise = fract(52.9829189 * fract(dot(floor(position),vec2<f32>(0.06711056,0.00583715))));if(u.highlight.w < 1.0 && noise >= u.highlight.w){discard;}}@fragment fn fragmentMain(input:FragmentInput,@builtin(front_facing)frontFacing:bool)->@location(0)vec4<f32>{let cutoutDistance = distance(input.position.xy,u.cutout.xy);if(select((cutoutDistance < u.cutout.z),(cutoutDistance >= u.cutout.z),u.cutout.w > 0.0)){discard;}${e.nightLight?" if(input.uv.x <= 2.0){let radial = max(0.0,1.0 - dot(input.uv,input.uv));let alpha = radial * radial * frame.skyDirection.w * 0.65;if(alpha < 0.005){discard;}appearance(input.position.xy);return vec4<f32>(input.color,alpha);}":""} let sunlight = sunVisibility(input.shadowPosition);let worldNormal = normalize(transpose(mat3x3<f32>(frame.viewMatrix[0].xyz,frame.viewMatrix[1].xyz,frame.viewMatrix[2].xyz))* normalize(input.normal))* select(-1.0,1.0,frontFacing);let artificial = localLighting(input.worldPosition,worldNormal);${zc(e,t,o,i,n,a,s)}}`;return{vertex:p,fragment:y,bindings:c,textured:f,hasTerrain:m}}async function Rc(e,t){let r,o;try{let i=await Promise.all(t),n="",a=0;for(r of i)for(o of r.messages)o.type==="error"&&(n+=`${a++?`
|
|
2
|
+
`:""}${o.message}`);a&&e.fire("error",{error:new Error(`Unable to compile Layer3D WGSL: ${n}`)})}catch(i){e.fire("error",{error:i})}}function Ue(e,t=Eo){let r=w.get(e),{device:o}=r,i=Ac(t,!!e.options.nightSparkle,t.terrain?wc:""),n=o.createShaderModule((Hn.code=i.vertex,Hn));Hn.code=null;let a=o.createShaderModule((Yn.code=i.fragment,Yn));Yn.code=null,Rc(e,[n.getCompilationInfo(),a.getCompilationInfo()]);let s=[To,Lc,t.vertexColors?bc:null,i.textured?Mc:null];t.instanced&&s.push(Fn);let m=Sc(o,i),f=o.createPipelineLayout((Oo.bindGroupLayouts[0]=m,Oo.bindGroupLayouts[1]=r.sunlight.layout,Oo));Oo.bindGroupLayouts[0]=null,Oo.bindGroupLayouts[1]=null;let p=Jn(t);return{device:o,vertex:n,fragment:a,bindings:i.bindings,vertexBuffers:s,bindGroupLayout:m,pipelineLayout:f,pipelineCache:new Map,cullMode:t.doubleSided?"none":"back",transparent:t.alphaMode==="BLEND",depthWrite:t.depthWrite??t.alphaMode!=="BLEND",depthTest:t.depthTest!==!1,terrain:t.terrain,nightLight:!!t.nightLight,nightSparkle:!!e.options.nightSparkle,uniforms:p,_layerMaterial:t}}function dr(e,t,r=Eo,o=0,i){let{device:n}=w.get(e),a={},s,m,f,p,c;for([s,m]of Object.entries(t))f=new Float32Array(m),p=s==="uv"?2:3,c=n.createBuffer((qn.size=Math.max(4,f.byteLength),qn.usage=GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST|o,qn)),n.queue.writeBuffer(c,0,f),a[s]={size:p,data:f,count:f.length/p,buffer:c};let l={...Oe(),device:n,geometry:{device:n,attributes:a,drawRange:{start:0,count:a.position.count}},program:i||Ue(e,{vertexColors:!0,doubleSided:!0,...r}),id:Mt.value++,renderOrder:0,extras:{}};return q(l,M.get(e)),E(e),l}var Em=new WeakMap;function Om(e,t){let r=w.get(e),o=Em.get(r);o||(o=new Map,Em.set(r,o));let i=`${!!t.baseTexture}:${!!t.nativeStroke}:${!!t.depthWrite}`,n=o.get(i);return n||(n=Ue(e,{doubleSided:!0,...t}),o.set(i,n)),{...n,uniforms:Jn(t),_layerMaterial:t}}function Dc(e,t,r,o,i,n,a,s,m){let{backend:f,source:p,meshes:c}=e,l=m?e.strokeAnchors:[],u,h=c.get(t);if(!m)for(u=0;u<r.length;u++)l.push(u%3===1?1:0);let x={position:r,normal:l};a&&(x.uv=a);let g={vertexColors:!1,color:o,opacity:i,unlit:!0,alphaMode:"BLEND",depthWrite:s,nativeStroke:m};return n&&(g.baseTexture=n),h&&Ge(f,h),h=dr(f,x,g,0,p instanceof d.GridLayer?(s?e.terrainRasterProgram:e.rasterProgram)||Om(f,g):Om(f,g)),p instanceof d.GridLayer&&(s?e.terrainRasterProgram||=h.program:e.rasterProgram||=h.program,h.texture=n),c.set(t,h),h}function Gc(e){let t=e.geometry.attributes,r=t.position.data,o=t.normal.data,i,n=0;for(i=0;i<r.length;i+=3)n=Math.max(n,Math.hypot(r[i]-o[i],r[i+1]-o[i+1],r[i+2]-o[i+2]));e.geometry.nativeStrokeRadius=n}function Ao(e,t,r,o,i,n,a,s=!1){let{source:m,meshes:f}=e;if(!r.length)return;let p=t==="stroke"&&!!e.strokeCoordinates&&m.options.interactive===!1,c=f.get(t);if(!c||c.geometry.attributes.position.data.length!==r.length||m instanceof d.GridLayer&&c.program.depthWrite!==s||c.program.uniforms.baseTexture?.value!==n||!!c.program._layerMaterial.nativeStroke!==p)c=Dc(e,t,r,o,i,n,a,s,p);else{let l=c.geometry.attributes.position;l.data.set(r),l.needsUpdate=!0,c.geometry.bounds=null,p&&(c.geometry.attributes.normal.data.set(e.strokeAnchors),c.geometry.attributes.normal.needsUpdate=!0)}return p&&Gc(c),c.program.uniforms.strokeScale&&(c.program.uniforms.strokeScale.value=1),bt(e,c,o,i),c}function Ro(e,t,r,o,i){let n=Zn(e,t,r);if(!n)return;let a=hc,s=[],m=[],f;for(f of a)s.push(...o[f]),m.push(Sm[f*2],Sm[f*2+1]);return Ao(e,t,s,$t,i,n,m)}var D=new WeakMap;$();function Vt(e,t){let{map:r,backend:o}=e,i=r.options.crs,n=i.project(D.get(o)),a=i.project(t),s=Math.cos(D.get(o).lat*B);return[(a.x-n.x)*s,0,-(a.y-n.y)*s]}function Kn(e,t){let r=[],o,i;for(o=0;o<4;o++)i=o===0?t.getNorthWest():o===1?t.getNorthEast():o===2?t.getSouthWest():t.getSouthEast(),r.push(Vt(e,i));return r}function Uc(e,t,r,o){let i=e.textures.get(t),n=e.meshes.get(t);if(n&&!n._terrainRequest&&i?.image===r.el&&i.url===(r.el.currentSrc||r.el.src))return i.used=!0,bt(e,n,$t,o),n;let[a,s]=e.source._tileCoordsToNwSe(r.coords);return Ro(e,t,r.el,Kn(e,new d.LatLngBounds(a,s)),o)}async function Nc(e,t,r,o){let i=2**t;r=(r%i+i)%i,o=Math.max(0,Math.min(i-1,o));let n=`${t}/${r}/${o}`,a=e.terrainCache.get(n);a?(e.terrainCache.delete(n),e.terrainCache.set(n,a)):(a={promise:e.layer.options.getTile(t,r,o,e.terrainController.signal)},e.terrainCache.set(n,a));try{if(a.data||(a.data=await a.promise),!(a.data instanceof Float32Array)||a.data.length!==65536)throw new Error(`Invalid elevation tile ${n}: expected 256x256 Float32Array`);if(!a.range){let s=1/0,m=-1/0,f;for(f of a.data)!Number.isFinite(f)||f<=-1e3||(s=Math.min(s,f),m=Math.max(m,f));a.range=[s,m]}}catch(s){throw e.terrainCache.get(n)===a&&e.terrainCache.delete(n),s}for(;e.terrainCache.size>256;)e.terrainCache.delete(e.terrainCache.keys().next().value);return a.data}async function Fc(e,t,r,o){let{x:i,y:n,z:a}=r.coords,s=o.stream,m=[],f=new Map,p,c,l=0;try{for(c=-1;c<=1;c++)for(p=-1;p<=1;p++)m.push(Nc(s,a,i+p,n+c));let u=await Promise.all(m);if(e.disposed||s.terrainController.signal.aborted||e.source._tiles[t]!==r||e.terrainRequests.get(t)!==o)return;for(c=-1;c<=1;c++)for(p=-1;p<=1;p++)f.set(`${i+p}/${n+c}`,u[l++]);o.tiles=f,De(e),e.map.fire("terrainchange"),e.source._update()}catch(u){!e.disposed&&!s.terrainController.signal.aborted&&e.source._tiles[t]===r&&(o.error=u,s.layer.fire("error",{error:u,coords:r.coords}))}}function jc(e,t,r,o,i){let n=Zn(e,t,r.el);if(!n)return;let{x:a,y:s,z:m}=r.coords,f=32,p=Vt(e,e.map.unproject([a*256,s*256],m)),c=Vt(e,e.map.unproject([(a+1)*256,(s+1)*256],m)),l=[],u=[],h=[],x=M.get(e.backend).position[1],g,y,v,S,T,P,A,Q,N,G;for(g=0;g<=f;g++)for(y=0;y<=f;y++){if(v=y/f,S=g/f,T=fr({x:(a+v)*256,y:(s+S)*256},o.tiles),!Number.isFinite(T))throw new Error(`Missing elevation sample in ${m}/${a}/${s}`);l.push([p[0]+(c[0]-p[0])*v,T-x,p[2]+(c[2]-p[2])*S,v,S])}for(g=0;g<f;g++)for(y=0;y<f;y++){P=g*(f+1)+y,A=P+1,Q=P+f+1,N=Q+1;for(G of[P,Q,A,A,Q,N])u.push(l[G][0],l[G][1],l[G][2]),h.push(l[G][3],l[G][4])}let V=Ao(e,t,u,$t,i,n,h,!0);return V._terrainRequest=o,V}function Wc(e,t,r,o){let i=e.textures.get(t),n=e.meshes.get(t),a=e.terrainRequests.get(t);return(!a||a.tile!==r)&&(a={tile:r,stream:e.terrainStream},e.terrainRequests.set(t,a),Fc(e,t,r,a)),a.tiles?n&&n._terrainRequest===a&&i?.image===r.el&&i.url===(r.el.currentSrc||r.el.src)?(i.used=!0,bt(e,n,$t,o),n):jc(e,t,r,a,o):(n&&i?.image===r.el&&(i.used=!0,bt(e,n,$t,o)),null)}function $c(e){let t,r,o;for([t,r]of e.meshes)e.source._tiles[t]||!r._terrainRequest||(o=e.textures.get(t),o&&(o.used=!0,r._nativeUsed=!0))}function Vc(e){let{source:t}=e,r=dc(e),o,i,n,a,s=!1;for(o in t._tiles)if(Object.hasOwn(t._tiles,o)){if(i=t._tiles[o],!i.loaded||i.el instanceof HTMLImageElement&&!i.el.naturalWidth){s=!!r;continue}n=(t.options.opacity??1)*(i._gpuOpacity??1),a=e.terrainRequests?Wc(e,o,i,n):Uc(e,o,i,n),e.terrainRequests&&!e.terrainRequests.get(o).tiles&&(s=!0),a&&(a.renderOrder+=i.coords.z/100)}r&&(s||!Object.keys(t._tiles).length)&&$c(e)}function Zc(e){let{source:t}=e;t._image?.complete&&t._image.naturalWidth&&Ro(e,"image",t._image,Kn(e,t.getBounds()),t.options.opacity??1)}var qc=Object.freeze(["m11","m12","m13","m14","m21","m22","m23","m24","m31","m32","m33","m34","m41","m42","m43","m44"]);L();$();Z();function Qn(e,t,r){let o=e.options.rotation+(e.options.rotateWithView?k(e._map)*B:0);e.options.keepUpright&&Math.cos(o)<0&&(o+=Math.PI);let i=e.options.scale;return new d.Point((t*Math.cos(o)-r*Math.sin(o))*i,(t*Math.sin(o)+r*Math.cos(o))*i)}function Ai(e,t,r,o,i,n){return e.x=t.m11*r+t.m21*o+t.m31*i+t.m41*n,e.y=t.m12*r+t.m22*o+t.m32*i+t.m42*n,e.z=t.m13*r+t.m23*o+t.m33*i+t.m43*n,e.w=t.m14*r+t.m24*o+t.m34*i+t.m44*n,e}function Hc(e,t,r){let o=e.source.options.icon.options,i=o[t==="shadow"?"shadowSize":"iconSize"],n=e.markerImageBounds||=[0,0,0,0];n[0]=i?i.x??i[0]:r.naturalWidth,n[1]=i?i.y??i[1]:r.naturalHeight;let a=t==="shadow"&&o.shadowAnchor||o.iconAnchor;return n[2]=a?a.x??a[0]:Math.floor(n[0]/2),n[3]=a?a.y??a[1]:Math.floor(n[1]/2),n}function Yc(e,t,r){let{source:o,map:i,backend:n}=e,a=Vt(e,o.getLatLng());if(Be.get(i)){let Mi=M.get(n),un=xe(i,o.getLatLng());Number.isFinite(un)&&(a[1]=(un-Mi.position[1])/Mi.scale[1])}let s=i.getSize(),m=e.markerMatrices||={root:new DOMMatrix,camera:new DOMMatrix,point:{x:0,y:0,z:0,w:1}},f=m.root,p=m.camera,c=m.point,l=M.get(n).worldMatrix,u=ee.get(n).projectionViewMatrix,h,x;for(h=0;h<16;h++)x=qc[h],f[x]=l[h],p[x]=u[h];Ai(c,f,a[0],a[1],a[2],1),Ai(c,p,c.x,c.y,c.z,c.w);let g=c.x,y=c.y,v=c.z,S=c.w;p.invertSelf(),f.invertSelf();let[T,P,A,Q]=Hc(e,t,r),N=(g/S+1)*s.x/2,G=(1-y/S)*s.y/2,V=N-A,ue=G-Q,Me=[],st,Ce,vt,Ze,bi;for(h=0;h<4;h++)st=V+(h%2?T:0),Ce=ue+(h<2?0:P),vt=Qn(o,st-N,Ce-G),Ze=N+vt.x,bi=G+vt.y,Ai(c,p,Ze/s.x*2-1,1-bi/s.y*2,v/S,1),Ai(c,f,c.x/c.w,c.y/c.w,c.z/c.w,1),Me.push([c.x,c.y,c.z]);return Me}function Xc(e){let{source:t}=e,r,o,i,n;for(r=0;r<2;r++)o=r?"icon":"shadow",i=r?t._icon:t._shadow,!(!(i instanceof HTMLImageElement)||!i.complete||!i.naturalWidth)&&(n=Ro(e,o,i,Yc(e,o,i),t.options.opacity??1),o==="shadow"&&n&&(n.renderOrder-=100*1e6))}function ea(e){return e<=.0031308?e*12.92:1.055*e**(1/2.4)-.055}function ta(e,t,r,o){let i=(e+t*12)%12;return r-o*Math.max(-1,Math.min(i-3,9-i,1))}function Bt(e){if(e&&typeof e=="object"&&"h"in e){let n=e.s*Math.min(e.l,1-e.l);return{r:ea(ta(0,e.h,e.l,n)),g:ea(ta(8,e.h,e.l,n)),b:ea(ta(4,e.h,e.l,n))}}if(e&&typeof e=="object"&&"r"in e)return e;if(typeof e=="number")return{r:(e>>16&255)/255,g:(e>>8&255)/255,b:(e&255)/255};if(typeof e!="string"||!CSS.supports("color",e))throw new Error("Invalid 3D color");let t=document.createElement("canvas").getContext("2d");t.fillStyle=e,t.fillRect(0,0,1,1);let[r,o,i]=t.getImageData(0,0,1,1).data;return{r:r/255,g:o/255,b:i/255}}function Jc(e){let{source:t,meshes:r,strokeCoordinates:o,strokeAnchors:i}=e,n=r.get("stroke"),a,s,m,f,p;if(n){let c=2**(e.strokeZoom-e.map.getZoom())*Number(t.options.weight)/e.strokeWeight,l=n.geometry.attributes.position;if(n.program.uniforms.strokeScale)n.program.uniforms.strokeScale.value=c;else{for(a=0;a<o.length;a++)l.data[a]=i[a]+(o[a]-i[a])*c;l.needsUpdate=!0,n.geometry.bounds=null}({r:s,g:m,b:f}=Bt(t.options.color)),bt(e,n,[s,m,f],t.options.opacity??1)}p=r.get("fill"),p&&({r:s,g:m,b:f}=Bt(t.options.fillColor||t.options.color),bt(e,p,[s,m,f],t.options.fillOpacity??1))}var Io=[];L();L();L();function Ne(e,t,r,o,i,n,a,s){return t.push(...e(r,n),...e(o,a),...e(i,s))}var Ri=2*Math.PI;L();function zm(e,t,r,o,i){return new d.Point(e.x+t*Math.cos(i*Ri/o),e.y+r*Math.sin(i*Ri/o))}function Vr(e,t,r,o,i=r){if(!(r>0)||!(i>0))return;let n=Math.max(12,Math.min(128,Math.ceil(Math.PI*Math.sqrt(r)))),a;for(a=0;a<n;a++)Ne(e,o,t,zm(t,r,i,n,a),zm(t,r,i,n,a+1),t,t,t)}function ra(e,t,r,o,i){let{options:n,width:a,stroke:s,point:m}=e,f=a/2,p=t,c=r,l=t.distanceTo(r);if(!l)return;let u=r.subtract(t).divideBy(l),h=new d.Point(-u.y*f,u.x*f);n.lineCap==="square"&&(o&&(t=t.subtract(u.multiplyBy(f))),i&&(r=r.add(u.multiplyBy(f)))),Ne(m,s,t.add(h),t.subtract(h),r.add(h),p,p,c),Ne(m,s,r.add(h),t.subtract(h),r.subtract(h),c,p,c),n.lineCap==="round"&&(o&&Vr(m,t,f,s),i&&Vr(m,r,f,s))}L();function Kc(e,t,r,o,i){let{options:n,width:a,point:s,stroke:m}=e,f=t[r],p=a/2;if(n.lineJoin==="round"){Vr(s,f,p,m);return}let c=f.subtract(t[(r+t.length-1)%t.length]),l=Math.hypot(c.x,c.y);if(!l||!i)return;let u=c.divideBy(l),h=o.subtract(f).divideBy(i),x=u.x*h.y-u.y*h.x>0?-1:1,g=new d.Point(-u.y*x,u.x*x),y=new d.Point(-h.y*x,h.x*x),v=f.add(g.multiplyBy(p)),S=f.add(y.multiplyBy(p)),T=1+g.x*y.x+g.y*y.y,P=T>0?g.add(y).multiplyBy(p/T):null;Ne(s,m,v,f,S,f,f,f),n.lineJoin==="miter"&&P&&Math.hypot(P.x,P.y)<=p*4&&Ne(s,m,v,f.add(P),S,f,f,f)}function Qc(e,t,r,o,i,n){let a=e.dash,s=0,m=(i%n+n)%n,f=0,p,c,l=0;for(;f<a.length-1&&m>=a[f];)m-=a[f++];let u=Math.max(0,a[f]-m);for(;s<o;){if(p=Math.min(o,s+u),p>s&&f%2===0&&(c=r.subtract(t).divideBy(o),ra(e,t.add(c.multiplyBy(s)),t.add(c.multiplyBy(p)),!0,!0)),p<=s){if(++l>=a.length)throw new Error("Leaflet dashArray is too small for these coordinates")}else l=0;s=p,f=(f+1)%a.length,u=a[f]}}function oa(e,t,r){let{options:o,width:i,dash:n}=e;if(!o.stroke||i<=0||t.length<2)return;let a=Number(o.dashOffset)||0,s=0,m,f,p,c,l;for(m of n)s+=m;for(f=0;f<t.length-(r?0:1);f++)p=t[f],c=t[(f+1)%t.length],l=p.distanceTo(c),n.length?Qc(e,p,c,l,a,s):(ra(e,p,c,!r&&f===0,!r&&f===t.length-2),(r||f>0)&&Kc(e,t,f,c,l)),a+=l}function el(e){let t=1/0,r;for(r of e)t=Math.min(t,r.x);return t}function tl(e,t,r,o){let i=Math.min(r+o,e.length),n=Math.min(r+o*2,e.length),a=r,s=i,m;for(m=r;m<n;m++)a<i&&(s>=n||e[a].x<=e[s].x)?t[m]=e[a++]:t[m]=e[s++]}function rl(e){if(e.length<2)return e;let t=new Array(e.length),r=[],o,i,n,a,s;for(o of e)r.push({ring:o,x:el(o)});let m=r,f=t;for(i=1;i<r.length;i*=2){for(n=0;n<r.length;n+=i*2)tl(m,f,n,i);a=m,m=f,f=a}for(s=0;s<e.length;s++)e[s]=m[s].ring;return e}function Se(e,t,r){return(t.x-e.x)*(r.y-e.y)-(t.y-e.y)*(r.x-e.x)}function ut(e,t){return e.x===t.x&&e.y===t.y}function ol(e){let t=!0,r,o,i,n;for(;t&&e.length>3;)for(t=!1,r=0;r<e.length;r++)if(o=e[(r+e.length-1)%e.length],i=e[r],n=e[(r+1)%e.length],ut(o,i)||Math.abs(Se(o,i,n))<1e-10){e.splice(r,1),t=!0;break}if(e.length<3)throw new Error("Degenerate polygon ring");return e}function il(e){let t=0,r,o,i;for(r=0;r<e.length;r++)o=e[r],i=e[(r+1)%e.length],t+=o.x*i.y-i.x*o.y;return t<0}function nl(e,t){let r=[],o=0,i,n,a;for(i=0;i<e.length;i++)n=e[i],a=ol(t.slice(o,o+=n.length)),il(a)!==!!i&&a.reverse(),r.push(a);return r}function ia(e,t){let r=!1,o,i,n,a;for(o=0,i=t.length-1;o<t.length;i=o++)n=t[o],a=t[i],n.y>e.y!=a.y>e.y&&e.x<(a.x-n.x)*(e.y-n.y)/(a.y-n.y)+n.x&&(r=!r);return r}function al(e,t){let r;for(r=1;r<t.length;r++)if(ia(e,t[r]))return!0;return!1}function Ii(e,t,r){return Math.min(e.x,t.x)<=r.x&&r.x<=Math.max(e.x,t.x)&&Math.min(e.y,t.y)<=r.y&&r.y<=Math.max(e.y,t.y)}function sl(e,t,r,o){if(ut(e,r)||ut(e,o)||ut(t,r)||ut(t,o))return!1;let i=Se(e,t,r),n=Se(e,t,o),a=Se(r,o,e),s=Se(r,o,t);return i*n<0&&a*s<0||i===0&&Ii(e,t,r)||n===0&&Ii(e,t,o)||a===0&&Ii(r,o,e)||s===0&&Ii(r,o,t)}function Am(e,t,r){let o;for(o=0;o<r.length;o++)if(sl(e,t,r[o],r[(o+1)%r.length]))return!0;return!1}function ml(e,t,r,o){if(Am(e,t,r))return!0;let i;for(i=1;i<o.length;i++)if(Am(e,t,o[i]))return!0;return!1}function fl(e,t,r,o){let i=-1,n=-1,a=1/0,s,m,f,p,c;for(s=0;s<t.length;s++)for(m=0;m<e.length;m++)f=t[s],p=e[m],c=(f.x-p.x)**2+(f.y-p.y)**2,!(c>=a)&&(o.x=(f.x+p.x)/2,o.y=(f.y+p.y)/2,!(!ia(o,r[0])||al(o,r))&&(ml(f,p,e,r)||(i=s,n=m,a=c)));if(i<0)throw new Error("Unable to connect polygon hole");return[...e.slice(0,n+1),...t.slice(i),...t.slice(0,i+1),e[n],...e.slice(n+1)]}function pl(e,t,r,o){let i;for(i of e)if(!ut(i,t)&&!ut(i,r)&&!ut(i,o)&&Se(t,r,i)>=0&&Se(r,o,i)>=0&&Se(o,t,i)>=0)return!0;return!1}function cl(e){let t=[],r,o,i,n,a,s;for(;e.length>3;){for(r=!1,o=0;o<e.length;o++)if(i=e[(o+e.length-1)%e.length],n=e[o],a=e[(o+1)%e.length],!(Se(i,n,a)<=1e-10)&&!pl(e,i,n,a)){t.push([i.index,n.index,a.index]),e.splice(o,1),r=!0;break}if(!r)throw new Error("Unable to triangulate polygon: invalid or self-intersecting rings")}if(Se(...e)>1e-10){let m=[];for(s of e)m.push(s.index);t.push(m)}return t}function Rm(e){let t=0,r,o,i;for(r=0;r<e.length;r++)o=e[r],i=e[(r+1)%e.length],t+=o.x*i.y-i.x*o.y;return Math.abs(t)/2}function ll(e,t,r){let o=0,i=0,n,a;for(n=1;n<e.length;n++)o+=Rm(e[n]);let s=Rm(e[0])-o;for(a of r)i+=Se(t[a[0]],t[a[1]],t[a[2]])/2;if(s<=0||Math.abs(i-s)>Math.max(1e-7,s*1e-8))throw new Error("Polygon triangulation area mismatch")}function na(e,t=lr){let r=[e,...t],o=r.flat(),i,n,a;for(i of o)if(!Number.isFinite(i.x)||!Number.isFinite(i.y))throw new Error("Invalid polygon coordinates");let s=[];for(n=0;n<o.length;n++)i=o[n],s.push({x:i.x-e[0].x,y:i.y-e[0].y,index:n});let m=nl(r,s),f=m[0].slice(),p=rl(m.slice(1)),c=p.length?{x:0,y:0}:null;for(a of p)f=fl(f,a,m,c);let l=cl(f);return ll(m,s,l),l}function ul(e,t){let{options:r,fill:o,point:i}=e;if(r.triangulated){if(t.length!==1||t[0].length!==3)throw new Error("triangulated polygons require three vertices per polygon and no holes");Ne(i,o,t[0][0],t[0][1],t[0][2]);return}let n=[],a,s;for(a of t)a.length>=3&&n.push(a);let m=n.flat();for(s of na(n[0],n.slice(1)))Ne(i,o,m[s[0]],m[s[1]],m[s[2]])}function Im(e,t,r){let{options:o,map:i}=e,n=[],a,s,m;for(a of t){s=[];for(m of a)s.push(i.project(m));n.push(s)}r&&o.fill&&n[0]?.length>=3&&ul(e,n);for(a of n)oa(e,a,r)}function Dm(e,t,r){if(!t.length)return;let o;if(t[0]instanceof d.LatLng)Im(e,[t],r);else if(r&&t[0][0]instanceof d.LatLng)Im(e,t,r);else for(o of t)Dm(e,o,r)}function dl(e){let t=Array.isArray(e.dashArray)?e.dashArray:String(e.dashArray||"").trim().split(/[ ,]+/),r=[],o,i=!0;for(o of t)r.push(Number(o));for(o of r){if(!Number.isFinite(o)||o<0)throw new Error("Invalid Leaflet dashArray");o!==0&&(i=!1)}return i&&(r.length=0),r.length%2&&r.push(...r),r}L();L();function hr(e,t,r,o,i,n=0){let a=i*Ri/o;return new d.Point(e.x+Math.max(0,t+n)*Math.cos(a),e.y+Math.max(0,r+n)*Math.sin(a))}L();var Gm=new WeakMap;function Do(e){if(!d.version.startsWith("2."))return e._project();let t=e._map,r=e._renderer,o=Gm.get(t);o||(o=Object.create(d.Renderer.prototype),o._map=t,Gm.set(t,o)),o._pathZoom=t.getZoom(),o._pathOrigin=t.getPixelOrigin(),e._renderer=o;try{e._project()}finally{r?e._renderer=r:delete e._renderer}}function hl(e,t){let{map:r,point:o,fill:i,stroke:n,options:a,dash:s,width:m}=t,f=r.project(e.getLatLng()),p=e.getRadius(),c=p,l,u;if(e instanceof d.Circle){Do(e);let x=e._point.add(r.getPixelOrigin());f.x=x.x,f.y=x.y,p=e._pxRadius??e._radius,c=e._pxRadiusY??e._radiusY??p}a.fill&&Vr(o,f,p,i,c);let h=Math.max(12,Math.min(128,Math.ceil(Math.PI*Math.sqrt(Math.max(p,c)))));if(s.length){let x=[];for(l=0;l<h;l++)x.push(hr(f,p,c,h,l));oa(t,x,!0)}else if(a.stroke&&m>0)for(u=0;u<h;u++)Ne(o,n,hr(f,p,c,h,u,m/2),hr(f,p,c,h,u,-m/2),hr(f,p,c,h,u+1,m/2)),Ne(o,n,hr(f,p,c,h,u+1,m/2),hr(f,p,c,h,u,-m/2),hr(f,p,c,h,u+1,-m/2))}function gl(e,t,r){let o=[],i=[],n=e.options,a=Number(n.weight)||0,s=dl(n),m={fill:o,stroke:i,options:n,width:a,dash:s,point:r,map:t};if(e instanceof d.CircleMarker)hl(e,m);else{let f=e instanceof d.Polygon;Dm(m,e.getLatLngs(),f)}return{fill:o,stroke:i}}function Um(e,t){if(e.pixelProjection){let{transformation:r,scale:o,origin:i,metres:n}=e.pixelProjection,a=r.untransform(t,o);return[(a.x-i.x)*n,0,-(a.y-i.y)*n]}return Vt(e,e.map.unproject(t))}function yl(e,t){let r=Io[Io.length-1];return t&&r.strokeAnchors&&r.strokeAnchors.push(...Um(r,t)),Um(r,e)}$();L();function xl(e){let{source:t}=e;e.strokeCoordinates=null,e.strokeAnchors=t instanceof d.Polyline&&!t.options.dashArray?[]:null;let r=e.map.options.crs,o=D.get(e.backend);e.pixelProjection={transformation:r.transformation,scale:r.scale(e.map.getZoom()),origin:r.project(o),metres:Math.cos(o.lat*B)},Io.push(e);try{return gl(t,e.map,yl)}finally{Io.pop()}}function vl(e,t){let{source:r}=e;e.strokeAnchors?.length===t.length&&t.length?(r.options.interactive===!1?e.strokeCoordinates=t:(e.strokeCoordinates=new Float64Array(t),e.strokeAnchors=new Float64Array(e.strokeAnchors)),e.strokeZoom=e.map.getZoom(),e.strokeWeight=Number(r.options.weight)):e.strokeAnchors=null}function wl(e){let{source:t}=e;if(e.zoomOnly){Jc(e),e.zoomOnly=!1;return}let{fill:r,stroke:o}=xl(e);vl(e,o);let i,n,a,s,m,f,p,c,l;for(i=0;i<2;i++)n=i?"stroke":"fill",a=i?o:r,s=i?t.options.color:t.options.fillColor||t.options.color,m=i?t.options.opacity:t.options.fillOpacity,a.length&&({r:f,g:p,b:c}=Bt(s),Ao(e,n,a,[f,p,c],m??1),n==="stroke"&&t.options.interactive===!1&&e.strokeCoordinates&&(l=e.meshes.get(n).geometry.attributes,e.strokeCoordinates=l.position.data,e.strokeAnchors=l.normal.data))}function Ll(e){let{meshes:t,textures:r,backend:o}=e,i,n,a;for([a,i]of t)i._nativeUsed||(Ge(o,i),t.delete(a),n=r.get(a),n&&W(o,n.texture),r.delete(a));for([a,n]of r)n.used||(W(o,n.texture),r.delete(a))}function aa(e){let{source:t,meshes:r,textures:o}=e;if(!_o(e)||!w.get(e.backend)||e.failed||!e.dirty&&(!e.marker||!e.viewDirty))return;e.dirty=!1,e.viewDirty=!1;let i,n;for(i of r.values())i._nativeUsed=!1;for(n of o.values())n.used=!1;t instanceof d.GridLayer?Vc(e):t instanceof d.ImageOverlay?Zc(e):e.marker?Xc(e):wl(e),Ll(e)}function bl(e){try{aa(e);let t=e.meshes.get("stroke")?.program.uniforms.strokeScale;if(t){let r=se.get(e.map)?.zoom??e.map.getZoom();t.value=2**(e.strokeZoom-r)*Number(e.source.options.weight)/e.strokeWeight}}catch(t){e.failed=!0,e.source.fire("error",{error:t})}}function gr(e){if($n(e),R.get(e)!==e||!w.get(e))return;let t=e._map,r=performance.now(),o=t.getSize();if(!o.x||!o.y)return;Kf(e,r),ep(e,o),ap(e,o),Pe(oe.get(e));let i=!1,n,a;for(n of F.get(e))a=ho.get(n),a&&(bl(a),i=!0);let s=pt.get(t);cp(e,s,i);let m=Ft.get(e),f=w.get(e),p=kp(e,r),c=f.frameMeshes||=[];c.length=0;let l=Rp(e,p,r,c),u=f.device.createCommandEncoder();Wp(e,c,m,s),uc(e,u,m,s),Kp(e,u,c),f.device.queue.writeBuffer(f.uniformBuffer,0,f.uniformData,0,f.uniformSlot*64),f.device.queue.submit((Mn[0]=u.finish(),Mn)),Mn[0]=null;for(n of F.get(e))sr.get(n)&&(l=Co(n)||l);(t._animatingZoom||l)&&E(e)}function Ml(){let e=[...Nt];Nt.clear();let t,r;for(r of e)if(ft.set(r,null),!(R.get(r)!==r||!w.get(r)))try{gr(r)}catch(o){t||=o}if(t)throw t}function E(e){let t=R.get(e);if(!t)return e;if(t!==e)return E(t),e;if(ft.get(e)!=null)return e;let r=Nt.values().next().value;return Nt.add(e),ft.set(e,r?ft.get(r):requestAnimationFrame(Ml)),e}L();function sa(e){let{source:t}=e,r=t instanceof d.Marker&&t.options.icon instanceof d.DivIcon,o=r?null:t._icon,i=r?null:t._shadow,n,a;for(a of e.hidden)a===o||a===i||(a.classList.remove("leaflet-webgpu-target"),e.hidden.delete(a));for(n=0;n<2;n++)a=n?i:o,!(!a||e.hidden.has(a))&&(a.classList.add("leaflet-webgpu-target"),e.hidden.add(a))}function De(e=this){e.zoomOnly=!1,e.dirty=!0,e.viewDirty=!0,e.failed=!1,sa(e);let t=e.source,r,o;for(o of e.images)o===t._icon||o===t._shadow||o===t._image||(o.removeEventListener("load",Bi),o.removeEventListener("error",Ti),bn(o,e),e.images.delete(o));for(r=0;r<3;r++)o=r===0?t._icon:r===1?t._shadow:t._image,!(!(o instanceof HTMLImageElement)||e.images.has(o))&&(e.images.add(o),Yf(o,e),o.addEventListener("load",Bi),o.addEventListener("error",Ti));R.get(e.backend)&&E(e.backend)}L();var Bl=new Set(["color","opacity","weight","fillColor","fillOpacity"]);function Tl(e,t,r){let{source:o}=t;if(e!=="setStyle"||o.options.interactive!==!1||t.dirty&&!t.zoomOnly)return!1;let i=t.strokeCoordinates&&t.meshes.get("stroke")?.program.uniforms.strokeScale,n=o instanceof d.Polygon&&!o.options.stroke&&t.meshes.has("fill");if(!i&&!n)return!1;let a;if(r[0]){for(a of Object.keys(r[0]))if(!Bl.has(a))return!1}return!0}L();function Pl(e,t){let{source:r}=e;if(!(r instanceof d.GridLayer)||t!=="bringToFront"&&t!=="bringToBack")return;let o=t==="bringToFront"?-1/0:1/0,i,n;for(i of Object.values(e.map._layers))i===r||!(i instanceof d.GridLayer)||i.getPane()!==r.getPane()||(n=i.options.zIndex||0,o=t==="bringToFront"?Math.max(o,n):Math.min(o,n));let a=t==="bringToFront"?o+1:o-1;Number.isFinite(a)&&r.setZIndex(a)}function H(e,t,r){let o=de.get(t),i=o.methods.get(e).original,n=Tl(e,o,r),a=i.apply(t,r);return Pl(o,e),e==="bringToFront"&&(o.order=ar.get(o.map)+1,ar.set(o.map,o.order)),e==="bringToBack"&&(o.order=uo.get(o.map)-1,uo.set(o.map,o.order)),De(o),n&&(!t.options.stroke||Number(t.options.weight)>0)&&(o.zoomOnly=!0),a}function Sl(...e){return H("setLatLng",this,e)}function kl(...e){return H("setLatLngs",this,e)}function Cl(...e){return H("addLatLng",this,e)}function _l(...e){return H("setRadius",this,e)}function El(...e){return H("setStyle",this,e)}function Ol(...e){return H("redraw",this,e)}function zl(...e){return H("setIcon",this,e)}function Al(...e){return H("setUrl",this,e)}function Rl(...e){return H("setBounds",this,e)}function Il(...e){return H("setOpacity",this,e)}function Dl(...e){return H("setZIndex",this,e)}function Gl(...e){return H("setZIndexOffset",this,e)}function Ul(...e){return H("bringToFront",this,e)}function Nl(...e){return H("bringToBack",this,e)}var Nm={setLatLng:Sl,setLatLngs:kl,addLatLng:Cl,setRadius:_l,setStyle:El,redraw:Ol,setIcon:zl,setUrl:Al,setBounds:Rl,setOpacity:Il,setZIndex:Dl,setZIndexOffset:Gl,bringToFront:Ul,bringToBack:Nl};L();var yr=Object.freeze({});function ma(e=yr){return new d.Layer(e)}L();var Zr=new WeakMap;var ne=new WeakMap;var Tt=new WeakMap;function Fl(e,t,r,o){let i=Math.min(r+o,e.length),n=Math.min(r+o*2,e.length),a=r,s=i,m;for(m=r;m<n;m++)a<i&&(s>=n||!(e[s].distance<e[a].distance))?t[m]=e[a++]:t[m]=e[s++]}function jl(e){if(e.length<2)return e;let t=new Array(e.length),r=e,o=t,i,n,a,s;for(i=1;i<e.length;i*=2){for(n=0;n<e.length;n+=i*2)Fl(r,o,n,i);a=r,r=o,o=a}if(r!==e)for(s=0;s<e.length;s++)e[s]=r[s];return e}function Wl(e,t,r,o){let n=new DOMMatrix(t.worldMatrix).invertSelf().toFloat64Array(),a,s,m,f,p;for(a of n)if(!Number.isFinite(a))throw new Error("Singular 3D transform");s=e.origin[0],m=e.origin[1],f=e.origin[2],p=n[3]*s+n[7]*m+n[11]*f+n[15],r[0]=(n[0]*s+n[4]*m+n[8]*f+n[12])/p,r[1]=(n[1]*s+n[5]*m+n[9]*f+n[13])/p,r[2]=(n[2]*s+n[6]*m+n[10]*f+n[14])/p,s=e.direction[0],m=e.direction[1],f=e.direction[2],o[0]=n[0]*s+n[4]*m+n[8]*f,o[1]=n[1]*s+n[5]*m+n[9]*f,o[2]=n[2]*s+n[6]*m+n[10]*f;let c=Math.hypot(...o)||1;o[0]/=c,o[1]/=c,o[2]/=c}function $l(e,t,r){e.geometry.bounds||_e(e.geometry);let o=0,i=1/0,n,a,s;for(n=0;n<3;n++)if(Math.abs(r[n])<1e-12){if(t[n]<e.geometry.bounds.min[n]||t[n]>e.geometry.bounds.max[n]){i=-1/0;break}}else a=(e.geometry.bounds.min[n]-t[n])/r[n],s=(e.geometry.bounds.max[n]-t[n])/r[n],o=Math.max(o,Math.min(a,s)),i=Math.min(i,Math.max(a,s));return!(i<o)}function fa(e,t){return t?.count??t?.data.length??e.count??e.data.length/(e.size??3)}function pa(e,t,r,o,i){let{position:n,index:a,instanceOffset:s}=e.geometry.attributes,m=n.size??3,f=fa(n,a),p=s?t%f:t,c=s?Math.floor(t/f)*s.size:0,l=s?.data[c]??0,u=s?.data[c+1]??0,h=s?.data[c+2]??0,x=(a?a.data[p]:p)*m,g=(a?a.data[p+1]:p+1)*m,y=(a?a.data[p+2]:p+2)*m;r[0]=n.data[x],r[1]=n.data[x+1],r[2]=n.data[x+2],o[0]=n.data[g],o[1]=n.data[g+1],o[2]=n.data[g+2],i[0]=n.data[y],i[1]=n.data[y+1],i[2]=n.data[y+2],s&&(r[0]=Math.fround(r[0]+l),r[1]=Math.fround(r[1]+u),r[2]=Math.fround(r[2]+h),o[0]=Math.fround(o[0]+l),o[1]=Math.fround(o[1]+u),o[2]=Math.fround(o[2]+h),i[0]=Math.fround(i[0]+l),i[1]=Math.fround(i[1]+u),i[2]=Math.fround(i[2]+h))}function Vl(e,t,r,o,i){if(!e.program.nightLight)return!1;let{index:n,uv:{data:a}}=e.geometry.attributes,s=n?n.data[t]:t,m=n?n.data[t+1]:t+1,f=n?n.data[t+2]:t+2,p=a[s*2]*(1-r-o)+a[m*2]*r+a[f*2]*o,c=a[s*2+1]*(1-r-o)+a[m*2+1]*r+a[f*2+1]*o;return p<=2&&(!i||p*p+c*c>.9)}function Zl(e,t,r,o,i,n,a,s){let m=o[0]-r[0],f=o[1]-r[1],p=o[2]-r[2],c=i[0]-r[0],l=i[1]-r[1],u=i[2]-r[2],h=a[1]*u-a[2]*l,x=a[2]*c-a[0]*u,g=a[0]*l-a[1]*c,y=m*h+f*x+p*g;if(e.program.cullMode==="none"||e.program.cullFace===null?Math.abs(y)<1e-9:y<1e-9)return 1/0;let v=n[0]-r[0],S=n[1]-r[1],T=n[2]-r[2],P=(v*h+S*x+T*g)/y;if(P<0||P>1)return 1/0;let A=S*p-T*f,Q=T*m-v*p,N=v*f-S*m,G=(a[0]*A+a[1]*Q+a[2]*N)/y;return G<0||P+G>1||Vl(e,t,P,G,s)?1/0:(c*A+l*Q+u*N)/y}function ql(e,t,r,o,i,n){let a=o[0]*i+r[0],s=o[1]*i+r[1],m=o[2]*i+r[2],f=t.worldMatrix,p=f[3]*a+f[7]*s+f[11]*m+f[15],c=[(f[0]*a+f[4]*s+f[8]*m+f[12])/p,(f[1]*a+f[5]*s+f[9]*m+f[13])/p,(f[2]*a+f[6]*s+f[10]*m+f[14])/p];return{faceIndex:n,object:t,point:c,distance:Math.hypot(c[0]-e.origin[0],c[1]-e.origin[1],c[2]-e.origin[2])}}function ca(e,t,r=0){let o=[],i=[0,0,0],n=[0,0,0],a=[0,0,0],s=[0,0,0],m=[0,0,0],f,p,c,l,u,h,x,g,y;for(f of t)if(Wl(e,f,s,m),!!$l(f,s,m)){for({position:p,index:c,instanceOffset:l}=f.geometry.attributes,u=c?.count||p.count,h=1/0,x=void 0,g=0;g<u*(l?.count??1);g+=3)pa(f,g,i,n,a),y=Zl(f,g,i,n,a,s,m,r),y>0&&y<h&&(h=y,x=g/3);x!==void 0&&o.push(ql(e,f,s,m,h,x))}return jl(o)}function Zt(e,t,r){if(t(e,r))return;let o;for(o of e.children)Zt(o,t,r)}function la(e,t){if(!e.visible)return!0;e.geometry&&e._appearance!==0&&t.push(e)}function Hl(e,t,r,o){let i=1,n=t.length-1,a;for(;i<n;)a=i+Math.floor((n-i)/2),t[a]<r?i=a+1:n=a;let s=e[i-1],m=e[i],f=t[i]-t[i-1]||1,p=(r-t[i-1])/f;return o||={},o.x=s[0]+(m[0]-s[0])*p,o.y=(s[2]??0)+((m[2]??0)-(s[2]??0))*p,o.z=s[1]+(m[1]-s[1])*p,o.dx=(m[0]-s[0])/f,o.dz=(m[1]-s[1])/f,o}function Go(e,t,r){let{points:o,lengths:i,length:n}=t.lane,a=t.distance+e.elapsed*t.speed;a-=n*Math.floor(a/n);let s=Hl(o,i,a,r);return s.x-=s.dz*e.side,s.z+=s.dx*e.side,s}function Yl(e){if(!e.mesh||!e.stale)return;e.stale=!1;let{position:t,normal:r}=e.mesh.geometry.attributes,o=e.position||={},i,n,a,s,m,f,p,c,l,u,h,x,g;for(i=0;i<e.trips.length;i++)for(n=e.trips[i],{x:a,y:s,z:m,dx:f,dz:p}=Go(e,n,o),c=0,l=i*e.stride;c<e.stride;c+=3,l+=3)u=e.template.position[c],h=e.template.position[c+2],x=e.template.normal[c],g=e.template.normal[c+2],t.data[l]=a-u*p-h*f,t.data[l+1]=s+e.template.position[c+1],t.data[l+2]=m+u*f-h*p,r.data[l]=-x*p-g*f,r.data[l+1]=e.template.normal[c+1],r.data[l+2]=x*f-g*p}function Xl(e){let t,r;for(t=1;t<=4;t++)for(r=1;r<=4;r++)if(!Number.isFinite(e[`m${t}${r}`]))throw new Error("Singular 3D transform")}function ua(e,t,r=M.get(e).children,o=!0){if(!w.get(e))return[];let i=Tt.get(e);i&&Yl(i);let n=e._map.getContainer().getBoundingClientRect();Pe(oe.get(e)),xo(ee.get(e));let a=ne.get(e).inverse,s=ee.get(e).projectionViewMatrix;a.m11=s[0],a.m12=s[1],a.m13=s[2],a.m14=s[3],a.m21=s[4],a.m22=s[5],a.m23=s[6],a.m24=s[7],a.m31=s[8],a.m32=s[9],a.m33=s[10],a.m34=s[11],a.m41=s[12],a.m42=s[13],a.m43=s[14],a.m44=s[15],a.invertSelf();let m=(t.clientX-n.left)/n.width*2-1,f=-((t.clientY-n.top)/n.height)*2+1,p=a.m11*m+a.m21*f+a.m41,c=a.m12*m+a.m22*f+a.m42,l=a.m13*m+a.m23*f+a.m43,u=a.m14*m+a.m24*f+a.m44,h;Xl(a),ne.get(e).origin[0]=ee.get(e).position[0],ne.get(e).origin[1]=ee.get(e).position[1],ne.get(e).origin[2]=ee.get(e).position[2],ne.get(e).direction[0]=p/u-ne.get(e).origin[0],ne.get(e).direction[1]=c/u-ne.get(e).origin[1],ne.get(e).direction[2]=l/u-ne.get(e).origin[2];let x=ne.get(e).direction,g=Math.hypot(x[0],x[1],x[2])||1;ne.get(e).direction[0]/=g,ne.get(e).direction[1]/=g,ne.get(e).direction[2]/=g;let y=ne.get(e).meshes;y.length=0;for(h of r)o?Zt(h,la,y):h.geometry&&h.visible&&h._appearance!==0&&y.push(h);return ca(ne.get(e),y,w.get(e).uniformData?.[55])}function Jl(){let{map:e,descriptor:t,handle:r}=this;e._fireDOMEvent===r&&(t?Object.defineProperty(e,"_fireDOMEvent",t):delete e._fireDOMEvent)}var te=new WeakMap;var Kl=new Set(["click","preclick","dblclick","contextmenu","mousedown","mouseup","mousemove","mouseover","mouseout","pointerdown","pointerup","pointermove","pointerover","pointerout"]);L();function Ql(e,t){return t.object.renderOrder-e.object.renderOrder||e.distance-t.distance}function eu(e,t,r){let o=[],i,n,a;if(r!==e.out)for(i of e.states)({source:n,backend:a}=i),!(n instanceof d.Marker||n.options.interactive===!1||!(n instanceof d.Path)&&!n.options.interactive)&&o.push(...ua(a,t,i.meshes.values(),!1));return o.sort(Ql),o[0]?.object._nativeSource||null}function da(e,t,r,o){t.hovered!==o&&(t.hovered&&t.fireDOMEvent.call(e,r,t.out,[t.hovered]),t.hovered=o,o&&t.fireDOMEvent.call(e,r,t.over,[o]),e.getContainer().style.cursor=o?"pointer":"")}function tu(e,t,r,o){let i=r.target,n=i instanceof Element&&i.closest(".leaflet-marker-icon,.leaflet-popup,.leaflet-tooltip,.leaflet-control");return n&&t.hovered&&(o===t.move||o===t.out)&&da(e,t,r,null),n||o===t.move&&(e.dragging?.moving()||e._animatingZoom)}function Fm(e,t=e.type,r){let o=this,i=Zr.get(o),n=i.fireDOMEvent,a=te.get(o);if(!w.get(a)||r||!Kl.has(t))return n.call(this,e,t,r);if(tu(o,i,e,t))return n.call(this,e,t,r);let s=eu(i,e,t);return(t==="click"||t==="preclick")&&s&&o._draggableMoved(s)&&(s=null),(t===i.move||t===i.out)&&da(o,i,e,s),n.call(this,e,t,s?[s]:void 0)}function ru(e){let{map:t}=e,r=Zr.get(t);if(!r){r={map:t,states:new Set,hovered:null};let o=d.version.startsWith("2");r.move=o?"pointermove":"mousemove",r.out=o?"pointerout":"mouseout",r.over=o?"pointerover":"mouseover",r.descriptor=Object.getOwnPropertyDescriptor(t,"_fireDOMEvent"),r.fireDOMEvent=t._fireDOMEvent,r.handle=Fm,r.restore=Jl,Zr.set(t,r),t._fireDOMEvent=Fm}r.states.add(e),e._nativeEventContext=r}L();function Uo(e){if(!(e?.type==="zoomend"&&this.source instanceof d.Polyline&&(!this.source.options.stroke||!(Number(this.source.options.weight)>0)))){if(e?.type==="zoomend"&&this.strokeCoordinates&&(!this.dirty||this.zoomOnly)){this.zoomOnly=!0,this.dirty=!0,E(this.backend);return}e?.type==="terrainchange"&&this.marker&&this.source.update(),De(this)}}function ha(){this.viewDirty=!0,R.get(this.backend)&&E(this.backend)}function ou(e){let t=e._nativeEventContext;if(!t)return;let{map:r}=t;t.states.delete(e),t.hovered===e.source&&(t.hovered=null,r.getContainer().style.cursor=""),e._nativeEventContext=null,!t.states.size&&(t.restore(),Zr.delete(r))}function Di(){let e=this;if(e.disposed)return;e.disposed=!0;let{source:t,map:r,backend:o,meshes:i,textures:n,images:a}=e;t.off("load tileload tileunload move drag",Uo,e),r.off("zoomend terrainchange",Uo,e),e.marker&&r.off("move zoom rotate pitch resize viewreset",ha,e),ou(e);let m,f,p,c,l;for([m,f]of e.methods)f.own?Object.defineProperty(t,m,f.own):delete t[m];for(p of i.values())Ge(o,p);i.clear();for(c of n.values())W(o,c.texture);n.clear();for(l of a)l.removeEventListener("load",Bi),l.removeEventListener("error",Ti),bn(l,e);ho.delete(o),o.remove()}function iu(){this.ready.resolve()}function nu({error:e}){this.ready.reject(e)}function au({error:e}){this.source.fire("error",{error:e})}async function su(e){let{source:t,map:r}=e,o=e.backend=ma({source:{type:"vector"}});e.meshes=new Map,e.textures=new Map,e.methods=new Map,e.images=new Set,ar.get(r)||ar.set(r,0),uo.get(r)||uo.set(r,0),e.dirty=!0,e.viewDirty=!0,e.failed=!1,e.order=ar.get(r)+1,ar.set(r,e.order),e.marker=t instanceof d.Marker,e.paneOrder=Number(getComputedStyle(t.getPane()).zIndex)||0,e.disposed=!1,t.on("load tileload tileunload move drag",Uo,e),r.on("zoomend terrainchange",Uo,e),e.marker&&r.on("move zoom rotate pitch resize viewreset",ha,e),ru(e);let n,a,s;for(n in Nm)typeof t[n]=="function"&&(a=Object.getOwnPropertyDescriptor(t,n),s=t[n],e.methods.set(n,{own:a,original:s}),t[n]=Nm[n]);let m=e.ready=Promise.withResolvers();o.once("ready",iu,e),o.once("error",nu,e),o.on("error",au,e),De(e),o.addTo(r);try{await m.promise}catch(f){throw Di.call(e),f}if(!_o(e))return t;ho.set(o,e);try{aa(e)}catch(f){throw Di.call(e),f}return E(e.backend),t}function mu(e){de.get(e.source)===e&&de.set(e.source,null),e.backend&&Di.call(e);let t;for(t of e.hidden)t.classList.remove("leaflet-webgpu-target")}function fu(e){return de.get(e.source)!==e?e.source:su(e)}function He(e,t){e.fire("error",{error:t})}function ga(e,t){if(de.get(e))return;if(!document.getElementById("leaflet-webgpu-targets")){let o=document.createElement("style");o.id="leaflet-webgpu-targets",o.textContent=".leaflet-webgpu-target{opacity:0!important}",document.head.append(o)}let r={source:e,map:t,hidden:new Set};de.set(e,r),sa(r),e.once("remove",mu.bind(null,r)),re.set(e,Promise.resolve().then(fu.bind(null,r))),re.get(e).catch(He.bind(null,e))}var ya=[1,0,1,0];L();function ce(e){return new d.Point(Array.isArray(e)?e[0]:e.x,Array.isArray(e)?e[1]:e.y)}$();Z();J();function xa(e,t){let r=k(e)*B,o=_(e)*B;return t||=[],t[0]=Math.cos(r),t[1]=Math.sin(r),t[2]=Math.cos(o),t[3]=Math.sin(o),t}function ze(e,t,r=!1,o=!1,i=0){let n=e.getSize(),a=n.x/2,s=n.y/2,m=n.y*1.5,f=ce(t);if(!m)return f;let[p,c,l,u]=xa(e,ya),h=f.x-a,x=f.y-s;if(r){let S=n.y*e.options.pitchMaxDistance,T=l*m+u*x,P=T*l>0?(x*(m-l*i)+m*u*i)/T:-S;o&&(P=Math.max(-S,Math.min(S,P)));let A=h*(m-u*P-l*i)/m;return f.x=p*A+c*P+a,f.y=-c*A+p*P+s,f}let g=p*h-c*x,y=c*h+p*x,v=m/(m-u*y-l*i);return f.x=g*v+a,f.y=(l*y-u*i)*v+s,f}function pu(e){return ze(this,it(this,j.value.layerPointToContainerPoint.call(this,e)))}function cu(e){return j.value.containerPointToLayerPoint.call(this,it(this,ze(this,e,!0),!0))}function lu(){return j.value.containerPointToLayerPoint.call(this,this.getSize().divideBy(2))}function uu(e,t){let r=this.getSize().divideBy(2),o=r.subtract(ze(this,r.subtract(ce(e)),!0));return j.value.panBy.call(this,o,t)}L();J();Z();function du(e,t,r){if(!_(this)&&!k(this))return j.value.setZoomAround.call(this,e,t,r);t=this._limitZoom(t);let o=this.getZoomScale(t),i=this.getSize().divideBy(2),n=e instanceof d.Point?e:this.latLngToContainerPoint(e),a=this.containerPointToLayerPoint(i),s=this.containerPointToLayerPoint(n),m=a.add(s.subtract(a).multiplyBy(1-1/o));return this.setView(this.layerPointToLatLng(m),t,{zoom:r})}var Pt=Object.freeze([0,0]);J();Z();function hu(e,t={}){if(!_(this)&&!k(this))return j.value.panInside.call(this,e,t);let r=ce(t.paddingTopLeft||t.padding||Pt),o=this.getSize().subtract(ce(t.paddingBottomRight||t.padding||Pt)),i=this.latLngToContainerPoint(e),n=r;if(n.x=Math.max(r.x,Math.min(o.x,i.x)),n.y=Math.max(r.y,Math.min(o.y,i.y)),n.equals(i))return this;let a=this.latLngToLayerPoint(e).subtract(this.containerPointToLayerPoint(n));return this.panTo(this.unproject(this.project(this.getCenter()).add(a)),t)}L();J();Z();L();function xr(e,t=Pt,r=0){let o=ce(t).divideBy(2),i=e.getSize().subtract(o),n=new d.Bounds,a=o.x,s=o.y,m;for(m=0;m<4;m++)o.x=m%2?i.x:a,o.y=m<2?s:i.y,n.extend(ze(e,o,!0,!0,r));return n}function gu(e,t,r){if(!r||!this._loaded||!_(this)&&!k(this))return j.value._limitCenter.call(this,e,t,r);let o=this.getSize().divideBy(2),i=xr(this),n=this.project(e,t),a=new d.Bounds(n.add(i.min.subtract(o)),n.add(i.max.subtract(o))),s=this._getBoundsOffset(a,r,t);return Math.abs(s.x)<=1&&Math.abs(s.y)<=1?e:this.unproject(n.add(s),t)}J();Z();function yu(e,t){if(!t||!_(this)&&!k(this))return j.value._limitOffset.call(this,e,t);let r=this.getSize().divideBy(2),o=r.subtract(ze(this,r.subtract(e),!0)),i=this.project(this.getCenter()),n=this.project(this._limitCenter(this.unproject(i.add(o)),this.getZoom(),t));return r.subtract(ze(this,r.subtract(n.subtract(i))))}J();Z();L();va();function jm(e,t,r,o,i){return t*r+o*e>0?Math.max(-i,Math.min(i,e*r/(t*r+o*e))):-i}function wa(e,t,r=No){t=t.getBounds?t.getBounds():t instanceof d.LatLngBounds?t:new d.LatLngBounds(t);let o=e.getZoom()??0,i=e.getSize().divideBy(2),n=e.getSize().y*1.5,a=ce(r.paddingTopLeft||r.padding||Pt).subtract(i),s=i.subtract(ce(r.paddingBottomRight||r.padding||Pt)),[m,f,p,c]=xa(e,ya);if(p<0){let Tv=a.y;a.y=-s.y,s.y=-Tv}let l=e.getSize().y*e.options.pitchMaxDistance,u=jm(a.y,Math.abs(p),n,c,l),h=jm(s.y,Math.abs(p),n,c,l),x=e.project(t.getNorthWest(),o).add(e.project(t.getSouthEast(),o)).divideBy(2),g=1/0,y=-1/0,v=a.x*c/n,S=s.x*c/n,T=S-v,P=1/0,A=-1/0,Q=[t.getNorthWest(),t.getNorthEast(),t.getSouthWest(),t.getSouthEast()],N,G,V,ue,Me;for(N=0;N<4;N++)G=Q[N],V=e.project(G,o).subtract(x),ue=m*V.x-f*V.y,Me=f*V.x+m*V.y,g=Math.min(g,Me),y=Math.max(y,Me),P=Math.min(P,ue+v*Me),A=Math.max(A,ue+S*Me);let st=Math.min((h-u)/(y-g),(s.x-a.x-T*u)/(A-P-T*g)),Ce=e.getScaleZoom(st,o),vt=e.options.zoomSnap;if(vt&&(Ce=Math.floor(Math.round(Ce/(vt/100))/100)*vt),Ce=Math.max(e.getMinZoom(),Math.min(e.getMaxZoom(),r.maxZoom??1/0,Ce)),!Number.isFinite(Ce))return{center:t.getCenter(),zoom:Ce};let Ze=e.getZoomScale(Ce,o),bi=y*Ze-h,Mi=g*Ze-u,un=Math.max(bi,T?(Ze*(A-P)-s.x+a.x)/T:bi),hm=(Math.min(Mi,un)+Mi)/2,Hf=(Ze*(P+A)-a.x-s.x-(v+S)*hm)/2;return x.x+=(m*Hf+f*hm)/Ze,x.y+=(-f*Hf+m*hm)/Ze,{center:e.unproject(x,o),zoom:Ce}}function xu(e,t){return _(this)||k(this)?wa(this,e,t):j.value._getBoundsCenterZoom.call(this,e,t)}L();J();Z();function vu(e,t,r){if(!_(this)&&!k(this))return j.value.getBoundsZoom.call(this,e,t,r);if(!t)return wa(this,e,{padding:ce(r||Pt).divideBy(2)}).zoom;e=e instanceof d.LatLngBounds?e:new d.LatLngBounds(e);let o=xr(this,r).getSize(),i=this.project(e.getSouthEast()).subtract(this.project(e.getNorthWest())),n=this.getScaleZoom(Math.max(o.x/i.x,o.y/i.y)),a=this.options.zoomSnap;return Math.max(this.getMinZoom(),Math.min(this.getMaxZoom(),a?Math.ceil(n/a)*a:n))}function wu(e,t){let r=this._getCenterOffset(e)._trunc();return t?.animate!==!0&&!this.getSize().contains(r)?!1:((j.value._panBy||j.value.panBy).call(this,r,t),!0)}L();J();Z();function Lu(){if(!_(this)&&!k(this))return j.value.getBounds.call(this);let e=xr(this),t=new d.LatLngBounds,r,o,i;for(r=0;r<2;r++)o=r?e.max:e.min,i=j.value.containerPointToLayerPoint.call(this,it(this,o,!0)),t.extend(this.layerPointToLatLng(i));return t}var bu=new WeakSet;var Wm=new WeakMap;vr();$m();function Mu(){this.options.maxBounds&&this._panInsideMaxBounds()}var wr=new WeakMap;La();Sa();J();Z();function ka(){let e=this,t=wr.get(e);if(!_(e)&&!k(e))return;let r=e.getSize().divideBy(2),o=t._newPos.subtract(t._startPos),i=r.subtract(ze(e,r.subtract(o),!0));t._newPos=t._startPos.add(i)}function Bu(){jo(this),Ye.get(this)?.remove(),wr.get(this)&&(wr.get(this).off("predrag",ka,this),wr.delete(this))}function Tu(){let e=this.dragging?._draggable;e&&(wr.set(this,e),e.on("predrag",ka,this))}async function Od(e){try{let{cameraControls:t}=await Promise.resolve().then(()=>(Ed(),_d));e._container?._leaflet_id&&t(e)}catch(t){throw e.fire("error",{error:t}),t}}function Xe(){}function zd(){if(bu.add(this),!document.getElementById("leaflet-camera-zoom-style")){let e=document.createElement("style");e.id="leaflet-camera-zoom-style",e.textContent=".leaflet-camera-zoom .leaflet-marker-icon,.leaflet-camera-zoom .leaflet-marker-shadow,.leaflet-camera-zoom .leaflet-popup,.leaflet-camera-zoom .leaflet-tooltip{transition:none!important}",document.head.append(e)}Fe(this,this.options.pitch,this.options.bearing),this.on("load resize pitch",ba),this.on("rotate pitch",Mu,this),this.once("unload",Bu,this),this.whenReady(Tu,this),(this.options.rotate||this.options.trackContainerMutation)&&(Wm.set(this,Od(this)),Wm.get(this).catch(Xe))}L();function Ad(e){e instanceof d.DivIcon||(e.options.crossOrigin||=!0);let t=et.value.setIcon.call(this,e);return this._map&&!(e instanceof d.DivIcon)&&ga(this,this._map),t}function Rd(){let e=et.value.getEvents.call(this);return e.rotate=e.pitch=e.move=this.update,e}$();function Jo(e,t,r){let o=te.get(e),i=o&&ie.get(o);if(!Be.get(e)||!i)return e.layerPointToContainerPoint(t).subtract(e._getMapPanePos());let n=xe(e,r||e.layerPointToLatLng(t))??0,a=xe(e,e.getCenter())??0,s=se.get(e)?.zoom??e.getZoom(),m=(n-a)*e.options.crs.scale(s)/(rt*Math.cos(i.lat*B)),f=it(e,j.value.layerPointToContainerPoint.call(e,t));return ze(e,f,!1,!1,m).subtract(e._getMapPanePos())}function Id(e){et.value._setPos.call(this,Jo(this._map,e,this.getLatLng()));let t,r,o,i,n,a;for(t=0;t<2;t++)r=t?this._shadow:this._icon,o=t?"shadowAnchor":"iconAnchor",r&&(i=Qn(this,1,0),n=this.options.icon.options,a=n[o]||n.iconAnchor,r.style.transformOrigin=a?`${a.x??a[0]}px ${a.y??a[1]}px`:"center",r.style.transform+=` rotate(${Math.atan2(i.y,i.x)}rad) scale(${this.options.scale})`)}function Ct(e=this){let t=de.get(e);t?.backend&&!t.disposed&&De(t)}function Dd(e){et.value._updateZIndex.call(this,e);let t=$r.get(this)!==e;$r.set(this,e),t&&Ct(this)}var Jr=new WeakMap;L();function Gd(e){let t=this._marker._map,r=d.DomUtil.getPosition(this._marker._icon).add(t._getMapPanePos()),o=t.containerPointToLayerPoint(r);d.DomUtil.setPosition(this._marker._icon,o),Jr.get(this)._cameraOriginalOnDrag.call(this,e),this._marker._setPos(o)}L();J();Z();var Vi=new Map;var Ko={value:null};function Ud(){Ko.value=null;let e=[...Vi];Vi.clear();let t,r;for([t,r]of e)t._panRequest=null,t._adjustPan(r)}function Nd(e,t){Vi.set(e,t),Ko.value===null&&(Ko.value=requestAnimationFrame(Ud)),e._panRequest=Ko.value}function Fd(e){let t=this._marker,r=t._map;if(!_(r)&&!k(r))return Jr.get(this)._cameraOriginalAdjustPan.call(this,e);let o=d.DomUtil.getPosition(t._icon).add(r._getMapPanePos()),i=r.getSize(),n=ce(t.options.autoPanPadding),a=t.options.autoPanSpeed,s=o;if(s.x=(Math.max(0,o.x-i.x+n.x)-Math.max(0,n.x-o.x))/Math.max(1,n.x)*a,s.y=(Math.max(0,o.y-i.y+n.y)-Math.max(0,n.y-o.y))/Math.max(1,n.y)*a,!s.x&&!s.y)return;let m=r._getMapPanePos();r.panBy(s,{animate:!1});let f=m.subtract(r._getMapPanePos());this._draggable._newPos._add(f),this._draggable._startPos._add(f),d.DomUtil.setPosition(t._icon,this._draggable._newPos),this._onDrag(e),Nd(this,e)}function jd(){if(!this.dragging||Jr.has(this.dragging))return;let e=this.dragging,t=e._onDrag,r=e._adjustPan;Jr.set(e,{_cameraOriginalOnDrag:t,_cameraOriginalAdjustPan:r}),e._onDrag=Gd,e._adjustPan=Fd,e.enabled()&&(e._draggable.off("drag",t,e),e._draggable.on("drag",e._onDrag,e))}function Wd(){let e=et.value._initInteraction.call(this);return jd.call(this),e}function $d(){let e=hn.value.call(this);return e.rotate=e.pitch=e.move=e.terrainchange=this._updatePosition,e}function Vd(){let e=gn.value.call(this);return e.rotate=e.pitch=e.move=e.terrainchange=this._updatePosition,e}J();Z();function Zd(){let e=this._map;if(!_(e)&&!k(e))return xn.value.call(this);if(!this.options.autoPan)return;if(e._panAnim&&e._panAnim.stop(),this._autopanning){this._autopanning=!1;return}let t=this._container.getBoundingClientRect(),r=e.getContainer().getBoundingClientRect(),o=ce(this.options.autoPanPaddingTopLeft||this.options.autoPanPadding),i=e.getSize().subtract(ce(this.options.autoPanPaddingBottomRight||this.options.autoPanPadding)),n=t.left-r.left,a=t.top-r.top,s=t.right-r.left,m=t.bottom-r.top,f=Math.min(0,n-o.x)||Math.max(0,s-i.x),p=Math.min(0,a-o.y)||Math.max(0,m-i.y);if(!f&&!p)return;this.options.keepInView&&(this._autopanning=!0);let c=e.latLngToContainerPoint(this._latlng);c.x-=f,c.y-=p;let l=e.latLngToLayerPoint(this._latlng).subtract(e.containerPointToLayerPoint(c));e.fire("autopanstart"),e.panTo(e.unproject(e.project(e.getCenter()).add(l)))}L();function qd(){if(yn.value.call(this),!this._map)return;let e=this._map.latLngToLayerPoint(this._latlng),t=Jo(this._map,e,this._latlng).subtract(e);this._zoomAnimated?d.DomUtil.setPosition(this._container,d.DomUtil.getPosition(this._container).add(t)):(this._container.style.left=`${this._containerLeft+t.x}px`,this._container.style.bottom=`${this._containerBottom-t.y}px`)}L();function Hd(e){vn.value.call(this,e);let t=Jo(this._map,e,this._latlng).subtract(e);d.DomUtil.setPosition(this._container,d.DomUtil.getPosition(this._container).add(t))}L();function Yd(){let e=Ln.value.call(this);return e.rotate=e.pitch=d.Util.throttle(this._onMoveEnd,this.options.updateInterval,this),e}L();Z();J();$();function Xd(e,t,r,o){let i=e._map,n=1/0,a=-1/0,s,m;for([s,m]of r.terrainCache)!s.startsWith(`${e._tileZoom}/`)||!m.range||(n=Math.min(n,m.range[0]),a=Math.max(a,m.range[1]));if(!Number.isFinite(n)||!Number.isFinite(a))return t;let f=se.get(i)?.zoom??i.getZoom(),p=i.options.crs.scale(f)/(rt*Math.cos(o.lat*B)),c=xe(i,i.getCenter())??0,l,u,h,x,g;for(l=0;l<2;l++)for(h=xr(i,void 0,((l?a:n)-c)*p),u=0;u<2;u++)x=u?h.max:h.min,g=j.value.containerPointToLayerPoint.call(i,it(i,x,!0)),t.extend(i.project(i.layerPointToLatLng(g),e._tileZoom));return t}function Jd(e){let t=this._map,r=Be.get(t);if(!r&&!k(t)&&!_(t))return wn.value.call(this,e);let o=t.getBounds(),i=new d.Bounds(t.project(o.getNorthWest(),this._tileZoom),t.project(o.getSouthEast(),this._tileZoom)),n=te.get(t),a=n&&ie.get(n);return!r||!a?i:Xd(this,i,r,a)}j.value=Object.defineProperties({},Object.getOwnPropertyDescriptors(d.Map.prototype));d.Map.mergeOptions({rotate:!0,bearing:0,pitch:0,maxPitch:85,pitchMaxDistance:3,rotateControl:!0,shiftKeyRotate:!0,pitchDrag:!0,touchRotate:!1,touchPitch:!1,compassBearing:!1});Object.assign(d.Map.prototype,{layerPointToContainerPoint:pu,containerPointToLayerPoint:cu,_getCenterLayerPoint:lu,panBy:uu,setZoomAround:du,panInside:hu,_limitCenter:gu,_limitOffset:yu,_getBoundsCenterZoom:xu,getBoundsZoom:vu,_tryAnimatedPan:wu,getBounds:Lu});d.Map.addInitHook(zd);et.value=Object.defineProperties({},Object.getOwnPropertyDescriptors(d.Marker.prototype));d.Marker.mergeOptions({rotation:0,rotateWithView:!1,keepUpright:!1,scale:1});Object.assign(d.Marker.prototype,{setIcon:Ad,getEvents:Rd,_setPos:Id,_updateZIndex:Dd,_initInteraction:Wd});hn.value=d.Popup.prototype.getEvents;Object.assign(d.Popup.prototype,{getEvents:$d});gn.value=d.Tooltip.prototype.getEvents;Object.assign(d.Tooltip.prototype,{getEvents:Vd});yn.value=d.Popup.prototype._updatePosition;xn.value=d.Popup.prototype._adjustPan;Object.assign(d.Popup.prototype,{_adjustPan:Zd,_updatePosition:qd});vn.value=d.Tooltip.prototype._setPosition;Object.assign(d.Tooltip.prototype,{_setPosition:Hd});wn.value=d.GridLayer.prototype._getTiledPixelBounds;Ln.value=d.GridLayer.prototype.getEvents;Object.assign(d.GridLayer.prototype,{getEvents:Yd,_getTiledPixelBounds:Jd});L();var Qo=new WeakMap;var Zi=new WeakMap;var qi=new WeakMap;L();La();$();J();Z();function Kd(e,t,r,o,i){let[n,a,s]=e,m=-n*Math.sin(o)*Math.sin(r)-a*Math.cos(r)-s*Math.cos(o)*Math.sin(r);return m>0?(i||={},i.left=t.x/2+t.y*1.5*(n*Math.cos(o)-s*Math.sin(o))/m,i.top=t.y/2-t.y*1.5*(-n*Math.sin(o)*Math.cos(r)+a*Math.sin(r)-s*Math.cos(o)*Math.cos(r))/m,i):null}function wf(e,t,r,o,i,n,a){if(e.hidden=!0,!r||!t||t.altitude<=0)return;e.parentNode!==r&&r.append(e);let s=Kd(t.direction,o,i,n,a);if(!s)return;let{left:m,top:f}=s;e.hidden=m<0||m>o.x||f<0||f>r.clientHeight||r.style.display==="none",e.style.left=`${m}px`,e.style.top=`${f}px`}function Yt({map:e,originalSky:t,sunDisc:r,moonDisc:o,projection:i}){let n=pt.get(e),a=Ye.get(e);n?e.getContainer().style.setProperty("--leaflet-sky-background",n.background):t?e.getContainer().style.setProperty("--leaflet-sky-background",t):e.getContainer().style.removeProperty("--leaflet-sky-background");let s=e.getSize(),m=_(e)*B,f=k(e)*B;wf(r,n,a,s,m,f,i),wf(o,n?.moon,a,s,m,f,i)}var Qd=[[-18,[3,7,20],[17,28,54],[.025,.04,.09]],[-6,[37,53,84],[182,106,86],[.12,.1,.14]],[0,[101,131,171],[246,170,115],[.38,.24,.18]],[10,[74,147,208],[197,221,237],[.8,.75,.68]],[25,[53,144,213],[223,238,250],[1,1,1]]];var Lf=[0,0,0];function is(e,t,r,o){o||=[],o.length=e.length;let i;for(i=0;i<e.length;i++)o[i]=e[i]+(t[i]-e[i])*r;return o}function bf(e){let t="",r;for(r=0;r<e.length;r++)r&&(t+=", "),t+=Math.round(e[r]);return`rgb(${t})`}function eh(e){if(!Number.isFinite(e))throw new Error("Invalid solar altitude");let t=Qd,r=-1,o;for(o=0;o<t.length;o++)if(t[o][0]>=e){r=o;break}let i=t[r<0?t.length-1:r],n=t[Math.max(0,r-1)],a=n===i||r<0?1:(e-n[0])/(i[0]-n[0]);return{background:`linear-gradient(${bf(is(n[1],i[1],a,Lf))}, ${bf(is(n[2],i[2],a,Lf))})`,tint:is(n[3],i[3],a)}}function ns(e,t,r){let o=e instanceof Date?Date.prototype.getTime.call(e):typeof e=="string"?Date.parse(e):new Date(e).getTime();if(!Number.isFinite(o)||!Number.isFinite(t)||Math.abs(t)>90||!Number.isFinite(r)||Math.abs(r)>180)throw new Error("Invalid solar date or location");return o}$();function as(e,t,r,o,i){let n=(280.16+360.9856235*e+r)*B-o,a=t*B,s=Math.asin(Math.sin(a)*Math.sin(i)+Math.cos(a)*Math.cos(i)*Math.cos(n)),f=(Math.atan2(Math.sin(n),Math.cos(n)*Math.sin(a)-Math.tan(i)*Math.cos(a))/B+180+360)%360;return{altitude:s/B,azimuth:f,direction:[Math.sin(f*B)*Math.cos(s),Math.sin(s),-Math.cos(f*B)*Math.cos(s)]}}$();$();var Hi=Math.sin(23.4397*B);$();var Yi=Math.cos(23.4397*B);function th(e,t,r){let o=ns(e,t,r)/864e5-10957.5,i=(134.963+13.064993*o)*B,n=(218.316+13.176396*o+6.289*Math.sin(i))*B,a=5.128*Math.sin((93.272+13.22935*o)*B)*B,s=Math.cos(a)*Math.cos(n),m=Math.cos(a)*Math.sin(n)*Yi-Math.sin(a)*Hi,f=Math.cos(a)*Math.sin(n)*Hi+Math.sin(a)*Yi;return as(o,t,r,Math.atan2(m,s),Math.asin(f))}$();function rh(e,t,r){let i=ns(e,t,r)/864e5-10957.5,n=(357.5291+.98560028*i)*B,a=n+(1.9148*Math.sin(n)+.02*Math.sin(2*n)+3e-4*Math.sin(3*n)+102.9372+180)*B,s=Math.asin(Math.sin(a)*Hi),m=Math.atan2(Math.sin(a)*Yi,Math.cos(a));return as(i,t,r,m,s)}function Kr(e){let t=te.get(e);t&&E(t)}function Sr(e){let{control:t,map:r,date:o,slider:i,output:n,status:a}=e;try{t.live&&(t.time=new Date);let s=t.time.toISOString();o.value=s.slice(0,10),i.value=String(t.time.getUTCHours()*60+t.time.getUTCMinutes()),n.textContent=`${s.slice(11,16)} UTC${t.live?" \xB7 now":""}`;let m=r.getCenter(),f=rh(t.time,m.lat,m.lng);pt.set(r,f),Object.assign(f,eh(f.altitude)),f.moon=th(t.time,m.lat,m.lng),a.textContent=f.altitude<=0?"Night \xB7 no direct sunlight":f.altitude<3?"Low sun \xB7 shadows paused":`Sun altitude ${f.altitude.toFixed(1)}\xB0`,r.fire("simulationtimechange",{time:new Date(t.time),live:t.live}),Yt(e),Kr(r)}catch(s){pt.delete(r),Yt(e),Kr(r),a.textContent=`Error: ${s.message}`,console.error("Solar simulation",s)}}function oh(e){e.control.live=!0,Sr(e)}function ih(e){let{control:t,map:r,date:o,slider:i,status:n}=e;if(t.live=!1,!o.value||!o.validity.valid){t.time=new Date(NaN),r.fire("simulationtimechange",{time:null,live:!1}),pt.delete(r),Yt(e),Kr(r),n.textContent="Error: choose a valid solar date";return}t.time=new Date(`${o.value}T00:00:00Z`),t.time.setUTCMinutes(Number(i.value)),Sr(e)}function nh(e){let t="position:absolute;width:18px;height:18px;border-radius:50%;transform:translate(-50%,-50%);pointer-events:none;",r=d.DomUtil.create("div","sunlight-sun"),o=d.DomUtil.create("div","sunlight-moon");r.style.cssText=t+"background:#fff3bd;box-shadow:0 0 18px 7px #ffd27699;",o.style.cssText=t+"background:#dce5f2;box-shadow:0 0 10px 2px #cbdcff55;",r.setAttribute("role","img"),r.setAttribute("aria-label","Sun"),o.setAttribute("role","img"),o.setAttribute("aria-label","Moon");let i=d.DomUtil.create("div","sunlight-control");i.style.cssText="color:#222;width:min(200px,calc(100vw - 60px));font:12px/1.4 sans-serif;";let n=document.createElement("input");n.type="date",n.style.cssText="width:100%;box-sizing:border-box;",n.setAttribute("aria-label","Solar date (UTC)");let a=document.createElement("input");a.type="range",a.style.cssText="width:100%;box-sizing:border-box;margin:10px 0 4px;cursor:pointer;",a.min="0",a.max="1439",a.step="1",a.setAttribute("aria-label","Time of day (UTC)");let s=document.createElement("output");s.style.cssText="font-weight:bold;font-variant-numeric:tabular-nums;",s.setAttribute("aria-live","off");let m=document.createElement("button");m.type="button",m.textContent="Now";let f=document.createElement("div");f.className="sunlight-time",f.style.cssText="display:flex;justify-content:space-between;align-items:center;",f.append(s,m);let p=document.createElement("div");p.className="sunlight-status",p.style.marginTop="5px",p.setAttribute("role","status");let c=document.createElement("small");c.style.color="#555",i.append(n,a,f,p,c);let l={control:null,map:e,originalSky:"",container:i,sunDisc:r,moonDisc:o,date:n,slider:a,output:s,status:p,projection:{left:0,top:0}};return l.update=Sr.bind(null,l),l.updateSky=Yt.bind(null,l),m.onclick=oh.bind(null,l),n.onchange=a.oninput=ih.bind(null,l),d.DomEvent.disableClickPropagation(i),d.DomEvent.disableScrollPropagation(i),l}function ah(e){e.control.live&&Sr(e)}function sh(e,t){let r=qi.get(t);if(r?.control&&r.control!==e)throw e._map=null,e.layer._map===t&&t.removeLayer(e.layer),new Error("Only one Time control can be active per map");return r||(r=nh(t),qi.set(t,r)),r.control=e,r.originalSky=t.getContainer().style.getPropertyValue("--leaflet-sky-background"),Qo.set(t,e),Zi.set(e,r),r.update(),r.timer=setInterval(ah,6e4,r),t.on("moveend",r.update),t.on("move rotate pitch resize",r.updateSky),r.container}L();L();function mh(e,t,r){let o=e.closest("label");if(r.classList.contains("layer-count"))e.hasAttribute("aria-label")||e.setAttribute("aria-label",o.textContent.trim()),r.id=`leaflet-layer-count-${d.Util.stamp(t)}`,e.setAttribute("aria-describedby",r.id),o.append(r);else if(r.classList.contains("traffic-status")){let i=o.nextElementSibling;i?.classList.contains("traffic-status-group")||(i=d.DomUtil.create("div","traffic-status-group"),i.style.cssText="display:flex;flex-wrap:wrap;gap:4px 8px;max-width:200px;margin:2px 0 6px 20px;",i.setAttribute("role","group"),i.setAttribute("aria-label","Traffic counts"),o.after(i)),i.append(r)}else o.after(r)}L();L();var Mf=d?.LayersControl?.prototype._addItem;Mf&&!d.Control.Layers&&(d.LayersControl.prototype._addItem=Cv);function Cv(e){let t=Mf.call(this,e);return t.querySelector(".leaflet-control-layers-selector").layerId=d.Util.stamp(e.layer),t}function fh(e,t,r){let o,i;for(o of e.getContainer().querySelectorAll(".leaflet-control-layers-selector"))if(i=e._layers[o.layerId],o.layerId===d.Util.stamp(t)||i instanceof d.LayerGroup&&i.hasLayer(t))return mh(o,t,r),!0;return!1}function ss(e){let t=fh(e.map,e.layer,e.element),r=e.onPlace;return r?.(t),t}var ms=[];function ph(){let e=ms.shift();e?.map.hasLayer(e.layer)&&ss(e)}function fs(){ms.push(this),queueMicrotask(ph)}function ch(){this.map.off("layeradd layerremove",fs,this);let e=this.element.parentElement;this.element.remove(),e?.classList.contains("traffic-status-group")&&!e.childElementCount&&e.remove()}function ei(e,t,r){let o={map:e._map,layer:e,element:t,onPlace:r};return o.map.on("layeradd layerremove",fs,o),e.once("remove",ch,o),ss(o)}var _t=new WeakMap;L();function lh(e){return _t.get(this).addTo(e)}L();function uh(){return d.Control.prototype.remove.call(_t.get(this))}function Bf(e){d.Util.setOptions(this,e),this.live=!0,this.layer=new d.Layer,_t.set(this.layer,this),z.set(this.layer,"time")}function dh(e){return sh(this,e)}L();function Tf(e,t){e.classList.toggle("leaflet-control",!t),e.classList.toggle("leaflet-bar",!t),e.style.background=t?"":"#fff",e.style.padding=t?"2px 0 6px 20px":"8px",e.style.margin=t?"0":""}function hh(e){d.Control.prototype.addTo.call(this,e);let t=this.getContainer();return this.layer._map===e?ei(this.layer,t,Tf.bind(null,t)):Tf(t,!1),this}L();function gh(){return this._map?.hasLayer(this.layer)?(this._map.removeLayer(this.layer),this):d.Control.prototype.remove.call(this)}function yh(e){let{map:t,timer:r,sunDisc:o,moonDisc:i}=e,n=qi.get(t);clearInterval(r),Qo.delete(t),t.fire("simulationtimechange",{time:null,live:!1}),t.off("moveend",e.update),t.off("move rotate pitch resize",e.updateSky),pt.delete(t),Yt(e),o.remove(),i.remove(),Kr(t),n===e&&(n.control=null)}function xh(){let e=Zi.get(this);e&&(yh(e),Zi.delete(this))}Ka();var Qr=class extends ht(d.Control){static initHooks=!0;static defaultOptions={position:"bottomright"};constructor(t){super(t),d.version.startsWith("2.")&&(Bf.call(this,t),this.callInitHooks())}};Object.assign(Qr.prototype,{onAdd:dh,onRemove:xh,addTo:hh,remove:gh});d.version.startsWith("1.")&&(Qr.prototype.options=Object.assign(Object.create(d.Control.prototype.options),Qr.defaultOptions),Qr.prototype.initialize=Bf);d.Control.Time=Qr;L();L();var Xt=new WeakMap;var ps=new WeakMap;L();var Le=new WeakMap;var Y=new WeakMap;var kr=new WeakMap;var Cr=new WeakMap;var X=new WeakMap;var Je=new WeakMap;var We=new WeakMap;var _r=new WeakMap;var ae=new WeakMap;L();var cs=new WeakMap;var Xi=new WeakMap;var Jt=new WeakSet;var Pf=["rootDirectoryOffset","rootDirectoryLength","jsonMetadataOffset","jsonMetadataLength","leafDirectoryOffset","leafDirectoryLength","tileDataOffset","tileDataLength","numAddressedTiles","numTileEntries","numTileContents"];var Sf=["clustered","internalCompression","tileCompression","tileType","minZoom","maxZoom"];var kf=["minLon","minLat","maxLon","maxLat"];function vh(e){let t=e.byteLength>=127?new DataView(e):null;if(!t||t.getUint32(0,!0)!==1767132496||t.getUint32(4,!0)!==57894252)throw new Error("Expected a PMTiles v3 archive");let r={},o;for(o=0;o<Pf.length;o++)r[Pf[o]]=Number(t.getBigUint64(8+o*8,!0));for(o=0;o<Sf.length;o++)r[Sf[o]]=t.getUint8(96+o);for(o=0;o<kf.length;o++)r[kf[o]]=t.getInt32(102+o*4,!0)/1e7;return r.centerZoom=t.getUint8(118),r.centerLon=t.getInt32(119,!0)/1e7,r.centerLat=t.getInt32(123,!0)/1e7,r}var ti=new WeakMap;async function ri(e,t,r,o){if(o?.throwIfAborted(),!Number.isSafeInteger(t)||!Number.isSafeInteger(r)||t<0||r<=0||!Number.isSafeInteger(t+r))throw new Error("Invalid PMTiles byte range");let i=await fetch(ae.get(e),{headers:{Range:`bytes=${t}-${t+r-1}`},signal:o});if(!i.ok)throw new Error(`Unable to read PMTiles: HTTP ${i.status}`);let n=i.headers.get("ETag");if(ti.get(e)&&n!==ti.get(e))throw new Error("PMTiles archive changed; recreate the layer");n&&ti.set(e,n);let a=await i.arrayBuffer();if(i.status===200)a=a.slice(t,t+r);else if(i.status!==206||!i.headers.get("Content-Range")?.startsWith(`bytes ${t}-${t+r-1}/`))throw new Error("Invalid PMTiles range response");if(a.byteLength!==r)throw new Error("Truncated PMTiles range");return a}function eo(e){if(!Jt.has(e))return e.getHeader();if(e.options.archive&&e.options.archive!==e)return eo(e.options.archive);let t=Xi.get(e);return t||(t=ri(e,0,127).then(vh),Xi.set(e,t)),t}var gt=new WeakMap;var Et=new WeakMap;$();function ls(e,t=!0){let r={enabled:t,loaded:0,skipped:0,pending:0,errors:[]},o;for(o of Y.get(e).values())o.error?r.errors.push(o.error):o.done||r.pending++,r.loaded+=o.buildings??0,r.skipped+=o.skipped??0;e.fire("progress",r)}function wh(e){let{backend:t,area:r}=e;if(!e.positions.length){r.mesh=null,r.buildings=0,r.skipped=e.skipped,r.done=!0;return}let o=w.get(t).device,i=e.preparedGeometry,n={position:{size:3,data:i.positions},normal:{size:3,data:i.normals},color:{size:3,data:i.colors}};i.instanceOffsets&&(n.instanceOffset={size:4,data:i.instanceOffsets}),t.options.nightLight&&(n.uv={size:2,data:i.uvs});let a,s;for(a in n)s=n[a],s.count=s.data.length/s.size,s.buffer=o.createBuffer({size:Math.max(4,s.data.byteLength),usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),o.queue.writeBuffer(s.buffer,0,s.data);let m={device:o,bounds:i.bounds,attributes:n,drawRange:{start:0,count:n.position.count}};r.mesh={...Oe(),device:o,geometry:m,program:Ue(t,{instanced:!!i.instanceOffsets,vertexColors:!0,roofTexture:t.options.roofTexture,wallTexture:t.options.wallTexture,nightLight:!!t.options.nightLight,alphaMode:t.options.nightLight?"BLEND":void 0,doubleSided:!!t.options.nightLight}),id:Mt.value++,renderOrder:0,fadeDuration:250,extras:{featureFaces:e.featureFaces,lights:e.lights}},r.buildings=e.featureFaces.length,r.skipped=e.skipped,r.done=!0,q(r.mesh,M.get(t)),E(t)}var Lh=new TextDecoder;function bh(e,t,r){if(!Number.isInteger(e)||!Number.isInteger(t)||!Number.isInteger(r)||e<0||e>26||t<0||r<0||t>=2**e||r>=2**e)throw new Error("Invalid PMTiles tile coordinates");let o=(4**e-1)/3,i=2**e,n,a,s,m;for(n=i/2;n>=1;n/=2)a=t&n?1:0,s=r&n?1:0,o+=n*n*(3*a^s),s||(a&&(t=i-1-t,r=i-1-r),m=t,t=r,r=m);return o}var Mh={bytes:null,cursor:0};function oi(e){let{bytes:t}=e,r=0,o,i;for(o=1;o<=2**49;o*=128){if(e.cursor>=t.length)throw new Error("Truncated PMTiles directory");if(i=t[e.cursor++],r+=(i&127)*o,!Number.isSafeInteger(r))throw new Error("Invalid PMTiles directory integer");if(i<128)return r}throw new Error("Invalid PMTiles directory integer")}function Bh(e){let t=Mh,r=new Uint8Array(e);t.bytes=r,t.cursor=0;try{let o=oi(t);if(o>(r.length-t.cursor)/4)throw new Error("Invalid PMTiles directory count");let i=new Array(o),n=0,a,s,m;for(a=0;a<o;a++){if(n+=oi(t),!Number.isSafeInteger(n)||a&&n<=i[a-1].tileId)throw new Error("Invalid PMTiles directory tile IDs");i[a]={tileId:n,runLength:0,length:0,offset:0}}for(s of i)s.runLength=oi(t);for(s of i)if(s.length=oi(t),!s.length)throw new Error("Invalid PMTiles directory length");for(a=0;a<i.length;a++){if(s=i[a],m=oi(t),!m&&!a)throw new Error("Invalid PMTiles directory offset");s.offset=m?m-1:i[a-1].offset+i[a-1].length}if(t.cursor!==r.length)throw new Error("Trailing PMTiles directory data");return i}finally{t.bytes=null,t.cursor=0}}async function us(e,t){if(t===1)return e;if(t!==2)throw new Error(`Unsupported PMTiles compression: ${t}`);let r=new Blob([e]),o=new DecompressionStream("gzip");return new Response(r.stream().pipeThrough(o)).arrayBuffer()}async function Th(e,t,r,o){return Bh(await us(await ri(e,t,r),o))}async function Ph(e,t,r,o){let i=Cr.get(e),n=`${t}:${r}`;i.has(n)||(i.size>=32&&i.delete(i.keys().next().value),i.set(n,Th(e,t,r,o)));let a=i.get(n);try{return await a}catch(s){throw i.get(n)===a&&i.delete(n),s}}function Sh(e,t){let r=0,o=e.length-1,i;for(;r<=o;)i=r+o>>1,e[i].tileId<=t?r=i+1:o=i-1;return e[o]}async function kh(e,t,r,o,i){if(o-r.tileId>=r.runLength)return;if(r.offset+r.length>t.tileDataLength)throw new Error("PMTiles tile outside data section");let n=await us(await ri(e,t.tileDataOffset+r.offset,r.length,i),t.tileCompression);return i?.throwIfAborted(),{data:n}}async function Ch(e,t,r,o){let i=t.rootDirectoryOffset,n=t.rootDirectoryLength,a=-1,s=-1,m=-1,f,p,c,l;for(f=0;f<4;f++){if(i===a||i===s||i===m)throw new Error("Cyclic PMTiles directory");if(f===0?a=i:f===1?s=i:f===2&&(m=i),p=await Ph(e,i,n,t.internalCompression),o?.throwIfAborted(),c=Sh(p,r),!c)return;if(c.runLength)return l=await kh(e,t,c,r,o),l;if(c.offset+c.length>t.leafDirectoryLength)throw new Error("PMTiles directory outside leaf section");i=t.leafDirectoryOffset+c.offset,n=c.length}throw new Error("PMTiles directory depth exceeds four levels")}async function to(e,t,r,o,i){if(!Jt.has(e))return e.getZxy(t,r,o,i);if(e.options.archive&&e.options.archive!==e)return to(e.options.archive,t,r,o,i);let n=bh(t,r,o);i?.throwIfAborted();let a=await eo(e);if(i?.throwIfAborted(),!(t<a.minZoom||t>a.maxZoom))return Ch(e,a,n,i)}async function _h(e,t){if(X.get(e)){let{data:o,url:i}=e.options;if(o!==void 0&&i)throw new Error("GeoJSON source requires either data or url");if(o!==void 0)return o;if(!i)throw new Error("GeoJSON source requires either data or url");let n=new URL(i,document.baseURI),a=await fetch(n,{signal:t.request.signal});if(!a.ok)throw new Error(`Unable to load GeoJSON: HTTP ${a.status}`);return a.json()}let r=await to(e,t.coords.z,t.coords.x,t.coords.y,t.request.signal);return r?JSON.parse(Lh.decode(r.data)):{type:"FeatureCollection",features:[]}}$();function Eh(e,t,r){let o=r.options.crs,i=o.project(D.get(e));return{backend:e,area:t,map:r,crs:o,origin:i,metres:Math.cos(D.get(e).lat*B),jobs:[],featureFaces:[],skipped:0}}var ds=new URL("leaflet-city-mapper-worker.js",document.currentScript?.src||document.baseURI).href;function Oh(e,t){if(t.type==="abort")e.reject(e.signal.reason);else if(t.type==="error")e.reject(new Error(`Geometry worker failed: ${t.message}`));else if(t.type==="messageerror")e.reject(new Error("Unable to receive geometry worker buffers"));else if(t.data?.error){let r=new Error(t.data.error.message);r.name=t.data.error.name,e.reject(r)}else e.resolve(t.data)}function zh(e,t,r){if(e.resolve=t,e.reject=r,e.onEvent=Oh.bind(null,e),e.worker.addEventListener("message",e.onEvent),e.worker.addEventListener("error",e.onEvent),e.worker.addEventListener("messageerror",e.onEvent),e.signal.addEventListener("abort",e.onEvent,{once:!0}),e.signal.aborted){r(e.signal.reason);return}e.worker.postMessage(e.input)}var Cf=new WeakMap;function Ah(e){e.closed=!0;let t;for(t of e.entries)t.closed=!0,t.worker.terminate(),t.task&&t.task.reject(new DOMException("Map removed","AbortError"));e.entries.clear(),e.idle.length=0}function hs(e,t){if(typeof Worker>"u")throw new Error("Web Workers are required to prepare source geometry");let r=e,o,i;if(globalThis.location){let a=new URL(e,location.href);(a.protocol==="https:"||a.protocol==="http:")&&a.origin!==location.origin&&(o=URL.createObjectURL(new Blob([`import ${JSON.stringify(a.href)};`],{type:"text/javascript"})),r=o)}try{i=new Worker(r,{type:"module"})}finally{!i&&o&&URL.revokeObjectURL(o)}let n={url:e,pool:t,worker:i,blobUrl:o};return t&&t.entries.add(n),n}function Rh(e,t){let r=e&&Cf.get(e);e&&!r&&(r={entries:new Set,idle:[],closed:!1},Cf.set(e,r),e.once("unload",Ah.bind(null,r)));let o,i;if(r){if(r.closed)throw new DOMException("Map removed","AbortError");for(i=0;i<r.idle.length;i++)if(r.idle[i].url===t)return o=r.idle[i],r.idle.splice(i,1),o;o=r.idle.pop(),o&&(o.closed=!0,o.worker.terminate(),r.entries.delete(o))}return hs(t,r)}async function ii(e,t,r,o=new AbortController().signal){o.throwIfAborted();let i=Rh(e,t||ds),{worker:n,pool:a}=i,s={worker:n,signal:o,input:r};i.task=s;let m=!1;try{let f=await new Promise(zh.bind(null,s));return m=!0,f}finally{n.removeEventListener("message",s.onEvent),n.removeEventListener("error",s.onEvent),n.removeEventListener("messageerror",s.onEvent),o.removeEventListener("abort",s.onEvent),i.task=null,m&&a&&!a.closed&&!o.aborted?a.idle.push(i):(i.closed||n.terminate(),a&&a.entries.delete(i)),i.blobUrl&&(URL.revokeObjectURL(i.blobUrl),i.blobUrl=null)}}async function Ih(e,t){try{let r=await ii(e.map||e.backend._map,e.backend.options.workerUrl,{jobs:e.jobs,nightLight:!!e.backend.options.nightLight},t),o;for(o=0;o<r.ranges.length;o++)Object.assign(e.featureFaces[o],r.ranges[o]);e.positions=r.positions,e.uvs=r.uvs,e.lights=r.lights,e.preparedGeometry=r}finally{e.jobs=null}}function Dh(e,t){let r=e?.geometry,o=r?.type==="Point";if(t&&!o)throw new Error("Night lights require Point geometry");if(r?.type!=="Polygon"&&r?.type!=="MultiPolygon"&&!o)throw new Error("Unsupported GeoJSON geometry");let i=o?r.coordinates:r.type==="Polygon"?r.coordinates[0]?.[0]:r.coordinates[0]?.[0]?.[0];if(!Number.isFinite(i?.[0])||!Number.isFinite(i?.[1]))throw new Error("Invalid GeoJSON coordinates");return i}function Gh(e,t){let r=e.options.style(t);if(r===null)return null;if(!r||typeof r!="object")throw new Error("style must return an extrusion style or null");let{top:o,bottom:i=0}=r;if(!Number.isFinite(o)||!Number.isFinite(i)||i<0||o<=i)throw new Error("Invalid extrusion heights: expected top > bottom >= 0");return r}L();function Uh(e,t,r){let{backend:o,crs:i,origin:n,metres:a,map:s}=e,m=new d.LatLng(r,t),f=i.project(m),p=xe(s,m),c=M.get(o);return{x:(f.x-n.x)*a,y:(f.y-n.y)*a,ground:Number.isFinite(p)&&Number.isFinite(c.position[1])?p-c.position[1]:0}}L();function Nh(e,t){let{backend:r,crs:o,origin:i,metres:n,map:a}=e;if(t.length<4)throw new Error("Invalid GeoJSON polygon ring");let s=[],m=M.get(r),f,p,c,l,u,h;for(f=0;f<t.length-1;f++){if(p=t[f][0],c=t[f][1],!Number.isFinite(p)||!Number.isFinite(c))throw new Error("Invalid GeoJSON coordinates");l=new d.LatLng(c,p),u=o.project(l),h=xe(a,l),s.push({x:(u.x-i.x)*n,y:(u.y-i.y)*n,ground:Number.isFinite(h)&&Number.isFinite(m.position[1])?h-m.position[1]:0})}return s}function Fh(e,t){let r=t.type==="Polygon"?[t.coordinates]:t.type==="MultiPolygon"?t.coordinates:[],o=[],i,n,a;for(i of r){if(!i.length)throw new Error("Empty GeoJSON polygon");a=[];for(n of i)a.push(Nh(e,n));o.push(a)}return o}function jh(e,t,r,o,i,n){let a=t.geometry,s=Fh(e,a),m=a.type==="Point"?Uh(e,r,o):null,f=e.backend.options.nightLight,p=m?Bt(i.color??(f?void 0:5210683)):n,c=m&&!f?Bt(i.trunkColor??7491898):null;e.jobs.push({point:m,polygons:s,baseColor:{r:n.r,g:n.g,b:n.b},support:t.properties?.cod_ouvrag||`${r},${o}`,style:{top:i.top,bottom:i.bottom??0,color:{r:p.r,g:p.g,b:p.b},trunkColor:c?{r:c.r,g:c.g,b:c.b}:void 0,trunkRadius:i.trunkRadius,crownRadius:i.crownRadius,crownBottom:i.crownBottom,crownShape:i.crownShape,poleRadius:i.poleRadius,lightRadius:i.lightRadius,lightFlux:i.lightFlux}})}L();function Wh(e,t,r,o){if(!t)return!0;let i=e.project(new d.LatLng(o,r),t.z);return Math.floor(i.x/256)===t.x&&Math.floor(i.y/256)===t.y}function $h(e,t){let{backend:r,area:o,map:i}=e,n=o.coords,a=Dh(t,r.options.nightLight),s=t.geometry,m=a[0],f=a[1];if(!Wh(i,n,m,f))return;let p=Gh(r,t);if(p===null){e.skipped++;return}let{color:c=14267276}=p,l=Bt(c);jh(e,t,m,f,p,l),e.featureFaces.push({id:t.id??t.properties?.objectid??JSON.stringify(s),properties:t.properties,baseColor:l})}async function Vh(e,t,r){let o=performance.now()+4,i;for(i of r){if(t.request.signal.aborted)return;if(performance.now()>=o){if(await new Promise(requestAnimationFrame),t.request.signal.aborted)return;o=performance.now()+4}$h(e,i)}}async function Zh(e,t,r){try{if(await new Promise(requestAnimationFrame),await se.get(r),t.request.signal.aborted)return;let o=await _h(e,t);if(t.request.signal.aborted)return;if(o?.type!=="FeatureCollection"||!Array.isArray(o.features))throw new Error("Invalid GeoJSON response");if(X.get(e)&&typeof e.options.style!="function")throw new Error("style must be a function");if(e.options.worker===!1)throw new Error("worker: false is no longer supported; GeoJSON geometry requires Web Workers");let i=Eh(e,t,r);if(await Vh(i,t,o.features),t.request.signal.aborted||(await Ih(i,t.request.signal),t.request.signal.aborted))return;wh(i)}catch(o){t.request.signal.aborted||(t.error=o.message,e.fire("error",{error:o}))}finally{Je.set(e,Je.get(e)-1),Ji(e,r)}}function gs(e,t){return e.distance-t.distance}function qh(e,t){let r=[],o,i,n;for(o of e)for(i of Y.get(o).values())i.started||i.request.signal.aborted||(n=i.coords&&t.project(t.getCenter(),i.coords.z).divideBy(256),r.push({layer:o,area:i,distance:n?Math.hypot(i.coords.x+.5-n.x,i.coords.y+.5-n.y)/2**i.coords.z:0}));return r.sort(gs),r}function Ji(e,t=e._map){let r=t&&te.get(t);if(!r||!F.has(r))return;let o=[],i,n,a;for(i of F.get(r))Number.isFinite(Je.get(i))&&Y.get(i)&&(ae.get(i)||X.get(i))&&o.push(i);let s=qh(o,t),m=0;for(i of o)m+=Je.get(i);for({layer:a,area:n}of s){if(m>=4)break;Je.get(a)>=2||(n.started=!0,Je.set(a,Je.get(a)+1),m++,Zh(a,n,t))}for(i of o)ls(i)}var at=new WeakMap;var ke=new WeakMap;function Ot(e,t){t?.model&&(t=null),!(at.get(e)?.mesh===t?.mesh&&at.get(e)?.vertexStart===t?.vertexStart)&&(at.get(e)&&(at.get(e).mesh.highlight=null),at.set(e,t),t&&(t.mesh.highlightRange[0]=t.vertexStart,t.mesh.highlightRange[1]=t.vertexEnd,t.mesh.highlight=t.mesh.highlightRange),E(e))}var Ae=new WeakMap;var Er=new WeakMap;var Re=new WeakMap;function zt(e,t,r){let o=Re.get(e);if(!o)return;if(t){o.replaceChildren(e.options.tooltip(t)),o.hidden=!1;let a=Ae.get(e).getBoundingClientRect(),s=r.clientX-a.left,m=r.clientY-a.top;o.style.left=`${s+o.offsetWidth+16>a.width?s-o.offsetWidth-12:s+12}px`,o.style.top=`${m+o.offsetHeight+16>a.height?m-o.offsetHeight-12:m+12}px`}else o.hidden=!0;let i=R.get(e),n;if(i){let a=!1;for(n of F.get(i))if(Re.get(n)&&!Re.get(n).hidden){a=!0;break}a?(Er.get(i)===void 0&&Er.set(i,Ae.get(e).style.cursor),Ae.get(e).style.cursor="pointer"):Er.get(i)!==void 0&&(Ae.get(e).style.cursor=Er.get(i),Er.delete(i))}}function ro(e,t){t.request.abort();let r;if(t.mesh){at.get(e)?.mesh===t.mesh&&(Ot(e,null),ke.set(e,null),zt(e,null)),q(t.mesh,null),E(e);let o=t.mesh.geometry;for(r of Object.values(o.attributes))r.buffer.destroy();t.mesh.program.pipelineCache.clear()}}function Hh(e,t){return e.distance-t.distance}function oo(e){if(!e._map||!R.get(e))return;if(X.get(e)){Y.get(e).has("geojson")||Y.get(e).set("geojson",{request:new AbortController}),Ji(e);return}if(!U.get(e))return;let t=U.get(e).minZoom,r=e._map.project(e._map.getCenter(),t).divideBy(256).floor(),o=e._map.getBounds(),i=e._map.project(o.getNorthWest(),t).divideBy(256).floor(),n=e._map.project(o.getSouthEast(),t).divideBy(256).floor(),a=e._map.project([U.get(e).maxLat,U.get(e).minLon],t).divideBy(256).floor(),s=e._map.project([U.get(e).minLat,U.get(e).maxLon],t).divideBy(256).floor(),m=new Map,f,p,c,l,u;for(f=Math.max(0,i.x-1,a.x);f<=Math.min(2**t-1,n.x+1,s.x);f++)for(p=Math.max(0,i.y-1,a.y);p<=Math.min(2**t-1,n.y+1,s.y);p++)m.set(`${f}/${p}`,{z:t,x:f,y:p});for([c,l]of Y.get(e))m.has(c)||(ro(e,l),Y.get(e).delete(c));let h=[];for([c,u]of m)u.distance=Math.hypot(u.x+.5-r.x,u.y+.5-r.y)/2**t,h.push(u);h.sort(Hh);for(u of h)c=`${u.x}/${u.y}`,Y.get(e).has(c)||Y.get(e).set(c,{coords:u,request:new AbortController});Ji(e)}function ni(e){if(!M.get(e)||!D.get(e))return;Et.get(e)==null&&Et.set(e,M.get(e).position[1]);let t=me.get(e._map),r=t&&pr(t,D.get(e)),o=Number.isFinite(r)?e.options.terrainOffset??0:0;M.get(e).position[1]=Et.get(e)+(r??0)+o}function Yh(e,t){e.attributes.index?.data instanceof Uint8Array&&(e.attributes.index.data=new Uint16Array(e.attributes.index.data));let r,o,i;for(r in e.attributes)o=e.attributes[r],o.size||=1,o.count=o.data.length/o.size,o.indexFormat=o.data instanceof Uint32Array?"uint32":"uint16",i=o.buffer,o.buffer=t.createBuffer({size:Math.max(4,o.data.byteLength),usage:r==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),t.queue.writeBuffer(o.buffer,0,o.data),i?.destroy();e.device=t,e.drawRange.count=e.attributes.index?.count||e.attributes.position.count}function Xh(e,t){let r,o;for(r in e)r!=="baseTexture"&&r!=="metalTexture"&&r!=="emissiveTexture"&&r!=="occlusionTexture"||(o=e[r],!(!o||o.device===t)&&(o.device=t,o.texture=t.createTexture({size:[o.image.width,o.image.height],format:o.format,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),o.sampler=t.createSampler(o.samplerOptions),o.uploaded=null))}function Jh(e,t){let r=R.get(t),o;if(e.geometry&&e.geometry.device!==w.get(r).device){let i=e.geometry,n=e.program._layerMaterial,a=w.get(r).device;Yh(i,a),e.bindGroup=null,e.boundTextures?e.boundTextures.length=0:e.boundTextures=[],Xh(n,a),e.program.pipelineCache.clear(),e.program=Ue(t,n),e.device=a}e.texture&&e.texture.device!==w.get(r).device&&(o=e.texture,o.device=w.get(r).device,o.texture=w.get(r).device.createTexture({size:[e.texture.image.width,e.texture.image.height],format:e.texture.format,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),o.sampler=w.get(r).device.createSampler(o.samplerOptions),o.uploaded=null)}var ai=new WeakMap;function Kh(e){let t=e.getContainer();if(t.querySelector(".leaflet-webgpu-warning"))return;let r=document.createElement("div");r.className="leaflet-webgpu-warning",r.setAttribute("role","alert"),r.style.cssText="position:absolute;z-index:1000;top:50%;left:50%;transform:translate(-50%,-50%);max-width:calc(100% - 32px);box-sizing:border-box;padding:12px 16px;border:1px solid #c98b24;border-radius:6px;background:#fff8e6;box-shadow:0 3px 12px #0005;color:#30251d;font:14px/1.5 sans-serif;text-align:center;pointer-events:auto",r.append("WebGPU is not available in this browser or device. ");let o=document.createElement("a");o.href="https://developer.mozilla.org/en-US/docs/Web/API/WebGPU_API#browser_compatibility",o.target="_blank",o.rel="noopener noreferrer",o.textContent="Learn more",r.append(o),t.append(r)}function Or(e,t,r){throw Kh(r),gt.get(t).reject(e),te.delete(r),e}async function Qh(e,t){let r;try{r=await navigator.gpu.requestAdapter()}catch(o){Or(o,e,t)}return r||Or(new Error("Unable to acquire a WebGPU adapter"),e,t),r}async function eg(e,t,r){try{return await e.requestDevice()}catch(o){Or(o,t,r)}}function tg(e){let t=ai.get(e.currentTarget),r=te.get(t);if(w.get(r)?.device!==e.currentTarget||!F.get(r))return;let o;for(o of F.get(r))o.fire("error",{error:e.error})}function rg([e,t]){let r=ai.get(t),o=te.get(r);if(!o||w.get(o)?.device!==t)return;let i=new Error(`WebGPU device lost: ${e.message||e.reason}`),n;for(n of F.get(o))n.fire("error",{error:i})}function og(){return{position:[0,0,0],up:[0,1,0],target:[0,0,0],x:[0,0,0],y:[0,0,0],z:[0,0,0],viewMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],projectionMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],projectionViewMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],viewTransform:new DOMMatrix,projectionTransform:new DOMMatrix,projectionViewTransform:new DOMMatrix,fov:45,aspect:1,near:.1,far:1e4}}var si=new Float32Array(20);si[0]=si[5]=si[10]=si[15]=1;function ig(e,t){let r=w.get(e),o=t.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"depth"}},{binding:2,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"comparison"}},{binding:3,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"read-only-storage"}}]}),i=t.createBuffer({size:80,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),n=t.createSampler({compare:"less-equal",minFilter:"linear",magFilter:"linear"}),a=t.createBuffer({size:32,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});r.sunlight={layout:o,buffer:i,sampler:n,lights:a,size:0},t.queue.writeBuffer(i,0,si),Wn(e,1),r.roofFallbackTexture={device:t,texture:t.createTexture({size:[1,1],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:t.createSampler({addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}),image:null,format:"rgba8unorm",srgb:!1,uploaded:null}}var io=new WeakMap;var ys=[];function ng(){let e=ys.shift();io.set(e,!1),!(R.get(e)!==e||!w.get(e))&&(e._map._animatingZoom?E(e):gr(e))}function Ki(){let e=this;io.get(e)||(io.set(e,!0),ys.push(e),queueMicrotask(ng))}var mi=new WeakMap;function Qi(){mi.set(this,null)}var xs=[];function ag(){let e=xs.shift();R.get(e)===e&&w.get(e)&&gr(e)}function en(e){let t=this._map;e&&!qe.get(this)&&(qe.set(this,{from:t.getCenter(),zoom:t.getZoom(),to:e.center,targetZoom:e.zoom,start:performance.now()}),t.getContainer().classList.add("leaflet-camera-zoom")),xs.push(this),queueMicrotask(ag)}function tn(){let e=this,t;if(he.get(e))for(t of he.get(e).keys())t.finish();he.set(e,null),qe.set(e,null),se.delete(e._map),e._map.getContainer().classList.remove("leaflet-camera-zoom"),Bn(e._map),mi.set(e,null),E(e)}function sg(e,t,r){mr.set(e,null),r.className="leaflet-3d",r.style.cssText="position:absolute;top:0;left:0;z-index:1;pointer-events:none",r.setAttribute("role","img"),r.setAttribute("aria-label",e.options.ariaLabel??"3D scene"),t.getPane("mapPane").before(r),t.on("move zoom rotate pitch resize viewreset layeradd layerremove",Ki,e),t.on("zoomstart",Qi,e),t.on("zoomanim",en,e),t.on("zoomend",tn,e)}async function mg(e,t){let r=document.createElement("canvas");navigator.gpu||Or(new Error("Layer3D requires WebGPU"),e,t);let o=await Qh(e,t),i=await eg(o,e,t);ai.set(i,t),i.addEventListener("uncapturederror",tg),Promise.all([i.lost,Promise.resolve(i)]).then(rg);let n=r.getContext("webgpu");n||(i.destroy(),Or(new Error("Unable to create a WebGPU canvas context"),e,t));let a=navigator.gpu.getPreferredCanvasFormat();n.configure({device:i,format:a,alphaMode:"premultiplied"}),t.getContainer().querySelector(".leaflet-webgpu-warning")?.remove(),R.set(e,e),F.set(e,new Set),ie.set(e,D.get(e)),oe.set(e,Oe()),ee.set(e,og()),w.set(e,{device:i,context:n,format:a,canvas:r,dpr:Math.min(window.devicePixelRatio,2)}),ig(e,i),sg(e,t,r)}async function fi(e,t){let r=te.get(t);gt.get(r)&&await gt.get(r).promise,r||(r=e,gt.set(e,Promise.withResolvers()),gt.get(e).promise.catch(Xe),te.set(t,r),await mg(e,t),gt.get(e).resolve(),gt.delete(r),gr(r),te.set(t,r));let o=t.options.crs.project(ie.get(r)),i=t.options.crs.project(D.get(e)),n=Math.cos(ie.get(r).lat*B);Et.get(e)==null&&Et.set(e,M.get(e).position[1]),M.get(e).position[0]=(i.x-o.x)*n,M.get(e).position[1]=Et.get(e),M.get(e).position[2]=-(i.y-o.y)*n,ni(e),M.get(e).scale.fill(n/Math.cos(D.get(e).lat*B)),R.set(e,r),w.set(e,w.get(r)),oe.set(e,oe.get(r)),ee.set(e,ee.get(r)),F.get(r).add(e),q(M.get(e),oe.get(r)),Zt(M.get(e),Jh,e),E(r),(U.get(e)&&z.get(e)!=="raster"||X.get(e))&&oo(e)}var $e=new WeakMap;$();L();function fg(e,t){let r=new Float32Array(e.length),o,i,n,a,s,m,f,p,c,l,u,h,x,g,y,v;for(o=0;o<(t?.length||e.length/3);o+=3)for(i=t?t[o]:o,n=t?t[o+1]:o+1,a=t?t[o+2]:o+2,s=e[n*3]-e[i*3],m=e[n*3+1]-e[i*3+1],f=e[n*3+2]-e[i*3+2],p=e[a*3]-e[i*3],c=e[a*3+1]-e[i*3+1],l=e[a*3+2]-e[i*3+2],h=m*l-f*c,x=f*p-s*l,g=s*c-m*p,u=0;u<3;u++)y=u===0?i:u===1?n:a,r[y*3]+=h,r[y*3+1]+=x,r[y*3+2]+=g;for(o=0;o<r.length;o+=3)for(v=Math.hypot(r[o],r[o+1],r[o+2])||1,u=0;u<3;u++)r[o+u]/=v;return r}function _f(e,t){e.geometry?.attributes.position&&t.push(e);let r;for(r of e.children)_f(r,t)}function pi(e,t){if(!$e.get(e))return;let r=[];_f($e.get(e),r);let o,i,n,a,s,m,f,p,c,l,u,h,x,g,y,v,S,T,P,A;if(!Te.get(t)||!e.options.terrainConform){for(o of r)i=o.geometry._terrainBasePositions,i&&(n=o.geometry,a=n.attributes.position,a.data.set(i),o.device.queue.writeBuffer(a.buffer,0,i),s=n._terrainBaseNormals,s&&(n.attributes.normal.data.set(s),o.device.queue.writeBuffer(n.attributes.normal.buffer,0,s)),_e(n));return}Pe(M.get(e));let Q=e._map,N=Q.options.crs,G=N.project(ie.get(R.get(e))),V=Math.cos(ie.get(R.get(e)).lat*B),ue=N.scale(ye.get(t));for(o of r){for(n=o.geometry,m=n.attributes.position,n._terrainBasePositions||=m.data.slice(),f=n.attributes.normal,n._terrainBaseNormals||=f.data.slice(),m.data.set(n._terrainBasePositions),p=o.worldMatrix,c=new DOMMatrix(p).inverse().toFloat64Array(),l=0;l<m.data.length;l+=3)u=m.data[l],h=m.data[l+1],x=m.data[l+2],g=p[1]*u+p[5]*h+p[9]*x+p[13],y=Math.max(0,Math.min(1,1-(g-M.get(e).position[1])/8)),y&&(v=p[0]*u+p[4]*h+p[8]*x+p[12],S=p[2]*u+p[6]*h+p[10]*x+p[14],T=N.transformation.transform(new d.Point(G.x+v/V,G.y-S/V),ue),P=pr(t,T),Number.isFinite(P)&&(A=(P-g)*y,m.data[l]+=c[4]*A,m.data[l+1]+=c[5]*A,m.data[l+2]+=c[6]*A));o.device.queue.writeBuffer(m.buffer,0,m.data),f.data.set(fg(m.data,n.attributes.index?.data)),o.device.queue.writeBuffer(f.buffer,0,f.data),_e(n)}E(e)}function pg(e){return{addressModeU:e?.wrapS===33071?"clamp-to-edge":e?.wrapS===33648?"mirror-repeat":"repeat",addressModeV:e?.wrapT===33071?"clamp-to-edge":e?.wrapT===33648?"mirror-repeat":"repeat",magFilter:e?.magFilter===9728?"nearest":"linear",minFilter:e?.minFilter===9728||e?.minFilter===9984||e?.minFilter===9986?"nearest":"linear"}}function rn(e,t,r=!1){let{backend:o,description:i,images:n,textures:a}=e;if(!t)return null;if((t.texCoord||0)!==0||t.extensions)throw new Error("Model textures currently require untransformed TEXCOORD_0 UVs");let s=w.get(o).device,m=`${t.index}:${r}`;if(!a.has(m)){let f=i.textures[t.index],p=i.samplers?.[f.sampler],c=n[f.source],l=r?"rgba8unorm-srgb":"rgba8unorm",u=pg(p);a.set(m,{device:s,texture:s.createTexture({size:[c.width,c.height],format:l,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:s.createSampler(u),samplerOptions:u,format:l,srgb:r,image:c,flipY:!1,uploaded:null})}return a.get(m)}function cg(e,t){let{backend:r}=e,o=t.pbrMetallicRoughness;return{color:o?.baseColorFactor?o.baseColorFactor.slice(0,3):[1,1,1],opacity:o?.baseColorFactor?.[3]??1,metallic:o?.metallicFactor??1,roughness:o?.roughnessFactor??1,baseTexture:rn(e,o?.baseColorTexture,!0),metalTexture:rn(e,o?.metallicRoughnessTexture),emissiveTexture:rn(e,t.emissiveTexture,!0),occlusionTexture:rn(e,t.occlusionTexture),emissive:t.emissiveFactor||[0,0,0],occlusionStrength:t.occlusionTexture?.strength??1,alphaMode:r.options.alphaMode||t.alphaMode||"OPAQUE",alphaCutoff:t.alphaCutoff??.5,doubleSided:t.doubleSided}}function lg(e,t,r){let o={backend:e,description:t,images:r,textures:new Map,materials:[],active:new Set,resources:[]},i;for(i of t.materials||lr)o.materials.push(cg(o,i));return o}var ug=[0,0,0,1];var dg=[1,1,1];var hg=[0,0,0];function gg(e){if(e.matrix)return Array.from(e.matrix);let[t,r,o,i]=e.rotation||ug,[n,a,s]=e.scale||dg;return[(1-2*(r*r+o*o))*n,2*(t*r+o*i)*n,2*(t*o-r*i)*n,0,2*(t*r-o*i)*a,(1-2*(t*t+o*o))*a,2*(r*o+t*i)*a,0,2*(t*o+r*i)*s,2*(r*o-t*i)*s,(1-2*(t*t+r*r))*s,0,...e.translation||hg,1]}function yg(e,t,r){let o=e.materials[t.material]||{color:[1,1,1],metallic:1};if((o.baseTexture||o.metalTexture||o.emissiveTexture||o.occlusionTexture)&&!r.uv)throw new Error("Textured model mesh requires UV coordinates");let i=Ue(e.backend,o);e.resources.push(i);let n=w.get(e.backend).device,a,s;for([a,s]of Object.entries(r))s.size||=1,s.count=s.data.length/s.size,s.indexFormat=s.data instanceof Uint32Array?"uint32":"uint16",s.buffer=n.createBuffer({size:Math.max(4,s.data.byteLength),usage:a==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),n.queue.writeBuffer(s.buffer,0,s.data);let m={device:n,attributes:r,drawRange:{start:0,count:r.index?.count||r.position.count}};return e.resources.push(m),{device:n,geometry:m,program:i}}function Ef(e,t){let{backend:r,description:o,active:i}=e;if(i.has(t))throw new Error("Cyclic glTF nodes");let n=o.nodes[t];if(!n)throw new Error("Invalid glTF node");i.add(t);let a={...Oe(),name:n.name};a.matrix=gg(n);let s,m,f,p,c;if(n.mesh!==void 0)for(s of o.meshes[n.mesh].primitives)m=structuredClone(s.preparedAttributes),f=yg(e,s,m),p={...Oe(),device:f.device,geometry:f.geometry,program:f.program,fadeDuration:250,id:Mt.value++,renderOrder:0},p.name=o.meshes[n.mesh].name,p.extras=n.extras||{},q(p,a);for(c of n.children||lr)q(Ef(e,c),a);return i.delete(t),a}function xg(e){let t,r;for(t of e.resources)if(t.attributes)for(r of Object.values(t.attributes))r.buffer.destroy();else t.pipelineCache.clear()}function vg(e,t){let r=[],o;try{for(o of t.nodes)r.push(Ef(e,o))}catch(i){throw xg(e),i}return r}function wg(e){let t=$e.get(e);if(e.options.rotation){let[r,o=r,i=r]=e.options.rotation;t.rotation[0]=r,t.rotation[1]=o,t.rotation[2]=i}if(e.options.scale){let[r,o=r,i=r]=e.options.scale;t.scale[0]=r,t.scale[1]=o,t.scale[2]=i}}async function Lg(e){await Le.get(e).promise;let t=new URL(We.get(e),document.baseURI).href,{description:r,images:o}=await ii(e._map,e.options.workerUrl,{type:"model",url:t});await Le.get(e).promise,await se.get(e._map);let i=lg(e,r,o),n=r.scenes?.[r.scene||0];if(!n)throw new Error("Missing glTF scene");let a=vg(i,n),s={...Oe(),id:t,extras:r.extras||{}};if(!a.length)throw new Error("Expected a glTF model with a non-empty scene");let m;for(m of a)q(m,s);$e.set(e,s),wg(e),q($e.get(e),M.get(e)),pi(e,me.get(e._map))}async function bg(e){try{return M.set(e,Oe()),ne.set(e,{origin:[0,0,0],direction:[0,0,0],inverse:new DOMMatrix,meshes:[]}),(ae.get(e)||X.get(e))&&(cs.set(e,M.get(e)),ae.get(e)&&U.set(e,await eo(e))),e._map&&(await fi(e,e._map),Le.get(e).resolve()),We.get(e)&&await Lg(e),R.get(e)&&E(e),e.fire("ready"),e}catch(t){throw e.fire("error",{error:t}),t}}function Mg(e,t,r,o){return o?`Unable to load: ${typeof o=="string"?o:o.message}`:`${t} loaded ${We.get(e)?"models":"elements"} in the current area${r?`; ${r} blocks loading`:""}`}function Bg(e,t,r,o){let i=kr.get(e),n=We.get(e),a=$e.get(e);n&&(t=a?1:0);let s=r||(n?!a:!U.get(e)&&!X.get(e)),m=t.toLocaleString("en-US"),f=o?"Error":`${m}${s?"\u2026":""}`,p=Mg(e,m,r,o);i.textContent!==f&&(i.textContent=f),i.title!==p&&(i.title=p),o&&i.getAttribute("role")!=="alert"?i.setAttribute("role","alert"):!o&&i.hasAttribute("role")&&i.removeAttribute("role")}function Of(e){let t=e.target,r=kr.get(t);if(!t._map)return;e.type==="add"&&ei(t,r);let o=0,i=0,n=e.error,a;if(Number.isFinite(e.loaded))o=e.loaded,i=e.pending??0,n||=e.errors?.[0];else for(a of Y.get(t).values())o+=a.buildings??0,!a.done&&!a.error&&i++,n||=a.error;Bg(t,o,i,n)}function At(e,t=yr){_r.set(e,!0),d.Util.setOptions(e,{ariaLabel:"3D scene",...t}),z.set(e,"3d");let r=!X.get(e)&&/\.(glb|gltf)(?:[?#]|$)/i.test(e.options.url);if(We.set(e,r?e.options.url:null),ae.set(e,e.options.url&&!r&&!X.get(e)?new URL(e.options.url,document.baseURI).href:null),Cr.set(e,new Map),e.options.center&&D.set(e,new d.LatLng(e.options.center[0],e.options.center[1])),Y.set(e,new Map),Je.set(e,0),ae.get(e)||X.get(e)||r){let o=d.DomUtil.create("small","layer-count");o.style.cssText="float:right;margin-left:12px;color:#555;font-variant-numeric:tabular-nums",kr.set(e,o),e.on("add error",Of),e.on("ready progress",d.Util.throttle(Of,250,e))}Le.set(e,Promise.withResolvers()),re.set(e,Promise.resolve().then(bg.bind(null,e))),re.get(e).catch(Xe)}function Tg(){this.keys.clear()}var on={KeyW:[1,0],ArrowUp:[1,0],KeyS:[-1,0],ArrowDown:[-1,0],KeyD:[0,1],ArrowRight:[0,1],KeyA:[0,-1],ArrowLeft:[0,-1]};L();ji();vr();J();Z();function Pg(e){let t=this.layer._map;if(e.type==="pointerdown"){if(e.button!==0||e.target.closest(".leaflet-control"))return;this.dragX=e.clientX,this.dragY=e.clientY,this.dragging=!0,t.getContainer().setPointerCapture(e.pointerId)}else this.dragging&&e.type==="pointermove"?(Fe(t,Math.max(20,Math.min(85,_(t)-(e.clientY-this.dragY)*.2)),k(t)-(e.clientX-this.dragX)*.25),this.dragX=e.clientX,this.dragY=e.clientY):this.dragging=!1}var nn=[["body",0,0,0],["leg",-.09,.9,1],["leg",.09,.9,-1],["arm",-.25,1.42,-1],["arm",.25,1.42,1]];$();function Rt(e){let{layer:t,state:r}=this,o=t._map,i=o.options.crs,n=D.get(t),a=M.get(t),s=i.project(n),m=Math.cos(n.lat*B),f=i.project(r.latlng),p=xe(o,r.latlng)||0;return e[0]=(f.x-s.x)*m,e[1]=p+(r.height??0)-a.position[1],e[2]=-(f.y-s.y)*m,e}function vs(){let[e,t,r]=Rt.call(this,this.local),o=-this.state.heading,i=Math.cos(o),n=Math.sin(o),a,s,m,f,p;for(a=0;a<nn.length;a++)[,s,m,f]=nn[a],p=this.meshes[a],p.position[0]=e+s*i,p.position[1]=t+m,p.position[2]=r-s*n,p.rotation[0]=f*this.swing*Math.sin(this.state.phase),p.rotation[1]=o;E(this.layer)}function Sg(){this.meshes&&vs.call(this)}function ws(){let e=this.layer._map;cancelAnimationFrame(this.frame),this.keys.clear(),this.dragging=!1,this.state.height=this.verticalSpeed=0,d.DomEvent.off(document,"keydown keyup",this.onKey),d.DomEvent.off(window,"blur",this.onBlur);let t,r;if(this.meshes)for(t of this.meshes)Ge(this.layer,t);if(this.meshes=null,this.button.setAttribute("aria-pressed","false"),this.button.style.background="#fff",this.hint.style.display="none",!(!e||!this.saved)){d.DomEvent.off(e.getContainer(),"pointerdown pointermove pointerup pointercancel",this.onPointer),e.off("terrainchange",this.onTerrain),e.options.scrollWheelZoom=this.saved.scrollWheelZoom;for(r of this.saved.handlers)e[r].enable();e.setView(this.state.latlng,this.saved.zoom,{animate:!1}),Ht(e,this.saved.pitch),this.saved=null}}function kg(e){if(e.type==="keyup"&&e.code==="Space"&&this.keys.delete("Space"),!(e.target.closest?.("input:not([type=checkbox], [type=radio]), select, textarea, [contenteditable]")||e.ctrlKey||e.altKey||e.metaKey)){if(e.type==="keydown"&&e.code==="Escape"){this.stop();return}!on[e.code]&&e.code!=="Space"||(e.preventDefault(),e.type==="keydown"?this.keys.add(e.code):this.keys.delete(e.code))}}$();L();var Cg=["dragging","keyboard","doubleClickZoom","boxZoom"];J();Z();ji();function C(e,t,r,o){return[[e,r],[t,r],[t,o],[e,o]]}var Kt=[.16,.2,.32];var zf=[.75,.2,.15];var yt=[.85,.64,.5];var Qt=[.08,.07,.06];var Ls={body:[[C(-.17,.17,-.1,.1),.82,.95,Kt],[C(-.19,.19,-.11,.11),.95,1.44,zf],[C(-.05,.05,-.05,.05),1.44,1.5,yt],[C(-.1,.1,-.11,.1),1.5,1.72,yt],[C(-.105,.105,-.06,.115),1.58,1.77,Qt],[C(-.105,.105,-.115,-.06),1.7,1.77,Qt]],leg:[[C(-.07,.07,-.07,.07),-.82,0,Kt],[C(-.07,.07,-.17,.07),-.9,-.82,Qt]],arm:[[C(-.05,.05,-.05,.05),-.55,0,zf],[C(-.045,.045,-.045,.045),-.66,-.55,yt]]};function an(e,t,r,o,i,n,a){let s=i[0]-o[0],m=i[1]-o[1],f=i[2]-o[2],p=n[0]-o[0],c=n[1]-o[1],l=n[2]-o[2],u=m*l-f*c,h=f*p-s*l,x=s*c-m*p,g=Math.hypot(u,h,x),y,v;for(y=0;y<3;y++)v=y===0?o:y===1?i:n,e.push(...v),t.push(u/g,h/g,x/g),r.push(...a)}function ci(e){let t=[],r=[],o=[],i=[],n=[],a,s,m,f,p,c,l,u,h;for([a,s,m,f,p=a]of e){i.length=n.length=0;for([c,l]of a)i.push([c,s,l]);for([c,l]of p)n.push([c,m,l]);for(u=0;u<a.length;u++)h=(u+1)%a.length,an(t,r,o,i[u],i[h],n[h],f),an(t,r,o,i[u],n[h],n[u],f);for(u=1;u<a.length-1;u++)an(t,r,o,n[0],n[u],n[u+1],f),an(t,r,o,i[0],i[u+1],i[u],f)}return{position:t,normal:r,color:o}}function _g(e){return this.keys.has("Space")?(this.verticalSpeed=6,this.state.height+=this.verticalSpeed*e,!0):!this.verticalSpeed&&!this.state.height?!1:(this.state.height=Math.max(0,this.state.height+this.verticalSpeed*e-9.81*e*e/2),this.verticalSpeed=this.state.height>0?this.verticalSpeed-9.81*e:0,!0)}L();var Af=new WeakMap;function Eg(e,t,r){let o,i,n;for(o=Math.floor(Math.min(t[0],t[3],t[6])/8);o<=Math.floor(Math.max(t[0],t[3],t[6])/8);o++)for(i=Math.floor(Math.min(t[2],t[5],t[8])/8);i<=Math.floor(Math.max(t[2],t[5],t[8])/8);i++)n=o+","+i,e.has(n)||e.set(n,[]),e.get(n).push(r)}function bs(e){let t=Af.get(e.geometry);if(t)return t;let r=e.worldMatrix,{position:o,index:i,normal:n,uv:a,instanceOffset:s}=e.geometry.attributes,m=fa(o,i),f=m*(s?.count??1),p=[],c=[],l=new Map,u=[0,0,0],h=[0,0,0],x=[0,0,0],g=[],y,v,S,T,P,A,Q,N,G,V,ue,Me,st,Ce,vt,Ze=-1/0;for(y=0;y<f;y+=3)v=i?i.data[y%m]:y%m,!(e.program.nightLight&&a&&a.data[v*2]<=2)&&(pa(e,y,u,h,x),g[0]=r[0]*u[0]+r[4]*u[1]+r[8]*u[2]+r[12],g[1]=r[1]*u[0]+r[5]*u[1]+r[9]*u[2]+r[13],g[2]=r[2]*u[0]+r[6]*u[1]+r[10]*u[2]+r[14],g[3]=r[0]*h[0]+r[4]*h[1]+r[8]*h[2]+r[12],g[4]=r[1]*h[0]+r[5]*h[1]+r[9]*h[2]+r[13],g[5]=r[2]*h[0]+r[6]*h[1]+r[10]*h[2]+r[14],g[6]=r[0]*x[0]+r[4]*x[1]+r[8]*x[2]+r[12],g[7]=r[1]*x[0]+r[5]*x[1]+r[9]*x[2]+r[13],g[8]=r[2]*x[0]+r[6]*x[1]+r[10]*x[2]+r[14],T=g[3]-g[0],P=g[4]-g[1],A=g[5]-g[2],Q=g[6]-g[0],N=g[7]-g[1],G=g[8]-g[2],V=P*G-A*N,ue=T*N-P*Q,Me=A*Q-T*G,st=Math.hypot(V,Me,ue),!(!st||Math.abs(Me)>.9*st)&&(n&&(S=v*3,(r[0]*n.data[S]+r[4]*n.data[S+1]+r[8]*n.data[S+2])*V+(r[2]*n.data[S]+r[6]*n.data[S+1]+r[10]*n.data[S+2])*ue<0&&(V=-V,ue=-ue)),Ce=Math.hypot(V,ue),vt=c.length/2,p.push(...g),Ze=Math.max(Ze,g[0],g[3],g[6]),c.push(V/Ce,ue/Ce),Eg(l,g,vt)));return t={tri:Float32Array.from(p),nrm:Float32Array.from(c),cells:l,maxX:Ze,origin:[r[12],r[13],r[14]]},Af.set(e.geometry,t),t}function Ms(e,t,r,o,i,n,a){let s=t*9,m=e[s+3]-e[s],f=e[s+4]-e[s+1],p=e[s+5]-e[s+2],c=e[s+6]-e[s],l=e[s+7]-e[s+1],u=e[s+8]-e[s+2],h=-a*l,x=a*c-n*u,g=n*l,y=m*h+f*x+p*g;if(Math.abs(y)<1e-9)return-1;let v=r-e[s],S=o-e[s+1],T=i-e[s+2],P=(v*h+S*x+T*g)/y;if(P<0||P>1)return-1;let A=S*p-T*f,Q=T*m-v*p,N=v*f-S*m,G=(n*A+a*N)/y;return G<0||P+G>1?-1:(c*A+l*Q+u*N)/y}function Og(e,t,r,o,i,n,a,s){let m,f,p,c;for(m=Math.floor(t/8);m<=a;m++)if(f=e.cells.get(`${m},${s}`),!!f)for(p of f)i.has(p)||(i.add(p),c=Ms(e.tri,p,t,r,o,1,0),c>1e-4&&n.push(c))}function zg(e){let t,r,o;for(t=1;t<e.length;t++){for(o=e[t],r=t-1;r>=0&&e[r]>o;)e[r+1]=e[r--];e[r+1]=o}let i=0,n=-1/0;for(o of e)o-n>1e-4&&i++,n=o;return i}function Rf(e,t,r,o,i,n){let a=e.geometry;if(!e.visible||!a?.attributes?.position?.data||e.program?.depthTest===!1)return!1;a.bounds||_e(a);let s=a.bounds,m=e.worldMatrix,f=s.center,p=m[0]*f[0]+m[4]*f[1]+m[8]*f[2]+m[12],c=m[1]*f[0]+m[5]*f[1]+m[9]*f[2]+m[13],l=m[2]*f[0]+m[6]*f[1]+m[10]*f[2]+m[14],u=s.radius*Math.max(Math.hypot(m[0],m[1],m[2]),Math.hypot(m[4],m[5],m[6]),Math.hypot(m[8],m[9],m[10]));if(Math.hypot(p-t,c-r,l-o)>u)return!1;let h=bs(e),x=Math.floor(h.maxX/8);if(t>=h.maxX)return!1;let g=Math.floor(o/8),y=n;return y.length=0,i.clear(),Og(h,t,r,o,i,y,x,g),zg(y)%2===1}function Ag(e,t,r,o,i,n){o<1e-6?(e.normal[0]=-i,e.normal[1]=-n):(e.normal[0]=t/o,e.normal[1]=r/o)}function Bs(e,t,r,o,i,n,a,s){let m=Tt.get(e);if(!m?.mesh||!m.trips.length)return!1;let f=m.collisionBounds;if(!f){f=m.collisionBounds={radius:0,minY:1/0,maxY:-1/0};let V,ue,Me,st;for(V=0;V<m.template.position.length;V+=3)ue=m.template.position[V],Me=m.template.position[V+1],st=m.template.position[V+2],f.radius=Math.max(f.radius,Math.hypot(ue,st)),f.minY=Math.min(f.minY,Me),f.maxY=Math.max(f.maxY,Me)}let p=M.get(e),c=m.position||={},l=Math.max(p.scale[0],p.scale[1],p.scale[2]),u=f.radius*l+.35,h,x,g,y,v,S,T,P,A,Q,N,G;for(h of m.trips)if({x:N,y:A,z:G}=Go(m,h,c),A=p.position[1]+(A+f.minY)*p.scale[1],Q=p.position[1]+(c.y+f.maxY)*p.scale[1],!(A>r+1.7*l||Q<r+.2*l)&&(N=p.position[0]+N*p.scale[0],G=p.position[2]+G*p.scale[2],x=(N-t)*i+(G-o)*n,g=Math.max(0,Math.min(a,x)),y=t+g*i-N,v=o+g*n-G,S=y*y+v*v,!(S>=u*u))){if(a===0){s.found=!0,P=Math.hypot(t-N,o-G),s.normal[0]=P?(t-N)/P:0,s.normal[1]=P?(o-G)/P:0;continue}T=Math.max(0,x-Math.sqrt(u*u-S)),!(T>a||T>=s.best)&&(s.best=T,s.found=!0,P=Math.hypot(t+T*i-N,o+T*n-G),Ag(s,t+T*i-N,o+T*n-G,P,i,n))}return s.found}function If(e){let{layer:t,local:r,hitData:o}=e,i=R.get(t);if(!i||!F.get(i))return!1;Pe(oe.get(t));let n=M.get(t),a=Rt.call(e,r),s=n.position[0]+a[0]*n.scale[0],m=n.position[1]+a[1]*n.scale[1],f=n.position[2]+a[2]*n.scale[2],p=F.get(i),c,l,u,h;for(c of p)if(!(c===t||z.get(c)==="terrain")){if(z.get(c)==="traffic"){if(o.best=0,o.found=!1,Bs(c,s,m,f,0,0,0,o))return!0;continue}for(h=o.nodes,h.length=0,M.get(c)&&h.push(M.get(c));h.length;)if(l=h.pop(),!!l.visible){if(l.geometry&&(Rf(l,s,m+.45*n.scale[1],f,o.seen,o.intersections)||Rf(l,s,m+1.35*n.scale[1],f,o.seen,o.intersections)))return!0;for(u of l.children)h.push(u)}}return!1}function Ts(){if(!this.saved||!If(this))return!1;let e=this.layer._map,t=this.state.latlng,r=this.state.height,o,i,n;for(o=.5;o<=20;o+=.5)for(i=0;i<Math.PI*2;i+=Math.PI/4)if(n=new d.LatLng(t.lat+Math.cos(i)*o/111320,t.lng+Math.sin(i)*o/(111320*Math.cos(t.lat*Math.PI/180))),this.state.latlng=n,this.state.height=0,!If(this))return this.verticalSpeed=0,e.setView(n,e.getZoom(),{animate:!1}),!0;return this.state.latlng=t,this.state.height=r,!1}function Ps(e){return Math.atan2(Math.sin(e),Math.cos(e))}function Rg(e,t){return e===t||Xt.get(e)==="terrain"||Xt.get(e)==="traffic"}function Ig(e){let t=ne.get(this.layer),r=Rt.call(this,this.local),o=M.get(this.layer),i=o.position[0]+r[0]*o.scale[0],n=o.position[1]+r[1]*o.scale[1],a=o.position[2]+r[2]*o.scale[2];if(n>e||this.verticalSpeed>0)return;Pe(oe.get(this.layer)),t.origin[0]=i,t.origin[1]=e+.01,t.origin[2]=a,t.direction[0]=0,t.direction[1]=-1,t.direction[2]=0,t.meshes.length=0;let s,m;for(s of F.get(R.get(this.layer)))Rg(s,this.layer)||z.get(s)==="raster"||s.options.nightLight||Zt(M.get(s),la,t.meshes);for(m of ca(t,t.meshes)){if(m.point[1]<n-.001)break;this.state.height+=(m.point[1]-n)/o.scale[1],this.verticalSpeed=0;break}t.meshes.length=0}L();$();function Dg(e,t,r,o,i,n){let{dx:a,dz:s,seen:m}=r,f,p,c;for(f of e)if(!(m.has(f)||a*t.nrm[f*2]+s*t.nrm[f*2+1]>=0))for(m.add(f),p=.4;p<2;p+=1.1)c=Ms(t.tri,f,o,i+p,n,a,s),c>=0&&c<r.best&&(r.best=c,r.found=!0,r.normal[0]=t.nrm[f*2],r.normal[1]=t.nrm[f*2+1])}function Gg(e,t){if(!e.visible)return!0;if(!e.geometry?.attributes?.position?.data||e.program?.depthTest===!1)return;e.geometry.bounds||_e(e.geometry);let r=e.worldMatrix,{center:o,radius:i}=e.geometry.bounds,{x:n,y:a,z:s,dx:m,dz:f,reach:p}=t;if(Math.hypot(r[0]*o[0]+r[4]*o[1]+r[8]*o[2]+r[12]-n,r[2]*o[0]+r[6]*o[1]+r[10]*o[2]+r[14]-s)>i*Math.hypot(r[0],r[1],r[2])+p)return;let c=bs(e),l=n-r[12]+c.origin[0],u=a-r[13]+c.origin[1],h=s-r[14]+c.origin[2];t.seen.clear();let g,y,v;for(g=Math.floor(Math.min(l,l+m*p)/8);g<=Math.floor(Math.max(l,l+m*p)/8);g++)for(y=Math.floor(Math.min(h,h+f*p)/8);y<=Math.floor(Math.max(h,h+f*p)/8);y++)v=c.cells.get(g+","+y),v&&Dg(v,c,t,l,u,h)}function Ug(e,t,r,o,i,n,a,s){Pe(oe.get(e)),s.x=t,s.y=r,s.z=o,s.dx=i,s.dz=n,s.reach=a,s.best=a,s.found=!1;let m;for(m of F.get(R.get(e)))if(!(m===e||z.get(m)==="terrain")){if(z.get(m)==="traffic"){Bs(m,t,r,o,i,n,a,s);continue}Zt(M.get(m),Gg,s)}return s.found?s.normal:null}function Df(e,t,r){let o=Math.hypot(e,t);return o>1e-6&&Ug(this.layer,r[0],r[1],r[2],e/o,-t/o,o+.3,this.hitData)}function Ng(e,t){let r=e*this.speed*t,{lat:o,lng:i}=this.state.latlng,{position:n,scale:a}=M.get(this.layer),s=Math.sin(this.state.heading)*r,m=Math.cos(this.state.heading)*r,f=Rt.call(this,this.local),p;for(p=0;p<f.length;p++)f[p]=n[p]+a[p]*f[p];let c=Df.call(this,s,m,f);if(c){let l=s*c[0]-m*c[1];s-=l*c[0],m+=l*c[1],Df.call(this,s,m,f)&&(s=m=0)}this.state.latlng=new d.LatLng(o+m/111320,i+s/(111320*Math.cos(o*B))),this.state.phase+=Math.hypot(s,m)/1.6*Math.PI}yo();$();Z();vr();J();function Fg(e,t,r){let o=this.layer._map;if(e||t){let n=k(o)*B,a=Ps(-this.state.heading-n);Math.abs(a)>.001&&Fe(o,_(o),(n+a*Math.min(1,r*4))*tt),o.setView(this.state.latlng,o.getZoom(),{animate:!1})}let i=e?.9:0;return Math.abs(this.swing-i)>.001?(this.swing+=(i-this.swing)*Math.min(1,r*10),!0):!1}function jg(e,t,r,o,i,n){o&&(e.state.heading=Ps(e.state.heading+o*2.5*i),n=!0),r&&(Ng.call(e,r,i),n=!0),n&&Ig.call(e,t),Fg.call(e,r,o,i)&&(n=!0),n&&vs.call(e)}function Wg(e){let t=this.layer;this.frame=requestAnimationFrame(this.step);let r=Math.min(.1,(e-(this.last??e))/1e3);if(this.last=e,!w.get(t))return;let o=!1,i,n;if(e>=this.nextClearanceCheck&&(this.nextClearanceCheck=e+250,Ts.call(this)&&(o=!0)),!this.meshes){this.meshes=[];for([i]of nn)this.meshes.push(dr(t,ci(Ls[i])));o=!0}let a=M.get(t).position[1]+Rt.call(this,this.local)[1]*M.get(t).scale[1];_g.call(this,r)&&(o=!0);let s=0,m=0;for(n of this.keys)s+=on[n]?.[0]||0,m+=on[n]?.[1]||0;s=Math.sign(s),m=Math.sign(m),jg(this,a,s,m,r,o)}function Ss(){let e=this.layer._map;if(this.saved||!e)return;this.state.latlng=e.getCenter(),this.state.height=this.verticalSpeed=0;let t=e.getSize().y*1.5/this.distance,r=Math.min(e.getMaxZoom(),Math.log2(t*rt*Math.cos(this.state.latlng.lat*B)/256)),o;this.saved={zoom:e.getZoom(),pitch:_(e),scrollWheelZoom:e.options.scrollWheelZoom,handlers:[]};for(o of Cg)e[o]?.enabled()&&this.saved.handlers.push(o);for(o of this.saved.handlers)e[o].disable();e.options.scrollWheelZoom=this.saved.scrollWheelZoom&&"center",this.state.heading=-k(e)*B,e.setView(this.state.latlng,r,{animate:!1}),Ht(e,75),Ts.call(this),d.DomEvent.on(document,"keydown keyup",this.onKey),d.DomEvent.on(window,"blur",this.onBlur),d.DomEvent.on(e.getContainer(),"pointerdown pointermove pointerup pointercancel",this.onPointer),e.on("terrainchange",this.onTerrain),this.button.setAttribute("aria-pressed","true"),this.button.style.background="#e4e4e4",this.hint.style.display="",this.last=void 0,this.nextClearanceCheck=0,this.frame=requestAnimationFrame(this.step)}function $g(){this.saved?ws.call(this):Ss.call(this)}function Vg(e,{speed:t,distance:r,...o}){let i=new d.Layer;Xt.set(i,"walk"),At(i,o);let n=new Set,a=d.DomUtil.create("div","leaflet-bar leaflet-control");a.style.cssText="display:flex;align-items:center;background:#fff;";let s=d.DomUtil.create("button","",a);s.type="button",s.title="Walk",s.setAttribute("aria-label","Walk"),s.setAttribute("aria-pressed","false"),s.textContent="\u{1F6B6}",s.style.cssText="width:30px;height:30px;padding:0;border:0;border-radius:4px;background:#fff;font-size:18px;line-height:30px;cursor:pointer;";let m=d.DomUtil.create("small","",a);m.style.cssText="display:none;padding:0 8px;color:#333;white-space:nowrap;",m.textContent="W/S: run \xB7 A/D: turn \xB7 hold Space: ascend \xB7 drag: look around \xB7 Esc: exit",d.DomEvent.disableClickPropagation(a);let f={layer:i,speed:t,distance:r,keys:n,container:a,button:s,hint:m,meshes:null,frame:null,last:void 0,nextClearanceCheck:0,swing:0,verticalSpeed:0,saved:null,hitData:null,local:null,state:e.walker={latlng:null,heading:0,phase:0,height:0}};ps.set(i,f.state),f.step=Wg.bind(f),f.onKey=kg.bind(f),f.onBlur=Tg.bind(f),f.onPointer=Pg.bind(f),f.onTerrain=Sg.bind(f),f.start=Ss.bind(f),f.stop=ws.bind(f),f.toggle=$g.bind(f),e._walk=f,d.DomEvent.on(s,"click",f.toggle)}function Gf(e){d.Util.setOptions(this,e),Vg(this,this.options)}function Zg(e){let t=jt.get(e);if(t?.control&&t.control!==this)throw this._map=null,new Error("Only one Walk control can be active per map");return t||(t={control:null,hitData:{x:0,y:0,z:0,dx:0,dz:0,reach:0,best:0,found:!1,seen:new Set,intersections:[],nodes:[],normal:[0,0]},local:[0,0,0]},jt.set(e,t)),t.control=this,t.local.fill(0),t.hitData.seen.clear(),t.hitData.normal.fill(0),this._walk.hitData=t.hitData,this._walk.local=t.local,this._walk.layer.addTo(e),this._walk.container}function qg(e){let t=jt.get(e);t?.control===this&&(this._walk.stop(),this._walk.layer.remove(),t.control=null,t.hitData.seen.clear(),this._walk.hitData=null,this._walk.local=null)}Ka();var no=class extends ht(d.Control){static initHooks=!0;static defaultOptions={position:"bottomright",speed:70,distance:20};constructor(t){super(t),d.version.startsWith("2.")&&(Gf.call(this,t),this.callInitHooks())}};Object.assign(no.prototype,{onAdd:Zg,onRemove:qg});d.version.startsWith("1.")&&(no.prototype.options=Object.assign(Object.create(d.Control.prototype.options),no.defaultOptions),no.prototype.initialize=Gf);d.Control.Walk=no;var ao=new WeakMap;var zr=new WeakMap;L();function Hg(){ao.get(this).off(zr.get(this),this),ao.set(this,null),zr.set(this,null)}var Ar=new WeakMap;L();function ks(e,t){let r=$e.get(e);if(!M.get(e)||!ee.get(e))return null;let o,i,n,a,s,m,f;for(o of ua(e,t,M.get(e).children,!!r)){if(r){for(i=o.object;i&&i!==r;)i=i.parent;if(i===r)return{id:r.id,properties:r.extras,model:r,mesh:o.object,point:o.point}}if(n=o.object.extras?.featureFaces,!!n)for(a=0,s=n.length-1;a<=s;)if(m=a+s>>1,f=n[m],o.faceIndex<f.faceStart)s=m-1;else if(o.faceIndex>=f.faceEnd)a=m+1;else return{...f,mesh:o.object,point:o.point}}return null}function li(e){ke.set(e,null),Ot(e,null),zt(e,null),e.fire("featurehover",{feature:null})}function Xg(e,t){if(t.buttons||e._map.dragging?.moving()||e._map._animatingZoom){ke.get(e)&&li(e);return}ke.set(e,ks(e,t)),Ot(e,ke.get(e)),zt(e,ke.get(e),t),e.fire("featurehover",{feature:ke.get(e),originalEvent:t})}function Jg(e){Xg(this,e)}function Kg(e,t){let r=ks(e,t);ke.set(e,r),Ot(e,r),zt(e,r,t),e.fire("featureclick",{feature:r,originalEvent:t})}function Qg(e){Kg(this,e)}function ey(){li(this)}async function ty(e,t){try{await fi(e,t),Le.get(e).resolve()}catch(r){e.fire("error",{error:r})}}function sn(e,t){if(!D.get(e)){let r=t.getCenter();D.set(e,new d.LatLng(r.lat,r.lng))}(ae.get(e)||X.get(e)||e.options.tooltip||We.get(e))&&(Ae.set(e,t.getContainer()),Ar.get(e)||Ar.set(e,{mousemove:Jg,click:Qg,mouseleave:ey}),e.options.tooltip&&(Re.set(e,d.DomUtil.create("div","leaflet-3d-tooltip",Ae.get(e))),Re.get(e).hidden=!0,Re.get(e).setAttribute("role","tooltip"),Re.get(e).setAttribute("aria-live","polite"),Re.get(e).style.cssText="position:absolute;z-index:600;max-width:220px;padding:10px 12px;border:1px solid #6b5140;border-radius:6px;background:#fffaf0;box-shadow:0 3px 12px #0005;color:#30251d;font:13px/1.45 sans-serif;pointer-events:none"),d.DomEvent.on(Ae.get(e),Ar.get(e),e)),M.get(e)&&ty(e,t)}var er=new WeakMap;var Ke=new WeakMap;var tr=new WeakMap;$();var Cs={x:0,y:0};var Ie=new WeakMap;var ge=new WeakMap;var It=new WeakMap;var mn={size:[null,null],format:"r32float",usage:null};var _s={texture:null};var Uf={bytesPerRow:null};var Es=[null,null];function ry(e,t,r,o){let i,n,a;for(i=0;i<256;i++)for(n=0;n<256;n++)a=t[i*256+n],!(!Number.isFinite(a)||a<=-1e3)&&(e.elevations[r+i*o*256+n]=a,e.low=Math.min(e.low,a),e.high=Math.max(e.high,a))}function oy(e,t){let r=t.max.x-t.min.x+1,o=t.max.y-t.min.y+1,n={elevations:new Float32Array(r*o*65536).fill(-1e9),low:1/0,high:-1/0},a,s,m,f,p,c;for([a,s]of e)m=a.split("/"),f=Number(m[0]),p=Number(m[1]),c=(p-t.min.y)*256*r*256+(f-t.min.x)*256,ry(n,s,c,r);return n}function iy(e,t){let r=w.get(e).device;if(ge.get(e)?.device===r)return ge.get(e);let o=er.get(e),i=o.max.x-o.min.x+1,n=o.max.y-o.min.y+1,{elevations:a,low:s,high:m}=oy(ot.get(e),o);return Ie.get(e)&&W(e,Ie.get(e).texture),Ie.set(e,{texture:r.createTexture((mn.size[0]=i*256,mn.size[1]=n*256,mn.usage=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST,mn)),low:Number.isFinite(s)?s:Ke.get(e),high:Number.isFinite(m)?m:Ke.get(e)}),r.queue.writeTexture((_s.texture=Ie.get(e).texture,_s),a,(Uf.bytesPerRow=i*1024,Uf),(Es[0]=i*256,Es[1]=n*256,Es)),_s.texture=null,It.set(e,new Map),ge.set(e,Ue(e,{baseTexture:t,unlit:!0,terrain:Ie.get(e),alphaMode:"BLEND",depthWrite:!0,doubleSided:e.options.doubleSided})),ge.get(e)}var Os={size:null,usage:null};function ny(e){let t=(e+1)**2,r=new Float32Array(t*3),o=new Float32Array(t*3),i=new Float32Array(t*2),n=new Uint16Array(e*e*6),a,s,m,f,p,c,l=0,u=0;for(a=0;a<=e;a++)for(s=0;s<=e;s++)r[l*3]=s/e,r[l*3+2]=a/e,o[l*3+1]=1,i[l*2]=s/e,i[l*2+1]=a/e,l++,a<e&&s<e&&(m=a*(e+1)+s,f=m+1,p=m+e+1,c=p+1,n[u++]=m,n[u++]=p,n[u++]=f,n[u++]=f,n[u++]=p,n[u++]=c);return{position:{size:3,data:r},normal:{size:3,data:o},uv:{size:2,data:i},index:{data:n}}}function ay(e,t){let r=w.get(e).device,o=It.get(e).get(t);if(!o){o=ny(t);let i,n;for([i,n]of Object.entries(o))n.size||=1,n.count=n.data.length/n.size,n.indexFormat="uint16",n.buffer=r.createBuffer((Os.size=Math.max(4,n.data.byteLength),Os.usage=i==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST,Os)),r.queue.writeBuffer(n.buffer,0,n.data);It.get(e).set(t,o)}return o}function sy(e,t,r,o){let i=Ke.get(e),n=Math.min(Ie.get(e).low,i)-i,a=Math.max(Ie.get(e).high,i)-i;return{device:w.get(e).device,attributes:t,drawRange:{start:0,count:t.index.count},bounds:{min:[0,n,0],max:[1,a,1],center:[.5,(n+a)/2,.5],radius:Math.hypot(r,a-n,o)/2/Math.max(r,1,o)}}}async function my(e,t,r,o){if(!await tr.get(e)||!e._map||me.get(e._map)!==e||pe.get(t)!==e||o.request.signal.aborted||!I.get(t).has(`${r.z}/${r.x}/${r.y}`)||I.get(e).has(o))return;let n=Math.max(1,Math.min(64,256/2**(r.z-ye.get(e)))),a=e._map,s=a.options.crs,m=s.project(D.get(e)),f=Math.cos(D.get(e).lat*B),p=s.scale(r.z),c=2**(ye.get(e)-r.z),l=Cs;l.x=r.x*256,l.y=r.y*256;let u=s.transformation.untransform(l,p);l.x=(r.x+1)*256,l.y=(r.y+1)*256;let h=s.transformation.untransform(l,p),x=w.get(e).device,g=o.texture,y=iy(e,g),v=ay(e,n),S=Ke.get(e),T=(h.x-u.x)*f,P=-(h.y-u.y)*f,A=sy(e,v,T,P),Q={position:[(u.x-m.x)*f,0,-(u.y-m.y)*f],rotation:[0,0,0],scale:[T,1,P],worldMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],children:[],visible:!0,device:x,geometry:A,program:y,texture:g,terrain:[r.x*256*c-er.get(e).min.x*256,r.y*256*c-er.get(e).min.y*256,256*c,S],tile:o,opacity:t.options.opacity??1,id:Mt.value++,renderOrder:t.options.zIndex||0,fadeDuration:250,fadeStart:o.loadedAt,ground:!0,_rasterSource:t};o.mesh.visible=!1,q(Q,M.get(e)),E(e),I.get(e).set(o,Q)}async function zs(e,t,r){if(pe.get(e)&&r.done&&!r.request.signal.aborted&&I.get(e).get(`${t.z}/${t.x}/${t.y}`)===r)try{await my(pe.get(e),e,t,r)}catch(o){e.fire("tileerror",{tile:r,coords:t,error:o})}}function ui(e,t){if(!I.get(e)||pe.get(e)===t)return;let r;for(r of I.get(e).values())pe.get(e)&&So(pe.get(e),r),r.mesh&&(r.mesh.visible=!0,q(r.mesh,M.get(e)));if(pe.set(e,t||null),t)for(r of I.get(e).values())r.done&&zs(e,r.coords,r)}async function fy(e,t,r){try{await r,Le.get(e).resolve(),ui(e,me.get(t))}catch(o){e.fire("error",{error:o})}}var py=new Map;var cy=new Map;function ly(e,t){return e.tile.coords.z-t.tile.coords.z||e.distance-t.distance}var fn=[null];var Dt=new WeakMap;$();var pn={size:[null,null],format:"rgba8unorm",usage:null};var uy={addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",magFilter:"linear",minFilter:"linear"};var As={size:null,usage:null};var dy=[0,0,0,1,0,0,0,0,1,1,0,1];var hy=[0,1,0,0,1,0,0,1,0,0,1,0];var gy=[0,0,1,0,0,1,1,1];var yy=[0,2,1,1,2,3];function xy(e){let t={position:{size:3,data:new Float32Array(dy)},normal:{size:3,data:new Float32Array(hy)},uv:{size:2,data:new Float32Array(gy)},index:{data:new Uint16Array(yy)}},r,o;for([r,o]of Object.entries(t))o.count=o.data.length/(o.size||1),o.indexFormat="uint16",o.buffer=e.createBuffer((As.size=o.data.byteLength,As.usage=r==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST,As)),e.queue.writeBuffer(o.buffer,0,o.data);return{device:e,attributes:t,drawRange:{start:0,count:t.index.count}}}function vy(e,t){let r=w.get(e).device,o={device:r,texture:r.createTexture((pn.size[0]=t.image.width,pn.size[1]=t.image.height,pn.usage=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT,pn)),sampler:r.createSampler(uy),image:t.image,format:"rgba8unorm",srgb:!1,uploaded:null},i=Wr,n=wo,a=Lo;i.source=t.image,i.flipY=!1,n.texture=o.texture,a[0]=t.image.width,a[1]=t.image.height,r.queue.copyExternalImageToTexture(i,n,a),i.source=null,n.texture=null,o.uploaded=t.image,ge.get(e)||ge.set(e,Ue(e,{baseTexture:o,unlit:!0,alphaMode:"BLEND",doubleSided:e.options.doubleSided})),Dt.get(e)||Dt.set(e,xy(r));let{coords:s}=t,m=e._map.options.crs,f=m.project(D.get(e)),p=Math.cos(D.get(e).lat*B),c=m.scale(s.z),l=Cs;l.x=s.x*256,l.y=s.y*256;let u=m.transformation.untransform(l,c);l.x=(s.x+1)*256,l.y=(s.y+1)*256;let h=m.transformation.untransform(l,c),x=(h.x-u.x)*p,g=-(h.y-u.y)*p;t.texture=o,t.mesh={position:[(u.x-f.x)*p,0,-(u.y-f.y)*p],rotation:[0,0,0],scale:[x,1,g],worldMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],children:[],visible:!0,device:r,geometry:Dt.get(e),program:ge.get(e),texture:o,opacity:e.options.opacity,id:Mt.value++,renderOrder:e.options.zIndex||0,tile:t,fadeDuration:250,ground:!0,_rasterSource:e},q(t.mesh,M.get(e))}async function wy(e,t){try{await re.get(e);let r=await to(e.options.archive,t.coords.z,t.coords.x,t.coords.y,t.request.signal);if(t.request.signal.aborted){r?.image?.close();return}if(!r)throw new Error(`Tile ${t.coords.z}/${t.coords.x}/${t.coords.y} is not in the offline archive`);try{if(r.image)t.image=r.image;else{fn[0]=r.data;let o=new Blob(fn);fn[0]=null,t.image=await createImageBitmap(o)}}catch{throw fn[0]=null,new Error(`Unable to decode tile ${t.coords.z}/${t.coords.x}/${t.coords.y}`)}if(t.request.signal.aborted){t.image.close(),t.image=null;return}vy(e,t),t.loadedAt=performance.now(),t.done=!0,Ee.set(e,(Ee.get(e)||0)+1),zs(e,t.coords,t),e.fire("tileload",{tile:t,coords:t.coords}),E(e)}catch(r){if(t.request.signal.aborted)return;t.error=r.message,Ee.set(e,(Ee.get(e)||0)+1),e.fire("tileerror",{tile:t,coords:t.coords,error:r}),e.fire("error",{error:r,coords:t.coords})}finally{fe.set(e,fe.get(e)-1),e._map&&(Rs(e),Co(e),fe.get(e)||e.fire("load"),E(e))}}function Ly(e,t){t.started=!0;let r=fe.get(e)===0;return fe.set(e,fe.get(e)+1),e.fire("tileloadstart",{tile:t,coords:t.coords}),r&&e.fire("loading"),wy(e,t)}function Rs(e){let t=e._map;if(!t)return;let r=t.project(t.getCenter(),0).divideBy(256),o=[],i,n;for(i of I.get(e).values())i.started||i.request.signal.aborted||({coords:n}=i,o.push({tile:i,distance:Math.hypot((n.x+.5)/2**n.z-r.x,(n.y+.5)/2**n.z-r.y)}));o.sort(ly);for({tile:i}of o){if(fe.get(e)>=4)break;Ly(e,i)}}function by(e,t){let r=I.get(e),o,i,n;for([o,i]of r)!t.has(o)&&!i.done&&ko(e,i);for([o,n]of t)r.has(o)||(i={coords:n,request:new AbortController,done:!1},r.set(o,i))}var Rr=[0,0];var Ir=[0,0];function My(e,t,r){let o=e.getBounds(),i=e.project(o.getNorthWest(),r).divideBy(256).floor(),n=e.project(o.getSouthEast(),r).divideBy(256).floor();Rr[0]=t.maxLat,Rr[1]=t.minLon,Ir[0]=t.minLat,Ir[1]=t.maxLon;let a=t.maxLat===void 0||t.minLon===void 0?null:e.project(Rr,r).divideBy(256).floor(),s=t.minLat===void 0||t.maxLon===void 0?null:e.project(Ir,r).divideBy(256).floor(),m=e.project(e.getCenter(),r).divideBy(256).floor();return{minX:Math.max(0,i.x,a?.x??0,m.x-6),maxX:Math.min(2**r-1,n.x,s?.x??2**r-1,m.x+6),minY:Math.max(0,i.y,a?.y??0,m.y-6),maxY:Math.min(2**r-1,n.y,s?.y??2**r-1,m.y+6)}}function Ds(e){let t=e._map;if(!t||!R.get(e)||!U.get(e))return;let r=Math.max(U.get(e).minZoom??0,Math.min(Math.round(t.getZoom()),e.options.maxZoom,e.options.maxNativeZoom));cr.set(e,r);let o=My(t,U.get(e),r),i=py;i.clear();let n,a,s,m,f;for(n=o.minX;n<=o.maxX;n++)for(a=o.minY;a<=o.maxY;a++)i.set(`${r}/${n}/${a}`,{z:r,x:n,y:a});sr.set(e,new Set(i.keys()));let p=cy;p.clear();let c=Math.max(U.get(e).minZoom??0,r-2),l=2**(r-c);if(c<r)for([s,m]of i)I.get(e).get(s)?.done||(f={z:c,x:Math.floor(m.x/l),y:Math.floor(m.y/l)},p.set(`${f.z}/${f.x}/${f.y}`,f));let u=new Map(p);for([s,m]of i)u.set(s,m);i.clear(),p.clear(),by(e,u),Rs(e),Co(e)}async function By(e,t,r){try{await Promise.all([r,re.get(e)]),e._map===t&&t.hasLayer(e)&&Ds(e)}catch(o){e.fire("error",{error:o})}}function Ty(e,t){D.get(e)||D.set(e,t.getCenter());let r=fi(e,t);fy(e,t,r),By(e,t,r)}var Gs=new WeakMap;var Us=new WeakMap;var di=new WeakMap;var Dr=new WeakMap;var so=new WeakMap;var Ns=new WeakMap;async function Py(e){let{backend:t,archive:r,controller:o,tiles:i}=e,n,a;for(;e.next<i.length;){if(o.signal.throwIfAborted(),n=i[e.next++],a=await to(r,n.z,n.x,n.y,o.signal),!a||a.data.byteLength!==256*256*4)throw new Error(`Missing or invalid Float32 terrain tile ${n.z}/${n.x}/${n.y}`);ot.get(t).set(`${n.x}/${n.y}`,new Float32Array(a.data))}}function Sy(e){if(!e.ok)throw new Error(`Bridges: HTTP ${e.status}`);return e.json()}L();function ky(e,t){let r=e._map;ye.set(e,t.maxZoom),Rr[0]=t.maxLat,Rr[1]=t.minLon;let o=r.project(Rr,ye.get(e)).divideBy(256).floor();Ir[0]=t.minLat,Ir[1]=t.maxLon;let i=r.project(Ir,ye.get(e)).divideBy(256).floor();er.set(e,new d.Bounds(o,i));let n=[],a=r.project(r.getCenter(),ye.get(e)).divideBy(256),s,m;for(s=o.x;s<=i.x;s++)for(m=o.y;m<=i.y;m++)n.push({z:ye.get(e),x:s,y:m,distance:Math.hypot(s+.5-a.x,m+.5-a.y)});return n.sort(gs),n}var mo=new WeakMap;$();L();function Cy([e,t,r],o,i,n,a){let s=o.project(new d.LatLng(t,e));return[(s.x-i.x)*n,r-a,-(s.y-i.y)*n]}function _y(e,t){let r=[],o=0,i,n,a;for(i of e){for(n=[],a=0;a<i.length;a++)n.push({x:t[o+a][0],y:t[o+a][1]});r.push(n),o+=i.length}return r}function Ey(e,t,r){let o=[],i=1/0,n=1/0,a=-1/0,s=-1/0,m,f,p,c,l,u,h,x;for(m of r){f=[];for(p of m)f.push(t[p]);o.push(f)}for(c of t)i=Math.min(i,c[0]),n=Math.min(n,c[1]),a=Math.max(a,c[0]),s=Math.max(s,c[1]);let g={triangles:o,min:[i,n],max:[a,s]};for(l=Math.floor(g.min[0]/64);l<=Math.floor(g.max[0]/64);l++)for(u=Math.floor(g.min[1]/64);u<=Math.floor(g.max[1]/64);u++)h=`${l}/${u}`,x=ct.get(e).get(h),x||ct.get(e).set(h,x=[]),x.push(g)}function Oy(e,t,r){let{position:o,normal:i,color:n}=e,a,s,m,f,p,c,l,u,h;for([a,s,m]of r)for(f=t[a],p=t[s],c=t[m],(p[2]-f[2])*(c[0]-f[0])-(p[0]-f[0])*(c[2]-f[2])<0&&(l=s,s=m,m=l),u=0;u<6;u++)l=u===0||u===3?a:u===1||u===5?s:m,h=t[l],o.push(h[0],h[1]-(u>=3?1.2:0),h[2]),i.push(0,u>=3?-1:1,0),n.push(.6,.58,.54)}function zy(e,t,r){let{position:o,normal:i,color:n}=e,a=Math.hypot(r[0]-t[0],r[2]-t[2])||1,s=(r[2]-t[2])/a,m=-(r[0]-t[0])/a,f,p;for(f=0;f<6;f++)p=f===0||f===3||f===5?t:r,o.push(p[0],p[1]-(f===2||f>=4?1.2:0),p[2]),i.push(s,0,m),n.push(.6,.58,.54)}function Ay(e,t,r){let o=0,i,n;for(i of r){for(n=0;n<i.length;n++)zy(e,t[o+n],t[o+(n+1)%i.length]);o+=i.length}}function Ry(e,t){let{backend:r,map:o,zoom:i,crs:n,origin:a,metres:s,base:m}=e,f=[],p,c,l,u,h,x,g,y,v,S,T;for(p of t)c=p.slice(0,-1),c.length>=3&&f.push(c);if(!f.length)return;let P=[],A=[];for(p of f)for([l,u,h]of p)x=o.project([u,l],i),P.push([x.x,x.y,h]);for(p of f)for(g of p)A.push(Cy(g,n,a,s,m));try{y=_y(f,P),[v,...S]=y,T=na(v,S)}catch{return}Ey(r,P,T),Oy(e,A,T),Ay(e,A,f)}function Iy(e,t){let r=e._map,o=r.options.crs,i=ye.get(e),n=o.project(D.get(e)),a=Math.cos(D.get(e).lat*B),s=M.get(e).position[1],m=[],f=[],p=[];ct.set(e,new Map);let c={backend:e,map:r,crs:o,zoom:i,origin:n,metres:a,base:s,position:m,normal:f,color:p},l,u,h;for({geometry:l}of t.features)if(!(l.type!=="Polygon"&&l.type!=="MultiPolygon"))for(u=l.coordinates,h=0;h<(l.type==="Polygon"?1:u.length);h++)Ry(c,l.type==="Polygon"?u:u[h]);m.length&&mo.set(e,dr(e,{position:m,normal:f,color:p}))}function Dy(e,t,r){Te.set(e,!0),Ke.set(e,pr(e,D.get(e))??0);let o;for(o of Object.values(t._layers))ni(o),pi(o,e);r&&Iy(e,r),t.fire("terrainchange"),E(e),e.fire("terrainready")}async function Fs(e){if(Dr.get(e)||!e._map)return;Dr.set(e,!0),Te.set(e,!1);let t=new AbortController;di.set(e,t);let r;try{if(!so.get(e))throw new Error("Terrain layer requires a PMTiles or COG elevation archive");let o=ma({source:{type:"raster",url:so.get(e),archive:e.options.archive,asset:e.options.asset,workerUrl:e.options.workerUrl}});Ns.set(o,e._map),Us.set(e,o),await re.get(o);let i=U.get(o);if(i.tileType!==0||i.minZoom!==i.maxZoom)throw new Error("Expected a single-zoom Float32 terrain archive");let n=e._map,a=ky(e,i),s={backend:e,archive:o,controller:t,tiles:a,next:0},m=[];for(r=0;r<Math.min(4,a.length);r++)m.push(Py(s));await Promise.all(m);let f=e.options.bridges&&await fetch(e.options.bridges,{signal:t.signal}).then(Sy);return t.signal.aborted||e._map!==n?void 0:(Dy(e,n,f),!0)}catch(o){return t.signal.aborted||e.fire("error",{error:o}),!1}finally{Dr.set(e,!1)}}function Gy(){Fs(this.backend).then(this.resolve,this.reject)}function Uy(e){z.get(e)==="raster"&&ui(e,this)}function Ny(e,t){if(Be.get(t)||me.get(t)&&me.get(t)!==e)throw new Error("Only one terrain layer can be active per map");if(Gs.get(e)){Be.set(t,{layer:e,map:t,terrainCache:new Map,terrainController:new AbortController}),sn(e,t),t.fire("terrainchange");return}if(me.set(t,e),sn(e,t),M.get(e))tr.set(e,Fs(e));else{let r=Promise.withResolvers();tr.set(e,r.promise),e.once("ready",Gy,{backend:e,...r})}t.eachLayer(Uy,e),t.fire("terrainchange")}var js=[];function Fy(){js.shift()?.fire("load")}function jy(){this._image||this._initImage(),this._image.complete&&this._image.naturalWidth&&(js.push(this),queueMicrotask(Fy))}function Wy(e,t){switch(z.get(e)){case"3d":return sn(e,t);case"raster":return Ty(e,t);case"terrain":return Ny(e,t);case"image":return jy.call(e,t);case"time":return lh.call(e,t)}}function $y(e){if(!e._map)return;let t;for(t of Y.get(e).values())ro(e,t);Y.get(e).clear(),oo(e)}function Vy(e){let t={};return ae.get(e)&&(t.moveend=t.zoomend=t.rotate=t.pitch=t.resize=oo.bind(null,e)),(X.get(e)||ae.get(e))&&(t.terrainchange=$y.bind(null,e)),t}function Zy(e){let t=Ds.bind(null,e);return{moveend:t,zoomend:t,rotate:t,pitch:t,resize:t}}function qy(){return{}}L();function Hy(e){return!_r.get(e)&&(e instanceof d.GridLayer||e instanceof d.Polyline||e instanceof d.CircleMarker||e instanceof d.Marker&&!(e.options.icon instanceof d.DivIcon)||e instanceof d.ImageOverlay&&!(e instanceof d.VideoOverlay)&&!(e instanceof d.SVGOverlay))}function Yy(e){let t=Hy(this);t&&((this instanceof d.GridLayer||this instanceof d.ImageOverlay)&&(this.options.crossOrigin||=!0),this instanceof d.Marker&&(this.options.icon.options.crossOrigin||=!0));let r=e.target;r.hasLayer(this)&&(z.get(this)?(this._map=r,this._zoomAnimated=r._zoomAnimated,z.get(this)!=="pending"&&z.get(this)!=="time"&&(zr.set(this,z.get(this)==="raster"?Zy(this):_r.get(this)?Vy(this):qy()),ao.set(this,r),r.on(zr.get(this),this),this.once("remove",Hg,this)),Wy(this,r),this.fire("add"),r.fire("layeradd",{layer:this})):mt.value._layerAdd.call(this,e),!(!t||!e.target.hasLayer(this))&&ga(this,e.target))}L();var Ws=[];var $s={value:Promise.resolve()};function Xy(e,t){X.set(e,!0),At(e,t)}function Jy(e){return e.data===void 0&&(e.tileJSON!==void 0||typeof e.url=="string"&&/\{[zxy]\}|%7B[zxy]%7D/i.test(e.url))}L();var be=new WeakMap;async function Ky(e){let t=new URL(e.tileJSON,document.baseURI).href,r=await fetch(t);if(!r.ok)throw new Error(`TileJSON: HTTP ${r.status}`);let o=await r.json();if(!o||!Array.isArray(o.tiles)||!o.tiles.length||typeof o.tiles[0]!="string")throw new Error("TileJSON requires a tile URL template");return{...e,url:new URL(o.tiles[0],t).href,minNativeZoom:e.minNativeZoom??o.minzoom,maxNativeZoom:e.maxNativeZoom??o.maxzoom,attribution:e.attribution??o.attribution}}function Qy(e){let t="",r=!1,o=!1,i=0,n="";for(i=0;i<e.length;i++)n=e[i],!(!r&&n===","&&/^\s*[\]}]/.test(e.slice(i+1)))&&(t+=n,o?o=!1:r&&n==="\\"?o=!0:n==='"'&&(r=!r));return t}function ex(e,t){if(t.quoted)return t.escaped?(t.escaped=!1,e==="'"?e:"\\"+e):e==="\\"?(t.escaped=!0,""):e===t.quoted?(t.quoted="",'"'):e==='"'?'\\"':e;if(e==='"'||e==="'")return t.quoted=e,'"'}function tx(e,t,r){if(r==="/"){for(;t<e.length&&e[t]!==`
|
|
3
|
+
`;)t++;return t}let o=e.indexOf("*/",t+2);if(o<0)throw new Error("Unterminated style comment");return o+1}function rx(e){let t="",r=0,o="",i="",n,a={quoted:"",escaped:!1};for(r=0;r<e.length;r++){if(o=e[r],i=e[r+1],n=ex(o,a),n!==void 0){t+=n;continue}o==="/"&&(i==="/"||i==="*")?(r=tx(e,r,i),t+=i==="/"?`
|
|
4
|
+
`:" "):t+=o}return t}function ox(e){let t=0,r=null;if(!Array.isArray(e))throw new Error("Invalid vector style layers");for(t=0;t<e.length;t++)if(r=e[t],!r||typeof r.id!="string"||typeof r.type!="string")throw new Error("Invalid vector style layers")}function ix(e){let t=/^\s*(?:const|let|var)\s+otm_layers\s*=\s*/.exec(e);t&&(e=e.slice(t[0].length));let r=Qy(rx(e).trim().replace(/;$/,"")),o=JSON.parse(r),i=o.layers??o;return ox(i),i}async function nx(e){if(typeof e=="string"){let r=await fetch(e);if(!r.ok)throw new Error(`Vector style: HTTP ${r.status}`);e=ix(await r.text())}else e=e?.layers??e;if(!Array.isArray(e))throw new Error("Invalid vector style layers");let t;for(t of e)if(!t||typeof t.id!="string"||typeof t.type!="string")throw new Error("Invalid vector style layers");return e}function ax(e,t,r){if(!Number.isInteger(e)||!Number.isInteger(t)||!Number.isInteger(r)||e<0||t<e||r<t||r>24)throw new Error("Invalid vector tile zoom range")}async function sx(e){if(!e||typeof e!="object")throw new TypeError("Vector tiles require source options");e.tileJSON&&(e=await Ky(e));let{url:t,style:r,minNativeZoom:o=0,maxNativeZoom:i=14,maxZoom:n=19}=e,a;typeof t=="string"&&(t=t.replaceAll(/%7B([zxy])%7D/gi,"{$1}"));for(a of["{z}","{x}","{y}"])if(typeof t!="string"||!t.includes(a))throw new Error("Vector tiles require an XYZ URL template");return ax(o,i,n),r=await nx(r),{...e,url:t,style:r,minNativeZoom:o,maxNativeZoom:i,maxZoom:n}}async function mx(e){let t=await fetch(`${e}.json`);if(!t.ok)throw new Error(`Sprite ${e}.json: HTTP ${t.status}`);return{url:`${e}.png`,index:await t.json()}}var Vs="move zoom rotate pitch resize viewreset";function fx(e,t,r,o,i){let n=0;if(e==="all"){for(n=0;n<t.length;n++)if(!O(t[n],r,o,i))return!1;return!0}if(e==="any"){for(n=0;n<t.length;n++)if(O(t[n],r,o,i))return!0;return!1}throw new Error(`Unsupported vector style expression: ${e}`)}function px(e,t,r,o,i){let n=0,a=null;if(e==="coalesce"){for(n=0;n<t.length;n++)if(a=O(t[n],r,o),a!=null)return a;return null}if(e==="case"){for(n=0;n<t.length-1;n+=2)if(O(t[n],r,o))return O(t[n+1],r,o);return O(t[t.length-1],r,o)}throw new Error(`Unsupported vector style expression: ${e}`)}function Gr(e,t,r,o){return o&&typeof e=="string"?t[e]:O(e,t,r)}function cx(e,t,r,o,i){let n=Gr(t[0],r,o,i),a=O(t[1],r,o);switch(e){case"==":return n===a;case"!=":return n!==a;case"<=":return n<=a;case">=":return n>=a;case"<":return n<a;case">":return n>a;default:throw new Error(`Unsupported vector style expression: ${e}`)}}var Nf={black:[0,0,0,1],white:[255,255,255,1],gray:[128,128,128,1],blue:[0,0,255,1],red:[255,0,0,1],green:[0,128,0,1]};function lx(e){let t=/^rgba?\(([^)]+)\)$/.exec(e);if(t){let r=t[1].split(","),o=0,i=!0;for(o=0;o<r.length;o++)r[o]=Number(r[o]);for(r.length===3&&r.push(1),o=0;o<r.length;o++)Number.isFinite(r[o])||(i=!1);if(r.length===4&&i)return r}throw new Error(`Unsupported interpolated style color: ${e}`)}function ux(e){let t=0,r=0;e.length===4&&(e="#"+e[1]+e[1]+e[2]+e[2]+e[3]+e[3]);let o=[];for(t=1;t<6;t+=2)r=parseInt(e.slice(t,t+2),16),o.push(r);return o.push(1),o}function Ur(e){return Object.hasOwn(Nf,e)?Nf[e]:/^#[0-9a-f]{3}$/i.test(e)||/^#[0-9a-f]{6}$/i.test(e)?ux(e):lx(e)}function dx(e,t,r){let o=O(e[1],t,r),i=e[0][0]==="exponential"?e[0][1]:1,n=0,a=0,s=0,m=0,f=null,p=null,c=0,l="";if(o<=e[2])return O(e[3],t,r);for(n=4;n<e.length;n+=2)if(!(o>e[n])){if(a=e[n-2],s=e[n],m=i===1?(o-a)/(s-a):(i**(o-a)-1)/(i**(s-a)-1),f=O(e[n-1],t,r),p=O(e[n+1],t,r),typeof f=="number"&&typeof p=="number")return f+(p-f)*m;for(f=Ur(f),p=Ur(p),c=0;c<3;c++)c&&(l+=","),l+=Math.round(f[c]+(p[c]-f[c])*m);return`rgba(${l},${f[3]+(p[3]-f[3])*m})`}return O(e.at(-1),t,r)}function Ff(e,t,r,o){let i=0,n=null;for(i=t;i<r;i++)if(n=e[i],n===o||n!==n&&o!==o)return!0;return!1}function Zs(e,t,r,o,i){let n=null;if(e==="!in")return n=Gr(t[0],r,o,i),!Ff(t,1,t.length,n);if(i)return n=Gr(t[0],r,o,!0),Ff(t,1,t.length,n);let a=O(t[1],r,o);return n=Gr(t[0],r,o,!1),a.includes(n)}function hx(e,t,r,o,i){if(e==="in")return Zs(e,t,r,o,i);if(e==="interpolate")return dx(t,r,o);throw new Error(`Unsupported vector style expression: ${e}`)}function gx(e,t,r,o){let i=0,n=0;if(e==="+"){for(i=0;i<t.length;i++)n+=O(t[i],r,o);return n}if(e==="-")return t.length===1?-O(t[0],r,o):O(t[0],r,o)-O(t[1],r,o);throw new Error(`Unsupported vector style expression: ${e}`)}function yx(e,t,r){let o=O(e[0],t,r),i=0,n=!1;for(i=1;i<e.length-1;i+=2)if(Array.isArray(e[i])?n=e[i].includes(o):n=e[i]===o,n)return O(e[i+1],t,r);return O(e[e.length-1],t,r)}function xx(e,t,r,o,i){if(e==="!")return!O(t[0],r,o,i);if(e==="!=")return Gr(t[0],r,o,i)!==O(t[1],r,o);if(e==="!in")return Zs(e,t,r,o,i);throw new Error(`Unsupported vector style expression: ${e}`)}function vx(e,t,r,o){switch(e){case"literal":return t[0];case"get":return r[t[0]];case"has":return Object.hasOwn(r,t[0]);case"zoom":return o;default:throw new Error(`Unsupported vector style expression: ${e}`)}}function wx(e,t,r){let o=O(e[0],t,r),i=e[1],n=0;for(n=2;n<e.length&&!(o<e[n]);n+=2)i=e[n+1];return O(i,t,r)}function Lx(e,t,r,o){if(e==="to-boolean")return!!O(t[0],r,o);if(e==="to-number"){let i=0,n=0;for(i=0;i<t.length;i++)if(n=Number(O(t[i],r,o)),Number.isFinite(n))return n;throw new Error("Invalid numeric style expression")}throw new Error(`Unsupported vector style expression: ${e}`)}function O(e,t,r,o=!1){if(!Array.isArray(e))return e;let i=e[0],n=e.slice(1),a=String(i);if(/^(?:literal|get|has|zoom)$/.test(a))return vx(i,n,t,r);switch(a[0]){case"a":return fx(i,n,t,r,o);case"!":return xx(i,n,t,r,o);case"=":case"<":case">":return cx(i,n,t,r,o);case"i":return hx(i,n,t,r,o);case"t":return Lx(i,n,t,r,o);case"c":return px(i,n,t,r,o);case"m":return yx(n,t,r);case"s":return wx(n,t,r);default:return gx(i,n,t,r)}}function Qe(e){return e._map.getZoom()+(be.get(e).styleZoomOffset??0)}function bx(){clearTimeout(this.timer),this.changedAt=performance.now(),this.timer=setTimeout(this.update.bind(this),180)}$();function qs(e,t){if(!Number.isFinite(t))throw new TypeError("Marker rotation must be finite");return e.options.rotation=t,e.update(),Ct(e),e}function cn(e,t,r){if(!r.along)return;let o=e.latLngToContainerPoint(r.along[0]),i=e.latLngToContainerPoint(r.along[1]),n=Math.atan2(i.y-o.y,i.x-o.x)/B;n>90?n-=180:n<-90&&(n+=180),t.options.rotation!==n*B&&qs(t,n*B)}function Mx(){let e;for(e of this.labels.values())e._mvtLabel&&cn(this._map,e,e._mvtLabel)}var hi=new WeakMap;function gi(e){let t=hi.get(e);t?.blobUrl&&(URL.revokeObjectURL(t.blobUrl),t.blobUrl=null)}function Bx({data:e}){gi(this);let t=this.waiting.get(e.id);t&&(this.waiting.delete(e.id),e.error?t.reject(new Error(e.error)):t.resolve(e))}function Tx(e){gi(this);let t=new Error(`Worker MVT: ${e.message}`),r;for(r of this.waiting.values())r.reject(t);this.waiting.clear(),He(this,t)}function Px(e){let{style:t,pane:r}=be.get(this),o,i;for([o]of t.entries())(e.getPane(`${r}-${o}`)||e.createPane(`${r}-${o}`)).style.zIndex=200+o;for(i of t)if(i.type==="background"){e.getContainer().style.background=O(i.paint["background-color"],{},Qe(this));break}this.session={},this.tiles=new Map,this.labels=new Map,this.waiting=new Map,this.retiring=new Set,this.inflight=0,this.sequence=0,this.changedAt=0,this.paintZoom=null;let n=hs(this.options.workerUrl||ds);hi.set(this,n),this.worker=n.worker,this.worker.onmessage=Bx.bind(this),this.worker.onerror=Tx.bind(this),this.refresh=bx.bind(this),this.rotateLabels=Mx.bind(this),e.on(Vs,this.refresh),e.on("move rotate pitch",this.rotateLabels),this.update()}function Sx(e){e.off(Vs,this.refresh),e.off("move rotate pitch",this.rotateLabels),clearTimeout(this.timer),this.session=null,this.worker.terminate(),gi(this),hi.delete(this);let t,r,o,i;for(t of this.waiting.values())t.reject(new DOMException("Layer removed","AbortError"));this.waiting.clear();for(r of this.tiles.values())r.controller.abort(),r.group?.remove();for(o of this.retiring)o.remove();for(i of this.labels.values())i.remove();this.tiles.clear(),this.labels.clear(),this.retiring.clear()}function kx(){if(!this.session)return;let{minNativeZoom:e,maxNativeZoom:t}=be.get(this),r=Math.max(e,Math.min(t,Math.floor(Qe(this)))),o=this._map.getBounds(),i=2**r,n=this._map.project(o.getNorthWest(),r).divideBy(256),a=this._map.project(o.getSouthEast(),r).divideBy(256),s,m,f,p;for(s of this.tiles.values())s.needed=!1;for(m=Math.floor(n.x);m<=Math.floor(a.x);m++)for(f=Math.max(0,Math.floor(n.y));f<=Math.min(i-1,Math.floor(a.y));f++)p=`${r}/${m}/${f}`,s=this.tiles.get(p),s||(s={key:p,coords:{z:r,x:m,y:f},controller:new AbortController},this.tiles.set(p,s)),s.needed=!0;this.prune(),this.pump(),this.updatePaint().catch(He.bind(null,this)),this.updateLabels().catch(He.bind(null,this))}function Nr(e,t,r,o,i){return e[t]===void 0?r:O(e[t],o,i)}function Cx(e,t,r){let o=Ur(Nr(e,"fill-color","#000",t,r)),i=Nr(e,"fill-outline-color",null,t,r),n=i===null?null:Ur(i),a=Nr(e,"fill-opacity",1,t,r)*o[3],s={r:o[0]/255,g:o[1]/255,b:o[2]/255},m=n?{r:n[0]/255,g:n[1]/255,b:n[2]/255}:null;return{fillColor:s,fillOpacity:a,color:m,weight:.5}}function _x(e,t,r,o){if(!e)return;let i=e,n=0,a="";if(typeof e[0]!="number"&&(i=O(e,r,o)),!Array.isArray(i))throw new TypeError("Style dash array must be an array");for(n=0;n<i.length;n++)n&&(a+=" "),a+=i[n]*t;return a}function Ex(e,t,r,o){let i=Nr(t,"line-width",1,r,o),n=Ur(Nr(t,"line-color","#000",r,o)),a=Nr(t,"line-opacity",1,r,o)*n[3],s=_x(t["line-dasharray"],i,r,o),m=e.layout?.["line-cap"]||"butt",f=e.layout?.["line-join"]||"miter";return{color:{r:n[0]/255,g:n[1]/255,b:n[2]/255},opacity:a,weight:i,dashArray:s,lineCap:m,lineJoin:f}}function Ox(e,t,r){let o=e.paint||{};return e.type==="fill"?Cx(o,t,r):Ex(e,o,t,r)}function Hs(e,t,r){return r>=(e.minzoom??0)&&r<(e.maxzoom??1/0)&&e.layout?.visibility!=="none"&&(!e.filter||O(e.filter,t,r,!0))}function Ys(e,t){let r=Ox(e.entry,e.properties,t);return Hs(e.entry,e.properties,t)||(r.opacity=0,r.fillOpacity=0),r}function zx(e,t){let r=Ys(e,t),{layer:o}=e;e.kind==="line"?r.dashArray!==o.options.dashArray?o.setStyle(r):o.setStyle({color:r.color,opacity:r.opacity,weight:r.weight}):(JSON.stringify(r.fillColor)!==JSON.stringify(o.options.fillColor)||r.fillOpacity!==o.options.fillOpacity)&&o.setStyle({fillColor:r.fillColor,fillOpacity:r.fillOpacity})}function fo(e,t){return e.session===t&&performance.now()-(e.changedAt||0)>=180}function xt(e=0){let t=Promise.withResolvers();return setTimeout(t.resolve,e),t.promise}async function Ax(){let e=Qe(this),t=this.session;if(this.paintZoom===e)return;let r=this.paintRevision=(this.paintRevision||0)+1,o=0,i,n;for(i of this.tiles.values())if(i.rendered)for(n of i.rendered){if(!fo(this,t)||this.paintRevision!==r||Qe(this)!==e)return;zx(n,e),++o%32===0&&await xt()}this.paintZoom=e}function Rx(e,t){return e.priority-t.priority}function Ix(e){let t=[],r,o;for(r of e.tiles.values())if(!(!r.needed||!r.labelCandidates))for(o of r.labelCandidates)t.push(o);return t.sort(Rx)}function Dx(e,t){e.size=O(e.entry.layout?.["text-size"]??12,e.properties,t),e.color=O(e.entry.paint?.["text-color"]??"#000",e.properties,t),e.halo=O(e.entry.paint?.["text-halo-color"]??"#fff",e.properties,t),e.haloWidth=O(e.entry.paint?.["text-halo-width"]??0,e.properties,t)}function Gx(e,t,r){let o=e._map,i=Qe(e);if(!Hs(t.entry,t.properties,i)||(Dx(t,i),!(t.size>0))||t.icon&&!be.get(e).spriteSheet?.index[t.icon]||t.along&&t.pixelBase*2**o.getZoom()<t.text.length*t.size*.6)return null;let n=o.latLngToContainerPoint(t.latlng);if(n.x<0||n.y<0||n.x>r.x||n.y>r.y)return null;let a=t.text.length*t.size*.65+16,s=[],m,f;for(m=Math.floor((n.x-a/2)/32);m<=Math.floor((n.x+a/2)/32);m++)for(f=Math.floor((n.y-t.size)/24);f<=Math.floor((n.y+t.size)/24);f++)s.push(`${m}:${f}`);return s}function Ux(e,t){let r;for(r of e)if(t.has(r))return!1;for(r of e)t.add(r);return!0}L();L();L();function Nx(e,t){let{x:r,y:o,width:i,height:n}=t.index[e.icon],[a,s]=e.iconOffset;return new d.DivIcon({className:"",html:`<div style="width:${i}px;height:${n}px;background:url(${t.url}) -${r}px -${o}px"></div>`,iconSize:[i,n],iconAnchor:[i/2-a,n/2-s]})}function Fx(e){let t=Math.floor(19.23076923076923),r=[],o="",i;for(i of e.split(" "))o&&Array.from(`${o} ${i}`).length>t?(r.push(o),o=i):o=o?`${o} ${i}`:i;return r.push(o),r}function jf(e,t){if(e.icon)return Nx(e,t);let r=document.createElementNS("http://www.w3.org/2000/svg","svg"),o=e.along?[e.text]:Fx(e.text),i=0,n,a,s,m;for(n of o)i=Math.max(i,Array.from(n).length);let f=Math.max(40,i*e.size*.65+12),p=e.size*1.2,c=o.length*p+12;r.setAttribute("width",f),r.setAttribute("height",c);let l={x:f/2,"text-anchor":"middle","font-family":"sans-serif","font-size":e.size,fill:e.color,stroke:e.halo,"stroke-width":e.haloWidth*2,"paint-order":"stroke"};for(m=0;m<o.length;m++){s=document.createElementNS(r.namespaceURI,"text");for(a of Object.keys(l))s.setAttribute(a,l[a]);s.setAttribute("y",c/2+(m-(o.length-1)/2)*p+e.size*.35),s.textContent=o[m],r.append(s)}return new d.Icon({iconUrl:`data:image/svg+xml;charset=utf-8,${encodeURIComponent(new XMLSerializer().serializeToString(r))}`,iconSize:[f,c],iconAnchor:[f/2,c/2]})}function Xs({error:e}){He(this,e)}function jx(e,t,r){let o=JSON.stringify([t.size,t.color,t.halo,t.haloWidth,t.icon]),i=be.get(e).spriteSheet,n=e.labels.get(r);if(n){if(n._mvtLabel=t,n._mvtLabelStyle===o)return cn(e._map,n,t),!1;n.setIcon(jf(t,i))}else{let{pane:a}=be.get(e);n=new d.Marker(t.latlng,{icon:jf(t,i),pane:`${a}-${t.order}`,title:t.text,alt:t.text,interactive:!1,keyboard:!1,rotateWithView:!1}).on("error",Xs,e).addTo(e._map),e.labels.set(r,n)}return n._mvtLabelStyle=o,n._mvtLabel=t,cn(e._map,n,t),!0}async function Wx(){let e=this.session,t=this.labelRevision=(this.labelRevision||0)+1;this.labelsReady=!1;let r=Ix(this),o=this._map.getSize(),i=new Set,n=new Set,a=0,s,m,f,p;for(s of r){if(++a%128===0&&await xt(),!fo(this,e)||this.labelRevision!==t)return;f=Gx(this,s,o),!(!f||!s.allowOverlap&&!Ux(f,i))&&(m=`${s.text}${s.icon||""}:${s.latlng.join(":")}`,n.add(m),jx(this,s,m)&&await xt())}for([m,p]of this.labels){if(!fo(this,e)||this.labelRevision!==t)return;n.has(m)||(p.remove(),this.labels.delete(m),await xt())}this.labelsReady=!0}function $x(e,t){let r=e.z-t.z;return r>=0?e.x>>r===t.x&&e.y>>r===t.y:t.x>>-r===e.x&&t.y>>-r===e.y}function Vx(e,t){let r;for(r of e.tiles.values())if(r.needed&&!r.group&&$x(r.coords,t.coords))return!0;return!1}function Zx(){let e,t;for([t,e]of this.tiles)e.needed||e.group&&Vx(this,e)||(e.controller.abort(),this.tiles.delete(t),e.group&&this.retire(e.group).catch(He.bind(null,this)))}async function qx(e){let t=this.session;this.retiring.add(e);let r=0,o;for(o of e.getLayers()){if(this.session!==t)return;e.removeLayer(o),++r%8===0&&await xt()}e.remove(),this.retiring.delete(e)}function Hx(e,t){return e.distance-t.distance}function Yx(){if(!this.session)return;let e=this._map.getCenter(),t=[],r,o;for(r of this.tiles.values())!r.needed||r.started||(o=this._map.project(e,r.coords.z).divideBy(256),r.distance=(r.coords.x-o.x)**2+(r.coords.y-o.y)**2,t.push(r));t.sort(Hx);for(r of t){if(this.inflight>=4)break;r.started=!0,this.inflight++,this.load(r)}}L();L();function Xx(e,t,r,o){let{pane:i}=be.get(e),a={...Ys(o,Qe(e)),pane:`${i}-${o.order}`,interactive:!1,smoothFactor:0},s=o.kind==="fill"?new d.Polygon(o.paths,{...a,stroke:!1,triangulated:!0}):new d.Polyline(o.paths,a);s.on("error",Xs,e),t.rendered.push({layer:s,kind:o.kind,entry:o.entry,properties:o.properties}),r.addLayer(s)}async function Jx(e,t,r,o,i){let n,a=performance.now();for(n of o){for(;!fo(e,i)&&e.session===i&&!t.controller.signal.aborted;)await xt(50);if(t.controller.signal.aborted||e.session!==i)return!1;Xx(e,t,r,n),performance.now()-a>8&&(await xt(),a=performance.now())}return!0}async function Kx(e){let{coords:t,controller:r}=e,o=this.session,{url:i,style:n,sourceId:a,maxZoom:s,maxNativeZoom:m}=be.get(this),f=2**t.z,p=(t.x%f+f)%f,c;try{let l=d.Util.template(i,{z:t.z,x:p,y:t.y}),u=await fetch(l,{signal:r.signal});if(!u.ok)throw new Error(`Tile ${e.key}: HTTP ${u.status}`);let h=await u.arrayBuffer();if(r.signal.aborted)return;let x=++this.sequence,g=Promise.withResolvers();this.waiting.set(x,g),this.worker.postMessage({type:"vector",id:x,buffer:h,coords:t,style:n,source:a,maxZoom:s,zoom:Qe(this),mapZoom:t.z>=m?s:this._map.getZoom()},[h]);let y=await g.promise;if(r.signal.aborted||this.session!==o)return;if(c=new d.LayerGroup().addTo(this._map),e.rendered=[],!await Jx(this,e,c,y.batches,o)){c.remove();return}e.group=c,e.labelCandidates=y.labels,this.fire("tileload",{coords:t,group:c}),this.prune(),this.refresh()}catch(l){c?.remove(),!r.signal.aborted&&this.session===o&&this.fire("error",{error:l})}finally{this.session===o&&(this.inflight--,this.pump())}}async function Qx(e,t){let r=await sx(t);typeof r.sprite=="string"&&(r.spriteSheet=await mx(r.sprite));let{url:o,tileJSON:i,style:n,sourceId:a,minNativeZoom:s,maxNativeZoom:m,maxZoom:f,...p}=r;return d.Util.setOptions(e,p),r.pane=`mvt-${d.Util.stamp(e)}`,be.set(e,r),Object.assign(e,{onAdd:Px,onRemove:Sx,update:kx,updatePaint:Ax,updateLabels:Wx,prune:Zx,retire:qx,pump:Yx,load:Kx}),e}function e0(e){let t=e._map;return t?.removeLayer(e),z.delete(e),t?.addLayer(e),e.fire("ready"),e}function Js(e,t){throw e.fire("error",{error:t}),t}function t0(e,t){z.set(e,"pending");let r=Qx(e,t).then(e0.bind(null,e)).catch(Js.bind(null,e));re.set(e,r),r.catch(Xe)}L();async function r0(e,t){let r=await eo(t);return e.options.archive=t,U.set(e,r),e.options.maxNativeZoom===void 0&&(e.options.maxNativeZoom=r.maxZoom),e.options.maxZoom=Math.max(e.options.minZoom||0,e.options.maxZoom),e.fire("ready"),e}function o0(e){let t,r;for(t of I.get(e).values())ko(e,t);if(ge.get(e)?.pipelineCache.clear(),ge.set(e,null),Dt.get(e)){for(r of Object.values(Dt.get(e).attributes))W(e,r.buffer);Dt.set(e,null)}}var Fr=new WeakMap;var yi=new WeakMap;var Ks={_3d:_r,_added:Le,_areas:Y,_bridgeMesh:mo,_bridges:ct,_cameraZIndexOffset:$r,_countStatus:kr,_cursor:Er,_dem:Ie,_directories:Cr,_etag:ti,_fadeFrame:Fr,_fadeVersion:yi,_frame:ft,_geojson:X,_header:Xi,_inflight:Je,_layers:F,_loadingTiles:fe,_nativeGPU:de,_pointerEvents:Ar,_pruneAfter:Wt,_pruneVersion:Oi,_pruneWanted:zi,_queued:io,_rasterGeometry:Dt,_rasterProgram:ge,_rasterTiles:I,_rasterVersion:Ee,_rendererReady:gt,_roofRaster:K,_roofRasters:ki,_sceneOrigin:ie,_shadowMeshes:Ft,_shared:R,_size:mr,_terrain3D:pe,_terrainArchive:Us,_terrainBaseY:Et,_terrainBounds:er,_terrainController:di,_terrainGrids:It,_terrainLoading:Dr,_terrainOriginElevation:Ke,_terrainPromise:tr,_terrainReady:Te,_terrainRequest:Vn,_terrainTiles:ot,_terrainZoom:ye,_tileZoom:cr,_tooltip:Re,_type:Xt,_visibleMeshes:jr,_wantedRasterTiles:sr,_zoomLevel:mi,_zoomTransitions:he,_zoomView:qe,camera:ee,container:Ae,control:_t,eventMap:ao,events:zr,group:cs,header:U,highlightedFeature:at,hoveredFeature:ke,kind:z,location:D,model:$e,modelUrl:We,raycaster:ne,ready:re,renderer:w,root:M,scene:oe,terrainSource:so,url:ae,walker:ps};L();var i0=["_layers","_sceneOrigin","_size","_zoomLevel","_zoomTransitions","_zoomView","_cursor","_roofRaster"];var n0=["_layers","_sceneOrigin","_size","_zoomLevel","_cursor"];async function a0(e,t){try{await e.device.queue.onSubmittedWorkDone(),e.depthTexture?.destroy(),e.colorTexture?.destroy(),e.roofFallbackTexture?.texture?.destroy(),e.uniformBuffer?.destroy(),e.sunlight?.texture?.destroy(),e.sunlight?.buffer?.destroy(),e.sunlight?.lights?.destroy()}catch(r){t.fire("error",{error:r})}e.device.destroy()}function s0(e,t){if(K.get(e)&&W(e,K.get(e).texture.texture),K.set(e,null),he.get(e)){let i;for(i of he.get(e).keys())i.play()}he.set(e,null),qe.set(e,null),se.delete(t),t.getContainer().classList.remove("leaflet-camera-zoom");let r=w.get(e);r.canvas.remove(),a0(r,e),te.delete(t);let o;for(o of n0)Ks[o].delete(e)}function po(e,t){Le.set(e,Promise.withResolvers()),Ae.get(e)&&(li(e),d.DomEvent.off(Ae.get(e),Ar.get(e),e),Ae.set(e,null));let r,o,i,n;for(r of Y.get(e).values())ro(e,r);Y.get(e).clear(),Re.get(e)?.remove(),Re.set(e,null),(ae.get(e)||X.get(e))&&ls(e,!1);let a=R.get(e);if(a){if(q(M.get(e),null),F.get(a).delete(e),a===e)if(t.off("move zoom rotate pitch resize viewreset layeradd layerremove",Ki,e),t.off("zoomstart",Qi,e),t.off("zoomanim",en,e),t.off("zoomend",tn,e),$n(e),F.get(e).size){let s=F.get(e).values().next().value;for(o of i0)n=Ks[o],n.set(s,n.get(e)),n.delete(e);for(i of F.get(s))R.set(i,s);te.set(t,s),t.on("move zoom rotate pitch resize viewreset layeradd layerremove",Ki,s),t.on("zoomstart",Qi,s),t.on("zoomanim",en,s),t.on("zoomend",tn,s),E(s)}else s0(e,t);else E(a);R.set(e,null),w.set(e,null),oe.set(e,null),ee.set(e,null)}}function m0(e,t){o0(e),pe.set(e,null),po(e,t)}L();function Qs(e,t){z.set(e,"raster"),t={ariaLabel:"PMTiles raster",maxZoom:18,opacity:1,zIndex:0,...t},d.Util.setOptions(e,t),M.set(e,Oe()),Y.set(e,new Map),I.set(e,new Map),fe.set(e,0),Le.set(e,Promise.withResolvers()),ae.set(e,new URL(t.url,document.baseURI).href),Cr.set(e,new Map),re.set(e,Promise.resolve(e.options.archive||e).then(r0.bind(null,e)).catch(Js.bind(null,e)))}var f0=Object.freeze([]);function p0(e){z.get(e)==="raster"&&ui(e,null)}function c0(e,t){let r=Be.get(t);if(r?.layer===e){Be.delete(t),r.terrainController.abort(),r.terrainCache.clear(),t.fire("terrainchange"),po(e,t);return}di.get(e)?.abort(),Dr.set(e,!1),Te.set(e,!1),t.eachLayer(p0);let o,i,n,a;for(o of I.get(e).keys())So(e,o);me.get(t)===e&&me.delete(t);for(i of Object.values(t._layers))pi(i,null),ni(i);t.fire("terrainchange"),ot.get(e).clear(),Ke.set(e,0),tr.set(e,null),ge.get(e)&&ge.get(e).pipelineCache.clear(),ge.set(e,null),Ie.get(e)&&W(e,Ie.get(e).texture),Ie.set(e,null);for(n of It.get(e)?.values()||f0)for(a of Object.values(n))W(e,a.buffer);It.set(e,null),ct.set(e,null),Ge(e,mo.get(e)),mo.set(e,null),po(e,t)}function l0(e,t){if(t.getTile!==void 0&&typeof t.getTile!="function")throw new Error("Streamed terrain requires a getTile function");let r=t.url,o={...t};delete o.url,At(e,o),so.set(e,r),ot.set(e,new Map),I.set(e,new Map),Te.set(e,!1),t.getTile&&Gs.set(e,!0),z.set(e,"terrain")}L();var em=Object.freeze({});var rr=[[.86,.86,.88],[.1,.1,.12],[.5,.53,.57],[.65,.1,.08],[.12,.25,.55],[.85,.7,.15]];function u0(e){let t=rr[e%rr.length];return[[C(-.045,.045,-.85,-.25),.02,.62,Qt],[C(-.045,.045,.25,.85),.02,.62,Qt],[C(-.06,.06,-.5,.5),.4,.65,t],[C(-.32,.32,-.58,-.5),.95,1.02,Qt],[C(-.1,.1,.15,.4),.85,.92,Qt],[C(-.18,.18,-.12,.28),1,1.5,t],[C(-.11,.11,-.22,0),1.5,1.72,yt],[C(-.13,.13,-.23,.01),1.72,1.8,t],[C(-.25,-.15,-.5,-.05),1,1.25,yt],[C(.15,.25,-.5,-.05),1,1.25,yt],[C(-.2,-.08,0,.32),.3,1,Kt],[C(.08,.2,-.25,.07),.3,1,Kt]]}function d0(e){let t=Ls.body.slice();return t[1]=[t[1][0],t[1][1],t[1][2],rr[e%rr.length]],t.push([C(-.16,-.02,-.07,.07),.08,.9,Kt],[C(.02,.16,-.07,.07),.08,.9,Kt],[C(-.3,-.2,-.05,.05),.76,1.42,yt],[C(.2,.3,-.05,.05),.76,1.42,yt]),t}function xi(e){let t=e?.route_color;if(!/^[\da-f]{6}$/i.test(t))return[.1,.55,.65];let r=Number.parseInt(t,16);return[(r>>16&255)/255,(r>>8&255)/255,(r&255)/255]}var co=[.12,.15,.18];var Gt=[.92,.93,.92];var vi=[.05,.05,.05];var tm=[1.9,1.85,1.7];var rm=[1.7,.06,.05];function wi(e,t,r){let o=e-t/2,i=e+t/2;return[[C(-1.25,1.25,o,i),.45,1.25,r],[C(-1.2,1.2,o+.15,i-.15),1.25,2.65,co],[C(-1.25,1.25,o,i),2.65,3.1,Gt],[C(-1.15,-.85,o+1,o+2),0,.7,vi],[C(.85,1.15,i-2,i-1),0,.7,vi],[C(-.9,.9,o-.03,o),.8,1.05,tm],[C(-.9,.9,i,i+.03),.8,1.05,rm]]}function h0(e,t){return wi(0,12,xi(t))}function g0(e,t){let r=xi(t),o=[],i;for(i=0;i<5;i++)o.push(...wi((i-2)*6.5,6,r));return o}function y0(e,t){let r=xi(t),o=[],i;for(i=0;i<5;i++)o.push(...wi((i-2)*15,14,r));return o}function or(e,t,r,o,...i){return[[C(e,t,r,o),...i],[C(-t,-e,r,o),...i]]}function x0(e){let t=rr[e%rr.length];return[...or(.7,.92,-1.68,-1.02,0,.64,vi),...or(.7,.92,1.02,1.68,0,.64,vi),[[[-.9,-1.95],[-.72,-2.25],[.72,-2.25],[.9,-1.95],[.9,2.05],[.76,2.25],[-.76,2.25],[-.9,2.05]],.28,.82,t],[C(-.84,.84,-.75,1.6),.82,1.38,co,C(-.7,.7,-.05,1.3)],[C(-.71,.71,-.06,1.31),1.38,1.46,t],...or(.38,.8,-2.3,-2.16,.56,.76,tm),[C(-.78,.78,2.16,2.3),.6,.76,rm]]}var Wf=[[-5.5,30],[5.5,30],[5.5,-20],[4,-26],[1.5,-30],[-1.5,-30],[-4,-26],[-5.5,-20]];function v0(){let e=[],t;for(t=0;t<12;t++)e.push(...or(.5,3.8,-12+t*3,-11.3+t*3,3.9,4.4,[.62,.1,.1]));return e}function w0(){return[[Wf,0,.8,[.1,.16,.26]],[Wf,.8,1.4,Gt],[C(-5,5,-18,26),1.4,3.7,co,C(-4.6,4.6,-17.4,25.6)],...or(4.64,4.74,-17,25,3.25,3.45,[1.6,1.25,.8]),[C(-4.8,4.8,-17.8,25.8),3.7,3.9,Gt],...v0(),...or(4.65,4.8,-13.6,25.8,3.9,4.8,Gt),[C(-4.8,4.8,25.65,25.8),3.9,4.8,Gt],[C(-2.2,2.2,-17.6,-14),3.9,4.7,Gt],[C(-2.2,2.2,-17.6,-14),4.7,5.5,co],[C(-2.5,2.5,-18,-13.6),5.5,5.7,Gt],[C(-2.45,-2.2,-16.2,-15.8),5,5.3,[2,.15,.1]],[C(2.2,2.45,-16.2,-15.8),5,5.3,[.1,2,.4]],[C(-.1,.1,-15.9,-15.7),5.7,6.6,Gt],[C(-.15,.15,-15.95,-15.65),6.6,6.8,[2,2,1.9]]]}var L0={bicycle:{side:.4,model:u0},pedestrian:{side:.3,model:d0},bus:{side:1.5,model:h0},tram:{side:0,model:g0},metro:{side:0,model:y0},car:{side:1.8,model:x0,lights:[{position:[0,1.2,-6],radius:10,color:[1,.94,.82],flux:800}]},boat:{side:0,model:w0,lights:[{position:[0,8,4],radius:30,color:[1,.8,.55],flux:2e4}]}};var b0=" struct Params{seconds:f32,side:f32,vertices:u32,total:u32}struct Vehicle{start:u32,count:u32,base:f32,speed:f32}@group(0)@binding(0)var<uniform> params:Params;@group(0)@binding(1)var<storage,read> model:array<f32>;@group(0)@binding(2)var<storage,read> points:array<vec4f>;@group(0)@binding(3)var<storage,read> vehicles:array<Vehicle>;@group(0)@binding(4)var<storage,read_write> position:array<f32>;@group(0)@binding(5)var<storage,read_write> normal:array<f32>;var<workgroup> center:vec3f;var<workgroup> heading:vec2f;@compute@workgroup_size(64)fn main(@builtin(workgroup_id)group:vec3u,@builtin(local_invocation_index)thread:u32){let vehicleIndex = group.x;if(thread == 0u){let vehicle = vehicles[vehicleIndex];let last = vehicle.start + vehicle.count - 1u;let length = points[last].w;var s = vehicle.base + params.seconds * vehicle.speed;s -= length * floor(s / length);var i = vehicle.start + 1u;var end = last;while(i < end){let middle = i +(end - i)/ 2u;if(points[middle].w < s){i = middle + 1u;}else{end = middle;}}let a = points[i - 1u];let b = points[i];let d = select(b.w - a.w,1.0,b.w == a.w);let t =(s - a.w)/ d;heading =(b.xy - a.xy)/ d;center = vec3f(a.x +(b.x - a.x)* t - heading.y * params.side,a.z +(b.z - a.z)* t,a.y +(b.y - a.y)* t + heading.x * params.side);}workgroupBarrier();for(var vertex = thread;vertex < params.vertices;vertex += 64u){let k = vertex * 3u;let n = params.vertices * 3u + k;let o =(vehicleIndex * params.vertices + vertex)* 3u;position[o]= center.x - model[k]* heading.y - model[k + 2u]* heading.x;position[o + 1u]= center.y + model[k + 1u];position[o + 2u]= center.z + model[k]* heading.x - model[k + 2u]* heading.y;normal[o]= -model[n]* heading.y - model[n + 2u]* heading.x;normal[o + 1u]= model[n + 1u];normal[o + 2u]= model[n]* heading.x - model[n + 2u]* heading.y;}}";function M0({properties:e}){let t=document.createElement("div");t.style.whiteSpace="pre-line";let r=e.name?String(e.name):"";return e.departure&&(r+=`${r?`
|
|
3
5
|
`:""}Departure ${e.departure} ${e.timetable.timeZone}`),e.description&&(r+=`${r?`
|
|
4
|
-
`:""}${e.description}`),t.textContent=r,t}function Ls(e){e.layer._map.off("simulationtimechange layerremove",e.update).on("simulationtimechange layerremove",e.update),e.layer._map.off("terrainchange",e.terrain).on("terrainchange",e.terrain),$o(e.layer,e.status),e.update()}function hy(e){dt.set(e.layer,e),e.ready&&Ls(e)}function $t(e,t){t&&(Je.get(e.layer)?.mesh===t&&(Mt(e.layer,null),be.set(e.layer,null),bt(e.layer,null)),_e(e.layer,t))}function Bs(e){e.gpu?.params?.destroy(),e.gpu?.template?.destroy(),e.gpu?.points?.destroy(),e.gpu?.vehicles?.destroy(),e.gpu=null}function gy(e){e.request?.abort(),cancelAnimationFrame(e.frame),e.frame=void 0,e.layer._map.off("simulationtimechange layerremove",e.update).off("terrainchange",e.terrain),$t(e,e.mesh),$t(e,e.route),e.mesh=e.route=null,dt.delete(e.layer),Bs(e),e.lanes.length=0,e.trips.length=0,e.tripsKey=e.loaded=null}function yy(e){e.ready=!0,e.layer._map&&Ls(e)}function Ts(e){let t=Ko.get(e.layer._map),r=t?t.live:!0;return{live:r,time:r?new Date:t.time}}function xy(e,t,r=8){let o=Math.round(e*t/3600/r),i=Array.from({length:o}),n;for(n=0;n<i.length;n++)i[n]=(n+.5)*e/o;return i}var ri=new Map;function ff(e){let t=e.split(":");return Number(t[0])*60+Number(t[1])}function vy(e,t){return e-t}function wy(e,{timeZone:t,duration:r,services:o}){let i=e instanceof Date?e:new Date(e);if(!Number.isFinite(i.getTime()))throw new Error("Invalid date");let n=ri.get(t);n||(n=new Intl.DateTimeFormat("en-GB",{timeZone:t,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hourCycle:"h23"}),ri.size>=32&&ri.delete(ri.keys().next().value),ri.set(t,n));let a={},s,m,f,p,c,l,u;for(s of n.formatToParts(i))s.type!=="literal"&&(a[s.type]=Number(s.value));let d=a.hour*60+a.minute+(a.second+i.getUTCMilliseconds()/1e3)/60,y=((Math.floor(Date.UTC(a.year,a.month-1,a.day)/864e5)+4)%7+7)%7,g=[];for({from:m,to:f,every:p=1/0,months:c,weekdays:l}of o)if(!(c?.includes(a.month)===!1||l?.includes(y)===!1))for(u=ff(m);u<=ff(f);u+=p)g.push(u);g.sort(vy);let x=[];for(u of g)d>=u&&d<u+r&&x.push({id:`${a.year}-${a.month}-${a.day}-${u}`,departure:`${String(Math.floor(u/60)).padStart(2,"0")}:${String(u%60).padStart(2,"0")}`,progress:(d-u)/r});return x}function My(e,t,r){let o=[],i,n,a,s,m,f,p,c;for(i=0;i<t.length;i++)if(n=t[i],{timetable:a,flow:s=0}=n.properties,!!n.length)if(a)for(m of wy(e,a))o.push({id:`${i}-${m.id}`,lane:n,distance:m.progress*n.length,speed:n.length/(a.duration*60),properties:{...n.properties,departure:m.departure}});else for(f=e/1e3*r,p=n.offsets||=xy(n.length,s,r),c=0;c<p.length;c++)o.push({id:`${i}-${c}`,lane:n,distance:(p[c]+f)%n.length,speed:r,properties:n.properties});return o}function Ps(e,t){e.error=t,e.status.textContent=`${e.vehicle}: Error: ${t.message}`,e.status.setAttribute("role","alert"),console.error("Traffic layer",t)}var by=Object.freeze({unlit:!0});function Ly(e,t,r,o,i,n,a,s,m,f,p,c,l,u){let d=o[0]+n*f,y=o[1]+a*f,g=o[2]+(i[2]-o[2])*f+.4,x=o[0]+n*p,w=o[1]+a*p,C=o[2]+(i[2]-o[2])*p+.4,B;for(B=0;B<6;B++)B===0||B===3?e.push(d-s,g,y-m):B===1?e.push(d+s,g,y+m):B===5?e.push(x-s,C,w-m):e.push(x+s,C,w+m),t.push(0,1,0),r.push(c,l,u)}function By(e,t,r,o,i,n,a,s,m){let f=o[n-1],p=o[n],c=p[0]-f[0],l=p[1]-f[1],u=i[n]-i[n-1];if(!u)return;let d=-l/u*2.5,y=c/u*2.5,g,x,w;for(g=Math.floor(i[n-1]/30)*30;g<i[n];g+=30)x=Math.max(0,(g-i[n-1])/u),w=Math.min(1,(g+18-i[n-1])/u),!(w<=x)&&Ly(e,t,r,f,p,c,l,d,y,x,w,a,s,m)}function Ty(e){let t=[],r=[],o=[],i,n,a,s,m,f,p,c,l;for({points:i,lengths:n,properties:a}of e)for(s=a?.route_color,m=/^[\da-f]{6}$/i.test(s)?Number.parseInt(s,16):null,f=m===null?.08:(m>>16&255)/255,p=m===null?.7:(m>>8&255)/255,c=m===null?.85:(m&255)/255,l=1;l<i.length;l++)By(t,r,o,i,n,l,f,p,c);return{position:t,normal:r,color:o}}function Cs(e,t,r,o,i=0){let n=er(e.layer,t,o,i);return n.extras.featureFaces=r,n}function Py(e){e.route=Cs(e,Ty(e.lanes),[],by)}function Ss(e){let t=20,r=5,o,i,n,a,s;for(o=0;o<e.template.position.length;o+=3)t=Math.max(t,Math.hypot(e.template.position[o],e.template.position[o+2])+Math.abs(e.side)),r=Math.max(r,e.template.position[o+1]);let m=[];for(i of e.lanes)for([n,a,s]of i.points)m.push(n-t,s,a-t,n+t,s+r,a+t);let f={attributes:{position:{data:m}}};Be(f),e.mesh.geometry.bounds=f.bounds}function Cy(e){let{trips:t,model:r,vertices:o}=e;if($t(e,e.mesh),e.mesh=null,!t.length)return;let i=[],n=[],a,s,m;for(a=0;a<t.length;a++){s=t[a];for(m of ti(r(a,s.properties)).color)i.push(m);n.push({id:s.id,properties:s.properties,faceStart:a*o/3,faceEnd:(a+1)*o/3,vertexStart:a*o,vertexEnd:(a+1)*o})}let f=i.length/3;e.mesh=Cs(e,{position:new Array(i.length).fill(0),normal:new Array(i.length).fill(0),color:i},n,vs,GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC),e.mesh.geometry.drawRange.count=f,e.mesh.extras.dynamicLights=!0,Ss(e)}function Wi(e,t){let r=e.createBuffer({size:Math.max(16,t.byteLength),usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});return e.queue.writeBuffer(r,0,t),r}function Sy(e,t){let r,o,i,n=0;for(r of e.lanes)n+=r.points.length;let a=new Float32Array(n*4),s=0;for(r of e.lanes)for(r.start=s/4,o=0;o<r.points.length;o++)i=r.points[o],a[s++]=i[0],a[s++]=i[1],a[s++]=i[2],a[s++]=r.lengths[o];e.gpu.points?.destroy(),e.gpu.points=Wi(t,a),e.lanesDirty=!1}function Ey(e){let{device:t}=v.get(e.layer);if(e.gpu?.device!==t){Bs(e);let c=new Float32Array(e.template.position.length+e.template.normal.length);c.set(e.template.position),c.set(e.template.normal,e.template.position.length),e.gpu={device:t,pipeline:t.createComputePipeline({layout:"auto",compute:{module:t.createShaderModule({code:e.shader}),entryPoint:"main"}}),params:t.createBuffer({size:16,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),template:Wi(t,c)},e.lanesDirty=!0}let r,o,i;e.lanesDirty&&Sy(e,t);let n=new Float32Array(e.trips.length*4),a=new Uint32Array(n.buffer);for(r=0;r<e.trips.length;r++)o=e.trips[r],a[r*4]=o.lane.start,a[r*4+1]=o.lane.points.length,n[r*4+2]=o.distance,n[r*4+3]=o.speed,e.mesh.extras.featureFaces[r].properties=o.properties;e.gpu.vehicles?.size>=n.byteLength?t.queue.writeBuffer(e.gpu.vehicles,0,n):(e.gpu.vehicles?.destroy(),e.gpu.vehicles=Wi(t,n));let{position:s,normal:m}=e.mesh.geometry.attributes,f=[],p;for(i=0;i<6;i++)p=i===0?e.gpu.params:i===1?e.gpu.template:i===2?e.gpu.points:i===3?e.gpu.vehicles:i===4?s.buffer:m.buffer,f.push({binding:i,resource:{buffer:p}});e.gpu.bindGroup=t.createBindGroup({layout:e.gpu.pipeline.getBindGroupLayout(0),entries:f})}function ky(e,t){return t?e.loaded?`${e.trips.length} ${e.vehicle==="boat"?"boats":e.vehicle}`:`${e.vehicle}: loading\u2026`:`${e.vehicle}: select a valid simulation date`}function _y(e,t,r,o){let i;try{o?e.trips=My(t,e.lanes,e.velocity):e.trips.length=0,i=ky(e,o)}catch(f){Ps(e,f);return}e.rebasedAt=r,e.nextCheck=r+1e3;let n="",a;for(a of e.trips)n+=`${n?",":""}${a.id}`;let s=e.outline&&!e.route&&e.lanes.length,m=n!==e.tripsKey||!!s;return s&&Py(e),n!==e.tripsKey&&(Cy(e),e.tripsKey=n),e.mesh&&Ey(e),e.error||(e.status.textContent!==i&&(e.status.textContent=i),e.status.removeAttribute("role")),m}function Iy(e,t){let{device:r}=e.gpu;e.paramFloats[0]=e.elapsed=t,e.paramFloats[1]=e.side,e.paramInts[2]=e.vertices,e.paramInts[3]=e.trips.length*e.vertices,r.queue.writeBuffer(e.gpu.params,0,e.params);let o=r.createCommandEncoder(),i=o.beginComputePass();i.setPipeline(e.gpu.pipeline),i.setBindGroup(0,e.gpu.bindGroup),i.dispatchWorkgroups(e.trips.length),i.end(),r.queue.submit([o.finish()]),e.stale=!0}function zy(e){e.litAt=performance.now();let t=[],r=e.position||={},o,i,n,a,s,m,f,p,c,l;for(o of e.trips){({x:i,y:n,z:a,dx:s,dz:m}=vo(e,o,r));for(l of e.lights)[f,p,c]=l.position,t.push({...l,position:[i-f*m-c*s,n+p,a+f*s-c*m]})}e.mesh.extras.lights=t}function Ay(e,t,r){e.mesh&&(Iy(e,(t-e.rebasedAt)/1e3),e.lights&&(!r||!(performance.now()-e.litAt<100))&&zy(e))}function Oy(e){if(e.frame=void 0,!e.ready||!e.layer._map)return;if(!v.get(e.layer)){e.frame=requestAnimationFrame(e.tick);return}e.mesh&&!(e.mesh.geometry.attributes.position.buffer.usage&GPUBufferUsage.STORAGE)&&(e.tripsKey=null,e.nextCheck=-1/0);let{live:t,time:r}=Ts(e),o=r?.getTime(),i=Number.isFinite(o),n=!1;(!t||!i||!(o>=e.rebasedAt&&o<e.nextCheck))&&(n=_y(e,r,o,i),n===void 0)||(Ay(e,o,t),(e.mesh||n)&&_(e.layer),t&&i&&(e.frame=requestAnimationFrame(e.tick)))}async function Dy(e,t,r){let o=new URL(e.url,document.baseURI).href;if(/\.m?js(?:[?#]|$)/i.test(e.url))return(await import(o)).default(t,e.layer,r);if(!e.file){let i=await fetch(o,{signal:r});if(!i.ok)throw new Error(`HTTP ${i.status}`);e.file=await i.json()}return e.file}var Ry=Object.freeze([]);function Gy({features:e=Ry}){let t=[],r,o,i,n,a,s,m,f;for({geometry:r,properties:o}of e)if(!(r?.type!=="LineString"&&r?.type!=="MultiLineString"))for(i=r.type==="MultiLineString"?r.coordinates:null,f=0;f<(i?i.length:1);f++){n=i?i[f]:r.coordinates,a=[];for([s,m]of n)a.push([m,s]);t.push({latlngs:a,properties:o??{},elevation:o?.elevation})}return t}X();b();function Uy(e){let t=ae.get(e);return ve.get(t)&&t}function Es(e){let{layer:t,lanes:r}=e,o=Uy(t._map),i=L.get(t).position[1],n,a,s;for(n of r)for(a=0;a<n.points.length;a++)s=o&&(n.elevation??ct(t._map,n.latlngs[a])),n.points[a][2]=Number.isFinite(s)&&Number.isFinite(i)?s-i:0;e.lanesDirty=!0,e.nextCheck=-1/0}function Fy(e){let{layer:t,lanes:r}=e,o=t._map.options.crs,i=o.project(O.get(t)),n=Math.cos(O.get(t).lat*T),a,s,m,f,p;for(a of r){a.points=[];for([s,m]of a.latlngs)f=o.project(new h.LatLng(s,m)),a.points.push([(f.x-i.x)*n,-(f.y-i.y)*n,0]);for(a.lengths=[0],p=1;p<a.points.length;p++)a.lengths.push(a.lengths[p-1]+Math.hypot(a.points[p][0]-a.points[p-1][0],a.points[p][1]-a.points[p-1][1]));a.length=a.lengths.at(-1)}Es(e),$t(e,e.route),e.route=null,e.tripsKey=null}function Ny(e,t,r){if(!(t.aborted||!e.layer._map)){if(e.error=null,r===e.loaded){e.nextCheck=-1/0,e.frame||e.tick();return}e.loaded=r,e.lanes=Gy(r),Fy(e),e.frame||e.tick()}}function jy(e,t,r){!t.aborted&&r.name!=="AbortError"&&Ps(e,r)}function Wy(e){let{time:t}=Ts(e);if(!Number.isFinite(t?.getTime()))return;e.request?.abort();let{signal:r}=e.request=new AbortController;Dy(e,t,r).then(Ny.bind(null,e,r),jy.bind(null,e,r))}function Zy(e,t){t?.layer&&!Pt.get(t.layer)?.time||(cancelAnimationFrame(e.frame),Wy(e),e.tick())}function $y(e){e.lanes.length&&(Es(e),$t(e,e.route),e.route=null,e.mesh&&Ss(e),e.frame||e.tick())}function Vy(e,{url:t,vehicle:r="car",side:o,outline:i,speed:n=8,...a}=vs){let{model:s,lights:m,side:f}=ly[r];o??=f,Lt(e,{tooltip:dy,nightLight:!!m,...a});let p=h.DomUtil.create("small","traffic-status");p.style.cssText="flex:0 1 auto;padding:1px 5px;border-radius:3px;background:#00000008;color:#555;",p.title=r,p.textContent=`${r}: loading\u2026`;let c=ti(s(0)),l=c.position.length,u=l/3,d=new ArrayBuffer(16),y=new Float32Array(d),g=new Uint32Array(d),x={layer:e,url:t,model:s,lights:m,side:o,outline:i,velocity:n,vehicle:r,status:p,template:c,stride:l,vertices:u,params:d,paramFloats:y,paramInts:g,ready:!1,frame:void 0,request:void 0,lanes:[],tripsKey:void 0,mesh:void 0,route:void 0,litAt:-1/0,trips:[],rebasedAt:0,nextCheck:-1/0,elapsed:0,gpu:null,lanesDirty:!0,stale:!1,loaded:void 0,file:void 0};x.shader=uy,x.tick=Oy.bind(null,x),x.update=Zy.bind(null,x),x.terrain=$y.bind(null,x),dt.set(e,x),e.on("ready",yy.bind(null,x)),e.on("add",hy.bind(null,x)),e.on("remove",gy.bind(null,x))}b();b();b();function qy(){this.keys.clear()}var Zi={KeyW:[1,0],ArrowUp:[1,0],KeyS:[-1,0],ArrowDown:[-1,0],KeyD:[0,1],ArrowRight:[0,1],KeyA:[0,-1],ArrowLeft:[0,-1]};b();va();or();H();W();function Hy(e){let t=this.layer._map;if(e.type==="pointerdown"){if(e.button!==0||e.target.closest(".leaflet-control"))return;this.dragX=e.clientX,this.dragY=e.clientY,this.dragging=!0,t.getContainer().setPointerCapture(e.pointerId)}else this.dragging&&e.type==="pointermove"?(ze(t,Math.max(20,Math.min(85,k(t)-(e.clientY-this.dragY)*.2)),S(t)-(e.clientX-this.dragX)*.25),this.dragX=e.clientX,this.dragY=e.clientY):this.dragging=!1}var $i=[["body",0,0,0],["leg",-.09,.9,1],["leg",.09,.9,-1],["arm",-.25,1.42,-1],["arm",.25,1.42,1]];X();function St(e){let{layer:t,state:r}=this,o=t._map,i=o.options.crs,n=O.get(t),a=L.get(t),s=i.project(n),m=Math.cos(n.lat*T),f=i.project(r.latlng),p=ct(o,r.latlng)||0;return e[0]=(f.x-s.x)*m,e[1]=p+(r.height??0)-a.position[1],e[2]=-(f.y-s.y)*m,e}function ks(){let[e,t,r]=St.call(this,this.local),o=-this.state.heading,i=Math.cos(o),n=Math.sin(o),a,s,m,f,p;for(a=0;a<$i.length;a++)[,s,m,f]=$i[a],p=this.meshes[a],p.position[0]=e+s*i,p.position[1]=t+m,p.position[2]=r-s*n,p.rotation[0]=f*this.swing*Math.sin(this.state.phase),p.rotation[1]=o;_(this.layer)}function Yy(){this.meshes&&ks.call(this)}function _s(){let e=this.layer._map;cancelAnimationFrame(this.frame),this.keys.clear(),this.dragging=!1,this.state.height=this.verticalSpeed=0,h.DomEvent.off(document,"keydown keyup",this.onKey),h.DomEvent.off(window,"blur",this.onBlur);let t,r;if(this.meshes)for(t of this.meshes)_e(this.layer,t);if(this.meshes=null,this.button.setAttribute("aria-pressed","false"),this.button.style.background="#fff",this.hint.style.display="none",!(!e||!this.saved)){h.DomEvent.off(e.getContainer(),"pointerdown pointermove pointerup pointercancel",this.onPointer),e.off("terrainchange",this.onTerrain),e.options.scrollWheelZoom=this.saved.scrollWheelZoom;for(r of this.saved.handlers)e[r].enable();e.setView(this.state.latlng,this.saved.zoom,{animate:!1}),Ir(e,this.saved.pitch),this.saved=null}}function Xy(e){if(e.type==="keyup"&&e.code==="Space"&&this.keys.delete("Space"),!(e.target.closest?.("input:not([type=checkbox], [type=radio]), select, textarea, [contenteditable]")||e.ctrlKey||e.altKey||e.metaKey)){if(e.type==="keydown"&&e.code==="Escape"){this.stop();return}!Zi[e.code]&&e.code!=="Space"||(e.preventDefault(),e.type==="keydown"?this.keys.add(e.code):this.keys.delete(e.code))}}X();b();var Ky=["dragging","keyboard","doubleClickZoom","boxZoom"];H();W();va();function Jy(e){return this.keys.has("Space")?(this.verticalSpeed=6,this.state.height+=this.verticalSpeed*e,!0):!this.verticalSpeed&&!this.state.height?!1:(this.state.height=Math.max(0,this.state.height+this.verticalSpeed*e-9.81*e*e/2),this.verticalSpeed=this.state.height>0?this.verticalSpeed-9.81*e:0,!0)}b();var pf=new WeakMap;function Qy(e,t,r){let o,i,n;for(o=Math.floor(Math.min(t[0],t[3],t[6])/8);o<=Math.floor(Math.max(t[0],t[3],t[6])/8);o++)for(i=Math.floor(Math.min(t[2],t[5],t[8])/8);i<=Math.floor(Math.max(t[2],t[5],t[8])/8);i++)n=o+","+i,e.has(n)||e.set(n,[]),e.get(n).push(r)}function Is(e){let t=pf.get(e.geometry);if(t)return t;let r=e.worldMatrix,{position:o,index:i,normal:n,uv:a,instanceOffset:s}=e.geometry.attributes,m=Zn(o,i),f=m*(s?.count??1),p=[],c=[],l=new Map,u=[0,0,0],d=[0,0,0],y=[0,0,0],g=[],x,w,C,B,P,D,te,U,N,K,pe,ye,Qe,Le,ft,Ge=-1/0;for(x=0;x<f;x+=3)w=i?i.data[x%m]:x%m,!(e.program.nightLight&&a&&a.data[w*2]<=2)&&($n(e,x,u,d,y),g[0]=r[0]*u[0]+r[4]*u[1]+r[8]*u[2]+r[12],g[1]=r[1]*u[0]+r[5]*u[1]+r[9]*u[2]+r[13],g[2]=r[2]*u[0]+r[6]*u[1]+r[10]*u[2]+r[14],g[3]=r[0]*d[0]+r[4]*d[1]+r[8]*d[2]+r[12],g[4]=r[1]*d[0]+r[5]*d[1]+r[9]*d[2]+r[13],g[5]=r[2]*d[0]+r[6]*d[1]+r[10]*d[2]+r[14],g[6]=r[0]*y[0]+r[4]*y[1]+r[8]*y[2]+r[12],g[7]=r[1]*y[0]+r[5]*y[1]+r[9]*y[2]+r[13],g[8]=r[2]*y[0]+r[6]*y[1]+r[10]*y[2]+r[14],B=g[3]-g[0],P=g[4]-g[1],D=g[5]-g[2],te=g[6]-g[0],U=g[7]-g[1],N=g[8]-g[2],K=P*N-D*U,pe=B*U-P*te,ye=D*te-B*N,Qe=Math.hypot(K,ye,pe),!(!Qe||Math.abs(ye)>.9*Qe)&&(n&&(C=w*3,(r[0]*n.data[C]+r[4]*n.data[C+1]+r[8]*n.data[C+2])*K+(r[2]*n.data[C]+r[6]*n.data[C+1]+r[10]*n.data[C+2])*pe<0&&(K=-K,pe=-pe)),Le=Math.hypot(K,pe),ft=c.length/2,p.push(...g),Ge=Math.max(Ge,g[0],g[3],g[6]),c.push(K/Le,pe/Le),Qy(l,g,ft)));return t={tri:Float32Array.from(p),nrm:Float32Array.from(c),cells:l,maxX:Ge,origin:[r[12],r[13],r[14]]},pf.set(e.geometry,t),t}function zs(e,t,r,o,i,n,a){let s=t*9,m=e[s+3]-e[s],f=e[s+4]-e[s+1],p=e[s+5]-e[s+2],c=e[s+6]-e[s],l=e[s+7]-e[s+1],u=e[s+8]-e[s+2],d=-a*l,y=a*c-n*u,g=n*l,x=m*d+f*y+p*g;if(Math.abs(x)<1e-9)return-1;let w=r-e[s],C=o-e[s+1],B=i-e[s+2],P=(w*d+C*y+B*g)/x;if(P<0||P>1)return-1;let D=C*p-B*f,te=B*m-w*p,U=w*f-C*m,N=(n*D+a*U)/x;return N<0||P+N>1?-1:(c*D+l*te+u*U)/x}function ex(e,t,r,o,i,n,a,s){let m,f,p,c;for(m=Math.floor(t/8);m<=a;m++)if(f=e.cells.get(`${m},${s}`),!!f)for(p of f)i.has(p)||(i.add(p),c=zs(e.tri,p,t,r,o,1,0),c>1e-4&&n.push(c))}function tx(e){let t,r,o;for(t=1;t<e.length;t++){for(o=e[t],r=t-1;r>=0&&e[r]>o;)e[r+1]=e[r--];e[r+1]=o}let i=0,n=-1/0;for(o of e)o-n>1e-4&&i++,n=o;return i}function cf(e,t,r,o,i,n){let a=e.geometry;if(!e.visible||!a?.attributes?.position?.data||e.program?.depthTest===!1)return!1;a.bounds||Be(a);let s=a.bounds,m=e.worldMatrix,f=s.center,p=m[0]*f[0]+m[4]*f[1]+m[8]*f[2]+m[12],c=m[1]*f[0]+m[5]*f[1]+m[9]*f[2]+m[13],l=m[2]*f[0]+m[6]*f[1]+m[10]*f[2]+m[14],u=s.radius*Math.max(Math.hypot(m[0],m[1],m[2]),Math.hypot(m[4],m[5],m[6]),Math.hypot(m[8],m[9],m[10]));if(Math.hypot(p-t,c-r,l-o)>u)return!1;let d=Is(e),y=Math.floor(d.maxX/8);if(t>=d.maxX)return!1;let g=Math.floor(o/8),x=n;return x.length=0,i.clear(),ex(d,t,r,o,i,x,y,g),tx(x)%2===1}function rx(e,t,r,o,i,n){o<1e-6?(e.normal[0]=-i,e.normal[1]=-n):(e.normal[0]=t/o,e.normal[1]=r/o)}function As(e,t,r,o,i,n,a,s){let m=dt.get(e);if(!m?.mesh||!m.trips.length)return!1;let f=m.collisionBounds;if(!f){f=m.collisionBounds={radius:0,minY:1/0,maxY:-1/0};let K,pe,ye,Qe;for(K=0;K<m.template.position.length;K+=3)pe=m.template.position[K],ye=m.template.position[K+1],Qe=m.template.position[K+2],f.radius=Math.max(f.radius,Math.hypot(pe,Qe)),f.minY=Math.min(f.minY,ye),f.maxY=Math.max(f.maxY,ye)}let p=L.get(e),c=m.position||={},l=Math.max(p.scale[0],p.scale[1],p.scale[2]),u=f.radius*l+.35,d,y,g,x,w,C,B,P,D,te,U,N;for(d of m.trips)if({x:U,y:D,z:N}=vo(m,d,c),D=p.position[1]+(D+f.minY)*p.scale[1],te=p.position[1]+(c.y+f.maxY)*p.scale[1],!(D>r+1.7*l||te<r+.2*l)&&(U=p.position[0]+U*p.scale[0],N=p.position[2]+N*p.scale[2],y=(U-t)*i+(N-o)*n,g=Math.max(0,Math.min(a,y)),x=t+g*i-U,w=o+g*n-N,C=x*x+w*w,!(C>=u*u))){if(a===0){s.found=!0,P=Math.hypot(t-U,o-N),s.normal[0]=P?(t-U)/P:0,s.normal[1]=P?(o-N)/P:0;continue}B=Math.max(0,y-Math.sqrt(u*u-C)),!(B>a||B>=s.best)&&(s.best=B,s.found=!0,P=Math.hypot(t+B*i-U,o+B*n-N),rx(s,t+B*i-U,o+B*n-N,P,i,n))}return s.found}function lf(e){let{layer:t,local:r,hitData:o}=e,i=z.get(t);if(!i||!G.get(i))return!1;we(Q.get(t));let n=L.get(t),a=St.call(e,r),s=n.position[0]+a[0]*n.scale[0],m=n.position[1]+a[1]*n.scale[1],f=n.position[2]+a[2]*n.scale[2],p=G.get(i),c,l,u,d;for(c of p)if(!(c===t||I.get(c)==="terrain")){if(I.get(c)==="traffic"){if(o.best=0,o.found=!1,As(c,s,m,f,0,0,0,o))return!0;continue}for(d=o.nodes,d.length=0,L.get(c)&&d.push(L.get(c));d.length;)if(l=d.pop(),!!l.visible){if(l.geometry&&(cf(l,s,m+.45*n.scale[1],f,o.seen,o.intersections)||cf(l,s,m+1.35*n.scale[1],f,o.seen,o.intersections)))return!0;for(u of l.children)d.push(u)}}return!1}function Os(){if(!this.saved||!lf(this))return!1;let e=this.layer._map,t=this.state.latlng,r=this.state.height,o,i,n;for(o=.5;o<=20;o+=.5)for(i=0;i<Math.PI*2;i+=Math.PI/4)if(n=new h.LatLng(t.lat+Math.cos(i)*o/111320,t.lng+Math.sin(i)*o/(111320*Math.cos(t.lat*Math.PI/180))),this.state.latlng=n,this.state.height=0,!lf(this))return this.verticalSpeed=0,e.setView(n,e.getZoom(),{animate:!1}),!0;return this.state.latlng=t,this.state.height=r,!1}function Ds(e){return Math.atan2(Math.sin(e),Math.cos(e))}function ox(e,t){return e===t||Ut.get(e)==="terrain"||Ut.get(e)==="traffic"}function ix(e){let t=ee.get(this.layer),r=St.call(this,this.local),o=L.get(this.layer),i=o.position[0]+r[0]*o.scale[0],n=o.position[1]+r[1]*o.scale[1],a=o.position[2]+r[2]*o.scale[2];if(n>e||this.verticalSpeed>0)return;we(Q.get(this.layer)),t.origin[0]=i,t.origin[1]=e+.01,t.origin[2]=a,t.direction[0]=0,t.direction[1]=-1,t.direction[2]=0,t.meshes.length=0;let s,m;for(s of G.get(z.get(this.layer)))ox(s,this.layer)||I.get(s)==="raster"||s.options.nightLight||At(L.get(s),qn,t.meshes);for(m of Vn(t,t.meshes)){if(m.point[1]<n-.001)break;this.state.height+=(m.point[1]-n)/o.scale[1],this.verticalSpeed=0;break}t.meshes.length=0}b();X();function nx(e,t,r,o,i,n){let{dx:a,dz:s,seen:m}=r,f,p,c;for(f of e)if(!(m.has(f)||a*t.nrm[f*2]+s*t.nrm[f*2+1]>=0))for(m.add(f),p=.4;p<2;p+=1.1)c=zs(t.tri,f,o,i+p,n,a,s),c>=0&&c<r.best&&(r.best=c,r.found=!0,r.normal[0]=t.nrm[f*2],r.normal[1]=t.nrm[f*2+1])}function ax(e,t){if(!e.visible)return!0;if(!e.geometry?.attributes?.position?.data||e.program?.depthTest===!1)return;e.geometry.bounds||Be(e.geometry);let r=e.worldMatrix,{center:o,radius:i}=e.geometry.bounds,{x:n,y:a,z:s,dx:m,dz:f,reach:p}=t;if(Math.hypot(r[0]*o[0]+r[4]*o[1]+r[8]*o[2]+r[12]-n,r[2]*o[0]+r[6]*o[1]+r[10]*o[2]+r[14]-s)>i*Math.hypot(r[0],r[1],r[2])+p)return;let c=Is(e),l=n-r[12]+c.origin[0],u=a-r[13]+c.origin[1],d=s-r[14]+c.origin[2];t.seen.clear();let g,x,w;for(g=Math.floor(Math.min(l,l+m*p)/8);g<=Math.floor(Math.max(l,l+m*p)/8);g++)for(x=Math.floor(Math.min(d,d+f*p)/8);x<=Math.floor(Math.max(d,d+f*p)/8);x++)w=c.cells.get(g+","+x),w&&nx(w,c,t,l,u,d)}function sx(e,t,r,o,i,n,a,s){we(Q.get(e)),s.x=t,s.y=r,s.z=o,s.dx=i,s.dz=n,s.reach=a,s.best=a,s.found=!1;let m;for(m of G.get(z.get(e)))if(!(m===e||I.get(m)==="terrain")){if(I.get(m)==="traffic"){As(m,t,r,o,i,n,a,s);continue}At(L.get(m),ax,s)}return s.found?s.normal:null}function uf(e,t,r){let o=Math.hypot(e,t);return o>1e-6&&sx(this.layer,r[0],r[1],r[2],e/o,-t/o,o+.3,this.hitData)}function mx(e,t){let r=e*this.speed*t,{lat:o,lng:i}=this.state.latlng,{position:n,scale:a}=L.get(this.layer),s=Math.sin(this.state.heading)*r,m=Math.cos(this.state.heading)*r,f=St.call(this,this.local),p;for(p=0;p<f.length;p++)f[p]=n[p]+a[p]*f[p];let c=uf.call(this,s,m,f);if(c){let l=s*c[0]-m*c[1];s-=l*c[0],m+=l*c[1],uf.call(this,s,m,f)&&(s=m=0)}this.state.latlng=new h.LatLng(o+m/111320,i+s/(111320*Math.cos(o*T))),this.state.phase+=Math.hypot(s,m)/1.6*Math.PI}Yr();X();W();or();H();function fx(e,t,r){let o=this.layer._map;if(e||t){let n=S(o)*T,a=Ds(-this.state.heading-n);Math.abs(a)>.001&&ze(o,k(o),(n+a*Math.min(1,r*4))*He),o.setView(this.state.latlng,o.getZoom(),{animate:!1})}let i=e?.9:0;return Math.abs(this.swing-i)>.001?(this.swing+=(i-this.swing)*Math.min(1,r*10),!0):!1}function px(e,t,r,o,i,n){o&&(e.state.heading=Ds(e.state.heading+o*2.5*i),n=!0),r&&(mx.call(e,r,i),n=!0),n&&ix.call(e,t),fx.call(e,r,o,i)&&(n=!0),n&&ks.call(e)}function cx(e){let t=this.layer;this.frame=requestAnimationFrame(this.step);let r=Math.min(.1,(e-(this.last??e))/1e3);if(this.last=e,!v.get(t))return;let o=!1,i,n;if(e>=this.nextClearanceCheck&&(this.nextClearanceCheck=e+250,Os.call(this)&&(o=!0)),!this.meshes){this.meshes=[];for([i]of $i)this.meshes.push(er(t,ti(ws[i])));o=!0}let a=L.get(t).position[1]+St.call(this,this.local)[1]*L.get(t).scale[1];Jy.call(this,r)&&(o=!0);let s=0,m=0;for(n of this.keys)s+=Zi[n]?.[0]||0,m+=Zi[n]?.[1]||0;s=Math.sign(s),m=Math.sign(m),px(this,a,s,m,r,o)}function Rs(){let e=this.layer._map;if(this.saved||!e)return;this.state.latlng=e.getCenter(),this.state.height=this.verticalSpeed=0;let t=e.getSize().y*1.5/this.distance,r=Math.min(e.getMaxZoom(),Math.log2(t*Xt*Math.cos(this.state.latlng.lat*T)/256)),o;this.saved={zoom:e.getZoom(),pitch:k(e),scrollWheelZoom:e.options.scrollWheelZoom,handlers:[]};for(o of Ky)e[o]?.enabled()&&this.saved.handlers.push(o);for(o of this.saved.handlers)e[o].disable();e.options.scrollWheelZoom=this.saved.scrollWheelZoom&&"center",this.state.heading=-S(e)*T,e.setView(this.state.latlng,r,{animate:!1}),Ir(e,75),Os.call(this),h.DomEvent.on(document,"keydown keyup",this.onKey),h.DomEvent.on(window,"blur",this.onBlur),h.DomEvent.on(e.getContainer(),"pointerdown pointermove pointerup pointercancel",this.onPointer),e.on("terrainchange",this.onTerrain),this.button.setAttribute("aria-pressed","true"),this.button.style.background="#e4e4e4",this.hint.style.display="",this.last=void 0,this.nextClearanceCheck=0,this.frame=requestAnimationFrame(this.step)}function lx(){this.saved?_s.call(this):Rs.call(this)}function ux(e,{speed:t,distance:r,...o}){let i=new h.Layer;Ut.set(i,"walk"),Lt(i,o);let n=new Set,a=h.DomUtil.create("div","leaflet-bar leaflet-control");a.style.cssText="display:flex;align-items:center;background:#fff;";let s=h.DomUtil.create("button","",a);s.type="button",s.title="Walk",s.setAttribute("aria-label","Walk"),s.setAttribute("aria-pressed","false"),s.textContent="\u{1F6B6}",s.style.cssText="width:30px;height:30px;padding:0;border:0;border-radius:4px;background:#fff;font-size:18px;line-height:30px;cursor:pointer;";let m=h.DomUtil.create("small","",a);m.style.cssText="display:none;padding:0 8px;color:#333;white-space:nowrap;",m.textContent="W/S: run \xB7 A/D: turn \xB7 hold Space: ascend \xB7 drag: look around \xB7 Esc: exit",h.DomEvent.disableClickPropagation(a);let f={layer:i,speed:t,distance:r,keys:n,container:a,button:s,hint:m,meshes:null,frame:null,last:void 0,nextClearanceCheck:0,swing:0,verticalSpeed:0,saved:null,hitData:null,local:null,state:e.walker={latlng:null,heading:0,phase:0,height:0}};ps.set(i,f.state),f.step=cx.bind(f),f.onKey=Xy.bind(f),f.onBlur=qy.bind(f),f.onPointer=Hy.bind(f),f.onTerrain=Yy.bind(f),f.start=Rs.bind(f),f.stop=_s.bind(f),f.toggle=lx.bind(f),e._walk=f,h.DomEvent.on(s,"click",f.toggle)}function dx(e){h.Util.setOptions(this,e),ux(this,this.options)}function hx(e){let t=It.get(e);if(t?.control&&t.control!==this)throw this._map=null,new Error("Only one Walk control can be active per map");return t||(t={control:null,hitData:{x:0,y:0,z:0,dx:0,dz:0,reach:0,best:0,found:!1,seen:new Set,intersections:[],nodes:[],normal:[0,0]},local:[0,0,0]},It.set(e,t)),t.control=this,t.local.fill(0),t.hitData.seen.clear(),t.hitData.normal.fill(0),this._walk.hitData=t.hitData,this._walk.local=t.local,this._walk.layer.addTo(e),this._walk.container}function gx(e){let t=It.get(e);t?.control===this&&(this._walk.stop(),this._walk.layer.remove(),t.control=null,t.hitData.seen.clear(),this._walk.hitData=null,this._walk.local=null)}h.Control.Walk=h.Control.extend({options:{position:"bottomright",speed:70,distance:20},initialize:dx,onAdd:hx,onRemove:gx});b();var Gs=new WeakMap;var Us=new WeakMap;var Fs=new WeakMap;function yx(){return{}}function xx(e){return this._project(),this._parts=this._rings,Gs.get(this).call(this,e)}function vx(){return this._project(),Us.get(this).call(this)}function wx(){Fs.get(this).call(this),this._container.remove()}var Vt=new Map;var Et={value:null};function Mx(e){Vt.delete(e),wr.set(e,null),!Vt.size&&Et.value!==null&&(cancelAnimationFrame(Et.value),Et.value=null)}function bx(){Et.value=null;let e=[...Vt],t,r;for([t,r]of e)Vt.get(t)===r&&(Vt.delete(t),wr.set(t,null),Ns.call(t))}function Lx(e){qo.set(e,(qo.get(e)||0)+1),Vt.set(e,qo.get(e)),Et.value===null&&(Et.value=requestAnimationFrame(bx)),wr.set(e,Et.value)}function Ns(){if(!this._map)return;let e=this,t=Date.now(),r=!1,o=!1,i,n;for(i in this._tiles)Object.hasOwn(this._tiles,i)&&(n=this._tiles[i],!(!n.current||!n.loaded)&&(n._gpuOpacity=this._map._fadeAnimated?Math.min(1,(t-n.loaded)/200):1,n._gpuOpacity<1?r=!0:n.active||(this._onOpaqueTile(n),n.active=!0,o=!0)));o&&!this._noPrune&&this._pruneTiles(),xt(this),Mx(e),r&&Lx(e)}var js=[];function Bx(){js.shift()?.fire("load")}function Tx(){this._image||this._initImage(),this._image.complete&&this._image.naturalWidth&&(js.push(this),queueMicrotask(Bx))}function Px(){return xt(this),this}function Cx(){this instanceof h.Polyline||this instanceof h.CircleMarker?(this.beforeAdd=this._updateBounds=at,this.redraw=Px,I.set(this,"path"),this instanceof h.Polyline&&(Gs.set(this,this.closestLayerPoint),this.closestLayerPoint=xx),this instanceof h.Circle&&(Us.set(this,this.getBounds),this.getBounds=vx)):this instanceof h.GridLayer?(Fs.set(this,this._initContainer),this._initContainer=wx,this._updateOpacity=Ns):this instanceof h.ImageOverlay&&!(this instanceof h.VideoOverlay)&&!(this instanceof h.SVGOverlay)&&(I.set(this,"image"),this._reset=xt)}b();function Sx(){Zr.get(this).off(vr.get(this),this),Zr.set(this,null),vr.set(this,null)}function Ex(e,t){switch(I.get(e)){case"3d":return hs(e,t);case"raster":return sg(e,t);case"terrain":return Gg(e,t);case"image":return Tx.call(e,t);case"time":return Xg.call(e,t)}}function kx(e){if(!e._map)return;let t;for(t of V.get(e).values())Fr(e,t);V.get(e).clear(),Nr(e)}function _x(e){let t={};return oe.get(e)&&(t.moveend=t.zoomend=t.rotate=t.pitch=t.resize=Nr.bind(null,e)),(q.get(e)||oe.get(e))&&(t.terrainchange=kx.bind(null,e)),t}b();function Ix(e){return!ur.get(e)&&(e instanceof h.GridLayer||e instanceof h.Polyline||e instanceof h.CircleMarker||e instanceof h.Marker&&!(e.options.icon instanceof h.DivIcon)||e instanceof h.ImageOverlay&&!(e instanceof h.VideoOverlay)&&!(e instanceof h.SVGOverlay))}function zx(e){let t=Ix(this);t&&((this instanceof h.GridLayer||this instanceof h.ImageOverlay)&&(this.options.crossOrigin||=!0),this instanceof h.Marker&&(this.options.icon.options.crossOrigin||=!0));let r=e.target;r.hasLayer(this)&&(I.get(this)?(this._map=r,this._zoomAnimated=r._zoomAnimated,I.get(this)!=="pending"&&I.get(this)!=="time"&&(vr.set(this,I.get(this)==="raster"?rg(this):ur.get(this)?_x(this):yx()),Zr.set(this,r),r.on(vr.get(this),this),this.once("remove",Sx,this)),Ex(this,r),this.fire("add"),r.fire("layeradd",{layer:this})):Br.value._layerAdd.call(this,e),!(!t||!e.target.hasLayer(this))&&Jn(this,e.target))}b();var Ws=[];var Zs={value:Promise.resolve()};function Ax(e,t){q.set(e,!0),Lt(e,t)}function Ox(e,t,r){if(!Number.isSafeInteger(t)||!Number.isSafeInteger(r)||t<0||r<=0||r>32e6||!Number.isSafeInteger(t+r)||e.size!==void 0&&t+r>e.size)throw new Error("Invalid COG byte range")}function Dx(e,t,r,o){if(!t||Number(t[1])!==r||Number(t[2])!==r+o-1||!Number.isSafeInteger(Number(t[3]))||Number(t[3])<r+o||(e.containerSize??e.size)!==void 0&&(e.containerSize??e.size)!==Number(t[3]))throw new Error("Invalid COG range response")}function Rx(e){return e.status!==200||Number(e.headers.get("Content-Length"))>32e6}function Gx(e,t,r,o){let i=t.headers.get("ETag");if(e.etag&&e.etag!==i)throw new Error("COG changed; recreate the layer");i&&(e.etag=i);let n=/^bytes (\d+)-(\d+)\/(\d+)$/.exec(t.headers.get("Content-Range")||"");if(t.status===206)Dx(e,n,r,o),e.baseOffset===void 0&&(e.size=Number(n[3]));else if(Rx(t))throw new Error("COG server must support byte ranges for files over 32 MB")}async function Ux(e,t){let r=e.body.getReader(),o=[],i=0,n;try{for(;!(n=await r.read()).done;){if(i+=n.value.byteLength,i>(e.status===206?t:32e6))throw await r.cancel(),new Error("Oversized COG response");o.push(n.value)}}finally{r.releaseLock()}let a=new Uint8Array(i),s=0,m;for(m of o)a.set(m,s),s+=m.length;return a}async function $e(e,t,r,o){if(o?.throwIfAborted(),Ox(e,t,r),e.full)return e.full.slice(t,t+r);let i=(e.baseOffset||0)+t,n=await fetch(e.url,{headers:{Range:`bytes=${i}-${i+r-1}`},signal:o});if(!n.ok)throw new Error(`Unable to read COG: HTTP ${n.status}`);Gx(e,n,i,r);let a=await Ux(n,r);if(n.status===200){if(e.baseOffset===void 0)e.size=a.byteLength;else if(a.byteLength!==e.containerSize)throw new Error("Truncated PMTiles COG container");e.full=e.baseOffset===void 0?a.buffer:a.slice(e.baseOffset,e.baseOffset+e.size)}let s=n.status===200?e.full.slice(t,t+r):a.buffer;if(s.byteLength!==r)throw new Error("Truncated COG byte range");return s}var Fx=[256,257,258,259,262,277,284,317,322,323,324,325,339,33550,33922,34735];async function Nx(e,t,r,o,i){let n=t.getUint16(r*12+2,i),a=n===3?2:n===4?4:n===12?8:0,s=t.getUint32(r*12+4,i);if(!a||!s||s>1048576)throw new Error(`Unsupported COG tag ${o}`);let m=a*s<=4?new DataView(t.buffer,r*12+8,4):new DataView(await $e(e,t.getUint32(r*12+8,i),a*s)),f=[],p;for(p=0;p<s;p++)f.push(n===3?m.getUint16(p*a,i):n===4?m.getUint32(p*a,i):m.getFloat64(p*a,i));return f}async function jx(e,t){let r=e.little,o=new DataView(await $e(e,t,2)).getUint16(0,r);if(!o||o>128)throw new Error("Invalid COG directory size");let i=new DataView(await $e(e,t+2,o*12+4)),n=new Map,a,s;for(a=0;a<o;a++){if(s=i.getUint16(a*12,r),s===42113)throw new Error("COG nodata tags are not supported; export complete tiles");if(s===34264)throw new Error("COG affine transformation matrices are not supported");if(Fx.includes(s)){if(n.has(s))throw new Error("Duplicate COG tag");n.set(s,await Nx(e,i,a,s,r))}}return{tags:n,next:i.getUint32(o*12,r)}}function Wx(e,t,r){return!!t&&!!r&&t%256===0&&r%256===0&&e.get(322)?.[0]===256&&e.get(323)?.[0]===256&&(e.get(259)?.[0]===1||e.get(259)?.[0]===8)&&(e.get(284)?.[0]??1)===1&&(e.get(317)?.[0]??1)===1}function Zx(e,t,r,o,i,n,a){return i?e.get(262)?.[0]===1:(t===3||t===4)&&r?.length===t&&n&&a&&e.get(262)?.[0]===2}function $x(e){let t=e.get(256)?.[0],r=e.get(257)?.[0],o=e.get(277)?.[0]??1,i=e.get(258),n=e.get(339)||[1],a=!0,s=!0,m=!0,f;for(f of i||[])a&&=f===8;for(f of n)s&&=f===1,m&&=f===3;let p=o===1&&i?.length===1&&i[0]===32&&m;if(!Wx(e,t,r)||!Zx(e,o,i,n,p,a,s))throw new Error("Unsupported COG profile: expected tiled 256px RGB(A) Uint8 or Float32, DEFLATE without predictor");return{width:t,height:r,samples:o,elevation:p}}function Vx(e){let t=!1,r=!1,o;if(e)for(o=4;o<e.length;o+=4)e[o+1]!==0||e[o+2]!==1||(e[o]===3072&&e[o+3]===3857&&(t=!0),e[o]===1025&&e[o+3]===1&&(r=!0));return t&&r}function df(e){let t;for(t of e||[])if(!Number.isFinite(t))return!1;return!0}function qx(e,t,r){return!!e&&e[0]===1&&e.length===4+e[3]*4&&!!t&&t.length===3&&df(t)&&t[0]>0&&Math.abs(t[0]-t[1])<=1e-8&&!!r&&r.length===6&&df(r)&&r[0]===0&&r[1]===0}function Hx(e,t,r,o){let i=e.get(34735),n=e.get(33550),a=e.get(33922);if(!qx(i,n,a)||!Vx(i))throw new Error("COG must use north-up EPSG:3857 PixelIsArea georeferencing");return{width:t,height:r,resolution:n[0],left:a[3],top:a[4],elevation:o}}function Yx(e,t,r,o,i,n,a){return o>=0&&o<=24&&Math.abs(20037508342789244e-9*2/(256*2**o)-a)<=a*1e-7&&(!r.elevation||Number.isInteger(i)&&Number.isInteger(n))&&Math.abs(t.width/r.width-t.height/r.height)<=1e-7&&r.elevation===t.elevation&&i>=0&&n>=0&&i+r.width/256<=2**o&&n+r.height/256<=2**o&&!e.levels.has(o)&&!(t.elevation&&e.levels.size)}function Xx(e,t){if(t.offsets?.length!==t.columns*t.rows||t.lengths?.length!==t.offsets.length)throw new Error("Invalid COG tile offsets or lengths");let r;for(r=0;r<t.offsets.length;r++)if(!t.offsets[r]||!t.lengths[r]||t.lengths[r]>1048576||t.offsets[r]+t.lengths[r]>e.size)throw new Error("Invalid COG tile offsets or lengths")}function Kx(e,t,r){let o=t.tags,i=$x(o);r.base||(r.base=Hx(o,i.width,i.height,i.elevation));let n=r.base,a=n.resolution*n.width/i.width,s=Math.round(Math.log2(20037508342789244e-9*2/(256*a))),m=20037508342789244e-9*2/2**s,f=(n.left+20037508342789244e-9)/m,p=(20037508342789244e-9-n.top)/m;if(Math.abs(f-Math.round(f))<1e-6&&(f=Math.round(f)),Math.abs(p-Math.round(p))<1e-6&&(p=Math.round(p)),!Yx(e,n,i,s,f,p,a))throw new Error("COG levels must align with the Web Mercator XYZ tile grid");let c={x:f,y:p,columns:i.width/256,rows:i.height/256,samples:i.samples,elevation:i.elevation,compression:o.get(259)[0],offsets:o.get(324),lengths:o.get(325)};Xx(e,c),e.levels.set(s,c),r.minZoom=Math.min(r.minZoom,s),r.maxZoom=Math.max(r.maxZoom,s)}async function Jx(e,t){let r={base:null,minZoom:1/0,maxZoom:-1/0},o=new Set,i;for(;t;){if(o.has(t)||o.size>=24)throw new Error("Cyclic or excessive COG directories");o.add(t),i=await jx(e,t),Kx(e,i,r),t=i.next}if(!r.base)throw new Error("COG has no image directory");if(e.levels.size!==r.maxZoom-r.minZoom+1)throw new Error("COG overview zooms must be contiguous");return{base:r.base,minZoom:r.minZoom,maxZoom:r.maxZoom}}async function Qx(e,t,r){if(r===1){if(e.byteLength!==t)throw new Error("Invalid uncompressed COG tile size");return e}let i=new Blob([e]).stream().pipeThrough(new DecompressionStream("deflate")).getReader(),n=new Uint8Array(t),a=0,s;try{for(;!(s=await i.read()).done;){if(a+s.value.length>t)throw await i.cancel(),new Error("Oversized decoded COG tile");n.set(s.value,a),a+=s.value.length}}finally{i.releaseLock()}if(a!==t)throw new Error("Truncated decoded COG tile");return n.buffer}async function $s(e,t,r,o,i){let n=o*t.columns+r;return Qx(await $e(e,t.offsets[n],t.lengths[n],i),256*256*(t.elevation?4:t.samples),t.compression)}async function e0(e,t,r,o,i){let n=await $s(e,t,r-t.x,o-t.y,i);i?.throwIfAborted();let a=new DataView(n),s=new Float32Array(256*256),m,f;for(m=0;m<s.length;m++){if(f=a.getFloat32(m*4,e.little),!Number.isFinite(f)||f<-12e3||f>1e4)throw new Error("Invalid or missing COG elevation sample");s[m]=f}return{data:s.buffer}}async function t0(e,t,r,o,i){let n=new OffscreenCanvas(256,256),a=n.getContext("2d");if(!a)throw new Error("Unable to create COG tile canvas");let s=(r-t.x)*256,m=(o-t.y)*256,f,p,c,l,u,d,y;for(p=Math.max(0,Math.floor(m/256));p<Math.min(t.rows,Math.ceil(m/256+1));p++)for(f=Math.max(0,Math.floor(s/256));f<Math.min(t.columns,Math.ceil(s/256+1));f++){for(c=new Uint8Array(await $s(e,t,f,p,i)),i?.throwIfAborted(),l=new Uint8ClampedArray(256*256*4),u=0,d=0;u<c.length;u+=t.samples,d+=4)l[d]=c[u],l[d+1]=c[u+1],l[d+2]=c[u+2],l[d+3]=t.samples===4?c[u+3]:255;y=await createImageBitmap(new ImageData(l,256,256)),a.drawImage(y,f*256-s,p*256-m),y.close()}let g=n.transferToImageBitmap();return i?.aborted&&(g.close(),i.throwIfAborted()),{image:g}}function r0(e,t,r){return Number.isSafeInteger(e)&&Number.isSafeInteger(t)&&Number.isSafeInteger(r)&&e>=0&&e<=24&&t>=0&&r>=0&&t<2**e&&r<2**e}async function o0(e,t,r,o,i){if(i?.throwIfAborted(),!r0(t,r,o))throw new Error("Invalid COG tile coordinates");let n=e.levels.get(t);if(!(!n||r+1<=n.x||o+1<=n.y||r>=n.x+n.columns||o>=n.y+n.rows))return n.elevation?e0(e,n,r,o,i):t0(e,n,r,o,i)}function i0(e){return e.header}function n0(e,t){if(t.tileType!==0||t.tileCompression!==1||!Number.isSafeInteger(t.jsonMetadataOffset)||!Number.isSafeInteger(t.jsonMetadataLength)||t.jsonMetadataLength<=0||t.jsonMetadataLength>1048576||!Number.isSafeInteger(t.tileDataOffset)||!Number.isSafeInteger(t.tileDataLength)||t.tileDataOffset<127||t.tileDataOffset+t.tileDataLength>e.size)throw new Error("Invalid PMTiles COG asset container")}async function a0(e,t,r){let o=JSON.parse(new TextDecoder().decode(await Do(await $e(e,t.jsonMetadataOffset,t.jsonMetadataLength),t.internalCompression))),i=o.cog_assets||{},n=Object.hasOwn(i,r)?o.cog_assets[r]:null;if(o.format!=="cog-assets-v1"||!n||!Number.isSafeInteger(n.offset)||!Number.isSafeInteger(n.length)||n.offset<0||n.length<8||n.offset+n.length>t.tileDataLength)throw new Error(`Invalid or missing PMTiles COG asset: ${r}`);return n}async function s0(e,t){let r={url:e},o=Da(await $e(r,0,127));n0(r,o);let i=await a0(r,o,t),n=o.tileDataOffset+i.offset;return{url:e,baseOffset:n,size:i.length,containerSize:r.size,etag:r.etag,full:r.full?.slice(n,n+i.length)}}async function m0(e,t){let r=t===void 0?{url:e}:await s0(e,t);r.levels=new Map;let o=new DataView(await $e(r,0,8)),i=o.getUint16(0);if(i!==18761&&i!==19789)throw new Error("Invalid TIFF byte order");if(r.little=i===18761,o.getUint16(2,r.little)!==42)throw new Error("Expected classic TIFF (BigTIFF is not supported)");let{base:n,minZoom:a,maxZoom:s}=await Jx(r,o.getUint32(4,r.little)),m=20037508342789244e-9,f=n.left+n.resolution/2,p=n.left+(n.width-.5)*n.resolution,c=n.top-n.resolution/2,l=n.top-(n.height-.5)*n.resolution;return r.header={minZoom:a,maxZoom:s,tileType:n.elevation?0:2,minLon:f/m*180,maxLon:p/m*180,minLat:Math.atan(Math.sinh(l/m*Math.PI))*180/Math.PI,maxLat:Math.atan(Math.sinh(c/m*Math.PI))*180/Math.PI},{getHeader:i0.bind(null,r),getZxy:o0.bind(null,r)}}function f0(e,t){ls(e,{ariaLabel:"COG raster",...t,archive:t.archive||m0(new URL(t.url,document.baseURI).href,t.asset)})}function p0(e){switch(e){case"geojson":return Ax;case"pmtiles":return ls;case"cog":return f0;case"terrain":return Ug;case"traffic":return Vy;default:return null}}function c0(){let e=Ws.shift();return e.initialize=p0(e.type),e.initialize||(e.error=new Error(`Unknown layer type: ${e.type}`)),e}function l0(e){let{layer:t,ready:r}=e;if(e.error)return Kn(t,e.error),Promise.reject(e.error);try{let o=t._map;return o?.removeLayer(t),I.delete(t),e.initialize(t,e.settings),o?.addLayer(t),re.get(t)===r?t:re.get(t)}catch(o){throw t.fire("error",{error:o}),o}}function u0(e=xo){if(vt.has(this)||vt.add(this),Object.getPrototypeOf(this)!==h.Layer.prototype||!e?.source){if(Br.value.initialize)return Br.value.initialize.apply(this,arguments);h.Util.setOptions(this,e);return}let{source:{type:t=e.source.data?.type==="FeatureCollection"?"geojson":/\.pmtiles(?:[?#]|$)/i.test(e.source.url)?"pmtiles":/\.tiff?(?:[?#]|$)/i.test(e.source.url)?"cog":"3d",...r},...o}=e,i={...r,...o};if(h.Util.setOptions(this,o),Ut.set(this,t),t==="3d"){Lt(this,i);return}I.set(this,"pending");let n={layer:this,type:t,settings:i,ready:null};Ws.push(n),Zs.value=Zs.value.catch(at).then(c0);let a=Zs.value.then(l0);re.set(this,a),n.ready=a,a.catch(at)}b();function d0(e,t){switch(I.get(e)){case"3d":return Xo(e,t);case"raster":return dg(e,t);case"terrain":return yg(e,t);case"time":return Kg.call(e,t)}}function h0(e){let t=h.Util.stamp(e);return this._layers[t]?I.get(e)?(this._loaded&&d0(e,this),delete this._layers[t],this._loaded&&(this.fire("layerremove",{layer:e}),e.fire("remove")),e._map=e._mapToAdd=null,this):qi.value.call(this,e):this}H();function g0(){return k(this)}W();function y0(){return S(this)}function x0(e,t){if(!Number.isFinite(t))throw new TypeError("Marker rotation must be finite");return e.options.rotation=t,e.update(),xt(e),e}function v0(e){return x0(this,e)}function w0(){vt.has(this)||vt.add(this);let e=this._initHooksCalled;Vi.value.call(this),e||Cx.call(this)}Br.value=Object.defineProperties({},Object.getOwnPropertyDescriptors(h.Layer.prototype));Vi.value=h.Layer.prototype.callInitHooks;h.Layer.include({initialize:u0,_layerAdd:zx,callInitHooks:w0});qi.value=h.Map.prototype.removeLayer;h.Map.include({removeLayer:h0,getPitch:g0,getBearing:y0});h.Marker.include({setRotation:v0});})();
|
|
6
|
+
`:""}${e.description}`),t.textContent=r,t}function om(e){e.layer._map.off("simulationtimechange layerremove",e.update).on("simulationtimechange layerremove",e.update),e.layer._map.off("terrainchange",e.terrain).on("terrainchange",e.terrain),ei(e.layer,e.status),e.update()}function B0(e){Tt.set(e.layer,e),e.ready&&om(e)}function ir(e,t){t&&(at.get(e.layer)?.mesh===t&&(Ot(e.layer,null),ke.set(e.layer,null),zt(e.layer,null)),Ge(e.layer,t))}function im(e){e.gpu?.params?.destroy(),e.gpu?.template?.destroy(),e.gpu?.points?.destroy(),e.gpu?.vehicles?.destroy(),e.gpu=null}function T0(e){e.request?.abort(),cancelAnimationFrame(e.frame),e.frame=void 0,e.layer._map.off("simulationtimechange layerremove",e.update).off("terrainchange",e.terrain),ir(e,e.mesh),ir(e,e.route),e.mesh=e.route=null,Tt.delete(e.layer),im(e),e.lanes.length=0,e.trips.length=0,e.tripsKey=e.loaded=null}function P0(e){e.ready=!0,e.layer._map&&om(e)}function nm(e){let t=Qo.get(e.layer._map),r=t?t.live:!0;return{live:r,time:r?new Date:t.time}}function S0(e,t,r=8){let o=Math.round(e*t/3600/r),i=Array.from({length:o}),n;for(n=0;n<i.length;n++)i[n]=(n+.5)*e/o;return i}var Li=new Map;function Vf(e){let t=e.split(":");return Number(t[0])*60+Number(t[1])}function k0(e,t){return e-t}function C0(e,{timeZone:t,duration:r,services:o}){let i=e instanceof Date?e:new Date(e);if(!Number.isFinite(i.getTime()))throw new Error("Invalid date");let n=Li.get(t);n||(n=new Intl.DateTimeFormat("en-GB",{timeZone:t,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hourCycle:"h23"}),Li.size>=32&&Li.delete(Li.keys().next().value),Li.set(t,n));let a={},s,m,f,p,c,l,u;for(s of n.formatToParts(i))s.type!=="literal"&&(a[s.type]=Number(s.value));let h=a.hour*60+a.minute+(a.second+i.getUTCMilliseconds()/1e3)/60,x=((Math.floor(Date.UTC(a.year,a.month-1,a.day)/864e5)+4)%7+7)%7,g=[];for({from:m,to:f,every:p=1/0,months:c,weekdays:l}of o)if(!(c?.includes(a.month)===!1||l?.includes(x)===!1))for(u=Vf(m);u<=Vf(f);u+=p)g.push(u);g.sort(k0);let y=[];for(u of g)h>=u&&h<u+r&&y.push({id:`${a.year}-${a.month}-${a.day}-${u}`,departure:`${String(Math.floor(u/60)).padStart(2,"0")}:${String(u%60).padStart(2,"0")}`,progress:(h-u)/r});return y}function _0(e,t,r){let o=[],i,n,a,s,m,f,p,c;for(i=0;i<t.length;i++)if(n=t[i],{timetable:a,flow:s=0}=n.properties,!!n.length)if(a)for(m of C0(e,a))o.push({id:`${i}-${m.id}`,lane:n,distance:m.progress*n.length,speed:n.length/(a.duration*60),properties:{...n.properties,departure:m.departure}});else for(f=e/1e3*r,p=n.offsets||=S0(n.length,s,r),c=0;c<p.length;c++)o.push({id:`${i}-${c}`,lane:n,distance:(p[c]+f)%n.length,speed:r,properties:n.properties});return o}function am(e,t){e.error=t,e.status.textContent=`${e.vehicle}: Error: ${t.message}`,e.status.setAttribute("role","alert"),console.error("Traffic layer",t)}var E0=Object.freeze({unlit:!0});function O0(e,t,r,o,i,n,a,s,m,f,p,c,l,u){let h=o[0]+n*f,x=o[1]+a*f,g=o[2]+(i[2]-o[2])*f+.4,y=o[0]+n*p,v=o[1]+a*p,S=o[2]+(i[2]-o[2])*p+.4,T;for(T=0;T<6;T++)T===0||T===3?e.push(h-s,g,x-m):T===1?e.push(h+s,g,x+m):T===5?e.push(y-s,S,v-m):e.push(y+s,S,v+m),t.push(0,1,0),r.push(c,l,u)}function z0(e,t,r,o,i,n,a,s,m){let f=o[n-1],p=o[n],c=p[0]-f[0],l=p[1]-f[1],u=i[n]-i[n-1];if(!u)return;let h=-l/u*2.5,x=c/u*2.5,g,y,v;for(g=Math.floor(i[n-1]/30)*30;g<i[n];g+=30)y=Math.max(0,(g-i[n-1])/u),v=Math.min(1,(g+18-i[n-1])/u),!(v<=y)&&O0(e,t,r,f,p,c,l,h,x,y,v,a,s,m)}function A0(e){let t=[],r=[],o=[],i,n,a,s,m,f,p,c,l;for({points:i,lengths:n,properties:a}of e)for(s=a?.route_color,m=/^[\da-f]{6}$/i.test(s)?Number.parseInt(s,16):null,f=m===null?.08:(m>>16&255)/255,p=m===null?.7:(m>>8&255)/255,c=m===null?.85:(m&255)/255,l=1;l<i.length;l++)z0(t,r,o,i,n,l,f,p,c);return{position:t,normal:r,color:o}}function sm(e,t,r,o,i=0){let n=dr(e.layer,t,o,i);return n.extras.featureFaces=r,n}function R0(e){e.route=sm(e,A0(e.lanes),[],E0)}function mm(e){let t=20,r=5,o,i,n,a,s;for(o=0;o<e.template.position.length;o+=3)t=Math.max(t,Math.hypot(e.template.position[o],e.template.position[o+2])+Math.abs(e.side)),r=Math.max(r,e.template.position[o+1]);let m=[];for(i of e.lanes)for([n,a,s]of i.points)m.push(n-t,s,a-t,n+t,s+r,a+t);let f={attributes:{position:{data:m}}};_e(f),e.mesh.geometry.bounds=f.bounds}function I0(e){let{trips:t,model:r,vertices:o}=e;if(ir(e,e.mesh),e.mesh=null,!t.length)return;let i=[],n=[],a,s,m;for(a=0;a<t.length;a++){s=t[a];for(m of ci(r(a,s.properties)).color)i.push(m);n.push({id:s.id,properties:s.properties,faceStart:a*o/3,faceEnd:(a+1)*o/3,vertexStart:a*o,vertexEnd:(a+1)*o})}let f=i.length/3;e.mesh=sm(e,{position:new Array(i.length).fill(0),normal:new Array(i.length).fill(0),color:i},n,em,GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC),e.mesh.geometry.drawRange.count=f,e.mesh.extras.dynamicLights=!0,mm(e)}function ln(e,t){let r=e.createBuffer({size:Math.max(16,t.byteLength),usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});return e.queue.writeBuffer(r,0,t),r}function D0(e,t){let r,o,i,n=0;for(r of e.lanes)n+=r.points.length;let a=new Float32Array(n*4),s=0;for(r of e.lanes)for(r.start=s/4,o=0;o<r.points.length;o++)i=r.points[o],a[s++]=i[0],a[s++]=i[1],a[s++]=i[2],a[s++]=r.lengths[o];e.gpu.points?.destroy(),e.gpu.points=ln(t,a),e.lanesDirty=!1}function G0(e){let{device:t}=w.get(e.layer);if(e.gpu?.device!==t){im(e);let c=new Float32Array(e.template.position.length+e.template.normal.length);c.set(e.template.position),c.set(e.template.normal,e.template.position.length),e.gpu={device:t,pipeline:t.createComputePipeline({layout:"auto",compute:{module:t.createShaderModule({code:e.shader}),entryPoint:"main"}}),params:t.createBuffer({size:16,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),template:ln(t,c)},e.lanesDirty=!0}let r,o,i;e.lanesDirty&&D0(e,t);let n=new Float32Array(e.trips.length*4),a=new Uint32Array(n.buffer);for(r=0;r<e.trips.length;r++)o=e.trips[r],a[r*4]=o.lane.start,a[r*4+1]=o.lane.points.length,n[r*4+2]=o.distance,n[r*4+3]=o.speed,e.mesh.extras.featureFaces[r].properties=o.properties;e.gpu.vehicles?.size>=n.byteLength?t.queue.writeBuffer(e.gpu.vehicles,0,n):(e.gpu.vehicles?.destroy(),e.gpu.vehicles=ln(t,n));let{position:s,normal:m}=e.mesh.geometry.attributes,f=[],p;for(i=0;i<6;i++)p=i===0?e.gpu.params:i===1?e.gpu.template:i===2?e.gpu.points:i===3?e.gpu.vehicles:i===4?s.buffer:m.buffer,f.push({binding:i,resource:{buffer:p}});e.gpu.bindGroup=t.createBindGroup({layout:e.gpu.pipeline.getBindGroupLayout(0),entries:f})}function U0(e,t){return t?e.loaded?`${e.trips.length} ${e.vehicle==="boat"?"boats":e.vehicle}`:`${e.vehicle}: loading\u2026`:`${e.vehicle}: select a valid simulation date`}function N0(e,t,r,o){let i;try{o?e.trips=_0(t,e.lanes,e.velocity):e.trips.length=0,i=U0(e,o)}catch(f){am(e,f);return}e.rebasedAt=r,e.nextCheck=r+1e3;let n="",a;for(a of e.trips)n+=`${n?",":""}${a.id}`;let s=e.outline&&!e.route&&e.lanes.length,m=n!==e.tripsKey||!!s;return s&&R0(e),n!==e.tripsKey&&(I0(e),e.tripsKey=n),e.mesh&&G0(e),e.error||(e.status.textContent!==i&&(e.status.textContent=i),e.status.removeAttribute("role")),m}function F0(e,t){let{device:r}=e.gpu;e.paramFloats[0]=e.elapsed=t,e.paramFloats[1]=e.side,e.paramInts[2]=e.vertices,e.paramInts[3]=e.trips.length*e.vertices,r.queue.writeBuffer(e.gpu.params,0,e.params);let o=r.createCommandEncoder(),i=o.beginComputePass();i.setPipeline(e.gpu.pipeline),i.setBindGroup(0,e.gpu.bindGroup),i.dispatchWorkgroups(e.trips.length),i.end(),r.queue.submit([o.finish()]),e.stale=!0}function j0(e){e.litAt=performance.now();let t=[],r=e.position||={},o,i,n,a,s,m,f,p,c,l;for(o of e.trips){({x:i,y:n,z:a,dx:s,dz:m}=Go(e,o,r));for(l of e.lights)[f,p,c]=l.position,t.push({...l,position:[i-f*m-c*s,n+p,a+f*s-c*m]})}e.mesh.extras.lights=t}function W0(e,t,r){e.mesh&&(F0(e,(t-e.rebasedAt)/1e3),e.lights&&(!r||!(performance.now()-e.litAt<100))&&j0(e))}function $0(e){if(e.frame=void 0,!e.ready||!e.layer._map)return;if(!w.get(e.layer)){e.frame=requestAnimationFrame(e.tick);return}e.mesh&&!(e.mesh.geometry.attributes.position.buffer.usage&GPUBufferUsage.STORAGE)&&(e.tripsKey=null,e.nextCheck=-1/0);let{live:t,time:r}=nm(e),o=r?.getTime(),i=Number.isFinite(o),n=!1;(!t||!i||!(o>=e.rebasedAt&&o<e.nextCheck))&&(n=N0(e,r,o,i),n===void 0)||(W0(e,o,t),(e.mesh||n)&&E(e.layer),t&&i&&(e.frame=requestAnimationFrame(e.tick)))}async function V0(e,t,r){let o=new URL(e.url,document.baseURI).href;if(/\.m?js(?:[?#]|$)/i.test(e.url))return(await import(o)).default(t,e.layer,r);if(!e.file){let i=await fetch(o,{signal:r});if(!i.ok)throw new Error(`HTTP ${i.status}`);e.file=await i.json()}return e.file}var Z0=Object.freeze([]);function q0({features:e=Z0}){let t=[],r,o,i,n,a,s,m,f;for({geometry:r,properties:o}of e)if(!(r?.type!=="LineString"&&r?.type!=="MultiLineString"))for(i=r.type==="MultiLineString"?r.coordinates:null,f=0;f<(i?i.length:1);f++){n=i?i[f]:r.coordinates,a=[];for([s,m]of n)a.push([m,s]);t.push({latlngs:a,properties:o??{},elevation:o?.elevation})}return t}$();L();function H0(e){let t=me.get(e);return Te.get(t)&&t}function fm(e){let{layer:t,lanes:r}=e,o=H0(t._map),i=M.get(t).position[1],n,a,s;for(n of r)for(a=0;a<n.points.length;a++)s=o&&(n.elevation??xe(t._map,n.latlngs[a])),n.points[a][2]=Number.isFinite(s)&&Number.isFinite(i)?s-i:0;e.lanesDirty=!0,e.nextCheck=-1/0}function Y0(e){let{layer:t,lanes:r}=e,o=t._map.options.crs,i=o.project(D.get(t)),n=Math.cos(D.get(t).lat*B),a,s,m,f,p;for(a of r){a.points=[];for([s,m]of a.latlngs)f=o.project(new d.LatLng(s,m)),a.points.push([(f.x-i.x)*n,-(f.y-i.y)*n,0]);for(a.lengths=[0],p=1;p<a.points.length;p++)a.lengths.push(a.lengths[p-1]+Math.hypot(a.points[p][0]-a.points[p-1][0],a.points[p][1]-a.points[p-1][1]));a.length=a.lengths.at(-1)}fm(e),ir(e,e.route),e.route=null,e.tripsKey=null}function X0(e,t,r){if(!(t.aborted||!e.layer._map)){if(e.error=null,r===e.loaded){e.nextCheck=-1/0,e.frame||e.tick();return}e.loaded=r,e.lanes=q0(r),Y0(e),e.frame||e.tick()}}function J0(e,t,r){!t.aborted&&r.name!=="AbortError"&&am(e,r)}function K0(e){let{time:t}=nm(e);if(!Number.isFinite(t?.getTime()))return;e.request?.abort();let{signal:r}=e.request=new AbortController;V0(e,t,r).then(X0.bind(null,e,r),J0.bind(null,e,r))}function Q0(e,t){t?.layer&&!_t.get(t.layer)?.time||(cancelAnimationFrame(e.frame),K0(e),e.tick())}function ev(e){e.lanes.length&&(fm(e),ir(e,e.route),e.route=null,e.mesh&&mm(e),e.frame||e.tick())}function tv(e,{url:t,vehicle:r="car",side:o,outline:i,speed:n=8,...a}=em){let{model:s,lights:m,side:f}=L0[r];o??=f,At(e,{tooltip:M0,nightLight:!!m,...a});let p=d.DomUtil.create("small","traffic-status");p.style.cssText="flex:0 1 auto;padding:1px 5px;border-radius:3px;background:#00000008;color:#555;",p.title=r,p.textContent=`${r}: loading\u2026`;let c=ci(s(0)),l=c.position.length,u=l/3,h=new ArrayBuffer(16),x=new Float32Array(h),g=new Uint32Array(h),y={layer:e,url:t,model:s,lights:m,side:o,outline:i,velocity:n,vehicle:r,status:p,template:c,stride:l,vertices:u,params:h,paramFloats:x,paramInts:g,ready:!1,frame:void 0,request:void 0,lanes:[],tripsKey:void 0,mesh:void 0,route:void 0,litAt:-1/0,trips:[],rebasedAt:0,nextCheck:-1/0,elapsed:0,gpu:null,lanesDirty:!0,stale:!1,loaded:void 0,file:void 0};y.shader=b0,y.tick=$0.bind(null,y),y.update=Q0.bind(null,y),y.terrain=ev.bind(null,y),Tt.set(e,y),e.on("ready",P0.bind(null,y)),e.on("add",B0.bind(null,y)),e.on("remove",T0.bind(null,y))}function rv(e){return e.header}function Zf(e,t,r,o,i){return ii(e.layer._map||Ns.get(e.layer),e.workerUrl,{type:"cog",url:e.url,asset:e.asset,z:t,x:r,y:o},i)}async function ov(e,t){let r={layer:e,url:new URL(t.url,document.baseURI).href,asset:t.asset,workerUrl:t.workerUrl},o=await Zf(r);return{getHeader:rv.bind(null,{header:o}),getZxy:Zf.bind(null,r)}}function iv(e,t){Qs(e,{ariaLabel:"COG raster",...t,archive:t.archive||ov(e,t)})}function nv(e,t=yr){switch(e){case"raster":return t.asset!==void 0||/\.tiff?(?:[?#]|$)/i.test(t.url)?iv:Qs;case"terrain":return l0;case"traffic":return tv;default:return null}}function av(){let e=Ws.shift();return e.initialize=nv(e.type,e.settings),e.initialize||(e.error=new Error(`Unknown layer type: ${e.type}`)),e}function sv(e){let{layer:t,ready:r}=e;if(e.error)return He(t,e.error),Promise.reject(e.error);try{let o=t._map;return o?.removeLayer(t),z.delete(t),e.initialize(t,e.settings),o?.addLayer(t),re.get(t)===r?t:re.get(t)}catch(o){throw t.fire("error",{error:o}),o}}function pm(e=yr){if(Jt.has(this)||Jt.add(this),Object.getPrototypeOf(this)!==d.Layer.prototype||!e?.source){if(mt.value.initialize)return mt.value.initialize.apply(this,arguments);d.Util.setOptions(this,e);return}let{source:{type:t=/\.pmtiles(?:[?#]|$)|\.tiff?(?:[?#]|$)/i.test(e.source.url)?"raster":"vector",...r},...o}=e,i={...r,...o};if(d.Util.setOptions(this,o),Xt.set(this,t),t==="vector"){Jy(i)?t0(this,i):i.data!==void 0||i.style!==void 0&&!i.url||i.url&&!/\.(?:pmtiles|glb|gltf)(?:[?#]|$)/i.test(i.url)?Xy(this,i):At(this,i);return}z.set(this,"pending");let n={layer:this,type:t,settings:i,ready:null};Ws.push(n),$s.value=$s.value.catch(Xe).then(av);let a=$s.value.then(sv);re.set(this,a),n.ready=a,a.catch(Xe)}L();function mv(e,t){switch(z.get(e)){case"3d":return po(e,t);case"raster":return m0(e,t);case"terrain":return c0(e,t);case"time":return uh.call(e,t)}}function fv(e){let t=d.Util.stamp(e);return this._layers[t]?z.get(e)?(this._loaded&&mv(e,this),delete this._layers[t],this._loaded&&(this.fire("layerremove",{layer:e}),e.fire("remove")),e._map=e._mapToAdd=null,this):dn.value.call(this,e):this}J();function pv(){return _(this)}Z();function cv(){return k(this)}ji();function lv(e,t){return Ht(this,e,t)}qo();function uv(e,t){return dt(this,e,t)}function dv(e){return qs(this,e)}L();L();var cm=new WeakMap;var lm=new WeakMap;var um=new WeakMap;function hv(e){return Do(this),this._parts=this._rings,cm.get(this).call(this,e)}function gv(){return this._map&&Do(this),lm.get(this).call(this)}function yv(){um.get(this).call(this),this._container.remove()}var nr=new Map;var Ut={value:null};function xv(e){nr.delete(e),Fr.set(e,null),!nr.size&&Ut.value!==null&&(cancelAnimationFrame(Ut.value),Ut.value=null)}function vv(){Ut.value=null;let e=[...nr],t,r;for([t,r]of e)nr.get(t)===r&&(nr.delete(t),Fr.set(t,null),dm.call(t))}function wv(e){yi.set(e,(yi.get(e)||0)+1),nr.set(e,yi.get(e)),Ut.value===null&&(Ut.value=requestAnimationFrame(vv)),Fr.set(e,Ut.value)}function dm(){if(!this._map)return;let e=this,t=Date.now(),r=!1,o=!1,i,n;for(i in this._tiles)Object.hasOwn(this._tiles,i)&&(n=this._tiles[i],!(!n.current||!n.loaded)&&(n._gpuOpacity=this._map._fadeAnimated?Math.min(1,(t-n.loaded)/200):1,n._gpuOpacity<1?r=!0:n.active||(this._onOpaqueTile(n),n.active=!0,o=!0)));o&&!this._noPrune&&this._pruneTiles(),Ct(this),xv(e),r&&wv(e)}function Lv(){return Ct(this),this}function bv(){this instanceof d.Polyline||this instanceof d.CircleMarker?(this.beforeAdd=this._updateBounds=Xe,this.redraw=Lv,z.set(this,"path"),this instanceof d.Polyline&&(cm.set(this,this.closestLayerPoint),this.closestLayerPoint=hv),this instanceof d.Circle&&(lm.set(this,this.getBounds),this.getBounds=gv)):this instanceof d.GridLayer?(um.set(this,this._initContainer),this._initContainer=yv,this._updateOpacity=dm):this instanceof d.ImageOverlay&&!(this instanceof d.VideoOverlay)&&!(this instanceof d.SVGOverlay)&&(z.set(this,"image"),this._reset=Ct)}function qf(){let e=this._initHooksCalled;d.version.startsWith("2.")||mt.value.callInitHooks.call(this),(d.version.startsWith("2.")||!e)&&(Jt.add(this),bv.call(this))}L();var le=d?.Layer;function lo(e){let t=Reflect.construct(le,[],new.target);return pm.call(t,e),t.callInitHooks(),t}L();function Mv(){return le.addInitHook.apply(this===d.Layer?le:this,arguments),this}L();function Bv(e){return le.mergeOptions.call(this===d.Layer?le:this,e),this}mt.value=Object.defineProperties({},Object.getOwnPropertyDescriptors(le.prototype));mt.value._layerAdd=le.prototype._layerAdd;mt.value.callInitHooks=le.prototype.callInitHooks;d.version.startsWith("2.")?(Object.setPrototypeOf(lo,le),lo.prototype=le.prototype,lo.initHooks=!0,lo.addInitHook=Mv,lo.mergeOptions=Bv,d.Layer=lo,le.prototype.constructor=d.Layer,le.addInitHook(qf)):(le.prototype.initialize=pm,le.prototype.callInitHooks=qf);Object.assign(le.prototype,{_layerAdd:Yy});dn.value=d.Map.prototype.removeLayer;Object.assign(d.Map.prototype,{removeLayer:fv,getPitch:pv,getBearing:cv,setPitch:lv,setBearing:uv});Object.assign(d.Marker.prototype,{setRotation:dv});})();
|
|
5
7
|
//# sourceMappingURL=leaflet-city-mapper.js.map
|