@aggdirect/coolmap-services 1.0.3 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -38
- package/bundles/coolmap-services.umd.js +1125 -0
- package/bundles/coolmap-services.umd.js.map +1 -0
- package/bundles/coolmap-services.umd.min.js +2 -0
- package/bundles/coolmap-services.umd.min.js.map +1 -0
- package/{index.d.ts → coolmap-services.d.ts} +0 -1
- package/coolmap-services.metadata.json +1 -0
- package/esm2015/coolmap-services.js +5 -0
- package/{esm2020/lib/service/coolmap.service.mjs → esm2015/lib/service/coolmap.service.js} +49 -39
- package/esm2015/lib/service/utils.service.js +216 -0
- package/fesm2015/{aggdirect-coolmap-services.mjs → coolmap-services.js} +48 -55
- package/fesm2015/coolmap-services.js.map +1 -0
- package/lib/service/coolmap.service.d.ts +0 -3
- package/lib/service/utils.service.d.ts +0 -3
- package/package.json +13 -38
- package/esm2020/aggdirect-coolmap-services.mjs +0 -5
- package/esm2020/lib/service/utils.service.mjs +0 -210
- package/fesm2015/aggdirect-coolmap-services.mjs.map +0 -1
- package/fesm2020/aggdirect-coolmap-services.mjs +0 -691
- package/fesm2020/aggdirect-coolmap-services.mjs.map +0 -1
- /package/{esm2020/lib/service/data-model.mjs → esm2015/lib/service/data-model.js} +0 -0
- /package/{esm2020/public-api.mjs → esm2015/public-api.js} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coolmap-services.js","sources":["../../../projects/coolmap-services/src/lib/service/utils.service.ts","../../../projects/coolmap-services/src/lib/service/coolmap.service.ts","../../../projects/coolmap-services/src/lib/service/data-model.ts","../../../projects/coolmap-services/src/public-api.ts","../../../projects/coolmap-services/src/coolmap-services.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { Route } from './data-model';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class UtilsService {\r\n analyticsRESTURL = '';\r\n RESTURLPrefix = '';\r\n pickupOptions: any[] = [];\r\n destOptions: any[] = [];\r\n ownerOptions: any[] = [];\r\n customerOptions: any[] = [];\r\n unitOptions: any[] = [];\r\n materialOptions: any[] = [];\r\n jcodeOptions: any[] = [];\r\n driverOption: any[] = [];\r\n truckingCompanayOption: any[] = [];\r\n routeNameOptions: any[] = [];\r\n public preventnavChange = new BehaviorSubject(false);\r\n navChangeObserve = this.preventnavChange.asObservable();\r\n clearViewRouteforJobCode = new BehaviorSubject(false);\r\n clearViewRouteforJobCodeObserve = this.clearViewRouteforJobCode.asObservable();\r\n preVentJobdetailclose = new BehaviorSubject(false);\r\n getpreVentJobdetailclose = this.preVentJobdetailclose.asObservable();\r\n routeDetailsUtility = new BehaviorSubject({});\r\n getrouteDetailsUtility = this.routeDetailsUtility.asObservable();\r\n removeMapEntity = new BehaviorSubject({});\r\n removeMapEntityUtility = this.removeMapEntity.asObservable();\r\n dict = new Map<string, string>();\r\n constructor(public http: HttpClient,public snackBar: MatSnackBar) {\r\n this.analyticsRESTURL = 'https://test-analytics.aggdirect.com/REST/';\r\n this.RESTURLPrefix = 'https://test-server.aggdirect.com/REST/';\r\n }\r\n getDateFormat(strVal: Date | null, seprater?: string) {\r\n seprater = seprater ? seprater : '-';\r\n const mydate = strVal;\r\n return mydate?.getFullYear() + seprater + ((mydate ? mydate.getMonth() : 0) + 1) + seprater + mydate?.getDate();\r\n }\r\n getData(path: string) { return this.http.get(`${this.analyticsRESTURL}${path}`) }\r\n postdata(path: string, data: any) { return this.http.post(`${this.analyticsRESTURL}${path}`, data) }\r\n postDataWithRestUrl(path: string, data: any) { return this.http.post(`${this.RESTURLPrefix}${path}`, data) }\r\n fetchAutoCompleteLocations(keyword: string) {\r\n return this.http.get(`https://api.mapbox.com/geocoding/v5/mapbox.places/${keyword}.json?access_token=pk.eyJ1Ijoic2FudGFudS1vZ21hIiwiYSI6ImNsOGQ0cDVrNjAweTMzb3RmdG9ieTU5ZDkifQ.I6ZS7mViZYSvBo4zz-mGQQ&country=US`)\r\n }\r\n openSnackBar(message: string, className?: string) {\r\n this.snackBar.open(message, '', {\r\n duration: 5000, verticalPosition: 'top', horizontalPosition: 'center', panelClass: [className ? className : 'default']\r\n });\r\n }\r\n\r\n makeOptions(item: Route) {\r\n if (item.order_number) {\r\n (this.jcodeOptions.findIndex((elem) => elem.job_id === item.job_id) === -1) ? this.jcodeOptions.push({ job_code: item.order_number, job_id: item.job_id }) : null;\r\n if (item.driver_list && item.driver_list?.length > 0) {\r\n item.driver_list.forEach((driver) => {\r\n this.driverOption.findIndex(elem => elem === driver['driver_name']) === -1 ? this.driverOption.push(driver['driver_name']) : null;\r\n this.truckingCompanayOption.findIndex(elem => elem === driver['trucking_company']) === -1 ? this.truckingCompanayOption.push(driver['trucking_company']) : null;\r\n });\r\n }\r\n }\r\n ((this.pickupOptions.findIndex((elem) => elem === item.pickup_location)) === -1) ? this.pickupOptions.push(item.pickup_location) : null;\r\n ((this.destOptions.findIndex((elem) => elem === item.delivery_location)) === -1) ? this.destOptions.push(item.delivery_location) : null;\r\n (this.customerOptions.findIndex((customer) => customer === item.customer_name) === -1) ? this.customerOptions.push(item.customer_name) : null;\r\n (this.unitOptions.findIndex((elem) => elem === item.unit) === -1) ? this.unitOptions.push(item.unit) : null;\r\n (this.materialOptions.findIndex((elem) => elem === item.material) === -1) ? this.materialOptions.push(item.material) : null;\r\n if (item.route_name) this.routeNameOptions.findIndex(elem => elem === item.route_name) === -1 ? this.routeNameOptions.push(item.route_name) : null;\r\n }\r\n\r\n filter(value: string, filters: any) {\r\n if (typeof value !== 'string') { return [] }\r\n const filterValue = value.toLowerCase();\r\n if (filterValue === '') { return [] }\r\n const searchResults: any[] = [];\r\n this.unitOptions.map(unit => {\r\n if (unit.toLowerCase().includes(filterValue)) {\r\n searchResults.push({ \"type\": \"unit\", \"label\": unit, \"value\": unit })\r\n }\r\n });\r\n this.customerOptions.map(unit => {\r\n if (unit.toLowerCase().includes(filterValue)) {\r\n searchResults.push({ \"type\": \"customer\", \"label\": unit, \"value\": unit })\r\n }\r\n });\r\n this.materialOptions.map(unit => {\r\n if (unit.toLowerCase().includes(filterValue)) {\r\n searchResults.push({ \"type\": \"material\", \"label\": unit, \"value\": unit })\r\n }\r\n });\r\n this.pickupOptions.map(unit => {\r\n if (unit.toLowerCase().includes(filterValue)) {\r\n searchResults.push({ \"type\": \"pickup location\", \"label\": unit, \"value\": unit })\r\n }\r\n });\r\n this.destOptions.map(unit => {\r\n if (unit.toLowerCase().includes(filterValue)) {\r\n searchResults.push({ \"type\": \"destination location\", \"label\": unit, \"value\": unit })\r\n }\r\n });\r\n this.jcodeOptions.map(unit => {\r\n if (unit.job_code.toLowerCase().includes(filterValue)) {\r\n searchResults.push({ \"type\": \"job\", \"label\": unit['job_code'], \"value\": unit })\r\n }\r\n });\r\n this.driverOption.map(unit => {\r\n if (unit.toLowerCase().includes(filterValue)) {\r\n searchResults.push({ \"type\": \"Driver\", \"label\": unit, \"value\": unit })\r\n }\r\n });\r\n\r\n this.truckingCompanayOption.map(unit => {\r\n if (unit.toLowerCase().includes(filterValue)) {\r\n searchResults.push({ \"type\": \"Trucking Company\", \"label\": unit, \"value\": unit })\r\n }\r\n });\r\n this.routeNameOptions.map(unit => {\r\n if (unit.toLowerCase().includes(filterValue)) {\r\n searchResults.push({ \"type\": \"Route name\", \"label\": unit, \"value\": unit })\r\n }\r\n });\r\n const searchDict: any = {}\r\n filters.map((filter: { [x: string]: any; }) => {\r\n searchDict[filter['name'] + filter['type']] = filter;\r\n })\r\n const furtherFilter: any[] = [];\r\n searchResults.map(search => {\r\n if ((search['label'] + search['type']) in searchDict) { }\r\n else { furtherFilter.push(search) }\r\n });\r\n return furtherFilter;\r\n }\r\n\r\n getSearchResults(list: Route[], filterval: any): any {\r\n return list.filter(element => {\r\n const result_list_boolean = []\r\n if (filterval.length > 0) {\r\n if (filterval[0]['type'] === 'unit') {\r\n result_list_boolean.push(filterval[0]['name'] === element[filterval[0]['type'] as keyof Route]);\r\n }\r\n if (filterval[0]['type'] === 'customer') {\r\n result_list_boolean.push(filterval[0]['name'] === element['customer_name']);\r\n }\r\n if (filterval[0]['type'] === 'material') {\r\n result_list_boolean.push(filterval[0]['name'] === element[filterval[0]['type'] as keyof Route]);\r\n }\r\n if (filterval[0]['type'] === 'pickup location') {\r\n result_list_boolean.push(filterval[0]['name'] === element['pickup_location']);\r\n }\r\n if (filterval[0]['type'] === 'destination location') {\r\n result_list_boolean.push(filterval[0]['name'] === element['delivery_location']);\r\n }\r\n if (filterval[0]['type'] === 'job') {\r\n result_list_boolean.push(filterval[0]['name'] === element['order_number']);\r\n }\r\n if (filterval[0]['type'] === 'Route name') {\r\n result_list_boolean.push(filterval[0]['name'] === element['route_name']);\r\n }\r\n if (filterval[0]['type'] === 'Driver') {\r\n const index = element.driver_list?.findIndex(ele => { return filterval[0]['name'] === ele['driver_name'] });\r\n if (index !== -1) result_list_boolean.push(true);\r\n }\r\n if (filterval[0]['type'] === 'Trucking Company') {\r\n const index = element.driver_list?.findIndex(ele => { return filterval[0]['name'] === ele['trucking_company'] });\r\n if (index !== -1) result_list_boolean.push(true);\r\n }\r\n }\r\n if (result_list_boolean.length > 0) {\r\n return result_list_boolean.reduce((prev, curr) => prev && curr);\r\n }\r\n return false;\r\n });\r\n }\r\n\r\n clearOptions() {\r\n this.pickupOptions = [];\r\n this.destOptions = [];\r\n this.ownerOptions = [];\r\n this.customerOptions = [];\r\n this.unitOptions = [];\r\n this.materialOptions = [];\r\n this.jcodeOptions = [];\r\n this.routeNameOptions = [];\r\n }\r\n setdictValue(key: string, value: string) {\r\n this.dict.set(key, value);\r\n }\r\n getdictValue(key: string) {\r\n return JSON.parse(this.dict.get(key));\r\n }\r\n removedictValue(key: string) {\r\n this.dict.delete(key);\r\n }\r\n conveySearchIcon(value: any): boolean{\r\n if(value && typeof(value) !== 'object') return true;\r\n return false\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport * as mapboxgl from 'mapbox-gl';\r\nimport * as turf from '@turf/turf';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { PopupData, Route } from './data-model';\r\nimport { UtilsService } from './utils.service';\r\nimport { EventManager } from '@angular/platform-browser';\r\nimport { MapboxLayer } from \"@deck.gl/mapbox\";\r\nimport { ArcLayer } from '@deck.gl/layers';\r\n\r\ndeclare const Threebox: any;\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class CoolmapService {\r\n map!: mapboxgl.Map\r\n markerOriginList: mapboxgl.Marker[] = [];\r\n markerDestinationList: mapboxgl.Marker[] = [];\r\n initiatecoolmap = new BehaviorSubject(true);\r\n reintiatecoolmap = this.initiatecoolmap.asObservable();\r\n bounds = new mapboxgl.LngLatBounds();\r\n originDestinationCordinates: any = [];\r\n padding!: any;\r\n windowActualHeightWidth!: any;\r\n popup: mapboxgl.Popup;\r\n\r\n constructor(public utils: UtilsService, public eventManager: EventManager) {\r\n this.eventManager.addGlobalEventListener('window', 'resize', this.onResize.bind(this)); this.windowActualHeightWidth = { availHeight: 0 };\r\n }\r\n\r\n initiateMapForAddRoute(el: HTMLElement) {\r\n return new Promise((resolve, reject) => {\r\n this.map.remove();\r\n this.map = new mapboxgl.Map({\r\n accessToken: 'pk.eyJ1Ijoic2FudGFudS1vZ21hIiwiYSI6ImNsOGQ0cDVrNjAweTMzb3RmdG9ieTU5ZDkifQ.I6ZS7mViZYSvBo4zz-mGQQ',\r\n container: el,\r\n style: 'mapbox://styles/santanu-ogma/cl8ep33uz003414n1twlosz9d',\r\n center: [-77.036873, 38.907192],\r\n zoom: 10, bearing: 0, pitch: 65, interactive: true,\r\n });\r\n this.map.once('load', (res) => {\r\n resolve(res);\r\n });\r\n });\r\n }\r\n // Below method Load route with animation\r\n loadMapProperty(pinRouteGeojson: any, index: number, unit: any, route?: any, bottom?: number) {\r\n return new Promise((resolve, reject)=>{\r\n let origin = pinRouteGeojson.features[0].geometry.coordinates[0];\r\n const linecolor = (unit === 'Ton') ? '#ff7272' : (unit === 'Load') ? '#a3c52e' : '#ae23d1';\r\n let destination = pinRouteGeojson.features[0].geometry.coordinates[pinRouteGeojson.features[0].geometry.coordinates.length - 1];\r\n this.extendBound(pinRouteGeojson.features[0].geometry.coordinates, true).then((res: any) => {\r\n const point: any = {\r\n 'type': 'FeatureCollection',\r\n 'features': [\r\n { 'type': 'Feature', 'properties': {}, 'geometry': { 'type': 'Point', 'coordinates': origin } }\r\n ]\r\n }\r\n const lineDistance = turf.length(pinRouteGeojson.features[0]);\r\n const arc = [];\r\n const steps = 10 * pinRouteGeojson.features[0].geometry.coordinates.length;\r\n for (let i = 0; i < lineDistance; i += lineDistance / steps) {\r\n const segment = turf.along(pinRouteGeojson.features[0], i);\r\n arc.push(segment.geometry.coordinates);\r\n }\r\n pinRouteGeojson.features[0].geometry.coordinates = arc;\r\n const pinRoute = pinRouteGeojson.features[0].geometry.coordinates;\r\n const marker = new mapboxgl.Marker(document.createElement('div'))\r\n .setLngLat(pinRoute[0]).addTo(this.map).togglePopup();\r\n\r\n if (this.map.getSource(`line${index}`)) {\r\n this.removeRouteAndMarker(index).then(() => { })\r\n }\r\n\r\n this.map.addSource(`line${index}`, { type: 'geojson', lineMetrics: true, data: pinRouteGeojson });\r\n this.map.addLayer({\r\n type: 'line',\r\n source: `line${index}`,\r\n id: `line${index}`,\r\n paint: {\r\n 'line-width': 2,\r\n 'line-gradient': [\r\n 'interpolate',\r\n ['linear'],\r\n ['line-progress'],\r\n 0, unit === 'Ton' ? '#d7f7e4' : unit === 'Load' ? '#c9d8f5' : '#f5dcc1',\r\n 1, unit === 'Ton' ? '#ff7272' : unit === 'Load' ? '#a3c52e' : '#ae23d1',\r\n ]\r\n },\r\n layout: { 'line-cap': 'round', 'line-join': 'round' }\r\n });\r\n\r\n const dataSetForMap = {\r\n counter: 0, pinRouteGeojson, steps,\r\n point, pointId: `point${index}`,\r\n marker, pinRoute, lineId: `line${index}`, index,\r\n origin, destination, lineDistance,\r\n linecolor, route, isViewRoute: true\r\n }\r\n this.createMarker(dataSetForMap);\r\n this.map.on('mouseenter', `line${index}`, (e) => {\r\n this.map.setPaintProperty(`line${index}`, 'line-width', 5);\r\n this.map.setPaintProperty(`line${index}`, 'line-opacity', 1);\r\n const datasetForPopup: PopupData = {\r\n coordinate: [e.lngLat.lng, e.lngLat.lat],\r\n pickup: route.pickup_location ? route.pickup_location : '',\r\n drop: route.delivery_location ? route.delivery_location : '',\r\n routeType: route.project ? 'Project' : 'Route',\r\n title: route.project ? route.project : route.route_name ? route.route_name : '',\r\n material: route.material ? route.material : '',\r\n type: route.unit ? route.unit : ''\r\n }\r\n this.createPopup(datasetForPopup);\r\n });\r\n this.map.on('mouseleave', `line${index}`, (e) => {\r\n this.map.setPaintProperty(`line${index}`, 'line-width', 2);\r\n if (this.popup) {\r\n this.popup.remove();\r\n }\r\n });\r\n })\r\n\r\n this.map.once('idle', (res) => {\r\n resolve(true)\r\n });\r\n})\r\n }\r\n // Below method Load route without animation\r\n drawLine(cordinates?: any, index?: number | any, route?: any, enablefitbound?: boolean, routeType?: string) {\r\n let linecolor: any;\r\n let origin = cordinates[0]; let destination = cordinates[cordinates.length - 1]\r\n if (origin[0] && origin[1] && destination && destination[0] && destination[1]) {\r\n linecolor = this.provideLineColor(route['unit'], routeType);\r\n if (enablefitbound) {\r\n const padding = {\r\n top: this.padding.top, bottom: this.padding.bottom + (this.windowActualHeightWidth.availHeight - (window.innerHeight - 65)),\r\n left: this.padding.left, right: this.padding.right\r\n }\r\n this.map.fitBounds([origin, destination], { padding }, { fitboundCompleteJob: true })\r\n }\r\n if (this.map.getSource(`route-source-for-job-code${index}`)) {\r\n this.removeRouteAndMarker(index).then(() => { })\r\n }\r\n this.map.addSource(`route-source-for-job-code${index}`, {\r\n 'type': 'geojson',\r\n 'data': { 'type': 'Feature', 'properties': {}, 'geometry': { 'type': 'LineString', 'coordinates': cordinates } }\r\n });\r\n this.map.addLayer({\r\n 'id': `route-for-job-code${index}`, 'type': 'line', 'source': `route-source-for-job-code${index}`,\r\n paint: { 'line-color': linecolor, 'line-width': 2 },\r\n layout: { 'line-cap': 'round', 'line-join': 'round' }\r\n });\r\n const dataSetForMap = {\r\n origin, destination, index, linecolor, route\r\n }\r\n this.createMarker(dataSetForMap);\r\n this.map.on('mouseenter', `route-for-job-code${index}`, (e) => {\r\n if (this.popup) {\r\n this.popup.remove();\r\n }\r\n this.map.setPaintProperty(`route-for-job-code${index}`, 'line-width', 5);\r\n this.map.setPaintProperty(`route-for-job-code${index}`, 'line-opacity', 1);\r\n const datasetForPopup: PopupData = {\r\n coordinate: [e.lngLat.lng, e.lngLat.lat],\r\n pickup: route.pickup_location ? route.pickup_location : '',\r\n drop: route.delivery_location ? route.delivery_location : '',\r\n jobCode: route.project ? route.order_number : null,\r\n customer: route.project ? route.customer_name : null,\r\n routeType: route.project ? 'Project' : 'Route',\r\n title: route.project ? route.project : route.route_name ? route.route_name : '',\r\n material: route.material ? route.material : '',\r\n type: route.unit ? route.unit : ''\r\n }\r\n this.createPopup(datasetForPopup);\r\n });\r\n this.map.on('mouseleave', `route-for-job-code${index}`, (e) => {\r\n this.map.setPaintProperty(`route-for-job-code${index}`, 'line-width', 2);\r\n if (this.popup) {\r\n this.popup.remove();\r\n }\r\n });\r\n }\r\n }\r\n\r\n provideLineColor(unitType: string, type?: string | undefined) {\r\n let checkType = (type && !['jobrouteList', 'addroute'].includes(type)) ? true : false;\r\n let color;\r\n switch (unitType) {\r\n case \"Ton\":\r\n color = checkType ? '#39c471' : '#ff7272';\r\n break;\r\n case \"Load\":\r\n color = checkType ? '#326ad3' : '#a3c52e';\r\n break;\r\n case \"Hourly\":\r\n color = checkType ? '#ffad56' : '#ae23d1';\r\n break;\r\n }\r\n return color;\r\n }\r\n\r\n showRoutePopup(arcDetails, event, isViewRoute?): void {\r\n if (this.popup) {\r\n this.popup.remove();\r\n this.map.setPaintProperty(`${isViewRoute ? 'line' : 'route-for-job-code'}${arcDetails.layer.props.data.index}`, 'line-width', 2);\r\n }\r\n if (arcDetails.color && this.map.getLayoutProperty(arcDetails.layer.id, 'visibility') !== 'none') {\r\n this.map.setPaintProperty(`${isViewRoute ? 'line' : 'route-for-job-code'}${arcDetails.layer.props.data.index}`, 'line-width', 5);\r\n this.map.setPaintProperty(`${isViewRoute ? 'line' : 'route-for-job-code'}${arcDetails.layer.props.data.index}`, 'line-opacity', 1);\r\n\r\n const datasetForPopup: PopupData = {\r\n coordinate: arcDetails.coordinate,\r\n pickup: arcDetails.layer.props.data.route.pickup_location ? arcDetails.layer.props.data.route.pickup_location : '',\r\n drop: arcDetails.layer.props.data.route.delivery_location ? arcDetails.layer.props.data.route.delivery_location : '',\r\n jobCode: arcDetails.layer.props.data.route.project ? arcDetails.layer.props.data.route.order_number : '',\r\n customer: arcDetails.layer.props.data.route.project ? arcDetails.layer.props.data.route.customer_name : '',\r\n routeType: arcDetails.layer.props.data.route.project ? 'Project' : 'Route',\r\n title: arcDetails.layer.props.data.route.project ? arcDetails.layer.props.data.route.project : arcDetails.layer.props.data.route.route_name ? arcDetails.layer.props.data.route.route_name : '',\r\n material: arcDetails.layer.props.data.route.material ? arcDetails.layer.props.data.route.material : '',\r\n type: arcDetails.layer.props.data.route.unit ? arcDetails.layer.props.data.route.unit : ''\r\n }\r\n this.createPopup(datasetForPopup);\r\n }\r\n }\r\n\r\n createPopup(datasetForPopup: PopupData): void {\r\n this.popup = new mapboxgl.Popup({\r\n closeButton: false,\r\n closeOnClick: false,\r\n closeOnMove: true,\r\n anchor: 'bottom-left'\r\n });\r\n\r\n this.popup.setLngLat(datasetForPopup.coordinate)\r\n .setHTML(`\r\n <div class=\"destination\">\r\n <div class=\"duration\">\r\n <p class=\"pickprt\"><b>Pickup Location:</b> ${datasetForPopup.pickup}</p>\r\n <p class=\"dropprt\"><b>Drop Location:</b> ${datasetForPopup.drop}</p>\r\n </div>\r\n ${datasetForPopup.jobCode ? '<span><b>Job Code:</b> ' + datasetForPopup.jobCode + '</span>' : ''}\r\n ${datasetForPopup.customer ? '<span><b>Customer:</b> ' + datasetForPopup.customer + '</span>' : ''}\r\n <span><b>${datasetForPopup.routeType} Name:</b> ${datasetForPopup.title}</span>\r\n <span><b>Material:</b> ${datasetForPopup.material}</span>\r\n <span><b>Type:</b> ${datasetForPopup.type}</span>\r\n </div>\r\n `)\r\n .addTo(this.map);\r\n }\r\n\r\n hexToRGB(hex: any): [number, number, number] {\r\n return hex.replace(/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i\r\n , (m, r, g, b) => '#' + r + r + g + g + b + b)\r\n .substring(1).match(/.{2}/g)\r\n .map(x => parseInt(x, 16))\r\n }\r\n\r\n createMarker(routeDetails) {\r\n if (routeDetails.origin[0] && routeDetails.origin[1] && routeDetails.destination[0] && routeDetails.destination[1]) {\r\n\r\n const popup = new mapboxgl.Popup({ closeButton: false }).setHTML('<b>Pickup: </b>' + routeDetails.route?.pickup_location);\r\n const popupForDestination = new mapboxgl.Popup({ closeButton: false })\r\n .setHTML('<b>Delivery: </b>' + routeDetails.route?.delivery_location);\r\n\r\n const el = document.createElement('div');\r\n el.className = 'marker';\r\n el.innerHTML = `<span class='markerPointer' style='background:${routeDetails.linecolor}'><b>P</b><span class='markerSpan' style='border-top: 10px solid ${routeDetails.linecolor}'></span></span>`\r\n\r\n const originMarker = new mapboxgl.Marker(el)\r\n .setPopup(popup).setLngLat(routeDetails.origin).addTo(this.map);\r\n\r\n originMarker.getElement().addEventListener('mouseenter', () => originMarker.togglePopup());\r\n originMarker.getElement().addEventListener('mouseleave', () => originMarker.togglePopup());\r\n\r\n const elementForDestination = document.createElement('div');\r\n elementForDestination.className = 'marker';\r\n elementForDestination.innerHTML = `<span class='markerPointer' style='background:${routeDetails.linecolor}'><b>D</b><span class='markerSpan' style='border-top: 10px solid ${routeDetails.linecolor}'></span></span>`\r\n\r\n const destinationMarker = new mapboxgl.Marker(elementForDestination).setPopup(popupForDestination).setLngLat(routeDetails.destination).addTo(this.map);\r\n destinationMarker.getElement().addEventListener('mouseenter', () => destinationMarker.togglePopup());\r\n destinationMarker.getElement().addEventListener('mouseleave', () => destinationMarker.togglePopup());\r\n this.markerOriginList[routeDetails.index] = originMarker;\r\n this.markerDestinationList[routeDetails.index] = destinationMarker;\r\n\r\n const colorArray = this.hexToRGB(routeDetails.linecolor)\r\n const arcLayer = new MapboxLayer({\r\n id: 'arc-layer' + routeDetails.index,\r\n type: ArcLayer,\r\n pickable: true,\r\n data: { route: routeDetails.route, index: routeDetails.index },\r\n getWidth: 1,\r\n getSourcePosition: routeDetails.origin,\r\n getTargetPosition: routeDetails.destination,\r\n getTargetColor: [255, 255, 255],\r\n getSourceColor: [colorArray[0], colorArray[1], colorArray[2]],\r\n onHover: (info, event) => this.showRoutePopup(info, event, routeDetails.isViewRoute),\r\n });\r\n this.map.addLayer(arcLayer);\r\n }\r\n }\r\n\r\n async removeRouteAndMarker(index: number | string | any) {\r\n if (this.map) {\r\n this.map.getLayer(`arc-layer${index}`) ? this.map.removeLayer(`arc-layer${index}`) : '';\r\n this.map.getLayer(`line${index}`) ? this.map.removeLayer(`line${index}`) : '';\r\n this.map.getLayer(`custom_layer${index}`) ? this.map.removeLayer(`custom_layer${index}`) : '';\r\n this.map.getSource(`line${index}`) ? this.map.removeSource(`line${index}`) : '';\r\n this.map.getLayer(`route-for-job-code${index}`) ? this.map.removeLayer(`route-for-job-code${index}`) : '';\r\n this.map.getSource(`route-source-for-job-code${index}`) ? this.map.removeSource(`route-source-for-job-code${index}`) : '';\r\n this.findMarkerBound(index);\r\n this.markerOriginList[index] ? this.markerOriginList[index].remove() : '';\r\n this.markerDestinationList[index] ? this.markerDestinationList[index].remove() : '';\r\n await true;\r\n }\r\n }\r\n findMarkerBound(index: any) {\r\n const indexOfCordinates = this.originDestinationCordinates.findIndex((x: any) =>\r\n (x[0][0].toFixed(6) == this.markerOriginList[index]?.getLngLat()?.lng.toFixed(6)) && (x[0][1].toFixed(6) == this.markerOriginList[index]?.getLngLat()?.lat.toFixed(6)));\r\n if (indexOfCordinates >= 0) { this.originDestinationCordinates.splice(indexOfCordinates, 1) }\r\n }\r\n async filterRoute(ID: any, visibility: string, showAllFitbound?: boolean) {\r\n if (ID) {\r\n if (this.map.getLayer(`route-for-job-code${ID}`)) {\r\n this.map.setLayoutProperty(`route-for-job-code${ID}`, 'visibility', visibility);\r\n const originM = this.markerOriginList[ID].getElement();\r\n originM.style.display = ((visibility === 'visible') ? 'block' : visibility);\r\n const destinationM = this.markerDestinationList[ID].getElement();\r\n destinationM.style.display = ((visibility === 'visible') ? 'block' : visibility);\r\n if (visibility === 'none' && showAllFitbound) {\r\n this.findMarkerBound(ID);\r\n this.extendReBound();\r\n }\r\n }\r\n if (this.map.getLayer(`arc-layer${ID}`)) {\r\n this.map.setLayoutProperty(`arc-layer${ID}`, 'visibility', visibility);\r\n }\r\n }\r\n await true;\r\n }\r\n extendBound(route: any, showAllFitbound: boolean | undefined) {\r\n return new Promise((resolve, reject) => {\r\n if (route) {\r\n if (typeof route === 'string') {\r\n let path: any = route.split(';');\r\n path = path.map((ele: string | any) => { return ele = this.formateLatLong(ele) });\r\n path.forEach((ele: any, index: number) => { if (ele.length === 1) path.splice(index, 1) });\r\n route = path\r\n }\r\n if (route[0][0] && route[0][1] && route[route.length - 1][0] && route[route.length - 1][1]) {\r\n this.originDestinationCordinates.push(route);\r\n route.map((item: any) => {\r\n this.bounds.extend(item);\r\n })\r\n }\r\n }\r\n if (showAllFitbound) {\r\n const padding = { top: this.padding.top, bottom: (this.padding.bottom + (this.windowActualHeightWidth.availHeight - (window.innerHeight - 65))), left: this.padding.left, right: this.padding.right }\r\n setTimeout(() => {\r\n if (showAllFitbound && (Object.keys(this.bounds).length > 0)) this.map.fitBounds(this.bounds, { padding }, { fitboundComplete: true })\r\n }, 100);\r\n this.map.once('moveend', (event: any) => { if (event.fitboundComplete) { resolve(true) } });\r\n }\r\n });\r\n }\r\n\r\n extendReBound(bottom?: number) {\r\n return new Promise((resolve, reject) => {\r\n this.bounds = new mapboxgl.LngLatBounds();\r\n\r\n if (this.originDestinationCordinates.length >= 0) {\r\n this.originDestinationCordinates.map((item: any, index: number) => {\r\n item.map((route: any) => {\r\n this.bounds.extend(route);\r\n })\r\n if (index === (this.originDestinationCordinates.length - 1)) {\r\n const padding = { top: this.padding.top, bottom: (this.padding.bottom + (this.windowActualHeightWidth.availHeight - (window.innerHeight - 65))), left: this.padding.left, right: this.padding.right }\r\n setTimeout(() => {\r\n if (this.originDestinationCordinates.length > 0) this.map.fitBounds(this.bounds, { padding });\r\n }, 500);\r\n resolve(true);\r\n }\r\n })\r\n } else {\r\n resolve(true);\r\n }\r\n })\r\n }\r\n plotRoute(route: any, i: number | any, type: string, enablefitbound?: boolean, showAllFitbound?: boolean) {\r\n return new Promise((resolve, reject) => {\r\n let param: any = {};\r\n if (['jobcode'].includes(type)) {\r\n param['job'] = route['job_id']\r\n this.utils.postDataWithRestUrl('schedule/job/path', param).subscribe((res: any) => {\r\n if (res['data']['route']) {\r\n let path = res['data']['route'].split(';');\r\n path = path.map((ele: string | any) => { return ele = this.formateLatLong(ele) });\r\n path.forEach((ele: any, index: number) => { if (ele.length === 1) path.splice(index, 1) });\r\n route['path'] = path;\r\n this.extendBound(route['path'], showAllFitbound);\r\n if (route['path'] && route['path'].length > 0) this.drawLine(route['path'], i, route, enablefitbound, type);\r\n route['index'] = i;\r\n } else {\r\n this.extendBound(null, showAllFitbound);\r\n }\r\n resolve(true);\r\n }, (err) => { if (err) { reject(false) } });\r\n } else if (['jobrouteList', 'addroute'].includes(type)) {\r\n if (route['path'] && route['path'].length > 0) {\r\n let path = route['path'].split(';');\r\n path = path.map((ele: string | any) => { return ele = this.formateLatLong(ele) });\r\n path.forEach((ele: any, index: number) => { if (ele.length === 1) path.splice(index, 1) });\r\n this.extendBound(path, showAllFitbound);\r\n this.drawLine(path, i, route, enablefitbound, type)\r\n };\r\n }\r\n })\r\n }\r\n clearBound() { this.bounds = new mapboxgl.LngLatBounds(); this.originDestinationCordinates = []; this.clearPadding(); }\r\n formateLatLong(latlong: string) { return latlong ? latlong.split(',').map(x => +x).reverse() : null; }\r\n clearBoundWithCordinates() {\r\n this.bounds = new mapboxgl.LngLatBounds(); this.originDestinationCordinates = [];\r\n }\r\n\r\n onResize(event: any) {\r\n if (!this.bounds.isEmpty()) {\r\n this.windowActualHeightWidth.availHeight = (window.innerHeight > window.screen.availHeight) ? window.innerHeight : window.screen.availHeight;\r\n setTimeout(() => {\r\n this.map.fitBounds(this.bounds, { padding: { top: this.padding.top, bottom: this.padding.bottom + (this.windowActualHeightWidth.availHeight - (event.target.innerHeight - 65)), left: this.padding.left, right: this.padding.right } });\r\n }, 500);\r\n }\r\n }\r\n\r\n setWindowHeight(screen: any) {\r\n this.windowActualHeightWidth.availHeight = screen;\r\n }\r\n setPadding(padding: any) { this.padding = padding }\r\n clearPadding() { this.padding = null }\r\n removeJobFromMap(data: Route[]) {\r\n data.map((ele: any, index: number) => {\r\n const id = (ele['job_id'] ? ele['job_id'] : ele['route_id']);\r\n this.removeRouteAndMarker(id);\r\n if (index === (data.length - 1)) {\r\n this.extendReBound();\r\n }\r\n })\r\n }\r\n}\r\n","\r\nexport class Route {\r\n index: number = 0;\r\n type?: string | null;\r\n // Job Code\r\n customer_contact?: string | null;\r\n customer_name?: string | null;\r\n delivery_contact?: string | null;\r\n delivery_lat?: number | null;\r\n delivery_location?: string | null | undefined;\r\n delivery_lon?: number | null;\r\n driver_list?: Array<any>;\r\n material?: string | null;\r\n order_number?: string | null;\r\n pickup_lat?: number | null;\r\n pickup_location?: string | null | undefined;\r\n pickup_lon?: number | null;\r\n project?: string | null;\r\n total_count?: number;\r\n unit?: string | null;\r\n values: any;\r\n job_id?: string;\r\n isSelected?: boolean;\r\n date?: string;\r\n // Add Route\r\n created_at?: string | null;\r\n created_by_name?: string | null;\r\n customer_id?: string | null;\r\n delivery_lat_lng?: string | null;\r\n estimated_distance?: string | null;\r\n estimated_time?: string | null;\r\n materials_id?: string | null;\r\n path?: [number, number];\r\n pickup_lat_lng?: string | null;\r\n route_id?: string | null;\r\n route_name?: string | null;\r\n unit_id?: string | null;\r\n note?: string | null\r\n isActive?: boolean;\r\n prevent?: boolean;\r\n}\r\n\r\nexport const EstinationData = ['estimated_distance', 'estimated_time']\r\nexport enum EstinationEnum {\r\n estimated_distance = \"miles\",\r\n estimated_time = \"time\"\r\n}\r\n\r\nexport const JobCodeOverviewData = ['customer_contact', 'delivery_contact', 'pickup_location', 'delivery_location', 'project', 'unit']\r\nexport enum JobCodeOverviewEnum {\r\n customer_contact = 'Customer Contact',\r\n delivery_contact = 'Delivery Contact',\r\n pickup_location = 'Pickup',\r\n delivery_location = 'Delivery',\r\n project = 'Project Name',\r\n unit = 'Job Type',\r\n}\r\n\r\nexport const DriversmsCardKey = ['order_number', 'date', 'values', 'material', 'unit', 'pickup_location', 'delivery_location']\r\nexport enum DriverSmsCardEnum {\r\n order_number = 'Jobcode',\r\n date = 'Date',\r\n values = 'Total tasks',\r\n material = 'Material',\r\n unit = 'Unit',\r\n pickup_location = 'Pickup Address',\r\n delivery_location = 'Delivery Address'\r\n}\r\n\r\nexport class PopupData {\r\n coordinate: [number, number];\r\n pickup: string | null;\r\n jobCode?: string | null;\r\n customer?: string | null;\r\n drop: string | null;\r\n routeType: string | null;\r\n title: string | null;\r\n material: string | null;\r\n type: string | null;\r\n}\r\n","/*\r\n * Public API Surface of coolmap-services\r\n */\r\nexport * from './lib/service/coolmap.service';\r\nexport * from './lib/service/utils.service';\r\nexport * from './lib/service/data-model';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["mapboxgl.LngLatBounds","mapboxgl.Map","turf.length","turf.along","mapboxgl.Marker","mapboxgl.Popup"],"mappings":";;;;;;;;;;;MAOa,YAAY;IAwBvB,YAAmB,IAAgB,EAAQ,QAAqB;QAA7C,SAAI,GAAJ,IAAI,CAAY;QAAQ,aAAQ,GAAR,QAAQ,CAAa;QAvBhE,qBAAgB,GAAG,EAAE,CAAC;QACtB,kBAAa,GAAG,EAAE,CAAC;QACnB,kBAAa,GAAU,EAAE,CAAC;QAC1B,gBAAW,GAAU,EAAE,CAAC;QACxB,iBAAY,GAAU,EAAE,CAAC;QACzB,oBAAe,GAAU,EAAE,CAAC;QAC5B,gBAAW,GAAU,EAAE,CAAC;QACxB,oBAAe,GAAU,EAAE,CAAC;QAC5B,iBAAY,GAAU,EAAE,CAAC;QACzB,iBAAY,GAAU,EAAE,CAAC;QACzB,2BAAsB,GAAU,EAAE,CAAC;QACnC,qBAAgB,GAAU,EAAE,CAAC;QACtB,qBAAgB,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;QACrD,qBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC;QACxD,6BAAwB,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;QACtD,oCAA+B,GAAG,IAAI,CAAC,wBAAwB,CAAC,YAAY,EAAE,CAAC;QAC/E,0BAAqB,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;QACnD,6BAAwB,GAAG,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE,CAAC;QACrE,wBAAmB,GAAG,IAAI,eAAe,CAAC,EAAE,CAAC,CAAC;QAC9C,2BAAsB,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,CAAC;QACjE,oBAAe,GAAG,IAAI,eAAe,CAAC,EAAE,CAAC,CAAC;QAC1C,2BAAsB,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;QAC7D,SAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;QAE/B,IAAI,CAAC,gBAAgB,GAAG,4CAA4C,CAAC;QACrE,IAAI,CAAC,aAAa,GAAG,yCAAyC,CAAC;KAChE;IACD,aAAa,CAAC,MAAmB,EAAE,QAAiB;QAClD,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,GAAG,CAAC;QACrC,MAAM,MAAM,GAAG,MAAM,CAAC;QACtB,OAAO,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,MAAK,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,QAAQ,IAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,GAAE,CAAC;KACjH;IACD,OAAO,CAAC,IAAY,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,GAAG,IAAI,EAAE,CAAC,CAAA,EAAE;IACjF,QAAQ,CAAC,IAAY,EAAE,IAAS,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,gBAAgB,GAAG,IAAI,EAAE,EAAE,IAAI,CAAC,CAAA,EAAE;IACpG,mBAAmB,CAAC,IAAY,EAAE,IAAS,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,EAAE,EAAE,IAAI,CAAC,CAAA,EAAE;IAC5G,0BAA0B,CAAC,OAAe;QACxC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,qDAAqD,OAAO,gIAAgI,CAAC,CAAA;KACnN;IACD,YAAY,CAAC,OAAe,EAAE,SAAkB;QAC9C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE;YAC9B,QAAQ,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;SACvH,CAAC,CAAC;KACJ;IAED,WAAW,CAAC,IAAW;;QACrB,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC;YAClK,IAAI,IAAI,CAAC,WAAW,IAAI,OAAA,IAAI,CAAC,WAAW,0CAAE,MAAM,IAAG,CAAC,EAAE;gBACpD,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM;oBAC9B,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,KAAK,MAAM,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,IAAI,CAAC;oBAClI,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,KAAK,MAAM,CAAC,kBAAkB,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,GAAG,IAAI,CAAC;iBACjK,CAAC,CAAC;aACJ;SACF;QACD,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC;QACxI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC;QACxI,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,QAAQ,KAAK,QAAQ,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;QAC9I,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QAC5G,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;QAC5H,IAAI,IAAI,CAAC,UAAU;YAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;KACpJ;IAED,MAAM,CAAC,KAAa,EAAE,OAAY;QAChC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAAE,OAAO,EAAE,CAAA;SAAE;QAC5C,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QACxC,IAAI,WAAW,KAAK,EAAE,EAAE;YAAE,OAAO,EAAE,CAAA;SAAE;QACrC,MAAM,aAAa,GAAU,EAAE,CAAC;QAChC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI;YACvB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;gBAC5C,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;aACrE;SACF,CAAC,CAAC;QACH,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI;YAC3B,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;gBAC5C,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;aACzE;SACF,CAAC,CAAC;QACH,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI;YAC3B,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;gBAC5C,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;aACzE;SACF,CAAC,CAAC;QACH,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI;YACzB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;gBAC5C,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;aAChF;SACF,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI;YACvB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;gBAC5C,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,sBAAsB,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;aACrF;SACF,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI;YACxB,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;gBACrD,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;aAChF;SACF,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI;YACxB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;gBAC5C,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;aACvE;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI;YAClC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;gBAC5C,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;aACjF;SACF,CAAC,CAAC;QACH,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI;YAC5B,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;gBAC5C,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;aAC3E;SACF,CAAC,CAAC;QACH,MAAM,UAAU,GAAQ,EAAE,CAAA;QAC1B,OAAO,CAAC,GAAG,CAAC,CAAC,MAA6B;YACxC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC;SACtD,CAAC,CAAA;QACF,MAAM,aAAa,GAAU,EAAE,CAAC;QAChC,aAAa,CAAC,GAAG,CAAC,MAAM;YACtB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,UAAU,EAAE,GAAG;iBACpD;gBAAE,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;aAAE;SACpC,CAAC,CAAC;QACH,OAAO,aAAa,CAAC;KACtB;IAED,gBAAgB,CAAC,IAAa,EAAE,SAAc;QAC5C,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO;;YACxB,MAAM,mBAAmB,GAAG,EAAE,CAAA;YAC9B,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;gBACxB,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,MAAM,EAAE;oBACnC,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAgB,CAAC,CAAC,CAAC;iBACjG;gBACD,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,UAAU,EAAE;oBACvC,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;iBAC7E;gBACD,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,UAAU,EAAE;oBACvC,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAgB,CAAC,CAAC,CAAC;iBACjG;gBACD,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,iBAAiB,EAAE;oBAC9C,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC;iBAC/E;gBACD,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,sBAAsB,EAAE;oBACnD,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC;iBACjF;gBACD,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE;oBAClC,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;iBAC5E;gBACD,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,YAAY,EAAE;oBACzC,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;iBAC1E;gBACD,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,QAAQ,EAAE;oBACrC,MAAM,KAAK,SAAG,OAAO,CAAC,WAAW,0CAAE,SAAS,CAAC,GAAG,MAAM,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,aAAa,CAAC,CAAA,EAAE,CAAC,CAAC;oBAC5G,IAAI,KAAK,KAAK,CAAC,CAAC;wBAAE,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBAClD;gBACD,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,kBAAkB,EAAE;oBAC/C,MAAM,KAAK,SAAG,OAAO,CAAC,WAAW,0CAAE,SAAS,CAAC,GAAG,MAAM,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,kBAAkB,CAAC,CAAA,EAAE,CAAC,CAAC;oBACjH,IAAI,KAAK,KAAK,CAAC,CAAC;wBAAE,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBAClD;aACF;YACD,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE;gBAClC,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC;aACjE;YACD,OAAO,KAAK,CAAC;SACd,CAAC,CAAC;KACJ;IAED,YAAY;QACV,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;KAC5B;IACD,YAAY,CAAC,GAAW,EAAE,KAAa;QACrC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;KAC3B;IACD,YAAY,CAAC,GAAW;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KACvC;IACD,eAAe,CAAC,GAAW;QACzB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;KACvB;IACD,gBAAgB,CAAC,KAAU;QACzB,IAAG,KAAK,IAAI,QAAO,KAAK,CAAC,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACpD,OAAO,KAAK,CAAA;KACb;;;;YA9LF,UAAU,SAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;YANzB,UAAU;YAEV,WAAW;;;MCWP,cAAc;IAYzB,YAAmB,KAAmB,EAAS,YAA0B;QAAtD,UAAK,GAAL,KAAK,CAAc;QAAS,iBAAY,GAAZ,YAAY,CAAc;QAVzE,qBAAgB,GAAsB,EAAE,CAAC;QACzC,0BAAqB,GAAsB,EAAE,CAAC;QAC9C,oBAAe,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;QAC5C,qBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;QACvD,WAAM,GAAG,IAAIA,YAAqB,EAAE,CAAC;QACrC,gCAA2B,GAAQ,EAAE,CAAC;QAMpC,IAAI,CAAC,YAAY,CAAC,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAAC,IAAI,CAAC,uBAAuB,GAAG,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;KAC3I;IAED,sBAAsB,CAAC,EAAe;QACpC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM;YACjC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;YAClB,IAAI,CAAC,GAAG,GAAG,IAAIC,KAAY,CAAC;gBAC1B,WAAW,EAAE,kGAAkG;gBAC/G,SAAS,EAAE,EAAE;gBACb,KAAK,EAAE,wDAAwD;gBAC/D,MAAM,EAAE,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC;gBAC/B,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI;aACnD,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG;gBACxB,OAAO,CAAC,GAAG,CAAC,CAAC;aACd,CAAC,CAAC;SACJ,CAAC,CAAC;KACJ;;IAED,eAAe,CAAC,eAAoB,EAAE,KAAa,EAAE,IAAS,EAAE,KAAW,EAAE,MAAe;QAC1F,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM;YACjC,IAAI,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YACjE,MAAM,SAAS,GAAG,CAAC,IAAI,KAAK,KAAK,IAAI,SAAS,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,SAAS,GAAG,SAAS,CAAC;YAC3F,IAAI,WAAW,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAChI,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAQ;gBACrF,MAAM,KAAK,GAAQ;oBACjB,MAAM,EAAE,mBAAmB;oBAC3B,UAAU,EAAE;wBACV,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE;qBAChG;iBACF,CAAA;gBACD,MAAM,YAAY,GAAGC,MAAW,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9D,MAAM,GAAG,GAAG,EAAE,CAAC;gBACf,MAAM,KAAK,GAAG,EAAE,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC;gBAC3E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,IAAI,YAAY,GAAG,KAAK,EAAE;oBAC3D,MAAM,OAAO,GAAGC,KAAU,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC3D,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;iBACxC;gBACD,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,GAAG,GAAG,CAAC;gBACvD,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAClE,MAAM,MAAM,GAAG,IAAIC,MAAe,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;qBAC9D,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;gBAEtD,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,KAAK,EAAE,CAAC,EAAE;oBACtC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;iBACjD;gBAEH,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;gBAClG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;oBAChB,IAAI,EAAE,MAAM;oBACZ,MAAM,EAAE,OAAO,KAAK,EAAE;oBACtB,EAAE,EAAE,OAAO,KAAK,EAAE;oBAClB,KAAK,EAAE;wBACL,YAAY,EAAE,CAAC;wBACf,eAAe,EAAE;4BACf,aAAa;4BACb,CAAC,QAAQ,CAAC;4BACV,CAAC,eAAe,CAAC;4BACjB,CAAC,EAAE,IAAI,KAAK,KAAK,GAAG,SAAS,GAAG,IAAI,KAAK,MAAM,GAAG,SAAS,GAAG,SAAS;4BACvE,CAAC,EAAE,IAAI,KAAK,KAAK,GAAG,SAAS,GAAG,IAAI,KAAK,MAAM,GAAG,SAAS,GAAG,SAAS;yBACxE;qBACF;oBACD,MAAM,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE;iBACtD,CAAC,CAAC;gBAEL,MAAM,aAAa,GAAG;oBACpB,OAAO,EAAE,CAAC,EAAE,eAAe,EAAE,KAAK;oBAClC,KAAK,EAAE,OAAO,EAAE,QAAQ,KAAK,EAAE;oBAC/B,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,KAAK,EAAE,EAAE,KAAK;oBAC/C,MAAM,EAAE,WAAW,EAAE,YAAY;oBACjC,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI;iBACpC,CAAA;gBACD,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;gBACjC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,KAAK,EAAE,EAAE,CAAC,CAAC;oBAC1C,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,KAAK,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;oBAC3D,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,KAAK,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;oBAC7D,MAAM,eAAe,GAAc;wBACjC,UAAU,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;wBACxC,MAAM,EAAE,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC,eAAe,GAAG,EAAE;wBAC1D,IAAI,EAAE,KAAK,CAAC,iBAAiB,GAAG,KAAK,CAAC,iBAAiB,GAAG,EAAE;wBAC5D,SAAS,EAAE,KAAK,CAAC,OAAO,GAAG,SAAS,GAAG,OAAO;wBAC9C,KAAK,EAAE,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,GAAG,EAAE;wBAC/E,QAAQ,EAAE,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,GAAG,EAAE;wBAC9C,IAAI,EAAE,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,EAAE;qBACnC,CAAA;oBACD,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;iBACnC,CAAC,CAAC;gBACH,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,KAAK,EAAE,EAAE,CAAC,CAAC;oBAC1C,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,KAAK,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;oBAC3D,IAAI,IAAI,CAAC,KAAK,EAAE;wBACd,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;qBACrB;iBACF,CAAC,CAAC;aACJ,CAAC,CAAA;YAEF,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG;gBACxB,OAAO,CAAC,IAAI,CAAC,CAAA;aAChB,CAAC,CAAC;SACJ,CAAC,CAAA;KACC;;IAED,QAAQ,CAAC,UAAgB,EAAE,KAAoB,EAAE,KAAW,EAAE,cAAwB,EAAE,SAAkB;QACxG,IAAI,SAAc,CAAC;QACnB,IAAI,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAAC,IAAI,WAAW,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QAC/E,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,WAAW,IAAI,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE;YAC7E,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC;YAC5D,IAAI,cAAc,EAAE;gBAClB,MAAM,OAAO,GAAG;oBACd,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,uBAAuB,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC;oBAC3H,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;iBACnD,CAAA;gBACD,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAA;aACtF;YACD,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,4BAA4B,KAAK,EAAE,CAAC,EAAE;gBAC3D,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;aACjD;YACD,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,4BAA4B,KAAK,EAAE,EAAE;gBACtD,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,EAAE;aACjH,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAChB,IAAI,EAAE,qBAAqB,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,4BAA4B,KAAK,EAAE;gBACjG,KAAK,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,EAAE;gBACnD,MAAM,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE;aACtD,CAAC,CAAC;YACH,MAAM,aAAa,GAAG;gBACpB,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK;aAC7C,CAAA;YACD,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;YACjC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,qBAAqB,KAAK,EAAE,EAAE,CAAC,CAAC;gBACxD,IAAI,IAAI,CAAC,KAAK,EAAE;oBACd,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;iBACrB;gBACD,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,qBAAqB,KAAK,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;gBACzE,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,qBAAqB,KAAK,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;gBAC3E,MAAM,eAAe,GAAc;oBACjC,UAAU,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;oBACxC,MAAM,EAAE,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC,eAAe,GAAG,EAAE;oBAC1D,IAAI,EAAE,KAAK,CAAC,iBAAiB,GAAG,KAAK,CAAC,iBAAiB,GAAG,EAAE;oBAC5D,OAAO,EAAG,KAAK,CAAC,OAAO,GAAI,KAAK,CAAC,YAAY,GAAG,IAAI;oBACpD,QAAQ,EAAG,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,aAAa,GAAG,IAAI;oBACrD,SAAS,EAAE,KAAK,CAAC,OAAO,GAAG,SAAS,GAAG,OAAO;oBAC9C,KAAK,EAAE,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,GAAG,EAAE;oBAC/E,QAAQ,EAAE,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,GAAG,EAAE;oBAC9C,IAAI,EAAE,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,EAAE;iBACnC,CAAA;gBACD,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;aACnC,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,qBAAqB,KAAK,EAAE,EAAE,CAAC,CAAC;gBACxD,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,qBAAqB,KAAK,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;gBACzE,IAAI,IAAI,CAAC,KAAK,EAAE;oBACd,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;iBACrB;aACF,CAAC,CAAC;SACJ;KACF;IAED,gBAAgB,CAAC,QAAgB,EAAE,IAAyB;QAC1D,IAAI,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,KAAK,CAAC;QACtF,IAAI,KAAK,CAAC;QACV,QAAQ,QAAQ;YACd,KAAK,KAAK;gBACR,KAAK,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;gBAC1C,MAAM;YACR,KAAK,MAAM;gBACT,KAAK,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;gBAC1C,MAAM;YACR,KAAK,QAAQ;gBACX,KAAK,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;gBAC1C,MAAM;SACT;QACD,OAAO,KAAK,CAAC;KACd;IAED,cAAc,CAAC,UAAU,EAAE,KAAK,EAAE,WAAY;QAC5C,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACpB,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,WAAW,GAAG,MAAM,GAAG,oBAAoB,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;SAClI;QACD,IAAI,UAAU,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,EAAE,YAAY,CAAC,KAAK,MAAM,EAAE;YAChG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,WAAW,GAAG,MAAM,GAAG,oBAAoB,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;YACjI,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,WAAW,GAAG,MAAM,GAAG,oBAAoB,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;YAEnI,MAAM,eAAe,GAAc;gBACjC,UAAU,EAAE,UAAU,CAAC,UAAU;gBACjC,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,EAAE;gBAClH,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,GAAG,EAAE;gBACpH,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE;gBACxG,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,EAAE;gBAC1G,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,SAAS,GAAG,OAAO;gBAC1E,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE;gBAC/L,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE;gBACtG,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE;aAC3F,CAAA;YACD,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;SACnC;KACF;IAED,WAAW,CAAC,eAA0B;QACpC,IAAI,CAAC,KAAK,GAAG,IAAIC,KAAc,CAAC;YAC9B,WAAW,EAAE,KAAK;YAClB,YAAY,EAAE,KAAK;YACnB,WAAW,EAAE,IAAI;YACjB,MAAM,EAAE,aAAa;SACtB,CAAC,CAAC;QAEH,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC,UAAU,CAAC;aAC/C,OAAO,CAAC;;;yDAG4C,eAAe,CAAC,MAAM;uDACxB,eAAe,CAAC,IAAI;;YAE/D,eAAe,CAAC,OAAO,GAAG,yBAAyB,GAAG,eAAe,CAAC,OAAO,GAAG,SAAS,GAAG,EAAE;YAC9F,eAAe,CAAC,QAAQ,GAAG,yBAAyB,GAAG,eAAe,CAAC,QAAQ,GAAG,SAAS,GAAG,EAAE;qBACvF,eAAe,CAAC,SAAS,cAAc,eAAe,CAAC,KAAK;mCAC9C,eAAe,CAAC,QAAQ;+BAC5B,eAAe,CAAC,IAAI;;OAE5C,CAAC;aACH,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAClB;IAED,QAAQ,CAAC,GAAQ;QACf,OAAO,GAAG,CAAC,OAAO,CAAC,kCAAkC,EACjD,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;aAC7C,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;aAC3B,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;KAC7B;IAED,YAAY,CAAC,YAAY;;QACvB,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;YAElH,MAAM,KAAK,GAAG,IAAIA,KAAc,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,iBAAiB,UAAG,YAAY,CAAC,KAAK,0CAAE,eAAe,CAAA,CAAC,CAAC;YAC1H,MAAM,mBAAmB,GAAG,IAAIA,KAAc,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;iBACnE,OAAO,CAAC,mBAAmB,UAAG,YAAY,CAAC,KAAK,0CAAE,iBAAiB,CAAA,CAAC,CAAC;YAExE,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACzC,EAAE,CAAC,SAAS,GAAG,QAAQ,CAAC;YACxB,EAAE,CAAC,SAAS,GAAG,iDAAiD,YAAY,CAAC,SAAS,oEAAoE,YAAY,CAAC,SAAS,kBAAkB,CAAA;YAElM,MAAM,YAAY,GAAG,IAAID,MAAe,CAAC,EAAE,CAAC;iBACzC,QAAQ,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAElE,YAAY,CAAC,UAAU,EAAE,CAAC,gBAAgB,CAAC,YAAY,EAAE,MAAM,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC;YAC3F,YAAY,CAAC,UAAU,EAAE,CAAC,gBAAgB,CAAC,YAAY,EAAE,MAAM,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC;YAE3F,MAAM,qBAAqB,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC5D,qBAAqB,CAAC,SAAS,GAAG,QAAQ,CAAC;YAC3C,qBAAqB,CAAC,SAAS,GAAG,iDAAiD,YAAY,CAAC,SAAS,oEAAoE,YAAY,CAAC,SAAS,kBAAkB,CAAA;YAErN,MAAM,iBAAiB,GAAG,IAAIA,MAAe,CAAC,qBAAqB,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACvJ,iBAAiB,CAAC,UAAU,EAAE,CAAC,gBAAgB,CAAC,YAAY,EAAE,MAAM,iBAAiB,CAAC,WAAW,EAAE,CAAC,CAAC;YACrG,iBAAiB,CAAC,UAAU,EAAE,CAAC,gBAAgB,CAAC,YAAY,EAAE,MAAM,iBAAiB,CAAC,WAAW,EAAE,CAAC,CAAC;YACrG,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC;YACzD,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,iBAAiB,CAAC;YAEnE,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA;YACxD,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC;gBAC/B,EAAE,EAAE,WAAW,GAAG,YAAY,CAAC,KAAK;gBACpC,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,IAAI;gBACd,IAAI,EAAE,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,EAAE;gBAC9D,QAAQ,EAAE,CAAC;gBACX,iBAAiB,EAAE,YAAY,CAAC,MAAM;gBACtC,iBAAiB,EAAE,YAAY,CAAC,WAAW;gBAC3C,cAAc,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;gBAC/B,cAAc,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;gBAC7D,OAAO,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,YAAY,CAAC,WAAW,CAAC;aACrF,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;SAC7B;KACF;IAEK,oBAAoB,CAAC,KAA4B;;YACrD,IAAI,IAAI,CAAC,GAAG,EAAE;gBACZ,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,YAAY,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC;gBACxF,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC;gBAC9E,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,eAAe,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,eAAe,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC;gBAC9F,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC;gBAChF,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,qBAAqB,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,qBAAqB,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC;gBAC1G,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,4BAA4B,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,4BAA4B,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC;gBAC1H,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;gBAC5B,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC;gBAC1E,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC;gBACpF,MAAM,IAAI,CAAC;aACZ;SACF;KAAA;IACD,eAAe,CAAC,KAAU;QACxB,MAAM,iBAAiB,GAAG,IAAI,CAAC,2BAA2B,CAAC,SAAS,CAAC,CAAC,CAAM,2BAC1E,OAAA,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,0CAAE,SAAS,4CAAI,GAAG,CAAC,OAAO,CAAC,CAAC,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,0CAAE,SAAS,4CAAI,GAAG,CAAC,OAAO,CAAC,CAAC,EAAC,CAAC,CAAA,EAAA,CAAC,CAAC;QAC1K,IAAI,iBAAiB,IAAI,CAAC,EAAE;YAAE,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAA;SAAE;KAC9F;IACK,WAAW,CAAC,EAAO,EAAE,UAAkB,EAAE,eAAyB;;YACtE,IAAI,EAAE,EAAE;gBACN,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,qBAAqB,EAAE,EAAE,CAAC,EAAE;oBAChD,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,EAAE,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;oBAChF,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;oBACvD,OAAO,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,OAAO,GAAG,UAAU,CAAC,CAAC;oBAC5E,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;oBACjE,YAAY,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,OAAO,GAAG,UAAU,CAAC,CAAC;oBACjF,IAAI,UAAU,KAAK,MAAM,IAAI,eAAe,EAAE;wBAC5C,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;wBACzB,IAAI,CAAC,aAAa,EAAE,CAAC;qBACtB;iBACF;gBACD,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,EAAE;oBACvC,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;iBACxE;aACF;YACD,MAAM,IAAI,CAAC;SACZ;KAAA;IACD,WAAW,CAAC,KAAU,EAAE,eAAoC;QAC1D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM;YACjC,IAAI,KAAK,EAAE;gBACT,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;oBAC7B,IAAI,IAAI,GAAQ,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACjC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAiB,OAAO,OAAO,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA,EAAE,CAAC,CAAC;oBAClF,IAAI,CAAC,OAAO,CAAC,CAAC,GAAQ,EAAE,KAAa,OAAO,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;wBAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA,EAAE,CAAC,CAAC;oBAC3F,KAAK,GAAG,IAAI,CAAA;iBACb;gBACD,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;oBAC1F,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC7C,KAAK,CAAC,GAAG,CAAC,CAAC,IAAS;wBAClB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;qBAC1B,CAAC,CAAA;iBACH;aACF;YACD,IAAI,eAAe,EAAE;gBACnB,MAAM,OAAO,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,uBAAuB,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;gBACrM,UAAU,CAAC;oBACT,IAAI,eAAe,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;wBAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAA;iBACvI,EAAE,GAAG,CAAC,CAAC;gBACR,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,KAAU,OAAO,IAAI,KAAK,CAAC,gBAAgB,EAAE;oBAAE,OAAO,CAAC,IAAI,CAAC,CAAA;iBAAE,EAAE,CAAC,CAAC;aAC7F;SACF,CAAC,CAAC;KACJ;IAED,aAAa,CAAC,MAAe;QAC3B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM;YACjC,IAAI,CAAC,MAAM,GAAG,IAAIJ,YAAqB,EAAE,CAAC;YAE1C,IAAI,IAAI,CAAC,2BAA2B,CAAC,MAAM,IAAI,CAAC,EAAE;gBAChD,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,KAAa;oBAC5D,IAAI,CAAC,GAAG,CAAC,CAAC,KAAU;wBAClB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;qBAC3B,CAAC,CAAA;oBACF,IAAI,KAAK,MAAM,IAAI,CAAC,2BAA2B,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;wBAC3D,MAAM,OAAO,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,uBAAuB,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;wBACrM,UAAU,CAAC;4BACT,IAAI,IAAI,CAAC,2BAA2B,CAAC,MAAM,GAAG,CAAC;gCAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;yBAC/F,EAAE,GAAG,CAAC,CAAC;wBACR,OAAO,CAAC,IAAI,CAAC,CAAC;qBACf;iBACF,CAAC,CAAA;aACH;iBAAM;gBACL,OAAO,CAAC,IAAI,CAAC,CAAC;aACf;SACF,CAAC,CAAA;KACH;IACD,SAAS,CAAC,KAAU,EAAE,CAAe,EAAE,IAAY,EAAE,cAAwB,EAAE,eAAyB;QACtG,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM;YACjC,IAAI,KAAK,GAAQ,EAAE,CAAC;YACpB,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;gBAC9B,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAA;gBAC9B,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,GAAQ;oBAC5E,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE;wBACxB,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;wBAC3C,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAiB,OAAO,OAAO,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA,EAAE,CAAC,CAAC;wBAClF,IAAI,CAAC,OAAO,CAAC,CAAC,GAAQ,EAAE,KAAa,OAAO,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;4BAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA,EAAE,CAAC,CAAC;wBAC3F,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;wBACrB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC,CAAC;wBACjD,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC;4BAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC;wBAC5G,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;qBACpB;yBAAM;wBACL,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;qBACzC;oBACD,OAAO,CAAC,IAAI,CAAC,CAAC;iBACf,EAAE,CAAC,GAAG,OAAO,IAAI,GAAG,EAAE;oBAAE,MAAM,CAAC,KAAK,CAAC,CAAA;iBAAE,EAAE,CAAC,CAAC;aAC7C;iBAAM,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;gBACtD,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC7C,IAAI,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACpC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAiB,OAAO,OAAO,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA,EAAE,CAAC,CAAC;oBAClF,IAAI,CAAC,OAAO,CAAC,CAAC,GAAQ,EAAE,KAAa,OAAO,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;wBAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA,EAAE,CAAC,CAAC;oBAC3F,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;oBACxC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,CAAC,CAAA;iBACpD;gBAAA,CAAC;aACH;SACF,CAAC,CAAA;KACH;IACD,UAAU,KAAK,IAAI,CAAC,MAAM,GAAG,IAAIA,YAAqB,EAAE,CAAC,CAAC,IAAI,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE;IACvH,cAAc,CAAC,OAAe,IAAI,OAAO,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,EAAE;IACtG,wBAAwB;QACtB,IAAI,CAAC,MAAM,GAAG,IAAIA,YAAqB,EAAE,CAAC;QAAC,IAAI,CAAC,2BAA2B,GAAG,EAAE,CAAC;KAClF;IAED,QAAQ,CAAC,KAAU;QACjB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE;YAC1B,IAAI,CAAC,uBAAuB,CAAC,WAAW,GAAG,CAAC,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;YAC7I,UAAU,CAAC;gBACT,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,uBAAuB,CAAC,WAAW,IAAI,KAAK,CAAC,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;aACzO,EAAE,GAAG,CAAC,CAAC;SACT;KACF;IAED,eAAe,CAAC,MAAW;QACzB,IAAI,CAAC,uBAAuB,CAAC,WAAW,GAAG,MAAM,CAAC;KACnD;IACD,UAAU,CAAC,OAAY,IAAI,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA,EAAE;IACnD,YAAY,KAAK,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA,EAAE;IACtC,gBAAgB,CAAC,IAAa;QAC5B,IAAI,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,KAAa;YAC/B,MAAM,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;YAC7D,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;YAC9B,IAAI,KAAK,MAAM,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;gBAC/B,IAAI,CAAC,aAAa,EAAE,CAAC;aACtB;SACF,CAAC,CAAA;KACH;;;;YAhbF,UAAU,SAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;YAPzB,YAAY;YACZ,YAAY;;;MCLR,KAAK;IAAlB;QACE,UAAK,GAAW,CAAC,CAAC;KAsCnB;CAAA;MAEY,cAAc,GAAG,CAAC,oBAAoB,EAAE,gBAAgB,EAAC;IAC1D;AAAZ,WAAY,cAAc;IACxB,8CAA4B,CAAA;IAC5B,yCAAuB,CAAA;AACzB,CAAC,EAHW,cAAc,KAAd,cAAc,QAGzB;MAEY,mBAAmB,GAAG,CAAC,kBAAkB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,EAAC;IAC1H;AAAZ,WAAY,mBAAmB;IAC7B,4DAAqC,CAAA;IACrC,4DAAqC,CAAA;IACrC,iDAA0B,CAAA;IAC1B,qDAA8B,CAAA;IAC9B,+CAAwB,CAAA;IACxB,wCAAiB,CAAA;AACnB,CAAC,EAPW,mBAAmB,KAAnB,mBAAmB,QAO9B;MAEY,gBAAgB,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,iBAAiB,EAAE,mBAAmB,EAAC;IAClH;AAAZ,WAAY,iBAAiB;IAC3B,6CAAwB,CAAA;IACxB,kCAAa,CAAA;IACb,2CAAsB,CAAA;IACtB,0CAAqB,CAAA;IACrB,kCAAa,CAAA;IACb,uDAAkC,CAAA;IAClC,2DAAsC,CAAA;AACxC,CAAC,EARW,iBAAiB,KAAjB,iBAAiB,QAQ5B;MAEY,SAAS;;;ACrEtB;;;;ACAA;;;;;;"}
|
|
@@ -3,7 +3,6 @@ import { BehaviorSubject } from 'rxjs';
|
|
|
3
3
|
import { PopupData, Route } from './data-model';
|
|
4
4
|
import { UtilsService } from './utils.service';
|
|
5
5
|
import { EventManager } from '@angular/platform-browser';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
6
|
export declare class CoolmapService {
|
|
8
7
|
utils: UtilsService;
|
|
9
8
|
eventManager: EventManager;
|
|
@@ -40,6 +39,4 @@ export declare class CoolmapService {
|
|
|
40
39
|
setPadding(padding: any): void;
|
|
41
40
|
clearPadding(): void;
|
|
42
41
|
removeJobFromMap(data: Route[]): void;
|
|
43
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<CoolmapService, never>;
|
|
44
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<CoolmapService>;
|
|
45
42
|
}
|
|
@@ -2,7 +2,6 @@ import { HttpClient } from '@angular/common/http';
|
|
|
2
2
|
import { MatSnackBar } from '@angular/material/snack-bar';
|
|
3
3
|
import { BehaviorSubject } from 'rxjs';
|
|
4
4
|
import { Route } from './data-model';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
5
|
export declare class UtilsService {
|
|
7
6
|
http: HttpClient;
|
|
8
7
|
snackBar: MatSnackBar;
|
|
@@ -44,6 +43,4 @@ export declare class UtilsService {
|
|
|
44
43
|
getdictValue(key: string): any;
|
|
45
44
|
removedictValue(key: string): void;
|
|
46
45
|
conveySearchIcon(value: any): boolean;
|
|
47
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<UtilsService, never>;
|
|
48
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<UtilsService>;
|
|
49
46
|
}
|
package/package.json
CHANGED
|
@@ -1,53 +1,28 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aggdirect/coolmap-services",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.5",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/common": "^11.2.14",
|
|
6
6
|
"@angular/core": "^11.2.14"
|
|
7
7
|
},
|
|
8
8
|
"dependencies": {
|
|
9
|
-
"tslib": "^2.
|
|
10
|
-
},
|
|
11
|
-
"allowedNonPeerDependencies": {
|
|
12
|
-
"mapbox-gl": "^2.10.0",
|
|
13
|
-
"@types/mapbox-gl": "^2.7.5",
|
|
14
|
-
"@turf/turf": "^6.5.0",
|
|
15
|
-
"deck.gl": "^8.4.16"
|
|
16
|
-
},
|
|
17
|
-
"description": "This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 14.2.0.",
|
|
18
|
-
"main": "karma.conf.js",
|
|
19
|
-
"author": "Navin Vishwakarma <navin@ogmaconceptions.com>",
|
|
20
|
-
"contributors": [
|
|
21
|
-
"Santanu Das <santanu.das@ogmaconceptions.com>"
|
|
22
|
-
],
|
|
23
|
-
"license": "ISC",
|
|
24
|
-
"keywords": [
|
|
25
|
-
"Coolmap-service"
|
|
26
|
-
],
|
|
27
|
-
"module": "fesm2015/aggdirect-coolmap-services.mjs",
|
|
28
|
-
"es2020": "fesm2020/aggdirect-coolmap-services.mjs",
|
|
29
|
-
"esm2020": "esm2020/aggdirect-coolmap-services.mjs",
|
|
30
|
-
"fesm2020": "fesm2020/aggdirect-coolmap-services.mjs",
|
|
31
|
-
"fesm2015": "fesm2015/aggdirect-coolmap-services.mjs",
|
|
32
|
-
"typings": "index.d.ts",
|
|
33
|
-
"exports": {
|
|
34
|
-
"./package.json": {
|
|
35
|
-
"default": "./package.json"
|
|
36
|
-
},
|
|
37
|
-
".": {
|
|
38
|
-
"types": "./index.d.ts",
|
|
39
|
-
"esm2020": "./esm2020/aggdirect-coolmap-services.mjs",
|
|
40
|
-
"es2020": "./fesm2020/aggdirect-coolmap-services.mjs",
|
|
41
|
-
"es2015": "./fesm2015/aggdirect-coolmap-services.mjs",
|
|
42
|
-
"node": "./fesm2015/aggdirect-coolmap-services.mjs",
|
|
43
|
-
"default": "./fesm2020/aggdirect-coolmap-services.mjs"
|
|
44
|
-
}
|
|
9
|
+
"tslib": "^2.0.0"
|
|
45
10
|
},
|
|
11
|
+
"main": "bundles/coolmap-services.umd.js",
|
|
12
|
+
"module": "fesm2015/coolmap-services.js",
|
|
13
|
+
"es2015": "fesm2015/coolmap-services.js",
|
|
14
|
+
"esm2015": "esm2015/coolmap-services.js",
|
|
15
|
+
"fesm2015": "fesm2015/coolmap-services.js",
|
|
16
|
+
"typings": "coolmap-services.d.ts",
|
|
17
|
+
"metadata": "coolmap-services.metadata.json",
|
|
46
18
|
"sideEffects": false,
|
|
19
|
+
"description": "This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 11.2.14.",
|
|
47
20
|
"directories": {
|
|
48
21
|
"lib": "lib"
|
|
49
22
|
},
|
|
50
23
|
"scripts": {
|
|
51
24
|
"test": "echo \"Error: no test specified\" && exit 1"
|
|
52
|
-
}
|
|
25
|
+
},
|
|
26
|
+
"author": "",
|
|
27
|
+
"license": "ISC"
|
|
53
28
|
}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
export * from './public-api';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdnZGlyZWN0LWNvb2xtYXAtc2VydmljZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9jb29sbWFwLXNlcnZpY2VzL3NyYy9hZ2dkaXJlY3QtY29vbG1hcC1zZXJ2aWNlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
|
|
@@ -1,210 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { BehaviorSubject } from 'rxjs';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "@angular/common/http";
|
|
5
|
-
import * as i2 from "@angular/material/snack-bar";
|
|
6
|
-
export class UtilsService {
|
|
7
|
-
constructor(http, snackBar) {
|
|
8
|
-
this.http = http;
|
|
9
|
-
this.snackBar = snackBar;
|
|
10
|
-
this.analyticsRESTURL = '';
|
|
11
|
-
this.RESTURLPrefix = '';
|
|
12
|
-
this.pickupOptions = [];
|
|
13
|
-
this.destOptions = [];
|
|
14
|
-
this.ownerOptions = [];
|
|
15
|
-
this.customerOptions = [];
|
|
16
|
-
this.unitOptions = [];
|
|
17
|
-
this.materialOptions = [];
|
|
18
|
-
this.jcodeOptions = [];
|
|
19
|
-
this.driverOption = [];
|
|
20
|
-
this.truckingCompanayOption = [];
|
|
21
|
-
this.routeNameOptions = [];
|
|
22
|
-
this.preventnavChange = new BehaviorSubject(false);
|
|
23
|
-
this.navChangeObserve = this.preventnavChange.asObservable();
|
|
24
|
-
this.clearViewRouteforJobCode = new BehaviorSubject(false);
|
|
25
|
-
this.clearViewRouteforJobCodeObserve = this.clearViewRouteforJobCode.asObservable();
|
|
26
|
-
this.preVentJobdetailclose = new BehaviorSubject(false);
|
|
27
|
-
this.getpreVentJobdetailclose = this.preVentJobdetailclose.asObservable();
|
|
28
|
-
this.routeDetailsUtility = new BehaviorSubject({});
|
|
29
|
-
this.getrouteDetailsUtility = this.routeDetailsUtility.asObservable();
|
|
30
|
-
this.removeMapEntity = new BehaviorSubject({});
|
|
31
|
-
this.removeMapEntityUtility = this.removeMapEntity.asObservable();
|
|
32
|
-
this.dict = new Map();
|
|
33
|
-
this.analyticsRESTURL = 'https://test-analytics.aggdirect.com/REST/';
|
|
34
|
-
this.RESTURLPrefix = 'https://test-server.aggdirect.com/REST/';
|
|
35
|
-
}
|
|
36
|
-
getDateFormat(strVal, seprater) {
|
|
37
|
-
seprater = seprater ? seprater : '-';
|
|
38
|
-
const mydate = strVal;
|
|
39
|
-
return mydate?.getFullYear() + seprater + ((mydate ? mydate.getMonth() : 0) + 1) + seprater + mydate?.getDate();
|
|
40
|
-
}
|
|
41
|
-
getData(path) { return this.http.get(`${this.analyticsRESTURL}${path}`); }
|
|
42
|
-
postdata(path, data) { return this.http.post(`${this.analyticsRESTURL}${path}`, data); }
|
|
43
|
-
postDataWithRestUrl(path, data) { return this.http.post(`${this.RESTURLPrefix}${path}`, data); }
|
|
44
|
-
fetchAutoCompleteLocations(keyword) {
|
|
45
|
-
return this.http.get(`https://api.mapbox.com/geocoding/v5/mapbox.places/${keyword}.json?access_token=pk.eyJ1Ijoic2FudGFudS1vZ21hIiwiYSI6ImNsOGQ0cDVrNjAweTMzb3RmdG9ieTU5ZDkifQ.I6ZS7mViZYSvBo4zz-mGQQ&country=US`);
|
|
46
|
-
}
|
|
47
|
-
openSnackBar(message, className) {
|
|
48
|
-
this.snackBar.open(message, '', {
|
|
49
|
-
duration: 5000, verticalPosition: 'top', horizontalPosition: 'center', panelClass: [className ? className : 'default']
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
makeOptions(item) {
|
|
53
|
-
if (item.order_number) {
|
|
54
|
-
(this.jcodeOptions.findIndex((elem) => elem.job_id === item.job_id) === -1) ? this.jcodeOptions.push({ job_code: item.order_number, job_id: item.job_id }) : null;
|
|
55
|
-
if (item.driver_list && item.driver_list?.length > 0) {
|
|
56
|
-
item.driver_list.forEach((driver) => {
|
|
57
|
-
this.driverOption.findIndex(elem => elem === driver['driver_name']) === -1 ? this.driverOption.push(driver['driver_name']) : null;
|
|
58
|
-
this.truckingCompanayOption.findIndex(elem => elem === driver['trucking_company']) === -1 ? this.truckingCompanayOption.push(driver['trucking_company']) : null;
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
((this.pickupOptions.findIndex((elem) => elem === item.pickup_location)) === -1) ? this.pickupOptions.push(item.pickup_location) : null;
|
|
63
|
-
((this.destOptions.findIndex((elem) => elem === item.delivery_location)) === -1) ? this.destOptions.push(item.delivery_location) : null;
|
|
64
|
-
(this.customerOptions.findIndex((customer) => customer === item.customer_name) === -1) ? this.customerOptions.push(item.customer_name) : null;
|
|
65
|
-
(this.unitOptions.findIndex((elem) => elem === item.unit) === -1) ? this.unitOptions.push(item.unit) : null;
|
|
66
|
-
(this.materialOptions.findIndex((elem) => elem === item.material) === -1) ? this.materialOptions.push(item.material) : null;
|
|
67
|
-
if (item.route_name)
|
|
68
|
-
this.routeNameOptions.findIndex(elem => elem === item.route_name) === -1 ? this.routeNameOptions.push(item.route_name) : null;
|
|
69
|
-
}
|
|
70
|
-
filter(value, filters) {
|
|
71
|
-
if (typeof value !== 'string') {
|
|
72
|
-
return [];
|
|
73
|
-
}
|
|
74
|
-
const filterValue = value.toLowerCase();
|
|
75
|
-
if (filterValue === '') {
|
|
76
|
-
return [];
|
|
77
|
-
}
|
|
78
|
-
const searchResults = [];
|
|
79
|
-
this.unitOptions.map(unit => {
|
|
80
|
-
if (unit.toLowerCase().includes(filterValue)) {
|
|
81
|
-
searchResults.push({ "type": "unit", "label": unit, "value": unit });
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
this.customerOptions.map(unit => {
|
|
85
|
-
if (unit.toLowerCase().includes(filterValue)) {
|
|
86
|
-
searchResults.push({ "type": "customer", "label": unit, "value": unit });
|
|
87
|
-
}
|
|
88
|
-
});
|
|
89
|
-
this.materialOptions.map(unit => {
|
|
90
|
-
if (unit.toLowerCase().includes(filterValue)) {
|
|
91
|
-
searchResults.push({ "type": "material", "label": unit, "value": unit });
|
|
92
|
-
}
|
|
93
|
-
});
|
|
94
|
-
this.pickupOptions.map(unit => {
|
|
95
|
-
if (unit.toLowerCase().includes(filterValue)) {
|
|
96
|
-
searchResults.push({ "type": "pickup location", "label": unit, "value": unit });
|
|
97
|
-
}
|
|
98
|
-
});
|
|
99
|
-
this.destOptions.map(unit => {
|
|
100
|
-
if (unit.toLowerCase().includes(filterValue)) {
|
|
101
|
-
searchResults.push({ "type": "destination location", "label": unit, "value": unit });
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
|
-
this.jcodeOptions.map(unit => {
|
|
105
|
-
if (unit.job_code.toLowerCase().includes(filterValue)) {
|
|
106
|
-
searchResults.push({ "type": "job", "label": unit['job_code'], "value": unit });
|
|
107
|
-
}
|
|
108
|
-
});
|
|
109
|
-
this.driverOption.map(unit => {
|
|
110
|
-
if (unit.toLowerCase().includes(filterValue)) {
|
|
111
|
-
searchResults.push({ "type": "Driver", "label": unit, "value": unit });
|
|
112
|
-
}
|
|
113
|
-
});
|
|
114
|
-
this.truckingCompanayOption.map(unit => {
|
|
115
|
-
if (unit.toLowerCase().includes(filterValue)) {
|
|
116
|
-
searchResults.push({ "type": "Trucking Company", "label": unit, "value": unit });
|
|
117
|
-
}
|
|
118
|
-
});
|
|
119
|
-
this.routeNameOptions.map(unit => {
|
|
120
|
-
if (unit.toLowerCase().includes(filterValue)) {
|
|
121
|
-
searchResults.push({ "type": "Route name", "label": unit, "value": unit });
|
|
122
|
-
}
|
|
123
|
-
});
|
|
124
|
-
const searchDict = {};
|
|
125
|
-
filters.map((filter) => {
|
|
126
|
-
searchDict[filter['name'] + filter['type']] = filter;
|
|
127
|
-
});
|
|
128
|
-
const furtherFilter = [];
|
|
129
|
-
searchResults.map(search => {
|
|
130
|
-
if ((search['label'] + search['type']) in searchDict) { }
|
|
131
|
-
else {
|
|
132
|
-
furtherFilter.push(search);
|
|
133
|
-
}
|
|
134
|
-
});
|
|
135
|
-
return furtherFilter;
|
|
136
|
-
}
|
|
137
|
-
getSearchResults(list, filterval) {
|
|
138
|
-
return list.filter(element => {
|
|
139
|
-
const result_list_boolean = [];
|
|
140
|
-
if (filterval.length > 0) {
|
|
141
|
-
if (filterval[0]['type'] === 'unit') {
|
|
142
|
-
result_list_boolean.push(filterval[0]['name'] === element[filterval[0]['type']]);
|
|
143
|
-
}
|
|
144
|
-
if (filterval[0]['type'] === 'customer') {
|
|
145
|
-
result_list_boolean.push(filterval[0]['name'] === element['customer_name']);
|
|
146
|
-
}
|
|
147
|
-
if (filterval[0]['type'] === 'material') {
|
|
148
|
-
result_list_boolean.push(filterval[0]['name'] === element[filterval[0]['type']]);
|
|
149
|
-
}
|
|
150
|
-
if (filterval[0]['type'] === 'pickup location') {
|
|
151
|
-
result_list_boolean.push(filterval[0]['name'] === element['pickup_location']);
|
|
152
|
-
}
|
|
153
|
-
if (filterval[0]['type'] === 'destination location') {
|
|
154
|
-
result_list_boolean.push(filterval[0]['name'] === element['delivery_location']);
|
|
155
|
-
}
|
|
156
|
-
if (filterval[0]['type'] === 'job') {
|
|
157
|
-
result_list_boolean.push(filterval[0]['name'] === element['order_number']);
|
|
158
|
-
}
|
|
159
|
-
if (filterval[0]['type'] === 'Route name') {
|
|
160
|
-
result_list_boolean.push(filterval[0]['name'] === element['route_name']);
|
|
161
|
-
}
|
|
162
|
-
if (filterval[0]['type'] === 'Driver') {
|
|
163
|
-
const index = element.driver_list?.findIndex(ele => { return filterval[0]['name'] === ele['driver_name']; });
|
|
164
|
-
if (index !== -1)
|
|
165
|
-
result_list_boolean.push(true);
|
|
166
|
-
}
|
|
167
|
-
if (filterval[0]['type'] === 'Trucking Company') {
|
|
168
|
-
const index = element.driver_list?.findIndex(ele => { return filterval[0]['name'] === ele['trucking_company']; });
|
|
169
|
-
if (index !== -1)
|
|
170
|
-
result_list_boolean.push(true);
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
if (result_list_boolean.length > 0) {
|
|
174
|
-
return result_list_boolean.reduce((prev, curr) => prev && curr);
|
|
175
|
-
}
|
|
176
|
-
return false;
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
|
-
clearOptions() {
|
|
180
|
-
this.pickupOptions = [];
|
|
181
|
-
this.destOptions = [];
|
|
182
|
-
this.ownerOptions = [];
|
|
183
|
-
this.customerOptions = [];
|
|
184
|
-
this.unitOptions = [];
|
|
185
|
-
this.materialOptions = [];
|
|
186
|
-
this.jcodeOptions = [];
|
|
187
|
-
this.routeNameOptions = [];
|
|
188
|
-
}
|
|
189
|
-
setdictValue(key, value) {
|
|
190
|
-
this.dict.set(key, value);
|
|
191
|
-
}
|
|
192
|
-
getdictValue(key) {
|
|
193
|
-
return JSON.parse(this.dict.get(key));
|
|
194
|
-
}
|
|
195
|
-
removedictValue(key) {
|
|
196
|
-
this.dict.delete(key);
|
|
197
|
-
}
|
|
198
|
-
conveySearchIcon(value) {
|
|
199
|
-
if (value && typeof (value) !== 'object')
|
|
200
|
-
return true;
|
|
201
|
-
return false;
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
UtilsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: UtilsService, deps: [{ token: i1.HttpClient }, { token: i2.MatSnackBar }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
205
|
-
UtilsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: UtilsService, providedIn: 'root' });
|
|
206
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: UtilsService, decorators: [{
|
|
207
|
-
type: Injectable,
|
|
208
|
-
args: [{ providedIn: 'root' }]
|
|
209
|
-
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.MatSnackBar }]; } });
|
|
210
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nvb2xtYXAtc2VydmljZXMvc3JjL2xpYi9zZXJ2aWNlL3V0aWxzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7O0FBSXZDLE1BQU0sT0FBTyxZQUFZO0lBd0J2QixZQUFtQixJQUFnQixFQUFRLFFBQXFCO1FBQTdDLFNBQUksR0FBSixJQUFJLENBQVk7UUFBUSxhQUFRLEdBQVIsUUFBUSxDQUFhO1FBdkJoRSxxQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDdEIsa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFDbkIsa0JBQWEsR0FBVSxFQUFFLENBQUM7UUFDMUIsZ0JBQVcsR0FBVSxFQUFFLENBQUM7UUFDeEIsaUJBQVksR0FBVSxFQUFFLENBQUM7UUFDekIsb0JBQWUsR0FBVSxFQUFFLENBQUM7UUFDNUIsZ0JBQVcsR0FBVSxFQUFFLENBQUM7UUFDeEIsb0JBQWUsR0FBVSxFQUFFLENBQUM7UUFDNUIsaUJBQVksR0FBVSxFQUFFLENBQUM7UUFDekIsaUJBQVksR0FBVSxFQUFFLENBQUM7UUFDekIsMkJBQXNCLEdBQVUsRUFBRSxDQUFDO1FBQ25DLHFCQUFnQixHQUFVLEVBQUUsQ0FBQztRQUN0QixxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyRCxxQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDeEQsNkJBQXdCLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEQsb0NBQStCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQy9FLDBCQUFxQixHQUFHLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25ELDZCQUF3QixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNyRSx3QkFBbUIsR0FBRyxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5QywyQkFBc0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDakUsb0JBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxQywyQkFBc0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzdELFNBQUksR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUUvQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsNENBQTRDLENBQUM7UUFDckUsSUFBSSxDQUFDLGFBQWEsR0FBRyx5Q0FBeUMsQ0FBQztJQUNqRSxDQUFDO0lBQ0QsYUFBYSxDQUFDLE1BQW1CLEVBQUUsUUFBaUI7UUFDbEQsUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDckMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3RCLE9BQU8sTUFBTSxFQUFFLFdBQVcsRUFBRSxHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsR0FBRyxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDbEgsQ0FBQztJQUNELE9BQU8sQ0FBQyxJQUFZLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUNqRixRQUFRLENBQUMsSUFBWSxFQUFFLElBQVMsSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUNwRyxtQkFBbUIsQ0FBQyxJQUFZLEVBQUUsSUFBUyxJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUM1RywwQkFBMEIsQ0FBQyxPQUFlO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMscURBQXFELE9BQU8sZ0lBQWdJLENBQUMsQ0FBQTtJQUNwTixDQUFDO0lBQ0QsWUFBWSxDQUFDLE9BQWUsRUFBRSxTQUFrQjtRQUM5QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxFQUFFO1lBQzlCLFFBQVEsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1NBQ3ZILENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsSUFBVztRQUNyQixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNsSyxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNwRCxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO29CQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztvQkFDbEksSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDbEssQ0FBQyxDQUFDLENBQUM7YUFDSjtTQUNGO1FBQ0QsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDeEksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3hJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDOUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUM1RyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzVILElBQUksSUFBSSxDQUFDLFVBQVU7WUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNySixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQWEsRUFBRSxPQUFZO1FBQ2hDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQUUsT0FBTyxFQUFFLENBQUE7U0FBRTtRQUM1QyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDeEMsSUFBSSxXQUFXLEtBQUssRUFBRSxFQUFFO1lBQUUsT0FBTyxFQUFFLENBQUE7U0FBRTtRQUNyQyxNQUFNLGFBQWEsR0FBVSxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDMUIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUM1QyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO2FBQ3JFO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM5QixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUU7Z0JBQzVDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7YUFDekU7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzlCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRTtnQkFDNUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTthQUN6RTtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDNUIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUM1QyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7YUFDaEY7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzFCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRTtnQkFDNUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxzQkFBc0IsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO2FBQ3JGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMzQixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUNyRCxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO2FBQ2hGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMzQixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUU7Z0JBQzVDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7YUFDdkU7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDckMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUM1QyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7YUFDakY7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDL0IsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUM1QyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO2FBQzNFO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLFVBQVUsR0FBUSxFQUFFLENBQUE7UUFDMUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQTZCLEVBQUUsRUFBRTtZQUM1QyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FBQTtRQUNGLE1BQU0sYUFBYSxHQUFVLEVBQUUsQ0FBQztRQUNoQyxhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksVUFBVSxFQUFFLEdBQUc7aUJBQ3BEO2dCQUFFLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7YUFBRTtRQUNyQyxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUFhLEVBQUUsU0FBYztRQUM1QyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDM0IsTUFBTSxtQkFBbUIsR0FBRyxFQUFFLENBQUE7WUFDOUIsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDeEIsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssTUFBTSxFQUFFO29CQUNuQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFnQixDQUFDLENBQUMsQ0FBQztpQkFDakc7Z0JBQ0QsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssVUFBVSxFQUFFO29CQUN2QyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO2lCQUM3RTtnQkFDRCxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxVQUFVLEVBQUU7b0JBQ3ZDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQWdCLENBQUMsQ0FBQyxDQUFDO2lCQUNqRztnQkFDRCxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxpQkFBaUIsRUFBRTtvQkFDOUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO2lCQUMvRTtnQkFDRCxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxzQkFBc0IsRUFBRTtvQkFDbkQsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO2lCQUNqRjtnQkFDRCxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLEVBQUU7b0JBQ2xDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7aUJBQzVFO2dCQUNELElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLFlBQVksRUFBRTtvQkFDekMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztpQkFDMUU7Z0JBQ0QsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssUUFBUSxFQUFFO29CQUNyQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLE9BQU8sU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUM1RyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUM7d0JBQUUsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUNsRDtnQkFDRCxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxrQkFBa0IsRUFBRTtvQkFDL0MsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNqSCxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUM7d0JBQUUsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUNsRDthQUNGO1lBQ0QsSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNsQyxPQUFPLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQzthQUNqRTtZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUNELFlBQVksQ0FBQyxHQUFXLEVBQUUsS0FBYTtRQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUNELFlBQVksQ0FBQyxHQUFXO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFDRCxlQUFlLENBQUMsR0FBVztRQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsZ0JBQWdCLENBQUMsS0FBVTtRQUN6QixJQUFHLEtBQUssSUFBSSxPQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssUUFBUTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3BELE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQzs7MEdBN0xVLFlBQVk7OEdBQVosWUFBWSxjQURDLE1BQU07NEZBQ25CLFlBQVk7a0JBRHhCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBSb3V0ZSB9IGZyb20gJy4vZGF0YS1tb2RlbCc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgVXRpbHNTZXJ2aWNlIHtcclxuICBhbmFseXRpY3NSRVNUVVJMID0gJyc7XHJcbiAgUkVTVFVSTFByZWZpeCA9ICcnO1xyXG4gIHBpY2t1cE9wdGlvbnM6IGFueVtdID0gW107XHJcbiAgZGVzdE9wdGlvbnM6IGFueVtdID0gW107XHJcbiAgb3duZXJPcHRpb25zOiBhbnlbXSA9IFtdO1xyXG4gIGN1c3RvbWVyT3B0aW9uczogYW55W10gPSBbXTtcclxuICB1bml0T3B0aW9uczogYW55W10gPSBbXTtcclxuICBtYXRlcmlhbE9wdGlvbnM6IGFueVtdID0gW107XHJcbiAgamNvZGVPcHRpb25zOiBhbnlbXSA9IFtdO1xyXG4gIGRyaXZlck9wdGlvbjogYW55W10gPSBbXTtcclxuICB0cnVja2luZ0NvbXBhbmF5T3B0aW9uOiBhbnlbXSA9IFtdO1xyXG4gIHJvdXRlTmFtZU9wdGlvbnM6IGFueVtdID0gW107XHJcbiAgcHVibGljIHByZXZlbnRuYXZDaGFuZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcclxuICBuYXZDaGFuZ2VPYnNlcnZlID0gdGhpcy5wcmV2ZW50bmF2Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIGNsZWFyVmlld1JvdXRlZm9ySm9iQ29kZSA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xyXG4gIGNsZWFyVmlld1JvdXRlZm9ySm9iQ29kZU9ic2VydmUgPSB0aGlzLmNsZWFyVmlld1JvdXRlZm9ySm9iQ29kZS5hc09ic2VydmFibGUoKTtcclxuICBwcmVWZW50Sm9iZGV0YWlsY2xvc2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcclxuICBnZXRwcmVWZW50Sm9iZGV0YWlsY2xvc2UgPSB0aGlzLnByZVZlbnRKb2JkZXRhaWxjbG9zZS5hc09ic2VydmFibGUoKTtcclxuICByb3V0ZURldGFpbHNVdGlsaXR5ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh7fSk7XHJcbiAgZ2V0cm91dGVEZXRhaWxzVXRpbGl0eSA9IHRoaXMucm91dGVEZXRhaWxzVXRpbGl0eS5hc09ic2VydmFibGUoKTtcclxuICByZW1vdmVNYXBFbnRpdHkgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHt9KTtcclxuICByZW1vdmVNYXBFbnRpdHlVdGlsaXR5ID0gdGhpcy5yZW1vdmVNYXBFbnRpdHkuYXNPYnNlcnZhYmxlKCk7XHJcbiAgZGljdCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XHJcbiAgY29uc3RydWN0b3IocHVibGljIGh0dHA6IEh0dHBDbGllbnQscHVibGljIHNuYWNrQmFyOiBNYXRTbmFja0Jhcikge1xyXG4gICAgdGhpcy5hbmFseXRpY3NSRVNUVVJMID0gJ2h0dHBzOi8vdGVzdC1hbmFseXRpY3MuYWdnZGlyZWN0LmNvbS9SRVNULyc7XHJcbiAgICB0aGlzLlJFU1RVUkxQcmVmaXggPSAnaHR0cHM6Ly90ZXN0LXNlcnZlci5hZ2dkaXJlY3QuY29tL1JFU1QvJztcclxuICB9XHJcbiAgZ2V0RGF0ZUZvcm1hdChzdHJWYWw6IERhdGUgfCBudWxsLCBzZXByYXRlcj86IHN0cmluZykge1xyXG4gICAgc2VwcmF0ZXIgPSBzZXByYXRlciA/IHNlcHJhdGVyIDogJy0nO1xyXG4gICAgY29uc3QgbXlkYXRlID0gc3RyVmFsO1xyXG4gICAgcmV0dXJuIG15ZGF0ZT8uZ2V0RnVsbFllYXIoKSArIHNlcHJhdGVyICsgKChteWRhdGUgPyBteWRhdGUuZ2V0TW9udGgoKSA6IDApICsgMSkgKyBzZXByYXRlciArIG15ZGF0ZT8uZ2V0RGF0ZSgpO1xyXG4gIH1cclxuICBnZXREYXRhKHBhdGg6IHN0cmluZykgeyByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmFuYWx5dGljc1JFU1RVUkx9JHtwYXRofWApIH1cclxuICBwb3N0ZGF0YShwYXRoOiBzdHJpbmcsIGRhdGE6IGFueSkgeyByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5hbmFseXRpY3NSRVNUVVJMfSR7cGF0aH1gLCBkYXRhKSB9XHJcbiAgcG9zdERhdGFXaXRoUmVzdFVybChwYXRoOiBzdHJpbmcsIGRhdGE6IGFueSkgeyByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5SRVNUVVJMUHJlZml4fSR7cGF0aH1gLCBkYXRhKSB9XHJcbiAgZmV0Y2hBdXRvQ29tcGxldGVMb2NhdGlvbnMoa2V5d29yZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChgaHR0cHM6Ly9hcGkubWFwYm94LmNvbS9nZW9jb2RpbmcvdjUvbWFwYm94LnBsYWNlcy8ke2tleXdvcmR9Lmpzb24/YWNjZXNzX3Rva2VuPXBrLmV5SjFJam9pYzJGdWRHRnVkUzF2WjIxaElpd2lZU0k2SW1Oc09HUTBjRFZyTmpBd2VUTXpiM1JtZEc5aWVUVTVaRGtpZlEuSTZaUzdtVmlaWVN2Qm80enotbUdRUSZjb3VudHJ5PVVTYClcclxuICB9XHJcbiAgb3BlblNuYWNrQmFyKG1lc3NhZ2U6IHN0cmluZywgY2xhc3NOYW1lPzogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNuYWNrQmFyLm9wZW4obWVzc2FnZSwgJycsIHtcclxuICAgICAgZHVyYXRpb246IDUwMDAsIHZlcnRpY2FsUG9zaXRpb246ICd0b3AnLCBob3Jpem9udGFsUG9zaXRpb246ICdjZW50ZXInLCBwYW5lbENsYXNzOiBbY2xhc3NOYW1lID8gY2xhc3NOYW1lIDogJ2RlZmF1bHQnXVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBtYWtlT3B0aW9ucyhpdGVtOiBSb3V0ZSkge1xyXG4gICAgaWYgKGl0ZW0ub3JkZXJfbnVtYmVyKSB7XHJcbiAgICAgICh0aGlzLmpjb2RlT3B0aW9ucy5maW5kSW5kZXgoKGVsZW0pID0+IGVsZW0uam9iX2lkID09PSBpdGVtLmpvYl9pZCkgPT09IC0xKSA/IHRoaXMuamNvZGVPcHRpb25zLnB1c2goeyBqb2JfY29kZTogaXRlbS5vcmRlcl9udW1iZXIsIGpvYl9pZDogaXRlbS5qb2JfaWQgfSkgOiBudWxsO1xyXG4gICAgICBpZiAoaXRlbS5kcml2ZXJfbGlzdCAmJiBpdGVtLmRyaXZlcl9saXN0Py5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgaXRlbS5kcml2ZXJfbGlzdC5mb3JFYWNoKChkcml2ZXIpID0+IHtcclxuICAgICAgICAgIHRoaXMuZHJpdmVyT3B0aW9uLmZpbmRJbmRleChlbGVtID0+IGVsZW0gPT09IGRyaXZlclsnZHJpdmVyX25hbWUnXSkgPT09IC0xID8gdGhpcy5kcml2ZXJPcHRpb24ucHVzaChkcml2ZXJbJ2RyaXZlcl9uYW1lJ10pIDogbnVsbDtcclxuICAgICAgICAgIHRoaXMudHJ1Y2tpbmdDb21wYW5heU9wdGlvbi5maW5kSW5kZXgoZWxlbSA9PiBlbGVtID09PSBkcml2ZXJbJ3RydWNraW5nX2NvbXBhbnknXSkgPT09IC0xID8gdGhpcy50cnVja2luZ0NvbXBhbmF5T3B0aW9uLnB1c2goZHJpdmVyWyd0cnVja2luZ19jb21wYW55J10pIDogbnVsbDtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgKCh0aGlzLnBpY2t1cE9wdGlvbnMuZmluZEluZGV4KChlbGVtKSA9PiBlbGVtID09PSBpdGVtLnBpY2t1cF9sb2NhdGlvbikpID09PSAtMSkgPyB0aGlzLnBpY2t1cE9wdGlvbnMucHVzaChpdGVtLnBpY2t1cF9sb2NhdGlvbikgOiBudWxsO1xyXG4gICAgKCh0aGlzLmRlc3RPcHRpb25zLmZpbmRJbmRleCgoZWxlbSkgPT4gZWxlbSA9PT0gaXRlbS5kZWxpdmVyeV9sb2NhdGlvbikpID09PSAtMSkgPyB0aGlzLmRlc3RPcHRpb25zLnB1c2goaXRlbS5kZWxpdmVyeV9sb2NhdGlvbikgOiBudWxsO1xyXG4gICAgKHRoaXMuY3VzdG9tZXJPcHRpb25zLmZpbmRJbmRleCgoY3VzdG9tZXIpID0+IGN1c3RvbWVyID09PSBpdGVtLmN1c3RvbWVyX25hbWUpID09PSAtMSkgPyB0aGlzLmN1c3RvbWVyT3B0aW9ucy5wdXNoKGl0ZW0uY3VzdG9tZXJfbmFtZSkgOiBudWxsO1xyXG4gICAgKHRoaXMudW5pdE9wdGlvbnMuZmluZEluZGV4KChlbGVtKSA9PiBlbGVtID09PSBpdGVtLnVuaXQpID09PSAtMSkgPyB0aGlzLnVuaXRPcHRpb25zLnB1c2goaXRlbS51bml0KSA6IG51bGw7XHJcbiAgICAodGhpcy5tYXRlcmlhbE9wdGlvbnMuZmluZEluZGV4KChlbGVtKSA9PiBlbGVtID09PSBpdGVtLm1hdGVyaWFsKSA9PT0gLTEpID8gdGhpcy5tYXRlcmlhbE9wdGlvbnMucHVzaChpdGVtLm1hdGVyaWFsKSA6IG51bGw7XHJcbiAgICBpZiAoaXRlbS5yb3V0ZV9uYW1lKSB0aGlzLnJvdXRlTmFtZU9wdGlvbnMuZmluZEluZGV4KGVsZW0gPT4gZWxlbSA9PT0gaXRlbS5yb3V0ZV9uYW1lKSA9PT0gLTEgPyB0aGlzLnJvdXRlTmFtZU9wdGlvbnMucHVzaChpdGVtLnJvdXRlX25hbWUpIDogbnVsbDtcclxuICB9XHJcblxyXG4gIGZpbHRlcih2YWx1ZTogc3RyaW5nLCBmaWx0ZXJzOiBhbnkpIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7IHJldHVybiBbXSB9XHJcbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICBpZiAoZmlsdGVyVmFsdWUgPT09ICcnKSB7IHJldHVybiBbXSB9XHJcbiAgICBjb25zdCBzZWFyY2hSZXN1bHRzOiBhbnlbXSA9IFtdO1xyXG4gICAgdGhpcy51bml0T3B0aW9ucy5tYXAodW5pdCA9PiB7XHJcbiAgICAgIGlmICh1bml0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyVmFsdWUpKSB7XHJcbiAgICAgICAgc2VhcmNoUmVzdWx0cy5wdXNoKHsgXCJ0eXBlXCI6IFwidW5pdFwiLCBcImxhYmVsXCI6IHVuaXQsIFwidmFsdWVcIjogdW5pdCB9KVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuY3VzdG9tZXJPcHRpb25zLm1hcCh1bml0ID0+IHtcclxuICAgICAgaWYgKHVuaXQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXJWYWx1ZSkpIHtcclxuICAgICAgICBzZWFyY2hSZXN1bHRzLnB1c2goeyBcInR5cGVcIjogXCJjdXN0b21lclwiLCBcImxhYmVsXCI6IHVuaXQsIFwidmFsdWVcIjogdW5pdCB9KVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMubWF0ZXJpYWxPcHRpb25zLm1hcCh1bml0ID0+IHtcclxuICAgICAgaWYgKHVuaXQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXJWYWx1ZSkpIHtcclxuICAgICAgICBzZWFyY2hSZXN1bHRzLnB1c2goeyBcInR5cGVcIjogXCJtYXRlcmlhbFwiLCBcImxhYmVsXCI6IHVuaXQsIFwidmFsdWVcIjogdW5pdCB9KVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMucGlja3VwT3B0aW9ucy5tYXAodW5pdCA9PiB7XHJcbiAgICAgIGlmICh1bml0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyVmFsdWUpKSB7XHJcbiAgICAgICAgc2VhcmNoUmVzdWx0cy5wdXNoKHsgXCJ0eXBlXCI6IFwicGlja3VwIGxvY2F0aW9uXCIsIFwibGFiZWxcIjogdW5pdCwgXCJ2YWx1ZVwiOiB1bml0IH0pXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5kZXN0T3B0aW9ucy5tYXAodW5pdCA9PiB7XHJcbiAgICAgIGlmICh1bml0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyVmFsdWUpKSB7XHJcbiAgICAgICAgc2VhcmNoUmVzdWx0cy5wdXNoKHsgXCJ0eXBlXCI6IFwiZGVzdGluYXRpb24gbG9jYXRpb25cIiwgXCJsYWJlbFwiOiB1bml0LCBcInZhbHVlXCI6IHVuaXQgfSlcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmpjb2RlT3B0aW9ucy5tYXAodW5pdCA9PiB7XHJcbiAgICAgIGlmICh1bml0LmpvYl9jb2RlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyVmFsdWUpKSB7XHJcbiAgICAgICAgc2VhcmNoUmVzdWx0cy5wdXNoKHsgXCJ0eXBlXCI6IFwiam9iXCIsIFwibGFiZWxcIjogdW5pdFsnam9iX2NvZGUnXSwgXCJ2YWx1ZVwiOiB1bml0IH0pXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5kcml2ZXJPcHRpb24ubWFwKHVuaXQgPT4ge1xyXG4gICAgICBpZiAodW5pdC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlclZhbHVlKSkge1xyXG4gICAgICAgIHNlYXJjaFJlc3VsdHMucHVzaCh7IFwidHlwZVwiOiBcIkRyaXZlclwiLCBcImxhYmVsXCI6IHVuaXQsIFwidmFsdWVcIjogdW5pdCB9KVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnRydWNraW5nQ29tcGFuYXlPcHRpb24ubWFwKHVuaXQgPT4ge1xyXG4gICAgICBpZiAodW5pdC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlclZhbHVlKSkge1xyXG4gICAgICAgIHNlYXJjaFJlc3VsdHMucHVzaCh7IFwidHlwZVwiOiBcIlRydWNraW5nIENvbXBhbnlcIiwgXCJsYWJlbFwiOiB1bml0LCBcInZhbHVlXCI6IHVuaXQgfSlcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnJvdXRlTmFtZU9wdGlvbnMubWFwKHVuaXQgPT4ge1xyXG4gICAgICBpZiAodW5pdC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlclZhbHVlKSkge1xyXG4gICAgICAgIHNlYXJjaFJlc3VsdHMucHVzaCh7IFwidHlwZVwiOiBcIlJvdXRlIG5hbWVcIiwgXCJsYWJlbFwiOiB1bml0LCBcInZhbHVlXCI6IHVuaXQgfSlcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBjb25zdCBzZWFyY2hEaWN0OiBhbnkgPSB7fVxyXG4gICAgZmlsdGVycy5tYXAoKGZpbHRlcjogeyBbeDogc3RyaW5nXTogYW55OyB9KSA9PiB7XHJcbiAgICAgIHNlYXJjaERpY3RbZmlsdGVyWyduYW1lJ10gKyBmaWx0ZXJbJ3R5cGUnXV0gPSBmaWx0ZXI7XHJcbiAgICB9KVxyXG4gICAgY29uc3QgZnVydGhlckZpbHRlcjogYW55W10gPSBbXTtcclxuICAgIHNlYXJjaFJlc3VsdHMubWFwKHNlYXJjaCA9PiB7XHJcbiAgICAgIGlmICgoc2VhcmNoWydsYWJlbCddICsgc2VhcmNoWyd0eXBlJ10pIGluIHNlYXJjaERpY3QpIHsgfVxyXG4gICAgICBlbHNlIHsgZnVydGhlckZpbHRlci5wdXNoKHNlYXJjaCkgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZnVydGhlckZpbHRlcjtcclxuICB9XHJcblxyXG4gIGdldFNlYXJjaFJlc3VsdHMobGlzdDogUm91dGVbXSwgZmlsdGVydmFsOiBhbnkpOiBhbnkge1xyXG4gICAgcmV0dXJuIGxpc3QuZmlsdGVyKGVsZW1lbnQgPT4ge1xyXG4gICAgICBjb25zdCByZXN1bHRfbGlzdF9ib29sZWFuID0gW11cclxuICAgICAgaWYgKGZpbHRlcnZhbC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgaWYgKGZpbHRlcnZhbFswXVsndHlwZSddID09PSAndW5pdCcpIHtcclxuICAgICAgICAgIHJlc3VsdF9saXN0X2Jvb2xlYW4ucHVzaChmaWx0ZXJ2YWxbMF1bJ25hbWUnXSA9PT0gZWxlbWVudFtmaWx0ZXJ2YWxbMF1bJ3R5cGUnXSBhcyBrZXlvZiBSb3V0ZV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZmlsdGVydmFsWzBdWyd0eXBlJ10gPT09ICdjdXN0b21lcicpIHtcclxuICAgICAgICAgIHJlc3VsdF9saXN0X2Jvb2xlYW4ucHVzaChmaWx0ZXJ2YWxbMF1bJ25hbWUnXSA9PT0gZWxlbWVudFsnY3VzdG9tZXJfbmFtZSddKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZpbHRlcnZhbFswXVsndHlwZSddID09PSAnbWF0ZXJpYWwnKSB7XHJcbiAgICAgICAgICByZXN1bHRfbGlzdF9ib29sZWFuLnB1c2goZmlsdGVydmFsWzBdWyduYW1lJ10gPT09IGVsZW1lbnRbZmlsdGVydmFsWzBdWyd0eXBlJ10gYXMga2V5b2YgUm91dGVdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZpbHRlcnZhbFswXVsndHlwZSddID09PSAncGlja3VwIGxvY2F0aW9uJykge1xyXG4gICAgICAgICAgcmVzdWx0X2xpc3RfYm9vbGVhbi5wdXNoKGZpbHRlcnZhbFswXVsnbmFtZSddID09PSBlbGVtZW50WydwaWNrdXBfbG9jYXRpb24nXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmaWx0ZXJ2YWxbMF1bJ3R5cGUnXSA9PT0gJ2Rlc3RpbmF0aW9uIGxvY2F0aW9uJykge1xyXG4gICAgICAgICAgcmVzdWx0X2xpc3RfYm9vbGVhbi5wdXNoKGZpbHRlcnZhbFswXVsnbmFtZSddID09PSBlbGVtZW50WydkZWxpdmVyeV9sb2NhdGlvbiddKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZpbHRlcnZhbFswXVsndHlwZSddID09PSAnam9iJykge1xyXG4gICAgICAgICAgcmVzdWx0X2xpc3RfYm9vbGVhbi5wdXNoKGZpbHRlcnZhbFswXVsnbmFtZSddID09PSBlbGVtZW50WydvcmRlcl9udW1iZXInXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmaWx0ZXJ2YWxbMF1bJ3R5cGUnXSA9PT0gJ1JvdXRlIG5hbWUnKSB7XHJcbiAgICAgICAgICByZXN1bHRfbGlzdF9ib29sZWFuLnB1c2goZmlsdGVydmFsWzBdWyduYW1lJ10gPT09IGVsZW1lbnRbJ3JvdXRlX25hbWUnXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmaWx0ZXJ2YWxbMF1bJ3R5cGUnXSA9PT0gJ0RyaXZlcicpIHtcclxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gZWxlbWVudC5kcml2ZXJfbGlzdD8uZmluZEluZGV4KGVsZSA9PiB7IHJldHVybiBmaWx0ZXJ2YWxbMF1bJ25hbWUnXSA9PT0gZWxlWydkcml2ZXJfbmFtZSddIH0pO1xyXG4gICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkgcmVzdWx0X2xpc3RfYm9vbGVhbi5wdXNoKHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZmlsdGVydmFsWzBdWyd0eXBlJ10gPT09ICdUcnVja2luZyBDb21wYW55Jykge1xyXG4gICAgICAgICAgY29uc3QgaW5kZXggPSBlbGVtZW50LmRyaXZlcl9saXN0Py5maW5kSW5kZXgoZWxlID0+IHsgcmV0dXJuIGZpbHRlcnZhbFswXVsnbmFtZSddID09PSBlbGVbJ3RydWNraW5nX2NvbXBhbnknXSB9KTtcclxuICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHJlc3VsdF9saXN0X2Jvb2xlYW4ucHVzaCh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHJlc3VsdF9saXN0X2Jvb2xlYW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHJldHVybiByZXN1bHRfbGlzdF9ib29sZWFuLnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiAmJiBjdXJyKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNsZWFyT3B0aW9ucygpIHtcclxuICAgIHRoaXMucGlja3VwT3B0aW9ucyA9IFtdO1xyXG4gICAgdGhpcy5kZXN0T3B0aW9ucyA9IFtdO1xyXG4gICAgdGhpcy5vd25lck9wdGlvbnMgPSBbXTtcclxuICAgIHRoaXMuY3VzdG9tZXJPcHRpb25zID0gW107XHJcbiAgICB0aGlzLnVuaXRPcHRpb25zID0gW107XHJcbiAgICB0aGlzLm1hdGVyaWFsT3B0aW9ucyA9IFtdO1xyXG4gICAgdGhpcy5qY29kZU9wdGlvbnMgPSBbXTtcclxuICAgIHRoaXMucm91dGVOYW1lT3B0aW9ucyA9IFtdO1xyXG4gIH1cclxuICBzZXRkaWN0VmFsdWUoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZGljdC5zZXQoa2V5LCB2YWx1ZSk7XHJcbiAgfVxyXG4gIGdldGRpY3RWYWx1ZShrZXk6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIEpTT04ucGFyc2UodGhpcy5kaWN0LmdldChrZXkpKTtcclxuICB9XHJcbiAgcmVtb3ZlZGljdFZhbHVlKGtleTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmRpY3QuZGVsZXRlKGtleSk7XHJcbiAgfVxyXG4gIGNvbnZleVNlYXJjaEljb24odmFsdWU6IGFueSk6IGJvb2xlYW57XHJcbiAgICBpZih2YWx1ZSAmJiB0eXBlb2YodmFsdWUpICE9PSAnb2JqZWN0JykgcmV0dXJuIHRydWU7XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbn1cclxuIl19
|