@c8y/ngx-components 1021.22.116 → 1021.22.118
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/ecosystem/application-plugins/application-plugins.component.d.ts +3 -0
- package/ecosystem/application-plugins/application-plugins.component.d.ts.map +1 -1
- package/esm2022/ecosystem/application-plugins/application-plugins.component.mjs +42 -22
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +41 -21
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem.mjs +41 -21
- package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -108,6 +108,9 @@ export declare class ApplicationPluginsComponent implements OnInit, OnDestroy {
|
|
|
108
108
|
updatePlugin(app: IApplication, plugin: ApplicationPlugin, downgrade?: boolean): Promise<void>;
|
|
109
109
|
refresh(): void;
|
|
110
110
|
ngOnDestroy(): void;
|
|
111
|
+
isStandard(app: IApplication): boolean;
|
|
112
|
+
private everyRemoteFromManifestIsInConfig;
|
|
113
|
+
private everyRemoteFromConfigIsInManifest;
|
|
111
114
|
private addInstallButtonToHeaderActionControls;
|
|
112
115
|
private handleRemotesInstallation;
|
|
113
116
|
private emitRemotes;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"application-plugins.component.d.ts","sourceRoot":"","sources":["../../../ecosystem/application-plugins/application-plugins.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,SAAS,EAAE,MAAM,EAAa,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EACL,aAAa,EACb,YAAY,EACZ,iBAAiB,EAEjB,iBAAiB,EACjB,MAAM,EACN,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAEhB,mBAAmB,EACnB,UAAU,EAEV,cAAc,EAEf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,gBAAgB,EAEjB,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAiC,UAAU,EAAW,MAAM,MAAM,CAAC;;AAO3F,qBAIa,2BAA4B,YAAW,MAAM,EAAE,SAAS;
|
|
1
|
+
{"version":3,"file":"application-plugins.component.d.ts","sourceRoot":"","sources":["../../../ecosystem/application-plugins/application-plugins.component.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,25 +34,8 @@ export class ApplicationPluginsComponent {
|
|
|
34
34
|
this.allAvailablePlugins$
|
|
35
35
|
]).pipe(map(([remotePlugins, allPlugins]) => this.getInstalledPlugins(allPlugins, remotePlugins)), shareReplay(1));
|
|
36
36
|
this.orphanedPlugins$ = this.installedPlugins$.pipe(map(plugins => plugins.filter(p => p.status === ApplicationPluginStatus.ORPHANED)));
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
// ensure that every installed plugin is a self plugin or a plugin from the manifest
|
|
40
|
-
const allInstalledPluginsAreSelf = installedPlugins.every(p => selfPlugins.some(selfPlugin => selfPlugin.id === p.id) ||
|
|
41
|
-
(Array.isArray(manifestRemotes[p.contextPath]) &&
|
|
42
|
-
manifestRemotes[p.contextPath].includes(p.module)));
|
|
43
|
-
// ensure that every self plugin is installed
|
|
44
|
-
const allSelfPluginsAreInstalled = selfPlugins.every(selfPlugin => installedPlugins.some(p => p.id === selfPlugin.id));
|
|
45
|
-
const configRemotes = this.app?.config?.remotes || {};
|
|
46
|
-
// ensure that every remote from the manifest is in the config
|
|
47
|
-
// if no config exists we are also all good
|
|
48
|
-
const everyRemoteFromManifestIsInConfig = !this.app?.config?.remotes ||
|
|
49
|
-
Object.keys(manifestRemotes).every(contextPath => Array.isArray(configRemotes[contextPath]) &&
|
|
50
|
-
Array.isArray(manifestRemotes[contextPath]) &&
|
|
51
|
-
manifestRemotes[contextPath].every(module => configRemotes[contextPath].includes(module)));
|
|
52
|
-
return (allInstalledPluginsAreSelf &&
|
|
53
|
-
allSelfPluginsAreInstalled &&
|
|
54
|
-
everyRemoteFromManifestIsInConfig);
|
|
55
|
-
}));
|
|
37
|
+
// only use the installedPlugins$ and selfPlugins$ as triggers
|
|
38
|
+
this.isStandard$ = combineLatest([this.installedPlugins$, this.selfPlugins$]).pipe(map(() => this.isStandard(this.app)));
|
|
56
39
|
this.title = gettext('Installed plugins');
|
|
57
40
|
this.loadMoreItemsLabel = gettext('Load more packages');
|
|
58
41
|
this.loadingItemsLabel = gettext('Loading packages…');
|
|
@@ -280,6 +263,43 @@ export class ApplicationPluginsComponent {
|
|
|
280
263
|
this.destroy$.next();
|
|
281
264
|
this.destroy$.complete();
|
|
282
265
|
}
|
|
266
|
+
isStandard(app) {
|
|
267
|
+
return (
|
|
268
|
+
// ensure that every remote from the manifest is in the config
|
|
269
|
+
this.everyRemoteFromManifestIsInConfig(app) &&
|
|
270
|
+
// should not have any excluded remotes
|
|
271
|
+
Object.keys(app?.config?.excludedRemotes || {}).length === 0 &&
|
|
272
|
+
// ensure that every remote from the config is in the manifest
|
|
273
|
+
this.everyRemoteFromConfigIsInManifest(app));
|
|
274
|
+
}
|
|
275
|
+
everyRemoteFromManifestIsInConfig(app) {
|
|
276
|
+
const manifestRemotes = app?.manifest?.remotes;
|
|
277
|
+
const configRemotes = app?.config?.remotes;
|
|
278
|
+
if (!manifestRemotes || !configRemotes) {
|
|
279
|
+
return true;
|
|
280
|
+
}
|
|
281
|
+
return Object.keys(manifestRemotes).every(contextPath => {
|
|
282
|
+
return (Array.isArray(configRemotes[contextPath]) &&
|
|
283
|
+
Array.isArray(manifestRemotes[contextPath]) &&
|
|
284
|
+
manifestRemotes[contextPath].every(module => {
|
|
285
|
+
return configRemotes[contextPath].includes(module);
|
|
286
|
+
}));
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
everyRemoteFromConfigIsInManifest(app) {
|
|
290
|
+
const manifestRemotes = app?.manifest?.remotes || {};
|
|
291
|
+
const configRemotes = app?.config?.remotes;
|
|
292
|
+
if (!configRemotes) {
|
|
293
|
+
return true;
|
|
294
|
+
}
|
|
295
|
+
return Object.keys(configRemotes).every(contextPath => {
|
|
296
|
+
return (Array.isArray(configRemotes[contextPath]) &&
|
|
297
|
+
Array.isArray(manifestRemotes[contextPath]) &&
|
|
298
|
+
configRemotes[contextPath].every(module => {
|
|
299
|
+
return manifestRemotes[contextPath].includes(module);
|
|
300
|
+
}));
|
|
301
|
+
});
|
|
302
|
+
}
|
|
283
303
|
addInstallButtonToHeaderActionControls() {
|
|
284
304
|
if (this.appId) {
|
|
285
305
|
this.headerActionControls = [
|
|
@@ -327,8 +347,8 @@ export class ApplicationPluginsComponent {
|
|
|
327
347
|
return this.app;
|
|
328
348
|
}
|
|
329
349
|
async getApplicationMFExports(app) {
|
|
330
|
-
const
|
|
331
|
-
return
|
|
350
|
+
const applicationExports = this.pluginsService.getMFExports(app, [], true);
|
|
351
|
+
return applicationExports;
|
|
332
352
|
}
|
|
333
353
|
async getApplicationMFRemotes(app) {
|
|
334
354
|
const appConfigRemotes = this.pluginsService.getMFRemotes(app);
|
|
@@ -479,4 +499,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
479
499
|
type: ViewChild,
|
|
480
500
|
args: [DataGridComponent, { static: false }]
|
|
481
501
|
}] } });
|
|
482
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24tcGx1Z2lucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9lY29zeXN0ZW0vYXBwbGljYXRpb24tcGx1Z2lucy9hcHBsaWNhdGlvbi1wbHVnaW5zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2Vjb3N5c3RlbS9hcHBsaWNhdGlvbi1wbHVnaW5zL2FwcGxpY2F0aW9uLXBsdWdpbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFakQsT0FBTyxFQUVMLFlBQVksRUFFWix1QkFBdUIsRUFHdkIsaUJBQWlCLEVBRWpCLGdCQUFnQixFQUNoQixPQUFPLEVBSVAsY0FBYyxFQUNkLG1CQUFtQixFQUNwQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsNEJBQTRCLEVBQzdCLE1BQU0sc0NBQXNDLENBQUM7QUFDOUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzRixPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ2hHLE9BQU8sRUFBRSww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QVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zLCBJQXBwbGljYXRpb24gfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBBY3Rpb25Db250cm9sLFxuICBBbGVydFNlcnZpY2UsXG4gIEFwcGxpY2F0aW9uUGx1Z2luLFxuICBBcHBsaWNhdGlvblBsdWdpblN0YXR1cyxcbiAgQnVsa0FjdGlvbkNvbnRyb2wsXG4gIENvbHVtbixcbiAgRGF0YUdyaWRDb21wb25lbnQsXG4gIERpc3BsYXlPcHRpb25zLFxuICBHYWluc2lnaHRTZXJ2aWNlLFxuICBnZXR0ZXh0LFxuICBIZWFkZXJBY3Rpb25Db250cm9sLFxuICBQYWdpbmF0aW9uLFxuICBQbHVnaW5zQ29uZmlnLFxuICBQbHVnaW5zU2VydmljZSxcbiAgUGx1Z2luc0V4cG9ydFNjb3Blc1xufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7XG4gIEVjb3N5c3RlbVNlcnZpY2UsXG4gIFBST0RVQ1RfRVhQRVJJRU5DRV9FQ09TWVNURU1cbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9lY29zeXN0ZW0vc2hhcmVkJztcbmltcG9ydCB7IHBpY2sgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZmlyc3RWYWx1ZUZyb20sIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJbnN0YWxsUGx1Z2luQ29tcG9uZW50IH0gZnJvbSAnLi9pbnN0YWxsLXBsdWdpbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgTGFiZWxDZWxsUmVuZGVyZXJDb21wb25lbnQgfSBmcm9tICcuL2xhYmVsLWNlbGwtcmVuZGVyZXIuY29tcG9uZW50JztcbmltcG9ydCB7IE9ycGhhbmVkU3RhdHVzQ2VsbFJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi9vcnBoYW5lZC1zdGF0dXMtY2VsbC1yZW5kZXJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgVXBkYXRlUGx1Z2luT2ZBcHBDb21wb25lbnQgfSBmcm9tICcuL3VwZGF0ZS1wbHVnaW4tb2YtYXBwL3VwZGF0ZS1wbHVnaW4tb2YtYXBwLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1hcHAtcGx1Z2lucycsXG4gIHRlbXBsYXRlVXJsOiAnLi9hcHBsaWNhdGlvbi1wbHVnaW5zLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBcHBsaWNhdGlvblBsdWdpbnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIFBST0RVQ1RfRVhQRVJJRU5DRSA9IFBST0RVQ1RfRVhQRVJJRU5DRV9FQ09TWVNURU07XG4gIENVUlJFTlRfTE9DQVRJT04gPSBsb2NhdGlvbi5ocmVmO1xuXG4gIEBJbnB1dCgpIGFwcElkOiBzdHJpbmcgfCBudW1iZXI7XG4gIEBWaWV3Q2hpbGQoRGF0YUdyaWRDb21wb25lbnQsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBkYXRhR3JpZDogRGF0YUdyaWRDb21wb25lbnQ7XG5cbiAgcmVtb3RlUGx1Z2lucyQ6IEJlaGF2aW9yU3ViamVjdDxBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnM+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh7fSk7XG4gIGFsbEF2YWlsYWJsZVBsdWdpbnMkOiBCZWhhdmlvclN1YmplY3Q8QXBwbGljYXRpb25QbHVnaW5bXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcbiAgc2VsZlBsdWdpbnMkOiBCZWhhdmlvclN1YmplY3Q8QXBwbGljYXRpb25QbHVnaW5bXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcblxuICBpbnN0YWxsZWRQbHVnaW5zJDogT2JzZXJ2YWJsZTxBcHBsaWNhdGlvblBsdWdpbltdPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMucmVtb3RlUGx1Z2lucyQucGlwZShtYXAocmVtb3RlcyA9PiBQbHVnaW5zU2VydmljZS5jb252ZXJ0SW5zdGFsbGVkUmVtb3Rlc1RvSWRzKHJlbW90ZXMpKSksXG4gICAgdGhpcy5hbGxBdmFpbGFibGVQbHVnaW5zJFxuICBdKS5waXBlKFxuICAgIG1hcCgoW3JlbW90ZVBsdWdpbnMsIGFsbFBsdWdpbnNdKSA9PiB0aGlzLmdldEluc3RhbGxlZFBsdWdpbnMoYWxsUGx1Z2lucywgcmVtb3RlUGx1Z2lucykpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG4gIG9ycGhhbmVkUGx1Z2lucyQgPSB0aGlzLmluc3RhbGxlZFBsdWdpbnMkLnBpcGUoXG4gICAgbWFwKHBsdWdpbnMgPT4gcGx1Z2lucy5maWx0ZXIocCA9PiBwLnN0YXR1cyA9PT0gQXBwbGljYXRpb25QbHVnaW5TdGF0dXMuT1JQSEFORUQpKVxuICApO1xuICBpc1N0YW5kYXJkJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuaW5zdGFsbGVkUGx1Z2lucyQsIHRoaXMuc2VsZlBsdWdpbnMkXSkucGlwZShcbiAgICBtYXAoKFtpbnN0YWxsZWRQbHVnaW5zLCBzZWxmUGx1Z2luc10pID0+IHtcbiAgICAgIGNvbnN0IG1hbmlmZXN0UmVtb3RlcyA9IHRoaXMuYXBwPy5tYW5pZmVzdD8ucmVtb3RlcyB8fCB7fTtcbiAgICAgIC8vIGVuc3VyZSB0aGF0IGV2ZXJ5IGluc3RhbGxlZCBwbHVnaW4gaXMgYSBzZWxmIHBsdWdpbiBvciBhIHBsdWdpbiBmcm9tIHRoZSBtYW5pZmVzdFxuICAgICAgY29uc3QgYWxsSW5zdGFsbGVkUGx1Z2luc0FyZVNlbGYgPSBpbnN0YWxsZWRQbHVnaW5zLmV2ZXJ5KFxuICAgICAgICBwID0+XG4gICAgICAgICAgc2VsZlBsdWdpbnMuc29tZShzZWxmUGx1Z2luID0+IHNlbGZQbHVnaW4uaWQgPT09IHAuaWQpIHx8XG4gICAgICAgICAgKEFycmF5LmlzQXJyYXkobWFuaWZlc3RSZW1vdGVzW3AuY29udGV4dFBhdGhdKSAmJlxuICAgICAgICAgICAgbWFuaWZlc3RSZW1vdGVzW3AuY29udGV4dFBhdGhdLmluY2x1ZGVzKHAubW9kdWxlKSlcbiAgICAgICk7XG5cbiAgICAgIC8vIGVuc3VyZSB0aGF0IGV2ZXJ5IHNlbGYgcGx1Z2luIGlzIGluc3RhbGxlZFxuICAgICAgY29uc3QgYWxsU2VsZlBsdWdpbnNBcmVJbnN0YWxsZWQgPSBzZWxmUGx1Z2lucy5ldmVyeShzZWxmUGx1Z2luID0+XG4gICAgICAgIGluc3RhbGxlZFBsdWdpbnMuc29tZShwID0+IHAuaWQgPT09IHNlbGZQbHVnaW4uaWQpXG4gICAgICApO1xuICAgICAgY29uc3QgY29uZmlnUmVtb3RlcyA9IHRoaXMuYXBwPy5jb25maWc/LnJlbW90ZXMgfHwge307XG5cbiAgICAgIC8vIGVuc3VyZSB0aGF0IGV2ZXJ5IHJlbW90ZSBmcm9tIHRoZSBtYW5pZmVzdCBpcyBpbiB0aGUgY29uZmlnXG4gICAgICAvLyBpZiBubyBjb25maWcgZXhpc3RzIHdlIGFyZSBhbHNvIGFsbCBnb29kXG4gICAgICBjb25zdCBldmVyeVJlbW90ZUZyb21NYW5pZmVzdElzSW5Db25maWcgPVxuICAgICAgICAhdGhpcy5hcHA/LmNvbmZpZz8ucmVtb3RlcyB8fFxuICAgICAgICBPYmplY3Qua2V5cyhtYW5pZmVzdFJlbW90ZXMpLmV2ZXJ5KFxuICAgICAgICAgIGNvbnRleHRQYXRoID0+XG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KGNvbmZpZ1JlbW90ZXNbY29udGV4dFBhdGhdKSAmJlxuICAgICAgICAgICAgQXJyYXkuaXNBcnJheShtYW5pZmVzdFJlbW90ZXNbY29udGV4dFBhdGhdKSAmJlxuICAgICAgICAgICAgbWFuaWZlc3RSZW1vdGVzW2NvbnRleHRQYXRoXS5ldmVyeShtb2R1bGUgPT5cbiAgICAgICAgICAgICAgY29uZmlnUmVtb3Rlc1tjb250ZXh0UGF0aF0uaW5jbHVkZXMobW9kdWxlKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICBhbGxJbnN0YWxsZWRQbHVnaW5zQXJlU2VsZiAmJlxuICAgICAgICBhbGxTZWxmUGx1Z2luc0FyZUluc3RhbGxlZCAmJlxuICAgICAgICBldmVyeVJlbW90ZUZyb21NYW5pZmVzdElzSW5Db25maWdcbiAgICAgICk7XG4gICAgfSlcbiAgKTtcbiAgYXBwOiBJQXBwbGljYXRpb247XG4gIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgdGl0bGU6IHN0cmluZyA9IGdldHRleHQoJ0luc3RhbGxlZCBwbHVnaW5zJyk7XG4gIGxvYWRNb3JlSXRlbXNMYWJlbDogc3RyaW5nID0gZ2V0dGV4dCgnTG9hZCBtb3JlIHBhY2thZ2VzJyk7XG4gIGxvYWRpbmdJdGVtc0xhYmVsOiBzdHJpbmcgPSBnZXR0ZXh0KCdMb2FkaW5nIHBhY2thZ2Vz4oCmJyk7XG4gIGFjdGlvbkNvbnRyb2xzOiBBY3Rpb25Db250cm9sW10gPSB0aGlzLmdldEFjdGlvbkNvbnRyb2xzKCk7XG4gIGJ1bGtBY3Rpb25Db250cm9sczogQnVsa0FjdGlvbkNvbnRyb2xbXSA9IHRoaXMuZ2V0QnVsa0FjdGlvbkNvbnRyb2xzKCk7XG4gIGhlYWRlckFjdGlvbkNvbnRyb2xzOiBIZWFkZXJBY3Rpb25Db250cm9sW10gPSBbXTtcbiAgbm9SZXN1bHRzTWVzc2FnZSA9IGdldHRleHQoJ05vIHBsdWdpbnMgdG8gZGlzcGxheS4nKTtcbiAgbm9EYXRhTWVzc2FnZSA9IGdldHRleHQoJ05vIHBsdWdpbnMgaW5zdGFsbGVkLicpO1xuICBub1Jlc3VsdHNTdWJ0aXRsZSA9IGdldHRleHQoJ1JlZmluZSB5b3VyIHNlYXJjaCB0ZXJtcyBvciBjaGVjayB5b3VyIHNwZWxsaW5nLicpO1xuICBub0RhdGFTdWJ0aXRsZSA9IGdldHRleHQoXCJUaGlzIGFwcGxpY2F0aW9uIGRvZXNuJ3QgaGF2ZSBhbnkgcGx1Z2luLiBDbGljayBiZWxvdyB0byBpbnN0YWxsLlwiKTtcbiAgcGFnaW5hdGlvbjogUGFnaW5hdGlvbiA9IHtcbiAgICBwYWdlU2l6ZTogMTAsXG4gICAgY3VycmVudFBhZ2U6IDFcbiAgfTtcbiAgZGlzcGxheU9wdGlvbnM6IERpc3BsYXlPcHRpb25zID0ge1xuICAgIGJvcmRlcmVkOiBmYWxzZSxcbiAgICBzdHJpcGVkOiB0cnVlLFxuICAgIGZpbHRlcjogdHJ1ZSxcbiAgICBncmlkSGVhZGVyOiB0cnVlLFxuICAgIGhvdmVyOiB0cnVlXG4gIH07XG4gIGNvbHVtbnM6IENvbHVtbltdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICduYW1lJyxcbiAgICAgIGhlYWRlcjogZ2V0dGV4dCgnUGx1Z2luIG5hbWUnKSxcbiAgICAgIHBhdGg6ICduYW1lJyxcbiAgICAgIGZpbHRlcmFibGU6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdWZXJzaW9uJyxcbiAgICAgIGhlYWRlcjogZ2V0dGV4dCgnVmVyc2lvbicpLFxuICAgICAgcGF0aDogJ3ZlcnNpb24nLFxuICAgICAgZmlsdGVyYWJsZTogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdUYWcnLFxuICAgICAgaGVhZGVyOiBnZXR0ZXh0KCdUYWdgbm91bmAnKSxcbiAgICAgIHBhdGg6ICdpbnN0YWxsZWRWaWFUYWcnLFxuICAgICAgZmlsdGVyYWJsZTogZmFsc2UsXG4gICAgICBjZWxsUmVuZGVyZXJDb21wb25lbnQ6IExhYmVsQ2VsbFJlbmRlcmVyQ29tcG9uZW50XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnZGVzY3JpcHRpb24nLFxuICAgICAgaGVhZGVyOiBnZXR0ZXh0KCdEZXNjcmlwdGlvbicpLFxuICAgICAgcGF0aDogJ2Rlc2NyaXB0aW9uJyxcbiAgICAgIGZpbHRlcmFibGU6IGZhbHNlLFxuICAgICAgY2VsbENTU0NsYXNzTmFtZTogJ3NtYWxsJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2NvbnRleHRQYXRoJyxcbiAgICAgIGhlYWRlcjogZ2V0dGV4dCgnU291cmNlJyksXG4gICAgICBwYXRoOiAnY29udGV4dFBhdGgnLFxuICAgICAgZmlsdGVyYWJsZTogZmFsc2UsXG4gICAgICBjZWxsUmVuZGVyZXJDb21wb25lbnQ6IExhYmVsQ2VsbFJlbmRlcmVyQ29tcG9uZW50XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnc2NvcGUnLFxuICAgICAgaGVhZGVyOiBnZXR0ZXh0KCdTY29wZScpLFxuICAgICAgcGF0aDogJ3Njb3BlJyxcbiAgICAgIGZpbHRlcmFibGU6IGZhbHNlLFxuICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICBjZWxsUmVuZGVyZXJDb21wb25lbnQ6IExhYmVsQ2VsbFJlbmRlcmVyQ29tcG9uZW50XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnc3RhdHVzJyxcbiAgICAgIGhlYWRlcjogZ2V0dGV4dCgnU3RhdHVzJyksXG4gICAgICBwYXRoOiAnc3RhdHVzJyxcbiAgICAgIGZpbHRlcmFibGU6IGZhbHNlLFxuICAgICAgY2VsbFJlbmRlcmVyQ29tcG9uZW50OiBPcnBoYW5lZFN0YXR1c0NlbGxSZW5kZXJlckNvbXBvbmVudFxuICAgIH1cbiAgXTtcbiAgcHJpdmF0ZSBkZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBlY29zeXN0ZW1TZXJ2aWNlOiBFY29zeXN0ZW1TZXJ2aWNlLFxuICAgIHByaXZhdGUgYnNNb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGx1Z2luc1NlcnZpY2U6IFBsdWdpbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBnYWluc2lnaHRTZXJ2aWNlOiBHYWluc2lnaHRTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmFkZEluc3RhbGxCdXR0b25Ub0hlYWRlckFjdGlvbkNvbnRyb2xzKCk7XG4gICAgdGhpcy5sb2FkRGF0YSgpO1xuICB9XG5cbiAgYXN5bmMgbG9hZERhdGEoKSB7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIGF3YWl0IHRoaXMuZ2V0QXBwbGljYXRpb25NTygpO1xuICAgIGF3YWl0IHRoaXMuZ2V0QXBwbGljYXRpb25NRlJlbW90ZXModGhpcy5hcHApO1xuICAgIGF3YWl0IHRoaXMuZ2V0QWxsQXBwbGljYXRpb25zTUZFeHBvcnRzKHRoaXMuYXBwKTtcbiAgICBhd2FpdCB0aGlzLmdldEFsbFNlbGZNRkV4cG9ydHModGhpcy5hcHApO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gIH1cblxuICBhc3luYyByZXNldFRvRGVmYXVsdCgpIHtcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgYXdhaXQgdGhpcy5wbHVnaW5zU2VydmljZS5yZXNldFJlbW90ZXModGhpcy5hcHApO1xuICAgIGF3YWl0IHRoaXMubG9hZERhdGEoKTtcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKGdldHRleHQoJ1RoZSBhcHBsaWNhdGlvbiB3YXMgcmVzZXQgdG8gaXRzIGRlZmF1bHQgcGx1Z2lucy4nKSk7XG4gIH1cblxuICBhc3luYyBpbnN0YWxsUGx1Z2lucygpIHtcbiAgICBsZXQgY3VycmVudFBsdWdpbjogQXBwbGljYXRpb25QbHVnaW4gfCBudWxsID0gbnVsbDtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KFxuICAgICAgICBQUk9EVUNUX0VYUEVSSUVOQ0VfRUNPU1lTVEVNLkFQUExJQ0FUSU9OUy5FVkVOVFMuSU5TVEFMTEVEX1BMVUdJTlMsXG4gICAgICAgIHtcbiAgICAgICAgICBjb21wb25lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRV9FQ09TWVNURU0uQVBQTElDQVRJT05TLkNPTVBPTkVOVFMuQVBQTElDQVRJT05fUExVR0lOUyxcbiAgICAgICAgICBhY3Rpb246IFBST0RVQ1RfRVhQRVJJRU5DRV9FQ09TWVNURU0uQVBQTElDQVRJT05TLkFDVElPTlMuSU5TVEFMTF9QTFVHSU5TX0lOSVRJQVRFRCxcbiAgICAgICAgICB1cmw6IHRoaXMuQ1VSUkVOVF9MT0NBVElPTixcbiAgICAgICAgICB0YXJnZXRBcHBsaWNhdGlvbk5hbWU6IHRoaXMuYXBwLm5hbWUsXG4gICAgICAgICAgdGFyZ2V0QXBwbGljYXRpb25Db250ZXh0UGF0aDogdGhpcy5hcHAuY29udGV4dFBhdGhcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHBsdWdpbnNUb0FkZDogQXBwbGljYXRpb25QbHVnaW5bXSA9XG4gICAgICAgIGF3YWl0IHRoaXMuYnNNb2RhbFNlcnZpY2Uuc2hvdzxJbnN0YWxsUGx1Z2luQ29tcG9uZW50PihJbnN0YWxsUGx1Z2luQ29tcG9uZW50LCB7XG4gICAgICAgICAgY2xhc3M6ICdtb2RhbC1zbScsXG4gICAgICAgICAgYXJpYURlc2NyaWJlZGJ5OiAnbW9kYWwtYm9keScsXG4gICAgICAgICAgYXJpYUxhYmVsbGVkQnk6ICdtb2RhbC10aXRsZScsXG4gICAgICAgICAgaW5pdGlhbFN0YXRlOiB0aGlzLmdldEluc3RhbGxNb2RhbEluaXRTdGF0ZSgpLFxuICAgICAgICAgIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IHRydWVcbiAgICAgICAgfSkuY29udGVudC5yZXN1bHQ7XG5cbiAgICAgIGNvbnN0IGxpY2Vuc2VzVmVyaWZpZWRCeVVzZXIgPSBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UudmVyaWZ5TGljZW5zZXMocGx1Z2luc1RvQWRkKTtcbiAgICAgIGlmICghbGljZW5zZXNWZXJpZmllZEJ5VXNlcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB2ZXJpZnlWZXJzaW9uQ29tcGF0aWJpbGl0eSA9XG4gICAgICAgIGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS52ZXJpZnlQbHVnaW5WZXJzaW9uc0NvbXBhdGliaWxpdHkocGx1Z2luc1RvQWRkLCB0aGlzLmFwcCk7XG5cbiAgICAgIGlmICghdmVyaWZ5VmVyc2lvbkNvbXBhdGliaWxpdHkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICBhd2FpdCB0aGlzLmhhbmRsZVJlbW90ZXNJbnN0YWxsYXRpb24ocGx1Z2luc1RvQWRkKTtcblxuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdQbHVnaW5zIGluc3RhbGxlZC4nKSk7XG4gICAgICBwbHVnaW5zVG9BZGQuZm9yRWFjaChwbHVnaW4gPT4ge1xuICAgICAgICBjdXJyZW50UGx1Z2luID0gcGx1Z2luO1xuXG4gICAgICAgIHRoaXMudHJpZ2dlclBsdWdpbkV2ZW50KFxuICAgICAgICAgIHBsdWdpbixcbiAgICAgICAgICBQUk9EVUNUX0VYUEVSSUVOQ0VfRUNPU1lTVEVNLkFQUExJQ0FUSU9OUy5SRVNVTFRTLlBMVUdJTl9JTlNUQUxMRURcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXgpIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShleCk7XG4gICAgICAgIHRoaXMudHJpZ2dlclBsdWdpbkV2ZW50KFxuICAgICAgICAgIGN1cnJlbnRQbHVnaW4sXG4gICAgICAgICAgUFJPRFVDVF9FWFBFUklFTkNFX0VDT1NZU1RFTS5BUFBMSUNBVElPTlMuUkVTVUxUUy5TRVJWRVJfRkFJTFVSRVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlbW92ZVBsdWdpbnMocGx1Z2luczogc3RyaW5nW10pIHtcbiAgICBsZXQgY3VycmVudFBsdWdpbjogQXBwbGljYXRpb25QbHVnaW4gfCBudWxsID0gbnVsbDtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICBjb25zdCBpbnN0YWxsZWRQbHVnaW5zOiBBcHBsaWNhdGlvblBsdWdpbltdID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5pbnN0YWxsZWRQbHVnaW5zJCk7XG4gICAgICBjb25zdCBwbHVnaW5zVG9SZW1vdmU6IEFwcGxpY2F0aW9uUGx1Z2luW10gPSBpbnN0YWxsZWRQbHVnaW5zLmZpbHRlcihwID0+XG4gICAgICAgIHBsdWdpbnMuaW5jbHVkZXMocC5pZClcbiAgICAgICk7XG4gICAgICBjb25zdCB1cGRhdGVkUmVtb3RlcyA9IGF3YWl0IHRoaXMucGx1Z2luc1NlcnZpY2UucmVtb3ZlUmVtb3RlcyhcbiAgICAgICAgdGhpcy5hcHAsXG4gICAgICAgIHBsdWdpbnMubWFwKGlkID0+IGluc3RhbGxlZFBsdWdpbnMuZmluZChwID0+IHAuaWQgPT09IGlkKSlcbiAgICAgICk7XG4gICAgICB0aGlzLmVtaXRSZW1vdGVzKHVwZGF0ZWRSZW1vdGVzKTtcblxuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuZGF0YUdyaWQuY2FuY2VsKCk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKGdldHRleHQoJ1BsdWdpbnMgcmVtb3ZlZC4nKSk7XG5cbiAgICAgIHBsdWdpbnNUb1JlbW92ZS5mb3JFYWNoKHBsdWdpbiA9PiB7XG4gICAgICAgIGN1cnJlbnRQbHVnaW4gPSBwbHVnaW47XG5cbiAgICAgICAgdGhpcy50cmlnZ2VyUGx1Z2luRXZlbnQoXG4gICAgICAgICAgcGx1Z2luLFxuICAgICAgICAgIFBST0RVQ1RfRVhQRVJJRU5DRV9FQ09TWVNURU0uQVBQTElDQVRJT05TLlJFU1VMVFMuUExVR0lOX1JFTU9WRURcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXgpIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShleCk7XG4gICAgICAgIHRoaXMudHJpZ2dlclBsdWdpbkV2ZW50KFxuICAgICAgICAgIGN1cnJlbnRQbHVnaW4sXG4gICAgICAgICAgUFJPRFVDVF9FWFBFUklFTkNFX0VDT1NZU1RFTS5BUFBMSUNBVElPTlMuUkVTVUxUUy5TRVJWRVJfRkFJTFVSRVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNsZWFudXBPcnBoYW5lZFBsdWdpbnMocGx1Z2luczogQXBwbGljYXRpb25QbHVnaW5bXSkge1xuICAgIGNvbnN0IHBsdWdpbklkcyA9IHBsdWdpbnMubWFwKHAgPT4gcC5pZCk7XG4gICAgYXdhaXQgdGhpcy5yZW1vdmVQbHVnaW5zKHBsdWdpbklkcyk7XG4gIH1cblxuICBnZXRBY3Rpb25Db250cm9scygpOiBBY3Rpb25Db250cm9sW10ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdjdXN0b21VcGRhdGUnLFxuICAgICAgICB0ZXh0OiBnZXR0ZXh0KCdVcGRhdGUnKSxcbiAgICAgICAgaWNvbjogJ2NhcmV0LXNxdWFyZS1vLXVwJyxcbiAgICAgICAgc2hvd0lmOiBwbHVnaW4gPT4ge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBwbHVnaW4uc3RhdHVzID09PSBBcHBsaWNhdGlvblBsdWdpblN0YXR1cy5PVVREQVRFRCB8fFxuICAgICAgICAgICAgcGx1Z2luLnN0YXR1cyA9PT0gQXBwbGljYXRpb25QbHVnaW5TdGF0dXMuUkVWT0tFRFxuICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGxiYWNrOiBwbHVnaW4gPT4gdGhpcy51cGRhdGVQbHVnaW4odGhpcy5hcHAsIHBsdWdpbiBhcyBBcHBsaWNhdGlvblBsdWdpbilcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdjdXN0b21Eb3duZ3JhZGUnLFxuICAgICAgICB0ZXh0OiBnZXR0ZXh0KCdEb3duZ3JhZGUnKSxcbiAgICAgICAgaWNvbjogJ2NhcmV0LXNxdWFyZS1vLWRvd24nLFxuICAgICAgICBzaG93SWY6IChwbHVnaW46IEFwcGxpY2F0aW9uUGx1Z2luKSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcGx1Z2luLnNjb3BlID09PSBQbHVnaW5zRXhwb3J0U2NvcGVzLlNFTEYgfHxcbiAgICAgICAgICAgIHBsdWdpbi5zY29wZSA9PT0gUGx1Z2luc0V4cG9ydFNjb3Blcy5TRUxGX09QVElPTkFMXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBwbHVnaW4uc3RhdHVzID09PSBBcHBsaWNhdGlvblBsdWdpblN0YXR1cy5MQVRFU1Q7XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGxiYWNrOiBwbHVnaW4gPT4gdGhpcy51cGRhdGVQbHVnaW4odGhpcy5hcHAsIHBsdWdpbiBhcyBBcHBsaWNhdGlvblBsdWdpbiwgdHJ1ZSlcbiAgICAgIH1cbiAgICBdO1xuICB9XG5cbiAgZ2V0QnVsa0FjdGlvbkNvbnRyb2xzKCk6IEJ1bGtBY3Rpb25Db250cm9sW10ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdjdXN0b21EZWxldGUnLFxuICAgICAgICB0ZXh0OiBnZXR0ZXh0KCdSZW1vdmUnKSxcbiAgICAgICAgaWNvbjogJ3RyYXNoJyxcbiAgICAgICAgY2FsbGJhY2s6IHBsdWdpbnMgPT4gdGhpcy5yZW1vdmVQbHVnaW5zKHBsdWdpbnMpXG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZVBsdWdpbihhcHA6IElBcHBsaWNhdGlvbiwgcGx1Z2luOiBBcHBsaWNhdGlvblBsdWdpbiwgZG93bmdyYWRlID0gZmFsc2UpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgKFxuICAgICAgICB0aGlzLmJzTW9kYWxTZXJ2aWNlLnNob3coVXBkYXRlUGx1Z2luT2ZBcHBDb21wb25lbnQsIHtcbiAgICAgICAgICBjbGFzczogJ21vZGFsLXNtJyxcbiAgICAgICAgICBhcmlhRGVzY3JpYmVkYnk6ICdtb2RhbC1ib2R5JyxcbiAgICAgICAgICBhcmlhTGFiZWxsZWRCeTogJ21vZGFsLXRpdGxlJyxcbiAgICAgICAgICBpbml0aWFsU3RhdGU6IHtcbiAgICAgICAgICAgIGFwcCxcbiAgICAgICAgICAgIHBsdWdpbixcbiAgICAgICAgICAgIGRvd25ncmFkZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaWdub3JlQmFja2Ryb3BDbGljazogdHJ1ZVxuICAgICAgICB9KS5jb250ZW50IGFzIFVwZGF0ZVBsdWdpbk9mQXBwQ29tcG9uZW50XG4gICAgICApLnJlc3VsdDtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgcmVmcmVzaCgpIHtcbiAgICB0aGlzLmxvYWREYXRhKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGFkZEluc3RhbGxCdXR0b25Ub0hlYWRlckFjdGlvbkNvbnRyb2xzKCkge1xuICAgIGlmICh0aGlzLmFwcElkKSB7XG4gICAgICB0aGlzLmhlYWRlckFjdGlvbkNvbnRyb2xzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgdGV4dDogZ2V0dGV4dCgnSW5zdGFsbCBwbHVnaW5zJyksXG4gICAgICAgICAgY2FsbGJhY2s6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5zdGFsbFBsdWdpbnMoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGljb246ICdwbHVzLWNpcmNsZScsXG4gICAgICAgICAgdHlwZTogJ2N1c3RvbSdcbiAgICAgICAgfVxuICAgICAgXTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGhhbmRsZVJlbW90ZXNJbnN0YWxsYXRpb24ocGx1Z2luczogQXBwbGljYXRpb25QbHVnaW5bXSkge1xuICAgIGNvbnN0IHVwZGF0ZWRSZW1vdGVzID0gYXdhaXQgdGhpcy5wbHVnaW5zU2VydmljZS5hZGRSZW1vdGVzKHRoaXMuYXBwLCBwbHVnaW5zKTtcbiAgICByZXR1cm4gdGhpcy5lbWl0UmVtb3Rlcyh1cGRhdGVkUmVtb3Rlcyk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRSZW1vdGVzKHBsdWdpbnNDb25maWc6IFBsdWdpbnNDb25maWcpIHtcbiAgICBjb25zdCB7IHJlbW90ZXMsIGV4Y2x1ZGVkUmVtb3RlcyB9ID0gcGx1Z2luc0NvbmZpZztcblxuICAgIC8vIG5lZWRlZCBmb3IgZmlyc3QgdGltZSBhZGRpbmcvcmVtb3ZpbmcgYSBwbHVnaW5cbiAgICBpZiAoIXRoaXMuYXBwLmNvbmZpZykge1xuICAgICAgdGhpcy5hcHAuY29uZmlnID0ge307XG4gICAgfVxuXG4gICAgdGhpcy5hcHAuY29uZmlnLnJlbW90ZXMgPSByZW1vdGVzO1xuICAgIHRoaXMuYXBwLmNvbmZpZy5leGNsdWRlZFJlbW90ZXMgPSBleGNsdWRlZFJlbW90ZXM7XG4gICAgY29uc3QgYWN0dWFsUmVtb3RlcyA9IHRoaXMucGx1Z2luc1NlcnZpY2UuZ2V0TUZSZW1vdGVzKHRoaXMuYXBwKTtcbiAgICB0aGlzLnJlbW90ZVBsdWdpbnMkLm5leHQoYWN0dWFsUmVtb3Rlcyk7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5yZW1vdGVQbHVnaW5zJC52YWx1ZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRBcHBsaWNhdGlvbk1PKCk6IFByb21pc2U8SUFwcGxpY2F0aW9uPiB7XG4gICAgbGV0IGlkID0gdGhpcy5hcHBJZDtcbiAgICBpZiAoIWlkKSB7XG4gICAgICBjb25zdCB7IGlkOiByb3V0ZUlkIH0gPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnBhcmVudC5kYXRhLmNvbnRleHREYXRhO1xuICAgICAgaWQgPSByb3V0ZUlkO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmFwcCA9IGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS5nZXRBcHBsaWNhdGlvbihpZCk7XG4gICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgIGlmIChlcikge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYXBwO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRBcHBsaWNhdGlvbk1GRXhwb3J0cyhhcHA6IElBcHBsaWNhdGlvbikge1xuICAgIGNvbnN0IGV4cG9ydHMgPSB0aGlzLnBsdWdpbnNTZXJ2aWNlLmdldE1GRXhwb3J0cyhhcHAsIFtdLCB0cnVlKTtcbiAgICByZXR1cm4gZXhwb3J0cztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0QXBwbGljYXRpb25NRlJlbW90ZXMoYXBwOiBJQXBwbGljYXRpb24pIHtcbiAgICBjb25zdCBhcHBDb25maWdSZW1vdGVzID0gdGhpcy5wbHVnaW5zU2VydmljZS5nZXRNRlJlbW90ZXMoYXBwKTtcbiAgICB0aGlzLnJlbW90ZVBsdWdpbnMkLm5leHQoYXBwQ29uZmlnUmVtb3RlcyB8fCB7fSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldEFsbEFwcGxpY2F0aW9uc01GRXhwb3J0cyhhcHA6IElBcHBsaWNhdGlvbikge1xuICAgIGNvbnN0IGV4cG9ydGVkQnlDdXJyZW50QXBwID0gYXdhaXQgdGhpcy5nZXRBcHBsaWNhdGlvbk1GRXhwb3J0cyhhcHApO1xuICAgIGNvbnN0IGFsbEFwcHNNRkV4cG9ydHMgPSBhd2FpdCB0aGlzLnBsdWdpbnNTZXJ2aWNlLmdldEFsbE1GRXhwb3J0cyh0cnVlKTtcbiAgICB0aGlzLmFsbEF2YWlsYWJsZVBsdWdpbnMkLm5leHQoWy4uLmFsbEFwcHNNRkV4cG9ydHMsIC4uLmV4cG9ydGVkQnlDdXJyZW50QXBwXSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldEFsbFNlbGZNRkV4cG9ydHMoYXBwOiBJQXBwbGljYXRpb24pIHtcbiAgICBjb25zdCBleHBvcnRlZEJ5Q3VycmVudEFwcCA9IGF3YWl0IHRoaXMuZ2V0QXBwbGljYXRpb25NRkV4cG9ydHMoYXBwKTtcbiAgICB0aGlzLnNlbGZQbHVnaW5zJC5uZXh0KGV4cG9ydGVkQnlDdXJyZW50QXBwLmZpbHRlcigoeyBzY29wZSB9KSA9PiBzY29wZSA9PT0gJ3NlbGYnKSk7XG4gIH1cblxuICBwcml2YXRlIGdldEluc3RhbGxNb2RhbEluaXRTdGF0ZSgpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBwbHVnaW5zJDogY29tYmluZUxhdGVzdChbdGhpcy5hbGxBdmFpbGFibGVQbHVnaW5zJCwgdGhpcy5pbnN0YWxsZWRQbHVnaW5zJF0pLnBpcGUoXG4gICAgICAgIG1hcCgoW2FsbFBsdWdpbnMsIGluc3RhbGxlZFBsdWdpbnNdKSA9PiB7XG4gICAgICAgICAgLy8gdG8gbm90IG11dGF0ZSB0aGUgb3JpZ2luYWwgYXJyYXkgYW5kIG9iamVjdHMgY29udGFpbmVkIGluIGl0XG4gICAgICAgICAgY29uc3QgYWxsUGx1Z2luc0FzTmV3T2JqZWN0cyA9IGFsbFBsdWdpbnMubWFwKHAgPT4gKHsgLi4ucCB9KSk7XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IHBsdWdpbiBvZiBpbnN0YWxsZWRQbHVnaW5zKSB7XG4gICAgICAgICAgICBsZXQgaW5zdGFsbGVkUGx1Z2luID0gYWxsUGx1Z2luc0FzTmV3T2JqZWN0cy5maW5kKHAgPT4gcC5pZCA9PT0gcGx1Z2luLmlkKTtcblxuICAgICAgICAgICAgaWYgKCFpbnN0YWxsZWRQbHVnaW4gJiYgcGx1Z2luLmluc3RhbGxlZFZpYVRhZykge1xuICAgICAgICAgICAgICBpbnN0YWxsZWRQbHVnaW4gPSBhbGxQbHVnaW5zQXNOZXdPYmplY3RzLmZpbmQoXG4gICAgICAgICAgICAgICAgcCA9PlxuICAgICAgICAgICAgICAgICAgcC5jb250ZXh0UGF0aCA9PT0gcGx1Z2luLmNvbnRleHRQYXRoICYmXG4gICAgICAgICAgICAgICAgICBwLm1vZHVsZSA9PT0gcGx1Z2luLm1vZHVsZSAmJlxuICAgICAgICAgICAgICAgICAgcC50YWdzPy5pbmNsdWRlcyhwbHVnaW4uaW5zdGFsbGVkVmlhVGFnIGFzIHN0cmluZylcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGluc3RhbGxlZFBsdWdpbikge1xuICAgICAgICAgICAgICBpbnN0YWxsZWRQbHVnaW4uaW5zdGFsbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGFsbFBsdWdpbnNBc05ld09iamVjdHMubWFwKHAgPT4gKHsgLi4ucCwgaW5zdGFsbGVkOiAhIXAuaW5zdGFsbGVkIH0pKTtcbiAgICAgICAgfSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0T3JwaGFuZWRQbHVnaW5zKFxuICAgIG9ycGhhbmVkUGx1Z2luSWRzOiBzdHJpbmdbXSxcbiAgICBhbGxQbHVnaW5zOiBBcHBsaWNhdGlvblBsdWdpbltdXG4gICk6IEFwcGxpY2F0aW9uUGx1Z2luW10ge1xuICAgIGNvbnN0IG9ycGhhbmVkUGx1Z2luczogQXBwbGljYXRpb25QbHVnaW5bXSA9IG9ycGhhbmVkUGx1Z2luSWRzLm1hcChwID0+IHRoaXMuZXh0cmFjdERldGFpbHMocCkpO1xuICAgIGNvbnN0IG9ycGhhbmVkUGx1Z2luc1VwZGF0ZWQgPSBvcnBoYW5lZFBsdWdpbnMubWFwKHAgPT4ge1xuICAgICAgY29uc3QgcGx1Z2luV2l0aE1hdGNoaW5nVGFnID0gYWxsUGx1Z2lucy5maW5kKFxuICAgICAgICB0bXAgPT5cbiAgICAgICAgICB0bXAuY29udGV4dFBhdGggPT09IHAuY29udGV4dFBhdGggJiZcbiAgICAgICAgICB0bXAubW9kdWxlID09PSBwLm1vZHVsZSAmJlxuICAgICAgICAgIHRtcC50YWdzPy5pbmNsdWRlcyhwLnZlcnNpb24gfHwgJ2xhdGVzdCcpXG4gICAgICApO1xuICAgICAgaWYgKHBsdWdpbldpdGhNYXRjaGluZ1RhZykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnBsdWdpbldpdGhNYXRjaGluZ1RhZyxcbiAgICAgICAgICBpZDogcC5pZCxcbiAgICAgICAgICBzdGF0dXM6IEFwcGxpY2F0aW9uUGx1Z2luU3RhdHVzLkFVVE8sXG4gICAgICAgICAgaW5zdGFsbGVkVmlhVGFnOiBwLnZlcnNpb24gfHwgJ2xhdGVzdCdcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBsdWdpbkluRGlmZmVyZW50VmVyc2lvbiA9IGFsbFBsdWdpbnMuZmluZChcbiAgICAgICAgdG1wID0+IHRtcC5jb250ZXh0UGF0aCA9PT0gcC5jb250ZXh0UGF0aCAmJiB0bXAubW9kdWxlID09PSBwLm1vZHVsZVxuICAgICAgKTtcbiAgICAgIGlmIChwbHVnaW5JbkRpZmZlcmVudFZlcnNpb24pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5wbHVnaW5JbkRpZmZlcmVudFZlcnNpb24sXG4gICAgICAgICAgdmVyc2lvbjogcC52ZXJzaW9uLFxuICAgICAgICAgIGlkOiBwLmlkLFxuICAgICAgICAgIHN0YXR1czogQXBwbGljYXRpb25QbHVnaW5TdGF0dXMuT1VUREFURURcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9ycGhhbmVkUGx1Z2luc1VwZGF0ZWQ7XG4gIH1cblxuICBwcml2YXRlIHNwbGl0T3JwaGFuZWRQbHVnaW5zSW50b09ycGhhbmVkQW5kUmV2b2tlZFBsdWdpbnMoXG4gICAgYWxsUGx1Z2luczogQXBwbGljYXRpb25QbHVnaW5bXSxcbiAgICBvcnBoYW5lZFBsdWdpbnM6IEFwcGxpY2F0aW9uUGx1Z2luW11cbiAgKSB7XG4gICAgY29uc3QgcmV2b2tlZFBsdWdpbnMgPSBuZXcgQXJyYXk8QXBwbGljYXRpb25QbHVnaW4+KCk7XG4gICAgY29uc3QgYWN0dWFsbHlPcnBoYW5lZFBsdWdpbnMgPSBuZXcgQXJyYXk8QXBwbGljYXRpb25QbHVnaW4+KCk7XG5cbiAgICBmb3IgKGNvbnN0IHBsdWdpbiBvZiBvcnBoYW5lZFBsdWdpbnMpIHtcbiAgICAgIGNvbnN0IGZvdW5kRmFtaWxpYXJQbHVnaW4gPSBhbGxQbHVnaW5zLmZpbmQoXG4gICAgICAgIHBsdWdpbjEgPT4gcGx1Z2luLmNvbnRleHRQYXRoID09PSBwbHVnaW4xLmNvbnRleHRQYXRoICYmIHBsdWdpbi5tb2R1bGUgPT09IHBsdWdpbjEubW9kdWxlXG4gICAgICApO1xuICAgICAgaWYgKGZvdW5kRmFtaWxpYXJQbHVnaW4pIHtcbiAgICAgICAgcmV2b2tlZFBsdWdpbnMucHVzaChcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHt9LCBmb3VuZEZhbWlsaWFyUGx1Z2luLCBwbHVnaW4sIHtcbiAgICAgICAgICAgIHN0YXR1czogQXBwbGljYXRpb25QbHVnaW5TdGF0dXMuUkVWT0tFRFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY3R1YWxseU9ycGhhbmVkUGx1Z2lucy5wdXNoKHBsdWdpbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgcmV2b2tlZFBsdWdpbnMsIGFjdHVhbGx5T3JwaGFuZWRQbHVnaW5zIH07XG4gIH1cblxuICBwcml2YXRlIGdldEluc3RhbGxlZFBsdWdpbnMoXG4gICAgYWxsUGx1Z2luczogQXBwbGljYXRpb25QbHVnaW5bXSxcbiAgICByZW1vdGVQbHVnaW5zOiBzdHJpbmdbXVxuICApOiBBcHBsaWNhdGlvblBsdWdpbltdIHtcbiAgICBjb25zdCBhdmFpbGFibGVQbHVnaW5zID0gYWxsUGx1Z2luc1xuICAgICAgLmZpbHRlcihwbHVnaW4gPT4gcmVtb3RlUGx1Z2lucy5pbmNsdWRlcyhwbHVnaW4uaWQpKVxuICAgICAgLm1hcChwbHVnaW4gPT5cbiAgICAgICAgT2JqZWN0LmFzc2lnbihwbHVnaW4sIHtcbiAgICAgICAgICBzdGF0dXM6IHBsdWdpbi50YWdzPy5pbmNsdWRlcygnbGF0ZXN0JylcbiAgICAgICAgICAgID8gQXBwbGljYXRpb25QbHVnaW5TdGF0dXMuTEFURVNUXG4gICAgICAgICAgICA6IEFwcGxpY2F0aW9uUGx1Z2luU3RhdHVzLk9VVERBVEVEXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIGNvbnN0IG9ycGhhbmVkUGx1Z2luSWRzID0gcmVtb3RlUGx1Z2lucy5maWx0ZXIoXG4gICAgICByID0+ICFhdmFpbGFibGVQbHVnaW5zLmZpbmQocGx1Z2luID0+IHBsdWdpbi5pZCA9PT0gcilcbiAgICApO1xuICAgIGNvbnN0IG9ycGhhbmVkUGx1Z2luczogQXBwbGljYXRpb25QbHVnaW5bXSA9IHRoaXMuZ2V0T3JwaGFuZWRQbHVnaW5zKFxuICAgICAgb3JwaGFuZWRQbHVnaW5JZHMsXG4gICAgICBhbGxQbHVnaW5zXG4gICAgKTtcblxuICAgIGNvbnN0IG5vdEFjdHVhbGx5T3JwaGFuZWRQbHVnaW5zID0gb3JwaGFuZWRQbHVnaW5zLmZpbHRlcihcbiAgICAgIHAgPT4gcC5zdGF0dXMgPT09IEFwcGxpY2F0aW9uUGx1Z2luU3RhdHVzLkFVVE9cbiAgICApO1xuXG4gICAgY29uc3Qgb3JwaGFuZWRPclJldm9rZWRQbHVnaW5zID0gb3JwaGFuZWRQbHVnaW5zLmZpbHRlcihcbiAgICAgIHAgPT4gcC5zdGF0dXMgIT09IEFwcGxpY2F0aW9uUGx1Z2luU3RhdHVzLkFVVE9cbiAgICApO1xuXG4gICAgY29uc3QgeyBhY3R1YWxseU9ycGhhbmVkUGx1Z2lucywgcmV2b2tlZFBsdWdpbnMgfSA9XG4gICAgICB0aGlzLnNwbGl0T3JwaGFuZWRQbHVnaW5zSW50b09ycGhhbmVkQW5kUmV2b2tlZFBsdWdpbnMoYWxsUGx1Z2lucywgb3JwaGFuZWRPclJldm9rZWRQbHVnaW5zKTtcblxuICAgIHJldHVybiBbXG4gICAgICAuLi5hdmFpbGFibGVQbHVnaW5zLFxuICAgICAgLi4ubm90QWN0dWFsbHlPcnBoYW5lZFBsdWdpbnMsXG4gICAgICAuLi5yZXZva2VkUGx1Z2lucyxcbiAgICAgIC4uLmFjdHVhbGx5T3JwaGFuZWRQbHVnaW5zXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdERldGFpbHMocGx1Z2luSWQ6IHN0cmluZyk6IEFwcGxpY2F0aW9uUGx1Z2luIHtcbiAgICBjb25zdCBjb250ZXh0UGF0aCA9IHRoaXMuZ2V0U3RyaW5nTWF0Y2hpbmdSZWdleChwbHVnaW5JZCwgL15bXkBdKihAfFxcLykvKTtcbiAgICBjb25zdCB2ZXJzaW9uID0gdGhpcy5nZXRTdHJpbmdNYXRjaGluZ1JlZ2V4KHBsdWdpbklkLCAvQC4qXFwvLyk7XG4gICAgY29uc3QgbW9kdWxlID0gdGhpcy5nZXRTdHJpbmdNYXRjaGluZ1JlZ2V4KHBsdWdpbklkLCAvXFwvLiokLyk7XG4gICAgY29uc3QgdW5hdmFpbGFibGUgPSBnZXR0ZXh0KCd1bmF2YWlsYWJsZWBwbHVnaW5gJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBwbHVnaW5JZCxcbiAgICAgIGlkTGF0ZXN0OiBgJHtjb250ZXh0UGF0aH0vJHttb2R1bGV9YCxcbiAgICAgIHBhdGg6ICcnLFxuICAgICAgbW9kdWxlLFxuICAgICAgbmFtZTogbW9kdWxlLFxuICAgICAgc3RhdHVzOiBBcHBsaWNhdGlvblBsdWdpblN0YXR1cy5PUlBIQU5FRCxcbiAgICAgIGNvbnRleHRQYXRoOiBjb250ZXh0UGF0aCxcbiAgICAgIGRlc2NyaXB0aW9uOiB1bmF2YWlsYWJsZSxcbiAgICAgIHZlcnNpb246IHZlcnNpb25cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTdHJpbmdNYXRjaGluZ1JlZ2V4KFxuICAgIHN0cjogc3RyaW5nLFxuICAgIHJlZ2V4OiB7IFtTeW1ib2wubWF0Y2hdKHN0cmluZzogc3RyaW5nKTogUmVnRXhwTWF0Y2hBcnJheSB8IG51bGwgfVxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IG1hdGNoZXMgPSBzdHIubWF0Y2gocmVnZXgpO1xuICAgIGNvbnN0IHZhbHVlID0gbWF0Y2hlcyA/IG1hdGNoZXNbMF0gOiAnJztcblxuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC8oQHxcXC8pL2csICcnKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJpZ2dlclBsdWdpbkV2ZW50KHBsdWdpbjogQXBwbGljYXRpb25QbHVnaW4sIHJlc3VsdDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcGx1Z2luSW5mbyA9IHBpY2socGx1Z2luLCBbXG4gICAgICAnbmFtZScsXG4gICAgICAnY29udGV4dFBhdGgnLFxuICAgICAgJ21vZHVsZScsXG4gICAgICAndmVyc2lvbicsXG4gICAgICAndHlwZScsXG4gICAgICAnaWQnXG4gICAgXSBzYXRpc2ZpZXMgKGtleW9mIEFwcGxpY2F0aW9uUGx1Z2luKVtdKTtcblxuICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoXG4gICAgICBQUk9EVUNUX0VYUEVSSUVOQ0VfRUNPU1lTVEVNLkFQUExJQ0FUSU9OUy5FVkVOVFMuSU5TVEFMTEVEX1BMVUdJTlMsXG4gICAgICB7XG4gICAgICAgIGNvbXBvbmVudDogUFJPRFVDVF9FWFBFUklFTkNFX0VDT1NZU1RFTS5BUFBMSUNBVElPTlMuQ09NUE9ORU5UUy5BUFBMSUNBVElPTl9QTFVHSU5TLFxuICAgICAgICByZXN1bHQsXG4gICAgICAgIHVybDogdGhpcy5DVVJSRU5UX0xPQ0FUSU9OLFxuICAgICAgICAuLi5wbHVnaW5JbmZvLFxuICAgICAgICB0YXJnZXRBcHBsaWNhdGlvbk5hbWU6IHRoaXMuYXBwLm5hbWUsXG4gICAgICAgIHRhcmdldEFwcGxpY2F0aW9uQ29udGV4dFBhdGg6IHRoaXMuYXBwLmNvbnRleHRQYXRoXG4gICAgICB9XG4gICAgKTtcbiAgfVxufVxuIiwiPGM4eS10aXRsZT57eyBhcHAgfCBodW1hbml6ZUFwcE5hbWUgfCBhc3luYyB9fTwvYzh5LXRpdGxlPlxuXG48Yzh5LWJyZWFkY3J1bWI+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtXG4gICAgW2ljb25dPVwiJ2M4eS1hdG9tJ1wiXG4gICAgW2xhYmVsXT1cIidFY29zeXN0ZW0nIHwgdHJhbnNsYXRlXCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW1cbiAgICBbaWNvbl09XCInYzh5LW1vZHVsZXMnXCJcbiAgICBbbGFiZWxdPVwiJ0FwcGxpY2F0aW9ucycgfCB0cmFuc2xhdGVcIlxuICAgIFtwYXRoXT1cIidlY29zeXN0ZW0vYXBwbGljYXRpb24vYXBwbGljYXRpb25zJ1wiXG4gID48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtIFtsYWJlbF09XCJhcHAgfCBodW1hbml6ZUFwcE5hbWUgfCBhc3luY1wiPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW0gW2xhYmVsXT1cIidQbHVnaW5zJyB8IHRyYW5zbGF0ZVwiPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbjwvYzh5LWJyZWFkY3J1bWI+XG5cbjxjOHktYWN0aW9uLWJhci1pdGVtXG4gIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiXG4gICpuZ0lmPVwiIShpc1N0YW5kYXJkJCB8IGFzeW5jKVwiXG4+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cImJ0biBidG4tbGlua1wiXG4gICAgdGl0bGU9XCJ7eyAnUmVzZXQgdG8gZGVmYXVsdCBwbHVnaW5zJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgW25nQ2xhc3NdPVwieyAnYnRuLXBlbmRpbmcnOiBpc0xvYWRpbmcgfVwiXG4gICAgKGNsaWNrKT1cInJlc2V0VG9EZWZhdWx0KClcIlxuICA+XG4gICAgPGkgYzh5SWNvbj1cInVuZG9cIj48L2k+XG4gICAge3sgJ1Jlc2V0IHRvIGRlZmF1bHQnIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48Yzh5LWFjdGlvbi1iYXItaXRlbSBbcGxhY2VtZW50XT1cIidyaWdodCdcIj5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCJcbiAgICB0aXRsZT1cInt7ICdJbnN0YWxsIHBsdWdpbnMnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAoY2xpY2spPVwiaW5zdGFsbFBsdWdpbnMoKVwiXG4gICAgW25nQ2xhc3NdPVwieyAnYnRuLXBlbmRpbmcnOiBpc0xvYWRpbmcgfVwiXG4gID5cbiAgICA8aSBjOHlJY29uPVwicGx1cy1jaXJjbGVcIj48L2k+XG4gICAge3sgJ0luc3RhbGwgcGx1Z2lucycgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJvcnBoYW5lZFBsdWdpbnMkIHwgYXN5bmMgYXMgb3JwaGFuZWRQbHVnaW5zXCI+XG4gIDxjOHktYWN0aW9uLWJhci1pdGVtXG4gICAgKm5nSWY9XCJvcnBoYW5lZFBsdWdpbnM/Lmxlbmd0aFwiXG4gICAgW3BsYWNlbWVudF09XCIncmlnaHQnXCJcbiAgPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCJcbiAgICAgIHRpdGxlPVwie3sgJ0NsZWFuIHVwIG9ycGhhbmVkIHBsdWdpbnMnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgIChjbGljayk9XCJjbGVhbnVwT3JwaGFuZWRQbHVnaW5zKG9ycGhhbmVkUGx1Z2lucylcIlxuICAgICAgW25nQ2xhc3NdPVwieyAnYnRuLXBlbmRpbmcnOiBpc0xvYWRpbmcgfVwiXG4gICAgPlxuICAgICAgPGkgYzh5SWNvbj1cImVyYXNlXCI+PC9pPlxuICAgICAge3sgJ0NsZWFuIHVwIG9ycGhhbmVkIHBsdWdpbnMnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvYzh5LWFjdGlvbi1iYXItaXRlbT5cbjwvbmctY29udGFpbmVyPlxuXG48ZGl2IGNsYXNzPVwiY29udGVudC1mdWxscGFnZSBkLWZsZXggZC1jb2wgYm9yZGVyLXRvcFwiPlxuICA8Yzh5LWRhdGEtZ3JpZFxuICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgW3RpdGxlXT1cInRpdGxlXCJcbiAgICBbbG9hZE1vcmVJdGVtc0xhYmVsXT1cImxvYWRNb3JlSXRlbXNMYWJlbFwiXG4gICAgW2xvYWRpbmdJdGVtc0xhYmVsXT1cImxvYWRpbmdJdGVtc0xhYmVsXCJcbiAgICBbZGlzcGxheU9wdGlvbnNdPVwiZGlzcGxheU9wdGlvbnNcIlxuICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxuICAgIFtyb3dzXT1cImluc3RhbGxlZFBsdWdpbnMkIHwgYXN5bmNcIlxuICAgIFtwYWdpbmF0aW9uXT1cInBhZ2luYXRpb25cIlxuICAgIFtzZWxlY3RhYmxlXT1cInRydWVcIlxuICAgIFthY3Rpb25Db250cm9sc109XCJhY3Rpb25Db250cm9sc1wiXG4gICAgW2J1bGtBY3Rpb25Db250cm9sc109XCJidWxrQWN0aW9uQ29udHJvbHNcIlxuICAgIFtoZWFkZXJBY3Rpb25Db250cm9sc109XCJoZWFkZXJBY3Rpb25Db250cm9sc1wiXG4gICAgKG9uUmVsb2FkKT1cInJlZnJlc2goKVwiXG4gID5cbiAgICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgICBbaWNvbl09XCJzdGF0cz8uc2l6ZSA+IDAgPyAnc2VhcmNoJyA6ICdwbHVnaW4nXCJcbiAgICAgIFt0aXRsZV09XCJzdGF0cz8uc2l6ZSA+IDAgPyAobm9SZXN1bHRzTWVzc2FnZSB8IHRyYW5zbGF0ZSkgOiAobm9EYXRhTWVzc2FnZSB8IHRyYW5zbGF0ZSlcIlxuICAgICAgW3N1YnRpdGxlXT1cInN0YXRzPy5zaXplID4gMCA/IChub1Jlc3VsdHNTdWJ0aXRsZSB8IHRyYW5zbGF0ZSkgOiAobm9EYXRhU3VidGl0bGUgfCB0cmFuc2xhdGUpXCJcbiAgICAgICplbXB0eVN0YXRlQ29udGV4dD1cImxldCBzdGF0c1wiXG4gICAgICBbaG9yaXpvbnRhbF09XCJzdGF0cz8uc2l6ZSA+IDBcIlxuICAgID5cbiAgICAgIDxwICpuZ0lmPVwic3RhdHM/LnNpemUgPT09IDBcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiXG4gICAgICAgICAgdGl0bGU9XCJ7eyAnSW5zdGFsbCBwbHVnaW5zJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgKGNsaWNrKT1cImluc3RhbGxQbHVnaW5zKClcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2J0bi1wZW5kaW5nJzogaXNMb2FkaW5nIH1cIlxuICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICA+XG4gICAgICAgICAgSW5zdGFsbCBwbHVnaW5zXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9wPlxuICAgIDwvYzh5LXVpLWVtcHR5LXN0YXRlPlxuICA8L2M4eS1kYXRhLWdyaWQ+XG48L2Rpdj5cbiJdfQ==
|
|
502
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24tcGx1Z2lucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9lY29zeXN0ZW0vYXBwbGljYXRpb24tcGx1Z2lucy9hcHBsaWNhdGlvbi1wbHVnaW5zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2Vjb3N5c3RlbS9hcHBsaWNhdGlvbi1wbHVnaW5zL2FwcGxpY2F0aW9uLXBsdWdpbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFakQsT0FBTyxFQUVMLFlBQVksRUFFWix1QkFBdUIsRUFHdkIsaUJBQWlCLEVBRWpCLGdCQUFnQixFQUNoQixPQUFPLEVBSVAsY0FBYyxFQUNkLG1CQUFtQixFQUNwQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsNEJBQTRCLEVBQzdCLE1BQU0sc0NBQXNDLENBQUM7QUFDOUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzRixPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ2hHLE9BQU8sRUFBRSww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QUFDLG1CQUFtQjtZQUNuRixNQUFNO1lBQ04sR0FBRyxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7WUFDMUIsR0FBRyxVQUFVO1lBQ2IscUJBQXFCLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJO1lBQ3BDLDRCQUE0QixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVztTQUNuRCxDQUNGLENBQUM7SUFDSixDQUFDOzhHQXJtQlUsMkJBQTJCO2tHQUEzQiwyQkFBMkIsNkhBSzNCLGlCQUFpQixnREMxQzlCLDZsR0FpR0E7OzJGRDVEYSwyQkFBMkI7a0JBSnZDLFNBQVM7K0JBQ0UsaUJBQWlCO3NPQU9sQixLQUFLO3NCQUFiLEtBQUs7Z0JBRU4sUUFBUTtzQkFEUCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucywgSUFwcGxpY2F0aW9uIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQWN0aW9uQ29udHJvbCxcbiAgQWxlcnRTZXJ2aWNlLFxuICBBcHBsaWNhdGlvblBsdWdpbixcbiAgQXBwbGljYXRpb25QbHVnaW5TdGF0dXMsXG4gIEJ1bGtBY3Rpb25Db250cm9sLFxuICBDb2x1bW4sXG4gIERhdGFHcmlkQ29tcG9uZW50LFxuICBEaXNwbGF5T3B0aW9ucyxcbiAgR2FpbnNpZ2h0U2VydmljZSxcbiAgZ2V0dGV4dCxcbiAgSGVhZGVyQWN0aW9uQ29udHJvbCxcbiAgUGFnaW5hdGlvbixcbiAgUGx1Z2luc0NvbmZpZyxcbiAgUGx1Z2luc1NlcnZpY2UsXG4gIFBsdWdpbnNFeHBvcnRTY29wZXNcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBFY29zeXN0ZW1TZXJ2aWNlLFxuICBQUk9EVUNUX0VYUEVSSUVOQ0VfRUNPU1lTVEVNXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZWNvc3lzdGVtL3NoYXJlZCc7XG5pbXBvcnQgeyBwaWNrIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGZpcnN0VmFsdWVGcm9tLCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSW5zdGFsbFBsdWdpbkNvbXBvbmVudCB9IGZyb20gJy4vaW5zdGFsbC1wbHVnaW4uY29tcG9uZW50JztcbmltcG9ydCB7IExhYmVsQ2VsbFJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi9sYWJlbC1jZWxsLXJlbmRlcmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPcnBoYW5lZFN0YXR1c0NlbGxSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4vb3JwaGFuZWQtc3RhdHVzLWNlbGwtcmVuZGVyZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFVwZGF0ZVBsdWdpbk9mQXBwQ29tcG9uZW50IH0gZnJvbSAnLi91cGRhdGUtcGx1Z2luLW9mLWFwcC91cGRhdGUtcGx1Z2luLW9mLWFwcC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktYXBwLXBsdWdpbnMnLFxuICB0ZW1wbGF0ZVVybDogJy4vYXBwbGljYXRpb24tcGx1Z2lucy5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQXBwbGljYXRpb25QbHVnaW5zQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBQUk9EVUNUX0VYUEVSSUVOQ0UgPSBQUk9EVUNUX0VYUEVSSUVOQ0VfRUNPU1lTVEVNO1xuICBDVVJSRU5UX0xPQ0FUSU9OID0gbG9jYXRpb24uaHJlZjtcblxuICBASW5wdXQoKSBhcHBJZDogc3RyaW5nIHwgbnVtYmVyO1xuICBAVmlld0NoaWxkKERhdGFHcmlkQ29tcG9uZW50LCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgZGF0YUdyaWQ6IERhdGFHcmlkQ29tcG9uZW50O1xuXG4gIHJlbW90ZVBsdWdpbnMkOiBCZWhhdmlvclN1YmplY3Q8QXBwbGljYXRpb25SZW1vdGVQbHVnaW5zPiA9IG5ldyBCZWhhdmlvclN1YmplY3Qoe30pO1xuICBhbGxBdmFpbGFibGVQbHVnaW5zJDogQmVoYXZpb3JTdWJqZWN0PEFwcGxpY2F0aW9uUGx1Z2luW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChbXSk7XG4gIHNlbGZQbHVnaW5zJDogQmVoYXZpb3JTdWJqZWN0PEFwcGxpY2F0aW9uUGx1Z2luW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChbXSk7XG5cbiAgaW5zdGFsbGVkUGx1Z2lucyQ6IE9ic2VydmFibGU8QXBwbGljYXRpb25QbHVnaW5bXT4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLnJlbW90ZVBsdWdpbnMkLnBpcGUobWFwKHJlbW90ZXMgPT4gUGx1Z2luc1NlcnZpY2UuY29udmVydEluc3RhbGxlZFJlbW90ZXNUb0lkcyhyZW1vdGVzKSkpLFxuICAgIHRoaXMuYWxsQXZhaWxhYmxlUGx1Z2lucyRcbiAgXSkucGlwZShcbiAgICBtYXAoKFtyZW1vdGVQbHVnaW5zLCBhbGxQbHVnaW5zXSkgPT4gdGhpcy5nZXRJbnN0YWxsZWRQbHVnaW5zKGFsbFBsdWdpbnMsIHJlbW90ZVBsdWdpbnMpKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuICBvcnBoYW5lZFBsdWdpbnMkID0gdGhpcy5pbnN0YWxsZWRQbHVnaW5zJC5waXBlKFxuICAgIG1hcChwbHVnaW5zID0+IHBsdWdpbnMuZmlsdGVyKHAgPT4gcC5zdGF0dXMgPT09IEFwcGxpY2F0aW9uUGx1Z2luU3RhdHVzLk9SUEhBTkVEKSlcbiAgKTtcbiAgLy8gb25seSB1c2UgdGhlIGluc3RhbGxlZFBsdWdpbnMkIGFuZCBzZWxmUGx1Z2lucyQgYXMgdHJpZ2dlcnNcbiAgaXNTdGFuZGFyZCQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmluc3RhbGxlZFBsdWdpbnMkLCB0aGlzLnNlbGZQbHVnaW5zJF0pLnBpcGUoXG4gICAgbWFwKCgpID0+IHRoaXMuaXNTdGFuZGFyZCh0aGlzLmFwcCkpXG4gICk7XG4gIGFwcDogSUFwcGxpY2F0aW9uO1xuICBpc0xvYWRpbmc6IGJvb2xlYW47XG4gIHRpdGxlOiBzdHJpbmcgPSBnZXR0ZXh0KCdJbnN0YWxsZWQgcGx1Z2lucycpO1xuICBsb2FkTW9yZUl0ZW1zTGFiZWw6IHN0cmluZyA9IGdldHRleHQoJ0xvYWQgbW9yZSBwYWNrYWdlcycpO1xuICBsb2FkaW5nSXRlbXNMYWJlbDogc3RyaW5nID0gZ2V0dGV4dCgnTG9hZGluZyBwYWNrYWdlc+KApicpO1xuICBhY3Rpb25Db250cm9sczogQWN0aW9uQ29udHJvbFtdID0gdGhpcy5nZXRBY3Rpb25Db250cm9scygpO1xuICBidWxrQWN0aW9uQ29udHJvbHM6IEJ1bGtBY3Rpb25Db250cm9sW10gPSB0aGlzLmdldEJ1bGtBY3Rpb25Db250cm9scygpO1xuICBoZWFkZXJBY3Rpb25Db250cm9sczogSGVhZGVyQWN0aW9uQ29udHJvbFtdID0gW107XG4gIG5vUmVzdWx0c01lc3NhZ2UgPSBnZXR0ZXh0KCdObyBwbHVnaW5zIHRvIGRpc3BsYXkuJyk7XG4gIG5vRGF0YU1lc3NhZ2UgPSBnZXR0ZXh0KCdObyBwbHVnaW5zIGluc3RhbGxlZC4nKTtcbiAgbm9SZXN1bHRzU3VidGl0bGUgPSBnZXR0ZXh0KCdSZWZpbmUgeW91ciBzZWFyY2ggdGVybXMgb3IgY2hlY2sgeW91ciBzcGVsbGluZy4nKTtcbiAgbm9EYXRhU3VidGl0bGUgPSBnZXR0ZXh0KFwiVGhpcyBhcHBsaWNhdGlvbiBkb2Vzbid0IGhhdmUgYW55IHBsdWdpbi4gQ2xpY2sgYmVsb3cgdG8gaW5zdGFsbC5cIik7XG4gIHBhZ2luYXRpb246IFBhZ2luYXRpb24gPSB7XG4gICAgcGFnZVNpemU6IDEwLFxuICAgIGN1cnJlbnRQYWdlOiAxXG4gIH07XG4gIGRpc3BsYXlPcHRpb25zOiBEaXNwbGF5T3B0aW9ucyA9IHtcbiAgICBib3JkZXJlZDogZmFsc2UsXG4gICAgc3RyaXBlZDogdHJ1ZSxcbiAgICBmaWx0ZXI6IHRydWUsXG4gICAgZ3JpZEhlYWRlcjogdHJ1ZSxcbiAgICBob3ZlcjogdHJ1ZVxuICB9O1xuICBjb2x1bW5zOiBDb2x1bW5bXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnbmFtZScsXG4gICAgICBoZWFkZXI6IGdldHRleHQoJ1BsdWdpbiBuYW1lJyksXG4gICAgICBwYXRoOiAnbmFtZScsXG4gICAgICBmaWx0ZXJhYmxlOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnVmVyc2lvbicsXG4gICAgICBoZWFkZXI6IGdldHRleHQoJ1ZlcnNpb24nKSxcbiAgICAgIHBhdGg6ICd2ZXJzaW9uJyxcbiAgICAgIGZpbHRlcmFibGU6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnVGFnJyxcbiAgICAgIGhlYWRlcjogZ2V0dGV4dCgnVGFnYG5vdW5gJyksXG4gICAgICBwYXRoOiAnaW5zdGFsbGVkVmlhVGFnJyxcbiAgICAgIGZpbHRlcmFibGU6IGZhbHNlLFxuICAgICAgY2VsbFJlbmRlcmVyQ29tcG9uZW50OiBMYWJlbENlbGxSZW5kZXJlckNvbXBvbmVudFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2Rlc2NyaXB0aW9uJyxcbiAgICAgIGhlYWRlcjogZ2V0dGV4dCgnRGVzY3JpcHRpb24nKSxcbiAgICAgIHBhdGg6ICdkZXNjcmlwdGlvbicsXG4gICAgICBmaWx0ZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNlbGxDU1NDbGFzc05hbWU6ICdzbWFsbCdcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdjb250ZXh0UGF0aCcsXG4gICAgICBoZWFkZXI6IGdldHRleHQoJ1NvdXJjZScpLFxuICAgICAgcGF0aDogJ2NvbnRleHRQYXRoJyxcbiAgICAgIGZpbHRlcmFibGU6IGZhbHNlLFxuICAgICAgY2VsbFJlbmRlcmVyQ29tcG9uZW50OiBMYWJlbENlbGxSZW5kZXJlckNvbXBvbmVudFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3Njb3BlJyxcbiAgICAgIGhlYWRlcjogZ2V0dGV4dCgnU2NvcGUnKSxcbiAgICAgIHBhdGg6ICdzY29wZScsXG4gICAgICBmaWx0ZXJhYmxlOiBmYWxzZSxcbiAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgY2VsbFJlbmRlcmVyQ29tcG9uZW50OiBMYWJlbENlbGxSZW5kZXJlckNvbXBvbmVudFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3N0YXR1cycsXG4gICAgICBoZWFkZXI6IGdldHRleHQoJ1N0YXR1cycpLFxuICAgICAgcGF0aDogJ3N0YXR1cycsXG4gICAgICBmaWx0ZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNlbGxSZW5kZXJlckNvbXBvbmVudDogT3JwaGFuZWRTdGF0dXNDZWxsUmVuZGVyZXJDb21wb25lbnRcbiAgICB9XG4gIF07XG4gIHByaXZhdGUgZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgZWNvc3lzdGVtU2VydmljZTogRWNvc3lzdGVtU2VydmljZSxcbiAgICBwcml2YXRlIGJzTW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIHBsdWdpbnNTZXJ2aWNlOiBQbHVnaW5zU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ2FpbnNpZ2h0U2VydmljZTogR2FpbnNpZ2h0U2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5hZGRJbnN0YWxsQnV0dG9uVG9IZWFkZXJBY3Rpb25Db250cm9scygpO1xuICAgIHRoaXMubG9hZERhdGEoKTtcbiAgfVxuXG4gIGFzeW5jIGxvYWREYXRhKCkge1xuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICBhd2FpdCB0aGlzLmdldEFwcGxpY2F0aW9uTU8oKTtcbiAgICBhd2FpdCB0aGlzLmdldEFwcGxpY2F0aW9uTUZSZW1vdGVzKHRoaXMuYXBwKTtcbiAgICBhd2FpdCB0aGlzLmdldEFsbEFwcGxpY2F0aW9uc01GRXhwb3J0cyh0aGlzLmFwcCk7XG4gICAgYXdhaXQgdGhpcy5nZXRBbGxTZWxmTUZFeHBvcnRzKHRoaXMuYXBwKTtcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgcmVzZXRUb0RlZmF1bHQoKSB7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIGF3YWl0IHRoaXMucGx1Z2luc1NlcnZpY2UucmVzZXRSZW1vdGVzKHRoaXMuYXBwKTtcbiAgICBhd2FpdCB0aGlzLmxvYWREYXRhKCk7XG4gICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdUaGUgYXBwbGljYXRpb24gd2FzIHJlc2V0IHRvIGl0cyBkZWZhdWx0IHBsdWdpbnMuJykpO1xuICB9XG5cbiAgYXN5bmMgaW5zdGFsbFBsdWdpbnMoKSB7XG4gICAgbGV0IGN1cnJlbnRQbHVnaW46IEFwcGxpY2F0aW9uUGx1Z2luIHwgbnVsbCA9IG51bGw7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChcbiAgICAgICAgUFJPRFVDVF9FWFBFUklFTkNFX0VDT1NZU1RFTS5BUFBMSUNBVElPTlMuRVZFTlRTLklOU1RBTExFRF9QTFVHSU5TLFxuICAgICAgICB7XG4gICAgICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0VfRUNPU1lTVEVNLkFQUExJQ0FUSU9OUy5DT01QT05FTlRTLkFQUExJQ0FUSU9OX1BMVUdJTlMsXG4gICAgICAgICAgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0VfRUNPU1lTVEVNLkFQUExJQ0FUSU9OUy5BQ1RJT05TLklOU1RBTExfUExVR0lOU19JTklUSUFURUQsXG4gICAgICAgICAgdXJsOiB0aGlzLkNVUlJFTlRfTE9DQVRJT04sXG4gICAgICAgICAgdGFyZ2V0QXBwbGljYXRpb25OYW1lOiB0aGlzLmFwcC5uYW1lLFxuICAgICAgICAgIHRhcmdldEFwcGxpY2F0aW9uQ29udGV4dFBhdGg6IHRoaXMuYXBwLmNvbnRleHRQYXRoXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICBjb25zdCBwbHVnaW5zVG9BZGQ6IEFwcGxpY2F0aW9uUGx1Z2luW10gPVxuICAgICAgICBhd2FpdCB0aGlzLmJzTW9kYWxTZXJ2aWNlLnNob3c8SW5zdGFsbFBsdWdpbkNvbXBvbmVudD4oSW5zdGFsbFBsdWdpbkNvbXBvbmVudCwge1xuICAgICAgICAgIGNsYXNzOiAnbW9kYWwtc20nLFxuICAgICAgICAgIGFyaWFEZXNjcmliZWRieTogJ21vZGFsLWJvZHknLFxuICAgICAgICAgIGFyaWFMYWJlbGxlZEJ5OiAnbW9kYWwtdGl0bGUnLFxuICAgICAgICAgIGluaXRpYWxTdGF0ZTogdGhpcy5nZXRJbnN0YWxsTW9kYWxJbml0U3RhdGUoKSxcbiAgICAgICAgICBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlXG4gICAgICAgIH0pLmNvbnRlbnQucmVzdWx0O1xuXG4gICAgICBjb25zdCBsaWNlbnNlc1ZlcmlmaWVkQnlVc2VyID0gYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLnZlcmlmeUxpY2Vuc2VzKHBsdWdpbnNUb0FkZCk7XG4gICAgICBpZiAoIWxpY2Vuc2VzVmVyaWZpZWRCeVVzZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgdmVyaWZ5VmVyc2lvbkNvbXBhdGliaWxpdHkgPVxuICAgICAgICBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UudmVyaWZ5UGx1Z2luVmVyc2lvbnNDb21wYXRpYmlsaXR5KHBsdWdpbnNUb0FkZCwgdGhpcy5hcHApO1xuXG4gICAgICBpZiAoIXZlcmlmeVZlcnNpb25Db21wYXRpYmlsaXR5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgYXdhaXQgdGhpcy5oYW5kbGVSZW1vdGVzSW5zdGFsbGF0aW9uKHBsdWdpbnNUb0FkZCk7XG5cbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnUGx1Z2lucyBpbnN0YWxsZWQuJykpO1xuICAgICAgcGx1Z2luc1RvQWRkLmZvckVhY2gocGx1Z2luID0+IHtcbiAgICAgICAgY3VycmVudFBsdWdpbiA9IHBsdWdpbjtcblxuICAgICAgICB0aGlzLnRyaWdnZXJQbHVnaW5FdmVudChcbiAgICAgICAgICBwbHVnaW4sXG4gICAgICAgICAgUFJPRFVDVF9FWFBFUklFTkNFX0VDT1NZU1RFTS5BUFBMSUNBVElPTlMuUkVTVUxUUy5QTFVHSU5fSU5TVEFMTEVEXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgaWYgKGV4KSB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZXgpO1xuICAgICAgICB0aGlzLnRyaWdnZXJQbHVnaW5FdmVudChcbiAgICAgICAgICBjdXJyZW50UGx1Z2luLFxuICAgICAgICAgIFBST0RVQ1RfRVhQRVJJRU5DRV9FQ09TWVNURU0uQVBQTElDQVRJT05TLlJFU1VMVFMuU0VSVkVSX0ZBSUxVUkVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyByZW1vdmVQbHVnaW5zKHBsdWdpbnM6IHN0cmluZ1tdKSB7XG4gICAgbGV0IGN1cnJlbnRQbHVnaW46IEFwcGxpY2F0aW9uUGx1Z2luIHwgbnVsbCA9IG51bGw7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgY29uc3QgaW5zdGFsbGVkUGx1Z2luczogQXBwbGljYXRpb25QbHVnaW5bXSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuaW5zdGFsbGVkUGx1Z2lucyQpO1xuICAgICAgY29uc3QgcGx1Z2luc1RvUmVtb3ZlOiBBcHBsaWNhdGlvblBsdWdpbltdID0gaW5zdGFsbGVkUGx1Z2lucy5maWx0ZXIocCA9PlxuICAgICAgICBwbHVnaW5zLmluY2x1ZGVzKHAuaWQpXG4gICAgICApO1xuICAgICAgY29uc3QgdXBkYXRlZFJlbW90ZXMgPSBhd2FpdCB0aGlzLnBsdWdpbnNTZXJ2aWNlLnJlbW92ZVJlbW90ZXMoXG4gICAgICAgIHRoaXMuYXBwLFxuICAgICAgICBwbHVnaW5zLm1hcChpZCA9PiBpbnN0YWxsZWRQbHVnaW5zLmZpbmQocCA9PiBwLmlkID09PSBpZCkpXG4gICAgICApO1xuICAgICAgdGhpcy5lbWl0UmVtb3Rlcyh1cGRhdGVkUmVtb3Rlcyk7XG5cbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmRhdGFHcmlkLmNhbmNlbCgpO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdQbHVnaW5zIHJlbW92ZWQuJykpO1xuXG4gICAgICBwbHVnaW5zVG9SZW1vdmUuZm9yRWFjaChwbHVnaW4gPT4ge1xuICAgICAgICBjdXJyZW50UGx1Z2luID0gcGx1Z2luO1xuXG4gICAgICAgIHRoaXMudHJpZ2dlclBsdWdpbkV2ZW50KFxuICAgICAgICAgIHBsdWdpbixcbiAgICAgICAgICBQUk9EVUNUX0VYUEVSSUVOQ0VfRUNPU1lTVEVNLkFQUExJQ0FUSU9OUy5SRVNVTFRTLlBMVUdJTl9SRU1PVkVEXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgaWYgKGV4KSB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZXgpO1xuICAgICAgICB0aGlzLnRyaWdnZXJQbHVnaW5FdmVudChcbiAgICAgICAgICBjdXJyZW50UGx1Z2luLFxuICAgICAgICAgIFBST0RVQ1RfRVhQRVJJRU5DRV9FQ09TWVNURU0uQVBQTElDQVRJT05TLlJFU1VMVFMuU0VSVkVSX0ZBSUxVUkVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjbGVhbnVwT3JwaGFuZWRQbHVnaW5zKHBsdWdpbnM6IEFwcGxpY2F0aW9uUGx1Z2luW10pIHtcbiAgICBjb25zdCBwbHVnaW5JZHMgPSBwbHVnaW5zLm1hcChwID0+IHAuaWQpO1xuICAgIGF3YWl0IHRoaXMucmVtb3ZlUGx1Z2lucyhwbHVnaW5JZHMpO1xuICB9XG5cbiAgZ2V0QWN0aW9uQ29udHJvbHMoKTogQWN0aW9uQ29udHJvbFtdIHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnY3VzdG9tVXBkYXRlJyxcbiAgICAgICAgdGV4dDogZ2V0dGV4dCgnVXBkYXRlJyksXG4gICAgICAgIGljb246ICdjYXJldC1zcXVhcmUtby11cCcsXG4gICAgICAgIHNob3dJZjogcGx1Z2luID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgcGx1Z2luLnN0YXR1cyA9PT0gQXBwbGljYXRpb25QbHVnaW5TdGF0dXMuT1VUREFURUQgfHxcbiAgICAgICAgICAgIHBsdWdpbi5zdGF0dXMgPT09IEFwcGxpY2F0aW9uUGx1Z2luU3RhdHVzLlJFVk9LRURcbiAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgICBjYWxsYmFjazogcGx1Z2luID0+IHRoaXMudXBkYXRlUGx1Z2luKHRoaXMuYXBwLCBwbHVnaW4gYXMgQXBwbGljYXRpb25QbHVnaW4pXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiAnY3VzdG9tRG93bmdyYWRlJyxcbiAgICAgICAgdGV4dDogZ2V0dGV4dCgnRG93bmdyYWRlJyksXG4gICAgICAgIGljb246ICdjYXJldC1zcXVhcmUtby1kb3duJyxcbiAgICAgICAgc2hvd0lmOiAocGx1Z2luOiBBcHBsaWNhdGlvblBsdWdpbikgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHBsdWdpbi5zY29wZSA9PT0gUGx1Z2luc0V4cG9ydFNjb3Blcy5TRUxGIHx8XG4gICAgICAgICAgICBwbHVnaW4uc2NvcGUgPT09IFBsdWdpbnNFeHBvcnRTY29wZXMuU0VMRl9PUFRJT05BTFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcGx1Z2luLnN0YXR1cyA9PT0gQXBwbGljYXRpb25QbHVnaW5TdGF0dXMuTEFURVNUO1xuICAgICAgICB9LFxuICAgICAgICBjYWxsYmFjazogcGx1Z2luID0+IHRoaXMudXBkYXRlUGx1Z2luKHRoaXMuYXBwLCBwbHVnaW4gYXMgQXBwbGljYXRpb25QbHVnaW4sIHRydWUpXG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIGdldEJ1bGtBY3Rpb25Db250cm9scygpOiBCdWxrQWN0aW9uQ29udHJvbFtdIHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnY3VzdG9tRGVsZXRlJyxcbiAgICAgICAgdGV4dDogZ2V0dGV4dCgnUmVtb3ZlJyksXG4gICAgICAgIGljb246ICd0cmFzaCcsXG4gICAgICAgIGNhbGxiYWNrOiBwbHVnaW5zID0+IHRoaXMucmVtb3ZlUGx1Z2lucyhwbHVnaW5zKVxuICAgICAgfVxuICAgIF07XG4gIH1cblxuICBhc3luYyB1cGRhdGVQbHVnaW4oYXBwOiBJQXBwbGljYXRpb24sIHBsdWdpbjogQXBwbGljYXRpb25QbHVnaW4sIGRvd25ncmFkZSA9IGZhbHNlKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IChcbiAgICAgICAgdGhpcy5ic01vZGFsU2VydmljZS5zaG93KFVwZGF0ZVBsdWdpbk9mQXBwQ29tcG9uZW50LCB7XG4gICAgICAgICAgY2xhc3M6ICdtb2RhbC1zbScsXG4gICAgICAgICAgYXJpYURlc2NyaWJlZGJ5OiAnbW9kYWwtYm9keScsXG4gICAgICAgICAgYXJpYUxhYmVsbGVkQnk6ICdtb2RhbC10aXRsZScsXG4gICAgICAgICAgaW5pdGlhbFN0YXRlOiB7XG4gICAgICAgICAgICBhcHAsXG4gICAgICAgICAgICBwbHVnaW4sXG4gICAgICAgICAgICBkb3duZ3JhZGVcbiAgICAgICAgICB9LFxuICAgICAgICAgIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IHRydWVcbiAgICAgICAgfSkuY29udGVudCBhcyBVcGRhdGVQbHVnaW5PZkFwcENvbXBvbmVudFxuICAgICAgKS5yZXN1bHQ7XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9IGNhdGNoIChlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHJlZnJlc2goKSB7XG4gICAgdGhpcy5sb2FkRGF0YSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgaXNTdGFuZGFyZChhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAvLyBlbnN1cmUgdGhhdCBldmVyeSByZW1vdGUgZnJvbSB0aGUgbWFuaWZlc3QgaXMgaW4gdGhlIGNvbmZpZ1xuICAgICAgdGhpcy5ldmVyeVJlbW90ZUZyb21NYW5pZmVzdElzSW5Db25maWcoYXBwKSAmJlxuICAgICAgLy8gc2hvdWxkIG5vdCBoYXZlIGFueSBleGNsdWRlZCByZW1vdGVzXG4gICAgICBPYmplY3Qua2V5cyhhcHA/LmNvbmZpZz8uZXhjbHVkZWRSZW1vdGVzIHx8IHt9KS5sZW5ndGggPT09IDAgJiZcbiAgICAgIC8vIGVuc3VyZSB0aGF0IGV2ZXJ5IHJlbW90ZSBmcm9tIHRoZSBjb25maWcgaXMgaW4gdGhlIG1hbmlmZXN0XG4gICAgICB0aGlzLmV2ZXJ5UmVtb3RlRnJvbUNvbmZpZ0lzSW5NYW5pZmVzdChhcHApXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZXZlcnlSZW1vdGVGcm9tTWFuaWZlc3RJc0luQ29uZmlnKGFwcD86IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG1hbmlmZXN0UmVtb3RlcyA9IGFwcD8ubWFuaWZlc3Q/LnJlbW90ZXM7XG4gICAgY29uc3QgY29uZmlnUmVtb3RlcyA9IGFwcD8uY29uZmlnPy5yZW1vdGVzO1xuXG4gICAgaWYgKCFtYW5pZmVzdFJlbW90ZXMgfHwgIWNvbmZpZ1JlbW90ZXMpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhtYW5pZmVzdFJlbW90ZXMpLmV2ZXJ5KGNvbnRleHRQYXRoID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIEFycmF5LmlzQXJyYXkoY29uZmlnUmVtb3Rlc1tjb250ZXh0UGF0aF0pICYmXG4gICAgICAgIEFycmF5LmlzQXJyYXkobWFuaWZlc3RSZW1vdGVzW2NvbnRleHRQYXRoXSkgJiZcbiAgICAgICAgbWFuaWZlc3RSZW1vdGVzW2NvbnRleHRQYXRoXS5ldmVyeShtb2R1bGUgPT4ge1xuICAgICAgICAgIHJldHVybiBjb25maWdSZW1vdGVzW2NvbnRleHRQYXRoXS5pbmNsdWRlcyhtb2R1bGUpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZXZlcnlSZW1vdGVGcm9tQ29uZmlnSXNJbk1hbmlmZXN0KGFwcD86IElBcHBsaWNhdGlvbikge1xuICAgIGNvbnN0IG1hbmlmZXN0UmVtb3RlcyA9IGFwcD8ubWFuaWZlc3Q/LnJlbW90ZXMgfHwge307XG4gICAgY29uc3QgY29uZmlnUmVtb3RlcyA9IGFwcD8uY29uZmlnPy5yZW1vdGVzO1xuXG4gICAgaWYgKCFjb25maWdSZW1vdGVzKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoY29uZmlnUmVtb3RlcykuZXZlcnkoY29udGV4dFBhdGggPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgQXJyYXkuaXNBcnJheShjb25maWdSZW1vdGVzW2NvbnRleHRQYXRoXSkgJiZcbiAgICAgICAgQXJyYXkuaXNBcnJheShtYW5pZmVzdFJlbW90ZXNbY29udGV4dFBhdGhdKSAmJlxuICAgICAgICBjb25maWdSZW1vdGVzW2NvbnRleHRQYXRoXS5ldmVyeShtb2R1bGUgPT4ge1xuICAgICAgICAgIHJldHVybiBtYW5pZmVzdFJlbW90ZXNbY29udGV4dFBhdGhdLmluY2x1ZGVzKG1vZHVsZSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRJbnN0YWxsQnV0dG9uVG9IZWFkZXJBY3Rpb25Db250cm9scygpIHtcbiAgICBpZiAodGhpcy5hcHBJZCkge1xuICAgICAgdGhpcy5oZWFkZXJBY3Rpb25Db250cm9scyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6IGdldHRleHQoJ0luc3RhbGwgcGx1Z2lucycpLFxuICAgICAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluc3RhbGxQbHVnaW5zKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpY29uOiAncGx1cy1jaXJjbGUnLFxuICAgICAgICAgIHR5cGU6ICdjdXN0b20nXG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVSZW1vdGVzSW5zdGFsbGF0aW9uKHBsdWdpbnM6IEFwcGxpY2F0aW9uUGx1Z2luW10pIHtcbiAgICBjb25zdCB1cGRhdGVkUmVtb3RlcyA9IGF3YWl0IHRoaXMucGx1Z2luc1NlcnZpY2UuYWRkUmVtb3Rlcyh0aGlzLmFwcCwgcGx1Z2lucyk7XG4gICAgcmV0dXJuIHRoaXMuZW1pdFJlbW90ZXModXBkYXRlZFJlbW90ZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0UmVtb3RlcyhwbHVnaW5zQ29uZmlnOiBQbHVnaW5zQ29uZmlnKSB7XG4gICAgY29uc3QgeyByZW1vdGVzLCBleGNsdWRlZFJlbW90ZXMgfSA9IHBsdWdpbnNDb25maWc7XG5cbiAgICAvLyBuZWVkZWQgZm9yIGZpcnN0IHRpbWUgYWRkaW5nL3JlbW92aW5nIGEgcGx1Z2luXG4gICAgaWYgKCF0aGlzLmFwcC5jb25maWcpIHtcbiAgICAgIHRoaXMuYXBwLmNvbmZpZyA9IHt9O1xuICAgIH1cblxuICAgIHRoaXMuYXBwLmNvbmZpZy5yZW1vdGVzID0gcmVtb3RlcztcbiAgICB0aGlzLmFwcC5jb25maWcuZXhjbHVkZWRSZW1vdGVzID0gZXhjbHVkZWRSZW1vdGVzO1xuICAgIGNvbnN0IGFjdHVhbFJlbW90ZXMgPSB0aGlzLnBsdWdpbnNTZXJ2aWNlLmdldE1GUmVtb3Rlcyh0aGlzLmFwcCk7XG4gICAgdGhpcy5yZW1vdGVQbHVnaW5zJC5uZXh0KGFjdHVhbFJlbW90ZXMpO1xuICAgIHJldHVybiB7IC4uLnRoaXMucmVtb3RlUGx1Z2lucyQudmFsdWUgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0QXBwbGljYXRpb25NTygpOiBQcm9taXNlPElBcHBsaWNhdGlvbj4ge1xuICAgIGxldCBpZCA9IHRoaXMuYXBwSWQ7XG4gICAgaWYgKCFpZCkge1xuICAgICAgY29uc3QgeyBpZDogcm91dGVJZCB9ID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5wYXJlbnQuZGF0YS5jb250ZXh0RGF0YTtcbiAgICAgIGlkID0gcm91dGVJZDtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5hcHAgPSBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuZ2V0QXBwbGljYXRpb24oaWQpO1xuICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICBpZiAoZXIpIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShlcik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFwcDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0QXBwbGljYXRpb25NRkV4cG9ydHMoYXBwOiBJQXBwbGljYXRpb24pIHtcbiAgICBjb25zdCBhcHBsaWNhdGlvbkV4cG9ydHMgPSB0aGlzLnBsdWdpbnNTZXJ2aWNlLmdldE1GRXhwb3J0cyhhcHAsIFtdLCB0cnVlKTtcbiAgICByZXR1cm4gYXBwbGljYXRpb25FeHBvcnRzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRBcHBsaWNhdGlvbk1GUmVtb3RlcyhhcHA6IElBcHBsaWNhdGlvbikge1xuICAgIGNvbnN0IGFwcENvbmZpZ1JlbW90ZXMgPSB0aGlzLnBsdWdpbnNTZXJ2aWNlLmdldE1GUmVtb3RlcyhhcHApO1xuICAgIHRoaXMucmVtb3RlUGx1Z2lucyQubmV4dChhcHBDb25maWdSZW1vdGVzIHx8IHt9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0QWxsQXBwbGljYXRpb25zTUZFeHBvcnRzKGFwcDogSUFwcGxpY2F0aW9uKSB7XG4gICAgY29uc3QgZXhwb3J0ZWRCeUN1cnJlbnRBcHAgPSBhd2FpdCB0aGlzLmdldEFwcGxpY2F0aW9uTUZFeHBvcnRzKGFwcCk7XG4gICAgY29uc3QgYWxsQXBwc01GRXhwb3J0cyA9IGF3YWl0IHRoaXMucGx1Z2luc1NlcnZpY2UuZ2V0QWxsTUZFeHBvcnRzKHRydWUpO1xuICAgIHRoaXMuYWxsQXZhaWxhYmxlUGx1Z2lucyQubmV4dChbLi4uYWxsQXBwc01GRXhwb3J0cywgLi4uZXhwb3J0ZWRCeUN1cnJlbnRBcHBdKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0QWxsU2VsZk1GRXhwb3J0cyhhcHA6IElBcHBsaWNhdGlvbikge1xuICAgIGNvbnN0IGV4cG9ydGVkQnlDdXJyZW50QXBwID0gYXdhaXQgdGhpcy5nZXRBcHBsaWNhdGlvbk1GRXhwb3J0cyhhcHApO1xuICAgIHRoaXMuc2VsZlBsdWdpbnMkLm5leHQoZXhwb3J0ZWRCeUN1cnJlbnRBcHAuZmlsdGVyKCh7IHNjb3BlIH0pID0+IHNjb3BlID09PSAnc2VsZicpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW5zdGFsbE1vZGFsSW5pdFN0YXRlKCk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBsdWdpbnMkOiBjb21iaW5lTGF0ZXN0KFt0aGlzLmFsbEF2YWlsYWJsZVBsdWdpbnMkLCB0aGlzLmluc3RhbGxlZFBsdWdpbnMkXSkucGlwZShcbiAgICAgICAgbWFwKChbYWxsUGx1Z2lucywgaW5zdGFsbGVkUGx1Z2luc10pID0+IHtcbiAgICAgICAgICAvLyB0byBub3QgbXV0YXRlIHRoZSBvcmlnaW5hbCBhcnJheSBhbmQgb2JqZWN0cyBjb250YWluZWQgaW4gaXRcbiAgICAgICAgICBjb25zdCBhbGxQbHVnaW5zQXNOZXdPYmplY3RzID0gYWxsUGx1Z2lucy5tYXAocCA9PiAoeyAuLi5wIH0pKTtcblxuICAgICAgICAgIGZvciAoY29uc3QgcGx1Z2luIG9mIGluc3RhbGxlZFBsdWdpbnMpIHtcbiAgICAgICAgICAgIGxldCBpbnN0YWxsZWRQbHVnaW4gPSBhbGxQbHVnaW5zQXNOZXdPYmplY3RzLmZpbmQocCA9PiBwLmlkID09PSBwbHVnaW4uaWQpO1xuXG4gICAgICAgICAgICBpZiAoIWluc3RhbGxlZFBsdWdpbiAmJiBwbHVnaW4uaW5zdGFsbGVkVmlhVGFnKSB7XG4gICAgICAgICAgICAgIGluc3RhbGxlZFBsdWdpbiA9IGFsbFBsdWdpbnNBc05ld09iamVjdHMuZmluZChcbiAgICAgICAgICAgICAgICBwID0+XG4gICAgICAgICAgICAgICAgICBwLmNvbnRleHRQYXRoID09PSBwbHVnaW4uY29udGV4dFBhdGggJiZcbiAgICAgICAgICAgICAgICAgIHAubW9kdWxlID09PSBwbHVnaW4ubW9kdWxlICYmXG4gICAgICAgICAgICAgICAgICBwLnRhZ3M/LmluY2x1ZGVzKHBsdWdpbi5pbnN0YWxsZWRWaWFUYWcgYXMgc3RyaW5nKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaW5zdGFsbGVkUGx1Z2luKSB7XG4gICAgICAgICAgICAgIGluc3RhbGxlZFBsdWdpbi5pbnN0YWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gYWxsUGx1Z2luc0FzTmV3T2JqZWN0cy5tYXAocCA9PiAoeyAuLi5wLCBpbnN0YWxsZWQ6ICEhcC5pbnN0YWxsZWQgfSkpO1xuICAgICAgICB9KSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgIClcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcnBoYW5lZFBsdWdpbnMoXG4gICAgb3JwaGFuZWRQbHVnaW5JZHM6IHN0cmluZ1tdLFxuICAgIGFsbFBsdWdpbnM6IEFwcGxpY2F0aW9uUGx1Z2luW11cbiAgKTogQXBwbGljYXRpb25QbHVnaW5bXSB7XG4gICAgY29uc3Qgb3JwaGFuZWRQbHVnaW5zOiBBcHBsaWNhdGlvblBsdWdpbltdID0gb3JwaGFuZWRQbHVnaW5JZHMubWFwKHAgPT4gdGhpcy5leHRyYWN0RGV0YWlscyhwKSk7XG4gICAgY29uc3Qgb3JwaGFuZWRQbHVnaW5zVXBkYXRlZCA9IG9ycGhhbmVkUGx1Z2lucy5tYXAocCA9PiB7XG4gICAgICBjb25zdCBwbHVnaW5XaXRoTWF0Y2hpbmdUYWcgPSBhbGxQbHVnaW5zLmZpbmQoXG4gICAgICAgIHRtcCA9PlxuICAgICAgICAgIHRtcC5jb250ZXh0UGF0aCA9PT0gcC5jb250ZXh0UGF0aCAmJlxuICAgICAgICAgIHRtcC5tb2R1bGUgPT09IHAubW9kdWxlICYmXG4gICAgICAgICAgdG1wLnRhZ3M/LmluY2x1ZGVzKHAudmVyc2lvbiB8fCAnbGF0ZXN0JylcbiAgICAgICk7XG4gICAgICBpZiAocGx1Z2luV2l0aE1hdGNoaW5nVGFnKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucGx1Z2luV2l0aE1hdGNoaW5nVGFnLFxuICAgICAgICAgIGlkOiBwLmlkLFxuICAgICAgICAgIHN0YXR1czogQXBwbGljYXRpb25QbHVnaW5TdGF0dXMuQVVUTyxcbiAgICAgICAgICBpbnN0YWxsZWRWaWFUYWc6IHAudmVyc2lvbiB8fCAnbGF0ZXN0J1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY29uc3QgcGx1Z2luSW5EaWZmZXJlbnRWZXJzaW9uID0gYWxsUGx1Z2lucy5maW5kKFxuICAgICAgICB0bXAgPT4gdG1wLmNvbnRleHRQYXRoID09PSBwLmNvbnRleHRQYXRoICYmIHRtcC5tb2R1bGUgPT09IHAubW9kdWxlXG4gICAgICApO1xuICAgICAgaWYgKHBsdWdpbkluRGlmZmVyZW50VmVyc2lvbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnBsdWdpbkluRGlmZmVyZW50VmVyc2lvbixcbiAgICAgICAgICB2ZXJzaW9uOiBwLnZlcnNpb24sXG4gICAgICAgICAgaWQ6IHAuaWQsXG4gICAgICAgICAgc3RhdHVzOiBBcHBsaWNhdGlvblBsdWdpblN0YXR1cy5PVVREQVRFRFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHA7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb3JwaGFuZWRQbHVnaW5zVXBkYXRlZDtcbiAgfVxuXG4gIHByaXZhdGUgc3BsaXRPcnBoYW5lZFBsdWdpbnNJbnRvT3JwaGFuZWRBbmRSZXZva2VkUGx1Z2lucyhcbiAgICBhbGxQbHVnaW5zOiBBcHBsaWNhdGlvblBsdWdpbltdLFxuICAgIG9ycGhhbmVkUGx1Z2luczogQXBwbGljYXRpb25QbHVnaW5bXVxuICApIHtcbiAgICBjb25zdCByZXZva2VkUGx1Z2lucyA9IG5ldyBBcnJheTxBcHBsaWNhdGlvblBsdWdpbj4oKTtcbiAgICBjb25zdCBhY3R1YWxseU9ycGhhbmVkUGx1Z2lucyA9IG5ldyBBcnJheTxBcHBsaWNhdGlvblBsdWdpbj4oKTtcblxuICAgIGZvciAoY29uc3QgcGx1Z2luIG9mIG9ycGhhbmVkUGx1Z2lucykge1xuICAgICAgY29uc3QgZm91bmRGYW1pbGlhclBsdWdpbiA9IGFsbFBsdWdpbnMuZmluZChcbiAgICAgICAgcGx1Z2luMSA9PiBwbHVnaW4uY29udGV4dFBhdGggPT09IHBsdWdpbjEuY29udGV4dFBhdGggJiYgcGx1Z2luLm1vZHVsZSA9PT0gcGx1Z2luMS5tb2R1bGVcbiAgICAgICk7XG4gICAgICBpZiAoZm91bmRGYW1pbGlhclBsdWdpbikge1xuICAgICAgICByZXZva2VkUGx1Z2lucy5wdXNoKFxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oe30sIGZvdW5kRmFtaWxpYXJQbHVnaW4sIHBsdWdpbiwge1xuICAgICAgICAgICAgc3RhdHVzOiBBcHBsaWNhdGlvblBsdWdpblN0YXR1cy5SRVZPS0VEXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjdHVhbGx5T3JwaGFuZWRQbHVnaW5zLnB1c2gocGx1Z2luKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyByZXZva2VkUGx1Z2lucywgYWN0dWFsbHlPcnBoYW5lZFBsdWdpbnMgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW5zdGFsbGVkUGx1Z2lucyhcbiAgICBhbGxQbHVnaW5zOiBBcHBsaWNhdGlvblBsdWdpbltdLFxuICAgIHJlbW90ZVBsdWdpbnM6IHN0cmluZ1tdXG4gICk6IEFwcGxpY2F0aW9uUGx1Z2luW10ge1xuICAgIGNvbnN0IGF2YWlsYWJsZVBsdWdpbnMgPSBhbGxQbHVnaW5zXG4gICAgICAuZmlsdGVyKHBsdWdpbiA9PiByZW1vdGVQbHVnaW5zLmluY2x1ZGVzKHBsdWdpbi5pZCkpXG4gICAgICAubWFwKHBsdWdpbiA9PlxuICAgICAgICBPYmplY3QuYXNzaWduKHBsdWdpbiwge1xuICAgICAgICAgIHN0YXR1czogcGx1Z2luLnRhZ3M/LmluY2x1ZGVzKCdsYXRlc3QnKVxuICAgICAgICAgICAgPyBBcHBsaWNhdGlvblBsdWdpblN0YXR1cy5MQVRFU1RcbiAgICAgICAgICAgIDogQXBwbGljYXRpb25QbHVnaW5TdGF0dXMuT1VUREFURURcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgY29uc3Qgb3JwaGFuZWRQbHVnaW5JZHMgPSByZW1vdGVQbHVnaW5zLmZpbHRlcihcbiAgICAgIHIgPT4gIWF2YWlsYWJsZVBsdWdpbnMuZmluZChwbHVnaW4gPT4gcGx1Z2luLmlkID09PSByKVxuICAgICk7XG4gICAgY29uc3Qgb3JwaGFuZWRQbHVnaW5zOiBBcHBsaWNhdGlvblBsdWdpbltdID0gdGhpcy5nZXRPcnBoYW5lZFBsdWdpbnMoXG4gICAgICBvcnBoYW5lZFBsdWdpbklkcyxcbiAgICAgIGFsbFBsdWdpbnNcbiAgICApO1xuXG4gICAgY29uc3Qgbm90QWN0dWFsbHlPcnBoYW5lZFBsdWdpbnMgPSBvcnBoYW5lZFBsdWdpbnMuZmlsdGVyKFxuICAgICAgcCA9PiBwLnN0YXR1cyA9PT0gQXBwbGljYXRpb25QbHVnaW5TdGF0dXMuQVVUT1xuICAgICk7XG5cbiAgICBjb25zdCBvcnBoYW5lZE9yUmV2b2tlZFBsdWdpbnMgPSBvcnBoYW5lZFBsdWdpbnMuZmlsdGVyKFxuICAgICAgcCA9PiBwLnN0YXR1cyAhPT0gQXBwbGljYXRpb25QbHVnaW5TdGF0dXMuQVVUT1xuICAgICk7XG5cbiAgICBjb25zdCB7IGFjdHVhbGx5T3JwaGFuZWRQbHVnaW5zLCByZXZva2VkUGx1Z2lucyB9ID1cbiAgICAgIHRoaXMuc3BsaXRPcnBoYW5lZFBsdWdpbnNJbnRvT3JwaGFuZWRBbmRSZXZva2VkUGx1Z2lucyhhbGxQbHVnaW5zLCBvcnBoYW5lZE9yUmV2b2tlZFBsdWdpbnMpO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLmF2YWlsYWJsZVBsdWdpbnMsXG4gICAgICAuLi5ub3RBY3R1YWxseU9ycGhhbmVkUGx1Z2lucyxcbiAgICAgIC4uLnJldm9rZWRQbHVnaW5zLFxuICAgICAgLi4uYWN0dWFsbHlPcnBoYW5lZFBsdWdpbnNcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0RGV0YWlscyhwbHVnaW5JZDogc3RyaW5nKTogQXBwbGljYXRpb25QbHVnaW4ge1xuICAgIGNvbnN0IGNvbnRleHRQYXRoID0gdGhpcy5nZXRTdHJpbmdNYXRjaGluZ1JlZ2V4KHBsdWdpbklkLCAvXlteQF0qKEB8XFwvKS8pO1xuICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLmdldFN0cmluZ01hdGNoaW5nUmVnZXgocGx1Z2luSWQsIC9ALipcXC8vKTtcbiAgICBjb25zdCBtb2R1bGUgPSB0aGlzLmdldFN0cmluZ01hdGNoaW5nUmVnZXgocGx1Z2luSWQsIC9cXC8uKiQvKTtcbiAgICBjb25zdCB1bmF2YWlsYWJsZSA9IGdldHRleHQoJ3VuYXZhaWxhYmxlYHBsdWdpbmAnKTtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHBsdWdpbklkLFxuICAgICAgaWRMYXRlc3Q6IGAke2NvbnRleHRQYXRofS8ke21vZHVsZX1gLFxuICAgICAgcGF0aDogJycsXG4gICAgICBtb2R1bGUsXG4gICAgICBuYW1lOiBtb2R1bGUsXG4gICAgICBzdGF0dXM6IEFwcGxpY2F0aW9uUGx1Z2luU3RhdHVzLk9SUEhBTkVELFxuICAgICAgY29udGV4dFBhdGg6IGNvbnRleHRQYXRoLFxuICAgICAgZGVzY3JpcHRpb246IHVuYXZhaWxhYmxlLFxuICAgICAgdmVyc2lvbjogdmVyc2lvblxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldFN0cmluZ01hdGNoaW5nUmVnZXgoXG4gICAgc3RyOiBzdHJpbmcsXG4gICAgcmVnZXg6IHsgW1N5bWJvbC5tYXRjaF0oc3RyaW5nOiBzdHJpbmcpOiBSZWdFeHBNYXRjaEFycmF5IHwgbnVsbCB9XG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IHN0ci5tYXRjaChyZWdleCk7XG4gICAgY29uc3QgdmFsdWUgPSBtYXRjaGVzID8gbWF0Y2hlc1swXSA6ICcnO1xuXG4gICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoLyhAfFxcLykvZywgJycpO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmlnZ2VyUGx1Z2luRXZlbnQocGx1Z2luOiBBcHBsaWNhdGlvblBsdWdpbiwgcmVzdWx0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBwbHVnaW5JbmZvID0gcGljayhwbHVnaW4sIFtcbiAgICAgICduYW1lJyxcbiAgICAgICdjb250ZXh0UGF0aCcsXG4gICAgICAnbW9kdWxlJyxcbiAgICAgICd2ZXJzaW9uJyxcbiAgICAgICd0eXBlJyxcbiAgICAgICdpZCdcbiAgICBdIHNhdGlzZmllcyAoa2V5b2YgQXBwbGljYXRpb25QbHVnaW4pW10pO1xuXG4gICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChcbiAgICAgIFBST0RVQ1RfRVhQRVJJRU5DRV9FQ09TWVNURU0uQVBQTElDQVRJT05TLkVWRU5UUy5JTlNUQUxMRURfUExVR0lOUyxcbiAgICAgIHtcbiAgICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0VfRUNPU1lTVEVNLkFQUExJQ0FUSU9OUy5DT01QT05FTlRTLkFQUExJQ0FUSU9OX1BMVUdJTlMsXG4gICAgICAgIHJlc3VsdCxcbiAgICAgICAgdXJsOiB0aGlzLkNVUlJFTlRfTE9DQVRJT04sXG4gICAgICAgIC4uLnBsdWdpbkluZm8sXG4gICAgICAgIHRhcmdldEFwcGxpY2F0aW9uTmFtZTogdGhpcy5hcHAubmFtZSxcbiAgICAgICAgdGFyZ2V0QXBwbGljYXRpb25Db250ZXh0UGF0aDogdGhpcy5hcHAuY29udGV4dFBhdGhcbiAgICAgIH1cbiAgICApO1xuICB9XG59XG4iLCI8Yzh5LXRpdGxlPnt7IGFwcCB8IGh1bWFuaXplQXBwTmFtZSB8IGFzeW5jIH19PC9jOHktdGl0bGU+XG5cbjxjOHktYnJlYWRjcnVtYj5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW1cbiAgICBbaWNvbl09XCInYzh5LWF0b20nXCJcbiAgICBbbGFiZWxdPVwiJ0Vjb3N5c3RlbScgfCB0cmFuc2xhdGVcIlxuICA+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbVxuICAgIFtpY29uXT1cIidjOHktbW9kdWxlcydcIlxuICAgIFtsYWJlbF09XCInQXBwbGljYXRpb25zJyB8IHRyYW5zbGF0ZVwiXG4gICAgW3BhdGhdPVwiJ2Vjb3N5c3RlbS9hcHBsaWNhdGlvbi9hcHBsaWNhdGlvbnMnXCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW0gW2xhYmVsXT1cImFwcCB8IGh1bWFuaXplQXBwTmFtZSB8IGFzeW5jXCI+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbSBbbGFiZWxdPVwiJ1BsdWdpbnMnIHwgdHJhbnNsYXRlXCI+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuPC9jOHktYnJlYWRjcnVtYj5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW1cbiAgW3BsYWNlbWVudF09XCIncmlnaHQnXCJcbiAgKm5nSWY9XCIhKGlzU3RhbmRhcmQkIHwgYXN5bmMpXCJcbj5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCJcbiAgICB0aXRsZT1cInt7ICdSZXNldCB0byBkZWZhdWx0IHBsdWdpbnMnIHwgdHJhbnNsYXRlIH19XCJcbiAgICBbbmdDbGFzc109XCJ7ICdidG4tcGVuZGluZyc6IGlzTG9hZGluZyB9XCJcbiAgICAoY2xpY2spPVwicmVzZXRUb0RlZmF1bHQoKVwiXG4gID5cbiAgICA8aSBjOHlJY29uPVwidW5kb1wiPjwvaT5cbiAgICB7eyAnUmVzZXQgdG8gZGVmYXVsdCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbjxjOHktYWN0aW9uLWJhci1pdGVtIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiPlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJidG4gYnRuLWxpbmtcIlxuICAgIHRpdGxlPVwie3sgJ0luc3RhbGwgcGx1Z2lucycgfCB0cmFuc2xhdGUgfX1cIlxuICAgIChjbGljayk9XCJpbnN0YWxsUGx1Z2lucygpXCJcbiAgICBbbmdDbGFzc109XCJ7ICdidG4tcGVuZGluZyc6IGlzTG9hZGluZyB9XCJcbiAgPlxuICAgIDxpIGM4eUljb249XCJwbHVzLWNpcmNsZVwiPjwvaT5cbiAgICB7eyAnSW5zdGFsbCBwbHVnaW5zJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9ycGhhbmVkUGx1Z2lucyQgfCBhc3luYyBhcyBvcnBoYW5lZFBsdWdpbnNcIj5cbiAgPGM4eS1hY3Rpb24tYmFyLWl0ZW1cbiAgICAqbmdJZj1cIm9ycGhhbmVkUGx1Z2lucz8ubGVuZ3RoXCJcbiAgICBbcGxhY2VtZW50XT1cIidyaWdodCdcIlxuICA+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJidG4gYnRuLWxpbmtcIlxuICAgICAgdGl0bGU9XCJ7eyAnQ2xlYW4gdXAgb3JwaGFuZWQgcGx1Z2lucycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgKGNsaWNrKT1cImNsZWFudXBPcnBoYW5lZFBsdWdpbnMob3JwaGFuZWRQbHVnaW5zKVwiXG4gICAgICBbbmdDbGFzc109XCJ7ICdidG4tcGVuZGluZyc6IGlzTG9hZGluZyB9XCJcbiAgICA+XG4gICAgICA8aSBjOHlJY29uPVwiZXJhc2VcIj48L2k+XG4gICAgICB7eyAnQ2xlYW4gdXAgb3JwaGFuZWQgcGx1Z2lucycgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuPC9uZy1jb250YWluZXI+XG5cbjxkaXYgY2xhc3M9XCJjb250ZW50LWZ1bGxwYWdlIGQtZmxleCBkLWNvbCBib3JkZXItdG9wXCI+XG4gIDxjOHktZGF0YS1ncmlkXG4gICAgY2xhc3M9XCJkLWNvbnRlbnRzXCJcbiAgICBbdGl0bGVdPVwidGl0bGVcIlxuICAgIFtsb2FkTW9yZUl0ZW1zTGFiZWxdPVwibG9hZE1vcmVJdGVtc0xhYmVsXCJcbiAgICBbbG9hZGluZ0l0ZW1zTGFiZWxdPVwibG9hZGluZ0l0ZW1zTGFiZWxcIlxuICAgIFtkaXNwbGF5T3B0aW9uc109XCJkaXNwbGF5T3B0aW9uc1wiXG4gICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXG4gICAgW3Jvd3NdPVwiaW5zdGFsbGVkUGx1Z2lucyQgfCBhc3luY1wiXG4gICAgW3BhZ2luYXRpb25dPVwicGFnaW5hdGlvblwiXG4gICAgW3NlbGVjdGFibGVdPVwidHJ1ZVwiXG4gICAgW2FjdGlvbkNvbnRyb2xzXT1cImFjdGlvbkNvbnRyb2xzXCJcbiAgICBbYnVsa0FjdGlvbkNvbnRyb2xzXT1cImJ1bGtBY3Rpb25Db250cm9sc1wiXG4gICAgW2hlYWRlckFjdGlvbkNvbnRyb2xzXT1cImhlYWRlckFjdGlvbkNvbnRyb2xzXCJcbiAgICAob25SZWxvYWQpPVwicmVmcmVzaCgpXCJcbiAgPlxuICAgIDxjOHktdWktZW1wdHktc3RhdGVcbiAgICAgIFtpY29uXT1cInN0YXRzPy5zaXplID4gMCA/ICdzZWFyY2gnIDogJ3BsdWdpbidcIlxuICAgICAgW3RpdGxlXT1cInN0YXRzPy5zaXplID4gMCA/IChub1Jlc3VsdHNNZXNzYWdlIHwgdHJhbnNsYXRlKSA6IChub0RhdGFNZXNzYWdlIHwgdHJhbnNsYXRlKVwiXG4gICAgICBbc3VidGl0bGVdPVwic3RhdHM/LnNpemUgPiAwID8gKG5vUmVzdWx0c1N1YnRpdGxlIHwgdHJhbnNsYXRlKSA6IChub0RhdGFTdWJ0aXRsZSB8IHRyYW5zbGF0ZSlcIlxuICAgICAgKmVtcHR5U3RhdGVDb250ZXh0PVwibGV0IHN0YXRzXCJcbiAgICAgIFtob3Jpem9udGFsXT1cInN0YXRzPy5zaXplID4gMFwiXG4gICAgPlxuICAgICAgPHAgKm5nSWY9XCJzdGF0cz8uc2l6ZSA9PT0gMFwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCJcbiAgICAgICAgICB0aXRsZT1cInt7ICdJbnN0YWxsIHBsdWdpbnMnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAoY2xpY2spPVwiaW5zdGFsbFBsdWdpbnMoKVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyAnYnRuLXBlbmRpbmcnOiBpc0xvYWRpbmcgfVwiXG4gICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgID5cbiAgICAgICAgICBJbnN0YWxsIHBsdWdpbnNcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3A+XG4gICAgPC9jOHktdWktZW1wdHktc3RhdGU+XG4gIDwvYzh5LWRhdGEtZ3JpZD5cbjwvZGl2PlxuIl19
|
|
@@ -590,25 +590,8 @@ class ApplicationPluginsComponent {
|
|
|
590
590
|
this.allAvailablePlugins$
|
|
591
591
|
]).pipe(map(([remotePlugins, allPlugins]) => this.getInstalledPlugins(allPlugins, remotePlugins)), shareReplay(1));
|
|
592
592
|
this.orphanedPlugins$ = this.installedPlugins$.pipe(map(plugins => plugins.filter(p => p.status === ApplicationPluginStatus.ORPHANED)));
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
// ensure that every installed plugin is a self plugin or a plugin from the manifest
|
|
596
|
-
const allInstalledPluginsAreSelf = installedPlugins.every(p => selfPlugins.some(selfPlugin => selfPlugin.id === p.id) ||
|
|
597
|
-
(Array.isArray(manifestRemotes[p.contextPath]) &&
|
|
598
|
-
manifestRemotes[p.contextPath].includes(p.module)));
|
|
599
|
-
// ensure that every self plugin is installed
|
|
600
|
-
const allSelfPluginsAreInstalled = selfPlugins.every(selfPlugin => installedPlugins.some(p => p.id === selfPlugin.id));
|
|
601
|
-
const configRemotes = this.app?.config?.remotes || {};
|
|
602
|
-
// ensure that every remote from the manifest is in the config
|
|
603
|
-
// if no config exists we are also all good
|
|
604
|
-
const everyRemoteFromManifestIsInConfig = !this.app?.config?.remotes ||
|
|
605
|
-
Object.keys(manifestRemotes).every(contextPath => Array.isArray(configRemotes[contextPath]) &&
|
|
606
|
-
Array.isArray(manifestRemotes[contextPath]) &&
|
|
607
|
-
manifestRemotes[contextPath].every(module => configRemotes[contextPath].includes(module)));
|
|
608
|
-
return (allInstalledPluginsAreSelf &&
|
|
609
|
-
allSelfPluginsAreInstalled &&
|
|
610
|
-
everyRemoteFromManifestIsInConfig);
|
|
611
|
-
}));
|
|
593
|
+
// only use the installedPlugins$ and selfPlugins$ as triggers
|
|
594
|
+
this.isStandard$ = combineLatest([this.installedPlugins$, this.selfPlugins$]).pipe(map(() => this.isStandard(this.app)));
|
|
612
595
|
this.title = gettext('Installed plugins');
|
|
613
596
|
this.loadMoreItemsLabel = gettext('Load more packages');
|
|
614
597
|
this.loadingItemsLabel = gettext('Loading packages…');
|
|
@@ -836,6 +819,43 @@ class ApplicationPluginsComponent {
|
|
|
836
819
|
this.destroy$.next();
|
|
837
820
|
this.destroy$.complete();
|
|
838
821
|
}
|
|
822
|
+
isStandard(app) {
|
|
823
|
+
return (
|
|
824
|
+
// ensure that every remote from the manifest is in the config
|
|
825
|
+
this.everyRemoteFromManifestIsInConfig(app) &&
|
|
826
|
+
// should not have any excluded remotes
|
|
827
|
+
Object.keys(app?.config?.excludedRemotes || {}).length === 0 &&
|
|
828
|
+
// ensure that every remote from the config is in the manifest
|
|
829
|
+
this.everyRemoteFromConfigIsInManifest(app));
|
|
830
|
+
}
|
|
831
|
+
everyRemoteFromManifestIsInConfig(app) {
|
|
832
|
+
const manifestRemotes = app?.manifest?.remotes;
|
|
833
|
+
const configRemotes = app?.config?.remotes;
|
|
834
|
+
if (!manifestRemotes || !configRemotes) {
|
|
835
|
+
return true;
|
|
836
|
+
}
|
|
837
|
+
return Object.keys(manifestRemotes).every(contextPath => {
|
|
838
|
+
return (Array.isArray(configRemotes[contextPath]) &&
|
|
839
|
+
Array.isArray(manifestRemotes[contextPath]) &&
|
|
840
|
+
manifestRemotes[contextPath].every(module => {
|
|
841
|
+
return configRemotes[contextPath].includes(module);
|
|
842
|
+
}));
|
|
843
|
+
});
|
|
844
|
+
}
|
|
845
|
+
everyRemoteFromConfigIsInManifest(app) {
|
|
846
|
+
const manifestRemotes = app?.manifest?.remotes || {};
|
|
847
|
+
const configRemotes = app?.config?.remotes;
|
|
848
|
+
if (!configRemotes) {
|
|
849
|
+
return true;
|
|
850
|
+
}
|
|
851
|
+
return Object.keys(configRemotes).every(contextPath => {
|
|
852
|
+
return (Array.isArray(configRemotes[contextPath]) &&
|
|
853
|
+
Array.isArray(manifestRemotes[contextPath]) &&
|
|
854
|
+
configRemotes[contextPath].every(module => {
|
|
855
|
+
return manifestRemotes[contextPath].includes(module);
|
|
856
|
+
}));
|
|
857
|
+
});
|
|
858
|
+
}
|
|
839
859
|
addInstallButtonToHeaderActionControls() {
|
|
840
860
|
if (this.appId) {
|
|
841
861
|
this.headerActionControls = [
|
|
@@ -883,8 +903,8 @@ class ApplicationPluginsComponent {
|
|
|
883
903
|
return this.app;
|
|
884
904
|
}
|
|
885
905
|
async getApplicationMFExports(app) {
|
|
886
|
-
const
|
|
887
|
-
return
|
|
906
|
+
const applicationExports = this.pluginsService.getMFExports(app, [], true);
|
|
907
|
+
return applicationExports;
|
|
888
908
|
}
|
|
889
909
|
async getApplicationMFRemotes(app) {
|
|
890
910
|
const appConfigRemotes = this.pluginsService.getMFRemotes(app);
|