1 | {"version":3,"file":"geosearch.umd.js","sources":["../src/domUtils.ts","../src/constants.ts","../src/SearchElement.ts","../src/resultList.ts","../src/SearchControl.ts","../src/lib/debounce.ts","../src/providers/provider.ts","../src/providers/algoliaProvider.ts","../src/providers/bingProvider.ts","../src/providers/esriProvider.ts","../src/providers/peliasProvider.ts","../src/providers/geocodeEarthProvider.ts","../node_modules/@googlemaps/js-api-loader/dist/index.esm.js","../src/providers/googleProvider.ts","../src/providers/legacyGoogleProvider.ts","../src/providers/hereProvider.ts","../src/providers/openStreetMapProvider.ts","../src/providers/locationIQProvider.ts","../src/providers/openCageProvider.ts","../src/providers/mapBoxProvider.ts","../src/providers/geoApiFrProvider.ts"],"sourcesContent":["export function createElement<T extends HTMLElement = HTMLElement>(\n element: string,\n className: string | null = '',\n parent?: Element | null,\n attributes: { [key: string]: string | ((event: any) => void) } = {},\n): T {\n const el = document.createElement(element) as T;\n\n if (className) {\n el.className = className;\n }\n\n Object.keys(attributes).forEach((key) => {\n if (typeof attributes[key] === 'function') {\n // IE doesn't support startsWith\n const type = (\n key.indexOf('on') === 0 ? key.substr(2).toLowerCase() : key\n ) as keyof HTMLElementEventMap;\n el.addEventListener(type, attributes[key] as () => void);\n } else if (key === 'html') {\n el.innerHTML = attributes[key] as string;\n } else if (key === 'text') {\n el.innerText = attributes[key] as string;\n } else {\n el.setAttribute(key, attributes[key] as string);\n }\n });\n\n if (parent) {\n parent.appendChild(el);\n }\n\n return el;\n}\n\nexport function stopPropagation(event: Event) {\n event.preventDefault();\n event.stopPropagation();\n}\n\nexport function createScriptElement<T = object>(\n url: string,\n cb: string,\n): Promise<T> {\n const script = createElement('script', null, document.body);\n script.setAttribute('type', 'text/javascript');\n\n return new Promise((resolve) => {\n (window as any)[cb] = (json: T): void => {\n script.remove();\n delete (window as any)[cb];\n resolve(json);\n };\n\n script.setAttribute('src', url);\n });\n}\n\nexport const cx = (...classNames: (string | undefined)[]): string =>\n classNames.filter(Boolean).join(' ').trim();\n\nexport function addClassName(\n element: Element | null,\n className: string | string[],\n): void {\n if (!element || !element.classList) {\n return;\n }\n\n // IE doesn't support adding multiple classes at once :(\n const classNames = Array.isArray(className) ? className : [className];\n classNames.forEach((name) => {\n if (!element.classList.contains(name)) {\n element.classList.add(name);\n }\n });\n}\n\nexport function removeClassName(\n element: Element | null,\n className: string | string[],\n): void {\n if (!element || !element.classList) {\n return;\n }\n\n // IE doesn't support removing multiple classes at once :(\n const classNames = Array.isArray(className) ? className : [className];\n classNames.forEach((name) => {\n if (element.classList.contains(name)) {\n element.classList.remove(name);\n }\n });\n}\n\nexport function replaceClassName(\n element: Element,\n find: string,\n replace: string,\n): void {\n removeClassName(element, find);\n addClassName(element, replace);\n}\n","export const ENTER_KEY = 13;\nexport const ESCAPE_KEY = 27;\nexport const ARROW_DOWN_KEY = 40;\nexport const ARROW_UP_KEY = 38;\nexport const ARROW_LEFT_KEY = 37;\nexport const ARROW_RIGHT_KEY = 39;\n\nexport const SPECIAL_KEYS = [\n ENTER_KEY,\n ESCAPE_KEY,\n ARROW_DOWN_KEY,\n ARROW_UP_KEY,\n ARROW_LEFT_KEY,\n ARROW_RIGHT_KEY,\n];\n","import {\n createElement,\n addClassName,\n removeClassName,\n cx,\n stopPropagation,\n replaceClassName,\n} from './domUtils';\n\nimport { ESCAPE_KEY, ENTER_KEY } from './constants';\n\ninterface SearchElementProps {\n searchLabel?: string;\n handleSubmit: (args: { query: string }) => void;\n classNames?: {\n container?: string;\n form?: string;\n input?: string;\n };\n}\n\nexport default class SearchElement {\n container: HTMLDivElement;\n form: HTMLFormElement;\n input: HTMLInputElement;\n handleSubmit: (args: { query: string }) => void;\n hasError = false;\n\n constructor({\n handleSubmit,\n searchLabel,\n classNames = {},\n }: SearchElementProps) {\n this.container = createElement<HTMLDivElement>(\n 'div',\n cx('geosearch', classNames.container),\n );\n\n this.form = createElement<HTMLFormElement>(\n 'form',\n ['', classNames.form].join(' '),\n this.container,\n {\n autocomplete: 'none',\n onClick: stopPropagation,\n onDblClick: stopPropagation,\n touchStart: stopPropagation,\n touchEnd: stopPropagation,\n },\n );\n\n this.input = createElement<HTMLInputElement>(\n 'input',\n ['glass', classNames.input].join(' '),\n this.form,\n {\n type: 'text',\n placeholder: searchLabel || 'search',\n onInput: this.onInput,\n onKeyUp: (e) => this.onKeyUp(e),\n onKeyPress: (e) => this.onKeyPress(e),\n onFocus: this.onFocus,\n onBlur: this.onBlur,\n\n // For some reason, leaflet is blocking the 'touchstart', manually give\n // focus to the input onClick\n // > Ignored attempt to cancel a touchstart event with cancelable=false,\n // > for example because scrolling is in progress and cannot be interrupted.\n onClick: () => {\n this.input.focus();\n this.input.dispatchEvent(new Event('focus'));\n },\n },\n );\n\n this.handleSubmit = handleSubmit;\n }\n\n onFocus(): void {\n addClassName(this.form, 'active');\n }\n\n onBlur(): void {\n removeClassName(this.form, 'active');\n }\n\n async onSubmit(event: Event): Promise<void> {\n stopPropagation(event);\n replaceClassName(this.container, 'error', 'pending');\n\n await this.handleSubmit({ query: this.input.value });\n removeClassName(this.container, 'pending');\n }\n\n onInput(): void {\n if (!this.hasError) {\n return;\n }\n\n removeClassName(this.container, 'error');\n this.hasError = false;\n }\n\n onKeyUp(event: KeyboardEvent): void {\n if (event.keyCode !== ESCAPE_KEY) {\n return;\n }\n\n removeClassName(this.container, ['pending', 'active']);\n\n this.input.value = '';\n\n document.body.focus();\n document.body.blur();\n }\n\n onKeyPress(event: KeyboardEvent): void {\n if (event.keyCode !== ENTER_KEY) {\n return;\n }\n\n this.onSubmit(event);\n }\n\n setQuery(query: string): void {\n this.input.value = query;\n }\n}\n","import { createElement, addClassName, removeClassName, cx } from './domUtils';\nimport { SearchResult } from './providers/provider';\n\ninterface ResultListProps {\n handleClick: (args: { result: SearchResult }) => void;\n classNames?: {\n resultlist?: string;\n item?: string;\n notfound?: string;\n };\n notFoundMessage?: string;\n}\n\nexport default class ResultList {\n handleClick?: (args: { result: SearchResult }) => void;\n selected = -1;\n results: SearchResult[] = [];\n\n container: HTMLDivElement;\n resultItem: HTMLDivElement;\n notFoundMessage?: HTMLDivElement;\n\n constructor({\n handleClick,\n classNames = {},\n notFoundMessage,\n }: ResultListProps) {\n this.handleClick = handleClick;\n this.notFoundMessage = !!notFoundMessage\n ? createElement<HTMLDivElement>(\n 'div',\n cx(classNames.notfound),\n undefined,\n { html: notFoundMessage! },\n )\n : undefined;\n\n this.container = createElement<HTMLDivElement>(\n 'div',\n cx('results', classNames.resultlist),\n );\n this.container.addEventListener('click', this.onClick, true);\n\n this.resultItem = createElement<HTMLDivElement>('div', cx(classNames.item));\n }\n\n render(\n results: SearchResult[] = [],\n resultFormat: (args: { result: SearchResult }) => string,\n ): void {\n this.clear();\n\n results.forEach((result, idx) => {\n const child = this.resultItem.cloneNode(true) as HTMLDivElement;\n child.setAttribute('data-key', `${idx}`);\n child.innerHTML = resultFormat({ result });\n this.container.appendChild(child);\n });\n\n if (results.length > 0) {\n addClassName(this.container.parentElement, 'open');\n addClassName(this.container, 'active');\n } else if (!!this.notFoundMessage) {\n this.container.appendChild(this.notFoundMessage);\n addClassName(this.container.parentElement, 'open');\n }\n\n this.results = results;\n }\n\n select(index: number): SearchResult {\n // eslint-disable-next-line no-confusing-arrow\n Array.from(this.container.children).forEach((child, idx) =>\n idx === index\n ? addClassName(child, 'active')\n : removeClassName(child, 'active'),\n );\n\n this.selected = index;\n return this.results[index];\n }\n\n count(): number {\n return this.results ? this.results.length : 0;\n }\n\n clear(): void {\n this.selected = -1;\n\n while (this.container.lastChild) {\n this.container.removeChild(this.container.lastChild);\n }\n\n removeClassName(this.container.parentElement, 'open');\n removeClassName(this.container, 'active');\n }\n\n onClick = (event: Event): void => {\n if (typeof this.handleClick !== 'function') {\n return;\n }\n\n const target = event.target as HTMLDivElement;\n if (\n !target ||\n !this.container.contains(target) ||\n !target.hasAttribute('data-key')\n ) {\n return;\n }\n\n const idx = Number(target.getAttribute('data-key'));\n this.clear();\n this.handleClick({ result: this.results[idx] });\n };\n}\n","import * as L from 'leaflet';\nimport { ControlPosition, FeatureGroup, MarkerOptions, Map } from 'leaflet';\nimport SearchElement from './SearchElement';\nimport ResultList from './resultList';\nimport debounce from './lib/debounce';\n\nimport {\n createElement,\n addClassName,\n removeClassName,\n stopPropagation,\n} from './domUtils';\nimport {\n ENTER_KEY,\n SPECIAL_KEYS,\n ARROW_UP_KEY,\n ARROW_DOWN_KEY,\n ESCAPE_KEY,\n} from './constants';\nimport AbstractProvider, { SearchResult } from './providers/provider';\nimport { Provider } from './providers';\n\nconst defaultOptions: Omit<SearchControlProps, 'provider'> = {\n position: 'topleft',\n style: 'button',\n showMarker: true,\n showPopup: false,\n popupFormat: ({ result }) => `${result.label}`,\n resultFormat: ({ result }) => `${result.label}`,\n marker: {\n icon: L && L.Icon ? new L.Icon.Default() : undefined,\n draggable: false,\n },\n maxMarkers: 1,\n maxSuggestions: 5,\n retainZoomLevel: false,\n animateZoom: true,\n searchLabel: 'Enter address',\n clearSearchLabel: 'Clear search',\n notFoundMessage: '',\n messageHideDelay: 3000,\n zoomLevel: 18,\n classNames: {\n container: 'leaflet-bar leaflet-control leaflet-control-geosearch',\n button: 'leaflet-bar-part leaflet-bar-part-single',\n resetButton: 'reset',\n msgbox: 'leaflet-bar message',\n form: '',\n input: '',\n resultlist: '',\n item: '',\n notfound: 'leaflet-bar-notfound',\n },\n autoComplete: true,\n autoCompleteDelay: 250,\n autoClose: false,\n keepResult: false,\n updateMap: true,\n};\n\nconst UNINITIALIZED_ERR =\n 'Leaflet must be loaded before instantiating the GeoSearch control';\n\ninterface SearchControlProps {\n /** the provider to use for searching */\n provider: Provider;\n /** the leaflet position to render the element in */\n position: ControlPosition;\n /**\n * the stye of the search element\n * @default bar\n **/\n style: 'button' | 'bar';\n\n marker: MarkerOptions;\n maxMarkers: number;\n showMarker: boolean;\n showPopup: boolean;\n popupFormat<T = any>(args: {\n query: Selection;\n result: SearchResult<T>;\n }): string;\n\n resultFormat<T = any>(args: { result: SearchResult<T> }): string;\n\n searchLabel: string;\n clearSearchLabel: string;\n notFoundMessage: string;\n messageHideDelay: number;\n\n animateZoom: boolean;\n zoomLevel: number;\n retainZoomLevel: boolean;\n\n classNames: {\n container: string;\n button: string;\n resetButton: string;\n msgbox: string;\n form: string;\n input: string;\n resultlist: string;\n item: string;\n notfound: string;\n };\n\n autoComplete: boolean;\n autoCompleteDelay: number;\n maxSuggestions: number;\n autoClose: boolean;\n keepResult: boolean;\n updateMap: boolean;\n}\n\nexport type SearchControlOptions = Partial<SearchControlProps> & {\n provider: Provider;\n};\n\ninterface Selection {\n query: string;\n data?: SearchResult;\n}\n\ninterface SearchControl {\n options: Omit<SearchControlProps, 'provider'> & {\n provider?: SearchControlProps['provider'];\n };\n markers: FeatureGroup;\n searchElement: SearchElement;\n resultList: ResultList;\n classNames: SearchControlProps['classNames'];\n container: HTMLDivElement;\n input: HTMLInputElement;\n button: HTMLAnchorElement;\n resetButton: HTMLAnchorElement;\n map: Map;\n\n // [key: string]: any;\n initialize(options: SearchControlProps): void;\n onSubmit(result: Selection): void;\n open(): void;\n close(): void;\n onClick(event: Event): void;\n clearResults(event?: KeyboardEvent | null, force?: boolean): void;\n autoSearch(event: KeyboardEvent): void;\n selectResult(event: KeyboardEvent): void;\n showResult(result: SearchResult, query: Selection): void;\n addMarker(result: SearchResult, selection: Selection): void;\n centerMap(result: SearchResult): void;\n closeResults(): void;\n getZoom(): number;\n onAdd(map: Map): HTMLDivElement;\n onRemove(): SearchControl;\n}\n\n// @ts-ignore\nconst Control: SearchControl = {\n options: { ...defaultOptions },\n classNames: { ...defaultOptions.classNames },\n\n initialize(options: SearchControlOptions) {\n if (!L) {\n throw new Error(UNINITIALIZED_ERR);\n }\n\n if (!options.provider) {\n throw new Error('Provider is missing from options');\n }\n\n // merge given options with control defaults\n this.options = { ...defaultOptions, ...options };\n this.classNames = { ...this.classNames, ...options.classNames };\n\n this.markers = new L.FeatureGroup();\n this.classNames.container += ` leaflet-geosearch-${this.options.style}`;\n\n this.searchElement = new SearchElement({\n searchLabel: this.options.searchLabel,\n classNames: {\n container: this.classNames.container,\n form: this.classNames.form,\n input: this.classNames.input,\n },\n handleSubmit: (result) => this.onSubmit(result),\n });\n\n this.button = createElement<HTMLAnchorElement>(\n 'a',\n this.classNames.button,\n this.searchElement.container,\n {\n title: this.options.searchLabel,\n href: '#',\n onClick: (e) => this.onClick(e),\n },\n );\n\n L.DomEvent.disableClickPropagation(this.button);\n\n this.resetButton = createElement<HTMLAnchorElement>(\n 'button',\n this.classNames.resetButton,\n this.searchElement.form,\n {\n text: '×',\n 'aria-label': this.options.clearSearchLabel,\n onClick: () => {\n if (this.searchElement.input.value === '') {\n this.close();\n } else {\n this.clearResults(null, true);\n }\n },\n },\n );\n\n L.DomEvent.disableClickPropagation(this.resetButton);\n\n if (this.options.autoComplete) {\n this.resultList = new ResultList({\n handleClick: ({ result }): void => {\n this.searchElement.input.value = result.label;\n this.onSubmit({ query: result.label, data: result });\n },\n classNames: {\n resultlist: this.classNames.resultlist,\n item: this.classNames.item,\n notfound: this.classNames.notfound,\n },\n notFoundMessage: this.options.notFoundMessage,\n });\n\n this.searchElement.form.appendChild(this.resultList.container);\n\n this.searchElement.input.addEventListener(\n 'keyup',\n debounce(\n (e: KeyboardEvent) => this.autoSearch(e),\n this.options.autoCompleteDelay,\n ),\n true,\n );\n\n this.searchElement.input.addEventListener(\n 'keydown',\n (e: KeyboardEvent) => this.selectResult(e),\n true,\n );\n\n this.searchElement.input.addEventListener(\n 'keydown',\n (e: KeyboardEvent) => this.clearResults(e, true),\n true,\n );\n }\n\n this.searchElement.form.addEventListener(\n 'click',\n (e) => {\n e.preventDefault();\n },\n false,\n );\n },\n\n onAdd(map: Map) {\n const { showMarker, style } = this.options;\n\n this.map = map;\n if (showMarker) {\n this.markers.addTo(map);\n }\n\n if (style === 'bar') {\n const root = map\n .getContainer()\n .querySelector('.leaflet-control-container');\n\n this.container = createElement<HTMLDivElement>(\n 'div',\n 'leaflet-control-geosearch leaflet-geosearch-bar',\n );\n\n this.container.appendChild(this.searchElement.form);\n root!.appendChild(this.container);\n }\n\n L.DomEvent.disableClickPropagation(this.searchElement.form);\n return this.searchElement.container;\n },\n\n onRemove() {\n this.container?.remove();\n return this;\n },\n\n open() {\n const { container, input } = this.searchElement;\n addClassName(container, 'active');\n input.focus();\n },\n\n close() {\n const { container } = this.searchElement;\n removeClassName(container, 'active');\n this.clearResults();\n },\n\n onClick(event: Event) {\n event.preventDefault();\n event.stopPropagation();\n\n const { container } = this.searchElement;\n\n if (container.classList.contains('active')) {\n this.close();\n } else {\n this.open();\n }\n },\n\n selectResult(event) {\n if (\n [ENTER_KEY, ARROW_DOWN_KEY, ARROW_UP_KEY].indexOf(event.keyCode) === -1\n ) {\n return;\n }\n\n event.preventDefault();\n\n if (event.keyCode === ENTER_KEY) {\n const item = this.resultList.select(this.resultList.selected);\n this.onSubmit({ query: this.searchElement.input.value, data: item });\n return;\n }\n\n const max = this.resultList.count() - 1;\n if (max < 0) {\n return;\n }\n\n const { selected } = this.resultList;\n const next = event.keyCode === ARROW_DOWN_KEY ? selected + 1 : selected - 1;\n const idx = next < 0 ? max : next > max ? 0 : next;\n\n const item = this.resultList.select(idx);\n this.searchElement.input.value = item.label;\n },\n\n clearResults(event: KeyboardEvent | null, force = false) {\n if (event && event.keyCode !== ESCAPE_KEY) {\n return;\n }\n\n const { keepResult, autoComplete } = this.options;\n\n if (force || !keepResult) {\n this.searchElement.input.value = '';\n this.markers.clearLayers();\n }\n\n if (autoComplete) {\n this.resultList.clear();\n }\n },\n\n async autoSearch(event) {\n if (SPECIAL_KEYS.indexOf(event.keyCode) > -1) {\n return;\n }\n\n const query = (event.target as HTMLInputElement).value;\n const { provider } = this.options;\n\n if (query.length) {\n let results = await provider!.search({ query });\n results = results.slice(0, this.options.maxSuggestions);\n this.resultList.render(results, this.options.resultFormat);\n } else {\n this.resultList.clear();\n }\n },\n\n async onSubmit(query) {\n const { provider } = this.options;\n\n const results = await provider!.search(query);\n\n if (results && results.length > 0) {\n this.showResult(results[0], query);\n }\n },\n\n showResult(result, query) {\n const { autoClose, updateMap } = this.options;\n\n const markers = this.markers.getLayers();\n if (markers.length >= this.options.maxMarkers) {\n this.markers.removeLayer(markers[0]);\n }\n\n const marker = this.addMarker(result, query);\n\n if (updateMap) {\n this.centerMap(result);\n }\n\n this.map.fireEvent('geosearch/showlocation', {\n location: result,\n marker,\n });\n\n if (autoClose) {\n this.closeResults();\n }\n },\n\n closeResults() {\n const { container } = this.searchElement;\n\n if (container.classList.contains('active')) {\n removeClassName(container, 'active');\n }\n\n this.clearResults();\n },\n\n addMarker(result, query) {\n const { marker: options, showPopup, popupFormat } = this.options;\n const marker = new L.Marker([result.y, result.x], options);\n let popupLabel = result.label;\n\n if (typeof popupFormat === 'function') {\n popupLabel = popupFormat({ query, result });\n }\n\n marker.bindPopup(popupLabel);\n\n this.markers.addLayer(marker);\n\n if (showPopup) {\n marker.openPopup();\n }\n\n if (options.draggable) {\n marker.on('dragend', (args) => {\n this.map.fireEvent('geosearch/marker/dragend', {\n location: marker.getLatLng(),\n event: args,\n });\n });\n }\n\n return marker;\n },\n\n centerMap(result) {\n const { retainZoomLevel, animateZoom } = this.options;\n\n const resultBounds = result.bounds\n ? new L.LatLngBounds(result.bounds)\n : new L.LatLng(result.y, result.x).toBounds(10);\n\n const bounds = resultBounds.isValid()\n ? resultBounds\n : this.markers.getBounds();\n\n if (!retainZoomLevel && resultBounds.isValid() && !result.bounds) {\n this.map.setView(bounds.getCenter(), this.getZoom(), {\n animate: animateZoom,\n });\n } else if (!retainZoomLevel && resultBounds.isValid()) {\n this.map.fitBounds(bounds, { animate: animateZoom });\n } else {\n this.map.setView(bounds.getCenter(), this.getZoom(), {\n animate: animateZoom,\n });\n }\n },\n\n getZoom(): number {\n const { retainZoomLevel, zoomLevel } = this.options;\n return retainZoomLevel ? this.map.getZoom() : zoomLevel;\n },\n};\n\nexport default function SearchControl(...options: any[]) {\n if (!L) {\n throw new Error(UNINITIALIZED_ERR);\n }\n\n const LControl = L.Control.extend(Control);\n return new LControl(...options);\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nexport default function debounce(\n cb: (...args: any[]) => void,\n wait = 250,\n immediate = false,\n): (...args: any[]) => void {\n let timeout: ReturnType<typeof setTimeout> | null;\n\n return (...args: any[]): void => {\n if (timeout) {\n clearTimeout(timeout);\n }\n\n timeout = setTimeout(() => {\n timeout = null;\n\n if (!immediate) {\n cb(...args);\n }\n }, wait);\n\n if (immediate && !timeout) {\n cb(...args);\n }\n };\n}\n","export type PointTuple = [number, number];\nexport type BoundsTuple = [PointTuple, PointTuple];\n\nexport interface LatLng {\n lat: number;\n lng: number;\n}\n\nexport interface SearchResult<TRawResult = any> {\n x: number;\n y: number;\n label: string;\n bounds: BoundsTuple | null;\n raw: TRawResult;\n}\n\nexport interface ProviderParams {\n [key: string]: string | number | boolean;\n}\n\nexport interface ProviderOptions {\n params?: ProviderParams;\n}\n\nexport enum RequestType {\n SEARCH,\n REVERSE,\n}\n\nexport interface EndpointArgument {\n query: string | { [key: string]: string | number | boolean };\n type?: RequestType;\n}\n\nexport interface SearchArgument {\n query: string;\n}\n\nexport interface ParseArgument<TData> {\n data: TData;\n}\n\nexport interface Provider<TRequestResult, TRawResult> {\n options: ProviderOptions;\n\n endpoint(options: EndpointArgument): string;\n getParamString(params: ProviderParams): string;\n parse(response: ParseArgument<TRequestResult>): SearchResult<TRawResult>[];\n search(options: SearchArgument): Promise<SearchResult<TRawResult>[]>;\n}\n\nexport default abstract class AbstractProvider<\n TRequestResult = any,\n TRawResult = any,\n> implements Provider<TRequestResult, TRawResult>\n{\n options: ProviderOptions;\n\n constructor(options: ProviderOptions = {}) {\n this.options = options;\n }\n\n abstract endpoint(options: EndpointArgument): string;\n abstract parse(\n response: ParseArgument<TRequestResult>,\n ): SearchResult<TRawResult>[];\n\n getParamString(params: ProviderParams = {}): string {\n const set = { ...this.options.params, ...params };\n return Object.keys(set)\n .map(\n (key) => `${encodeURIComponent(key)}=${encodeURIComponent(set[key])}`,\n )\n .join('&');\n }\n\n getUrl(url: string, params?: ProviderParams): string {\n return `${url}?${this.getParamString(params)}`;\n }\n\n async search(options: SearchArgument): Promise<SearchResult<TRawResult>[]> {\n const url = this.endpoint({\n query: options.query,\n type: RequestType.SEARCH,\n });\n\n const request = await fetch(url);\n const json: TRequestResult = await request.json();\n return this.parse({ data: json });\n }\n}\n","import AbstractProvider, {\n LatLng,\n ParseArgument,\n SearchArgument,\n SearchResult,\n} from './provider';\n\ninterface RequestResult {\n hits: RawResult[];\n}\n\ninterface ValueMatch {\n value: string;\n matchLevel: string;\n matchedWords: string[];\n fullyHighlighted?: boolean;\n}\n\ninterface RawResult {\n country: { [key: string]: string };\n country_code: string;\n city: { [key: string]: string[] };\n importance: number;\n _tags: string[];\n postcode: string[];\n population: number;\n is_country: boolean;\n is_highway: boolean;\n is_city: boolean;\n is_popular: boolean;\n administrative: string[];\n admin_level: number;\n is_suburb: boolean;\n locale_names: {\n default: string[];\n };\n _geoloc: LatLng;\n objectID: string;\n _highlightResult: {\n country: {\n default: ValueMatch;\n [key: string]: ValueMatch;\n };\n city: {\n default: ValueMatch[];\n [key: string]: ValueMatch[];\n };\n postcode: ValueMatch[];\n administrative: ValueMatch[];\n locale_names: {\n default: ValueMatch[];\n };\n };\n}\n\ninterface ProviderOptions {\n key?: string;\n [key: string]: string | boolean | number | undefined;\n}\n\nexport default class Provider extends AbstractProvider<\n RequestResult,\n RawResult\n> {\n endpoint(): string {\n // No query, Algolia requires POST request\n return 'https://places-dsn.algolia.net/1/places/query';\n }\n\n /**\n * Find index of value with best match\n * (full, fallback to partial, and then to 0)\n */\n findBestMatchLevelIndex(vms: ValueMatch[]): number {\n const match =\n vms.find((vm) => vm.matchLevel === 'full') ||\n vms.find((vm) => vm.matchLevel === 'partial');\n return match ? vms.indexOf(match) : 0;\n }\n\n /**\n * Algolia not provides labels for hits, so\n * we will implement that builder ourselves\n */\n getLabel(result: RawResult): string {\n return [\n // Building + Street\n result.locale_names?.default[\n this.findBestMatchLevelIndex(\n result._highlightResult.locale_names.default,\n )\n ],\n // City\n result.city?.default[\n this.findBestMatchLevelIndex(result._highlightResult.city.default)\n ],\n // Administrative (State / Province)\n result.administrative[\n this.findBestMatchLevelIndex(result._highlightResult.administrative)\n ],\n // Zip code / Postal code\n result.postcode?.[\n this.findBestMatchLevelIndex(result._highlightResult.postcode)\n ],\n // Country\n result.country?.default,\n ]\n .filter(Boolean)\n .join(', ');\n }\n\n parse(response: ParseArgument<RequestResult>): SearchResult<RawResult>[] {\n return response.data.hits.map((r) => ({\n x: r._geoloc.lng,\n y: r._geoloc.lat,\n label: this.getLabel(r),\n bounds: null, // Algolia API does not provide bounds\n raw: r,\n }));\n }\n\n async search({ query }: SearchArgument): Promise<SearchResult<RawResult>[]> {\n const params = typeof query === 'string' ? { query } : query;\n\n const request = await fetch(this.endpoint(), {\n method: 'POST',\n body: JSON.stringify({\n ...this.options.params,\n ...params,\n }),\n });\n\n const json = await request.json();\n return this.parse({ data: json });\n }\n}\n","import AbstractProvider, {\n EndpointArgument,\n ParseArgument,\n SearchArgument,\n SearchResult,\n} from './provider';\nimport { createScriptElement } from '../domUtils';\n\nexport interface RequestResult {\n authenticationResultCode: string;\n brandLogoUri: string;\n copyright: string;\n resourceSets: {\n estimatedTotal: number;\n resources: RawResult[];\n }[];\n statusCode: number;\n statusDescription: string;\n traceId: string;\n}\n\nexport interface RawResult {\n __type: string;\n bbox: [number, number, number, number];\n name: string;\n point: { type: 'Point'; coordinates: [number, number] };\n address: {\n adminDistrict: string;\n adminDistrict2: string;\n countryRegion: string;\n formattedAddress: string;\n locality: string;\n };\n confidence: string;\n entityType: string;\n geocodePoints: [\n {\n type: 'Point';\n coordinates: [number, number];\n calculationMethod: string;\n usageTypes: string[];\n },\n ];\n matchCodes: string[];\n}\n\nexport default class BingProvider extends AbstractProvider<\n RequestResult,\n RawResult\n> {\n searchUrl = 'https://dev.virtualearth.net/REST/v1/Locations';\n\n endpoint({ query, jsonp }: EndpointArgument & { jsonp: string }): string {\n const params = typeof query === 'string' ? { q: query } : query;\n params.jsonp = jsonp;\n\n return this.getUrl(this.searchUrl, params);\n }\n\n parse(response: ParseArgument<RequestResult>): SearchResult<RawResult>[] {\n if (response.data.resourceSets.length === 0) {\n return [];\n }\n\n return response.data.resourceSets[0].resources.map((r) => ({\n x: r.point.coordinates[1],\n y: r.point.coordinates[0],\n label: r.address.formattedAddress,\n bounds: [\n [r.bbox[0], r.bbox[1]], // s, w\n [r.bbox[2], r.bbox[3]], // n, e\n ],\n raw: r,\n }));\n }\n\n async search({ query }: SearchArgument): Promise<SearchResult<RawResult>[]> {\n const jsonp = `BING_JSONP_CB_${Date.now()}`;\n const json = await createScriptElement<RequestResult>(\n this.endpoint({ query, jsonp }),\n jsonp,\n );\n\n return this.parse({ data: json });\n }\n}\n","import AbstractProvider, {\n EndpointArgument,\n ParseArgument,\n SearchResult,\n} from './provider';\n\ninterface RequestResult {\n spatialReference: { wkid: number; latestWkid: number };\n locations: RawResult[];\n}\n\ninterface RawResult {\n name: string;\n extent: {\n xmin: number;\n ymin: number;\n xmax: number;\n ymax: number;\n };\n feature: {\n geometry: { x: number; y: number };\n attributes: { Score: number; Addr_Type: string };\n };\n}\n\nexport default class EsriProvider extends AbstractProvider<\n RequestResult,\n RawResult\n> {\n searchUrl =\n 'https://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer/find';\n\n endpoint({ query }: EndpointArgument): string {\n const params = typeof query === 'string' ? { text: query } : query;\n params.f = 'json';\n\n return this.getUrl(this.searchUrl, params);\n }\n\n parse(result: ParseArgument<RequestResult>): SearchResult<RawResult>[] {\n return result.data.locations.map((r) => ({\n x: r.feature.geometry.x,\n y: r.feature.geometry.y,\n label: r.name,\n bounds: [\n [r.extent.ymin, r.extent.xmin], // s, w\n [r.extent.ymax, r.extent.xmax], // n, e\n ],\n raw: r,\n }));\n }\n}\n","import AbstractProvider, {\n EndpointArgument,\n ParseArgument,\n ProviderOptions,\n RequestType,\n SearchResult,\n} from './provider';\n\nexport interface RequestResult {\n geocoding: object;\n features: RawResult[];\n}\n\nexport type PeliasProviderOptions = {\n host?: string;\n} & ProviderOptions;\n\nexport interface RawResult {\n type: 'Feature';\n geometry: {\n type: 'Point';\n coordinates: [number, number];\n };\n bbox?: [number, number, number, number];\n properties: {\n id: string;\n source_id: string;\n gid: string;\n\n layer: string;\n source: string;\n\n label: string;\n name: string;\n\n accuracy: 'centroid' | 'point';\n confidence?: number;\n match_type?: 'exact' | 'interpolated' | 'fallback';\n\n borough?: string;\n borough_a?: string;\n borough_gid?: string;\n continent?: string;\n continent_a?: string;\n continent_gid?: string;\n country?: string;\n country_a?: string;\n country_gid?: string;\n county?: string;\n county_a?: string;\n county_gid?: string;\n dependency?: string;\n dependency_a?: string;\n dependency_gid?: string;\n empire?: string;\n empire_a?: string;\n empire_gid?: string;\n localadmin?: string;\n localadmin_a?: string;\n localadmin_gid?: string;\n locality?: string;\n locality_a?: string;\n locality_gid?: string;\n macrocounty?: string;\n macrocounty_a?: string;\n macrocounty_gid?: string;\n macroregion?: string;\n macroregion_a?: string;\n macroregion_gid?: string;\n marinearea?: string;\n marinearea_a?: string;\n marinearea_gid?: string;\n neighbourhood?: string;\n neighbourhood_a?: string;\n neighbourhood_gid?: string;\n ocean?: string;\n ocean_a?: string;\n ocean_gid?: string;\n postalcode?: string;\n postalcode_a?: string;\n postalcode_gid?: string;\n region?: string;\n region_a?: string;\n region_gid?: string;\n\n street?: string;\n housenumber?: string;\n\n addendum?: any;\n };\n}\n\nexport default class PeliasProvider extends AbstractProvider<\n RequestResult,\n RawResult\n> {\n // Pelias servers are self-hosted so you'll need to configure the 'options.host' string\n // to identify where requests to your running pelias/api server instance should be sent.\n // note: you SHOULD include the scheme, domain and port but NOT any path or parameters.\n // If you're using the Docker setup (https://github.com/pelias/docker)\n // then the default host of 'http://localhost:4000' will work out of the box.\n host: string;\n\n constructor(options: PeliasProviderOptions = {}) {\n super(options);\n this.host = options.host || 'http://localhost:4000';\n }\n\n /**\n * note: Pelias has four different query modes:\n * /v1/autocomplete: for partially completed inputs (such as when a user types)\n * /v1/search: for completed inputs (such as when geocoding a CSV file)\n * /v1/search/structured: for completed inputs with fields already separated\n * /v1/reverse: for finding places nearby/enveloping a point\n */\n endpoint({ query, type }: EndpointArgument) {\n switch (type) {\n // case RequestType.AUTOCOMPLETE:\n // const autocompleteParams = (typeof query === 'string') ? { text: query } : query;\n // return this.getUrl(`${this.host}/v1/autocomplete`, autocompleteParams);\n\n // case RequestType.FULLTEXT:\n // const searchParams = (typeof query === 'string') ? { text: query } : query;\n // return this.getUrl(`${this.host}/v1/search`, searchParams);\n\n // case RequestType.STRUCTURED:\n // const structuredParams = (typeof query === 'string') ? { address: query } : query;\n // return this.getUrl(`${this.host}/v1/search/structured`, structuredParams);\n\n case RequestType.REVERSE:\n const reverseParams = typeof query === 'string' ? {} : query;\n return this.getUrl(`${this.host}/v1/reverse`, reverseParams);\n\n // note: the default query mode is set to 'autocomplete'\n default:\n const autocompleteParams =\n typeof query === 'string' ? { text: query } : query;\n return this.getUrl(`${this.host}/v1/autocomplete`, autocompleteParams);\n }\n }\n\n parse(response: ParseArgument<RequestResult>): SearchResult<RawResult>[] {\n return response.data.features.map((feature) => {\n const res: SearchResult<RawResult> = {\n x: feature.geometry.coordinates[0],\n y: feature.geometry.coordinates[1],\n label: feature.properties.label,\n bounds: null,\n raw: feature,\n };\n\n // bbox values are only available for features derived from non-point geometries\n // geojson bbox format: [minX, minY, maxX, maxY]\n if (Array.isArray(feature.bbox) && feature.bbox.length === 4) {\n res.bounds = [\n [feature.bbox[1], feature.bbox[0]], // s, w\n [feature.bbox[3], feature.bbox[2]], // n, e\n ];\n }\n\n return res;\n });\n }\n}\n","import PeliasProvider, { PeliasProviderOptions } from './peliasProvider';\n\nexport default class GeocodeEarthProvider extends PeliasProvider {\n constructor(options: PeliasProviderOptions = {}) {\n options.host = 'https://api.geocode.earth';\n super(options);\n }\n}\n","// do not edit .js files directly - edit src/index.jst\n\n\n\nvar fastDeepEqual = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n\n/**\n * Copyright 2019 Google LLC. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at.\n *\n * Http://www.apache.org/licenses/LICENSE-2.0.\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst DEFAULT_ID = \"__googleMapsScriptId\";\n/**\n * The status of the [[Loader]].\n */\nvar LoaderStatus;\n(function (LoaderStatus) {\n LoaderStatus[LoaderStatus[\"INITIALIZED\"] = 0] = \"INITIALIZED\";\n LoaderStatus[LoaderStatus[\"LOADING\"] = 1] = \"LOADING\";\n LoaderStatus[LoaderStatus[\"SUCCESS\"] = 2] = \"SUCCESS\";\n LoaderStatus[LoaderStatus[\"FAILURE\"] = 3] = \"FAILURE\";\n})(LoaderStatus || (LoaderStatus = {}));\n/**\n * [[Loader]] makes it easier to add Google Maps JavaScript API to your application\n * dynamically using\n * [Promises](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise).\n * It works by dynamically creating and appending a script node to the the\n * document head and wrapping the callback function so as to return a promise.\n *\n * ```\n * const loader = new Loader({\n * apiKey: \"\",\n * version: \"weekly\",\n * libraries: [\"places\"]\n * });\n *\n * loader.load().then((google) => {\n * const map = new google.maps.Map(...)\n * })\n * ```\n */\nclass Loader {\n /**\n * Creates an instance of Loader using [[LoaderOptions]]. No defaults are set\n * using this library, instead the defaults are set by the Google Maps\n * JavaScript API server.\n *\n * ```\n * const loader = Loader({apiKey, version: 'weekly', libraries: ['places']});\n * ```\n */\n constructor({ apiKey, authReferrerPolicy, channel, client, id = DEFAULT_ID, language, libraries = [], mapIds, nonce, region, retries = 3, url = \"https://maps.googleapis.com/maps/api/js\", version, }) {\n this.CALLBACK = \"__googleMapsCallback\";\n this.callbacks = [];\n this.done = false;\n this.loading = false;\n this.errors = [];\n this.apiKey = apiKey;\n this.authReferrerPolicy = authReferrerPolicy;\n this.channel = channel;\n this.client = client;\n this.id = id || DEFAULT_ID; // Do not allow empty string\n this.language = language;\n this.libraries = libraries;\n this.mapIds = mapIds;\n this.nonce = nonce;\n this.region = region;\n this.retries = retries;\n this.url = url;\n this.version = version;\n if (Loader.instance) {\n if (!fastDeepEqual(this.options, Loader.instance.options)) {\n throw new Error(`Loader must not be called again with different options. ${JSON.stringify(this.options)} !== ${JSON.stringify(Loader.instance.options)}`);\n }\n return Loader.instance;\n }\n Loader.instance = this;\n }\n get options() {\n return {\n version: this.version,\n apiKey: this.apiKey,\n channel: this.channel,\n client: this.client,\n id: this.id,\n libraries: this.libraries,\n language: this.language,\n region: this.region,\n mapIds: this.mapIds,\n nonce: this.nonce,\n url: this.url,\n authReferrerPolicy: this.authReferrerPolicy,\n };\n }\n get status() {\n if (this.errors.length) {\n return LoaderStatus.FAILURE;\n }\n if (this.done) {\n return LoaderStatus.SUCCESS;\n }\n if (this.loading) {\n return LoaderStatus.LOADING;\n }\n return LoaderStatus.INITIALIZED;\n }\n get failed() {\n return this.done && !this.loading && this.errors.length >= this.retries + 1;\n }\n /**\n * CreateUrl returns the Google Maps JavaScript API script url given the [[LoaderOptions]].\n *\n * @ignore\n */\n createUrl() {\n let url = this.url;\n url += `?callback=${this.CALLBACK}`;\n if (this.apiKey) {\n url += `&key=${this.apiKey}`;\n }\n if (this.channel) {\n url += `&channel=${this.channel}`;\n }\n if (this.client) {\n url += `&client=${this.client}`;\n }\n if (this.libraries.length > 0) {\n url += `&libraries=${this.libraries.join(\",\")}`;\n }\n if (this.language) {\n url += `&language=${this.language}`;\n }\n if (this.region) {\n url += `®ion=${this.region}`;\n }\n if (this.version) {\n url += `&v=${this.version}`;\n }\n if (this.mapIds) {\n url += `&map_ids=${this.mapIds.join(\",\")}`;\n }\n if (this.authReferrerPolicy) {\n url += `&auth_referrer_policy=${this.authReferrerPolicy}`;\n }\n return url;\n }\n deleteScript() {\n const script = document.getElementById(this.id);\n if (script) {\n script.remove();\n }\n }\n /**\n * Load the Google Maps JavaScript API script and return a Promise.\n */\n load() {\n return this.loadPromise();\n }\n /**\n * Load the Google Maps JavaScript API script and return a Promise.\n *\n * @ignore\n */\n loadPromise() {\n return new Promise((resolve, reject) => {\n this.loadCallback((err) => {\n if (!err) {\n resolve(window.google);\n }\n else {\n reject(err.error);\n }\n });\n });\n }\n /**\n * Load the Google Maps JavaScript API script with a callback.\n */\n loadCallback(fn) {\n this.callbacks.push(fn);\n this.execute();\n }\n /**\n * Set the script on document.\n */\n setScript() {\n if (document.getElementById(this.id)) {\n // TODO wrap onerror callback for cases where the script was loaded elsewhere\n this.callback();\n return;\n }\n const url = this.createUrl();\n const script = document.createElement(\"script\");\n script.id = this.id;\n script.type = \"text/javascript\";\n script.src = url;\n script.onerror = this.loadErrorCallback.bind(this);\n script.defer = true;\n script.async = true;\n if (this.nonce) {\n script.nonce = this.nonce;\n }\n document.head.appendChild(script);\n }\n /**\n * Reset the loader state.\n */\n reset() {\n this.deleteScript();\n this.done = false;\n this.loading = false;\n this.errors = [];\n this.onerrorEvent = null;\n }\n resetIfRetryingFailed() {\n if (this.failed) {\n this.reset();\n }\n }\n loadErrorCallback(e) {\n this.errors.push(e);\n if (this.errors.length <= this.retries) {\n const delay = this.errors.length * Math.pow(2, this.errors.length);\n console.log(`Failed to load Google Maps script, retrying in ${delay} ms.`);\n setTimeout(() => {\n this.deleteScript();\n this.setScript();\n }, delay);\n }\n else {\n this.onerrorEvent = e;\n this.callback();\n }\n }\n setCallback() {\n window.__googleMapsCallback = this.callback.bind(this);\n }\n callback() {\n this.done = true;\n this.loading = false;\n this.callbacks.forEach((cb) => {\n cb(this.onerrorEvent);\n });\n this.callbacks = [];\n }\n execute() {\n this.resetIfRetryingFailed();\n if (this.done) {\n this.callback();\n }\n else {\n // short circuit and warn if google.maps is already loaded\n if (window.google && window.google.maps && window.google.maps.version) {\n console.warn(\"Google Maps already loaded outside @googlemaps/js-api-loader.\" +\n \"This may result in undesirable behavior as options and script parameters may not match.\");\n this.callback();\n return;\n }\n if (this.loading) ;\n else {\n this.loading = true;\n this.setCallback();\n this.setScript();\n }\n }\n }\n}\n\nexport { DEFAULT_ID, Loader, LoaderStatus };\n//# sourceMappingURL=index.esm.js.map\n","import AbstractProvider, {\n EndpointArgument,\n ParseArgument,\n ProviderOptions,\n SearchArgument,\n SearchResult,\n} from './provider';\nimport { Loader, LoaderOptions } from '@googlemaps/js-api-loader';\n\ninterface RequestResult {\n results: google.maps.GeocoderResult[];\n status?: google.maps.GeocoderStatus;\n}\n\ninterface GeocodeError {\n code: Exclude<google.maps.GeocoderStatus, google.maps.GeocoderStatus.OK>;\n endpoint: 'GEOCODER_GEOCODE';\n message: string;\n name: 'MapsRequestError';\n stack: string;\n}\n\nexport type GoogleProviderOptions = LoaderOptions & ProviderOptions;\n\nexport default class GoogleProvider extends AbstractProvider<\n RequestResult,\n google.maps.GeocoderResult\n> {\n loader: Promise<google.maps.Geocoder> | null = null;\n geocoder: google.maps.Geocoder | null = null;\n\n constructor(options: GoogleProviderOptions) {\n super(options);\n\n if (typeof window !== 'undefined') {\n this.loader = new Loader(options).load().then((google) => {\n const geocoder = new google.maps.Geocoder();\n this.geocoder = geocoder;\n return geocoder;\n });\n }\n }\n\n endpoint({ query }: EndpointArgument): never {\n throw new Error('Method not implemented.');\n }\n\n parse(\n response: ParseArgument<RequestResult>,\n ): SearchResult<google.maps.GeocoderResult>[] {\n return response.data.results.map((r) => {\n const { lat, lng } = r.geometry.location.toJSON();\n const { east, north, south, west } = r.geometry.viewport.toJSON();\n\n return {\n x: lng,\n y: lat,\n label: r.formatted_address,\n bounds: [\n [south, west],\n [north, east],\n ],\n raw: r,\n };\n });\n }\n\n async search(\n options: SearchArgument,\n ): Promise<SearchResult<google.maps.GeocoderResult>[]> {\n const geocoder = this.geocoder || (await this.loader);\n\n if (!geocoder) {\n throw new Error(\n 'GoogleMaps GeoCoder is not loaded. Are you trying to run this server side?',\n );\n }\n\n const response = await geocoder\n .geocode({ address: options.query }, (response) => ({\n results: response,\n }))\n .catch((e: GeocodeError) => {\n if (e.code !== 'ZERO_RESULTS') {\n console.error(`${e.code}: ${e.message}`);\n }\n return { results: [] };\n });\n\n return this.parse({ data: response });\n }\n}\n","import AbstractProvider, {\n EndpointArgument,\n LatLng,\n ParseArgument,\n SearchResult,\n} from './provider';\n\nexport interface RequestResult {\n results: RawResult[];\n status: string;\n}\n\nexport interface RawResult {\n address_components: {\n long_name: string;\n short_name: string;\n types: string[];\n }[];\n formatted_address: string;\n geometry: {\n location: LatLng;\n location_type: string;\n viewport: {\n northeast: LatLng;\n southwest: LatLng;\n };\n };\n place_id: string;\n plus_code: {\n compound_code: string;\n global_code: string;\n };\n types: string[];\n}\n\nexport default class LegacyGoogleProvider extends AbstractProvider<\n RequestResult,\n RawResult\n> {\n searchUrl = 'https://maps.googleapis.com/maps/api/geocode/json';\n\n endpoint({ query }: EndpointArgument) {\n const params = typeof query === 'string' ? { address: query } : query;\n return this.getUrl(this.searchUrl, params);\n }\n\n parse(result: ParseArgument<RequestResult>): SearchResult<RawResult>[] {\n return result.data.results.map((r) => ({\n x: r.geometry.location.lng,\n y: r.geometry.location.lat,\n label: r.formatted_address,\n bounds: [\n [r.geometry.viewport.southwest.lat, r.geometry.viewport.southwest.lng], // s, w\n [r.geometry.viewport.northeast.lat, r.geometry.viewport.northeast.lng], // n, e\n ],\n raw: r,\n }));\n }\n}\n","import AbstractProvider, {\n EndpointArgument,\n LatLng,\n ParseArgument,\n SearchResult,\n} from './provider';\n\nexport interface RequestResult {\n items: RawResult[];\n}\n\nexport interface RawResult {\n title: string;\n id: string;\n resultType: string;\n address: {\n label: string;\n countryCode: string;\n countryName: string;\n state: string;\n county: string;\n city: string;\n district: string;\n street: string;\n postalCode: string;\n houseNumber: string;\n };\n position: LatLng;\n access: LatLng[];\n categories: { id: string }[];\n contacts: { [key: string]: { value: string }[] }[];\n scoring: {\n queryScore: number;\n fieldScore: {\n placeName: number;\n };\n };\n}\n\nexport default class HereProvider extends AbstractProvider<\n RequestResult,\n RawResult\n> {\n searchUrl = 'https://geocode.search.hereapi.com/v1/autosuggest';\n\n endpoint({ query }: EndpointArgument): string {\n const params = typeof query === 'string' ? { q: query } : query;\n return this.getUrl(this.searchUrl, params);\n }\n\n parse(response: ParseArgument<RequestResult>): SearchResult<RawResult>[] {\n return response.data.items\n .filter((r) => r.position !== undefined)\n .map((r) => ({\n x: r.position.lng,\n y: r.position.lat,\n label: r.address.label,\n bounds: null,\n raw: r,\n }));\n }\n}\n","import AbstractProvider, {\n EndpointArgument,\n ParseArgument,\n ProviderOptions,\n RequestType,\n SearchResult,\n} from './provider';\nimport hasShape from '../lib/hasShape';\n\nexport type RequestResult = RawResult[];\n\nexport interface RawResult {\n place_id: string;\n license: string;\n osm_type: string;\n osm_id: number;\n boundingbox: [string, string, string, string];\n lat: string;\n lon: string;\n display_name: string;\n class: string;\n type: string;\n importance: number;\n icon?: string;\n}\n\nexport type OpenStreetMapProviderOptions = {\n searchUrl?: string;\n reverseUrl?: string;\n} & ProviderOptions;\n\nexport default class OpenStreetMapProvider extends AbstractProvider<\n RawResult[],\n RawResult\n> {\n searchUrl: string;\n reverseUrl: string;\n\n constructor(options: OpenStreetMapProviderOptions = {}) {\n super(options);\n\n const host = 'https://nominatim.openstreetmap.org';\n this.searchUrl = options.searchUrl || `${host}/search`;\n this.reverseUrl = options.reverseUrl || `${host}/reverse`;\n }\n\n endpoint({ query, type }: EndpointArgument): string {\n const params = typeof query === 'string' ? { q: query } : query;\n params.format = 'json';\n\n switch (type) {\n case RequestType.REVERSE:\n return this.getUrl(this.reverseUrl, params);\n\n default:\n return this.getUrl(this.searchUrl, params);\n }\n }\n\n parse(response: ParseArgument<RequestResult>): SearchResult<RawResult>[] {\n const records = Array.isArray(response.data)\n ? response.data\n : [response.data];\n\n return records.map((r) => ({\n x: Number(r.lon),\n y: Number(r.lat),\n label: r.display_name,\n bounds: [\n [parseFloat(r.boundingbox[0]), parseFloat(r.boundingbox[2])], // s, w\n [parseFloat(r.boundingbox[1]), parseFloat(r.boundingbox[3])], // n, e\n ],\n raw: r,\n }));\n }\n}\n","import OpenStreetMapProvider, {\n OpenStreetMapProviderOptions,\n} from './openStreetMapProvider';\n\nexport default class LocationIQProvider extends OpenStreetMapProvider {\n constructor(options: OpenStreetMapProviderOptions) {\n super({\n ...options,\n searchUrl: `https://locationiq.org/v1/search.php`,\n reverseUrl: `https://locationiq.org/v1/reverse.php`,\n });\n }\n}\n","import AbstractProvider, {\n EndpointArgument,\n LatLng,\n ParseArgument,\n SearchArgument,\n SearchResult,\n} from './provider';\n\nexport interface RequestResult {\n results: RawResult[];\n}\n\nexport interface RawResult {\n annotations: {\n DMS: { lat: string; lng: string };\n MGRS: string;\n Maidenhead: string;\n Mercator: { x: number; y: number };\n OSM: {\n edit_url: string;\n note_url: string;\n url: string;\n };\n UN_M49: {\n regions: { [key: string]: string };\n statistical_groupings: string[];\n };\n callingcode: number;\n currency: {\n alternate_symbols: string[];\n decimal_mark: string;\n html_entity: string;\n iso_code: string;\n iso_numeric: string;\n name: string;\n smallest_denomination: number;\n subunit: string;\n subunit_to_unit: number;\n symbol: string;\n symbol_first: number;\n thousands_separator: string;\n };\n flag: string;\n geohash: string;\n qibla: number;\n roadinfo: {\n drive_on: string;\n road: string;\n road_type: string;\n speed_in: string;\n };\n sun: {\n rise: {\n apparent: number;\n astronomical: number;\n civil: number;\n nautical: number;\n };\n set: {\n apparent: number;\n astronomical: number;\n civil: number;\n nautical: number;\n };\n };\n timezone: {\n name: string;\n now_in_dst: number;\n offset_sec: number;\n offset_string: string;\n short_name: string;\n };\n what3words: { words: string };\n };\n bounds: {\n northeast: LatLng;\n southwest: LatLng;\n };\n formatted: string;\n geometry: LatLng;\n}\n\nexport default class OpenCageProvider extends AbstractProvider<\n RequestResult,\n RawResult\n> {\n searchUrl = 'https://api.opencagedata.com/geocode/v1/json';\n\n endpoint({ query }: EndpointArgument) {\n const params = typeof query === 'string' ? { q: query } : query;\n params.format = 'json';\n\n return this.getUrl(this.searchUrl, params);\n }\n\n parse(response: ParseArgument<RequestResult>): SearchResult<RawResult>[] {\n return response.data.results.map((r) => ({\n x: r.geometry.lng,\n y: r.geometry.lat,\n label: r.formatted,\n bounds: [\n [r.bounds.southwest.lat, r.bounds.southwest.lng], // s, w\n [r.bounds.northeast.lat, r.bounds.northeast.lng], // n, e\n ],\n raw: r,\n }));\n }\n\n async search(options: SearchArgument): Promise<SearchResult<RawResult>[]> {\n // opencage returns a 400 error when query length < 2\n if (options.query.length < 2) {\n return [];\n }\n\n return super.search(options);\n }\n}\n","import AbstractProvider, {\n EndpointArgument,\n ParseArgument,\n ProviderOptions,\n SearchResult,\n BoundsTuple,\n} from './provider';\n\nexport type RequestResult = {\n features: RawResult[];\n};\nexport interface RawResult {\n center: [string, string];\n text: string;\n place_name: string;\n bbox: [string, string, string, string];\n}\n\nexport type MapBoxProviderOptions = {\n searchUrl?: string;\n reverseUrl?: string;\n} & ProviderOptions;\n\nexport default class MapBoxProvider extends AbstractProvider<\n RequestResult,\n RawResult\n> {\n searchUrl: string;\n\n constructor(options: MapBoxProviderOptions = {}) {\n super(options);\n\n const host = 'https://a.tiles.mapbox.com';\n this.searchUrl = options.searchUrl || `${host}/v4/geocode/mapbox.places/`;\n }\n\n endpoint({ query }: EndpointArgument): string {\n return this.getUrl(`${this.searchUrl}${query}.json`);\n }\n\n parse(response: ParseArgument<RequestResult>): SearchResult<RawResult>[] {\n const records = Array.isArray(response.data.features)\n ? response.data.features\n : [];\n\n return records.map((r) => {\n let bounds = null;\n if (r.bbox) {\n bounds = [\n [parseFloat(r.bbox[1]), parseFloat(r.bbox[0])], // s, w\n [parseFloat(r.bbox[3]), parseFloat(r.bbox[2])], // n, e\n ] as BoundsTuple;\n }\n\n return {\n x: Number(r.center[0]),\n y: Number(r.center[1]),\n label: r.place_name ? r.place_name : r.text,\n bounds,\n raw: r,\n };\n });\n }\n}\n","import AbstractProvider, {\n EndpointArgument,\n ParseArgument,\n ProviderOptions,\n SearchResult,\n RequestType,\n} from './provider';\n\nexport interface RequestResult {\n features: RawResult[];\n type: string;\n version: string;\n attribution: string;\n licence: string;\n query: string;\n limit: string;\n}\n\nexport interface RawResult {\n properties: {\n label: string;\n score: number;\n importance: number;\n x: number;\n y: number;\n housenumber: string;\n id: string;\n type: string;\n name: string;\n postcode: string;\n citycode: string;\n city: string;\n context: string;\n street: string;\n };\n type: string;\n geometry: {\n coordinates: number[];\n type: string;\n };\n}\n\nexport type GeoApiFrProviderOptions = {\n searchUrl?: string;\n reverseUrl?: string;\n} & ProviderOptions;\n\nexport default class GeoApiFrProvider extends AbstractProvider<\n RequestResult,\n RawResult\n> {\n searchUrl: string;\n reverseUrl: string;\n\n constructor(options: GeoApiFrProviderOptions = {}) {\n super(options);\n\n const host = 'https://api-adresse.data.gouv.fr';\n this.searchUrl = options.searchUrl || `${host}/search`;\n this.reverseUrl = options.reverseUrl || `${host}/reverse`;\n }\n\n endpoint({ query, type }: EndpointArgument) {\n const params = typeof query === 'string' ? { q: query } : query;\n\n switch (type) {\n case RequestType.REVERSE:\n return this.getUrl(this.reverseUrl, params);\n\n default:\n return this.getUrl(this.searchUrl, params);\n }\n }\n\n parse(result: ParseArgument<RequestResult>): SearchResult<RawResult>[] {\n return result.data.features.map((r) => ({\n x: r.geometry.coordinates[0],\n y: r.geometry.coordinates[1],\n label: r.properties.label,\n bounds: null,\n raw: r,\n }));\n }\n}\n"],"names":["element","className","parent","attributes","document","createElement","el","Object","keys","forEach","key","type","indexOf","substr","toLowerCase","addEventListener","innerHTML","innerText","setAttribute","appendChild","stopPropagation","event","preventDefault","filter","Boolean","join","trim","classList","Array","isArray","name","contains","add","removeClassName","remove","ARROW_DOWN_KEY","ARROW_UP_KEY","SPECIAL_KEYS","ENTER_KEY","SearchElement","_ref","_this","this","handleSubmit","searchLabel","_ref$classNames","classNames","container","form","input","hasError","cx","autocomplete","onClick","onDblClick","touchStart","touchEnd","placeholder","onInput","onKeyUp","e","onKeyPress","onFocus","onBlur","focus","dispatchEvent","addClassName","onSubmit","_this3","query","value","keyCode","body","blur","setQuery","ResultList","handleClick","notFoundMessage","selected","results","resultItem","target","hasAttribute","idx","Number","getAttribute","clear","result","notfound","undefined","html","resultlist","item","render","resultFormat","_this2","child","cloneNode","length","parentElement","select","index","from","children","count","lastChild","removeChild","defaultOptions","position","style","showMarker","showPopup","popupFormat","label","_ref2","marker","icon","L","Icon","Default","draggable","maxMarkers","maxSuggestions","retainZoomLevel","animateZoom","clearSearchLabel","messageHideDelay","zoomLevel","button","resetButton","msgbox","autoComplete","autoCompleteDelay","autoClose","keepResult","updateMap","UNINITIALIZED_ERR","options","initialize","cb","wait","immediate","timeout","provider","Error","_extends","markers","FeatureGroup","searchElement","title","href","DomEvent","disableClickPropagation","text","close","clearResults","resultList","_ref3","data","autoSearch","args","slice","call","arguments","clearTimeout","setTimeout","apply","selectResult","onAdd","map","_this$options","addTo","root","getContainer","querySelector","onRemove","_this$container","open","_this$searchElement","max","next","force","_this$options2","clearLayers","Promise","resolve","_temp2","search","reject","_this5","showResult","_this$options3","getLayers","removeLayer","addMarker","centerMap","fireEvent","location","closeResults","_this6","_this$options4","Marker","y","x","popupLabel","bindPopup","addLayer","openPopup","on","getLatLng","_this$options5","bounds","LatLngBounds","LatLng","toBounds","resultBounds","isValid","getBounds","setView","getCenter","getZoom","animate","fitBounds","_this$options6","SearchControl","LControl","Control","extend","RequestType","AbstractProvider","getParamString","params","set","encodeURIComponent","getUrl","url","endpoint","SEARCH","fetch","request","json","parse","findBestMatchLevelIndex","vms","find","vm","matchLevel","match","getLabel","_result$locale_names","_result$city","_result$postcode","_result$country","locale_names","_highlightResult","city","administrative","postcode","country","response","hits","r","_geoloc","lng","lat","raw","method","JSON","stringify","then","searchUrl","q","jsonp","resourceSets","resources","point","coordinates","address","formattedAddress","bbox","script","Date","now","createScriptElement","window","EsriProvider","f","locations","feature","geometry","extent","ymin","xmin","ymax","xmax","PeliasProvider","_AbstractProvider","host","_inheritsLoose","REVERSE","reverseParams","features","res","properties","_PeliasProvider","fastDeepEqual","equal","a","b","constructor","i","RegExp","source","flags","valueOf","prototype","toString","hasOwnProperty","DEFAULT_ID","LoaderStatus","Loader","apiKey","authReferrerPolicy","channel","client","id","language","libraries","mapIds","nonce","region","retries","version","CALLBACK","callbacks","done","loading","errors","instance","status","FAILURE","SUCCESS","LOADING","INITIALIZED","failed","createUrl","deleteScript","getElementById","load","loadPromise","loadCallback","err","error","google","fn","push","execute","setScript","callback","src","onerror","loadErrorCallback","bind","defer","async","head","reset","onerrorEvent","resetIfRetryingFailed","delay","Math","pow","console","log","setCallback","__googleMapsCallback","maps","warn","GoogleProvider","loader","geocoder","Geocoder","toJSON","_r$geometry$location$","_r$geometry$viewport$","viewport","formatted_address","south","west","north","east","geocode","code","message","_this2$geocoder2","southwest","northeast","items","reverseUrl","format","lon","display_name","parseFloat","boundingbox","_OpenStreetMapProvide","LocationIQProvider","OpenStreetMapProvider","formatted","center","place_name"],"mappings":"+5CAAM,WACJA,EACAC,EACAC,EACAC,QAAmE,IAFnEF,IAAAA,EAA2B,SAE3BE,IAAAA,IAAAA,EAAiE,CAAE,GAEnE,MAAWC,SAASC,cAAcL,GA0BlC,OAxBIC,IACFK,EAAGL,UAAYA,GAGjBM,OAAOC,KAAKL,GAAYM,QAAQ,SAACC,GAC/B,GAA+B,qBAATA,GAAqB,CAEzC,IAAMC,EACkB,IAAtBD,EAAIE,QAAQ,MAAcF,EAAIG,OAAO,GAAGC,cAAgBJ,EAE1DJ,EAAGS,iBAAiBJ,EAAMR,EAAWO,GACtC,KAAkB,SAARA,EACTJ,EAAGU,UAAYb,EAAWO,GACT,SAARA,EACTJ,EAAGW,UAAYd,EAAWO,GAE1BJ,EAAGY,aAAaR,EAAKP,EAAWO,GAEnC,GAEGR,GACFA,EAAOiB,YAAYb,IAItB,UAEKc,EAA0BC,GAC9BA,EAAMC,iBACND,EAAMD,iBACP,CAoBM,MAAW,WAAA,MAChB,GAAWG,MAAAA,KAAAA,WAAAA,OAAOC,SAASC,KAAK,KAAKC,MADrB,EAGF,WACd1B,EACAC,GAEKD,GAAYA,EAAQ2B,YAKNC,MAAMC,QAAQ5B,GAAaA,EAAY,CAACA,IAChDQ,QAAQ,SAACqB,GACb9B,EAAQ2B,UAAUI,SAASD,IAC9B9B,EAAQ2B,UAAUK,IAAIF,EAEzB,EACF,CAEeG,SAAAA,EACdjC,EACAC,GAEKD,GAAYA,EAAQ2B,YAKNC,MAAMC,QAAQ5B,GAAaA,EAAY,CAACA,IAChDQ,QAAQ,SAACqB,GACd9B,EAAQ2B,UAAUI,SAASD,IAC7B9B,EAAQ2B,UAAUO,OAAOJ,EAE5B,EACF,CC7FM,QAAkB,GAEZK,EAAiB,GACLC,EAAG,GAIHC,EAAG,CAC1BC,EAPwB,GASxBH,EACAC,EAP4B,GACC,ICgBVG,0BAOnB,SAIqBA,EAAAC,GAAA,IAAAC,EAAAC,OAHnBC,EAAAA,aACAC,EAEmBJ,EAFnBI,YAEmBC,EAAAL,EADnBM,WAAAA,OAAa,IAAAD,EAAA,CACM,SAVrBE,eAUqB,EAAAL,KATrBM,UACAC,EAAAA,KAAAA,WACAN,EAAAA,KAAAA,kBACAO,EAAAA,KAAAA,UAAW,EAOTR,KAAKK,UAAY1C,EACf,MACA8C,EAAG,YAAaL,EAAWC,YAG7BL,KAAKM,KAAO3C,EACV,OACA,CAAC,GAAIyC,EAAWE,MAAMvB,KAAK,KAC3BiB,KAAKK,UACL,CACEK,aAAc,OACdC,QAASjC,EACTkC,WAAYlC,EACZmC,WAAYnC,EACZoC,SAAUpC,IAIdsB,KAAKO,MAAQ5C,EACX,QACA,CAAC,QAASyC,EAAWG,OAAOxB,KAAK,KACjCiB,KAAKM,KACL,CACErC,KAAM,OACN8C,YAAab,GAAe,SAC5Bc,QAAShB,KAAKgB,QACdC,QAAS,SAACC,GAAD,SAAYD,QAAQC,EAApB,EACTC,WAAY,SAACD,UAAUnB,EAACoB,WAAWD,EAAvB,EACZE,QAASpB,KAAKoB,QACdC,OAAQrB,KAAKqB,OAMbV,QAAS,WACPZ,EAAKQ,MAAMe,QACXvB,EAAKQ,MAAMgB,cAAc,UAAU,SACpC,IAILvB,KAAKC,aAAeA,CACrB,4BAEDmB,QAAA,WACEI,EAAaxB,KAAKM,KAAM,SACzB,IAEDe,OAAA,WACE9B,EAAgBS,KAAKM,KAAM,SAC5B,IAEKmB,SAAS9C,SAAAA,GAAY,IAAA,IAAA+C,EAER1B,KAFQ,OACzBtB,EAAgBC,GFalBY,EAJAjC,EERmBoE,EAAKrB,UAAW,SFanCmB,EAAalE,EEb+B,2BAEpCoE,EAAKzB,aAAa,CAAE0B,MAAOD,EAAKnB,MAAMqB,yBAC5CrC,EAAgBmC,EAAKrB,UAAW,UALP,yCFU3B/C,KEFA0D,QAAA,WACOhB,KAAKQ,WAIVjB,EAAgBS,KAAKK,UAAW,SAChCL,KAAKQ,UAAW,EACjB,EAEDS,EAAAA,QAAA,SAAQtC,GDtGgB,KCuGlBA,EAAMkD,UAIVtC,EAAgBS,KAAKK,UAAW,CAAC,UAAW,WAE5CL,KAAKO,MAAMqB,MAAQ,GAEnBlE,SAASoE,KAAKR,QACd5D,SAASoE,KAAKC,OACf,IAEDZ,WAAA,SAAWxC,GACLA,EAAMkD,UAAYjC,GAItBI,KAAKyB,SAAS9C,EACf,EAEDqD,EAAAA,SAAA,SAASL,GACP3B,KAAKO,MAAMqB,MAAQD,CACpB,OCjHkBM,0BASnB,SAIkBA,EAAAnC,GAAA,IAAAC,EAAAC,KAAAkC,EAAApC,EAHhBoC,YAGgB/B,EAAAL,EAFhBM,WAAAA,OAAa,IAAAD,EAAA,CAEG,EADhBgC,EAAAA,IAAAA,gBACgBnC,KAZlBkC,iBAYkB,EAAAlC,KAXlBoC,UAAY,EAWMpC,KAVlBqC,QAA0B,GAURrC,KARlBK,eACAiC,EAAAA,KAAAA,gBACAH,EAAAA,KAAAA,qBA6EAxB,EAAAA,KAAAA,QAAU,SAAChC,GACT,GAAgC,mBAArBoB,EAAKmC,YAAhB,CAIA,IAAMK,EAAS5D,EAAM4D,OACrB,GACGA,GACAxC,EAAKM,UAAUhB,SAASkD,IACxBA,EAAOC,aAAa,YAHvB,CAQA,IAAMC,EAAMC,OAAOH,EAAOI,aAAa,aACvC5C,EAAK6C,QACL7C,EAAKmC,YAAY,CAAEW,OAAQ9C,EAAKsC,QAAQI,IAJvC,CATA,CAcF,EAvFCzC,KAAKkC,YAAcA,EACnBlC,KAAKmC,gBAAoBA,EACrBxE,EACE,MACA8C,EAAGL,EAAW0C,eACdC,EACA,CAAEC,KAAMb,SAEVY,EAEJ/C,KAAKK,UAAY1C,EACf,MACA8C,EAAG,UAAWL,EAAW6C,aAE3BjD,KAAKK,UAAUhC,iBAAiB,QAAS2B,KAAKW,SAAS,GAEvDX,KAAKsC,WAAa3E,EAA8B,MAAO8C,EAAGL,EAAW8C,MACtE,KAEDC,EAAAA,EAAAA,iBAAAA,EAAAA,OAAA,SACEd,EACAe,GAAwD,IAAAC,EAAArD,UAAA,IADxDqC,IAAAA,EAA0B,IAG1BrC,KAAK4C,QAELP,EAAQtE,QAAQ,SAAC8E,EAAQJ,GACvB,IAAWa,EAAGD,EAAKf,WAAWiB,WAAU,GACxCD,EAAM9E,aAAa,WAAeiE,GAAAA,GAClCa,EAAMhF,UAAY8E,EAAa,CAAEP,OAAAA,IACjCQ,EAAKhD,UAAU5B,YAAY6E,EAC5B,GAEGjB,EAAQmB,OAAS,GACnBhC,EAAaxB,KAAKK,UAAUoD,cAAe,QAC3CjC,EAAaxB,KAAKK,UAAW,WAClBL,KAAKmC,kBAChBnC,KAAKK,UAAU5B,YAAYuB,KAAKmC,iBAChCX,EAAaxB,KAAKK,UAAUoD,cAAe,SAG7CzD,KAAKqC,QAAUA,CAChB,IAEDqB,OAAA,SAAOC,GASL,OAPAzE,MAAM0E,KAAK5D,KAAKK,UAAUwD,UAAU9F,QAAQ,SAACuF,EAAOb,GAClDA,OAAAA,IAAQkB,EACJnC,EAAa8B,EAAO,UACpB/D,EAAgB+D,EAAO,SAHe,GAM5CtD,KAAKoC,SAAWuB,EACJtB,KAAAA,QAAQsB,EACrB,EAEDG,EAAAA,MAAA,WACE,OAAYzB,KAAAA,QAAUrC,KAAKqC,QAAQmB,OAAS,CAC7C,EAEDZ,EAAAA,MAAA,WAGE,IAFA5C,KAAKoC,UAAY,EAEVpC,KAAKK,UAAU0D,WACpB/D,KAAKK,UAAU2D,YAAYhE,KAAKK,UAAU0D,WAG5CxE,EAAgBS,KAAKK,UAAUoD,cAAe,QAC9ClE,EAAgBS,KAAKK,UAAW,SACjC,OCzEiB4D,EAAyC,CAC3DC,SAAU,UACVC,MAAO,SACPC,YAAY,EACZC,WAAW,EACXC,YAAa,SAAAxE,GAAmB+C,MAAAA,GAAhBA,EAAAA,OAAuB0B,KAA1B,EACbnB,aAAc,SAAAoB,GAAmB3B,MAAAA,GAAnB2B,EAAG3B,OAAuB0B,KAA1B,EACdE,OAAQ,CACNC,KAAMC,GAAKA,EAAEC,KAAO,IAAID,EAAEC,KAAKC,aAAY9B,EAC3C+B,WAAW,GAEbC,WAAY,EACZC,eAAgB,EAChBC,iBAAiB,EACjBC,aAAa,EACbhF,YAAa,gBACbiF,iBAAkB,eAClBhD,gBAAiB,GACjBiD,iBAAkB,IAClBC,UAAW,GACXjF,WAAY,CACVC,UAAW,wDACXiF,OAAQ,2CACRC,YAAa,QACbC,OAAQ,sBACRlF,KAAM,GACNC,MAAO,GACP0C,WAAY,GACZC,KAAM,GACNJ,SAAU,wBAEZ2C,cAAc,EACdC,kBAAmB,IACnBC,WAAW,EACXC,YAAY,EACZC,WAAW,GAGPC,EACJ,sEA+F6B,CAC7BC,QAAc9B,EAAAA,CAAAA,EAAAA,GACd7D,WAAiB6D,EAAAA,CAAAA,EAAAA,EAAe7D,YAEhC4F,WAAWD,SAAAA,GAA6B,IC9JxCE,EACAC,EACAC,EAEAC,ED0JwCrG,EAAAC,KACtC,IAAK2E,EACH,MAAM,UAAUmB,GAGlB,IAAKC,EAAQM,SACX,UAAMC,MAAU,oCAIlBtG,KAAK+F,QAAe9B,EAAAA,CAAAA,EAAAA,EAAmB8B,GACvC/F,KAAKI,WAAkBmG,EAAA,CAAA,EAAAvG,KAAKI,WAAe2F,EAAQ3F,YAEnDJ,KAAKwG,QAAU,MAAMC,aACrBzG,KAAKI,WAAWC,WAAmC,sBAAAL,KAAK+F,QAAQ5B,MAEhEnE,KAAK0G,cAAgB,IAAA7G,EAAkB,CACrCK,YAAaF,KAAK+F,QAAQ7F,YAC1BE,WAAY,CACVC,UAAWL,KAAKI,WAAWC,UAC3BC,KAAMN,KAAKI,WAAWE,KACtBC,MAAOP,KAAKI,WAAWG,OAEzBN,aAAc,SAAC4C,GAAW,OAAA9C,EAAK0B,SAASoB,EAA1B,IAGhB7C,KAAKsF,OAAS3H,EACZ,IACAqC,KAAKI,WAAWkF,OAChBtF,KAAK0G,cAAcrG,UACnB,CACEsG,MAAO3G,KAAK+F,QAAQ7F,YACpB0G,KAAM,IACNjG,QAAS,SAACO,UAAUnB,EAACY,QAAQO,EAApB,IAIbyD,EAAEkC,SAASC,wBAAwB9G,KAAKsF,QAExCtF,KAAKuF,YAAc5H,EACjB,SACAqC,KAAKI,WAAWmF,YAChBvF,KAAK0G,cAAcpG,KACnB,CACEyG,KAAM,IACN,aAAc/G,KAAK+F,QAAQZ,iBAC3BxE,QAAS,WACgC,KAAnCZ,EAAK2G,cAAcnG,MAAMqB,MAC3B7B,EAAKiH,QAELjH,EAAKkH,aAAa,MAAM,EAE3B,IAILtC,EAAEkC,SAASC,wBAAwB9G,KAAKuF,aAEpCvF,KAAK+F,QAAQN,eACfzF,KAAKkH,WAAa,IAAIjF,EAAW,CAC/BC,YAAa,SAAqBiF,GAAA,IAAAtE,EAAAsE,EAAlBtE,OACd9C,EAAK2G,cAAcnG,MAAMqB,MAAQiB,EAAO0B,MACxCxE,EAAK0B,SAAS,CAAEE,MAAOkB,EAAO0B,MAAO6C,KAAMvE,GAC5C,EACDzC,WAAY,CACV6C,WAAYjD,KAAKI,WAAW6C,WAC5BC,KAAMlD,KAAKI,WAAW8C,KACtBJ,SAAU9C,KAAKI,WAAW0C,UAE5BX,gBAAiBnC,KAAK+F,QAAQ5D,kBAGhCnC,KAAK0G,cAAcpG,KAAK7B,YAAYuB,KAAKkH,WAAW7G,WAEpDL,KAAK0G,cAAcnG,MAAMlC,iBACvB,SCzON4H,ED2OQ,SAAC/E,GAAqB,OAAAnB,EAAKsH,WAAWnG,EAAtC,OC1ORgF,KAAAA,ED2OQlG,KAAK+F,QAAQL,qBC3OrBQ,EAAO,UACU,IAAjBC,IAAAA,GAAY,GAIoB,WAAA,IAAAmB,EAAA,GAAAC,MAAAC,KAAAC,WAC1BrB,GACFsB,aAAatB,GAGfA,EAAUuB,WAAW,WACnBvB,EAAU,KAELD,GACHF,EAAE2B,aAAIN,EAET,EAAEpB,GAECC,IAAcC,GAChBH,EAAE2B,aAAIN,EAET,IDwNK,GAGFtH,KAAK0G,cAAcnG,MAAMlC,iBACvB,UACA,SAAC6C,GAAD,OAA0BnB,EAAC8H,aAAa3G,EAAxC,GACA,GAGFlB,KAAK0G,cAAcnG,MAAMlC,iBACvB,UACA,SAAC6C,GAAD,OAA0BnB,EAACkH,aAAa/F,GAAG,EAA3C,GACA,IAIJlB,KAAK0G,cAAcpG,KAAKjC,iBACtB,QACA,SAAC6C,GACCA,EAAEtC,gBACH,GACD,EAEH,EAEDkJ,MAAMC,SAAAA,GACJ,IAAAC,EAA8BhI,KAAK+F,QAA3B3B,EAAR4D,EAAQ5D,WAAYD,EAAAA,EAAAA,MAOpB,GALAnE,KAAK+H,IAAMA,EACP3D,GACFpE,KAAKwG,QAAQyB,MAAMF,GAGP,QAAV5D,EAAiB,CACnB,IAAU+D,EAAGH,EACVI,eACAC,cAAc,8BAEjBpI,KAAKK,UAAY1C,EACf,MACA,mDAGFqC,KAAKK,UAAU5B,YAAYuB,KAAK0G,cAAcpG,MAC9C4H,EAAMzJ,YAAYuB,KAAKK,UACxB,CAGD,OADAsE,EAAEkC,SAASC,wBAAwB9G,KAAK0G,cAAcpG,MAC1CoG,KAAAA,cAAcrG,SAC3B,EAEDgI,SAAQ,WAAA,IAAAC,EAEN,OADA,cAAKjI,YAALiI,EAAgB9I,SACTQ,IACR,EAEDuI,gBACE,IAAAC,EAA6BxI,KAAK0G,cAAfnG,EAAAA,EAAAA,MACnBiB,EADAgH,EAAQnI,UACgB,UACxBE,EAAMe,OACP,EAED0F,MAAK,WAEHzH,EADsBS,KAAK0G,cAAnBrG,UACmB,UAC3BL,KAAKiH,cACN,EAEDtG,iBAAQhC,GACNA,EAAMC,iBACND,EAAMD,kBAEgBsB,KAAK0G,cAAnBrG,UAEMpB,UAAUI,SAAS,UAC/BW,KAAKgH,QAELhH,KAAKuI,MAER,EAEDV,aArK6B,SAqKhBlJ,GACX,IACwE,IAAtE,CAACiB,EAAWH,EAAgBC,GAAcxB,QAAQS,EAAMkD,SAO1D,GAFAlD,EAAMC,iBAEFD,EAAMkD,UAAYjC,EAAtB,CAMA,IAAS6I,EAAGzI,KAAKkH,WAAWpD,QAAU,EACtC,KAAI2E,EAAM,GAAV,CAIA,IAAArG,EAAqBpC,KAAKkH,WAAlB9E,WACKzD,EAAMkD,UAAYpC,EAAiB2C,EAAW,EAAIA,EAAW,IAG7DpC,KAAKkH,WAAWxD,OAFjBgF,EAAO,EAAID,EAAMC,EAAOD,EAAM,EAAIC,GAG9C1I,KAAK0G,cAAcnG,MAAMqB,MAAQsB,EAAKqB,KAPrC,CALA,KAJD,CACE,MAAavE,KAAKkH,WAAWxD,OAAO1D,KAAKkH,WAAW9E,UACpDpC,KAAKyB,SAAS,CAAEE,MAAO3B,KAAK0G,cAAcnG,MAAMqB,MAAOwF,KAAMlE,GAE9D,CAaF,EAED+D,aAAatI,SAAAA,EAA6BgK,GACxC,QADwCA,IAAAA,IAAAA,GAAQ,IAC5ChK,GH7VkB,KG6VTA,EAAMkD,QAAnB,CAIA,MAAqC7B,KAAK+F,QAAtBN,EAApBmD,EAAoBnD,cAEhBkD,GAFI/C,EAAAA,aAGN5F,KAAK0G,cAAcnG,MAAMqB,MAAQ,GACjC5B,KAAKwG,QAAQqC,eAGXpD,GACFzF,KAAKkH,WAAWtE,OAVjB,CAYF,EAEKyE,WAlNuB,SAkNZ1I,GAAK,IAAA,IAAA+C,EAMC1B,KALrB,GAAIL,EAAazB,QAAQS,EAAMkD,UAAY,EACzC,OACDiH,QAAAC,UAED,IAAWpH,EAAIhD,EAAM4D,OAA4BX,QAC5BF,EAAKqE,QAAlBM,SANY2C,EAAA,WAAA,GAQhBrH,EAAM6B,OACY6C,OAAAA,QAAAA,QAAAA,EAAU4C,OAAO,CAAEtH,MAAAA,KAAnCU,KAAAA,SAAAA,GACJA,EAAUA,EAAQkF,MAAM,EAAG7F,EAAKqE,QAAQf,gBACxCtD,EAAKwF,WAAW/D,OAAOd,EAASX,EAAKqE,QAAQ3C,aAX3B,GAalB1B,EAAKwF,WAAWtE,QAbE,gEAlNO,CAAA,MAAA1B,GAAA,OAAA4H,QAAAI,OAAAhI,EAAA,CAAA,EAmOvBO,SAnOuB,SAmOdE,GAnOc,UAoON3B,KADH,OAAA8I,QAAAC,QACGI,EAAKpD,QAAlBM,SAEwB4C,OAAOtH,IAAjCU,KAAAA,SAAAA,GAEFA,GAAWA,EAAQmB,OAAS,GAC9B2F,EAAKC,WAAW/G,EAAQ,GAAIV,EAE/B,GA3O4B,oCA6O7ByH,WA7O6B,SA6OlBvG,EAAQlB,GACjB,IAAA0H,EAAiCrJ,KAAK+F,QAA9BJ,IAAAA,UAAWE,EAAnBwD,EAAmBxD,UAENW,EAAGxG,KAAKwG,QAAQ8C,YACzB9C,EAAQhD,QAAUxD,KAAK+F,QAAQhB,YACjC/E,KAAKwG,QAAQ+C,YAAY/C,EAAQ,IAGnC,IAAY/B,EAAGzE,KAAKwJ,UAAU3G,EAAQlB,GAElCkE,GACF7F,KAAKyJ,UAAU5G,GAGjB7C,KAAK+H,IAAI2B,UAAU,yBAA0B,CAC3CC,SAAU9G,EACV4B,OAAAA,IAGEkB,GACF3F,KAAK4J,cAER,EAEDA,aArQ6B,WAsQ3B,IAAQvJ,EAAcL,KAAK0G,cAAnBrG,UAEJA,EAAUpB,UAAUI,SAAS,WAC/BE,EAAgBc,EAAW,UAG7BL,KAAKiH,cACN,EAEDuC,UA/Q6B,SA+QnB3G,EAAQlB,GAChB,IAAAkI,EAAA7J,KAAA8J,EAAoD9J,KAAK+F,QAAzCA,EAAhB+D,EAAQrF,OAAiBJ,EAAAA,EAAAA,UAAWC,EAAAA,EAAAA,YAC9BG,EAAS,IAAKE,EAACoF,OAAO,CAAClH,EAAOmH,EAAGnH,EAAOoH,GAAIlE,GACpCmE,EAAGrH,EAAO0B,MAuBxB,MArB2B,mBAAhBD,IACT4F,EAAa5F,EAAY,CAAE3C,MAAAA,EAAOkB,OAAAA,KAGpC4B,EAAO0F,UAAUD,GAEjBlK,KAAKwG,QAAQ4D,SAAS3F,GAElBJ,GACFI,EAAO4F,YAGLtE,EAAQjB,WACVL,EAAO6F,GAAG,UAAW,SAAChD,GACpBuC,EAAK9B,IAAI2B,UAAU,2BAA4B,CAC7CC,SAAUlF,EAAO8F,YACjB5L,MAAO2I,GAEV,GAGI7C,CACR,EAEDgF,mBAAU5G,GACR,IAAyC2H,EAAAxK,KAAK+F,QAAtCd,EAARuF,EAAQvF,gBAAiBC,EAAAA,EAAAA,cAEJrC,EAAO4H,OACxB,MAAMC,aAAa7H,EAAO4H,QAC1B,IAAI9F,EAAEgG,OAAO9H,EAAOmH,EAAGnH,EAAOoH,GAAGW,SAAS,IAElCH,EAAGI,EAAaC,UACxBD,EACA7K,KAAKwG,QAAQuE,aAEZ9F,GAAmB4F,EAAaC,YAAcjI,EAAO4H,QAI9CxF,IAAmB4F,EAAaC,UAH1C9K,KAAK+H,IAAIiD,QAAQP,EAAOQ,YAAajL,KAAKkL,UAAW,CACnDC,QAASjG,IAGXlF,KAAK+H,IAAIqD,UAAUX,EAAQ,CAAEU,QAASjG,GAMzC,EAEDgG,QAAO,WACL,IAAuCG,EAAArL,KAAK+F,QAAnBV,EAAzBgG,EAAyBhG,UACzB,OADQJ,EAAAA,gBACiBjF,KAAK+H,IAAImD,UAAY7F,CAC/C,GAGW,SAAAiG,IACZ,IAAK3G,EACH,MAAM,UAAUmB,GAGlB,IAAMyF,EAAW5G,EAAE6G,QAAQC,OAAOD,GAClC,OAAWD,EAAAA,EACZ,GAAAhE,MAAAC,KAAAC,WAAA,EErdD,SAAYiE,GACVA,EAAAA,EAAA,OAAA,GAAA,SACAA,EAAAA,EAAA,QAAA,GAAA,SAFF,CAAA,CAAYA,IAAAA,EAGX,CAHsB,IA2BOC,8BAO5B,WAAY5F,QAA6B,IAA7BA,IAAAA,EAA2B,CAAA,QAFvCA,aAEyC,EACvC/F,KAAK+F,QAAUA,CAChB,4BAOD6F,eAAA,SAAeC,QAAAA,IAAAA,IAAAA,EAAyB,CAAE,GACxC,IAASC,EAAAvF,EAAA,CAAA,EAAQvG,KAAK+F,QAAQ8F,OAAWA,GACzC,cAAc/N,KAAKgO,GAChB/D,IACC,SAAC/J,UAA6B+N,mBAAC/N,GAA/B,IAAuC+N,mBAAmBD,EAAI9N,GAA9D,GAEDe,KAAK,IACT,IAEDiN,OAAA,SAAOC,EAAaJ,GAClB,SAAiB,IAAA7L,KAAK4L,eAAeC,EACtC,IAEK5C,OAAOlD,SAAAA,OACC,IAAA1C,EAAArD,KAANiM,EAAM5I,EAAK6I,SAAS,CACxBvK,MAAOoE,EAAQpE,MACf1D,KAAMyN,EAAYS,SAHc,OAMZC,QAAAA,QAAAA,MAAMH,kBAAtBI,GAN4B,OAAAvD,QAAAC,QAOCsD,EAAQC,QAArCA,KAAAA,SAAAA,GACN,OAAOjJ,EAAKkJ,MAAM,CAAEnF,KAAMkF,GARQ,EAAA,kJCpBAX,SAIpCO,SAAA,WAEE,MAAO,+CACR,EAMDM,EAAAA,wBAAA,SAAwBC,GACtB,MACEA,EAAIC,KAAK,SAACC,GAAD,MAA0B,WAAfC,UAAX,IACTH,EAAIC,KAAK,SAACC,GAAD,MAA0B,YAAhBA,EAACC,UAAX,GACX,OAAYC,EAAGJ,EAAIvO,QAAQ2O,GAAS,CACrC,IAMDC,SAAA,SAASjK,GACP,IAAAkK,EAAAC,EAAAC,EAAAC,EAAA,MAAO,QAELrK,EAAAA,EAAOsK,qBAAPJ,EACE,QAAA/M,KAAKwM,wBACH3J,EAAOuK,iBAAiBD,aAD1B,UAHG,OAAAH,EAQLnK,EAAOwK,WARF,EAQLL,UACEhN,KAAKwM,wBAAwB3J,EAAOuK,iBAAiBC,eAGvDxK,EAAOyK,eACLtN,KAAKwM,wBAAwB3J,EAAOuK,iBAAiBE,iBAblD,SAgBLzK,EAAO0K,eAhBF,EAgBLN,EACEjN,KAAKwM,wBAAwB3J,EAAOuK,iBAAiBG,WAGvD,OApBKL,EAoBLrK,EAAO2K,cAAP,EAAAN,EAAA,SAECrO,OAAOC,SACPC,KAAK,KACT,IAEDwN,MAAA,SAAMkB,GACJ,IAAA1N,EAAAC,KAAA,OAAeyN,EAACrG,KAAKsG,KAAK3F,IAAI,SAAC4F,GAAD,MAAQ,CACpC1D,EAAG0D,EAAEC,QAAQC,IACb7D,EAAG2D,EAAEC,QAAQE,IACbvJ,MAAOxE,EAAK+M,SAASa,GACrBlD,OAAQ,KACRsD,IAAKJ,EALuB,EAO/B,EAEK1E,EAAAA,OAAStH,SAAAA,GAAAA,IAAAA,IAAAA,UAGe,IAAAD,EAAA1B,KAFhB6L,EAAoB,iBAAjBlK,EAA4B,CAAEA,MAAAA,GAAUA,EADnB,OAAAmH,QAAAC,QAGdqD,MAAM1K,EAAKwK,WAAY,CAC3C8B,OAAQ,OACRlM,KAAMmM,KAAKC,UACN3H,EAAA,GAAA7E,EAAKqE,QAAQ8F,OACbA,OAP6BsC,KAAA,SAG9B9B,GAH8B,OAAAvD,QAAAC,QAWjBsD,EAAQC,QAXS6B,KAAA,SAW9B7B,GACN,OAAO5K,EAAK6K,MAAM,CAAEnF,KAAMkF,GAZU,EAarC,EA1EmCX,OAAAA,GAAAA,OAAAA,QAAAA,OAAAA,EAAAA,CAAAA,EAAAA,CAAAA,EAAAA,qHCRpCO,iDAFAkC,UAAY,iDAEZlC,CAAAA,QAAAA,IAAAA,EAAAA,EAAAA,iBAAAA,EAAAA,SAAA,SAAApM,OAA+D6B,EAAA7B,EAApD6B,MACGkK,EAAoB,iBAAVlK,EAAqB,CAAE0M,EAAG1M,GAAUA,EAG1D,OAFAkK,EAAOyC,MAFsDxO,EAA7CwO,MAIJtC,KAAAA,OAAOhM,KAAKoO,UAAWvC,EACpC,EAEDU,EAAAA,MAAA,SAAMkB,GACJ,OAA0C,IAAtCA,EAASrG,KAAKmH,aAAa/K,OACtB,GAGFiK,EAASrG,KAAKmH,aAAa,GAAGC,UAAUzG,IAAI,SAAC4F,GAAD,MAAQ,CACzD1D,EAAG0D,EAAEc,MAAMC,YAAY,GACvB1E,EAAG2D,EAAEc,MAAMC,YAAY,GACvBnK,MAAOoJ,EAAEgB,QAAQC,iBACjBnE,OAAQ,CACN,CAACkD,EAAEkB,KAAK,GAAIlB,EAAEkB,KAAK,IACnB,CAAClB,EAAEkB,KAAK,GAAIlB,EAAEkB,KAAK,KAErBd,IAAKJ,EAR4C,EAUpD,EAEK1E,EAAAA,OAAStH,SAAAA,GAAAA,IRnCfsK,EACAhG,EAEY6I,EQgCGnN,EAAAA,EAAAA,UAGX,IAAAD,EAAA1B,KAFSsO,EAAA,iBAAoBS,KAAKC,MADA,OAEjBC,QAAAA,SRrCrBhD,EQsCIvK,EAAKwK,SAAS,CAAEvK,MAAAA,EAAO2M,MAAAA,IRrC3BrI,EQsCIqI,ERpCQQ,EAAGnR,EAAc,SAAU,KAAMD,SAASoE,MACtDgN,EAAOtQ,aAAa,OAAQ,mBAErB,IAAAsK,QAAY,SAACC,GACjBmG,OAAejJ,GAAM,SAACqG,GACrBwC,EAAOtP,gBACe0P,OAACjJ,GACvB8C,EAAQuD,EACT,EAEDwC,EAAOtQ,aAAa,MAAOyN,EAC5B,KQqBqCkC,KAAA,SAE9B7B,GAKN,OAAO5K,EAAK6K,MAAM,CAAEnF,KAAMkF,GAPU,0CA9BEX,GCrBrBwD,eAInBf,SAAAA,GAAAA,SAAAA,IAAAA,IAAAA,IAAAA,EAAAA,EAAAA,UAAAA,OAAAA,EAAAA,IAAAA,MAAAA,GAAAA,EAAAA,EAAAA,EAAAA,EAAAA,IAAAA,EAAAA,GAAAA,UAAAA,GAGAlC,OAHAkC,EAAAA,EAAAA,KAAAA,MAAAA,EAAAA,CAAAA,MAAAA,OAAAA,KAAAA,MAAAA,UACE,2EAEFlC,CAAAA,CAHAkC,EAAAA,EAAAA,GAGAlC,IAAAA,EAAAA,EAAAA,UAPwCP,OAOxCO,EAAAA,SAAA,SAAoCpM,GAAA,IAAA6B,EAAA7B,EAAzB6B,MACHkK,EAA0B,iBAAVlK,EAAqB,CAAEoF,KAAMpF,GAAUA,EAG7D,OAFAkK,EAAOuD,EAAI,OAECpD,KAAAA,OAAOhM,KAAKoO,UAAWvC,EACpC,EAEDU,EAAAA,MAAA,SAAM1J,GACJ,OAAOA,EAAOuE,KAAKiI,UAAUtH,IAAI,SAAC4F,GAAO,MAAA,CACvC1D,EAAG0D,EAAE2B,QAAQC,SAAStF,EACtBD,EAAG2D,EAAE2B,QAAQC,SAASvF,EACtBzF,MAAOoJ,EAAEvO,KACTqL,OAAQ,CACN,CAACkD,EAAE6B,OAAOC,KAAM9B,EAAE6B,OAAOE,MACzB,CAAC/B,EAAE6B,OAAOG,KAAMhC,EAAE6B,OAAOI,OAE3B7B,IAAKJ,EAR0B,EAUlC,EAzBuChC,CAAAA,CAIxCyC,CAJwCzC,GCmErBkE,eAWnB,SAAAC,GAAA,SAAAD,EAAY9J,SAAmC,YAAA,IAAnCA,IAAAA,EAAiC,CAAA,IAC3ChG,EAAMgG,EAAAA,KAAAA,KAAAA,IADuC/F,MAF/C+P,UAE+C,EAE7ChQ,EAAKgQ,KAAOhK,EAAQgK,MAAQ,wBAC7BhQ,CAAA,CAHDiQ,EAAAH,EAAAC,OAYA5D,EAAAA,EAAAA,iBAAAA,EAAAA,SAAA,SAAApM,GAAW6B,IAAAA,IAAAA,MACT,OADwC7B,EAAxB7B,OAcEyN,EAACuE,QAEHjE,KAAAA,OAAUhM,KAAK+P,KAAmBG,cADP,iBAAVvO,EAAqB,CAA5B,EAAiCA,GAOhD3B,KAAKgM,OAAUhM,KAAK+P,wBADR,iBAAVpO,EAAqB,CAAEoF,KAAMpF,GAAUA,EAGrD,IAED4K,MAAA,SAAMkB,GACJ,OAAOA,EAASrG,KAAK+I,SAASpI,IAAI,SAACuH,GACjC,IAAMc,EAA+B,CACnCnG,EAAGqF,EAAQC,SAASb,YAAY,GAChC1E,EAAGsF,EAAQC,SAASb,YAAY,GAChCnK,MAAO+K,EAAQe,WAAW9L,MAC1BkG,OAAQ,KACRsD,IAAKuB,GAYP,OAPIpQ,MAAMC,QAAQmQ,EAAQT,OAAiC,IAAxBS,EAAQT,KAAKrL,SAC9C4M,EAAI3F,OAAS,CACX,CAAC6E,EAAQT,KAAK,GAAIS,EAAQT,KAAK,IAC/B,CAACS,EAAQT,KAAK,GAAIS,EAAQT,KAAK,MAI5BuB,CACR,EACF,IA3DD,CAX0CzE,8BCzF1C,SAAY5F,EAAAA,GAAmC,YAAA,IAAnCA,IAAAA,EAAiC,CAAA,GAC3CA,EAAQgK,KAAO,4BACfO,EAAA9I,KAAAxH,KAAM+F,IACP/F,IAAA,eAJ+C6P,CAAAA,EAAAA,GCE9CU,EAAgB,SAASC,EAAMC,EAAGC,GACpC,GAAID,IAAMC,EAAG,OAAO,EAEpB,GAAID,GAAKC,GAAiB,iBAALD,GAA6B,iBAALC,EAAe,CAC1D,GAAID,EAAEE,cAAgBD,EAAEC,YAAa,OAAO,EAE5C,IAAInN,EAAQoN,EAAG9S,EACf,GAAIoB,MAAMC,QAAQsR,GAAI,CAEpB,IADAjN,EAASiN,EAAEjN,SACGkN,EAAElN,OAAQ,OAAO,EAC/B,IAAKoN,EAAIpN,EAAgB,GAARoN,KACf,IAAKJ,EAAMC,EAAEG,GAAIF,EAAEE,IAAK,OAAO,EACjC,OAAO,CACR,CAID,GAAIH,EAAEE,cAAgBE,OAAQ,OAAOJ,EAAEK,SAAWJ,EAAEI,QAAUL,EAAEM,QAAUL,EAAEK,MAC5E,GAAIN,EAAEO,UAAYnT,OAAOoT,UAAUD,QAAS,OAAOP,EAAEO,YAAcN,EAAEM,UACrE,GAAIP,EAAES,WAAarT,OAAOoT,UAAUC,SAAU,OAAOT,EAAES,aAAeR,EAAEQ,WAIxE,IADA1N,GADA1F,EAAOD,OAAOC,KAAK2S,IACLjN,UACC3F,OAAOC,KAAK4S,GAAGlN,OAAQ,OAAO,EAE7C,IAAKoN,EAAIpN,EAAgB,GAARoN,KACf,IAAK/S,OAAOoT,UAAUE,eAAe3J,KAAKkJ,EAAG5S,EAAK8S,IAAK,OAAO,EAEhE,IAAKA,EAAIpN,EAAgB,GAARoN,KAAY,CAC3B,IAAI5S,EAAMF,EAAK8S,GAEf,IAAKJ,EAAMC,EAAEzS,GAAM0S,EAAE1S,IAAO,OAAO,CACpC,CAED,OAAO,CACR,CAGD,OAAOyS,GAAIA,GAAKC,GAAIA,CACtB,EAiBA,MAAMU,EAAa,uBAInB,IAAIC,GACJ,SAAWA,GACPA,EAAaA,EAA0B,YAAI,GAAK,cAChDA,EAAaA,EAAsB,QAAI,GAAK,UAC5CA,EAAaA,EAAsB,QAAI,GAAK,UAC5CA,EAAaA,EAAsB,QAAI,GAAK,SAC/C,CALD,CAKGA,IAAiBA,EAAe,CAAE,IAoBrC,MAAMC,EAUFX,aAAYY,OAAEA,EAAMC,mBAAEA,EAAkBC,QAAEA,EAAOC,OAAEA,EAAMC,GAAEA,EAAKP,EAAUQ,SAAEA,EAAQC,UAAEA,EAAY,GAAEC,OAAEA,EAAMC,MAAEA,EAAKC,OAAEA,EAAMC,QAAEA,EAAU,EAAChG,IAAEA,EAAM,0CAAyCiG,QAAEA,IAmBvL,GAlBAlS,KAAKmS,SAAW,uBAChBnS,KAAKoS,UAAY,GACjBpS,KAAKqS,MAAO,EACZrS,KAAKsS,SAAU,EACftS,KAAKuS,OAAS,GACdvS,KAAKuR,OAASA,EACdvR,KAAKwR,mBAAqBA,EAC1BxR,KAAKyR,QAAUA,EACfzR,KAAK0R,OAASA,EACd1R,KAAK2R,GAAKA,GAAMP,EAChBpR,KAAK4R,SAAWA,EAChB5R,KAAK6R,UAAYA,EACjB7R,KAAK8R,OAASA,EACd9R,KAAK+R,MAAQA,EACb/R,KAAKgS,OAASA,EACdhS,KAAKiS,QAAUA,EACfjS,KAAKiM,IAAMA,EACXjM,KAAKkS,QAAUA,EACXZ,EAAOkB,SAAU,CACjB,IAAKjC,EAAcvQ,KAAK+F,QAASuL,EAAOkB,SAASzM,SAC7C,MAAM,IAAIO,MAAM,2DAA2D2H,KAAKC,UAAUlO,KAAK+F,gBAAgBkI,KAAKC,UAAUoD,EAAOkB,SAASzM,YAElJ,OAAOuL,EAAOkB,QACjB,CACDlB,EAAOkB,SAAWxS,IACrB,CACG+F,cACA,MAAO,CACHmM,QAASlS,KAAKkS,QACdX,OAAQvR,KAAKuR,OACbE,QAASzR,KAAKyR,QACdC,OAAQ1R,KAAK0R,OACbC,GAAI3R,KAAK2R,GACTE,UAAW7R,KAAK6R,UAChBD,SAAU5R,KAAK4R,SACfI,OAAQhS,KAAKgS,OACbF,OAAQ9R,KAAK8R,OACbC,MAAO/R,KAAK+R,MACZ9F,IAAKjM,KAAKiM,IACVuF,mBAAoBxR,KAAKwR,mBAEhC,CACGiB,aACA,OAAIzS,KAAKuS,OAAO/O,OACL6N,EAAaqB,QAEpB1S,KAAKqS,KACEhB,EAAasB,QAEpB3S,KAAKsS,QACEjB,EAAauB,QAEjBvB,EAAawB,WACvB,CACGC,aACA,OAAO9S,KAAKqS,OAASrS,KAAKsS,SAAWtS,KAAKuS,OAAO/O,QAAUxD,KAAKiS,QAAU,CAC7E,CAMDc,YACI,IAAI9G,EAAMjM,KAAKiM,IA6Bf,OA5BAA,GAAO,aAAajM,KAAKmS,WACrBnS,KAAKuR,SACLtF,GAAO,QAAQjM,KAAKuR,UAEpBvR,KAAKyR,UACLxF,GAAO,YAAYjM,KAAKyR,WAExBzR,KAAK0R,SACLzF,GAAO,WAAWjM,KAAK0R,UAEvB1R,KAAK6R,UAAUrO,OAAS,IACxByI,GAAO,cAAcjM,KAAK6R,UAAU9S,KAAK,QAEzCiB,KAAK4R,WACL3F,GAAO,aAAajM,KAAK4R,YAEzB5R,KAAKgS,SACL/F,GAAO,WAAWjM,KAAKgS,UAEvBhS,KAAKkS,UACLjG,GAAO,MAAMjM,KAAKkS,WAElBlS,KAAK8R,SACL7F,GAAO,YAAYjM,KAAK8R,OAAO/S,KAAK,QAEpCiB,KAAKwR,qBACLvF,GAAO,yBAAyBjM,KAAKwR,sBAElCvF,CACV,CACD+G,eACI,MAAMlE,EAASpR,SAASuV,eAAejT,KAAK2R,IACxC7C,GACAA,EAAOtP,QAEd,CAID0T,OACI,OAAOlT,KAAKmT,aACf,CAMDA,cACI,OAAO,IAAIrK,QAAQ,CAACC,EAASG,KACzBlJ,KAAKoT,aAAcC,IACVA,EAIDnK,EAAOmK,EAAIC,OAHXvK,EAAQmG,OAAOqE,OAIlB,EACH,EAET,CAIDH,aAAaI,GACTxT,KAAKoS,UAAUqB,KAAKD,GACpBxT,KAAK0T,SACR,CAIDC,YACI,GAAIjW,SAASuV,eAAejT,KAAK2R,IAG7B,YADA3R,KAAK4T,WAGT,MAAM3H,EAAMjM,KAAK+S,YACXjE,EAASpR,SAASC,cAAc,UACtCmR,EAAO6C,GAAK3R,KAAK2R,GACjB7C,EAAO7Q,KAAO,kBACd6Q,EAAO+E,IAAM5H,EACb6C,EAAOgF,QAAU9T,KAAK+T,kBAAkBC,KAAKhU,MAC7C8O,EAAOmF,OAAQ,EACfnF,EAAOoF,OAAQ,EACXlU,KAAK+R,QACLjD,EAAOiD,MAAQ/R,KAAK+R,OAExBrU,SAASyW,KAAK1V,YAAYqQ,EAC7B,CAIDsF,QACIpU,KAAKgT,eACLhT,KAAKqS,MAAO,EACZrS,KAAKsS,SAAU,EACftS,KAAKuS,OAAS,GACdvS,KAAKqU,aAAe,IACvB,CACDC,wBACQtU,KAAK8S,QACL9S,KAAKoU,OAEZ,CACDL,kBAAkB7S,GAEd,GADAlB,KAAKuS,OAAOkB,KAAKvS,GACblB,KAAKuS,OAAO/O,QAAUxD,KAAKiS,QAAS,CACpC,MAAMsC,EAAQvU,KAAKuS,OAAO/O,OAASgR,KAAKC,IAAI,EAAGzU,KAAKuS,OAAO/O,QAC3DkR,QAAQC,IAAI,kDAAkDJ,SAC9D5M,WAAW,KACP3H,KAAKgT,eACLhT,KAAK2T,WAAW,EACjBY,EACN,MAEGvU,KAAKqU,aAAenT,EACpBlB,KAAK4T,UAEZ,CACDgB,cACI1F,OAAO2F,qBAAuB7U,KAAK4T,SAASI,KAAKhU,KACpD,CACD4T,WACI5T,KAAKqS,MAAO,EACZrS,KAAKsS,SAAU,EACftS,KAAKoS,UAAUrU,QAASkI,IACpBA,EAAGjG,KAAKqU,aAAa,GAEzBrU,KAAKoS,UAAY,EACpB,CACDsB,UAEI,GADA1T,KAAKsU,wBACDtU,KAAKqS,KACLrS,KAAK4T,eAEJ,CAED,GAAI1E,OAAOqE,QAAUrE,OAAOqE,OAAOuB,MAAQ5F,OAAOqE,OAAOuB,KAAK5C,QAI1D,OAHAwC,QAAQK,KAAK,6JAEb/U,KAAK4T,WAGL5T,KAAKsS,UAELtS,KAAKsS,SAAU,EACftS,KAAK4U,cACL5U,KAAK2T,YAEZ,CACJ,EClSgBqB,IAAAA,eAOnB,SAAAlF,GAAA,SAAAkF,EAAYjP,GAA8B,IAAAhG,EAAA,OACxCA,EAAMgG,EAAAA,KAAAA,KAAAA,IADkC/F,MAH1CiV,OAA+C,KAC/CC,EAAAA,SAAwC,KAKhB,oBAAlBhG,SACFnP,EAAKkV,OAAS,IAAA3D,EAAWvL,GAASmN,OAAO/E,KAAK,SAACoF,GAC7C,IAAM2B,EAAW,IAAU3B,EAACuB,KAAKK,SAEjC,OADApV,EAAKmV,SAAWA,EAEjBA,CAAA,IARqCnV,CAUzC,CAVDiQ,EAAAgF,EAAAlF,qBAP0CnE,SAmB1CO,SAAA,SAAoCpM,GAClC,MAAUwG,IAAAA,MAAM,0BACjB,IAEDiG,MAAA,SACEkB,GAEA,OAAeA,EAACrG,KAAK/E,QAAQ0F,IAAI,SAAC4F,GAChC,IAAqBA,EAAAA,EAAE4B,SAAS5F,SAASyL,SAAjCtH,IAAAA,IAAKD,EAAbwH,EAAaxH,IACbyH,EAAqC3H,EAAE4B,SAASgG,SAASH,SAEzD,MAAO,CACLnL,EAAG4D,EACH7D,EAAG8D,EACHvJ,MAAOoJ,EAAE6H,kBACT/K,OAAQ,CACN,CAPJ6K,EAAqBG,MAArBH,EAA4BI,MAQxB,CARUC,EAAAA,MAAdL,EAAQM,OAUN7H,IAAKJ,EAER,EACF,IAEK1E,gBACJlD,OAEMmP,IAAAA,EAAAA,SAAAA,GAEN,IAAKA,EACH,MAAU5O,IAAAA,MACR,8EANmB,OAAAwC,QAAAC,QAUAmM,EACpBW,QAAQ,CAAElH,QAAS5I,EAAQpE,OAAS,SAAC8L,SAAc,CAClDpL,QAASoL,EAD0B,GAG9B,MAAA,SAACvM,GAIN,MAHe,iBAAXA,EAAE4U,MACJpB,QAAQpB,MAASpS,EAAE4U,KAAnB,KAA4B5U,EAAE6U,SAEzB,CAAE1T,QAAS,GACnB,IAnBoB8L,KAAA,SAUjBV,GAWN,OAAYlB,EAAAA,MAAM,CAAEnF,KAAMqG,GArBH,EAEN,EAAA/L,EAAA1B,OAAA0B,EAAKwT,SAAmB,OAAApM,QAAAC,QAAAiN,EAAAhN,EAAAgN,GAAAlN,QAAAC,QAAArH,EAAKuT,QAoB/C9G,KAAAnF,GAlEyC2C,OAAAA,GAAAA,OAAAA,QAAAA,OAAAA,EAAAA,CAAAA,EAAAA,CAAAA,CAO1C,CAP0CA,qHCiB1CO,iDAFAkC,UAAY,oDAEZlC,CAAAA,QAAAA,IAAAA,EAAAA,EAAAA,UANgDP,OAMhDO,EAAAA,SAAA,SAAApM,OAAoC6B,EAAA7B,EAAzB6B,MAET,OAAYqK,KAAAA,OAAOhM,KAAKoO,UADQ,mBAAW,CAAEO,QAAShN,GAAUA,EAEjE,EAED4K,EAAAA,MAAA,SAAM1J,GACJ,OAAaA,EAACuE,KAAK/E,QAAQ0F,IAAI,SAAC4F,GAAD,MAAQ,CACrC1D,EAAG0D,EAAE4B,SAAS5F,SAASkE,IACvB7D,EAAG2D,EAAE4B,SAAS5F,SAASmE,IACvBvJ,MAAOoJ,EAAE6H,kBACT/K,OAAQ,CACN,CAACkD,EAAE4B,SAASgG,SAASU,UAAUnI,IAAKH,EAAE4B,SAASgG,SAASU,UAAUpI,KAClE,CAACF,EAAE4B,SAASgG,SAASW,UAAUpI,IAAKH,EAAE4B,SAASgG,SAASW,UAAUrI,MAEpEE,IAAKJ,EARwB,EAUhC,EAtB+ChC,CAAAA,EAAAA,kBCQhDyC,SAAAA,GAAAA,SAAAA,IAAAA,IAAAA,IAAAA,EAAAA,EAAAA,UAAAA,OAAAA,EAAAA,IAAAA,MAAAA,GAAAA,EAAAA,EAAAA,EAAAA,EAAAA,IAAAA,EAAAA,GAAAA,UAAAA,GAEAlC,OAFAkC,EAAAA,EAAAA,KAAAA,MAAAA,EAAAA,CAAAA,MAAAA,OAAAA,KAAAA,MAAAA,UAAY,oDAEZlC,CAAAA,CAFAkC,EAAAA,EAAAA,GAEAlC,IAAAA,EAAAA,EAAAA,iBAAAA,EAAAA,SAAA,SAAoCpM,GAAA,IAAA6B,EAAA7B,EAAzB6B,MAET,OAAYqK,KAAAA,OAAOhM,KAAKoO,UADQ,iBAAjBzM,EAA4B,CAAE0M,EAAG1M,GAAUA,EAE3D,EAED4K,EAAAA,MAAA,SAAMkB,GACJ,OAAeA,EAACrG,KAAK+O,MAClBtX,OAAO,SAAC8O,GAAD,YAAsB5K,IAAd4K,EAACzJ,QAAT,GACP6D,IAAI,SAAC4F,GAAO,MAAA,CACX1D,EAAG0D,EAAEzJ,SAAS2J,IACd7D,EAAG2D,EAAEzJ,SAAS4J,IACdvJ,MAAOoJ,EAAEgB,QAAQpK,MACjBkG,OAAQ,KACRsD,IAAKJ,EALF,EAOR,IAjBDS,CAJwCzC,8BCDxC,SAAY5F,EAAAA,GAA0C,IAAAhG,OAA1CgG,IAAAA,IAAAA,EAAwC,CAAE,IACpDhG,EAAA+P,EAAAtI,KAAAxH,KAAM+F,IAAN/F,MAJFoO,eACAgI,EAAAA,EAAAA,gBAKE,EAAA,MAAa,sCAHuC,OAIpDrW,EAAKqO,UAAYrI,EAAQqI,WAAgB2B,EAAxB,UACjBhQ,EAAKqW,WAAarQ,EAAQqQ,YAAiBrG,EAA3C,WACDhQ,CAAA,YAEDmM,EAAAA,EAAAA,iBAAAA,EAAAA,SAAA,SAAApM,OAA0C6B,EAAA7B,EAA/B6B,MAAO1D,EAAwB6B,EAAxB7B,KACV4N,EAA0B,iBAAjBlK,EAA4B,CAAE0M,EAAG1M,GAAUA,EAG1D,OAFAkK,EAAOwK,OAAS,OAILrW,KAAKgM,OAFR/N,IACUyN,EAACuE,QACIjQ,KAAKoW,WAGLpW,KAAKoO,UAHYvC,EAKzC,EAEDU,EAAAA,MAAA,SAAMkB,GAKJ,OAJgBvO,MAAMC,QAAQsO,EAASrG,MACnCqG,EAASrG,KACT,CAACqG,EAASrG,OAECW,IAAI,SAAC4F,GAAD,MAAQ,CACzB1D,EAAGvH,OAAOiL,EAAE2I,KACZtM,EAAGtH,OAAOiL,EAAEG,KACZvJ,MAAOoJ,EAAE4I,aACT9L,OAAQ,CACN,CAAC+L,WAAW7I,EAAE8I,YAAY,IAAKD,WAAW7I,EAAE8I,YAAY,KACxD,CAACD,WAAW7I,EAAE8I,YAAY,IAAKD,WAAW7I,EAAE8I,YAAY,MAE1D1I,IAAKJ,EARY,EAUpB,KA3CgDhC,kBC1BjD,SAAA+K,GAAA,SAAAC,EAAY5Q,GACV,OAAA2Q,EAAAlP,KAAAxH,KAAAuG,EAAA,GACKR,EACHqI,CAAAA,UAFF,uCAGEgI,WAAU,4CAJmCpW,IAMhD,QANDgQ,EAAA2G,EAAAD,KAAA,CAD8CE,kBCkF9CxI,SAAAA,GAAAA,SAAAA,IAAAA,IAAAA,IAAAA,EAAAA,EAAAA,UAAAA,OAAAA,EAAAA,IAAAA,MAAAA,GAAAA,EAAAA,EAAAA,EAAAA,EAAAA,IAAAA,EAAAA,GAAAA,UAAAA,UAAAA,EAAAA,EAAAA,KAAAA,MAAAA,EAAAA,CAAAA,MAAAA,OAAAA,KAAAA,MAAAA,UAAY,iDAAZA,EAAAA,EAAAA,qBAJ4CzC,SAM5CO,SAAA,YAAWvK,IAAAA,IAAAA,MACHkK,EAA0B,iBAAVlK,EAAqB,CAAE0M,EAAG1M,GAAUA,EAG1D,OAFAkK,EAAOwK,OAAS,OAETrW,KAAKgM,OAAOhM,KAAKoO,UAAWvC,EACpC,EAEDU,EAAAA,MAAA,SAAMkB,GACJ,SAAgBrG,KAAK/E,QAAQ0F,IAAI,SAAC4F,GAAD,MAAQ,CACvC1D,EAAG0D,EAAE4B,SAAS1B,IACd7D,EAAG2D,EAAE4B,SAASzB,IACdvJ,MAAOoJ,EAAEkJ,UACTpM,OAAQ,CACN,CAACkD,EAAElD,OAAOwL,UAAUnI,IAAKH,EAAElD,OAAOwL,UAAUpI,KAC5C,CAACF,EAAElD,OAAOyL,UAAUpI,IAAKH,EAAElD,OAAOyL,UAAUrI,MAE9CE,IAAKJ,EAR0B,EAUlC,IAEK1E,gBAAOlD,GAAuB,IAElC,OACE+C,QAAAC,QADEhD,EAAQpE,MAAM6B,OAAS,EAClB,GAGIyF,EAAAA,UAAAA,YANqBjJ,KAMd+F,GAhCsB4F,OAAAA,GAAAA,OAAAA,QAAAA,OAAAA,EAAAA,CAAAA,EAAAA,CAAAA,CAI5CyC,CAJ4CzC,8BCrD5C,SAAY5F,EAAAA,GAAmC,IAAAhG,EAAA,YAAnCgG,IAAAA,IAAAA,EAAiC,CAAA,IAC3ChG,cAAMgG,IAAN/F,MAHFoO,eAKE,EACArO,EAAKqO,UAAYrI,EAAQqI,WAAgB2B,uDAC1ChQ,CAAA,YAEDmM,EAAAA,EAAAA,iBAAAA,EAAAA,SAAA,SAAApM,GACE,OAAOE,KAAKgM,OAAU,GAAAhM,KAAKoO,UADOtO,EAAzB6B,cAEV,IAED4K,MAAA,SAAMkB,GAKJ,OAJgBvO,MAAMC,QAAQsO,EAASrG,KAAK+I,UACxC1C,EAASrG,KAAK+I,SACd,IAEWpI,IAAI,SAAC4F,GAClB,MAAa,KAQb,OAPIA,EAAEkB,OACJpE,EAAS,CACP,CAAC+L,WAAW7I,EAAEkB,KAAK,IAAK2H,WAAW7I,EAAEkB,KAAK,KAC1C,CAAC2H,WAAW7I,EAAEkB,KAAK,IAAK2H,WAAW7I,EAAEkB,KAAK,OAIvC,CACL5E,EAAGvH,OAAOiL,EAAEmJ,OAAO,IACnB9M,EAAGtH,OAAOiL,EAAEmJ,OAAO,IACnBvS,MAAOoJ,EAAEoJ,WAAapJ,EAAEoJ,WAAapJ,EAAE5G,KACvC0D,OAAAA,EACAsD,IAAKJ,EAER,EACF,KAvCyChC,8BC+B1C,SAAY5F,EAAAA,GAAAA,IAAAA,WAAAA,IAAAA,EAAmC,CAAA,IAC7ChG,EAAA+P,EAAAtI,KAAAxH,KAAM+F,IAAN/F,MAJFoO,eAGiD,EAAArO,EAFjDqW,gBAKE,EAAA,MAAa,mCAHkC,OAI/CrW,EAAKqO,UAAYrI,EAAQqI,WAAgB2B,YACzChQ,EAAKqW,WAAarQ,EAAQqQ,YAAiBrG,EAAzB,WACnBhQ,CAAA,0BAb2C4L,SAe5CO,SAAA,YAAWvK,IAAAA,IAAAA,MAGT,OAEgBqK,KAAAA,OALA/N,EAAAA,OAIEyN,EAACuE,QACIjQ,KAAKoW,WAGLpW,KAAKoO,UAPI,mBAAW,CAAEC,EAAG1M,GAAUA,EAS3D,EAED4K,EAAAA,MAAA,SAAM1J,GACJ,SAAcuE,KAAK+I,SAASpI,IAAI,SAAC4F,GAAO,MAAA,CACtC1D,EAAG0D,EAAE4B,SAASb,YAAY,GAC1B1E,EAAG2D,EAAE4B,SAASb,YAAY,GAC1BnK,MAAOoJ,EAAE0C,WAAW9L,MACpBkG,OAAQ,KACRsD,IAAKJ,EALyB,EAOjC,EAnC2ChC,CAAAA,EAAAA"} |