UNPKG

@maplibre/ngx-maplibre-gl

Version:
1 lines 236 kB
{"version":3,"file":"maplibre-ngx-maplibre-gl.mjs","sources":["../../../projects/ngx-maplibre-gl/src/lib/shared/utils/functions/object.fn.ts","../../../projects/ngx-maplibre-gl/src/lib/map/map.service.ts","../../../projects/ngx-maplibre-gl/src/lib/control/control.component.ts","../../../projects/ngx-maplibre-gl/src/lib/control/attribution-control.directive.ts","../../../projects/ngx-maplibre-gl/src/lib/control/fullscreen-control.directive.ts","../../../projects/ngx-maplibre-gl/src/lib/control/geolocate-control.directive.ts","../../../projects/ngx-maplibre-gl/src/lib/control/navigation-control.directive.ts","../../../projects/ngx-maplibre-gl/src/lib/control/scale-control.directive.ts","../../../projects/ngx-maplibre-gl/src/lib/control/terrain-control.directive.ts","../../../projects/ngx-maplibre-gl/src/lib/source/source.directive.ts","../../../projects/ngx-maplibre-gl/src/lib/source/geojson/geojson-source.component.ts","../../../projects/ngx-maplibre-gl/src/lib/source/geojson/feature.component.ts","../../../projects/ngx-maplibre-gl/src/lib/draggable/draggable.directive.ts","../../../projects/ngx-maplibre-gl/src/lib/image/image.component.ts","../../../projects/ngx-maplibre-gl/src/lib/layer/layer.component.ts","../../../projects/ngx-maplibre-gl/src/lib/map/map.component.ts","../../../projects/ngx-maplibre-gl/src/lib/marker/marker.component.ts","../../../projects/ngx-maplibre-gl/src/lib/markers-for-clusters/markers-for-clusters.component.ts","../../../projects/ngx-maplibre-gl/src/lib/popup/popup.component.ts","../../../projects/ngx-maplibre-gl/src/lib/source/canvas-source.component.ts","../../../projects/ngx-maplibre-gl/src/lib/source/image-source.component.ts","../../../projects/ngx-maplibre-gl/src/lib/source/raster-dem-source.component.ts","../../../projects/ngx-maplibre-gl/src/lib/source/raster-source.component.ts","../../../projects/ngx-maplibre-gl/src/lib/source/vector-source.component.ts","../../../projects/ngx-maplibre-gl/src/lib/source/video-source.component.ts","../../../projects/ngx-maplibre-gl/src/lib/ngx-maplibre-gl.module.ts","../../../projects/ngx-maplibre-gl/src/lib/control/globe-control.directive.ts","../../../projects/ngx-maplibre-gl/src/public_api.ts","../../../projects/ngx-maplibre-gl/src/maplibre-ngx-maplibre-gl.ts"],"sourcesContent":["export const keepAvailableObjectValues = <T extends object>(object: T): Required<T> => {\n  return Object.keys(object).reduce((acc, curr) => {\n    const tKey = curr as keyof T;\n    if (object[tKey] === undefined) {\n      return acc;\n    }\n    return { ...acc, [tKey]: object[tKey] };\n  }, {} as Required<T>);\n};\n","import {\n  Injectable,\n  NgZone,\n  OutputEmitterRef,\n  inject,\n  signal,\n} from '@angular/core';\nimport {\n  type CameraOptions,\n  type FlyToOptions,\n  type LngLatLike,\n  type MapOptions,\n  type MarkerOptions,\n  type PopupOptions,\n  Map as MaplibreMap,\n  Marker,\n  Popup,\n  type Evented,\n  type AnimationOptions,\n  type LayerSpecification,\n  type StyleSpecification,\n  type LngLatBoundsLike,\n  type PointLike,\n  type IControl,\n  type SourceSpecification,\n  type FitBoundsOptions,\n  type Source,\n  type BackgroundLayerSpecification,\n  type FillLayerSpecification,\n  type FillExtrusionLayerSpecification,\n  type LineLayerSpecification,\n  type SymbolLayerSpecification,\n  type RasterLayerSpecification,\n  type CircleLayerSpecification,\n  type FilterSpecification,\n  type TerrainSpecification,\n  type QueryRenderedFeaturesOptions,\n  type ControlPosition,\n  type Subscription,\n  type MapLayerEventType,\n  type ProjectionSpecification\n} from 'maplibre-gl';\nimport { AsyncSubject } from 'rxjs';\nimport type {\n  LayerEvents,\n  MapEvent,\n  MapImageData,\n  MapImageOptions,\n} from './map.types';\nimport { keepAvailableObjectValues } from '../shared/utils/functions/object.fn';\n\nexport interface SetupMap {\n  mapOptions: Omit<MapOptions, 'bearing' | 'pitch' | 'zoom'> & {\n    bearing?: [number];\n    pitch?: [number];\n    zoom?: [number];\n    terrain?: TerrainSpecification;\n    projection?: ProjectionSpecification;\n  };\n  mapEvents: MapEvent;\n}\n\nexport interface SetupLayer {\n  layerOptions: LayerSpecification;\n  layerEvents: LayerEvents;\n}\n\nexport interface SetupPopup {\n  popupOptions: PopupOptions;\n  popupEvents: {\n    popupOpen: OutputEmitterRef<void>;\n    popupClose: OutputEmitterRef<void>;\n  };\n}\n\n/**\n * @private\n */\nexport interface SetupMarkerOptions extends MarkerOptions {\n  element: HTMLElement;\n  feature?: GeoJSON.Feature<GeoJSON.Point>;\n  lngLat?: LngLatLike;\n}\n\nexport interface SetupMarker {\n  markersOptions: SetupMarkerOptions;\n  markersEvents: {\n    markerDragStart: OutputEmitterRef<Marker>;\n    markerDrag: OutputEmitterRef<Marker>;\n    markerDragEnd: OutputEmitterRef<Marker>;\n  };\n}\n\nexport type MovingOptions =\n  | FlyToOptions\n  | (AnimationOptions & CameraOptions)\n  | CameraOptions;\n\n/**\n * @private\n */\n@Injectable()\nexport class MapService {\n  private readonly zone = inject(NgZone);\n\n  mapInstance: MaplibreMap;\n  mapEvents: MapEvent;\n  private readonly subscriptionsPerInstance = new Map<Evented, Subscription[]>();\n\n  private readonly mapCreated = new AsyncSubject<void>();\n  private readonly mapLoaded = new AsyncSubject<void>();\n  private readonly markersToRemove = signal<Marker[]>([]);\n  private readonly popupsToRemove = signal<Popup[]>([]);\n  private readonly imageIdsToRemove = signal<string[]>([]);\n\n  readonly mapCreated$ = this.mapCreated.asObservable();\n  readonly mapLoaded$ = this.mapLoaded.asObservable();\n\n  setup(options: SetupMap) {\n    // Workaround rollup issue\n    this.createMap(options.mapOptions as MapOptions);\n    this.hookEvents(options.mapEvents);\n    this.mapEvents = options.mapEvents;\n    this.mapCreated.next(undefined);\n    this.mapCreated.complete();\n\n    if (options.mapOptions.terrain || options.mapOptions.projection) {\n      this.mapInstance.on('load', () => {\n        if (options.mapOptions.projection) {\n          this.setProjection(options.mapOptions.projection!);\n        }\n        if (options.mapOptions.terrain) {\n          this.setTerrain(options.mapOptions.terrain!);\n        }\n      });\n    }\n  }\n\n  destroyMap() {\n    if (this.mapInstance) {\n      this.mapInstance.remove();\n    }\n  }\n\n  updateMinZoom(minZoom: number) {\n    return this.zone.runOutsideAngular(() => {\n      this.mapInstance.setMinZoom(minZoom);\n    });\n  }\n\n  updateMaxZoom(maxZoom: number) {\n    return this.zone.runOutsideAngular(() => {\n      this.mapInstance.setMaxZoom(maxZoom);\n    });\n  }\n\n  updateMinPitch(minPitch: number) {\n    return this.zone.runOutsideAngular(() => {\n      this.mapInstance.setMinPitch(minPitch);\n    });\n  }\n\n  updateMaxPitch(maxPitch: number) {\n    return this.zone.runOutsideAngular(() => {\n      this.mapInstance.setMaxPitch(maxPitch);\n    });\n  }\n\n  updateRenderWorldCopies(status: boolean) {\n    return this.zone.runOutsideAngular(() => {\n      this.mapInstance.setRenderWorldCopies(status);\n    });\n  }\n\n  updateScrollZoom(status: boolean) {\n    return this.zone.runOutsideAngular(() => {\n      status\n        ? this.mapInstance.scrollZoom.enable()\n        : this.mapInstance.scrollZoom.disable();\n    });\n  }\n\n  updateDragRotate(status: boolean) {\n    return this.zone.runOutsideAngular(() => {\n      status\n        ? this.mapInstance.dragRotate.enable()\n        : this.mapInstance.dragRotate.disable();\n    });\n  }\n\n  updateTouchPitch(status: boolean) {\n    return this.zone.runOutsideAngular(() => {\n      status\n        ? this.mapInstance.touchPitch.enable()\n        : this.mapInstance.touchPitch.disable();\n    });\n  }\n\n  updateTouchZoomRotate(status: boolean) {\n    return this.zone.runOutsideAngular(() => {\n      status\n        ? this.mapInstance.touchZoomRotate.enable()\n        : this.mapInstance.touchZoomRotate.disable();\n    });\n  }\n\n  updateDoubleClickZoom(status: boolean) {\n    return this.zone.runOutsideAngular(() => {\n      status\n        ? this.mapInstance.doubleClickZoom.enable()\n        : this.mapInstance.doubleClickZoom.disable();\n    });\n  }\n\n  updateKeyboard(status: boolean) {\n    return this.zone.runOutsideAngular(() => {\n      status\n        ? this.mapInstance.keyboard.enable()\n        : this.mapInstance.keyboard.disable();\n    });\n  }\n\n  updateDragPan(status: boolean) {\n    return this.zone.runOutsideAngular(() => {\n      status\n        ? this.mapInstance.dragPan.enable()\n        : this.mapInstance.dragPan.disable();\n    });\n  }\n\n  updateBoxZoom(status: boolean) {\n    return this.zone.runOutsideAngular(() => {\n      status\n        ? this.mapInstance.boxZoom.enable()\n        : this.mapInstance.boxZoom.disable();\n    });\n  }\n\n  updateStyle(style: StyleSpecification) {\n    return this.zone.runOutsideAngular(() => {\n      this.mapInstance.setStyle(style);\n    });\n  }\n\n  updateMaxBounds(maxBounds: LngLatBoundsLike) {\n    return this.zone.runOutsideAngular(() => {\n      this.mapInstance.setMaxBounds(maxBounds);\n    });\n  }\n\n  setProjection(options: ProjectionSpecification) {\n    return this.zone.runOutsideAngular(() => {\n      this.mapInstance.setProjection(options);\n    });\n  }\n\n  setTerrain(options: TerrainSpecification) {\n    return this.zone.runOutsideAngular(() => {\n      this.mapInstance.setTerrain(options);\n    });\n  }\n\n  getTerrain(): TerrainSpecification | null {\n    return this.zone.runOutsideAngular(() => {\n      return this.mapInstance.getTerrain();\n    });\n  }\n\n  setCenterElevation(elevation: number) {\n    return this.zone.runOutsideAngular(() => {\n      this.mapInstance.setCenterElevation(elevation);\n    });\n  }\n\n  changeCanvasCursor(cursor: string) {\n    const canvas = this.mapInstance.getCanvasContainer();\n    canvas.style.cursor = cursor;\n  }\n\n  queryRenderedFeatures(\n    pointOrBox?:\n      | PointLike\n      | [PointLike, PointLike]\n      | QueryRenderedFeaturesOptions,\n    parameters?: QueryRenderedFeaturesOptions\n  ): GeoJSON.Feature<GeoJSON.GeometryObject>[] {\n    return this.mapInstance.queryRenderedFeatures(pointOrBox, parameters);\n  }\n\n  panTo(center: LngLatLike, options?: AnimationOptions) {\n    return this.zone.runOutsideAngular(() => {\n      this.mapInstance.panTo(center, options);\n    });\n  }\n\n  move(\n    movingMethod: 'jumpTo' | 'easeTo' | 'flyTo',\n    movingOptions?: MovingOptions,\n    zoom?: number,\n    center?: LngLatLike,\n    bearing?: number,\n    pitch?: number,\n    roll?: number\n  ) {\n    return this.zone.runOutsideAngular(() => {\n      (this.mapInstance[movingMethod] as any)({\n        ...movingOptions,\n        zoom: zoom != null ? zoom : this.mapInstance.getZoom(),\n        center: center != null ? center : this.mapInstance.getCenter(),\n        bearing: bearing != null ? bearing : this.mapInstance.getBearing(),\n        pitch: pitch != null ? pitch : this.mapInstance.getPitch(),\n        roll: roll != null ? roll : this.mapInstance.getRoll(),\n      });\n    });\n  }\n\n  addLayer(layer: SetupLayer, bindEvents: boolean, before?: string) {\n    this.zone.runOutsideAngular(() => {\n      Object.keys(layer.layerOptions).forEach((key: string) => {\n        const tkey = <keyof LayerSpecification>key;\n        if (layer.layerOptions[tkey] === undefined) {\n          delete layer.layerOptions[tkey];\n        }\n      });\n      this.mapInstance.addLayer(\n        layer.layerOptions as LayerSpecification,\n        before\n      );\n      if (!bindEvents) {\n        return;\n      }\n      const subscriptions: Subscription[] = [];\n      subscriptions.push(this.createSubscriptionForLayer(layer.layerOptions.id, 'click', layer.layerEvents.layerClick));\n      subscriptions.push(this.createSubscriptionForLayer(layer.layerOptions.id, 'dblclick', layer.layerEvents.layerDblClick));\n      subscriptions.push(this.createSubscriptionForLayer(layer.layerOptions.id, 'mousedown', layer.layerEvents.layerMouseDown));\n      subscriptions.push(this.createSubscriptionForLayer(layer.layerOptions.id, 'mouseup', layer.layerEvents.layerMouseUp));\n      subscriptions.push(this.createSubscriptionForLayer(layer.layerOptions.id, 'mouseenter', layer.layerEvents.layerMouseEnter));\n      subscriptions.push(this.createSubscriptionForLayer(layer.layerOptions.id, 'mouseleave', layer.layerEvents.layerMouseLeave));\n      subscriptions.push(this.createSubscriptionForLayer(layer.layerOptions.id, 'mousemove', layer.layerEvents.layerMouseMove));\n      subscriptions.push(this.createSubscriptionForLayer(layer.layerOptions.id, 'mouseover', layer.layerEvents.layerMouseOver));\n      subscriptions.push(this.createSubscriptionForLayer(layer.layerOptions.id, 'mouseout', layer.layerEvents.layerMouseOut));\n      subscriptions.push(this.createSubscriptionForLayer(layer.layerOptions.id, 'contextmenu', layer.layerEvents.layerContextMenu));\n      subscriptions.push(this.createSubscriptionForLayer(layer.layerOptions.id, 'touchstart', layer.layerEvents.layerTouchStart));\n      subscriptions.push(this.createSubscriptionForLayer(layer.layerOptions.id, 'touchend', layer.layerEvents.layerTouchEnd));\n      subscriptions.push(this.createSubscriptionForLayer(layer.layerOptions.id, 'touchcancel', layer.layerEvents.layerTouchCancel));\n      const layerInstance = this.mapInstance.getLayer(layer.layerOptions.id);\n      if (layerInstance) {\n        this.subscriptionsPerInstance.set(layerInstance, subscriptions);\n      }\n    });\n  }\n\n  removeLayer(layerId: string) {\n    this.zone.runOutsideAngular(() => {\n      const layerInstance = this.mapInstance.getLayer(layerId);\n      if (layerInstance != null) {\n        const subscriptions = this.subscriptionsPerInstance.get(layerInstance) || [];\n        for (const subscription of subscriptions) {\n          subscription.unsubscribe();\n        }\n        this.subscriptionsPerInstance.delete(layerInstance);\n        this.mapInstance.removeLayer(layerId);\n      }\n    });\n  }\n\n  addMarker(marker: SetupMarker) {\n    const options: MarkerOptions = {\n      offset: marker.markersOptions.offset,\n      anchor: marker.markersOptions.anchor,\n      color: marker.markersOptions.color,\n      scale: marker.markersOptions.scale,\n      draggable: !!marker.markersOptions.draggable,\n      rotationAlignment: marker.markersOptions.rotationAlignment,\n      rotation: marker.markersOptions.rotation,\n      pitchAlignment: marker.markersOptions.pitchAlignment,\n      clickTolerance: marker.markersOptions.clickTolerance,\n      element:\n        marker.markersOptions.element.childNodes.length > 0\n          ? marker.markersOptions.element\n          : undefined,\n      opacity: marker.markersOptions.opacity,\n      opacityWhenCovered: marker.markersOptions.opacityWhenCovered,\n      subpixelPositioning: marker.markersOptions.subpixelPositioning,\n    };\n\n    const markerInstance = new Marker(options);\n    markerInstance.on('dragstart', (event: { target: Marker }) => {\n      if (event) {\n        const { target } = event;\n        this.zone.run(() => {\n          marker.markersEvents.markerDragStart.emit(target);\n        });\n      }\n    });\n\n    markerInstance.on('drag', (event: { target: Marker }) => {\n      if (event) {\n        const { target } = event;\n        this.zone.run(() => marker.markersEvents.markerDrag.emit(target));\n      }\n    });\n    markerInstance.on('dragend', (event: { target: Marker }) => {\n      if (event) {\n        const { target } = event;\n        this.zone.run(() => marker.markersEvents.markerDragEnd.emit(target));\n      }\n    });\n    const lngLat: LngLatLike = marker.markersOptions.feature\n      ? <[number, number]>marker.markersOptions.feature.geometry!.coordinates\n      : marker.markersOptions.lngLat!;\n    markerInstance.setLngLat(lngLat);\n    return this.zone.runOutsideAngular(() => {\n      markerInstance.addTo(this.mapInstance);\n      return markerInstance;\n    });\n  }\n\n  removeMarker(marker: Marker) {\n    this.markersToRemove.update((markers) => [...markers, marker]);\n  }\n\n  createPopup(popup: SetupPopup, element: Node) {\n    return this.zone.runOutsideAngular(() => {\n      const popupOptions = keepAvailableObjectValues(popup.popupOptions);\n      const popupInstance = new Popup(popupOptions);\n      popupInstance.setDOMContent(element);\n      const subscriptions: Subscription[] = [];\n      subscriptions.push(this.createSubscriptionForPopup(popupInstance, 'open', popup.popupEvents.popupOpen));\n      subscriptions.push(this.createSubscriptionForPopup(popupInstance, 'close', popup.popupEvents.popupClose));\n      this.subscriptionsPerInstance.set(popupInstance, subscriptions);\n      return popupInstance;\n    });\n  }\n\n  addPopupToMap(popup: Popup, lngLat: LngLatLike) {\n    return this.zone.runOutsideAngular(() => {\n      popup.setLngLat(lngLat);\n      popup.addTo(this.mapInstance);\n    });\n  }\n\n  addPopupToMarker(marker: Marker, popup: Popup) {\n    return this.zone.runOutsideAngular(() => {\n      marker.setPopup(popup);\n    });\n  }\n\n  removePopupFromMap(popup: Popup) {\n    if (this.subscriptionsPerInstance.has(popup)) {\n      const subscriptions = this.subscriptionsPerInstance.get(popup) || [];\n      for (const subscription of subscriptions) {\n        subscription.unsubscribe();\n      }\n      this.subscriptionsPerInstance.delete(popup);\n    }\n    this.popupsToRemove.update((popups) => [...popups, popup]);\n  }\n\n  removePopupFromMarker(marker: Marker) {\n    return this.zone.runOutsideAngular(() => {\n      const popup = marker.getPopup();\n      if (this.subscriptionsPerInstance.has(popup)) {\n        const subscriptions = this.subscriptionsPerInstance.get(popup) || [];\n        for (const subscription of subscriptions) {\n          subscription.unsubscribe();\n        }\n        this.subscriptionsPerInstance.delete(popup);\n      }\n      marker.setPopup(undefined);\n    });\n  }\n\n  addControl(control: IControl, position?: ControlPosition) {\n    return this.zone.runOutsideAngular(() => {\n      this.mapInstance.addControl(control, position);\n    });\n  }\n\n  removeControl(control: IControl) {\n    return this.zone.runOutsideAngular(() => {\n      this.mapInstance.removeControl(control);\n    });\n  }\n\n  async loadAndAddImage(\n    imageId: string,\n    url: string,\n    options?: MapImageOptions\n  ) {\n    return this.zone.runOutsideAngular(async () => {\n      const image = await this.mapInstance.loadImage(url);\n      this.addImage(imageId, image.data, options);\n    });\n  }\n\n  addImage(imageId: string, data: MapImageData, options?: MapImageOptions) {\n    return this.zone.runOutsideAngular(() => {\n      this.mapInstance.addImage(imageId, data as any, options);\n    });\n  }\n\n  removeImage(imageId: string) {\n    this.imageIdsToRemove.update((imagesIds) => [...imagesIds, imageId]);\n  }\n\n  addSource(sourceId: string, source: SourceSpecification) {\n    return this.zone.runOutsideAngular(() => {\n      Object.keys(source).forEach(\n        (key) =>\n          (source as any)[key] === undefined && delete (source as any)[key]\n      );\n      this.mapInstance.addSource(sourceId, source);\n    });\n  }\n\n  getSource<T extends Source>(sourceId: string): T {\n    return <T>this.mapInstance.getSource(sourceId);\n  }\n\n  removeSource(sourceId: string) {\n    this.zone.runOutsideAngular(() => {\n      this.findLayersBySourceId(sourceId).forEach((layer) =>\n        this.removeLayer(layer.id)\n      );\n      this.mapInstance.removeSource(sourceId);\n    });\n  }\n\n  setAllLayerPaintProperty(\n    layerId: string,\n    paint:\n      | BackgroundLayerSpecification['paint']\n      | FillLayerSpecification['paint']\n      | FillExtrusionLayerSpecification['paint']\n      | LineLayerSpecification['paint']\n      | SymbolLayerSpecification['paint']\n      | RasterLayerSpecification['paint']\n      | CircleLayerSpecification['paint']\n  ) {\n    return this.zone.runOutsideAngular(() => {\n      Object.keys(paint as any).forEach((key) => {\n        // TODO Check for perf, setPaintProperty only on changed paint props maybe\n        this.mapInstance.setPaintProperty(layerId, key, (paint as any)[key]);\n      });\n    });\n  }\n\n  setAllLayerLayoutProperty(\n    layerId: string,\n    layout:\n      | BackgroundLayerSpecification['layout']\n      | FillLayerSpecification['layout']\n      | FillExtrusionLayerSpecification['layout']\n      | LineLayerSpecification['layout']\n      | SymbolLayerSpecification['layout']\n      | RasterLayerSpecification['layout']\n      | CircleLayerSpecification['layout']\n  ) {\n    return this.zone.runOutsideAngular(() => {\n      Object.keys(layout as any).forEach((key) => {\n        // TODO Check for perf, setPaintProperty only on changed paint props maybe\n        this.mapInstance.setLayoutProperty(layerId, key, (layout as any)[key]);\n      });\n    });\n  }\n\n  setLayerFilter(\n    layerId: string,\n    filter: FilterSpecification | null | undefined\n  ) {\n    return this.zone.runOutsideAngular(() => {\n      this.mapInstance.setFilter(layerId, filter);\n    });\n  }\n\n  setLayerBefore(layerId: string, beforeId: string) {\n    return this.zone.runOutsideAngular(() => {\n      this.mapInstance.moveLayer(layerId, beforeId);\n    });\n  }\n\n  setLayerZoomRange(layerId: string, minZoom?: number, maxZoom?: number) {\n    return this.zone.runOutsideAngular(() => {\n      this.mapInstance.setLayerZoomRange(\n        layerId,\n        minZoom ? minZoom : 0,\n        maxZoom ? maxZoom : 20\n      );\n    });\n  }\n\n  fitBounds(bounds: LngLatBoundsLike, options?: FitBoundsOptions) {\n    return this.zone.runOutsideAngular(() => {\n      this.mapInstance.fitBounds(bounds, options);\n    });\n  }\n\n  fitScreenCoordinates(\n    points: [PointLike, PointLike],\n    bearing: number,\n    options?: AnimationOptions & CameraOptions\n  ) {\n    return this.zone.runOutsideAngular(() => {\n      this.mapInstance.fitScreenCoordinates(\n        points[0],\n        points[1],\n        bearing,\n        options\n      );\n    });\n  }\n\n  clearMapElements() {\n    this.zone.runOutsideAngular(() => {\n      this.removeMarkers();\n      this.removePopups();\n      this.removeImages();\n    });\n  }\n\n  private createMap(options: MapOptions) {\n    NgZone.assertNotInAngularZone();\n\n    const mapOptions = keepAvailableObjectValues<MapOptions>(options);\n\n    this.mapInstance = new MaplibreMap(mapOptions);\n\n    const isIEorEdge =\n      window && /msie\\s|trident\\/|edge\\//i.test(window.navigator.userAgent);\n    if (isIEorEdge) {\n      this.mapInstance.setStyle(options.style!);\n    }\n  }\n\n  private removeMarkers() {\n    for (const marker of this.markersToRemove()) {\n      marker.remove();\n    }\n    this.markersToRemove.set([]);\n  }\n\n  private removePopups() {\n    for (const popup of this.popupsToRemove()) {\n      popup.remove();\n    }\n    this.popupsToRemove.set([]);\n  }\n\n  private removeImages() {\n    for (const imageId of this.imageIdsToRemove()) {\n      this.mapInstance.removeImage(imageId);\n    }\n    this.imageIdsToRemove.set([]);\n  }\n\n  private findLayersBySourceId(sourceId: string): LayerSpecification[] {\n    const layers = this.mapInstance.getStyle().layers;\n    if (layers == null) {\n      return [];\n    }\n\n    return layers.filter((l) =>\n      'source' in l ? l.source === sourceId : false\n    );\n  }\n\n  private hookEvents(events: MapEvent) {\n    this.mapInstance.on('load', (evt) => {\n      this.mapLoaded.next(undefined);\n      this.mapLoaded.complete();\n      this.zone.run(() => {\n        events.mapLoad.emit(evt.target);\n      });\n    });\n    this.mapInstance.on('resize', (evt) =>\n      this.zone.run(() => {\n        events.mapResize.emit(evt);\n      })\n    );\n    this.mapInstance.on('remove', (evt) =>\n      this.zone.run(() => {\n        events.mapRemove.emit(evt);\n      })\n    );\n    this.mapInstance.on('mousedown', (evt) =>\n      this.zone.run(() => {\n        events.mapMouseDown.emit(evt);\n      })\n    );\n    this.mapInstance.on('mouseup', (evt) =>\n      this.zone.run(() => {\n        events.mapMouseUp.emit(evt);\n      })\n    );\n    this.mapInstance.on('mousemove', (evt) =>\n      this.zone.run(() => {\n        events.mapMouseMove.emit(evt);\n      })\n    );\n    this.mapInstance.on('click', (evt) =>\n      this.zone.run(() => {\n        events.mapClick.emit(evt);\n      })\n    );\n    this.mapInstance.on('dblclick', (evt) =>\n      this.zone.run(() => {\n        events.mapDblClick.emit(evt);\n      })\n    );\n    this.mapInstance.on('mouseover', (evt) =>\n      this.zone.run(() => {\n        events.mapMouseOver.emit(evt);\n      })\n    );\n    this.mapInstance.on('mouseout', (evt) =>\n      this.zone.run(() => {\n        events.mapMouseOut.emit(evt);\n      })\n    );\n    this.mapInstance.on('contextmenu', (evt) =>\n      this.zone.run(() => {\n        events.mapContextMenu.emit(evt);\n      })\n    );\n    this.mapInstance.on('touchstart', (evt) =>\n      this.zone.run(() => {\n        events.mapTouchStart.emit(evt);\n      })\n    );\n    this.mapInstance.on('touchend', (evt) =>\n      this.zone.run(() => {\n        events.mapTouchEnd.emit(evt);\n      })\n    );\n    this.mapInstance.on('touchmove', (evt) =>\n      this.zone.run(() => {\n        events.mapTouchMove.emit(evt);\n      })\n    );\n    this.mapInstance.on('touchcancel', (evt) =>\n      this.zone.run(() => {\n        events.mapTouchCancel.emit(evt);\n      })\n    );\n    this.mapInstance.on('wheel', (evt) =>\n      this.zone.run(() => {\n        events.mapWheel.emit(evt);\n      })\n    );\n    this.mapInstance.on('movestart', (evt) =>\n      this.zone.run(() => events.moveStart.emit(evt))\n    );\n    this.mapInstance.on('move', (evt) =>\n      this.zone.run(() => events.move.emit(evt))\n    );\n    this.mapInstance.on('moveend', (evt) =>\n      this.zone.run(() => events.moveEnd.emit(evt))\n    );\n    this.mapInstance.on('dragstart', (evt) =>\n      this.zone.run(() => {\n        events.mapDragStart.emit(evt);\n      })\n    );\n    this.mapInstance.on('drag', (evt) =>\n      this.zone.run(() => {\n        events.mapDrag.emit(evt);\n      })\n    );\n    this.mapInstance.on('dragend', (evt) =>\n      this.zone.run(() => {\n        events.mapDragEnd.emit(evt);\n      })\n    );\n    this.mapInstance.on('zoomstart', (evt) =>\n      this.zone.run(() => events.zoomStart.emit(evt))\n    );\n    this.mapInstance.on('zoom', (evt) =>\n      this.zone.run(() => events.zoomEvt.emit(evt))\n    );\n    this.mapInstance.on('zoomend', (evt) =>\n      this.zone.run(() => events.zoomEnd.emit(evt))\n    );\n    this.mapInstance.on('rotatestart', (evt) =>\n      this.zone.run(() => events.rotateStart.emit(evt))\n    );\n    this.mapInstance.on('rotate', (evt) =>\n      this.zone.run(() => events.rotate.emit(evt))\n    );\n    this.mapInstance.on('rotateend', (evt) =>\n      this.zone.run(() => events.rotateEnd.emit(evt))\n    );\n    this.mapInstance.on('pitchstart', (evt) =>\n      this.zone.run(() => events.pitchStart.emit(evt))\n    );\n    this.mapInstance.on('pitch', (evt) =>\n      this.zone.run(() => events.pitchEvt.emit(evt))\n    );\n    this.mapInstance.on('pitchend', (evt) =>\n      this.zone.run(() => events.pitchEnd.emit(evt))\n    );\n    this.mapInstance.on('boxzoomstart', (evt) =>\n      this.zone.run(() => events.boxZoomStart.emit(evt))\n    );\n    this.mapInstance.on('boxzoomend', (evt) =>\n      this.zone.run(() => events.boxZoomEnd.emit(evt))\n    );\n    this.mapInstance.on('boxzoomcancel', (evt) =>\n      this.zone.run(() => events.boxZoomCancel.emit(evt))\n    );\n    this.mapInstance.on('webglcontextlost', (evt) =>\n      this.zone.run(() => events.webGlContextLost.emit(evt))\n    );\n    this.mapInstance.on('webglcontextrestored', (evt) =>\n      this.zone.run(() => events.webGlContextRestored.emit(evt))\n    );\n    this.mapInstance.on('render', (evt) =>\n      this.zone.run(() => events.render.emit(evt))\n    );\n    this.mapInstance.on('error', (evt) =>\n      this.zone.run(() => {\n        events.mapError.emit(evt);\n      })\n    );\n    this.mapInstance.on('data', (evt) =>\n      this.zone.run(() => events.data.emit(evt))\n    );\n    this.mapInstance.on('styledata', (evt) =>\n      this.zone.run(() => events.styleData.emit(evt))\n    );\n    this.mapInstance.on('sourcedata', (evt) =>\n      this.zone.run(() => events.sourceData.emit(evt))\n    );\n    this.mapInstance.on('dataloading', (evt) =>\n      this.zone.run(() => events.dataLoading.emit(evt))\n    );\n    this.mapInstance.on('styledataloading', (evt) =>\n      this.zone.run(() => events.styleDataLoading.emit(evt))\n    );\n    this.mapInstance.on('sourcedataloading', (evt) =>\n      this.zone.run(() => events.sourceDataLoading.emit(evt))\n    );\n    this.mapInstance.on('styleimagemissing', (evt) =>\n      this.zone.run(() => events.styleImageMissing.emit(evt))\n    );\n    this.mapInstance.on('idle', (evt) =>\n      this.zone.run(() => events.idle.emit(evt))\n    );\n  }\n\n  private createSubscriptionForLayer(layerId: string, event: keyof MapLayerEventType, emitter: OutputEmitterRef<any>): Subscription {\n    const handler = (evt: any) => {\n      this.zone.run(() => {\n        emitter.emit(evt);\n      });\n    }\n    this.mapInstance.on(event, layerId, handler);\n    return {\n      unsubscribe: () => {\n        this.mapInstance.off(event, layerId, handler);\n      },\n    }\n  }\n\n  private createSubscriptionForPopup(popup: Popup, event: \"open\" | \"close\", emitter: OutputEmitterRef<any>): Subscription {\n    const handler = (evt: any) => {\n      this.zone.run(() => {\n        emitter.emit(evt);\n      });\n    }\n    popup.on(event, handler);\n    return {\n      unsubscribe: () => {\n        popup.off(event, handler);\n      },\n    }\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  OnDestroy,\n  afterNextRender,\n  inject,\n  input,\n  viewChild,\n} from '@angular/core';\nimport type { ControlPosition, IControl } from 'maplibre-gl';\nimport { MapService } from '../map/map.service';\n\nexport class CustomControl implements IControl {\n  constructor(private container: HTMLElement) {}\n\n  /** @inheritdoc */\n  onAdd() {\n    return this.container;\n  }\n\n  /** @inheritdoc */\n  onRemove() {\n    return this.container.parentNode!.removeChild(this.container);\n  }\n\n  /** @inheritdoc */\n  getDefaultPosition(): ControlPosition {\n    return 'top-right';\n  }\n}\n\n/**\n * `mgl-control` - a custom control component\n * @see [Controls](https://maplibre.org/maplibre-gl-js/docs/API/interfaces/IControl/)\n *\n * @category Components\n *\n * @example\n * ```html\n * ...\n * <mgl-map ...>\n *   <mgl-control> Hello </mgl-control>\n *   ...\n *   <mgl-control mglNavigation></mgl-control>\n *   ...\n *   <mgl-control mglScale unit=\"imperial\" position=\"top-right\"></mgl-control>\n *   ...\n *   <mgl-control\n *     mglTerrain\n *     source=\"rasterDemSource\"\n *     exaggeration=\"3.1\"\n *   ></mgl-control>\n * </mgl-map>\n * ```\n */\n@Component({\n  selector: 'mgl-control',\n  template: `\n    <div class=\"maplibregl-ctrl\" #content>\n      <ng-content></ng-content>\n    </div>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ControlComponent<T extends IControl> implements OnDestroy {\n  /** Init injection */\n  private readonly mapService = inject(MapService);\n\n  /** Init input */\n  readonly position = input<ControlPosition>();\n\n  /** @hidden */\n  readonly content = viewChild.required<ElementRef<HTMLDivElement>>('content');\n\n  control: T | CustomControl;\n\n  constructor() {\n    afterNextRender(() => {\n      if (this.content().nativeElement.childNodes.length) {\n        this.control = new CustomControl(this.content().nativeElement);\n        this.mapService.mapCreated$.subscribe(() => {\n          this.mapService.addControl(this.control, this.position());\n        });\n      }\n    });\n  }\n\n  ngOnDestroy(): void {\n    if (this.mapService?.mapInstance?.hasControl(this.control)) {\n      this.mapService.removeControl(this.control);\n    }\n  }\n}\n","import { Directive, afterNextRender, inject, input } from '@angular/core';\nimport {\n  AttributionControl,\n  type AttributionControlOptions,\n} from 'maplibre-gl';\nimport { MapService } from '../map/map.service';\nimport { ControlComponent } from './control.component';\nimport { keepAvailableObjectValues } from '../shared/utils/functions/object.fn';\n\n/**\n * `mglAttribution` - an attribution control directive\n *\n * @category Directives\n *\n * @see [Add custom attribution](https://maplibre.org/ngx-maplibre-gl/demo/custom-attribution)\n * @see [AttributionControl](https://maplibre.org/maplibre-gl-js/docs/API/classes/AttributionControl)\n */\n@Directive({\n  selector: '[mglAttribution]',\n})\nexport class AttributionControlDirective {\n  /* Init injection */\n  private readonly mapService = inject(MapService);\n  private readonly controlComponent = inject<\n    ControlComponent<AttributionControl>\n  >(ControlComponent, { host: true });\n\n  /** Init input */\n  readonly compact = input<boolean>();\n  /** Init input */\n  readonly customAttribution = input<string | string[]>();\n\n  constructor() {\n    afterNextRender(() => {\n      this.mapService.mapCreated$.subscribe(() => {\n        if (this.controlComponent.control) {\n          throw new Error('Another control is already set for this control');\n        }\n\n        const options = keepAvailableObjectValues<AttributionControlOptions>({\n          compact: this.compact(),\n          customAttribution: this.customAttribution(),\n        });\n\n        this.controlComponent.control = new AttributionControl(options);\n        this.mapService.addControl(\n          this.controlComponent.control,\n          this.controlComponent.position()\n        );\n      });\n    });\n  }\n}\n","import { Directive, afterNextRender, inject, input } from '@angular/core';\nimport { FullscreenControl } from 'maplibre-gl';\nimport { MapService } from '../map/map.service';\nimport { ControlComponent } from './control.component';\n\n/**\n * `mglFullscreen` - a fullscreen control directive\n *\n * @category Directives\n */\n@Directive({\n  selector: '[mglFullscreen]',\n  host: {\n    // eslint-disable-next-line @typescript-eslint/naming-convention\n    '(window:webkitfullscreenchange)': 'onFullscreen()',\n  },\n})\nexport class FullscreenControlDirective {\n  /* Init injection */\n  private readonly mapService = inject(MapService);\n  private readonly controlComponent = inject<\n    ControlComponent<FullscreenControl>\n  >(ControlComponent, { host: true });\n\n  /* Init inputs */\n  readonly container = input<HTMLElement>();\n\n  constructor() {\n    afterNextRender(() => {\n      this.mapService.mapCreated$.subscribe(() => {\n        if (this.controlComponent.control) {\n          throw new Error('Another control is already set for this control');\n        }\n        this.controlComponent.control = new FullscreenControl({\n          container: this.container(),\n        });\n        this.mapService.addControl(\n          this.controlComponent.control,\n          this.controlComponent.position()\n        );\n      });\n    });\n  }\n\n  onFullscreen() {\n    this.mapService.mapInstance.resize();\n  }\n}\n","import {\n  Directive,\n  afterNextRender,\n  inject,\n  input,\n  output,\n} from '@angular/core';\nimport {\n  type FitBoundsOptions,\n  GeolocateControl,\n  GeolocateControlOptions,\n} from 'maplibre-gl';\nimport { MapService } from '../map/map.service';\nimport { ControlComponent } from './control.component';\nimport type { Position } from '../map/map.types';\nimport { keepAvailableObjectValues } from '../shared/utils/functions/object.fn';\n\n/**\n * `mglGeolocate` - a geolocate control directive\n *\n * @category Directives\n *\n * @see [Locate user](https://maplibre.org/ngx-maplibre-gl/demo/locate-user)\n * @see [GeolocateControl](https://maplibre.org/maplibre-gl-js/docs/API/classes/GeolocateControl)\n */\n@Directive({\n  selector: '[mglGeolocate]',\n})\nexport class GeolocateControlDirective {\n  /* Init injection */\n  private readonly mapService = inject(MapService);\n  private readonly controlComponent = inject<\n    ControlComponent<GeolocateControl>\n  >(ControlComponent, { host: true });\n\n  /* Init inputs */\n  readonly positionOptions = input<PositionOptions>();\n  /* Init inputs */\n  readonly fitBoundsOptions = input<FitBoundsOptions>();\n  /* Init inputs */\n  readonly trackUserLocation = input<boolean>();\n  /* Init inputs */\n  readonly showUserLocation = input<boolean>();\n\n  readonly geolocate = output<Position>();\n\n  constructor() {\n    afterNextRender(() => {\n      this.mapService.mapCreated$.subscribe(() => {\n        if (this.controlComponent.control) {\n          throw new Error('Another control is already set for this control');\n        }\n\n        const options = keepAvailableObjectValues<GeolocateControlOptions>({\n          positionOptions: this.positionOptions(),\n          fitBoundsOptions: this.fitBoundsOptions(),\n          trackUserLocation: this.trackUserLocation(),\n          showUserLocation: this.showUserLocation(),\n        });\n\n        this.controlComponent.control = new GeolocateControl(options);\n        this.controlComponent.control.on('geolocate', (data: Position) => {\n          this.geolocate.emit(data);\n        });\n        this.mapService.addControl(\n          this.controlComponent.control,\n          this.controlComponent.position()\n        );\n      });\n    });\n  }\n}\n","import { Directive, afterNextRender, inject, input } from '@angular/core';\nimport { NavigationControl, type NavigationControlOptions } from 'maplibre-gl';\nimport { MapService } from '../map/map.service';\nimport { ControlComponent } from './control.component';\nimport { keepAvailableObjectValues } from '../shared/utils/functions/object.fn';\n\n/**\n * `mglNavigation` - a navigation control directive\n *\n * @category Directives\n *\n * @see [Navigation](https://maplibre.org/ngx-maplibre-gl/demo/navigation)\n * @see [NavigationControl](https://maplibre.org/maplibre-gl-js/docs/API/classes/NavigationControl)\n */\n@Directive({\n  selector: '[mglNavigation]',\n})\nexport class NavigationControlDirective {\n  /* Init injection */\n  private readonly mapService = inject(MapService);\n  private readonly controlComponent = inject<\n    ControlComponent<NavigationControl>\n  >(ControlComponent, { host: true });\n\n  /* Init inputs */\n  readonly showCompass = input<boolean>();\n  /* Init inputs */\n  readonly showZoom = input<boolean>();\n  /* Init inputs */\n  readonly visualizePitch = input<boolean>();\n  /* Init inputs */\n  readonly visualizeRoll = input<boolean>();\n\n  constructor() {\n    afterNextRender(() => {\n      this.mapService.mapCreated$.subscribe(() => {\n        if (this.controlComponent.control) {\n          throw new Error('Another control is already set for this control');\n        }\n        const options = keepAvailableObjectValues<NavigationControlOptions>({\n          showCompass: this.showCompass(),\n          showZoom: this.showZoom(),\n          visualizePitch: this.visualizePitch(),\n          visualizeRoll: this.visualizeRoll(),\n        });\n        this.controlComponent.control = new NavigationControl(options);\n        this.mapService.addControl(\n          this.controlComponent.control,\n          this.controlComponent.position()\n        );\n      });\n    });\n  }\n}\n","import {\n  Directive,\n  OnChanges,\n  SimpleChanges,\n  afterNextRender,\n  inject,\n  input,\n} from '@angular/core';\nimport { ScaleControl, type Unit, type ScaleControlOptions } from 'maplibre-gl';\nimport { MapService } from '../map/map.service';\nimport { ControlComponent } from './control.component';\nimport { keepAvailableObjectValues } from '../shared/utils/functions/object.fn';\n\n/**\n * `mglScale` - a scale control directive\n *\n * @category Directives\n *\n * @see [Scale](https://maplibre.org/ngx-maplibre-gl/demo/ngx-scale-control)\n * @see [ScaleControl](https://maplibre.org/maplibre-gl-js/docs/API/classes/ScaleControl)\n */\n@Directive({\n  selector: '[mglScale]',\n})\nexport class ScaleControlDirective implements OnChanges {\n  /* Init injection */\n  private readonly mapService = inject(MapService);\n  private readonly controlComponent = inject<ControlComponent<ScaleControl>>(\n    ControlComponent,\n    { host: true }\n  );\n\n  /* Init inputs */\n  readonly maxWidth = input<number>();\n\n  /* Dynamic inputs */\n  readonly unit = input<Unit>();\n\n  constructor() {\n    afterNextRender(() => {\n      this.mapService.mapCreated$.subscribe(() => {\n        if (this.controlComponent.control) {\n          throw new Error('Another control is already set for this control');\n        }\n        const options = keepAvailableObjectValues<ScaleControlOptions>({\n          maxWidth: this.maxWidth(),\n          unit: this.unit(),\n        });\n\n        this.controlComponent.control = new ScaleControl(options);\n        this.mapService.addControl(\n          this.controlComponent.control,\n          this.controlComponent.position()\n        );\n      });\n    });\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes.unit && !changes.unit.isFirstChange()) {\n      (this.controlComponent.control as ScaleControl).setUnit(\n        changes.unit.currentValue\n      );\n    }\n  }\n}\n","import { Directive, afterNextRender, inject, input } from '@angular/core';\nimport { TerrainControl, type TerrainSpecification } from 'maplibre-gl';\nimport { MapService } from '../map/map.service';\nimport { ControlComponent } from './control.component';\n\n/**\n * `mglTerrain` - a terrain control directive\n *\n * @category Directives\n *\n * @see [Terrain](https://maplibre.org/ngx-maplibre-gl/demo/terrain-control)\n * @see [TerrainControl](https://maplibre.org/maplibre-gl-js/docs/API/classes/TerrainControl)\n */\n@Directive({\n  selector: '[mglTerrain]',\n})\nexport class TerrainControlDirective {\n  /* Init injection */\n  private readonly mapService = inject(MapService);\n  private readonly controlComponent = inject<ControlComponent<TerrainControl>>(\n    ControlComponent,\n    { host: true }\n  );\n\n  /* Init inputs */\n  readonly source = input.required<string>();\n  readonly exaggeration = input<number>();\n\n  constructor() {\n    afterNextRender(() => {\n      this.mapService.mapCreated$.subscribe(() => {\n        if (this.controlComponent.control) {\n          throw new Error('Another control is already set for this control');\n        }\n\n        const options: TerrainSpecification = {\n          source: this.source(),\n          exaggeration: this.exaggeration() ?? 1,\n        };\n\n        this.controlComponent.control = new TerrainControl(options);\n\n        this.mapService.addControl(\n          this.controlComponent.control,\n          this.controlComponent.position()\n        );\n      });\n    });\n  }\n}\n","import {\n  DestroyRef,\n  Directive,\n  OnDestroy,\n  OnInit,\n  inject,\n  input,\n  signal,\n} from '@angular/core';\nimport { Subject, fromEvent } from 'rxjs';\nimport { filter, switchMap, tap } from 'rxjs/operators';\nimport { MapService } from '../map/map.service';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Source, SourceSpecification } from 'maplibre-gl';\n\n/**\n * @internal\n * A composition object for the source components\n */\n@Directive({})\nexport class SourceDirective implements OnInit, OnDestroy {\n  /** Init injection */\n  private readonly mapService = inject(MapService);\n  private readonly destroyRef = inject(DestroyRef);\n\n  /**  Init input */\n  public readonly id = input.required<string>();\n\n  /** \n   * @internal\n   * Used to store the current source id and make sure removeSource is only called once.\n   */\n  readonly sourceId = signal<string | null>(null);\n  private readonly loadSourceSubject = new Subject<void>();\n  readonly loadSource$ = this.loadSourceSubject.asObservable();\n\n  ngOnInit() {\n    this.mapService.mapLoaded$\n      .pipe(\n        tap(() => this.loadSourceSubject.next()),\n        switchMap(() =>\n          fromEvent(this.mapService.mapInstance, 'styledata').pipe(\n            filter(() => !this.mapService.mapInstance.getSource(this.id())),\n            tap(() => this.loadSourceSubject.next())\n          )\n        ),\n        takeUntilDestroyed(this.destroyRef)\n      )\n      .subscribe();\n  }\n\n  ngOnDestroy(): void {\n    this.removeSource();\n  }\n\n  refresh() {\n    this.removeSource();\n    this.loadSourceSubject.next();\n  }\n\n  removeSource() {\n    const currentId = this.sourceId();\n    if (currentId) {\n      this.mapService.removeSource(currentId);\n      this.sourceId.set(null);\n    }\n  }\n\n  addSource(source: SourceSpecification) {\n    this.mapService.addSource(this.id(), source);\n    this.sourceId.set(this.id());\n  }\n\n  getSource<T extends Source>(): T | undefined {\n    return this.mapService.getSource<T>(this.id());\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  OnChanges,\n  SimpleChanges,\n  NgZone,\n  inject,\n  input,\n  signal,\n} from '@angular/core';\nimport type { GeoJSONSource, GeoJSONSourceSpecification } from 'maplibre-gl';\nimport { Subject } from 'rxjs';\nimport { debounceTime, switchMap, tap } from 'rxjs/operators';\nimport { SourceDirective } from '../source.directive';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n/**\n * `mgl-geojson-source` - a geojson source component\n * @see [geojson](https://maplibre.org/maplibre-gl-js/docs/API/classes/maplibregl.GeoJSONSource/)\n *\n * @category Source Components\n *\n * @example\n * ```html\n * ...\n * <mgl-map ...>\n *   <mgl-geojson-source id=\"symbols-source\">\n *     <mgl-feature\n *       *ngFor=\"let geometry of geometries\"\n *       [geometry]=\"geometry\"\n *     ></mgl-feature>\n *   </mgl-geojson-source>\n *   ...\n *   <mgl-geojson-source\n *     id=\"earthquakes\"\n *     [data]=\"earthquakes\"\n *     [cluster]=\"true\"\n *     [clusterMaxZoom]=\"14\"\n *     [clusterRadius]=\"50\"\n *   ></mgl-geojson-source>\n * </mgl-map>\n *\n * ```\n */\n@Component({\n  selector: 'mgl-geojson-source',\n  template: '',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  hostDirectives: [{ directive: SourceDirective, inputs: ['id'] }],\n})\nexport class GeoJSONSourceComponent implements OnChanges {\n  /** Init injections */\n  private readonly sourceDirective = inject(SourceDirective);\n\n  /** Init injection */\n  private readonly ngZone = inject(NgZone);\n\n  /** Dynamic input */\n  readonly data = input<GeoJSONSourceSpecification['data']>({\n    type: 'FeatureCollection',\n    features: [],\n  });\n\n  /** Dynamic input */\n  readonly maxzoom = input<GeoJSONSourceSpecification['maxzoom']>();\n\n  /** Dynamic input */\n  readonly attribution = input<GeoJSONSourceSpecification['attribution']>();\n\n  /** Dynamic input */\n  readonly buffer = input<GeoJSONSourceSpecification['buffer']>();\n\n  /** Dynamic input */\n  readonly tolerance = input<GeoJSONSourceSpecification['tolerance']>();\n\n  /** Dynamic input */\n  readonly cluster = input<GeoJSONSourceSpecification['cluster']>();\n\n  /** Dynamic input */\n  readonly clusterRadius = input<GeoJSONSourceSpecification['clusterRadius']>();\n\n  /** Dynamic input */\n  readonly clusterMaxZoom =\n    input<GeoJSONSourceSpecification['clusterMaxZoom']>();\n\n  /** Dynamic input */\n  readonly clusterMinPoints =\n    input<GeoJSONSourceSpecification['clusterMinPoints']>();\n\n  /** Dynamic input */\n  readonly clusterProperties =\n    input<GeoJSONSourceSpecification['clusterProperties']>();\n\n  /** Dynamic input */\n  readonly lineMetrics = input<GeoJSONSourceSpecification['lineMetrics']>();\n\n  /** Dynamic input */\n  readonly generateId = input<GeoJSONSourceSpecification['generateId']>();\n\n  /** Dynamic input */\n  readonly promoteId = input<GeoJSONSourceSpecification['promoteId']>();\n\n  /** Dynamic input */\n  readonly filter = input<GeoJSONSourceSpecification['filter']>();\n\n  private readonly updateFeatureDataSubject = new Subject<void>();\n\n  private readonly featureIdCounter = signal(0);\n\n  constructor() {\n    this.sourceDirective.loadSource$\n      .pipe(\n        tap(() =>\n          this.sourceDirective.addSource(this.getGeoJSONSourceSpecification())\n        ),\n        switchMap(() => this.updateFeature()),\n        takeUntilDestroyed()\n      )\n      .subscribe();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (!this.sourceDirective.sourceId()) {\n      return;\n    }\n    if (\n      (changes.maxzoom && !changes.maxzoom.isFirstChange()) ||\n      (changes.attribution && !changes.attribution.isFirstChange()) ||\n      (changes.buffer && !changes.buffer.isFirstChange()) ||\n      (changes.tolerance && !changes.tolerance.isFirstChange()) ||\n      (changes.cluster && !changes.cluster.isFirstChange()) ||\n      (changes.clusterRadius && !changes.clusterRadius.isFirstChange()) ||\n      (changes.clusterMaxZoom && !changes.clusterMaxZoom.isFirstChange()) ||\n      (changes.clusterMinPoints && !changes.clusterMinPoints.isFirstChange()) ||\n      (changes.clusterProperties &&\n        !changes.clusterProperties.isFirstChange()) ||\n      (changes.lineMetrics && !changes.lineMetrics.isFirstChange()) ||\n      (changes.generateId && !changes.generateId.isFirstChange()) ||\n      (changes.promoteId && !changes.promoteId.isFirstChange()) ||\n      (changes.filter && !changes.filter.isFirstChange())\n    ) {\n      this.sourceDirective.refresh();\n    }\n    if (changes.data && !changes.data.isFirstChange()) {\n      const source = this.sourceDirective.getSource<GeoJSONSource>();\n      if (source === undefined) {\n        return;\n      }\n      source.setData(changes.data.currentValue);\n    }\n  }\n\n  /**\n   * For clustered sources, fetches the zoom at which the given cluster expands.\n   * @param clusterId The value of the cluster's cluster_id property.\n   */\n  async getClusterExpansionZoom(clusterId: number) {\n    const source = this.sourceDirective.getSource<GeoJSONSource>()!;\n    return this.ngZone.run(async () => {\n      return source.getClusterExpansionZoom(clusterId);\n    });\n  }\n\n  /**\n   * For clustered sources, fetches the children of the given cluster on the next zoom level (as an array of GeoJSON features).\n   * @param clusterId The value of the cluster's cluster_id property.\n   */\n  async getClusterChildren(clusterId: number) {\n    const source = this.sourceDirective.getSource<GeoJSONSource>()!;\n    return this.ngZone.run(async () => {\n      return source.getClusterChildren(clusterId);\n    });\n  }\n\n  /**\n   * For clustered sources, fetches the original points that belong to the cluster (as an array of GeoJSON features).\n   * @param clusterId The value of the cluster's cluster_id property.\n   * @param limit The maximum number of features to return.\n   * @param offset The number of features to skip (e.g. for pagination).\n   */\n  async getClusterLeaves(clusterId: number, limit: number, offset: number) {\n    const source = this.sourceDirective.getSource<GeoJSONSource>()!;\n    return this.ngZone.run(async () => {\n      return source.getClusterLeaves(clusterId, limit, offset);\n    });\n  }\n\n  _addFeature(feature: GeoJSON.Feature<GeoJSON.GeometryObject>) {\n    const collection = <GeoJSON.FeatureCollection<GeoJSON.GeometryObject>>(\n      this.data()\n    );\n    collection.features.push(feature);\n    this.updateFeatureDataSubject.next();\n  }\n\n  _removeFeature(feature: GeoJSON.Feature<GeoJSON.GeometryObject>) {\n    const collection = <GeoJSON.FeatureCollection<GeoJSON.GeometryObject>>(\n      this.data()\n    );\n    const index = collection.features.indexOf(feature);\n    if (index > -1) {\n      collection.features.splice(index, 1);\n    }\n    this.updateFeatureDataSubject.next();\n  }\n\n  updateFeatureData() {\n    this.updateFeatureDataSubject.next();\n  }\n\n  _getNewFeatureId() {\n    this.featureIdCounter.update((featureIdCounter) => ++featureIdCounter);\n    return this.featureIdCounter();\n  }\n\n  private getGeoJSONSourceSpecification(): GeoJSONSourceSpecification {\n    return {\n      type: 'geojson',\n      data: this.data(),\n      maxzoom: this.maxzoom(),\n      attribution: this.attribution(),\n      buffer: this.buffer(),\n      tolerance: this.tolerance(),\n      cluster: this.cluster(),\n      clusterRadius: this.clusterRadius(),\n      clusterMaxZoom: this.clusterMaxZoom(),\n      clusterMinPoints: this.clusterMinPoints(),\n      clusterProperties: this.clusterProperties(),\n      lineMetrics: this.lineMetrics(),\n      generateId: this.generateId(),\n      promoteId: this.promoteId(),\n      filter: this.filter(),\n    };\n  }\n\n  private updateFeature() {\n    return this.updateFeatureDataSubject.pipe(debounceTime(0)).pipe(\n      tap(() => {\n        const source = this.sourceDirective.getSource<GeoJSONSource>();\n        if (source === undefined) {\n          return;\n        }\n        source.setData(this.data()! as string | GeoJSON.GeoJSON);\n      })\n    );\n  }\n}\n","import {\n  Component,\n  forwardRef,\n  OnDestroy,\n  OnInit,\n  ChangeDetectionStrategy,\n  input,\n  model,\n  inject,\n} from '@angular/core';\nimport { GeoJSONSourceComponent } from './geojson-source.component';\n\n/**\n * `mgl-feature` - a feature component\n * [ngx] inside {@link GeoJSONSourceComponent} only\n *\n * @category Source Components\n */\n@Component({\n  selector: 'mgl-feature',\n  template: '',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FeatureComponent implements OnInit, OnDestroy {\n  /** Init injection */\n  private readonly geoJSONSourceComponent = inject<GeoJSONSourceComponent>(\n    forwardRef(() => GeoJSONSourceComponent)\n  );\n  /** Init input */\n  readonly id = model<number>(); \n  /** Init input */\n  readonly geometry = input.required<GeoJSON.GeometryObject>();\n  \n  /** Init input */\n  readonly properties = input<GeoJSON.Feature<GeoJSON.GeometryObject>['properties']>();\n\n  private feature: GeoJSON.Feature<GeoJSON.GeometryObject>;\n\n  ngOnInit() {\n    const id = this.id();\n    if (!id) {\n      this.id.set(this.geoJSONSourceComponent._getNewFeatureId());\n    }\n    const properties = this.properties();\n    this.feature = {\n      type: 'Feature',\n      geometry: this.geometry(),\n      properties: properties ?? {},\n    };\n    this.feature.id = this.id();\n    this.geoJSONSourceComponent._addFeature(this.feature);\n  }\n\n  ngOnDestroy(): void {\n    this.geoJSONSourceComponent._removeFeature(this.feature);\n  }\n\n  updateCoordinates(coordinates: number[]) {\n    (<GeoJSON.Point>this.feature.geometry).coordinates = coordinates;\n    this.geoJSONSourceComponent.updateFeatureData();\n  }\n}\n","import {\n  Directive,\n  NgZone,\n  OnDestroy,\n  OnInit,\n  inject,\n  input,\n  output,\n} from '@angular/core';\nimport type { MapMouseEvent } from 'maplibre-gl';\nimport { outputToObservable } from '@angular/core/rxjs-interop';\nimport { fromEvent, Observable, Subscription } from 'rxjs';\nimport { filter, switchMap, take, takeUntil, tap } from 'rxjs/operators';\nimport type { LayerComponent } from '../layer/layer.component';\nimport { MapService } from '../map/map.service';\nimport { FeatureComponent } from '../source/geojson/feature.component';\n\n/**\n * `mglDraggable` - a directive for Feature or Marker\n *\n * @category Directives\n *\n * @see [Draggable Marker](https://maplibre.org/ng-maplibre-gl/demo/ngx-drag-a-point)\n */\n@Directive({\n  selector: '[mglDraggable]',\n})\nexport class DraggableDirective implements OnInit, OnDestroy {\n  /** Init injection */\n  private readonly mapService = inject(MapService);\n  private readonly ngZone = inject(NgZone);\n  private readonly featureComponent = inject(FeatureComponent, {\n    host: true,\n    optional: true,\n  });\n\n  // eslint-disable-next-line @angular-eslint/no-input-rename\n  readonly layer = input<LayerComponent | null>(null, {\n    alias: 'mglDraggable',\n  });\n\n  featureDragStart = output<MapMouseEvent>();\n  featureDragEnd = output<MapMouseEvent>();\n  featureDrag = output<MapMouseEvent>();\n\n  private sub = new Subscription();\n\n  ngOnInit() {\n    let enter$;\n    let leave$;\n    let updateCoords;\n    const layer = this.layer();\n    if (this.featureComponent && layer) {\n      enter$ = outputToObservable(layer.layerMouseEnter);\n      leave$ = outputToObservable(layer.layerMouseLeave);\n      updateCoords = this.featureComponent.updateCoordinates.bind(\n        this.featureComponent\n      );\n      if (this.featureComponent.geometry().type !== 'Point') {\n        throw new Error('mglDraggable only support point feature');\n      }\n    } else {\n      throw new Error(\n        'mglDraggable can only be used on Feature (with a layer as input) or Marker'\n      );\n    }\n\n    this.handleDraggable(enter$, leave$, updateCoords);\n  }\n\n  ngOnDestroy() {\n    this.sub.unsubscribe();\n  }\n\n  private handleDraggable(\n    enter$: Observable<MapMouseEvent>,\n    leave$: Observable<MapMouseEvent>,\n    updateCoords: (coord: number[]) => void\n  ) {\n    let moving = false;\n    let inside = false;\n    this.mapService.mapCreated$.subscribe(() => {\n      const mouseUp$ = fromEvent<MapMouseEvent>(\n        this.mapService.mapInstance,\n        'mouseup'\n      );\n      const dragStart$ = enter$.pipe(\n        filter(() => !moving),\n        filter((evt) => this.filterFeature(evt)),\n        tap(() => {\n          inside = true;\n          this.mapService.changeCanvasCursor('move');\n          this.mapService.updateDragPan(false);\n        }),\n        switchMap(() =>\n          fromEvent<MapMouseEvent>(\n            this.mapService.mapInstance,\n            'mousedown'\n          ).pipe(takeUntil(leave$))\n        )\n      );\n      const dragging$ = dragStart$.pipe(\n        switchMap(() =>\n          fromEvent<MapMouseEvent>(\n            this.mapService.mapInstance,\n            'mousemove'\n          ).pipe(takeUntil(mouseUp$))\n        )\n      );\n      const dragEnd$ = dragStart$.pipe(switchMap(() => mouseUp$.pipe(take(1))));\n      this.sub.add(\n        dragStart$.subscribe((evt) => {\n          moving = true;\n          this.ngZone.run(() => {\n            this.featureDragStart.emit(evt);\n          });\n        })\n      );\n      this.sub.add(\n        dragging$.subscribe((evt) => {\n          updateCoords([evt.lngLat.lng, evt.lngLat.lat]);\n          this.ngZone.run(() => {\n            this.featureDrag.emit(evt);\n          });\n        })\n      );\n      this.sub.add(\n        dragEnd$.subscribe((evt) => {\n          moving = false;\n          this.ngZone.run(() => {\n            this.featureDragEnd.emit(evt);\n          });\n          if (!inside) {\n            // It's possible to dragEnd outside the target (small input lag)\n            this.mapService.changeCanvasCursor('');\n            this.mapService.updateDragPan(true);\n          }\n        })\n      );\n      this.sub.add(\n        leave$\n          .pipe(\n            tap(() => (inside = false)),\n            filter(() => !moving)\n          )\n          .subscribe(() => {\n            this.mapService.changeCanvasCursor('');\n            this.mapService.updateDragPan(true);\n          })\n      );\n    });\n  }\n\n  private filterFeature(evt: MapMouseEvent) {\n    const layer = this.layer();\n    if (this.featureComponent && layer) {\n      const feature: GeoJSON.Feature = this.mapService.queryRenderedFeatures(\n        evt.point,\n        {\n          layers: [layer.id()],\n          filter: [\n            'all',\n            ['==', '$type', 'Point'],\n            ['==', '$id', this.featureComponent.id() as number],\n          ],\n        }\n      )[0];\n      if (!feature) {\n        return false;\n      }\n    }\n    return true;\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  DestroyRef,\n  NgZone,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  SimpleChanges,\n  inject,\n  input,\n  output,\n  signal,\n} from '@angular/core';\nimport { fromEvent } from 'rxjs';\nimport { filter, startWith, switchMap } from 'rxjs/operators';\nimport { MapService } from '../map/map.service';\nimport type { MapImageData, MapImageOptions } from '../map/map.types';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n/**\n * `mgl-image` - an image component\n * @see [addImage](https://maplibre.org/maplibre-gl-js/docs/API/classes/Map/#addimage)\n *\n * @category Components\n *\n * @example\n * ```html\n * ...\n * <mgl-map\n *   ...\n * >\n *    <mgl-image\n *      id=\"image\"\n *      url=\"https://...\"\n *      (imageLoaded)=\"imageLoaded = true\"\n *    >\n *    ...\n *    <mgl-image\n *      id=\"image2\"\n *      [data]=\"{\n *        width: 64,\n *        height: 64,\n *        data: imageData\n *      }\"\n *    >\n * </mgl-map>\n * ...\n * imageData: Uint8Array;\n * ```\n */\n@Component({\n  selector: 'mgl-image',\n  template: '',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ImageComponent implements OnInit, OnChanges, OnDestroy {\n  /** Init injection */\n  private readonly mapService = inject(MapService);\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly zone = inject(NgZone);\n\n  /** Init input */\n  readonly id = input.required<string>();\n\n  /** Dynamic input */\n  readonly data = input<MapImageData>();\n  /** Dynamic input */\n  readonly options = input<MapImageOptions>();\n  /** Dynamic input */\n  readonly url = input<string>();\n\n  readonly imageError = output<{\n    status: number;\n  }>();\n\n  readonly imageLoaded = output<void>();\n\n  private isAdded = signal(false);\n  private isAdding = signal(false);\n\n  ngOnInit() {\n    this.mapService.mapLoaded$\n      .pipe(\n        switchMap(() =>\n          fromEvent(this.mapService.mapInstance, 'styledata').pipe(\n            startWith(undefined),\n            filter(\n              () =>\n                !this.isAdding() &&\n                !this.mapService.mapInstance.hasImage(this.id())\n            )\n          )\n        ),\n        takeUntilDestroyed(this.destroyRef)\n      )\n      .subscribe(() => this.addImage());\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (\n      (changes.data && !changes.data.isFirstChange()) ||\n      (changes.options && !changes.options.isFirstChange()) ||\n      (changes.url && !changes.url.isFirstChange())\n    ) {\n      this.removeImage();\n      this.ngOnInit();\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.removeImage()\n  }\n\n  removeImage() {\n    if (this.isAdded()) {\n      this.mapService.removeImage(this.id());\n    }\n  }\n\n  private async addImage() {\n    this.isAdding.set(true);\n    const data = this.data();\n    const url = this.url();\n    if (data) {\n      this.mapService.addImage(this.id(), data, this.options());\n      this.isAdded.set(true);\n      this.isAdding.set(false);\n    } else if (url) {\n      try {\n        await this.mapService.loadAndAddImage(this.id(), url, this.options());\n        this.isAdded.set(true);\n        this.isAdding.set(false);\n        this.zone.run(() => {\n          this.imageLoaded.emit();\n        });\n      } catch (error) {\n        this.zone.run(() => {\n          this.imageError.emit(error as any);\n        });\n      }\n    }\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  DestroyRef,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  SimpleChanges,\n  inject,\n  input,\n  output,\n  signal,\n} from '@angular/core';\nimport type {\n  LayerSpecification,\n  FilterSpecification,\n  MapLayerMouseEvent,\n  MapLayerTouchEvent,\n} from 'maplibre-gl';\nimport { fromEvent } from 'rxjs';\nimport { filter, map, startWith, switchMap } from 'rxjs/operators';\nimport { MapService, type SetupLayer } from '../map/map.service';\nimport type { EventData, LayerEvents } from '../map/map.types';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n/**\n * `mgl-layer` - a layer component\n * @see [layers](https://maplibre.org/maplibre-style-spec/layers/)\n *\n * @category Layer Component\n *\n * @example\n * ```html\n * ...\n * <mgl-map ...>\n *   <mgl-layer\n *     id=\"state-borders\"\n *     type=\"line\"\n *     [source]=\"states\"\n *     [paint]=\"{\n *       'line-color': '#627BC1',\n *       'line-width': 2\n *     }\"\n *   ></mgl-layer>\n * </mgl-map>\n * ```\n */\n@Component({\n  selector: 'mgl-layer',\n  template: '',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LayerComponent\n  implements OnInit, OnDestroy, OnChanges, LayerEvents\n{\n  /** Init injection */\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly mapService = inject(MapService);\n\n  /** Init input */\n  readonly id = input.required<LayerSpecification['id']>();\n  readonly type = input.required<LayerSpecification['type']>();\n  readonly source = input<string>();\n  readonly metadata = input<LayerSpecification['metadata']>();\n  readonly sourceLayer = input<string>();\n\n  /**\n   * A flag to enable removeSource clean up functionality\n   *\n   * Init input\n   */\n  readonly removeSource = input<boolean>();\n\n  readonly filter = input<FilterSpecification>();\n  readonly layout = input<LayerSpecification['layout']>();\n  readonly paint = input<LayerSpecification['paint']>();\n  readonly before = input<string>();\n  readonly minzoom = input<LayerSpecification['minzoom']>();\n  readonly maxzoom = input<LayerSpecification['maxzoom']>();\n\n  readonly layerClick = output<MapLayerMouseEvent & EventData>();\n  readonly layerDblClick = output<MapLayerMouseEvent & EventData>();\n  readonly layerMouseDown = output<MapLayerMouseEvent & EventData>();\n  readonly layerMouseUp = output<MapLayerMouseEvent & EventData>();\n  readonly layerMouseEnter = output<MapLayerMouseEvent & EventData>();\n  readonly layerMouseLeave = output<MapLayerMouseEvent & EventData>();\n  readonly layerMouseMove = output<MapLayerMouseEvent & EventData>();\n  readonly layerMouseOver = output<MapLayerMouseEvent & EventData>();\n  readonly layerMouseOut = output<MapLayerMouseEvent & EventData>();\n  readonly layerContextMenu = output<MapLayerMouseEvent & EventData>();\n  readonly layerTouchStart = output<MapLayerTouchEvent & EventData>();\n  readonly layerTouchEnd = output<MapLayerTouchEvent & EventData>();\n  readonly layerTouchCancel = output<MapLayerTouchEvent & EventData>();\n\n  private readonly layerAdded = signal(false);\n  private readonly sourceIdAdded = signal<string | null>(null);\n\n  ngOnInit() {\n    this.mapService.mapLoaded$\n      .pipe(\n        switchMap(() =>\n          fromEvent(this.mapService.mapInstance, 'styledata').pipe(\n            map(() => false),\n            filter(() => !this.mapService.mapInstance.getLayer(this.id())),\n            startWith(true)\n          )\n        ),\n        takeUntilDestroyed(this.destroyRef)\n      )\n      .subscribe((bindEvents) => this.init(bindEvents));\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (!this.layerAdded()) {\n      return;\n    }\n    if (changes.paint && !changes.paint.isFirstChange()) {\n      this.mapService.setAllLayerPaintProperty(\n        this.id(),\n        changes.paint.currentValue\n      );\n    }\n    if (changes.layout && !changes.layout.isFirstChange()) {\n      this.mapService.setAllLayerLayoutProperty(\n        this.id(),\n        changes.layout.currentValue\n      );\n    }\n    if (changes.filter && !changes.filter.isFirstChange()) {\n      this.mapService.setLayerFilter(this.id(), changes.filter.currentValue);\n    }\n    if (changes.before && !changes.before.isFirstChange()) {\n      this.mapService.setLayerBefore(this.id(), changes.before.currentValue);\n    }\n    if (\n      (changes.minzoom && !changes.minzoom.isFirstChange()) ||\n      (changes.maxzoom && !changes.maxzoom.isFirstChange())\n    ) {\n      this.mapService.setLayerZoomRange(\n        this.id(),\n        this.minzoom(),\n        this.maxzoom()\n      );\n    }\n  }\n\n  ngOnDestroy(): void {\n    if (this.layerAdded()) {\n      const sourceIdAdded = this.sourceIdAdded();\n      this.mapService.removeLayer(this.id());\n\n      if (sourceIdAdded !== null) {\n        // Clean up any automatically created source for this layer\n        if (this.mapService.getSource(sourceIdAdded)) {\n          this.mapService.removeSource(sourceIdAdded);\n        }\n      }\n    }\n  }\n\n  private init(bindEvents: boolean) {\n    const layer: SetupLayer = {\n      layerOptions: {\n        id: this.id(),\n        type: this.type(),\n        source: this.source() as string,\n        metadata: this.metadata(),\n        // eslint-disable-next-line @typescript-eslint/naming-convention\n        'source-layer': this.sourceLayer(),\n        minzoom: this.minzoom(),\n        maxzoom: this.maxzoom(),\n        filter: this.filter(),\n        layout: this.layout(),\n        paint: this.paint(),\n      } as LayerSpecification,\n      layerEvents: {\n        layerClick: this.layerClick,\n        layerDblClick: this.layerDblClick,\n        layerMouseDown: this.layerMouseDown,\n        layerMouseUp: this.layerMouseUp,\n        layerMouseEnter: this.layerMouseEnter,\n        layerMouseLeave: this.layerMouseLeave,\n        layerMouseMove: this.layerMouseMove,\n        layerMouseOver: this.layerMouseOver,\n        layerMouseOut: this.layerMouseOut,\n        layerContextMenu: this.layerContextMenu,\n        layerTouchStart: this.layerTouchStart,\n        layerTouchEnd: this.layerTouchEnd,\n        layerTouchCancel: this.layerTouchCancel,\n      },\n    };\n\n    if (this.removeSource() && typeof this.source() !== 'string') {\n      // There is no id of an existing source bound to this layer\n      if (this.mapService.getSource(this.id()) === undefined) {\n        // A source with this layer id doesn't exist so it will be created automatically in the addLayer call below\n        this.sourceIdAdded.set(this.id());\n      }\n    }\n    this.mapService.addLayer(layer, bindEvents, this.before());\n\n    const sourceIdAdded = this.sourceIdAdded();\n    if (sourceIdAdded !== null) {\n      const getSource = this.mapService.getSource(sourceIdAdded);\n      if (getSource === undefined) {\n        // If it wasn't created for some reason then we don't want to clean it up\n        this.sourceIdAdded.set(null);\n      }\n    }\n    this.layerAdded.set(true);\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  OnChanges,\n  OnDestroy,\n  SimpleChanges,\n  afterEveryRender,\n  afterNextRender,\n  inject,\n  input,\n  output,\n  viewChild,\n} from '@angular/core';\nimport type {\n  AnimationOptions,\n  LngLatBoundsLike,\n  Map,\n  MapLibreEvent,\n  MapOptions,\n  MapLibreZoomEvent,\n  MapContextEvent,\n  MapDataEvent,\n  MapMouseEvent,\n  MapSourceDataEvent,\n  MapStyleDataEvent,\n  MapTouchEvent,\n  MapWheelEvent,\n  PointLike,\n  TerrainSpecification,\n  ProjectionSpecification,\n} from 'maplibre-gl';\nimport { MapService, type MovingOptions } from './map.service';\nimport type { MapEvent, EventData } from './map.types';\nimport { firstValueFrom } from 'rxjs';\n\n/**\n * `mgl-map` - The main map component\n * @see [Map](https://maplibre.org/maplibre-gl-js/docs/API/classes/Map/)\n *\n * @category Map Component\n *\n * @example\n * ```typescript\n * ...\n * @Component({\n *   template: `\n *   <mgl-map\n *     [style]=\"'https://demotiles.maplibre.org/style.json'\"\n *     [zoom]=\"[9]\"\n *     [center]=\"[-74.50, 40]\"\n *     (mapLoad)=\"map = $event\"\n *   ></mgl-map>\n *   `,\n * ...\n * })\n * export class DisplayMapComponent {\n *   map: Map; // MapLibre GL Map object (MapLibre is ran outside angular zone, keep that in mind when binding events from this object)\n * ...\n * }\n * ```\n */\n\n@Component({\n  selector: 'mgl-map',\n  template: '<div #container></div>',\n  styles: [\n    `\n      :host {\n        display: block;\n      }\n      div {\n        height: 100%;\n        width: 100%;\n      }\n    `,\n  ],\n  providers: [MapService],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MapComponent implements OnChanges, OnDestroy, MapEvent {\n  private readonly mapService = inject(MapService);\n  private readonly elementRef = inject(ElementRef);\n\n  /** Init input */\n  readonly collectResourceTiming = input<MapOptions['collectResourceTiming']>();\n  /** Init input */\n  readonly crossSourceCollisions = input<MapOptions['crossSourceCollisions']>();\n  /** Init input */\n  readonly customMapboxApiUrl = input<string>();\n  /** Init input */\n  readonly fadeDuration = input<MapOptions['fadeDuration']>();\n  /** Init input */\n  readonly hash = input<MapOptions['hash']>();\n  /** Init input */\n  readonly refreshExpiredTiles = input<MapOptions['refreshExpiredTiles']>();\n  /** Init input */\n  readonly canvasContextAttributes = input<MapOptions['canvasContextAttributes']>();\n  /** Init input */\n  readonly bearingSnap = input<MapOptions['bearingSnap']>();\n  /** Init input */\n  readonly interactive = input<MapOptions['interactive']>();\n  /** Init input */\n  readonly pitchWithRotate = input<MapOptions['pitchWithRotate']>();\n  /** Init input */\n  readonly clickTolerance = input<MapOptions['clickTolerance']>();\n  /** Init input */\n  readonly attributionControl = input<MapOptions['attributionControl']>();\n  /** Init input */\n  readonly logoPosition = input<MapOptions['logoPosition']>();\n  /** Init input */\n  readonly maxTileCacheSize = input<MapOptions['maxTileCacheSize']>();\n  /** Init input */\n  readonly localIdeographFontFamily = input<MapOptions['localIdeographFontFamily']>();\n  /** Init input */\n  readonly trackResize = input<MapOptions['trackResize']>();\n  /** Init input */\n  readonly transformRequest = input<MapOptions['transformRequest']>();\n  /** Init input */\n  readonly bounds = input<MapOptions['bounds']>();\n  /** Init input */\n  readonly locale = input<MapOptions['locale']>();\n  /** Init input */\n  readonly cooperativeGestures = input<MapOptions['cooperativeGestures']>();\n  /** Init input */\n  readonly cancelPendingTileRequestsWhileZooming = input<MapOptions['cancelPendingTileRequestsWhileZooming']>();\n  /** Init input */\n  readonly centerClampedToGround = input<MapOptions['centerClampedToGround']>();\n  /** Init input */\n  readonly maplibreLogo = input<MapOptions['maplibreLogo']>();\n  /** Init input */\n  readonly maxCanvasSize = input<MapOptions['maxCanvasSize']>();\n  /** Init input */\n  readonly maxTileCacheZoomLevels = input<MapOptions['maxTileCacheZoomLevels']>();\n  /** Init input */\n  readonly pixelRatio = input<MapOptions['pixelRatio']>();\n  /** Init input */\n  readonly rollEnabled = input<MapOptions['rollEnabled']>();\n  /** Init input */\n  readonly transformCameraUpdate = input<MapOptions['transformCameraUpdate']>();\n  /** Init input */\n  readonly validateStyle = input<MapOptions['validateStyle']>();\n\n  /** Dynamic input */\n  readonly minZoom = input<MapOptions['minZoom']>();\n  /** Dynamic input */\n  readonly maxZoom = input<MapOptions['maxZoom']>();\n  /** Dynamic input */\n  readonly minPitch = input<MapOptions['minPitch']>();\n  /** Dynamic input */\n  readonly maxPitch = input<MapOptions['maxPitch']>();\n  /** Dynamic input */\n  readonly scrollZoom = input<MapOptions['scrollZoom']>();\n  /** Dynamic input */\n  readonly dragRotate = input<MapOptions['dragRotate']>();\n  /** Dynamic input */\n  readonly touchPitch = input<MapOptions['touchPitch']>();\n  /** Dynamic input */\n  readonly touchZoomRotate = input<MapOptions['touchZoomRotate']>();\n  /** Dynamic input */\n  readonly doubleClickZoom = input<MapOptions['doubleClickZoom']>();\n  /** Dynamic input */\n  readonly keyboard = input<MapOptions['keyboard']>();\n  /** Dynamic input */\n  readonly dragPan = input<MapOptions['dragPan']>();\n  /** Dynamic input */\n  readonly boxZoom = input<MapOptions['boxZoom']>();\n  /** Dynamic input */\n  readonly style = input.required<MapOptions['style']>();\n  /** Dynamic input */\n  readonly center = input<MapOptions['center']>();\n  /** Dynamic input */\n  readonly maxBounds = input<MapOptions['maxBounds']>();\n  /** Dynamic input */\n  readonly zoom = input<[number]>();\n  /** Dynamic input */\n  readonly bearing = input<[number]>();\n  /** Dynamic input */\n  readonly pitch = input<[number]>();\n  /** Dynamic input */\n  readonly roll = input<MapOptions['roll']>();\n  /** Dynamic input */\n  readonly fitBoundsOptions = input<MapOptions['fitBoundsOptions']>(); // First value goes to options.fitBoundsOptions. Subsequents changes are passed to fitBounds\n  /** Dynamic input */\n  readonly renderWorldCopies = input<MapOptions['renderWorldCopies']>();\n  /** Dynamic input */\n  readonly elevation = input<MapOptions['elevation']>();\n  /** Dynamic input that is not part of the `MapOptions` object */\n  readonly terrain = input<TerrainSpecification>();\n  /** Dynamic input that is not part of the `MapOptions` object  */\n  readonly projection = input<ProjectionSpecification>();\n\n  /** Added by ngx-mapbox-gl */\n  readonly movingMethod = input<'jumpTo' | 'easeTo' | 'flyTo'>('flyTo');\n  readonly movingOptions = input<MovingOptions>();\n\n  // => First value is a alias to bounds input (since mapbox 0.53.0). Subsequents changes are passed to fitBounds\n  readonly fitBounds = input<LngLatBoundsLike>();\n  readonly fitScreenCoordinates = input<[PointLike, PointLike]>();\n  readonly centerWithPanTo = input<boolean>();\n  readonly panToOptions = input<AnimationOptions>();\n  readonly cursorStyle = input<string>();\n\n  readonly mapResize = output<MapLibreEvent & EventData>();\n  readonly mapRemove = output<MapLibreEvent & EventData>();\n  readonly mapMouseDown = output<MapMouseEvent & EventData>();\n  readonly mapMouseUp = output<MapMouseEvent & EventData>();\n  readonly mapMouseMove = output<MapMouseEvent & EventData>();\n  readonly mapClick = output<MapMouseEvent & EventData>();\n  readonly mapDblClick = output<MapMouseEvent & EventData>();\n  readonly mapMouseOver = output<MapMouseEvent & EventData>();\n  readonly mapMouseOut = output<MapMouseEvent & EventData>();\n  readonly mapContextMenu = output<MapMouseEvent & EventData>();\n  readonly mapTouchStart = output<MapTouchEvent & EventData>();\n  readonly mapTouchEnd = output<MapTouchEvent & EventData>();\n  readonly mapTouchMove = output<MapTouchEvent & EventData>();\n  readonly mapTouchCancel = output<MapTouchEvent & EventData>();\n  readonly mapWheel = output<MapWheelEvent & EventData>();\n  readonly moveStart = output<\n    MapLibreEvent<MouseEvent | TouchEvent | WheelEvent | undefined> & EventData\n  >();\n  readonly move = output<\n    MapLibreEvent<MouseEvent | TouchEvent | WheelEvent | undefined> & EventData\n  >();\n  readonly moveEnd = output<\n    MapLibreEvent<MouseEvent | TouchEvent | WheelEvent | undefined> & EventData\n  >();\n  readonly mapDragStart = output<\n    MapLibreEvent<MouseEvent | TouchEvent | undefined> & EventData\n  >();\n  readonly mapDrag = output<\n    MapLibreEvent<MouseEvent | TouchEvent | undefined> & EventData\n  >();\n  readonly mapDragEnd = output<\n    MapLibreEvent<MouseEvent | TouchEvent | undefined> & EventData\n  >();\n  readonly zoomStart = output<\n    MapLibreEvent<MouseEvent | TouchEvent | WheelEvent | undefined> & EventData\n  >();\n  readonly zoomEvt = output<\n    MapLibreEvent<MouseEvent | TouchEvent | WheelEvent | undefined> & EventData\n  >();\n  readonly zoomEnd = output<\n    MapLibreEvent<MouseEvent | TouchEvent | WheelEvent | undefined> & EventData\n  >();\n  readonly rotateStart = output<\n    MapLibreEvent<MouseEvent | TouchEvent | undefined> & EventData\n  >();\n  readonly rotate = output<\n    MapLibreEvent<MouseEvent | TouchEvent | undefined> & EventData\n  >();\n  readonly rotateEnd = output<\n    MapLibreEvent<MouseEvent | TouchEvent | undefined> & EventData\n  >();\n  readonly pitchStart = output<\n    MapLibreEvent<MouseEvent | TouchEvent | undefined> & EventData\n  >();\n  readonly pitchEvt = output<\n    MapLibreEvent<MouseEvent | TouchEvent | undefined> & EventData\n  >();\n  readonly pitchEnd = output<\n    MapLibreEvent<MouseEvent | TouchEvent | undefined> & EventData\n  >();\n  readonly boxZoomStart = output<MapLibreZoomEvent & EventData>();\n  readonly boxZoomEnd = output<MapLibreZoomEvent & EventData>();\n  readonly boxZoomCancel = output<MapLibreZoomEvent & EventData>();\n  readonly webGlContextLost = output<MapContextEvent & EventData>();\n  readonly webGlContextRestored = output<MapContextEvent & EventData>();\n  readonly mapLoad = output<Map>();\n  readonly idle = output<MapLibreEvent & EventData>();\n  readonly render = output<MapLibreEvent & EventData>();\n  readonly mapError = output<ErrorEvent & EventData>();\n  readonly data = output<MapDataEvent & EventData>();\n  readonly styleData = output<MapStyleDataEvent & EventData>();\n  readonly sourceData = output<MapSourceDataEvent & EventData>();\n  readonly dataLoading = output<MapDataEvent & EventData>();\n  readonly styleDataLoading = output<MapStyleDataEvent & EventData>();\n  readonly sourceDataLoading = output<MapSourceDataEvent & EventData>();\n  readonly styleImageMissing = output<\n    {\n      id: string;\n    } & EventData\n  >();\n\n  get mapInstance(): Map {\n    return this.mapService.mapInstance;\n  }\n\n  readonly mapContainer =\n    viewChild.required<ElementRef<HTMLDivElement>>('container');\n\n  constructor() {\n    afterNextRender(() => {\n      if (this.canvasContextAttributes()?.preserveDrawingBuffer) {\n        // This is to allow better interaction with the map state\n        const htmlElement: HTMLElement = this.elementRef.nativeElement;\n        htmlElement.setAttribute('data-cy', 'map');\n        this.mapLoad.subscribe(() => {\n          htmlElement.setAttribute('data-loaded', 'true');\n        });\n        this.idle.subscribe(() => {\n          htmlElement.setAttribute('data-idle', 'true');\n        });\n        this.render.subscribe(() => {\n          htmlElement.removeAttribute('data-idle');\n        });\n      }\n      this.mapService.setup({\n        mapOptions: {\n          collectResourceTiming: this.collectResourceTiming(),\n          container: this.mapContainer().nativeElement,\n          crossSourceCollisions: this.crossSourceCollisions(),\n          fadeDuration: this.fadeDuration(),\n          minZoom: this.minZoom(),\n          maxZoom: this.maxZoom(),\n          minPitch: this.minPitch(),\n          maxPitch: this.maxPitch(),\n          style: this.style(),\n          hash: this.hash(),\n          interactive: this.interactive(),\n          bearingSnap: this.bearingSnap(),\n          pitchWithRotate: this.pitchWithRotate(),\n          clickTolerance: this.clickTolerance(),\n          attributionControl: this.attributionControl(),\n          logoPosition: this.logoPosition(),\n          canvasContextAttributes: this.canvasContextAttributes(),\n          refreshExpiredTiles: this.refreshExpiredTiles(),\n          maxBounds: this.maxBounds(),\n          scrollZoom: this.scrollZoom(),\n          boxZoom: this.boxZoom(),\n          dragRotate: this.dragRotate(),\n          dragPan: this.dragPan(),\n          keyboard: this.keyboard(),\n          doubleClickZoom: this.doubleClickZoom(),\n          touchPitch: this.touchPitch(),\n          touchZoomRotate: this.touchZoomRotate(),\n          trackResize: this.trackResize(),\n          center: this.center(),\n          zoom: this.zoom(),\n          bearing: this.bearing(),\n          pitch: this.pitch(),\n          roll: this.roll(),\n          renderWorldCopies: this.renderWorldCopies(),\n          maxTileCacheSize: this.maxTileCacheSize(),\n          localIdeographFontFamily: this.localIdeographFontFamily(),\n          transformRequest: this.transformRequest(),\n          bounds: this.bounds() ? this.bounds() : this.fitBounds(),\n          fitBoundsOptions: this.fitBoundsOptions(),\n          locale: this.locale,\n          cooperativeGestures: this.cooperativeGestures(),\n          cancelPendingTileRequestsWhileZooming: this.cancelPendingTileRequestsWhileZooming(),\n          centerClampedToGround: this.centerClampedToGround(),\n          elevation: this.elevation(),\n          maplibreLogo: this.maplibreLogo(),\n          maxCanvasSize: this.maxCanvasSize(),\n          maxTileCacheZoomLevels: this.maxTileCacheZoomLevels(),\n          pixelRatio: this.pixelRatio(),\n          rollEnabled: this.rollEnabled(),\n          transformCameraUpdate: this.transformCameraUpdate(),\n          validateStyle: this.validateStyle(),\n\n          terrain: this.terrain(),\n          projection: this.projection(),\n        },\n        mapEvents: this,\n      });\n      const cursorStyle = this.cursorStyle();\n      if (cursorStyle) {\n        this.mapService.changeCanvasCursor(cursorStyle);\n      }\n    });\n\n    afterEveryRender(() => {\n      this.mapService.clearMapElements();\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.mapService.destroyMap();\n  }\n\n  async ngOnChanges(changes: SimpleChanges) {\n    await firstValueFrom(this.mapService.mapCreated$);\n    const zoom = this.zoom();\n    const bearing = this.bearing();\n    const pitch = this.pitch();\n    const center = this.center();\n\n    if (changes.cursorStyle && !changes.cursorStyle.isFirstChange()) {\n      this.mapService.changeCanvasCursor(changes.cursorStyle.currentValue);\n    }\n    if (changes.minZoom && !changes.minZoom.isFirstChange()) {\n      this.mapService.updateMinZoom(changes.minZoom.currentValue);\n    }\n    if (changes.maxZoom && !changes.maxZoom.isFirstChange()) {\n      this.mapService.updateMaxZoom(changes.maxZoom.currentValue);\n    }\n    if (changes.minPitch && !changes.minPitch.isFirstChange()) {\n      this.mapService.updateMinPitch(changes.minPitch.currentValue);\n    }\n    if (changes.maxPitch && !changes.maxPitch.isFirstChange()) {\n      this.mapService.updateMaxPitch(changes.maxPitch.currentValue);\n    }\n    if (\n      changes.renderWorldCopies &&\n      !changes.renderWorldCopies.isFirstChange()\n    ) {\n      this.mapService.updateRenderWorldCopies(\n        changes.renderWorldCopies.currentValue\n      );\n    }\n    if (changes.scrollZoom && !changes.scrollZoom.isFirstChange()) {\n      this.mapService.updateScrollZoom(changes.scrollZoom.currentValue);\n    }\n    if (changes.dragRotate && !changes.dragRotate.isFirstChange()) {\n      this.mapService.updateDragRotate(changes.dragRotate.currentValue);\n    }\n    if (changes.touchPitch && !changes.touchPitch.isFirstChange()) {\n      this.mapService.updateTouchPitch(changes.touchPitch.currentValue);\n    }\n    if (changes.touchZoomRotate && !changes.touchZoomRotate.isFirstChange()) {\n      this.mapService.updateTouchZoomRotate(\n        changes.touchZoomRotate.currentValue\n      );\n    }\n    if (changes.doubleClickZoom && !changes.doubleClickZoom.isFirstChange()) {\n      this.mapService.updateDoubleClickZoom(\n        changes.doubleClickZoom.currentValue\n      );\n    }\n    if (changes.keyboard && !changes.keyboard.isFirstChange()) {\n      this.mapService.updateKeyboard(changes.keyboard.currentValue);\n    }\n    if (changes.dragPan && !changes.dragPan.isFirstChange()) {\n      this.mapService.updateDragPan(changes.dragPan.currentValue);\n    }\n    if (changes.boxZoom && !changes.boxZoom.isFirstChange()) {\n      this.mapService.updateBoxZoom(changes.boxZoom.currentValue);\n    }\n    if (changes.style && !changes.style.isFirstChange()) {\n      this.mapService.updateStyle(changes.style.currentValue);\n    }\n    if (changes.maxBounds && !changes.maxBounds.isFirstChange()) {\n      this.mapService.updateMaxBounds(changes.maxBounds.currentValue);\n    }\n    if (\n      changes.fitBounds &&\n      changes.fitBounds.currentValue &&\n      !changes.fitBounds.isFirstChange()\n    ) {\n      this.mapService.fitBounds(\n        changes.fitBounds.currentValue,\n        this.fitBoundsOptions()\n      );\n    }\n    if (\n      changes.fitScreenCoordinates &&\n      changes.fitScreenCoordinates.currentValue\n    ) {\n      if (\n        (center || zoom || pitch || this.fitBounds()) &&\n        changes.fitScreenCoordinates.isFirstChange()\n      ) {\n        console.warn(\n          '[ngx-maplibre-gl] center / zoom / pitch / fitBounds inputs are being overridden by fitScreenCoordinates input'\n        );\n      }\n      this.mapService.fitScreenCoordinates(\n        changes.fitScreenCoordinates.currentValue,\n        bearing ? bearing[0] : 0,\n        this.movingOptions()\n      );\n    }\n    if (\n      this.centerWithPanTo() &&\n      changes.center &&\n      !changes.center.isFirstChange() &&\n      !changes.zoom &&\n      !changes.bearing &&\n      !changes.pitch &&\n      !changes.roll\n    ) {\n      this.mapService.panTo(this.center()!, this.panToOptions());\n    } else if (\n      (changes.center && !changes.center.isFirstChange()) ||\n      (changes.zoom && !changes.zoom.isFirstChange()) ||\n      (changes.bearing && !changes.bearing.isFirstChange() && !changes.fitScreenCoordinates) ||\n      (changes.pitch && !changes.pitch.isFirstChange()) ||\n      (changes.roll && !changes.roll.isFirstChange())\n    ) {\n      this.mapService.move(\n        this.movingMethod(),\n        this.movingOptions(),\n        changes.zoom && zoom ? zoom[0] : undefined,\n        changes.center ? center : undefined,\n        changes.bearing && bearing ? bearing[0] : undefined,\n        changes.pitch && pitch ? pitch[0] : undefined,\n        changes.roll ? changes.roll.currentValue : undefined\n      );\n    }\n    if (changes.terrain && !changes.terrain.isFirstChange()) {\n      this.mapService.setTerrain(changes.terrain.currentValue);\n    }\n    if (changes.projection && !changes.projection.isFirstChange()) {\n      this.mapService.setProjection(changes.projection.currentValue);\n    }\n    if (changes.elevation && !changes.elevation.isFirstChange()) {\n      this.mapService.setCenterElevation(changes.elevation.currentValue);\n    }\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  DestroyRef,\n  ElementRef,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  SimpleChanges,\n  ViewEncapsulation,\n  afterNextRender,\n  inject,\n  input,\n  output,\n  signal,\n  viewChild,\n} from '@angular/core';\nimport type { LngLatLike, Marker, MarkerOptions } from 'maplibre-gl';\nimport { MapService } from '../map/map.service';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n/**\n * `mgl-marker` - a marker component\n * @see [Marker](https://maplibre.org/maplibre-gl-js/docs/API/classes/Marker/)\n *\n * @category Components\n *\n * @example\n * ```html\n * ...\n * <mgl-map ...>\n *   <mgl-marker [lngLat]=\"[-66.324462890625, -16.024695711685304]\">\n *     <div (click)=\"alert('Foo')\" class=\"marker\">Hello</div>\n *   </mgl-marker>\n * </mgl-map>\n * ```\n *\n * Note: Only use this if you **really** need to use HTML/Angular component to render your symbol. These markers are slow compared to a `Layer` of symbol because they're not rendered using WebGL.\n */\n@Component({\n  selector: 'mgl-marker',\n  template: `<div [class]=\"className()\" #content>\n    <ng-content></ng-content>\n  </div>`,\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MarkerComponent implements OnChanges, OnInit, OnDestroy {\n  /** Init injection */\n  private readonly mapService = inject(MapService);\n  private readonly destroyRef = inject(DestroyRef);\n\n  /** Init inputs */\n  readonly offset = input<MarkerOptions['offset']>();\n  readonly anchor = input<MarkerOptions['anchor']>();\n  readonly clickTolerance = input<MarkerOptions['clickTolerance']>();\n  readonly color = input<MarkerOptions['color']>();\n  readonly scale = input<MarkerOptions['scale']>();\n  readonly opacity = input<MarkerOptions['opacity']>();\n  readonly opacityWhenCovered = input<MarkerOptions['opacityWhenCovered']>();\n  readonly subpixelPositioning = input<MarkerOptions['subpixelPositioning']>();\n  /** Dynamic input */\n  readonly feature = input<GeoJSON.Feature<GeoJSON.Point>>();\n  readonly lngLat = input<LngLatLike>();\n  readonly draggable = input<MarkerOptions['draggable']>();\n  readonly popupShown = input<boolean>();\n  readonly className = input<string>();\n  readonly pitchAlignment = input<MarkerOptions['pitchAlignment']>();\n  readonly rotationAlignment = input<MarkerOptions['rotationAlignment']>();\n  readonly rotation = input<MarkerOptions['rotation']>();\n\n  readonly markerDragStart = output<Marker>();\n  readonly markerDragEnd = output<Marker>();\n  readonly markerDrag = output<Marker>();\n\n  readonly content = viewChild.required<ElementRef<HTMLDivElement>>('content');\n\n  readonly markerInstance = signal<Marker | null>(null);\n\n  constructor() {\n    afterNextRender(() => {\n      this.mapService.mapCreated$\n        .pipe(takeUntilDestroyed(this.destroyRef))\n        .subscribe(() => {\n          const marker = this.mapService.addMarker({\n            markersOptions: {\n              element: this.content().nativeElement,\n              feature: this.feature(),\n              lngLat: this.lngLat(),\n              offset: this.offset(),\n              anchor: this.anchor(),\n              color: this.color(),\n              scale: this.scale(),\n              draggable: !!this.draggable(),\n              clickTolerance: this.clickTolerance(),\n              rotation: this.rotation(),\n              rotationAlignment: this.rotationAlignment(),\n              pitchAlignment: this.pitchAlignment(),\n              opacity: this.opacity(),\n              opacityWhenCovered: this.opacityWhenCovered(),\n              subpixelPositioning: this.subpixelPositioning(),\n            },\n            markersEvents: {\n              markerDragStart: this.markerDragStart,\n              markerDrag: this.markerDrag,\n              markerDragEnd: this.markerDragEnd,\n            },\n          });\n          this.markerInstance.set(marker);\n        });\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.removeMarker();\n  }\n\n  ngOnInit() {\n    if (this.feature() && this.lngLat()) {\n      throw new Error('feature and lngLat input are mutually exclusive');\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    const markerInstance = this.markerInstance()!;\n    if (changes.lngLat && !changes.lngLat.isFirstChange()) {\n      markerInstance.setLngLat(changes.lngLat.currentValue);\n    }\n\n    if (changes.feature && !changes.feature.isFirstChange()) {\n      markerInstance.setLngLat(\n        changes.feature.currentValue.geometry.coordinates\n      );\n    }\n    if (changes.draggable && !changes.draggable.isFirstChange()) {\n      markerInstance.setDraggable(!!changes.draggable.currentValue);\n    }\n    if (changes.popupShown && !changes.popupShown.isFirstChange()) {\n      changes.popupShown.currentValue\n        ? markerInstance.getPopup().addTo(this.mapService.mapInstance)\n        : markerInstance.getPopup().remove();\n    }\n    if (changes.pitchAlignment && !changes.pitchAlignment.isFirstChange()) {\n      markerInstance.setPitchAlignment(changes.pitchAlignment.currentValue);\n    }\n    if (\n      changes.rotationAlignment &&\n      !changes.rotationAlignment.isFirstChange()\n    ) {\n      markerInstance.setRotationAlignment(\n        changes.rotationAlignment.currentValue\n      );\n    }\n    if (changes.rotation && !changes.rotation.isFirstChange()) {\n      markerInstance.setRotation(changes.rotation.currentValue);\n    }\n  }\n\n  removeMarker() {\n    this.mapService.removeMarker(this.markerInstance()!);\n    this.markerInstance.set(null);\n  }\n\n  togglePopup() {\n    this.markerInstance()!.togglePopup();\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  DestroyRef,\n  Directive,\n  NgZone,\n  TemplateRef,\n  afterNextRender,\n  contentChild,\n  inject,\n  input,\n  signal,\n} from '@angular/core';\nimport type {\n  MapGeoJSONFeature,\n  MapSourceDataEvent,\n  QueryRenderedFeaturesOptions,\n} from 'maplibre-gl';\nimport { fromEvent, merge } from 'rxjs';\nimport { filter, startWith, switchMap } from 'rxjs/operators';\nimport { MapService } from '../map/map.service';\nimport { MarkerComponent } from '../marker/marker.component';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { LayerComponent } from '../layer/layer.component';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n/**\n * a template directive for point for {@link MarkersForClustersComponent}\n *\n * @category Directives\n */\n@Directive({\n  selector: 'ng-template[mglPoint]',\n})\nexport class PointDirective {}\n\n/**\n * a template directive for clustered point for {@link MarkersForClustersComponent}\n *\n * @category Directives\n */\n@Directive({\n  selector: 'ng-template[mglClusterPoint]',\n})\nexport class ClusterPointDirective {}\n\nlet uniqId = 0;\n\n/**\n * [ngx] `mgl-markers-for-clusters` - an HTML marker component for clustered points.\n * Requires a geojson source that is clustered.\n *\n * @category Components\n *\n * @example\n * ```html\n * ...\n * <mgl-map ...>\n *   <mgl-markers-for-cluster [source]=\"myGeoJsonclusteredSource\">\n *     <ng-template mglPoint let-feature> Marker! </ng-template>\n *     <ng-template mglClusterPoint let-feature>\n *       ClusterId: {{feature.properties?.cluster_id}}, Points:\n *       {{feature.properties?.point_count}}\n *     </ng-template>\n *   </mgl-markers-for-cluster>\n * </mgl-map>\n * ```\n *\n * Note: Only use this if you **really** need to use HTML/Angular component to render your symbols. This is **slower** than rendering symbols in WebGL.\n */\n@Component({\n  selector: 'mgl-markers-for-clusters',\n  template: `\n    <mgl-layer\n      [id]=\"layerId\"\n      [source]=\"source()\"\n      type=\"circle\"\n      [paint]=\"{ 'circle-radius': 0 }\"\n    ></mgl-layer>\n    @for (feature of clusterPoints(); track $index) { \n      @if (feature.properties.cluster) {\n        <mgl-marker [feature]=\"feature\">\n          <ng-container\n            *ngTemplateOutlet=\"clusterPointTpl(); context: { $implicit: feature }\"\n          ></ng-container>\n        </mgl-marker>\n      } @else {\n        <mgl-marker [feature]=\"feature\">\n          <ng-container\n            *ngTemplateOutlet=\"pointTpl(); context: { $implicit: feature }\"\n          ></ng-container>\n        </mgl-marker>\n      } \n    }`,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  preserveWhitespaces: false,\n  imports: [LayerComponent, MarkerComponent, NgTemplateOutlet],\n})\nexport class MarkersForClustersComponent {\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly mapService = inject(MapService);\n  private readonly ngZone = inject(NgZone);\n\n  /** Init input */\n  readonly source = input.required<string>();\n\n  /** @hidden */\n  readonly pointTpl = contentChild<PointDirective, TemplateRef<PointDirective>>(\n    PointDirective,\n    {\n      read: TemplateRef,\n    }\n  );\n  /** @hidden */\n  readonly clusterPointTpl = contentChild<\n    ClusterPointDirective,\n    TemplateRef<ClusterPointDirective>\n  >(ClusterPointDirective, {\n    read: TemplateRef,\n  });\n\n  /** @hidden */\n  readonly clusterPoints = signal<MapGeoJSONFeature[]>([]);\n  /** @hidden */\n  readonly layerId = `mgl-markers-for-clusters-${uniqId++}`;\n\n  constructor() {\n    afterNextRender(() => {\n      const clusterDataUpdate = () =>\n        fromEvent<MapSourceDataEvent>(this.mapService.mapInstance, 'data').pipe(\n          filter(\n            (e) =>\n              e.sourceId === this.source() &&\n              e.sourceDataType !== 'metadata' &&\n              this.mapService.mapInstance.isSourceLoaded(this.source())\n          )\n        );\n      this.mapService.mapCreated$\n        .pipe(\n          switchMap(clusterDataUpdate),\n          switchMap(() =>\n            merge(\n              fromEvent(this.mapService.mapInstance, 'move'),\n              fromEvent(this.mapService.mapInstance, 'moveend')\n            ).pipe(startWith(undefined))\n          )\n        )\n        .pipe(takeUntilDestroyed(this.destroyRef))\n        .subscribe(() => {\n          this.ngZone.run(() => {\n            this.updateCluster();\n          });\n        });\n    });\n  }\n\n  private updateCluster() {\n    const params = this.getClusterParams(this.pointTpl());\n    this.clusterPoints.set(\n      this.mapService.mapInstance.queryRenderedFeatures(params)\n    );\n  }\n\n  getClusterParams(\n    pointTpl: TemplateRef<PointDirective> | undefined\n  ): QueryRenderedFeaturesOptions {\n    if (!pointTpl) {\n      return { layers: [this.layerId], filter: ['==', 'cluster', true] };\n    }\n\n    return { layers: [this.layerId] };\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  DestroyRef,\n  ElementRef,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  SimpleChanges,\n  afterNextRender,\n  inject,\n  input,\n  output,\n  viewChild,\n} from '@angular/core';\nimport type { LngLatLike, Offset, Popup, PopupOptions } from 'maplibre-gl';\nimport { MapService } from '../map/map.service';\nimport { MarkerComponent } from '../marker/marker.component';\nimport { tap } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n/**\n * `mgl-popup` - a popup component\n * @see [Popup](https://maplibre.org/maplibre-gl-js/docs/API/classes/Popup/)\n *\n * @category Components\n *\n * @example\n * ```html\n * ...\n * <mgl-map ...>\n *   <mgl-popup [lngLat]=\"[-96, 37.8]\" [closeOnClick]=\"false\">\n *     <h1>Hello world !</h1>\n *   </mgl-popup>\n *   ...\n *   <mgl-marker #myMarker ...> ... </mgl-marker>\n *   <mgl-popup [marker]=\"myMarker\"> Hello from marker ! </mgl-popup>\n * </mgl-map>\n * ```\n */\n@Component({\n  selector: 'mgl-popup',\n  template: '<div #content data-cy=\"mgl-popup\"><ng-content></ng-content></div>',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PopupComponent implements OnChanges, OnInit, OnDestroy {\n  /** Init injection */\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly mapService = inject(MapService);\n\n  /** Init input */\n  readonly closeButton = input<PopupOptions['closeButton']>();\n\n  /** Init input */\n  readonly closeOnClick = input<PopupOptions['closeOnClick']>();\n\n  /** Init input */\n  readonly closeOnMove = input<PopupOptions['closeOnMove']>();\n\n  /** Init input */\n  readonly focusAfterOpen = input<PopupOptions['focusAfterOpen']>();\n\n  /** Init input */\n  readonly anchor = input<PopupOptions['anchor']>();\n\n  /** Init input */\n  readonly className = input<PopupOptions['className']>();\n\n  /** Init input */\n  readonly maxWidth = input<PopupOptions['maxWidth']>();\n\n  /** Init input */\n  readonly subpixelPositioning = input<PopupOptions['subpixelPositioning']>();\n\n  /**\n   * Dynamic input [ngx]\n   * Mutually exclusive with `lngLat`\n   */\n  readonly feature = input<GeoJSON.Feature<GeoJSON.Point>>();\n\n  /** Dynamic input */\n  readonly lngLat = input<LngLatLike>();\n\n  /**\n   * Dynamic input [ngx]\n   * The targeted marker\n   */\n  readonly marker = input<MarkerComponent>();\n\n  /** Dynamic input */\n  readonly offset = input<Offset>();\n\n  readonly popupClose = output<void>();\n  readonly popupOpen = output<void>();\n\n  /** @hidden */\n  readonly content = viewChild.required<ElementRef<HTMLDivElement>>('content');\n\n  private popupInstance: maplibregl.Popup | null = null;\n\n  constructor() {\n    afterNextRender(() => {\n      this.popupInstance = this.createPopup();\n      this.addPopup(this.popupInstance)\n        .pipe(takeUntilDestroyed(this.destroyRef))\n        .subscribe();\n    });\n  }\n\n  ngOnInit() {\n    if (\n      (this.lngLat() && this.marker()) ||\n      (this.feature() && this.lngLat()) ||\n      (this.feature() && this.marker())\n    ) {\n      throw new Error('marker, lngLat, feature input are mutually exclusive');\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes.feature && !changes.feature.isFirstChange()) {\n      const newlngLat = this.getLngLat(this.lngLat(), this.feature());\n      this.mapService.removePopupFromMap(this.popupInstance!);\n      const popupInstanceTmp = this.createPopup();\n      this.mapService.addPopupToMap(\n        popupInstanceTmp,\n        newlngLat\n      );\n      this.popupInstance = popupInstanceTmp;\n    }\n\n    if (changes.lngLat && !changes.lngLat.isFirstChange()) {\n      this.popupInstance!.setLngLat(changes.lngLat.currentValue);\n    }\n\n    if (changes.marker && !changes.marker.isFirstChange()) {\n      const previousMarker: MarkerComponent = changes.marker.previousValue;\n      const previousMarkerInstance = previousMarker.markerInstance();\n\n      if (previousMarkerInstance) {\n        this.mapService.removePopupFromMarker(previousMarkerInstance);\n      }\n\n      const markerInstance = this.marker()?.markerInstance();\n      if (markerInstance && this.popupInstance) {\n        this.mapService.addPopupToMarker(markerInstance, this.popupInstance);\n      }\n    }\n    if (\n      changes.offset &&\n      !changes.offset.isFirstChange() &&\n      this.popupInstance\n    ) {\n      this.popupInstance.setOffset(changes.offset.currentValue);\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.removePopupFromMarker();\n  }\n\n  private createPopup() {\n    return this.mapService.createPopup(\n      {\n        popupOptions: {\n          closeButton: this.closeButton(),\n          closeOnClick: this.closeOnClick(),\n          closeOnMove: this.closeOnMove(),\n          focusAfterOpen: this.focusAfterOpen(),\n          anchor: this.anchor(),\n          offset: this.offset(),\n          className: this.className(),\n          maxWidth: this.maxWidth(),\n          subpixelPositioning: this.subpixelPositioning(),\n        },\n        popupEvents: {\n          popupOpen: this.popupOpen,\n          popupClose: this.popupClose,\n        },\n      },\n      this.content().nativeElement\n    );\n  }\n\n  private addPopup(popup: Popup) {\n    return this.mapService.mapCreated$.pipe(\n      tap(() => {\n        const lngLat = this.lngLat();\n        const feature = this.feature();\n        const markerInstance = this.marker()?.markerInstance();\n        if (lngLat || feature) {\n          this.mapService.addPopupToMap(popup, this.getLngLat(lngLat, feature));\n        } else if (markerInstance) {\n          this.mapService.addPopupToMarker(markerInstance, popup);\n        } else {\n          throw new Error(\n            'mgl-popup need either lngLat/marker/feature to be set'\n          );\n        }\n      })\n    );\n  }\n\n  removePopupFromMarker() {\n    if (this.popupInstance) {\n      const markerInstance = this.marker()?.markerInstance();\n      if (this.lngLat() || this.feature()) {\n        this.mapService.removePopupFromMap(this.popupInstance);\n      } else if (markerInstance) {\n        this.mapService.removePopupFromMarker(markerInstance);\n      } else {\n        this.mapService.removePopupFromMap(this.popupInstance);\n      }\n    }\n    this.popupInstance = null;\n  }\n\n  getLngLat(\n    lngLat: LngLatLike | undefined,\n    feature: GeoJSON.Feature<GeoJSON.Point> | undefined\n  ) {\n    if (lngLat) {\n      return lngLat;\n    } else if (feature) {\n      return feature.geometry.coordinates as [number, number];\n    }\n    throw new Error('lngLat or feature value is required');\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  OnChanges,\n  SimpleChanges,\n  inject,\n  input,\n} from '@angular/core';\nimport type { CanvasSource, CanvasSourceSpecification } from 'maplibre-gl';\nimport { SourceDirective } from './source.directive';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { tap } from 'rxjs';\n\n/**\n * `mgl-canvas-source` - a canvas source component\n * @see [canvas](https://maplibre.org/maplibre-style-spec/sources/#canvas)\n *\n * @category Source Components\n */\n@Component({\n  selector: 'mgl-canvas-source',\n  template: '',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  hostDirectives: [{ directive: SourceDirective, inputs: ['id'] }],\n})\nexport class CanvasSourceComponent implements OnChanges {\n  /** Init injections */\n  private readonly sourceDirective = inject(SourceDirective);\n\n  /** Dynamic input */\n  readonly coordinates =\n    input.required<CanvasSourceSpecification['coordinates']>();\n\n  /** Dynamic input */\n  readonly canvas = input.required<CanvasSourceSpecification['canvas']>();\n\n  /** Dynamic input */\n  readonly animate = input<CanvasSourceSpecification['animate']>();\n\n  constructor() {\n    this.sourceDirective.loadSource$\n      .pipe(\n        tap(() =>\n          this.sourceDirective.addSource(this.getCanvasSourceSpecification() as any)\n        ),\n        takeUntilDestroyed()\n      )\n      .subscribe();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (!this.sourceDirective.sourceId()) {\n      return;\n    }\n    if (\n      (changes.canvas && !changes.canvas.isFirstChange()) ||\n      (changes.animate && !changes.animate.isFirstChange())\n    ) {\n      this.sourceDirective.refresh();\n    } else if (changes.coordinates && !changes.coordinates.isFirstChange()) {\n      const source = this.sourceDirective.getSource<CanvasSource>();\n      if (source === undefined) {\n        return;\n      }\n      source.setCoordinates(changes.coordinates.currentValue);\n    }\n  }\n\n  getCanvasSourceSpecification(): CanvasSourceSpecification {\n    return {\n      type: 'canvas',\n      coordinates: this.coordinates(),\n      canvas: this.canvas(),\n      animate: this.animate(),\n    };\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  DestroyRef,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  SimpleChanges,\n  inject,\n  input,\n  signal,\n} from '@angular/core';\nimport type { ImageSourceSpecification, ImageSource } from 'maplibre-gl';\nimport { MapService } from '../map/map.service';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n/**\n * `mgl-image-source` - an image source component\n * @see [image](https://maplibre.org/maplibre-style-spec/sources/#image)\n *\n * @category Source Components\n */\n@Component({\n  selector: 'mgl-image-source',\n  template: '',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ImageSourceComponent implements OnInit, OnDestroy, OnChanges {\n  /** Init injection */\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly mapService = inject(MapService);\n\n  /** Init inputs */\n  readonly id = input.required<string>();\n\n  /** Dynamic inputs */\n  readonly url = input.required<ImageSourceSpecification['url']>();\n  readonly coordinates =\n    input.required<ImageSourceSpecification['coordinates']>();\n\n  readonly type: ImageSourceSpecification['type'] = 'image';\n\n  private readonly sourceId = signal<string | null>(null);\n\n  ngOnInit() {\n    this.mapService.mapLoaded$\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(() => this.addSource());\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    const sourceId = this.sourceId();\n    if (sourceId === null) {\n      return;\n    }\n    const source = this.mapService.getSource<ImageSource>(sourceId);\n    if (source === undefined) {\n      return;\n    }\n    source.updateImage({\n      url: changes.url === undefined ? (undefined as any) : this.url(),\n      coordinates:\n        changes.coordinates === undefined ? undefined : this.coordinates(),\n    });\n  }\n\n  ngOnDestroy(): void {\n    const sourceId = this.sourceId();\n    if (sourceId !== null) {\n      this.mapService.removeSource(sourceId);\n      this.sourceId.set(null);\n    }\n  }\n\n  private addSource() {\n    const imageSource: ImageSourceSpecification = {\n      type: 'image',\n      url: this.url(),\n      coordinates: this.coordinates(),\n    };\n    this.mapService.addSource(this.id(), imageSource);\n    this.sourceId.set(this.id());\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  OnChanges,\n  SimpleChanges,\n  inject,\n  input,\n} from '@angular/core';\nimport type { RasterDEMSourceSpecification } from 'maplibre-gl';\nimport { tap } from 'rxjs/operators';\nimport { SourceDirective } from './source.directive';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n/**\n * `mgl-raster-dem-source` - a raster DEM source\n * @see [raster DEM](https://maplibre.org/maplibre-style-spec/sources/#raster-dem)\n *\n * @category Source Components\n */\n@Component({\n  selector: 'mgl-raster-dem-source',\n  template: '',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  hostDirectives: [{ directive: SourceDirective, inputs: ['id'] }],\n})\nexport class RasterDemSourceComponent implements OnChanges {\n  /** Init injections */\n  private readonly sourceDirective = inject(SourceDirective);\n\n  /** Dynamic input */\n  readonly url = input<RasterDEMSourceSpecification['url']>();\n\n  /** Dynamic input */\n  readonly tiles = input<RasterDEMSourceSpecification['tiles']>();\n\n  /** Dynamic input */\n  readonly bounds = input<RasterDEMSourceSpecification['bounds']>();\n\n  /** Dynamic input */\n  readonly minzoom = input<RasterDEMSourceSpecification['minzoom']>();\n\n  /** Dynamic input */\n  readonly maxzoom = input<RasterDEMSourceSpecification['maxzoom']>();\n\n  /** Dynamic input */\n  readonly tileSize = input<RasterDEMSourceSpecification['tileSize']>();\n\n  /** Dynamic input */\n  readonly attribution = input<RasterDEMSourceSpecification['attribution']>();\n\n  /** Dynamic input */\n  readonly encoding = input<RasterDEMSourceSpecification['encoding']>();\n\n  constructor() {\n    this.sourceDirective.loadSource$\n      .pipe(\n        tap(() =>\n          this.sourceDirective.addSource(this.getRasterDEMSourceSpecification())\n        ),\n        takeUntilDestroyed()\n      )\n      .subscribe();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (!this.sourceDirective.sourceId()) {\n      return;\n    }\n    if (\n      (changes.url && !changes.url.isFirstChange()) ||\n      (changes.tiles && !changes.tiles.isFirstChange()) ||\n      (changes.bounds && !changes.bounds.isFirstChange()) ||\n      (changes.minzoom && !changes.minzoom.isFirstChange()) ||\n      (changes.maxzoom && !changes.maxzoom.isFirstChange()) ||\n      (changes.tileSize && !changes.tileSize.isFirstChange()) ||\n      (changes.attribution && !changes.attribution.isFirstChange()) ||\n      (changes.encoding && !changes.encoding.isFirstChange())\n    ) {\n      this.sourceDirective.refresh();\n    }\n  }\n\n  getRasterDEMSourceSpecification(): RasterDEMSourceSpecification {\n    return {\n      type: 'raster-dem',\n      url: this.url(),\n      tiles: this.tiles(),\n      bounds: this.bounds(),\n      minzoom: this.minzoom(),\n      maxzoom: this.maxzoom(),\n      tileSize: this.tileSize(),\n      attribution: this.attribution(),\n      encoding: this.encoding(),\n    };\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  OnChanges,\n  SimpleChanges,\n  inject,\n  input,\n} from '@angular/core';\nimport type { RasterSourceSpecification } from 'maplibre-gl';\nimport { SourceDirective } from './source.directive';\nimport { tap } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n/**\n * `mgl-raster-source` - a raster source component\n * @see [raster](https://maplibre.org/maplibre-style-spec/sources/#raster)\n *\n * @category Source Components\n */\n@Component({\n  selector: 'mgl-raster-source',\n  template: '',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  hostDirectives: [{ directive: SourceDirective, inputs: ['id'] }],\n})\nexport class RasterSourceComponent implements OnChanges {\n  /** Init injections */\n  private readonly sourceDirective = inject(SourceDirective);\n\n  /** Dynamic input */\n  readonly url = input<RasterSourceSpecification['url']>();\n\n  /** Dynamic input */\n  readonly tiles = input<RasterSourceSpecification['tiles']>();\n\n  /** Dynamic input */\n  readonly bounds = input<RasterSourceSpecification['bounds']>();\n\n  /** Dynamic input */\n  readonly scheme = input<RasterSourceSpecification['scheme']>();\n\n  /** Dynamic input */\n  readonly minzoom = input<RasterSourceSpecification['minzoom']>();\n\n  /** Dynamic input */\n  readonly maxzoom = input<RasterSourceSpecification['maxzoom']>();\n\n  /** Dynamic input */\n  readonly tileSize = input<RasterSourceSpecification['tileSize']>();\n\n  /** Dynamic input */\n  readonly attribution = input<RasterSourceSpecification['attribution']>();\n\n  constructor() {\n    this.sourceDirective.loadSource$\n      .pipe(\n        tap(() =>\n          this.sourceDirective.addSource(this.getRasterSourceSpecification())\n        ),\n        takeUntilDestroyed()\n      )\n      .subscribe();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (!this.sourceDirective.sourceId()) {\n      return;\n    }\n    if (\n      (changes.url && !changes.url.isFirstChange()) ||\n      (changes.tiles && !changes.tiles.isFirstChange()) ||\n      (changes.bounds && !changes.bounds.isFirstChange()) ||\n      (changes.minzoom && !changes.minzoom.isFirstChange()) ||\n      (changes.maxzoom && !changes.maxzoom.isFirstChange()) ||\n      (changes.tileSize && !changes.tileSize.isFirstChange()) ||\n      (changes.scheme && !changes.scheme.isFirstChange()) ||\n      (changes.attribution && !changes.attribution.isFirstChange())\n    ) {\n      this.sourceDirective.refresh();\n    }\n  }\n\n  getRasterSourceSpecification(): RasterSourceSpecification {\n    return {\n      type: 'raster',\n      url: this.url(),\n      tiles: this.tiles(),\n      bounds: this.bounds(),\n      minzoom: this.minzoom(),\n      maxzoom: this.maxzoom(),\n      tileSize: this.tileSize(),\n      scheme: this.scheme(),\n      attribution: this.attribution(),\n    };\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  OnChanges,\n  SimpleChanges,\n  inject,\n  input,\n} from '@angular/core';\nimport type { VectorSourceSpecification, VectorTileSource } from 'maplibre-gl';\nimport { SourceDirective } from './source.directive';\nimport { tap } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n/**\n * `mgl-vector-source` - a vector source component\n * @see [vector](https://maplibre.org/maplibre-style-spec/sources/#vector)\n *\n * @category Source Components\n */\n@Component({\n  selector: 'mgl-vector-source',\n  template: '',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  hostDirectives: [{ directive: SourceDirective, inputs: ['id'] }],\n})\nexport class VectorSourceComponent implements OnChanges {\n  /** Init injections */\n  private readonly sourceDirective = inject(SourceDirective);\n\n  /** Dynamic inputs */\n  readonly url = input<VectorSourceSpecification['url']>();\n  readonly tiles = input<VectorSourceSpecification['tiles']>();\n  readonly bounds = input<VectorSourceSpecification['bounds']>();\n  readonly scheme = input<VectorSourceSpecification['scheme']>();\n  readonly minzoom = input<VectorSourceSpecification['minzoom']>();\n  readonly maxzoom = input<VectorSourceSpecification['maxzoom']>();\n  readonly attribution = input<VectorSourceSpecification['attribution']>();\n  readonly promoteId = input<VectorSourceSpecification['promoteId']>();\n\n  constructor() {\n    this.sourceDirective.loadSource$\n      .pipe(\n        tap(() =>\n          this.sourceDirective.addSource(this.getVectorSourceSpecification())\n        ),\n        takeUntilDestroyed()\n      )\n      .subscribe();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (!this.sourceDirective.sourceId()) {\n      return;\n    }\n\n    if (\n      (changes.bounds && !changes.bounds.isFirstChange()) ||\n      (changes.scheme && !changes.scheme.isFirstChange()) ||\n      (changes.minzoom && !changes.minzoom.isFirstChange()) ||\n      (changes.maxzoom && !changes.maxzoom.isFirstChange()) ||\n      (changes.attribution && !changes.attribution.isFirstChange()) ||\n      (changes.promoteId && !changes.promoteId.isFirstChange())\n    ) {\n      this.sourceDirective.refresh();\n    } else if (\n      (changes.url && !changes.url.isFirstChange()) ||\n      (changes.tiles && !changes.tiles.isFirstChange())\n    ) {\n      const source = this.sourceDirective.getSource<VectorTileSource>();\n      if (source === undefined) {\n        return;\n      }\n      const url = this.url();\n      if (changes.url && url) {\n        source.setUrl(url);\n      }\n\n      const tiles = this.tiles();\n      if (changes.tiles && tiles) {\n        source.setTiles(tiles);\n      }\n    }\n  }\n\n  getVectorSourceSpecification(): VectorSourceSpecification {\n    return {\n      type: 'vector',\n      url: this.url(),\n      tiles: this.tiles(),\n      bounds: this.bounds(),\n      scheme: this.scheme(),\n      minzoom: this.minzoom(),\n      maxzoom: this.maxzoom(),\n      attribution: this.attribution(),\n      promoteId: this.promoteId(),\n    };\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  OnChanges,\n  SimpleChanges,\n  inject,\n  input,\n} from '@angular/core';\nimport type { VideoSource, VideoSourceSpecification } from 'maplibre-gl';\nimport { SourceDirective } from './source.directive';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { tap } from 'rxjs';\n\n/**\n * `mgl-video-source` - a video source\n * @see [video](https://maplibre.org/maplibre-style-spec/sources/#video)\n *\n * @category Source Components\n */\n@Component({\n  selector: 'mgl-video-source',\n  template: '',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  hostDirectives: [{ directive: SourceDirective, inputs: ['id'] }],\n})\nexport class VideoSourceComponent\n  implements OnChanges\n{\n  private readonly sourceDirective = inject(SourceDirective);\n\n  /** Dynamic input */\n  readonly urls = input.required<VideoSourceSpecification['urls']>();\n\n  /** Dynamic input */\n  readonly coordinates =\n    input.required<VideoSourceSpecification['coordinates']>();\n\n  constructor() {\n\n    this.sourceDirective.loadSource$.pipe(\n      tap(() => this.addSource()),\n      takeUntilDestroyed()\n    ).subscribe();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (!this.sourceDirective.sourceId()) {\n      return;\n    }\n\n    if (changes.urls && !changes.urls.isFirstChange()) {\n      this.sourceDirective.refresh();\n    } else if (changes.coordinates && !changes.coordinates.isFirstChange()) {\n      const source = this.sourceDirective.getSource<VideoSource>();\n      if (source === undefined) {\n        return;\n      }\n      source.setCoordinates(changes.coordinates.currentValue);\n    }\n  }\n\n  addSource() {\n    const source: VideoSourceSpecification = {\n      type: 'video',\n      urls: this.urls(),\n      coordinates: this.coordinates(),\n    };\n    this.sourceDirective.addSource(source);\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { AttributionControlDirective } from './control/attribution-control.directive';\nimport { ControlComponent } from './control/control.component';\nimport { FullscreenControlDirective } from './control/fullscreen-control.directive';\nimport { GeolocateControlDirective } from './control/geolocate-control.directive';\nimport { NavigationControlDirective } from './control/navigation-control.directive';\nimport { ScaleControlDirective } from './control/scale-control.directive';\nimport { TerrainControlDirective } from './control/terrain-control.directive';\nimport { DraggableDirective } from './draggable/draggable.directive';\nimport { ImageComponent } from './image/image.component';\nimport { LayerComponent } from './layer/layer.component';\nimport { MapComponent } from './map/map.component';\nimport { MarkerComponent } from './marker/marker.component';\nimport {\n  ClusterPointDirective,\n  PointDirective,\n  MarkersForClustersComponent,\n} from './markers-for-clusters/markers-for-clusters.component';\nimport { PopupComponent } from './popup/popup.component';\nimport { CanvasSourceComponent } from './source/canvas-source.component';\nimport { FeatureComponent } from './source/geojson/feature.component';\nimport { GeoJSONSourceComponent } from './source/geojson/geojson-source.component';\nimport { ImageSourceComponent } from './source/image-source.component';\nimport { RasterDemSourceComponent } from './source/raster-dem-source.component';\nimport { RasterSourceComponent } from './source/raster-source.component';\nimport { VectorSourceComponent } from './source/vector-source.component';\nimport { VideoSourceComponent } from './source/video-source.component';\nimport { SourceDirective } from './source/source.directive';\n\nconst componentsAndDirectives = [\n  MapComponent,\n  LayerComponent,\n  DraggableDirective,\n  ImageComponent,\n  VectorSourceComponent,\n  GeoJSONSourceComponent,\n  RasterDemSourceComponent,\n  RasterSourceComponent,\n  ImageSourceComponent,\n  VideoSourceComponent,\n  CanvasSourceComponent,\n  FeatureComponent,\n  MarkerComponent,\n  PopupComponent,\n  ControlComponent,\n  FullscreenControlDirective,\n  NavigationControlDirective,\n  GeolocateControlDirective,\n  AttributionControlDirective,\n  ScaleControlDirective,\n  PointDirective,\n  ClusterPointDirective,\n  MarkersForClustersComponent,\n  TerrainControlDirective,\n  SourceDirective\n];\n\n@NgModule({\n  imports: [...componentsAndDirectives],\n  exports: [...componentsAndDirectives],\n})\nexport class NgxMapLibreGLModule {}\n","import { Directive, afterNextRender, inject } from '@angular/core';\nimport { GlobeControl } from 'maplibre-gl';\nimport { MapService } from '../map/map.service';\nimport { ControlComponent } from './control.component';\n\n/**\n * `mglGlobe` - a globe control directive\n *\n * @category Directives\n *\n * @see [Globe](https://maplibre.org/ngx-maplibre-gl/demo/globe)\n * @see [GlobeControl](https://maplibre.org/maplibre-gl-js/docs/API/classes/GlobeControl)\n */\n@Directive({\n  selector: '[mglGlobe]',\n})\nexport class GlobeControlDirective {\n\n  private readonly mapService = inject(MapService);\n  private readonly controlComponent = inject<ControlComponent<GlobeControl>>(\n    ControlComponent,\n    { host: true }\n  );\n\n  constructor() {\n    afterNextRender(() => {\n      this.mapService.mapCreated$.subscribe(() => {\n        if (this.controlComponent.control) {\n          throw new Error('Another control is already set for this control');\n        }\n\n        this.controlComponent.control = new GlobeControl();\n\n        this.mapService.addControl(\n          this.controlComponent.control,\n          this.controlComponent.position()\n        );\n      });\n    });\n  }\n}\n","/*\n * Public API Surface of ngx-maplibre-gl\n */\n\nexport * from './lib/ngx-maplibre-gl.module';\n\n// Expose components to allow custom directives\nexport * from './lib/control/control.component';\nexport * from './lib/draggable/draggable.directive';\nexport * from './lib/layer/layer.component';\nexport * from './lib/image/image.component';\nexport * from './lib/source/source.directive';\nexport * from './lib/source/vector-source.component';\nexport * from './lib/source/video-source.component';\nexport * from './lib/source/canvas-source.component';\nexport * from './lib/source/image-source.component';\nexport * from './lib/source/raster-dem-source.component';\nexport * from './lib/source/raster-source.component';\nexport * from './lib/source/geojson/feature.component';\nexport * from './lib/marker/marker.component';\nexport * from './lib/popup/popup.component';\nexport * from './lib/control/fullscreen-control.directive';\nexport * from './lib/control/geolocate-control.directive';\nexport * from './lib/control/navigation-control.directive';\nexport * from './lib/control/attribution-control.directive';\nexport * from './lib/control/scale-control.directive';\nexport * from './lib/markers-for-clusters/markers-for-clusters.component';\nexport * from './lib/control/terrain-control.directive';\nexport * from './lib/control/globe-control.directive';\n\n// Expose MapService for ngx-maplibre-gl extensions\nexport * from './lib/map/map.service';\nexport * from './lib/map/map.component';\n\n// Expose GeoJSONSourceComponent to access cluster functions\nexport * from './lib/source/geojson/geojson-source.component';\n\nexport * from './lib/map/map.types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["MaplibreMap","tap"],"mappings":";;;;;;;;AAAO,MAAM,yBAAyB,GAAG,CAAmB,MAAS,KAAiB;AACpF,IAAA,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAI;QAC9C,MAAM,IAAI,GAAG,IAAe;AAC5B,QAAA,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE;AAC9B,YAAA,OAAO,GAAG;;AAEZ,QAAA,OAAO,EAAE,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE;KACxC,EAAE,EAAiB,CAAC;AACvB,CAAC;;AC0FD;;AAEG;MAEU,UAAU,CAAA;AADvB,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;AAIrB,QAAA,IAAA,CAAA,wBAAwB,GAAG,IAAI,GAAG,EAA2B;AAE7D,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAQ;AACrC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAQ;AACpC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAW,EAAE,CAAC;AACtC,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAU,EAAE,CAAC;AACpC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAW,EAAE,CAAC;AAE/C,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE;AAC5C,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;AAyvBpD;AAvvBC,IAAA,KAAK,CAAC,OAAiB,EAAA;;AAErB,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAwB,CAAC;AAChD,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC;AAClC,QAAA,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS;AAClC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;AAC/B,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;AAE1B,QAAA,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE;YAC/D,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAK;AAC/B,gBAAA,IAAI,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE;oBACjC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,UAAW,CAAC;;AAEpD,gBAAA,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE;oBAC9B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,OAAQ,CAAC;;AAEhD,aAAC,CAAC;;;IAIN,UAAU,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;;;AAI7B,IAAA,aAAa,CAAC,OAAe,EAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;AACtC,YAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC;AACtC,SAAC,CAAC;;AAGJ,IAAA,aAAa,CAAC,OAAe,EAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;AACtC,YAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC;AACtC,SAAC,CAAC;;AAGJ,IAAA,cAAc,CAAC,QAAgB,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;AACtC,YAAA,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC;AACxC,SAAC,CAAC;;AAGJ,IAAA,cAAc,CAAC,QAAgB,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;AACtC,YAAA,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC;AACxC,SAAC,CAAC;;AAGJ,IAAA,uBAAuB,CAAC,MAAe,EAAA;AACrC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;AACtC,YAAA,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,MAAM,CAAC;AAC/C,SAAC,CAAC;;AAGJ,IAAA,gBAAgB,CAAC,MAAe,EAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;YACtC;kBACI,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM;kBAClC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,EAAE;AAC3C,SAAC,CAAC;;AAGJ,IAAA,gBAAgB,CAAC,MAAe,EAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;YACtC;kBACI,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM;kBAClC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,EAAE;AAC3C,SAAC,CAAC;;AAGJ,IAAA,gBAAgB,CAAC,MAAe,EAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;YACtC;kBACI,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM;kBAClC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,EAAE;AAC3C,SAAC,CAAC;;AAGJ,IAAA,qBAAqB,CAAC,MAAe,EAAA;AACnC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;YACtC;kBACI,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,MAAM;kBACvC,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,OAAO,EAAE;AAChD,SAAC,CAAC;;AAGJ,IAAA,qBAAqB,CAAC,MAAe,EAAA;AACnC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;YACtC;kBACI,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,MAAM;kBACvC,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,OAAO,EAAE;AAChD,SAAC,CAAC;;AAGJ,IAAA,cAAc,CAAC,MAAe,EAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;YACtC;kBACI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM;kBAChC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,EAAE;AACzC,SAAC,CAAC;;AAGJ,IAAA,aAAa,CAAC,MAAe,EAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;YACtC;kBACI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM;kBAC/B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE;AACxC,SAAC,CAAC;;AAGJ,IAAA,aAAa,CAAC,MAAe,EAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;YACtC;kBACI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM;kBAC/B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE;AACxC,SAAC,CAAC;;AAGJ,IAAA,WAAW,CAAC,KAAyB,EAAA;AACnC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;AACtC,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC;AAClC,SAAC,CAAC;;AAGJ,IAAA,eAAe,CAAC,SAA2B,EAAA;AACzC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;AACtC,YAAA,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC;AAC1C,SAAC,CAAC;;AAGJ,IAAA,aAAa,CAAC,OAAgC,EAAA;AAC5C,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;AACtC,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC;AACzC,SAAC,CAAC;;AAGJ,IAAA,UAAU,CAAC,OAA6B,EAAA;AACtC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;AACtC,YAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC;AACtC,SAAC,CAAC;;IAGJ,UAAU,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;AACtC,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;AACtC,SAAC,CAAC;;AAGJ,IAAA,kBAAkB,CAAC,SAAiB,EAAA;AAClC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;AACtC,YAAA,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,SAAS,CAAC;AAChD,SAAC,CAAC;;AAGJ,IAAA,kBAAkB,CAAC,MAAc,EAAA;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE;AACpD,QAAA,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;;IAG9B,qBAAqB,CACnB,UAGgC,EAChC,UAAyC,EAAA;QAEzC,OAAO,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,UAAU,EAAE,UAAU,CAAC;;IAGvE,KAAK,CAAC,MAAkB,EAAE,OAA0B,EAAA;AAClD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;YACtC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC;AACzC,SAAC,CAAC;;AAGJ,IAAA,IAAI,CACF,YAA2C,EAC3C,aAA6B,EAC7B,IAAa,EACb,MAAmB,EACnB,OAAgB,EAChB,KAAc,EACd,IAAa,EAAA;AAEb,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;AACrC,YAAA,IAAI,CAAC,WAAW,CAAC,YAAY,CAAS,CAAC;AACtC,gBAAA,GAAG,aAAa;AAChB,gBAAA,IAAI,EAAE,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;AACtD,gBAAA,MAAM,EAAE,MAAM,IAAI,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE;AAC9D,gBAAA,OAAO,EAAE,OAAO,IAAI,IAAI,GAAG,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;AAClE,gBAAA,KAAK,EAAE,KAAK,IAAI,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;AAC1D,gBAAA,IAAI,EAAE,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;AACvD,aAAA,CAAC;AACJ,SAAC,CAAC;;AAGJ,IAAA,QAAQ,CAAC,KAAiB,EAAE,UAAmB,EAAE,MAAe,EAAA;AAC9D,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;AAC/B,YAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,GAAW,KAAI;gBACtD,MAAM,IAAI,GAA6B,GAAG;gBAC1C,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE;AAC1C,oBAAA,OAAO,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC;;AAEnC,aAAC,CAAC;YACF,IAAI,CAAC,WAAW,CAAC,QAAQ,CACvB,KAAK,CAAC,YAAkC,EACxC,MAAM,CACP;YACD,IAAI,CAAC,UAAU,EAAE;gBACf;;YAEF,MAAM,aAAa,GAAmB,EAAE;YACxC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YACjH,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;YACvH,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;YACzH,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;YACrH,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;YAC3H,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;YAC3H,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;YACzH,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;YACzH,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;YACvH,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,EAAE,aAAa,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;YAC7H,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;YAC3H,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;YACvH,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,EAAE,aAAa,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;AAC7H,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;YACtE,IAAI,aAAa,EAAE;gBACjB,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,aAAa,EAAE,aAAa,CAAC;;AAEnE,SAAC,CAAC;;AAGJ,IAAA,WAAW,CAAC,OAAe,EAAA;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;YAC/B,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC;AACxD,YAAA,IAAI,aAAa,IAAI,IAAI,EAAE;AACzB,gBAAA,MAAM,aAAa,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE;AAC5E,gBAAA,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE;oBACxC,YAAY,CAAC,WAAW,EAAE;;AAE5B,gBAAA,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,aAAa,CAAC;AACnD,gBAAA,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC;;AAEzC,SAAC,CAAC;;AAGJ,IAAA,SAAS,CAAC,MAAmB,EAAA;AAC3B,QAAA,MAAM,OAAO,GAAkB;AAC7B,YAAA,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,MAAM;AACpC,YAAA,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,MAAM;AACpC,YAAA,KAAK,EAAE,MAAM,CAAC,cAAc,CAAC,KAAK;AAClC,YAAA,KAAK,EAAE,MAAM,CAAC,cAAc,CAAC,KAAK;AAClC,YAAA,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS;AAC5C,YAAA,iBAAiB,EAAE,MAAM,CAAC,cAAc,CAAC,iBAAiB;AAC1D,YAAA,QAAQ,EAAE,MAAM,CAAC,cAAc,CAAC,QAAQ;AACxC,YAAA,cAAc,EAAE,MAAM,CAAC,cAAc,CAAC,cAAc;AACpD,YAAA,cAAc,EAAE,MAAM,CAAC,cAAc,CAAC,cAAc;YACpD,OAAO,EACL,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG;AAChD,kBAAE,MAAM,CAAC,cAAc,CAAC;AACxB,kBAAE,SAAS;AACf,YAAA,OAAO,EAAE,MAAM,CAAC,cAAc,CAAC,OAAO;AACtC,YAAA,kBAAkB,EAAE,MAAM,CAAC,cAAc,CAAC,kBAAkB;AAC5D,YAAA,mBAAmB,EAAE,MAAM,CAAC,cAAc,CAAC,mBAAmB;SAC/D;AAED,QAAA,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC;QAC1C,cAAc,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,KAAyB,KAAI;YAC3D,IAAI,KAAK,EAAE;AACT,gBAAA,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK;AACxB,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;oBACjB,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;AACnD,iBAAC,CAAC;;AAEN,SAAC,CAAC;QAEF,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAyB,KAAI;YACtD,IAAI,KAAK,EAAE;AACT,gBAAA,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK;AACxB,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;AAErE,SAAC,CAAC;QACF,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,KAAyB,KAAI;YACzD,IAAI,KAAK,EAAE;AACT,gBAAA,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK;AACxB,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;AAExE,SAAC,CAAC;AACF,QAAA,MAAM,MAAM,GAAe,MAAM,CAAC,cAAc,CAAC;cAC3B,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,QAAS,CAAC;AAC5D,cAAE,MAAM,CAAC,cAAc,CAAC,MAAO;AACjC,QAAA,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC;AAChC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;AACtC,YAAA,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;AACtC,YAAA,OAAO,cAAc;AACvB,SAAC,CAAC;;AAGJ,IAAA,YAAY,CAAC,MAAc,EAAA;AACzB,QAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC;;IAGhE,WAAW,CAAC,KAAiB,EAAE,OAAa,EAAA;AAC1C,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;YACtC,MAAM,YAAY,GAAG,yBAAyB,CAAC,KAAK,CAAC,YAAY,CAAC;AAClE,YAAA,MAAM,aAAa,GAAG,IAAI,KAAK,CAAC,YAAY,CAAC;AAC7C,YAAA,aAAa,CAAC,aAAa,CAAC,OAAO,CAAC;YACpC,MAAM,aAAa,GAAmB,EAAE;AACxC,YAAA,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AACvG,YAAA,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,aAAa,EAAE,OAAO,EAAE,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YACzG,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,aAAa,EAAE,aAAa,CAAC;AAC/D,YAAA,OAAO,aAAa;AACtB,SAAC,CAAC;;IAGJ,aAAa,CAAC,KAAY,EAAE,MAAkB,EAAA;AAC5C,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;AACtC,YAAA,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC;AACvB,YAAA,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;AAC/B,SAAC,CAAC;;IAGJ,gBAAgB,CAAC,MAAc,EAAE,KAAY,EAAA;AAC3C,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;AACtC,YAAA,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;AACxB,SAAC,CAAC;;AAGJ,IAAA,kBAAkB,CAAC,KAAY,EAAA;QAC7B,IAAI,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAC5C,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE;AACpE,YAAA,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE;gBACxC,YAAY,CAAC,WAAW,EAAE;;AAE5B,YAAA,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,KAAK,CAAC;;AAE7C,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,CAAC;;AAG5D,IAAA,qBAAqB,CAAC,MAAc,EAAA;AAClC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;AACtC,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE;YAC/B,IAAI,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAC5C,gBAAA,MAAM,aAAa,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE;AACpE,gBAAA,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE;oBACxC,YAAY,CAAC,WAAW,EAAE;;AAE5B,gBAAA,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,KAAK,CAAC;;AAE7C,YAAA,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;AAC5B,SAAC,CAAC;;IAGJ,UAAU,CAAC,OAAiB,EAAE,QAA0B,EAAA;AACtD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;YACtC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC;AAChD,SAAC,CAAC;;AAGJ,IAAA,aAAa,CAAC,OAAiB,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;AACtC,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC;AACzC,SAAC,CAAC;;AAGJ,IAAA,MAAM,eAAe,CACnB,OAAe,EACf,GAAW,EACX,OAAyB,EAAA;QAEzB,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,YAAW;YAC5C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC;YACnD,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC;AAC7C,SAAC,CAAC;;AAGJ,IAAA,QAAQ,CAAC,OAAe,EAAE,IAAkB,EAAE,OAAyB,EAAA;AACrE,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;YACtC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAW,EAAE,OAAO,CAAC;AAC1D,SAAC,CAAC;;AAGJ,IAAA,WAAW,CAAC,OAAe,EAAA;AACzB,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,SAAS,KAAK,CAAC,GAAG,SAAS,EAAE,OAAO,CAAC,CAAC;;IAGtE,SAAS,CAAC,QAAgB,EAAE,MAA2B,EAAA;AACrD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;YACtC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CACzB,CAAC,GAAG,KACD,MAAc,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,OAAQ,MAAc,CAAC,GAAG,CAAC,CACpE;YACD,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;AAC9C,SAAC,CAAC;;AAGJ,IAAA,SAAS,CAAmB,QAAgB,EAAA;QAC1C,OAAU,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC;;AAGhD,IAAA,YAAY,CAAC,QAAgB,EAAA;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;YAC/B,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,KAChD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAC3B;AACD,YAAA,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC;AACzC,SAAC,CAAC;;IAGJ,wBAAwB,CACtB,OAAe,EACf,KAOqC,EAAA;AAErC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;YACtC,MAAM,CAAC,IAAI,CAAC,KAAY,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;;AAExC,gBAAA,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAG,KAAa,CAAC,GAAG,CAAC,CAAC;AACtE,aAAC,CAAC;AACJ,SAAC,CAAC;;IAGJ,yBAAyB,CACvB,OAAe,EACf,MAOsC,EAAA;AAEtC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;YACtC,MAAM,CAAC,IAAI,CAAC,MAAa,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;;AAEzC,gBAAA,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,OAAO,EAAE,GAAG,EAAG,MAAc,CAAC,GAAG,CAAC,CAAC;AACxE,aAAC,CAAC;AACJ,SAAC,CAAC;;IAGJ,cAAc,CACZ,OAAe,EACf,MAA8C,EAAA;AAE9C,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;YACtC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;AAC7C,SAAC,CAAC;;IAGJ,cAAc,CAAC,OAAe,EAAE,QAAgB,EAAA;AAC9C,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;YACtC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC;AAC/C,SAAC,CAAC;;AAGJ,IAAA,iBAAiB,CAAC,OAAe,EAAE,OAAgB,EAAE,OAAgB,EAAA;AACnE,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;YACtC,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAChC,OAAO,EACP,OAAO,GAAG,OAAO,GAAG,CAAC,EACrB,OAAO,GAAG,OAAO,GAAG,EAAE,CACvB;AACH,SAAC,CAAC;;IAGJ,SAAS,CAAC,MAAwB,EAAE,OAA0B,EAAA;AAC5D,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;YACtC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC;AAC7C,SAAC,CAAC;;AAGJ,IAAA,oBAAoB,CAClB,MAA8B,EAC9B,OAAe,EACf,OAA0C,EAAA;AAE1C,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;AACtC,YAAA,IAAI,CAAC,WAAW,CAAC,oBAAoB,CACnC,MAAM,CAAC,CAAC,CAAC,EACT,MAAM,CAAC,CAAC,CAAC,EACT,OAAO,EACP,OAAO,CACR;AACH,SAAC,CAAC;;IAGJ,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;YAC/B,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,YAAY,EAAE;AACrB,SAAC,CAAC;;AAGI,IAAA,SAAS,CAAC,OAAmB,EAAA;QACnC,MAAM,CAAC,sBAAsB,EAAE;AAE/B,QAAA,MAAM,UAAU,GAAG,yBAAyB,CAAa,OAAO,CAAC;QAEjE,IAAI,CAAC,WAAW,GAAG,IAAIA,KAAW,CAAC,UAAU,CAAC;AAE9C,QAAA,MAAM,UAAU,GACd,MAAM,IAAI,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC;QACvE,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAM,CAAC;;;IAIrC,aAAa,GAAA;QACnB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;YAC3C,MAAM,CAAC,MAAM,EAAE;;AAEjB,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;;IAGtB,YAAY,GAAA;QAClB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;YACzC,KAAK,CAAC,MAAM,EAAE;;AAEhB,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;;IAGrB,YAAY,GAAA;QAClB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;AAC7C,YAAA,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC;;AAEvC,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;;AAGvB,IAAA,oBAAoB,CAAC,QAAgB,EAAA;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,MAAM;AACjD,QAAA,IAAI,MAAM,IAAI,IAAI,EAAE;AAClB,YAAA,OAAO,EAAE;;QAGX,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KACrB,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,QAAQ,GAAG,KAAK,CAC9C;;AAGK,IAAA,UAAU,CAAC,MAAgB,EAAA;QACjC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,KAAI;AAClC,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;AAC9B,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;AACzB,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;gBACjB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AACjC,aAAC,CAAC;AACJ,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,KAChC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;AACjB,YAAA,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;SAC3B,CAAC,CACH;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,KAChC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;AACjB,YAAA,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;SAC3B,CAAC,CACH;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,GAAG,KACnC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;AACjB,YAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;SAC9B,CAAC,CACH;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,KACjC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;AACjB,YAAA,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;SAC5B,CAAC,CACH;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,GAAG,KACnC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;AACjB,YAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;SAC9B,CAAC,CACH;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,KAC/B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;AACjB,YAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;SAC1B,CAAC,CACH;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,GAAG,KAClC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;AACjB,YAAA,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;SAC7B,CAAC,CACH;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,GAAG,KACnC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;AACjB,YAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;SAC9B,CAAC,CACH;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,GAAG,KAClC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;AACjB,YAAA,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;SAC7B,CAAC,CACH;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,GAAG,KACrC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;AACjB,YAAA,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC;SAChC,CAAC,CACH;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,GAAG,KACpC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;AACjB,YAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;SAC/B,CAAC,CACH;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,GAAG,KAClC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;AACjB,YAAA,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;SAC7B,CAAC,CACH;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,GAAG,KACnC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;AACjB,YAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;SAC9B,CAAC,CACH;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,GAAG,KACrC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;AACjB,YAAA,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC;SAChC,CAAC,CACH;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,KAC/B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;AACjB,YAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;SAC1B,CAAC,CACH;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,GAAG,KACnC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAChD;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,KAC9B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAC3C;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,KACjC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAC9C;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,GAAG,KACnC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;AACjB,YAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;SAC9B,CAAC,CACH;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,KAC9B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;AACjB,YAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;SACzB,CAAC,CACH;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,KACjC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;AACjB,YAAA,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;SAC5B,CAAC,CACH;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,GAAG,KACnC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAChD;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,KAC9B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAC9C;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,KACjC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAC9C;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,GAAG,KACrC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAClD;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,KAChC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAC7C;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,GAAG,KACnC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAChD;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,GAAG,KACpC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CACjD;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,KAC/B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAC/C;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,GAAG,KAClC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAC/C;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,GAAG,KACtC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CACnD;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,GAAG,KACpC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CACjD;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,GAAG,KACvC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CACpD;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,kBAAkB,EAAE,CAAC,GAAG,KAC1C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CACvD;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,sBAAsB,EAAE,CAAC,GAAG,KAC9C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAC3D;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,KAChC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAC7C;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,KAC/B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;AACjB,YAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;SAC1B,CAAC,CACH;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,KAC9B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAC3C;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,GAAG,KACnC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAChD;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,GAAG,KACpC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CACjD;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,GAAG,KACrC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAClD;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,kBAAkB,EAAE,CAAC,GAAG,KAC1C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CACvD;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,GAAG,KAC3C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CACxD;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,GAAG,KAC3C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CACxD;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,KAC9B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAC3C;;AAGK,IAAA,0BAA0B,CAAC,OAAe,EAAE,KAA8B,EAAE,OAA8B,EAAA;AAChH,QAAA,MAAM,OAAO,GAAG,CAAC,GAAQ,KAAI;AAC3B,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;AACjB,gBAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AACnB,aAAC,CAAC;AACJ,SAAC;QACD,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC;QAC5C,OAAO;YACL,WAAW,EAAE,MAAK;gBAChB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC;aAC9C;SACF;;AAGK,IAAA,0BAA0B,CAAC,KAAY,EAAE,KAAuB,EAAE,OAA8B,EAAA;AACtG,QAAA,MAAM,OAAO,GAAG,CAAC,GAAQ,KAAI;AAC3B,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;AACjB,gBAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AACnB,aAAC,CAAC;AACJ,SAAC;AACD,QAAA,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC;QACxB,OAAO;YACL,WAAW,EAAE,MAAK;AAChB,gBAAA,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC;aAC1B;SACF;;8GArwBQ,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAV,UAAU,EAAA,CAAA,CAAA;;2FAAV,UAAU,EAAA,UAAA,EAAA,CAAA;kBADtB;;;MCxFY,aAAa,CAAA;AACxB,IAAA,WAAA,CAAoB,SAAsB,EAAA;QAAtB,IAAS,CAAA,SAAA,GAAT,SAAS;;;IAG7B,KAAK,GAAA;QACH,OAAO,IAAI,CAAC,SAAS;;;IAIvB,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,UAAW,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;;;IAI/D,kBAAkB,GAAA;AAChB,QAAA,OAAO,WAAW;;AAErB;AAED;;;;;;;;;;;;;;;;;;;;;;;AAuBG;MAUU,gBAAgB,CAAA;AAY3B,IAAA,WAAA,GAAA;;AAViB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;;QAGvC,IAAQ,CAAA,QAAA,GAAG,KAAK,EAAmB;;AAGnC,QAAA,IAAA,CAAA,OAAO,GAAG,SAAS,CAAC,QAAQ,CAA6B,SAAS,CAAC;QAK1E,eAAe,CAAC,MAAK;YACnB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,EAAE;AAClD,gBAAA,IAAI,CAAC,OAAO,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,aAAa,CAAC;gBAC9D,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,MAAK;AACzC,oBAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC3D,iBAAC,CAAC;;AAEN,SAAC,CAAC;;IAGJ,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YAC1D,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;;;8GAzBpC,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAPjB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAGU,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAT5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,QAAQ,EAAE;;;;AAIT,EAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;;ACvDD;;;;;;;AAOG;MAIU,2BAA2B,CAAA;AAYtC,IAAA,WAAA,GAAA;;AAViB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAC/B,IAAgB,CAAA,gBAAA,GAAG,MAAM,CAExC,gBAAgB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;;QAG1B,IAAO,CAAA,OAAA,GAAG,KAAK,EAAW;;QAE1B,IAAiB,CAAA,iBAAA,GAAG,KAAK,EAAqB;QAGrD,eAAe,CAAC,MAAK;YACnB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,MAAK;AACzC,gBAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE;AACjC,oBAAA,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC;;gBAGpE,MAAM,OAAO,GAAG,yBAAyB,CAA4B;AACnE,oBAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACvB,oBAAA,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE;AAC5C,iBAAA,CAAC;gBAEF,IAAI,CAAC,gBAAgB,CAAC,OAAO,GAAG,IAAI,kBAAkB,CAAC,OAAO,CAAC;AAC/D,gBAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CACxB,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAC7B,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CACjC;AACH,aAAC,CAAC;AACJ,SAAC,CAAC;;8GA9BO,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAHvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC7B,iBAAA;;;ACdD;;;;AAIG;MAQU,0BAA0B,CAAA;AAUrC,IAAA,WAAA,GAAA;;AARiB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAC/B,IAAgB,CAAA,gBAAA,GAAG,MAAM,CAExC,gBAAgB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;;QAG1B,IAAS,CAAA,SAAA,GAAG,KAAK,EAAe;QAGvC,eAAe,CAAC,MAAK;YACnB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,MAAK;AACzC,gBAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE;AACjC,oBAAA,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC;;AAEpE,gBAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,GAAG,IAAI,iBAAiB,CAAC;AACpD,oBAAA,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;AAC5B,iBAAA,CAAC;AACF,gBAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CACxB,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAC7B,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CACjC;AACH,aAAC,CAAC;AACJ,SAAC,CAAC;;IAGJ,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,EAAE;;8GA5B3B,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,+BAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAPtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,IAAI,EAAE;;AAEJ,wBAAA,iCAAiC,EAAE,gBAAgB;AACpD,qBAAA;AACF,iBAAA;;;ACCD;;;;;;;AAOG;MAIU,yBAAyB,CAAA;AAkBpC,IAAA,WAAA,GAAA;;AAhBiB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAC/B,IAAgB,CAAA,gBAAA,GAAG,MAAM,CAExC,gBAAgB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;;QAG1B,IAAe,CAAA,eAAA,GAAG,KAAK,EAAmB;;QAE1C,IAAgB,CAAA,gBAAA,GAAG,KAAK,EAAoB;;QAE5C,IAAiB,CAAA,iBAAA,GAAG,KAAK,EAAW;;QAEpC,IAAgB,CAAA,gBAAA,GAAG,KAAK,EAAW;QAEnC,IAAS,CAAA,SAAA,GAAG,MAAM,EAAY;QAGrC,eAAe,CAAC,MAAK;YACnB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,MAAK;AACzC,gBAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE;AACjC,oBAAA,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC;;gBAGpE,MAAM,OAAO,GAAG,yBAAyB,CAA0B;AACjE,oBAAA,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE;AACvC,oBAAA,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE;AACzC,oBAAA,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE;AAC3C,oBAAA,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE;AAC1C,iBAAA,CAAC;gBAEF,IAAI,CAAC,gBAAgB,CAAC,OAAO,GAAG,IAAI,gBAAgB,CAAC,OAAO,CAAC;AAC7D,gBAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,IAAc,KAAI;AAC/D,oBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3B,iBAAC,CAAC;AACF,gBAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CACxB,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAC7B,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CACjC;AACH,aAAC,CAAC;AACJ,SAAC,CAAC;;8GAzCO,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC3B,iBAAA;;;ACrBD;;;;;;;AAOG;MAIU,0BAA0B,CAAA;AAgBrC,IAAA,WAAA,GAAA;;AAdiB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAC/B,IAAgB,CAAA,gBAAA,GAAG,MAAM,CAExC,gBAAgB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;;QAG1B,IAAW,CAAA,WAAA,GAAG,KAAK,EAAW;;QAE9B,IAAQ,CAAA,QAAA,GAAG,KAAK,EAAW;;QAE3B,IAAc,CAAA,cAAA,GAAG,KAAK,EAAW;;QAEjC,IAAa,CAAA,aAAA,GAAG,KAAK,EAAW;QAGvC,eAAe,CAAC,MAAK;YACnB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,MAAK;AACzC,gBAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE;AACjC,oBAAA,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC;;gBAEpE,MAAM,OAAO,GAAG,yBAAyB,CAA2B;AAClE,oBAAA,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;AAC/B,oBAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AACzB,oBAAA,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE;AACrC,oBAAA,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE;AACpC,iBAAA,CAAC;gBACF,IAAI,CAAC,gBAAgB,CAAC,OAAO,GAAG,IAAI,iBAAiB,CAAC,OAAO,CAAC;AAC9D,gBAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CACxB,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAC7B,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CACjC;AACH,aAAC,CAAC;AACJ,SAAC,CAAC;;8GAlCO,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAHtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC5B,iBAAA;;;ACHD;;;;;;;AAOG;MAIU,qBAAqB,CAAA;AAchC,IAAA,WAAA,GAAA;;AAZiB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAC/B,IAAgB,CAAA,gBAAA,GAAG,MAAM,CACxC,gBAAgB,EAChB,EAAE,IAAI,EAAE,IAAI,EAAE,CACf;;QAGQ,IAAQ,CAAA,QAAA,GAAG,KAAK,EAAU;;QAG1B,IAAI,CAAA,IAAA,GAAG,KAAK,EAAQ;QAG3B,eAAe,CAAC,MAAK;YACnB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,MAAK;AACzC,gBAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE;AACjC,oBAAA,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC;;gBAEpE,MAAM,OAAO,GAAG,yBAAyB,CAAsB;AAC7D,oBAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AACzB,oBAAA,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;AAClB,iBAAA,CAAC;gBAEF,IAAI,CAAC,gBAAgB,CAAC,OAAO,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC;AACzD,gBAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CACxB,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAC7B,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CACjC;AACH,aAAC,CAAC;AACJ,SAAC,CAAC;;AAGJ,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;AAChD,YAAA,IAAI,CAAC,gBAAgB,CAAC,OAAwB,CAAC,OAAO,CACrD,OAAO,CAAC,IAAI,CAAC,YAAY,CAC1B;;;8GAtCM,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,YAAY;AACvB,iBAAA;;;AClBD;;;;;;;AAOG;MAIU,uBAAuB,CAAA;AAYlC,IAAA,WAAA,GAAA;;AAViB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAC/B,IAAgB,CAAA,gBAAA,GAAG,MAAM,CACxC,gBAAgB,EAChB,EAAE,IAAI,EAAE,IAAI,EAAE,CACf;;AAGQ,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAU;QACjC,IAAY,CAAA,YAAA,GAAG,KAAK,EAAU;QAGrC,eAAe,CAAC,MAAK;YACnB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,MAAK;AACzC,gBAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE;AACjC,oBAAA,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC;;AAGpE,gBAAA,MAAM,OAAO,GAAyB;AACpC,oBAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACrB,oBAAA,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC;iBACvC;gBAED,IAAI,CAAC,gBAAgB,CAAC,OAAO,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC;AAE3D,gBAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CACxB,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAC7B,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CACjC;AACH,aAAC,CAAC;AACJ,SAAC,CAAC;;8GA/BO,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,cAAc;AACzB,iBAAA;;;ACAD;;;AAGG;MAEU,eAAe,CAAA;AAD5B,IAAA,WAAA,GAAA;;AAGmB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;;AAGhC,QAAA,IAAA,CAAA,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAU;AAE7C;;;AAGG;AACM,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAgB,IAAI,CAAC;AAC9B,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,OAAO,EAAQ;AAC/C,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;AA0C7D;IAxCC,QAAQ,GAAA;QACN,IAAI,CAAC,UAAU,CAAC;AACb,aAAA,IAAI,CACH,GAAG,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,EACxC,SAAS,CAAC,MACR,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,IAAI,CACtD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAC/D,GAAG,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CACzC,CACF,EACD,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AAEpC,aAAA,SAAS,EAAE;;IAGhB,WAAW,GAAA;QACT,IAAI,CAAC,YAAY,EAAE;;IAGrB,OAAO,GAAA;QACL,IAAI,CAAC,YAAY,EAAE;AACnB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE;;IAG/B,YAAY,GAAA;AACV,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE;QACjC,IAAI,SAAS,EAAE;AACb,YAAA,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC;AACvC,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;;;AAI3B,IAAA,SAAS,CAAC,MAA2B,EAAA;AACnC,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC;QAC5C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;;IAG9B,SAAS,GAAA;QACP,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAI,IAAI,CAAC,EAAE,EAAE,CAAC;;8GAtDrC,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,SAAS;mBAAC,EAAE;;;ACHb;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BG;MAOU,sBAAsB,CAAA;AA2DjC,IAAA,WAAA,GAAA;;AAzDiB,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;;AAGzC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;;QAG/B,IAAI,CAAA,IAAA,GAAG,KAAK,CAAqC;AACxD,YAAA,IAAI,EAAE,mBAAmB;AACzB,YAAA,QAAQ,EAAE,EAAE;AACb,SAAA,CAAC;;QAGO,IAAO,CAAA,OAAA,GAAG,KAAK,EAAyC;;QAGxD,IAAW,CAAA,WAAA,GAAG,KAAK,EAA6C;;QAGhE,IAAM,CAAA,MAAA,GAAG,KAAK,EAAwC;;QAGtD,IAAS,CAAA,SAAA,GAAG,KAAK,EAA2C;;QAG5D,IAAO,CAAA,OAAA,GAAG,KAAK,EAAyC;;QAGxD,IAAa,CAAA,aAAA,GAAG,KAAK,EAA+C;;QAGpE,IAAc,CAAA,cAAA,GACrB,KAAK,EAAgD;;QAG9C,IAAgB,CAAA,gBAAA,GACvB,KAAK,EAAkD;;QAGhD,IAAiB,CAAA,iBAAA,GACxB,KAAK,EAAmD;;QAGjD,IAAW,CAAA,WAAA,GAAG,KAAK,EAA6C;;QAGhE,IAAU,CAAA,UAAA,GAAG,KAAK,EAA4C;;QAG9D,IAAS,CAAA,SAAA,GAAG,KAAK,EAA2C;;QAG5D,IAAM,CAAA,MAAA,GAAG,KAAK,EAAwC;AAE9C,QAAA,IAAA,CAAA,wBAAwB,GAAG,IAAI,OAAO,EAAQ;AAE9C,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC;QAG3C,IAAI,CAAC,eAAe,CAAC;AAClB,aAAA,IAAI,CACH,GAAG,CAAC,MACF,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,6BAA6B,EAAE,CAAC,CACrE,EACD,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,EACrC,kBAAkB,EAAE;AAErB,aAAA,SAAS,EAAE;;AAGhB,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE;YACpC;;AAEF,QAAA,IACE,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE;aACnD,OAAO,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;aAC5D,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;aAClD,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC;aACxD,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;aACpD,OAAO,CAAC,aAAa,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;aAChE,OAAO,CAAC,cAAc,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC;aAClE,OAAO,CAAC,gBAAgB,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC;aACtE,OAAO,CAAC,iBAAiB;AACxB,gBAAA,CAAC,OAAO,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;aAC5C,OAAO,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;aAC5D,OAAO,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;aAC1D,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC;AACzD,aAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,EACnD;AACA,YAAA,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE;;AAEhC,QAAA,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;YACjD,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,EAAiB;AAC9D,YAAA,IAAI,MAAM,KAAK,SAAS,EAAE;gBACxB;;YAEF,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;;;AAI7C;;;AAGG;IACH,MAAM,uBAAuB,CAAC,SAAiB,EAAA;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,EAAkB;QAC/D,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAW;AAChC,YAAA,OAAO,MAAM,CAAC,uBAAuB,CAAC,SAAS,CAAC;AAClD,SAAC,CAAC;;AAGJ;;;AAGG;IACH,MAAM,kBAAkB,CAAC,SAAiB,EAAA;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,EAAkB;QAC/D,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAW;AAChC,YAAA,OAAO,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC;AAC7C,SAAC,CAAC;;AAGJ;;;;;AAKG;AACH,IAAA,MAAM,gBAAgB,CAAC,SAAiB,EAAE,KAAa,EAAE,MAAc,EAAA;QACrE,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,EAAkB;QAC/D,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAW;YAChC,OAAO,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC;AAC1D,SAAC,CAAC;;AAGJ,IAAA,WAAW,CAAC,OAAgD,EAAA;QAC1D,MAAM,UAAU,IACd,IAAI,CAAC,IAAI,EAAE,CACZ;AACD,QAAA,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AACjC,QAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE;;AAGtC,IAAA,cAAc,CAAC,OAAgD,EAAA;QAC7D,MAAM,UAAU,IACd,IAAI,CAAC,IAAI,EAAE,CACZ;QACD,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;AAClD,QAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;YACd,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;;AAEtC,QAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE;;IAGtC,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE;;IAGtC,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,gBAAgB,KAAK,EAAE,gBAAgB,CAAC;AACtE,QAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE;;IAGxB,6BAA6B,GAAA;QACnC,OAAO;AACL,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;AACjB,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACvB,YAAA,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;AAC/B,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACrB,YAAA,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;AAC3B,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACvB,YAAA,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE;AACnC,YAAA,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE;AACrC,YAAA,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE;AACzC,YAAA,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE;AAC3C,YAAA,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;AAC/B,YAAA,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;AAC7B,YAAA,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;AAC3B,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;SACtB;;IAGK,aAAa,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAC7D,GAAG,CAAC,MAAK;YACP,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,EAAiB;AAC9D,YAAA,IAAI,MAAM,KAAK,SAAS,EAAE;gBACxB;;YAEF,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAA+B,CAAC;SACzD,CAAC,CACH;;8GAlMQ,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,yhEAJvB,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAID,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBANlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,QAAQ,EAAE,EAAE;oBACZ,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,cAAc,EAAE,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;AACjE,iBAAA;;;ACrCD;;;;;AAKG;MAMU,gBAAgB,CAAA;AAL7B,IAAA,WAAA,GAAA;;QAOmB,IAAsB,CAAA,sBAAA,GAAG,MAAM,CAC9C,UAAU,CAAC,MAAM,sBAAsB,CAAC,CACzC;;QAEQ,IAAE,CAAA,EAAA,GAAG,KAAK,EAAU;;AAEpB,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAA0B;;QAGnD,IAAU,CAAA,UAAA,GAAG,KAAK,EAAyD;AA2BrF;IAvBC,QAAQ,GAAA;AACN,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE;QACpB,IAAI,CAAC,EAAE,EAAE;AACP,YAAA,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,sBAAsB,CAAC,gBAAgB,EAAE,CAAC;;AAE7D,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;QACpC,IAAI,CAAC,OAAO,GAAG;AACb,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;YACzB,UAAU,EAAE,UAAU,IAAI,EAAE;SAC7B;QACD,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE;QAC3B,IAAI,CAAC,sBAAsB,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;;IAGvD,WAAW,GAAA;QACT,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;;AAG1D,IAAA,iBAAiB,CAAC,WAAqB,EAAA;QACrB,IAAI,CAAC,OAAO,CAAC,QAAS,CAAC,WAAW,GAAG,WAAW;AAChE,QAAA,IAAI,CAAC,sBAAsB,CAAC,iBAAiB,EAAE;;8GApCtC,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,seAHjB,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAGD,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAL5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,QAAQ,EAAE,EAAE;oBACZ,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;;ACLD;;;;;;AAMG;MAIU,kBAAkB,CAAA;AAH/B,IAAA,WAAA,GAAA;;AAKmB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,EAAE;AAC3D,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA,CAAC;;AAGO,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAwB,IAAI,EAAE;AAClD,YAAA,KAAK,EAAE,cAAc;AACtB,SAAA,CAAC;QAEF,IAAgB,CAAA,gBAAA,GAAG,MAAM,EAAiB;QAC1C,IAAc,CAAA,cAAA,GAAG,MAAM,EAAiB;QACxC,IAAW,CAAA,WAAA,GAAG,MAAM,EAAiB;AAE7B,QAAA,IAAA,CAAA,GAAG,GAAG,IAAI,YAAY,EAAE;AAgIjC;IA9HC,QAAQ,GAAA;AACN,QAAA,IAAI,MAAM;AACV,QAAA,IAAI,MAAM;AACV,QAAA,IAAI,YAAY;AAChB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,QAAA,IAAI,IAAI,CAAC,gBAAgB,IAAI,KAAK,EAAE;AAClC,YAAA,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,eAAe,CAAC;AAClD,YAAA,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,eAAe,CAAC;AAClD,YAAA,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,IAAI,CACzD,IAAI,CAAC,gBAAgB,CACtB;YACD,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,IAAI,KAAK,OAAO,EAAE;AACrD,gBAAA,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC;;;aAEvD;AACL,YAAA,MAAM,IAAI,KAAK,CACb,4EAA4E,CAC7E;;QAGH,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC;;IAGpD,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE;;AAGhB,IAAA,eAAe,CACrB,MAAiC,EACjC,MAAiC,EACjC,YAAuC,EAAA;QAEvC,IAAI,MAAM,GAAG,KAAK;QAClB,IAAI,MAAM,GAAG,KAAK;QAClB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,MAAK;AACzC,YAAA,MAAM,QAAQ,GAAG,SAAS,CACxB,IAAI,CAAC,UAAU,CAAC,WAAW,EAC3B,SAAS,CACV;AACD,YAAA,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAC5B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EACrB,MAAM,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,EACxC,GAAG,CAAC,MAAK;gBACP,MAAM,GAAG,IAAI;AACb,gBAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,MAAM,CAAC;AAC1C,gBAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC;aACrC,CAAC,EACF,SAAS,CAAC,MACR,SAAS,CACP,IAAI,CAAC,UAAU,CAAC,WAAW,EAC3B,WAAW,CACZ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAC1B,CACF;AACD,YAAA,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAC/B,SAAS,CAAC,MACR,SAAS,CACP,IAAI,CAAC,UAAU,CAAC,WAAW,EAC3B,WAAW,CACZ,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAC5B,CACF;YACD,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzE,YAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CACV,UAAU,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;gBAC3B,MAAM,GAAG,IAAI;AACb,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAK;AACnB,oBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC;AACjC,iBAAC,CAAC;aACH,CAAC,CACH;AACD,YAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CACV,SAAS,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;AAC1B,gBAAA,YAAY,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC9C,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAK;AACnB,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;AAC5B,iBAAC,CAAC;aACH,CAAC,CACH;AACD,YAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CACV,QAAQ,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;gBACzB,MAAM,GAAG,KAAK;AACd,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAK;AACnB,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC;AAC/B,iBAAC,CAAC;gBACF,IAAI,CAAC,MAAM,EAAE;;AAEX,oBAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;AACtC,oBAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC;;aAEtC,CAAC,CACH;AACD,YAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CACV;iBACG,IAAI,CACH,GAAG,CAAC,OAAO,MAAM,GAAG,KAAK,CAAC,CAAC,EAC3B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;iBAEtB,SAAS,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;AACtC,gBAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC;aACpC,CAAC,CACL;AACH,SAAC,CAAC;;AAGI,IAAA,aAAa,CAAC,GAAkB,EAAA;AACtC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,QAAA,IAAI,IAAI,CAAC,gBAAgB,IAAI,KAAK,EAAE;YAClC,MAAM,OAAO,GAAoB,IAAI,CAAC,UAAU,CAAC,qBAAqB,CACpE,GAAG,CAAC,KAAK,EACT;AACE,gBAAA,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;AACpB,gBAAA,MAAM,EAAE;oBACN,KAAK;AACL,oBAAA,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC;oBACxB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAY,CAAC;AACpD,iBAAA;aACF,CACF,CAAC,CAAC,CAAC;YACJ,IAAI,CAAC,OAAO,EAAE;AACZ,gBAAA,OAAO,KAAK;;;AAGhB,QAAA,OAAO,IAAI;;8GAhJF,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC3B,iBAAA;;;ACND;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BG;MAMU,cAAc,CAAA;AAL3B,IAAA,WAAA,GAAA;;AAOmB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;;AAG7B,QAAA,IAAA,CAAA,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAU;;QAG7B,IAAI,CAAA,IAAA,GAAG,KAAK,EAAgB;;QAE5B,IAAO,CAAA,OAAA,GAAG,KAAK,EAAmB;;QAElC,IAAG,CAAA,GAAA,GAAG,KAAK,EAAU;QAErB,IAAU,CAAA,UAAA,GAAG,MAAM,EAExB;QAEK,IAAW,CAAA,WAAA,GAAG,MAAM,EAAQ;AAE7B,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;AACvB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC;AAgEjC;IA9DC,QAAQ,GAAA;QACN,IAAI,CAAC,UAAU,CAAC;AACb,aAAA,IAAI,CACH,SAAS,CAAC,MACR,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,IAAI,CACtD,SAAS,CAAC,SAAS,CAAC,EACpB,MAAM,CACJ,MACE,CAAC,IAAI,CAAC,QAAQ,EAAE;YAChB,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CACnD,CACF,CACF,EACD,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aAEpC,SAAS,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;;AAGrC,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IACE,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE;aAC7C,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;AACrD,aAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,EAC7C;YACA,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,QAAQ,EAAE;;;IAInB,WAAW,GAAA;QACT,IAAI,CAAC,WAAW,EAAE;;IAGpB,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;YAClB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;;;AAIlC,IAAA,MAAM,QAAQ,GAAA;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACvB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACxB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QACtB,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;AACzD,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;;aACnB,IAAI,GAAG,EAAE;AACd,YAAA,IAAI;AACF,gBAAA,MAAM,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;AACrE,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AACxB,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;AACjB,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;AACzB,iBAAC,CAAC;;YACF,OAAO,KAAK,EAAE;AACd,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;AACjB,oBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAY,CAAC;AACpC,iBAAC,CAAC;;;;8GAnFG,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,4nBAHf,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAGD,cAAc,EAAA,UAAA,EAAA,CAAA;kBAL1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,WAAW;AACrB,oBAAA,QAAQ,EAAE,EAAE;oBACZ,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;;AC9BD;;;;;;;;;;;;;;;;;;;;;AAqBG;MAMU,cAAc,CAAA;AAL3B,IAAA,WAAA,GAAA;;AASmB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;;AAGvC,QAAA,IAAA,CAAA,EAAE,GAAG,KAAK,CAAC,QAAQ,EAA4B;AAC/C,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,EAA8B;QACnD,IAAM,CAAA,MAAA,GAAG,KAAK,EAAU;QACxB,IAAQ,CAAA,QAAA,GAAG,KAAK,EAAkC;QAClD,IAAW,CAAA,WAAA,GAAG,KAAK,EAAU;AAEtC;;;;AAIG;QACM,IAAY,CAAA,YAAA,GAAG,KAAK,EAAW;QAE/B,IAAM,CAAA,MAAA,GAAG,KAAK,EAAuB;QACrC,IAAM,CAAA,MAAA,GAAG,KAAK,EAAgC;QAC9C,IAAK,CAAA,KAAA,GAAG,KAAK,EAA+B;QAC5C,IAAM,CAAA,MAAA,GAAG,KAAK,EAAU;QACxB,IAAO,CAAA,OAAA,GAAG,KAAK,EAAiC;QAChD,IAAO,CAAA,OAAA,GAAG,KAAK,EAAiC;QAEhD,IAAU,CAAA,UAAA,GAAG,MAAM,EAAkC;QACrD,IAAa,CAAA,aAAA,GAAG,MAAM,EAAkC;QACxD,IAAc,CAAA,cAAA,GAAG,MAAM,EAAkC;QACzD,IAAY,CAAA,YAAA,GAAG,MAAM,EAAkC;QACvD,IAAe,CAAA,eAAA,GAAG,MAAM,EAAkC;QAC1D,IAAe,CAAA,eAAA,GAAG,MAAM,EAAkC;QAC1D,IAAc,CAAA,cAAA,GAAG,MAAM,EAAkC;QACzD,IAAc,CAAA,cAAA,GAAG,MAAM,EAAkC;QACzD,IAAa,CAAA,aAAA,GAAG,MAAM,EAAkC;QACxD,IAAgB,CAAA,gBAAA,GAAG,MAAM,EAAkC;QAC3D,IAAe,CAAA,eAAA,GAAG,MAAM,EAAkC;QAC1D,IAAa,CAAA,aAAA,GAAG,MAAM,EAAkC;QACxD,IAAgB,CAAA,gBAAA,GAAG,MAAM,EAAkC;AAEnD,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAgB,IAAI,CAAC;AAoH7D;IAlHC,QAAQ,GAAA;QACN,IAAI,CAAC,UAAU,CAAC;AACb,aAAA,IAAI,CACH,SAAS,CAAC,MACR,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,IAAI,CACtD,GAAG,CAAC,MAAM,KAAK,CAAC,EAChB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAC9D,SAAS,CAAC,IAAI,CAAC,CAChB,CACF,EACD,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AAEpC,aAAA,SAAS,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;AAGrD,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;YACtB;;AAEF,QAAA,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE;AACnD,YAAA,IAAI,CAAC,UAAU,CAAC,wBAAwB,CACtC,IAAI,CAAC,EAAE,EAAE,EACT,OAAO,CAAC,KAAK,CAAC,YAAY,CAC3B;;AAEH,QAAA,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE;AACrD,YAAA,IAAI,CAAC,UAAU,CAAC,yBAAyB,CACvC,IAAI,CAAC,EAAE,EAAE,EACT,OAAO,CAAC,MAAM,CAAC,YAAY,CAC5B;;AAEH,QAAA,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE;AACrD,YAAA,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC;;AAExE,QAAA,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE;AACrD,YAAA,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC;;AAExE,QAAA,IACE,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE;AACpD,aAAC,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,EACrD;YACA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAC/B,IAAI,CAAC,EAAE,EAAE,EACT,IAAI,CAAC,OAAO,EAAE,EACd,IAAI,CAAC,OAAO,EAAE,CACf;;;IAIL,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;AACrB,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE;YAC1C,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;AAEtC,YAAA,IAAI,aAAa,KAAK,IAAI,EAAE;;gBAE1B,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE;AAC5C,oBAAA,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,aAAa,CAAC;;;;;AAM3C,IAAA,IAAI,CAAC,UAAmB,EAAA;AAC9B,QAAA,MAAM,KAAK,GAAe;AACxB,YAAA,YAAY,EAAE;AACZ,gBAAA,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE;AACb,gBAAA,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;AACjB,gBAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAY;AAC/B,gBAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;;AAEzB,gBAAA,cAAc,EAAE,IAAI,CAAC,WAAW,EAAE;AAClC,gBAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACvB,gBAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACvB,gBAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACrB,gBAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACrB,gBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;AACE,aAAA;AACvB,YAAA,WAAW,EAAE;gBACX,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,eAAe,EAAE,IAAI,CAAC,eAAe;gBACrC,eAAe,EAAE,IAAI,CAAC,eAAe;gBACrC,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;gBACvC,eAAe,EAAE,IAAI,CAAC,eAAe;gBACrC,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;AACxC,aAAA;SACF;AAED,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,OAAO,IAAI,CAAC,MAAM,EAAE,KAAK,QAAQ,EAAE;;AAE5D,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,KAAK,SAAS,EAAE;;gBAEtD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;;;AAGrC,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAE1D,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE;AAC1C,QAAA,IAAI,aAAa,KAAK,IAAI,EAAE;YAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,aAAa,CAAC;AAC1D,YAAA,IAAI,SAAS,KAAK,SAAS,EAAE;;AAE3B,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;;;AAGhC,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;;8GA7JhB,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,mgEAHf,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAGD,cAAc,EAAA,UAAA,EAAA,CAAA;kBAL1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,WAAW;AACrB,oBAAA,QAAQ,EAAE,EAAE;oBACZ,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;;ACfD;;;;;;;;;;;;;;;;;;;;;;;;;AAyBG;MAmBU,YAAY,CAAA;AA4MvB,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW;;AAMpC,IAAA,WAAA,GAAA;AAlNiB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;;QAGvC,IAAqB,CAAA,qBAAA,GAAG,KAAK,EAAuC;;QAEpE,IAAqB,CAAA,qBAAA,GAAG,KAAK,EAAuC;;QAEpE,IAAkB,CAAA,kBAAA,GAAG,KAAK,EAAU;;QAEpC,IAAY,CAAA,YAAA,GAAG,KAAK,EAA8B;;QAElD,IAAI,CAAA,IAAA,GAAG,KAAK,EAAsB;;QAElC,IAAmB,CAAA,mBAAA,GAAG,KAAK,EAAqC;;QAEhE,IAAuB,CAAA,uBAAA,GAAG,KAAK,EAAyC;;QAExE,IAAW,CAAA,WAAA,GAAG,KAAK,EAA6B;;QAEhD,IAAW,CAAA,WAAA,GAAG,KAAK,EAA6B;;QAEhD,IAAe,CAAA,eAAA,GAAG,KAAK,EAAiC;;QAExD,IAAc,CAAA,cAAA,GAAG,KAAK,EAAgC;;QAEtD,IAAkB,CAAA,kBAAA,GAAG,KAAK,EAAoC;;QAE9D,IAAY,CAAA,YAAA,GAAG,KAAK,EAA8B;;QAElD,IAAgB,CAAA,gBAAA,GAAG,KAAK,EAAkC;;QAE1D,IAAwB,CAAA,wBAAA,GAAG,KAAK,EAA0C;;QAE1E,IAAW,CAAA,WAAA,GAAG,KAAK,EAA6B;;QAEhD,IAAgB,CAAA,gBAAA,GAAG,KAAK,EAAkC;;QAE1D,IAAM,CAAA,MAAA,GAAG,KAAK,EAAwB;;QAEtC,IAAM,CAAA,MAAA,GAAG,KAAK,EAAwB;;QAEtC,IAAmB,CAAA,mBAAA,GAAG,KAAK,EAAqC;;QAEhE,IAAqC,CAAA,qCAAA,GAAG,KAAK,EAAuD;;QAEpG,IAAqB,CAAA,qBAAA,GAAG,KAAK,EAAuC;;QAEpE,IAAY,CAAA,YAAA,GAAG,KAAK,EAA8B;;QAElD,IAAa,CAAA,aAAA,GAAG,KAAK,EAA+B;;QAEpD,IAAsB,CAAA,sBAAA,GAAG,KAAK,EAAwC;;QAEtE,IAAU,CAAA,UAAA,GAAG,KAAK,EAA4B;;QAE9C,IAAW,CAAA,WAAA,GAAG,KAAK,EAA6B;;QAEhD,IAAqB,CAAA,qBAAA,GAAG,KAAK,EAAuC;;QAEpE,IAAa,CAAA,aAAA,GAAG,KAAK,EAA+B;;QAGpD,IAAO,CAAA,OAAA,GAAG,KAAK,EAAyB;;QAExC,IAAO,CAAA,OAAA,GAAG,KAAK,EAAyB;;QAExC,IAAQ,CAAA,QAAA,GAAG,KAAK,EAA0B;;QAE1C,IAAQ,CAAA,QAAA,GAAG,KAAK,EAA0B;;QAE1C,IAAU,CAAA,UAAA,GAAG,KAAK,EAA4B;;QAE9C,IAAU,CAAA,UAAA,GAAG,KAAK,EAA4B;;QAE9C,IAAU,CAAA,UAAA,GAAG,KAAK,EAA4B;;QAE9C,IAAe,CAAA,eAAA,GAAG,KAAK,EAAiC;;QAExD,IAAe,CAAA,eAAA,GAAG,KAAK,EAAiC;;QAExD,IAAQ,CAAA,QAAA,GAAG,KAAK,EAA0B;;QAE1C,IAAO,CAAA,OAAA,GAAG,KAAK,EAAyB;;QAExC,IAAO,CAAA,OAAA,GAAG,KAAK,EAAyB;;AAExC,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAuB;;QAE7C,IAAM,CAAA,MAAA,GAAG,KAAK,EAAwB;;QAEtC,IAAS,CAAA,SAAA,GAAG,KAAK,EAA2B;;QAE5C,IAAI,CAAA,IAAA,GAAG,KAAK,EAAY;;QAExB,IAAO,CAAA,OAAA,GAAG,KAAK,EAAY;;QAE3B,IAAK,CAAA,KAAA,GAAG,KAAK,EAAY;;QAEzB,IAAI,CAAA,IAAA,GAAG,KAAK,EAAsB;;AAElC,QAAA,IAAA,CAAA,gBAAgB,GAAG,KAAK,EAAkC,CAAC;;QAE3D,IAAiB,CAAA,iBAAA,GAAG,KAAK,EAAmC;;QAE5D,IAAS,CAAA,SAAA,GAAG,KAAK,EAA2B;;QAE5C,IAAO,CAAA,OAAA,GAAG,KAAK,EAAwB;;QAEvC,IAAU,CAAA,UAAA,GAAG,KAAK,EAA2B;;AAG7C,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAgC,OAAO,CAAC;QAC5D,IAAa,CAAA,aAAA,GAAG,KAAK,EAAiB;;QAGtC,IAAS,CAAA,SAAA,GAAG,KAAK,EAAoB;QACrC,IAAoB,CAAA,oBAAA,GAAG,KAAK,EAA0B;QACtD,IAAe,CAAA,eAAA,GAAG,KAAK,EAAW;QAClC,IAAY,CAAA,YAAA,GAAG,KAAK,EAAoB;QACxC,IAAW,CAAA,WAAA,GAAG,KAAK,EAAU;QAE7B,IAAS,CAAA,SAAA,GAAG,MAAM,EAA6B;QAC/C,IAAS,CAAA,SAAA,GAAG,MAAM,EAA6B;QAC/C,IAAY,CAAA,YAAA,GAAG,MAAM,EAA6B;QAClD,IAAU,CAAA,UAAA,GAAG,MAAM,EAA6B;QAChD,IAAY,CAAA,YAAA,GAAG,MAAM,EAA6B;QAClD,IAAQ,CAAA,QAAA,GAAG,MAAM,EAA6B;QAC9C,IAAW,CAAA,WAAA,GAAG,MAAM,EAA6B;QACjD,IAAY,CAAA,YAAA,GAAG,MAAM,EAA6B;QAClD,IAAW,CAAA,WAAA,GAAG,MAAM,EAA6B;QACjD,IAAc,CAAA,cAAA,GAAG,MAAM,EAA6B;QACpD,IAAa,CAAA,aAAA,GAAG,MAAM,EAA6B;QACnD,IAAW,CAAA,WAAA,GAAG,MAAM,EAA6B;QACjD,IAAY,CAAA,YAAA,GAAG,MAAM,EAA6B;QAClD,IAAc,CAAA,cAAA,GAAG,MAAM,EAA6B;QACpD,IAAQ,CAAA,QAAA,GAAG,MAAM,EAA6B;QAC9C,IAAS,CAAA,SAAA,GAAG,MAAM,EAExB;QACM,IAAI,CAAA,IAAA,GAAG,MAAM,EAEnB;QACM,IAAO,CAAA,OAAA,GAAG,MAAM,EAEtB;QACM,IAAY,CAAA,YAAA,GAAG,MAAM,EAE3B;QACM,IAAO,CAAA,OAAA,GAAG,MAAM,EAEtB;QACM,IAAU,CAAA,UAAA,GAAG,MAAM,EAEzB;QACM,IAAS,CAAA,SAAA,GAAG,MAAM,EAExB;QACM,IAAO,CAAA,OAAA,GAAG,MAAM,EAEtB;QACM,IAAO,CAAA,OAAA,GAAG,MAAM,EAEtB;QACM,IAAW,CAAA,WAAA,GAAG,MAAM,EAE1B;QACM,IAAM,CAAA,MAAA,GAAG,MAAM,EAErB;QACM,IAAS,CAAA,SAAA,GAAG,MAAM,EAExB;QACM,IAAU,CAAA,UAAA,GAAG,MAAM,EAEzB;QACM,IAAQ,CAAA,QAAA,GAAG,MAAM,EAEvB;QACM,IAAQ,CAAA,QAAA,GAAG,MAAM,EAEvB;QACM,IAAY,CAAA,YAAA,GAAG,MAAM,EAAiC;QACtD,IAAU,CAAA,UAAA,GAAG,MAAM,EAAiC;QACpD,IAAa,CAAA,aAAA,GAAG,MAAM,EAAiC;QACvD,IAAgB,CAAA,gBAAA,GAAG,MAAM,EAA+B;QACxD,IAAoB,CAAA,oBAAA,GAAG,MAAM,EAA+B;QAC5D,IAAO,CAAA,OAAA,GAAG,MAAM,EAAO;QACvB,IAAI,CAAA,IAAA,GAAG,MAAM,EAA6B;QAC1C,IAAM,CAAA,MAAA,GAAG,MAAM,EAA6B;QAC5C,IAAQ,CAAA,QAAA,GAAG,MAAM,EAA0B;QAC3C,IAAI,CAAA,IAAA,GAAG,MAAM,EAA4B;QACzC,IAAS,CAAA,SAAA,GAAG,MAAM,EAAiC;QACnD,IAAU,CAAA,UAAA,GAAG,MAAM,EAAkC;QACrD,IAAW,CAAA,WAAA,GAAG,MAAM,EAA4B;QAChD,IAAgB,CAAA,gBAAA,GAAG,MAAM,EAAiC;QAC1D,IAAiB,CAAA,iBAAA,GAAG,MAAM,EAAkC;QAC5D,IAAiB,CAAA,iBAAA,GAAG,MAAM,EAIhC;AAMM,QAAA,IAAA,CAAA,YAAY,GACnB,SAAS,CAAC,QAAQ,CAA6B,WAAW,CAAC;QAG3D,eAAe,CAAC,MAAK;AACnB,YAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE,EAAE,qBAAqB,EAAE;;AAEzD,gBAAA,MAAM,WAAW,GAAgB,IAAI,CAAC,UAAU,CAAC,aAAa;AAC9D,gBAAA,WAAW,CAAC,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC;AAC1C,gBAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAK;AAC1B,oBAAA,WAAW,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC;AACjD,iBAAC,CAAC;AACF,gBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAK;AACvB,oBAAA,WAAW,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC;AAC/C,iBAAC,CAAC;AACF,gBAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAK;AACzB,oBAAA,WAAW,CAAC,eAAe,CAAC,WAAW,CAAC;AAC1C,iBAAC,CAAC;;AAEJ,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AACpB,gBAAA,UAAU,EAAE;AACV,oBAAA,qBAAqB,EAAE,IAAI,CAAC,qBAAqB,EAAE;AACnD,oBAAA,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,aAAa;AAC5C,oBAAA,qBAAqB,EAAE,IAAI,CAAC,qBAAqB,EAAE;AACnD,oBAAA,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE;AACjC,oBAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACvB,oBAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACvB,oBAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AACzB,oBAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AACzB,oBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;AACnB,oBAAA,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;AACjB,oBAAA,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;AAC/B,oBAAA,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;AAC/B,oBAAA,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE;AACvC,oBAAA,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE;AACrC,oBAAA,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,EAAE;AAC7C,oBAAA,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE;AACjC,oBAAA,uBAAuB,EAAE,IAAI,CAAC,uBAAuB,EAAE;AACvD,oBAAA,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,EAAE;AAC/C,oBAAA,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;AAC3B,oBAAA,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;AAC7B,oBAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACvB,oBAAA,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;AAC7B,oBAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACvB,oBAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AACzB,oBAAA,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE;AACvC,oBAAA,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;AAC7B,oBAAA,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE;AACvC,oBAAA,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;AAC/B,oBAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACrB,oBAAA,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;AACjB,oBAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACvB,oBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;AACnB,oBAAA,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;AACjB,oBAAA,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE;AAC3C,oBAAA,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE;AACzC,oBAAA,wBAAwB,EAAE,IAAI,CAAC,wBAAwB,EAAE;AACzD,oBAAA,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE;AACzC,oBAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE;AACxD,oBAAA,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE;oBACzC,MAAM,EAAE,IAAI,CAAC,MAAM;AACnB,oBAAA,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,EAAE;AAC/C,oBAAA,qCAAqC,EAAE,IAAI,CAAC,qCAAqC,EAAE;AACnF,oBAAA,qBAAqB,EAAE,IAAI,CAAC,qBAAqB,EAAE;AACnD,oBAAA,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;AAC3B,oBAAA,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE;AACjC,oBAAA,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE;AACnC,oBAAA,sBAAsB,EAAE,IAAI,CAAC,sBAAsB,EAAE;AACrD,oBAAA,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;AAC7B,oBAAA,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;AAC/B,oBAAA,qBAAqB,EAAE,IAAI,CAAC,qBAAqB,EAAE;AACnD,oBAAA,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE;AAEnC,oBAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACvB,oBAAA,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;AAC9B,iBAAA;AACD,gBAAA,SAAS,EAAE,IAAI;AAChB,aAAA,CAAC;AACF,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;YACtC,IAAI,WAAW,EAAE;AACf,gBAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,WAAW,CAAC;;AAEnD,SAAC,CAAC;QAEF,gBAAgB,CAAC,MAAK;AACpB,YAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE;AACpC,SAAC,CAAC;;IAGJ,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE;;IAG9B,MAAM,WAAW,CAAC,OAAsB,EAAA;QACtC,MAAM,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;AACjD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACxB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAC9B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAE5B,QAAA,IAAI,OAAO,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE;YAC/D,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC;;AAEtE,QAAA,IAAI,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE;YACvD,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC;;AAE7D,QAAA,IAAI,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE;YACvD,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC;;AAE7D,QAAA,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE;YACzD,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;;AAE/D,QAAA,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE;YACzD,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;;QAE/D,IACE,OAAO,CAAC,iBAAiB;AACzB,YAAA,CAAC,OAAO,CAAC,iBAAiB,CAAC,aAAa,EAAE,EAC1C;YACA,IAAI,CAAC,UAAU,CAAC,uBAAuB,CACrC,OAAO,CAAC,iBAAiB,CAAC,YAAY,CACvC;;AAEH,QAAA,IAAI,OAAO,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE;YAC7D,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC;;AAEnE,QAAA,IAAI,OAAO,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE;YAC7D,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC;;AAEnE,QAAA,IAAI,OAAO,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE;YAC7D,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC;;AAEnE,QAAA,IAAI,OAAO,CAAC,eAAe,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,aAAa,EAAE,EAAE;YACvE,IAAI,CAAC,UAAU,CAAC,qBAAqB,CACnC,OAAO,CAAC,eAAe,CAAC,YAAY,CACrC;;AAEH,QAAA,IAAI,OAAO,CAAC,eAAe,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,aAAa,EAAE,EAAE;YACvE,IAAI,CAAC,UAAU,CAAC,qBAAqB,CACnC,OAAO,CAAC,eAAe,CAAC,YAAY,CACrC;;AAEH,QAAA,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE;YACzD,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;;AAE/D,QAAA,IAAI,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE;YACvD,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC;;AAE7D,QAAA,IAAI,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE;YACvD,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC;;AAE7D,QAAA,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE;YACnD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC;;AAEzD,QAAA,IAAI,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE;YAC3D,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC;;QAEjE,IACE,OAAO,CAAC,SAAS;YACjB,OAAO,CAAC,SAAS,CAAC,YAAY;AAC9B,YAAA,CAAC,OAAO,CAAC,SAAS,CAAC,aAAa,EAAE,EAClC;AACA,YAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CACvB,OAAO,CAAC,SAAS,CAAC,YAAY,EAC9B,IAAI,CAAC,gBAAgB,EAAE,CACxB;;QAEH,IACE,OAAO,CAAC,oBAAoB;AAC5B,YAAA,OAAO,CAAC,oBAAoB,CAAC,YAAY,EACzC;YACA,IACE,CAAC,MAAM,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE;AAC5C,gBAAA,OAAO,CAAC,oBAAoB,CAAC,aAAa,EAAE,EAC5C;AACA,gBAAA,OAAO,CAAC,IAAI,CACV,+GAA+G,CAChH;;AAEH,YAAA,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAClC,OAAO,CAAC,oBAAoB,CAAC,YAAY,EACzC,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EACxB,IAAI,CAAC,aAAa,EAAE,CACrB;;QAEH,IACE,IAAI,CAAC,eAAe,EAAE;AACtB,YAAA,OAAO,CAAC,MAAM;AACd,YAAA,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE;YAC/B,CAAC,OAAO,CAAC,IAAI;YACb,CAAC,OAAO,CAAC,OAAO;YAChB,CAAC,OAAO,CAAC,KAAK;AACd,YAAA,CAAC,OAAO,CAAC,IAAI,EACb;AACA,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAG,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;;AACrD,aAAA,IACL,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE;aACjD,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;AAC/C,aAAC,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC;aACrF,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;AACjD,aAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,EAC/C;YACA,IAAI,CAAC,UAAU,CAAC,IAAI,CAClB,IAAI,CAAC,YAAY,EAAE,EACnB,IAAI,CAAC,aAAa,EAAE,EACpB,OAAO,CAAC,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,EAC1C,OAAO,CAAC,MAAM,GAAG,MAAM,GAAG,SAAS,EACnC,OAAO,CAAC,OAAO,IAAI,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,EACnD,OAAO,CAAC,KAAK,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,EAC7C,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,YAAY,GAAG,SAAS,CACrD;;AAEH,QAAA,IAAI,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE;YACvD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC;;AAE1D,QAAA,IAAI,OAAO,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE;YAC7D,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC;;AAEhE,QAAA,IAAI,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE;YAC3D,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC;;;8GA3a3D,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,EAHZ,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,uBAAA,EAAA,EAAA,iBAAA,EAAA,yBAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,wBAAA,EAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,UAAA,EAAA,0BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qCAAA,EAAA,EAAA,iBAAA,EAAA,uCAAA,EAAA,UAAA,EAAA,uCAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,sBAAA,EAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,aAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,SAAA,EAAA,CAAC,UAAU,CAAC,0KAZb,wBAAwB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,mDAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAevB,YAAY,EAAA,UAAA,EAAA,CAAA;kBAjBxB,SAAS;+BACE,SAAS,EAAA,QAAA,EACT,wBAAwB,EAYvB,SAAA,EAAA,CAAC,UAAU,CAAC,EAAA,eAAA,EACN,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,mDAAA,CAAA,EAAA;;;ACzDjD;;;;;;;;;;;;;;;;;AAiBG;MASU,eAAe,CAAA;AAgC1B,IAAA,WAAA,GAAA;;AA9BiB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;;QAGvC,IAAM,CAAA,MAAA,GAAG,KAAK,EAA2B;QACzC,IAAM,CAAA,MAAA,GAAG,KAAK,EAA2B;QACzC,IAAc,CAAA,cAAA,GAAG,KAAK,EAAmC;QACzD,IAAK,CAAA,KAAA,GAAG,KAAK,EAA0B;QACvC,IAAK,CAAA,KAAA,GAAG,KAAK,EAA0B;QACvC,IAAO,CAAA,OAAA,GAAG,KAAK,EAA4B;QAC3C,IAAkB,CAAA,kBAAA,GAAG,KAAK,EAAuC;QACjE,IAAmB,CAAA,mBAAA,GAAG,KAAK,EAAwC;;QAEnE,IAAO,CAAA,OAAA,GAAG,KAAK,EAAkC;QACjD,IAAM,CAAA,MAAA,GAAG,KAAK,EAAc;QAC5B,IAAS,CAAA,SAAA,GAAG,KAAK,EAA8B;QAC/C,IAAU,CAAA,UAAA,GAAG,KAAK,EAAW;QAC7B,IAAS,CAAA,SAAA,GAAG,KAAK,EAAU;QAC3B,IAAc,CAAA,cAAA,GAAG,KAAK,EAAmC;QACzD,IAAiB,CAAA,iBAAA,GAAG,KAAK,EAAsC;QAC/D,IAAQ,CAAA,QAAA,GAAG,KAAK,EAA6B;QAE7C,IAAe,CAAA,eAAA,GAAG,MAAM,EAAU;QAClC,IAAa,CAAA,aAAA,GAAG,MAAM,EAAU;QAChC,IAAU,CAAA,UAAA,GAAG,MAAM,EAAU;AAE7B,QAAA,IAAA,CAAA,OAAO,GAAG,SAAS,CAAC,QAAQ,CAA6B,SAAS,CAAC;AAEnE,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAgB,IAAI,CAAC;QAGnD,eAAe,CAAC,MAAK;YACnB,IAAI,CAAC,UAAU,CAAC;AACb,iBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;iBACxC,SAAS,CAAC,MAAK;AACd,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;AACvC,oBAAA,cAAc,EAAE;AACd,wBAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,aAAa;AACrC,wBAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACvB,wBAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACrB,wBAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACrB,wBAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACrB,wBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;AACnB,wBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;AACnB,wBAAA,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE;AAC7B,wBAAA,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE;AACrC,wBAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AACzB,wBAAA,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE;AAC3C,wBAAA,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE;AACrC,wBAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACvB,wBAAA,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,EAAE;AAC7C,wBAAA,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,EAAE;AAChD,qBAAA;AACD,oBAAA,aAAa,EAAE;wBACb,eAAe,EAAE,IAAI,CAAC,eAAe;wBACrC,UAAU,EAAE,IAAI,CAAC,UAAU;wBAC3B,aAAa,EAAE,IAAI,CAAC,aAAa;AAClC,qBAAA;AACF,iBAAA,CAAC;AACF,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC;AACjC,aAAC,CAAC;AACN,SAAC,CAAC;;IAGJ,WAAW,GAAA;QACT,IAAI,CAAC,YAAY,EAAE;;IAGrB,QAAQ,GAAA;QACN,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACnC,YAAA,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC;;;AAItE,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAG;AAC7C,QAAA,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE;YACrD,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC;;AAGvD,QAAA,IAAI,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE;AACvD,YAAA,cAAc,CAAC,SAAS,CACtB,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,CAClD;;AAEH,QAAA,IAAI,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE;YAC3D,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC;;AAE/D,QAAA,IAAI,OAAO,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE;YAC7D,OAAO,CAAC,UAAU,CAAC;AACjB,kBAAE,cAAc,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW;kBAC3D,cAAc,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE;;AAExC,QAAA,IAAI,OAAO,CAAC,cAAc,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,aAAa,EAAE,EAAE;YACrE,cAAc,CAAC,iBAAiB,CAAC,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC;;QAEvE,IACE,OAAO,CAAC,iBAAiB;AACzB,YAAA,CAAC,OAAO,CAAC,iBAAiB,CAAC,aAAa,EAAE,EAC1C;YACA,cAAc,CAAC,oBAAoB,CACjC,OAAO,CAAC,iBAAiB,CAAC,YAAY,CACvC;;AAEH,QAAA,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE;YACzD,cAAc,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;;;IAI7D,YAAY,GAAA;QACV,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,EAAG,CAAC;AACpD,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;;IAG/B,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,cAAc,EAAG,CAAC,WAAW,EAAE;;8GArH3B,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,EANhB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;AAEH,QAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAII,eAAe,EAAA,UAAA,EAAA,CAAA;kBAR3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,QAAQ,EAAE,CAAA;;AAEH,QAAA,CAAA;oBACP,aAAa,EAAE,iBAAiB,CAAC,IAAI;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;;ACpBD;;;;AAIG;MAIU,cAAc,CAAA;8GAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uBAAuB;AAClC,iBAAA;;AAGD;;;;AAIG;MAIU,qBAAqB,CAAA;8GAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,8BAA8B;AACzC,iBAAA;;AAGD,IAAI,MAAM,GAAG,CAAC;AAEd;;;;;;;;;;;;;;;;;;;;;AAqBG;MA6BU,2BAA2B,CAAA;AA4BtC,IAAA,WAAA,GAAA;AA3BiB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;;AAG/B,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAU;;AAGjC,QAAA,IAAA,CAAA,QAAQ,GAAG,YAAY,CAC9B,cAAc,EACd;AACE,YAAA,IAAI,EAAE,WAAW;AAClB,SAAA,CACF;;AAEQ,QAAA,IAAA,CAAA,eAAe,GAAG,YAAY,CAGrC,qBAAqB,EAAE;AACvB,YAAA,IAAI,EAAE,WAAW;AAClB,SAAA,CAAC;;AAGO,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAsB,EAAE,CAAC;;AAE/C,QAAA,IAAA,CAAA,OAAO,GAAG,CAAA,yBAAA,EAA4B,MAAM,EAAE,EAAE;QAGvD,eAAe,CAAC,MAAK;AACnB,YAAA,MAAM,iBAAiB,GAAG,MACxB,SAAS,CAAqB,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,IAAI,CACrE,MAAM,CACJ,CAAC,CAAC,KACA,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,MAAM,EAAE;gBAC5B,CAAC,CAAC,cAAc,KAAK,UAAU;AAC/B,gBAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAC5D,CACF;YACH,IAAI,CAAC,UAAU,CAAC;iBACb,IAAI,CACH,SAAS,CAAC,iBAAiB,CAAC,EAC5B,SAAS,CAAC,MACR,KAAK,CACH,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC,EAC9C,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,SAAS,CAAC,CAClD,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAC7B;AAEF,iBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;iBACxC,SAAS,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAK;oBACnB,IAAI,CAAC,aAAa,EAAE;AACtB,iBAAC,CAAC;AACJ,aAAC,CAAC;AACN,SAAC,CAAC;;IAGI,aAAa,GAAA;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;AACrD,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CACpB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAC1D;;AAGH,IAAA,gBAAgB,CACd,QAAiD,EAAA;QAEjD,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,OAAO,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE;;QAGpE,OAAO,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;;8GAxExB,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAUpC,cAAc,EAEN,WAAA,EAAA,IAAA,EAAA,IAAA,EAAA,WAAW,+EAOnB,qBAAqB,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EACf,WAAW,EA9CT,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA;;;;;;;;;;;;;;;;;;;;;AAqBN,KAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAGM,cAAc,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,QAAA,EAAA,WAAA,EAAA,YAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,eAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEhD,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBA5BvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,0BAA0B;AACpC,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;AAqBN,KAAA,CAAA;oBACJ,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,mBAAmB,EAAE,KAAK;AAC1B,oBAAA,OAAO,EAAE,CAAC,cAAc,EAAE,eAAe,EAAE,gBAAgB,CAAC;AAC7D,iBAAA;;;AC5ED;;;;;;;;;;;;;;;;;;AAkBG;MAMU,cAAc,CAAA;AAuDzB,IAAA,WAAA,GAAA;;AArDiB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;;QAGvC,IAAW,CAAA,WAAA,GAAG,KAAK,EAA+B;;QAGlD,IAAY,CAAA,YAAA,GAAG,KAAK,EAAgC;;QAGpD,IAAW,CAAA,WAAA,GAAG,KAAK,EAA+B;;QAGlD,IAAc,CAAA,cAAA,GAAG,KAAK,EAAkC;;QAGxD,IAAM,CAAA,MAAA,GAAG,KAAK,EAA0B;;QAGxC,IAAS,CAAA,SAAA,GAAG,KAAK,EAA6B;;QAG9C,IAAQ,CAAA,QAAA,GAAG,KAAK,EAA4B;;QAG5C,IAAmB,CAAA,mBAAA,GAAG,KAAK,EAAuC;AAE3E;;;AAGG;QACM,IAAO,CAAA,OAAA,GAAG,KAAK,EAAkC;;QAGjD,IAAM,CAAA,MAAA,GAAG,KAAK,EAAc;AAErC;;;AAGG;QACM,IAAM,CAAA,MAAA,GAAG,KAAK,EAAmB;;QAGjC,IAAM,CAAA,MAAA,GAAG,KAAK,EAAU;QAExB,IAAU,CAAA,UAAA,GAAG,MAAM,EAAQ;QAC3B,IAAS,CAAA,SAAA,GAAG,MAAM,EAAQ;;AAG1B,QAAA,IAAA,CAAA,OAAO,GAAG,SAAS,CAAC,QAAQ,CAA6B,SAAS,CAAC;QAEpE,IAAa,CAAA,aAAA,GAA4B,IAAI;QAGnD,eAAe,CAAC,MAAK;AACnB,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,EAAE;AACvC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa;AAC7B,iBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,iBAAA,SAAS,EAAE;AAChB,SAAC,CAAC;;IAGJ,QAAQ,GAAA;QACN,IACE,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE;aAC9B,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;aAChC,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,EACjC;AACA,YAAA,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC;;;AAI3E,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE;AACvD,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;YAC/D,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAc,CAAC;AACvD,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,EAAE;YAC3C,IAAI,CAAC,UAAU,CAAC,aAAa,CAC3B,gBAAgB,EAChB,SAAS,CACV;AACD,YAAA,IAAI,CAAC,aAAa,GAAG,gBAAgB;;AAGvC,QAAA,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE;YACrD,IAAI,CAAC,aAAc,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC;;AAG5D,QAAA,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE;AACrD,YAAA,MAAM,cAAc,GAAoB,OAAO,CAAC,MAAM,CAAC,aAAa;AACpE,YAAA,MAAM,sBAAsB,GAAG,cAAc,CAAC,cAAc,EAAE;YAE9D,IAAI,sBAAsB,EAAE;AAC1B,gBAAA,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,sBAAsB,CAAC;;YAG/D,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE;AACtD,YAAA,IAAI,cAAc,IAAI,IAAI,CAAC,aAAa,EAAE;gBACxC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,cAAc,EAAE,IAAI,CAAC,aAAa,CAAC;;;QAGxE,IACE,OAAO,CAAC,MAAM;AACd,YAAA,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE;YAC/B,IAAI,CAAC,aAAa,EAClB;YACA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC;;;IAI7D,WAAW,GAAA;QACT,IAAI,CAAC,qBAAqB,EAAE;;IAGtB,WAAW,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAChC;AACE,YAAA,YAAY,EAAE;AACZ,gBAAA,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;AAC/B,gBAAA,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE;AACjC,gBAAA,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;AAC/B,gBAAA,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE;AACrC,gBAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACrB,gBAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACrB,gBAAA,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;AAC3B,gBAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AACzB,gBAAA,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,EAAE;AAChD,aAAA;AACD,YAAA,WAAW,EAAE;gBACX,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,UAAU,EAAE,IAAI,CAAC,UAAU;AAC5B,aAAA;AACF,SAAA,EACD,IAAI,CAAC,OAAO,EAAE,CAAC,aAAa,CAC7B;;AAGK,IAAA,QAAQ,CAAC,KAAY,EAAA;QAC3B,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CACrCC,KAAG,CAAC,MAAK;AACP,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5B,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;YAC9B,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE;AACtD,YAAA,IAAI,MAAM,IAAI,OAAO,EAAE;AACrB,gBAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;;iBAChE,IAAI,cAAc,EAAE;gBACzB,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,cAAc,EAAE,KAAK,CAAC;;iBAClD;AACL,gBAAA,MAAM,IAAI,KAAK,CACb,uDAAuD,CACxD;;SAEJ,CAAC,CACH;;IAGH,qBAAqB,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE;YACtD,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;gBACnC,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC;;iBACjD,IAAI,cAAc,EAAE;AACzB,gBAAA,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,cAAc,CAAC;;iBAChD;gBACL,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC;;;AAG1D,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;;IAG3B,SAAS,CACP,MAA8B,EAC9B,OAAmD,EAAA;QAEnD,IAAI,MAAM,EAAE;AACV,YAAA,OAAO,MAAM;;aACR,IAAI,OAAO,EAAE;AAClB,YAAA,OAAO,OAAO,CAAC,QAAQ,CAAC,WAA+B;;AAEzD,QAAA,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC;;8GArL7C,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,81DAHf,mEAAmE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAGlE,cAAc,EAAA,UAAA,EAAA,CAAA;kBAL1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,WAAW;AACrB,oBAAA,QAAQ,EAAE,mEAAmE;oBAC7E,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;;AC/BD;;;;;AAKG;MAOU,qBAAqB,CAAA;AAchC,IAAA,WAAA,GAAA;;AAZiB,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;;AAGjD,QAAA,IAAA,CAAA,WAAW,GAClB,KAAK,CAAC,QAAQ,EAA4C;;AAGnD,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAuC;;QAG9D,IAAO,CAAA,OAAA,GAAG,KAAK,EAAwC;QAG9D,IAAI,CAAC,eAAe,CAAC;aAClB,IAAI,CACHA,KAAG,CAAC,MACF,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,4BAA4B,EAAS,CAAC,CAC3E,EACD,kBAAkB,EAAE;AAErB,aAAA,SAAS,EAAE;;AAGhB,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE;YACpC;;AAEF,QAAA,IACE,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE;AAClD,aAAC,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,EACrD;AACA,YAAA,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE;;AACzB,aAAA,IAAI,OAAO,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE;YACtE,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,EAAgB;AAC7D,YAAA,IAAI,MAAM,KAAK,SAAS,EAAE;gBACxB;;YAEF,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC;;;IAI3D,4BAA4B,GAAA;QAC1B,OAAO;AACL,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;AAC/B,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACrB,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;SACxB;;8GAjDQ,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,ujBAJtB,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAID,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,QAAQ,EAAE,EAAE;oBACZ,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,cAAc,EAAE,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;AACjE,iBAAA;;;ACRD;;;;;AAKG;MAMU,oBAAoB,CAAA;AALjC,IAAA,WAAA,GAAA;;AAOmB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;;AAGvC,QAAA,IAAA,CAAA,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAU;;AAG7B,QAAA,IAAA,CAAA,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAmC;AACvD,QAAA,IAAA,CAAA,WAAW,GAClB,KAAK,CAAC,QAAQ,EAA2C;QAElD,IAAI,CAAA,IAAA,GAAqC,OAAO;AAExC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAgB,IAAI,CAAC;AAyCxD;IAvCC,QAAQ,GAAA;QACN,IAAI,CAAC,UAAU,CAAC;AACb,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aACxC,SAAS,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;;AAGtC,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,QAAA,IAAI,QAAQ,KAAK,IAAI,EAAE;YACrB;;QAEF,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAc,QAAQ,CAAC;AAC/D,QAAA,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB;;QAEF,MAAM,CAAC,WAAW,CAAC;AACjB,YAAA,GAAG,EAAE,OAAO,CAAC,GAAG,KAAK,SAAS,GAAI,SAAiB,GAAG,IAAI,CAAC,GAAG,EAAE;AAChE,YAAA,WAAW,EACT,OAAO,CAAC,WAAW,KAAK,SAAS,GAAG,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE;AACrE,SAAA,CAAC;;IAGJ,WAAW,GAAA;AACT,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,QAAA,IAAI,QAAQ,KAAK,IAAI,EAAE;AACrB,YAAA,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC;AACtC,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;;;IAInB,SAAS,GAAA;AACf,QAAA,MAAM,WAAW,GAA6B;AAC5C,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;AACf,YAAA,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;SAChC;AACD,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,WAAW,CAAC;QACjD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;;8GAtDnB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,qdAHrB,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAGD,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBALhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,QAAQ,EAAE,EAAE;oBACZ,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;;ACbD;;;;;AAKG;MAOU,wBAAwB,CAAA;AA4BnC,IAAA,WAAA,GAAA;;AA1BiB,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;;QAGjD,IAAG,CAAA,GAAA,GAAG,KAAK,EAAuC;;QAGlD,IAAK,CAAA,KAAA,GAAG,KAAK,EAAyC;;QAGtD,IAAM,CAAA,MAAA,GAAG,KAAK,EAA0C;;QAGxD,IAAO,CAAA,OAAA,GAAG,KAAK,EAA2C;;QAG1D,IAAO,CAAA,OAAA,GAAG,KAAK,EAA2C;;QAG1D,IAAQ,CAAA,QAAA,GAAG,KAAK,EAA4C;;QAG5D,IAAW,CAAA,WAAA,GAAG,KAAK,EAA+C;;QAGlE,IAAQ,CAAA,QAAA,GAAG,KAAK,EAA4C;QAGnE,IAAI,CAAC,eAAe,CAAC;aAClB,IAAI,CACH,GAAG,CAAC,MACF,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,+BAA+B,EAAE,CAAC,CACvE,EACD,kBAAkB,EAAE;AAErB,aAAA,SAAS,EAAE;;AAGhB,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE;YACpC;;AAEF,QAAA,IACE,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE;aAC3C,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;aAChD,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;aAClD,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;aACpD,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;aACpD,OAAO,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;aACtD,OAAO,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;AAC7D,aAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC,EACvD;AACA,YAAA,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE;;;IAIlC,+BAA+B,GAAA;QAC7B,OAAO;AACL,YAAA,IAAI,EAAE,YAAY;AAClB,YAAA,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;AACf,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;AACnB,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACrB,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACvB,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACvB,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AACzB,YAAA,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;AAC/B,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;SAC1B;;8GApEQ,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,uqCAJzB,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAID,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBANpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,QAAQ,EAAE,EAAE;oBACZ,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,cAAc,EAAE,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;AACjE,iBAAA;;;ACXD;;;;;AAKG;MAOU,qBAAqB,CAAA;AA4BhC,IAAA,WAAA,GAAA;;AA1BiB,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;;QAGjD,IAAG,CAAA,GAAA,GAAG,KAAK,EAAoC;;QAG/C,IAAK,CAAA,KAAA,GAAG,KAAK,EAAsC;;QAGnD,IAAM,CAAA,MAAA,GAAG,KAAK,EAAuC;;QAGrD,IAAM,CAAA,MAAA,GAAG,KAAK,EAAuC;;QAGrD,IAAO,CAAA,OAAA,GAAG,KAAK,EAAwC;;QAGvD,IAAO,CAAA,OAAA,GAAG,KAAK,EAAwC;;QAGvD,IAAQ,CAAA,QAAA,GAAG,KAAK,EAAyC;;QAGzD,IAAW,CAAA,WAAA,GAAG,KAAK,EAA4C;QAGtE,IAAI,CAAC,eAAe,CAAC;aAClB,IAAI,CACHA,KAAG,CAAC,MACF,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,4BAA4B,EAAE,CAAC,CACpE,EACD,kBAAkB,EAAE;AAErB,aAAA,SAAS,EAAE;;AAGhB,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE;YACpC;;AAEF,QAAA,IACE,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE;aAC3C,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;aAChD,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;aAClD,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;aACpD,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;aACpD,OAAO,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;aACtD,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;AACnD,aAAC,OAAO,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,EAC7D;AACA,YAAA,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE;;;IAIlC,4BAA4B,GAAA;QAC1B,OAAO;AACL,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;AACf,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;AACnB,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACrB,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACvB,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACvB,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AACzB,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACrB,YAAA,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;SAChC;;8GApEQ,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,6pCAJtB,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAID,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,QAAQ,EAAE,EAAE;oBACZ,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,cAAc,EAAE,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;AACjE,iBAAA;;;ACXD;;;;;AAKG;MAOU,qBAAqB,CAAA;AAchC,IAAA,WAAA,GAAA;;AAZiB,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;;QAGjD,IAAG,CAAA,GAAA,GAAG,KAAK,EAAoC;QAC/C,IAAK,CAAA,KAAA,GAAG,KAAK,EAAsC;QACnD,IAAM,CAAA,MAAA,GAAG,KAAK,EAAuC;QACrD,IAAM,CAAA,MAAA,GAAG,KAAK,EAAuC;QACrD,IAAO,CAAA,OAAA,GAAG,KAAK,EAAwC;QACvD,IAAO,CAAA,OAAA,GAAG,KAAK,EAAwC;QACvD,IAAW,CAAA,WAAA,GAAG,KAAK,EAA4C;QAC/D,IAAS,CAAA,SAAA,GAAG,KAAK,EAA0C;QAGlE,IAAI,CAAC,eAAe,CAAC;aAClB,IAAI,CACHA,KAAG,CAAC,MACF,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,4BAA4B,EAAE,CAAC,CACpE,EACD,kBAAkB,EAAE;AAErB,aAAA,SAAS,EAAE;;AAGhB,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE;YACpC;;AAGF,QAAA,IACE,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE;aACjD,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;aAClD,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;aACpD,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;aACpD,OAAO,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;AAC7D,aAAC,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC,EACzD;AACA,YAAA,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE;;AACzB,aAAA,IACL,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE;AAC5C,aAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,EACjD;YACA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,EAAoB;AACjE,YAAA,IAAI,MAAM,KAAK,SAAS,EAAE;gBACxB;;AAEF,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,YAAA,IAAI,OAAO,CAAC,GAAG,IAAI,GAAG,EAAE;AACtB,gBAAA,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;;AAGpB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,YAAA,IAAI,OAAO,CAAC,KAAK,IAAI,KAAK,EAAE;AAC1B,gBAAA,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;;;;IAK5B,4BAA4B,GAAA;QAC1B,OAAO;AACL,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;AACf,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;AACnB,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACrB,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACrB,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACvB,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACvB,YAAA,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;AAC/B,YAAA,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;SAC5B;;8GAtEQ,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,gqCAJtB,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAID,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,QAAQ,EAAE,EAAE;oBACZ,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,cAAc,EAAE,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;AACjE,iBAAA;;;ACXD;;;;;AAKG;MAOU,oBAAoB,CAAA;AAY/B,IAAA,WAAA,GAAA;AATiB,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;;AAGjD,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAoC;;AAGzD,QAAA,IAAA,CAAA,WAAW,GAClB,KAAK,CAAC,QAAQ,EAA2C;QAIzD,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CACnCA,KAAG,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,EAC3B,kBAAkB,EAAE,CACrB,CAAC,SAAS,EAAE;;AAGf,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE;YACpC;;AAGF,QAAA,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;AACjD,YAAA,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE;;AACzB,aAAA,IAAI,OAAO,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE;YACtE,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,EAAe;AAC5D,YAAA,IAAI,MAAM,KAAK,SAAS,EAAE;gBACxB;;YAEF,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC;;;IAI3D,SAAS,GAAA;AACP,QAAA,MAAM,MAAM,GAA6B;AACvC,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;AACjB,YAAA,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;SAChC;AACD,QAAA,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC;;8GA1C7B,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,kbAJrB,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAID,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBANhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,QAAQ,EAAE,EAAE;oBACZ,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,cAAc,EAAE,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;AACjE,iBAAA;;;ACKD,MAAM,uBAAuB,GAAG;IAC9B,YAAY;IACZ,cAAc;IACd,kBAAkB;IAClB,cAAc;IACd,qBAAqB;IACrB,sBAAsB;IACtB,wBAAwB;IACxB,qBAAqB;IACrB,oBAAoB;IACpB,oBAAoB;IACpB,qBAAqB;IACrB,gBAAgB;IAChB,eAAe;IACf,cAAc;IACd,gBAAgB;IAChB,0BAA0B;IAC1B,0BAA0B;IAC1B,yBAAyB;IACzB,2BAA2B;IAC3B,qBAAqB;IACrB,cAAc;IACd,qBAAqB;IACrB,2BAA2B;IAC3B,uBAAuB;IACvB;CACD;MAMY,mBAAmB,CAAA;8GAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,YA/B9B,YAAY;YACZ,cAAc;YACd,kBAAkB;YAClB,cAAc;YACd,qBAAqB;YACrB,sBAAsB;YACtB,wBAAwB;YACxB,qBAAqB;YACrB,oBAAoB;YACpB,oBAAoB;YACpB,qBAAqB;YACrB,gBAAgB;YAChB,eAAe;YACf,cAAc;YACd,gBAAgB;YAChB,0BAA0B;YAC1B,0BAA0B;YAC1B,yBAAyB;YACzB,2BAA2B;YAC3B,qBAAqB;YACrB,cAAc;YACd,qBAAqB;YACrB,2BAA2B;YAC3B,uBAAuB;AACvB,YAAA,eAAe,aAxBf,YAAY;YACZ,cAAc;YACd,kBAAkB;YAClB,cAAc;YACd,qBAAqB;YACrB,sBAAsB;YACtB,wBAAwB;YACxB,qBAAqB;YACrB,oBAAoB;YACpB,oBAAoB;YACpB,qBAAqB;YACrB,gBAAgB;YAChB,eAAe;YACf,cAAc;YACd,gBAAgB;YAChB,0BAA0B;YAC1B,0BAA0B;YAC1B,yBAAyB;YACzB,2BAA2B;YAC3B,qBAAqB;YACrB,cAAc;YACd,qBAAqB;YACrB,2BAA2B;YAC3B,uBAAuB;YACvB,eAAe,CAAA,EAAA,CAAA,CAAA;+GAOJ,mBAAmB,EAAA,CAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAJ/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,GAAG,uBAAuB,CAAC;AACrC,oBAAA,OAAO,EAAE,CAAC,GAAG,uBAAuB,CAAC;AACtC,iBAAA;;;ACvDD;;;;;;;AAOG;MAIU,qBAAqB,CAAA;AAQhC,IAAA,WAAA,GAAA;AANiB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAC/B,IAAgB,CAAA,gBAAA,GAAG,MAAM,CACxC,gBAAgB,EAChB,EAAE,IAAI,EAAE,IAAI,EAAE,CACf;QAGC,eAAe,CAAC,MAAK;YACnB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,MAAK;AACzC,gBAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE;AACjC,oBAAA,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC;;gBAGpE,IAAI,CAAC,gBAAgB,CAAC,OAAO,GAAG,IAAI,YAAY,EAAE;AAElD,gBAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CACxB,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAC7B,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CACjC;AACH,aAAC,CAAC;AACJ,SAAC,CAAC;;8GAtBO,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,YAAY;AACvB,iBAAA;;;ACfD;;AAEG;;ACFH;;AAEG;;;;"}