kwikid-agent-dashboard 0.0.30 → 0.0.32

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.
@@ -1,8 +1,7 @@
1
1
  import { __awaiter } from "tslib";
2
2
  import { Injectable, ViewChildren } from '@angular/core';
3
3
  import { checkObjectPathExists, getObjectValueFromPath, isNotEmptyArray } from 'kwikid-toolkit';
4
- import { of } from 'rxjs';
5
- import { catchError, map } from 'rxjs/operators';
4
+ import { map } from 'rxjs/operators';
6
5
  import { addressConcator, nearestNeighborAlgorithm } from '../helpers/maps.helpers';
7
6
  import * as i0 from "@angular/core";
8
7
  import * as i1 from "./agent.service";
@@ -28,15 +27,6 @@ export class GoogleMapsService {
28
27
  });
29
28
  });
30
29
  }
31
- // Load Google Maps
32
- loadMaps(apiKey) {
33
- const url = `https://maps.googleapis.com/maps/api/js?key=${apiKey}&v=3.exp&libraries=geometry,drawing,places`;
34
- this.apiKey = apiKey;
35
- return this.httpClient.jsonp(url, 'callback').pipe(map(() => true), catchError(() => {
36
- console.error('Error loading Google Maps JavaScript API.');
37
- return of(false);
38
- }));
39
- }
40
30
  // To Initialize Google Maps
41
31
  initializeMap() {
42
32
  return __awaiter(this, void 0, void 0, function* () {
@@ -87,7 +77,7 @@ export class GoogleMapsService {
87
77
  const isValidLocation = isNotEmptyArray(data === null || data === void 0 ? void 0 : data.results);
88
78
  const location = isValidLocation
89
79
  ? (_m = (_l = data === null || data === void 0 ? void 0 : data.results[0]) === null || _l === void 0 ? void 0 : _l.geometry) === null || _m === void 0 ? void 0 : _m.location
90
- : this.myPosition;
80
+ : { lat: null, lng: null };
91
81
  // Set Location validation & Google Maps URL
92
82
  location['isValidLocation'] = isValidLocation;
93
83
  location['googleMapsUrl'] = `https://www.google.com/maps/place/${location === null || location === void 0 ? void 0 : location.lat},${location === null || location === void 0 ? void 0 : location.lng}`;
@@ -117,11 +107,13 @@ export class GoogleMapsService {
117
107
  return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
118
108
  let path = [];
119
109
  const promises = tasks.map((task) => {
120
- path.push({
121
- location: task,
122
- stopover: true
123
- });
124
- this.allMarkers.push(task);
110
+ if (task === null || task === void 0 ? void 0 : task.isValidLocation) {
111
+ path.push({
112
+ location: task,
113
+ stopover: true
114
+ });
115
+ this.allMarkers.push(task);
116
+ }
125
117
  });
126
118
  yield Promise.all(promises);
127
119
  resolve(path);
@@ -173,7 +165,7 @@ export class GoogleMapsService {
173
165
  if (index != null) {
174
166
  const taskMarker = this.allMarkers[index + 1];
175
167
  // If Location is Available in Task Details
176
- if (taskMarker.isValidLocation) {
168
+ if (taskMarker === null || taskMarker === void 0 ? void 0 : taskMarker.isValidLocation) {
177
169
  const request = {
178
170
  origin: this.myPosition,
179
171
  destination: taskMarker,
@@ -206,4 +198,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
206
198
  type: ViewChildren,
207
199
  args: ['directionsRender']
208
200
  }] } });
209
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLW1hcHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2t3aWtpZC1hZ2VudC1kYXNoYm9hcmQvc3JjL2xpYi9zZXJ2aWNlcy9nb29nbGUtbWFwcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQWMsVUFBVSxFQUFhLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoRixPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHNCQUFzQixFQUN0QixlQUFlLEVBQ2hCLE1BQU0sZ0JBQWdCLENBQUM7QUFHeEIsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpELE9BQU8sRUFDTCxlQUFlLEVBQ2Ysd0JBQXdCLEVBQ3pCLE1BQU0seUJBQXlCLENBQUM7Ozs7O0FBSWpDLE1BQU0sT0FBTyxpQkFBaUI7SUFlNUIsWUFDVSxZQUEwQixFQUMzQixvQkFBMEMsRUFDMUMsVUFBc0I7UUFGckIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDM0IseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUMxQyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBYi9CLGVBQVUsR0FBUSxFQUFFLENBQUM7SUFjbEIsQ0FBQztJQUVKLDBCQUEwQjtJQUMxQixXQUFXO1FBQ1QsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxTQUFTLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FDakMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDUCxPQUFPLENBQUM7b0JBQ04sR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUztvQkFDMUIsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUTtpQkFDMUIsQ0FBQyxDQUFDO1lB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QUN0RDtTQUNGO2FBQU07WUFDTCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO1NBQ3REO0lBQ0gsQ0FBQzs7a0lBelBVLGlCQUFpQjtzSUFBakIsaUJBQWlCLGNBRmhCLE1BQU07NEZBRVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjsrSkFZbUMsaUJBQWlCO3NCQUFsRCxZQUFZO3VCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVsZW1lbnRSZWYsIEluamVjdGFibGUsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBZ2VudFNlcnZpY2UgfSBmcm9tICcuL2FnZW50LnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgY2hlY2tPYmplY3RQYXRoRXhpc3RzLFxuICBnZXRPYmplY3RWYWx1ZUZyb21QYXRoLFxuICBpc05vdEVtcHR5QXJyYXlcbn0gZnJvbSAna3dpa2lkLXRvb2xraXQnO1xuXG5pbXBvcnQgeyBNYXBEaXJlY3Rpb25zU2VydmljZSB9IGZyb20gJ0Bhbmd1bGFyL2dvb2dsZS1tYXBzJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtcbiAgYWRkcmVzc0NvbmNhdG9yLFxuICBuZWFyZXN0TmVpZ2hib3JBbGdvcml0aG1cbn0gZnJvbSAnLi4vaGVscGVycy9tYXBzLmhlbHBlcnMnO1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgR29vZ2xlTWFwc1NlcnZpY2Uge1xuICBteVBvc2l0aW9uO1xuICBtYXA6IGFueTtcblxuICBhcGlLZXk6IGFueTtcbiAgYWxsTWFya2VyczogYW55ID0gW107XG5cbiAgZGlyZWN0aW9uc1JlbmRlck9wdGlvbjogYW55O1xuICBkaXJlY3Rpb25zUmVzdWx0cyQ6IGFueTtcbiAgYWxsRGlyZWN0aW9uc1Jlc3VsdHMkOiBhbnk7XG5cbiAgQFZpZXdDaGlsZHJlbignZGlyZWN0aW9uc1JlbmRlcicpIGRpcmVjdGlvbnNSZW5kZXJzOiBRdWVyeUxpc3Q8XG4gICAgRWxlbWVudFJlZjxnb29nbGUubWFwcy5EaXJlY3Rpb25zUmVuZGVyZXI+XG4gID47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhZ2VudFNlcnZpY2U6IEFnZW50U2VydmljZSxcbiAgICBwdWJsaWMgbWFwRGlyZWN0aW9uc1NlcnZpY2U6IE1hcERpcmVjdGlvbnNTZXJ2aWNlLFxuICAgIHB1YmxpYyBodHRwQ2xpZW50OiBIdHRwQ2xpZW50XG4gICkge31cblxuICAvLyBUbyBnZXQgQ3VycmVudCBQb3NpdGlvblxuICBnZXRQb3NpdGlvbigpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24ud2F0Y2hQb3NpdGlvbihcbiAgICAgICAgKHJlc3ApID0+IHtcbiAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgIGxuZzogcmVzcC5jb29yZHMubG9uZ2l0dWRlLFxuICAgICAgICAgICAgbGF0OiByZXNwLmNvb3Jkcy5sYXRpdHVkZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBMb2FkIEdvb2dsZSBNYXBzXG4gIGxvYWRNYXBzKGFwaUtleSk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHVybCA9IGBodHRwczovL21hcHMuZ29vZ2xlYXBpcy5jb20vbWFwcy9hcGkvanM/a2V5PSR7YXBpS2V5fSZ2PTMuZXhwJmxpYnJhcmllcz1nZW9tZXRyeSxkcmF3aW5nLHBsYWNlc2A7XG4gICAgdGhpcy5hcGlLZXkgPSBhcGlLZXk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50Lmpzb25wKHVybCwgJ2NhbGxiYWNrJykucGlwZShcbiAgICAgIG1hcCgoKSA9PiB0cnVlKSxcbiAgICAgIGNhdGNoRXJyb3IoKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIEdvb2dsZSBNYXBzIEphdmFTY3JpcHQgQVBJLicpO1xuICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLy8gVG8gSW5pdGlhbGl6ZSBHb29nbGUgTWFwc1xuICBhc3luYyBpbml0aWFsaXplTWFwKCkge1xuICAgIHRoaXMubXlQb3NpdGlvbiA9IGF3YWl0IHRoaXMuZ2V0UG9zaXRpb24oKTtcbiAgICB0aGlzLm1hcCA9IHtcbiAgICAgIHpvb206IDEwLFxuICAgICAgY2VudGVyOiB0aGlzLm15UG9zaXRpb24sXG4gICAgICBzdHJlZXRWaWV3Q29udHJvbDogZmFsc2UsXG4gICAgICBtYXBUeXBlQ29udHJvbDogZmFsc2UsXG4gICAgICBmdWxsc2NyZWVuQ29udHJvbDogZmFsc2UsXG4gICAgICB6b29tQ29udHJvbDogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgLy8gVG8gZXh0cmFjdCBMb2NhdGlvbiBmcm9tIHRoZSBUYXNrIERldGFpbHNcbiAgYXN5bmMgZ2V0TG9jYXRpb24odGFzaykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSkgPT4ge1xuICAgICAgbGV0IGVuY29kZWRBZGRyZXM7XG5cbiAgICAgIC8vIElmIEZldGNoIEFkZHJlc3MgZnJvbSBNdWx0aXBsZSBQYXRoc1xuICAgICAgaWYgKFxuICAgICAgICBjaGVja09iamVjdFBhdGhFeGlzdHMoXG4gICAgICAgICAgdGhpcy5hZ2VudFNlcnZpY2UuY29uZmlnLFxuICAgICAgICAgICdkYXNoYm9hcmQudGFza0xvY2F0aW9uUGF0aHMnXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICAvLyBHZXQgYWRkcmVzcyBzdHJpbmcgZnJvbSBtdWx0aXBsZSBwYXRoc1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLmFnZW50U2VydmljZS5jb25maWcuZGFzaGJvYXJkLnRhc2tMb2NhdGlvblBhdGhzO1xuICAgICAgICBjb25zdCBhZGRyZXNzID0gYWRkcmVzc0NvbmNhdG9yKHRhc2ssIGNvbmZpZyk7XG5cbiAgICAgICAgLy8gRW5jb2RlIHRoZSBBZGRyZXNzIGluIFVSSVxuICAgICAgICBlbmNvZGVkQWRkcmVzID0gZW5jb2RlVVJJKGFkZHJlc3MpO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBGZXRjaCBBZGRyZXNzIGZyb20gU2luZ2xlIFBhdGhcbiAgICAgIGVsc2UgaWYgKFxuICAgICAgICBjaGVja09iamVjdFBhdGhFeGlzdHMoXG4gICAgICAgICAgdGhpcy5hZ2VudFNlcnZpY2UuY29uZmlnLFxuICAgICAgICAgICdkYXNoYm9hcmQudGFza0xvY2F0aW9uUGF0aCdcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIC8vIEdldCBBZGRyZXNzIGZyb20gU2luZ2xlIFBhdGhcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5hZ2VudFNlcnZpY2UuY29uZmlnLmRhc2hib2FyZC50YXNrTG9jYXRpb25QYXRoO1xuICAgICAgICBjb25zdCBhZGRyZXNzID0gZ2V0T2JqZWN0VmFsdWVGcm9tUGF0aCh0YXNrLCBjb25maWcpO1xuXG4gICAgICAgIC8vIEVuY29kZSB0aGUgQWRkcmVzcyBpbiBVUklcbiAgICAgICAgZW5jb2RlZEFkZHJlcyA9IGVuY29kZVVSSShhZGRyZXNzKTtcbiAgICAgIH1cblxuICAgICAgLy8gRGVmYXVsdCBBZGRyZXNzIFBhdGhzIEF2YWlhYmxlXG4gICAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgYWRkcmVzcyA9XG4gICAgICAgICAgdGFzaz8uZXh0cmFzPy50YXNrX2RldGFpbHM/LmN1c3RvbWVyX2RldGFpbHM/LmFkZHJlc3MgPz9cbiAgICAgICAgICB0YXNrPy50YXNrX2RldGFpbHM/LmN1c3RvbWVyX2RldGFpbHM/LmFkZHJlc3MgPz9cbiAgICAgICAgICB0YXNrPy5leHRyYXM/LmFkZHJlc3MgPz9cbiAgICAgICAgICB0YXNrPy5hZGRyZXNzID8/XG4gICAgICAgICAgJyc7XG5cbiAgICAgICAgLy8gRW5jb2RlIHRoZSBBZGRyZXNzIGluIFVSSVxuICAgICAgICBlbmNvZGVkQWRkcmVzID0gZW5jb2RlVVJJKGFkZHJlc3MpO1xuICAgICAgfVxuXG4gICAgICAvLyBVUkwgdG8gZ2VvY29kZSBBZGRyZXNzIFN0cmluZyB0byBMYXRpdHVkZSAmIExvbmdpdHVkZVxuICAgICAgY29uc3QgdXJsID0gYGh0dHBzOi8vbWFwcy5nb29nbGVhcGlzLmNvbS9tYXBzL2FwaS9nZW9jb2RlL2pzb24/a2V5PSR7dGhpcy5hcGlLZXl9JmFkZHJlc3M9JHtlbmNvZGVkQWRkcmVzfWA7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsKTtcbiAgICAgIGNvbnN0IGRhdGE6IGFueSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblxuICAgICAgLy8gU2V0IExvY2F0aW9uIHtsYXQ6IExBVCwgbG5nOiBMTkd9IGZyb20gYWRkcmVzcyBnZW9jb2RlZFxuICAgICAgY29uc3QgaXNWYWxpZExvY2F0aW9uID0gaXNOb3RFbXB0eUFycmF5KGRhdGE/LnJlc3VsdHMpO1xuICAgICAgY29uc3QgbG9jYXRpb24gPSBpc1ZhbGlkTG9jYXRpb25cbiAgICAgICAgPyBkYXRhPy5yZXN1bHRzWzBdPy5nZW9tZXRyeT8ubG9jYXRpb25cbiAgICAgICAgOiB0aGlzLm15UG9zaXRpb247XG5cbiAgICAgIC8vIFNldCBMb2NhdGlvbiB2YWxpZGF0aW9uICYgR29vZ2xlIE1hcHMgVVJMXG4gICAgICBsb2NhdGlvblsnaXNWYWxpZExvY2F0aW9uJ10gPSBpc1ZhbGlkTG9jYXRpb247XG4gICAgICBsb2NhdGlvbltcbiAgICAgICAgJ2dvb2dsZU1hcHNVcmwnXG4gICAgICBdID0gYGh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vbWFwcy9wbGFjZS8ke2xvY2F0aW9uPy5sYXR9LCR7bG9jYXRpb24/LmxuZ31gO1xuXG4gICAgICByZXNvbHZlKGxvY2F0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEdldCBUYXNrcyB8IE1hcmtlcnMgTG9jYXRpb24gQ28gT3JkaW5hdGVzXG4gIGFzeW5jIGdldE1hcmtlcnNMb2NhdGlvbihteU1hcmtlciwgdGFza3MpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpID0+IHtcbiAgICAgIGxldCBtYXJrZXJzID0gW107XG4gICAgICBtYXJrZXJzLnB1c2gobXlNYXJrZXIpO1xuICAgICAgY29uc3QgcHJvbWlzZXMgPSB0YXNrcy5tYXAoYXN5bmMgKHRhc2spID0+IHtcbiAgICAgICAgY29uc3QgbWFya2VyOiBhbnkgPSBhd2FpdCB0aGlzLmdldExvY2F0aW9uKHRhc2spO1xuICAgICAgICB0YXNrID0geyAuLi50YXNrLCAuLi5tYXJrZXIgfTtcbiAgICAgICAgbWFya2Vycy5wdXNoKHRhc2spO1xuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcblxuICAgICAgcmVzb2x2ZShtYXJrZXJzKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFBsb3QgQWxsIE1hcmtlcnNcbiAgYXN5bmMgcGxvdEFsbE1hcmtlcnModGFza3MpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpID0+IHtcbiAgICAgIGxldCBwYXRoID0gW107XG4gICAgICBjb25zdCBwcm9taXNlcyA9IHRhc2tzLm1hcCgodGFzaykgPT4ge1xuICAgICAgICBwYXRoLnB1c2goe1xuICAgICAgICAgIGxvY2F0aW9uOiB0YXNrLFxuICAgICAgICAgIHN0b3BvdmVyOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFsbE1hcmtlcnMucHVzaCh0YXNrKTtcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG5cbiAgICAgIHJlc29sdmUocGF0aCk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBUbyBQbG90IERpcmVjdGlvbnMgZm9yIEFsbCBUYXNrc1xuICBhc3luYyBwbG90RGlyZWN0aW9uc0ZvckFsbFRhc2tzKHRhc2tzKSB7XG4gICAgdGhpcy5hbGxNYXJrZXJzID0gW107XG5cbiAgICAvLyBDcmVhdGUgQWdlbnQgTWFya2VyICYgUGxvdCBJdC5cbiAgICBjb25zdCBteU1hcmtlciA9IHtcbiAgICAgIGxhdDogdGhpcy5teVBvc2l0aW9uLmxhdCxcbiAgICAgIGxuZzogdGhpcy5teVBvc2l0aW9uLmxuZyxcbiAgICAgIHRpdGxlOiAwLFxuICAgICAgY29sb3I6ICdyZWQnXG4gICAgfTtcblxuICAgIC8vIEdldCBBbGwgTWFya2VycyBMb2NhdGlvbiBDbyBPcmRpbmF0ZXNcbiAgICBjb25zdCBtYXJrZXJzOiBhbnkgPSBhd2FpdCB0aGlzLmdldE1hcmtlcnNMb2NhdGlvbihteU1hcmtlciwgdGFza3MpO1xuXG4gICAgLy8gUnVuIEFsZ29yaXRobSB0byBnZXQgb3B0aW1pemVkIFJvdXRlc1xuICAgIGNvbnN0IHN0YXJ0aW5nUG9pbnQgPSBtYXJrZXJzWzBdO1xuICAgIGNvbnN0IHVudmlzaXRlZFdheXBvaW50cyA9IG1hcmtlcnMuc2xpY2UoMSk7XG4gICAgY29uc3Qgb3B0aW1pemVkUm91dGUgPSBuZWFyZXN0TmVpZ2hib3JBbGdvcml0aG0oXG4gICAgICBzdGFydGluZ1BvaW50LFxuICAgICAgdW52aXNpdGVkV2F5cG9pbnRzXG4gICAgKTtcblxuICAgIC8vIFNvcnQgQWxsIFRhc2tzIGFzIHBlciBvcHRpbWl6ZWQgcm91dGVzXG4gICAgdGFza3MgPSBvcHRpbWl6ZWRSb3V0ZS5zbGljZSgxKTtcbiAgICB0aGlzLmFsbE1hcmtlcnMgPSBbbXlNYXJrZXJdO1xuXG4gICAgLy8gUGxvdCBhbGwgbWFya2VycyAmIGdldCBwYXRoIGZvciBkaXJlY3Rpb25zXG4gICAgY29uc3QgcGF0aDogYW55ID0gYXdhaXQgdGhpcy5wbG90QWxsTWFya2Vycyh0YXNrcyk7XG5cbiAgICAvLyBTZXQgRGlyZWN0aW9ucyBpbiBHb29nbGUgTWFwc1xuICAgIGNvbnN0IHJlcXVlc3Q6IGdvb2dsZS5tYXBzLkRpcmVjdGlvbnNSZXF1ZXN0ID0ge1xuICAgICAgb3JpZ2luOiB0aGlzLm15UG9zaXRpb24sXG4gICAgICBkZXN0aW5hdGlvbjogdGhpcy5teVBvc2l0aW9uLFxuICAgICAgd2F5cG9pbnRzOiBwYXRoLFxuICAgICAgdHJhdmVsTW9kZTogZ29vZ2xlLm1hcHMuVHJhdmVsTW9kZS5EUklWSU5HXG4gICAgfTtcblxuICAgIHRoaXMuZGlyZWN0aW9uc1JlbmRlck9wdGlvbiA9IHtcbiAgICAgIHN1cHByZXNzTWFya2VyczogdHJ1ZVxuICAgIH07XG5cbiAgICB0aGlzLmRpcmVjdGlvbnNSZXN1bHRzJCA9IHRoaXMubWFwRGlyZWN0aW9uc1NlcnZpY2VcbiAgICAgIC5yb3V0ZShyZXF1ZXN0KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZSkgPT4gcmVzcG9uc2UucmVzdWx0KSk7XG5cbiAgICB0aGlzLmRpcmVjdGlvbnNSZXN1bHRzJC5zdWJzY3JpYmUoKHZhbCkgPT4ge30pO1xuXG4gICAgdGhpcy5hbGxEaXJlY3Rpb25zUmVzdWx0cyQgPSB0aGlzLmRpcmVjdGlvbnNSZXN1bHRzJDtcblxuICAgIHJldHVybiB0YXNrcztcbiAgfVxuXG4gIC8vIFRvIFBsb3QgRGlyZWN0aW9ucyBmb3IgU2VsZWN0ZWQgVGFza3NcbiAgcGxvdERpcmVjdGlvbnNGb3JTZWxlY3RlZFRhc2soaW5kZXgpIHtcbiAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgY29uc3QgdGFza01hcmtlciA9IHRoaXMuYWxsTWFya2Vyc1tpbmRleCArIDFdO1xuXG4gICAgICAvLyBJZiBMb2NhdGlvbiBpcyBBdmFpbGFibGUgaW4gVGFzayBEZXRhaWxzXG4gICAgICBpZiAodGFza01hcmtlci5pc1ZhbGlkTG9jYXRpb24pIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdDogZ29vZ2xlLm1hcHMuRGlyZWN0aW9uc1JlcXVlc3QgPSB7XG4gICAgICAgICAgb3JpZ2luOiB0aGlzLm15UG9zaXRpb24sXG4gICAgICAgICAgZGVzdGluYXRpb246IHRhc2tNYXJrZXIsXG4gICAgICAgICAgb3B0aW1pemVXYXlwb2ludHM6IHRydWUsXG4gICAgICAgICAgdHJhdmVsTW9kZTogZ29vZ2xlLm1hcHMuVHJhdmVsTW9kZS5EUklWSU5HXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5kaXJlY3Rpb25zUmVzdWx0cyQgPSB0aGlzLm1hcERpcmVjdGlvbnNTZXJ2aWNlXG4gICAgICAgICAgLnJvdXRlKHJlcXVlc3QpXG4gICAgICAgICAgLnBpcGUobWFwKChyZXNwb25zZSkgPT4gcmVzcG9uc2UucmVzdWx0KSk7XG5cbiAgICAgICAgdGhpcy5kaXJlY3Rpb25zUmVzdWx0cyQuc3Vic2NyaWJlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGVydCgnTm8gTG9jYXRpb24gQXZhaWxhYmxlJyk7XG4gICAgICAgIHRoaXMuZGlyZWN0aW9uc1Jlc3VsdHMkID0gdGhpcy5hbGxEaXJlY3Rpb25zUmVzdWx0cyQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlyZWN0aW9uc1Jlc3VsdHMkID0gdGhpcy5hbGxEaXJlY3Rpb25zUmVzdWx0cyQ7XG4gICAgfVxuICB9XG59XG4iXX0=
201
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLW1hcHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2t3aWtpZC1hZ2VudC1kYXNoYm9hcmQvc3JjL2xpYi9zZXJ2aWNlcy9nb29nbGUtbWFwcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQWMsVUFBVSxFQUFhLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoRixPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHNCQUFzQixFQUN0QixlQUFlLEVBQ2hCLE1BQU0sZ0JBQWdCLENBQUM7QUFJeEIsT0FBTyxFQUFjLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpELE9BQU8sRUFDTCxlQUFlLEVBQ2Ysd0JBQXdCLEVBQ3pCLE1BQU0seUJBQXlCLENBQUM7Ozs7O0FBSWpDLE1BQU0sT0FBTyxpQkFBaUI7SUFlNUIsWUFDVSxZQUEwQixFQUMzQixvQkFBMEMsRUFDMUMsVUFBc0I7UUFGckIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDM0IseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUMxQyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBYi9CLGVBQVUsR0FBUSxFQUFFLENBQUM7SUFjbEIsQ0FBQztJQUVKLDBCQUEwQjtJQUMxQixXQUFXO1FBQ1QsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxTQUFTLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FDakMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDUCxPQUFPLENBQUM7b0JBQ04sR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUztvQkFDMUIsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUTtpQkFDMUIsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxFQUNELENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ04sTUFBTSxDQUFDLEdB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RUFBRTtZQUNqQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztZQUU5QywyQ0FBMkM7WUFDM0MsSUFBSSxVQUFVLGFBQVYsVUFBVSx1QkFBVixVQUFVLENBQUUsZUFBZSxFQUFFO2dCQUMvQixNQUFNLE9BQU8sR0FBa0M7b0JBQzdDLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVTtvQkFDdkIsV0FBVyxFQUFFLFVBQVU7b0JBQ3ZCLGlCQUFpQixFQUFFLElBQUk7b0JBQ3ZCLFVBQVUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPO2lCQUMzQyxDQUFDO2dCQUVGLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsb0JBQW9CO3FCQUNoRCxLQUFLLENBQUMsT0FBTyxDQUFDO3FCQUNkLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUU1QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxFQUFFLENBQUM7YUFDckM7aUJBQU07Z0JBQ0wsS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUM7YUFDdEQ7U0FDRjthQUFNO1lBQ0wsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztTQUN0RDtJQUNILENBQUM7O2tJQTdPVSxpQkFBaUI7c0lBQWpCLGlCQUFpQixjQUZoQixNQUFNOzRGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7K0pBWW1DLGlCQUFpQjtzQkFBbEQsWUFBWTt1QkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmLCBJbmplY3RhYmxlLCBRdWVyeUxpc3QsIFZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWdlbnRTZXJ2aWNlIH0gZnJvbSAnLi9hZ2VudC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIGNoZWNrT2JqZWN0UGF0aEV4aXN0cyxcbiAgZ2V0T2JqZWN0VmFsdWVGcm9tUGF0aCxcbiAgaXNOb3RFbXB0eUFycmF5XG59IGZyb20gJ2t3aWtpZC10b29sa2l0JztcblxuaW1wb3J0IHsgTWFwRGlyZWN0aW9uc1NlcnZpY2UgfSBmcm9tICdAYW5ndWxhci9nb29nbGUtbWFwcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7XG4gIGFkZHJlc3NDb25jYXRvcixcbiAgbmVhcmVzdE5laWdoYm9yQWxnb3JpdGhtXG59IGZyb20gJy4uL2hlbHBlcnMvbWFwcy5oZWxwZXJzJztcbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEdvb2dsZU1hcHNTZXJ2aWNlIHtcbiAgbXlQb3NpdGlvbjtcbiAgbWFwOiBhbnk7XG5cbiAgYXBpS2V5OiBhbnk7XG4gIGFsbE1hcmtlcnM6IGFueSA9IFtdO1xuXG4gIGRpcmVjdGlvbnNSZW5kZXJPcHRpb246IGFueTtcbiAgZGlyZWN0aW9uc1Jlc3VsdHMkOiBhbnk7XG4gIGFsbERpcmVjdGlvbnNSZXN1bHRzJDogYW55O1xuXG4gIEBWaWV3Q2hpbGRyZW4oJ2RpcmVjdGlvbnNSZW5kZXInKSBkaXJlY3Rpb25zUmVuZGVyczogUXVlcnlMaXN0PFxuICAgIEVsZW1lbnRSZWY8Z29vZ2xlLm1hcHMuRGlyZWN0aW9uc1JlbmRlcmVyPlxuICA+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWdlbnRTZXJ2aWNlOiBBZ2VudFNlcnZpY2UsXG4gICAgcHVibGljIG1hcERpcmVjdGlvbnNTZXJ2aWNlOiBNYXBEaXJlY3Rpb25zU2VydmljZSxcbiAgICBwdWJsaWMgaHR0cENsaWVudDogSHR0cENsaWVudFxuICApIHt9XG5cbiAgLy8gVG8gZ2V0IEN1cnJlbnQgUG9zaXRpb25cbiAgZ2V0UG9zaXRpb24oKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLndhdGNoUG9zaXRpb24oXG4gICAgICAgIChyZXNwKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICBsbmc6IHJlc3AuY29vcmRzLmxvbmdpdHVkZSxcbiAgICAgICAgICAgIGxhdDogcmVzcC5jb29yZHMubGF0aXR1ZGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gVG8gSW5pdGlhbGl6ZSBHb29nbGUgTWFwc1xuICBhc3luYyBpbml0aWFsaXplTWFwKCkge1xuICAgIHRoaXMubXlQb3NpdGlvbiA9IGF3YWl0IHRoaXMuZ2V0UG9zaXRpb24oKTtcbiAgICB0aGlzLm1hcCA9IHtcbiAgICAgIHpvb206IDEwLFxuICAgICAgY2VudGVyOiB0aGlzLm15UG9zaXRpb24sXG4gICAgICBzdHJlZXRWaWV3Q29udHJvbDogZmFsc2UsXG4gICAgICBtYXBUeXBlQ29udHJvbDogZmFsc2UsXG4gICAgICBmdWxsc2NyZWVuQ29udHJvbDogZmFsc2UsXG4gICAgICB6b29tQ29udHJvbDogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgLy8gVG8gZXh0cmFjdCBMb2NhdGlvbiBmcm9tIHRoZSBUYXNrIERldGFpbHNcbiAgYXN5bmMgZ2V0TG9jYXRpb24odGFzaykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSkgPT4ge1xuICAgICAgbGV0IGVuY29kZWRBZGRyZXM7XG5cbiAgICAgIC8vIElmIEZldGNoIEFkZHJlc3MgZnJvbSBNdWx0aXBsZSBQYXRoc1xuICAgICAgaWYgKFxuICAgICAgICBjaGVja09iamVjdFBhdGhFeGlzdHMoXG4gICAgICAgICAgdGhpcy5hZ2VudFNlcnZpY2UuY29uZmlnLFxuICAgICAgICAgICdkYXNoYm9hcmQudGFza0xvY2F0aW9uUGF0aHMnXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICAvLyBHZXQgYWRkcmVzcyBzdHJpbmcgZnJvbSBtdWx0aXBsZSBwYXRoc1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLmFnZW50U2VydmljZS5jb25maWcuZGFzaGJvYXJkLnRhc2tMb2NhdGlvblBhdGhzO1xuICAgICAgICBjb25zdCBhZGRyZXNzID0gYWRkcmVzc0NvbmNhdG9yKHRhc2ssIGNvbmZpZyk7XG5cbiAgICAgICAgLy8gRW5jb2RlIHRoZSBBZGRyZXNzIGluIFVSSVxuICAgICAgICBlbmNvZGVkQWRkcmVzID0gZW5jb2RlVVJJKGFkZHJlc3MpO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBGZXRjaCBBZGRyZXNzIGZyb20gU2luZ2xlIFBhdGhcbiAgICAgIGVsc2UgaWYgKFxuICAgICAgICBjaGVja09iamVjdFBhdGhFeGlzdHMoXG4gICAgICAgICAgdGhpcy5hZ2VudFNlcnZpY2UuY29uZmlnLFxuICAgICAgICAgICdkYXNoYm9hcmQudGFza0xvY2F0aW9uUGF0aCdcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIC8vIEdldCBBZGRyZXNzIGZyb20gU2luZ2xlIFBhdGhcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5hZ2VudFNlcnZpY2UuY29uZmlnLmRhc2hib2FyZC50YXNrTG9jYXRpb25QYXRoO1xuICAgICAgICBjb25zdCBhZGRyZXNzID0gZ2V0T2JqZWN0VmFsdWVGcm9tUGF0aCh0YXNrLCBjb25maWcpO1xuXG4gICAgICAgIC8vIEVuY29kZSB0aGUgQWRkcmVzcyBpbiBVUklcbiAgICAgICAgZW5jb2RlZEFkZHJlcyA9IGVuY29kZVVSSShhZGRyZXNzKTtcbiAgICAgIH1cblxuICAgICAgLy8gRGVmYXVsdCBBZGRyZXNzIFBhdGhzIEF2YWlhYmxlXG4gICAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgYWRkcmVzcyA9XG4gICAgICAgICAgdGFzaz8uZXh0cmFzPy50YXNrX2RldGFpbHM/LmN1c3RvbWVyX2RldGFpbHM/LmFkZHJlc3MgPz9cbiAgICAgICAgICB0YXNrPy50YXNrX2RldGFpbHM/LmN1c3RvbWVyX2RldGFpbHM/LmFkZHJlc3MgPz9cbiAgICAgICAgICB0YXNrPy5leHRyYXM/LmFkZHJlc3MgPz9cbiAgICAgICAgICB0YXNrPy5hZGRyZXNzID8/XG4gICAgICAgICAgJyc7XG5cbiAgICAgICAgLy8gRW5jb2RlIHRoZSBBZGRyZXNzIGluIFVSSVxuICAgICAgICBlbmNvZGVkQWRkcmVzID0gZW5jb2RlVVJJKGFkZHJlc3MpO1xuICAgICAgfVxuXG4gICAgICAvLyBVUkwgdG8gZ2VvY29kZSBBZGRyZXNzIFN0cmluZyB0byBMYXRpdHVkZSAmIExvbmdpdHVkZVxuICAgICAgY29uc3QgdXJsID0gYGh0dHBzOi8vbWFwcy5nb29nbGVhcGlzLmNvbS9tYXBzL2FwaS9nZW9jb2RlL2pzb24/a2V5PSR7dGhpcy5hcGlLZXl9JmFkZHJlc3M9JHtlbmNvZGVkQWRkcmVzfWA7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsKTtcbiAgICAgIGNvbnN0IGRhdGE6IGFueSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblxuICAgICAgLy8gU2V0IExvY2F0aW9uIHtsYXQ6IExBVCwgbG5nOiBMTkd9IGZyb20gYWRkcmVzcyBnZW9jb2RlZFxuICAgICAgY29uc3QgaXNWYWxpZExvY2F0aW9uID0gaXNOb3RFbXB0eUFycmF5KGRhdGE/LnJlc3VsdHMpO1xuICAgICAgY29uc3QgbG9jYXRpb24gPSBpc1ZhbGlkTG9jYXRpb25cbiAgICAgICAgPyBkYXRhPy5yZXN1bHRzWzBdPy5nZW9tZXRyeT8ubG9jYXRpb25cbiAgICAgICAgOiB7bGF0OiBudWxsLCBsbmc6IG51bGx9O1xuXG4gICAgICAvLyBTZXQgTG9jYXRpb24gdmFsaWRhdGlvbiAmIEdvb2dsZSBNYXBzIFVSTFxuICAgICAgbG9jYXRpb25bJ2lzVmFsaWRMb2NhdGlvbiddID0gaXNWYWxpZExvY2F0aW9uO1xuICAgICAgbG9jYXRpb25bXG4gICAgICAgICdnb29nbGVNYXBzVXJsJ1xuICAgICAgXSA9IGBodHRwczovL3d3dy5nb29nbGUuY29tL21hcHMvcGxhY2UvJHtsb2NhdGlvbj8ubGF0fSwke2xvY2F0aW9uPy5sbmd9YDtcblxuICAgICAgcmVzb2x2ZShsb2NhdGlvbik7XG4gICAgfSk7XG4gIH1cblxuICAvLyBHZXQgVGFza3MgfCBNYXJrZXJzIExvY2F0aW9uIENvIE9yZGluYXRlc1xuICBhc3luYyBnZXRNYXJrZXJzTG9jYXRpb24obXlNYXJrZXIsIHRhc2tzKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlKSA9PiB7XG4gICAgICBsZXQgbWFya2VycyA9IFtdO1xuICAgICAgbWFya2Vycy5wdXNoKG15TWFya2VyKTtcbiAgICAgIGNvbnN0IHByb21pc2VzID0gdGFza3MubWFwKGFzeW5jICh0YXNrKSA9PiB7XG4gICAgICAgIGNvbnN0IG1hcmtlcjogYW55ID0gYXdhaXQgdGhpcy5nZXRMb2NhdGlvbih0YXNrKTtcbiAgICAgICAgdGFzayA9IHsgLi4udGFzaywgLi4ubWFya2VyIH07XG4gICAgICAgIG1hcmtlcnMucHVzaCh0YXNrKTtcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG5cbiAgICAgIHJlc29sdmUobWFya2Vycyk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBQbG90IEFsbCBNYXJrZXJzXG4gIGFzeW5jIHBsb3RBbGxNYXJrZXJzKHRhc2tzKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlKSA9PiB7XG4gICAgICBsZXQgcGF0aCA9IFtdO1xuICAgICAgY29uc3QgcHJvbWlzZXMgPSB0YXNrcy5tYXAoKHRhc2spID0+IHtcbiAgICAgICAgaWYgKHRhc2s/LmlzVmFsaWRMb2NhdGlvbikge1xuICAgICAgICAgIHBhdGgucHVzaCh7XG4gICAgICAgICAgICBsb2NhdGlvbjogdGFzayxcbiAgICAgICAgICAgIHN0b3BvdmVyOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5hbGxNYXJrZXJzLnB1c2godGFzayk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG5cbiAgICAgIHJlc29sdmUocGF0aCk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBUbyBQbG90IERpcmVjdGlvbnMgZm9yIEFsbCBUYXNrc1xuICBhc3luYyBwbG90RGlyZWN0aW9uc0ZvckFsbFRhc2tzKHRhc2tzKSB7XG4gICAgdGhpcy5hbGxNYXJrZXJzID0gW107XG5cbiAgICAvLyBDcmVhdGUgQWdlbnQgTWFya2VyICYgUGxvdCBJdC5cbiAgICBjb25zdCBteU1hcmtlciA9IHtcbiAgICAgIGxhdDogdGhpcy5teVBvc2l0aW9uLmxhdCxcbiAgICAgIGxuZzogdGhpcy5teVBvc2l0aW9uLmxuZyxcbiAgICAgIHRpdGxlOiAwLFxuICAgICAgY29sb3I6ICdyZWQnXG4gICAgfTtcblxuICAgIC8vIEdldCBBbGwgTWFya2VycyBMb2NhdGlvbiBDbyBPcmRpbmF0ZXNcbiAgICBjb25zdCBtYXJrZXJzOiBhbnkgPSBhd2FpdCB0aGlzLmdldE1hcmtlcnNMb2NhdGlvbihteU1hcmtlciwgdGFza3MpO1xuXG4gICAgLy8gUnVuIEFsZ29yaXRobSB0byBnZXQgb3B0aW1pemVkIFJvdXRlc1xuICAgIGNvbnN0IHN0YXJ0aW5nUG9pbnQgPSBtYXJrZXJzWzBdO1xuICAgIGNvbnN0IHVudmlzaXRlZFdheXBvaW50cyA9IG1hcmtlcnMuc2xpY2UoMSk7XG4gICAgY29uc3Qgb3B0aW1pemVkUm91dGUgPSBuZWFyZXN0TmVpZ2hib3JBbGdvcml0aG0oXG4gICAgICBzdGFydGluZ1BvaW50LFxuICAgICAgdW52aXNpdGVkV2F5cG9pbnRzXG4gICAgKTtcblxuICAgIC8vIFNvcnQgQWxsIFRhc2tzIGFzIHBlciBvcHRpbWl6ZWQgcm91dGVzXG4gICAgdGFza3MgPSBvcHRpbWl6ZWRSb3V0ZS5zbGljZSgxKTtcbiAgICB0aGlzLmFsbE1hcmtlcnMgPSBbbXlNYXJrZXJdO1xuXG4gICAgLy8gUGxvdCBhbGwgbWFya2VycyAmIGdldCBwYXRoIGZvciBkaXJlY3Rpb25zXG4gICAgY29uc3QgcGF0aDogYW55ID0gYXdhaXQgdGhpcy5wbG90QWxsTWFya2Vycyh0YXNrcyk7XG5cbiAgICAvLyBTZXQgRGlyZWN0aW9ucyBpbiBHb29nbGUgTWFwc1xuICAgIGNvbnN0IHJlcXVlc3Q6IGdvb2dsZS5tYXBzLkRpcmVjdGlvbnNSZXF1ZXN0ID0ge1xuICAgICAgb3JpZ2luOiB0aGlzLm15UG9zaXRpb24sXG4gICAgICBkZXN0aW5hdGlvbjogdGhpcy5teVBvc2l0aW9uLFxuICAgICAgd2F5cG9pbnRzOiBwYXRoLFxuICAgICAgdHJhdmVsTW9kZTogZ29vZ2xlLm1hcHMuVHJhdmVsTW9kZS5EUklWSU5HXG4gICAgfTtcblxuICAgIHRoaXMuZGlyZWN0aW9uc1JlbmRlck9wdGlvbiA9IHtcbiAgICAgIHN1cHByZXNzTWFya2VyczogdHJ1ZVxuICAgIH07XG5cbiAgICB0aGlzLmRpcmVjdGlvbnNSZXN1bHRzJCA9IHRoaXMubWFwRGlyZWN0aW9uc1NlcnZpY2VcbiAgICAgIC5yb3V0ZShyZXF1ZXN0KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZSkgPT4gcmVzcG9uc2UucmVzdWx0KSk7XG5cbiAgICB0aGlzLmRpcmVjdGlvbnNSZXN1bHRzJC5zdWJzY3JpYmUoKHZhbCkgPT4ge30pO1xuXG4gICAgdGhpcy5hbGxEaXJlY3Rpb25zUmVzdWx0cyQgPSB0aGlzLmRpcmVjdGlvbnNSZXN1bHRzJDtcblxuICAgIHJldHVybiB0YXNrcztcbiAgfVxuXG4gIC8vIFRvIFBsb3QgRGlyZWN0aW9ucyBmb3IgU2VsZWN0ZWQgVGFza3NcbiAgcGxvdERpcmVjdGlvbnNGb3JTZWxlY3RlZFRhc2soaW5kZXgpIHtcbiAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgY29uc3QgdGFza01hcmtlciA9IHRoaXMuYWxsTWFya2Vyc1tpbmRleCArIDFdO1xuXG4gICAgICAvLyBJZiBMb2NhdGlvbiBpcyBBdmFpbGFibGUgaW4gVGFzayBEZXRhaWxzXG4gICAgICBpZiAodGFza01hcmtlcj8uaXNWYWxpZExvY2F0aW9uKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3Q6IGdvb2dsZS5tYXBzLkRpcmVjdGlvbnNSZXF1ZXN0ID0ge1xuICAgICAgICAgIG9yaWdpbjogdGhpcy5teVBvc2l0aW9uLFxuICAgICAgICAgIGRlc3RpbmF0aW9uOiB0YXNrTWFya2VyLFxuICAgICAgICAgIG9wdGltaXplV2F5cG9pbnRzOiB0cnVlLFxuICAgICAgICAgIHRyYXZlbE1vZGU6IGdvb2dsZS5tYXBzLlRyYXZlbE1vZGUuRFJJVklOR1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZGlyZWN0aW9uc1Jlc3VsdHMkID0gdGhpcy5tYXBEaXJlY3Rpb25zU2VydmljZVxuICAgICAgICAgIC5yb3V0ZShyZXF1ZXN0KVxuICAgICAgICAgIC5waXBlKG1hcCgocmVzcG9uc2UpID0+IHJlc3BvbnNlLnJlc3VsdCkpO1xuXG4gICAgICAgIHRoaXMuZGlyZWN0aW9uc1Jlc3VsdHMkLnN1YnNjcmliZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWxlcnQoJ05vIExvY2F0aW9uIEF2YWlsYWJsZScpO1xuICAgICAgICB0aGlzLmRpcmVjdGlvbnNSZXN1bHRzJCA9IHRoaXMuYWxsRGlyZWN0aW9uc1Jlc3VsdHMkO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpcmVjdGlvbnNSZXN1bHRzJCA9IHRoaXMuYWxsRGlyZWN0aW9uc1Jlc3VsdHMkO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -64,7 +64,7 @@ export class OpenStreetMapsService {
64
64
  const isValidLocation = isNotEmptyArray(data) && ((_l = data[0]) === null || _l === void 0 ? void 0 : _l.lat) & ((_m = data[0]) === null || _m === void 0 ? void 0 : _m.lon);
65
65
  const location = isValidLocation
66
66
  ? { lat: (_o = data[0]) === null || _o === void 0 ? void 0 : _o.lat, lng: (_p = data[0]) === null || _p === void 0 ? void 0 : _p.lon }
67
- : this.myPosition;
67
+ : { lat: null, lng: null };
68
68
  // Set Location validation & Google Maps URL
69
69
  location['isValidLocation'] = isValidLocation;
70
70
  location['color'] = isValidLocation ? 'blue' : 'red';
@@ -139,8 +139,10 @@ export class OpenStreetMapsService {
139
139
  tasks = this.sortTasksAsPerDistance(optimizedRoute.slice(1), tasks, false);
140
140
  // Plot Markers for All Tasks
141
141
  tasks.map((task) => {
142
- const marker = this.getLocation(task);
143
- this.addMarker(marker);
142
+ if (task === null || task === void 0 ? void 0 : task.isValidLocation) {
143
+ const marker = this.getLocation(task);
144
+ this.addMarker(marker);
145
+ }
144
146
  });
145
147
  // Set Styles for all Task Routes
146
148
  const styles = [
@@ -247,4 +249,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
247
249
  type: ViewChildren,
248
250
  args: ['directionsRender']
249
251
  }] } });
250
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3Blbi1zdHJlZXQtbWFwcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWFnZW50LWRhc2hib2FyZC9zcmMvbGliL3NlcnZpY2VzL29wZW4tc3RyZWV0LW1hcHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFjLFVBQVUsRUFBYSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxLQUFLLENBQUMsTUFBTSxTQUFTLENBQUM7QUFDN0IsT0FBTyx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHNCQUFzQixFQUN0QixlQUFlLEVBQ2hCLE1BQU0sZ0JBQWdCLENBQUM7QUFJeEIsT0FBTyxFQUNMLGVBQWUsRUFDZix3QkFBd0IsRUFDekIsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7QUFLakMsTUFBTSxPQUFPLHFCQUFxQjtJQWFoQyxZQUNVLFlBQTBCLEVBQzNCLG9CQUEwQyxFQUMxQyxVQUFzQjtRQUZyQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMzQix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBQzFDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFiL0IsZUFBVSxHQUFRLEVBQUUsQ0FBQztJQWNsQixDQUFDO0lBRUosMEJBQTBCO0lBQzFCLFdBQVc7UUFDVCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLFNBQVMsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUNqQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNQLE9BQU8sQ0FBQztvQkFDTixHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTO29CQUMxQixHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRO2lCQUMxQixDQUFDLENBQUM7WUFDTCxDQUFDLEVBQ0QsQ0FBQyxHQUFHLEVB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QUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNwQyxDQUFDOztzSUE5U1UscUJBQXFCOzBJQUFyQixxQkFBcUIsY0FGcEIsTUFBTTs0RkFFUCxxQkFBcUI7a0JBSGpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COytKQVVtQyxpQkFBaUI7c0JBQWxELFlBQVk7dUJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiwgSW5qZWN0YWJsZSwgUXVlcnlMaXN0LCBWaWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAqIGFzIEwgZnJvbSAnbGVhZmxldCc7XG5pbXBvcnQgJ2xlYWZsZXQtcm91dGluZy1tYWNoaW5lJztcbmltcG9ydCB7IEFnZW50U2VydmljZSB9IGZyb20gJy4vYWdlbnQuc2VydmljZSc7XG5pbXBvcnQge1xuICBjaGVja09iamVjdFBhdGhFeGlzdHMsXG4gIGdldE9iamVjdFZhbHVlRnJvbVBhdGgsXG4gIGlzTm90RW1wdHlBcnJheVxufSBmcm9tICdrd2lraWQtdG9vbGtpdCc7XG5cbmltcG9ydCB7IE1hcERpcmVjdGlvbnNTZXJ2aWNlIH0gZnJvbSAnQGFuZ3VsYXIvZ29vZ2xlLW1hcHMnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7XG4gIGFkZHJlc3NDb25jYXRvcixcbiAgbmVhcmVzdE5laWdoYm9yQWxnb3JpdGhtXG59IGZyb20gJy4uL2hlbHBlcnMvbWFwcy5oZWxwZXJzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgT3BlblN0cmVldE1hcHNTZXJ2aWNlIHtcbiAgbXlQb3NpdGlvbjtcbiAgbWFwOiBhbnk7XG4gIGFsbE1hcmtlcnM6IGFueSA9IFtdO1xuXG4gIGFsbFRhc2tzUm91dGVzOiBhbnk7XG4gIHNlbGVjdGVkVGFza1JvdXRlczogYW55O1xuICBzZWxlY3RlZFRhc2tEaXN0YW5jZUFuZFRpbWU6IGFueTtcblxuICBAVmlld0NoaWxkcmVuKCdkaXJlY3Rpb25zUmVuZGVyJykgZGlyZWN0aW9uc1JlbmRlcnM6IFF1ZXJ5TGlzdDxcbiAgICBFbGVtZW50UmVmPGdvb2dsZS5tYXBzLkRpcmVjdGlvbnNSZW5kZXJlcj5cbiAgPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFnZW50U2VydmljZTogQWdlbnRTZXJ2aWNlLFxuICAgIHB1YmxpYyBtYXBEaXJlY3Rpb25zU2VydmljZTogTWFwRGlyZWN0aW9uc1NlcnZpY2UsXG4gICAgcHVibGljIGh0dHBDbGllbnQ6IEh0dHBDbGllbnRcbiAgKSB7fVxuXG4gIC8vIFRvIGdldCBDdXJyZW50IFBvc2l0aW9uXG4gIGdldFBvc2l0aW9uKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi53YXRjaFBvc2l0aW9uKFxuICAgICAgICAocmVzcCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgbG5nOiByZXNwLmNvb3Jkcy5sb25naXR1ZGUsXG4gICAgICAgICAgICBsYXQ6IHJlc3AuY29vcmRzLmxhdGl0dWRlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFRvIGV4dHJhY3QgTG9jYXRpb24gZnJvbSB0aGUgVGFzayBEZXRhaWxzXG4gIGFzeW5jIGdldExvY2F0aW9uKHRhc2spIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpID0+IHtcbiAgICAgIGxldCBlbmNvZGVkQWRkcmVzO1xuXG4gICAgICAvLyBJZiBGZXRjaCBBZGRyZXNzIGZyb20gTXVsdGlwbGUgUGF0aHNcbiAgICAgIGlmIChcbiAgICAgICAgY2hlY2tPYmplY3RQYXRoRXhpc3RzKFxuICAgICAgICAgIHRoaXMuYWdlbnRTZXJ2aWNlLmNvbmZpZyxcbiAgICAgICAgICAnZGFzaGJvYXJkLnRhc2tMb2NhdGlvblBhdGhzJ1xuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgLy8gR2V0IGFkZHJlc3Mgc3RyaW5nIGZyb20gbXVsdGlwbGUgcGF0aHNcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5hZ2VudFNlcnZpY2UuY29uZmlnLmRhc2hib2FyZC50YXNrTG9jYXRpb25QYXRocztcbiAgICAgICAgY29uc3QgYWRkcmVzcyA9IGFkZHJlc3NDb25jYXRvcih0YXNrLCBjb25maWcpO1xuXG4gICAgICAgIC8vIEVuY29kZSB0aGUgQWRkcmVzcyBpbiBVUklcbiAgICAgICAgZW5jb2RlZEFkZHJlcyA9IGVuY29kZVVSSShhZGRyZXNzKTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgRmV0Y2ggQWRkcmVzcyBmcm9tIFNpbmdsZSBQYXRoXG4gICAgICBlbHNlIGlmIChcbiAgICAgICAgY2hlY2tPYmplY3RQYXRoRXhpc3RzKFxuICAgICAgICAgIHRoaXMuYWdlbnRTZXJ2aWNlLmNvbmZpZyxcbiAgICAgICAgICAnZGFzaGJvYXJkLnRhc2tMb2NhdGlvblBhdGgnXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICAvLyBHZXQgQWRkcmVzcyBmcm9tIFNpbmdsZSBQYXRoXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuYWdlbnRTZXJ2aWNlLmNvbmZpZy5kYXNoYm9hcmQudGFza0xvY2F0aW9uUGF0aDtcbiAgICAgICAgY29uc3QgYWRkcmVzcyA9IGdldE9iamVjdFZhbHVlRnJvbVBhdGgodGFzaywgY29uZmlnKTtcblxuICAgICAgICAvLyBFbmNvZGUgdGhlIEFkZHJlc3MgaW4gVVJJXG4gICAgICAgIGVuY29kZWRBZGRyZXMgPSBlbmNvZGVVUkkoYWRkcmVzcyk7XG4gICAgICB9XG5cbiAgICAgIC8vIERlZmF1bHQgQWRkcmVzcyBQYXRocyBBdmFpYWJsZVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IGFkZHJlc3MgPVxuICAgICAgICAgIHRhc2s/LmV4dHJhcz8udGFza19kZXRhaWxzPy5jdXN0b21lcl9kZXRhaWxzPy5hZGRyZXNzID8/XG4gICAgICAgICAgdGFzaz8udGFza19kZXRhaWxzPy5jdXN0b21lcl9kZXRhaWxzPy5hZGRyZXNzID8/XG4gICAgICAgICAgdGFzaz8uZXh0cmFzPy5hZGRyZXNzID8/XG4gICAgICAgICAgdGFzaz8uYWRkcmVzcyA/P1xuICAgICAgICAgICcnO1xuXG4gICAgICAgIC8vIEVuY29kZSB0aGUgQWRkcmVzcyBpbiBVUklcbiAgICAgICAgZW5jb2RlZEFkZHJlcyA9IGVuY29kZVVSSShhZGRyZXNzKTtcbiAgICAgIH1cblxuICAgICAgLy8gVVJMIHRvIGdlb2NvZGUgQWRkcmVzcyBTdHJpbmcgdG8gTGF0aXR1ZGUgJiBMb25naXR1ZGVcbiAgICAgIGNvbnN0IHVybCA9IGBodHRwczovL25vbWluYXRpbS5vcGVuc3RyZWV0bWFwLm9yZy9zZWFyY2g/cT0ke2VuY29kZWRBZGRyZXN9JmZvcm1hdD1qc29uYDtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwpO1xuICAgICAgY29uc3QgZGF0YTogYW55ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuXG4gICAgICAvLyBTZXQgTG9jYXRpb24ge2xhdDogTEFULCBsbmc6IExOR30gZnJvbSBhZGRyZXNzIGdlb2NvZGVkXG4gICAgICBjb25zdCBpc1ZhbGlkTG9jYXRpb24gPVxuICAgICAgICBpc05vdEVtcHR5QXJyYXkoZGF0YSkgJiYgZGF0YVswXT8ubGF0ICYgZGF0YVswXT8ubG9uO1xuICAgICAgY29uc3QgbG9jYXRpb24gPSBpc1ZhbGlkTG9jYXRpb25cbiAgICAgICAgPyB7IGxhdDogZGF0YVswXT8ubGF0LCBsbmc6IGRhdGFbMF0/LmxvbiB9XG4gICAgICAgIDogdGhpcy5teVBvc2l0aW9uO1xuXG4gICAgICAvLyBTZXQgTG9jYXRpb24gdmFsaWRhdGlvbiAmIEdvb2dsZSBNYXBzIFVSTFxuICAgICAgbG9jYXRpb25bJ2lzVmFsaWRMb2NhdGlvbiddID0gaXNWYWxpZExvY2F0aW9uO1xuICAgICAgbG9jYXRpb25bJ2NvbG9yJ10gPSBpc1ZhbGlkTG9jYXRpb24gPyAnYmx1ZScgOiAncmVkJztcbiAgICAgIGxvY2F0aW9uW1xuICAgICAgICAnZ29vZ2xlTWFwc1VybCdcbiAgICAgIF0gPSBgaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9tYXBzL3BsYWNlLyR7bG9jYXRpb24/LmxhdH0sJHtsb2NhdGlvbj8ubG5nfWA7XG5cbiAgICAgIHJlc29sdmUobG9jYXRpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gR2V0IFRhc2tzIHwgTWFya2VycyBMb2NhdGlvbiBDbyBPcmRpbmF0ZXNcbiAgYXN5bmMgZ2V0TWFya2Vyc0xvY2F0aW9uKG15TWFya2VyLCB0YXNrcykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSkgPT4ge1xuICAgICAgbGV0IG1hcmtlcnMgPSBbXTtcbiAgICAgIG1hcmtlcnMucHVzaChteU1hcmtlcik7XG4gICAgICBjb25zdCBwcm9taXNlcyA9IHRhc2tzLm1hcChhc3luYyAodGFzaykgPT4ge1xuICAgICAgICBjb25zdCBtYXJrZXI6IGFueSA9IGF3YWl0IHRoaXMuZ2V0TG9jYXRpb24odGFzayk7XG4gICAgICAgIHRhc2sgPSB7IC4uLnRhc2ssIC4uLm1hcmtlciB9O1xuICAgICAgICBtYXJrZXJzLnB1c2godGFzayk7XG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuXG4gICAgICByZXNvbHZlKG1hcmtlcnMpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gVG8gSW5pdGlhbGl6ZSBPcGVuIFN0cmVldCBNYXBcbiAgYXN5bmMgaW5pdGlhbGl6ZU1hcCgpIHtcbiAgICBjb25zb2xlLmxvZygnUnVubmluZyBJbml0IE9wZW4gU3RyZWV0IE1hcHMnKTtcbiAgICB0aGlzLm15UG9zaXRpb24gPSBhd2FpdCB0aGlzLmdldFBvc2l0aW9uKCk7XG4gICAgdGhpcy5tYXAgPSBMLm1hcCgnbWFwJywge1xuICAgICAgY2VudGVyOiBbdGhpcy5teVBvc2l0aW9uLmxhdCwgdGhpcy5teVBvc2l0aW9uLmxuZ10sXG4gICAgICB6b29tOiAxMVxuICAgIH0pO1xuICAgIEwudGlsZUxheWVyKCdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycpLmFkZFRvKFxuICAgICAgdGhpcy5tYXBcbiAgICApO1xuICB9XG5cbiAgLy8gVG8gQWRkIE9wZW4gU3RyZWV0IE1hcmtlciBpbiBNYXBcbiAgYWRkTWFya2VyKHsgbGF0LCBsbmcsIHRpdGxlLCBjb2xvciB9KSB7XG4gICAgTC5tYXJrZXIoW2xhdCwgbG5nXSwge1xuICAgICAgaWNvbjogTC5pY29uKHtcbiAgICAgICAgaWNvblVybDpcbiAgICAgICAgICBjb2xvciA9PSAncmVkJ1xuICAgICAgICAgICAgPyAnaHR0cHM6Ly9rd2lraWQuczMuYXAtc291dGgtMS5hbWF6b25hd3MuY29tL0NPTkZJRy9VU0VSL2Fzc2V0cy9tYXAtbWFya2VyLTAucG5nJ1xuICAgICAgICAgICAgOiAnaHR0cHM6Ly9rd2lraWQuczMuYXAtc291dGgtMS5hbWF6b25hd3MuY29tL0NPTkZJRy9VU0VSL2Fzc2V0cy9tYXAtbWFya2VyLTEucG5nJ1xuICAgICAgfSlcbiAgICB9KVxuICAgICAgLmFkZFRvKHRoaXMubWFwKVxuICAgICAgLmJpbmRQb3B1cCh0aXRsZSk7XG4gIH1cblxuICAvLyBUbyBQbG90IE9wZW4gU3RyZWV0IERpcmVjdGlvbnMgZm9yIEFsbCBUYXNrc1xuICBhc3luYyBwbG90RGlyZWN0aW9uc0ZvckFsbFRhc2tzKHRhc2tzKSB7XG4gICAgaWYgKHRoaXMubWFwKSB7XG4gICAgICB0aGlzLmFsbE1hcmtlcnMgPSBbXTtcblxuICAgICAgLy8gQ3JlYXRlIEFnZW50IE1hcmtlciAmIFBsb3QgSXQuXG4gICAgICBjb25zdCBteU1hcmtlciA9IHtcbiAgICAgICAgbGF0OiB0aGlzLm15UG9zaXRpb24ubGF0LFxuICAgICAgICBsbmc6IHRoaXMubXlQb3NpdGlvbi5sbmcsXG4gICAgICAgIHRpdGxlOiAwLFxuICAgICAgICBjb2xvcjogJ3JlZCdcbiAgICAgIH07XG4gICAgICB0aGlzLmFkZE1hcmtlcihteU1hcmtlcik7XG4gICAgICB0aGlzLmFsbE1hcmtlcnMucHVzaChteU1hcmtlcik7XG5cbiAgICAgIC8vIENyZWF0ZSBNYXJrZXJzIGZvciBhbGwgVGFza3NcbiAgICAgIHRoaXMuYWxsTWFya2VycyA9IGF3YWl0IHRoaXMuZ2V0TWFya2Vyc0xvY2F0aW9uKG15TWFya2VyLCB0YXNrcyk7XG5cbiAgICAgIC8vIFJ1biBBbGdvcml0aG0gdG8gZ2V0IG9wdGltaXplZCBSb3V0ZXNcbiAgICAgIGNvbnN0IHN0YXJ0aW5nUG9pbnQgPSB0aGlzLmFsbE1hcmtlcnNbMF07XG4gICAgICBjb25zdCB1bnZpc2l0ZWRXYXlwb2ludHMgPSB0aGlzLmFsbE1hcmtlcnMuc2xpY2UoMSk7XG4gICAgICBjb25zdCBvcHRpbWl6ZWRSb3V0ZSA9IG5lYXJlc3ROZWlnaGJvckFsZ29yaXRobShcbiAgICAgICAgc3RhcnRpbmdQb2ludCxcbiAgICAgICAgdW52aXNpdGVkV2F5cG9pbnRzXG4gICAgICApO1xuXG4gICAgICAvLyBTb3J0IEFsbCBNYXJrZXJzIGFzIHBlciBvcHRpbWl6ZWQgcm91dGVzXG4gICAgICB0aGlzLmFsbE1hcmtlcnMgPSB0aGlzLnNvcnRUYXNrc0FzUGVyRGlzdGFuY2UoXG4gICAgICAgIG9wdGltaXplZFJvdXRlLFxuICAgICAgICB0aGlzLmFsbE1hcmtlcnMsXG4gICAgICAgIHRydWVcbiAgICAgICk7XG5cbiAgICAgIC8vIFNvcnQgQWxsIFRhc2tzIGFzIHBlciBvcHRpbWl6ZWQgcm91dGVzXG4gICAgICB0YXNrcyA9IHRoaXMuc29ydFRhc2tzQXNQZXJEaXN0YW5jZShcbiAgICAgICAgb3B0aW1pemVkUm91dGUuc2xpY2UoMSksXG4gICAgICAgIHRhc2tzLFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcblxuICAgICAgLy8gUGxvdCBNYXJrZXJzIGZvciBBbGwgVGFza3NcbiAgICAgIHRhc2tzLm1hcCgodGFzaykgPT4ge1xuICAgICAgICBjb25zdCBtYXJrZXI6IGFueSA9IHRoaXMuZ2V0TG9jYXRpb24odGFzayk7XG4gICAgICAgIHRoaXMuYWRkTWFya2VyKG1hcmtlcik7XG4gICAgICB9KTtcblxuICAgICAgLy8gU2V0IFN0eWxlcyBmb3IgYWxsIFRhc2sgUm91dGVzXG4gICAgICBjb25zdCBzdHlsZXMgPSBbXG4gICAgICAgIHsgY29sb3I6ICdibHVlJywgb3BhY2l0eTogMSwgd2VpZ2h0OiA4IH0sXG4gICAgICAgIHsgY29sb3I6ICd3aGl0ZScsIG9wYWNpdHk6IDAuNiwgd2VpZ2h0OiAxMiB9XG4gICAgICBdO1xuXG4gICAgICAvLyBTZXQgUm91dGVzIGZvciBhbGwgVGFza3NcbiAgICAgIHRoaXMuYWxsVGFza3NSb3V0ZXMgPSB0aGlzLnNldFJvdXRlcyh0aGlzLmFsbE1hcmtlcnMsIHN0eWxlcyk7XG4gICAgICB0aGlzLmZpdE1hcEJvdW5kcygpO1xuICAgIH1cbiAgICByZXR1cm4gdGFza3M7XG4gIH1cblxuICAvLyBUbyBwbG90IE9wZW4gU3RyZWV0IERpcmVjdGlvbiBmb3Igc2VsZWN0ZWQgVGFza1xuICBwbG90RGlyZWN0aW9uc0ZvclNlbGVjdGVkVGFzayhpbmRleCkge1xuICAgIGlmIChpbmRleCAhPT0gbnVsbCkge1xuICAgICAgLy8gUmVtb3ZlIFByZXZpb3VzbHkgU2VsZWN0ZWQgVGFzayBSb3V0ZVxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRUYXNrUm91dGVzKSB7XG4gICAgICAgIHRoaXMubWFwLnJlbW92ZUNvbnRyb2wodGhpcy5zZWxlY3RlZFRhc2tSb3V0ZXMpO1xuICAgICAgfVxuXG4gICAgICAvLyBSZW1vdmUgQWxsIFRhc2tzIFJvdXRlc1xuICAgICAgaWYgKHRoaXMuYWxsVGFza3NSb3V0ZXMpIHtcbiAgICAgICAgdGhpcy5tYXAucmVtb3ZlQ29udHJvbCh0aGlzLmFsbFRhc2tzUm91dGVzKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGFza01hcmtlciA9IHRoaXMuYWxsTWFya2Vyc1tpbmRleCArIDFdO1xuXG4gICAgICAvLyBJZiBMb2NhdGlvbiBpcyBBdmFpbGFibGUgaW4gVGFzayBEZXRhaWxzXG4gICAgICBpZiAodGFza01hcmtlci5jb2xvciAhPSAncmVkJykge1xuICAgICAgICBjb25zdCBtYXJrZXJzID0gW3RoaXMuYWxsTWFya2Vyc1swXSwgdGFza01hcmtlcl07XG4gICAgICAgIGNvbnN0IHN0eWxlcyA9IFtcbiAgICAgICAgICB7IGNvbG9yOiAnZ3JlZW4nLCBvcGFjaXR5OiAxLCB3ZWlnaHQ6IDggfSxcbiAgICAgICAgICB7IGNvbG9yOiAnd2hpdGUnLCBvcGFjaXR5OiAwLjQsIHdlaWdodDogMTIgfVxuICAgICAgICBdO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGFza1JvdXRlcyA9IHRoaXMuc2V0Um91dGVzKG1hcmtlcnMsIHN0eWxlcyk7XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRUYXNrRGlzdGFuY2VBbmRUaW1lKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGVydCgnTm8gTG9jYXRpb24gQXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFNldCBBbGwgVGFza3MgUm91dGVzIEFnYWluICYgUmVtb3ZlIFNlbGVjdGVkIFRhc2tzIHJvdXRlXG4gICAgZWxzZSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFRhc2tSb3V0ZXMpIHtcbiAgICAgICAgdGhpcy5tYXAucmVtb3ZlQ29udHJvbCh0aGlzLnNlbGVjdGVkVGFza1JvdXRlcyk7XG4gICAgICB9XG4gICAgICB0aGlzLm1hcC5hZGRDb250cm9sKHRoaXMuYWxsVGFza3NSb3V0ZXMpO1xuICAgICAgdGhpcy5zZWxlY3RlZFRhc2tSb3V0ZXMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMuZml0TWFwQm91bmRzKCk7XG4gIH1cblxuICAvLyBHZXQgRGlzdGFuY2UgJiBUaW1lIG9mIFNlbGVjdGVkIFRhc2tcbiAgZ2V0U2VsZWN0ZWRUYXNrRGlzdGFuY2VBbmRUaW1lKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVGFza0Rpc3RhbmNlQW5kVGltZTtcbiAgfVxuXG4gIC8vIFNldCBEaXN0YW5jZSAmIFRpbWUgb2YgU2VsZWN0ZWQgVGFza1xuICBzZXRTZWxlY3RlZFRhc2tEaXN0YW5jZUFuZFRpbWUoKSB7XG4gICAgdGhpcy5zZWxlY3RlZFRhc2tSb3V0ZXMub24oJ3JvdXRlc2ZvdW5kJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGxldCByb3V0ZXMgPSBlLnJvdXRlcztcbiAgICAgIGxldCBzdW1tYXJ5ID0gcm91dGVzWzBdLnN1bW1hcnk7XG5cbiAgICAgIGNvbnN0IGRpc3RhbmNlID0gc3VtbWFyeS50b3RhbERpc3RhbmNlIC8gMTAwMDtcbiAgICAgIGNvbnN0IHRpbWUgPSBNYXRoLnJvdW5kKChzdW1tYXJ5LnRvdGFsVGltZSAlIDM2MDApIC8gNjApO1xuXG4gICAgICB0aGlzLnNlbGVjdGVkVGFza0Rpc3RhbmNlQW5kVGltZSA9IHtcbiAgICAgICAgZGlzdGFuY2U6IGRpc3RhbmNlLFxuICAgICAgICB0aW1lOiB0aW1lXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgLy8gVG8gc29ydCBPcGVuIFN0cmVldCBNYXBzIFRhc2sgYXMgcGVyIG5lYXJlc3QgZGlzdGFuY2VcbiAgc29ydFRhc2tzQXNQZXJEaXN0YW5jZShvcmRlciwgdGFza3MsIGlzTWFya2VyKSB7XG4gICAgbGV0IHNvcnRlZFRhc2tzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YXNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdGl0bGUgPSBpc01hcmtlciA/IG9yZGVyW2ldLnRpdGxlIDogb3JkZXJbaV0udGl0bGUgLSAxO1xuICAgICAgbGV0IHRhc2sgPSB0YXNrc1t0aXRsZV07XG4gICAgICBzb3J0ZWRUYXNrcy5wdXNoKHRhc2spO1xuICAgIH1cbiAgICByZXR1cm4gc29ydGVkVGFza3M7XG4gIH1cblxuICAvLyBUbyBzZXQgT3BlbiBTdHJlZXQgcm91dGVzIGluIHRoZSBtYXBzXG4gIHNldFJvdXRlcyhtYXJrZXJzLCBzdHlsZXMpIHtcbiAgICByZXR1cm4gTC5Sb3V0aW5nLmNvbnRyb2woe1xuICAgICAgd2F5cG9pbnRzOiBtYXJrZXJzLFxuICAgICAgbGluZU9wdGlvbnM6IHtcbiAgICAgICAgc3R5bGVzOiBzdHlsZXNcbiAgICAgIH0sXG4gICAgICBjcmVhdGVNYXJrZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9LFxuICAgICAgcm91dGVXaGlsZURyYWdnaW5nOiB0cnVlXG4gICAgfSkuYWRkVG8odGhpcy5tYXApO1xuICB9XG5cbiAgLy8gVG8gc2V0IE9wZW4gU3RyZWV0IHZpZXcgcG9pbnQgb24gdGhlIG1hcFxuICBmaXRNYXBCb3VuZHMoKSB7XG4gICAgY29uc3QgbWFya2VyTGF0TG5ncyA9IHRoaXMuYWxsTWFya2Vycy5tYXAoKG1hcmtlcikgPT5cbiAgICAgIEwubGF0TG5nKG1hcmtlci5sYXQsIG1hcmtlci5sbmcpXG4gICAgKTtcbiAgICB0aGlzLm1hcC5maXRCb3VuZHMobWFya2VyTGF0TG5ncyk7XG4gIH1cbn1cbiJdfQ==
252
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3Blbi1zdHJlZXQtbWFwcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWFnZW50LWRhc2hib2FyZC9zcmMvbGliL3NlcnZpY2VzL29wZW4tc3RyZWV0LW1hcHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFjLFVBQVUsRUFBYSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxLQUFLLENBQUMsTUFBTSxTQUFTLENBQUM7QUFDN0IsT0FBTyx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHNCQUFzQixFQUN0QixlQUFlLEVBQ2hCLE1BQU0sZ0JBQWdCLENBQUM7QUFJeEIsT0FBTyxFQUNMLGVBQWUsRUFDZix3QkFBd0IsRUFDekIsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7QUFLakMsTUFBTSxPQUFPLHFCQUFxQjtJQWFoQyxZQUNVLFlBQTBCLEVBQzNCLG9CQUEwQyxFQUMxQyxVQUFzQjtRQUZyQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMzQix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBQzFDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFiL0IsZUFBVSxHQUFRLEVBQUUsQ0FBQztJQWNsQixDQUFDO0lBRUosMEJBQTBCO0lBQzFCLFdBQVc7UUFDVCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLFNBQVMsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUNqQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNQLE9BQU8sQ0FBQztvQkFDTixHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTO29CQUMxQixHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRO2lCQUMxQixDQUFDLENBQUM7WUFDTCxDQUFDLEVBQ0QsQ0FBQyxHQUFHLEVB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QyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FDakMsQ0FBQztRQUNGLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7O3NJQWhUVSxxQkFBcUI7MElBQXJCLHFCQUFxQixjQUZwQixNQUFNOzRGQUVQLHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7K0pBVW1DLGlCQUFpQjtzQkFBbEQsWUFBWTt1QkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmLCBJbmplY3RhYmxlLCBRdWVyeUxpc3QsIFZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICogYXMgTCBmcm9tICdsZWFmbGV0JztcbmltcG9ydCAnbGVhZmxldC1yb3V0aW5nLW1hY2hpbmUnO1xuaW1wb3J0IHsgQWdlbnRTZXJ2aWNlIH0gZnJvbSAnLi9hZ2VudC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIGNoZWNrT2JqZWN0UGF0aEV4aXN0cyxcbiAgZ2V0T2JqZWN0VmFsdWVGcm9tUGF0aCxcbiAgaXNOb3RFbXB0eUFycmF5XG59IGZyb20gJ2t3aWtpZC10b29sa2l0JztcblxuaW1wb3J0IHsgTWFwRGlyZWN0aW9uc1NlcnZpY2UgfSBmcm9tICdAYW5ndWxhci9nb29nbGUtbWFwcyc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtcbiAgYWRkcmVzc0NvbmNhdG9yLFxuICBuZWFyZXN0TmVpZ2hib3JBbGdvcml0aG1cbn0gZnJvbSAnLi4vaGVscGVycy9tYXBzLmhlbHBlcnMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBPcGVuU3RyZWV0TWFwc1NlcnZpY2Uge1xuICBteVBvc2l0aW9uO1xuICBtYXA6IGFueTtcbiAgYWxsTWFya2VyczogYW55ID0gW107XG5cbiAgYWxsVGFza3NSb3V0ZXM6IGFueTtcbiAgc2VsZWN0ZWRUYXNrUm91dGVzOiBhbnk7XG4gIHNlbGVjdGVkVGFza0Rpc3RhbmNlQW5kVGltZTogYW55O1xuXG4gIEBWaWV3Q2hpbGRyZW4oJ2RpcmVjdGlvbnNSZW5kZXInKSBkaXJlY3Rpb25zUmVuZGVyczogUXVlcnlMaXN0PFxuICAgIEVsZW1lbnRSZWY8Z29vZ2xlLm1hcHMuRGlyZWN0aW9uc1JlbmRlcmVyPlxuICA+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWdlbnRTZXJ2aWNlOiBBZ2VudFNlcnZpY2UsXG4gICAgcHVibGljIG1hcERpcmVjdGlvbnNTZXJ2aWNlOiBNYXBEaXJlY3Rpb25zU2VydmljZSxcbiAgICBwdWJsaWMgaHR0cENsaWVudDogSHR0cENsaWVudFxuICApIHt9XG5cbiAgLy8gVG8gZ2V0IEN1cnJlbnQgUG9zaXRpb25cbiAgZ2V0UG9zaXRpb24oKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLndhdGNoUG9zaXRpb24oXG4gICAgICAgIChyZXNwKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICBsbmc6IHJlc3AuY29vcmRzLmxvbmdpdHVkZSxcbiAgICAgICAgICAgIGxhdDogcmVzcC5jb29yZHMubGF0aXR1ZGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gVG8gZXh0cmFjdCBMb2NhdGlvbiBmcm9tIHRoZSBUYXNrIERldGFpbHNcbiAgYXN5bmMgZ2V0TG9jYXRpb24odGFzaykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSkgPT4ge1xuICAgICAgbGV0IGVuY29kZWRBZGRyZXM7XG5cbiAgICAgIC8vIElmIEZldGNoIEFkZHJlc3MgZnJvbSBNdWx0aXBsZSBQYXRoc1xuICAgICAgaWYgKFxuICAgICAgICBjaGVja09iamVjdFBhdGhFeGlzdHMoXG4gICAgICAgICAgdGhpcy5hZ2VudFNlcnZpY2UuY29uZmlnLFxuICAgICAgICAgICdkYXNoYm9hcmQudGFza0xvY2F0aW9uUGF0aHMnXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICAvLyBHZXQgYWRkcmVzcyBzdHJpbmcgZnJvbSBtdWx0aXBsZSBwYXRoc1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLmFnZW50U2VydmljZS5jb25maWcuZGFzaGJvYXJkLnRhc2tMb2NhdGlvblBhdGhzO1xuICAgICAgICBjb25zdCBhZGRyZXNzID0gYWRkcmVzc0NvbmNhdG9yKHRhc2ssIGNvbmZpZyk7XG5cbiAgICAgICAgLy8gRW5jb2RlIHRoZSBBZGRyZXNzIGluIFVSSVxuICAgICAgICBlbmNvZGVkQWRkcmVzID0gZW5jb2RlVVJJKGFkZHJlc3MpO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBGZXRjaCBBZGRyZXNzIGZyb20gU2luZ2xlIFBhdGhcbiAgICAgIGVsc2UgaWYgKFxuICAgICAgICBjaGVja09iamVjdFBhdGhFeGlzdHMoXG4gICAgICAgICAgdGhpcy5hZ2VudFNlcnZpY2UuY29uZmlnLFxuICAgICAgICAgICdkYXNoYm9hcmQudGFza0xvY2F0aW9uUGF0aCdcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIC8vIEdldCBBZGRyZXNzIGZyb20gU2luZ2xlIFBhdGhcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5hZ2VudFNlcnZpY2UuY29uZmlnLmRhc2hib2FyZC50YXNrTG9jYXRpb25QYXRoO1xuICAgICAgICBjb25zdCBhZGRyZXNzID0gZ2V0T2JqZWN0VmFsdWVGcm9tUGF0aCh0YXNrLCBjb25maWcpO1xuXG4gICAgICAgIC8vIEVuY29kZSB0aGUgQWRkcmVzcyBpbiBVUklcbiAgICAgICAgZW5jb2RlZEFkZHJlcyA9IGVuY29kZVVSSShhZGRyZXNzKTtcbiAgICAgIH1cblxuICAgICAgLy8gRGVmYXVsdCBBZGRyZXNzIFBhdGhzIEF2YWlhYmxlXG4gICAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgYWRkcmVzcyA9XG4gICAgICAgICAgdGFzaz8uZXh0cmFzPy50YXNrX2RldGFpbHM/LmN1c3RvbWVyX2RldGFpbHM/LmFkZHJlc3MgPz9cbiAgICAgICAgICB0YXNrPy50YXNrX2RldGFpbHM/LmN1c3RvbWVyX2RldGFpbHM/LmFkZHJlc3MgPz9cbiAgICAgICAgICB0YXNrPy5leHRyYXM/LmFkZHJlc3MgPz9cbiAgICAgICAgICB0YXNrPy5hZGRyZXNzID8/XG4gICAgICAgICAgJyc7XG5cbiAgICAgICAgLy8gRW5jb2RlIHRoZSBBZGRyZXNzIGluIFVSSVxuICAgICAgICBlbmNvZGVkQWRkcmVzID0gZW5jb2RlVVJJKGFkZHJlc3MpO1xuICAgICAgfVxuXG4gICAgICAvLyBVUkwgdG8gZ2VvY29kZSBBZGRyZXNzIFN0cmluZyB0byBMYXRpdHVkZSAmIExvbmdpdHVkZVxuICAgICAgY29uc3QgdXJsID0gYGh0dHBzOi8vbm9taW5hdGltLm9wZW5zdHJlZXRtYXAub3JnL3NlYXJjaD9xPSR7ZW5jb2RlZEFkZHJlc30mZm9ybWF0PWpzb25gO1xuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCk7XG4gICAgICBjb25zdCBkYXRhOiBhbnkgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG5cbiAgICAgIC8vIFNldCBMb2NhdGlvbiB7bGF0OiBMQVQsIGxuZzogTE5HfSBmcm9tIGFkZHJlc3MgZ2VvY29kZWRcbiAgICAgIGNvbnN0IGlzVmFsaWRMb2NhdGlvbiA9XG4gICAgICAgIGlzTm90RW1wdHlBcnJheShkYXRhKSAmJiBkYXRhWzBdPy5sYXQgJiBkYXRhWzBdPy5sb247XG4gICAgICBjb25zdCBsb2NhdGlvbiA9IGlzVmFsaWRMb2NhdGlvblxuICAgICAgICA/IHsgbGF0OiBkYXRhWzBdPy5sYXQsIGxuZzogZGF0YVswXT8ubG9uIH1cbiAgICAgICAgOiB7bGF0OiBudWxsLCBsbmc6IG51bGx9O1xuXG4gICAgICAvLyBTZXQgTG9jYXRpb24gdmFsaWRhdGlvbiAmIEdvb2dsZSBNYXBzIFVSTFxuICAgICAgbG9jYXRpb25bJ2lzVmFsaWRMb2NhdGlvbiddID0gaXNWYWxpZExvY2F0aW9uO1xuICAgICAgbG9jYXRpb25bJ2NvbG9yJ10gPSBpc1ZhbGlkTG9jYXRpb24gPyAnYmx1ZScgOiAncmVkJztcbiAgICAgIGxvY2F0aW9uW1xuICAgICAgICAnZ29vZ2xlTWFwc1VybCdcbiAgICAgIF0gPSBgaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9tYXBzL3BsYWNlLyR7bG9jYXRpb24/LmxhdH0sJHtsb2NhdGlvbj8ubG5nfWA7XG5cbiAgICAgIHJlc29sdmUobG9jYXRpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gR2V0IFRhc2tzIHwgTWFya2VycyBMb2NhdGlvbiBDbyBPcmRpbmF0ZXNcbiAgYXN5bmMgZ2V0TWFya2Vyc0xvY2F0aW9uKG15TWFya2VyLCB0YXNrcykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSkgPT4ge1xuICAgICAgbGV0IG1hcmtlcnMgPSBbXTtcbiAgICAgIG1hcmtlcnMucHVzaChteU1hcmtlcik7XG4gICAgICBjb25zdCBwcm9taXNlcyA9IHRhc2tzLm1hcChhc3luYyAodGFzaykgPT4ge1xuICAgICAgICBjb25zdCBtYXJrZXI6IGFueSA9IGF3YWl0IHRoaXMuZ2V0TG9jYXRpb24odGFzayk7XG4gICAgICAgIHRhc2sgPSB7IC4uLnRhc2ssIC4uLm1hcmtlciB9O1xuICAgICAgICBtYXJrZXJzLnB1c2godGFzayk7XG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuXG4gICAgICByZXNvbHZlKG1hcmtlcnMpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gVG8gSW5pdGlhbGl6ZSBPcGVuIFN0cmVldCBNYXBcbiAgYXN5bmMgaW5pdGlhbGl6ZU1hcCgpIHtcbiAgICBjb25zb2xlLmxvZygnUnVubmluZyBJbml0IE9wZW4gU3RyZWV0IE1hcHMnKTtcbiAgICB0aGlzLm15UG9zaXRpb24gPSBhd2FpdCB0aGlzLmdldFBvc2l0aW9uKCk7XG4gICAgdGhpcy5tYXAgPSBMLm1hcCgnbWFwJywge1xuICAgICAgY2VudGVyOiBbdGhpcy5teVBvc2l0aW9uLmxhdCwgdGhpcy5teVBvc2l0aW9uLmxuZ10sXG4gICAgICB6b29tOiAxMVxuICAgIH0pO1xuICAgIEwudGlsZUxheWVyKCdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycpLmFkZFRvKFxuICAgICAgdGhpcy5tYXBcbiAgICApO1xuICB9XG5cbiAgLy8gVG8gQWRkIE9wZW4gU3RyZWV0IE1hcmtlciBpbiBNYXBcbiAgYWRkTWFya2VyKHsgbGF0LCBsbmcsIHRpdGxlLCBjb2xvciB9KSB7XG4gICAgTC5tYXJrZXIoW2xhdCwgbG5nXSwge1xuICAgICAgaWNvbjogTC5pY29uKHtcbiAgICAgICAgaWNvblVybDpcbiAgICAgICAgICBjb2xvciA9PSAncmVkJ1xuICAgICAgICAgICAgPyAnaHR0cHM6Ly9rd2lraWQuczMuYXAtc291dGgtMS5hbWF6b25hd3MuY29tL0NPTkZJRy9VU0VSL2Fzc2V0cy9tYXAtbWFya2VyLTAucG5nJ1xuICAgICAgICAgICAgOiAnaHR0cHM6Ly9rd2lraWQuczMuYXAtc291dGgtMS5hbWF6b25hd3MuY29tL0NPTkZJRy9VU0VSL2Fzc2V0cy9tYXAtbWFya2VyLTEucG5nJ1xuICAgICAgfSlcbiAgICB9KVxuICAgICAgLmFkZFRvKHRoaXMubWFwKVxuICAgICAgLmJpbmRQb3B1cCh0aXRsZSk7XG4gIH1cblxuICAvLyBUbyBQbG90IE9wZW4gU3RyZWV0IERpcmVjdGlvbnMgZm9yIEFsbCBUYXNrc1xuICBhc3luYyBwbG90RGlyZWN0aW9uc0ZvckFsbFRhc2tzKHRhc2tzKSB7XG4gICAgaWYgKHRoaXMubWFwKSB7XG4gICAgICB0aGlzLmFsbE1hcmtlcnMgPSBbXTtcblxuICAgICAgLy8gQ3JlYXRlIEFnZW50IE1hcmtlciAmIFBsb3QgSXQuXG4gICAgICBjb25zdCBteU1hcmtlciA9IHtcbiAgICAgICAgbGF0OiB0aGlzLm15UG9zaXRpb24ubGF0LFxuICAgICAgICBsbmc6IHRoaXMubXlQb3NpdGlvbi5sbmcsXG4gICAgICAgIHRpdGxlOiAwLFxuICAgICAgICBjb2xvcjogJ3JlZCdcbiAgICAgIH07XG4gICAgICB0aGlzLmFkZE1hcmtlcihteU1hcmtlcik7XG4gICAgICB0aGlzLmFsbE1hcmtlcnMucHVzaChteU1hcmtlcik7XG5cbiAgICAgIC8vIENyZWF0ZSBNYXJrZXJzIGZvciBhbGwgVGFza3NcbiAgICAgIHRoaXMuYWxsTWFya2VycyA9IGF3YWl0IHRoaXMuZ2V0TWFya2Vyc0xvY2F0aW9uKG15TWFya2VyLCB0YXNrcyk7XG5cbiAgICAgIC8vIFJ1biBBbGdvcml0aG0gdG8gZ2V0IG9wdGltaXplZCBSb3V0ZXNcbiAgICAgIGNvbnN0IHN0YXJ0aW5nUG9pbnQgPSB0aGlzLmFsbE1hcmtlcnNbMF07XG4gICAgICBjb25zdCB1bnZpc2l0ZWRXYXlwb2ludHMgPSB0aGlzLmFsbE1hcmtlcnMuc2xpY2UoMSk7XG4gICAgICBjb25zdCBvcHRpbWl6ZWRSb3V0ZSA9IG5lYXJlc3ROZWlnaGJvckFsZ29yaXRobShcbiAgICAgICAgc3RhcnRpbmdQb2ludCxcbiAgICAgICAgdW52aXNpdGVkV2F5cG9pbnRzXG4gICAgICApO1xuXG4gICAgICAvLyBTb3J0IEFsbCBNYXJrZXJzIGFzIHBlciBvcHRpbWl6ZWQgcm91dGVzXG4gICAgICB0aGlzLmFsbE1hcmtlcnMgPSB0aGlzLnNvcnRUYXNrc0FzUGVyRGlzdGFuY2UoXG4gICAgICAgIG9wdGltaXplZFJvdXRlLFxuICAgICAgICB0aGlzLmFsbE1hcmtlcnMsXG4gICAgICAgIHRydWVcbiAgICAgICk7XG5cbiAgICAgIC8vIFNvcnQgQWxsIFRhc2tzIGFzIHBlciBvcHRpbWl6ZWQgcm91dGVzXG4gICAgICB0YXNrcyA9IHRoaXMuc29ydFRhc2tzQXNQZXJEaXN0YW5jZShcbiAgICAgICAgb3B0aW1pemVkUm91dGUuc2xpY2UoMSksXG4gICAgICAgIHRhc2tzLFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcblxuICAgICAgLy8gUGxvdCBNYXJrZXJzIGZvciBBbGwgVGFza3NcbiAgICAgIHRhc2tzLm1hcCgodGFzaykgPT4ge1xuICAgICAgICBpZiAodGFzaz8uaXNWYWxpZExvY2F0aW9uKSB7XG4gICAgICAgICAgY29uc3QgbWFya2VyOiBhbnkgPSB0aGlzLmdldExvY2F0aW9uKHRhc2spO1xuICAgICAgICAgIHRoaXMuYWRkTWFya2VyKG1hcmtlcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBTZXQgU3R5bGVzIGZvciBhbGwgVGFzayBSb3V0ZXNcbiAgICAgIGNvbnN0IHN0eWxlcyA9IFtcbiAgICAgICAgeyBjb2xvcjogJ2JsdWUnLCBvcGFjaXR5OiAxLCB3ZWlnaHQ6IDggfSxcbiAgICAgICAgeyBjb2xvcjogJ3doaXRlJywgb3BhY2l0eTogMC42LCB3ZWlnaHQ6IDEyIH1cbiAgICAgIF07XG5cbiAgICAgIC8vIFNldCBSb3V0ZXMgZm9yIGFsbCBUYXNrc1xuICAgICAgdGhpcy5hbGxUYXNrc1JvdXRlcyA9IHRoaXMuc2V0Um91dGVzKHRoaXMuYWxsTWFya2Vycywgc3R5bGVzKTtcbiAgICAgIHRoaXMuZml0TWFwQm91bmRzKCk7XG4gICAgfVxuICAgIHJldHVybiB0YXNrcztcbiAgfVxuXG4gIC8vIFRvIHBsb3QgT3BlbiBTdHJlZXQgRGlyZWN0aW9uIGZvciBzZWxlY3RlZCBUYXNrXG4gIHBsb3REaXJlY3Rpb25zRm9yU2VsZWN0ZWRUYXNrKGluZGV4KSB7XG4gICAgaWYgKGluZGV4ICE9PSBudWxsKSB7XG4gICAgICAvLyBSZW1vdmUgUHJldmlvdXNseSBTZWxlY3RlZCBUYXNrIFJvdXRlXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFRhc2tSb3V0ZXMpIHtcbiAgICAgICAgdGhpcy5tYXAucmVtb3ZlQ29udHJvbCh0aGlzLnNlbGVjdGVkVGFza1JvdXRlcyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlbW92ZSBBbGwgVGFza3MgUm91dGVzXG4gICAgICBpZiAodGhpcy5hbGxUYXNrc1JvdXRlcykge1xuICAgICAgICB0aGlzLm1hcC5yZW1vdmVDb250cm9sKHRoaXMuYWxsVGFza3NSb3V0ZXMpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0YXNrTWFya2VyID0gdGhpcy5hbGxNYXJrZXJzW2luZGV4ICsgMV07XG5cbiAgICAgIC8vIElmIExvY2F0aW9uIGlzIEF2YWlsYWJsZSBpbiBUYXNrIERldGFpbHNcbiAgICAgIGlmICh0YXNrTWFya2VyLmNvbG9yICE9ICdyZWQnKSB7XG4gICAgICAgIGNvbnN0IG1hcmtlcnMgPSBbdGhpcy5hbGxNYXJrZXJzWzBdLCB0YXNrTWFya2VyXTtcbiAgICAgICAgY29uc3Qgc3R5bGVzID0gW1xuICAgICAgICAgIHsgY29sb3I6ICdncmVlbicsIG9wYWNpdHk6IDEsIHdlaWdodDogOCB9LFxuICAgICAgICAgIHsgY29sb3I6ICd3aGl0ZScsIG9wYWNpdHk6IDAuNCwgd2VpZ2h0OiAxMiB9XG4gICAgICAgIF07XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYXNrUm91dGVzID0gdGhpcy5zZXRSb3V0ZXMobWFya2Vycywgc3R5bGVzKTtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZFRhc2tEaXN0YW5jZUFuZFRpbWUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsZXJ0KCdObyBMb2NhdGlvbiBBdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gU2V0IEFsbCBUYXNrcyBSb3V0ZXMgQWdhaW4gJiBSZW1vdmUgU2VsZWN0ZWQgVGFza3Mgcm91dGVcbiAgICBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkVGFza1JvdXRlcykge1xuICAgICAgICB0aGlzLm1hcC5yZW1vdmVDb250cm9sKHRoaXMuc2VsZWN0ZWRUYXNrUm91dGVzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubWFwLmFkZENvbnRyb2wodGhpcy5hbGxUYXNrc1JvdXRlcyk7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFza1JvdXRlcyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5maXRNYXBCb3VuZHMoKTtcbiAgfVxuXG4gIC8vIEdldCBEaXN0YW5jZSAmIFRpbWUgb2YgU2VsZWN0ZWQgVGFza1xuICBnZXRTZWxlY3RlZFRhc2tEaXN0YW5jZUFuZFRpbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUYXNrRGlzdGFuY2VBbmRUaW1lO1xuICB9XG5cbiAgLy8gU2V0IERpc3RhbmNlICYgVGltZSBvZiBTZWxlY3RlZCBUYXNrXG4gIHNldFNlbGVjdGVkVGFza0Rpc3RhbmNlQW5kVGltZSgpIHtcbiAgICB0aGlzLnNlbGVjdGVkVGFza1JvdXRlcy5vbigncm91dGVzZm91bmQnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgbGV0IHJvdXRlcyA9IGUucm91dGVzO1xuICAgICAgbGV0IHN1bW1hcnkgPSByb3V0ZXNbMF0uc3VtbWFyeTtcblxuICAgICAgY29uc3QgZGlzdGFuY2UgPSBzdW1tYXJ5LnRvdGFsRGlzdGFuY2UgLyAxMDAwO1xuICAgICAgY29uc3QgdGltZSA9IE1hdGgucm91bmQoKHN1bW1hcnkudG90YWxUaW1lICUgMzYwMCkgLyA2MCk7XG5cbiAgICAgIHRoaXMuc2VsZWN0ZWRUYXNrRGlzdGFuY2VBbmRUaW1lID0ge1xuICAgICAgICBkaXN0YW5jZTogZGlzdGFuY2UsXG4gICAgICAgIHRpbWU6IHRpbWVcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAvLyBUbyBzb3J0IE9wZW4gU3RyZWV0IE1hcHMgVGFzayBhcyBwZXIgbmVhcmVzdCBkaXN0YW5jZVxuICBzb3J0VGFza3NBc1BlckRpc3RhbmNlKG9yZGVyLCB0YXNrcywgaXNNYXJrZXIpIHtcbiAgICBsZXQgc29ydGVkVGFza3MgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhc2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB0aXRsZSA9IGlzTWFya2VyID8gb3JkZXJbaV0udGl0bGUgOiBvcmRlcltpXS50aXRsZSAtIDE7XG4gICAgICBsZXQgdGFzayA9IHRhc2tzW3RpdGxlXTtcbiAgICAgIHNvcnRlZFRhc2tzLnB1c2godGFzayk7XG4gICAgfVxuICAgIHJldHVybiBzb3J0ZWRUYXNrcztcbiAgfVxuXG4gIC8vIFRvIHNldCBPcGVuIFN0cmVldCByb3V0ZXMgaW4gdGhlIG1hcHNcbiAgc2V0Um91dGVzKG1hcmtlcnMsIHN0eWxlcykge1xuICAgIHJldHVybiBMLlJvdXRpbmcuY29udHJvbCh7XG4gICAgICB3YXlwb2ludHM6IG1hcmtlcnMsXG4gICAgICBsaW5lT3B0aW9uczoge1xuICAgICAgICBzdHlsZXM6IHN0eWxlc1xuICAgICAgfSxcbiAgICAgIGNyZWF0ZU1hcmtlcjogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0sXG4gICAgICByb3V0ZVdoaWxlRHJhZ2dpbmc6IHRydWVcbiAgICB9KS5hZGRUbyh0aGlzLm1hcCk7XG4gIH1cblxuICAvLyBUbyBzZXQgT3BlbiBTdHJlZXQgdmlldyBwb2ludCBvbiB0aGUgbWFwXG4gIGZpdE1hcEJvdW5kcygpIHtcbiAgICBjb25zdCBtYXJrZXJMYXRMbmdzID0gdGhpcy5hbGxNYXJrZXJzLm1hcCgobWFya2VyKSA9PlxuICAgICAgTC5sYXRMbmcobWFya2VyLmxhdCwgbWFya2VyLmxuZylcbiAgICApO1xuICAgIHRoaXMubWFwLmZpdEJvdW5kcyhtYXJrZXJMYXRMbmdzKTtcbiAgfVxufVxuIl19
@@ -6,8 +6,8 @@ import { MapInfoWindow, GoogleMapsModule } from '@angular/google-maps';
6
6
  import * as i11 from '@taiga-ui/core';
7
7
  import { TuiDialogService, TuiRootModule, TuiDialogModule, TuiDropdownModule, TuiGroupModule, TuiSvgModule } from '@taiga-ui/core';
8
8
  import { getObjectValueFromPath, checkObjectPathExists, isNotEmptyArray, isEmptyValue, isNotEmptyValue } from 'kwikid-toolkit';
9
- import { of } from 'rxjs';
10
9
  import { map, catchError } from 'rxjs/operators';
10
+ import { of } from 'rxjs';
11
11
  import * as i3 from '@angular/common/http';
12
12
  import { HttpClientModule, HttpClientJsonpModule } from '@angular/common/http';
13
13
  import * as i4 from 'kwikui';
@@ -19,7 +19,7 @@ import { CommonModule } from '@angular/common';
19
19
  import * as i7 from '@angular/forms';
20
20
  import { FormGroup, FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';
21
21
  import * as i10 from '@taiga-ui/cdk';
22
- import { TuiDayRange, TuiDay, TuiActiveZoneModule } from '@taiga-ui/cdk';
22
+ import { TuiDay, TuiDayRange, TuiActiveZoneModule } from '@taiga-ui/cdk';
23
23
  import * as i5 from '@angular/cdk/scrolling';
24
24
  import { ScrollingModule } from '@angular/cdk/scrolling';
25
25
  import * as i8 from 'kwikid-forms';
@@ -277,15 +277,6 @@ class GoogleMapsService {
277
277
  });
278
278
  });
279
279
  }
280
- // Load Google Maps
281
- loadMaps(apiKey) {
282
- const url = `https://maps.googleapis.com/maps/api/js?key=${apiKey}&v=3.exp&libraries=geometry,drawing,places`;
283
- this.apiKey = apiKey;
284
- return this.httpClient.jsonp(url, 'callback').pipe(map(() => true), catchError(() => {
285
- console.error('Error loading Google Maps JavaScript API.');
286
- return of(false);
287
- }));
288
- }
289
280
  // To Initialize Google Maps
290
281
  initializeMap() {
291
282
  return __awaiter(this, void 0, void 0, function* () {
@@ -336,7 +327,7 @@ class GoogleMapsService {
336
327
  const isValidLocation = isNotEmptyArray(data === null || data === void 0 ? void 0 : data.results);
337
328
  const location = isValidLocation
338
329
  ? (_m = (_l = data === null || data === void 0 ? void 0 : data.results[0]) === null || _l === void 0 ? void 0 : _l.geometry) === null || _m === void 0 ? void 0 : _m.location
339
- : this.myPosition;
330
+ : { lat: null, lng: null };
340
331
  // Set Location validation & Google Maps URL
341
332
  location['isValidLocation'] = isValidLocation;
342
333
  location['googleMapsUrl'] = `https://www.google.com/maps/place/${location === null || location === void 0 ? void 0 : location.lat},${location === null || location === void 0 ? void 0 : location.lng}`;
@@ -366,11 +357,13 @@ class GoogleMapsService {
366
357
  return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
367
358
  let path = [];
368
359
  const promises = tasks.map((task) => {
369
- path.push({
370
- location: task,
371
- stopover: true
372
- });
373
- this.allMarkers.push(task);
360
+ if (task === null || task === void 0 ? void 0 : task.isValidLocation) {
361
+ path.push({
362
+ location: task,
363
+ stopover: true
364
+ });
365
+ this.allMarkers.push(task);
366
+ }
374
367
  });
375
368
  yield Promise.all(promises);
376
369
  resolve(path);
@@ -422,7 +415,7 @@ class GoogleMapsService {
422
415
  if (index != null) {
423
416
  const taskMarker = this.allMarkers[index + 1];
424
417
  // If Location is Available in Task Details
425
- if (taskMarker.isValidLocation) {
418
+ if (taskMarker === null || taskMarker === void 0 ? void 0 : taskMarker.isValidLocation) {
426
419
  const request = {
427
420
  origin: this.myPosition,
428
421
  destination: taskMarker,
@@ -512,7 +505,7 @@ class OpenStreetMapsService {
512
505
  const isValidLocation = isNotEmptyArray(data) && ((_l = data[0]) === null || _l === void 0 ? void 0 : _l.lat) & ((_m = data[0]) === null || _m === void 0 ? void 0 : _m.lon);
513
506
  const location = isValidLocation
514
507
  ? { lat: (_o = data[0]) === null || _o === void 0 ? void 0 : _o.lat, lng: (_p = data[0]) === null || _p === void 0 ? void 0 : _p.lon }
515
- : this.myPosition;
508
+ : { lat: null, lng: null };
516
509
  // Set Location validation & Google Maps URL
517
510
  location['isValidLocation'] = isValidLocation;
518
511
  location['color'] = isValidLocation ? 'blue' : 'red';
@@ -587,8 +580,10 @@ class OpenStreetMapsService {
587
580
  tasks = this.sortTasksAsPerDistance(optimizedRoute.slice(1), tasks, false);
588
581
  // Plot Markers for All Tasks
589
582
  tasks.map((task) => {
590
- const marker = this.getLocation(task);
591
- this.addMarker(marker);
583
+ if (task === null || task === void 0 ? void 0 : task.isValidLocation) {
584
+ const marker = this.getLocation(task);
585
+ this.addMarker(marker);
586
+ }
592
587
  });
593
588
  // Set Styles for all Task Routes
594
589
  const styles = [
@@ -729,35 +724,7 @@ class CustomerDetailsComponent {
729
724
  this.googleMapsService = googleMapsService;
730
725
  this.openStreetMapsService = openStreetMapsService;
731
726
  this.cdr = cdr;
732
- this.customer = {
733
- agent_id: 'sparkcpaital_dev_agent_1',
734
- client_name: 'sparkcpaital_dev',
735
- extras: {},
736
- session_status: '',
737
- task_completed_time: '',
738
- task_creation_time: '1679469532.340057',
739
- task_details: {
740
- customer_details: {
741
- email: 'gaurang.thakkar1997@gmail.com',
742
- phone: '9930607033',
743
- lc_lg_code: 'LC123456',
744
- branch_code: 'HDFC56475H',
745
- business_code: 'ABCD12345H'
746
- },
747
- link_details: {
748
- queryParams: {
749
- autoSendMobileOtp: true,
750
- client_id: 'sparkcpaital_dev',
751
- mobileOtpVerification: true,
752
- mobile_number: '9930607033',
753
- user_id: '9930607033'
754
- }
755
- }
756
- },
757
- task_id: 'sparkcpaital_dev_4632c291-1b4c-4f5b-bb95-f9acaab45e27',
758
- task_schedule_time: '1679469532.340057',
759
- user_id: '9930607033'
760
- };
727
+ this.customer = {};
761
728
  this.viewTaskDetails = [];
762
729
  this.nextStep = new EventEmitter();
763
730
  this.removeTask = new EventEmitter();
@@ -813,7 +780,7 @@ class CustomerDetailsComponent {
813
780
  }
814
781
  }
815
782
  /** @nocollapse */ CustomerDetailsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CustomerDetailsComponent, deps: [{ token: AgentService }, { token: GoogleMapsService }, { token: OpenStreetMapsService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
816
- /** @nocollapse */ CustomerDetailsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: CustomerDetailsComponent, selector: "customer-details", inputs: { customer: "customer", config: "config" }, outputs: { nextStep: "nextStep", removeTask: "removeTask" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"customer-details-wrapper\">\n <div class=\"customer-details-heading\">User Details</div>\n <div class=\"customer-details-body\">\n <div class=\"customer-details-user-id\">\n <kwikui-label-value-pair\n [data]=\"customer\"\n [field]=\"config?.dashboard?.taskIdentifier ?? {value:'$.user_id', type: 'string'} \"\n ></kwikui-label-value-pair>\n\n <status-pill\n *ngIf=\"config?.dashboard?.isShowTaskStatus\"\n [status]=\"customer.session_status\"\n ></status-pill>\n </div>\n\n <div class=\"customer-details-table\">\n <div\n class=\"customer-details-table-data\"\n *ngFor=\"let taskData of viewTaskDetails\"\n >\n <kwikui-label-value-pair\n [field]=\"taskData\"\n [data]=\"customer\"\n ></kwikui-label-value-pair>\n </div>\n </div>\n\n <div class=\"customer-details-date\">\n Created at: {{ getTaskCreationTime(customer) }}\n </div>\n\n <div class=\"customer-details-actions\">\n <div class=\"customer-details-task-buttons\">\n <kwikui-button\n *ngIf=\"config.dashboard?.isAllowRemoveTask\"\n [icon]=\"'tuiIconTrash2'\"\n [shape]=\"'rounded'\"\n appearance=\"icon\"\n size=\"s\"\n (onClick)=\"handleOnClickRemoveTask(customer)\"\n ></kwikui-button>\n <kwikui-button\n *ngIf=\"config.dashboard?.isShowCopyLink\"\n icon=\"tuiIconCopy\"\n [shape]=\"'rounded'\"\n appearance=\"icon\"\n size=\"s\"\n (onClick)=\"\n handleOnClickNext({\n customer: customer,\n stepType: 'SHARE_JOURNEY_LINK'\n })\n \"\n ></kwikui-button>\n </div>\n <div class=\"customer-details-journey-buttons\">\n <kwikui-button\n *ngIf=\"\n config.dashboard?.isShowMaps &&\n customer?.task_details?.customer_details?.location\n \"\n label=\"Show Directions\"\n appearance=\"flat\"\n size=\"s\"\n styles=\"font-size:0.7rem;\"\n (onClick)=\"\n goToMaps(customer?.task_details?.customer_details?.location)\n \"\n ></kwikui-button>\n <kwikui-button\n *ngIf=\"\n config.dashboard?.isAllowStartJourney &&\n agentService.canStartJourney(customer.session_status)\n \"\n label=\"Start Journey\"\n appearance=\"primary\"\n size=\"s\"\n styles=\"font-size:0.7rem;\"\n (onClick)=\"\n handleOnClickNext({ customer: customer, stepType: 'START_JOURNEY' })\n \"\n ></kwikui-button>\n </div>\n </div>\n </div>\n</div>\n", styles: [".customer-details-wrapper{display:flex;flex-direction:column;align-items:stretch;overflow:auto;grid-gap:.5rem;gap:.5rem;padding:1.5rem;height:100%;width:100%}.customer-details-wrapper .customer-details-heading{display:flex;flex-direction:row;justify-content:space-between;align-items:center;padding:1rem 0;font-size:1.5rem;font-weight:600}.customer-details-wrapper .customer-details-body{display:flex;flex-direction:column;grid-gap:1.25rem;gap:1.25rem}.customer-details-wrapper .customer-details-body .customer-details-user-id{display:flex;flex-direction:row;grid-gap:.6rem;gap:.6rem;align-items:center;font-size:1.25rem;font-weight:500;padding:.5rem 0}.customer-details-wrapper .customer-details-body .customer-details-table{display:flex;grid-gap:.5rem;gap:.5rem;flex-direction:column}.customer-details-wrapper .customer-details-body .customer-details-table .customer-details-table-data .customer-details-table-detail-name{font-weight:500}.customer-details-wrapper .customer-details-body .customer-details-table .customer-details-table-data .customer-details-table-detail-value{word-wrap:break-word}.customer-details-wrapper .customer-details-body .customer-details-date{padding-top:1rem}.customer-details-wrapper .customer-details-body .customer-details-actions{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center}.customer-details-wrapper .customer-details-body .customer-details-actions .customer-details-task-buttons{display:flex;flex-direction:row;align-items:center;justify-content:flex-start;padding:1rem 0}.customer-details-wrapper .customer-details-body .customer-details-actions .customer-details-journey-buttons{padding-right:.2rem;display:flex;flex-direction:row;grid-gap:.2rem;gap:.2rem;align-items:center;justify-content:flex-end}.customer-details-wrapper .customer-details-body .customer-details-actions .customer-details-journey-buttons .customer-share-link{font-size:.7rem}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{border-radius:10px}::-webkit-scrollbar-thumb{background:lightgray;border-radius:10px}::-webkit-scrollbar-thumb:hover{background:gray}\n"], components: [{ type: i4.KwikUILabelValuePairComponent, selector: "kwikui-label-value-pair", inputs: ["field", "data"] }, { type: StatusPillComponent, selector: "status-pill", inputs: ["status"] }, { type: i4.KwikUIButtonComponent, selector: "kwikui-button", inputs: ["appearance", "class", "disabled", "icon", "iconRight", "id", "label", "shape", "showLoader", "size", "styles", "type"], outputs: ["onClick"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.Default });
783
+ /** @nocollapse */ CustomerDetailsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: CustomerDetailsComponent, selector: "customer-details", inputs: { customer: "customer", config: "config" }, outputs: { nextStep: "nextStep", removeTask: "removeTask" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"customer-details-wrapper\">\n <div class=\"customer-details-heading\">User Details</div>\n <div class=\"customer-details-body\">\n <div class=\"customer-details-user-id\">\n <kwikui-label-value-pair\n [data]=\"customer\"\n [field]=\"config?.dashboard?.taskIdentifier ?? {value:'$.user_id', type: 'string'} \"\n ></kwikui-label-value-pair>\n\n <status-pill\n *ngIf=\"config?.dashboard?.isShowTaskStatus\"\n [status]=\"customer.session_status\"\n ></status-pill>\n </div>\n\n <div class=\"customer-details-table\">\n <div\n class=\"customer-details-table-data\"\n *ngFor=\"let taskData of viewTaskDetails\"\n >\n <kwikui-label-value-pair\n [field]=\"taskData\"\n [data]=\"customer\"\n ></kwikui-label-value-pair>\n </div>\n </div>\n\n <div class=\"customer-details-date\">\n Created at: {{ getTaskCreationTime(customer) }}\n </div>\n\n <div class=\"customer-details-actions\">\n <div class=\"customer-details-task-buttons\">\n <kwikui-button\n *ngIf=\"config.dashboard?.isAllowRemoveTask\"\n [icon]=\"'tuiIconTrash2'\"\n [shape]=\"'rounded'\"\n appearance=\"icon\"\n size=\"s\"\n (onClick)=\"handleOnClickRemoveTask(customer)\"\n ></kwikui-button>\n <kwikui-button\n *ngIf=\"config.dashboard?.isShowCopyLink\"\n icon=\"tuiIconCopy\"\n [shape]=\"'rounded'\"\n appearance=\"icon\"\n size=\"s\"\n (onClick)=\"\n handleOnClickNext({\n customer: customer,\n stepType: 'SHARE_JOURNEY_LINK'\n })\n \"\n ></kwikui-button>\n </div>\n <div class=\"customer-details-journey-buttons\">\n <kwikui-button\n *ngIf=\"\n config.dashboard?.isShowMaps &&\n customer?.isValidLocation\n \"\n label=\"Show Directions\"\n appearance=\"flat\"\n size=\"s\"\n styles=\"font-size:0.7rem;\"\n (onClick)=\"\n goToMaps(customer?.googleMapsUrl)\n \"\n ></kwikui-button>\n <kwikui-button\n *ngIf=\"\n config.dashboard?.isAllowStartJourney &&\n agentService.canStartJourney(customer.session_status)\n \"\n label=\"Start Journey\"\n appearance=\"primary\"\n size=\"s\"\n styles=\"font-size:0.7rem;\"\n (onClick)=\"\n handleOnClickNext({ customer: customer, stepType: 'START_JOURNEY' })\n \"\n ></kwikui-button>\n </div>\n </div>\n </div>\n</div>\n", styles: [".customer-details-wrapper{display:flex;flex-direction:column;align-items:stretch;overflow:auto;grid-gap:.5rem;gap:.5rem;padding:1.5rem;height:100%;width:100%}.customer-details-wrapper .customer-details-heading{display:flex;flex-direction:row;justify-content:space-between;align-items:center;padding:1rem 0;font-size:1.5rem;font-weight:600}.customer-details-wrapper .customer-details-body{display:flex;flex-direction:column;grid-gap:1.25rem;gap:1.25rem}.customer-details-wrapper .customer-details-body .customer-details-user-id{display:flex;flex-direction:row;grid-gap:.6rem;gap:.6rem;align-items:center;font-size:1.25rem;font-weight:500;padding:.5rem 0}.customer-details-wrapper .customer-details-body .customer-details-table{display:flex;grid-gap:.5rem;gap:.5rem;flex-direction:column}.customer-details-wrapper .customer-details-body .customer-details-table .customer-details-table-data .customer-details-table-detail-name{font-weight:500}.customer-details-wrapper .customer-details-body .customer-details-table .customer-details-table-data .customer-details-table-detail-value{word-wrap:break-word}.customer-details-wrapper .customer-details-body .customer-details-date{padding-top:1rem}.customer-details-wrapper .customer-details-body .customer-details-actions{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center}.customer-details-wrapper .customer-details-body .customer-details-actions .customer-details-task-buttons{display:flex;flex-direction:row;align-items:center;justify-content:flex-start;padding:1rem 0}.customer-details-wrapper .customer-details-body .customer-details-actions .customer-details-journey-buttons{padding-right:.2rem;display:flex;flex-direction:row;grid-gap:.2rem;gap:.2rem;align-items:center;justify-content:flex-end}.customer-details-wrapper .customer-details-body .customer-details-actions .customer-details-journey-buttons .customer-share-link{font-size:.7rem}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{border-radius:10px}::-webkit-scrollbar-thumb{background:lightgray;border-radius:10px}::-webkit-scrollbar-thumb:hover{background:gray}\n"], components: [{ type: i4.KwikUILabelValuePairComponent, selector: "kwikui-label-value-pair", inputs: ["field", "data"] }, { type: StatusPillComponent, selector: "status-pill", inputs: ["status"] }, { type: i4.KwikUIButtonComponent, selector: "kwikui-button", inputs: ["appearance", "class", "disabled", "icon", "iconRight", "id", "label", "shape", "showLoader", "size", "styles", "type"], outputs: ["onClick"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.Default });
817
784
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CustomerDetailsComponent, decorators: [{
818
785
  type: Component,
819
786
  args: [{
@@ -898,7 +865,7 @@ class CustomerTileComponent {
898
865
  }
899
866
  }
900
867
  /** @nocollapse */ CustomerTileComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CustomerTileComponent, deps: [{ token: GoogleMapsService }, { token: OpenStreetMapsService }, { token: AgentService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
901
- /** @nocollapse */ CustomerTileComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: CustomerTileComponent, selector: "customer-tile", inputs: { customer: "customer", index: "index", config: "config" }, outputs: { nextStep: "nextStep", removeTask: "removeTask" }, host: { listeners: { "window:resize": "windowResizeWatcher($event)" } }, ngImport: i0, template: "<div\n [ngClass]=\"\n index == agentService.isShowTaskDetails\n ? 'customer-tile-wrapper customer-tile-active'\n : 'customer-tile-wrapper'\n \"\n>\n <div class=\"customer-tile-primary-container\">\n <div class=\"customer-tile-primary-container-data\">\n <div class=\"customer-tile-primary-container-userid\">\n <kwikui-label-value-pair\n [data]=\"customer\"\n [field]=\"config?.dashboard?.taskIdentifier ?? {value:'$.user_id', type: 'string'} \"\n ></kwikui-label-value-pair>\n </div>\n <status-pill\n *ngIf=\"config?.dashboard?.isShowTaskStatus\"\n [status]=\"customer.session_status\"\n ></status-pill>\n </div>\n <kwikui-button\n *ngIf=\"!agentService.isMobileView && !agentService.showMapview\"\n [icon]=\"\n agentService.isShowTaskDetails == index\n ? 'tuiIconChevronLeftLarge'\n : 'tuiIconChevronRightLarge'\n \"\n [shape]=\"'rounded'\"\n appearance=\"icon\"\n size=\"s\"\n (onClick)=\"openDetails()\"\n ></kwikui-button>\n <kwikui-button\n *ngIf=\"agentService.isMobileView || agentService.showMapview\"\n [icon]=\"\n agentService.isShowTaskDetails == index\n ? 'tuiIconChevronUpLarge'\n : 'tuiIconChevronDownLarge'\n \"\n [shape]=\"'rounded'\"\n appearance=\"icon\"\n size=\"s\"\n (onClick)=\"openDetails()\"\n ></kwikui-button>\n </div>\n <div\n [ngClass]=\"\n index == agentService.isShowTaskDetails &&\n (agentService.isMobileView || agentService.showMapview)\n ? 'customer-tile-secondary-container'\n : 'data-collasped'\n \"\n >\n <div class=\"customer-tile-secondary-container-data\">\n <div\n *ngFor=\"let taskData of viewTaskDetails\"\n class=\"customer-tile-secondary-container-custom-details\"\n >\n <kwikui-label-value-pair\n [field]=\"taskData\"\n [data]=\"customer\"\n ></kwikui-label-value-pair>\n </div>\n <!-- <div\n *ngIf=\"\n agentService.config?.dashboard?.maps?.sho &&\n agentService.config?.dashboard?.isShowDistanceAndTime &&\n openStreetMapsService.getSelectedTaskDistanceAndTime()\n \"\n class=\"customer-tile-secondary-container-custom-details\"\n >\n Distance: {{ openStreetMapsService.getSelectedTaskDistanceAndTime()?.distance }} |\n Time: {{ openStreetMapsService.getSelectedTaskDistanceAndTime()?.time }}\n </div> -->\n </div>\n <div class=\"customer-tile-secondary-container-actions\">\n <div class=\"customer-tile-secondary-container-task-buttons\">\n <kwikui-button\n *ngIf=\"config.dashboard?.isAllowRemoveTask\"\n [icon]=\"'tuiIconTrash2'\"\n [shape]=\"'rounded'\"\n appearance=\"icon\"\n size=\"s\"\n (onClick)=\"handleOnClickRemoveTask(customer)\"\n ></kwikui-button>\n <kwikui-button\n *ngIf=\"config.dashboard?.isShowCopyLink\"\n icon=\"tuiIconCopy\"\n [shape]=\"'rounded'\"\n appearance=\"icon\"\n size=\"s\"\n (onClick)=\"\n handleOnClickNext({\n customer: customer,\n stepType: 'SHARE_JOURNEY_LINK'\n })\n \"\n ></kwikui-button>\n </div>\n <div class=\"customer-tile-secondary-container-journey-buttons\">\n <kwikui-button\n *ngIf=\"\n config.dashboard?.isShowMaps &&\n customer?.task_details?.customer_details?.location\n \"\n label=\"Show Directions\"\n appearance=\"flat\"\n size=\"s\"\n styles=\"font-size:0.7rem;\"\n (onClick)=\"goToMaps(customer.task_details.customer_details.location)\"\n ></kwikui-button>\n <kwikui-button\n *ngIf=\"\n config.dashboard?.isAllowStartJourney &&\n agentService.canStartJourney(customer.session_status)\n \"\n label=\"Start Journey\"\n appearance=\"primary\"\n size=\"s\"\n styles=\"font-size:0.7rem;\"\n (onClick)=\"\n handleOnClickNext({ customer: customer, stepType: 'START_JOURNEY' })\n \"\n ></kwikui-button>\n </div>\n </div>\n </div>\n</div>\n", styles: [".customer-tile-wrapper{display:flex;flex-direction:column;align-content:center;justify-content:center;align-items:stretch;flex:1;overflow:auto;grid-gap:.5rem;gap:.5rem;padding:1rem;border-bottom:.5px solid #ddd}.customer-tile-wrapper .customer-tile-primary-container{display:flex;grid-gap:.5rem;gap:.5rem;flex-direction:row;align-content:center;justify-content:space-between;align-items:center;width:100%;height:100%}.customer-tile-wrapper .customer-tile-primary-container .customer-tile-primary-container-data{padding-left:.2rem;grid-gap:.6rem;gap:.6rem;display:flex;flex-direction:row;flex-wrap:wrap;align-content:stretch;justify-content:space-evenly;align-items:center}.customer-tile-wrapper .customer-tile-primary-container .customer-tile-primary-container-data .customer-tile-primary-container-userid{font-weight:500;font-size:1.1rem;line-height:1rem}.customer-tile-wrapper .customer-tile-secondary-container{width:100%;height:100%;display:flex;flex-direction:column;overflow:auto;grid-gap:.5rem;gap:.5rem}.customer-tile-wrapper .customer-tile-secondary-container .customer-tile-secondary-container-data{padding:.4rem .2rem;display:flex;flex-direction:column;font-size:.7rem;grid-gap:.3rem;gap:.3rem}.customer-tile-wrapper .customer-tile-secondary-container .customer-tile-secondary-container-data .customer-tile-secondary-container-custom-details{width:100%;height:100%;line-height:.9rem;word-wrap:break-word}.customer-tile-wrapper .customer-tile-secondary-container .customer-tile-secondary-container-actions{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center}.customer-tile-wrapper .customer-tile-secondary-container .customer-tile-secondary-container-actions .customer-tile-secondary-container-task-buttons{display:flex;flex-direction:row;align-items:center;justify-content:flex-start}.customer-tile-wrapper .customer-tile-secondary-container .customer-tile-secondary-container-actions .customer-tile-secondary-container-journey-buttons{padding-right:.2rem;display:flex;flex-direction:row;grid-gap:.2rem;gap:.2rem;align-items:center;justify-content:flex-end}.customer-tile-wrapper .customer-tile-secondary-container .customer-tile-secondary-container-actions .customer-tile-secondary-container-journey-buttons .customer-share-link{font-size:.7rem}.customer-tile-wrapper .data-collasped{display:none}.customer-tile-active{background-color:#dcedfd}\n"], components: [{ type: i4.KwikUILabelValuePairComponent, selector: "kwikui-label-value-pair", inputs: ["field", "data"] }, { type: StatusPillComponent, selector: "status-pill", inputs: ["status"] }, { type: i4.KwikUIButtonComponent, selector: "kwikui-button", inputs: ["appearance", "class", "disabled", "icon", "iconRight", "id", "label", "shape", "showLoader", "size", "styles", "type"], outputs: ["onClick"] }], directives: [{ type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
868
+ /** @nocollapse */ CustomerTileComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: CustomerTileComponent, selector: "customer-tile", inputs: { customer: "customer", index: "index", config: "config" }, outputs: { nextStep: "nextStep", removeTask: "removeTask" }, host: { listeners: { "window:resize": "windowResizeWatcher($event)" } }, ngImport: i0, template: "<div\n [ngClass]=\"\n index == agentService.isShowTaskDetails\n ? 'customer-tile-wrapper customer-tile-active'\n : 'customer-tile-wrapper'\n \"\n>\n <div class=\"customer-tile-primary-container\">\n <div class=\"customer-tile-primary-container-data\">\n <div class=\"customer-tile-primary-container-userid\">\n <kwikui-label-value-pair\n [data]=\"customer\"\n [field]=\"config?.dashboard?.taskIdentifier ?? {value:'$.user_id', type: 'string'} \"\n ></kwikui-label-value-pair>\n </div>\n <status-pill\n *ngIf=\"config?.dashboard?.isShowTaskStatus\"\n [status]=\"customer.session_status\"\n ></status-pill>\n </div>\n <kwikui-button\n *ngIf=\"!agentService.isMobileView && !agentService.showMapview\"\n [icon]=\"\n agentService.isShowTaskDetails == index\n ? 'tuiIconChevronLeftLarge'\n : 'tuiIconChevronRightLarge'\n \"\n [shape]=\"'rounded'\"\n appearance=\"icon\"\n size=\"s\"\n (onClick)=\"openDetails()\"\n ></kwikui-button>\n <kwikui-button\n *ngIf=\"agentService.isMobileView || agentService.showMapview\"\n [icon]=\"\n agentService.isShowTaskDetails == index\n ? 'tuiIconChevronUpLarge'\n : 'tuiIconChevronDownLarge'\n \"\n [shape]=\"'rounded'\"\n appearance=\"icon\"\n size=\"s\"\n (onClick)=\"openDetails()\"\n ></kwikui-button>\n </div>\n <div\n [ngClass]=\"\n index == agentService.isShowTaskDetails &&\n (agentService.isMobileView || agentService.showMapview)\n ? 'customer-tile-secondary-container'\n : 'data-collasped'\n \"\n >\n <div class=\"customer-tile-secondary-container-data\">\n <div\n *ngFor=\"let taskData of viewTaskDetails\"\n class=\"customer-tile-secondary-container-custom-details\"\n >\n <kwikui-label-value-pair\n [field]=\"taskData\"\n [data]=\"customer\"\n ></kwikui-label-value-pair>\n </div>\n <!-- <div\n *ngIf=\"\n agentService.config?.dashboard?.maps?.sho &&\n agentService.config?.dashboard?.isShowDistanceAndTime &&\n openStreetMapsService.getSelectedTaskDistanceAndTime()\n \"\n class=\"customer-tile-secondary-container-custom-details\"\n >\n Distance: {{ openStreetMapsService.getSelectedTaskDistanceAndTime()?.distance }} |\n Time: {{ openStreetMapsService.getSelectedTaskDistanceAndTime()?.time }}\n </div> -->\n </div>\n <div class=\"customer-tile-secondary-container-actions\">\n <div class=\"customer-tile-secondary-container-task-buttons\">\n <kwikui-button\n *ngIf=\"config.dashboard?.isAllowRemoveTask\"\n [icon]=\"'tuiIconTrash2'\"\n [shape]=\"'rounded'\"\n appearance=\"icon\"\n size=\"s\"\n (onClick)=\"handleOnClickRemoveTask(customer)\"\n ></kwikui-button>\n <kwikui-button\n *ngIf=\"config.dashboard?.isShowCopyLink\"\n icon=\"tuiIconCopy\"\n [shape]=\"'rounded'\"\n appearance=\"icon\"\n size=\"s\"\n (onClick)=\"\n handleOnClickNext({\n customer: customer,\n stepType: 'SHARE_JOURNEY_LINK'\n })\n \"\n ></kwikui-button>\n </div>\n <div class=\"customer-tile-secondary-container-journey-buttons\">\n <kwikui-button\n *ngIf=\"config.dashboard?.isShowMaps && customer?.isValidLocation\"\n label=\"Show Directions\"\n appearance=\"flat\"\n size=\"s\"\n styles=\"font-size:0.7rem;\"\n (onClick)=\"goToMaps(customer.googleMapsUrl)\"\n ></kwikui-button>\n <kwikui-button\n *ngIf=\"\n config.dashboard?.isAllowStartJourney &&\n agentService.canStartJourney(customer.session_status)\n \"\n label=\"Start Journey\"\n appearance=\"primary\"\n size=\"s\"\n styles=\"font-size:0.7rem;\"\n (onClick)=\"\n handleOnClickNext({ customer: customer, stepType: 'START_JOURNEY' })\n \"\n ></kwikui-button>\n </div>\n </div>\n </div>\n</div>\n", styles: [".customer-tile-wrapper{display:flex;flex-direction:column;align-content:center;justify-content:center;align-items:stretch;flex:1;overflow:auto;grid-gap:.5rem;gap:.5rem;padding:1rem;border-bottom:.5px solid #ddd}.customer-tile-wrapper .customer-tile-primary-container{display:flex;grid-gap:.5rem;gap:.5rem;flex-direction:row;align-content:center;justify-content:space-between;align-items:center;width:100%;height:100%}.customer-tile-wrapper .customer-tile-primary-container .customer-tile-primary-container-data{padding-left:.2rem;grid-gap:.6rem;gap:.6rem;display:flex;flex-direction:row;flex-wrap:wrap;align-content:stretch;justify-content:space-evenly;align-items:center}.customer-tile-wrapper .customer-tile-primary-container .customer-tile-primary-container-data .customer-tile-primary-container-userid{font-weight:500;font-size:1.1rem;line-height:1rem}.customer-tile-wrapper .customer-tile-secondary-container{width:100%;height:100%;display:flex;flex-direction:column;overflow:auto;grid-gap:.5rem;gap:.5rem}.customer-tile-wrapper .customer-tile-secondary-container .customer-tile-secondary-container-data{padding:.4rem .2rem;display:flex;flex-direction:column;font-size:.7rem;grid-gap:.3rem;gap:.3rem}.customer-tile-wrapper .customer-tile-secondary-container .customer-tile-secondary-container-data .customer-tile-secondary-container-custom-details{width:100%;height:100%;line-height:.9rem;word-wrap:break-word}.customer-tile-wrapper .customer-tile-secondary-container .customer-tile-secondary-container-actions{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center}.customer-tile-wrapper .customer-tile-secondary-container .customer-tile-secondary-container-actions .customer-tile-secondary-container-task-buttons{display:flex;flex-direction:row;align-items:center;justify-content:flex-start}.customer-tile-wrapper .customer-tile-secondary-container .customer-tile-secondary-container-actions .customer-tile-secondary-container-journey-buttons{padding-right:.2rem;display:flex;flex-direction:row;grid-gap:.2rem;gap:.2rem;align-items:center;justify-content:flex-end}.customer-tile-wrapper .customer-tile-secondary-container .customer-tile-secondary-container-actions .customer-tile-secondary-container-journey-buttons .customer-share-link{font-size:.7rem}.customer-tile-wrapper .data-collasped{display:none}.customer-tile-active{background-color:#dcedfd}\n"], components: [{ type: i4.KwikUILabelValuePairComponent, selector: "kwikui-label-value-pair", inputs: ["field", "data"] }, { type: StatusPillComponent, selector: "status-pill", inputs: ["status"] }, { type: i4.KwikUIButtonComponent, selector: "kwikui-button", inputs: ["appearance", "class", "disabled", "icon", "iconRight", "id", "label", "shape", "showLoader", "size", "styles", "type"], outputs: ["onClick"] }], directives: [{ type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
902
869
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CustomerTileComponent, decorators: [{
903
870
  type: Component,
904
871
  args: [{
@@ -991,6 +958,7 @@ class CustomerListComponent {
991
958
  this.filterTaskList = new EventEmitter();
992
959
  this.filteredData = [];
993
960
  this.formGroup = new FormGroup({});
961
+ this.max = new TuiDay(new Date().getFullYear(), new Date().getMonth(), new Date().getDate());
994
962
  this.fromDate = this.getDate(null);
995
963
  this.toDate = this.getDate(null);
996
964
  this.dateRangeFormControl = new FormControl({
@@ -1001,13 +969,14 @@ class CustomerListComponent {
1001
969
  this.searchFormControl = new FormControl('');
1002
970
  this.formGroup.addControl('search', this.searchFormControl);
1003
971
  }
1004
- ngOnInit() {
1005
- }
972
+ ngOnInit() { }
1006
973
  ngAfterViewInit() {
974
+ var _a, _b;
975
+ this.maxLength = (_b = (_a = this.config.dashboard) === null || _a === void 0 ? void 0 : _a.searchDateRange) !== null && _b !== void 0 ? _b : this.maxLength;
1007
976
  setTimeout(() => __awaiter(this, void 0, void 0, function* () {
1008
- var _a;
977
+ var _c;
1009
978
  if (this.config.dashboard.isShowMaps) {
1010
- if (((_a = this.config.dashboard) === null || _a === void 0 ? void 0 : _a.mapType) == 'open-street') {
979
+ if (((_c = this.config.dashboard) === null || _c === void 0 ? void 0 : _c.mapType) == 'open-street') {
1011
980
  yield this.openStreetMapsService.initializeMap();
1012
981
  }
1013
982
  else {
@@ -1090,7 +1059,7 @@ class CustomerListComponent {
1090
1059
  }
1091
1060
  }
1092
1061
  /** @nocollapse */ CustomerListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CustomerListComponent, deps: [{ token: GoogleMapsService }, { token: OpenStreetMapsService }, { token: AgentService }], target: i0.ɵɵFactoryTarget.Component });
1093
- /** @nocollapse */ CustomerListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: CustomerListComponent, selector: "customer-list", inputs: { customers: "customers", config: "config" }, outputs: { nextStep: "nextStep", removeTask: "removeTask", filterTaskList: "filterTaskList" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"customer-list-wrapper\">\n <div class=\"customer-list-filter\" [formGroup]=\"formGroup\">\n <kwikui-input-date-range\n *ngIf=\"config?.dashboard?.isAllowDateFilter\"\n [label]=\"'Date Range'\"\n [id]=\"'dateRange'\"\n [size]=\"'m'\"\n [formControlName]=\"'dateRange'\"\n [formControl]=\"dateRangeFormControl\"\n (getKeyValue)=\"onDateRangeChange($event)\"\n ></kwikui-input-date-range>\n <kwikui-input\n *ngIf=\"config?.dashboard?.isAllowSearchFilter\"\n [label]=\"'Search'\"\n [id]=\"'search'\"\n icon=\"tuiIconSearch\"\n size=\"m\"\n placeholder=\"Search Any Task\"\n [formControlName]=\"'search'\"\n [formControl]=\"searchFormControl\"\n (getKeyValue)=\"onSearchFilter($event)\"\n ></kwikui-input>\n </div>\n\n <div class=\"customer-task-list\">\n <cdk-virtual-scroll-viewport itemSize=\"1\" class=\"customer-task-list-scroll\">\n <div\n *cdkVirtualFor=\"\n let customer of filteredData | filter: searchText;\n index as index\n \"\n >\n <customer-tile\n class=\"example-item\"\n [customer]=\"customer\"\n [config]=\"config\"\n [index]=\"index\"\n (nextStep)=\"handleOnClickNext($event)\"\n (removeTask)=\"handleOnClickRemoveTask($event)\"\n ></customer-tile>\n </div>\n </cdk-virtual-scroll-viewport>\n </div>\n\n <div class=\"customer-list-empty\" *ngIf=\"filteredData.length === 0\">\n {{config?.dashboard?.emptyTaskListMessage ?? '0 Tasks for the given Date.'}}\n </div>\n</div>\n", styles: [".customer-list-wrapper{width:100%;height:100%;display:flex;flex-direction:column}.customer-list-filter{height:-moz-fit-content;height:fit-content;width:100%;display:flex;flex-direction:column;padding:1rem;grid-gap:.8rem;gap:.8rem;border-bottom:.5px solid #ddd}.customer-list-empty{height:100%;width:100%;margin-top:.5rem;font-size:1rem;text-align:center}.customer-task-list{height:100%}.customer-task-list-scroll{height:100%;width:100%}.cdk-virtual-scroll-spacer{height:0!important}.example-item{height:50px}::-webkit-scrollbar{width:8px}::-webkit-scrollbar-track{border-radius:10px}::-webkit-scrollbar-thumb{background:lightgray;border-radius:10px}::-webkit-scrollbar-thumb:hover{background:gray}\n"], components: [{ type: i4.KwikUIInputDateRangeComponent, selector: "kwikui-input-date-range", inputs: ["disabled", "focus", "formControl", "formControlName", "hintContent", "icon", "id", "invalid", "label", "max", "maxLength", "min", "minLength", "placeholder", "postfix", "prefix", "properties", "size", "validators"], outputs: ["getKeyValue"] }, { type: i4.KwikUIInputComponent, selector: "kwikui-input", inputs: ["case", "disabled", "focus", "formControl", "formControlName", "hintContent", "icon", "id", "invalid", "label", "placeholder", "postfix", "prefix", "properties", "size", "type", "validators"], outputs: ["getKeyValue"] }, { type: i5.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { type: CustomerTileComponent, selector: "customer-tile", inputs: ["customer", "index", "config"], outputs: ["nextStep", "removeTask"] }], directives: [{ type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i7.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i7.FormControlDirective, selector: "[formControl]", inputs: ["disabled", "formControl", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i5.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { type: i5.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }], pipes: { "filter": Ng2SearchPipe } });
1062
+ /** @nocollapse */ CustomerListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: CustomerListComponent, selector: "customer-list", inputs: { customers: "customers", config: "config" }, outputs: { nextStep: "nextStep", removeTask: "removeTask", filterTaskList: "filterTaskList" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"customer-list-wrapper\">\n <div class=\"customer-list-filter\" [formGroup]=\"formGroup\">\n <kwikui-input-date-range\n *ngIf=\"config?.dashboard?.isAllowDateFilter\"\n [label]=\"'Date Range'\"\n [id]=\"'dateRange'\"\n [size]=\"'m'\"\n [max]=\"max\"\n [maxLength]=\"maxLength\"\n [formControlName]=\"'dateRange'\"\n [formControl]=\"dateRangeFormControl\"\n (getKeyValue)=\"onDateRangeChange($event)\"\n ></kwikui-input-date-range>\n <kwikui-input\n *ngIf=\"config?.dashboard?.isAllowSearchFilter\"\n [label]=\"'Search'\"\n [id]=\"'search'\"\n icon=\"tuiIconSearch\"\n size=\"m\"\n placeholder=\"Search Any Task\"\n [formControlName]=\"'search'\"\n [formControl]=\"searchFormControl\"\n (getKeyValue)=\"onSearchFilter($event)\"\n ></kwikui-input>\n </div>\n\n <div class=\"customer-task-list\">\n <cdk-virtual-scroll-viewport itemSize=\"1\" class=\"customer-task-list-scroll\">\n <div\n *cdkVirtualFor=\"\n let customer of filteredData | filter: searchText;\n index as index\n \"\n >\n <customer-tile\n class=\"example-item\"\n [customer]=\"customer\"\n [config]=\"config\"\n [index]=\"index\"\n (nextStep)=\"handleOnClickNext($event)\"\n (removeTask)=\"handleOnClickRemoveTask($event)\"\n ></customer-tile>\n </div>\n </cdk-virtual-scroll-viewport>\n </div>\n\n <div class=\"customer-list-empty\" *ngIf=\"filteredData.length === 0\">\n {{config?.dashboard?.emptyTaskListMessage ?? '0 Tasks for the given Date.'}}\n </div>\n</div>\n", styles: [".customer-list-wrapper{width:100%;height:100%;display:flex;flex-direction:column}.customer-list-filter{height:-moz-fit-content;height:fit-content;width:100%;display:flex;flex-direction:column;padding:1rem;grid-gap:.8rem;gap:.8rem;border-bottom:.5px solid #ddd}.customer-list-empty{height:100%;width:100%;margin-top:.5rem;font-size:1rem;text-align:center}.customer-task-list{height:100%}.customer-task-list-scroll{height:100%;width:100%}.cdk-virtual-scroll-spacer{height:0!important}.example-item{height:50px}::-webkit-scrollbar{width:8px}::-webkit-scrollbar-track{border-radius:10px}::-webkit-scrollbar-thumb{background:lightgray;border-radius:10px}::-webkit-scrollbar-thumb:hover{background:gray}\n"], components: [{ type: i4.KwikUIInputDateRangeComponent, selector: "kwikui-input-date-range", inputs: ["disabled", "focus", "formControl", "formControlName", "hintContent", "icon", "id", "invalid", "label", "max", "maxLength", "min", "minLength", "placeholder", "postfix", "prefix", "properties", "size", "validators"], outputs: ["getKeyValue"] }, { type: i4.KwikUIInputComponent, selector: "kwikui-input", inputs: ["case", "disabled", "focus", "formControl", "formControlName", "hintContent", "icon", "id", "invalid", "label", "placeholder", "postfix", "prefix", "properties", "size", "type", "validators"], outputs: ["getKeyValue"] }, { type: i5.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { type: CustomerTileComponent, selector: "customer-tile", inputs: ["customer", "index", "config"], outputs: ["nextStep", "removeTask"] }], directives: [{ type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i7.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i7.FormControlDirective, selector: "[formControl]", inputs: ["disabled", "formControl", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i5.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { type: i5.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }], pipes: { "filter": Ng2SearchPipe } });
1094
1063
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CustomerListComponent, decorators: [{
1095
1064
  type: Component,
1096
1065
  args: [{
@@ -1148,9 +1117,7 @@ class KwikIDAgentDashboardComponent {
1148
1117
  (_f = (_e = (_d = this.config) === null || _d === void 0 ? void 0 : _d.dashboard) === null || _e === void 0 ? void 0 : _e.addTaskForm) !== null && _f !== void 0 ? _f : this.agentService.addTaskForm;
1149
1118
  if (((_h = (_g = this.config) === null || _g === void 0 ? void 0 : _g.dashboard) === null || _h === void 0 ? void 0 : _h.mapType) == 'google-maps' &&
1150
1119
  isNotEmptyValue((_k = (_j = this.config) === null || _j === void 0 ? void 0 : _j.dashboard) === null || _k === void 0 ? void 0 : _k.googleMapsAPIKey)) {
1151
- this.googleMapsService
1152
- .loadMaps((_m = (_l = this.config) === null || _l === void 0 ? void 0 : _l.dashboard) === null || _m === void 0 ? void 0 : _m.googleMapsAPIKey)
1153
- .subscribe((loaded) => {
1120
+ this.loadMaps((_m = (_l = this.config) === null || _l === void 0 ? void 0 : _l.dashboard) === null || _m === void 0 ? void 0 : _m.googleMapsAPIKey).subscribe((loaded) => {
1154
1121
  this.mapsLoaded = loaded;
1155
1122
  if (loaded) {
1156
1123
  console.log('Google Maps JavaScript API loaded successfully.');
@@ -1172,6 +1139,15 @@ class KwikIDAgentDashboardComponent {
1172
1139
  }, 1000);
1173
1140
  });
1174
1141
  }
1142
+ // Load Google Maps
1143
+ loadMaps(apiKey) {
1144
+ const url = `https://maps.googleapis.com/maps/api/js?key=${apiKey}&v=3.exp&libraries=geometry,drawing,places`;
1145
+ this.googleMapsService.apiKey = apiKey;
1146
+ return this.httpClient.jsonp(url, 'callback').pipe(map(() => true), catchError(() => {
1147
+ console.error('Error loading Google Maps JavaScript API.');
1148
+ return of(false);
1149
+ }));
1150
+ }
1175
1151
  handleOnClickNext(e) {
1176
1152
  this.nextStep.emit(e);
1177
1153
  }