leaflet-city-mapper 0.0.6 → 0.0.7
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 +10 -5
- package/dist/leaflet-city-mapper-src.js +7059 -6566
- package/dist/leaflet-city-mapper-src.js.map +4 -4
- package/dist/leaflet-city-mapper-worker-src.js +2766 -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.js +1 -1
- package/package.json +1 -1
- package/src/camera/setBearing.js +5 -0
- package/src/camera/setPitch.js +5 -0
- package/src/cog/initCog.js +2 -2
- package/src/core/gridlayerGetTiledPixelBounds.js +37 -4
- package/src/core/markerSetPos.js +1 -1
- package/src/core/popupGetEvents.js +1 -1
- package/src/core/popupUpdatePosition.js +8 -8
- package/src/core/tooltipGetEvents.js +1 -1
- package/src/core/tooltipSetPosition.js +2 -2
- package/src/geometry/appendNativeTriangle.js +2 -2
- 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/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/mountRenderer.js +4 -11
- package/src/gpu/releaseRenderer.js +1 -0
- package/src/index.js +6 -12
- 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 +30 -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/nativeVectorGeometry.js +23 -0
- package/src/native/orderNativeGridLayer.js +14 -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/syncGridLayer.js +48 -3
- package/src/native/syncNativeStrokeAnchors.js +12 -0
- package/src/native/syncNativeStrokeZoom.js +29 -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/drawSceneMeshes.js +3 -1
- package/src/rendering/nativeStrokeExpansion.js +4 -0
- package/src/rendering/prepareMeshUniforms.js +2 -0
- package/src/rendering/resizeRenderer.js +9 -0
- package/src/scene/initializerFor.js +3 -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/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/readyVectorTiles.js +10 -0
- package/src/sources/sourceAreaContext.js +1 -6
- package/src/sunlight/createSun.js +0 -1
- 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/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/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 +43 -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/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 +26 -0
- package/src/vector-tiles/vectorLabelIcon.js +30 -0
- package/src/vector-tiles/vectorLabelProperty.js +3 -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/weakmaps/nativeProgramsByRenderer.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 +21 -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/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 ov=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 iv=(e,t)=>{for(var r in t)ov(e,r,{get:t[r],enumerable:!0})};var d,L=b(()=>{d=globalThis.L});var B,$=b(()=>{B=Math.PI/180});var et,po=b(()=>{et=180/Math.PI});var vn,om=b(()=>{vn=new WeakMap});function _(e){return vn.get(e)??0}var J=b(()=>{om()});var wn,im=b(()=>{wn=new WeakMap});function k(e){return wn.get(e)??0}var Z=b(()=>{im()});var Ro,ua=b(()=>{Ro=Object.freeze({})});var He,ha=b(()=>{He=new WeakMap});function ga(){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&&!He.get(this)&&(He.set(this,d.DomUtil.create("div","leaflet-pitch-sky",this.getContainer())),He.get(this).setAttribute("aria-hidden","true"),He.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))"),He.get(this)&&(He.get(this).style.inset=t>Math.PI/2?"auto 0 0":"0 0 auto",He.get(this).style.height=`${Math.max(0,Math.ceil(i))}px`,He.get(this).style.display=i>0?"":"none")}var _m=b(()=>{ha();L();$();J()});function Ne(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 vn.set(e,Math.max(0,Math.min(e.options.maxPitch,t))),wn.set(e,(r%360+360)%360),e._loaded&&(ga.call(e),i!==k(e)&&e.fire("rotate",{bearing:k(e)}),o!==_(e)&&e.fire("pitch",{pitch:_(e)})),e}var dr=b(()=>{im();om();J();Z();_m()});var $t,ya=b(()=>{$t=new WeakMap});var Oo,xa=b(()=>{Oo=new WeakMap});var gr,va=b(()=>{gr=new Map});var Mt,wa=b(()=>{Mt={value:null}});function Do(e){gr.delete(e),$t.set(e,null),Oo.set(e,null),!gr.size&&Mt.value!==null&&(cancelAnimationFrame(Mt.value),Mt.value=null)}var La=b(()=>{ya();xa();va();wa()});var $r,Ma=b(()=>{$r=new WeakMap});var Io,Em=b(()=>{Io=new WeakMap});var Ei,zm=b(()=>{Ei=new WeakMap});var yr,zi=b(()=>{yr=new WeakMap});var xr,Ai=b(()=>{xr=new WeakMap});var Am,ou=b(()=>{Am={value:void 0}});var Rm,iu=b(()=>{Rm={value:void 0}});var Om,nu=b(()=>{Om={value:void 0}});var Dm,au=b(()=>{Dm={value:void 0}});var Ba,su=b(()=>{Ba={value:void 0}});var Bt,Go=b(()=>{Bt=new WeakMap});var Vr,Ta=b(()=>{Vr=new Set});var Ri,Im=b(()=>{Ri=Object.freeze({capture:!0,passive:!1})});function Gm(){this._map.fire("cameratouchchange")}var mu=b(()=>{});var Uo,Pa=b(()=>{Uo=Object.freeze([.8,.5])});var fu,pu=b(()=>{fu=Object.freeze([.8,0])});var Sa,Um=b(()=>{Sa=Object.freeze({preventScroll:!0})});var ka,Nm=b(()=>{ka=Object.freeze({animate:!0})});function cu(e){Mt.value=null;let t=[...gr];gr.clear();let r,o,i,n,a;for([o,i]of t)if(Oo.set(o,null),$t.get(o)===i){n=i.duration?Math.min(1,(e-i.start)/(i.duration*1e3)):1,a=1-(1-n)**3;try{Ne(o,i.fromPitch+(Math.max(0,Math.min(o.options.maxPitch,i.pitch))-i.fromPitch)*a,i.fromBearing+i.delta*a),n<1&&$t.get(o)===i?Ca(o,i):$t.get(o)===i&&$t.set(o,null)}catch(s){r||=s}}if(r)throw r}var lu=b(()=>{ya();xa();wa();va();dr();Fm()});function Ca(e,t){gr.set(e,t),Mt.value===null&&(Mt.value=requestAnimationFrame(cu)),Oo.set(e,Mt.value)}var Fm=b(()=>{xa();va();wa();lu()});function No(e,t,r,o=Ro){if(Do(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 Ne(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 $t.set(e,f),Ca(e,f),e}var _a=b(()=>{ya();ua();dr();J();Z();La();Fm()});function uu(e,t=ka){return No(e,0,0,t)}var du=b(()=>{Nm();_a()});function lt(e,t,r){return No(e,_(e),t,r)}var Fo=b(()=>{_a();J()});function hu(e,t=ka){return lt(e,0,t)}var gu=b(()=>{Nm();Fo()});function yu(e){let t=this._rotateControl,r=t._map;e.preventDefault(),t.options.visualizePitch?uu(r):hu(r),e.detail&&r.getContainer().focus(Sa)}var xu=b(()=>{Um();du();gu()});function Vt(e,t,r){return No(e,t,k(e),r)}var Oi=b(()=>{_a();Z()});function vu(e){let t=this._rotateControl,r=t._map,o=e.shiftKey?15:5;if(e.key==="ArrowLeft")lt(r,k(r)-o);else if(e.key==="ArrowRight")lt(r,k(r)+o);else if(e.key==="ArrowUp"&&t.options.visualizePitch)Vt(r,_(r)+o);else if(e.key==="ArrowDown"&&t.options.visualizePitch)Vt(r,_(r)-o);else if(e.key==="Home"||e.key===" ")this.click();else return;e.preventDefault(),e.stopPropagation()}var wu=b(()=>{Fo();Z();Oi();J()});function Ea(){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 Wm=b(()=>{$();J();Z()});var Fe,vr=b(()=>{Fe={value:new WeakMap}});var Zr,za=b(()=>{Zr={value:new Set}});function Aa(e){return e.closest?.('input,textarea,select,[contenteditable="true"]')}var jm=b(()=>{});function Ra(e){let t=Fe.value.get(this);if(t.drag||!t.accept(e)||Aa(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?.(Sa),t.element.setPointerCapture(e.pointerId),t.element.style.cursor="grabbing"}var $m=b(()=>{vr();Um();jm()});function Oa(e){return Do(e),e}var Vm=b(()=>{La()});function Da(e){let t=Fe.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;Oa(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))*et}else i*=e.clientY<t.drag.cy?1:-1;Ne(t.map,_(t.map)-o*t.sensitivity[1],k(t.map)+i),t.drag.x=e.clientX,t.drag.y=e.clientY}var Zm=b(()=>{po();vr();Vm();dr();J();Z()});function Wo(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 Ia=b(()=>{});function wr(e){Wo(Fe.value.get(this),e)}var qm=b(()=>{vr();Ia()});function Ga(e){let t=Fe.value.get(this);t.moved&&(e.preventDefault(),e.stopPropagation(),t.moved=!1)}var Hm=b(()=>{vr()});function Ua(e){let t=Fe.value.get(this);!t.drag&&!t.moved||(e.preventDefault(),e.stopPropagation())}var Ym=b(()=>{vr()});function Na(){let e;for(e of Zr.value)Wo(e)}var Xm=b(()=>{za();Ia()});function Fa(e,t,r,o=Uo,i=!1){let n={map:e,element:t,accept:r,sensitivity:o,orbit:i,drag:null,moved:!1};return Fe.value.set(t,n),Zr.value.add(n),t.addEventListener("pointerdown",Ra,!0),t.addEventListener("pointermove",Da),t.addEventListener("pointerup",wr),t.addEventListener("pointercancel",wr),t.addEventListener("lostpointercapture",wr),t.addEventListener("click",Ga,!0),t.addEventListener("contextmenu",Ua),window.addEventListener("blur",Na),n}var Jm=b(()=>{Pa();vr();za();$m();Zm();qm();Hm();Ym();Xm()});function Lu(e){return e.button===0}var bu=b(()=>{});function Mu(){Ea.call(this._rotateControl)}var Bu=b(()=>{Wm()});function Tu(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=yu,r.onkeydown=vu,this._refresh=Ea,e.on("rotate pitch",this._refresh,this),this._refresh(),this._dragState=Fa(e,r,Lu,this.options.visualizePitch?Uo:fu),r.addEventListener("focusout",Mu),d.DomEvent.on(r,"dblclick contextmenu",d.DomEvent.stop),d.DomEvent.disableClickPropagation(t),d.DomEvent.disableScrollPropagation(t),t}var Pu=b(()=>{L();Pa();pu();xu();wu();Wm();Jm();bu();Bu()});function Su(e){Wo(e);let{element:t}=e;t.removeEventListener("pointerdown",Ra,!0),t.removeEventListener("pointermove",Da),t.removeEventListener("pointerup",wr),t.removeEventListener("pointercancel",wr),t.removeEventListener("lostpointercapture",wr),t.removeEventListener("click",Ga,!0),t.removeEventListener("contextmenu",Ua),Fe.value.delete(t),Zr.value.delete(e),Zr.value.size||window.removeEventListener("blur",Na)}var ku=b(()=>{vr();za();Ia();$m();Zm();qm();Hm();Ym();Xm()});function Wa(){Su(this._dragState)}var Km=b(()=>{ku()});function Cu(e){e.off("rotate pitch",this._refresh,this),Wa.call(this)}var _u=b(()=>{Km()});function Eu(e){return new d.Control.Rotate(e)}var zu=b(()=>{L()});function Au(e){let t=this._cameraShiftRotate;!e.shiftKey||Aa(e.target)||e.target.closest(".leaflet-control")||(e.preventDefault(),e.stopImmediatePropagation(),lt(t._map,k(t._map)+Math.sign(e.deltaY)*5))}var Ru=b(()=>{Fo();Z();jm()});function Ou(){let e=this._map.getContainer();e._cameraShiftRotate=this,this._wheel=Au,e.addEventListener("wheel",this._wheel,Ri)}var Du=b(()=>{Im();Ru()});function Iu(){let e=this._map.getContainer();e.removeEventListener("wheel",this._wheel,!0),delete e._cameraShiftRotate}var Gu=b(()=>{});function Uu(e){return!e.target.closest(".leaflet-control,.leaflet-marker-icon,.leaflet-popup")&&(e.button===2||e.button===0&&e.ctrlKey)}var Nu=b(()=>{});function Fu(){this._dragState=Fa(this._map,this._map.getContainer(),Uu,Uo,!0)}var Wu=b(()=>{Pa();Jm();Nu()});function ju(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)&<(t._map,r-o)}var $u=b(()=>{Fo()});function Qm(e,t){e.disable(),e._map.fire("error",{error:t})}var Vu=b(()=>{});function Zu([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 Qm(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){Qm(r,i)}}}var qu=b(()=>{Vu()});function Hu(){this._compassGeneration=this._generation=(this._generation||0)+1,this._orientation={handler:this,handleEvent:ju};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(Zu)}var Yu=b(()=>{$u();qu()});function Xu(){this._generation++,window.removeEventListener("deviceorientation",this._orientation),window.removeEventListener("deviceorientationabsolute",this._orientation)}var Ju=b(()=>{});function Ku(e){e[0]?.target._containerResizeMap.invalidateSize()}var Qu=b(()=>{});function ed(){let e=this._map.getContainer();e._containerResizeMap=this._map,this._observer=new ResizeObserver(Ku),this._observer.observe(e)}var td=b(()=>{Qu()});function rd(){let e=this._map.getContainer();this._observer.disconnect(),delete e._containerResizeMap}var od=b(()=>{});function ja(e){let t=Bt.get(this),{map:r,container:o}=t;if(t.touch||e.touches.length!==2||e.target.closest(".leaflet-control")||!xr.get(r).enabled()&&!yr.get(r).enabled())return;let[i,n]=e.touches;if(Math.hypot(n.clientX-i.clientX,n.clientY-i.clientY)<1)return;Oa(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 ef=b(()=>{zi();Ai();L();Go();Vm();Z();J()});function $a(e){let t=Bt.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))*et;Ne(r,yr.get(r).enabled()?i.pitch-(f.y-i.middle.y)*.25:i.pitch,xr.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 tf=b(()=>{zi();Ai();po();Go();dr()});function Lr(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 Di=b(()=>{});function jo(e){Lr(Bt.get(this),e)}var rf=b(()=>{Go();Di()});function Ii(){let e=$r.get(this),{map:t,container:r}=e,o=xr.get(t).enabled()||yr.get(t).enabled();o&&e.nativeZoom===void 0?(e.nativeZoom=t.touchZoom?.enabled(),t.touchZoom?.disable()):!o&&e.nativeZoom!==void 0&&(Lr(e),e.nativeZoom&&r._leaflet_id&&t.touchZoom.enable(),e.nativeZoom=void 0)}var of=b(()=>{Ma();zi();Ai();Di()});function Va(){let e;for(e of Vr)Lr(e)}var nf=b(()=>{Ta();Di()});function id(){let e=$r.get(this);if(!e)return;let{container:t,map:r}=e;Lr(e),t.removeEventListener("touchstart",ja,!0),t.removeEventListener("touchmove",$a,!0),t.removeEventListener("touchend",jo,!0),t.removeEventListener("touchcancel",jo,!0),Vr.delete(e),Vr.size||window.removeEventListener("blur",Va),r.off("cameratouchchange",Ii,r),Ei.get(r)?.remove(),Bt.delete(t),$r.delete(r)}var nd=b(()=>{Ma();zm();Ta();Go();Di();ef();tf();rf();nf();of()});function qr(e,t,r){let o=Io.get(e);o||Io.set(e,o=new Map);let i=new r(e);o.set(t,i),e._handlers.push(i),e.options[t]&&i.enable()}var ad=b(()=>{Em()});var sd={};iv(sd,{cameraControls:()=>nv});function nv(e){if(qr(e,"trackContainerMutation",Rm.value),!e.options.rotate)return;qr(e,"shiftKeyRotate",Dm.value),qr(e,"pitchDrag",Om.value),qr(e,"compassBearing",Am.value),qr(e,"touchRotate",Ba.value),qr(e,"touchPitch",Ba.value),xr.set(e,Io.get(e).get("touchRotate")),yr.set(e,Io.get(e).get("touchPitch"));let t=e.getContainer(),r={map:e,container:t,touch:null,nativeZoom:void 0};$r.set(e,r),Bt.set(t,r),Vr.add(r),t.addEventListener("touchstart",ja,Ri),t.addEventListener("touchmove",$a,Ri),t.addEventListener("touchend",jo,!0),t.addEventListener("touchcancel",jo,!0),window.addEventListener("blur",Va),e.on("cameratouchchange",Ii,e),Ii.call(e),e.options.rotateControl&&(Ei.set(e,new d.Control.Rotate(typeof e.options.rotateControl=="object"?e.options.rotateControl:Ro)),Ei.get(e).addTo(e)),e.once("unload",id,e)}var md=b(()=>{Ma();Em();zm();zi();Ai();L();ou();iu();nu();au();su();Go();Ta();Im();ua();mu();Pu();_u();zu();Du();Gu();Wu();Km();Yu();Ju();td();od();ef();tf();rf();of();nd();nf();ad();Am.value=d.Handler.extend({addHooks:Hu,removeHooks:Xu});Rm.value=d.Handler.extend({addHooks:ed,removeHooks:rd});Om.value=d.Handler.extend({addHooks:Fu,removeHooks:Wa});Dm.value=d.Handler.extend({addHooks:Ou,removeHooks:Iu});Ba.value=d.Handler.extend({addHooks:Gm,removeHooks:Gm});d.Control.Rotate=d.Control.extend({options:{position:"topleft",closeOnZeroBearing:!0,visualizePitch:!0},onAdd:Tu,onRemove:Cu});d.control&&(d.control.rotate=Eu)});L();var Ir={value:void 0};var sn={value:void 0};var mn={value:void 0};L();var W={value:void 0};var Qe={value:void 0};var fn={value:void 0};var pn={value:void 0};var cn={value:void 0};var ln={value:void 0};var un={value:void 0};var dn={value:void 0};var hn={value:void 0};var ue=new WeakMap;var re=new WeakMap;var so=new WeakMap;var rr=new WeakMap;L();var O=new WeakMap;var yt=new WeakMap;function yi(e){let t=yt.get(e.currentTarget);if(!t)return;let r;for(r of t)De(r)}function xi(e){let t=yt.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 gn(e,t){let r=yt.get(e);r&&(r.delete(t),r.size||yt.delete(e))}function Ef(e,t){let r=yt.get(e);r||yt.set(e,r=new Set),r.add(t)}var st=new WeakMap;var It=new Set;var F=new WeakMap;var v=new WeakMap;var oe=new WeakMap;var Gt=new WeakMap;var or=new WeakMap;var mt=new WeakMap;var yn=[null];var mo=new WeakMap;var de=new WeakMap;var Ze=new WeakMap;var zf={subtree:!0};var se=new WeakMap;L();function xn(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 Af(e,t){let r=e._map,o=Ze.get(e),i,n;for(n of de.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)}),xn(r)}function Rf(e,t){let r=e._map,o,i,n;if(r._animatingZoom){de.get(e)||de.set(e,new Map);for(o of r.getContainer().getAnimations(zf))!(o instanceof CSSTransition)||o.transitionProperty!=="transform"||!o.effect.target.classList.contains("leaflet-zoom-animated")||de.get(e).has(o)||(i=o.currentTime||0,o.pause(),de.get(e).set(o,{start:t,time:i}));for([o,{start:n,time:i}]of de.get(e))o.currentTime=Math.min(o.effect.getComputedTiming().endTime,i+t-n);Ze.get(e)&&Af(e,t)}}var ir=new WeakMap;var vi={size:[null,null],format:"depth24plus",sampleCount:4,usage:null};var fo={size:[null,null],format:null,sampleCount:4,usage:null};async function Of(e,t,r){try{await r}catch(o){e.fire("error",{error:o})}t.destroy()}function j(e,t){Of(e,t,v.get(e).device.queue.onSubmittedWorkDone())}function Df(e,t){(!ir.get(e)||!ir.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&&j(e,v.get(e).depthTexture),v.get(e).colorTexture?.destroy(),v.get(e).colorTexture=v.get(e).device.createTexture((fo.size[0]=v.get(e).canvas.width,fo.size[1]=v.get(e).canvas.height,fo.format=v.get(e).format,fo.usage=GPUTextureUsage.RENDER_ATTACHMENT,fo)),v.get(e).depthTexture=v.get(e).device.createTexture((vi.size[0]=v.get(e).canvas.width,vi.size[1]=v.get(e).canvas.height,vi.usage=GPUTextureUsage.RENDER_ATTACHMENT,vi)),ir.set(e,t))}var ee=new WeakMap;var ie=new WeakMap;$();po();var If=2*Math.atan(1/3)*et;var tt=2*Math.PI*6378137;var me=new WeakMap;var Me=new WeakMap;var ft=new WeakMap;var Be=new WeakMap;var rt=new WeakMap;var ge=new WeakMap;L();function Gf(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 wi(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 Gr(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=wi(t,i,n),f=wi(t,i+1,n),p=wi(t,i,n+1),c=wi(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 nr(e,t){if(!e._map||!Be.get(e))return null;let r=t instanceof d.Point?t:e._map.project(t,ge.get(e));return Gf(r,ft.get(e))??Gr(r,rt.get(e))}function Uf(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,x,g;for(;r>=0;r--){i=e.map.project(t,r),n=2**r,a=Math.floor(i.x/256),s=Math.floor(i.y/256);for(h of Object.values(e.map._layers))if(x=ue.get(h),!(x?.disposed||x?.terrainStream!==e)&&(g=x.terrainRequests?.get(`${a}:${s}:${r}`),!(!g?.tiles||h._tiles[`${a}:${s}:${r}`]!==g.tile)&&(u=Gr(i,g.tiles),Number.isFinite(u))))return u;for(o.clear(),f=-1;f<=1;f++)for(m=-1;m<=1;m++)p=((a+m)%n+n)%n,c=Math.max(0,Math.min(n-1,s+f)),l=e.terrainCache.get(`${r}/${p}/${c}`),l?.data&&o.set(`${a+m}/${s+f}`,l.data);if(u=Gr(i,o),Number.isFinite(u))return u}return null}function ye(e,t){let r=me.get(e);if(r)return nr(r,t);let o=Me.get(e);return o&&Uf(o,t)}var Ut=new WeakMap;J();Z();var Nf=Math.PI/360;function co(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*Nf),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 w=e.projectionViewTransform;w.m11=y.m11,w.m12=y.m12,w.m13=y.m13,w.m14=y.m14,w.m21=y.m21,w.m22=y.m22,w.m23=y.m23,w.m24=y.m24,w.m31=y.m31,w.m32=y.m32,w.m33=y.m33,w.m34=y.m34,w.m41=y.m41,w.m42=y.m42,w.m43=y.m43,w.m44=y.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 ot(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 Ff(e,t){let r=e._map,o=se.get(r)?.zoom??r.getZoom(),i=r.options.crs.scale(o)/(tt*Math.cos(ie.get(e).lat*B)),n=ot(r,W.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=Ut.get(r)?.control?._walk,f=(ye(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=ee.get(e);u.fov=If,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,co(u)}var Ur=new WeakMap;function Wf(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}po();function jf(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]*et),t.rotateAxisAngleSelf(1,0,0,e.rotation[0]*et),t.rotateAxisAngleSelf(0,0,1,e.rotation[2]*et),t.scaleSelf(e.scale[0],e.scale[1],e.scale[2]),t}function Te(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=Wf(e,i),!i){for(n of e.children)Te(n);return}let a,s;e.matrix?a=e.matrix:a=jf(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)Te(n)}function Ce(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 $f(e){let t=e.program?.uniforms?.strokeScale?.value??1;return Math.max(0,t-1)*(e.geometry.nativeStrokeRadius||0)}function Vf(e,t,r,o,i){e.geometry.bounds||Ce(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+$f(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 nm(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),Vf(e,r,o,i,n));let s;for(s of e.children)nm(s,t,r,o,i,n,a)}function Zf(e,t,r){let i=ee.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=Ur.get(e);u||Ur.set(e,u=[]),u.length=0;let h=Gt.get(e);h||Gt.set(e,h=[]),h.length=0,r&&Te(oe.get(e)),nm(oe.get(e),t,i,a,s,u,h)}var A=new WeakMap;var D=new WeakMap;var K=new WeakMap;var Li=new WeakMap;var fe=new WeakMap;var _e=new WeakMap;L();var qf=[];$();var Hf=[];var Yf={x:0,y:0};var Xf={x:1,y:1};var Jf={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 lo={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 Kf={magFilter:"linear",minFilter:"linear"};function Qf(e){let t=e.device;if(!e.roofBlit){let r=t.createShaderModule(Jf);e.roofBlit={pipeline:t.createRenderPipeline((lo.vertex.module=r,lo.fragment.module=r,lo)),sampler:t.createSampler(Kf)},lo.vertex.module=null,lo.fragment.module=null}}var Ln={size:null,usage:null};var bn={colorAttachments:[{view:null,clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}]};var Mn={source:null};var Bn={texture:null};var Tn=[null,null];function ep(e,t){let r=t.texture;r.uploaded!==r.image&&(e.queue.copyExternalImageToTexture((Mn.source=t.image,Mn),(Bn.texture=r.texture,Bn),(Tn[0]=r.texture.width,Tn[1]=r.texture.height,Tn)),Mn.source=null,Bn.texture=null,r.uploaded=r.image)}var pt={layout:null,entries:[{binding:0,resource:null},{binding:1,resource:null},{binding:2,resource:{buffer:null,offset:null,size:4}}]};var Pn=[null];var Sn={value:new Float32Array(64)};function tp(e,t){return(e.layer.options.zIndex||0)-(t.layer.options.zIndex||0)||e.tile.coords.z-t.tile.coords.z}function rp(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;Sn.value.length<p&&(Sn.value=new Float32Array(p));let c=Sn.value,l=m.createBuffer((Ln.size=c.byteLength,Ln.usage=GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,Ln)),u=m.createCommandEncoder(),h=u.beginRenderPass((bn.colorAttachments[0].view=K.get(e).texture.texture.createView(),bn));bn.colorAttachments[0].view=null,h.setPipeline(s.roofBlit.pipeline),t.sort(tp);let x,g,y,w,S,T,P,R;for([x,{tile:g,layer:y}]of t.entries())({coords:w}=g),S=g.texture,ep(m,g),c[x*64]=y.options.opacity,T=256*f.getZoomScale(r,w.z),P=(w.x*T-o.x)*n/i.x,R=(w.y*T-o.y)*a/i.y,h.setViewport(P,R,Math.min(T*n/i.x,n-P),Math.min(T*a/i.y,a-R),0,1),h.setBindGroup(0,m.createBindGroup((pt.layout=s.roofBlit.pipeline.getBindGroupLayout(0),pt.entries[0].resource=S.texture.createView(),pt.entries[1].resource=s.roofBlit.sampler,pt.entries[2].resource.buffer=l,pt.entries[2].resource.offset=x*256,pt))),pt.layout=null,pt.entries[0].resource=null,pt.entries[1].resource=null,pt.entries[2].resource.buffer=null,h.draw(4);h.end(),m.queue.writeBuffer(l,0,c),m.queue.submit((Pn[0]=u.finish(),Pn)),Pn[0]=null,l.destroy()}function op(e,t){let r=-1/0,o,i;for(o of e)for(i of D.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 ip={size:[null,null],format:"rgba8unorm",usage:null};var np={addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"};function ap(e,t,r,o){let i=v.get(e),n=ip;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)&&(j(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(np),samplerOptions:{addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"},image:null,width:r,height:o,format:"rgba8unorm",srgb:!1,flipY:!1,uploaded:null}}function sp(e,t,r,o){let i=e._map,n=v.get(e),a=Hf;a.length=0;let s=op(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=Yf,g=Xf;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)),w=Math.max(1,Math.ceil(g.x*y)),S=Math.max(1,Math.ceil(g.y*y)),T=i.options.crs.scale(s)/(tt*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,ap(e,P,w,S),Qf(n);try{rp(e,a,s,x,g,w,S)}finally{a.length=0}}function mp(e,t,r){let o=qf;o.length=0;let i=!1,n;for(n of t)o.push(`${d.Util.stamp(n)}:${_e.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))&&sp(e,t,a,r)}function fp(e,t){let r=e._map,o=Li.get(e);o||Li.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))A.get(a)==="raster"&&D.get(a)&&a.options.opacity>0&&o.push(a);mp(e,o,t)}else K.get(e)&&(j(e,K.get(e).texture.texture),K.set(e,null));return o}function pp(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 cp(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)||pp(e,t)}var U=new WeakMap;var ar=new WeakMap;$();function lp(e,t,r){let o=t._map,i=e.geometry.bounds,n=e.worldMatrix,a=ar.get(r),s=o.project(ie.get(t),a),m=o.options.crs.scale(a)/(tt*Math.cos(ie.get(t).lat*B)),f=1/0,p=1/0,c=-1/0,l=-1/0,u,h,x,g,y,w,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,w=s.y+(n[2]*h+n[6]*x+n[10]*g+n[14])*m,f=Math.min(f,y),p=Math.min(p,w),c=Math.max(c,y),l=Math.max(l,w);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 up(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 dp(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=lp(e,t,n),!!a){o=!0,s=[a];for(m of D.get(n).values())if(!(!m.done&&!m.error)&&(s=up(s,m,ar.get(n)),!s.length))return!0}}return!o&&!i}function hp(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){Ut.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=dp(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 gp(e,t,r,o){let i=Ur.get(e),n=Gt.get(e),a=v.get(e),s=!1,m,f;for(m of i)hp(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(cp);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 kn={size:null,usage:null};function yp(e,t,r){let o=v.get(e);(!o.uniformBuffer||o.uniformBuffer.size<(t.length*2+r.length+1)*256)&&(o.uniformBuffer&&j(e,o.uniformBuffer),o.uniformBuffer=o.device.createBuffer((kn.size=Math.max(64,t.length*4+r.length*2)*256,kn.usage=GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,kn)),o.uniformData=new Float32Array(o.uniformBuffer.size/4))}var M=new WeakMap;var it={layout:null,entries:[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null},{binding:3,resource:{buffer:null}}]};function Cn(e){let t=v.get(e).sunlight;t.bindGroup=v.get(e).device.createBindGroup((it.layout=t.layout,it.entries[0].resource.buffer=t.buffer,it.entries[1].resource=t.texture.createView(),it.entries[2].resource=t.sampler,it.entries[3].resource.buffer=t.lights,it)),it.layout=null,it.entries[0].resource.buffer=null,it.entries[1].resource=null,it.entries[2].resource=null,it.entries[3].resource.buffer=null}function xp(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 vp(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?xp(e,t,u,a,s):a[u]++}function am(e,t,r,o,i,n,a){let s,m;for(s of e)for(m=0;m<s.length;m+=8)vp(s,m,t,r,o,i,n,a)}function wp(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);am(e,f,p,s,u,x);let y=0;for(n of x)y+=n;let w=(2+u*h+y*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]=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);am(e,f,p,s,u,g,m)}else m=new Float32Array(8);return{data:m,count:r}}var Lp=.03/(4*Math.PI);function bp(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*Lp;return r}function sm(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:bp(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{...wp(c,r),meshes:l}}var sr=[];function mm(e,t,r){if(!e.visible)return;e.extras?.lights&&(e.extras.dynamicLights?r:t).push(e);let o;for(o of e.children||sr)mm(o,t,r)}function Mp(e){let{device:t,sunlight:r}=v.get(e),o=[],i=[],n;for(n of F.get(e))!n.options.nightLight||!M.get(n).visible||mm(M.get(n),o,i);let a=t.limits.maxStorageBufferBindingSize,s=sm(o,r.staticLightGrid,a),m=sm(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&&(j(e,r.lights),r.lights=t.createBuffer({size:f,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST}),Cn(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 Bp(e,t,r,o){let i=v.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;yp(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 w=o?.tint;g[56]=w?w[0]:1,g[57]=w?w[1]:1,g[58]=w?w[2]:1,g[59]=0,y>0&&Mp(e),i.uniformSlot=1}var mr={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 fm=[null];var ve={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 Tp={color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}};function Pp(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((ve.layout=i.pipelineLayout,ve.vertex.module=i.vertex,ve.vertex.buffers=i.vertexBuffers,ve.fragment.module=i.fragment,ve.fragment.targets[0].format=e.format,ve.fragment.targets[0].blend=i.transparent?Tp:void 0,ve.fragment.targets[0].writeMask=GPUColorWrite.ALL,ve.primitive.cullMode=r,ve.primitive.frontFace=o,ve.depthStencil.depthWriteEnabled=i.depthWrite,ve.depthStencil.depthCompare=n,ve)),ve.layout=null,ve.vertex.module=null,ve.vertex.buffers=null,ve.fragment.module=null,i.pipelineCache.set(a,s)),s}function Sp(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 kp(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,Sp(e,t,n),i[n+40]=r.strokeScale?.value??1,i[n+41]=i[n+42]=i[n+43]=0,o}var Nr={source:null,flipY:null};var uo={texture:null};var ho=[null,null];function Cp(e,t){t.uploaded!==t.image&&(e.queue.copyExternalImageToTexture((Nr.source=t.image,Nr.flipY=!!t.flipY,Nr),(uo.texture=t.texture,uo),(ho[0]=t.image.width,ho[1]=t.image.height,ho)),Nr.source=null,uo.texture=null,t.uploaded=t.image)}var go={layout:null,entries:null};var _p=[];var _n={binding:0,resource:{buffer:null,size:176}};var En={binding:1,resource:{buffer:null,size:240}};var zn={binding:2,resource:null};var bi=[{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null}];var Mi=[{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null}];function Ep(e,t,r){let{program:o}=t,i=_p;i.length=0,_n.resource.buffer=e.uniformBuffer,En.resource.buffer=e.uniformBuffer,i.push(_n,En),o.terrain&&(zn.resource=o.terrain.texture.createView(),i.push(zn)),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],bi[a].binding=s.texture,bi[a].resource=m.texture.createView(),Mi[a].binding=s.sampler,Mi[a].resource=m.sampler,i.push(bi[a],Mi[a]),n[a]||=[],n[a][0]=m.texture,n[a][1]=m.sampler;for(t.bindGroup=e.device.createBindGroup((go.layout=o.bindGroupLayout,go.entries=i,go)),go.layout=null,go.entries=null,_n.resource.buffer=null,En.resource.buffer=null,zn.resource=null,a=0;a<r.length;a++)bi[a].resource=null,Mi[a].resource=null;i.length=0}function zp(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}`);Cp(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&&Ep(e,t,i)}function An(e,t,r,o,i){let{geometry:n}=t,a=v.get(e),{device:s}=a,m=Pp(a,t,o,i),f=kp(a,t);zp(a,t),r.setPipeline(m),r.setBindGroup(0,t.bindGroup,(fm[0]=f,fm)),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 Ap(e,t,r){let o=v.get(e),i=t.beginRenderPass((mr.colorAttachments[0].view=o.colorTexture.createView(),mr.colorAttachments[0].resolveTarget=o.context.getCurrentTexture().createView(),mr.depthStencilAttachment.view=o.depthTexture.createView(),mr));mr.colorAttachments[0].view=null,mr.colorAttachments[0].resolveTarget=null,mr.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?(An(e,n,i,"front",f),An(e,n,i,"back",f)):An(e,n,i,p.cullMode,f)}i.end()}var Rp=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0]);var Op=new Float32Array(20);function Dp(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 Ip(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(!Dp(o,a)){i=!1;break}}return i}var Gp={min:[0,0,0],max:[0,0,0]};var Up={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 Np=[0,0,0];var Fp=[0,0,0];function Wp(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 jp(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)&&Ce(i.geometry),n=i.geometry.bounds,a=i.worldMatrix,s=Wp(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 $p(e,t){let{min:r,max:o}=jp(e,Gp),i=Up;i.viewTransform||=new DOMMatrix,i.projectionTransform||=new DOMMatrix,i.projectionViewTransform||=new DOMMatrix;let n=Np,a=Fp,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,co(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]),w=new Float32Array(16);for(s=0;s<16;s+=4)w[s]=h[s]*x,w[s+1]=h[s+1]*g,w[s+2]=h[s+2]*y,w[s+3]=h[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 pm={entries:[{binding:0,visibility:null,buffer:{type:"uniform",hasDynamicOffset:!0}}]};var cm={entries:[{binding:0,visibility:null,buffer:{type:"uniform"}}]};var yo={layout:null,entries:[{binding:0,resource:{buffer:null}}]};var Rn={code:null};var xt={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 xo={bindGroupLayouts:[null,null]};var vo=Object.freeze({arrayStride:12,attributes:Object.freeze([Object.freeze({shaderLocation:0,offset:0,format:"float32x3"})])});var On=Object.freeze({arrayStride:16,stepMode:"instance",attributes:Object.freeze([Object.freeze({shaderLocation:4,offset:0,format:"float32x4"})])});var Vp=[vo,On];var Zp=[vo];function lm(e,t,r=!1){let o=r?"instancePipeline":"pipeline";if(!t[o]){t.meshLayout||(t.meshLayout=e.createBindGroupLayout((pm.entries[0].visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,pm)),t.depthLayout=e.createBindGroupLayout((cm.entries[0].visibility=GPUShaderStage.VERTEX,cm)),t.depthBindGroup=e.createBindGroup((yo.layout=t.depthLayout,yo.entries[0].resource.buffer=t.buffer,yo)),yo.layout=null,yo.entries[0].resource.buffer=null);let i=e.createShaderModule((Rn.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;}}`,Rn));Rn.code=null;let n=r?Vp:Zp;t[o]=e.createRenderPipeline((xt.layout=e.createPipelineLayout((xo.bindGroupLayouts[0]=t.meshLayout,xo.bindGroupLayouts[1]=t.depthLayout,xo)),xt.vertex.module=i,xt.vertex.buffers=n,xt.fragment.module=i,xt)),xo.bindGroupLayouts[0]=null,xo.bindGroupLayouts[1]=null,xt.layout=null,xt.vertex.module=null,xt.vertex.buffers=null,xt.fragment.module=null}}var Dn={colorAttachments:[],depthStencilAttachment:{view:null,depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}};var wo={layout:null,entries:[{binding:0,resource:{buffer:null,size:144}}]};var um=[null];function qp(e,t,r){let o=v.get(e),i=o.device,n=o.sunlight,a=t.beginRenderPass((Dn.depthStencilAttachment.view=n.texture.createView(),Dn));Dn.depthStencilAttachment.view=null;let s=n.pipeline;a.setPipeline(s),a.setBindGroup(1,n.depthBindGroup);let m,f,p,c,l,u,h;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((wo.layout=n.meshLayout,wo.entries[0].resource.buffer=o.uniformBuffer,wo)),wo.layout=null,wo.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,(um[0]=c,um)),a.setVertexBuffer(0,m.geometry.attributes.position.buffer),f&&a.setVertexBuffer(1,f.buffer),u=m.geometry.attributes.index,h=m.geometry.drawRange,u?(a.setIndexBuffer(u.buffer,u.indexFormat),a.drawIndexed(h.count,f?.count??1,h.start,0,0)):a.draw(h.count,f?.count??1,h.start,0)}a.end()}var Bi={size:[null,null],format:"depth32float",usage:null};function In(e,t){let r=v.get(e).device,o=v.get(e).sunlight;o.size!==t&&(o.texture&&j(e,o.texture),o.size=t,o.texture=r.createTexture((Bi.size[0]=t,Bi.size[1]=t,Bi.usage=GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC,Bi)),Cn(e))}function Hp(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,Rp),a.enabled=!1,a.cache=null;return}if(Ip(a,r,o))return;let s=Op;a.enabled=!0,In(e,Math.min(2048,n.limits.maxTextureDimension2D)),s.set($p(r,o)),s[16]=1,n.queue.writeBuffer(a.buffer,0,s),lm(n,a);let m;for(m of r)if(m.geometry.attributes.instanceOffset){lm(n,a,!0);break}qp(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 Gn(e){let t=st.get(e);It.delete(e),st.set(e,null),!It.size&&t!=null&&cancelAnimationFrame(t)}var Nt=new WeakMap;var Ti=new WeakMap;var Pi=new WeakMap;var pe=new WeakMap;var Un=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 Lo(e,t){Un.get(e)?.abort();let r=D.get(e).get(t);r&&(q(r,null),E(e),r.texture!==t.texture&&j(e,r.texture.texture),D.get(e).delete(t))}function bo(e,t){let r=`${t.coords.z}/${t.coords.x}/${t.coords.y}`;D.get(e).get(r)===t&&(D.get(e).delete(r),_e.set(e,(_e.get(e)||0)+1),t.request.abort(),pe.get(e)&&Lo(pe.get(e),t),t.mesh&&q(t.mesh,null),t.texture&&j(e,t.texture.texture),t.image?.close(),e.fire("tileunload",{tile:t,coords:t.coords}),E(e))}function Mo(e){let t=or.get(e),r=performance.now();if(Ti.get(e)===_e.get(e)&&Pi.get(e)===t&&r<Nt.get(e))return Number.isFinite(Nt.get(e));Ti.set(e,_e.get(e)),Pi.set(e,t),Nt.set(e,1/0);let o=[],i,n,a,s,m,f;for(i of t)n=D.get(e).get(i),n?.done&&r-n.loadedAt<250&&Nt.set(e,Math.min(Nt.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 D.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||bo(e,n)}return Number.isFinite(Nt.get(e))}L();function Bo(e){return ue.get(e.source)===e&&e.map.hasLayer(e.source)}L();var fr=Object.freeze([1,1,1]);var Fr=new WeakMap;L();function Ft(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+(Fr.get(i)||0):i.options.zIndex;t.renderOrder=a*1e6+(m||0)*1e3+s,t._nativeSource=i,t._nativeUsed=!0}var Yp=Object.freeze([0,2,1,1,2,3]);var dm=Object.freeze([0,0,1,0,0,1,1,1]);var Xp=Object.freeze({minFilter:"linear",magFilter:"linear"});function Ie(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 Kp(e,t,r,o,i,n,a){let s;try{if(s=await createImageBitmap(o),!Bo(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(m){e.failed=!0,e.source.fire("error",{error:m})}finally{s?.close()}}function Qp(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 Nn(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&&Ie(o,c),n.delete(t),j(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(Xp)},i.set(t,a),r instanceof HTMLCanvasElement?(a.pending=!0,Kp(e,t,a,r,p,m,f)):Qp(e,t,a,r,p,m,f)}return a.used=!0,a.uploaded===r?a:void 0}L();L();var To=Object.freeze({});var Fn={size:null,usage:null};var vt={value:0};function Ee(){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 Wn={code:null};var jn={code:null};var Po={bindGroupLayouts:[null,null]};var ec=" 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 tc=Object.freeze({arrayStride:12,attributes:Object.freeze([Object.freeze({shaderLocation:1,offset:0,format:"float32x3"})])});var rc=Object.freeze({arrayStride:12,attributes:Object.freeze([Object.freeze({shaderLocation:2,offset:0,format:"float32x3"})])});var oc=Object.freeze({arrayStride:8,attributes:Object.freeze([Object.freeze({shaderLocation:3,offset:0,format:"float32x2"})])});var $n={entries:null};var ic=[];var hm={binding:0,visibility:null,buffer:{type:"uniform",hasDynamicOffset:!0}};var gm={binding:1,visibility:null,buffer:{type:"uniform"}};var ym={binding:2,visibility:null,texture:{sampleType:"unfilterable-float",viewDimension:"2d"}};var nc=[{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 ac=[{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=ic;r.length=0,hm.visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,gm.visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,r.push(hm,gm),t.hasTerrain&&(ym.visibility=GPUShaderStage.VERTEX,r.push(ym));let o,i,n=0;for(o of t.bindings)i=nc[n],i.binding=o.texture,i.visibility=GPUShaderStage.FRAGMENT,r.push(i),i=ac[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 Vn(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 So(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 mc(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 fc(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 pc(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 cc(e,t,r,o,i,n){let a=e.instanced?" + input.instanceOffset.xyz":"",s=pc(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?fc(e):""} output.position = frame.projectionMatrix * viewPosition;return output;}`}function lc(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 uc(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"});`:`${lc(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 dc(e=To,t=!1,r=""){let o=!!e.baseTexture,i=!!e.metalTexture,n=!!e.emissiveTexture,a=!!e.occlusionTexture,s=!!(e.roofTexture||e.wallTexture);mc(e);let m=!!e.terrain,f=o||i||n||a||e.nightLight,p=cc(e,t,r,m,f,s),c=[],l=So(c,"baseTexture",o),u=So(c,"metalTexture",i),h=So(c,"emissiveTexture",n),x=So(c,"occlusionTexture",a),g=So(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);${uc(e,t,o,i,n,a,s)}}`;return{vertex:p,fragment:y,bindings:c,textured:f,hasTerrain:m}}async function hc(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 Ge(e,t=To){let r=dc(t,!!e.options.nightSparkle,t.terrain?ec:""),o=v.get(e).device.createShaderModule((Wn.code=r.vertex,Wn));Wn.code=null;let i=v.get(e).device.createShaderModule((jn.code=r.fragment,jn));jn.code=null,hc(e,[o.getCompilationInfo(),i.getCompilationInfo()]);let n=[vo,tc,t.vertexColors?rc:null,r.textured?oc:null];t.instanced&&n.push(On);let a=sc(v.get(e).device,r),s=v.get(e).device.createPipelineLayout((Po.bindGroupLayouts[0]=a,Po.bindGroupLayouts[1]=v.get(e).sunlight.layout,Po));Po.bindGroupLayouts[0]=null,Po.bindGroupLayouts[1]=null;let m=Vn(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 pr(e,t,r=To,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((Fn.size=Math.max(4,f.byteLength),Fn.usage=GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST|o,Fn)),n.queue.writeBuffer(c,0,f),a[s]={size:p,data:f,count:f.length/p,buffer:c};let l={...Ee(),device:n,geometry:{device:n,attributes:a,drawRange:{start:0,count:a.position.count}},program:i||Ge(e,{vertexColors:!0,doubleSided:!0,...r}),id:vt.value++,renderOrder:0,extras:{}};return q(l,M.get(e)),E(e),l}var xm=new WeakMap;function vm(e,t){let r=v.get(e),o=xm.get(r);o||(o=new Map,xm.set(r,o));let i=`${!!t.baseTexture}:${!!t.nativeStroke}:${!!t.depthWrite}`,n=o.get(i);return n||(n=Ge(e,{doubleSided:!0,...t}),o.set(i,n)),{...n,uniforms:Vn(t),_layerMaterial:t}}function yc(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&&Ie(f,h),h=pr(f,x,g,0,p instanceof d.GridLayer?(s?e.terrainRasterProgram:e.rasterProgram)||vm(f,g):vm(f,g)),p instanceof d.GridLayer&&(s?e.terrainRasterProgram||=h.program:e.rasterProgram||=h.program,h.texture=n),c.set(t,h),h}function xc(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 ko(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=yc(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&&xc(c),c.program.uniforms.strokeScale&&(c.program.uniforms.strokeScale.value=1),Ft(e,c,o,i),c}function Co(e,t,r,o,i){let n=Nn(e,t,r);if(!n)return;let a=Yp,s=[],m=[],f;for(f of a)s.push(...o[f]),m.push(dm[f*2],dm[f*2+1]);return ko(e,t,s,fr,i,n,m)}var I=new WeakMap;$();function Wt(e,t){let{map:r,backend:o}=e,i=r.options.crs,n=i.project(I.get(o)),a=i.project(t),s=Math.cos(I.get(o).lat*B);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(Wt(e,i));return r}async function vc(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 wc(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(vc(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 Lc(e,t,r,o,i){let n=Nn(e,t,r.el);if(!n)return;let{x:a,y:s,z:m}=r.coords,f=32,p=Wt(e,e.map.unproject([a*256,s*256],m)),c=Wt(e,e.map.unproject([(a+1)*256,(s+1)*256],m)),l=[],u=[],h=[],x=M.get(e.backend).position[1],g,y,w,S,T,P,R,Q,N,G;for(g=0;g<=f;g++)for(y=0;y<=f;y++){if(w=y/f,S=g/f,T=Gr({x:(a+w)*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])*w,T-x,p[2]+(c[2]-p[2])*S,w,S])}for(g=0;g<f;g++)for(y=0;y<f;y++){P=g*(f+1)+y,R=P+1,Q=P+f+1,N=Q+1;for(G of[P,Q,R,R,Q,N])u.push(l[G][0],l[G][1],l[G][2]),h.push(l[G][3],l[G][4])}let V=ko(e,t,u,fr,i,n,h,!0);return V._terrainRequest=o,V}function bc(e){let{source:t,textures:r,meshes:o}=e,i=Me.get(e.map);e.terrainStream!==i&&(e.terrainStream=i,e.terrainRequests=i?new Map:null);let n,a,s,m,f,p,c,l,u=!1;if(e.terrainRequests)for(n of e.terrainRequests.keys())t._tiles[n]||e.terrainRequests.delete(n);for(n in t._tiles)if(Object.hasOwn(t._tiles,n)){if(a=t._tiles[n],!a.loaded||a.el instanceof HTMLImageElement&&!a.el.naturalWidth){i&&(u=!0);continue}if(s=(t.options.opacity??1)*(a._gpuOpacity??1),m=r.get(n),f=o.get(n),e.terrainRequests){if(l=e.terrainRequests.get(n),(!l||l.tile!==a)&&(l={tile:a,stream:i},e.terrainRequests.set(n,l),wc(e,n,a,l)),!l.tiles){u=!0,f&&m?.image===a.el&&(m.used=!0,Ft(e,f,fr,s));continue}f&&f._terrainRequest===l&&m?.image===a.el&&m.url===(a.el.currentSrc||a.el.src)?(m.used=!0,Ft(e,f,fr,s)):f=Lc(e,n,a,l,s)}else f&&!f._terrainRequest&&m?.image===a.el&&m.url===(a.el.currentSrc||a.el.src)?(m.used=!0,Ft(e,f,fr,s)):([p,c]=t._tileCoordsToNwSe(a.coords),f=Co(e,n,a.el,Zn(e,new d.LatLngBounds(p,c)),s));f&&(f.renderOrder+=a.coords.z/100)}if(i&&(u||!Object.keys(t._tiles).length))for([n,f]of o)t._tiles[n]||!f._terrainRequest||(m=r.get(n),m&&(m.used=!0,f._nativeUsed=!0))}function Mc(e){let{source:t}=e;t._image?.complete&&t._image.naturalWidth&&Co(e,"image",t._image,Zn(e,t.getBounds()),t.options.opacity??1)}var Bc=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 Si(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 Tc(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 Pc(e,t,r){let{source:o,map:i,backend:n}=e,a=Wt(e,o.getLatLng());if(Me.get(i)){let gi=M.get(n),an=ye(i,o.getLatLng());Number.isFinite(an)&&(a[1]=(an-gi.position[1])/gi.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=Bc[h],f[x]=l[h],p[x]=u[h];Si(c,f,a[0],a[1],a[2],1),Si(c,p,c.x,c.y,c.z,c.w);let g=c.x,y=c.y,w=c.z,S=c.w;p.invertSelf(),f.invertSelf();let[T,P,R,Q]=Tc(e,t,r),N=(g/S+1)*s.x/2,G=(1-y/S)*s.y/2,V=N-R,le=G-Q,be=[],at,ke,gt,Ve,hi;for(h=0;h<4;h++)at=V+(h%2?T:0),ke=le+(h<2?0:P),gt=qn(o,at-N,ke-G),Ve=N+gt.x,hi=G+gt.y,Si(c,p,Ve/s.x*2-1,1-hi/s.y*2,w/S,1),Si(c,f,c.x/c.w,c.y/c.w,c.z/c.w,1),be.push([c.x,c.y,c.z]);return be}function Sc(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=Co(e,o,i,Pc(e,o,i),t.options.opacity??1),o==="shadow"&&n&&(n.renderOrder-=100*1e6))}function Hn(e){return e<=.0031308?e*12.92:1.055*e**(1/2.4)-.055}function Yn(e,t,r,o){let i=(e+t*12)%12;return r-o*Math.max(-1,Math.min(i-3,9-i,1))}function wt(e){if(e&&typeof e=="object"&&"h"in e){let n=e.s*Math.min(e.l,1-e.l);return{r:Hn(Yn(0,e.h,e.l,n)),g:Hn(Yn(8,e.h,e.l,n)),b:Hn(Yn(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 kc(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}=wt(t.options.color)),Ft(e,n,[s,m,f],t.options.opacity??1)}p=r.get("fill"),p&&({r:s,g:m,b:f}=wt(t.options.fillColor||t.options.color),Ft(e,p,[s,m,f],t.options.fillOpacity??1))}var _o=[];L();L();L();function Ue(e,t,r,o,i,n,a,s){return t.push(...e(r,n),...e(o,a),...e(i,s))}var ki=2*Math.PI;L();function wm(e,t,r,o,i){return new d.Point(e.x+t*Math.cos(i*ki/o),e.y+r*Math.sin(i*ki/o))}function Wr(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++)Ue(e,o,t,wm(t,r,i,n,a),wm(t,r,i,n,a+1),t,t,t)}function Xn(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)))),Ue(m,s,t.add(h),t.subtract(h),r.add(h),p,p,c),Ue(m,s,r.add(h),t.subtract(h),r.subtract(h),c,p,c),n.lineCap==="round"&&(o&&Wr(m,t,f,s),i&&Wr(m,r,f,s))}L();function Cc(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"){Wr(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),w=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;Ue(s,m,w,f,S,f,f,f),n.lineJoin==="miter"&&P&&Math.hypot(P.x,P.y)<=p*4&&Ue(s,m,w,f.add(P),S,f,f,f)}function _c(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),Xn(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 Jn(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?_c(e,p,c,l,a,s):(Xn(e,p,c,!r&&f===0,!r&&f===t.length-2),(r||f>0)&&Cc(e,t,f,c,l)),a+=l}function Ec(e){let t=1/0,r;for(r of e)t=Math.min(t,r.x);return t}function zc(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 Ac(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:Ec(o)});let m=r,f=t;for(i=1;i<r.length;i*=2){for(n=0;n<r.length;n+=i*2)zc(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 Pe(e,t,r){return(t.x-e.x)*(r.y-e.y)-(t.y-e.y)*(r.x-e.x)}function ct(e,t){return e.x===t.x&&e.y===t.y}function Rc(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],ct(o,i)||Math.abs(Pe(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 Oc(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 Dc(e,t){let r=[],o=0,i,n,a;for(i=0;i<e.length;i++)n=e[i],a=Rc(t.slice(o,o+=n.length)),Oc(a)!==!!i&&a.reverse(),r.push(a);return r}function Kn(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 Ic(e,t){let r;for(r=1;r<t.length;r++)if(Kn(e,t[r]))return!0;return!1}function Ci(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 Gc(e,t,r,o){if(ct(e,r)||ct(e,o)||ct(t,r)||ct(t,o))return!1;let i=Pe(e,t,r),n=Pe(e,t,o),a=Pe(r,o,e),s=Pe(r,o,t);return i*n<0&&a*s<0||i===0&&Ci(e,t,r)||n===0&&Ci(e,t,o)||a===0&&Ci(r,o,e)||s===0&&Ci(r,o,t)}function Lm(e,t,r){let o;for(o=0;o<r.length;o++)if(Gc(e,t,r[o],r[(o+1)%r.length]))return!0;return!1}function Uc(e,t,r,o){if(Lm(e,t,r))return!0;let i;for(i=1;i<o.length;i++)if(Lm(e,t,o[i]))return!0;return!1}function Nc(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,!(!Kn(o,r[0])||Ic(o,r))&&(Uc(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 Fc(e,t,r,o){let i;for(i of e)if(!ct(i,t)&&!ct(i,r)&&!ct(i,o)&&Pe(t,r,i)>=0&&Pe(r,o,i)>=0&&Pe(o,t,i)>=0)return!0;return!1}function Wc(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],!(Pe(i,n,a)<=1e-10)&&!Fc(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(Pe(...e)>1e-10){let m=[];for(s of e)m.push(s.index);t.push(m)}return t}function bm(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 jc(e,t,r){let o=0,i=0,n,a;for(n=1;n<e.length;n++)o+=bm(e[n]);let s=bm(e[0])-o;for(a of r)i+=Pe(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 Qn(e,t=sr){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=Dc(r,s),f=m[0].slice(),p=Ac(m.slice(1)),c=p.length?{x:0,y:0}:null;for(a of p)f=Nc(f,a,m,c);let l=Wc(f);return jc(m,s,l),l}function $c(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");Ue(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 Qn(n[0],n.slice(1)))Ue(i,o,m[s[0]],m[s[1]],m[s[2]])}function Mm(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&&$c(e,n);for(a of n)Jn(e,a,r)}function Bm(e,t,r){if(!t.length)return;let o;if(t[0]instanceof d.LatLng)Mm(e,[t],r);else if(r&&t[0][0]instanceof d.LatLng)Mm(e,t,r);else for(o of t)Bm(e,o,r)}function Vc(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 cr(e,t,r,o,i,n=0){let a=i*ki/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))}function Zc(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){e._project();let x=e._point.add(r.getPixelOrigin());f.x=x.x,f.y=x.y,p=e._radius,c=e._radiusY||p}a.fill&&Wr(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(cr(f,p,c,h,l));Jn(t,x,!0)}else if(a.stroke&&m>0)for(u=0;u<h;u++)Ue(o,n,cr(f,p,c,h,u,m/2),cr(f,p,c,h,u,-m/2),cr(f,p,c,h,u+1,m/2)),Ue(o,n,cr(f,p,c,h,u+1,m/2),cr(f,p,c,h,u,-m/2),cr(f,p,c,h,u+1,-m/2))}function qc(e,t,r){let o=[],i=[],n=e.options,a=Number(n.weight)||0,s=Vc(n),m={fill:o,stroke:i,options:n,width:a,dash:s,point:r,map:t};if(e instanceof d.CircleMarker)Zc(e,m);else{let f=e instanceof d.Polygon;Bm(m,e.getLatLngs(),f)}return{fill:o,stroke:i}}function Tm(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 Wt(e,e.map.unproject(t))}function Hc(e,t){let r=_o[_o.length-1];return t&&r.strokeAnchors&&r.strokeAnchors.push(...Tm(r,t)),Tm(r,e)}$();L();function Yc(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=I.get(e.backend);e.pixelProjection={transformation:r.transformation,scale:r.scale(e.map.getZoom()),origin:r.project(o),metres:Math.cos(o.lat*B)},_o.push(e);try{return qc(t,e.map,Hc)}finally{_o.pop()}}function Xc(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 Jc(e){let{source:t}=e;if(e.zoomOnly){kc(e),e.zoomOnly=!1;return}let{fill:r,stroke:o}=Yc(e);Xc(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}=wt(s),ko(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 Kc(e){let{meshes:t,textures:r,backend:o}=e,i,n,a;for([a,i]of t)i._nativeUsed||(Ie(o,i),t.delete(a),n=r.get(a),n&&j(o,n.texture),r.delete(a));for([a,n]of r)n.used||(j(o,n.texture),r.delete(a))}function ea(e){let{source:t,meshes:r,textures:o}=e;if(!Bo(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 d.GridLayer?bc(e):t instanceof d.ImageOverlay?Mc(e):e.marker?Sc(e):Jc(e),Kc(e)}function Qc(e){try{ea(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 lr(e){if(Gn(e),O.get(e)!==e||!v.get(e))return;let t=e._map,r=performance.now(),o=t.getSize();if(!o.x||!o.y)return;Rf(e,r),Df(e,o),Ff(e,o),Te(oe.get(e));let i=!1,n,a;for(n of F.get(e))a=mo.get(n),a&&(Qc(a),i=!0);let s=mt.get(t);Zf(e,s,i);let m=Gt.get(e),f=v.get(e),p=fp(e,r),c=f.frameMeshes||=[];c.length=0;let l=gp(e,p,r,c),u=f.device.createCommandEncoder();Bp(e,c,m,s),Hp(e,u,m,s),Ap(e,u,c),f.device.queue.writeBuffer(f.uniformBuffer,0,f.uniformData,0,f.uniformSlot*64),f.device.queue.submit((yn[0]=u.finish(),yn)),yn[0]=null;for(n of F.get(e))or.get(n)&&(l=Mo(n)||l);(t._animatingZoom||l)&&E(e)}function el(){let e=[...It];It.clear();let t,r;for(r of e)if(st.set(r,null),!(O.get(r)!==r||!v.get(r)))try{lr(r)}catch(o){t||=o}if(t)throw t}function E(e){let t=O.get(e);if(!t)return e;if(t!==e)return E(t),e;if(st.get(e)!=null)return e;let r=It.values().next().value;return It.add(e),st.set(e,r?st.get(r):requestAnimationFrame(el)),e}L();function ta(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,ta(e);let t=e.source,r,o;for(o of e.images)o===t._icon||o===t._shadow||o===t._image||(o.removeEventListener("load",yi),o.removeEventListener("error",xi),gn(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),Ef(o,e),o.addEventListener("load",yi),o.addEventListener("error",xi));O.get(e.backend)&&E(e.backend)}L();var tl=new Set(["color","opacity","weight","fillColor","fillOpacity"]);function rl(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(!tl.has(a))return!1}return!0}L();function ol(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=ue.get(t),i=o.methods.get(e).original,n=rl(e,o,r),a=i.apply(t,r);return ol(o,e),e==="bringToFront"&&(o.order=rr.get(o.map)+1,rr.set(o.map,o.order)),e==="bringToBack"&&(o.order=so.get(o.map)-1,so.set(o.map,o.order)),De(o),n&&(!t.options.stroke||Number(t.options.weight)>0)&&(o.zoomOnly=!0),a}function il(...e){return H("setLatLng",this,e)}function nl(...e){return H("setLatLngs",this,e)}function al(...e){return H("addLatLng",this,e)}function sl(...e){return H("setRadius",this,e)}function ml(...e){return H("setStyle",this,e)}function fl(...e){return H("redraw",this,e)}function pl(...e){return H("setIcon",this,e)}function cl(...e){return H("setUrl",this,e)}function ll(...e){return H("setBounds",this,e)}function ul(...e){return H("setOpacity",this,e)}function dl(...e){return H("setZIndex",this,e)}function hl(...e){return H("setZIndexOffset",this,e)}function gl(...e){return H("bringToFront",this,e)}function yl(...e){return H("bringToBack",this,e)}var Pm={setLatLng:il,setLatLngs:nl,addLatLng:al,setRadius:sl,setStyle:ml,redraw:fl,setIcon:pl,setUrl:cl,setBounds:ll,setOpacity:ul,setZIndex:dl,setZIndexOffset:hl,bringToFront:gl,bringToBack:yl};L();var Eo=Object.freeze({});function ra(e=Eo){return new d.Layer(e)}L();var jr=new WeakMap;var ne=new WeakMap;var Lt=new WeakMap;function xl(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 vl(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)xl(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 Ll(e,t,r){e.geometry.bounds||Ce(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 oa(e,t){return t?.count??t?.data.length??e.count??e.data.length/(e.size??3)}function ia(e,t,r,o,i){let{position:n,index:a,instanceOffset:s}=e.geometry.attributes,m=n.size??3,f=oa(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 bl(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 Ml(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 w=n[0]-r[0],S=n[1]-r[1],T=n[2]-r[2],P=(w*h+S*x+T*g)/y;if(P<0||P>1)return 1/0;let R=S*p-T*f,Q=T*m-w*p,N=w*f-S*m,G=(a[0]*R+a[1]*Q+a[2]*N)/y;return G<0||P+G>1||bl(e,t,P,G,s)?1/0:(c*R+l*Q+u*N)/y}function Bl(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 na(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),!!Ll(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)ia(f,g,i,n,a),y=Ml(f,g,i,n,a,s,m,r),y>0&&y<h&&(h=y,x=g/3);x!==void 0&&o.push(Bl(e,f,s,m,h,x))}return vl(o)}function jt(e,t,r){if(t(e,r))return;let o;for(o of e.children)jt(o,t,r)}function aa(e,t){if(!e.visible)return!0;e.geometry&&e._appearance!==0&&t.push(e)}function Tl(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 zo(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=Tl(o,i,a,r);return s.x-=s.dz*e.side,s.z+=s.dx*e.side,s}function Pl(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}=zo(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 Sl(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 sa(e,t,r=M.get(e).children,o=!0){if(!v.get(e))return[];let i=Lt.get(e);i&&Pl(i);let n=e._map.getContainer().getBoundingClientRect();Te(oe.get(e)),co(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;Sl(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?jt(h,aa,y):h.geometry&&h.visible&&h._appearance!==0&&y.push(h);return na(ne.get(e),y,v.get(e).uniformData?.[55])}function kl(){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 Cl=new Set(["click","preclick","dblclick","contextmenu","mousedown","mouseup","mousemove","mouseover","mouseout","pointerdown","pointerup","pointermove","pointerover","pointerout"]);L();function _l(e,t){return t.object.renderOrder-e.object.renderOrder||e.distance-t.distance}function El(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(...sa(a,t,i.meshes.values(),!1));return o.sort(_l),o[0]?.object._nativeSource||null}function ma(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 zl(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)&&ma(e,t,r,null),n||o===t.move&&(e.dragging?.moving()||e._animatingZoom)}function Sm(e,t=e.type,r){let o=this,i=jr.get(o),n=i.fireDOMEvent,a=te.get(o);if(!v.get(a)||r||!Cl.has(t))return n.call(this,e,t,r);if(zl(o,i,e,t))return n.call(this,e,t,r);let s=El(i,e,t);return(t==="click"||t==="preclick")&&s&&o._draggableMoved(s)&&(s=null),(t===i.move||t===i.out)&&ma(o,i,e,s),n.call(this,e,t,s?[s]:void 0)}function Al(e){let{map:t}=e,r=jr.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=Sm,r.restore=kl,jr.set(t,r),t._fireDOMEvent=Sm}r.states.add(e),e._nativeEventContext=r}L();function Ao(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 fa(){this.viewDirty=!0,O.get(this.backend)&&E(this.backend)}function Rl(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(),jr.delete(r))}function _i(){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",Ao,e),r.off("zoomend terrainchange",Ao,e),e.marker&&r.off("move zoom rotate pitch resize viewreset",fa,e),Rl(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())Ie(o,p);i.clear();for(c of n.values())j(o,c.texture);n.clear();for(l of a)l.removeEventListener("load",yi),l.removeEventListener("error",xi),gn(l,e);mo.delete(o),o.remove()}function Ol(){this.ready.resolve()}function Dl({error:e}){this.ready.reject(e)}function Il({error:e}){this.source.fire("error",{error:e})}async function Gl(e){let{source:t,map:r}=e,o=e.backend=ra({source:{type:"vector"}});e.meshes=new Map,e.textures=new Map,e.methods=new Map,e.images=new Set,rr.get(r)||rr.set(r,0),so.get(r)||so.set(r,0),e.dirty=!0,e.viewDirty=!0,e.failed=!1,e.order=rr.get(r)+1,rr.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",Ao,e),r.on("zoomend terrainchange",Ao,e),e.marker&&r.on("move zoom rotate pitch resize viewreset",fa,e),Al(e);let n,a,s;for(n in Pm)typeof t[n]=="function"&&(a=Object.getOwnPropertyDescriptor(t,n),s=t[n],e.methods.set(n,{own:a,original:s}),t[n]=Pm[n]);let m=e.ready=Promise.withResolvers();o.once("ready",Ol,e),o.once("error",Dl,e),o.on("error",Il,e),De(e),o.addTo(r);try{await m.promise}catch(f){throw _i.call(e),f}if(!Bo(e))return t;mo.set(o,e);try{ea(e)}catch(f){throw _i.call(e),f}return E(e.backend),t}function Ul(e){ue.get(e.source)===e&&ue.set(e.source,null),e.backend&&_i.call(e);let t;for(t of e.hidden)t.classList.remove("leaflet-webgpu-target")}function Nl(e){return ue.get(e.source)!==e?e.source:Gl(e)}function qe(e,t){e.fire("error",{error:t})}function pa(e,t){if(ue.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};ue.set(e,r),ta(r),e.once("remove",Ul.bind(null,r)),re.set(e,Promise.resolve().then(Nl.bind(null,r))),re.get(e).catch(qe.bind(null,e))}var ca=[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 la(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]=la(e,ca),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 R=h*(m-u*P-l*i)/m;return f.x=p*R+c*P+a,f.y=-c*R+p*P+s,f}let g=p*h-c*x,y=c*h+p*x,w=m/(m-u*y-l*i);return f.x=g*w+a,f.y=(l*y-u*i)*w+s,f}function Fl(e){return ze(this,ot(this,W.value.layerPointToContainerPoint.call(this,e)))}function Wl(e){return W.value.containerPointToLayerPoint.call(this,ot(this,ze(this,e,!0),!0))}function jl(){return W.value.containerPointToLayerPoint.call(this,this.getSize().divideBy(2))}function $l(e,t){let r=this.getSize().divideBy(2),o=r.subtract(ze(this,r.subtract(ce(e)),!0));return W.value.panBy.call(this,o,t)}L();J();Z();function Vl(e,t,r){if(!_(this)&&!k(this))return W.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 bt=Object.freeze([0,0]);J();Z();function Zl(e,t={}){if(!_(this)&&!k(this))return W.value.panInside.call(this,e,t);let r=ce(t.paddingTopLeft||t.padding||bt),o=this.getSize().subtract(ce(t.paddingBottomRight||t.padding||bt)),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 ur(e,t=bt,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 ql(e,t,r){if(!r||!this._loaded||!_(this)&&!k(this))return W.value._limitCenter.call(this,e,t,r);let o=this.getSize().divideBy(2),i=ur(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 Hl(e,t){if(!t||!_(this)&&!k(this))return W.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();ua();function km(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 da(e,t,r=Ro){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||bt).subtract(i),s=i.subtract(ce(r.paddingBottomRight||r.padding||bt)),[m,f,p,c]=la(e,ca);if(p<0){let rv=a.y;a.y=-s.y,s.y=-rv}let l=e.getSize().y*e.options.pitchMaxDistance,u=km(a.y,Math.abs(p),n,c,l),h=km(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,w=a.x*c/n,S=s.x*c/n,T=S-w,P=1/0,R=-1/0,Q=[t.getNorthWest(),t.getNorthEast(),t.getSouthWest(),t.getSouthEast()],N,G,V,le,be;for(N=0;N<4;N++)G=Q[N],V=e.project(G,o).subtract(x),le=m*V.x-f*V.y,be=f*V.x+m*V.y,g=Math.min(g,be),y=Math.max(y,be),P=Math.min(P,le+w*be),R=Math.max(R,le+S*be);let at=Math.min((h-u)/(y-g),(s.x-a.x-T*u)/(R-P-T*g)),ke=e.getScaleZoom(at,o),gt=e.options.zoomSnap;if(gt&&(ke=Math.floor(Math.round(ke/(gt/100))/100)*gt),ke=Math.max(e.getMinZoom(),Math.min(e.getMaxZoom(),r.maxZoom??1/0,ke)),!Number.isFinite(ke))return{center:t.getCenter(),zoom:ke};let Ve=e.getZoomScale(ke,o),hi=y*Ve-h,gi=g*Ve-u,an=Math.max(hi,T?(Ve*(R-P)-s.x+a.x)/T:hi),rm=(Math.min(gi,an)+gi)/2,_f=(Ve*(P+R)-a.x-s.x-(w+S)*rm)/2;return x.x+=(m*_f+f*rm)/Ve,x.y+=(-f*_f+m*rm)/Ve,{center:e.unproject(x,o),zoom:ke}}function Yl(e,t){return _(this)||k(this)?da(this,e,t):W.value._getBoundsCenterZoom.call(this,e,t)}L();J();Z();function Xl(e,t,r){if(!_(this)&&!k(this))return W.value.getBoundsZoom.call(this,e,t,r);if(!t)return da(this,e,{padding:ce(r||bt).divideBy(2)}).zoom;e=e instanceof d.LatLngBounds?e:new d.LatLngBounds(e);let o=ur(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 Jl(e,t){let r=this._getCenterOffset(e)._trunc();return t?.animate!==!0&&!this.getSize().contains(r)?!1:(W.value.panBy.call(this,r,t),!0)}L();J();Z();function Kl(){if(!_(this)&&!k(this))return W.value.getBounds.call(this);let e=ur(this),t=new d.LatLngBounds,r,o,i;for(r=0;r<2;r++)o=r?e.max:e.min,i=W.value.containerPointToLayerPoint.call(this,ot(this,o,!0)),t.extend(this.layerPointToLatLng(i));return t}var Ql=new WeakSet;var Cm=new WeakMap;dr();_m();function eu(){this.options.maxBounds&&this._panInsideMaxBounds()}var hr=new WeakMap;ha();La();J();Z();function ba(){let e=this,t=hr.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 tu(){Do(this),He.get(this)?.remove(),hr.get(this)&&(hr.get(this).off("predrag",ba,this),hr.delete(this))}function ru(){let e=this.dragging?._draggable;e&&(hr.set(this,e),e.on("predrag",ba,this))}async function fd(e){try{let{cameraControls:t}=await Promise.resolve().then(()=>(md(),sd));e._container?._leaflet_id&&t(e)}catch(t){throw e.fire("error",{error:t}),t}}function Ye(){}function pd(){if(Ql.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)}Ne(this,this.options.pitch,this.options.bearing),this.on("load resize pitch",ga),this.on("rotate pitch",eu,this),this.once("unload",tu,this),this.whenReady(ru,this),(this.options.rotate||this.options.trackContainerMutation)&&(Cm.set(this,fd(this)),Cm.get(this).catch(Ye))}L();function cd(e){e instanceof d.DivIcon||(e.options.crossOrigin||=!0);let t=Qe.value.setIcon.call(this,e);return this._map&&!(e instanceof d.DivIcon)&&pa(this,this._map),t}function ld(){let e=Qe.value.getEvents.call(this);return e.rotate=e.pitch=e.move=this.update,e}$();function $o(e,t,r){let o=te.get(e),i=o&&ie.get(o);if(!Me.get(e)||!i)return e.layerPointToContainerPoint(t).subtract(e._getMapPanePos());let n=ye(e,r||e.layerPointToLatLng(t))??0,a=ye(e,e.getCenter())??0,s=se.get(e)?.zoom??e.getZoom(),m=(n-a)*e.options.crs.scale(s)/(tt*Math.cos(i.lat*B)),f=ot(e,W.value.layerPointToContainerPoint.call(e,t));return ze(e,f,!1,!1,m).subtract(e._getMapPanePos())}function ud(e){Qe.value._setPos.call(this,$o(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 Tt(e=this){let t=ue.get(e);t?.backend&&!t.disposed&&De(t)}function dd(e){Qe.value._updateZIndex.call(this,e);let t=Fr.get(this)!==e;Fr.set(this,e),t&&Tt(this)}var Hr=new WeakMap;L();function hd(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),Hr.get(this)._cameraOriginalOnDrag.call(this,e),this._marker._setPos(o)}L();J();Z();var Gi=new Map;var Vo={value:null};function gd(){Vo.value=null;let e=[...Gi];Gi.clear();let t,r;for([t,r]of e)t._panRequest=null,t._adjustPan(r)}function yd(e,t){Gi.set(e,t),Vo.value===null&&(Vo.value=requestAnimationFrame(gd)),e._panRequest=Vo.value}function xd(e){let t=this._marker,r=t._map;if(!_(r)&&!k(r))return Hr.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),yd(this,e)}function vd(){if(!this.dragging||Hr.has(this.dragging))return;let e=this.dragging,t=e._onDrag,r=e._adjustPan;Hr.set(e,{_cameraOriginalOnDrag:t,_cameraOriginalAdjustPan:r}),e._onDrag=hd,e._adjustPan=xd,e.enabled()&&(e._draggable.off("drag",t,e),e._draggable.on("drag",e._onDrag,e))}function wd(){let e=Qe.value._initInteraction.call(this);return vd.call(this),e}function Ld(){let e=fn.value.call(this);return e.rotate=e.pitch=e.move=e.terrainchange=this._updatePosition,e}function bd(){let e=pn.value.call(this);return e.rotate=e.pitch=e.move=e.terrainchange=this._updatePosition,e}J();Z();function Md(){let e=this._map;if(!_(e)&&!k(e))return ln.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 Bd(){if(cn.value.call(this),!this._map)return;let e=this._map.latLngToLayerPoint(this._latlng),t=$o(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 Td(e){un.value.call(this,e);let t=$o(this._map,e,this._latlng).subtract(e);d.DomUtil.setPosition(this._container,d.DomUtil.getPosition(this._container).add(t))}L();function Pd(){let e=hn.value.call(this);return e.rotate=e.pitch=d.Util.throttle(this._onMoveEnd,this.options.updateInterval,this),e}L();Z();J();$();function Sd(e){let t=this._map,r=Me.get(t);if(!r&&!k(t)&&!_(t))return dn.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);if(!r||!a)return i;let s=1/0,m=-1/0,f,p;for([f,p]of r.terrainCache)!f.startsWith(`${this._tileZoom}/`)||!p.range||(s=Math.min(s,p.range[0]),m=Math.max(m,p.range[1]));if(!Number.isFinite(s)||!Number.isFinite(m))return i;let c=se.get(t)?.zoom??t.getZoom(),l=t.options.crs.scale(c)/(tt*Math.cos(a.lat*B)),u=ye(t,t.getCenter())??0,h,x,g,y,w;for(h=0;h<2;h++)for(g=ur(t,void 0,((h?m:s)-u)*l),x=0;x<2;x++)y=x?g.max:g.min,w=W.value.containerPointToLayerPoint.call(t,ot(t,y,!0)),i.extend(t.project(t.layerPointToLatLng(w),this._tileZoom));return i}W.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});d.Map.include({layerPointToContainerPoint:Fl,containerPointToLayerPoint:Wl,_getCenterLayerPoint:jl,panBy:$l,setZoomAround:Vl,panInside:Zl,_limitCenter:ql,_limitOffset:Hl,_getBoundsCenterZoom:Yl,getBoundsZoom:Xl,_tryAnimatedPan:Jl,getBounds:Kl});d.Map.addInitHook(pd);Qe.value=Object.defineProperties({},Object.getOwnPropertyDescriptors(d.Marker.prototype));d.Marker.mergeOptions({rotation:0,rotateWithView:!1,keepUpright:!1,scale:1});d.Marker.include({setIcon:cd,getEvents:ld,_setPos:ud,_updateZIndex:dd,_initInteraction:wd});fn.value=d.Popup.prototype.getEvents;d.Popup.include({getEvents:Ld});pn.value=d.Tooltip.prototype.getEvents;d.Tooltip.include({getEvents:bd});cn.value=d.Popup.prototype._updatePosition;ln.value=d.Popup.prototype._adjustPan;d.Popup.include({_adjustPan:Md,_updatePosition:Bd});un.value=d.Tooltip.prototype._setPosition;d.Tooltip.include({_setPosition:Td});dn.value=d.GridLayer.prototype._getTiledPixelBounds;hn.value=d.GridLayer.prototype.getEvents;d.GridLayer.include({getEvents:Pd,_getTiledPixelBounds:Sd});L();var Zo=new WeakMap;var Ui=new WeakMap;var Ni=new WeakMap;L();ha();$();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 af(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 Zt({map:e,originalSky:t,sunDisc:r,moonDisc:o,projection:i}){let n=mt.get(e),a=He.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;af(r,n,a,s,m,f,i),af(o,n?.moon,a,s,m,f,i)}var Cd=[[-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 sf=[0,0,0];function Za(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 mf(e){let t="",r;for(r=0;r<e.length;r++)r&&(t+=", "),t+=Math.round(e[r]);return`rgb(${t})`}function _d(e){if(!Number.isFinite(e))throw new Error("Invalid solar altitude");let t=Cd,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(${mf(Za(n[1],i[1],a,sf))}, ${mf(Za(n[2],i[2],a,sf))})`,tint:Za(n[3],i[3],a)}}function qa(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 Ha(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 Fi=Math.sin(23.4397*B);$();var Wi=Math.cos(23.4397*B);function Ed(e,t,r){let o=qa(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)*Wi-Math.sin(a)*Fi,f=Math.cos(a)*Math.sin(n)*Fi+Math.sin(a)*Wi;return Ha(o,t,r,Math.atan2(m,s),Math.asin(f))}$();function zd(e,t,r){let i=qa(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)*Fi),m=Math.atan2(Math.sin(a)*Wi,Math.cos(a));return Ha(i,t,r,m,s)}function Yr(e){let t=te.get(e);t&&E(t)}function br(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=zd(t.time,m.lat,m.lng);mt.set(r,f),Object.assign(f,_d(f.altitude)),f.moon=Ed(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}),Zt(e),Yr(r)}catch(s){mt.delete(r),Zt(e),Yr(r),a.textContent=`Error: ${s.message}`,console.error("Solar simulation",s)}}function Ad(e){e.control.live=!0,br(e)}function Rd(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}),mt.delete(r),Zt(e),Yr(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)),br(e)}function Od(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=br.bind(null,l),l.updateSky=Zt.bind(null,l),m.onclick=Ad.bind(null,l),n.onchange=a.oninput=Rd.bind(null,l),d.DomEvent.disableClickPropagation(i),d.DomEvent.disableScrollPropagation(i),l}function Dd(e){e.control.live&&br(e)}function Id(e,t){let r=Ni.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=Od(t),Ni.set(t,r)),r.control=e,r.originalSky=t.getContainer().style.getPropertyValue("--leaflet-sky-background"),Zo.set(t,e),Ui.set(e,r),r.update(),r.timer=setInterval(Dd,6e4,r),t.on("moveend",r.update),t.on("move rotate pitch resize",r.updateSky),r.container}L();L();function Gd(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)}function Ud(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 Gd(o,t,r),!0;return!1}function Ya(e){let t=Ud(e.map,e.layer,e.element),r=e.onPlace;return r?.(t),t}var Xa=[];function Nd(){let e=Xa.shift();e?.map.hasLayer(e.layer)&&Ya(e)}function Ja(){Xa.push(this),queueMicrotask(Nd)}function Fd(){this.map.off("layeradd layerremove",Ja,this);let e=this.element.parentElement;this.element.remove(),e?.classList.contains("traffic-status-group")&&!e.childElementCount&&e.remove()}function qo(e,t,r){let o={map:e._map,layer:e,element:t,onPlace:r};return o.map.on("layeradd layerremove",Ja,o),e.once("remove",Fd,o),Ya(o)}var Pt=new WeakMap;L();function Wd(e){return Pt.get(this).addTo(e)}L();function jd(){return d.Control.prototype.remove.call(Pt.get(this))}function $d(e){d.Util.setOptions(this,e),this.live=!0,this.layer=new d.Layer,Pt.set(this.layer,this),A.set(this.layer,"time")}function Vd(e){return Id(this,e)}L();function ff(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 Zd(e){d.Control.prototype.addTo.call(this,e);let t=this.getContainer();return this.layer._map===e?qo(this.layer,t,ff.bind(null,t)):ff(t,!1),this}L();function qd(){return this._map?.hasLayer(this.layer)?(this._map.removeLayer(this.layer),this):d.Control.prototype.remove.call(this)}function Hd(e){let{map:t,timer:r,sunDisc:o,moonDisc:i}=e,n=Ni.get(t);clearInterval(r),Zo.delete(t),t.fire("simulationtimechange",{time:null,live:!1}),t.off("moveend",e.update),t.off("move rotate pitch resize",e.updateSky),mt.delete(t),Zt(e),o.remove(),i.remove(),Yr(t),n===e&&(n.control=null)}function Yd(){let e=Ui.get(this);e&&(Hd(e),Ui.delete(this))}d.Control.Time=d.Control.extend({options:{position:"bottomright"},initialize:$d,onAdd:Vd,onRemove:Yd,addTo:Zd,remove:qd});L();L();var qt=new WeakMap;var Ka=new WeakMap;L();var we=new WeakMap;var Y=new WeakMap;var Mr=new WeakMap;var Br=new WeakMap;var X=new WeakMap;var Xe=new WeakMap;var We=new WeakMap;var Tr=new WeakMap;var ae=new WeakMap;L();var Qa=new WeakMap;var ji=new WeakMap;var St=new WeakSet;var pf=["rootDirectoryOffset","rootDirectoryLength","jsonMetadataOffset","jsonMetadataLength","leafDirectoryOffset","leafDirectoryLength","tileDataOffset","tileDataLength","numAddressedTiles","numTileEntries","numTileContents"];var cf=["clustered","internalCompression","tileCompression","tileType","minZoom","maxZoom"];var lf=["minLon","minLat","maxLon","maxLat"];function Xd(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<cf.length;o++)r[cf[o]]=t.getUint8(96+o);for(o=0;o<lf.length;o++)r[lf[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 Ho=new WeakMap;async function Yo(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(Ho.get(e)&&n!==Ho.get(e))throw new Error("PMTiles archive changed; recreate the layer");n&&Ho.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 Xr(e){if(!St.has(e))return e.getHeader();if(e.options.archive&&e.options.archive!==e)return Xr(e.options.archive);let t=ji.get(e);return t||(t=Yo(e,0,127).then(Xd),ji.set(e,t)),t}var ut=new WeakMap;var kt=new WeakMap;$();function es(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 Jd(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,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={...Ee(),device:o,geometry:m,program:Ge(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:vt.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 Kd=new TextDecoder;function Qd(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 eh={bytes:null,cursor:0};function Xo(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 th(e){let t=eh,r=new Uint8Array(e);t.bytes=r,t.cursor=0;try{let o=Xo(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+=Xo(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=Xo(t);for(s of i)if(s.length=Xo(t),!s.length)throw new Error("Invalid PMTiles directory length");for(a=0;a<i.length;a++){if(s=i[a],m=Xo(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 ts(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 rh(e,t,r,o){return th(await ts(await Yo(e,t,r),o))}async function oh(e,t,r,o){let i=Br.get(e),n=`${t}:${r}`;i.has(n)||(i.size>=32&&i.delete(i.keys().next().value),i.set(n,rh(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 ih(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 nh(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 ts(await Yo(e,t.tileDataOffset+r.offset,r.length,i),t.tileCompression);return i?.throwIfAborted(),{data:n}}async function ah(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 oh(e,i,n,t.internalCompression),o?.throwIfAborted(),c=ih(p,r),!c)return;if(c.runLength)return l=await nh(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 Jr(e,t,r,o,i){if(!St.has(e))return e.getZxy(t,r,o,i);if(e.options.archive&&e.options.archive!==e)return Jr(e.options.archive,t,r,o,i);let n=Qd(t,r,o);i?.throwIfAborted();let a=await Xr(e);if(i?.throwIfAborted(),!(t<a.minZoom||t>a.maxZoom))return ah(e,a,n,i)}async function sh(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 Jr(e,t.coords.z,t.coords.x,t.coords.y,t.request.signal);return r?JSON.parse(Kd.decode(r.data)):{type:"FeatureCollection",features:[]}}$();function mh(e,t,r){let o=r.options.crs,i=o.project(I.get(e));return{backend:e,area:t,map:r,crs:o,origin:i,metres:Math.cos(I.get(e).lat*B),jobs:[],featureFaces:[],skipped:0}}var rs=new URL("leaflet-city-mapper-worker.js",document.currentScript?.src||document.baseURI).href;function fh(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 ph(e,t,r){if(e.resolve=t,e.reject=r,e.onEvent=fh.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 uf=new WeakMap;function ch(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 os(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 lh(e,t){let r=e&&uf.get(e);e&&!r&&(r={entries:new Set,idle:[],closed:!1},uf.set(e,r),e.once("unload",ch.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 os(t,r)}async function Jo(e,t,r,o=new AbortController().signal){o.throwIfAborted();let i=lh(e,t||rs),{worker:n,pool:a}=i,s={worker:n,signal:o,input:r};i.task=s;let m=!1;try{let f=await new Promise(ph.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 uh(e,t){try{let r=await Jo(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 hh(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 gh(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=ye(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 yh(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=ye(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 xh(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(yh(e,n));o.push(a)}return o}function vh(e,t,r,o,i,n){let a=t.geometry,s=xh(e,a),m=a.type==="Point"?gh(e,r,o):null,f=e.backend.options.nightLight,p=m?wt(i.color??(f?void 0:5210683)):n,c=m&&!f?wt(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 Lh(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=hh(r,t);if(p===null){e.skipped++;return}let{color:c=14267276}=p,l=wt(c);vh(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 bh(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}Lh(e,i)}}async function Mh(e,t,r){try{if(await new Promise(requestAnimationFrame),await se.get(r),t.request.signal.aborted)return;let o=await sh(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=mh(e,t,r);if(await bh(i,t,o.features),t.request.signal.aborted||(await uh(i,t.request.signal),t.request.signal.aborted))return;Jd(i)}catch(o){t.request.signal.aborted||(t.error=o.message,e.fire("error",{error:o}))}finally{Xe.set(e,Xe.get(e)-1),$i(e,r)}}function is(e,t){return e.distance-t.distance}function Bh(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(is),r}function $i(e,t=e._map){let r=t&&te.get(t);if(!r)return;let o=[],i,n,a;for(i of F.get(r))Number.isFinite(Xe.get(i))&&Y.get(i)&&(ae.get(i)||X.get(i))&&o.push(i);let s=Bh(o,t),m=0;for(i of o)m+=Xe.get(i);for({layer:a,area:n}of s){if(m>=4)break;Xe.get(a)>=2||(n.started=!0,Xe.set(a,Xe.get(a)+1),m++,Mh(a,n,t))}for(i of o)es(i)}var nt=new WeakMap;var Se=new WeakMap;function Ct(e,t){t?.model&&(t=null),!(nt.get(e)?.mesh===t?.mesh&&nt.get(e)?.vertexStart===t?.vertexStart)&&(nt.get(e)&&(nt.get(e).mesh.highlight=null),nt.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 Pr=new WeakMap;var Re=new WeakMap;function _t(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=O.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?(Pr.get(i)===void 0&&Pr.set(i,Ae.get(e).style.cursor),Ae.get(e).style.cursor="pointer"):Pr.get(i)!==void 0&&(Ae.get(e).style.cursor=Pr.get(i),Pr.delete(i))}}function Kr(e,t){t.request.abort();let r;if(t.mesh){nt.get(e)?.mesh===t.mesh&&(Ct(e,null),Se.set(e,null),_t(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 Th(e,t){return e.distance-t.distance}function Qr(e){if(!e._map||!O.get(e))return;if(X.get(e)){Y.get(e).has("geojson")||Y.get(e).set("geojson",{request:new AbortController}),$i(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)||(Kr(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(Th);for(u of h)c=`${u.x}/${u.y}`,Y.get(e).has(c)||Y.get(e).set(c,{coords:u,request:new AbortController});$i(e)}function Ko(e){if(!M.get(e)||!I.get(e))return;kt.get(e)==null&&kt.set(e,M.get(e).position[1]);let t=me.get(e._map),r=t&&nr(t,I.get(e)),o=Number.isFinite(r)?e.options.terrainOffset??0:0;M.get(e).position[1]=kt.get(e)+(r??0)+o}function Ph(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 Sh(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 kh(e,t){let r=O.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;Ph(i,a),e.bindGroup=null,e.boundTextures?e.boundTextures.length=0:e.boundTextures=[],Sh(n,a),e.program.pipelineCache.clear(),e.program=Ge(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 Qo=new WeakMap;function Ch(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 Sr(e,t,r){throw Ch(r),ut.get(t).reject(e),te.delete(r),e}async function _h(e,t){let r;try{r=await navigator.gpu.requestAdapter()}catch(o){Sr(o,e,t)}return r||Sr(new Error("Unable to acquire a WebGPU adapter"),e,t),r}async function Eh(e,t,r){try{return await e.requestDevice()}catch(o){Sr(o,t,r)}}function zh(e){let t=Qo.get(e.currentTarget),r=te.get(t);if(v.get(r)?.device!==e.currentTarget||!F.get(r))return;let o;for(o of F.get(r))o.fire("error",{error:e.error})}function Ah([e,t]){let r=Qo.get(t),o=te.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 F.get(o))n.fire("error",{error:i})}function Rh(){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 ei=new Float32Array(20);ei[0]=ei[5]=ei[10]=ei[15]=1;function Oh(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,ei),In(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 eo=new WeakMap;var ns=[];function Dh(){let e=ns.shift();eo.set(e,!1),!(O.get(e)!==e||!v.get(e))&&(e._map._animatingZoom?E(e):lr(e))}function Vi(){let e=this;eo.get(e)||(eo.set(e,!0),ns.push(e),queueMicrotask(Dh))}var ti=new WeakMap;function Zi(){ti.set(this,null)}var as=[];function Ih(){let e=as.shift();O.get(e)===e&&v.get(e)&&lr(e)}function qi(e){let t=this._map;e&&!Ze.get(this)&&(Ze.set(this,{from:t.getCenter(),zoom:t.getZoom(),to:e.center,targetZoom:e.zoom,start:performance.now()}),t.getContainer().classList.add("leaflet-camera-zoom")),as.push(this),queueMicrotask(Ih)}function Hi(){let e=this,t;if(de.get(e))for(t of de.get(e).keys())t.finish();de.set(e,null),Ze.set(e,null),se.delete(e._map),e._map.getContainer().classList.remove("leaflet-camera-zoom"),xn(e._map),ti.set(e,null),E(e)}function Gh(e,t,r){ir.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",Vi,e),t.on("zoomstart",Zi,e),t.on("zoomanim",qi,e),t.on("zoomend",Hi,e)}async function Uh(e,t){let r=document.createElement("canvas");navigator.gpu||Sr(new Error("Layer3D requires WebGPU"),e,t);let o=await _h(e,t),i=await Eh(o,e,t);Qo.set(i,t),i.addEventListener("uncapturederror",zh),Promise.all([i.lost,Promise.resolve(i)]).then(Ah);let n=r.getContext("webgpu");n||(i.destroy(),Sr(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(),O.set(e,e),F.set(e,new Set),ie.set(e,I.get(e)),oe.set(e,Ee()),ee.set(e,Rh()),v.set(e,{device:i,context:n,format:a,canvas:r,dpr:Math.min(window.devicePixelRatio,2)}),Oh(e,i),Gh(e,t,r)}async function ri(e,t){let r=te.get(t);ut.get(r)&&await ut.get(r).promise,r||(r=e,ut.set(e,Promise.withResolvers()),ut.get(e).promise.catch(Ye),te.set(t,r),await Uh(e,t),ut.get(e).resolve(),ut.delete(r),lr(r),te.set(t,r));let o=t.options.crs.project(ie.get(r)),i=t.options.crs.project(I.get(e)),n=Math.cos(ie.get(r).lat*B);kt.get(e)==null&&kt.set(e,M.get(e).position[1]),M.get(e).position[0]=(i.x-o.x)*n,M.get(e).position[1]=kt.get(e),M.get(e).position[2]=-(i.y-o.y)*n,Ko(e),M.get(e).scale.fill(n/Math.cos(I.get(e).lat*B)),O.set(e,r),v.set(e,v.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)),jt(M.get(e),kh,e),E(r),(U.get(e)&&A.get(e)!=="raster"||X.get(e))&&Qr(e)}var je=new WeakMap;$();L();function Nh(e,t){let r=new Float32Array(e.length),o,i,n,a,s,m,f,p,c,l,u,h,x,g,y,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],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(w=Math.hypot(r[o],r[o+1],r[o+2])||1,u=0;u<3;u++)r[o+u]/=w;return r}function df(e,t){e.geometry?.attributes.position&&t.push(e);let r;for(r of e.children)df(r,t)}function oi(e,t){if(!je.get(e))return;let r=[];df(je.get(e),r);let o,i,n,a,s,m,f,p,c,l,u,h,x,g,y,w,S,T,P,R;if(!Be.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)),Ce(n));return}Te(M.get(e));let Q=e._map,N=Q.options.crs,G=N.project(ie.get(O.get(e))),V=Math.cos(ie.get(O.get(e)).lat*B),le=N.scale(ge.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&&(w=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+w/V,G.y-S/V),le),P=nr(t,T),Number.isFinite(P)&&(R=(P-g)*y,m.data[l]+=c[4]*R,m.data[l+1]+=c[5]*R,m.data[l+2]+=c[6]*R));o.device.queue.writeBuffer(m.buffer,0,m.data),f.data.set(Nh(m.data,n.attributes.index?.data)),o.device.queue.writeBuffer(f.buffer,0,f.data),Ce(n)}E(e)}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 Yi(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 Wh(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:Yi(e,o?.baseColorTexture,!0),metalTexture:Yi(e,o?.metallicRoughnessTexture),emissiveTexture:Yi(e,t.emissiveTexture,!0),occlusionTexture:Yi(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 jh(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||sr)o.materials.push(Wh(o,i));return o}var $h=[0,0,0,1];var Vh=[1,1,1];var Zh=[0,0,0];function qh(e){if(e.matrix)return Array.from(e.matrix);let[t,r,o,i]=e.rotation||$h,[n,a,s]=e.scale||Vh;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||Zh,1]}function Hh(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=Ge(e.backend,o);e.resources.push(i);let n=v.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 hf(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={...Ee(),name:n.name};a.matrix=qh(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=Hh(e,s,m),p={...Ee(),device:f.device,geometry:f.geometry,program:f.program,fadeDuration:250,id:vt.value++,renderOrder:0},p.name=o.meshes[n.mesh].name,p.extras=n.extras||{},q(p,a);for(c of n.children||sr)q(hf(e,c),a);return i.delete(t),a}function Yh(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 Xh(e,t){let r=[],o;try{for(o of t.nodes)r.push(hf(e,o))}catch(i){throw Yh(e),i}return r}function Jh(e){let t=je.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 Kh(e){await we.get(e).promise;let t=new URL(We.get(e),document.baseURI).href,{description:r,images:o}=await Jo(e._map,e.options.workerUrl,{type:"model",url:t});await we.get(e).promise,await se.get(e._map);let i=jh(e,r,o),n=r.scenes?.[r.scene||0];if(!n)throw new Error("Missing glTF scene");let a=Xh(i,n),s={...Ee(),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);je.set(e,s),Jh(e),q(je.get(e),M.get(e)),oi(e,me.get(e._map))}async function Qh(e){try{return M.set(e,Ee()),ne.set(e,{origin:[0,0,0],direction:[0,0,0],inverse:new DOMMatrix,meshes:[]}),(ae.get(e)||X.get(e))&&(Qa.set(e,M.get(e)),ae.get(e)&&U.set(e,await Xr(e))),e._map&&(await ri(e,e._map),we.get(e).resolve()),We.get(e)&&await Kh(e),O.get(e)&&E(e),e.fire("ready"),e}catch(t){throw e.fire("error",{error:t}),t}}function eg(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 tg(e,t,r,o){let i=Mr.get(e),n=We.get(e),a=je.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=eg(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 gf(e){let t=e.target,r=Mr.get(t);if(!t._map)return;e.type==="add"&&qo(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;tg(t,o,i,n)}function Et(e,t=Eo){Tr.set(e,!0),d.Util.setOptions(e,{ariaLabel:"3D scene",...t}),A.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),Br.set(e,new Map),e.options.center&&I.set(e,new d.LatLng(e.options.center[0],e.options.center[1])),Y.set(e,new Map),Xe.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",Mr.set(e,o),e.on("add error",gf),e.on("ready progress",d.Util.throttle(gf,250,e))}we.set(e,Promise.withResolvers()),re.set(e,Promise.resolve().then(Qh.bind(null,e))),re.get(e).catch(Ye)}function rg(){this.keys.clear()}var Xi={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();Oi();dr();J();Z();function og(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"?(Ne(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 Ji=[["body",0,0,0],["leg",-.09,.9,1],["leg",.09,.9,-1],["arm",-.25,1.42,-1],["arm",.25,1.42,1]];$();function zt(e){let{layer:t,state:r}=this,o=t._map,i=o.options.crs,n=I.get(t),a=M.get(t),s=i.project(n),m=Math.cos(n.lat*B),f=i.project(r.latlng),p=ye(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 ss(){let[e,t,r]=zt.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<Ji.length;a++)[,s,m,f]=Ji[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 ig(){this.meshes&&ss.call(this)}function ms(){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)Ie(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}),Vt(e,this.saved.pitch),this.saved=null}}function ng(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}!Xi[e.code]&&e.code!=="Space"||(e.preventDefault(),e.type==="keydown"?this.keys.add(e.code):this.keys.delete(e.code))}}$();L();var ag=["dragging","keyboard","doubleClickZoom","boxZoom"];J();Z();Oi();function C(e,t,r,o){return[[e,r],[t,r],[t,o],[e,o]]}var Ht=[.16,.2,.32];var yf=[.75,.2,.15];var dt=[.85,.64,.5];var Yt=[.08,.07,.06];var fs={body:[[C(-.17,.17,-.1,.1),.82,.95,Ht],[C(-.19,.19,-.11,.11),.95,1.44,yf],[C(-.05,.05,-.05,.05),1.44,1.5,dt],[C(-.1,.1,-.11,.1),1.5,1.72,dt],[C(-.105,.105,-.06,.115),1.58,1.77,Yt],[C(-.105,.105,-.115,-.06),1.7,1.77,Yt]],leg:[[C(-.07,.07,-.07,.07),-.82,0,Ht],[C(-.07,.07,-.17,.07),-.9,-.82,Yt]],arm:[[C(-.05,.05,-.05,.05),-.55,0,yf],[C(-.045,.045,-.045,.045),-.66,-.55,dt]]};function Ki(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,w;for(y=0;y<3;y++)w=y===0?o:y===1?i:n,e.push(...w),t.push(u/g,h/g,x/g),r.push(...a)}function ii(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,Ki(t,r,o,i[u],i[h],n[h],f),Ki(t,r,o,i[u],n[h],n[u],f);for(u=1;u<a.length-1;u++)Ki(t,r,o,n[0],n[u],n[u+1],f),Ki(t,r,o,i[0],i[u+1],i[u],f)}return{position:t,normal:r,color:o}}function sg(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 xf=new WeakMap;function mg(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 ps(e){let t=xf.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=oa(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,w,S,T,P,R,Q,N,G,V,le,be,at,ke,gt,Ve=-1/0;for(y=0;y<f;y+=3)w=i?i.data[y%m]:y%m,!(e.program.nightLight&&a&&a.data[w*2]<=2)&&(ia(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],R=g[5]-g[2],Q=g[6]-g[0],N=g[7]-g[1],G=g[8]-g[2],V=P*G-R*N,le=T*N-P*Q,be=R*Q-T*G,at=Math.hypot(V,be,le),!(!at||Math.abs(be)>.9*at)&&(n&&(S=w*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])*le<0&&(V=-V,le=-le)),ke=Math.hypot(V,le),gt=c.length/2,p.push(...g),Ve=Math.max(Ve,g[0],g[3],g[6]),c.push(V/ke,le/ke),mg(l,g,gt)));return t={tri:Float32Array.from(p),nrm:Float32Array.from(c),cells:l,maxX:Ve,origin:[r[12],r[13],r[14]]},xf.set(e.geometry,t),t}function cs(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 w=r-e[s],S=o-e[s+1],T=i-e[s+2],P=(w*h+S*x+T*g)/y;if(P<0||P>1)return-1;let R=S*p-T*f,Q=T*m-w*p,N=w*f-S*m,G=(n*R+a*N)/y;return G<0||P+G>1?-1:(c*R+l*Q+u*N)/y}function fg(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=cs(e.tri,p,t,r,o,1,0),c>1e-4&&n.push(c))}function pg(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 vf(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||Ce(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=ps(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(),fg(h,t,r,o,i,y,x,g),pg(y)%2===1}function cg(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 ls(e,t,r,o,i,n,a,s){let m=Lt.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,le,be,at;for(V=0;V<m.template.position.length;V+=3)le=m.template.position[V],be=m.template.position[V+1],at=m.template.position[V+2],f.radius=Math.max(f.radius,Math.hypot(le,at)),f.minY=Math.min(f.minY,be),f.maxY=Math.max(f.maxY,be)}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,w,S,T,P,R,Q,N,G;for(h of m.trips)if({x:N,y:R,z:G}=zo(m,h,c),R=p.position[1]+(R+f.minY)*p.scale[1],Q=p.position[1]+(c.y+f.maxY)*p.scale[1],!(R>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,w=o+g*n-G,S=y*y+w*w,!(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),cg(s,t+T*i-N,o+T*n-G,P,i,n))}return s.found}function wf(e){let{layer:t,local:r,hitData:o}=e,i=O.get(t);if(!i||!F.get(i))return!1;Te(oe.get(t));let n=M.get(t),a=zt.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||A.get(c)==="terrain")){if(A.get(c)==="traffic"){if(o.best=0,o.found=!1,ls(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&&(vf(l,s,m+.45*n.scale[1],f,o.seen,o.intersections)||vf(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 us(){if(!this.saved||!wf(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,!wf(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 lg(e,t){return e===t||qt.get(e)==="terrain"||qt.get(e)==="traffic"}function ug(e){let t=ne.get(this.layer),r=zt.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;Te(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(O.get(this.layer)))lg(s,this.layer)||A.get(s)==="raster"||s.options.nightLight||jt(M.get(s),aa,t.meshes);for(m of na(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=cs(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 hg(e,t){if(!e.visible)return!0;if(!e.geometry?.attributes?.position?.data||e.program?.depthTest===!1)return;e.geometry.bounds||Ce(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=ps(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,w;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++)w=c.cells.get(g+","+y),w&&dg(w,c,t,l,u,h)}function gg(e,t,r,o,i,n,a,s){Te(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(O.get(e)))if(!(m===e||A.get(m)==="terrain")){if(A.get(m)==="traffic"){ls(m,t,r,o,i,n,a,s);continue}jt(M.get(m),hg,s)}return s.found?s.normal:null}function Lf(e,t,r){let o=Math.hypot(e,t);return o>1e-6&&gg(this.layer,r[0],r[1],r[2],e/o,-t/o,o+.3,this.hitData)}function yg(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=zt.call(this,this.local),p;for(p=0;p<f.length;p++)f[p]=n[p]+a[p]*f[p];let c=Lf.call(this,s,m,f);if(c){let l=s*c[0]-m*c[1];s-=l*c[0],m+=l*c[1],Lf.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}po();$();Z();dr();J();function xg(e,t,r){let o=this.layer._map;if(e||t){let n=k(o)*B,a=ds(-this.state.heading-n);Math.abs(a)>.001&&Ne(o,_(o),(n+a*Math.min(1,r*4))*et),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 vg(e,t,r,o,i,n){o&&(e.state.heading=ds(e.state.heading+o*2.5*i),n=!0),r&&(yg.call(e,r,i),n=!0),n&&ug.call(e,t),xg.call(e,r,o,i)&&(n=!0),n&&ss.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,!v.get(t))return;let o=!1,i,n;if(e>=this.nextClearanceCheck&&(this.nextClearanceCheck=e+250,us.call(this)&&(o=!0)),!this.meshes){this.meshes=[];for([i]of Ji)this.meshes.push(pr(t,ii(fs[i])));o=!0}let a=M.get(t).position[1]+zt.call(this,this.local)[1]*M.get(t).scale[1];sg.call(this,r)&&(o=!0);let s=0,m=0;for(n of this.keys)s+=Xi[n]?.[0]||0,m+=Xi[n]?.[1]||0;s=Math.sign(s),m=Math.sign(m),vg(this,a,s,m,r,o)}function hs(){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*tt*Math.cos(this.state.latlng.lat*B)/256)),o;this.saved={zoom:e.getZoom(),pitch:_(e),scrollWheelZoom:e.options.scrollWheelZoom,handlers:[]};for(o of ag)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}),Vt(e,75),us.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 Lg(){this.saved?ms.call(this):hs.call(this)}function bg(e,{speed:t,distance:r,...o}){let i=new d.Layer;qt.set(i,"walk"),Et(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}};Ka.set(i,f.state),f.step=wg.bind(f),f.onKey=ng.bind(f),f.onBlur=rg.bind(f),f.onPointer=og.bind(f),f.onTerrain=ig.bind(f),f.start=hs.bind(f),f.stop=ms.bind(f),f.toggle=Lg.bind(f),e._walk=f,d.DomEvent.on(s,"click",f.toggle)}function Mg(e){d.Util.setOptions(this,e),bg(this,this.options)}function Bg(e){let t=Ut.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]},Ut.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 Tg(e){let t=Ut.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)}d.Control.Walk=d.Control.extend({options:{position:"bottomright",speed:70,distance:20},initialize:Mg,onAdd:Bg,onRemove:Tg});var to=new WeakMap;var kr=new WeakMap;L();function Pg(){to.get(this).off(kr.get(this),this),to.set(this,null),kr.set(this,null)}var Cr=new WeakMap;L();function gs(e,t){let r=je.get(e);if(!M.get(e)||!ee.get(e))return null;let o,i,n,a,s,m,f;for(o of sa(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 ni(e){Se.set(e,null),Ct(e,null),_t(e,null),e.fire("featurehover",{feature:null})}function kg(e,t){if(t.buttons||e._map.dragging?.moving()||e._map._animatingZoom){Se.get(e)&&ni(e);return}Se.set(e,gs(e,t)),Ct(e,Se.get(e)),_t(e,Se.get(e),t),e.fire("featurehover",{feature:Se.get(e),originalEvent:t})}function Cg(e){kg(this,e)}function _g(e,t){let r=gs(e,t);Se.set(e,r),Ct(e,r),_t(e,r,t),e.fire("featureclick",{feature:r,originalEvent:t})}function Eg(e){_g(this,e)}function zg(){ni(this)}async function Ag(e,t){try{await ri(e,t),we.get(e).resolve()}catch(r){e.fire("error",{error:r})}}function Qi(e,t){if(!I.get(e)){let r=t.getCenter();I.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()),Cr.get(e)||Cr.set(e,{mousemove:Cg,click:Eg,mouseleave:zg}),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),Cr.get(e),e)),M.get(e)&&Ag(e,t)}var Xt=new WeakMap;var Je=new WeakMap;var Jt=new WeakMap;$();var ys={x:0,y:0};var Oe=new WeakMap;var he=new WeakMap;var At=new WeakMap;var en={size:[null,null],format:"r32float",usage:null};var xs={texture:null};var bf={bytesPerRow:null};var vs=[null,null];function Rg(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 Og(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,Rg(n,s,c,r);return n}function Dg(e,t){let r=v.get(e).device;if(he.get(e)?.device===r)return he.get(e);let o=Xt.get(e),i=o.max.x-o.min.x+1,n=o.max.y-o.min.y+1,{elevations:a,low:s,high:m}=Og(rt.get(e),o);return Oe.get(e)&&j(e,Oe.get(e).texture),Oe.set(e,{texture:r.createTexture((en.size[0]=i*256,en.size[1]=n*256,en.usage=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST,en)),low:Number.isFinite(s)?s:Je.get(e),high:Number.isFinite(m)?m:Je.get(e)}),r.queue.writeTexture((xs.texture=Oe.get(e).texture,xs),a,(bf.bytesPerRow=i*1024,bf),(vs[0]=i*256,vs[1]=n*256,vs)),xs.texture=null,At.set(e,new Map),he.set(e,Ge(e,{baseTexture:t,unlit:!0,terrain:Oe.get(e),alphaMode:"BLEND",depthWrite:!0,doubleSided:e.options.doubleSided})),he.get(e)}var ws={size:null,usage:null};function Ig(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 Gg(e,t){let r=v.get(e).device,o=At.get(e).get(t);if(!o){o=Ig(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((ws.size=Math.max(4,n.data.byteLength),ws.usage=i==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST,ws)),r.queue.writeBuffer(n.buffer,0,n.data);At.get(e).set(t,o)}return o}function Ug(e,t,r,o){let i=Je.get(e),n=Math.min(Oe.get(e).low,i)-i,a=Math.max(Oe.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 Ng(e,t,r,o){if(!await Jt.get(e)||!e._map||me.get(e._map)!==e||pe.get(t)!==e||o.request.signal.aborted||!D.get(t).has(`${r.z}/${r.x}/${r.y}`)||D.get(e).has(o))return;let n=Math.max(1,Math.min(64,256/2**(r.z-ge.get(e)))),a=e._map,s=a.options.crs,m=s.project(I.get(e)),f=Math.cos(I.get(e).lat*B),p=s.scale(r.z),c=2**(ge.get(e)-r.z),l=ys;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=v.get(e).device,g=o.texture,y=Dg(e,g),w=Gg(e,n),S=Je.get(e),T=(h.x-u.x)*f,P=-(h.y-u.y)*f,R=Ug(e,w,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:R,program:y,texture:g,terrain:[r.x*256*c-Xt.get(e).min.x*256,r.y*256*c-Xt.get(e).min.y*256,256*c,S],tile:o,opacity:t.options.opacity??1,id:vt.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),D.get(e).set(o,Q)}async function Ls(e,t,r){if(pe.get(e)&&r.done&&!r.request.signal.aborted&&D.get(e).get(`${t.z}/${t.x}/${t.y}`)===r)try{await Ng(pe.get(e),e,t,r)}catch(o){e.fire("tileerror",{tile:r,coords:t,error:o})}}function ai(e,t){if(!D.get(e)||pe.get(e)===t)return;let r;for(r of D.get(e).values())pe.get(e)&&Lo(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 D.get(e).values())r.done&&Ls(e,r.coords,r)}async function Fg(e,t,r){try{await r,we.get(e).resolve(),ai(e,me.get(t))}catch(o){e.fire("error",{error:o})}}var Wg=new Map;var jg=new Map;function $g(e,t){return e.tile.coords.z-t.tile.coords.z||e.distance-t.distance}var tn=[null];var Rt=new WeakMap;$();var rn={size:[null,null],format:"rgba8unorm",usage:null};var Vg={addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",magFilter:"linear",minFilter:"linear"};var bs={size:null,usage:null};var Zg=[0,0,0,1,0,0,0,0,1,1,0,1];var qg=[0,1,0,0,1,0,0,1,0,0,1,0];var Hg=[0,0,1,0,0,1,1,1];var Yg=[0,2,1,1,2,3];function Xg(e){let t={position:{size:3,data:new Float32Array(Zg)},normal:{size:3,data:new Float32Array(qg)},uv:{size:2,data:new Float32Array(Hg)},index:{data:new Uint16Array(Yg)}},r,o;for([r,o]of Object.entries(t))o.count=o.data.length/(o.size||1),o.indexFormat="uint16",o.buffer=e.createBuffer((bs.size=o.data.byteLength,bs.usage=r==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST,bs)),e.queue.writeBuffer(o.buffer,0,o.data);return{device:e,attributes:t,drawRange:{start:0,count:t.index.count}}}function Jg(e,t){let r=v.get(e).device,o={device:r,texture:r.createTexture((rn.size[0]=t.image.width,rn.size[1]=t.image.height,rn.usage=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT,rn)),sampler:r.createSampler(Vg),image:t.image,format:"rgba8unorm",srgb:!1,uploaded:null},i=Nr,n=uo,a=ho;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,he.get(e)||he.set(e,Ge(e,{baseTexture:o,unlit:!0,alphaMode:"BLEND",doubleSided:e.options.doubleSided})),Rt.get(e)||Rt.set(e,Xg(r));let{coords:s}=t,m=e._map.options.crs,f=m.project(I.get(e)),p=Math.cos(I.get(e).lat*B),c=m.scale(s.z),l=ys;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:Rt.get(e),program:he.get(e),texture:o,opacity:e.options.opacity,id:vt.value++,renderOrder:e.options.zIndex||0,tile:t,fadeDuration:250,ground:!0,_rasterSource:e},q(t.mesh,M.get(e))}async function Kg(e,t){try{await re.get(e);let r=await Jr(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{tn[0]=r.data;let o=new Blob(tn);tn[0]=null,t.image=await createImageBitmap(o)}}catch{throw tn[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}Jg(e,t),t.loadedAt=performance.now(),t.done=!0,_e.set(e,(_e.get(e)||0)+1),Ls(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,_e.set(e,(_e.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&&(Ms(e),Mo(e),fe.get(e)||e.fire("load"),E(e))}}function Qg(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"),Kg(e,t)}function Ms(e){let t=e._map;if(!t)return;let r=t.project(t.getCenter(),0).divideBy(256),o=[],i,n;for(i of D.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($g);for({tile:i}of o){if(fe.get(e)>=4)break;Qg(e,i)}}function ey(e,t){let r=D.get(e),o,i,n;for([o,i]of r)!t.has(o)&&!i.done&&bo(e,i);for([o,n]of t)r.has(o)||(i={coords:n,request:new AbortController,done:!1},r.set(o,i))}var _r=[0,0];var Er=[0,0];function ty(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();_r[0]=t.maxLat,_r[1]=t.minLon,Er[0]=t.minLat,Er[1]=t.maxLon;let a=t.maxLat===void 0||t.minLon===void 0?null:e.project(_r,r).divideBy(256).floor(),s=t.minLat===void 0||t.maxLon===void 0?null:e.project(Er,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 Ts(e){let t=e._map;if(!t||!O.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));ar.set(e,r);let o=ty(t,U.get(e),r),i=Wg;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});or.set(e,new Set(i.keys()));let p=jg;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)D.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(),ey(e,u),Ms(e),Mo(e)}async function ry(e,t,r){try{await Promise.all([r,re.get(e)]),e._map===t&&t.hasLayer(e)&&Ts(e)}catch(o){e.fire("error",{error:o})}}function oy(e,t){I.get(e)||I.set(e,t.getCenter());let r=ri(e,t);Fg(e,t,r),ry(e,t,r)}var Ps=new WeakMap;var Ss=new WeakMap;var si=new WeakMap;var zr=new WeakMap;var ro=new WeakMap;var ks=new WeakMap;async function iy(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 Jr(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}`);rt.get(t).set(`${n.x}/${n.y}`,new Float32Array(a.data))}}function ny(e){if(!e.ok)throw new Error(`Bridges: HTTP ${e.status}`);return e.json()}L();function ay(e,t){let r=e._map;ge.set(e,t.maxZoom),_r[0]=t.maxLat,_r[1]=t.minLon;let o=r.project(_r,ge.get(e)).divideBy(256).floor();Er[0]=t.minLat,Er[1]=t.maxLon;let i=r.project(Er,ge.get(e)).divideBy(256).floor();Xt.set(e,new d.Bounds(o,i));let n=[],a=r.project(r.getCenter(),ge.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:ge.get(e),x:s,y:m,distance:Math.hypot(s+.5-a.x,m+.5-a.y)});return n.sort(is),n}var oo=new WeakMap;$();L();function sy([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 my(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 fy(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=ft.get(e).get(h),x||ft.get(e).set(h,x=[]),x.push(g)}function py(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 cy(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 ly(e,t,r){let o=0,i,n;for(i of r){for(n=0;n<i.length;n++)cy(e,t[o+n],t[o+(n+1)%i.length]);o+=i.length}}function uy(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,w,S,T;for(p of t)c=p.slice(0,-1),c.length>=3&&f.push(c);if(!f.length)return;let P=[],R=[];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)R.push(sy(g,n,a,s,m));try{y=my(f,P),[w,...S]=y,T=Qn(w,S)}catch{return}fy(r,P,T),py(e,R,T),ly(e,R,f)}function dy(e,t){let r=e._map,o=r.options.crs,i=ge.get(e),n=o.project(I.get(e)),a=Math.cos(I.get(e).lat*B),s=M.get(e).position[1],m=[],f=[],p=[];ft.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++)uy(c,l.type==="Polygon"?u:u[h]);m.length&&oo.set(e,pr(e,{position:m,normal:f,color:p}))}function hy(e,t,r){Be.set(e,!0),Je.set(e,nr(e,I.get(e))??0);let o;for(o of Object.values(t._layers))Ko(o),oi(o,e);r&&dy(e,r),t.fire("terrainchange"),E(e),e.fire("terrainready")}async function Cs(e){if(zr.get(e)||!e._map)return;zr.set(e,!0),Be.set(e,!1);let t=new AbortController;si.set(e,t);let r;try{if(!ro.get(e))throw new Error("Terrain layer requires a PMTiles or COG elevation archive");let o=ra({source:{type:"raster",url:ro.get(e),archive:e.options.archive,asset:e.options.asset,workerUrl:e.options.workerUrl}});ks.set(o,e._map),Ss.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=ay(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(iy(s));await Promise.all(m);let f=e.options.bridges&&await fetch(e.options.bridges,{signal:t.signal}).then(ny);return t.signal.aborted||e._map!==n?void 0:(hy(e,n,f),!0)}catch(o){return t.signal.aborted||e.fire("error",{error:o}),!1}finally{zr.set(e,!1)}}function gy(){Cs(this.backend).then(this.resolve,this.reject)}function yy(e){A.get(e)==="raster"&&ai(e,this)}function xy(e,t){if(Me.get(t)||me.get(t)&&me.get(t)!==e)throw new Error("Only one terrain layer can be active per map");if(Ps.get(e)){Me.set(t,{layer:e,map:t,terrainCache:new Map,terrainController:new AbortController}),Qi(e,t),t.fire("terrainchange");return}if(me.set(t,e),Qi(e,t),M.get(e))Jt.set(e,Cs(e));else{let r=Promise.withResolvers();Jt.set(e,r.promise),e.once("ready",gy,{backend:e,...r})}t.eachLayer(yy,e),t.fire("terrainchange")}var _s=[];function vy(){_s.shift()?.fire("load")}function wy(){this._image||this._initImage(),this._image.complete&&this._image.naturalWidth&&(_s.push(this),queueMicrotask(vy))}function Ly(e,t){switch(A.get(e)){case"3d":return Qi(e,t);case"raster":return oy(e,t);case"terrain":return xy(e,t);case"image":return wy.call(e,t);case"time":return Wd.call(e,t)}}function by(e){if(!e._map)return;let t;for(t of Y.get(e).values())Kr(e,t);Y.get(e).clear(),Qr(e)}function My(e){let t={};return ae.get(e)&&(t.moveend=t.zoomend=t.rotate=t.pitch=t.resize=Qr.bind(null,e)),(X.get(e)||ae.get(e))&&(t.terrainchange=by.bind(null,e)),t}function By(e){let t=Ts.bind(null,e);return{moveend:t,zoomend:t,rotate:t,pitch:t,resize:t}}function Ty(){return{}}L();function Py(e){return!Tr.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 Sy(e){let t=Py(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)&&(A.get(this)?(this._map=r,this._zoomAnimated=r._zoomAnimated,A.get(this)!=="pending"&&A.get(this)!=="time"&&(kr.set(this,A.get(this)==="raster"?By(this):Tr.get(this)?My(this):Ty()),to.set(this,r),r.on(kr.get(this),this),this.once("remove",Pg,this)),Ly(this,r),this.fire("add"),r.fire("layeradd",{layer:this})):Ir.value._layerAdd.call(this,e),!(!t||!e.target.hasLayer(this))&&pa(this,e.target))}L();var Es=[];var zs={value:Promise.resolve()};function ky(e,t){X.set(e,!0),Et(e,t)}function Cy(e){return e.data===void 0&&(e.tileJSON!==void 0||typeof e.url=="string"&&/\{[zxy]\}|%7B[zxy]%7D/i.test(e.url))}L();var Le=new WeakMap;async function _y(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 Ey(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 zy(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 Ay(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 Ry(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=zy(o,a),n!==void 0){t+=n;continue}o==="/"&&(i==="/"||i==="*")?(r=Ay(e,r,i),t+=i==="/"?`
|
|
4
|
+
`:" "):t+=o}return t}function Oy(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 Dy(e){let t=/^\s*(?:const|let|var)\s+otm_layers\s*=\s*/.exec(e);t&&(e=e.slice(t[0].length));let r=Ey(Ry(e).trim().replace(/;$/,"")),o=JSON.parse(r),i=o.layers??o;return Oy(i),i}async function Iy(e){if(typeof e=="string"){let r=await fetch(e);if(!r.ok)throw new Error(`Vector style: HTTP ${r.status}`);e=Dy(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 Gy(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 Uy(e){if(!e||typeof e!="object")throw new TypeError("Vector tiles require source options");e.tileJSON&&(e=await _y(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 Gy(o,i,n),r=await Iy(r),{...e,url:t,style:r,minNativeZoom:o,maxNativeZoom:i,maxZoom:n}}async function Ny(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 As="move zoom rotate pitch resize viewreset";function Fy(e,t,r,o,i){let n=0;if(e==="all"){for(n=0;n<t.length;n++)if(!z(t[n],r,o,i))return!1;return!0}if(e==="any"){for(n=0;n<t.length;n++)if(z(t[n],r,o,i))return!0;return!1}throw new Error(`Unsupported vector style expression: ${e}`)}function Wy(e,t,r,o,i){let n=0,a=null;if(e==="coalesce"){for(n=0;n<t.length;n++)if(a=z(t[n],r,o),a!=null)return a;return null}if(e==="case"){for(n=0;n<t.length-1;n+=2)if(z(t[n],r,o))return z(t[n+1],r,o);return z(t[t.length-1],r,o)}throw new Error(`Unsupported vector style expression: ${e}`)}function Ar(e,t,r,o){return o&&typeof e=="string"?t[e]:z(e,t,r)}function jy(e,t,r,o,i){let n=Ar(t[0],r,o,i),a=z(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 Mf={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 $y(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 Vy(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 Rr(e){return Object.hasOwn(Mf,e)?Mf[e]:/^#[0-9a-f]{3}$/i.test(e)||/^#[0-9a-f]{6}$/i.test(e)?Vy(e):$y(e)}function Zy(e,t,r){let o=z(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 z(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=z(e[n-1],t,r),p=z(e[n+1],t,r),typeof f=="number"&&typeof p=="number")return f+(p-f)*m;for(f=Rr(f),p=Rr(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 z(e.at(-1),t,r)}function Bf(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 Rs(e,t,r,o,i){let n=null;if(e==="!in")return n=Ar(t[0],r,o,i),!Bf(t,1,t.length,n);if(i)return n=Ar(t[0],r,o,!0),Bf(t,1,t.length,n);let a=z(t[1],r,o);return n=Ar(t[0],r,o,!1),a.includes(n)}function qy(e,t,r,o,i){if(e==="in")return Rs(e,t,r,o,i);if(e==="interpolate")return Zy(t,r,o);throw new Error(`Unsupported vector style expression: ${e}`)}function Hy(e,t,r,o){let i=0,n=0;if(e==="+"){for(i=0;i<t.length;i++)n+=z(t[i],r,o);return n}if(e==="-")return t.length===1?-z(t[0],r,o):z(t[0],r,o)-z(t[1],r,o);throw new Error(`Unsupported vector style expression: ${e}`)}function Yy(e,t,r){let o=z(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 z(e[i+1],t,r);return z(e[e.length-1],t,r)}function Xy(e,t,r,o,i){if(e==="!")return!z(t[0],r,o,i);if(e==="!=")return Ar(t[0],r,o,i)!==z(t[1],r,o);if(e==="!in")return Rs(e,t,r,o,i);throw new Error(`Unsupported vector style expression: ${e}`)}function Jy(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 Ky(e,t,r){let o=z(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 z(i,t,r)}function Qy(e,t,r,o){if(e==="to-boolean")return!!z(t[0],r,o);if(e==="to-number"){let i=0,n=0;for(i=0;i<t.length;i++)if(n=Number(z(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 z(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 Jy(i,n,t,r);switch(a[0]){case"a":return Fy(i,n,t,r,o);case"!":return Xy(i,n,t,r,o);case"=":case"<":case">":return jy(i,n,t,r,o);case"i":return qy(i,n,t,r,o);case"t":return Qy(i,n,t,r,o);case"c":return Wy(i,n,t,r,o);case"m":return Yy(n,t,r);case"s":return Ky(n,t,r);default:return Hy(i,n,t,r)}}function Ke(e){return e._map.getZoom()+(Le.get(e).styleZoomOffset??0)}function ex(){clearTimeout(this.timer),this.changedAt=performance.now(),this.timer=setTimeout(this.update.bind(this),180)}$();function Os(e,t){if(!Number.isFinite(t))throw new TypeError("Marker rotation must be finite");return e.options.rotation=t,e.update(),Tt(e),e}function on(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&&Os(t,n*B)}function tx(){let e;for(e of this.labels.values())e._mvtLabel&&on(this._map,e,e._mvtLabel)}var mi=new WeakMap;function fi(e){let t=mi.get(e);t?.blobUrl&&(URL.revokeObjectURL(t.blobUrl),t.blobUrl=null)}function rx({data:e}){fi(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 ox(e){fi(this);let t=new Error(`Worker MVT: ${e.message}`),r;for(r of this.waiting.values())r.reject(t);this.waiting.clear(),qe(this,t)}function ix(e){let{style:t,pane:r}=Le.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=z(i.paint["background-color"],{},Ke(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=os(this.options.workerUrl||rs);mi.set(this,n),this.worker=n.worker,this.worker.onmessage=rx.bind(this),this.worker.onerror=ox.bind(this),this.refresh=ex.bind(this),this.rotateLabels=tx.bind(this),e.on(As,this.refresh),e.on("move rotate pitch",this.rotateLabels),this.update()}function nx(e){e.off(As,this.refresh),e.off("move rotate pitch",this.rotateLabels),clearTimeout(this.timer),this.session=null,this.worker.terminate(),fi(this),mi.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 ax(){if(!this.session)return;let{minNativeZoom:e,maxNativeZoom:t}=Le.get(this),r=Math.max(e,Math.min(t,Math.floor(Ke(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(qe.bind(null,this)),this.updateLabels().catch(qe.bind(null,this))}function Or(e,t,r,o,i){return e[t]===void 0?r:z(e[t],o,i)}function sx(e,t,r){let o=Rr(Or(e,"fill-color","#000",t,r)),i=Or(e,"fill-outline-color",null,t,r),n=i===null?null:Rr(i),a=Or(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 mx(e,t,r,o){if(!e)return;let i=e,n=0,a="";if(typeof e[0]!="number"&&(i=z(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 fx(e,t,r,o){let i=Or(t,"line-width",1,r,o),n=Rr(Or(t,"line-color","#000",r,o)),a=Or(t,"line-opacity",1,r,o)*n[3],s=mx(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 px(e,t,r){let o=e.paint||{};return e.type==="fill"?sx(o,t,r):fx(e,o,t,r)}function Ds(e,t,r){return r>=(e.minzoom??0)&&r<(e.maxzoom??1/0)&&e.layout?.visibility!=="none"&&(!e.filter||z(e.filter,t,r,!0))}function Is(e,t){let r=px(e.entry,e.properties,t);return Ds(e.entry,e.properties,t)||(r.opacity=0,r.fillOpacity=0),r}function cx(e,t){let r=Is(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 io(e,t){return e.session===t&&performance.now()-(e.changedAt||0)>=180}function ht(e=0){let t=Promise.withResolvers();return setTimeout(t.resolve,e),t.promise}async function lx(){let e=Ke(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(!io(this,t)||this.paintRevision!==r||Ke(this)!==e)return;cx(n,e),++o%32===0&&await ht()}this.paintZoom=e}function ux(e,t){return e.priority-t.priority}function dx(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(ux)}function hx(e,t,r){let o=e._map,i=Ke(e);if(!Ds(t.entry,t.properties,i)||(t.size=z(t.entry.layout?.["text-size"]??12,t.properties,i),!(t.size>0))||t.icon&&!Le.get(e).spriteSheet?.index[t.icon]||(t.color=z(t.entry.paint?.["text-color"]??"#000",t.properties,i),t.halo=z(t.entry.paint?.["text-halo-color"]??"#fff",t.properties,i),t.haloWidth=z(t.entry.paint?.["text-halo-width"]??0,t.properties,i),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 gx(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 yx(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 xx(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 Tf(e,t){if(e.icon)return yx(e,t);let r=document.createElementNS("http://www.w3.org/2000/svg","svg"),o=e.along?[e.text]:xx(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 Gs({error:e}){qe(this,e)}function vx(e,t,r){let o=JSON.stringify([t.size,t.color,t.halo,t.haloWidth,t.icon]),i=Le.get(e).spriteSheet,n=e.labels.get(r);if(n){if(n._mvtLabel=t,n._mvtLabelStyle===o)return on(e._map,n,t),!1;n.setIcon(Tf(t,i))}else{let{pane:a}=Le.get(e);n=new d.Marker(t.latlng,{icon:Tf(t,i),pane:`${a}-${t.order}`,title:t.text,alt:t.text,interactive:!1,keyboard:!1,rotateWithView:!1}).on("error",Gs,e).addTo(e._map),e.labels.set(r,n)}return n._mvtLabelStyle=o,n._mvtLabel=t,on(e._map,n,t),!0}async function wx(){let e=this.session,t=this.labelRevision=(this.labelRevision||0)+1;this.labelsReady=!1;let r=dx(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 ht(),!io(this,e)||this.labelRevision!==t)return;f=hx(this,s,o),!(!f||!s.allowOverlap&&!gx(f,i))&&(m=`${s.text}${s.icon||""}:${s.latlng.join(":")}`,n.add(m),vx(this,s,m)&&await ht())}for([m,p]of this.labels){if(!io(this,e)||this.labelRevision!==t)return;n.has(m)||(p.remove(),this.labels.delete(m),await ht())}this.labelsReady=!0}function Lx(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 bx(e,t){let r;for(r of e.tiles.values())if(r.needed&&!r.group&&Lx(r.coords,t.coords))return!0;return!1}function Mx(){let e,t;for([t,e]of this.tiles)e.needed||e.group&&bx(this,e)||(e.controller.abort(),this.tiles.delete(t),e.group&&this.retire(e.group).catch(qe.bind(null,this)))}async function Bx(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 ht()}e.remove(),this.retiring.delete(e)}function Tx(e,t){return e.distance-t.distance}function Px(){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(Tx);for(r of t){if(this.inflight>=4)break;r.started=!0,this.inflight++,this.load(r)}}L();L();function Sx(e,t,r,o){let{pane:i}=Le.get(e),a={...Is(o,Ke(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",Gs,e),t.rendered.push({layer:s,kind:o.kind,entry:o.entry,properties:o.properties}),r.addLayer(s)}async function kx(e,t,r,o,i){let n,a=performance.now();for(n of o){for(;!io(e,i)&&e.session===i&&!t.controller.signal.aborted;)await ht(50);if(t.controller.signal.aborted||e.session!==i)return!1;Sx(e,t,r,n),performance.now()-a>8&&(await ht(),a=performance.now())}return!0}async function Cx(e){let{coords:t,controller:r}=e,o=this.session,{url:i,style:n,sourceId:a,maxZoom:s,maxNativeZoom:m}=Le.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:Ke(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 kx(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 _x(e,t){let r=await Uy(t);typeof r.sprite=="string"&&(r.spriteSheet=await Ny(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)}`,Le.set(e,r),Object.assign(e,{onAdd:ix,onRemove:nx,update:ax,updatePaint:lx,updateLabels:wx,prune:Mx,retire:Bx,pump:Px,load:Cx}),e}function Ex(e){let t=e._map;return t?.removeLayer(e),A.delete(e),t?.addLayer(e),e.fire("ready"),e}function Us(e,t){throw e.fire("error",{error:t}),t}function zx(e,t){A.set(e,"pending");let r=_x(e,t).then(Ex.bind(null,e)).catch(Us.bind(null,e));re.set(e,r),r.catch(Ye)}L();async function Ax(e,t){let r=await Xr(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 Rx(e){let t,r;for(t of D.get(e).values())bo(e,t);if(he.get(e)?.pipelineCache.clear(),he.set(e,null),Rt.get(e)){for(r of Object.values(Rt.get(e).attributes))j(e,r.buffer);Rt.set(e,null)}}var Dr=new WeakMap;var pi=new WeakMap;var Ns={_3d:Tr,_added:we,_areas:Y,_bridgeMesh:oo,_bridges:ft,_cameraZIndexOffset:Fr,_countStatus:Mr,_cursor:Pr,_dem:Oe,_directories:Br,_etag:Ho,_fadeFrame:Dr,_fadeVersion:pi,_frame:st,_geojson:X,_header:ji,_inflight:Xe,_layers:F,_loadingTiles:fe,_nativeGPU:ue,_pointerEvents:Cr,_pruneAfter:Nt,_pruneVersion:Ti,_pruneWanted:Pi,_queued:eo,_rasterGeometry:Rt,_rasterProgram:he,_rasterTiles:D,_rasterVersion:_e,_rendererReady:ut,_roofRaster:K,_roofRasters:Li,_sceneOrigin:ie,_shadowMeshes:Gt,_shared:O,_size:ir,_terrain3D:pe,_terrainArchive:Ss,_terrainBaseY:kt,_terrainBounds:Xt,_terrainController:si,_terrainGrids:At,_terrainLoading:zr,_terrainOriginElevation:Je,_terrainPromise:Jt,_terrainReady:Be,_terrainRequest:Un,_terrainTiles:rt,_terrainZoom:ge,_tileZoom:ar,_tooltip:Re,_type:qt,_visibleMeshes:Ur,_wantedRasterTiles:or,_zoomLevel:ti,_zoomTransitions:de,_zoomView:Ze,camera:ee,container:Ae,control:Pt,eventMap:to,events:kr,group:Qa,header:U,highlightedFeature:nt,hoveredFeature:Se,kind:A,location:I,model:je,modelUrl:We,raycaster:ne,ready:re,renderer:v,root:M,scene:oe,terrainSource:ro,url:ae,walker:Ka};L();var Ox=["_layers","_sceneOrigin","_size","_zoomLevel","_zoomTransitions","_zoomView","_cursor","_roofRaster"];var Dx=["_layers","_sceneOrigin","_size","_zoomLevel","_cursor"];async function Ix(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 Gx(e,t){if(K.get(e)&&j(e,K.get(e).texture.texture),K.set(e,null),de.get(e)){let i;for(i of de.get(e).keys())i.play()}de.set(e,null),Ze.set(e,null),se.delete(t),t.getContainer().classList.remove("leaflet-camera-zoom");let r=v.get(e);r.canvas.remove(),Ix(r,e),te.delete(t);let o;for(o of Dx)Ns[o].delete(e)}function no(e,t){we.set(e,Promise.withResolvers()),Ae.get(e)&&(ni(e),d.DomEvent.off(Ae.get(e),Cr.get(e),e),Ae.set(e,null));let r,o,i,n;for(r of Y.get(e).values())Kr(e,r);Y.get(e).clear(),Re.get(e)?.remove(),Re.set(e,null),(ae.get(e)||X.get(e))&&es(e,!1);let a=O.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",Vi,e),t.off("zoomstart",Zi,e),t.off("zoomanim",qi,e),t.off("zoomend",Hi,e),Gn(e),F.get(e).size){let s=F.get(e).values().next().value;for(o of Ox)n=Ns[o],n.set(s,n.get(e)),n.delete(e);for(i of F.get(s))O.set(i,s);te.set(t,s),t.on("move zoom rotate pitch resize viewreset layeradd layerremove",Vi,s),t.on("zoomstart",Zi,s),t.on("zoomanim",qi,s),t.on("zoomend",Hi,s),E(s)}else Gx(e,t);else E(a);O.set(e,null),v.set(e,null),oe.set(e,null),ee.set(e,null)}}function Ux(e,t){Rx(e),pe.set(e,null),no(e,t)}L();function Fs(e,t){A.set(e,"raster"),t={ariaLabel:"PMTiles raster",maxZoom:18,opacity:1,zIndex:0,...t},d.Util.setOptions(e,t),M.set(e,Ee()),Y.set(e,new Map),D.set(e,new Map),fe.set(e,0),we.set(e,Promise.withResolvers()),ae.set(e,new URL(t.url,document.baseURI).href),Br.set(e,new Map),re.set(e,Promise.resolve(e.options.archive||e).then(Ax.bind(null,e)).catch(Us.bind(null,e)))}var Nx=Object.freeze([]);function Fx(e){A.get(e)==="raster"&&ai(e,null)}function Wx(e,t){let r=Me.get(t);if(r?.layer===e){Me.delete(t),r.terrainController.abort(),r.terrainCache.clear(),t.fire("terrainchange"),no(e,t);return}si.get(e)?.abort(),zr.set(e,!1),Be.set(e,!1),t.eachLayer(Fx);let o,i,n,a;for(o of D.get(e).keys())Lo(e,o);me.get(t)===e&&me.delete(t);for(i of Object.values(t._layers))oi(i,null),Ko(i);t.fire("terrainchange"),rt.get(e).clear(),Je.set(e,0),Jt.set(e,null),he.get(e)&&he.get(e).pipelineCache.clear(),he.set(e,null),Oe.get(e)&&j(e,Oe.get(e).texture),Oe.set(e,null);for(n of At.get(e)?.values()||Nx)for(a of Object.values(n))j(e,a.buffer);At.set(e,null),ft.set(e,null),Ie(e,oo.get(e)),oo.set(e,null),no(e,t)}function jx(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,Et(e,o),ro.set(e,r),rt.set(e,new Map),D.set(e,new Map),Be.set(e,!1),t.getTile&&Ps.set(e,!0),A.set(e,"terrain")}L();var Ws=Object.freeze({});var Kt=[[.86,.86,.88],[.1,.1,.12],[.5,.53,.57],[.65,.1,.08],[.12,.25,.55],[.85,.7,.15]];function $x(e){let t=Kt[e%Kt.length];return[[C(-.045,.045,-.85,-.25),.02,.62,Yt],[C(-.045,.045,.25,.85),.02,.62,Yt],[C(-.06,.06,-.5,.5),.4,.65,t],[C(-.32,.32,-.58,-.5),.95,1.02,Yt],[C(-.1,.1,.15,.4),.85,.92,Yt],[C(-.18,.18,-.12,.28),1,1.5,t],[C(-.11,.11,-.22,0),1.5,1.72,dt],[C(-.13,.13,-.23,.01),1.72,1.8,t],[C(-.25,-.15,-.5,-.05),1,1.25,dt],[C(.15,.25,-.5,-.05),1,1.25,dt],[C(-.2,-.08,0,.32),.3,1,Ht],[C(.08,.2,-.25,.07),.3,1,Ht]]}function Vx(e){let t=fs.body.slice();return t[1]=[t[1][0],t[1][1],t[1][2],Kt[e%Kt.length]],t.push([C(-.16,-.02,-.07,.07),.08,.9,Ht],[C(.02,.16,-.07,.07),.08,.9,Ht],[C(-.3,-.2,-.05,.05),.76,1.42,dt],[C(.2,.3,-.05,.05),.76,1.42,dt]),t}function ci(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 ao=[.12,.15,.18];var Ot=[.92,.93,.92];var li=[.05,.05,.05];var js=[1.9,1.85,1.7];var $s=[1.7,.06,.05];function ui(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,ao],[C(-1.25,1.25,o,i),2.65,3.1,Ot],[C(-1.15,-.85,o+1,o+2),0,.7,li],[C(.85,1.15,i-2,i-1),0,.7,li],[C(-.9,.9,o-.03,o),.8,1.05,js],[C(-.9,.9,i,i+.03),.8,1.05,$s]]}function Zx(e,t){return ui(0,12,ci(t))}function qx(e,t){let r=ci(t),o=[],i;for(i=0;i<5;i++)o.push(...ui((i-2)*6.5,6,r));return o}function Hx(e,t){let r=ci(t),o=[],i;for(i=0;i<5;i++)o.push(...ui((i-2)*15,14,r));return o}function Qt(e,t,r,o,...i){return[[C(e,t,r,o),...i],[C(-t,-e,r,o),...i]]}function Yx(e){let t=Kt[e%Kt.length];return[...Qt(.7,.92,-1.68,-1.02,0,.64,li),...Qt(.7,.92,1.02,1.68,0,.64,li),[[[-.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,ao,C(-.7,.7,-.05,1.3)],[C(-.71,.71,-.06,1.31),1.38,1.46,t],...Qt(.38,.8,-2.3,-2.16,.56,.76,js),[C(-.78,.78,2.16,2.3),.6,.76,$s]]}var Pf=[[-5.5,30],[5.5,30],[5.5,-20],[4,-26],[1.5,-30],[-1.5,-30],[-4,-26],[-5.5,-20]];function Xx(){let e=[],t;for(t=0;t<12;t++)e.push(...Qt(.5,3.8,-12+t*3,-11.3+t*3,3.9,4.4,[.62,.1,.1]));return e}function Jx(){return[[Pf,0,.8,[.1,.16,.26]],[Pf,.8,1.4,Ot],[C(-5,5,-18,26),1.4,3.7,ao,C(-4.6,4.6,-17.4,25.6)],...Qt(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,Ot],...Xx(),...Qt(4.65,4.8,-13.6,25.8,3.9,4.8,Ot),[C(-4.8,4.8,25.65,25.8),3.9,4.8,Ot],[C(-2.2,2.2,-17.6,-14),3.9,4.7,Ot],[C(-2.2,2.2,-17.6,-14),4.7,5.5,ao],[C(-2.5,2.5,-18,-13.6),5.5,5.7,Ot],[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,Ot],[C(-.15,.15,-15.95,-15.65),6.6,6.8,[2,2,1.9]]]}var Kx={bicycle:{side:.4,model:$x},pedestrian:{side:.3,model:Vx},bus:{side:1.5,model:Zx},tram:{side:0,model:qx},metro:{side:0,model:Hx},car:{side:1.8,model:Yx,lights:[{position:[0,1.2,-6],radius:10,color:[1,.94,.82],flux:800}]},boat:{side:0,model:Jx,lights:[{position:[0,8,4],radius:30,color:[1,.8,.55],flux:2e4}]}};var Qx=" 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 e0({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 Vs(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),qo(e.layer,e.status),e.update()}function t0(e){Lt.set(e.layer,e),e.ready&&Vs(e)}function er(e,t){t&&(nt.get(e.layer)?.mesh===t&&(Ct(e.layer,null),Se.set(e.layer,null),_t(e.layer,null)),Ie(e.layer,t))}function Zs(e){e.gpu?.params?.destroy(),e.gpu?.template?.destroy(),e.gpu?.points?.destroy(),e.gpu?.vehicles?.destroy(),e.gpu=null}function r0(e){e.request?.abort(),cancelAnimationFrame(e.frame),e.frame=void 0,e.layer._map.off("simulationtimechange layerremove",e.update).off("terrainchange",e.terrain),er(e,e.mesh),er(e,e.route),e.mesh=e.route=null,Lt.delete(e.layer),Zs(e),e.lanes.length=0,e.trips.length=0,e.tripsKey=e.loaded=null}function o0(e){e.ready=!0,e.layer._map&&Vs(e)}function qs(e){let t=Zo.get(e.layer._map),r=t?t.live:!0;return{live:r,time:r?new Date:t.time}}function i0(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 di=new Map;function kf(e){let t=e.split(":");return Number(t[0])*60+Number(t[1])}function n0(e,t){return e-t}function a0(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=di.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"}),di.size>=32&&di.delete(di.keys().next().value),di.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=kf(m);u<=kf(f);u+=p)g.push(u);g.sort(n0);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 s0(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 a0(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||=i0(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 Hs(e,t){e.error=t,e.status.textContent=`${e.vehicle}: Error: ${t.message}`,e.status.setAttribute("role","alert"),console.error("Traffic layer",t)}var m0=Object.freeze({unlit:!0});function f0(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,w=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,w-m):e.push(y+s,S,w+m),t.push(0,1,0),r.push(c,l,u)}function p0(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,w;for(g=Math.floor(i[n-1]/30)*30;g<i[n];g+=30)y=Math.max(0,(g-i[n-1])/u),w=Math.min(1,(g+18-i[n-1])/u),!(w<=y)&&f0(e,t,r,f,p,c,l,h,x,y,w,a,s,m)}function c0(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++)p0(t,r,o,i,n,l,f,p,c);return{position:t,normal:r,color:o}}function Ys(e,t,r,o,i=0){let n=pr(e.layer,t,o,i);return n.extras.featureFaces=r,n}function l0(e){e.route=Ys(e,c0(e.lanes),[],m0)}function Xs(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}}};Ce(f),e.mesh.geometry.bounds=f.bounds}function u0(e){let{trips:t,model:r,vertices:o}=e;if(er(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 ii(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=Ys(e,{position:new Array(i.length).fill(0),normal:new Array(i.length).fill(0),color:i},n,Ws,GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC),e.mesh.geometry.drawRange.count=f,e.mesh.extras.dynamicLights=!0,Xs(e)}function nn(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=nn(t,a),e.lanesDirty=!1}function h0(e){let{device:t}=v.get(e.layer);if(e.gpu?.device!==t){Zs(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:nn(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=nn(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 g0(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 y0(e,t,r,o){let i;try{o?e.trips=s0(t,e.lanes,e.velocity):e.trips.length=0,i=g0(e,o)}catch(f){Hs(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&&l0(e),n!==e.tripsKey&&(u0(e),e.tripsKey=n),e.mesh&&h0(e),e.error||(e.status.textContent!==i&&(e.status.textContent=i),e.status.removeAttribute("role")),m}function x0(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 v0(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}=zo(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&&(x0(e,(t-e.rebasedAt)/1e3),e.lights&&(!r||!(performance.now()-e.litAt<100))&&v0(e))}function L0(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}=qs(e),o=r?.getTime(),i=Number.isFinite(o),n=!1;(!t||!i||!(o>=e.rebasedAt&&o<e.nextCheck))&&(n=y0(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 b0(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 M0=Object.freeze([]);function B0({features:e=M0}){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 T0(e){let t=me.get(e);return Be.get(t)&&t}function Js(e){let{layer:t,lanes:r}=e,o=T0(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??ye(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 P0(e){let{layer:t,lanes:r}=e,o=t._map.options.crs,i=o.project(I.get(t)),n=Math.cos(I.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)}Js(e),er(e,e.route),e.route=null,e.tripsKey=null}function S0(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=B0(r),P0(e),e.frame||e.tick()}}function k0(e,t,r){!t.aborted&&r.name!=="AbortError"&&Hs(e,r)}function C0(e){let{time:t}=qs(e);if(!Number.isFinite(t?.getTime()))return;e.request?.abort();let{signal:r}=e.request=new AbortController;b0(e,t,r).then(S0.bind(null,e,r),k0.bind(null,e,r))}function _0(e,t){t?.layer&&!Pt.get(t.layer)?.time||(cancelAnimationFrame(e.frame),C0(e),e.tick())}function E0(e){e.lanes.length&&(Js(e),er(e,e.route),e.route=null,e.mesh&&Xs(e),e.frame||e.tick())}function z0(e,{url:t,vehicle:r="car",side:o,outline:i,speed:n=8,...a}=Ws){let{model:s,lights:m,side:f}=Kx[r];o??=f,Et(e,{tooltip:e0,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=ii(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=Qx,y.tick=L0.bind(null,y),y.update=_0.bind(null,y),y.terrain=E0.bind(null,y),Lt.set(e,y),e.on("ready",o0.bind(null,y)),e.on("add",t0.bind(null,y)),e.on("remove",r0.bind(null,y))}function A0(e){return e.header}function Cf(e,t,r,o,i){return Jo(e.layer._map||ks.get(e.layer),e.workerUrl,{type:"cog",url:e.url,asset:e.asset,z:t,x:r,y:o},i)}async function R0(e,t){let r={layer:e,url:new URL(t.url,document.baseURI).href,asset:t.asset,workerUrl:t.workerUrl},o=await Cf(r);return{getHeader:A0.bind(null,{header:o}),getZxy:Cf.bind(null,r)}}function O0(e,t){Fs(e,{ariaLabel:"COG raster",...t,archive:t.archive||R0(e,t)})}function D0(e,t={}){switch(e){case"raster":return t.asset!==void 0||/\.tiff?(?:[?#]|$)/i.test(t.url)?O0:Fs;case"terrain":return jx;case"traffic":return z0;default:return null}}function I0(){let e=Es.shift();return e.initialize=D0(e.type,e.settings),e.initialize||(e.error=new Error(`Unknown layer type: ${e.type}`)),e}function G0(e){let{layer:t,ready:r}=e;if(e.error)return qe(t,e.error),Promise.reject(e.error);try{let o=t._map;return o?.removeLayer(t),A.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=Eo){if(St.has(this)||St.add(this),Object.getPrototypeOf(this)!==d.Layer.prototype||!e?.source){if(Ir.value.initialize)return Ir.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),qt.set(this,t),t==="vector"){Cy(i)?zx(this,i):i.data!==void 0||i.url&&!/\.(?:pmtiles|glb|gltf)(?:[?#]|$)/i.test(i.url)?ky(this,i):Et(this,i);return}A.set(this,"pending");let n={layer:this,type:t,settings:i,ready:null};Es.push(n),zs.value=zs.value.catch(Ye).then(I0);let a=zs.value.then(G0);re.set(this,a),n.ready=a,a.catch(Ye)}L();function N0(e,t){switch(A.get(e)){case"3d":return no(e,t);case"raster":return Ux(e,t);case"terrain":return Wx(e,t);case"time":return jd.call(e,t)}}function F0(e){let t=d.Util.stamp(e);return this._layers[t]?A.get(e)?(this._loaded&&N0(e,this),delete this._layers[t],this._loaded&&(this.fire("layerremove",{layer:e}),e.fire("remove")),e._map=e._mapToAdd=null,this):mn.value.call(this,e):this}J();function W0(){return _(this)}Z();function j0(){return k(this)}Oi();function $0(e,t){return Vt(this,e,t)}Fo();function V0(e,t){return lt(this,e,t)}function Z0(e){return Os(this,e)}L();var Ks=new WeakMap;var Qs=new WeakMap;var em=new WeakMap;function q0(e){return this._project(),this._parts=this._rings,Ks.get(this).call(this,e)}function H0(){return this._project(),Qs.get(this).call(this)}function Y0(){em.get(this).call(this),this._container.remove()}var tr=new Map;var Dt={value:null};function X0(e){tr.delete(e),Dr.set(e,null),!tr.size&&Dt.value!==null&&(cancelAnimationFrame(Dt.value),Dt.value=null)}function J0(){Dt.value=null;let e=[...tr],t,r;for([t,r]of e)tr.get(t)===r&&(tr.delete(t),Dr.set(t,null),tm.call(t))}function K0(e){pi.set(e,(pi.get(e)||0)+1),tr.set(e,pi.get(e)),Dt.value===null&&(Dt.value=requestAnimationFrame(J0)),Dr.set(e,Dt.value)}function tm(){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(),Tt(this),X0(e),r&&K0(e)}function Q0(){return Tt(this),this}function ev(){this instanceof d.Polyline||this instanceof d.CircleMarker?(this.beforeAdd=this._updateBounds=Ye,this.redraw=Q0,A.set(this,"path"),this instanceof d.Polyline&&(Ks.set(this,this.closestLayerPoint),this.closestLayerPoint=q0),this instanceof d.Circle&&(Qs.set(this,this.getBounds),this.getBounds=H0)):this instanceof d.GridLayer?(em.set(this,this._initContainer),this._initContainer=Y0,this._updateOpacity=tm):this instanceof d.ImageOverlay&&!(this instanceof d.VideoOverlay)&&!(this instanceof d.SVGOverlay)&&(A.set(this,"image"),this._reset=Tt)}function tv(){St.has(this)||St.add(this);let e=this._initHooksCalled;sn.value.call(this),e||ev.call(this)}Ir.value=Object.defineProperties({},Object.getOwnPropertyDescriptors(d.Layer.prototype));sn.value=d.Layer.prototype.callInitHooks;d.Layer.include({initialize:U0,_layerAdd:Sy,callInitHooks:tv});mn.value=d.Map.prototype.removeLayer;d.Map.include({removeLayer:F0,getPitch:W0,getBearing:j0,setPitch:$0,setBearing:V0});d.Marker.include({setRotation:Z0});})();
|
|
5
7
|
//# sourceMappingURL=leaflet-city-mapper.js.map
|