@c8y/ngx-components 1021.58.0 → 1021.59.6
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/core/router/scoped-context-route.service.d.ts +2 -1
- package/core/router/scoped-context-route.service.d.ts.map +1 -1
- package/device-provisioned-certificates/device-tab-provisioned-certificates.component.d.ts.map +1 -1
- package/esm2022/core/router/scoped-context-route.service.mjs +32 -33
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.mjs +3 -3
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-preview/datapoints-export-selector-preview.component.mjs +3 -3
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-data-scope/datapoints-exports-selector-data-scope.component.mjs +3 -3
- package/esm2022/datapoints-export-selector/datapoints-export-selector.component.mjs +3 -3
- package/esm2022/device-provisioned-certificates/device-provisioned-certificates.guard.mjs +2 -2
- package/esm2022/device-provisioned-certificates/device-tab-provisioned-certificates.component.mjs +7 -5
- package/esm2022/sensor-phone/sensor-phone-modal/sensor-phone-modal.component.mjs +4 -4
- package/esm2022/sub-assets/add-group/add-group.component.mjs +30 -4
- package/esm2022/sub-assets/add-group/add-group.module.mjs +23 -4
- package/esm2022/sub-assets/assign-devices/assign-child-devices.component.mjs +14 -2
- package/esm2022/sub-assets/groups.component.mjs +3 -3
- package/esm2022/sub-assets/sub-assets-grids.module.mjs +24 -0
- package/esm2022/sub-assets/sub-assets.component.mjs +4 -4
- package/esm2022/sub-assets/sub-assets.module.mjs +8 -12
- package/esm2022/trusted-certificates/crl/crl-settings.component.mjs +3 -3
- package/esm2022/trusted-certificates/list/trusted-certificate-list.component.mjs +5 -5
- package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs +8 -8
- package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs +7 -5
- package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-sensor-phone-sensor-phone-modal.mjs +3 -3
- package/fesm2022/c8y-ngx-components-sensor-phone-sensor-phone-modal.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-sub-assets.mjs +1246 -1181
- package/fesm2022/c8y-ngx-components-sub-assets.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +6 -6
- package/fesm2022/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +29 -30
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/locales/de.po +46 -51
- package/locales/es.po +25 -31
- package/locales/fr.po +30 -35
- package/locales/ja_JP.po +24 -32
- package/locales/ko.po +26 -31
- package/locales/locales.pot +6 -6
- package/locales/nl.po +26 -31
- package/locales/pl.po +27 -32
- package/locales/pt_BR.po +25 -30
- package/locales/zh_CN.po +27 -32
- package/locales/zh_TW.po +28 -33
- package/package.json +1 -1
- package/sensor-phone/sensor-phone-modal/sensor-phone-modal.component.d.ts.map +1 -1
- package/sub-assets/add-group/add-group.component.d.ts +9 -1
- package/sub-assets/add-group/add-group.component.d.ts.map +1 -1
- package/sub-assets/add-group/add-group.module.d.ts +3 -1
- package/sub-assets/add-group/add-group.module.d.ts.map +1 -1
- package/sub-assets/assign-devices/assign-child-devices.component.d.ts +3 -1
- package/sub-assets/assign-devices/assign-child-devices.component.d.ts.map +1 -1
- package/sub-assets/sub-assets-grids.module.d.ts +15 -0
- package/sub-assets/sub-assets-grids.module.d.ts.map +1 -0
- package/sub-assets/sub-assets.module.d.ts +18 -19
- package/sub-assets/sub-assets.module.d.ts.map +1 -1
- package/trusted-certificates/list/trusted-certificate-list.component.d.ts.map +1 -1
|
@@ -41,13 +41,14 @@ export declare class ScopedContextRouteService implements OnDestroy {
|
|
|
41
41
|
* Refreshes the context.
|
|
42
42
|
*/
|
|
43
43
|
refreshContext(): void;
|
|
44
|
+
private redirectToFirstTabOnActivationEnd;
|
|
44
45
|
/**
|
|
45
46
|
* Sets an API hook to refresh the contextData on changes.
|
|
46
47
|
* @param activatedRoute The current activated route.
|
|
47
48
|
*/
|
|
48
49
|
private updatedContext;
|
|
49
50
|
private updateTabs;
|
|
50
|
-
private
|
|
51
|
+
private redirectToFirstTabOnUpdateTabs;
|
|
51
52
|
private needsRedirectLegacy;
|
|
52
53
|
private needsRedirect;
|
|
53
54
|
private getMatchingContextRoute;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scoped-context-route.service.d.ts","sourceRoot":"","sources":["../../../core/router/scoped-context-route.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAc,QAAQ,EAAE,SAAS,EAAQ,MAAM,eAAe,CAAC;AAElF,OAAO,EACL,cAAc,EAKd,MAAM,EAGP,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAW,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAS,UAAU,
|
|
1
|
+
{"version":3,"file":"scoped-context-route.service.d.ts","sourceRoot":"","sources":["../../../core/router/scoped-context-route.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAc,QAAQ,EAAE,SAAS,EAAQ,MAAM,eAAe,CAAC;AAElF,OAAO,EACL,cAAc,EAKd,MAAM,EAGP,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAW,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAS,UAAU,EAAkB,MAAM,MAAM,CAAC;AAGzD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;;AAI5D;;GAEG;AACH,qBACa,yBAA0B,YAAW,SAAS;IAWvD,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,UAAU;IAfpB,OAAO,CAAC,aAAa,CAAM;IAC3B,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAc;IAE9B;;OAEG;IACH,OAAO,CAAC,cAAc,CAAc;gBAG1B,YAAY,EAAE,kBAAkB,EAChC,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,UAAU;IAGhC;;;OAGG;IACH,UAAU,IAAI,UAAU,CAAC,OAAO,CAAC;IAYjC;;;OAGG;IACH,IAAI,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAwBjC;;OAEG;IACH,WAAW,IAAI,IAAI;IAInB;;OAEG;IACH,cAAc;IAId,OAAO,CAAC,iCAAiC;IAiBzC;;;OAGG;IACH,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,8BAA8B;IAiBtC,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,uBAAuB;yCApKpB,yBAAyB;6CAAzB,yBAAyB;CA6KrC"}
|
package/device-provisioned-certificates/device-tab-provisioned-certificates.component.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device-tab-provisioned-certificates.component.d.ts","sourceRoot":"","sources":["../../device-provisioned-certificates/device-tab-provisioned-certificates.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,YAAY,EAAW,YAAY,EAAsB,MAAM,qBAAqB,CAAC;AAC9F,OAAO,EAAE,oCAAoC,EAAE,MAAM,2CAA2C,CAAC;AACjG,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAkB,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAEnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;;AAEvD,MAAM,MAAM,sBAAsB,GAAG;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjF,qBAIa,yCAA0C,YAAW,MAAM;
|
|
1
|
+
{"version":3,"file":"device-tab-provisioned-certificates.component.d.ts","sourceRoot":"","sources":["../../device-provisioned-certificates/device-tab-provisioned-certificates.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,YAAY,EAAW,YAAY,EAAsB,MAAM,qBAAqB,CAAC;AAC9F,OAAO,EAAE,oCAAoC,EAAE,MAAM,2CAA2C,CAAC;AACjG,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAkB,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAEnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;;AAEvD,MAAM,MAAM,sBAAsB,GAAG;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjF,qBAIa,yCAA0C,YAAW,MAAM;IAqBpE,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,oBAAoB;IAC5B,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,gBAAgB;IAzB1B,SAAS,UAAS;IAClB,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,CAA6B;IAC1D,uBAAuB,EAAE,UAAU,CAAC,sBAAsB,EAAE,CAAC,CAa3D;IAEF,SAAS,CAAC,QAAQ,CAAC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;MAAc;gBAGjC,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,YAAY,EAC1B,oBAAoB,EAAE,oCAAoC,EAC1D,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,cAAc,EACrB,gBAAgB,EAAE,gBAAgB;IAG5C,QAAQ,IAAI,IAAI;IAIhB,oCAAoC,CAAC,IAAI,EAAE,sBAAsB;IAgB3D,4BAA4B,CAAC,sBAAsB,EAAE,sBAAsB;YAcnE,iBAAiB;yCA/DpB,yCAAyC;2CAAzC,yCAAyC;CA4ErD"}
|
|
@@ -2,8 +2,8 @@ import { DestroyRef, Injectable, Injector } from '@angular/core';
|
|
|
2
2
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
3
3
|
import { ActivationEnd, ActivationStart, ChildActivationEnd, PRIMARY_OUTLET, Router } from '@angular/router';
|
|
4
4
|
import { ApiService } from '@c8y/ngx-components/api';
|
|
5
|
-
import { NEVER, Subject } from 'rxjs';
|
|
6
|
-
import { filter, map,
|
|
5
|
+
import { NEVER, Subject, merge } from 'rxjs';
|
|
6
|
+
import { filter, map, switchMap } from 'rxjs/operators';
|
|
7
7
|
import { TabsService } from '../tabs/tabs.service';
|
|
8
8
|
import { RouterTabsResolver } from './router-tabs.resolver';
|
|
9
9
|
import { ViewContext } from './router.model';
|
|
@@ -46,10 +46,10 @@ export class ScopedContextRouteService {
|
|
|
46
46
|
throw new Error(`${ScopedContextRouteService.name} should not be used on a route without a rootContext`);
|
|
47
47
|
}
|
|
48
48
|
this.router.events
|
|
49
|
-
.pipe(filter(
|
|
50
|
-
.subscribe((
|
|
51
|
-
route.data
|
|
52
|
-
.pipe(
|
|
49
|
+
.pipe(filter(event => event instanceof ActivationEnd && this.needsRedirect(event)), switchMap((event) => this.tabsResolver.resolve(event.snapshot)), takeUntilDestroyed(this.destroyRef))
|
|
50
|
+
.subscribe((tabs) => this.redirectToFirstTabOnActivationEnd(tabs));
|
|
51
|
+
merge(this.updatedContext(route), this.refreshTrigger$, route.data)
|
|
52
|
+
.pipe(switchMap(() => this.tabsResolver.resolve(route.snapshot)), takeUntilDestroyed(this.destroyRef))
|
|
53
53
|
.subscribe(tabs => this.updateTabs(tabs));
|
|
54
54
|
}
|
|
55
55
|
/**
|
|
@@ -64,6 +64,22 @@ export class ScopedContextRouteService {
|
|
|
64
64
|
refreshContext() {
|
|
65
65
|
this.refreshTrigger$.next();
|
|
66
66
|
}
|
|
67
|
+
redirectToFirstTabOnActivationEnd(tabs) {
|
|
68
|
+
if (!tabs.length) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const tab = this.tabsService.sortTabs(tabs)[0];
|
|
72
|
+
const currentQueryParams = this.router.routerState.snapshot.root.queryParams;
|
|
73
|
+
const queryParamsString = new URLSearchParams(currentQueryParams).toString();
|
|
74
|
+
const queryParamsSuffix = queryParamsString ? `?${queryParamsString}` : '';
|
|
75
|
+
const currentContextId = (this.router.url.match(this.ID_REGEX) || []).shift();
|
|
76
|
+
const tabPathId = (tab.path.match(this.ID_REGEX) || []).shift();
|
|
77
|
+
if (currentContextId === tabPathId) {
|
|
78
|
+
this.router.navigateByUrl(`${tab.path}${queryParamsSuffix}`, {
|
|
79
|
+
replaceUrl: true
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
67
83
|
/**
|
|
68
84
|
* Sets an API hook to refresh the contextData on changes.
|
|
69
85
|
* @param activatedRoute The current activated route.
|
|
@@ -91,39 +107,22 @@ export class ScopedContextRouteService {
|
|
|
91
107
|
this.lastAddedTabs.forEach(t => this.tabsService.remove(t));
|
|
92
108
|
this.lastAddedTabs = tabs;
|
|
93
109
|
tabs.forEach(t => this.tabsService.add(t));
|
|
94
|
-
this.
|
|
110
|
+
this.redirectToFirstTabOnUpdateTabs();
|
|
95
111
|
}
|
|
96
|
-
|
|
112
|
+
redirectToFirstTabOnUpdateTabs() {
|
|
97
113
|
const currentQueryParams = this.router.routerState.snapshot.root.queryParams;
|
|
98
114
|
const queryParamsString = new URLSearchParams(currentQueryParams).toString();
|
|
99
115
|
const queryParamsSuffix = queryParamsString ? `?${queryParamsString}` : '';
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
}
|
|
106
|
-
const currentContextId = (this.router.url.match(this.ID_REGEX) || []).shift();
|
|
116
|
+
const currentContextId = (this.router.url.match(this.ID_REGEX) || []).shift();
|
|
117
|
+
if (this.needsRedirectLegacy()) {
|
|
118
|
+
this.tabsService.firstTab$
|
|
119
|
+
.pipe(filter((tab) => typeof tab?.path === 'string'))
|
|
120
|
+
.subscribe((tab) => {
|
|
107
121
|
const tabPathId = (tab.path.match(this.ID_REGEX) || []).shift();
|
|
108
122
|
if (currentContextId === tabPathId) {
|
|
109
|
-
this.router.navigateByUrl(`${tab.path}${queryParamsSuffix}`, {
|
|
110
|
-
replaceUrl: true
|
|
111
|
-
});
|
|
123
|
+
this.router.navigateByUrl(`${tab.path}${queryParamsSuffix}`, { replaceUrl: true });
|
|
112
124
|
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
else {
|
|
116
|
-
const currentContextId = (this.router.url.match(this.ID_REGEX) || []).shift();
|
|
117
|
-
if (this.needsRedirectLegacy()) {
|
|
118
|
-
this.tabsService.firstTab$
|
|
119
|
-
.pipe(filter((tab) => typeof tab?.path === 'string'))
|
|
120
|
-
.subscribe((tab) => {
|
|
121
|
-
const tabPathId = (tab.path.match(this.ID_REGEX) || []).shift();
|
|
122
|
-
if (currentContextId === tabPathId) {
|
|
123
|
-
this.router.navigateByUrl(`${tab.path}${queryParamsSuffix}`, { replaceUrl: true });
|
|
124
|
-
}
|
|
125
|
-
});
|
|
126
|
-
}
|
|
125
|
+
});
|
|
127
126
|
}
|
|
128
127
|
}
|
|
129
128
|
needsRedirectLegacy() {
|
|
@@ -156,4 +155,4 @@ export class ScopedContextRouteService {
|
|
|
156
155
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ScopedContextRouteService, decorators: [{
|
|
157
156
|
type: Injectable
|
|
158
157
|
}], ctorParameters: () => [{ type: i1.RouterTabsResolver }, { type: i2.TabsService }, { type: i3.Router }, { type: i4.ApiService }, { type: i0.Injector }, { type: i0.DestroyRef }] });
|
|
159
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NvcGVkLWNvbnRleHQtcm91dGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvcm91dGVyL3Njb3BlZC1jb250ZXh0LXJvdXRlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFtQixNQUFNLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBRUwsYUFBYSxFQUNiLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsY0FBYyxFQUNkLE1BQU0sRUFHUCxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBVyxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFL0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxXQUFXLEVBQXdCLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7OztBQUU3RDs7R0FFRztBQUVILE1BQU0sT0FBTyx5QkFBeUI7SUFVcEMsWUFDVSxZQUFnQyxFQUNoQyxXQUF3QixFQUN4QixNQUFjLEVBQ2QsVUFBc0IsRUFDdEIsUUFBa0IsRUFDbEIsVUFBc0I7UUFMdEIsaUJBQVksR0FBWixZQUFZLENBQW9CO1FBQ2hDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxl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QW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDakcsQ0FBQzsrR0E1S1UseUJBQXlCO21IQUF6Qix5QkFBeUI7OzRGQUF6Qix5QkFBeUI7a0JBRHJDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZXN0cm95UmVmLCBJbmplY3RhYmxlLCBJbmplY3RvciwgT25EZXN0cm95LCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge1xuICBBY3RpdmF0ZWRSb3V0ZSxcbiAgQWN0aXZhdGlvbkVuZCxcbiAgQWN0aXZhdGlvblN0YXJ0LFxuICBDaGlsZEFjdGl2YXRpb25FbmQsXG4gIFBSSU1BUllfT1VUTEVULFxuICBSb3V0ZXIsXG4gIFVybFNlZ21lbnRHcm91cCxcbiAgVXJsVHJlZVxufSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQXBpQ2FsbCwgQXBpU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYXBpJztcbmltcG9ydCB7IE5FVkVSLCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgbWVyZ2UsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFRhYiwgVGFiV2l0aFRlbXBsYXRlIH0gZnJvbSAnLi4vdGFicy90YWIubW9kZWwnO1xuaW1wb3J0IHsgVGFic1NlcnZpY2UgfSBmcm9tICcuLi90YWJzL3RhYnMuc2VydmljZSc7XG5pbXBvcnQgeyBSb3V0ZXJUYWJzUmVzb2x2ZXIgfSBmcm9tICcuL3JvdXRlci10YWJzLnJlc29sdmVyJztcbmltcG9ydCB7IFZpZXdDb250ZXh0LCBWaWV3Q29udGV4dFJvb3RSb3V0ZSB9IGZyb20gJy4vcm91dGVyLm1vZGVsJztcbmltcG9ydCB7IFZpZXdDb250ZXh0U2VydmljZXMgfSBmcm9tICcuL3ZpZXctY29udGV4dC5zZXJ2aWNlJztcblxuLyoqXG4gKiBBIHNlcnZpY2Ugd2hpY2ggaXMgaW5qZWN0ZWQgaW50byB0aGUgY29udGV4dCByb3V0ZSBjb21wb25lbnQgdG8gaGFuZGxlIHRoZSBjb250ZXh0IGRhdGEuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTY29wZWRDb250ZXh0Um91dGVTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBsYXN0QWRkZWRUYWJzID0gW107XG4gIHByaXZhdGUgcmVmcmVzaFRyaWdnZXIkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBJRF9SRUdFWCA9IC8oWzAtOV0rKS87XG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZXh0IHVzZWQgYnkgdGhpcyBzZXJ2aWNlLlxuICAgKi9cbiAgcHJpdmF0ZSBjdXJyZW50Q29udGV4dDogVmlld0NvbnRleHQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB0YWJzUmVzb2x2ZXI6IFJvdXRlclRhYnNSZXNvbHZlcixcbiAgICBwcml2YXRlIHRhYnNTZXJ2aWNlOiBUYWJzU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgYXBpU2VydmljZTogQXBpU2VydmljZSxcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIGRlc3Ryb3lSZWY6IERlc3Ryb3lSZWZcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgZGF0YSBpcyBsb2FkaW5nXG4gICAqIEByZXR1cm5zIEFuIGJvb2xlYW4gb2JzZXJ2YWJsZSB3aGljaCBpbmRpY2F0ZXMgaWYgdGhlIGRhdGEgaXMgbG9hZGluZy5cbiAgICovXG4gIGlzTG9hZGluZyQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMucm91dGVyLmV2ZW50cy5waXBlKFxuICAgICAgZmlsdGVyKFxuICAgICAgICBlID0+XG4gICAgICAgICAgKGUgaW5zdGFuY2VvZiBBY3RpdmF0aW9uU3RhcnQgfHwgZSBpbnN0YW5jZW9mIENoaWxkQWN0aXZhdGlvbkVuZCkgJiZcbiAgICAgICAgICAoZS5zbmFwc2hvdC5yb3V0ZUNvbmZpZyBhcyBWaWV3Q29udGV4dFJvb3RSb3V0ZSk/LnJvb3RDb250ZXh0ID09PSB0aGlzLmN1cnJlbnRDb250ZXh0XG4gICAgICApLFxuICAgICAgbWFwKGUgPT4gZSBpbnN0YW5jZW9mIEFjdGl2YXRpb25TdGFydCksXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIGNvbnRleHQgcm91dGUuXG4gICAqIEBwYXJhbSByb3V0ZSBUaGUgY3VycmVudCBhY3RpdmF0ZWQgcm91dGUuXG4gICAqL1xuICBpbml0KHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudENvbnRleHQgPSAocm91dGUucm91dGVDb25maWcgYXMgVmlld0NvbnRleHRSb290Um91dGUpLnJvb3RDb250ZXh0O1xuICAgIGlmICghdGhpcy5jdXJyZW50Q29udGV4dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgJHtTY29wZWRDb250ZXh0Um91dGVTZXJ2aWNlLm5hbWV9IHNob3VsZCBub3QgYmUgdXNlZCBvbiBhIHJvdXRlIHdpdGhvdXQgYSByb290Q29udGV4dGBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5yb3V0ZXIuZXZlbnRzXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKGUgPT4gZSBpbnN0YW5jZW9mIEFjdGl2YXRpb25FbmQpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoZTogQWN0aXZhdGlvbkVuZCkgPT4gdGhpcy5yZWRpcmVjdFRvRmlyc3RUYWIoZSkpO1xuXG4gICAgcm91dGUuZGF0YVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1lcmdlKHRoaXMudXBkYXRlZENvbnRleHQocm91dGUpLCB0aGlzLnJlZnJlc2hUcmlnZ2VyJCksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLnRhYnNSZXNvbHZlci5yZXNvbHZlKHJvdXRlLnNuYXBzaG90KSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHRhYnMgPT4gdGhpcy51cGRhdGVUYWJzKHRhYnMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95cyB0aGUgc2VydmljZS5cbiAgICovXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMubGFzdEFkZGVkVGFicy5mb3JFYWNoKHQgPT4gdGhpcy50YWJzU2VydmljZS5yZW1vdmUodCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2hlcyB0aGUgY29udGV4dC5cbiAgICovXG4gIHJlZnJlc2hDb250ZXh0KCkge1xuICAgIHRoaXMucmVmcmVzaFRyaWdnZXIkLm5leHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGFuIEFQSSBob29rIHRvIHJlZnJlc2ggdGhlIGNvbnRleHREYXRhIG9uIGNoYW5nZXMuXG4gICAqIEBwYXJhbSBhY3RpdmF0ZWRSb3V0ZSBUaGUgY3VycmVudCBhY3RpdmF0ZWQgcm91dGUuXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZWRDb250ZXh0KHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSk6IE9ic2VydmFibGU8QXBpQ2FsbD4ge1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gcm91dGUuc25hcHNob3Q7XG4gICAgY29uc3Qgc2VydmljZUluc3RhbmNlID0gVmlld0NvbnRleHRTZXJ2aWNlcy5jb250ZXh0VG9TZXJ2aWNlKGRhdGEuY29udGV4dCk7XG4gICAgaWYgKHNlcnZpY2VJbnN0YW5jZSkge1xuICAgICAgY29uc3Qgc2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KFxuICAgICAgICBzZXJ2aWNlSW5zdGFuY2UgYXMgVHlwZTxJbnN0YW5jZVR5cGU8dHlwZW9mIHNlcnZpY2VJbnN0YW5jZT4+XG4gICAgICApO1xuICAgICAgY29uc3QgZGV0YWlsc1VybFJlZ2V4ID0gKHNlcnZpY2UgYXMgdHlwZW9mIHNlcnZpY2UgJiB7IGdldERldGFpbFVybD86ICguLi5hcmdzKSA9PiBzdHJpbmcgfSlcbiAgICAgICAgLmdldERldGFpbFVybChkYXRhLmNvbnRleHREYXRhKVxuICAgICAgICAucmVwbGFjZSgvXFxkKy9nLCAnP1xcXFxkKicpO1xuICAgICAgY29uc3QgY29udGV4dFJlZ2V4ID0gbmV3IFJlZ0V4cChkZXRhaWxzVXJsUmVnZXgsICdpJyk7XG4gICAgICBjb25zdCBjaGlsZHJlblJlZ2V4ID0gbmV3IFJlZ0V4cChgJHtkZXRhaWxzVXJsUmVnZXh9L2NoaWxkYCwgJ2knKTtcbiAgICAgIGNvbnN0IGZpbHRlclJlc3BvbnNlID0gKHsgdXJsLCBtZXRob2QgfSkgPT4ge1xuICAgICAgICBjb25zdCBjb250ZXh0Q2hhbmdlZCA9IGNvbnRleHRSZWdleC50ZXN0KHVybCkgJiYgWydQT1NUJywgJ1BVVCddLmluY2x1ZGVzKG1ldGhvZCk7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuQWZmZWN0ZWQgPSBjaGlsZHJlblJlZ2V4LnRlc3QodXJsKSAmJiBbJ1BPU1QnLCAnREVMRVRFJ10uaW5jbHVkZXMobWV0aG9kKTtcbiAgICAgICAgcmV0dXJuIGNvbnRleHRDaGFuZ2VkIHx8IGNoaWxkcmVuQWZmZWN0ZWQ7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5ob29rUmVzcG9uc2UoZmlsdGVyUmVzcG9uc2UpO1xuICAgIH1cbiAgICByZXR1cm4gTkVWRVI7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVRhYnModGFicyA9IFtdKSB7XG4gICAgdGhpcy5sYXN0QWRkZWRUYWJzLmZvckVhY2godCA9PiB0aGlzLnRhYnNTZXJ2aWNlLnJlbW92ZSh0KSk7XG4gICAgdGhpcy5sYXN0QWRkZWRUYWJzID0gdGFicztcbiAgICB0YWJzLmZvckVhY2godCA9PiB0aGlzLnRhYnNTZXJ2aWNlLmFkZCh0KSk7XG4gICAgdGhpcy5yZWRpcmVjdFRvRmlyc3RUYWIoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVkaXJlY3RUb0ZpcnN0VGFiKGV2ZW50PzogQWN0aXZhdGlvbkVuZCkge1xuICAgIGNvbnN0IGN1cnJlbnRRdWVyeVBhcmFtcyA9IHRoaXMucm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90LnJvb3QucXVlcnlQYXJhbXM7XG4gICAgY29uc3QgcXVlcnlQYXJhbXNTdHJpbmcgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKGN1cnJlbnRRdWVyeVBhcmFtcykudG9TdHJpbmcoKTtcbiAgICBjb25zdCBxdWVyeVBhcmFtc1N1ZmZpeCA9IHF1ZXJ5UGFyYW1zU3RyaW5nID8gYD8ke3F1ZXJ5UGFyYW1zU3RyaW5nfWAgOiAnJztcblxuICAgIGlmIChldmVudCkge1xuICAgICAgaWYgKHRoaXMubmVlZHNSZWRpcmVjdChldmVudCkpIHtcbiAgICAgICAgY29uc3QgdGFiID0gdGhpcy50YWJzU2VydmljZS5zb3J0VGFicyhldmVudC5zbmFwc2hvdC5kYXRhLnRhYnMpPy5bMF07XG4gICAgICAgIGlmICghdGFiKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb250ZXh0SWQgPSAodGhpcy5yb3V0ZXIudXJsLm1hdGNoKHRoaXMuSURfUkVHRVgpIHx8IFtdKS5zaGlmdCgpO1xuICAgICAgICBjb25zdCB0YWJQYXRoSWQgPSAodGFiLnBhdGgubWF0Y2godGhpcy5JRF9SRUdFWCkgfHwgW10pLnNoaWZ0KCk7XG4gICAgICAgIGlmIChjdXJyZW50Q29udGV4dElkID09PSB0YWJQYXRoSWQpIHtcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGAke3RhYi5wYXRofSR7cXVlcnlQYXJhbXNTdWZmaXh9YCwge1xuICAgICAgICAgICAgcmVwbGFjZVVybDogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRDb250ZXh0SWQgPSAodGhpcy5yb3V0ZXIudXJsLm1hdGNoKHRoaXMuSURfUkVHRVgpIHx8IFtdKS5zaGlmdCgpO1xuICAgICAgaWYgKHRoaXMubmVlZHNSZWRpcmVjdExlZ2FjeSgpKSB7XG4gICAgICAgIHRoaXMudGFic1NlcnZpY2UuZmlyc3RUYWIkXG4gICAgICAgICAgLnBpcGUoZmlsdGVyKCh0YWI6IFRhYikgPT4gdHlwZW9mIHRhYj8ucGF0aCA9PT0gJ3N0cmluZycpKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKHRhYjogVGFiV2l0aFRlbXBsYXRlPHN0cmluZz4pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRhYlBhdGhJZCA9ICh0YWIucGF0aC5tYXRjaCh0aGlzLklEX1JFR0VYKSB8fCBbXSkuc2hpZnQoKTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50Q29udGV4dElkID09PSB0YWJQYXRoSWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChgJHt0YWIucGF0aH0ke3F1ZXJ5UGFyYW1zU3VmZml4fWAsIHsgcmVwbGFjZVVybDogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG5lZWRzUmVkaXJlY3RMZWdhY3koKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdHJlZTogVXJsVHJlZSA9IHRoaXMucm91dGVyLnBhcnNlVXJsKHRoaXMucm91dGVyLnVybCk7XG4gICAgY29uc3QgZ3JvdXBzOiBVcmxTZWdtZW50R3JvdXAgPSB0cmVlLnJvb3QuY2hpbGRyZW5bUFJJTUFSWV9PVVRMRVRdO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0TWF0Y2hpbmdDb250ZXh0Um91dGUodGhpcy5yb3V0ZXIudXJsKTtcbiAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgIHJldHVybiBncm91cHMuc2VnbWVudHMubGVuZ3RoID09PSAyO1xuICAgIH1cbiAgICByZXR1cm4gY29udGV4dC5zcGxpdCgnLycpLmxlbmd0aCA9PT0gZ3JvdXBzLnNlZ21lbnRzLmxlbmd0aDtcbiAgfVxuXG4gIHByaXZhdGUgbmVlZHNSZWRpcmVjdChldmVudDogQWN0aXZhdGlvbkVuZCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNvbnRleHRSb3V0ZTogVmlld0NvbnRleHRSb290Um91dGUgPSBldmVudC5zbmFwc2hvdC5yb3V0ZUNvbmZpZyBhcyBWaWV3Q29udGV4dFJvb3RSb3V0ZTtcbiAgICBpZiAoIWNvbnRleHRSb3V0ZS5yb290Q29udGV4dCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBjb250ZXh0Um91dGVGcm9tVXJsID0gdGhpcy5nZXRNYXRjaGluZ0NvbnRleHRSb3V0ZSh0aGlzLnJvdXRlci51cmwpO1xuICAgIHJldHVybiBjb250ZXh0Um91dGUucm9vdENvbnRleHQgPT09IGNvbnRleHRSb3V0ZUZyb21Vcmw7XG4gIH1cblxuICBwcml2YXRlIGdldE1hdGNoaW5nQ29udGV4dFJvdXRlKHVybDogc3RyaW5nKTogVmlld0NvbnRleHQge1xuICAgIGNvbnN0IHZpZXdDb250ZXh0cyA9IE9iamVjdC52YWx1ZXMoVmlld0NvbnRleHQpO1xuICAgIC8vIHJlcGxhY2UgYWxsIDppZCBwbGFjZWhvbGRlcnMgd2l0aCBhIHJlZ2V4IG1hdGNoZXIgZm9yIGEgbnVtYmVyXG4gICAgY29uc3QgcmVnZXhNYXRjaGVycyA9IHZpZXdDb250ZXh0cy5tYXAoXG4gICAgICBjb250ZXh0ID0+IGBeLyR7Y29udGV4dC5yZXBsYWNlKC86aWQvZywgJyhbMC05XSspJyl9KFxcXFw/LiopPyRgXG4gICAgKTtcbiAgICBjb25zdCBtYXRjaGluZ1JlZ2V4Q29udGV4dCA9IHJlZ2V4TWF0Y2hlcnMuZmluZChjb250ZXh0ID0+IG5ldyBSZWdFeHAoY29udGV4dCkudGVzdCh1cmwpKTtcbiAgICByZXR1cm4gbWF0Y2hpbmdSZWdleENvbnRleHQgPyB2aWV3Q29udGV4dHNbcmVnZXhNYXRjaGVycy5pbmRleE9mKG1hdGNoaW5nUmVnZXhDb250ZXh0KV0gOiBudWxsO1xuICB9XG59XG4iXX0=
|
|
158
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NvcGVkLWNvbnRleHQtcm91dGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvcm91dGVyL3Njb3BlZC1jb250ZXh0LXJvdXRlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFtQixNQUFNLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBRUwsYUFBYSxFQUNiLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsY0FBYyxFQUNkLE1BQU0sRUFHUCxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBVyxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekQsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxXQUFXLEVBQXdCLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7OztBQUU3RDs7R0FFRztBQUVILE1BQU0sT0FBTyx5QkFBeUI7SUFVcEMsWUFDVSxZQUFnQyxFQUNoQyxXQUF3QixFQUN4QixNQUFjLEVBQ2QsVUFBc0IsRUFDdEIsUUFBa0IsRUFDbEIsVUFBc0I7UUFMdEIsaUJBQVksR0FBWixZQUFZLENBQW9CO1FBQ2hDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxl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TyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLFdBQVcsQ0FDL0QsQ0FBQztRQUNGLE1BQU0sb0JBQW9CLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzFGLE9BQU8sb0JBQW9CLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ2pHLENBQUM7K0dBNUtVLHlCQUF5QjttSEFBekIseUJBQXlCOzs0RkFBekIseUJBQXlCO2tCQURyQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzdHJveVJlZiwgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIE9uRGVzdHJveSwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtcbiAgQWN0aXZhdGVkUm91dGUsXG4gIEFjdGl2YXRpb25FbmQsXG4gIEFjdGl2YXRpb25TdGFydCxcbiAgQ2hpbGRBY3RpdmF0aW9uRW5kLFxuICBQUklNQVJZX09VVExFVCxcbiAgUm91dGVyLFxuICBVcmxTZWdtZW50R3JvdXAsXG4gIFVybFRyZWVcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEFwaUNhbGwsIEFwaVNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2FwaSc7XG5pbXBvcnQgeyBORVZFUiwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgbWVyZ2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBUYWIsIFRhYldpdGhUZW1wbGF0ZSB9IGZyb20gJy4uL3RhYnMvdGFiLm1vZGVsJztcbmltcG9ydCB7IFRhYnNTZXJ2aWNlIH0gZnJvbSAnLi4vdGFicy90YWJzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUm91dGVyVGFic1Jlc29sdmVyIH0gZnJvbSAnLi9yb3V0ZXItdGFicy5yZXNvbHZlcic7XG5pbXBvcnQgeyBWaWV3Q29udGV4dCwgVmlld0NvbnRleHRSb290Um91dGUgfSBmcm9tICcuL3JvdXRlci5tb2RlbCc7XG5pbXBvcnQgeyBWaWV3Q29udGV4dFNlcnZpY2VzIH0gZnJvbSAnLi92aWV3LWNvbnRleHQuc2VydmljZSc7XG5cbi8qKlxuICogQSBzZXJ2aWNlIHdoaWNoIGlzIGluamVjdGVkIGludG8gdGhlIGNvbnRleHQgcm91dGUgY29tcG9uZW50IHRvIGhhbmRsZSB0aGUgY29udGV4dCBkYXRhLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2NvcGVkQ29udGV4dFJvdXRlU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgbGFzdEFkZGVkVGFicyA9IFtdO1xuICBwcml2YXRlIHJlZnJlc2hUcmlnZ2VyJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgSURfUkVHRVggPSAvKFswLTldKykvO1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGV4dCB1c2VkIGJ5IHRoaXMgc2VydmljZS5cbiAgICovXG4gIHByaXZhdGUgY3VycmVudENvbnRleHQ6IFZpZXdDb250ZXh0O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdGFic1Jlc29sdmVyOiBSb3V0ZXJUYWJzUmVzb2x2ZXIsXG4gICAgcHJpdmF0ZSB0YWJzU2VydmljZTogVGFic1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGFwaVNlcnZpY2U6IEFwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSBkZXN0cm95UmVmOiBEZXN0cm95UmVmXG4gICkge31cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHRoYXQgdGhlIGRhdGEgaXMgbG9hZGluZ1xuICAgKiBAcmV0dXJucyBBbiBib29sZWFuIG9ic2VydmFibGUgd2hpY2ggaW5kaWNhdGVzIGlmIHRoZSBkYXRhIGlzIGxvYWRpbmcuXG4gICAqL1xuICBpc0xvYWRpbmckKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnJvdXRlci5ldmVudHMucGlwZShcbiAgICAgIGZpbHRlcihcbiAgICAgICAgZSA9PlxuICAgICAgICAgIChlIGluc3RhbmNlb2YgQWN0aXZhdGlvblN0YXJ0IHx8IGUgaW5zdGFuY2VvZiBDaGlsZEFjdGl2YXRpb25FbmQpICYmXG4gICAgICAgICAgKGUuc25hcHNob3Qucm91dGVDb25maWcgYXMgVmlld0NvbnRleHRSb290Um91dGUpPy5yb290Q29udGV4dCA9PT0gdGhpcy5jdXJyZW50Q29udGV4dFxuICAgICAgKSxcbiAgICAgIG1hcChlID0+IGUgaW5zdGFuY2VvZiBBY3RpdmF0aW9uU3RhcnQpLFxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBjb250ZXh0IHJvdXRlLlxuICAgKiBAcGFyYW0gcm91dGUgVGhlIGN1cnJlbnQgYWN0aXZhdGVkIHJvdXRlLlxuICAgKi9cbiAgaW5pdChyb3V0ZTogQWN0aXZhdGVkUm91dGUpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRDb250ZXh0ID0gKHJvdXRlLnJvdXRlQ29uZmlnIGFzIFZpZXdDb250ZXh0Um9vdFJvdXRlKS5yb290Q29udGV4dDtcbiAgICBpZiAoIXRoaXMuY3VycmVudENvbnRleHQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYCR7U2NvcGVkQ29udGV4dFJvdXRlU2VydmljZS5uYW1lfSBzaG91bGQgbm90IGJlIHVzZWQgb24gYSByb3V0ZSB3aXRob3V0IGEgcm9vdENvbnRleHRgXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMucm91dGVyLmV2ZW50c1xuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcihldmVudCA9PiBldmVudCBpbnN0YW5jZW9mIEFjdGl2YXRpb25FbmQgJiYgdGhpcy5uZWVkc1JlZGlyZWN0KGV2ZW50KSksXG4gICAgICAgIHN3aXRjaE1hcCgoZXZlbnQ6IEFjdGl2YXRpb25FbmQpID0+IHRoaXMudGFic1Jlc29sdmVyLnJlc29sdmUoZXZlbnQuc25hcHNob3QpKSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHRhYnM6IFRhYltdKSA9PiB0aGlzLnJlZGlyZWN0VG9GaXJzdFRhYk9uQWN0aXZhdGlvbkVuZCh0YWJzKSk7XG5cbiAgICBtZXJnZSh0aGlzLnVwZGF0ZWRDb250ZXh0KHJvdXRlKSwgdGhpcy5yZWZyZXNoVHJpZ2dlciQsIHJvdXRlLmRhdGEpXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMudGFic1Jlc29sdmVyLnJlc29sdmUocm91dGUuc25hcHNob3QpKSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUodGFicyA9PiB0aGlzLnVwZGF0ZVRhYnModGFicykpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIHRoZSBzZXJ2aWNlLlxuICAgKi9cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5sYXN0QWRkZWRUYWJzLmZvckVhY2godCA9PiB0aGlzLnRhYnNTZXJ2aWNlLnJlbW92ZSh0KSk7XG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzaGVzIHRoZSBjb250ZXh0LlxuICAgKi9cbiAgcmVmcmVzaENvbnRleHQoKSB7XG4gICAgdGhpcy5yZWZyZXNoVHJpZ2dlciQubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWRpcmVjdFRvRmlyc3RUYWJPbkFjdGl2YXRpb25FbmQodGFiczogVGFiW10pIHtcbiAgICBpZiAoIXRhYnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRhYiA9IHRoaXMudGFic1NlcnZpY2Uuc29ydFRhYnModGFicylbMF07XG4gICAgY29uc3QgY3VycmVudFF1ZXJ5UGFyYW1zID0gdGhpcy5yb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3Qucm9vdC5xdWVyeVBhcmFtcztcbiAgICBjb25zdCBxdWVyeVBhcmFtc1N0cmluZyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoY3VycmVudFF1ZXJ5UGFyYW1zKS50b1N0cmluZygpO1xuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zU3VmZml4ID0gcXVlcnlQYXJhbXNTdHJpbmcgPyBgPyR7cXVlcnlQYXJhbXNTdHJpbmd9YCA6ICcnO1xuICAgIGNvbnN0IGN1cnJlbnRDb250ZXh0SWQgPSAodGhpcy5yb3V0ZXIudXJsLm1hdGNoKHRoaXMuSURfUkVHRVgpIHx8IFtdKS5zaGlmdCgpO1xuICAgIGNvbnN0IHRhYlBhdGhJZCA9ICh0YWIucGF0aC5tYXRjaCh0aGlzLklEX1JFR0VYKSB8fCBbXSkuc2hpZnQoKTtcbiAgICBpZiAoY3VycmVudENvbnRleHRJZCA9PT0gdGFiUGF0aElkKSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGAke3RhYi5wYXRofSR7cXVlcnlQYXJhbXNTdWZmaXh9YCwge1xuICAgICAgICByZXBsYWNlVXJsOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBhbiBBUEkgaG9vayB0byByZWZyZXNoIHRoZSBjb250ZXh0RGF0YSBvbiBjaGFuZ2VzLlxuICAgKiBAcGFyYW0gYWN0aXZhdGVkUm91dGUgVGhlIGN1cnJlbnQgYWN0aXZhdGVkIHJvdXRlLlxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVkQ29udGV4dChyb3V0ZTogQWN0aXZhdGVkUm91dGUpOiBPYnNlcnZhYmxlPEFwaUNhbGw+IHtcbiAgICBjb25zdCB7IGRhdGEgfSA9IHJvdXRlLnNuYXBzaG90O1xuICAgIGNvbnN0IHNlcnZpY2VJbnN0YW5jZSA9IFZpZXdDb250ZXh0U2VydmljZXMuY29udGV4dFRvU2VydmljZShkYXRhLmNvbnRleHQpO1xuICAgIGlmIChzZXJ2aWNlSW5zdGFuY2UpIHtcbiAgICAgIGNvbnN0IHNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldChcbiAgICAgICAgc2VydmljZUluc3RhbmNlIGFzIFR5cGU8SW5zdGFuY2VUeXBlPHR5cGVvZiBzZXJ2aWNlSW5zdGFuY2U+PlxuICAgICAgKTtcbiAgICAgIGNvbnN0IGRldGFpbHNVcmxSZWdleCA9IChzZXJ2aWNlIGFzIHR5cGVvZiBzZXJ2aWNlICYgeyBnZXREZXRhaWxVcmw/OiAoLi4uYXJncykgPT4gc3RyaW5nIH0pXG4gICAgICAgIC5nZXREZXRhaWxVcmwoZGF0YS5jb250ZXh0RGF0YSlcbiAgICAgICAgLnJlcGxhY2UoL1xcZCsvZywgJz9cXFxcZConKTtcbiAgICAgIGNvbnN0IGNvbnRleHRSZWdleCA9IG5ldyBSZWdFeHAoZGV0YWlsc1VybFJlZ2V4LCAnaScpO1xuICAgICAgY29uc3QgY2hpbGRyZW5SZWdleCA9IG5ldyBSZWdFeHAoYCR7ZGV0YWlsc1VybFJlZ2V4fS9jaGlsZGAsICdpJyk7XG4gICAgICBjb25zdCBmaWx0ZXJSZXNwb25zZSA9ICh7IHVybCwgbWV0aG9kIH0pID0+IHtcbiAgICAgICAgY29uc3QgY29udGV4dENoYW5nZWQgPSBjb250ZXh0UmVnZXgudGVzdCh1cmwpICYmIFsnUE9TVCcsICdQVVQnXS5pbmNsdWRlcyhtZXRob2QpO1xuICAgICAgICBjb25zdCBjaGlsZHJlbkFmZmVjdGVkID0gY2hpbGRyZW5SZWdleC50ZXN0KHVybCkgJiYgWydQT1NUJywgJ0RFTEVURSddLmluY2x1ZGVzKG1ldGhvZCk7XG4gICAgICAgIHJldHVybiBjb250ZXh0Q2hhbmdlZCB8fCBjaGlsZHJlbkFmZmVjdGVkO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UuaG9va1Jlc3BvbnNlKGZpbHRlclJlc3BvbnNlKTtcbiAgICB9XG4gICAgcmV0dXJuIE5FVkVSO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVUYWJzKHRhYnMgPSBbXSkge1xuICAgIHRoaXMubGFzdEFkZGVkVGFicy5mb3JFYWNoKHQgPT4gdGhpcy50YWJzU2VydmljZS5yZW1vdmUodCkpO1xuICAgIHRoaXMubGFzdEFkZGVkVGFicyA9IHRhYnM7XG4gICAgdGFicy5mb3JFYWNoKHQgPT4gdGhpcy50YWJzU2VydmljZS5hZGQodCkpO1xuICAgIHRoaXMucmVkaXJlY3RUb0ZpcnN0VGFiT25VcGRhdGVUYWJzKCk7XG4gIH1cblxuICBwcml2YXRlIHJlZGlyZWN0VG9GaXJzdFRhYk9uVXBkYXRlVGFicygpIHtcbiAgICBjb25zdCBjdXJyZW50UXVlcnlQYXJhbXMgPSB0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC5yb290LnF1ZXJ5UGFyYW1zO1xuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zU3RyaW5nID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhjdXJyZW50UXVlcnlQYXJhbXMpLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgcXVlcnlQYXJhbXNTdWZmaXggPSBxdWVyeVBhcmFtc1N0cmluZyA/IGA/JHtxdWVyeVBhcmFtc1N0cmluZ31gIDogJyc7XG4gICAgY29uc3QgY3VycmVudENvbnRleHRJZCA9ICh0aGlzLnJvdXRlci51cmwubWF0Y2godGhpcy5JRF9SRUdFWCkgfHwgW10pLnNoaWZ0KCk7XG4gICAgaWYgKHRoaXMubmVlZHNSZWRpcmVjdExlZ2FjeSgpKSB7XG4gICAgICB0aGlzLnRhYnNTZXJ2aWNlLmZpcnN0VGFiJFxuICAgICAgICAucGlwZShmaWx0ZXIoKHRhYjogVGFiKSA9PiB0eXBlb2YgdGFiPy5wYXRoID09PSAnc3RyaW5nJykpXG4gICAgICAgIC5zdWJzY3JpYmUoKHRhYjogVGFiV2l0aFRlbXBsYXRlPHN0cmluZz4pID0+IHtcbiAgICAgICAgICBjb25zdCB0YWJQYXRoSWQgPSAodGFiLnBhdGgubWF0Y2godGhpcy5JRF9SRUdFWCkgfHwgW10pLnNoaWZ0KCk7XG4gICAgICAgICAgaWYgKGN1cnJlbnRDb250ZXh0SWQgPT09IHRhYlBhdGhJZCkge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChgJHt0YWIucGF0aH0ke3F1ZXJ5UGFyYW1zU3VmZml4fWAsIHsgcmVwbGFjZVVybDogdHJ1ZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbmVlZHNSZWRpcmVjdExlZ2FjeSgpOiBib29sZWFuIHtcbiAgICBjb25zdCB0cmVlOiBVcmxUcmVlID0gdGhpcy5yb3V0ZXIucGFyc2VVcmwodGhpcy5yb3V0ZXIudXJsKTtcbiAgICBjb25zdCBncm91cHM6IFVybFNlZ21lbnRHcm91cCA9IHRyZWUucm9vdC5jaGlsZHJlbltQUklNQVJZX09VVExFVF07XG5cbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRNYXRjaGluZ0NvbnRleHRSb3V0ZSh0aGlzLnJvdXRlci51cmwpO1xuICAgIGlmICghY29udGV4dCkge1xuICAgICAgcmV0dXJuIGdyb3Vwcy5zZWdtZW50cy5sZW5ndGggPT09IDI7XG4gICAgfVxuICAgIHJldHVybiBjb250ZXh0LnNwbGl0KCcvJykubGVuZ3RoID09PSBncm91cHMuc2VnbWVudHMubGVuZ3RoO1xuICB9XG5cbiAgcHJpdmF0ZSBuZWVkc1JlZGlyZWN0KGV2ZW50OiBBY3RpdmF0aW9uRW5kKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY29udGV4dFJvdXRlOiBWaWV3Q29udGV4dFJvb3RSb3V0ZSA9IGV2ZW50LnNuYXBzaG90LnJvdXRlQ29uZmlnIGFzIFZpZXdDb250ZXh0Um9vdFJvdXRlO1xuICAgIGlmICghY29udGV4dFJvdXRlLnJvb3RDb250ZXh0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGNvbnRleHRSb3V0ZUZyb21VcmwgPSB0aGlzLmdldE1hdGNoaW5nQ29udGV4dFJvdXRlKHRoaXMucm91dGVyLnVybCk7XG4gICAgcmV0dXJuIGNvbnRleHRSb3V0ZS5yb290Q29udGV4dCA9PT0gY29udGV4dFJvdXRlRnJvbVVybDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWF0Y2hpbmdDb250ZXh0Um91dGUodXJsOiBzdHJpbmcpOiBWaWV3Q29udGV4dCB7XG4gICAgY29uc3Qgdmlld0NvbnRleHRzID0gT2JqZWN0LnZhbHVlcyhWaWV3Q29udGV4dCk7XG4gICAgLy8gcmVwbGFjZSBhbGwgOmlkIHBsYWNlaG9sZGVycyB3aXRoIGEgcmVnZXggbWF0Y2hlciBmb3IgYSBudW1iZXJcbiAgICBjb25zdCByZWdleE1hdGNoZXJzID0gdmlld0NvbnRleHRzLm1hcChcbiAgICAgIGNvbnRleHQgPT4gYF4vJHtjb250ZXh0LnJlcGxhY2UoLzppZC9nLCAnKFswLTldKyknKX0oXFxcXD8uKik/JGBcbiAgICApO1xuICAgIGNvbnN0IG1hdGNoaW5nUmVnZXhDb250ZXh0ID0gcmVnZXhNYXRjaGVycy5maW5kKGNvbnRleHQgPT4gbmV3IFJlZ0V4cChjb250ZXh0KS50ZXN0KHVybCkpO1xuICAgIHJldHVybiBtYXRjaGluZ1JlZ2V4Q29udGV4dCA/IHZpZXdDb250ZXh0c1tyZWdleE1hdGNoZXJzLmluZGV4T2YobWF0Y2hpbmdSZWdleENvbnRleHQpXSA6IG51bGw7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -501,7 +501,7 @@ export class DatapointsExportSelectorFileExporterComponent {
|
|
|
501
501
|
}
|
|
502
502
|
}
|
|
503
503
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatapointsExportSelectorFileExporterComponent, deps: [{ token: i1.AggregationService }, { token: i2.DataProcessingService }, { token: i3.DatapointsExportSelectorFileExporterService }, { token: i4.DataFetchingService }, { token: i5.FormBuilder }, { token: FILE_GENERATORS }, { token: i1.GainsightService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
504
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DatapointsExportSelectorFileExporterComponent, isStandalone: true, selector: "c8y-datapoints-export-selector-file-exporter", inputs: { exportConfig: "exportConfig" }, outputs: { onDownloadButtonStateChange: "onDownloadButtonStateChange" }, ngImport: i0, template: "<div class=\"p-b-16\">\n <ng-container *ngIf=\"hasPermissionToReadAnyMeasurements; else hasNoRoleToReadAnyMeasurements\">\n <div class=\"p-16 text-center separator-bottom sticky-top bg-component\">\n <p class=\"text-medium text-16\">\n {{ 'Configure export' | translate }}\n </p>\n </div>\n <div\n class=\"p-t-24 p-r-16 p-l-16 gap-8 p-b-16 flex-wrap\"\n [ngClass]=\"{ 'separator-bottom': isFullTypeOfExport }\"\n >\n <div class=\"row\">\n <div class=\"col-md-4\">\n <c8y-datapoints-export-selector-time-range\n *ngIf=\"this.hasPermissionToReadAnyMeasurements\"\n [formGroup]=\"formGroup\"\n (onDateFromChange)=\"onDateFromChange($event)\"\n (onDateToChange)=\"onDateToChange($event)\"\n ></c8y-datapoints-export-selector-time-range>\n </div>\n <div class=\"col-md-4\">\n <c8y-datapoints-export-selector-data-scope\n *ngIf=\"this.hasPermissionToReadAnyMeasurements\"\n [disabledAggregationOptions]=\"disabledAggregationOptions\"\n [formGroup]=\"formGroup\"\n (onAggregationChange)=\"onAggregationChange($event)\"\n (onExportTypeChange)=\"onExportTypeChange($event)\"\n ></c8y-datapoints-export-selector-data-scope>\n </div>\n <div class=\"col-md-4\">\n <c8y-datapoints-export-selector-file-types\n *ngIf=\"this.hasPermissionToReadAnyMeasurements\"\n [dynamicFilesTypeMetadata]=\"dynamicFilesTypeMetadata\"\n [formGroup]=\"formGroup\"\n ></c8y-datapoints-export-selector-file-types>\n </div>\n </div>\n </div>\n <ng-container\n *ngIf=\"!isFullTypeOfExport && !hasFetchedDataAnyValuesToExport && !isPreviewLoading\"\n >\n <div class=\"p-t-24 p-r-16 p-l-16 p-b-16 d-flex\">\n <div\n class=\"alert alert-warning center-block\"\n role=\"alert\"\n data-cy=\"file-exporter--no-data-available\"\n translate\n >\n No data available.\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"datapointsExceedingBrowserDownloadLimit.length > 0\">\n <div class=\"p-t-24 p-r-16 p-l-16 p-b-16 separator-bottom d-flex\">\n <div\n [class]=\"\n hasNoExportableData\n ? 'alert alert-warning center-block'\n : 'alert alert-info center-block'\n \"\n role=\"alert\"\n [innerHTML]=\"limitExceededMessage\"\n ></div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"isFullTypeOfExport\">\n <c8y-datapoints-export-selector-preview\n *ngIf=\"this.hasPermissionToReadAnyMeasurements\"\n [hasFetchedDataAnyValuesToExport]=\"hasFetchedDataAnyValuesToExport\"\n [isPreviewLoading]=\"isPreviewLoading\"\n [previewTableData]=\"previewTableData\"\n ></c8y-datapoints-export-selector-preview>\n </ng-container>\n </ng-container>\n <ng-template #hasNoRoleToReadAnyMeasurements>\n <div class=\"p-t-24 p-r-16 p-l-16 p-b-16 d-flex\">\n <div\n class=\"alert alert-info center-block\"\n role=\"alert\"\n translate\n >\n <p>To export data, you must meet at least one of these criteria:</p>\n <ul>\n <li>\n Have\n <b>READ permission for \"Measurements\" permission type</b>\n (either as a global role or for the specific source)\n </li>\n <li>\n Be the\n <b>owner of the source</b>\n you want to export data from\n </li>\n </ul>\n <p>Don't meet these requirements? Contact your system administrator for assistance.</p>\n </div>\n </div>\n </ng-template>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: DataPointsExportSelectorDataScopeComponent, selector: "c8y-datapoints-export-selector-data-scope", inputs: ["disabledAggregationOptions", "formGroup"], outputs: ["onAggregationChange", "onExportTypeChange"] }, { kind: "component", type: DataPointsExportSelectorFileTypesComponent, selector: "c8y-datapoints-export-selector-file-types", inputs: ["dynamicFilesTypeMetadata", "formGroup"] }, { kind: "component", type: DataPointsExportSelectorPreviewComponent, selector: "c8y-datapoints-export-selector-preview", inputs: ["hasFetchedDataAnyValuesToExport", "isPreviewLoading", "previewTableData"] }, { kind: "component", type: DataPointsExportSelectorTimeRangeComponent, selector: "c8y-datapoints-export-selector-time-range", inputs: ["formGroup"], outputs: ["onDateFromChange", "onDateToChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }] }); }
|
|
504
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DatapointsExportSelectorFileExporterComponent, isStandalone: true, selector: "c8y-datapoints-export-selector-file-exporter", inputs: { exportConfig: "exportConfig" }, outputs: { onDownloadButtonStateChange: "onDownloadButtonStateChange" }, ngImport: i0, template: "<div class=\"p-b-16\">\n <ng-container *ngIf=\"hasPermissionToReadAnyMeasurements; else hasNoRoleToReadAnyMeasurements\">\n <div class=\"p-16 text-center separator-bottom sticky-top bg-component\">\n <p class=\"text-medium text-16\">\n {{ 'Configure export' | translate }}\n </p>\n </div>\n <div\n class=\"p-t-24 p-r-16 p-l-16 gap-8 p-b-16 flex-wrap\"\n [ngClass]=\"{ 'separator-bottom': isFullTypeOfExport }\"\n >\n <div class=\"row\">\n <div class=\"col-md-4\">\n <c8y-datapoints-export-selector-time-range\n *ngIf=\"this.hasPermissionToReadAnyMeasurements\"\n [formGroup]=\"formGroup\"\n (onDateFromChange)=\"onDateFromChange($event)\"\n (onDateToChange)=\"onDateToChange($event)\"\n ></c8y-datapoints-export-selector-time-range>\n </div>\n <div class=\"col-md-4\">\n <c8y-datapoints-export-selector-data-scope\n *ngIf=\"this.hasPermissionToReadAnyMeasurements\"\n [disabledAggregationOptions]=\"disabledAggregationOptions\"\n [formGroup]=\"formGroup\"\n (onAggregationChange)=\"onAggregationChange($event)\"\n (onExportTypeChange)=\"onExportTypeChange($event)\"\n ></c8y-datapoints-export-selector-data-scope>\n </div>\n <div class=\"col-md-4\">\n <c8y-datapoints-export-selector-file-types\n *ngIf=\"this.hasPermissionToReadAnyMeasurements\"\n [dynamicFilesTypeMetadata]=\"dynamicFilesTypeMetadata\"\n [formGroup]=\"formGroup\"\n ></c8y-datapoints-export-selector-file-types>\n </div>\n </div>\n </div>\n <ng-container\n *ngIf=\"!isFullTypeOfExport && !hasFetchedDataAnyValuesToExport && !isPreviewLoading\"\n >\n <div class=\"p-t-24 p-r-16 p-l-16 p-b-16 d-flex\">\n <div\n class=\"alert alert-warning center-block\"\n role=\"alert\"\n data-cy=\"file-exporter--no-data-available\"\n translate\n >\n No data available.\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"datapointsExceedingBrowserDownloadLimit.length > 0\">\n <div class=\"p-t-24 p-r-16 p-l-16 p-b-16 separator-bottom d-flex\">\n <div\n [class]=\"\n hasNoExportableData\n ? 'alert alert-warning center-block'\n : 'alert alert-info center-block'\n \"\n role=\"alert\"\n [attr.data-cy]=\"\n hasNoExportableData\n ? 'file-exporter--over-one-million-message'\n : 'file-exporter--over-50k-message'\n \"\n [innerHTML]=\"limitExceededMessage\"\n ></div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"isFullTypeOfExport\">\n <c8y-datapoints-export-selector-preview\n *ngIf=\"this.hasPermissionToReadAnyMeasurements\"\n [hasFetchedDataAnyValuesToExport]=\"hasFetchedDataAnyValuesToExport\"\n [isPreviewLoading]=\"isPreviewLoading\"\n [previewTableData]=\"previewTableData\"\n ></c8y-datapoints-export-selector-preview>\n </ng-container>\n </ng-container>\n <ng-template #hasNoRoleToReadAnyMeasurements>\n <div class=\"p-t-24 p-r-16 p-l-16 p-b-16 d-flex\">\n <div\n class=\"alert alert-info center-block\"\n role=\"alert\"\n translate\n >\n <p>To export data, you must meet at least one of these criteria:</p>\n <ul>\n <li>\n Have\n <b>READ permission for \"Measurements\" permission type</b>\n (either as a global role or for the specific source)\n </li>\n <li>\n Be the\n <b>owner of the source</b>\n you want to export data from\n </li>\n </ul>\n <p>Don't meet these requirements? Contact your system administrator for assistance.</p>\n </div>\n </div>\n </ng-template>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: DataPointsExportSelectorDataScopeComponent, selector: "c8y-datapoints-export-selector-data-scope", inputs: ["disabledAggregationOptions", "formGroup"], outputs: ["onAggregationChange", "onExportTypeChange"] }, { kind: "component", type: DataPointsExportSelectorFileTypesComponent, selector: "c8y-datapoints-export-selector-file-types", inputs: ["dynamicFilesTypeMetadata", "formGroup"] }, { kind: "component", type: DataPointsExportSelectorPreviewComponent, selector: "c8y-datapoints-export-selector-preview", inputs: ["hasFetchedDataAnyValuesToExport", "isPreviewLoading", "previewTableData"] }, { kind: "component", type: DataPointsExportSelectorTimeRangeComponent, selector: "c8y-datapoints-export-selector-time-range", inputs: ["formGroup"], outputs: ["onDateFromChange", "onDateToChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }] }); }
|
|
505
505
|
}
|
|
506
506
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatapointsExportSelectorFileExporterComponent, decorators: [{
|
|
507
507
|
type: Component,
|
|
@@ -512,7 +512,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
512
512
|
DataPointsExportSelectorPreviewComponent,
|
|
513
513
|
DataPointsExportSelectorTimeRangeComponent,
|
|
514
514
|
ReactiveFormsModule
|
|
515
|
-
], template: "<div class=\"p-b-16\">\n <ng-container *ngIf=\"hasPermissionToReadAnyMeasurements; else hasNoRoleToReadAnyMeasurements\">\n <div class=\"p-16 text-center separator-bottom sticky-top bg-component\">\n <p class=\"text-medium text-16\">\n {{ 'Configure export' | translate }}\n </p>\n </div>\n <div\n class=\"p-t-24 p-r-16 p-l-16 gap-8 p-b-16 flex-wrap\"\n [ngClass]=\"{ 'separator-bottom': isFullTypeOfExport }\"\n >\n <div class=\"row\">\n <div class=\"col-md-4\">\n <c8y-datapoints-export-selector-time-range\n *ngIf=\"this.hasPermissionToReadAnyMeasurements\"\n [formGroup]=\"formGroup\"\n (onDateFromChange)=\"onDateFromChange($event)\"\n (onDateToChange)=\"onDateToChange($event)\"\n ></c8y-datapoints-export-selector-time-range>\n </div>\n <div class=\"col-md-4\">\n <c8y-datapoints-export-selector-data-scope\n *ngIf=\"this.hasPermissionToReadAnyMeasurements\"\n [disabledAggregationOptions]=\"disabledAggregationOptions\"\n [formGroup]=\"formGroup\"\n (onAggregationChange)=\"onAggregationChange($event)\"\n (onExportTypeChange)=\"onExportTypeChange($event)\"\n ></c8y-datapoints-export-selector-data-scope>\n </div>\n <div class=\"col-md-4\">\n <c8y-datapoints-export-selector-file-types\n *ngIf=\"this.hasPermissionToReadAnyMeasurements\"\n [dynamicFilesTypeMetadata]=\"dynamicFilesTypeMetadata\"\n [formGroup]=\"formGroup\"\n ></c8y-datapoints-export-selector-file-types>\n </div>\n </div>\n </div>\n <ng-container\n *ngIf=\"!isFullTypeOfExport && !hasFetchedDataAnyValuesToExport && !isPreviewLoading\"\n >\n <div class=\"p-t-24 p-r-16 p-l-16 p-b-16 d-flex\">\n <div\n class=\"alert alert-warning center-block\"\n role=\"alert\"\n data-cy=\"file-exporter--no-data-available\"\n translate\n >\n No data available.\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"datapointsExceedingBrowserDownloadLimit.length > 0\">\n <div class=\"p-t-24 p-r-16 p-l-16 p-b-16 separator-bottom d-flex\">\n <div\n [class]=\"\n hasNoExportableData\n ? 'alert alert-warning center-block'\n : 'alert alert-info center-block'\n \"\n role=\"alert\"\n [innerHTML]=\"limitExceededMessage\"\n ></div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"isFullTypeOfExport\">\n <c8y-datapoints-export-selector-preview\n *ngIf=\"this.hasPermissionToReadAnyMeasurements\"\n [hasFetchedDataAnyValuesToExport]=\"hasFetchedDataAnyValuesToExport\"\n [isPreviewLoading]=\"isPreviewLoading\"\n [previewTableData]=\"previewTableData\"\n ></c8y-datapoints-export-selector-preview>\n </ng-container>\n </ng-container>\n <ng-template #hasNoRoleToReadAnyMeasurements>\n <div class=\"p-t-24 p-r-16 p-l-16 p-b-16 d-flex\">\n <div\n class=\"alert alert-info center-block\"\n role=\"alert\"\n translate\n >\n <p>To export data, you must meet at least one of these criteria:</p>\n <ul>\n <li>\n Have\n <b>READ permission for \"Measurements\" permission type</b>\n (either as a global role or for the specific source)\n </li>\n <li>\n Be the\n <b>owner of the source</b>\n you want to export data from\n </li>\n </ul>\n <p>Don't meet these requirements? Contact your system administrator for assistance.</p>\n </div>\n </div>\n </ng-template>\n</div>\n" }]
|
|
515
|
+
], template: "<div class=\"p-b-16\">\n <ng-container *ngIf=\"hasPermissionToReadAnyMeasurements; else hasNoRoleToReadAnyMeasurements\">\n <div class=\"p-16 text-center separator-bottom sticky-top bg-component\">\n <p class=\"text-medium text-16\">\n {{ 'Configure export' | translate }}\n </p>\n </div>\n <div\n class=\"p-t-24 p-r-16 p-l-16 gap-8 p-b-16 flex-wrap\"\n [ngClass]=\"{ 'separator-bottom': isFullTypeOfExport }\"\n >\n <div class=\"row\">\n <div class=\"col-md-4\">\n <c8y-datapoints-export-selector-time-range\n *ngIf=\"this.hasPermissionToReadAnyMeasurements\"\n [formGroup]=\"formGroup\"\n (onDateFromChange)=\"onDateFromChange($event)\"\n (onDateToChange)=\"onDateToChange($event)\"\n ></c8y-datapoints-export-selector-time-range>\n </div>\n <div class=\"col-md-4\">\n <c8y-datapoints-export-selector-data-scope\n *ngIf=\"this.hasPermissionToReadAnyMeasurements\"\n [disabledAggregationOptions]=\"disabledAggregationOptions\"\n [formGroup]=\"formGroup\"\n (onAggregationChange)=\"onAggregationChange($event)\"\n (onExportTypeChange)=\"onExportTypeChange($event)\"\n ></c8y-datapoints-export-selector-data-scope>\n </div>\n <div class=\"col-md-4\">\n <c8y-datapoints-export-selector-file-types\n *ngIf=\"this.hasPermissionToReadAnyMeasurements\"\n [dynamicFilesTypeMetadata]=\"dynamicFilesTypeMetadata\"\n [formGroup]=\"formGroup\"\n ></c8y-datapoints-export-selector-file-types>\n </div>\n </div>\n </div>\n <ng-container\n *ngIf=\"!isFullTypeOfExport && !hasFetchedDataAnyValuesToExport && !isPreviewLoading\"\n >\n <div class=\"p-t-24 p-r-16 p-l-16 p-b-16 d-flex\">\n <div\n class=\"alert alert-warning center-block\"\n role=\"alert\"\n data-cy=\"file-exporter--no-data-available\"\n translate\n >\n No data available.\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"datapointsExceedingBrowserDownloadLimit.length > 0\">\n <div class=\"p-t-24 p-r-16 p-l-16 p-b-16 separator-bottom d-flex\">\n <div\n [class]=\"\n hasNoExportableData\n ? 'alert alert-warning center-block'\n : 'alert alert-info center-block'\n \"\n role=\"alert\"\n [attr.data-cy]=\"\n hasNoExportableData\n ? 'file-exporter--over-one-million-message'\n : 'file-exporter--over-50k-message'\n \"\n [innerHTML]=\"limitExceededMessage\"\n ></div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"isFullTypeOfExport\">\n <c8y-datapoints-export-selector-preview\n *ngIf=\"this.hasPermissionToReadAnyMeasurements\"\n [hasFetchedDataAnyValuesToExport]=\"hasFetchedDataAnyValuesToExport\"\n [isPreviewLoading]=\"isPreviewLoading\"\n [previewTableData]=\"previewTableData\"\n ></c8y-datapoints-export-selector-preview>\n </ng-container>\n </ng-container>\n <ng-template #hasNoRoleToReadAnyMeasurements>\n <div class=\"p-t-24 p-r-16 p-l-16 p-b-16 d-flex\">\n <div\n class=\"alert alert-info center-block\"\n role=\"alert\"\n translate\n >\n <p>To export data, you must meet at least one of these criteria:</p>\n <ul>\n <li>\n Have\n <b>READ permission for \"Measurements\" permission type</b>\n (either as a global role or for the specific source)\n </li>\n <li>\n Be the\n <b>owner of the source</b>\n you want to export data from\n </li>\n </ul>\n <p>Don't meet these requirements? Contact your system administrator for assistance.</p>\n </div>\n </div>\n </ng-template>\n</div>\n" }]
|
|
516
516
|
}], ctorParameters: () => [{ type: i1.AggregationService }, { type: i2.DataProcessingService }, { type: i3.DatapointsExportSelectorFileExporterService }, { type: i4.DataFetchingService }, { type: i5.FormBuilder }, { type: undefined, decorators: [{
|
|
517
517
|
type: Inject,
|
|
518
518
|
args: [FILE_GENERATORS]
|
|
@@ -521,4 +521,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
521
521
|
}], onDownloadButtonStateChange: [{
|
|
522
522
|
type: Output
|
|
523
523
|
}] } });
|
|
524
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItZmlsZS1leHBvcnRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1tb2RhbC9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1maWxlLWV4cG9ydGVyL2RhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yLWZpbGUtZXhwb3J0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3IvZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItbW9kYWwvZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItZmlsZS1leHBvcnRlci9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1maWxlLWV4cG9ydGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixjQUFjLEVBQ2QsS0FBSyxFQUdMLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBRUwsV0FBVyxFQUNYLFdBQVcsRUFDWCxtQkFBbUIsRUFHcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0wsa0JBQWtCLEVBR2xCLGtCQUFrQixFQUNsQixVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2pCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxNQUFNLE1BQU0sWUFBWSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0QsT0FBTyxFQU9MLGtCQUFrQixFQU9sQiw2Q0FBNkMsRUFDN0Ms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akYsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLElBQUksa0JBQWtCLENBQUMsSUFBSTthQUM5RSxDQUNGLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQzsrR0E3ckJVLDZDQUE2QyxrTkFxRzlDLGVBQWU7bUdBckdkLDZDQUE2QywyTkNsRzFELDR1SEFtR0EsMkNEVEksVUFBVSw4cUJBQ1YsMENBQTBDLG1NQUMxQywwQ0FBMEMseUlBQzFDLHdDQUF3Qyx3S0FDeEMsMENBQTBDLDZKQUMxQyxtQkFBbUI7OzRGQUdWLDZDQUE2QztrQkFiekQsU0FBUzsrQkFDRSw4Q0FBOEMsY0FFNUMsSUFBSSxXQUNQO3dCQUNQLFVBQVU7d0JBQ1YsMENBQTBDO3dCQUMxQywwQ0FBMEM7d0JBQzFDLHdDQUF3Qzt3QkFDeEMsMENBQTBDO3dCQUMxQyxtQkFBbUI7cUJBQ3BCOzswQkF1R0UsTUFBTTsyQkFBQyxlQUFlO3dFQXBHaEIsWUFBWTtzQkFBcEIsS0FBSztnQkFDSSwyQkFBMkI7c0JBQXBDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbmplY3Rpb25Ub2tlbixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIEZvcm1CdWlsZGVyLFxuICBGb3JtQ29udHJvbCxcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgVmFsaWRhdGlvbkVycm9ycyxcbiAgVmFsaWRhdG9yRm5cbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgQUdHUkVHQVRJT05fVkFMVUVTLFxuICBBZ2dyZWdhdGlvbk9wdGlvbixcbiAgQWdncmVnYXRpb25PcHRpb25TdGF0dXMsXG4gIEFnZ3JlZ2F0aW9uU2VydmljZSxcbiAgQ29yZU1vZHVsZSxcbiAgR2FpbnNpZ2h0U2VydmljZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCBzYXZlQXMgZnJvbSAnZmlsZS1zYXZlcic7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIG1lcmdlLCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIERhdGFwb2ludENvdW50cyxcbiAgRGF0YXBvaW50RGV0YWlscyxcbiAgRGF0YXBvaW50c0V4Y2VlZGluZ0xpbWl0LFxuICBEYXRhVG9FeHBvcnQsXG4gIERhdGFUb0V4cG9ydFdpdGhCYWNrZW5kQ3JlYXRlZEZpbGUsXG4gIERhdGVGZXRjaENvbmZpZyxcbiAgRVhQT1JUX01PREVfVkFMVUVTLFxuICBFeHBvcnRDb25maWcsXG4gIEV4cG9ydERhdGEsXG4gIEZpbGVFeHBvcnRDb25maWcsXG4gIEZpbGVHZW5lcmF0b3IsXG4gIEZpbGVUeXBlTWV0YWRhdGEsXG4gIE1lcmdlZEV4cG9ydERldGFpbHMsXG4gIFBST0RVQ1RfRVhQRVJJRU5DRV9EQVRBUE9JTlRTX0VYUE9SVF9TRUxFQ1RPUixcbiAgU0VSSUVTX0RBVEFfTUVSR0VEX0ZJTEVfTkFNRVxufSBmcm9tICcuLi8uLi9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci5tb2RlbCc7XG5pbXBvcnQgeyBEYXRhRmV0Y2hpbmdTZXJ2aWNlIH0gZnJvbSAnLi9kYXRhLWZldGNoaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0YVByb2Nlc3NpbmdTZXJ2aWNlIH0gZnJvbSAnLi9kYXRhLXByb2Nlc3Npbmcuc2VydmljZSc7XG5pbXBvcnQgeyBEYXRhcG9pbnRzRXhwb3J0U2VsZWN0b3JGaWxlRXhwb3J0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1maWxlLWV4cG9ydGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0YVBvaW50c0V4cG9ydFNlbGVjdG9yUHJldmlld0NvbXBvbmVudCB9IGZyb20gJy4vZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItcHJldmlldy9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1wcmV2aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRhUG9pbnRzRXhwb3J0U2VsZWN0b3JEYXRhU2NvcGVDb21wb25lbnQgfSBmcm9tICcuL2RhdGFwb2ludHMtZXhwb3J0cy1zZWxlY3Rvci1kYXRhLXNjb3BlL2RhdGFwb2ludHMtZXhwb3J0cy1zZWxlY3Rvci1kYXRhLXNjb3BlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRhUG9pbnRzRXhwb3J0U2VsZWN0b3JGaWxlVHlwZXNDb21wb25lbnQgfSBmcm9tICcuL2RhdGFwb2ludHMtZXhwb3J0cy1zZWxlY3Rvci1maWxlLXR5cGVzL2RhdGFwb2ludHMtZXhwb3J0cy1zZWxlY3Rvci1maWxlLXR5cGVzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRhUG9pbnRzRXhwb3J0U2VsZWN0b3JUaW1lUmFuZ2VDb21wb25lbnQgfSBmcm9tICcuL2RhdGFwb2ludHMtZXhwb3J0cy1zZWxlY3Rvci10aW1lLXJhbmdlL2RhdGFwb2ludHMtZXhwb3J0cy1zZWxlY3Rvci10aW1lLXJhbmdlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDU1ZHZW5lcmF0b3JBZGFwdGVyIH0gZnJvbSAnLi9nZW5lcmF0b3JzL2Nzdi1nZW5lcmF0b3InO1xuaW1wb3J0IHsgRXhjZWxHZW5lcmF0b3JBZGFwdGVyIH0gZnJvbSAnLi9nZW5lcmF0b3JzL2V4Y2VsLWdlbmVyYXRvcic7XG5cbmV4cG9ydCBjb25zdCBGSUxFX0dFTkVSQVRPUlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48RmlsZUdlbmVyYXRvcltdPignRklMRV9HRU5FUkFUT1JTJywge1xuICBwcm92aWRlZEluOiAncm9vdCcsXG4gIGZhY3Rvcnk6ICgpID0+IFtFeGNlbEdlbmVyYXRvckFkYXB0ZXIsIENTVkdlbmVyYXRvckFkYXB0ZXJdXG59KTtcblxuZXhwb3J0IGNvbnN0IGRhdGVSYW5nZVZhbGlkYXRvcjogVmFsaWRhdG9yRm4gPSAoXG4gIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbFxuKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICBjb25zdCBkYXRlRnJvbSA9IGNvbnRyb2wuZ2V0KCdkYXRlRnJvbScpO1xuICBjb25zdCBkYXRlVG8gPSBjb250cm9sLmdldCgnZGF0ZVRvJyk7XG5cbiAgaWYgKCFkYXRlRnJvbSB8fCAhZGF0ZVRvKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBkYXRlRnJvbVZhbHVlID0gZGF0ZUZyb20udmFsdWU7XG4gIGNvbnN0IGRhdGVUb1ZhbHVlID0gZGF0ZVRvLnZhbHVlO1xuICBpZiAoZGF0ZUZyb21WYWx1ZSAmJiBkYXRlVG9WYWx1ZSkge1xuICAgIGlmIChuZXcgRGF0ZShkYXRlRnJvbVZhbHVlKSA+IG5ldyBEYXRlKGRhdGVUb1ZhbHVlKSkge1xuICAgICAgZGF0ZUZyb20uc2V0RXJyb3JzKHsgZGF0ZUFmdGVyUmFuZ2VNYXg6IHRydWUgfSk7XG4gICAgICBkYXRlVG8uc2V0RXJyb3JzKHsgZGF0ZUJlZm9yZVJhbmdlTWluOiB0cnVlIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRlRnJvbS5zZXRFcnJvcnMobnVsbCk7XG4gICAgICBkYXRlVG8uc2V0RXJyb3JzKG51bGwpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1maWxlLWV4cG9ydGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yLWZpbGUtZXhwb3J0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29yZU1vZHVsZSxcbiAgICBEYXRhUG9pbnRzRXhwb3J0U2VsZWN0b3JEYXRhU2NvcGVDb21wb25lbnQsXG4gICAgRGF0YVBvaW50c0V4cG9ydFNlbGVjdG9yRmlsZVR5cGVzQ29tcG9uZW50LFxuICAgIERhdGFQb2ludHNFeHBvcnRTZWxlY3RvclByZXZpZXdDb21wb25lbnQsXG4gICAgRGF0YVBvaW50c0V4cG9ydFNlbGVjdG9yVGltZVJhbmdlQ29tcG9uZW50LFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBEYXRhcG9pbnRzRXhwb3J0U2VsZWN0b3JGaWxlRXhwb3J0ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIGV4cG9ydENvbmZpZzogRXhwb3J0Q29uZmlnO1xuICBAT3V0cHV0KCkgb25Eb3dubG9hZEJ1dHRvblN0YXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLyoqXG4gICAqIFJlcHJlc2VudHMgYWdncmVnYXRpb24gc2VsZWN0b3Igb3B0aW9ucyB0aGF0IGFyZSBkaXNhYmxlZC5cbiAgICogVGhpcyBzdGF0ZSBpcyBkZXRlcm1pbmVkIGJhc2VkIG9uIHRoZSBjdXJyZW50IGRhdGUgcmFuZ2UuXG4gICAqL1xuICBkaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9uczogQWdncmVnYXRpb25PcHRpb25TdGF0dXMgPSB7fTtcblxuICBmb3JtR3JvdXA6IFJldHVyblR5cGU8RGF0YXBvaW50c0V4cG9ydFNlbGVjdG9yRmlsZUV4cG9ydGVyQ29tcG9uZW50WydjcmVhdGVGb3JtJ10+O1xuXG4gIC8qKlxuICAgKiBDb250YWlucyBhbGwgZGF0YXBvaW50cyB0aGF0IG51bWJlciBvZiByZWNvcmRzIGV4Y2VlZHMgYSB0aHJlc2hvbGQsIHdoZXJlIGRhdGEgZm9yIHRoZXNlIGRhdGFwb2ludHMgd2lsbCBiZSBwcm9jZXNzZWQgYnkgdGhlIGJhY2tlbmQuXG4gICAqIEFwcGxpZXMgb25seSB0byBtZWFzdXJlbWVudCBBUEkgd2hpY2ggY2FuIHJldHVybiBwcm9jZXNzZWQgQ1NWLCBFeGNlbCBvciBYTUwgZGF0YS5cbiAgICovXG4gIGRhdGFwb2ludHNFeGNlZWRpbmdCcm93c2VyRG93bmxvYWRMaW1pdDogRGF0YXBvaW50c0V4Y2VlZGluZ0xpbWl0W10gPSBbXTtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIGFueSBvZiBEYXRhVG9FeHBvcnQgb2JqZWN0cyB0aW1lVmFsdWVNYXAgcHJvcGVydHkgaXMgbm90IHVuZGVmaW5lZCAoc2VyaWVzIGRhdGEpXG4gICAqIG9yIGRhdGFQb2ludFRvRXhwb3J0IGlzIG5vdCB1bmRlZmluZWQgYXQgYWxsIChtZWFzdXJlbWVudCBkYXRhKS5cbiAgICovXG5cbiAgaGFzRmV0Y2hlZERhdGFBbnlWYWx1ZXNUb0V4cG9ydCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlcmUgaXMgbm8gZXhwb3J0YWJsZSBkYXRhIGJlY2F1c2UgdGhlIGRhdGUgcmFuZ2Ugb2YgYWxsIHNlbGVjdGVkIGRhdGFwb2ludHMgZXhjZWVkcyAxLDAwMCwwMDAgcmVjb3Jkcy5cbiAgICovXG4gIGhhc05vRXhwb3J0YWJsZURhdGE6IGJvb2xlYW47XG5cbiAgaGFzUGVybWlzc2lvblRvUmVhZEFueU1lYXN1cmVtZW50cyA9IGZhbHNlO1xuXG4gIGlzUHJldmlld0xvYWRpbmcgPSB0cnVlO1xuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGZ1bGwgb3IgY29tcGFjdCB0eXBlIG9mIGV4cG9ydCBpcyBzZWxlY3RlZC5cbiAgICogRnVsbCB0eXBlIG9mIGV4cG9ydCBpcyBiYXNlZCBvbiBtZWFzdXJlbWVudCBBUEkgZGF0YS5cbiAgICogQ29tcGFjdCB0eXBlIG9mIGV4cG9ydCBpcyBiYXNlZCBvbiBzZXJpZXMgQVBJIGRhdGEuXG4gICAqL1xuICBpc0Z1bGxUeXBlT2ZFeHBvcnQgPSBmYWxzZTtcblxuICBwcmV2aWV3VGFibGVEYXRhOiBFeHBvcnREYXRhW107XG5cbiAgbGltaXRFeGNlZWRlZE1lc3NhZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogQ29udGFpbnMgcHJvY2Vzc2VkIGRhdGEgdGhhdCBpcyBwcmVwYXJlZCB0byBiZSBleHBvcnRlZCBpZiBzZXJpZXMgZGF0YSB3YXMgZmV0Y2hlZFxuICAgKiBvciBzaG93biBpbiB0aGUgcHJldmlldyB0YWJsZSBpbiBjYXNlIG9mIG1lYXN1cmVtZW50cyBkYXRhLlxuICAgKi9cbiAgcHJpdmF0ZSBkYXRhVG9FeHBvcnQ6IERhdGFUb0V4cG9ydFtdO1xuICAvKipcbiAgICogQ29udGFpbnMgYSBsaXN0IG9mIGRhdGFwb2ludHMgdGhhdCBzZWxlY3RlZCBkYXRlIHJhbmdlIGV4Y2VlZHMgQVBJIGxpbWl0IG9mIDFfMDAwXzAwMCByZWNvcmRzLlxuICAgKi9cbiAgcHJpdmF0ZSBkYXRhUG9pbnRzRXhjZWVkaW5nT25lTWlsbGlvbkxpbWl0OiBEYXRhcG9pbnRzRXhjZWVkaW5nTGltaXRbXTtcbiAgLyoqXG4gICAqIFJlcHJlc2VudHMgdGhlIHN0YXRlIG9mIGZpbGUgdHlwZSBzZWxlY3Rpb24gY2hlY2tib3hlcy5cbiAgICovXG4gIHByaXZhdGUgZmlsZVR5cGVTZWxlY3Rpb25TdGF0ZTogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH07XG4gIC8qKlxuICAgKiBIb2xkIHRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBhZ2dyZWdhdGlvbiBmcm9tIHRoZSBleHBvcnQgY29uZmlnLlxuICAgKiBWYWx1ZSB3aWxsIGJlIGxvYWRlZCBvbiBjb21wb25lbnQgZGVzdHJveS5cbiAgICovXG4gIHByaXZhdGUgaW5pdGlhbEFnZ3JlZ2F0aW9uOiBBZ2dyZWdhdGlvbk9wdGlvbjtcbiAgLyoqXG4gICAqIEhvbGQgdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIGRhdGVGcm9tIGZyb20gdGhlIGV4cG9ydCBjb25maWcuXG4gICAqIFZhbHVlIHdpbGwgYmUgbG9hZGVkIG9uIGNvbXBvbmVudCBkZXN0cm95LlxuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsRGF0ZUZyb206IHN0cmluZztcbiAgLyoqXG4gICAqIEhvbGQgdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIGRhdGVUbyBmcm9tIHRoZSBleHBvcnQgY29uZmlnLlxuICAgKiBWYWx1ZSB3aWxsIGJlIGxvYWRlZCBvbiBjb21wb25lbnQgZGVzdHJveS5cbiAgICovXG4gIHByaXZhdGUgaW5pdGlhbERhdGVUbzogc3RyaW5nO1xuICAvKipcbiAgICogSG9sZCB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgZGF0YXBvaW50RGV0YWlscyBmcm9tIHRoZSBleHBvcnQgY29uZmlnLlxuICAgKiBTb21lIGxvZ2ljIG1heSBmaWx0ZXIgb3V0IGRhdGFwb2ludHMgaW4gZGF0YXBvaW50RGV0YWlscyBhcnJheSwgdGhhdCBleGNlZWRzIDFfMDAwXzAwMCBsaW1pdCBmb3IgbWVhc3VyZW1lbnRzIEFQSSxcbiAgICogYnV0IGZ1bGwgbGlzdCBpcyBzdGlsbCBuZWVkZWQgd2hlbiBjb21wb25lbnQgaXMgcmVvcGVuZWQuXG4gICAqIFZhbHVlIHdpbGwgYmUgbG9hZGVkIG9uIGNvbXBvbmVudCBkZXN0cm95LlxuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsRGF0YXBvaW50RGV0YWlsczogRGF0YXBvaW50RGV0YWlsc1tdO1xuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGFnZ3JlZ2F0aW9uIHZhbHVlIHdhcyBjaGFuZ2VkIHByb2dyYW1tYXRpY2FsbHkuXG4gICAqIEl0IHByZXZlbnRzIGEgY2FzZSB3aGVyZSBmZXRjaGluZyBtYXkgYmUgdHJpZ2dlcmVkIHR3aWNlIHdoZW4gZXhwb3J0IHR5cGUgaXMgY2hhbmdlZC5cbiAgICogQm90aCBvcHRpb25zIGFsb25lIGNhbiB0cmlnZ2VyIGZldGNoaW5nIGRhdGEuXG4gICAqL1xuICBwcml2YXRlIGlzQWdncmVnYXRpb25DaGFuZ2VkUHJvZ3JhbW1hdGljYWxseSA9IGZhbHNlO1xuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgYW55IG9mIHRoZSBleHBvcnQgZmlsZSB0eXBlcyAoQ1NWLCBFeGNlbCkgYXJlIGNoZWNrZWQuXG4gICAqL1xuICBwcml2YXRlIGlzQW55T2ZFeHBvcnRGaWxlVHlwZUNoZWNrZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGRhdGVGcm9tU3ViamVjdCA9IG5ldyBTdWJqZWN0PERhdGVGZXRjaENvbmZpZz4oKTtcbiAgcHJpdmF0ZSBkYXRlVG9TdWJqZWN0ID0gbmV3IFN1YmplY3Q8RGF0ZUZldGNoQ29uZmlnPigpO1xuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBkeW5hbWljRmlsZXNUeXBlTWV0YWRhdGE6IHsgW2tleTogc3RyaW5nXTogRmlsZVR5cGVNZXRhZGF0YSB9ID0ge307XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhZ2dyZWdhdGlvblNlcnZpY2U6IEFnZ3JlZ2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGRhdGFwb2ludHNFeHBvcnRNb2RhbFNlcnZpY2U6IERhdGFQcm9jZXNzaW5nU2VydmljZSxcbiAgICBwcml2YXRlIGRhdGFwb2ludHNFeHBvcnRTZWxlY3RvckZpbGVFeHBvcnRlclNlcnZpY2U6IERhdGFwb2ludHNFeHBvcnRTZWxlY3RvckZpbGVFeHBvcnRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXRhRmV0Y2hpbmdTZXJ2aWNlOiBEYXRhRmV0Y2hpbmdTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIEBJbmplY3QoRklMRV9HRU5FUkFUT1JTKSBwcml2YXRlIGdlbmVyYXRvcnM6IEZpbGVHZW5lcmF0b3JbXSxcbiAgICBwcml2YXRlIGdhaW5zaWdodFNlcnZpY2U6IEdhaW5zaWdodFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5zZXRGaWxlc1R5cGUodGhpcy5nZW5lcmF0b3JzKTtcblxuICAgIHRoaXMuZGF0ZUZyb21TdWJqZWN0XG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoMzAwKSwgdGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAuc3Vic2NyaWJlKGFzeW5jIChkYXRlSW5mbzogRGF0ZUZldGNoQ29uZmlnKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlRGF0ZUFuZEZldGNoRGF0YSgnZGF0ZUZyb20nLCBkYXRlSW5mbyk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuZGF0ZVRvU3ViamVjdFxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDMwMCksIHRha2VVbnRpbERlc3Ryb3llZCgpKVxuICAgICAgLnN1YnNjcmliZShhc3luYyAoZGF0ZUluZm86IERhdGVGZXRjaENvbmZpZykgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZURhdGVBbmRGZXRjaERhdGEoJ2RhdGVUbycsIGRhdGVJbmZvKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgc2V0RmlsZXNUeXBlKGdlbmVyYXRvcnM6IEZpbGVHZW5lcmF0b3JbXSkge1xuICAgIGdlbmVyYXRvcnMuZm9yRWFjaChnID0+IHtcbiAgICAgIHRoaXMuZHluYW1pY0ZpbGVzVHlwZU1ldGFkYXRhW2cuZ2V0VHlwZSgpXSA9IHtcbiAgICAgICAgbGFiZWw6IGcuZ2V0TGFiZWwoKSxcbiAgICAgICAgaWNvbjogZy5nZXRJY29uKCksXG4gICAgICAgIHRpdGxlOiBnLmdldFRpdGxlKCksXG4gICAgICAgIGV4dGVuc2lvbjogZy5nZXRGaWxlRXh0ZW5zaW9uKCksXG4gICAgICAgIHppcE5hbWU6IGcuZ2V0WmlwTmFtZSgpLFxuICAgICAgICB0eXBlOiBnLmdldFR5cGUoKVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNvdXJjZXNQZXJtaXR0ZWRUb1JlYWQ6IHN0cmluZ1tdID1cbiAgICAgIGF3YWl0IHRoaXMuZGF0YUZldGNoaW5nU2VydmljZS5nZXRTb3VyY2VzV2l0aFBlcm1pc3Npb25zVG9SZWFkKFxuICAgICAgICB0aGlzLmV4cG9ydENvbmZpZy5kYXRhcG9pbnREZXRhaWxzXG4gICAgICApO1xuXG4gICAgaWYgKHNvdXJjZXNQZXJtaXR0ZWRUb1JlYWQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHNvdXJjZXNQZXJtaXR0ZWRUb1JlYWQubGVuZ3RoICE9PSB0aGlzLmV4cG9ydENvbmZpZy5kYXRhcG9pbnREZXRhaWxzLmxlbmd0aCkge1xuICAgICAgdGhpcy5leHBvcnRDb25maWcuZGF0YXBvaW50RGV0YWlscyA9IHRoaXMuZXhwb3J0Q29uZmlnLmRhdGFwb2ludERldGFpbHMuZmlsdGVyKGRhdGFQb2ludCA9PlxuICAgICAgICBzb3VyY2VzUGVybWl0dGVkVG9SZWFkLmluY2x1ZGVzKFN0cmluZyhkYXRhUG9pbnQuc291cmNlKSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5oYXNQZXJtaXNzaW9uVG9SZWFkQW55TWVhc3VyZW1lbnRzID0gdHJ1ZTtcblxuICAgIHRoaXMuc3RvcmVJbml0aWFsQ2hhbmdlYWJsZUNvbmZpZygpO1xuXG4gICAgdGhpcy5maWxlVHlwZVNlbGVjdGlvblN0YXRlID0gdGhpcy5nZXRJbml0aWFsU2VsZWN0aW9uKHRoaXMuZHluYW1pY0ZpbGVzVHlwZU1ldGFkYXRhLCBbMF0pO1xuXG4gICAgdGhpcy5mb3JtR3JvdXAgPSB0aGlzLmNyZWF0ZUZvcm0oKTtcbiAgICB0aGlzLmRhdGFUb0V4cG9ydCA9IGF3YWl0IHRoaXMuZGF0YUZldGNoaW5nU2VydmljZS5mZXRjaEFuZFByZXBhcmVEYXRhVG9FeHBvcnQoXG4gICAgICB0aGlzLmV4cG9ydENvbmZpZyxcbiAgICAgIHRoaXMuaXNGdWxsVHlwZU9mRXhwb3J0XG4gICAgKTtcblxuICAgIHRoaXMuaGFuZGxlRGF0ZVNlbGVjdG9yQ2hhbmdlcygpO1xuICAgIHRoaXMuZGV0ZXJtaW5lU2hvd2luZ1ByZXZpZXdPckVtcHR5U3RhdGUoKTtcbiAgICB0aGlzLmhhbmRsZUV4cG9ydE1vZGVDaGFuZ2VzKCk7XG4gICAgdGhpcy5oYW5kbGVGaWxlVHlwZVNlbGVjdGlvbkNoYW5nZXMoKTtcbiAgICB0aGlzLmhhbmRsZUZvcm1WYWxpZGF0aW9uQ2hhbmdlcygpO1xuXG4gICAgdGhpcy51cGRhdGVGaWxlVHlwZUNvbnRyb2woKTtcblxuICAgIHRoaXMudXBkYXRlRGlzYWJsZWRBZ2dyZWdhdGlvbk9wdGlvbnMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB0aGlzLmxvYWRJbml0aWFsQ2hhbmdlYWJsZUNvbmZpZygpO1xuICB9XG5cbiAgYXN5bmMgZXhwb3J0QW5kRG93bmxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZmlsZUV4cG9ydHM6IEZpbGVFeHBvcnRDb25maWdbXSA9IE9iamVjdC5lbnRyaWVzKHRoaXMuZHluYW1pY0ZpbGVzVHlwZU1ldGFkYXRhKS5tYXAoXG4gICAgICAoW18sIHZhbHVlXSkgPT4gKHtcbiAgICAgICAgZmlsZVR5cGU6IHZhbHVlLnR5cGUgYXMgc3RyaW5nLFxuICAgICAgICB6aXBOYW1lOiB2YWx1ZS56aXBOYW1lXG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCBzZWxlY3RlZEZpbGVFeHBvcnRzOiBGaWxlRXhwb3J0Q29uZmlnW10gPSB0aGlzLmdldE9ubHlTZWxlY3RlZEZpbGVFeHBvcnRzKGZpbGVFeHBvcnRzKTtcblxuICAgIHRoaXMudHJpZ2dlckdhaW5zaWdodERvd25sb2FkRXZlbnQoc2VsZWN0ZWRGaWxlRXhwb3J0cyk7XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHNlbGVjdGVkRmlsZUV4cG9ydHMubWFwKGFzeW5jICh7IGZpbGVUeXBlLCB6aXBOYW1lIH0pID0+IHtcbiAgICAgICAgY29uc3QgYmxvYiA9IGF3YWl0IHRoaXMuZXhwb3J0RmlsZShmaWxlVHlwZSk7XG4gICAgICAgIGF3YWl0IHRoaXMuZG93bmxvYWRGaWxlKGJsb2IsIGZpbGVUeXBlLCB6aXBOYW1lKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuZGF0YXBvaW50c0V4cG9ydFNlbGVjdG9yRmlsZUV4cG9ydGVyU2VydmljZS5jbGVhbnVwQ2FjaGVkRGF0YSgpO1xuICB9XG5cbiAgZ2V0T25seVNlbGVjdGVkRmlsZUV4cG9ydHMoZmlsZUV4cG9ydHM6IEZpbGVFeHBvcnRDb25maWdbXSk6IEZpbGVFeHBvcnRDb25maWdbXSB7XG4gICAgcmV0dXJuIGZpbGVFeHBvcnRzLmZpbHRlcihmID0+IHRoaXMuZmlsZVR5cGVTZWxlY3Rpb25TdGF0ZVtmLmZpbGVUeXBlXSA9PT0gdHJ1ZSk7XG4gIH1cblxuICBhc3luYyBleHBvcnRGaWxlKGZpbGVUeXBlOiBzdHJpbmcpOiBQcm9taXNlPEJsb2IgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuaXNGdWxsVHlwZU9mRXhwb3J0XG4gICAgICA/IGF3YWl0IHRoaXMuZXhwb3J0TWVhc3VyZW1lbnRGaWxlKGZpbGVUeXBlKVxuICAgICAgOiBhd2FpdCB0aGlzLmV4cG9ydFNlcmllc0ZpbGUoZmlsZVR5cGUpO1xuICB9XG5cbiAgYXN5bmMgZG93bmxvYWRGaWxlKFxuICAgIGJsb2I6IEJsb2IgfCBudWxsLFxuICAgIGZpbGVUeXBlOiBzdHJpbmcsXG4gICAgbWVhc3VyZW1lbnRzWmlwRmlsZU5hbWU6IHN0cmluZ1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmRhdGFwb2ludHNFeGNlZWRpbmdCcm93c2VyRG93bmxvYWRMaW1pdCA9XG4gICAgICB0aGlzLmRhdGFwb2ludHNFeGNlZWRpbmdCcm93c2VyRG93bmxvYWRMaW1pdC5maWx0ZXIoXG4gICAgICAgIGRhdGFwb2ludCA9PiAhdGhpcy5kYXRhUG9pbnRzRXhjZWVkaW5nT25lTWlsbGlvbkxpbWl0LmluY2x1ZGVzKGRhdGFwb2ludClcbiAgICAgICk7XG5cbiAgICBjb25zdCBzaG91bGRTaG93QWxlcnQgPSB0aGlzLmRhdGFwb2ludHNFeGNlZWRpbmdCcm93c2VyRG93bmxvYWRMaW1pdC5sZW5ndGggPiAwO1xuXG4gICAgLy8gSGFuZGxlcyBhIGNhc2Ugd2hlcmUgYWxsIGZpbGVzIGFyZSBzZW50IGJ5IGVtYWlsLlxuICAgIGlmICghYmxvYiAmJiBzaG91bGRTaG93QWxlcnQpIHtcbiAgICAgIHRoaXMuZGF0YUZldGNoaW5nU2VydmljZS5zaG93U2VuZFZpYUVtYWlsSW5mb0FsZXJ0KFxuICAgICAgICBmaWxlVHlwZSxcbiAgICAgICAgdGhpcy5kYXRhcG9pbnRzRXhjZWVkaW5nQnJvd3NlckRvd25sb2FkTGltaXRcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGJsb2IpIHtcbiAgICAgIC8vIEhhbmRsZXMgdGhlIGNhc2Ugd2hlcmUgc29tZSBvZiB0aGUgZmlsZXMgYXJlIHNlbnQgYnkgZW1haWwuXG4gICAgICBpZiAoc2hvdWxkU2hvd0FsZXJ0KSB7XG4gICAgICAgIHRoaXMuZGF0YUZldGNoaW5nU2VydmljZS5zaG93U2VuZFZpYUVtYWlsSW5mb0FsZXJ0KFxuICAgICAgICAgIGZpbGVUeXBlLFxuICAgICAgICAgIHRoaXMuZGF0YXBvaW50c0V4Y2VlZGluZ0Jyb3dzZXJEb3dubG9hZExpbWl0XG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaXNGdWxsVHlwZU9mRXhwb3J0XG4gICAgICAgID8gc2F2ZUFzKGJsb2IsIG1lYXN1cmVtZW50c1ppcEZpbGVOYW1lKVxuICAgICAgICA6IHNhdmVBcyhibG9iLCBibG9iW1NFUklFU19EQVRBX01FUkdFRF9GSUxFX05BTUVdKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0cyBhIG1lYXN1cmVtZW50IGZpbGUgb2YgdGhlIHNwZWNpZmllZCB0eXBlLlxuICAgKlxuICAgKiBNZWFzdXJlbWVudHMgQVBJIGRvZXMgcHJvdmlkZSBhIHdheSB0byBmZXRjaCBhIHByZXByb2Nlc3NlZCBDU1YvRXhjZWwgZmlsZS5cbiAgICpcbiAgICogQXQgdGhpcyBwb2ludCBhIGJhY2tlZCBmaWxlIG5lZWRzIHRvIGJlIGZldGNoZWQuXG4gICAqIE1lYXN1cmVtZW50IGRhdGEgdXNlZCBmb3IgYSBwcmV2aWV3IGNvbnRhaW5zIGp1c3QgNSBmaXJzdCByZWNvcmRzXG4gICAqIGFuZCBpdCdzIG5vdCBmZXRjaGVkIHdpdGggQ1NWL0V4Y2VsIGhlYWRlcnMuXG4gICAqXG4gICAqIEBwYXJhbSBmaWxlVHlwZSAtIFRoZSB0eXBlIG9mIGZpbGUgdG8gZXhwb3J0LlxuICAgKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIEJsb2IgcmVwcmVzZW50aW5nIHRoZSBleHBvcnRlZCBmaWxlIG9yIG51bGwgd2hlbiBubyBkYXRhIHRvIGV4cG9ydCBvciBpdCdzIHNlbnQgdmlhIGVtYWlsLlxuICAgKi9cbiAgYXN5bmMgZXhwb3J0TWVhc3VyZW1lbnRGaWxlKGZpbGVUeXBlOiBzdHJpbmcpOiBQcm9taXNlPEJsb2I+IHwgbnVsbCB7XG4gICAgY29uc3QgeyBhY2NlcHRUeXBlLCBleHRlbnNpb24gfSA9IHRoaXMuZGF0YXBvaW50c0V4cG9ydE1vZGFsU2VydmljZS5maWxlVHlwZXNDb25maWdzW2ZpbGVUeXBlXTtcblxuICAgIGNvbnN0IHVwZGF0ZWRFeHBvcnRDb25maWc6IEV4cG9ydENvbmZpZyA9IHRoaXMuZXhjbHVkZURhdGFwb2ludHNUaGF0RXhjZWVkc0FwaUxpbWl0KFxuICAgICAgdGhpcy5leHBvcnRDb25maWdcbiAgICApO1xuXG4gICAgY29uc3QgZGF0YVRvRXhwb3J0OiBEYXRhVG9FeHBvcnRXaXRoQmFja2VuZENyZWF0ZWRGaWxlW10gPVxuICAgICAgYXdhaXQgdGhpcy5kYXRhRmV0Y2hpbmdTZXJ2aWNlLmZldGNoTWVhc3VyZW1lbnREYXRhRmlsZXNBbmRQYWlyV2l0aFNvdXJjZURldGFpbHMoXG4gICAgICAgIGFjY2VwdFR5cGUsXG4gICAgICAgIHVwZGF0ZWRFeHBvcnRDb25maWdcbiAgICAgICk7XG5cbiAgICBjb25zdCBpc0FsbFVuZGVmaW5lZCA9IGRhdGFUb0V4cG9ydC5ldmVyeShkYXRhID0+IGRhdGEgPT09IHVuZGVmaW5lZCk7XG4gICAgaWYgKGlzQWxsVW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5kYXRhcG9pbnRzRXhwb3J0U2VsZWN0b3JGaWxlRXhwb3J0ZXJTZXJ2aWNlLmdldE1lYXN1cmVtZW50RXhwb3J0ZWREYXRhQmxvYihcbiAgICAgIGV4dGVuc2lvbixcbiAgICAgIGRhdGFUb0V4cG9ydFxuICAgICk7XG4gIH1cblxuICBleGNsdWRlRGF0YXBvaW50c1RoYXRFeGNlZWRzQXBpTGltaXQoZXhwb3J0Q29uZmlnOiBFeHBvcnRDb25maWcpOiBFeHBvcnRDb25maWcge1xuICAgIGNvbnN0IHNraXBwZWREYXRhcG9pbnRzU291cmNlOiBzdHJpbmdbXSA9IHRoaXMuZGF0YVBvaW50c0V4Y2VlZGluZ09uZU1pbGxpb25MaW1pdC5tYXAoXG4gICAgICBkYXRhcG9pbnQgPT4gZGF0YXBvaW50LmRhdGFwb2ludERldGFpbC5zb3VyY2UudG9TdHJpbmcoKVxuICAgICk7XG5cbiAgICBjb25zdCBmaWx0ZXJlZERhdGFwb2ludHM6IERhdGFwb2ludERldGFpbHNbXSA9IGV4cG9ydENvbmZpZy5kYXRhcG9pbnREZXRhaWxzLmZpbHRlcihcbiAgICAgIGRhdGFwb2ludCA9PiAhc2tpcHBlZERhdGFwb2ludHNTb3VyY2UuaW5jbHVkZXMoU3RyaW5nKGRhdGFwb2ludC5zb3VyY2UpKVxuICAgICk7XG5cbiAgICBleHBvcnRDb25maWcuZGF0YXBvaW50RGV0YWlscyA9IGZpbHRlcmVkRGF0YXBvaW50cztcbiAgICByZXR1cm4gZXhwb3J0Q29uZmlnO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydHMgdGhlIHNlcmllcyBkYXRhIHRvIGEgZmlsZSBvZiB0aGUgc3BlY2lmaWVkIHR5cGUuXG4gICAqXG4gICAqIFNlcmllcyBBUEkgZG9lcyBub3QgcHJvdmlkZSBhIHdheSB0byBmZXRjaCBhIHByZXByb2Nlc3NlZCBDU1YvRXhjZWwgZmlsZS5cbiAgICpcbiAgICogU2VyaWVzIGRhdGEgdXNlZCBmb3IgZXhwb3J0aW5nIGEgZmlsZSBpcyBhbHJlYWR5IGZldGNoZWQgZm9yIGEgcHJldmlld1xuICAgKiBhbmQgY2FuIGJlIHJldXNlZCBmb3IgZXhwb3J0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gZmlsZVR5cGUgLSBUaGUgdHlwZSBvZiBmaWxlIHRvIGV4cG9ydCAoZS5nLiwgQ1NWLCBFeGNlbCkuXG4gICAqIEByZXR1cm5zIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgQmxvYiByZXByZXNlbnRpbmcgdGhlIGV4cG9ydGVkIGZpbGUuXG4gICAqL1xuICBhc3luYyBleHBvcnRTZXJpZXNGaWxlKGZpbGVUeXBlOiBzdHJpbmcpOiBQcm9taXNlPEJsb2I+IHtcbiAgICBjb25zdCBtZXJnZWRFeHBvcnREZXRhaWxzOiBNZXJnZWRFeHBvcnREZXRhaWxzID0ge1xuICAgICAgYWdncmVnYXRpb246IHRoaXMuZXhwb3J0Q29uZmlnLmFnZ3JlZ2F0aW9uLFxuICAgICAgZGF0ZUZyb206IHRoaXMuZXhwb3J0Q29uZmlnLmRhdGVGcm9tLFxuICAgICAgZGF0ZVRvOiB0aGlzLmV4cG9ydENvbmZpZy5kYXRlVG9cbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuZGF0YXBvaW50c0V4cG9ydFNlbGVjdG9yRmlsZUV4cG9ydGVyU2VydmljZS5nZXRTZXJpZXNFeHBvcnRlZERhdGFCbG9iKFxuICAgICAgZmlsZVR5cGUsXG4gICAgICB0aGlzLmRhdGFUb0V4cG9ydCxcbiAgICAgIG1lcmdlZEV4cG9ydERldGFpbHNcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgb25BZ2dyZWdhdGlvbkNoYW5nZShuZXdBZ2dyZWdhdGlvbjogQWdncmVnYXRpb25PcHRpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjdXJyZW50QWdncmVnYXRpb24gPSB0aGlzLmV4cG9ydENvbmZpZy5hZ2dyZWdhdGlvbiA/PyBBR0dSRUdBVElPTl9WQUxVRVMubm9uZTtcblxuICAgIGlmIChjdXJyZW50QWdncmVnYXRpb24gPT09IG5ld0FnZ3JlZ2F0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5leHBvcnRDb25maWcuYWdncmVnYXRpb24gPSBuZXdBZ2dyZWdhdGlvbjtcblxuICAgIGlmICh0aGlzLmlzQWdncmVnYXRpb25DaGFuZ2VkUHJvZ3JhbW1hdGljYWxseSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMubG9hZEV4cG9ydERhdGEoKTtcbiAgICB0aGlzLnVwZGF0ZURvd25sb2FkQnV0dG9uU3RhdGUoKTtcbiAgfVxuXG4gIG9uRGF0ZUZyb21DaGFuZ2UodXBkYXRlZERhdGU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlKHVwZGF0ZWREYXRlLCB0aGlzLmV4cG9ydENvbmZpZy5kYXRlVG8pO1xuICB9XG5cbiAgb25EYXRlVG9DaGFuZ2UodXBkYXRlZERhdGU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlKHRoaXMuZXhwb3J0Q29uZmlnLmRhdGVGcm9tLCB1cGRhdGVkRGF0ZSk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVEYXRlQW5kRmV0Y2hEYXRhKFxuICAgIGRhdGVUeXBlOiAnZGF0ZUZyb20nIHwgJ2RhdGVUbycsXG4gICAgZGF0ZUluZm86IERhdGVGZXRjaENvbmZpZ1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmV4cG9ydENvbmZpZ1tkYXRlVHlwZV0gPSBkYXRlSW5mby5kYXRlO1xuICAgIGlmICghZGF0ZUluZm8uc2hvdWxkRmV0Y2hEYXRhKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5sb2FkRXhwb3J0RGF0YSgpO1xuXG4gICAgaWYgKHRoaXMuaXNGdWxsVHlwZU9mRXhwb3J0KSB7XG4gICAgICBhd2FpdCB0aGlzLmRldGVybWluZUlmTWVhc3VyZW1lbnRSZXNwb25zZVdpbGxCZVByb2Nlc3NlZEJ5QmFja2VuZCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZURvd25sb2FkQnV0dG9uU3RhdGUoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBvbkV4cG9ydFR5cGVDaGFuZ2UoZXhwb3J0VHlwZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGV4cG9ydFR5cGUgPT09IEVYUE9SVF9NT0RFX1ZBTFVFUy5mdWxsKSB7XG4gICAgICB0aGlzLmlzQWdncmVnYXRpb25DaGFuZ2VkUHJvZ3JhbW1hdGljYWxseSA9IHRydWU7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5hZ2dyZWdhdGlvbi5zZXRWYWx1ZShBR0dSRUdBVElPTl9WQUxVRVMubm9uZSk7XG4gICAgICB0aGlzLmlzQWdncmVnYXRpb25DaGFuZ2VkUHJvZ3JhbW1hdGljYWxseSA9IGZhbHNlO1xuXG4gICAgICB0aGlzLmlzRnVsbFR5cGVPZkV4cG9ydCA9IHRydWU7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRFeHBvcnREYXRhKCk7XG4gICAgICBhd2FpdCB0aGlzLmRldGVybWluZUlmTWVhc3VyZW1lbnRSZXNwb25zZVdpbGxCZVByb2Nlc3NlZEJ5QmFja2VuZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucmVzZXRGdWxsRXhwb3J0UmVsYXRlZFByb3BlcnRpZXMoKTtcbiAgICB0aGlzLmlzRnVsbFR5cGVPZkV4cG9ydCA9IGZhbHNlO1xuICAgIGF3YWl0IHRoaXMubG9hZEV4cG9ydERhdGEoKTtcblxuICAgIHRoaXMudXBkYXRlRGlzYWJsZWRBZ2dyZWdhdGlvbk9wdGlvbnMoKTtcblxuICAgIHRoaXMudXBkYXRlRG93bmxvYWRCdXR0b25TdGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9ucygpOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkQWdncmVnYXRpb25PcHRpb25zID0gdGhpcy5hZ2dyZWdhdGlvblNlcnZpY2UuZ2V0RGlzYWJsZWRBZ2dyZWdhdGlvbk9wdGlvbnMoXG4gICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5kYXRlRnJvbS52YWx1ZSxcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmRhdGVUby52YWx1ZVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZvcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoXG4gICAgICB7XG4gICAgICAgIGRhdGVGcm9tOiBuZXcgRm9ybUNvbnRyb2wodGhpcy5leHBvcnRDb25maWcuZGF0ZUZyb20pLFxuICAgICAgICBkYXRlVG86IG5ldyBGb3JtQ29udHJvbCh0aGlzLmV4cG9ydENvbmZpZy5kYXRlVG8pLFxuICAgICAgICBhZ2dyZWdhdGlvbjogbmV3IEZvcm1Db250cm9sKFxuICAgICAgICAgIHRoaXMuZXhwb3J0Q29uZmlnLmFnZ3JlZ2F0aW9uID8gdGhpcy5leHBvcnRDb25maWcuYWdncmVnYXRpb24gOiBBR0dSRUdBVElPTl9WQUxVRVMubm9uZVxuICAgICAgICApLFxuICAgICAgICBleHBvcnRNb2RlOiBuZXcgRm9ybUNvbnRyb2woRVhQT1JUX01PREVfVkFMVUVTLmNvbXBhY3QpLFxuICAgICAgICBmaWxlVHlwZXM6IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoXG4gICAgICAgICAgdGhpcy5nZW5lcmF0b3JzLnJlZHVjZSgoYSwgYykgPT4ge1xuICAgICAgICAgICAgYVtjLmdldFR5cGUoKV0gPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICAgIH0sIHt9KVxuICAgICAgICApXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB2YWxpZGF0b3JzOiBbZGF0ZVJhbmdlVmFsaWRhdG9yXVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmVQcmV2aWV3KCk6IHZvaWQge1xuICAgIHRoaXMuaXNQcmV2aWV3TG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5wcmV2aWV3VGFibGVEYXRhID1cbiAgICAgIHRoaXMuZGF0YXBvaW50c0V4cG9ydE1vZGFsU2VydmljZS50cmFuc2Zvcm1Ub0V4cG9ydEZpbGVTdHJ1Y3R1cmVGb3JQcmV2aWV3KHRoaXMuZGF0YVRvRXhwb3J0KTtcbiAgICB0aGlzLmlzUHJldmlld0xvYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRGF0ZVNlbGVjdG9yQ2hhbmdlcygpOiB2b2lkIHtcbiAgICBjb25zdCBhZ2dyZWdhdGlvbkNvbnRyb2wgPSB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5hZ2dyZWdhdGlvbjtcbiAgICBjb25zdCBkYXRlRnJvbVNlbGVjdG9yID0gdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuZGF0ZUZyb207XG4gICAgY29uc3QgZGF0ZVRvU2VsZWN0b3IgPSB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5kYXRlVG87XG5cbiAgICBjb25zdCB1cGRhdGVBZ2dyZWdhdGlvbk9wdGlvbnMgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuaXNGdWxsVHlwZU9mRXhwb3J0KSB7XG4gICAgICAgIHRoaXMudXBkYXRlRGlzYWJsZWRBZ2dyZWdhdGlvbk9wdGlvbnMoKTtcblxuICAgICAgICBjb25zdCBmaXJzdEF2YWlsYWJsZUFnZ3JlZ2F0aW9uVmFsdWU6IEFnZ3JlZ2F0aW9uT3B0aW9uID1cbiAgICAgICAgICB0aGlzLmFnZ3JlZ2F0aW9uU2VydmljZS5kZXRlcm1pbmVGaXJzdE5ld0F2YWlsYWJsZUFnZ3JlZ2F0aW9uVmFsdWUoXG4gICAgICAgICAgICBhZ2dyZWdhdGlvbkNvbnRyb2wudmFsdWUsXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkQWdncmVnYXRpb25PcHRpb25zXG4gICAgICAgICAgKTtcblxuICAgICAgICBpZiAoZmlyc3RBdmFpbGFibGVBZ2dyZWdhdGlvblZhbHVlKSB7XG4gICAgICAgICAgYWdncmVnYXRpb25Db250cm9sLnNldFZhbHVlKGZpcnN0QXZhaWxhYmxlQWdncmVnYXRpb25WYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgbWVyZ2UoZGF0ZUZyb21TZWxlY3Rvci52YWx1ZUNoYW5nZXMsIGRhdGVUb1NlbGVjdG9yLnZhbHVlQ2hhbmdlcylcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUodXBkYXRlQWdncmVnYXRpb25PcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRXhwb3J0TW9kZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgY29uc3QgYWdncmVnYXRpb25Db250cm9sID0gdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuYWdncmVnYXRpb247XG5cbiAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5leHBvcnRNb2RlLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZShleHBvcnRNb2RlVmFsdWUgPT4ge1xuICAgICAgICBpZiAoZXhwb3J0TW9kZVZhbHVlLnRvU3RyaW5nKCkgPT09IEVYUE9SVF9NT0RFX1ZBTFVFUy5mdWxsKSB7XG4gICAgICAgICAgYWdncmVnYXRpb25Db250cm9sLmRpc2FibGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZ2dyZWdhdGlvbkNvbnRyb2wuZW5hYmxlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVGaWxlVHlwZVNlbGVjdGlvbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuZmlsZVR5cGVzLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZShmaWxlVHlwZXNTZWxlY3Rpb25TdGF0ZSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlRmlsZVR5cGVTZWxlY3Rpb25TdGF0ZShmaWxlVHlwZXNTZWxlY3Rpb25TdGF0ZSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRmlsZVR5cGVTZWxlY3Rpb25TdGF0ZShjaGVja2JveGVzU3RhdGU6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9KTogdm9pZCB7XG4gICAgdGhpcy5pc0FueU9mRXhwb3J0RmlsZVR5cGVDaGVja2VkID0gT2JqZWN0LnZhbHVlcyhjaGVja2JveGVzU3RhdGUpLnNvbWUoXG4gICAgICB2YWx1ZSA9PiB2YWx1ZSA9PT0gdHJ1ZVxuICAgICk7XG4gICAgdGhpcy5maWxlVHlwZVNlbGVjdGlvblN0YXRlID0gY2hlY2tib3hlc1N0YXRlO1xuICAgIHRoaXMudXBkYXRlRG93bmxvYWRCdXR0b25TdGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVGb3JtVmFsaWRhdGlvbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtR3JvdXAuc3RhdHVzQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlRG93bmxvYWRCdXR0b25TdGF0ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGaWxlVHlwZUNvbnRyb2woKTogdm9pZCB7XG4gICAgY29uc3QgZmlsZVR5cGVzQ29udHJvbCA9IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmZpbGVUeXBlcztcbiAgICBpZiAoZmlsZVR5cGVzQ29udHJvbCkge1xuICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gZmlsZVR5cGVzQ29udHJvbC52YWx1ZSB8fCB7fTtcbiAgICAgIGNvbnN0IHVwZGF0ZWRWYWx1ZSA9IHsgLi4uY3VycmVudFZhbHVlIH07XG5cbiAgICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuZmlsZVR5cGVTZWxlY3Rpb25TdGF0ZSkuZm9yRWFjaCgoW2ZpbGVUeXBlLCBpc1NlbGVjdGVkXSkgPT4ge1xuICAgICAgICBpZiAoZmlsZVR5cGUgaW4gY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgdXBkYXRlZFZhbHVlW2ZpbGVUeXBlXSA9IGlzU2VsZWN0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBmaWxlVHlwZXNDb250cm9sLnBhdGNoVmFsdWUodXBkYXRlZFZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRldGVybWluZVNob3dpbmdQcmV2aWV3T3JFbXB0eVN0YXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IGhhc0RhdGFUb1Nob3cgPSB0aGlzLmRhdGFUb0V4cG9ydC5zb21lKGRhdGFUb0V4cG9ydEl0ZW0gPT5cbiAgICAgIHRoaXMuaXNGdWxsVHlwZU9mRXhwb3J0XG4gICAgICAgID8gISFkYXRhVG9FeHBvcnRJdGVtXG4gICAgICAgIDogZGF0YVRvRXhwb3J0SXRlbS50aW1lVmFsdWVNYXAgJiYgT2JqZWN0LmtleXMoZGF0YVRvRXhwb3J0SXRlbS50aW1lVmFsdWVNYXApLmxlbmd0aCA+IDBcbiAgICApO1xuXG4gICAgdGhpcy5oYXNGZXRjaGVkRGF0YUFueVZhbHVlc1RvRXhwb3J0ID0gaGFzRGF0YVRvU2hvdztcblxuICAgIGlmIChoYXNEYXRhVG9TaG93KSB7XG4gICAgICB0aGlzLnByZXBhcmVQcmV2aWV3KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNQcmV2aWV3TG9hZGluZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGV0ZXJtaW5lSWZNZWFzdXJlbWVudFJlc3BvbnNlV2lsbEJlUHJvY2Vzc2VkQnlCYWNrZW5kKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuaXNQcmV2aWV3TG9hZGluZyA9IHRydWU7XG5cbiAgICB0aGlzLmRhdGFwb2ludHNFeGNlZWRpbmdCcm93c2VyRG93bmxvYWRMaW1pdCA9XG4gICAgICBhd2FpdCB0aGlzLmRhdGFGZXRjaGluZ1NlcnZpY2UuZ2V0RGF0YXBvaW50c0V4Y2VlZGluZ0xpbWl0KHRoaXMuZXhwb3J0Q29uZmlnKTtcblxuICAgIGNvbnN0IHsgYnJvd3NlckRvd25sb2FkYWJsZUNvdW50LCBlbWFpbERlbGl2ZXJhYmxlQ291bnQsIG5vblJldHJpZXZhYmxlQ291bnQgfSA9XG4gICAgICB0aGlzLmNhbGN1bGF0ZURhdGFwb2ludENvdW50cygpO1xuXG4gICAgdGhpcy5oYXNOb0V4cG9ydGFibGVEYXRhID1cbiAgICAgIGJyb3dzZXJEb3dubG9hZGFibGVDb3VudCA9PT0gMCAmJiBlbWFpbERlbGl2ZXJhYmxlQ291bnQgPT09IDAgJiYgbm9uUmV0cmlldmFibGVDb3VudCA+IDA7XG5cbiAgICBpZiAodGhpcy5kYXRhcG9pbnRzRXhjZWVkaW5nQnJvd3NlckRvd25sb2FkTGltaXQubGVuZ3RoID4gMCAmJiAhdGhpcy5oYXNOb0V4cG9ydGFibGVEYXRhKSB7XG4gICAgICB0aGlzLmxpbWl0RXhjZWVkZWRNZXNzYWdlID0gdGhpcy5kYXRhRmV0Y2hpbmdTZXJ2aWNlLmdldExpbWl0RXhjZWVkZWRNZXNzYWdlKFxuICAgICAgICB0aGlzLmhhc05vRXhwb3J0YWJsZURhdGEsXG4gICAgICAgIGVtYWlsRGVsaXZlcmFibGVDb3VudCxcbiAgICAgICAgYnJvd3NlckRvd25sb2FkYWJsZUNvdW50LFxuICAgICAgICBub25SZXRyaWV2YWJsZUNvdW50LFxuICAgICAgICB0aGlzLmV4cG9ydENvbmZpZy5kYXRhcG9pbnREZXRhaWxzLmxlbmd0aFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhcG9pbnRzRXhjZWVkaW5nQnJvd3NlckRvd25sb2FkTGltaXQubGVuZ3RoID4gMCAmJiB0aGlzLmhhc05vRXhwb3J0YWJsZURhdGEpIHtcbiAgICAgIHRoaXMubGltaXRFeGNlZWRlZE1lc3NhZ2UgPSB0aGlzLmRhdGFGZXRjaGluZ1NlcnZpY2UuZ2V0TGltaXRFeGNlZWRlZE1lc3NhZ2UoXG4gICAgICAgIHRoaXMuaGFzTm9FeHBvcnRhYmxlRGF0YVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZURvd25sb2FkQnV0dG9uU3RhdGUoKTtcblxuICAgIHRoaXMuaXNQcmV2aWV3TG9hZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGVEYXRhcG9pbnRDb3VudHMoKTogRGF0YXBvaW50Q291bnRzIHtcbiAgICBjb25zdCBSRUNPUkRfQVBJX0xJTUlUID0gMV8wMDBfMDAwO1xuXG4gICAgdGhpcy5kYXRhUG9pbnRzRXhjZWVkaW5nT25lTWlsbGlvbkxpbWl0ID0gdGhpcy5kYXRhcG9pbnRzRXhjZWVkaW5nQnJvd3NlckRvd25sb2FkTGltaXQuZmlsdGVyKFxuICAgICAgZGF0YXBvaW50c0V4Y2VlZGluZ0Jyb3dzZXJEb3dubG9hZExpbWl0ID0+XG4gICAgICAgIGRhdGFwb2ludHNFeGNlZWRpbmdCcm93c2VyRG93bmxvYWRMaW1pdC50b3RhbEVsZW1lbnRzID4gUkVDT1JEX0FQSV9MSU1JVFxuICAgICk7XG5cbiAgICBjb25zdCBub25SZXRyaWV2YWJsZUNvdW50ID0gdGhpcy5kYXRhUG9pbnRzRXhjZWVkaW5nT25lTWlsbGlvbkxpbWl0Lmxlbmd0aDtcblxuICAgIGNvbnN0IGVtYWlsRGVsaXZlcmFibGVDb3VudCA9XG4gICAgICB0aGlzLmRhdGFwb2ludHNFeGNlZWRpbmdCcm93c2VyRG93bmxvYWRMaW1pdC5sZW5ndGggLSBub25SZXRyaWV2YWJsZUNvdW50O1xuXG4gICAgY29uc3QgYnJvd3NlckRvd25sb2FkYWJsZUNvdW50ID1cbiAgICAgIHRoaXMuZXhwb3J0Q29uZmlnLmRhdGFwb2ludERldGFpbHMubGVuZ3RoIC0gZW1haWxEZWxpdmVyYWJsZUNvdW50IC0gbm9uUmV0cmlldmFibGVDb3VudDtcblxuICAgIHJldHVybiB7XG4gICAgICBicm93c2VyRG93bmxvYWRhYmxlQ291bnQsXG4gICAgICBlbWFpbERlbGl2ZXJhYmxlQ291bnQsXG4gICAgICBub25SZXRyaWV2YWJsZUNvdW50XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcmVJbml0aWFsQ2hhbmdlYWJsZUNvbmZpZygpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxEYXRlRnJvbSA9IHRoaXMuZXhwb3J0Q29uZmlnLmRhdGVGcm9tO1xuICAgIHRoaXMuaW5pdGlhbERhdGVUbyA9IHRoaXMuZXhwb3J0Q29uZmlnLmRhdGVUbztcbiAgICB0aGlzLmluaXRpYWxEYXRhcG9pbnREZXRhaWxzID0gdGhpcy5leHBvcnRDb25maWcuZGF0YXBvaW50RGV0YWlscztcbiAgICBpZiAoIXRoaXMuaXNGdWxsVHlwZU9mRXhwb3J0KSB7XG4gICAgICB0aGlzLmluaXRpYWxBZ2dyZWdhdGlvbiA9IHRoaXMuZXhwb3J0Q29uZmlnLmFnZ3JlZ2F0aW9uO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9hZEluaXRpYWxDaGFuZ2VhYmxlQ29uZmlnKCk6IHZvaWQge1xuICAgIHRoaXMuZXhwb3J0Q29uZmlnLmRhdGVGcm9tID0gdGhpcy5pbml0aWFsRGF0ZUZyb207XG4gICAgdGhpcy5leHBvcnRDb25maWcuZGF0ZVRvID0gdGhpcy5pbml0aWFsRGF0ZVRvO1xuICAgIHRoaXMuZXhwb3J0Q29uZmlnLmRhdGFwb2ludERldGFpbHMgPSB0aGlzLmluaXRpYWxEYXRhcG9pbnREZXRhaWxzO1xuICAgIGlmICghdGhpcy5pc0Z1bGxUeXBlT2ZFeHBvcnQpIHtcbiAgICAgIHRoaXMuZXhwb3J0Q29uZmlnLmFnZ3JlZ2F0aW9uID0gdGhpcy5pbml0aWFsQWdncmVnYXRpb247XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkRXhwb3J0RGF0YSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5mb3JtR3JvdXAuaW52YWxpZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNQcmV2aWV3TG9hZGluZyA9IHRydWU7XG5cbiAgICB0aGlzLm9uRG93bmxvYWRCdXR0b25TdGF0ZUNoYW5nZS5lbWl0KGZhbHNlKTtcblxuICAgIHRoaXMuZGF0YVRvRXhwb3J0ID0gYXdhaXQgdGhpcy5kYXRhRmV0Y2hpbmdTZXJ2aWNlLmZldGNoQW5kUHJlcGFyZURhdGFUb0V4cG9ydChcbiAgICAgIHRoaXMuZXhwb3J0Q29uZmlnLFxuICAgICAgdGhpcy5pc0Z1bGxUeXBlT2ZFeHBvcnRcbiAgICApO1xuXG4gICAgdGhpcy5kZXRlcm1pbmVTaG93aW5nUHJldmlld09yRW1wdHlTdGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEb3dubG9hZEJ1dHRvblN0YXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IGNhbkVuYWJsZURvd25sb2FkQnV0dG9uID1cbiAgICAgIHRoaXMuaGFzRmV0Y2hlZERhdGFBbnlWYWx1ZXNUb0V4cG9ydCAmJlxuICAgICAgIXRoaXMuZm9ybUdyb3VwLmludmFsaWQgJiZcbiAgICAgIHRoaXMuaXNBbnlPZkV4cG9ydEZpbGVUeXBlQ2hlY2tlZCAmJlxuICAgICAgIXRoaXMuaGFzTm9FeHBvcnRhYmxlRGF0YTtcblxuICAgIHRoaXMub25Eb3dubG9hZEJ1dHRvblN0YXRlQ2hhbmdlLmVtaXQoY2FuRW5hYmxlRG93bmxvYWRCdXR0b24pO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldEZ1bGxFeHBvcnRSZWxhdGVkUHJvcGVydGllcygpOiB2b2lkIHtcbiAgICB0aGlzLmhhc05vRXhwb3J0YWJsZURhdGEgPSBmYWxzZTtcbiAgICB0aGlzLmRhdGFwb2ludHNFeGNlZWRpbmdCcm93c2VyRG93bmxvYWRMaW1pdCA9IFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbml0aWFsU2VsZWN0aW9uKFxuICAgIGZpbGVUeXBlOiB7IFtrZXk6IHN0cmluZ106IEZpbGVUeXBlTWV0YWRhdGEgfSxcbiAgICBzZWxlY3RCeURlZmF1bHQ6IG51bWJlcltdXG4gICkge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhmaWxlVHlwZSk7XG4gICAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgY29uc3QgaW5pdGlhbFNlbGVjdGlvbiA9IGtleXMucmVkdWNlPHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9PigoYWNjLCBrZXkpID0+IHtcbiAgICAgIGFjY1trZXldID0gZmFsc2U7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcblxuICAgIHNlbGVjdEJ5RGVmYXVsdC5mb3JFYWNoKGluZGV4ID0+IHtcbiAgICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDwga2V5cy5sZW5ndGgpIHtcbiAgICAgICAgaW5pdGlhbFNlbGVjdGlvbltrZXlzW2luZGV4XV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGluaXRpYWxTZWxlY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogQWRqdXN0cyBib3RoIFwiZnJvbVwiIGFuZCBcInRvXCIgZGF0ZXMgd2hlbiBlaXRoZXIgaXMgdXBkYXRlZDpcbiAgICogLSBSZXNldHMgc2Vjb25kcyB0byAwMCBldmVuIHdoZW4gb25seSBvbmUgZGF0ZSBjaGFuZ2VzXG4gICAqIC0gUHJldmVudHMgcGVyc2lzdGluZyBoaWRkZW4gc2Vjb25kcyDiiaAgMDAgZnJvbSBpbml0aWFsIGxvYWRcbiAgICogLSBUcmlnZ2VycyBkYXRhIGZldGNoXG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqIFdoZW4gdXNlciBjaGFuZ2VzIFwiZnJvbVwiIGRhdGU6XG4gICAqIElucHV0OiBzdGFydERhdGUgPSBcIjIwMjQtMDMtMjYgMTM6MzA6NDVcIiwgZW5kRGF0ZSA9IFwiMjAyNC0wMy0yNyAxNToyMDo0NVwiXG4gICAqIFJlc3VsdDogc3RhcnREYXRlIC0+IFwiMjAyNC0wMy0yNiAxNDozMDowMFwiLCBlbmREYXRlIC0+IFwiMjAyNC0wMy0yNyAxNToyMDowMFwiXG4gICAqXG4gICAqIFdoZW4gdXNlciBjaGFuZ2VzIFwidG9cIiBkYXRlOlxuICAgKiBJbnB1dDogc3RhcnREYXRlID0gXCIyMDI0LTAzLTI2IDE0OjMwOjQ1XCIsIGVuZERhdGUgPSBcIjIwMjQtMDMtMjcgMTU6MjA6NDVcIlxuICAgKiBSZXN1bHQ6IHN0YXJ0RGF0ZSAtPiBcIjIwMjQtMDMtMjYgMTQ6MzA6MDBcIiwgZW5kRGF0ZSAtPiBcIjIwMjQtMDMtMjcgMTY6MjA6MDBcIlxuICAgKlxuICAgKiBAcGFyYW0gc3RhcnREYXRlIC0gVGhlIFwic3RhcnRcIiBkYXRlIHRvIGJlIGFkanVzdGVkLlxuICAgKiBAcGFyYW0gZW5kRGF0ZSAtIFRoZSBcImVuZFwiIGRhdGUgdG8gYmUgYWRqdXN0ZWQuXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZShzdGFydERhdGU6IHN0cmluZywgZW5kRGF0ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5kYXRlRnJvbVN1YmplY3QubmV4dCh7XG4gICAgICBkYXRlOiB0aGlzLmRhdGFGZXRjaGluZ1NlcnZpY2UuYWRqdXN0RGF0ZShzdGFydERhdGUsIDApLFxuICAgICAgc2hvdWxkRmV0Y2hEYXRhOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgdGhpcy5kYXRlVG9TdWJqZWN0Lm5leHQoe1xuICAgICAgZGF0ZTogdGhpcy5kYXRhRmV0Y2hpbmdTZXJ2aWNlLmFkanVzdERhdGUoZW5kRGF0ZSwgMCksXG4gICAgICBzaG91bGRGZXRjaERhdGE6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdHJpZ2dlckdhaW5zaWdodERvd25sb2FkRXZlbnQoc2VsZWN0ZWRGaWxlRXhwb3J0czogRmlsZUV4cG9ydENvbmZpZ1tdKTogdm9pZCB7XG4gICAgY29uc3QgY29tbW9uRXZlbnREYXRhID0ge1xuICAgICAgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0VfREFUQVBPSU5UU19FWFBPUlRfU0VMRUNUT1IuQUNUSU9OUy5ET1dOTE9BRF9TVEFSVEVELFxuICAgICAgY29tcG9uZW50OlxuICAgICAgICBQUk9EVUNUX0VYUEVSSUVOQ0VfREFUQVBPSU5UU19FWFBPUlRfU0VMRUNUT1IuQ09NUE9ORU5UU1xuICAgICAgICAgIC5EQVRBUE9JTlRTX0VYUE9SVF9TRUxFQ1RPUl9GSUxFX0VYUE9SVEVSLFxuICAgICAgc2VsZWN0ZWRGaWxlVHlwZTogc2VsZWN0ZWRGaWxlRXhwb3J0cy5tYXAoaXRlbSA9PiBpdGVtLmZpbGVUeXBlKVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5pc0Z1bGxUeXBlT2ZFeHBvcnQpIHtcbiAgICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoXG4gICAgICAgIFBST0RVQ1RfRVhQRVJJRU5DRV9EQVRBUE9JTlRTX0VYUE9SVF9TRUxFQ1RPUi5FVkVOVFMuRVhQT1JUX1NFTEVDVE9SLFxuICAgICAgICB7XG4gICAgICAgICAgLi4uY29tbW9uRXZlbnREYXRhLFxuICAgICAgICAgIHNlbGVjdGVkRXhwb3J0VHlwZTpcbiAgICAgICAgICAgIFBST0RVQ1RfRVhQRVJJRU5DRV9EQVRBUE9JTlRTX0VYUE9SVF9TRUxFQ1RPUi5FWFBPUlRfQ09ORklHLkZVTExfRVhQT1JUX1RZUEVcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChcbiAgICAgICAgUFJPRFVDVF9FWFBFUklFTkNFX0RBVEFQT0lOVFNfRVhQT1JUX1NFTEVDVE9SLkVWRU5UUy5FWFBPUlRfU0VMRUNUT1IsXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5jb21tb25FdmVudERhdGEsXG4gICAgICAgICAgc2VsZWN0ZWRFeHBvcnRUeXBlOlxuICAgICAgICAgICAgUFJPRFVDVF9FWFBFUklFTkNFX0RBVEFQT0lOVFNfRVhQT1JUX1NFTEVDVE9SLkVYUE9SVF9DT05GSUcuQ09NUEFDVF9FWFBPUlRfVFlQRSxcbiAgICAgICAgICBzZWxlY3RlZEFnZ3JlZ2F0aW9uOiB0aGlzLmV4cG9ydENvbmZpZy5hZ2dyZWdhdGlvbiA/PyBBR0dSRUdBVElPTl9WQUxVRVMubm9uZVxuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInAtYi0xNlwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzUGVybWlzc2lvblRvUmVhZEFueU1lYXN1cmVtZW50czsgZWxzZSBoYXNOb1JvbGVUb1JlYWRBbnlNZWFzdXJlbWVudHNcIj5cbiAgICA8ZGl2IGNsYXNzPVwicC0xNiB0ZXh0LWNlbnRlciBzZXBhcmF0b3ItYm90dG9tIHN0aWNreS10b3AgYmctY29tcG9uZW50XCI+XG4gICAgICA8cCBjbGFzcz1cInRleHQtbWVkaXVtIHRleHQtMTZcIj5cbiAgICAgICAge3sgJ0NvbmZpZ3VyZSBleHBvcnQnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3A+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJwLXQtMjQgcC1yLTE2IHAtbC0xNiBnYXAtOCBwLWItMTYgZmxleC13cmFwXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsgJ3NlcGFyYXRvci1ib3R0b20nOiBpc0Z1bGxUeXBlT2ZFeHBvcnQgfVwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICA8Yzh5LWRhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yLXRpbWUtcmFuZ2VcbiAgICAgICAgICAgICpuZ0lmPVwidGhpcy5oYXNQZXJtaXNzaW9uVG9SZWFkQW55TWVhc3VyZW1lbnRzXCJcbiAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcbiAgICAgICAgICAgIChvbkRhdGVGcm9tQ2hhbmdlKT1cIm9uRGF0ZUZyb21DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAob25EYXRlVG9DaGFuZ2UpPVwib25EYXRlVG9DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgPjwvYzh5LWRhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yLXRpbWUtcmFuZ2U+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICA8Yzh5LWRhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yLWRhdGEtc2NvcGVcbiAgICAgICAgICAgICpuZ0lmPVwidGhpcy5oYXNQZXJtaXNzaW9uVG9SZWFkQW55TWVhc3VyZW1lbnRzXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9uc109XCJkaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9uc1wiXG4gICAgICAgICAgICBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiXG4gICAgICAgICAgICAob25BZ2dyZWdhdGlvbkNoYW5nZSk9XCJvbkFnZ3JlZ2F0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgKG9uRXhwb3J0VHlwZUNoYW5nZSk9XCJvbkV4cG9ydFR5cGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgPjwvYzh5LWRhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yLWRhdGEtc2NvcGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICA8Yzh5LWRhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yLWZpbGUtdHlwZXNcbiAgICAgICAgICAgICpuZ0lmPVwidGhpcy5oYXNQZXJtaXNzaW9uVG9SZWFkQW55TWVhc3VyZW1lbnRzXCJcbiAgICAgICAgICAgIFtkeW5hbWljRmlsZXNUeXBlTWV0YWRhdGFdPVwiZHluYW1pY0ZpbGVzVHlwZU1ldGFkYXRhXCJcbiAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcbiAgICAgICAgICA+PC9jOHktZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItZmlsZS10eXBlcz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdJZj1cIiFpc0Z1bGxUeXBlT2ZFeHBvcnQgJiYgIWhhc0ZldGNoZWREYXRhQW55VmFsdWVzVG9FeHBvcnQgJiYgIWlzUHJldmlld0xvYWRpbmdcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLXQtMjQgcC1yLTE2IHAtbC0xNiBwLWItMTYgZC1mbGV4XCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImFsZXJ0IGFsZXJ0LXdhcm5pbmcgY2VudGVyLWJsb2NrXCJcbiAgICAgICAgICByb2xlPVwiYWxlcnRcIlxuICAgICAgICAgIGRhdGEtY3k9XCJmaWxlLWV4cG9ydGVyLS1uby1kYXRhLWF2YWlsYWJsZVwiXG4gICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgID5cbiAgICAgICAgICBObyBkYXRhIGF2YWlsYWJsZS5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YXBvaW50c0V4Y2VlZGluZ0Jyb3dzZXJEb3dubG9hZExpbWl0Lmxlbmd0aCA+IDBcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLXQtMjQgcC1yLTE2IHAtbC0xNiBwLWItMTYgc2VwYXJhdG9yLWJvdHRvbSBkLWZsZXhcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIFtjbGFzc109XCJcbiAgICAgICAgICAgIGhhc05vRXhwb3J0YWJsZURhdGFcbiAgICAgICAgICAgICAgPyAnYWxlcnQgYWxlcnQtd2FybmluZyBjZW50ZXItYmxvY2snXG4gICAgICAgICAgICAgIDogJ2FsZXJ0IGFsZXJ0LWluZm8gY2VudGVyLWJsb2NrJ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgcm9sZT1cImFsZXJ0XCJcbiAgICAgICAgICBbaW5uZXJIVE1MXT1cImxpbWl0RXhjZWVkZWRNZXNzYWdlXCJcbiAgICAgICAgPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRnVsbFR5cGVPZkV4cG9ydFwiPlxuICAgICAgPGM4eS1kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1wcmV2aWV3XG4gICAgICAgICpuZ0lmPVwidGhpcy5oYXNQZXJtaXNzaW9uVG9SZWFkQW55TWVhc3VyZW1lbnRzXCJcbiAgICAgICAgW2hhc0ZldGNoZWREYXRhQW55VmFsdWVzVG9FeHBvcnRdPVwiaGFzRmV0Y2hlZERhdGFBbnlWYWx1ZXNUb0V4cG9ydFwiXG4gICAgICAgIFtpc1ByZXZpZXdMb2FkaW5nXT1cImlzUHJldmlld0xvYWRpbmdcIlxuICAgICAgICBbcHJldmlld1RhYmxlRGF0YV09XCJwcmV2aWV3VGFibGVEYXRhXCJcbiAgICAgID48L2M4eS1kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1wcmV2aWV3PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLXRlbXBsYXRlICNoYXNOb1JvbGVUb1JlYWRBbnlNZWFzdXJlbWVudHM+XG4gICAgPGRpdiBjbGFzcz1cInAtdC0yNCBwLXItMTYgcC1sLTE2IHAtYi0xNiBkLWZsZXhcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJhbGVydCBhbGVydC1pbmZvIGNlbnRlci1ibG9ja1wiXG4gICAgICAgIHJvbGU9XCJhbGVydFwiXG4gICAgICAgIHRyYW5zbGF0ZVxuICAgICAgPlxuICAgICAgICA8cD5UbyBleHBvcnQgZGF0YSwgeW91IG11c3QgbWVldCBhdCBsZWFzdCBvbmUgb2YgdGhlc2UgY3JpdGVyaWE6PC9wPlxuICAgICAgICA8dWw+XG4gICAgICAgICAgPGxpPlxuICAgICAgICAgICAgSGF2ZVxuICAgICAgICAgICAgPGI+UkVBRCBwZXJtaXNzaW9uIGZvciBcIk1lYXN1cmVtZW50c1wiIHBlcm1pc3Npb24gdHlwZTwvYj5cbiAgICAgICAgICAgIChlaXRoZXIgYXMgYSBnbG9iYWwgcm9sZSBvciBmb3IgdGhlIHNwZWNpZmljIHNvdXJjZSlcbiAgICAgICAgICA8L2xpPlxuICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgIEJlIHRoZVxuICAgICAgICAgICAgPGI+b3duZXIgb2YgdGhlIHNvdXJjZTwvYj5cbiAgICAgICAgICAgIHlvdSB3YW50IHRvIGV4cG9ydCBkYXRhIGZyb21cbiAgICAgICAgICA8L2xpPlxuICAgICAgICA8L3VsPlxuICAgICAgICA8cD5Eb24ndCBtZWV0IHRoZXNlIHJlcXVpcmVtZW50cz8gQ29udGFjdCB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIGZvciBhc3Npc3RhbmNlLjwvcD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=
|
|
524
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItZmlsZS1leHBvcnRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1tb2RhbC9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1maWxlLWV4cG9ydGVyL2RhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yLWZpbGUtZXhwb3J0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3IvZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItbW9kYWwvZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItZmlsZS1leHBvcnRlci9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1maWxlLWV4cG9ydGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixjQUFjLEVBQ2QsS0FBSyxFQUdMLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBRUwsV0FBVyxFQUNYLFdBQVcsRUFDWCxtQkFBbUIsRUFHcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0wsa0JBQWtCLEVBR2xCLGtCQUFrQixFQUNsQixVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2pCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxNQUFNLE1BQU0sWUFBWSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0QsT0FBTyxFQU9MLGtCQUFrQixFQU9sQiw2Q0FBNkMsRUFDN0Ms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akYsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLElBQUksa0JBQWtCLENBQUMsSUFBSTthQUM5RSxDQUNGLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQzsrR0E3ckJVLDZDQUE2QyxrTkFxRzlDLGVBQWU7bUdBckdkLDZDQUE2QywyTkNsRzFELHM2SEF3R0EsMkNEZEksVUFBVSw4cUJBQ1YsMENBQTBDLG1NQUMxQywwQ0FBMEMseUlBQzFDLHdDQUF3Qyx3S0FDeEMsMENBQTBDLDZKQUMxQyxtQkFBbUI7OzRGQUdWLDZDQUE2QztrQkFiekQsU0FBUzsrQkFDRSw4Q0FBOEMsY0FFNUMsSUFBSSxXQUNQO3dCQUNQLFVBQVU7d0JBQ1YsMENBQTBDO3dCQUMxQywwQ0FBMEM7d0JBQzFDLHdDQUF3Qzt3QkFDeEMsMENBQTBDO3dCQUMxQyxtQkFBbUI7cUJBQ3BCOzswQkF1R0UsTUFBTTsyQkFBQyxlQUFlO3dFQXBHaEIsWUFBWTtzQkFBcEIsS0FBSztnQkFDSSwyQkFBMkI7c0JBQXBDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbmplY3Rpb25Ub2tlbixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIEZvcm1CdWlsZGVyLFxuICBGb3JtQ29udHJvbCxcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgVmFsaWRhdGlvbkVycm9ycyxcbiAgVmFsaWRhdG9yRm5cbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgQUdHUkVHQVRJT05fVkFMVUVTLFxuICBBZ2dyZWdhdGlvbk9wdGlvbixcbiAgQWdncmVnYXRpb25PcHRpb25TdGF0dXMsXG4gIEFnZ3JlZ2F0aW9uU2VydmljZSxcbiAgQ29yZU1vZHVsZSxcbiAgR2FpbnNpZ2h0U2VydmljZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCBzYXZlQXMgZnJvbSAnZmlsZS1zYXZlcic7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIG1lcmdlLCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIERhdGFwb2ludENvdW50cyxcbiAgRGF0YXBvaW50RGV0YWlscyxcbiAgRGF0YXBvaW50c0V4Y2VlZGluZ0xpbWl0LFxuICBEYXRhVG9FeHBvcnQsXG4gIERhdGFUb0V4cG9ydFdpdGhCYWNrZW5kQ3JlYXRlZEZpbGUsXG4gIERhdGVGZXRjaENvbmZpZyxcbiAgRVhQT1JUX01PREVfVkFMVUVTLFxuICBFeHBvcnRDb25maWcsXG4gIEV4cG9ydERhdGEsXG4gIEZpbGVFeHBvcnRDb25maWcsXG4gIEZpbGVHZW5lcmF0b3IsXG4gIEZpbGVUeXBlTWV0YWRhdGEsXG4gIE1lcmdlZEV4cG9ydERldGFpbHMsXG4gIFBST0RVQ1RfRVhQRVJJRU5DRV9EQVRBUE9JTlRTX0VYUE9SVF9TRUxFQ1RPUixcbiAgU0VSSUVTX0RBVEFfTUVSR0VEX0ZJTEVfTkFNRVxufSBmcm9tICcuLi8uLi9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci5tb2RlbCc7XG5pbXBvcnQgeyBEYXRhRmV0Y2hpbmdTZXJ2aWNlIH0gZnJvbSAnLi9kYXRhLWZldGNoaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0YVByb2Nlc3NpbmdTZXJ2aWNlIH0gZnJvbSAnLi9kYXRhLXByb2Nlc3Npbmcuc2VydmljZSc7XG5pbXBvcnQgeyBEYXRhcG9pbnRzRXhwb3J0U2VsZWN0b3JGaWxlRXhwb3J0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1maWxlLWV4cG9ydGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0YVBvaW50c0V4cG9ydFNlbGVjdG9yUHJldmlld0NvbXBvbmVudCB9IGZyb20gJy4vZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItcHJldmlldy9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1wcmV2aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRhUG9pbnRzRXhwb3J0U2VsZWN0b3JEYXRhU2NvcGVDb21wb25lbnQgfSBmcm9tICcuL2RhdGFwb2ludHMtZXhwb3J0cy1zZWxlY3Rvci1kYXRhLXNjb3BlL2RhdGFwb2ludHMtZXhwb3J0cy1zZWxlY3Rvci1kYXRhLXNjb3BlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRhUG9pbnRzRXhwb3J0U2VsZWN0b3JGaWxlVHlwZXNDb21wb25lbnQgfSBmcm9tICcuL2RhdGFwb2ludHMtZXhwb3J0cy1zZWxlY3Rvci1maWxlLXR5cGVzL2RhdGFwb2ludHMtZXhwb3J0cy1zZWxlY3Rvci1maWxlLXR5cGVzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRhUG9pbnRzRXhwb3J0U2VsZWN0b3JUaW1lUmFuZ2VDb21wb25lbnQgfSBmcm9tICcuL2RhdGFwb2ludHMtZXhwb3J0cy1zZWxlY3Rvci10aW1lLXJhbmdlL2RhdGFwb2ludHMtZXhwb3J0cy1zZWxlY3Rvci10aW1lLXJhbmdlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDU1ZHZW5lcmF0b3JBZGFwdGVyIH0gZnJvbSAnLi9nZW5lcmF0b3JzL2Nzdi1nZW5lcmF0b3InO1xuaW1wb3J0IHsgRXhjZWxHZW5lcmF0b3JBZGFwdGVyIH0gZnJvbSAnLi9nZW5lcmF0b3JzL2V4Y2VsLWdlbmVyYXRvcic7XG5cbmV4cG9ydCBjb25zdCBGSUxFX0dFTkVSQVRPUlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48RmlsZUdlbmVyYXRvcltdPignRklMRV9HRU5FUkFUT1JTJywge1xuICBwcm92aWRlZEluOiAncm9vdCcsXG4gIGZhY3Rvcnk6ICgpID0+IFtFeGNlbEdlbmVyYXRvckFkYXB0ZXIsIENTVkdlbmVyYXRvckFkYXB0ZXJdXG59KTtcblxuZXhwb3J0IGNvbnN0IGRhdGVSYW5nZVZhbGlkYXRvcjogVmFsaWRhdG9yRm4gPSAoXG4gIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbFxuKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICBjb25zdCBkYXRlRnJvbSA9IGNvbnRyb2wuZ2V0KCdkYXRlRnJvbScpO1xuICBjb25zdCBkYXRlVG8gPSBjb250cm9sLmdldCgnZGF0ZVRvJyk7XG5cbiAgaWYgKCFkYXRlRnJvbSB8fCAhZGF0ZVRvKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBkYXRlRnJvbVZhbHVlID0gZGF0ZUZyb20udmFsdWU7XG4gIGNvbnN0IGRhdGVUb1ZhbHVlID0gZGF0ZVRvLnZhbHVlO1xuICBpZiAoZGF0ZUZyb21WYWx1ZSAmJiBkYXRlVG9WYWx1ZSkge1xuICAgIGlmIChuZXcgRGF0ZShkYXRlRnJvbVZhbHVlKSA+IG5ldyBEYXRlKGRhdGVUb1ZhbHVlKSkge1xuICAgICAgZGF0ZUZyb20uc2V0RXJyb3JzKHsgZGF0ZUFmdGVyUmFuZ2VNYXg6IHRydWUgfSk7XG4gICAgICBkYXRlVG8uc2V0RXJyb3JzKHsgZGF0ZUJlZm9yZVJhbmdlTWluOiB0cnVlIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRlRnJvbS5zZXRFcnJvcnMobnVsbCk7XG4gICAgICBkYXRlVG8uc2V0RXJyb3JzKG51bGwpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1maWxlLWV4cG9ydGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yLWZpbGUtZXhwb3J0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29yZU1vZHVsZSxcbiAgICBEYXRhUG9pbnRzRXhwb3J0U2VsZWN0b3JEYXRhU2NvcGVDb21wb25lbnQsXG4gICAgRGF0YVBvaW50c0V4cG9ydFNlbGVjdG9yRmlsZVR5cGVzQ29tcG9uZW50LFxuICAgIERhdGFQb2ludHNFeHBvcnRTZWxlY3RvclByZXZpZXdDb21wb25lbnQsXG4gICAgRGF0YVBvaW50c0V4cG9ydFNlbGVjdG9yVGltZVJhbmdlQ29tcG9uZW50LFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBEYXRhcG9pbnRzRXhwb3J0U2VsZWN0b3JGaWxlRXhwb3J0ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIGV4cG9ydENvbmZpZzogRXhwb3J0Q29uZmlnO1xuICBAT3V0cHV0KCkgb25Eb3dubG9hZEJ1dHRvblN0YXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLyoqXG4gICAqIFJlcHJlc2VudHMgYWdncmVnYXRpb24gc2VsZWN0b3Igb3B0aW9ucyB0aGF0IGFyZSBkaXNhYmxlZC5cbiAgICogVGhpcyBzdGF0ZSBpcyBkZXRlcm1pbmVkIGJhc2VkIG9uIHRoZSBjdXJyZW50IGRhdGUgcmFuZ2UuXG4gICAqL1xuICBkaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9uczogQWdncmVnYXRpb25PcHRpb25TdGF0dXMgPSB7fTtcblxuICBmb3JtR3JvdXA6IFJldHVyblR5cGU8RGF0YXBvaW50c0V4cG9ydFNlbGVjdG9yRmlsZUV4cG9ydGVyQ29tcG9uZW50WydjcmVhdGVGb3JtJ10+O1xuXG4gIC8qKlxuICAgKiBDb250YWlucyBhbGwgZGF0YXBvaW50cyB0aGF0IG51bWJlciBvZiByZWNvcmRzIGV4Y2VlZHMgYSB0aHJlc2hvbGQsIHdoZXJlIGRhdGEgZm9yIHRoZXNlIGRhdGFwb2ludHMgd2lsbCBiZSBwcm9jZXNzZWQgYnkgdGhlIGJhY2tlbmQuXG4gICAqIEFwcGxpZXMgb25seSB0byBtZWFzdXJlbWVudCBBUEkgd2hpY2ggY2FuIHJldHVybiBwcm9jZXNzZWQgQ1NWLCBFeGNlbCBvciBYTUwgZGF0YS5cbiAgICovXG4gIGRhdGFwb2ludHNFeGNlZWRpbmdCcm93c2VyRG93bmxvYWRMaW1pdDogRGF0YXBvaW50c0V4Y2VlZGluZ0xpbWl0W10gPSBbXTtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIGFueSBvZiBEYXRhVG9FeHBvcnQgb2JqZWN0cyB0aW1lVmFsdWVNYXAgcHJvcGVydHkgaXMgbm90IHVuZGVmaW5lZCAoc2VyaWVzIGRhdGEpXG4gICAqIG9yIGRhdGFQb2ludFRvRXhwb3J0IGlzIG5vdCB1bmRlZmluZWQgYXQgYWxsIChtZWFzdXJlbWVudCBkYXRhKS5cbiAgICovXG5cbiAgaGFzRmV0Y2hlZERhdGFBbnlWYWx1ZXNUb0V4cG9ydCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlcmUgaXMgbm8gZXhwb3J0YWJsZSBkYXRhIGJlY2F1c2UgdGhlIGRhdGUgcmFuZ2Ugb2YgYWxsIHNlbGVjdGVkIGRhdGFwb2ludHMgZXhjZWVkcyAxLDAwMCwwMDAgcmVjb3Jkcy5cbiAgICovXG4gIGhhc05vRXhwb3J0YWJsZURhdGE6IGJvb2xlYW47XG5cbiAgaGFzUGVybWlzc2lvblRvUmVhZEFueU1lYXN1cmVtZW50cyA9IGZhbHNlO1xuXG4gIGlzUHJldmlld0xvYWRpbmcgPSB0cnVlO1xuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGZ1bGwgb3IgY29tcGFjdCB0eXBlIG9mIGV4cG9ydCBpcyBzZWxlY3RlZC5cbiAgICogRnVsbCB0eXBlIG9mIGV4cG9ydCBpcyBiYXNlZCBvbiBtZWFzdXJlbWVudCBBUEkgZGF0YS5cbiAgICogQ29tcGFjdCB0eXBlIG9mIGV4cG9ydCBpcyBiYXNlZCBvbiBzZXJpZXMgQVBJIGRhdGEuXG4gICAqL1xuICBpc0Z1bGxUeXBlT2ZFeHBvcnQgPSBmYWxzZTtcblxuICBwcmV2aWV3VGFibGVEYXRhOiBFeHBvcnREYXRhW107XG5cbiAgbGltaXRFeGNlZWRlZE1lc3NhZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogQ29udGFpbnMgcHJvY2Vzc2VkIGRhdGEgdGhhdCBpcyBwcmVwYXJlZCB0byBiZSBleHBvcnRlZCBpZiBzZXJpZXMgZGF0YSB3YXMgZmV0Y2hlZFxuICAgKiBvciBzaG93biBpbiB0aGUgcHJldmlldyB0YWJsZSBpbiBjYXNlIG9mIG1lYXN1cmVtZW50cyBkYXRhLlxuICAgKi9cbiAgcHJpdmF0ZSBkYXRhVG9FeHBvcnQ6IERhdGFUb0V4cG9ydFtdO1xuICAvKipcbiAgICogQ29udGFpbnMgYSBsaXN0IG9mIGRhdGFwb2ludHMgdGhhdCBzZWxlY3RlZCBkYXRlIHJhbmdlIGV4Y2VlZHMgQVBJIGxpbWl0IG9mIDFfMDAwXzAwMCByZWNvcmRzLlxuICAgKi9cbiAgcHJpdmF0ZSBkYXRhUG9pbnRzRXhjZWVkaW5nT25lTWlsbGlvbkxpbWl0OiBEYXRhcG9pbnRzRXhjZWVkaW5nTGltaXRbXTtcbiAgLyoqXG4gICAqIFJlcHJlc2VudHMgdGhlIHN0YXRlIG9mIGZpbGUgdHlwZSBzZWxlY3Rpb24gY2hlY2tib3hlcy5cbiAgICovXG4gIHByaXZhdGUgZmlsZVR5cGVTZWxlY3Rpb25TdGF0ZTogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH07XG4gIC8qKlxuICAgKiBIb2xkIHRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBhZ2dyZWdhdGlvbiBmcm9tIHRoZSBleHBvcnQgY29uZmlnLlxuICAgKiBWYWx1ZSB3aWxsIGJlIGxvYWRlZCBvbiBjb21wb25lbnQgZGVzdHJveS5cbiAgICovXG4gIHByaXZhdGUgaW5pdGlhbEFnZ3JlZ2F0aW9uOiBBZ2dyZWdhdGlvbk9wdGlvbjtcbiAgLyoqXG4gICAqIEhvbGQgdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIGRhdGVGcm9tIGZyb20gdGhlIGV4cG9ydCBjb25maWcuXG4gICAqIFZhbHVlIHdpbGwgYmUgbG9hZGVkIG9uIGNvbXBvbmVudCBkZXN0cm95LlxuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsRGF0ZUZyb206IHN0cmluZztcbiAgLyoqXG4gICAqIEhvbGQgdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIGRhdGVUbyBmcm9tIHRoZSBleHBvcnQgY29uZmlnLlxuICAgKiBWYWx1ZSB3aWxsIGJlIGxvYWRlZCBvbiBjb21wb25lbnQgZGVzdHJveS5cbiAgICovXG4gIHByaXZhdGUgaW5pdGlhbERhdGVUbzogc3RyaW5nO1xuICAvKipcbiAgICogSG9sZCB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgZGF0YXBvaW50RGV0YWlscyBmcm9tIHRoZSBleHBvcnQgY29uZmlnLlxuICAgKiBTb21lIGxvZ2ljIG1heSBmaWx0ZXIgb3V0IGRhdGFwb2ludHMgaW4gZGF0YXBvaW50RGV0YWlscyBhcnJheSwgdGhhdCBleGNlZWRzIDFfMDAwXzAwMCBsaW1pdCBmb3IgbWVhc3VyZW1lbnRzIEFQSSxcbiAgICogYnV0IGZ1bGwgbGlzdCBpcyBzdGlsbCBuZWVkZWQgd2hlbiBjb21wb25lbnQgaXMgcmVvcGVuZWQuXG4gICAqIFZhbHVlIHdpbGwgYmUgbG9hZGVkIG9uIGNvbXBvbmVudCBkZXN0cm95LlxuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsRGF0YXBvaW50RGV0YWlsczogRGF0YXBvaW50RGV0YWlsc1tdO1xuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGFnZ3JlZ2F0aW9uIHZhbHVlIHdhcyBjaGFuZ2VkIHByb2dyYW1tYXRpY2FsbHkuXG4gICAqIEl0IHByZXZlbnRzIGEgY2FzZSB3aGVyZSBmZXRjaGluZyBtYXkgYmUgdHJpZ2dlcmVkIHR3aWNlIHdoZW4gZXhwb3J0IHR5cGUgaXMgY2hhbmdlZC5cbiAgICogQm90aCBvcHRpb25zIGFsb25lIGNhbiB0cmlnZ2VyIGZldGNoaW5nIGRhdGEuXG4gICAqL1xuICBwcml2YXRlIGlzQWdncmVnYXRpb25DaGFuZ2VkUHJvZ3JhbW1hdGljYWxseSA9IGZhbHNlO1xuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgYW55IG9mIHRoZSBleHBvcnQgZmlsZSB0eXBlcyAoQ1NWLCBFeGNlbCkgYXJlIGNoZWNrZWQuXG4gICAqL1xuICBwcml2YXRlIGlzQW55T2ZFeHBvcnRGaWxlVHlwZUNoZWNrZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGRhdGVGcm9tU3ViamVjdCA9IG5ldyBTdWJqZWN0PERhdGVGZXRjaENvbmZpZz4oKTtcbiAgcHJpdmF0ZSBkYXRlVG9TdWJqZWN0ID0gbmV3IFN1YmplY3Q8RGF0ZUZldGNoQ29uZmlnPigpO1xuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBkeW5hbWljRmlsZXNUeXBlTWV0YWRhdGE6IHsgW2tleTogc3RyaW5nXTogRmlsZVR5cGVNZXRhZGF0YSB9ID0ge307XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhZ2dyZWdhdGlvblNlcnZpY2U6IEFnZ3JlZ2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGRhdGFwb2ludHNFeHBvcnRNb2RhbFNlcnZpY2U6IERhdGFQcm9jZXNzaW5nU2VydmljZSxcbiAgICBwcml2YXRlIGRhdGFwb2ludHNFeHBvcnRTZWxlY3RvckZpbGVFeHBvcnRlclNlcnZpY2U6IERhdGFwb2ludHNFeHBvcnRTZWxlY3RvckZpbGVFeHBvcnRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXRhRmV0Y2hpbmdTZXJ2aWNlOiBEYXRhRmV0Y2hpbmdTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIEBJbmplY3QoRklMRV9HRU5FUkFUT1JTKSBwcml2YXRlIGdlbmVyYXRvcnM6IEZpbGVHZW5lcmF0b3JbXSxcbiAgICBwcml2YXRlIGdhaW5zaWdodFNlcnZpY2U6IEdhaW5zaWdodFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5zZXRGaWxlc1R5cGUodGhpcy5nZW5lcmF0b3JzKTtcblxuICAgIHRoaXMuZGF0ZUZyb21TdWJqZWN0XG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoMzAwKSwgdGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAuc3Vic2NyaWJlKGFzeW5jIChkYXRlSW5mbzogRGF0ZUZldGNoQ29uZmlnKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlRGF0ZUFuZEZldGNoRGF0YSgnZGF0ZUZyb20nLCBkYXRlSW5mbyk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuZGF0ZVRvU3ViamVjdFxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDMwMCksIHRha2VVbnRpbERlc3Ryb3llZCgpKVxuICAgICAgLnN1YnNjcmliZShhc3luYyAoZGF0ZUluZm86IERhdGVGZXRjaENvbmZpZykgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZURhdGVBbmRGZXRjaERhdGEoJ2RhdGVUbycsIGRhdGVJbmZvKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgc2V0RmlsZXNUeXBlKGdlbmVyYXRvcnM6IEZpbGVHZW5lcmF0b3JbXSkge1xuICAgIGdlbmVyYXRvcnMuZm9yRWFjaChnID0+IHtcbiAgICAgIHRoaXMuZHluYW1pY0ZpbGVzVHlwZU1ldGFkYXRhW2cuZ2V0VHlwZSgpXSA9IHtcbiAgICAgICAgbGFiZWw6IGcuZ2V0TGFiZWwoKSxcbiAgICAgICAgaWNvbjogZy5nZXRJY29uKCksXG4gICAgICAgIHRpdGxlOiBnLmdldFRpdGxlKCksXG4gICAgICAgIGV4dGVuc2lvbjogZy5nZXRGaWxlRXh0ZW5zaW9uKCksXG4gICAgICAgIHppcE5hbWU6IGcuZ2V0WmlwTmFtZSgpLFxuICAgICAgICB0eXBlOiBnLmdldFR5cGUoKVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNvdXJjZXNQZXJtaXR0ZWRUb1JlYWQ6IHN0cmluZ1tdID1cbiAgICAgIGF3YWl0IHRoaXMuZGF0YUZldGNoaW5nU2VydmljZS5nZXRTb3VyY2VzV2l0aFBlcm1pc3Npb25zVG9SZWFkKFxuICAgICAgICB0aGlzLmV4cG9ydENvbmZpZy5kYXRhcG9pbnREZXRhaWxzXG4gICAgICApO1xuXG4gICAgaWYgKHNvdXJjZXNQZXJtaXR0ZWRUb1JlYWQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHNvdXJjZXNQZXJtaXR0ZWRUb1JlYWQubGVuZ3RoICE9PSB0aGlzLmV4cG9ydENvbmZpZy5kYXRhcG9pbnREZXRhaWxzLmxlbmd0aCkge1xuICAgICAgdGhpcy5leHBvcnRDb25maWcuZGF0YXBvaW50RGV0YWlscyA9IHRoaXMuZXhwb3J0Q29uZmlnLmRhdGFwb2ludERldGFpbHMuZmlsdGVyKGRhdGFQb2ludCA9PlxuICAgICAgICBzb3VyY2VzUGVybWl0dGVkVG9SZWFkLmluY2x1ZGVzKFN0cmluZyhkYXRhUG9pbnQuc291cmNlKSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5oYXNQZXJtaXNzaW9uVG9SZWFkQW55TWVhc3VyZW1lbnRzID0gdHJ1ZTtcblxuICAgIHRoaXMuc3RvcmVJbml0aWFsQ2hhbmdlYWJsZUNvbmZpZygpO1xuXG4gICAgdGhpcy5maWxlVHlwZVNlbGVjdGlvblN0YXRlID0gdGhpcy5nZXRJbml0aWFsU2VsZWN0aW9uKHRoaXMuZHluYW1pY0ZpbGVzVHlwZU1ldGFkYXRhLCBbMF0pO1xuXG4gICAgdGhpcy5mb3JtR3JvdXAgPSB0aGlzLmNyZWF0ZUZvcm0oKTtcbiAgICB0aGlzLmRhdGFUb0V4cG9ydCA9IGF3YWl0IHRoaXMuZGF0YUZldGNoaW5nU2VydmljZS5mZXRjaEFuZFByZXBhcmVEYXRhVG9FeHBvcnQoXG4gICAgICB0aGlzLmV4cG9ydENvbmZpZyxcbiAgICAgIHRoaXMuaXNGdWxsVHlwZU9mRXhwb3J0XG4gICAgKTtcblxuICAgIHRoaXMuaGFuZGxlRGF0ZVNlbGVjdG9yQ2hhbmdlcygpO1xuICAgIHRoaXMuZGV0ZXJtaW5lU2hvd2luZ1ByZXZpZXdPckVtcHR5U3RhdGUoKTtcbiAgICB0aGlzLmhhbmRsZUV4cG9ydE1vZGVDaGFuZ2VzKCk7XG4gICAgdGhpcy5oYW5kbGVGaWxlVHlwZVNlbGVjdGlvbkNoYW5nZXMoKTtcbiAgICB0aGlzLmhhbmRsZUZvcm1WYWxpZGF0aW9uQ2hhbmdlcygpO1xuXG4gICAgdGhpcy51cGRhdGVGaWxlVHlwZUNvbnRyb2woKTtcblxuICAgIHRoaXMudXBkYXRlRGlzYWJsZWRBZ2dyZWdhdGlvbk9wdGlvbnMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB0aGlzLmxvYWRJbml0aWFsQ2hhbmdlYWJsZUNvbmZpZygpO1xuICB9XG5cbiAgYXN5bmMgZXhwb3J0QW5kRG93bmxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZmlsZUV4cG9ydHM6IEZpbGVFeHBvcnRDb25maWdbXSA9IE9iamVjdC5lbnRyaWVzKHRoaXMuZHluYW1pY0ZpbGVzVHlwZU1ldGFkYXRhKS5tYXAoXG4gICAgICAoW18sIHZhbHVlXSkgPT4gKHtcbiAgICAgICAgZmlsZVR5cGU6IHZhbHVlLnR5cGUgYXMgc3RyaW5nLFxuICAgICAgICB6aXBOYW1lOiB2YWx1ZS56aXBOYW1lXG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCBzZWxlY3RlZEZpbGVFeHBvcnRzOiBGaWxlRXhwb3J0Q29uZmlnW10gPSB0aGlzLmdldE9ubHlTZWxlY3RlZEZpbGVFeHBvcnRzKGZpbGVFeHBvcnRzKTtcblxuICAgIHRoaXMudHJpZ2dlckdhaW5zaWdodERvd25sb2FkRXZlbnQoc2VsZWN0ZWRGaWxlRXhwb3J0cyk7XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHNlbGVjdGVkRmlsZUV4cG9ydHMubWFwKGFzeW5jICh7IGZpbGVUeXBlLCB6aXBOYW1lIH0pID0+IHtcbiAgICAgICAgY29uc3QgYmxvYiA9IGF3YWl0IHRoaXMuZXhwb3J0RmlsZShmaWxlVHlwZSk7XG4gICAgICAgIGF3YWl0IHRoaXMuZG93bmxvYWRGaWxlKGJsb2IsIGZpbGVUeXBlLCB6aXBOYW1lKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuZGF0YXBvaW50c0V4cG9ydFNlbGVjdG9yRmlsZUV4cG9ydGVyU2VydmljZS5jbGVhbnVwQ2FjaGVkRGF0YSgpO1xuICB9XG5cbiAgZ2V0T25seVNlbGVjdGVkRmlsZUV4cG9ydHMoZmlsZUV4cG9ydHM6IEZpbGVFeHBvcnRDb25maWdbXSk6IEZpbGVFeHBvcnRDb25maWdbXSB7XG4gICAgcmV0dXJuIGZpbGVFeHBvcnRzLmZpbHRlcihmID0+IHRoaXMuZmlsZVR5cGVTZWxlY3Rpb25TdGF0ZVtmLmZpbGVUeXBlXSA9PT0gdHJ1ZSk7XG4gIH1cblxuICBhc3luYyBleHBvcnRGaWxlKGZpbGVUeXBlOiBzdHJpbmcpOiBQcm9taXNlPEJsb2IgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuaXNGdWxsVHlwZU9mRXhwb3J0XG4gICAgICA/IGF3YWl0IHRoaXMuZXhwb3J0TWVhc3VyZW1lbnRGaWxlKGZpbGVUeXBlKVxuICAgICAgOiBhd2FpdCB0aGlzLmV4cG9ydFNlcmllc0ZpbGUoZmlsZVR5cGUpO1xuICB9XG5cbiAgYXN5bmMgZG93bmxvYWRGaWxlKFxuICAgIGJsb2I6IEJsb2IgfCBudWxsLFxuICAgIGZpbGVUeXBlOiBzdHJpbmcsXG4gICAgbWVhc3VyZW1lbnRzWmlwRmlsZU5hbWU6IHN0cmluZ1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmRhdGFwb2ludHNFeGNlZWRpbmdCcm93c2VyRG93bmxvYWRMaW1pdCA9XG4gICAgICB0aGlzLmRhdGFwb2ludHNFeGNlZWRpbmdCcm93c2VyRG93bmxvYWRMaW1pdC5maWx0ZXIoXG4gICAgICAgIGRhdGFwb2ludCA9PiAhdGhpcy5kYXRhUG9pbnRzRXhjZWVkaW5nT25lTWlsbGlvbkxpbWl0LmluY2x1ZGVzKGRhdGFwb2ludClcbiAgICAgICk7XG5cbiAgICBjb25zdCBzaG91bGRTaG93QWxlcnQgPSB0aGlzLmRhdGFwb2ludHNFeGNlZWRpbmdCcm93c2VyRG93bmxvYWRMaW1pdC5sZW5ndGggPiAwO1xuXG4gICAgLy8gSGFuZGxlcyBhIGNhc2Ugd2hlcmUgYWxsIGZpbGVzIGFyZSBzZW50IGJ5IGVtYWlsLlxuICAgIGlmICghYmxvYiAmJiBzaG91bGRTaG93QWxlcnQpIHtcbiAgICAgIHRoaXMuZGF0YUZldGNoaW5nU2VydmljZS5zaG93U2VuZFZpYUVtYWlsSW5mb0FsZXJ0KFxuICAgICAgICBmaWxlVHlwZSxcbiAgICAgICAgdGhpcy5kYXRhcG9pbnRzRXhjZWVkaW5nQnJvd3NlckRvd25sb2FkTGltaXRcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGJsb2IpIHtcbiAgICAgIC8vIEhhbmRsZXMgdGhlIGNhc2Ugd2hlcmUgc29tZSBvZiB0aGUgZmlsZXMgYXJlIHNlbnQgYnkgZW1haWwuXG4gICAgICBpZiAoc2hvdWxkU2hvd0FsZXJ0KSB7XG4gICAgICAgIHRoaXMuZGF0YUZldGNoaW5nU2VydmljZS5zaG93U2VuZFZpYUVtYWlsSW5mb0FsZXJ0KFxuICAgICAgICAgIGZpbGVUeXBlLFxuICAgICAgICAgIHRoaXMuZGF0YXBvaW50c0V4Y2VlZGluZ0Jyb3dzZXJEb3dubG9hZExpbWl0XG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaXNGdWxsVHlwZU9mRXhwb3J0XG4gICAgICAgID8gc2F2ZUFzKGJsb2IsIG1lYXN1cmVtZW50c1ppcEZpbGVOYW1lKVxuICAgICAgICA6IHNhdmVBcyhibG9iLCBibG9iW1NFUklFU19EQVRBX01FUkdFRF9GSUxFX05BTUVdKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0cyBhIG1lYXN1cmVtZW50IGZpbGUgb2YgdGhlIHNwZWNpZmllZCB0eXBlLlxuICAgKlxuICAgKiBNZWFzdXJlbWVudHMgQVBJIGRvZXMgcHJvdmlkZSBhIHdheSB0byBmZXRjaCBhIHByZXByb2Nlc3NlZCBDU1YvRXhjZWwgZmlsZS5cbiAgICpcbiAgICogQXQgdGhpcyBwb2ludCBhIGJhY2tlZCBmaWxlIG5lZWRzIHRvIGJlIGZldGNoZWQuXG4gICAqIE1lYXN1cmVtZW50IGRhdGEgdXNlZCBmb3IgYSBwcmV2aWV3IGNvbnRhaW5zIGp1c3QgNSBmaXJzdCByZWNvcmRzXG4gICAqIGFuZCBpdCdzIG5vdCBmZXRjaGVkIHdpdGggQ1NWL0V4Y2VsIGhlYWRlcnMuXG4gICAqXG4gICAqIEBwYXJhbSBmaWxlVHlwZSAtIFRoZSB0eXBlIG9mIGZpbGUgdG8gZXhwb3J0LlxuICAgKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIEJsb2IgcmVwcmVzZW50aW5nIHRoZSBleHBvcnRlZCBmaWxlIG9yIG51bGwgd2hlbiBubyBkYXRhIHRvIGV4cG9ydCBvciBpdCdzIHNlbnQgdmlhIGVtYWlsLlxuICAgKi9cbiAgYXN5bmMgZXhwb3J0TWVhc3VyZW1lbnRGaWxlKGZpbGVUeXBlOiBzdHJpbmcpOiBQcm9taXNlPEJsb2I+IHwgbnVsbCB7XG4gICAgY29uc3QgeyBhY2NlcHRUeXBlLCBleHRlbnNpb24gfSA9IHRoaXMuZGF0YXBvaW50c0V4cG9ydE1vZGFsU2VydmljZS5maWxlVHlwZXNDb25maWdzW2ZpbGVUeXBlXTtcblxuICAgIGNvbnN0IHVwZGF0ZWRFeHBvcnRDb25maWc6IEV4cG9ydENvbmZpZyA9IHRoaXMuZXhjbHVkZURhdGFwb2ludHNUaGF0RXhjZWVkc0FwaUxpbWl0KFxuICAgICAgdGhpcy5leHBvcnRDb25maWdcbiAgICApO1xuXG4gICAgY29uc3QgZGF0YVRvRXhwb3J0OiBEYXRhVG9FeHBvcnRXaXRoQmFja2VuZENyZWF0ZWRGaWxlW10gPVxuICAgICAgYXdhaXQgdGhpcy5kYXRhRmV0Y2hpbmdTZXJ2aWNlLmZldGNoTWVhc3VyZW1lbnREYXRhRmlsZXNBbmRQYWlyV2l0aFNvdXJjZURldGFpbHMoXG4gICAgICAgIGFjY2VwdFR5cGUsXG4gICAgICAgIHVwZGF0ZWRFeHBvcnRDb25maWdcbiAgICAgICk7XG5cbiAgICBjb25zdCBpc0FsbFVuZGVmaW5lZCA9IGRhdGFUb0V4cG9ydC5ldmVyeShkYXRhID0+IGRhdGEgPT09IHVuZGVmaW5lZCk7XG4gICAgaWYgKGlzQWxsVW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5kYXRhcG9pbnRzRXhwb3J0U2VsZWN0b3JGaWxlRXhwb3J0ZXJTZXJ2aWNlLmdldE1lYXN1cmVtZW50RXhwb3J0ZWREYXRhQmxvYihcbiAgICAgIGV4dGVuc2lvbixcbiAgICAgIGRhdGFUb0V4cG9ydFxuICAgICk7XG4gIH1cblxuICBleGNsdWRlRGF0YXBvaW50c1RoYXRFeGNlZWRzQXBpTGltaXQoZXhwb3J0Q29uZmlnOiBFeHBvcnRDb25maWcpOiBFeHBvcnRDb25maWcge1xuICAgIGNvbnN0IHNraXBwZWREYXRhcG9pbnRzU291cmNlOiBzdHJpbmdbXSA9IHRoaXMuZGF0YVBvaW50c0V4Y2VlZGluZ09uZU1pbGxpb25MaW1pdC5tYXAoXG4gICAgICBkYXRhcG9pbnQgPT4gZGF0YXBvaW50LmRhdGFwb2ludERldGFpbC5zb3VyY2UudG9TdHJpbmcoKVxuICAgICk7XG5cbiAgICBjb25zdCBmaWx0ZXJlZERhdGFwb2ludHM6IERhdGFwb2ludERldGFpbHNbXSA9IGV4cG9ydENvbmZpZy5kYXRhcG9pbnREZXRhaWxzLmZpbHRlcihcbiAgICAgIGRhdGFwb2ludCA9PiAhc2tpcHBlZERhdGFwb2ludHNTb3VyY2UuaW5jbHVkZXMoU3RyaW5nKGRhdGFwb2ludC5zb3VyY2UpKVxuICAgICk7XG5cbiAgICBleHBvcnRDb25maWcuZGF0YXBvaW50RGV0YWlscyA9IGZpbHRlcmVkRGF0YXBvaW50cztcbiAgICByZXR1cm4gZXhwb3J0Q29uZmlnO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydHMgdGhlIHNlcmllcyBkYXRhIHRvIGEgZmlsZSBvZiB0aGUgc3BlY2lmaWVkIHR5cGUuXG4gICAqXG4gICAqIFNlcmllcyBBUEkgZG9lcyBub3QgcHJvdmlkZSBhIHdheSB0byBmZXRjaCBhIHByZXByb2Nlc3NlZCBDU1YvRXhjZWwgZmlsZS5cbiAgICpcbiAgICogU2VyaWVzIGRhdGEgdXNlZCBmb3IgZXhwb3J0aW5nIGEgZmlsZSBpcyBhbHJlYWR5IGZldGNoZWQgZm9yIGEgcHJldmlld1xuICAgKiBhbmQgY2FuIGJlIHJldXNlZCBmb3IgZXhwb3J0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gZmlsZVR5cGUgLSBUaGUgdHlwZSBvZiBmaWxlIHRvIGV4cG9ydCAoZS5nLiwgQ1NWLCBFeGNlbCkuXG4gICAqIEByZXR1cm5zIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgQmxvYiByZXByZXNlbnRpbmcgdGhlIGV4cG9ydGVkIGZpbGUuXG4gICAqL1xuICBhc3luYyBleHBvcnRTZXJpZXNGaWxlKGZpbGVUeXBlOiBzdHJpbmcpOiBQcm9taXNlPEJsb2I+IHtcbiAgICBjb25zdCBtZXJnZWRFeHBvcnREZXRhaWxzOiBNZXJnZWRFeHBvcnREZXRhaWxzID0ge1xuICAgICAgYWdncmVnYXRpb246IHRoaXMuZXhwb3J0Q29uZmlnLmFnZ3JlZ2F0aW9uLFxuICAgICAgZGF0ZUZyb206IHRoaXMuZXhwb3J0Q29uZmlnLmRhdGVGcm9tLFxuICAgICAgZGF0ZVRvOiB0aGlzLmV4cG9ydENvbmZpZy5kYXRlVG9cbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuZGF0YXBvaW50c0V4cG9ydFNlbGVjdG9yRmlsZUV4cG9ydGVyU2VydmljZS5nZXRTZXJpZXNFeHBvcnRlZERhdGFCbG9iKFxuICAgICAgZmlsZVR5cGUsXG4gICAgICB0aGlzLmRhdGFUb0V4cG9ydCxcbiAgICAgIG1lcmdlZEV4cG9ydERldGFpbHNcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgb25BZ2dyZWdhdGlvbkNoYW5nZShuZXdBZ2dyZWdhdGlvbjogQWdncmVnYXRpb25PcHRpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjdXJyZW50QWdncmVnYXRpb24gPSB0aGlzLmV4cG9ydENvbmZpZy5hZ2dyZWdhdGlvbiA/PyBBR0dSRUdBVElPTl9WQUxVRVMubm9uZTtcblxuICAgIGlmIChjdXJyZW50QWdncmVnYXRpb24gPT09IG5ld0FnZ3JlZ2F0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5leHBvcnRDb25maWcuYWdncmVnYXRpb24gPSBuZXdBZ2dyZWdhdGlvbjtcblxuICAgIGlmICh0aGlzLmlzQWdncmVnYXRpb25DaGFuZ2VkUHJvZ3JhbW1hdGljYWxseSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMubG9hZEV4cG9ydERhdGEoKTtcbiAgICB0aGlzLnVwZGF0ZURvd25sb2FkQnV0dG9uU3RhdGUoKTtcbiAgfVxuXG4gIG9uRGF0ZUZyb21DaGFuZ2UodXBkYXRlZERhdGU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlKHVwZGF0ZWREYXRlLCB0aGlzLmV4cG9ydENvbmZpZy5kYXRlVG8pO1xuICB9XG5cbiAgb25EYXRlVG9DaGFuZ2UodXBkYXRlZERhdGU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlKHRoaXMuZXhwb3J0Q29uZmlnLmRhdGVGcm9tLCB1cGRhdGVkRGF0ZSk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVEYXRlQW5kRmV0Y2hEYXRhKFxuICAgIGRhdGVUeXBlOiAnZGF0ZUZyb20nIHwgJ2RhdGVUbycsXG4gICAgZGF0ZUluZm86IERhdGVGZXRjaENvbmZpZ1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmV4cG9ydENvbmZpZ1tkYXRlVHlwZV0gPSBkYXRlSW5mby5kYXRlO1xuICAgIGlmICghZGF0ZUluZm8uc2hvdWxkRmV0Y2hEYXRhKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5sb2FkRXhwb3J0RGF0YSgpO1xuXG4gICAgaWYgKHRoaXMuaXNGdWxsVHlwZU9mRXhwb3J0KSB7XG4gICAgICBhd2FpdCB0aGlzLmRldGVybWluZUlmTWVhc3VyZW1lbnRSZXNwb25zZVdpbGxCZVByb2Nlc3NlZEJ5QmFja2VuZCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZURvd25sb2FkQnV0dG9uU3RhdGUoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBvbkV4cG9ydFR5cGVDaGFuZ2UoZXhwb3J0VHlwZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGV4cG9ydFR5cGUgPT09IEVYUE9SVF9NT0RFX1ZBTFVFUy5mdWxsKSB7XG4gICAgICB0aGlzLmlzQWdncmVnYXRpb25DaGFuZ2VkUHJvZ3JhbW1hdGljYWxseSA9IHRydWU7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5hZ2dyZWdhdGlvbi5zZXRWYWx1ZShBR0dSRUdBVElPTl9WQUxVRVMubm9uZSk7XG4gICAgICB0aGlzLmlzQWdncmVnYXRpb25DaGFuZ2VkUHJvZ3JhbW1hdGljYWxseSA9IGZhbHNlO1xuXG4gICAgICB0aGlzLmlzRnVsbFR5cGVPZkV4cG9ydCA9IHRydWU7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRFeHBvcnREYXRhKCk7XG4gICAgICBhd2FpdCB0aGlzLmRldGVybWluZUlmTWVhc3VyZW1lbnRSZXNwb25zZVdpbGxCZVByb2Nlc3NlZEJ5QmFja2VuZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucmVzZXRGdWxsRXhwb3J0UmVsYXRlZFByb3BlcnRpZXMoKTtcbiAgICB0aGlzLmlzRnVsbFR5cGVPZkV4cG9ydCA9IGZhbHNlO1xuICAgIGF3YWl0IHRoaXMubG9hZEV4cG9ydERhdGEoKTtcblxuICAgIHRoaXMudXBkYXRlRGlzYWJsZWRBZ2dyZWdhdGlvbk9wdGlvbnMoKTtcblxuICAgIHRoaXMudXBkYXRlRG93bmxvYWRCdXR0b25TdGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9ucygpOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkQWdncmVnYXRpb25PcHRpb25zID0gdGhpcy5hZ2dyZWdhdGlvblNlcnZpY2UuZ2V0RGlzYWJsZWRBZ2dyZWdhdGlvbk9wdGlvbnMoXG4gICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5kYXRlRnJvbS52YWx1ZSxcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmRhdGVUby52YWx1ZVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZvcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoXG4gICAgICB7XG4gICAgICAgIGRhdGVGcm9tOiBuZXcgRm9ybUNvbnRyb2wodGhpcy5leHBvcnRDb25maWcuZGF0ZUZyb20pLFxuICAgICAgICBkYXRlVG86IG5ldyBGb3JtQ29udHJvbCh0aGlzLmV4cG9ydENvbmZpZy5kYXRlVG8pLFxuICAgICAgICBhZ2dyZWdhdGlvbjogbmV3IEZvcm1Db250cm9sKFxuICAgICAgICAgIHRoaXMuZXhwb3J0Q29uZmlnLmFnZ3JlZ2F0aW9uID8gdGhpcy5leHBvcnRDb25maWcuYWdncmVnYXRpb24gOiBBR0dSRUdBVElPTl9WQUxVRVMubm9uZVxuICAgICAgICApLFxuICAgICAgICBleHBvcnRNb2RlOiBuZXcgRm9ybUNvbnRyb2woRVhQT1JUX01PREVfVkFMVUVTLmNvbXBhY3QpLFxuICAgICAgICBmaWxlVHlwZXM6IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoXG4gICAgICAgICAgdGhpcy5nZW5lcmF0b3JzLnJlZHVjZSgoYSwgYykgPT4ge1xuICAgICAgICAgICAgYVtjLmdldFR5cGUoKV0gPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICAgIH0sIHt9KVxuICAgICAgICApXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB2YWxpZGF0b3JzOiBbZGF0ZVJhbmdlVmFsaWRhdG9yXVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmVQcmV2aWV3KCk6IHZvaWQge1xuICAgIHRoaXMuaXNQcmV2aWV3TG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5wcmV2aWV3VGFibGVEYXRhID1cbiAgICAgIHRoaXMuZGF0YXBvaW50c0V4cG9ydE1vZGFsU2VydmljZS50cmFuc2Zvcm1Ub0V4cG9ydEZpbGVTdHJ1Y3R1cmVGb3JQcmV2aWV3KHRoaXMuZGF0YVRvRXhwb3J0KTtcbiAgICB0aGlzLmlzUHJldmlld0xvYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRGF0ZVNlbGVjdG9yQ2hhbmdlcygpOiB2b2lkIHtcbiAgICBjb25zdCBhZ2dyZWdhdGlvbkNvbnRyb2wgPSB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5hZ2dyZWdhdGlvbjtcbiAgICBjb25zdCBkYXRlRnJvbVNlbGVjdG9yID0gdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuZGF0ZUZyb207XG4gICAgY29uc3QgZGF0ZVRvU2VsZWN0b3IgPSB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5kYXRlVG87XG5cbiAgICBjb25zdCB1cGRhdGVBZ2dyZWdhdGlvbk9wdGlvbnMgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuaXNGdWxsVHlwZU9mRXhwb3J0KSB7XG4gICAgICAgIHRoaXMudXBkYXRlRGlzYWJsZWRBZ2dyZWdhdGlvbk9wdGlvbnMoKTtcblxuICAgICAgICBjb25zdCBmaXJzdEF2YWlsYWJsZUFnZ3JlZ2F0aW9uVmFsdWU6IEFnZ3JlZ2F0aW9uT3B0aW9uID1cbiAgICAgICAgICB0aGlzLmFnZ3JlZ2F0aW9uU2VydmljZS5kZXRlcm1pbmVGaXJzdE5ld0F2YWlsYWJsZUFnZ3JlZ2F0aW9uVmFsdWUoXG4gICAgICAgICAgICBhZ2dyZWdhdGlvbkNvbnRyb2wudmFsdWUsXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkQWdncmVnYXRpb25PcHRpb25zXG4gICAgICAgICAgKTtcblxuICAgICAgICBpZiAoZmlyc3RBdmFpbGFibGVBZ2dyZWdhdGlvblZhbHVlKSB7XG4gICAgICAgICAgYWdncmVnYXRpb25Db250cm9sLnNldFZhbHVlKGZpcnN0QXZhaWxhYmxlQWdncmVnYXRpb25WYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgbWVyZ2UoZGF0ZUZyb21TZWxlY3Rvci52YWx1ZUNoYW5nZXMsIGRhdGVUb1NlbGVjdG9yLnZhbHVlQ2hhbmdlcylcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUodXBkYXRlQWdncmVnYXRpb25PcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRXhwb3J0TW9kZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgY29uc3QgYWdncmVnYXRpb25Db250cm9sID0gdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuYWdncmVnYXRpb247XG5cbiAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5leHBvcnRNb2RlLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZShleHBvcnRNb2RlVmFsdWUgPT4ge1xuICAgICAgICBpZiAoZXhwb3J0TW9kZVZhbHVlLnRvU3RyaW5nKCkgPT09IEVYUE9SVF9NT0RFX1ZBTFVFUy5mdWxsKSB7XG4gICAgICAgICAgYWdncmVnYXRpb25Db250cm9sLmRpc2FibGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZ2dyZWdhdGlvbkNvbnRyb2wuZW5hYmxlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVGaWxlVHlwZVNlbGVjdGlvbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuZmlsZVR5cGVzLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZShmaWxlVHlwZXNTZWxlY3Rpb25TdGF0ZSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlRmlsZVR5cGVTZWxlY3Rpb25TdGF0ZShmaWxlVHlwZXNTZWxlY3Rpb25TdGF0ZSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRmlsZVR5cGVTZWxlY3Rpb25TdGF0ZShjaGVja2JveGVzU3RhdGU6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9KTogdm9pZCB7XG4gICAgdGhpcy5pc0FueU9mRXhwb3J0RmlsZVR5cGVDaGVja2VkID0gT2JqZWN0LnZhbHVlcyhjaGVja2JveGVzU3RhdGUpLnNvbWUoXG4gICAgICB2YWx1ZSA9PiB2YWx1ZSA9PT0gdHJ1ZVxuICAgICk7XG4gICAgdGhpcy5maWxlVHlwZVNlbGVjdGlvblN0YXRlID0gY2hlY2tib3hlc1N0YXRlO1xuICAgIHRoaXMudXBkYXRlRG93bmxvYWRCdXR0b25TdGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVGb3JtVmFsaWRhdGlvbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtR3JvdXAuc3RhdHVzQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlRG93bmxvYWRCdXR0b25TdGF0ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGaWxlVHlwZUNvbnRyb2woKTogdm9pZCB7XG4gICAgY29uc3QgZmlsZVR5cGVzQ29udHJvbCA9IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmZpbGVUeXBlcztcbiAgICBpZiAoZmlsZVR5cGVzQ29udHJvbCkge1xuICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gZmlsZVR5cGVzQ29udHJvbC52YWx1ZSB8fCB7fTtcbiAgICAgIGNvbnN0IHVwZGF0ZWRWYWx1ZSA9IHsgLi4uY3VycmVudFZhbHVlIH07XG5cbiAgICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuZmlsZVR5cGVTZWxlY3Rpb25TdGF0ZSkuZm9yRWFjaCgoW2ZpbGVUeXBlLCBpc1NlbGVjdGVkXSkgPT4ge1xuICAgICAgICBpZiAoZmlsZVR5cGUgaW4gY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgdXBkYXRlZFZhbHVlW2ZpbGVUeXBlXSA9IGlzU2VsZWN0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBmaWxlVHlwZXNDb250cm9sLnBhdGNoVmFsdWUodXBkYXRlZFZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRldGVybWluZVNob3dpbmdQcmV2aWV3T3JFbXB0eVN0YXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IGhhc0RhdGFUb1Nob3cgPSB0aGlzLmRhdGFUb0V4cG9ydC5zb21lKGRhdGFUb0V4cG9ydEl0ZW0gPT5cbiAgICAgIHRoaXMuaXNGdWxsVHlwZU9mRXhwb3J0XG4gICAgICAgID8gISFkYXRhVG9FeHBvcnRJdGVtXG4gICAgICAgIDogZGF0YVRvRXhwb3J0SXRlbS50aW1lVmFsdWVNYXAgJiYgT2JqZWN0LmtleXMoZGF0YVRvRXhwb3J0SXRlbS50aW1lVmFsdWVNYXApLmxlbmd0aCA+IDBcbiAgICApO1xuXG4gICAgdGhpcy5oYXNGZXRjaGVkRGF0YUFueVZhbHVlc1RvRXhwb3J0ID0gaGFzRGF0YVRvU2hvdztcblxuICAgIGlmIChoYXNEYXRhVG9TaG93KSB7XG4gICAgICB0aGlzLnByZXBhcmVQcmV2aWV3KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNQcmV2aWV3TG9hZGluZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGV0ZXJtaW5lSWZNZWFzdXJlbWVudFJlc3BvbnNlV2lsbEJlUHJvY2Vzc2VkQnlCYWNrZW5kKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuaXNQcmV2aWV3TG9hZGluZyA9IHRydWU7XG5cbiAgICB0aGlzLmRhdGFwb2ludHNFeGNlZWRpbmdCcm93c2VyRG93bmxvYWRMaW1pdCA9XG4gICAgICBhd2FpdCB0aGlzLmRhdGFGZXRjaGluZ1NlcnZpY2UuZ2V0RGF0YXBvaW50c0V4Y2VlZGluZ0xpbWl0KHRoaXMuZXhwb3J0Q29uZmlnKTtcblxuICAgIGNvbnN0IHsgYnJvd3NlckRvd25sb2FkYWJsZUNvdW50LCBlbWFpbERlbGl2ZXJhYmxlQ291bnQsIG5vblJldHJpZXZhYmxlQ291bnQgfSA9XG4gICAgICB0aGlzLmNhbGN1bGF0ZURhdGFwb2ludENvdW50cygpO1xuXG4gICAgdGhpcy5oYXNOb0V4cG9ydGFibGVEYXRhID1cbiAgICAgIGJyb3dzZXJEb3dubG9hZGFibGVDb3VudCA9PT0gMCAmJiBlbWFpbERlbGl2ZXJhYmxlQ291bnQgPT09IDAgJiYgbm9uUmV0cmlldmFibGVDb3VudCA+IDA7XG5cbiAgICBpZiAodGhpcy5kYXRhcG9pbnRzRXhjZWVkaW5nQnJvd3NlckRvd25sb2FkTGltaXQubGVuZ3RoID4gMCAmJiAhdGhpcy5oYXNOb0V4cG9ydGFibGVEYXRhKSB7XG4gICAgICB0aGlzLmxpbWl0RXhjZWVkZWRNZXNzYWdlID0gdGhpcy5kYXRhRmV0Y2hpbmdTZXJ2aWNlLmdldExpbWl0RXhjZWVkZWRNZXNzYWdlKFxuICAgICAgICB0aGlzLmhhc05vRXhwb3J0YWJsZURhdGEsXG4gICAgICAgIGVtYWlsRGVsaXZlcmFibGVDb3VudCxcbiAgICAgICAgYnJvd3NlckRvd25sb2FkYWJsZUNvdW50LFxuICAgICAgICBub25SZXRyaWV2YWJsZUNvdW50LFxuICAgICAgICB0aGlzLmV4cG9ydENvbmZpZy5kYXRhcG9pbnREZXRhaWxzLmxlbmd0aFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhcG9pbnRzRXhjZWVkaW5nQnJvd3NlckRvd25sb2FkTGltaXQubGVuZ3RoID4gMCAmJiB0aGlzLmhhc05vRXhwb3J0YWJsZURhdGEpIHtcbiAgICAgIHRoaXMubGltaXRFeGNlZWRlZE1lc3NhZ2UgPSB0aGlzLmRhdGFGZXRjaGluZ1NlcnZpY2UuZ2V0TGltaXRFeGNlZWRlZE1lc3NhZ2UoXG4gICAgICAgIHRoaXMuaGFzTm9FeHBvcnRhYmxlRGF0YVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZURvd25sb2FkQnV0dG9uU3RhdGUoKTtcblxuICAgIHRoaXMuaXNQcmV2aWV3TG9hZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGVEYXRhcG9pbnRDb3VudHMoKTogRGF0YXBvaW50Q291bnRzIHtcbiAgICBjb25zdCBSRUNPUkRfQVBJX0xJTUlUID0gMV8wMDBfMDAwO1xuXG4gICAgdGhpcy5kYXRhUG9pbnRzRXhjZWVkaW5nT25lTWlsbGlvbkxpbWl0ID0gdGhpcy5kYXRhcG9pbnRzRXhjZWVkaW5nQnJvd3NlckRvd25sb2FkTGltaXQuZmlsdGVyKFxuICAgICAgZGF0YXBvaW50c0V4Y2VlZGluZ0Jyb3dzZXJEb3dubG9hZExpbWl0ID0+XG4gICAgICAgIGRhdGFwb2ludHNFeGNlZWRpbmdCcm93c2VyRG93bmxvYWRMaW1pdC50b3RhbEVsZW1lbnRzID4gUkVDT1JEX0FQSV9MSU1JVFxuICAgICk7XG5cbiAgICBjb25zdCBub25SZXRyaWV2YWJsZUNvdW50ID0gdGhpcy5kYXRhUG9pbnRzRXhjZWVkaW5nT25lTWlsbGlvbkxpbWl0Lmxlbmd0aDtcblxuICAgIGNvbnN0IGVtYWlsRGVsaXZlcmFibGVDb3VudCA9XG4gICAgICB0aGlzLmRhdGFwb2ludHNFeGNlZWRpbmdCcm93c2VyRG93bmxvYWRMaW1pdC5sZW5ndGggLSBub25SZXRyaWV2YWJsZUNvdW50O1xuXG4gICAgY29uc3QgYnJvd3NlckRvd25sb2FkYWJsZUNvdW50ID1cbiAgICAgIHRoaXMuZXhwb3J0Q29uZmlnLmRhdGFwb2ludERldGFpbHMubGVuZ3RoIC0gZW1haWxEZWxpdmVyYWJsZUNvdW50IC0gbm9uUmV0cmlldmFibGVDb3VudDtcblxuICAgIHJldHVybiB7XG4gICAgICBicm93c2VyRG93bmxvYWRhYmxlQ291bnQsXG4gICAgICBlbWFpbERlbGl2ZXJhYmxlQ291bnQsXG4gICAgICBub25SZXRyaWV2YWJsZUNvdW50XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcmVJbml0aWFsQ2hhbmdlYWJsZUNvbmZpZygpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxEYXRlRnJvbSA9IHRoaXMuZXhwb3J0Q29uZmlnLmRhdGVGcm9tO1xuICAgIHRoaXMuaW5pdGlhbERhdGVUbyA9IHRoaXMuZXhwb3J0Q29uZmlnLmRhdGVUbztcbiAgICB0aGlzLmluaXRpYWxEYXRhcG9pbnREZXRhaWxzID0gdGhpcy5leHBvcnRDb25maWcuZGF0YXBvaW50RGV0YWlscztcbiAgICBpZiAoIXRoaXMuaXNGdWxsVHlwZU9mRXhwb3J0KSB7XG4gICAgICB0aGlzLmluaXRpYWxBZ2dyZWdhdGlvbiA9IHRoaXMuZXhwb3J0Q29uZmlnLmFnZ3JlZ2F0aW9uO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9hZEluaXRpYWxDaGFuZ2VhYmxlQ29uZmlnKCk6IHZvaWQge1xuICAgIHRoaXMuZXhwb3J0Q29uZmlnLmRhdGVGcm9tID0gdGhpcy5pbml0aWFsRGF0ZUZyb207XG4gICAgdGhpcy5leHBvcnRDb25maWcuZGF0ZVRvID0gdGhpcy5pbml0aWFsRGF0ZVRvO1xuICAgIHRoaXMuZXhwb3J0Q29uZmlnLmRhdGFwb2ludERldGFpbHMgPSB0aGlzLmluaXRpYWxEYXRhcG9pbnREZXRhaWxzO1xuICAgIGlmICghdGhpcy5pc0Z1bGxUeXBlT2ZFeHBvcnQpIHtcbiAgICAgIHRoaXMuZXhwb3J0Q29uZmlnLmFnZ3JlZ2F0aW9uID0gdGhpcy5pbml0aWFsQWdncmVnYXRpb247XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkRXhwb3J0RGF0YSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5mb3JtR3JvdXAuaW52YWxpZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNQcmV2aWV3TG9hZGluZyA9IHRydWU7XG5cbiAgICB0aGlzLm9uRG93bmxvYWRCdXR0b25TdGF0ZUNoYW5nZS5lbWl0KGZhbHNlKTtcblxuICAgIHRoaXMuZGF0YVRvRXhwb3J0ID0gYXdhaXQgdGhpcy5kYXRhRmV0Y2hpbmdTZXJ2aWNlLmZldGNoQW5kUHJlcGFyZURhdGFUb0V4cG9ydChcbiAgICAgIHRoaXMuZXhwb3J0Q29uZmlnLFxuICAgICAgdGhpcy5pc0Z1bGxUeXBlT2ZFeHBvcnRcbiAgICApO1xuXG4gICAgdGhpcy5kZXRlcm1pbmVTaG93aW5nUHJldmlld09yRW1wdHlTdGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEb3dubG9hZEJ1dHRvblN0YXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IGNhbkVuYWJsZURvd25sb2FkQnV0dG9uID1cbiAgICAgIHRoaXMuaGFzRmV0Y2hlZERhdGFBbnlWYWx1ZXNUb0V4cG9ydCAmJlxuICAgICAgIXRoaXMuZm9ybUdyb3VwLmludmFsaWQgJiZcbiAgICAgIHRoaXMuaXNBbnlPZkV4cG9ydEZpbGVUeXBlQ2hlY2tlZCAmJlxuICAgICAgIXRoaXMuaGFzTm9FeHBvcnRhYmxlRGF0YTtcblxuICAgIHRoaXMub25Eb3dubG9hZEJ1dHRvblN0YXRlQ2hhbmdlLmVtaXQoY2FuRW5hYmxlRG93bmxvYWRCdXR0b24pO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldEZ1bGxFeHBvcnRSZWxhdGVkUHJvcGVydGllcygpOiB2b2lkIHtcbiAgICB0aGlzLmhhc05vRXhwb3J0YWJsZURhdGEgPSBmYWxzZTtcbiAgICB0aGlzLmRhdGFwb2ludHNFeGNlZWRpbmdCcm93c2VyRG93bmxvYWRMaW1pdCA9IFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbml0aWFsU2VsZWN0aW9uKFxuICAgIGZpbGVUeXBlOiB7IFtrZXk6IHN0cmluZ106IEZpbGVUeXBlTWV0YWRhdGEgfSxcbiAgICBzZWxlY3RCeURlZmF1bHQ6IG51bWJlcltdXG4gICkge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhmaWxlVHlwZSk7XG4gICAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgY29uc3QgaW5pdGlhbFNlbGVjdGlvbiA9IGtleXMucmVkdWNlPHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9PigoYWNjLCBrZXkpID0+IHtcbiAgICAgIGFjY1trZXldID0gZmFsc2U7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcblxuICAgIHNlbGVjdEJ5RGVmYXVsdC5mb3JFYWNoKGluZGV4ID0+IHtcbiAgICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDwga2V5cy5sZW5ndGgpIHtcbiAgICAgICAgaW5pdGlhbFNlbGVjdGlvbltrZXlzW2luZGV4XV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGluaXRpYWxTZWxlY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogQWRqdXN0cyBib3RoIFwiZnJvbVwiIGFuZCBcInRvXCIgZGF0ZXMgd2hlbiBlaXRoZXIgaXMgdXBkYXRlZDpcbiAgICogLSBSZXNldHMgc2Vjb25kcyB0byAwMCBldmVuIHdoZW4gb25seSBvbmUgZGF0ZSBjaGFuZ2VzXG4gICAqIC0gUHJldmVudHMgcGVyc2lzdGluZyBoaWRkZW4gc2Vjb25kcyDiiaAgMDAgZnJvbSBpbml0aWFsIGxvYWRcbiAgICogLSBUcmlnZ2VycyBkYXRhIGZldGNoXG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqIFdoZW4gdXNlciBjaGFuZ2VzIFwiZnJvbVwiIGRhdGU6XG4gICAqIElucHV0OiBzdGFydERhdGUgPSBcIjIwMjQtMDMtMjYgMTM6MzA6NDVcIiwgZW5kRGF0ZSA9IFwiMjAyNC0wMy0yNyAxNToyMDo0NVwiXG4gICAqIFJlc3VsdDogc3RhcnREYXRlIC0+IFwiMjAyNC0wMy0yNiAxNDozMDowMFwiLCBlbmREYXRlIC0+IFwiMjAyNC0wMy0yNyAxNToyMDowMFwiXG4gICAqXG4gICAqIFdoZW4gdXNlciBjaGFuZ2VzIFwidG9cIiBkYXRlOlxuICAgKiBJbnB1dDogc3RhcnREYXRlID0gXCIyMDI0LTAzLTI2IDE0OjMwOjQ1XCIsIGVuZERhdGUgPSBcIjIwMjQtMDMtMjcgMTU6MjA6NDVcIlxuICAgKiBSZXN1bHQ6IHN0YXJ0RGF0ZSAtPiBcIjIwMjQtMDMtMjYgMTQ6MzA6MDBcIiwgZW5kRGF0ZSAtPiBcIjIwMjQtMDMtMjcgMTY6MjA6MDBcIlxuICAgKlxuICAgKiBAcGFyYW0gc3RhcnREYXRlIC0gVGhlIFwic3RhcnRcIiBkYXRlIHRvIGJlIGFkanVzdGVkLlxuICAgKiBAcGFyYW0gZW5kRGF0ZSAtIFRoZSBcImVuZFwiIGRhdGUgdG8gYmUgYWRqdXN0ZWQuXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZShzdGFydERhdGU6IHN0cmluZywgZW5kRGF0ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5kYXRlRnJvbVN1YmplY3QubmV4dCh7XG4gICAgICBkYXRlOiB0aGlzLmRhdGFGZXRjaGluZ1NlcnZpY2UuYWRqdXN0RGF0ZShzdGFydERhdGUsIDApLFxuICAgICAgc2hvdWxkRmV0Y2hEYXRhOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgdGhpcy5kYXRlVG9TdWJqZWN0Lm5leHQoe1xuICAgICAgZGF0ZTogdGhpcy5kYXRhRmV0Y2hpbmdTZXJ2aWNlLmFkanVzdERhdGUoZW5kRGF0ZSwgMCksXG4gICAgICBzaG91bGRGZXRjaERhdGE6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdHJpZ2dlckdhaW5zaWdodERvd25sb2FkRXZlbnQoc2VsZWN0ZWRGaWxlRXhwb3J0czogRmlsZUV4cG9ydENvbmZpZ1tdKTogdm9pZCB7XG4gICAgY29uc3QgY29tbW9uRXZlbnREYXRhID0ge1xuICAgICAgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0VfREFUQVBPSU5UU19FWFBPUlRfU0VMRUNUT1IuQUNUSU9OUy5ET1dOTE9BRF9TVEFSVEVELFxuICAgICAgY29tcG9uZW50OlxuICAgICAgICBQUk9EVUNUX0VYUEVSSUVOQ0VfREFUQVBPSU5UU19FWFBPUlRfU0VMRUNUT1IuQ09NUE9ORU5UU1xuICAgICAgICAgIC5EQVRBUE9JTlRTX0VYUE9SVF9TRUxFQ1RPUl9GSUxFX0VYUE9SVEVSLFxuICAgICAgc2VsZWN0ZWRGaWxlVHlwZTogc2VsZWN0ZWRGaWxlRXhwb3J0cy5tYXAoaXRlbSA9PiBpdGVtLmZpbGVUeXBlKVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5pc0Z1bGxUeXBlT2ZFeHBvcnQpIHtcbiAgICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoXG4gICAgICAgIFBST0RVQ1RfRVhQRVJJRU5DRV9EQVRBUE9JTlRTX0VYUE9SVF9TRUxFQ1RPUi5FVkVOVFMuRVhQT1JUX1NFTEVDVE9SLFxuICAgICAgICB7XG4gICAgICAgICAgLi4uY29tbW9uRXZlbnREYXRhLFxuICAgICAgICAgIHNlbGVjdGVkRXhwb3J0VHlwZTpcbiAgICAgICAgICAgIFBST0RVQ1RfRVhQRVJJRU5DRV9EQVRBUE9JTlRTX0VYUE9SVF9TRUxFQ1RPUi5FWFBPUlRfQ09ORklHLkZVTExfRVhQT1JUX1RZUEVcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChcbiAgICAgICAgUFJPRFVDVF9FWFBFUklFTkNFX0RBVEFQT0lOVFNfRVhQT1JUX1NFTEVDVE9SLkVWRU5UUy5FWFBPUlRfU0VMRUNUT1IsXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5jb21tb25FdmVudERhdGEsXG4gICAgICAgICAgc2VsZWN0ZWRFeHBvcnRUeXBlOlxuICAgICAgICAgICAgUFJPRFVDVF9FWFBFUklFTkNFX0RBVEFQT0lOVFNfRVhQT1JUX1NFTEVDVE9SLkVYUE9SVF9DT05GSUcuQ09NUEFDVF9FWFBPUlRfVFlQRSxcbiAgICAgICAgICBzZWxlY3RlZEFnZ3JlZ2F0aW9uOiB0aGlzLmV4cG9ydENvbmZpZy5hZ2dyZWdhdGlvbiA/PyBBR0dSRUdBVElPTl9WQUxVRVMubm9uZVxuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInAtYi0xNlwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzUGVybWlzc2lvblRvUmVhZEFueU1lYXN1cmVtZW50czsgZWxzZSBoYXNOb1JvbGVUb1JlYWRBbnlNZWFzdXJlbWVudHNcIj5cbiAgICA8ZGl2IGNsYXNzPVwicC0xNiB0ZXh0LWNlbnRlciBzZXBhcmF0b3ItYm90dG9tIHN0aWNreS10b3AgYmctY29tcG9uZW50XCI+XG4gICAgICA8cCBjbGFzcz1cInRleHQtbWVkaXVtIHRleHQtMTZcIj5cbiAgICAgICAge3sgJ0NvbmZpZ3VyZSBleHBvcnQnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3A+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJwLXQtMjQgcC1yLTE2IHAtbC0xNiBnYXAtOCBwLWItMTYgZmxleC13cmFwXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsgJ3NlcGFyYXRvci1ib3R0b20nOiBpc0Z1bGxUeXBlT2ZFeHBvcnQgfVwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICA8Yzh5LWRhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yLXRpbWUtcmFuZ2VcbiAgICAgICAgICAgICpuZ0lmPVwidGhpcy5oYXNQZXJtaXNzaW9uVG9SZWFkQW55TWVhc3VyZW1lbnRzXCJcbiAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcbiAgICAgICAgICAgIChvbkRhdGVGcm9tQ2hhbmdlKT1cIm9uRGF0ZUZyb21DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAob25EYXRlVG9DaGFuZ2UpPVwib25EYXRlVG9DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgPjwvYzh5LWRhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yLXRpbWUtcmFuZ2U+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICA8Yzh5LWRhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yLWRhdGEtc2NvcGVcbiAgICAgICAgICAgICpuZ0lmPVwidGhpcy5oYXNQZXJtaXNzaW9uVG9SZWFkQW55TWVhc3VyZW1lbnRzXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9uc109XCJkaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9uc1wiXG4gICAgICAgICAgICBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiXG4gICAgICAgICAgICAob25BZ2dyZWdhdGlvbkNoYW5nZSk9XCJvbkFnZ3JlZ2F0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgKG9uRXhwb3J0VHlwZUNoYW5nZSk9XCJvbkV4cG9ydFR5cGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgPjwvYzh5LWRhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yLWRhdGEtc2NvcGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICA8Yzh5LWRhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yLWZpbGUtdHlwZXNcbiAgICAgICAgICAgICpuZ0lmPVwidGhpcy5oYXNQZXJtaXNzaW9uVG9SZWFkQW55TWVhc3VyZW1lbnRzXCJcbiAgICAgICAgICAgIFtkeW5hbWljRmlsZXNUeXBlTWV0YWRhdGFdPVwiZHluYW1pY0ZpbGVzVHlwZU1ldGFkYXRhXCJcbiAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcbiAgICAgICAgICA+PC9jOHktZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItZmlsZS10eXBlcz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdJZj1cIiFpc0Z1bGxUeXBlT2ZFeHBvcnQgJiYgIWhhc0ZldGNoZWREYXRhQW55VmFsdWVzVG9FeHBvcnQgJiYgIWlzUHJldmlld0xvYWRpbmdcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLXQtMjQgcC1yLTE2IHAtbC0xNiBwLWItMTYgZC1mbGV4XCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImFsZXJ0IGFsZXJ0LXdhcm5pbmcgY2VudGVyLWJsb2NrXCJcbiAgICAgICAgICByb2xlPVwiYWxlcnRcIlxuICAgICAgICAgIGRhdGEtY3k9XCJmaWxlLWV4cG9ydGVyLS1uby1kYXRhLWF2YWlsYWJsZVwiXG4gICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgID5cbiAgICAgICAgICBObyBkYXRhIGF2YWlsYWJsZS5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YXBvaW50c0V4Y2VlZGluZ0Jyb3dzZXJEb3dubG9hZExpbWl0Lmxlbmd0aCA+IDBcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLXQtMjQgcC1yLTE2IHAtbC0xNiBwLWItMTYgc2VwYXJhdG9yLWJvdHRvbSBkLWZsZXhcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIFtjbGFzc109XCJcbiAgICAgICAgICAgIGhhc05vRXhwb3J0YWJsZURhdGFcbiAgICAgICAgICAgICAgPyAnYWxlcnQgYWxlcnQtd2FybmluZyBjZW50ZXItYmxvY2snXG4gICAgICAgICAgICAgIDogJ2FsZXJ0IGFsZXJ0LWluZm8gY2VudGVyLWJsb2NrJ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgcm9sZT1cImFsZXJ0XCJcbiAgICAgICAgICBbYXR0ci5kYXRhLWN5XT1cIlxuICAgICAgICAgICAgaGFzTm9FeHBvcnRhYmxlRGF0YVxuICAgICAgICAgICAgICA/ICdmaWxlLWV4cG9ydGVyLS1vdmVyLW9uZS1taWxsaW9uLW1lc3NhZ2UnXG4gICAgICAgICAgICAgIDogJ2ZpbGUtZXhwb3J0ZXItLW92ZXItNTBrLW1lc3NhZ2UnXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbaW5uZXJIVE1MXT1cImxpbWl0RXhjZWVkZWRNZXNzYWdlXCJcbiAgICAgICAgPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRnVsbFR5cGVPZkV4cG9ydFwiPlxuICAgICAgPGM4eS1kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1wcmV2aWV3XG4gICAgICAgICpuZ0lmPVwidGhpcy5oYXNQZXJtaXNzaW9uVG9SZWFkQW55TWVhc3VyZW1lbnRzXCJcbiAgICAgICAgW2hhc0ZldGNoZWREYXRhQW55VmFsdWVzVG9FeHBvcnRdPVwiaGFzRmV0Y2hlZERhdGFBbnlWYWx1ZXNUb0V4cG9ydFwiXG4gICAgICAgIFtpc1ByZXZpZXdMb2FkaW5nXT1cImlzUHJldmlld0xvYWRpbmdcIlxuICAgICAgICBbcHJldmlld1RhYmxlRGF0YV09XCJwcmV2aWV3VGFibGVEYXRhXCJcbiAgICAgID48L2M4eS1kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1wcmV2aWV3PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLXRlbXBsYXRlICNoYXNOb1JvbGVUb1JlYWRBbnlNZWFzdXJlbWVudHM+XG4gICAgPGRpdiBjbGFzcz1cInAtdC0yNCBwLXItMTYgcC1sLTE2IHAtYi0xNiBkLWZsZXhcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJhbGVydCBhbGVydC1pbmZvIGNlbnRlci1ibG9ja1wiXG4gICAgICAgIHJvbGU9XCJhbGVydFwiXG4gICAgICAgIHRyYW5zbGF0ZVxuICAgICAgPlxuICAgICAgICA8cD5UbyBleHBvcnQgZGF0YSwgeW91IG11c3QgbWVldCBhdCBsZWFzdCBvbmUgb2YgdGhlc2UgY3JpdGVyaWE6PC9wPlxuICAgICAgICA8dWw+XG4gICAgICAgICAgPGxpPlxuICAgICAgICAgICAgSGF2ZVxuICAgICAgICAgICAgPGI+UkVBRCBwZXJtaXNzaW9uIGZvciBcIk1lYXN1cmVtZW50c1wiIHBlcm1pc3Npb24gdHlwZTwvYj5cbiAgICAgICAgICAgIChlaXRoZXIgYXMgYSBnbG9iYWwgcm9sZSBvciBmb3IgdGhlIHNwZWNpZmljIHNvdXJjZSlcbiAgICAgICAgICA8L2xpPlxuICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgIEJlIHRoZVxuICAgICAgICAgICAgPGI+b3duZXIgb2YgdGhlIHNvdXJjZTwvYj5cbiAgICAgICAgICAgIHlvdSB3YW50IHRvIGV4cG9ydCBkYXRhIGZyb21cbiAgICAgICAgICA8L2xpPlxuICAgICAgICA8L3VsPlxuICAgICAgICA8cD5Eb24ndCBtZWV0IHRoZXNlIHJlcXVpcmVtZW50cz8gQ29udGFjdCB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIGZvciBhc3Npc3RhbmNlLjwvcD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=
|