@openziti/ziti-console-lib 0.4.9 → 0.4.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/features/data-table/data-table-filter.service.mjs +66 -5
- package/esm2022/lib/features/visualizer/identity-service-path/identity-service-path.helper.mjs +2 -4
- package/fesm2022/openziti-ziti-console-lib.mjs +64 -8
- package/fesm2022/openziti-ziti-console-lib.mjs.map +1 -1
- package/lib/features/data-table/data-table-filter.service.d.ts +11 -1
- package/lib/features/data-table/data-table-filter.service.d.ts.map +1 -1
- package/lib/features/visualizer/identity-service-path/identity-service-path.helper.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,13 +1,20 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
2
|
import { BehaviorSubject } from "rxjs";
|
|
3
|
-
import { isEmpty } from "lodash";
|
|
3
|
+
import { forEach, isEmpty } from "lodash";
|
|
4
|
+
import { HttpParams } from "@angular/common/http";
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/common";
|
|
7
|
+
import * as i2 from "@angular/router";
|
|
5
8
|
class DataTableFilterService {
|
|
6
|
-
constructor() {
|
|
9
|
+
constructor(location, router, activatedRoute) {
|
|
10
|
+
this.location = location;
|
|
11
|
+
this.router = router;
|
|
12
|
+
this.activatedRoute = activatedRoute;
|
|
7
13
|
this.filters = [];
|
|
8
14
|
this.currentPage = 1;
|
|
9
15
|
this.filtersChanged = new BehaviorSubject(this.filters);
|
|
10
16
|
this.pageChanged = new BehaviorSubject(this.currentPage);
|
|
17
|
+
this.currentQueryParams = [];
|
|
11
18
|
}
|
|
12
19
|
updateFilter(filterObj) {
|
|
13
20
|
if (isEmpty(filterObj.value) && (isNaN(filterObj.value) || filterObj.value === ''))
|
|
@@ -25,6 +32,7 @@ class DataTableFilterService {
|
|
|
25
32
|
this.filters.push(filterObj);
|
|
26
33
|
}
|
|
27
34
|
}
|
|
35
|
+
this.updateUrlParameters();
|
|
28
36
|
this.filtersChanged.next(this.filters);
|
|
29
37
|
}
|
|
30
38
|
removeFilter(filterObj) {
|
|
@@ -34,6 +42,7 @@ class DataTableFilterService {
|
|
|
34
42
|
break;
|
|
35
43
|
}
|
|
36
44
|
}
|
|
45
|
+
this.updateUrlParameters([filterObj]);
|
|
37
46
|
this.filtersChanged.next(this.filters);
|
|
38
47
|
}
|
|
39
48
|
getFilterString(key) {
|
|
@@ -51,9 +60,61 @@ class DataTableFilterService {
|
|
|
51
60
|
}
|
|
52
61
|
clearFilters() {
|
|
53
62
|
this.filters = [];
|
|
63
|
+
this.updateUrlParameters();
|
|
54
64
|
this.filtersChanged.next(this.filters);
|
|
55
65
|
}
|
|
56
|
-
|
|
66
|
+
storeFilters() {
|
|
67
|
+
localStorage.setItem('search_filters', JSON.stringify(this.filters));
|
|
68
|
+
}
|
|
69
|
+
getStoredFilters() {
|
|
70
|
+
const storageItem = localStorage.getItem('search_filters');
|
|
71
|
+
const filters = storageItem ? JSON.parse(storageItem) : [];
|
|
72
|
+
return filters;
|
|
73
|
+
}
|
|
74
|
+
updateUrlParameters(filtersToRemove = []) {
|
|
75
|
+
const urlFiltersMap = this.getUrlFiltersMap();
|
|
76
|
+
let params = new HttpParams();
|
|
77
|
+
this.filters.forEach(filter => {
|
|
78
|
+
urlFiltersMap[filter.columnId] = filter;
|
|
79
|
+
});
|
|
80
|
+
const newFilters = [];
|
|
81
|
+
forEach(urlFiltersMap, (value, key) => {
|
|
82
|
+
const filterRemoved = filtersToRemove.some((removed) => {
|
|
83
|
+
return removed.columnId === key;
|
|
84
|
+
});
|
|
85
|
+
if (!filterRemoved) {
|
|
86
|
+
params = params.append(key, value.value);
|
|
87
|
+
newFilters.push(value);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
this.filters = newFilters;
|
|
91
|
+
const path = this.router.url.split("?")[0];
|
|
92
|
+
this.location.replaceState(path, params.toString());
|
|
93
|
+
this.storeFilters();
|
|
94
|
+
}
|
|
95
|
+
getUrlFiltersMap() {
|
|
96
|
+
const paramString = window.location.href.split("?")[1];
|
|
97
|
+
const params = new HttpParams({ fromString: paramString });
|
|
98
|
+
const storedFilters = this.getStoredFilters();
|
|
99
|
+
const appliedFiltersMap = {};
|
|
100
|
+
params.keys().forEach((key) => {
|
|
101
|
+
const storedFilter = storedFilters.find((filter) => {
|
|
102
|
+
return filter.columnId === key;
|
|
103
|
+
});
|
|
104
|
+
if (storedFilter) {
|
|
105
|
+
appliedFiltersMap[key] = storedFilter;
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
appliedFiltersMap[key] = {
|
|
109
|
+
columnId: key,
|
|
110
|
+
value: params.get(key),
|
|
111
|
+
label: key
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
return appliedFiltersMap;
|
|
116
|
+
}
|
|
117
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataTableFilterService, deps: [{ token: i1.Location }, { token: i2.Router }, { token: i2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
57
118
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataTableFilterService, providedIn: 'root' }); }
|
|
58
119
|
}
|
|
59
120
|
export { DataTableFilterService };
|
|
@@ -62,5 +123,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
62
123
|
args: [{
|
|
63
124
|
providedIn: 'root'
|
|
64
125
|
}]
|
|
65
|
-
}], ctorParameters: function () { return []; } });
|
|
66
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS1maWx0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9mZWF0dXJlcy9kYXRhLXRhYmxlL2RhdGEtdGFibGUtZmlsdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3JDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxRQUFRLENBQUM7O0FBWS9CLE1BR2Esc0JBQXNCO0lBUy9CO1FBUEEsWUFBTyxHQUFnQixFQUFFLENBQUM7UUFDMUIsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFDaEIsbUJBQWMsR0FDUixJQUFJLGVBQWUsQ0FBYyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFcEQsZ0JBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBTSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFHekQsQ0FBQztJQUVELFlBQVksQ0FBQyxTQUFvQjtRQUM3QixJQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUMzRztZQUNELElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNwQixLQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUU7Z0JBQ2hELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLFFBQVEsRUFBRTtvQkFDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUM7b0JBQzlCLE9BQU8sR0FBRyxJQUFJLENBQUM7b0JBQ2YsTUFBTTtpQkFDVDthQUNKO1lBQ0QsSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDVixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUNoQztTQUNKO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxZQUFZLENBQUMsU0FBb0I7UUFDN0IsS0FBSyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ2hELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLFFBQVEsRUFBRTtnQkFDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUM1QixNQUFNO2FBQ1Q7U0FDSjtRQUNELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsZUFBZSxDQUFDLEdBQVc7UUFDdkIsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2YsS0FBSyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ2hELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEtBQUssR0FBRyxFQUFFO2dCQUNwQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBQ2hDLE1BQU07YUFDVDtTQUNKO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFTO1FBQ2hCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxZQUFZO1FBQ1IsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLENBQUM7K0dBMURRLHNCQUFzQjttSEFBdEIsc0JBQXNCLGNBRm5CLE1BQU07O1NBRVQsc0JBQXNCOzRGQUF0QixzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0fSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHtpc0VtcHR5fSBmcm9tIFwibG9kYXNoXCI7XG5cbmV4cG9ydCB0eXBlIEZpbHRlck9iaiA9IHtcbiAgICBmaWx0ZXJOYW1lOiBzdHJpbmc7XG4gICAgY29sdW1uSWQ6IHN0cmluZztcbiAgICB2YWx1ZTogYW55O1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgdHlwZT86IHN0cmluZztcbiAgICBoaWRkZW4/OiBib29sZWFuO1xuICAgIHZlcmI/OiBzdHJpbmdcbn1cblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBEYXRhVGFibGVGaWx0ZXJTZXJ2aWNlIHtcblxuICAgIGZpbHRlcnM6IEZpbHRlck9ialtdID0gW107XG4gICAgY3VycmVudFBhZ2UgPSAxO1xuICAgIGZpbHRlcnNDaGFuZ2VkXG4gICAgICAgID0gbmV3IEJlaGF2aW9yU3ViamVjdDxGaWx0ZXJPYmpbXT4odGhpcy5maWx0ZXJzKVxuXG4gICAgcGFnZUNoYW5nZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4odGhpcy5jdXJyZW50UGFnZSk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICB9XG5cbiAgICB1cGRhdGVGaWx0ZXIoZmlsdGVyT2JqOiBGaWx0ZXJPYmopIHtcbiAgICAgICAgaWYoaXNFbXB0eShmaWx0ZXJPYmoudmFsdWUpICYmIChpc05hTihmaWx0ZXJPYmoudmFsdWUpIHx8IGZpbHRlck9iai52YWx1ZSA9PT0gJycpKSB0aGlzLnJlbW92ZUZpbHRlcihmaWx0ZXJPYmopO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBpc0ZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCB0aGlzLmZpbHRlcnMubGVuZ3RoOyBpZHgrKykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlcnNbaWR4XS5jb2x1bW5JZCA9PT0gZmlsdGVyT2JqLmNvbHVtbklkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyc1tpZHhdID0gZmlsdGVyT2JqO1xuICAgICAgICAgICAgICAgICAgICBpc0ZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc0ZvdW5kKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJzLnB1c2goZmlsdGVyT2JqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbHRlcnNDaGFuZ2VkLm5leHQodGhpcy5maWx0ZXJzKTtcbiAgICB9XG5cbiAgICByZW1vdmVGaWx0ZXIoZmlsdGVyT2JqOiBGaWx0ZXJPYmopIHtcbiAgICAgICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgdGhpcy5maWx0ZXJzLmxlbmd0aDsgaWR4KyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlcnNbaWR4XS5jb2x1bW5JZCA9PT0gZmlsdGVyT2JqLmNvbHVtbklkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJzLnNwbGljZShpZHgsIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsdGVyc0NoYW5nZWQubmV4dCh0aGlzLmZpbHRlcnMpO1xuICAgIH1cblxuICAgIGdldEZpbHRlclN0cmluZyhrZXk6IHN0cmluZykge1xuICAgICAgICBsZXQgdmFsdWUgPSAnJztcbiAgICAgICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgdGhpcy5maWx0ZXJzLmxlbmd0aDsgaWR4KyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlcnNbaWR4XS5jb2x1bW5JZCA9PT0ga2V5KSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmZpbHRlcnNbaWR4XS52YWx1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgY2hhbmdlUGFnZShwYWdlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5wYWdlQ2hhbmdlZC5uZXh0KHBhZ2UpO1xuICAgIH1cblxuICAgIGNsZWFyRmlsdGVycygpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJzID0gW107XG4gICAgICAgIHRoaXMuZmlsdGVyc0NoYW5nZWQubmV4dCh0aGlzLmZpbHRlcnMpO1xuICAgIH1cbn1cbiJdfQ==
|
|
126
|
+
}], ctorParameters: function () { return [{ type: i1.Location }, { type: i2.Router }, { type: i2.ActivatedRoute }]; } });
|
|
127
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS1maWx0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9mZWF0dXJlcy9kYXRhLXRhYmxlL2RhdGEtdGFibGUtZmlsdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3JDLE9BQU8sRUFBQyxPQUFPLEVBQUUsT0FBTyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3hDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQzs7OztBQWNoRCxNQUdhLHNCQUFzQjtJQVcvQixZQUFvQixRQUFrQixFQUFVLE1BQWMsRUFBVSxjQUE4QjtRQUFsRixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQVR0RyxZQUFPLEdBQWdCLEVBQUUsQ0FBQztRQUMxQixnQkFBVyxHQUFHLENBQUMsQ0FBQztRQUNoQixtQkFBYyxHQUNSLElBQUksZUFBZSxDQUFjLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUVwRCxnQkFBVyxHQUFHLElBQUksZUFBZSxDQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUV6RCx1QkFBa0IsR0FBRyxFQUFFLENBQUM7SUFHeEIsQ0FBQztJQUVELFlBQVksQ0FBQyxTQUFvQjtRQUM3QixJQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FB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Q0FBQyxDQUFDLENBQUM7UUFDdkQsTUFBTSxNQUFNLEdBQWUsSUFBSSxVQUFVLENBQUMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN2RSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM5QyxNQUFNLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUU3QixNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDMUIsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUMvQyxPQUFPLE1BQU0sQ0FBQyxRQUFRLEtBQUssR0FBRyxDQUFDO1lBQ25DLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxZQUFZLEVBQUU7Z0JBQ2QsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEdBQUcsWUFBWSxDQUFDO2FBQ3pDO2lCQUFNO2dCQUNILGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxHQUFHO29CQUNyQixRQUFRLEVBQUUsR0FBRztvQkFDYixLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7b0JBQ3RCLEtBQUssRUFBRSxHQUFHO2lCQUNiLENBQUM7YUFDTDtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxpQkFBaUIsQ0FBQztJQUM3QixDQUFDOytHQXRIUSxzQkFBc0I7bUhBQXRCLHNCQUFzQixjQUZuQixNQUFNOztTQUVULHNCQUFzQjs0RkFBdEIsc0JBQXNCO2tCQUhsQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7Zm9yRWFjaCwgaXNFbXB0eX0gZnJvbSBcImxvZGFzaFwiO1xuaW1wb3J0IHtIdHRwUGFyYW1zfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlcn0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHtMb2NhdGlvbn0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuXG5leHBvcnQgdHlwZSBGaWx0ZXJPYmogPSB7XG4gICAgZmlsdGVyTmFtZTogc3RyaW5nO1xuICAgIGNvbHVtbklkOiBzdHJpbmc7XG4gICAgdmFsdWU6IGFueTtcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIHR5cGU/OiBzdHJpbmc7XG4gICAgaGlkZGVuPzogYm9vbGVhbjtcbiAgICB2ZXJiPzogc3RyaW5nXG59XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRGF0YVRhYmxlRmlsdGVyU2VydmljZSB7XG5cbiAgICBmaWx0ZXJzOiBGaWx0ZXJPYmpbXSA9IFtdO1xuICAgIGN1cnJlbnRQYWdlID0gMTtcbiAgICBmaWx0ZXJzQ2hhbmdlZFxuICAgICAgICA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RmlsdGVyT2JqW10+KHRoaXMuZmlsdGVycylcblxuICAgIHBhZ2VDaGFuZ2VkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHRoaXMuY3VycmVudFBhZ2UpO1xuXG4gICAgY3VycmVudFF1ZXJ5UGFyYW1zID0gW107XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbiwgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUpIHtcbiAgICB9XG5cbiAgICB1cGRhdGVGaWx0ZXIoZmlsdGVyT2JqOiBGaWx0ZXJPYmopIHtcbiAgICAgICAgaWYoaXNFbXB0eShmaWx0ZXJPYmoudmFsdWUpICYmIChpc05hTihmaWx0ZXJPYmoudmFsdWUpIHx8IGZpbHRlck9iai52YWx1ZSA9PT0gJycpKSB0aGlzLnJlbW92ZUZpbHRlcihmaWx0ZXJPYmopO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBpc0ZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCB0aGlzLmZpbHRlcnMubGVuZ3RoOyBpZHgrKykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlcnNbaWR4XS5jb2x1bW5JZCA9PT0gZmlsdGVyT2JqLmNvbHVtbklkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyc1tpZHhdID0gZmlsdGVyT2JqO1xuICAgICAgICAgICAgICAgICAgICBpc0ZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc0ZvdW5kKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJzLnB1c2goZmlsdGVyT2JqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZVVybFBhcmFtZXRlcnMoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJzQ2hhbmdlZC5uZXh0KHRoaXMuZmlsdGVycyk7XG4gICAgfVxuXG4gICAgcmVtb3ZlRmlsdGVyKGZpbHRlck9iajogRmlsdGVyT2JqKSB7XG4gICAgICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IHRoaXMuZmlsdGVycy5sZW5ndGg7IGlkeCsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5maWx0ZXJzW2lkeF0uY29sdW1uSWQgPT09IGZpbHRlck9iai5jb2x1bW5JZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZVVybFBhcmFtZXRlcnMoW2ZpbHRlck9ial0pO1xuICAgICAgICB0aGlzLmZpbHRlcnNDaGFuZ2VkLm5leHQodGhpcy5maWx0ZXJzKTtcbiAgICB9XG5cbiAgICBnZXRGaWx0ZXJTdHJpbmcoa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gJyc7XG4gICAgICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IHRoaXMuZmlsdGVycy5sZW5ndGg7IGlkeCsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5maWx0ZXJzW2lkeF0uY29sdW1uSWQgPT09IGtleSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5maWx0ZXJzW2lkeF0udmFsdWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGNoYW5nZVBhZ2UocGFnZTogYW55KSB7XG4gICAgICAgIHRoaXMucGFnZUNoYW5nZWQubmV4dChwYWdlKTtcbiAgICB9XG5cbiAgICBjbGVhckZpbHRlcnMoKSB7XG4gICAgICAgIHRoaXMuZmlsdGVycyA9IFtdO1xuICAgICAgICB0aGlzLnVwZGF0ZVVybFBhcmFtZXRlcnMoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJzQ2hhbmdlZC5uZXh0KHRoaXMuZmlsdGVycyk7XG4gICAgfVxuXG4gICAgc3RvcmVGaWx0ZXJzKCkge1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnc2VhcmNoX2ZpbHRlcnMnLCBKU09OLnN0cmluZ2lmeSh0aGlzLmZpbHRlcnMpKTtcbiAgICB9XG5cbiAgICBnZXRTdG9yZWRGaWx0ZXJzKCkge1xuICAgICAgICBjb25zdCBzdG9yYWdlSXRlbSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdzZWFyY2hfZmlsdGVycycpO1xuICAgICAgICBjb25zdCBmaWx0ZXJzID0gc3RvcmFnZUl0ZW0gPyBKU09OLnBhcnNlKHN0b3JhZ2VJdGVtKSA6IFtdO1xuICAgICAgICByZXR1cm4gZmlsdGVycztcbiAgICB9XG5cbiAgICB1cGRhdGVVcmxQYXJhbWV0ZXJzKGZpbHRlcnNUb1JlbW92ZTogYW55W10gPSBbXSkge1xuICAgICAgICBjb25zdCB1cmxGaWx0ZXJzTWFwID0gdGhpcy5nZXRVcmxGaWx0ZXJzTWFwKCk7XG4gICAgICAgIGxldCBwYXJhbXM6IEh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgICAgICB0aGlzLmZpbHRlcnMuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgICAgICAgICAgdXJsRmlsdGVyc01hcFtmaWx0ZXIuY29sdW1uSWRdID0gZmlsdGVyO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbmV3RmlsdGVycyA9IFtdO1xuICAgICAgICBmb3JFYWNoKHVybEZpbHRlcnNNYXAsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJSZW1vdmVkID0gZmlsdGVyc1RvUmVtb3ZlLnNvbWUoKHJlbW92ZWQpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVtb3ZlZC5jb2x1bW5JZCA9PT0ga2V5O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGlmICghZmlsdGVyUmVtb3ZlZCkge1xuICAgICAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoa2V5LCB2YWx1ZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgbmV3RmlsdGVycy5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZmlsdGVycyA9IG5ld0ZpbHRlcnM7XG4gICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLnJvdXRlci51cmwuc3BsaXQoXCI/XCIpWzBdO1xuICAgICAgICB0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShwYXRoLCBwYXJhbXMudG9TdHJpbmcoKSk7XG4gICAgICAgIHRoaXMuc3RvcmVGaWx0ZXJzKCk7XG4gICAgfVxuXG4gICAgZ2V0VXJsRmlsdGVyc01hcCgpOiBhbnkge1xuICAgICAgICBjb25zdCBwYXJhbVN0cmluZyA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KFwiP1wiKVsxXTtcbiAgICAgICAgY29uc3QgcGFyYW1zOiBIdHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoeyBmcm9tU3RyaW5nOiBwYXJhbVN0cmluZyB9KTtcbiAgICAgICAgY29uc3Qgc3RvcmVkRmlsdGVycyA9IHRoaXMuZ2V0U3RvcmVkRmlsdGVycygpO1xuICAgICAgICBjb25zdCBhcHBsaWVkRmlsdGVyc01hcCA9IHt9O1xuXG4gICAgICAgIHBhcmFtcy5rZXlzKCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdG9yZWRGaWx0ZXIgPSBzdG9yZWRGaWx0ZXJzLmZpbmQoKGZpbHRlcikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBmaWx0ZXIuY29sdW1uSWQgPT09IGtleTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHN0b3JlZEZpbHRlcikge1xuICAgICAgICAgICAgICAgIGFwcGxpZWRGaWx0ZXJzTWFwW2tleV0gPSBzdG9yZWRGaWx0ZXI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFwcGxpZWRGaWx0ZXJzTWFwW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbklkOiBrZXksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBwYXJhbXMuZ2V0KGtleSksXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBrZXlcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGFwcGxpZWRGaWx0ZXJzTWFwO1xuICAgIH1cblxufVxuIl19
|
package/esm2022/lib/features/visualizer/identity-service-path/identity-service-path.helper.mjs
CHANGED
|
@@ -195,12 +195,10 @@ class IdentityServicePathHelper {
|
|
|
195
195
|
lnk.targetName = group4Nodes[k0].name;
|
|
196
196
|
lnk.weight = 1;
|
|
197
197
|
const foundNd = rootOb.nodes.find(function (rnd) {
|
|
198
|
-
// if (rnd.id === group3Nodes[k1].id) {
|
|
199
198
|
return rnd.id === group3Nodes[k1].id;
|
|
200
|
-
// }
|
|
201
199
|
});
|
|
202
200
|
if (foundNd.type.includes('Router')) {
|
|
203
|
-
lnk.status = foundNd.
|
|
201
|
+
lnk.status = foundNd.online === 'Yes' ? 1 : 0;
|
|
204
202
|
}
|
|
205
203
|
else {
|
|
206
204
|
lnk.status = getServiceToEndpointLinkState(group3Nodes[k1], group4Nodes[k0]);
|
|
@@ -367,4 +365,4 @@ class RootJson {
|
|
|
367
365
|
}
|
|
368
366
|
;
|
|
369
367
|
}
|
|
370
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdHktc2VydmljZS1wYXRoLmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9mZWF0dXJlcy92aXN1YWxpemVyL2lkZW50aXR5LXNlcnZpY2UtcGF0aC9pZGVudGl0eS1zZXJ2aWNlLXBhdGguaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBVSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDOztBQUV2QixNQUFNLElBQUk7Q0FPVDtBQUVELE1BQU0sSUFBSTtDQWdCVDtBQUVELE1BQU0sZUFBZTtJQUFyQjtRQWtCSSxjQUFTLEdBQUcsRUFBRSxDQUFDO0lBR25CLENBQUM7Q0FBQTtBQUVELE1BQU0sT0FBTyxXQUFXO0NBR3ZCO0FBRUQsTUFHYSx5QkFBeUI7SUFHbEM7UUFGQSxvQkFBZSxHQUFHLENBQUMsQ0FBQztJQUdqQixDQUFDO0lBRUcsbUJBQW1CLENBQ3RCLFFBQVEsRUFDUixjQUFjLEVBQ2QsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsVUFBVSxHQUFHLEVBQUU7UUFFZixJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDMUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUM5QixNQUFNLFFBQVEsR0FBSSxjQUFjLENBQUMsSUFBSSxDQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxFQUFFLENBQUcsQ0FBQztRQUMxRSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ1osY0FBYyxHQUFHLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMxQyxjQUFjLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztZQUMzQixjQUFjLENBQUMsSUFBSSxHQUFHLEVBQUUs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QUhyQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7QUFvVkEsTUFBTSxRQUFRO0lBQWQ7UUFDTyxVQUFLLEdBQU8sRUFBRSxDQUFDO1FBQ2YsVUFBSyxHQUFPLEVBQUUsQ0FBQztJQXNCdEIsQ0FBQztJQXJCTSxPQUFPLENBQUUsU0FBUztRQUNWLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFFLFVBQVUsRUFBRTtZQUMzQyxnQ0FBZ0M7WUFDNUIsa0JBQWtCO1lBQ2pCLE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ2xDLElBQUk7UUFDUixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDWCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUM5QjtJQUNULENBQUM7SUFBQSxDQUFDO0lBQ0YsV0FBVyxDQUFFLFNBQVM7UUFDaEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5RCxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUU7WUFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQztTQUM3QjtJQUNULENBQUM7SUFBQSxDQUFDO0lBQ0gsT0FBTyxDQUFFLFNBQVM7UUFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBQUEsQ0FBQztDQUVSIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG5jbGFzcyBMaW5rIHtcbiAgICBzb3VyY2U7XG4gICAgc291cmNlTmFtZTtcbiAgICB0YXJnZXQ7XG4gICAgdGFyZ2V0TmFtZTtcbiAgICB3ZWlnaHQ7XG4gICAgc3RhdHVzO1xufVxuXG5jbGFzcyBOb2RlIHtcbiAgICBpZDtcbiAgICBuYW1lO1xuICAgIHByb3ZpZGVyO1xuICAgIGdyb3VwO1xuICAgIHBvc3g7XG4gICAgcG9zeTtcbiAgICBzdGF0dXM7XG4gICAgb25saW5lO1xuICAgIGFwaVNlc3Npb247XG4gICAgcm91dGVyQ29ubmVjdGlvbjtcbiAgICB0dW5uZWxlckVuYWJsZWQ7XG4gICAgb3M7XG4gICAgbWZhRW5hYmxlZDtcbiAgICB0eXBlO1xuICAgIHVzYWdlO1xufVxuXG5jbGFzcyBTZXJ2aWNlSG9zdE5vZGUge1xuICAgIGlkO1xuICAgIG5hbWU7XG4gICAgZ3JvdXA7XG4gICAgcG9zeDtcbiAgICBwb3N5O1xuICAgIGludGVyY2VwdElwcztcbiAgICBpbnRlcmNlcHRQb3J0cztcbiAgICBpbnRlcmNlcHRQcm90b2NvbHM7XG4gICAgZm9yd2FyZGVkSG9zdDtcbiAgICBob3N0TmFtZXM7XG4gICAgZm9yd2FyZGVkUG9ydDtcbiAgICBob3N0UG9ydHM7XG4gICAgZm9yd2FyZGVkUHJvdG9jb2w7XG4gICAgaG9zdFByb3RvY29scztcbiAgICBzdGF0dXM7XG4gICAgdHlwZTtcbiAgICB1c2FnZTtcbiAgICBpbnRlcmNlcHQgPSBbXTtcbiAgICBjb25maWdBZGRyZXNzO1xuICAgIGNvbmZpZ1BvcnRzO1xufVxuXG5leHBvcnQgY2xhc3MgU2VydmljZURhdGEge1xuICAgIGlkO1xuICAgIG5hbWU7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIElkZW50aXR5U2VydmljZVBhdGhIZWxwZXIge1xuICAgIHBvc3lfZm9yX2dyb3VwMyA9IDA7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICApIHt9XG5cbiAgICBwdWJsaWMgZ2V0RW5kcG9pbnRHcmFwaE9iaihcbiAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgIGJpbmRJZG5ldGl0aWVzLFxuICAgICAgICBlZGdlcm91dGVycyxcbiAgICAgICAgc2VsZWN0ZWRTZXJ2aWNlT2IsXG4gICAgICAgIHNlcnZpY2VDb25maWdzLFxuICAgICAgICBmaWx0ZXJUZXh0ID0gJydcbiAgICApIHtcbiAgICAgICAgbGV0IGVuZHBvaW50Tm9kZU9iID0gbnVsbDtcbiAgICAgICAgY29uc3Qgcm9vdE9iID0gbmV3IFJvb3RKc29uKCk7XG4gICAgICAgIGNvbnN0IGJpbmROb2RlID0gIGJpbmRJZG5ldGl0aWVzLmZpbmQoIChuZCkgPT4gIG5kLmlkID09PSBlbmRwb2ludC5pZCAgKTtcbiAgICAgICBpZiAoIWJpbmROb2RlKSB7XG4gICAgICAgICAgZW5kcG9pbnROb2RlT2IgPSBjcmVhdGVFbmRwb2ludChlbmRwb2ludCk7XG4gICAgICAgICAgZW5kcG9pbnROb2RlT2IuZ3JvdXAgPSAnMSc7XG4gICAgICAgICAgZW5kcG9pbnROb2RlT2IucG9zeCA9IDUwO1xuICAgICAgICAgIGVuZHBvaW50Tm9kZU9iLnBvc3kgPSAyMDA7XG4gICAgICAgICAgcm9vdE9iLmFkZE5vZGUoZW5kcG9pbnROb2RlT2IpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBwdWJsaWNSb3V0ZXJOb2RlcyA9IFtdO1xuICAgICAgICBsZXQgcG9zeSA9IDA7XG4gICAgICAgIF8uaXNBcnJheShlZGdlcm91dGVycykgJiYgZWRnZXJvdXRlcnMuZm9yRWFjaCgobmQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVPYiA9IGNyZWF0ZUVSTm9kZShuZCk7XG4gICAgICAgICAgICBub2RlT2IuZ3JvdXAgPSAnMmEnO1xuICAgICAgICAgICAgbm9kZU9iLnBvc3ggPSAyNTA7XG4gICAgICAgICAgICBwb3N5ID0gcG9zeSArIDEwMDtcbiAgICAgICAgICAgIG5vZGVPYi5wb3N5ID0gcG9zeTtcbiAgICAgICAgICAgIHB1YmxpY1JvdXRlck5vZGVzLnB1c2gobm9kZU9iKTtcbiAgICAgICAgICAgIHJvb3RPYi5hZGROb2RlKG5vZGVPYik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxldCBwdWJsaWNSb3V0ZXJOb2Rlc0ZvckVuZHBvaW50VHVubmVsZXJzID0gW107XG5cbiAgICAgICAgY29uc3QgcG9zeF9mb3JfZ3JvdXAzID0gNTUwO1xuICAgICAgICB0aGlzLnBvc3lfZm9yX2dyb3VwMyA9IDA7XG4gICAgICAgIGxldCBncm91cDNJZHMgPSBbXTtcbiAgICAgICAgbGV0IHBvc3lfZm9yX2dyb3VwNCA9IDE1MDtcbiAgICAgICAgY29uc3QgZ3JvdXA0Tm9kZXMgPSBbXTtcbiAgICAgICAgY29uc3Qgc2VydmljZUlQUG9ydHMgPSBbXTtcbiAgICAgICAgICAgY29uc3Qgc3JOb2RlID0gbmV3IFNlcnZpY2VIb3N0Tm9kZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICBzck5vZGUuaWQgPSBzZWxlY3RlZFNlcnZpY2VPYi5pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgc3JOb2RlLm5hbWUgPSBzZWxlY3RlZFNlcnZpY2VPYi5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICBzck5vZGUuaW50ZXJjZXB0ID0gc2VydmljZUNvbmZpZ0FsaWFzKHNlcnZpY2VDb25maWdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgc3JOb2RlLnR5cGUgPSAnQ29uZmlnIFNlcnZpY2UnO1xuICAgICAgICAgICAgICAgICAgICAgICBzck5vZGUuZ3JvdXAgPSAnNCc7XG4gICAgICAgICAgICAgICAgICAgICAgIHNyTm9kZS5zdGF0dXMgPSAnMSc7XG4gICAgICAgICAgICAgICAgICAgICAgIGdyb3VwNE5vZGVzLnB1c2goc3JOb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgcm9vdE9iLmFkZE5vZGUoc3JOb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgXy5pc0FycmF5KGJpbmRJZG5ldGl0aWVzKSAmJiBiaW5kSWRuZXRpdGllcy5mb3JFYWNoKChlUG9pbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ3JvdXAzSWRzLmluZGV4T2YoZVBvaW50LmlkKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cDNJZHMucHVzaChlUG9pbnQuaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGNyZWF0ZSBsaW5rcyBiZXR3ZWVuIG5vZGVzXG5cbiAgICAgICAgLy8gaW4gZ3JvdXAzLCAgcmVtb3ZlICByb3V0ZXJzL2VwICB0aGF0IGV4aXN0IGluIGdyb3VwMlxuICAgICAgICB0aGlzLnBvc3lfZm9yX2dyb3VwMyA9IDE2NTtcbiAgICAgICAgbGV0IGdycDNZaW5jcmVtZW50ID0gMTAwO1xuXG4gICAgICAgIGNvbnN0IGdyb3VwM05vZGVzID0gW107XG4gICAgICAgIGxldCBjb3VudGdycDMgPSAwO1xuICAgICAgICBncm91cDNJZHMuZmluZCgobmlkKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gbGV0J3MgY2hlY2sgaWYgdGhlIHNlcnZpY2UgaG9zdGVkIGlzIGFuIEVuZHBvaW50XG4gICAgICAgICAgICAgICBsZXQgZ3JwM05vZGUgPSBmaW5kRW5kcG9pbnQobmlkLCBiaW5kSWRuZXRpdGllcyk7XG4gICAgICAgICAgICAgICAgICBpZihncnAzTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICBncnAzTm9kZS5ncm91cCA9ICczJztcbiAgICAgICAgICAgICAgICAgICAgZ3JwM05vZGUucG9zeCA9IHBvc3hfZm9yX2dyb3VwMztcbiAgICAgICAgICAgICAgICAgICAgZ3JwM05vZGUucG9zeSA9IHRoaXMucG9zeV9mb3JfZ3JvdXAzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvc3lfZm9yX2dyb3VwMyA9IHRoaXMucG9zeV9mb3JfZ3JvdXAzICsgMTI1O1xuICAgICAgICAgICAgICAgICAgICBncm91cDNOb2Rlcy5wdXNoKGdycDNOb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgY291bnRncnAzKys7XG4gICAgICAgICAgICAgICAgICAgIHJvb3RPYi5hZGROb2RlKGdycDNOb2RlKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZ3JwM1lpbmNyZW1lbnQgPSBjb3VudGdycDMgPiAyID8gNzUgOiAxMDA7XG4gICAgICAgIGlmIChjb3VudGdycDMgPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMucG9zeV9mb3JfZ3JvdXAzID0gMTYwO1xuICAgICAgICB9IGVsc2UgaWYgKGNvdW50Z3JwMyA9PT0gMikge1xuICAgICAgICAgICAgdGhpcy5wb3N5X2Zvcl9ncm91cDMgPSAxMjA7XG4gICAgICAgIH0gZWxzZSBpZiAoY291bnRncnAzID49IDUpIHtcbiAgICAgICAgICAgIHRoaXMucG9zeV9mb3JfZ3JvdXAzID0gNTA7XG4gICAgICAgICAgICBncnAzWWluY3JlbWVudCA9IDc1O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wb3N5X2Zvcl9ncm91cDMgPSA3MztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChncm91cDNOb2RlcylcbiAgICAgICAgICAgIGdyb3VwM05vZGVzLmZpbmQoKG5vZGUzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUzLmdyb3VwID09PSAnMycpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZTMucG9zeSA9IHRoaXMucG9zeV9mb3JfZ3JvdXAzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvc3lfZm9yX2dyb3VwMyA9IHRoaXMucG9zeV9mb3JfZ3JvdXAzICsgZ3JwM1lpbmNyZW1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGdyb3VwNE5vZGVzICYmIGdyb3VwNE5vZGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcG9zeV9mb3JfZ3JvdXA0ID0gMjAwO1xuICAgICAgICB9XG5cbiAgICAgICAgZ3JvdXA0Tm9kZXMuZmluZCgobmQ0KSA9PiB7XG4gICAgICAgICAgIC8vIG5kNC5wb3N4ID0gZ3JvdXAzTm9kZXMgICYmIGdyb3VwM05vZGVzLmxlbmd0aCA+IDAgICYmICFncm91cDNOb2Rlc1swXS50eXBlLmluY2x1ZGVzKFwiUHVibGljIEhvc3RlZFwiKSA/IHBvc3hfZm9yX2dyb3VwMyArIDE3NSA6IHBvc3hfZm9yX2dyb3VwMztcbiAgICAgICAgICAgIG5kNC5wb3N4ID0gcG9zeF9mb3JfZ3JvdXAzICsgMTc1O1xuICAgICAgICAgICAgbmQ0LnBvc3kgPSBwb3N5X2Zvcl9ncm91cDQ7XG4gICAgICAgICAgICBwb3N5X2Zvcl9ncm91cDQgPSBwb3N5X2Zvcl9ncm91cDQgKyAxMDA7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxldCBjb3VudFB1YmxpY05vZGVzID0gMDtcbiAgICAgICAgcm9vdE9iLm5vZGVzLmZpbmQoKHBOb2RlKSA9PiB7XG4gICAgICAgICAgICBpZiAocE5vZGUuZ3JvdXAuaW5jbHVkZXMoJzInKSkge1xuICAgICAgICAgICAgICAgIGNvdW50UHVibGljTm9kZXMgPSBjb3VudFB1YmxpY05vZGVzICsgMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcHVibGljUm91dGVyTm9kZXMgPSBbXTtcbiAgICAgICAgbGV0IHBvc3lfZ3JvdXAyID0gMTAwO1xuICAgICAgICBsZXQgeUluY3JlbWVudCA9IDA7XG4gICAgICAgIGlmIChjb3VudFB1YmxpY05vZGVzID09PSAxKSB7XG4gICAgICAgICAgICBwb3N5X2dyb3VwMiA9IDIwMDtcbiAgICAgICAgfSBlbHNlIGlmIChjb3VudFB1YmxpY05vZGVzID49IDIgJiYgY291bnRQdWJsaWNOb2RlcyA8IDUpIHtcbiAgICAgICAgICAgIHBvc3lfZ3JvdXAyID0gNjA7XG4gICAgICAgICAgICB5SW5jcmVtZW50ID0gODA7XG4gICAgICAgIH0gZWxzZSBpZiAoY291bnRQdWJsaWNOb2RlcyA+PSA1ICYmIGNvdW50UHVibGljTm9kZXMgPCAxMCkge1xuICAgICAgICAgICAgcG9zeV9ncm91cDIgPSA0MDtcbiAgICAgICAgICAgIHlJbmNyZW1lbnQgPSA1MDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBvc3lfZ3JvdXAyID0gNDA7XG4gICAgICAgICAgICB5SW5jcmVtZW50ID0gNDA7XG4gICAgICAgIH1cblxuICAgICAgICByb290T2Iubm9kZXMuZmluZCgocHVibGljTm9kZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHB1YmxpY05vZGUuZ3JvdXAuaW5jbHVkZXMoJzInKSkge1xuICAgICAgICAgICAgICAgIHB1YmxpY05vZGUucG9zeCA9IDI3NTtcbiAgICAgICAgICAgICAgICBwdWJsaWNOb2RlLnBvc3kgPSBwb3N5X2dyb3VwMjtcbiAgICAgICAgICAgICAgICBwb3N5X2dyb3VwMiA9IHBvc3lfZ3JvdXAyICsgeUluY3JlbWVudDtcbiAgICAgICAgICAgICAgICBwdWJsaWNSb3V0ZXJOb2Rlcy5wdXNoKHB1YmxpY05vZGUpO1xuICAgICAgICAgICAgICAgIGlmIChwdWJsaWNOb2RlLmdyb3VwID09PSAnMmInKSB7XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwM05vZGVzLnB1c2gocHVibGljTm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuXG4gICAgICAgIGZvciAobGV0IGsxID0gMDsgazEgPCByb290T2Iubm9kZXMubGVuZ3RoOyBrMSsrKSB7XG4gICAgICAgICAgICBjb25zdCBuZCA9IHJvb3RPYi5ub2Rlc1trMV07XG4gICAgICAgICAgICBpZiAoZW5kcG9pbnROb2RlT2IgIT09bnVsbCAmJiAobmQuZ3JvdXAgPT09ICcyYScgfHwgbmQuZ3JvdXAgPT09ICcyYWInIHx8IG5kLmdyb3VwID09PSAnMmFjJykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsbmsgPSBuZXcgTGluaygpO1xuICAgICAgICAgICAgICAgIGxuay5zb3VyY2UgPSBlbmRwb2ludE5vZGVPYi5pZDtcbiAgICAgICAgICAgICAgICBsbmsuc291cmNlTmFtZSA9IGVuZHBvaW50Tm9kZU9iLm5hbWU7XG4gICAgICAgICAgICAgICAgbG5rLnRhcmdldCA9IG5kLmlkO1xuICAgICAgICAgICAgICAgIGxuay50YXJnZXROYW1lID0gbmQubmFtZTtcbiAgICAgICAgICAgICAgICBsbmsuc3RhdHVzID0gZ2V0RW5kcG9pbnRUb1JvdXRlckxpbmtTdGF0ZShlbmRwb2ludE5vZGVPYiwgbmQpO1xuICAgICAgICAgICAgICAgIGxuay53ZWlnaHQgPSBnZXRXZWlnaHQobG5rLnN0YXR1cyk7XG4gICAgICAgICAgICAgICAgcm9vdE9iLmFkZExpbmsobG5rKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGsxID0gMDsgazEgPCByb290T2Iubm9kZXMubGVuZ3RoOyBrMSsrKSB7XG4gICAgICAgICAgICBjb25zdCBuZDEgPSByb290T2Iubm9kZXNbazFdO1xuXG4gICAgICAgICAgICBpZiAobmQxLmdyb3VwLmluY2x1ZGVzKCcyJykpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrMiA9IDA7IGsyIDwgZ3JvdXAzTm9kZXMubGVuZ3RoOyBrMisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5kMiA9IGdyb3VwM05vZGVzW2syXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5kMi5ncm91cCA9PT0gJzJiJyB8fCBuZDIuZ3JvdXAgPT09ICcyYWInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfSAvLyBsaW5rIG5vdCByZXF1aXJlZC5cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBsbmsgPSBuZXcgTGluaygpO1xuICAgICAgICAgICAgICAgICAgICBsbmsuc291cmNlID0gbmQxLmlkO1xuICAgICAgICAgICAgICAgICAgICBsbmsuc291cmNlTmFtZSA9IG5kMS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICBsbmsudGFyZ2V0ID0gbmQyLmlkO1xuICAgICAgICAgICAgICAgICAgICBsbmsudGFyZ2V0TmFtZSA9IG5kMi5uYW1lO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZDEudHlwZS5pbmNsdWRlcygnUm91dGVyJykgJiYgbmQyLnR5cGUuaW5jbHVkZXMoJ1JvdXRlcicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsbmsuc3RhdHVzID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZDEuc3RhdHVzID09PSAnUFJPVklTSU9ORUQnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmQxLm9ubGluZSA9PT0gJ1llcycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZDIuc3RhdHVzID09PSAnUFJPVklTSU9ORUQnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmQyLm9ubGluZSA9PT0gJ1llcydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxuay5zdGF0dXMgPSBnZXRFbmRwb2ludFRvUm91dGVyTGlua1N0YXRlKG5kMiwgbmQxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsbmsud2VpZ2h0ID0gZ2V0V2VpZ2h0KGxuay5zdGF0dXMpO1xuICAgICAgICAgICAgICAgICAgICByb290T2IuYWRkTGluayhsbmspO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGswID0gMDsgazAgPCBncm91cDROb2Rlcy5sZW5ndGg7IGswKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGsxID0gMDsgazEgPCBncm91cDNOb2Rlcy5sZW5ndGg7IGsxKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsbmsgPSBuZXcgTGluaygpO1xuICAgICAgICAgICAgICAgIGxuay5zb3VyY2UgPSBncm91cDNOb2Rlc1trMV0uaWQ7XG4gICAgICAgICAgICAgICAgbG5rLnNvdXJjZU5hbWUgPSBncm91cDNOb2Rlc1trMV0ubmFtZTtcbiAgICAgICAgICAgICAgICBsbmsudGFyZ2V0ID0gZ3JvdXA0Tm9kZXNbazBdLmlkO1xuICAgICAgICAgICAgICAgIGxuay50YXJnZXROYW1lID0gZ3JvdXA0Tm9kZXNbazBdLm5hbWU7XG4gICAgICAgICAgICAgICAgbG5rLndlaWdodCA9IDE7XG4gICAgICAgICAgICAgICAgY29uc3QgZm91bmROZCA9IHJvb3RPYi5ub2Rlcy5maW5kKCBmdW5jdGlvbiAocm5kKSB7XG4gICAgICAgICAgICAgICAgICAgLy8gaWYgKHJuZC5pZCA9PT0gZ3JvdXAzTm9kZXNbazFdLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcm5kLmlkID09PSBncm91cDNOb2Rlc1trMV0uaWQ7XG4gICAgICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChmb3VuZE5kLnR5cGUuaW5jbHVkZXMoJ1JvdXRlcicpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxuay5zdGF0dXMgPSBmb3VuZE5kLnN0YXR1cyA9PT0gJ1BST1ZJU0lPTkVEJyAmJiBmb3VuZE5kLm9ubGluZSA9PT0gJ1llcycgPyAxIDogMDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsbmsuc3RhdHVzID0gZ2V0U2VydmljZVRvRW5kcG9pbnRMaW5rU3RhdGUoZ3JvdXAzTm9kZXNbazFdLCBncm91cDROb2Rlc1trMF0pO1xuICAgICAgICAgICAgICAgICAgICBsbmsud2VpZ2h0ID0gZ2V0V2VpZ2h0KGxuay5zdGF0dXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByb290T2IuYWRkTGluayhsbmspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gc2VydmljZUNvbmZpZ0FsaWFzKGNvbmZpZ3MpIHtcbiAgICAgICAgICBsZXQgaW50ZXJjZXB0ID0gW107XG4gICAgICAgICAgXy5pc0FycmF5KGNvbmZpZ3MpICYmIGNvbmZpZ3MuZm9yRWFjaCggKGNvbmYpID0+IHtcbiAgICAgICAgICAgICBsZXQgYWRkcmVzc2VzID0gJyc7XG4gICAgICAgICAgICAgbGV0IHBvcnRzID0gJyc7XG4gICAgICAgICAgICBpZiAoY29uZi5kYXRhLmFkZHJlc3Nlcykge1xuICAgICAgICAgICAgICAgYWRkcmVzc2VzID0gY29uZi5kYXRhLmFkZHJlc3Nlcy50b1N0cmluZygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgIGFkZHJlc3NlcyA9IGNvbmYuZGF0YS5hZGRyZXNzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXy5pc0FycmF5KGNvbmYuZGF0YS5wb3J0UmFuZ2VzKSApIHtcbiAgICAgICAgICAgICAgICBjb25mLmRhdGEucG9ydFJhbmdlcy5mb3JFYWNoKCAocG9ydHNKc29uKSA9PiB7XG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBwb3J0c0pzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcG9ydHMgPSBwb3J0cyArIGtleSArJzonK3BvcnRzSnNvbltrZXldICsnICcgO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgIHBvcnRzID0gcG9ydHMgKyAnOyc7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBvcnRzID0gIGNvbmYuZGF0YS5wb3J0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW50ZXJjZXB0LnB1c2goYWRkcmVzc2VzKTtcbiAgICAgICAgICAgIGludGVyY2VwdC5wdXNoKHBvcnRzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gaW50ZXJjZXB0O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZmluZEVuZHBvaW50KGVuZHBvaW50SWQsIGVuZHBvaW50cykge1xuICAgICAgICAgICAgbGV0IG5vZGUgPSBudWxsO1xuICAgICAgICAgICAgaWYgKGVuZHBvaW50SWQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVQb2ludCA9IGVuZHBvaW50cy5maW5kKCBmdW5jdGlvbiAoZXIpIHtcbiAgICAgICAgICAgICAgICAgcmV0dXJuIGVyLmlkID09PSBlbmRwb2ludElkO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChlUG9pbnQpIHtcbiAgICAgICAgICAgICAgICBub2RlID0gY3JlYXRlRW5kcG9pbnQoZVBvaW50KTtcbiAgICAgICAgICAgICAgICBub2RlLnR5cGUgPSAnSG9zdGVkIElkZW50aXR5JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9IC8vIGVuZCBvZiBmaW5kRW5kcG9pbnRcblxuICAgICAgICBmdW5jdGlvbiBjcmVhdGVFbmRwb2ludChlUG9pbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBuZXcgTm9kZSgpO1xuICAgICAgICAgICAgbm9kZS5pZCA9IGVQb2ludC5pZDtcbiAgICAgICAgICAgIG5vZGUubmFtZSA9IGVQb2ludC5uYW1lO1xuICAgICAgICAgICAgbm9kZS50eXBlID0gJ0lkZW50aXR5JztcbiAgICAgICAgICAgIG5vZGUuYXBpU2Vzc2lvbiA9IGVQb2ludC5oYXNBcGlTZXNzaW9uID09PSBmYWxzZSA/ICdObycgOiAnWWVzJztcbiAgICAgICAgICAgIG5vZGUucm91dGVyQ29ubmVjdGlvbiA9IGVQb2ludC5oYXNFZGdlUm91dGVyQ29ubmVjdGlvbiA9PT0gZmFsc2UgPyAnTm8nIDogJ1llcyc7XG4gICAgICAgICAgICBub2RlLm9zID0gZVBvaW50LmVudkluZm8/IGVQb2ludC5lbnZJbmZvLm9zIDogJyc7XG4gICAgICAgICAgICBub2RlLm1mYUVuYWJsZWQgPSBlUG9pbnQuaXNNZmFFbmFibGVkO1xuICAgICAgICAgICAgbm9kZS5zdGF0dXMgPSBlUG9pbnQuZW52SW5mbyAmJiBlUG9pbnQuZW52SW5mby5vcyAhPT0gbnVsbCA/ICdSZWdpc3RlcmVkJyA6ICdVbi1SZWdpc3RlcmVkJztcbiAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gY3JlYXRlRVJOb2RlKGVyb3V0ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVPYiA9IG5ldyBOb2RlKCk7XG4gICAgICAgICAgICBub2RlT2IuaWQgPSBlcm91dGVyLmlkO1xuICAgICAgICAgICAgbm9kZU9iLm5hbWUgPSBlcm91dGVyLm5hbWU7XG4gICAgICAgICAgICBub2RlT2Iuc3RhdHVzID0gZXJvdXRlci5pc1ZlcmlmaWVkID09PSB0cnVlPyAnUmVnaXN0ZXJlZCc6J1VuLVJlZ2lzdGVyZWQnO1xuICAgICAgICAgICAgbm9kZU9iLm9ubGluZSA9IGVyb3V0ZXIuaXNPbmxpbmUgPT09IGZhbHNlID8gJ05vJyA6ICdZZXMnO1xuICAgICAgICAgICAgbm9kZU9iLnR1bm5lbGVyRW5hYmxlZCA9IGVyb3V0ZXIuaXNUdW5uZWxlckVuYWJsZWQgPT09IGZhbHNlID8gJ05vJyA6ICdZZXMnO1xuICAgICAgICAgICAgbm9kZU9iLnR5cGUgPSAnRWRnZVJvdXRlcic7XG4gICAgICAgICAgICByZXR1cm4gbm9kZU9iO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZmluZEVkZ2VSb3V0ZXJGb3JJZChyb3V0ZXJJZCwgZWRnZXJvdXRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGVyb3V0ZXIgPSBlZGdlcm91dGVycy5maW5kKChlcikgPT4ge1xuICAgICAgICAgICAgICAvLyAgaWYgKGVyLmlkID09PSByb3V0ZXJJZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXIuaWQgPT09IHJvdXRlcklkO1xuICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChlcm91dGVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUVSTm9kZShlcm91dGVyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gLy8gZW5kIG9mIGZpbmRFZGdlUm91dGVyRm9ySWRcblxuICAgICAgICBmdW5jdGlvbiBnZXRFbmRwb2ludFRvUm91dGVyTGlua1N0YXRlKGVuZHBvaW50Tm9kZSwgcm91dGVyTm9kZSkge1xuICAgICAgICAgICAgbGV0IGxpbmtzdGF0ZSA9IDA7XG4gICAgICAgICAgICBpZiAocm91dGVyTm9kZS5zdGF0dXMgPT09ICdFUlJPUicpIHtcbiAgICAgICAgICAgICAgICBsaW5rc3RhdGUgPSAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlbmRwb2ludE5vZGUuc3RhdHVzID09PSAnVW4tUmVnaXN0ZXJlZCcpIHtcbiAgICAgICAgICAgICAgICBsaW5rc3RhdGUgPSAtMTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZW5kcG9pbnROb2RlLmFwaVNlc3Npb24gPT09ICdObycpIHtcbiAgICAgICAgICAgICAgICBsaW5rc3RhdGUgPSAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlbmRwb2ludE5vZGUucm91dGVyQ29ubmVjdGlvbiA9PT0gJ05vJykge1xuICAgICAgICAgICAgICAgIGxpbmtzdGF0ZSA9IC0xO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChyb3V0ZXJOb2RlLm9ubGluZSA9PT0gJ1llcycgJiYgZW5kcG9pbnROb2RlLnJvdXRlckNvbm5lY3Rpb24gPT09ICdZZXMnKSB7XG4gICAgICAgICAgICAgICAgbGlua3N0YXRlID0gMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGlua3N0YXRlID0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbGlua3N0YXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZ2V0U2VydmljZVRvRW5kcG9pbnRMaW5rU3RhdGUoZW5kcG9pbnROb2RlLCBzZXJ2aWNlTm9kZSkge1xuICAgICAgICAgICAgbGV0IGxpbmtzdGF0ZSA9IDA7XG4gICAgICAgICAgICBpZiAoZW5kcG9pbnROb2RlLnN0YXR1cyA9PT0gJ1VuLVJlZ2lzdGVyZWQnIHx8IHNlcnZpY2VOb2RlLmludGVyY2VwdC5pbmNsdWRlcygnTm8nKSkge1xuICAgICAgICAgICAgICAgIGxpbmtzdGF0ZSA9IC0xO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlbmRwb2ludE5vZGUuYXBpU2Vzc2lvbiA9PT0gJ05vJykge1xuICAgICAgICAgICAgICAgIGxpbmtzdGF0ZSA9IDA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVuZHBvaW50Tm9kZS5zdGF0dXMgPT09ICdSZWdpc3RlcmVkJyAmJiBlbmRwb2ludE5vZGUuYXBpU2Vzc2lvbiA9PT0gJ1llcycpIHtcbiAgICAgICAgICAgICAgICBsaW5rc3RhdGUgPSAxO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsaW5rc3RhdGUgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGxpbmtzdGF0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGdldFdlaWdodChsaW5rU3RhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBsaW5rU3RhdGUgPT09IC0xID8gNSA6IDE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJvb3RPYjtcbiAgICB9IC8vIGVuZCBvZiBORVcgRnVuY3Rpb25cblxufVxuXG4gY2xhc3MgUm9vdEpzb24ge1xuICAgICAgICBub2RlczphbnkgPSBbXTtcbiAgICAgICAgbGlua3M6YW55ID0gW107XG4gICAgICAgIGFkZE5vZGUgKG5ld09iamVjdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvdW5kT2JqID0gdGhpcy5ub2Rlcy5maW5kKCBmdW5jdGlvbiAobmQpIHtcbiAgICAgICAgICAgICAgICAgICAvLyBpZiAobmQuaWQgPT09IG5ld09iamVjdC5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAvLyBuZCA9IG5ld09iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZC5pZCA9PT0gbmV3T2JqZWN0LmlkO1xuICAgICAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKCFmb3VuZE9iaikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vZGVzLnB1c2gobmV3T2JqZWN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJlcGxhY2VOb2RlIChuZXdPYmplY3QpIHtcbiAgICAgICAgICAgICAgY29uc3QgaW5keCA9IHRoaXMubm9kZXMuZmluZEluZGV4KG5kID0+IG5kLmlkID09PSBuZXdPYmplY3QuaWQpO1xuICAgICAgICAgICAgICAgIGlmIChpbmR4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgdGhpcy5ub2Rlc1tpbmR4XSA9IG5ld09iamVjdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgYWRkTGluayAobmV3T2JqZWN0KSB7XG4gICAgICAgICAgIHRoaXMubGlua3MucHVzaChuZXdPYmplY3QpO1xuICAgICAgICB9O1xuXG4gfVxuIl19
|
|
368
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdHktc2VydmljZS1wYXRoLmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9mZWF0dXJlcy92aXN1YWxpemVyL2lkZW50aXR5LXNlcnZpY2UtcGF0aC9pZGVudGl0eS1zZXJ2aWNlLXBhdGguaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBVSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDOztBQUV2QixNQUFNLElBQUk7Q0FPVDtBQUVELE1BQU0sSUFBSTtDQWdCVDtBQUVELE1BQU0sZUFBZTtJQUFyQjtRQWtCSSxjQUFTLEdBQUcsRUFBRSxDQUFDO0lBR25CLENBQUM7Q0FBQTtBQUVELE1BQU0sT0FBTyxXQUFXO0NBR3ZCO0FBRUQsTUFHYSx5QkFBeUI7SUFHbEM7UUFGQSxvQkFBZSxHQUFHLENBQUMsQ0FBQztJQUdqQixDQUFDO0lBRUcsbUJBQW1CLENBQ3RCLFFBQVEsRUFDUixjQUFjLEVBQ2QsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsVUFBVSxHQUFHLEVBQUU7UUFFZixJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDMUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUM5QixNQUFNLFFBQVEsR0FBSSxjQUFjLENBQUMsSUFBSSxDQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxFQUFFLENBQUcsQ0FBQztRQUMxRSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ1osY0FBYyxHQUFHLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMxQyxjQUFjLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztZQUMzQixjQUFjLENBQUMsSUFBSSxHQUFHLEVBQUUs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LFFBQVE7SUFBZDtRQUNPLFVBQUssR0FBTyxFQUFFLENBQUM7UUFDZixVQUFLLEdBQU8sRUFBRSxDQUFDO0lBc0J0QixDQUFDO0lBckJNLE9BQU8sQ0FBRSxTQUFTO1FBQ1YsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUUsVUFBVSxFQUFFO1lBQzNDLGdDQUFnQztZQUM1QixrQkFBa0I7WUFDakIsT0FBTyxFQUFFLENBQUMsRUFBRSxLQUFLLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDbEMsSUFBSTtRQUNSLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNYLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQzlCO0lBQ1QsQ0FBQztJQUFBLENBQUM7SUFDRixXQUFXLENBQUUsU0FBUztRQUNoQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlELElBQUksSUFBSSxJQUFJLENBQUMsRUFBRTtZQUNkLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDO1NBQzdCO0lBQ1QsQ0FBQztJQUFBLENBQUM7SUFDSCxPQUFPLENBQUUsU0FBUztRQUNkLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFBQSxDQUFDO0NBRVIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmNsYXNzIExpbmsge1xuICAgIHNvdXJjZTtcbiAgICBzb3VyY2VOYW1lO1xuICAgIHRhcmdldDtcbiAgICB0YXJnZXROYW1lO1xuICAgIHdlaWdodDtcbiAgICBzdGF0dXM7XG59XG5cbmNsYXNzIE5vZGUge1xuICAgIGlkO1xuICAgIG5hbWU7XG4gICAgcHJvdmlkZXI7XG4gICAgZ3JvdXA7XG4gICAgcG9zeDtcbiAgICBwb3N5O1xuICAgIHN0YXR1cztcbiAgICBvbmxpbmU7XG4gICAgYXBpU2Vzc2lvbjtcbiAgICByb3V0ZXJDb25uZWN0aW9uO1xuICAgIHR1bm5lbGVyRW5hYmxlZDtcbiAgICBvcztcbiAgICBtZmFFbmFibGVkO1xuICAgIHR5cGU7XG4gICAgdXNhZ2U7XG59XG5cbmNsYXNzIFNlcnZpY2VIb3N0Tm9kZSB7XG4gICAgaWQ7XG4gICAgbmFtZTtcbiAgICBncm91cDtcbiAgICBwb3N4O1xuICAgIHBvc3k7XG4gICAgaW50ZXJjZXB0SXBzO1xuICAgIGludGVyY2VwdFBvcnRzO1xuICAgIGludGVyY2VwdFByb3RvY29scztcbiAgICBmb3J3YXJkZWRIb3N0O1xuICAgIGhvc3ROYW1lcztcbiAgICBmb3J3YXJkZWRQb3J0O1xuICAgIGhvc3RQb3J0cztcbiAgICBmb3J3YXJkZWRQcm90b2NvbDtcbiAgICBob3N0UHJvdG9jb2xzO1xuICAgIHN0YXR1cztcbiAgICB0eXBlO1xuICAgIHVzYWdlO1xuICAgIGludGVyY2VwdCA9IFtdO1xuICAgIGNvbmZpZ0FkZHJlc3M7XG4gICAgY29uZmlnUG9ydHM7XG59XG5cbmV4cG9ydCBjbGFzcyBTZXJ2aWNlRGF0YSB7XG4gICAgaWQ7XG4gICAgbmFtZTtcbn1cblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgSWRlbnRpdHlTZXJ2aWNlUGF0aEhlbHBlciB7XG4gICAgcG9zeV9mb3JfZ3JvdXAzID0gMDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICkge31cblxuICAgIHB1YmxpYyBnZXRFbmRwb2ludEdyYXBoT2JqKFxuICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgYmluZElkbmV0aXRpZXMsXG4gICAgICAgIGVkZ2Vyb3V0ZXJzLFxuICAgICAgICBzZWxlY3RlZFNlcnZpY2VPYixcbiAgICAgICAgc2VydmljZUNvbmZpZ3MsXG4gICAgICAgIGZpbHRlclRleHQgPSAnJ1xuICAgICkge1xuICAgICAgICBsZXQgZW5kcG9pbnROb2RlT2IgPSBudWxsO1xuICAgICAgICBjb25zdCByb290T2IgPSBuZXcgUm9vdEpzb24oKTtcbiAgICAgICAgY29uc3QgYmluZE5vZGUgPSAgYmluZElkbmV0aXRpZXMuZmluZCggKG5kKSA9PiAgbmQuaWQgPT09IGVuZHBvaW50LmlkICApO1xuICAgICAgIGlmICghYmluZE5vZGUpIHtcbiAgICAgICAgICBlbmRwb2ludE5vZGVPYiA9IGNyZWF0ZUVuZHBvaW50KGVuZHBvaW50KTtcbiAgICAgICAgICBlbmRwb2ludE5vZGVPYi5ncm91cCA9ICcxJztcbiAgICAgICAgICBlbmRwb2ludE5vZGVPYi5wb3N4ID0gNTA7XG4gICAgICAgICAgZW5kcG9pbnROb2RlT2IucG9zeSA9IDIwMDtcbiAgICAgICAgICByb290T2IuYWRkTm9kZShlbmRwb2ludE5vZGVPYik7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHB1YmxpY1JvdXRlck5vZGVzID0gW107XG4gICAgICAgIGxldCBwb3N5ID0gMDtcbiAgICAgICAgXy5pc0FycmF5KGVkZ2Vyb3V0ZXJzKSAmJiBlZGdlcm91dGVycy5mb3JFYWNoKChuZCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9kZU9iID0gY3JlYXRlRVJOb2RlKG5kKTtcbiAgICAgICAgICAgIG5vZGVPYi5ncm91cCA9ICcyYSc7XG4gICAgICAgICAgICBub2RlT2IucG9zeCA9IDI1MDtcbiAgICAgICAgICAgIHBvc3kgPSBwb3N5ICsgMTAwO1xuICAgICAgICAgICAgbm9kZU9iLnBvc3kgPSBwb3N5O1xuICAgICAgICAgICAgcHVibGljUm91dGVyTm9kZXMucHVzaChub2RlT2IpO1xuICAgICAgICAgICAgcm9vdE9iLmFkZE5vZGUobm9kZU9iKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0IHB1YmxpY1JvdXRlck5vZGVzRm9yRW5kcG9pbnRUdW5uZWxlcnMgPSBbXTtcblxuICAgICAgICBjb25zdCBwb3N4X2Zvcl9ncm91cDMgPSA1NTA7XG4gICAgICAgIHRoaXMucG9zeV9mb3JfZ3JvdXAzID0gMDtcbiAgICAgICAgbGV0IGdyb3VwM0lkcyA9IFtdO1xuICAgICAgICBsZXQgcG9zeV9mb3JfZ3JvdXA0ID0gMTUwO1xuICAgICAgICBjb25zdCBncm91cDROb2RlcyA9IFtdO1xuICAgICAgICBjb25zdCBzZXJ2aWNlSVBQb3J0cyA9IFtdO1xuICAgICAgICAgICBjb25zdCBzck5vZGUgPSBuZXcgU2VydmljZUhvc3ROb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgIHNyTm9kZS5pZCA9IHNlbGVjdGVkU2VydmljZU9iLmlkO1xuICAgICAgICAgICAgICAgICAgICAgICBzck5vZGUubmFtZSA9IHNlbGVjdGVkU2VydmljZU9iLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgIHNyTm9kZS5pbnRlcmNlcHQgPSBzZXJ2aWNlQ29uZmlnQWxpYXMoc2VydmljZUNvbmZpZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICBzck5vZGUudHlwZSA9ICdDb25maWcgU2VydmljZSc7XG4gICAgICAgICAgICAgICAgICAgICAgIHNyTm9kZS5ncm91cCA9ICc0JztcbiAgICAgICAgICAgICAgICAgICAgICAgc3JOb2RlLnN0YXR1cyA9ICcxJztcbiAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXA0Tm9kZXMucHVzaChzck5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICByb290T2IuYWRkTm9kZShzck5vZGUpO1xuICAgICAgICAgICAgICAgICAgICBfLmlzQXJyYXkoYmluZElkbmV0aXRpZXMpICYmIGJpbmRJZG5ldGl0aWVzLmZvckVhY2goKGVQb2ludCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChncm91cDNJZHMuaW5kZXhPZihlUG9pbnQuaWQpIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwM0lkcy5wdXNoKGVQb2ludC5pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gY3JlYXRlIGxpbmtzIGJldHdlZW4gbm9kZXNcblxuICAgICAgICAvLyBpbiBncm91cDMsICByZW1vdmUgIHJvdXRlcnMvZXAgIHRoYXQgZXhpc3QgaW4gZ3JvdXAyXG4gICAgICAgIHRoaXMucG9zeV9mb3JfZ3JvdXAzID0gMTY1O1xuICAgICAgICBsZXQgZ3JwM1lpbmNyZW1lbnQgPSAxMDA7XG5cbiAgICAgICAgY29uc3QgZ3JvdXAzTm9kZXMgPSBbXTtcbiAgICAgICAgbGV0IGNvdW50Z3JwMyA9IDA7XG4gICAgICAgIGdyb3VwM0lkcy5maW5kKChuaWQpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBsZXQncyBjaGVjayBpZiB0aGUgc2VydmljZSBob3N0ZWQgaXMgYW4gRW5kcG9pbnRcbiAgICAgICAgICAgICAgIGxldCBncnAzTm9kZSA9IGZpbmRFbmRwb2ludChuaWQsIGJpbmRJZG5ldGl0aWVzKTtcbiAgICAgICAgICAgICAgICAgIGlmKGdycDNOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIGdycDNOb2RlLmdyb3VwID0gJzMnO1xuICAgICAgICAgICAgICAgICAgICBncnAzTm9kZS5wb3N4ID0gcG9zeF9mb3JfZ3JvdXAzO1xuICAgICAgICAgICAgICAgICAgICBncnAzTm9kZS5wb3N5ID0gdGhpcy5wb3N5X2Zvcl9ncm91cDM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9zeV9mb3JfZ3JvdXAzID0gdGhpcy5wb3N5X2Zvcl9ncm91cDMgKyAxMjU7XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwM05vZGVzLnB1c2goZ3JwM05vZGUpO1xuICAgICAgICAgICAgICAgICAgICBjb3VudGdycDMrKztcbiAgICAgICAgICAgICAgICAgICAgcm9vdE9iLmFkZE5vZGUoZ3JwM05vZGUpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBncnAzWWluY3JlbWVudCA9IGNvdW50Z3JwMyA+IDIgPyA3NSA6IDEwMDtcbiAgICAgICAgaWYgKGNvdW50Z3JwMyA9PT0gMSkge1xuICAgICAgICAgICAgdGhpcy5wb3N5X2Zvcl9ncm91cDMgPSAxNjA7XG4gICAgICAgIH0gZWxzZSBpZiAoY291bnRncnAzID09PSAyKSB7XG4gICAgICAgICAgICB0aGlzLnBvc3lfZm9yX2dyb3VwMyA9IDEyMDtcbiAgICAgICAgfSBlbHNlIGlmIChjb3VudGdycDMgPj0gNSkge1xuICAgICAgICAgICAgdGhpcy5wb3N5X2Zvcl9ncm91cDMgPSA1MDtcbiAgICAgICAgICAgIGdycDNZaW5jcmVtZW50ID0gNzU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnBvc3lfZm9yX2dyb3VwMyA9IDczO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGdyb3VwM05vZGVzKVxuICAgICAgICAgICAgZ3JvdXAzTm9kZXMuZmluZCgobm9kZTMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZTMuZ3JvdXAgPT09ICczJykge1xuICAgICAgICAgICAgICAgICAgICBub2RlMy5wb3N5ID0gdGhpcy5wb3N5X2Zvcl9ncm91cDM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9zeV9mb3JfZ3JvdXAzID0gdGhpcy5wb3N5X2Zvcl9ncm91cDMgKyBncnAzWWluY3JlbWVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBpZiAoZ3JvdXA0Tm9kZXMgJiYgZ3JvdXA0Tm9kZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBwb3N5X2Zvcl9ncm91cDQgPSAyMDA7XG4gICAgICAgIH1cblxuICAgICAgICBncm91cDROb2Rlcy5maW5kKChuZDQpID0+IHtcbiAgICAgICAgICAgLy8gbmQ0LnBvc3ggPSBncm91cDNOb2RlcyAgJiYgZ3JvdXAzTm9kZXMubGVuZ3RoID4gMCAgJiYgIWdyb3VwM05vZGVzWzBdLnR5cGUuaW5jbHVkZXMoXCJQdWJsaWMgSG9zdGVkXCIpID8gcG9zeF9mb3JfZ3JvdXAzICsgMTc1IDogcG9zeF9mb3JfZ3JvdXAzO1xuICAgICAgICAgICAgbmQ0LnBvc3ggPSBwb3N4X2Zvcl9ncm91cDMgKyAxNzU7XG4gICAgICAgICAgICBuZDQucG9zeSA9IHBvc3lfZm9yX2dyb3VwNDtcbiAgICAgICAgICAgIHBvc3lfZm9yX2dyb3VwNCA9IHBvc3lfZm9yX2dyb3VwNCArIDEwMDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0IGNvdW50UHVibGljTm9kZXMgPSAwO1xuICAgICAgICByb290T2Iubm9kZXMuZmluZCgocE5vZGUpID0+IHtcbiAgICAgICAgICAgIGlmIChwTm9kZS5ncm91cC5pbmNsdWRlcygnMicpKSB7XG4gICAgICAgICAgICAgICAgY291bnRQdWJsaWNOb2RlcyA9IGNvdW50UHVibGljTm9kZXMgKyAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBwdWJsaWNSb3V0ZXJOb2RlcyA9IFtdO1xuICAgICAgICBsZXQgcG9zeV9ncm91cDIgPSAxMDA7XG4gICAgICAgIGxldCB5SW5jcmVtZW50ID0gMDtcbiAgICAgICAgaWYgKGNvdW50UHVibGljTm9kZXMgPT09IDEpIHtcbiAgICAgICAgICAgIHBvc3lfZ3JvdXAyID0gMjAwO1xuICAgICAgICB9IGVsc2UgaWYgKGNvdW50UHVibGljTm9kZXMgPj0gMiAmJiBjb3VudFB1YmxpY05vZGVzIDwgNSkge1xuICAgICAgICAgICAgcG9zeV9ncm91cDIgPSA2MDtcbiAgICAgICAgICAgIHlJbmNyZW1lbnQgPSA4MDtcbiAgICAgICAgfSBlbHNlIGlmIChjb3VudFB1YmxpY05vZGVzID49IDUgJiYgY291bnRQdWJsaWNOb2RlcyA8IDEwKSB7XG4gICAgICAgICAgICBwb3N5X2dyb3VwMiA9IDQwO1xuICAgICAgICAgICAgeUluY3JlbWVudCA9IDUwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcG9zeV9ncm91cDIgPSA0MDtcbiAgICAgICAgICAgIHlJbmNyZW1lbnQgPSA0MDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJvb3RPYi5ub2Rlcy5maW5kKChwdWJsaWNOb2RlKSA9PiB7XG4gICAgICAgICAgICBpZiAocHVibGljTm9kZS5ncm91cC5pbmNsdWRlcygnMicpKSB7XG4gICAgICAgICAgICAgICAgcHVibGljTm9kZS5wb3N4ID0gMjc1O1xuICAgICAgICAgICAgICAgIHB1YmxpY05vZGUucG9zeSA9IHBvc3lfZ3JvdXAyO1xuICAgICAgICAgICAgICAgIHBvc3lfZ3JvdXAyID0gcG9zeV9ncm91cDIgKyB5SW5jcmVtZW50O1xuICAgICAgICAgICAgICAgIHB1YmxpY1JvdXRlck5vZGVzLnB1c2gocHVibGljTm9kZSk7XG4gICAgICAgICAgICAgICAgaWYgKHB1YmxpY05vZGUuZ3JvdXAgPT09ICcyYicpIHtcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXAzTm9kZXMucHVzaChwdWJsaWNOb2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgZm9yIChsZXQgazEgPSAwOyBrMSA8IHJvb3RPYi5ub2Rlcy5sZW5ndGg7IGsxKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG5kID0gcm9vdE9iLm5vZGVzW2sxXTtcbiAgICAgICAgICAgIGlmIChlbmRwb2ludE5vZGVPYiAhPT1udWxsICYmIChuZC5ncm91cCA9PT0gJzJhJyB8fCBuZC5ncm91cCA9PT0gJzJhYicgfHwgbmQuZ3JvdXAgPT09ICcyYWMnKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxuayA9IG5ldyBMaW5rKCk7XG4gICAgICAgICAgICAgICAgbG5rLnNvdXJjZSA9IGVuZHBvaW50Tm9kZU9iLmlkO1xuICAgICAgICAgICAgICAgIGxuay5zb3VyY2VOYW1lID0gZW5kcG9pbnROb2RlT2IubmFtZTtcbiAgICAgICAgICAgICAgICBsbmsudGFyZ2V0ID0gbmQuaWQ7XG4gICAgICAgICAgICAgICAgbG5rLnRhcmdldE5hbWUgPSBuZC5uYW1lO1xuICAgICAgICAgICAgICAgIGxuay5zdGF0dXMgPSBnZXRFbmRwb2ludFRvUm91dGVyTGlua1N0YXRlKGVuZHBvaW50Tm9kZU9iLCBuZCk7XG4gICAgICAgICAgICAgICAgbG5rLndlaWdodCA9IGdldFdlaWdodChsbmsuc3RhdHVzKTtcbiAgICAgICAgICAgICAgICByb290T2IuYWRkTGluayhsbmspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgazEgPSAwOyBrMSA8IHJvb3RPYi5ub2Rlcy5sZW5ndGg7IGsxKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG5kMSA9IHJvb3RPYi5ub2Rlc1trMV07XG5cbiAgICAgICAgICAgIGlmIChuZDEuZ3JvdXAuaW5jbHVkZXMoJzInKSkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGsyID0gMDsgazIgPCBncm91cDNOb2Rlcy5sZW5ndGg7IGsyKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmQyID0gZ3JvdXAzTm9kZXNbazJdO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmQyLmdyb3VwID09PSAnMmInIHx8IG5kMi5ncm91cCA9PT0gJzJhYicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9IC8vIGxpbmsgbm90IHJlcXVpcmVkLlxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxuayA9IG5ldyBMaW5rKCk7XG4gICAgICAgICAgICAgICAgICAgIGxuay5zb3VyY2UgPSBuZDEuaWQ7XG4gICAgICAgICAgICAgICAgICAgIGxuay5zb3VyY2VOYW1lID0gbmQxLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgIGxuay50YXJnZXQgPSBuZDIuaWQ7XG4gICAgICAgICAgICAgICAgICAgIGxuay50YXJnZXROYW1lID0gbmQyLm5hbWU7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG5kMS50eXBlLmluY2x1ZGVzKCdSb3V0ZXInKSAmJiBuZDIudHlwZS5pbmNsdWRlcygnUm91dGVyJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxuay5zdGF0dXMgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5kMS5zdGF0dXMgPT09ICdQUk9WSVNJT05FRCcgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZDEub25saW5lID09PSAnWWVzJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5kMi5zdGF0dXMgPT09ICdQUk9WSVNJT05FRCcgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZDIub25saW5lID09PSAnWWVzJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG5rLnN0YXR1cyA9IGdldEVuZHBvaW50VG9Sb3V0ZXJMaW5rU3RhdGUobmQyLCBuZDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGxuay53ZWlnaHQgPSBnZXRXZWlnaHQobG5rLnN0YXR1cyk7XG4gICAgICAgICAgICAgICAgICAgIHJvb3RPYi5hZGRMaW5rKGxuayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgazAgPSAwOyBrMCA8IGdyb3VwNE5vZGVzLmxlbmd0aDsgazArKykge1xuICAgICAgICAgICAgZm9yIChsZXQgazEgPSAwOyBrMSA8IGdyb3VwM05vZGVzLmxlbmd0aDsgazErKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxuayA9IG5ldyBMaW5rKCk7XG4gICAgICAgICAgICAgICAgbG5rLnNvdXJjZSA9IGdyb3VwM05vZGVzW2sxXS5pZDtcbiAgICAgICAgICAgICAgICBsbmsuc291cmNlTmFtZSA9IGdyb3VwM05vZGVzW2sxXS5uYW1lO1xuICAgICAgICAgICAgICAgIGxuay50YXJnZXQgPSBncm91cDROb2Rlc1trMF0uaWQ7XG4gICAgICAgICAgICAgICAgbG5rLnRhcmdldE5hbWUgPSBncm91cDROb2Rlc1trMF0ubmFtZTtcbiAgICAgICAgICAgICAgICBsbmsud2VpZ2h0ID0gMTtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3VuZE5kID0gcm9vdE9iLm5vZGVzLmZpbmQoIGZ1bmN0aW9uIChybmQpIHtcbiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBybmQuaWQgPT09IGdyb3VwM05vZGVzW2sxXS5pZDtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmIChmb3VuZE5kLnR5cGUuaW5jbHVkZXMoJ1JvdXRlcicpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxuay5zdGF0dXMgPSAgZm91bmROZC5vbmxpbmUgPT09ICdZZXMnID8gMSA6IDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbG5rLnN0YXR1cyA9IGdldFNlcnZpY2VUb0VuZHBvaW50TGlua1N0YXRlKGdyb3VwM05vZGVzW2sxXSwgZ3JvdXA0Tm9kZXNbazBdKTtcbiAgICAgICAgICAgICAgICAgICAgbG5rLndlaWdodCA9IGdldFdlaWdodChsbmsuc3RhdHVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcm9vdE9iLmFkZExpbmsobG5rKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHNlcnZpY2VDb25maWdBbGlhcyhjb25maWdzKSB7XG4gICAgICAgICAgbGV0IGludGVyY2VwdCA9IFtdO1xuICAgICAgICAgIF8uaXNBcnJheShjb25maWdzKSAmJiBjb25maWdzLmZvckVhY2goIChjb25mKSA9PiB7XG4gICAgICAgICAgICAgbGV0IGFkZHJlc3NlcyA9ICcnO1xuICAgICAgICAgICAgIGxldCBwb3J0cyA9ICcnO1xuICAgICAgICAgICAgaWYgKGNvbmYuZGF0YS5hZGRyZXNzZXMpIHtcbiAgICAgICAgICAgICAgIGFkZHJlc3NlcyA9IGNvbmYuZGF0YS5hZGRyZXNzZXMudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICBhZGRyZXNzZXMgPSBjb25mLmRhdGEuYWRkcmVzcztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKF8uaXNBcnJheShjb25mLmRhdGEucG9ydFJhbmdlcykgKSB7XG4gICAgICAgICAgICAgICAgY29uZi5kYXRhLnBvcnRSYW5nZXMuZm9yRWFjaCggKHBvcnRzSnNvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcG9ydHNKc29uKSB7XG4gICAgICAgICAgICAgICAgICAgIHBvcnRzID0gcG9ydHMgKyBrZXkgKyc6Jytwb3J0c0pzb25ba2V5XSArJyAnIDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICBwb3J0cyA9IHBvcnRzICsgJzsnO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwb3J0cyA9ICBjb25mLmRhdGEucG9ydDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGludGVyY2VwdC5wdXNoKGFkZHJlc3Nlcyk7XG4gICAgICAgICAgICBpbnRlcmNlcHQucHVzaChwb3J0cyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIGludGVyY2VwdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGZpbmRFbmRwb2ludChlbmRwb2ludElkLCBlbmRwb2ludHMpIHtcbiAgICAgICAgICAgIGxldCBub2RlID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChlbmRwb2ludElkID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBlUG9pbnQgPSBlbmRwb2ludHMuZmluZCggZnVuY3Rpb24gKGVyKSB7XG4gICAgICAgICAgICAgICAgIHJldHVybiBlci5pZCA9PT0gZW5kcG9pbnRJZDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoZVBvaW50KSB7XG4gICAgICAgICAgICAgICAgbm9kZSA9IGNyZWF0ZUVuZHBvaW50KGVQb2ludCk7XG4gICAgICAgICAgICAgICAgbm9kZS50eXBlID0gJ0hvc3RlZCBJZGVudGl0eSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfSAvLyBlbmQgb2YgZmluZEVuZHBvaW50XG5cbiAgICAgICAgZnVuY3Rpb24gY3JlYXRlRW5kcG9pbnQoZVBvaW50KSB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gbmV3IE5vZGUoKTtcbiAgICAgICAgICAgIG5vZGUuaWQgPSBlUG9pbnQuaWQ7XG4gICAgICAgICAgICBub2RlLm5hbWUgPSBlUG9pbnQubmFtZTtcbiAgICAgICAgICAgIG5vZGUudHlwZSA9ICdJZGVudGl0eSc7XG4gICAgICAgICAgICBub2RlLmFwaVNlc3Npb24gPSBlUG9pbnQuaGFzQXBpU2Vzc2lvbiA9PT0gZmFsc2UgPyAnTm8nIDogJ1llcyc7XG4gICAgICAgICAgICBub2RlLnJvdXRlckNvbm5lY3Rpb24gPSBlUG9pbnQuaGFzRWRnZVJvdXRlckNvbm5lY3Rpb24gPT09IGZhbHNlID8gJ05vJyA6ICdZZXMnO1xuICAgICAgICAgICAgbm9kZS5vcyA9IGVQb2ludC5lbnZJbmZvPyBlUG9pbnQuZW52SW5mby5vcyA6ICcnO1xuICAgICAgICAgICAgbm9kZS5tZmFFbmFibGVkID0gZVBvaW50LmlzTWZhRW5hYmxlZDtcbiAgICAgICAgICAgIG5vZGUuc3RhdHVzID0gZVBvaW50LmVudkluZm8gJiYgZVBvaW50LmVudkluZm8ub3MgIT09IG51bGwgPyAnUmVnaXN0ZXJlZCcgOiAnVW4tUmVnaXN0ZXJlZCc7XG4gICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGNyZWF0ZUVSTm9kZShlcm91dGVyKSB7XG4gICAgICAgICAgICBjb25zdCBub2RlT2IgPSBuZXcgTm9kZSgpO1xuICAgICAgICAgICAgbm9kZU9iLmlkID0gZXJvdXRlci5pZDtcbiAgICAgICAgICAgIG5vZGVPYi5uYW1lID0gZXJvdXRlci5uYW1lO1xuICAgICAgICAgICAgbm9kZU9iLnN0YXR1cyA9IGVyb3V0ZXIuaXNWZXJpZmllZCA9PT0gdHJ1ZT8gJ1JlZ2lzdGVyZWQnOidVbi1SZWdpc3RlcmVkJztcbiAgICAgICAgICAgIG5vZGVPYi5vbmxpbmUgPSBlcm91dGVyLmlzT25saW5lID09PSBmYWxzZSA/ICdObycgOiAnWWVzJztcbiAgICAgICAgICAgIG5vZGVPYi50dW5uZWxlckVuYWJsZWQgPSBlcm91dGVyLmlzVHVubmVsZXJFbmFibGVkID09PSBmYWxzZSA/ICdObycgOiAnWWVzJztcbiAgICAgICAgICAgIG5vZGVPYi50eXBlID0gJ0VkZ2VSb3V0ZXInO1xuICAgICAgICAgICAgcmV0dXJuIG5vZGVPYjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGZpbmRFZGdlUm91dGVyRm9ySWQocm91dGVySWQsIGVkZ2Vyb3V0ZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBlcm91dGVyID0gZWRnZXJvdXRlcnMuZmluZCgoZXIpID0+IHtcbiAgICAgICAgICAgICAgLy8gIGlmIChlci5pZCA9PT0gcm91dGVySWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVyLmlkID09PSByb3V0ZXJJZDtcbiAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoZXJvdXRlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVFUk5vZGUoZXJvdXRlcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IC8vIGVuZCBvZiBmaW5kRWRnZVJvdXRlckZvcklkXG5cbiAgICAgICAgZnVuY3Rpb24gZ2V0RW5kcG9pbnRUb1JvdXRlckxpbmtTdGF0ZShlbmRwb2ludE5vZGUsIHJvdXRlck5vZGUpIHtcbiAgICAgICAgICAgIGxldCBsaW5rc3RhdGUgPSAwO1xuICAgICAgICAgICAgaWYgKHJvdXRlck5vZGUuc3RhdHVzID09PSAnRVJST1InKSB7XG4gICAgICAgICAgICAgICAgbGlua3N0YXRlID0gMDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZW5kcG9pbnROb2RlLnN0YXR1cyA9PT0gJ1VuLVJlZ2lzdGVyZWQnKSB7XG4gICAgICAgICAgICAgICAgbGlua3N0YXRlID0gLTE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVuZHBvaW50Tm9kZS5hcGlTZXNzaW9uID09PSAnTm8nKSB7XG4gICAgICAgICAgICAgICAgbGlua3N0YXRlID0gMDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZW5kcG9pbnROb2RlLnJvdXRlckNvbm5lY3Rpb24gPT09ICdObycpIHtcbiAgICAgICAgICAgICAgICBsaW5rc3RhdGUgPSAtMTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocm91dGVyTm9kZS5vbmxpbmUgPT09ICdZZXMnICYmIGVuZHBvaW50Tm9kZS5yb3V0ZXJDb25uZWN0aW9uID09PSAnWWVzJykge1xuICAgICAgICAgICAgICAgIGxpbmtzdGF0ZSA9IDE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxpbmtzdGF0ZSA9IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGxpbmtzdGF0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGdldFNlcnZpY2VUb0VuZHBvaW50TGlua1N0YXRlKGVuZHBvaW50Tm9kZSwgc2VydmljZU5vZGUpIHtcbiAgICAgICAgICAgIGxldCBsaW5rc3RhdGUgPSAwO1xuICAgICAgICAgICAgaWYgKGVuZHBvaW50Tm9kZS5zdGF0dXMgPT09ICdVbi1SZWdpc3RlcmVkJyB8fCBzZXJ2aWNlTm9kZS5pbnRlcmNlcHQuaW5jbHVkZXMoJ05vJykpIHtcbiAgICAgICAgICAgICAgICBsaW5rc3RhdGUgPSAtMTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZW5kcG9pbnROb2RlLmFwaVNlc3Npb24gPT09ICdObycpIHtcbiAgICAgICAgICAgICAgICBsaW5rc3RhdGUgPSAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlbmRwb2ludE5vZGUuc3RhdHVzID09PSAnUmVnaXN0ZXJlZCcgJiYgZW5kcG9pbnROb2RlLmFwaVNlc3Npb24gPT09ICdZZXMnKSB7XG4gICAgICAgICAgICAgICAgbGlua3N0YXRlID0gMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGlua3N0YXRlID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBsaW5rc3RhdGU7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBnZXRXZWlnaHQobGlua1N0YXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gbGlua1N0YXRlID09PSAtMSA/IDUgOiAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByb290T2I7XG4gICAgfSAvLyBlbmQgb2YgTkVXIEZ1bmN0aW9uXG5cbn1cblxuIGNsYXNzIFJvb3RKc29uIHtcbiAgICAgICAgbm9kZXM6YW55ID0gW107XG4gICAgICAgIGxpbmtzOmFueSA9IFtdO1xuICAgICAgICBhZGROb2RlIChuZXdPYmplY3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3VuZE9iaiA9IHRoaXMubm9kZXMuZmluZCggZnVuY3Rpb24gKG5kKSB7XG4gICAgICAgICAgICAgICAgICAgLy8gaWYgKG5kLmlkID09PSBuZXdPYmplY3QuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgLy8gbmQgPSBuZXdPYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmQuaWQgPT09IG5ld09iamVjdC5pZDtcbiAgICAgICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmICghZm91bmRPYmopIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub2Rlcy5wdXNoKG5ld09iamVjdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXBsYWNlTm9kZSAobmV3T2JqZWN0KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGluZHggPSB0aGlzLm5vZGVzLmZpbmRJbmRleChuZCA9PiBuZC5pZCA9PT0gbmV3T2JqZWN0LmlkKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5keCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgIHRoaXMubm9kZXNbaW5keF0gPSBuZXdPYmplY3Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgIGFkZExpbmsgKG5ld09iamVjdCkge1xuICAgICAgICAgICB0aGlzLmxpbmtzLnB1c2gobmV3T2JqZWN0KTtcbiAgICAgICAgfTtcblxuIH1cbiJdfQ==
|
|
@@ -5,10 +5,10 @@ import { NavigationEnd, RouterModule } from '@angular/router';
|
|
|
5
5
|
import { Subject, BehaviorSubject, firstValueFrom, tap, map, Subscription } from 'rxjs';
|
|
6
6
|
import { catchError } from 'rxjs/operators';
|
|
7
7
|
import * as i1$1 from '@angular/common/http';
|
|
8
|
-
import { HttpClient, HttpClientModule } from '@angular/common/http';
|
|
8
|
+
import { HttpClient, HttpParams, HttpClientModule } from '@angular/common/http';
|
|
9
9
|
import * as i1 from 'ngx-logger';
|
|
10
10
|
import { NgxLoggerLevel } from 'ngx-logger';
|
|
11
|
-
import _, { isNumber, includes, isNil, defer, set, invoke, get, debounce, isEmpty, isNaN as isNaN$1, cloneDeep, unset, isBoolean, keys,
|
|
11
|
+
import _, { isNumber, includes, isNil, defer, set, invoke, get, debounce, isEmpty, isNaN as isNaN$1, forEach, cloneDeep, unset, isBoolean, keys, isEqual, isObject, isArray, delay, isFunction, map as map$1, forOwn, isString, some, filter, sortedUniq, invert } from 'lodash';
|
|
12
12
|
import { __decorate, __param } from 'tslib';
|
|
13
13
|
import * as i1$4 from '@angular/common';
|
|
14
14
|
import { CommonModule } from '@angular/common';
|
|
@@ -2298,11 +2298,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
2298
2298
|
}] }]; } });
|
|
2299
2299
|
|
|
2300
2300
|
class DataTableFilterService {
|
|
2301
|
-
constructor() {
|
|
2301
|
+
constructor(location, router, activatedRoute) {
|
|
2302
|
+
this.location = location;
|
|
2303
|
+
this.router = router;
|
|
2304
|
+
this.activatedRoute = activatedRoute;
|
|
2302
2305
|
this.filters = [];
|
|
2303
2306
|
this.currentPage = 1;
|
|
2304
2307
|
this.filtersChanged = new BehaviorSubject(this.filters);
|
|
2305
2308
|
this.pageChanged = new BehaviorSubject(this.currentPage);
|
|
2309
|
+
this.currentQueryParams = [];
|
|
2306
2310
|
}
|
|
2307
2311
|
updateFilter(filterObj) {
|
|
2308
2312
|
if (isEmpty(filterObj.value) && (isNaN(filterObj.value) || filterObj.value === ''))
|
|
@@ -2320,6 +2324,7 @@ class DataTableFilterService {
|
|
|
2320
2324
|
this.filters.push(filterObj);
|
|
2321
2325
|
}
|
|
2322
2326
|
}
|
|
2327
|
+
this.updateUrlParameters();
|
|
2323
2328
|
this.filtersChanged.next(this.filters);
|
|
2324
2329
|
}
|
|
2325
2330
|
removeFilter(filterObj) {
|
|
@@ -2329,6 +2334,7 @@ class DataTableFilterService {
|
|
|
2329
2334
|
break;
|
|
2330
2335
|
}
|
|
2331
2336
|
}
|
|
2337
|
+
this.updateUrlParameters([filterObj]);
|
|
2332
2338
|
this.filtersChanged.next(this.filters);
|
|
2333
2339
|
}
|
|
2334
2340
|
getFilterString(key) {
|
|
@@ -2346,9 +2352,61 @@ class DataTableFilterService {
|
|
|
2346
2352
|
}
|
|
2347
2353
|
clearFilters() {
|
|
2348
2354
|
this.filters = [];
|
|
2355
|
+
this.updateUrlParameters();
|
|
2349
2356
|
this.filtersChanged.next(this.filters);
|
|
2350
2357
|
}
|
|
2351
|
-
|
|
2358
|
+
storeFilters() {
|
|
2359
|
+
localStorage.setItem('search_filters', JSON.stringify(this.filters));
|
|
2360
|
+
}
|
|
2361
|
+
getStoredFilters() {
|
|
2362
|
+
const storageItem = localStorage.getItem('search_filters');
|
|
2363
|
+
const filters = storageItem ? JSON.parse(storageItem) : [];
|
|
2364
|
+
return filters;
|
|
2365
|
+
}
|
|
2366
|
+
updateUrlParameters(filtersToRemove = []) {
|
|
2367
|
+
const urlFiltersMap = this.getUrlFiltersMap();
|
|
2368
|
+
let params = new HttpParams();
|
|
2369
|
+
this.filters.forEach(filter => {
|
|
2370
|
+
urlFiltersMap[filter.columnId] = filter;
|
|
2371
|
+
});
|
|
2372
|
+
const newFilters = [];
|
|
2373
|
+
forEach(urlFiltersMap, (value, key) => {
|
|
2374
|
+
const filterRemoved = filtersToRemove.some((removed) => {
|
|
2375
|
+
return removed.columnId === key;
|
|
2376
|
+
});
|
|
2377
|
+
if (!filterRemoved) {
|
|
2378
|
+
params = params.append(key, value.value);
|
|
2379
|
+
newFilters.push(value);
|
|
2380
|
+
}
|
|
2381
|
+
});
|
|
2382
|
+
this.filters = newFilters;
|
|
2383
|
+
const path = this.router.url.split("?")[0];
|
|
2384
|
+
this.location.replaceState(path, params.toString());
|
|
2385
|
+
this.storeFilters();
|
|
2386
|
+
}
|
|
2387
|
+
getUrlFiltersMap() {
|
|
2388
|
+
const paramString = window.location.href.split("?")[1];
|
|
2389
|
+
const params = new HttpParams({ fromString: paramString });
|
|
2390
|
+
const storedFilters = this.getStoredFilters();
|
|
2391
|
+
const appliedFiltersMap = {};
|
|
2392
|
+
params.keys().forEach((key) => {
|
|
2393
|
+
const storedFilter = storedFilters.find((filter) => {
|
|
2394
|
+
return filter.columnId === key;
|
|
2395
|
+
});
|
|
2396
|
+
if (storedFilter) {
|
|
2397
|
+
appliedFiltersMap[key] = storedFilter;
|
|
2398
|
+
}
|
|
2399
|
+
else {
|
|
2400
|
+
appliedFiltersMap[key] = {
|
|
2401
|
+
columnId: key,
|
|
2402
|
+
value: params.get(key),
|
|
2403
|
+
label: key
|
|
2404
|
+
};
|
|
2405
|
+
}
|
|
2406
|
+
});
|
|
2407
|
+
return appliedFiltersMap;
|
|
2408
|
+
}
|
|
2409
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataTableFilterService, deps: [{ token: i1$4.Location }, { token: i3.Router }, { token: i3.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
2352
2410
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataTableFilterService, providedIn: 'root' }); }
|
|
2353
2411
|
}
|
|
2354
2412
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataTableFilterService, decorators: [{
|
|
@@ -2356,7 +2414,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
2356
2414
|
args: [{
|
|
2357
2415
|
providedIn: 'root'
|
|
2358
2416
|
}]
|
|
2359
|
-
}], ctorParameters: function () { return []; } });
|
|
2417
|
+
}], ctorParameters: function () { return [{ type: i1$4.Location }, { type: i3.Router }, { type: i3.ActivatedRoute }]; } });
|
|
2360
2418
|
|
|
2361
2419
|
/*
|
|
2362
2420
|
Copyright NetFoundry Inc.
|
|
@@ -9407,12 +9465,10 @@ class IdentityServicePathHelper {
|
|
|
9407
9465
|
lnk.targetName = group4Nodes[k0].name;
|
|
9408
9466
|
lnk.weight = 1;
|
|
9409
9467
|
const foundNd = rootOb.nodes.find(function (rnd) {
|
|
9410
|
-
// if (rnd.id === group3Nodes[k1].id) {
|
|
9411
9468
|
return rnd.id === group3Nodes[k1].id;
|
|
9412
|
-
// }
|
|
9413
9469
|
});
|
|
9414
9470
|
if (foundNd.type.includes('Router')) {
|
|
9415
|
-
lnk.status = foundNd.
|
|
9471
|
+
lnk.status = foundNd.online === 'Yes' ? 1 : 0;
|
|
9416
9472
|
}
|
|
9417
9473
|
else {
|
|
9418
9474
|
lnk.status = getServiceToEndpointLinkState(group3Nodes[k1], group4Nodes[k0]);
|