@c8y/ngx-components 1017.0.92 → 1017.0.94
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/shared/ecosystem-error.d.ts +5 -0
- package/ecosystem/shared/ecosystem.constants.d.ts +2 -0
- package/ecosystem/shared/ecosystem.model.d.ts +3 -1
- package/ecosystem/shared/ecosystem.service.d.ts +11 -4
- package/esm2020/core/dynamic-forms/select/select.type.component.mjs +5 -3
- package/esm2020/ecosystem/shared/ecosystem-error.mjs +8 -0
- package/esm2020/ecosystem/shared/ecosystem.constants.mjs +4 -2
- package/esm2020/ecosystem/shared/ecosystem.model.mjs +3 -1
- package/esm2020/ecosystem/shared/ecosystem.service.mjs +59 -26
- package/esm2020/ecosystem/shared/upload-archive.component.mjs +5 -8
- package/esm2020/protocol-lwm2m/bootstrap-parameters/lwm2m-bootstrap-parameters.component.mjs +4 -4
- package/fesm2015/c8y-ngx-components-ecosystem-shared.mjs +76 -31
- package/fesm2015/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-protocol-lwm2m-bootstrap-parameters.mjs +3 -3
- package/fesm2015/c8y-ngx-components-protocol-lwm2m-bootstrap-parameters.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-protocol-lwm2m.mjs +3 -3
- package/fesm2015/c8y-ngx-components-protocol-lwm2m.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components.mjs +5 -3
- package/fesm2015/c8y-ngx-components.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-ecosystem-shared.mjs +72 -31
- package/fesm2020/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-protocol-lwm2m-bootstrap-parameters.mjs +3 -3
- package/fesm2020/c8y-ngx-components-protocol-lwm2m-bootstrap-parameters.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-protocol-lwm2m.mjs +3 -3
- package/fesm2020/c8y-ngx-components-protocol-lwm2m.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components.mjs +4 -2
- package/fesm2020/c8y-ngx-components.mjs.map +1 -1
- package/locales/locales.pot +6 -0
- package/package.json +2 -2
|
@@ -3,13 +3,13 @@ import { ApplicationAvailability, ApplicationService, ApplicationType, Inventory
|
|
|
3
3
|
import { AlertService, AppStateService, gettext, HumanizeAppNamePipe, ModalService, Status, ZipService } from '@c8y/ngx-components';
|
|
4
4
|
import { TranslateService } from '@ngx-translate/core';
|
|
5
5
|
import { saveAs } from 'file-saver';
|
|
6
|
-
import { cloneDeep, get, groupBy, kebabCase, pick } from 'lodash-es';
|
|
6
|
+
import { cloneDeep, get, groupBy, kebabCase, pick, uniqBy } from 'lodash-es';
|
|
7
7
|
import { BehaviorSubject } from 'rxjs';
|
|
8
8
|
import { debounceTime, take } from 'rxjs/operators';
|
|
9
9
|
import { gt, coerce } from 'semver';
|
|
10
|
+
import { EcosystemError } from './ecosystem-error';
|
|
10
11
|
import { APP_STATE, ERROR_MESSAGES } from './ecosystem.constants';
|
|
11
12
|
import { ERROR_TYPE } from './ecosystem.model';
|
|
12
|
-
import { uniqBy } from 'lodash-es';
|
|
13
13
|
import * as i0 from "@angular/core";
|
|
14
14
|
import * as i1 from "@c8y/ngx-components";
|
|
15
15
|
import * as i2 from "@ngx-translate/core";
|
|
@@ -251,10 +251,10 @@ export class EcosystemService {
|
|
|
251
251
|
return await this.applicationService.update(app);
|
|
252
252
|
}
|
|
253
253
|
catch (ex) {
|
|
254
|
-
this.
|
|
254
|
+
this.alertError(ex);
|
|
255
255
|
if (deleteOnFailure) {
|
|
256
256
|
await this.applicationService.delete(app.id);
|
|
257
|
-
throw new
|
|
257
|
+
throw new EcosystemError(ERROR_TYPE.APPLICATION_CREATION_FAILED);
|
|
258
258
|
}
|
|
259
259
|
}
|
|
260
260
|
}
|
|
@@ -281,7 +281,7 @@ export class EcosystemService {
|
|
|
281
281
|
this.alertService.success(gettext('Successfully subscribed to application.'));
|
|
282
282
|
}
|
|
283
283
|
catch (ex) {
|
|
284
|
-
this.
|
|
284
|
+
this.alertError(ex);
|
|
285
285
|
}
|
|
286
286
|
}
|
|
287
287
|
async unsubscribeApp(app) {
|
|
@@ -291,14 +291,14 @@ export class EcosystemService {
|
|
|
291
291
|
this.alertService.success(gettext('Successfully unsubscribed from application.'));
|
|
292
292
|
}
|
|
293
293
|
catch (ex) {
|
|
294
|
-
this.
|
|
294
|
+
this.alertError(ex);
|
|
295
295
|
}
|
|
296
296
|
}
|
|
297
297
|
async isValidAppType(archive, appType) {
|
|
298
298
|
try {
|
|
299
299
|
const currentType = await this.getAppType(archive);
|
|
300
300
|
if (currentType !== appType) {
|
|
301
|
-
throw new
|
|
301
|
+
throw new EcosystemError(ERROR_TYPE.TYPE_VALIDATION);
|
|
302
302
|
}
|
|
303
303
|
else {
|
|
304
304
|
this.progress.next(this.progress.value + 10);
|
|
@@ -306,7 +306,7 @@ export class EcosystemService {
|
|
|
306
306
|
}
|
|
307
307
|
}
|
|
308
308
|
catch (ex) {
|
|
309
|
-
throw new
|
|
309
|
+
throw new EcosystemError(ERROR_TYPE.TYPE_VALIDATION);
|
|
310
310
|
}
|
|
311
311
|
}
|
|
312
312
|
async uploadArchiveToApp(archive, app, isNewVersion = false) {
|
|
@@ -324,15 +324,29 @@ export class EcosystemService {
|
|
|
324
324
|
// }
|
|
325
325
|
return (await this.setAppActiveVersion(app, (binaryMo.binaryId || binaryMo.id))).data;
|
|
326
326
|
}
|
|
327
|
-
async
|
|
328
|
-
const
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
327
|
+
async validateArchiveToAppCompatibility(archive, app) {
|
|
328
|
+
const appType = await this.getAppType(archive);
|
|
329
|
+
if (appType !== app.type) {
|
|
330
|
+
throw new EcosystemError(ERROR_TYPE.INVALID_APPLICATION);
|
|
331
|
+
}
|
|
332
|
+
else {
|
|
333
|
+
this.progress.next(this.progress.value + 10);
|
|
334
|
+
}
|
|
335
|
+
const manifest = await this.getCumulocityJson(archive);
|
|
336
|
+
// A user can upload an app without a Cumulocity JSON file (e.g. a react app).
|
|
337
|
+
// This is allowed and should not trigger a validation error.
|
|
338
|
+
if (!manifest) {
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
341
|
+
await this.validatePackageKeyAndContextPath(manifest, app);
|
|
342
|
+
}
|
|
343
|
+
async getCumulocityJson(archive) {
|
|
344
|
+
try {
|
|
345
|
+
const c8yManifest = await this.getCumulocityJson$(archive).toPromise();
|
|
346
|
+
return c8yManifest;
|
|
347
|
+
}
|
|
348
|
+
catch (ex) {
|
|
349
|
+
return null;
|
|
336
350
|
}
|
|
337
351
|
}
|
|
338
352
|
async createAppForArchive(archive, isPackageTypeArchive = false) {
|
|
@@ -342,7 +356,7 @@ export class EcosystemService {
|
|
|
342
356
|
const supportedAppTypes = [ApplicationType.HOSTED, ApplicationType.MICROSERVICE];
|
|
343
357
|
if (supportedAppTypes.includes(appType)) {
|
|
344
358
|
try {
|
|
345
|
-
appModel = await this.getCumulocityJson(archive).toPromise();
|
|
359
|
+
appModel = await this.getCumulocityJson$(archive).toPromise();
|
|
346
360
|
isPackage = appModel.isPackage;
|
|
347
361
|
}
|
|
348
362
|
catch (e) {
|
|
@@ -361,10 +375,10 @@ export class EcosystemService {
|
|
|
361
375
|
contextPath
|
|
362
376
|
};
|
|
363
377
|
if (isPackageTypeArchive && !isPackage) {
|
|
364
|
-
throw new
|
|
378
|
+
throw new EcosystemError(ERROR_TYPE.INVALID_PACKAGE);
|
|
365
379
|
}
|
|
366
380
|
else if (!isPackageTypeArchive && isPackage) {
|
|
367
|
-
throw new
|
|
381
|
+
throw new EcosystemError(ERROR_TYPE.INVALID_APPLICATION);
|
|
368
382
|
}
|
|
369
383
|
else if (this.isNameLengthExceeded(name, appType)) {
|
|
370
384
|
const error = new Error();
|
|
@@ -389,7 +403,7 @@ export class EcosystemService {
|
|
|
389
403
|
this.alertService.success(gettext('Application reactivated.'));
|
|
390
404
|
}
|
|
391
405
|
catch (ex) {
|
|
392
|
-
this.
|
|
406
|
+
this.alertError(ex);
|
|
393
407
|
}
|
|
394
408
|
}
|
|
395
409
|
async removeOldestArchive(app, archives) {
|
|
@@ -400,7 +414,7 @@ export class EcosystemService {
|
|
|
400
414
|
this.alertService.success(gettext('Archive deleted.'));
|
|
401
415
|
}
|
|
402
416
|
catch (ex) {
|
|
403
|
-
this.
|
|
417
|
+
this.alertError(ex);
|
|
404
418
|
}
|
|
405
419
|
}
|
|
406
420
|
getAppState(app) {
|
|
@@ -467,6 +481,25 @@ export class EcosystemService {
|
|
|
467
481
|
app.availability = ApplicationAvailability.PRIVATE;
|
|
468
482
|
return app;
|
|
469
483
|
}
|
|
484
|
+
/**
|
|
485
|
+
* Shows an error dialog.
|
|
486
|
+
* @param error Either a server error or an internal [[EcosystemError]].
|
|
487
|
+
*/
|
|
488
|
+
alertError(error) {
|
|
489
|
+
if (error instanceof EcosystemError) {
|
|
490
|
+
this.alertService.danger(error.message);
|
|
491
|
+
}
|
|
492
|
+
else {
|
|
493
|
+
this.alertService.addServerFailure(error);
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
async validatePackageKeyAndContextPath(manifest, app) {
|
|
497
|
+
const contextPath = get(manifest, 'contextPath');
|
|
498
|
+
const appKey = get(manifest, 'key');
|
|
499
|
+
if (contextPath !== app.contextPath || appKey !== app.key) {
|
|
500
|
+
throw new EcosystemError(ERROR_TYPE.KEY_OR_CONTEXT_PATH_MISMATCH);
|
|
501
|
+
}
|
|
502
|
+
}
|
|
470
503
|
getAppKey(appModel, name) {
|
|
471
504
|
let key = appModel?.key;
|
|
472
505
|
if (!key) {
|
|
@@ -484,13 +517,13 @@ export class EcosystemService {
|
|
|
484
517
|
const currentApp = this.appStateService.state.app;
|
|
485
518
|
return currentApp.contextPath === app.contextPath;
|
|
486
519
|
}
|
|
487
|
-
getCumulocityJson(archive) {
|
|
520
|
+
getCumulocityJson$(archive) {
|
|
488
521
|
return this.zipService.getJsonData(archive, {
|
|
489
522
|
filename: CUMULOCITY_JSON
|
|
490
523
|
});
|
|
491
524
|
}
|
|
492
525
|
getAppType(archive) {
|
|
493
|
-
return this.getCumulocityJson(archive)
|
|
526
|
+
return this.getCumulocityJson$(archive)
|
|
494
527
|
.toPromise()
|
|
495
528
|
.then(data => get(data, 'type') ||
|
|
496
529
|
(get(data, 'apiVersion') ? ApplicationType.MICROSERVICE : ApplicationType.HOSTED))
|
|
@@ -518,7 +551,7 @@ export class EcosystemService {
|
|
|
518
551
|
return tempApp;
|
|
519
552
|
}
|
|
520
553
|
async getUploadOverrides(archive, app) {
|
|
521
|
-
const { version } = await this.getCumulocityJson(archive).toPromise();
|
|
554
|
+
const { version } = await this.getCumulocityJson$(archive).toPromise();
|
|
522
555
|
const isInitialPackage = app.applicationVersions?.length === 0;
|
|
523
556
|
return {
|
|
524
557
|
listUrl: 'versions',
|
|
@@ -547,4 +580,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
|
|
|
547
580
|
providedIn: 'root'
|
|
548
581
|
}]
|
|
549
582
|
}], ctorParameters: function () { return [{ type: i1.ModalService }, { type: i1.AlertService }, { type: i1.HumanizeAppNamePipe }, { type: i2.TranslateService }, { type: i3.ApplicationService }, { type: i1.AppStateService }, { type: i1.ZipService }, { type: i3.TenantService }, { type: i3.InventoryService }]; } });
|
|
550
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNvc3lzdGVtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9lY29zeXN0ZW0vc2hhcmVkL2Vjb3N5c3RlbS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsa0JBQWtCLEVBQ2xCLGVBQWUsRUFVZixnQkFBZ0IsRUFJaEIsYUFBYSxFQUNkLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFDTCxZQUFZLEVBQ1osZUFBZSxFQUNmLE9BQU8sRUFDUCxtQkFBbUIsRUFDbkIsWUFBWSxFQUNaLE1BQU0sRUFDTixVQUFVLEVBQ1gsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNwQyxPQUFPLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xFLE9BQU8sRUFBb0IsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFakUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQzs7Ozs7QUFFbkMsTUFBTSxlQUFlLEdBQUcsaUJBQWlCLENBQUM7QUFDMUMsTUFBTSw0QkFBNEIsR0FB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QUMsRUFBRTthQUMvRTtTQUNGLENBQUM7SUFDSixDQUFDO0lBRU8scUJBQXFCLENBQUMsSUFBWTtRQUN4QyxNQUFNLGFBQWEsR0FBRyxvQ0FBb0MsQ0FBQztRQUMzRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsT0FBTztRQUN4QyxPQUFPLElBQUksQ0FBQyxNQUFNLEdBQUcsNEJBQTRCLElBQUksT0FBTyxLQUFLLGVBQWUsQ0FBQyxZQUFZLENBQUM7SUFDaEcsQ0FBQzs7NkdBanBCVSxnQkFBZ0I7aUhBQWhCLGdCQUFnQixjQUZmLE1BQU07MkZBRVAsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgQXBwbGljYXRpb25BdmFpbGFiaWxpdHksXG4gIEFwcGxpY2F0aW9uU2VydmljZSxcbiAgQXBwbGljYXRpb25UeXBlLFxuICBJQXBwbGljYXRpb24sXG4gIElBcHBsaWNhdGlvbkJpbmFyeSxcbiAgSUFwcGxpY2F0aW9uVmVyc2lvbixcbiAgSUN1cnJlbnRUZW5hbnQsXG4gIElkUmVmZXJlbmNlLFxuICBJRmV0Y2hSZXNwb25zZSxcbiAgSUlkZW50aWZpZWQsXG4gIElNYW5hZ2VkT2JqZWN0LFxuICBJTWFuaWZlc3QsXG4gIEludmVudG9yeVNlcnZpY2UsXG4gIElSZXN1bHQsXG4gIElSZXN1bHRMaXN0LFxuICBJVXBsb2FkUGFyYW1zT3ZlcnJpZGUsXG4gIFRlbmFudFNlcnZpY2Vcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQWxlcnRTZXJ2aWNlLFxuICBBcHBTdGF0ZVNlcnZpY2UsXG4gIGdldHRleHQsXG4gIEh1bWFuaXplQXBwTmFtZVBpcGUsXG4gIE1vZGFsU2VydmljZSxcbiAgU3RhdHVzLFxuICBaaXBTZXJ2aWNlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgc2F2ZUFzIH0gZnJvbSAnZmlsZS1zYXZlcic7XG5pbXBvcnQgeyBjbG9uZURlZXAsIGdldCwgZ3JvdXBCeSwga2ViYWJDYXNlLCBwaWNrIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZ3QsIGNvZXJjZSB9IGZyb20gJ3NlbXZlcic7XG5pbXBvcnQgeyBBUFBfU1RBVEUsIEVSUk9SX01FU1NBR0VTIH0gZnJvbSAnLi9lY29zeXN0ZW0uY29uc3RhbnRzJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uU3RhdGUsIEVSUk9SX1RZUEUgfSBmcm9tICcuL2Vjb3N5c3RlbS5tb2RlbCc7XG5pbXBvcnQgeyBJQXBwbGljYXRpb25WZXJzaW9uRGVsZXRlUGFyYW1zIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgdW5pcUJ5IH0gZnJvbSAnbG9kYXNoLWVzJztcblxuY29uc3QgQ1VNVUxPQ0lUWV9KU09OID0gJ2N1bXVsb2NpdHkuanNvbic7XG5jb25zdCBNSUNST1NFUlZJQ0VfTkFNRV9NQVhfTEVOR1RIID0gMjM7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEVjb3N5c3RlbVNlcnZpY2Uge1xuICBhcHBEZWxldGVkID0gbmV3IEV2ZW50RW1pdHRlcjxJQXBwbGljYXRpb24+KCk7XG4gIHByb2dyZXNzOiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihudWxsKTtcbiAgcHJpdmF0ZSBhcHBzR3JvdXBlZEJ5Q29udGV4dFBhdGg6IGFueVtdO1xuICBwcml2YXRlIHhocjogWE1MSHR0cFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBtb2RhbDogTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBodW1hbml6ZUFwcE5hbWU6IEh1bWFuaXplQXBwTmFtZVBpcGUsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwbGljYXRpb25TZXJ2aWNlOiBBcHBsaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcHBTdGF0ZVNlcnZpY2U6IEFwcFN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIHppcFNlcnZpY2U6IFppcFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0ZW5hbnRTZXJ2aWNlOiBUZW5hbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW52ZW50b3J5U2VydmljZTogSW52ZW50b3J5U2VydmljZVxuICApIHt9XG5cbiAgZ2V0VW5pcXVlQXBwQ29uZmlnKHNyY0FwcDogSUFwcGxpY2F0aW9uLCBleGlzdGluZ0FwcHM6IElBcHBsaWNhdGlvbltdKTogSUFwcGxpY2F0aW9uIHtcbiAgICBsZXQgYXBwOiBJQXBwbGljYXRpb24gPSB7XG4gICAgICBuYW1lOiBzcmNBcHAubmFtZSxcbiAgICAgIGtleTogc3JjQXBwLmtleSxcbiAgICAgIGNvbnRleHRQYXRoOiBzcmNBcHAuY29udGV4dFBhdGhcbiAgICB9O1xuICAgIGZvciAobGV0IHJldHJ5Tm8gPSAwOyByZXRyeU5vIDwgOTsgKSB7XG4gICAgICBpZiAodGhpcy5jaGVja0lmQXBwTmFtZUtleVBhdGhFeGlzdHMoZXhpc3RpbmdBcHBzLCBhcHAsIHJldHJ5Tm8pKSB7XG4gICAgICAgIHJldHJ5Tm8rKztcbiAgICAgICAgYXBwID0ge1xuICAgICAgICAgIG5hbWU6IFtzcmNBcHAubmFtZSwgcmV0cnlOb10uam9pbignLScpLFxuICAgICAgICAgIGtleTogW3NyY0FwcC5rZXksIHJldHJ5Tm9dLmpvaW4oJy0nKSxcbiAgICAgICAgICBjb250ZXh0UGF0aDogW3NyY0FwcC5jb250ZXh0UGF0aCwgcmV0cnlOb10uam9pbignLScpXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYXBwO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXBwO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBDb21wYXJlcyBjdXJyZW50bHkgZGVwbG95ZWQgYXBwbGljYXRpb24gdmVyc2lvbiB3aXRoIGFwcGxpY2F0aW9uIHZlcnNpb24gdGFnZ2VkIGFzIFwibGF0ZXN0XCJcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGN1cnJlbnRBcHBsaWNhdGlvblZlcnNpb24gRGVwbG95ZWQgYXBwbGljYXRpb24gdmVyc2lvblxuICAgKiBAcGFyYW0ge29iamVjdH0gbGF0ZXN0QXBwIExhdGVzdCBhcHBsaWNhdGlvbiB2ZXJzaW9uIG9iamVjdFxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIGxhdGVzdCB2ZXJzaW9uIGlzIGdyZWF0ZXIgdGhhbiBjdXJyZW50LCBvdGhlcndpc2UgZmFsc2VcbiAgICovXG4gIHNob3VsZFVwZ3JhZGVQYWNrYWdlKGN1cnJlbnRBcHBsaWNhdGlvblZlcnNpb246IHN0cmluZywgbGF0ZXN0QXBwOiBJQXBwbGljYXRpb25WZXJzaW9uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbGF0ZXN0QXBwbGljYXRpb25WZXJzaW9uID0gbGF0ZXN0QXBwPy52ZXJzaW9uO1xuXG4gICAgaWYgKCFsYXRlc3RBcHBsaWNhdGlvblZlcnNpb24gfHwgIWN1cnJlbnRBcHBsaWNhdGlvblZlcnNpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ3QoY29lcmNlKGxhdGVzdEFwcGxpY2F0aW9uVmVyc2lvbiksIGNvZXJjZShjdXJyZW50QXBwbGljYXRpb25WZXJzaW9uKSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEdldHMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgc2VhcmNoZWQgdGFnXG4gICAqXG4gICAqIEBwYXJhbSB7YXJyYXl9IGFwcGxpY2F0aW9uVmVyc2lvbnMgQXJyYXkgd2l0aCBhbGwgYXZhaWxhYmxlIHZlcnNpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lIFNlYXJjaGVkIHRhZ1xuICAgKlxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIHNlYXJjaGVkIHRhZ1xuICAgKi9cbiAgZ2V0QXBwbGljYXRpb25WZXJzaW9uT2JqZWN0QnlUYWcoXG4gICAgYXBwbGljYXRpb25WZXJzaW9uczogSUFwcGxpY2F0aW9uVmVyc2lvbltdLFxuICAgIHRhZ05hbWU6IHN0cmluZ1xuICApOiBJQXBwbGljYXRpb25WZXJzaW9uIHtcbiAgICByZXR1cm4gYXBwbGljYXRpb25WZXJzaW9ucz8uZmluZChlbGVtZW50ID0+IGVsZW1lbnQudGFncy5pbmNsdWRlcyh0YWdOYW1lKSk7XG4gIH1cblxuICBhc3luYyBnZXRBcHBsaWNhdGlvbihhcHBJZDogSWRSZWZlcmVuY2UpOiBQcm9taXNlPElBcHBsaWNhdGlvbj4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZGV0YWlsKGFwcElkKSkuZGF0YTtcbiAgfVxuXG4gIGdldEFwcGxpY2F0aW9ucyhjdXN0b21GaWx0ZXI6IGFueSA9IHt9KTogUHJvbWlzZTxJUmVzdWx0TGlzdDxJQXBwbGljYXRpb24+PiB7XG4gICAgY29uc3QgZmlsdGVyOiBvYmplY3QgPSB7XG4gICAgICBwYWdlU2l6ZTogMjAwMCxcbiAgICAgIHdpdGhUb3RhbFBhZ2VzOiB0cnVlXG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKGZpbHRlciwgY3VzdG9tRmlsdGVyKTtcbiAgICBjb25zdCBjdXJyZW50VGVuYW50ID0gdGhpcy5hcHBTdGF0ZVNlcnZpY2UuY3VycmVudFRlbmFudC52YWx1ZTtcbiAgICByZXR1cm4gdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UubGlzdEJ5VGVuYW50KGN1cnJlbnRUZW5hbnQubmFtZSwgZmlsdGVyKTtcbiAgfVxuXG4gIGFzeW5jIGdldE1pY3Jvc2VydmljZXMoKTogUHJvbWlzZTxJQXBwbGljYXRpb25bXT4ge1xuICAgIGNvbnN0IGFwcHMgPSAoYXdhaXQgdGhpcy5nZXRBcHBsaWNhdGlvbnMoKSkuZGF0YTtcbiAgICBjb25zdCBtaWNyb3NlcnZpY2VzID0gYXBwcy5maWx0ZXIoYXBwID0+IHRoaXMuaXNNaWNyb3NlcnZpY2UoYXBwKSk7XG4gICAgcmV0dXJuIG1pY3Jvc2VydmljZXMuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XG4gIH1cblxuICBhc3luYyBnZXRXZWJBcHBsaWNhdGlvbnMoY3VzdG9tRmlsdGVyOiBhbnkgPSB7fSk6IFByb21pc2U8SUFwcGxpY2F0aW9uW10+IHtcbiAgICBjb25zdCBhcHBzID0gKGF3YWl0IHRoaXMuZ2V0QXBwbGljYXRpb25zKGN1c3RvbUZpbHRlcikpLmRhdGE7XG4gICAgY29uc3Qgd2ViQXBwcyA9IGFwcHMuZmlsdGVyKGFwcCA9PiB0aGlzLmlzQXBwbGljYXRpb24oYXBwKSk7XG4gICAgdGhpcy5hcHBzR3JvdXBlZEJ5Q29udGV4dFBhdGggPSBncm91cEJ5KHdlYkFwcHMsICdjb250ZXh0UGF0aCcpO1xuICAgIHJldHVybiB3ZWJBcHBzLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xuICB9XG5cbiAgYXN5bmMgZ2V0RmVhdHVyZUFwcGxpY2F0aW9ucyhjdXN0b21GaWx0ZXI6IGFueSA9IHt9KTogUHJvbWlzZTxJQXBwbGljYXRpb25bXT4ge1xuICAgIGNvbnN0IGFwcHMgPSAoYXdhaXQgdGhpcy5nZXRBcHBsaWNhdGlvbnMoY3VzdG9tRmlsdGVyKSkuZGF0YTtcbiAgICBjb25zdCB3ZWJBcHBzID0gYXBwcy5maWx0ZXIoYXBwID0+IHRoaXMuaXNGZWF0dXJlKGFwcCkpO1xuICAgIHJldHVybiB3ZWJBcHBzLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xuICB9XG5cbiAgYXN5bmMgZ2V0UGFja2FnZUFwcGxpY2F0aW9ucyhjdXN0b21GaWx0ZXI6IGFueSA9IHt9KTogUHJvbWlzZTxJQXBwbGljYXRpb25bXT4ge1xuICAgIGNvbnN0IGZpbHRlciA9IE9iamVjdC5hc3NpZ24oe30sIGN1c3RvbUZpbHRlcik7XG4gICAgY29uc3Qgc2hhcmVkRmlsdGVyID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHtcbiAgICAgICAgYXZhaWxhYmlsaXR5OiBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eS5TSEFSRUQsXG4gICAgICAgIHR5cGU6ICdIT1NURUQnLFxuICAgICAgICBwYWdlU2l6ZTogMjAwMFxuICAgICAgfSxcbiAgICAgIGN1c3RvbUZpbHRlclxuICAgICk7XG4gICAgY29uc3QgW3sgZGF0YTogYXBwcyB9LCB7IGRhdGE6IHNoYXJlZCB9XSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHRoaXMuZ2V0QXBwbGljYXRpb25zKGZpbHRlciksXG4gICAgICB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5saXN0KHNoYXJlZEZpbHRlcilcbiAgICBdKTtcbiAgICBjb25zdCB3ZWJBcHBzID0gWy4uLmFwcHMsIC4uLnNoYXJlZF0uZmlsdGVyKGFwcCA9PiB0aGlzLmlzUGFja2FnZShhcHApKTtcbiAgICAvLyBhbiBhcHAgY291bGQgYmUgc3Vic2NyaWJlZCB0byBhIHRlbmFudCwgYnV0IGFsc28gaGF2ZSBpdCdzIGF2YWlsYWJpbGl0eSBzZXQgdG8gU0hBUkVELCBpbiB0aGF0IGNhc2UgaXQgd291bGQgb2NjdXIgdHdpY2UuXG4gICAgY29uc3QgdW5pcVdlYkFwcHMgPSB1bmlxQnkod2ViQXBwcywgKGFwcDogSUFwcGxpY2F0aW9uKSA9PiBhcHAuaWQpO1xuICAgIHJldHVybiB1bmlxV2ViQXBwcy5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcbiAgfVxuXG4gIGFzeW5jIGlzTWljcm9zZXJ2aWNlSG9zdGluZ0FsbG93ZWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBkYXRhOiBhcHBzIH0gPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5saXN0QnlOYW1lKCdmZWF0dXJlLW1pY3Jvc2VydmljZS1ob3N0aW5nJyk7XG4gICAgcmV0dXJuICEhYXBwcy5maWx0ZXIoYXBwID0+IGFwcC5vd25lcj8udGVuYW50Py5pZCA9PT0gJ21hbmFnZW1lbnQnKS5sZW5ndGg7XG4gIH1cblxuICBjYW5PcGVuQXBwSW5Ccm93c2VyKGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXNOb3RBRmVhdHVyZSA9ICF0aGlzLmlzRmVhdHVyZShhcHApO1xuICAgIGNvbnN0IGhhc1Byb3BlclR5cGUgPSBbXG4gICAgICBBcHBsaWNhdGlvblR5cGUuSE9TVEVELFxuICAgICAgQXBwbGljYXRpb25UeXBlLkVYVEVSTkFMLFxuICAgICAgQXBwbGljYXRpb25UeXBlLlJFUE9TSVRPUllcbiAgICBdLmluY2x1ZGVzKGFwcC50eXBlKTtcbiAgICBjb25zdCBpc05vdEFQYWNrYWdlID0gIXRoaXMuaXNQYWNrYWdlKGFwcCk7XG4gICAgcmV0dXJuIGlzTm90QUZlYXR1cmUgJiYgaGFzUHJvcGVyVHlwZSAmJiBpc05vdEFQYWNrYWdlO1xuICB9XG5cbiAgb3BlbkFwcChhcHApIHtcbiAgICB3aW5kb3cub3Blbih0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5nZXRIcmVmKGFwcCksICdfYmxhbmsnLCAnbm9vcGVuZXIsbm9yZWZlcnJlcicpO1xuICB9XG5cbiAgYXN5bmMgY2FuRGVsZXRlQXBwKGFwcDogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuaXNPd25lcihhcHApICYmICgoYXdhaXQgdGhpcy5oYXNTdWJzY3JpYmVkQXBwUGFyZW50KGFwcCkpIHx8ICF0aGlzLmlzQ3VycmVudEFwcChhcHApKVxuICAgICk7XG4gIH1cblxuICBpc093bmVyKGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY3VycmVudFRlbmFudDogSUN1cnJlbnRUZW5hbnQgPSB0aGlzLmFwcFN0YXRlU2VydmljZS5jdXJyZW50VGVuYW50LnZhbHVlO1xuICAgIGNvbnN0IGFwcE93bmVyID0gZ2V0KGFwcCwgJ293bmVyLnRlbmFudC5pZCcpO1xuICAgIHJldHVybiBjdXJyZW50VGVuYW50Lm5hbWUgPT09IGFwcE93bmVyO1xuICB9XG5cbiAgaXNGZWF0dXJlKGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhYXBwLm5hbWUubWF0Y2goL2ZlYXR1cmUtLyk7XG4gIH1cblxuICBpc01pY3Jvc2VydmljZShhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhcHAudHlwZSA9PT0gJ01JQ1JPU0VSVklDRSc7XG4gIH1cblxuICBpc0V4dGVybmFsKGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGFwcC50eXBlID09PSAnRVhURVJOQUwnO1xuICB9XG5cbiAgaXNQYWNrYWdlKGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGFwcC5tYW5pZmVzdD8uaXNQYWNrYWdlID09PSB0cnVlO1xuICB9XG5cbiAgaXNQbHVnaW4oYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gYXBwLm1hbmlmZXN0Py5wYWNrYWdlID09PSAncGx1Z2luJztcbiAgfVxuXG4gIGNhbmNlbEFwcENyZWF0aW9uKGFwcDogSUFwcGxpY2F0aW9uKTogdm9pZCB7XG4gICAgaWYgKHRoaXMueGhyKSB7XG4gICAgICB0aGlzLnhoci5hYm9ydCgpO1xuICAgIH1cbiAgICBpZiAoYXBwKSB7XG4gICAgICB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5kZWxldGUoYXBwKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVVcGxvYWRQcm9ncmVzcyhldmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5sZW5ndGhDb21wdXRhYmxlKSB7XG4gICAgICBjb25zdCBjdXJyZW50UHJvZ3Jlc3MgPSB0aGlzLnByb2dyZXNzLnZhbHVlO1xuICAgICAgdGhpcy5wcm9ncmVzcy5uZXh0KGN1cnJlbnRQcm9ncmVzcyArIChldmVudC5sb2FkZWQgLyBldmVudC50b3RhbCkgKiAoOTUgLSBjdXJyZW50UHJvZ3Jlc3MpKTtcbiAgICB9XG4gIH1cblxuICBzZXRBcHBBY3RpdmVWZXJzaW9uKGFwcDogSUFwcGxpY2F0aW9uLCBhY3RpdmVWZXJzaW9uSWQ6IHN0cmluZyk6IFByb21pc2U8SUFwcGxpY2F0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLnVwZGF0ZSh7IGlkOiBhcHAuaWQsIGFjdGl2ZVZlcnNpb25JZCB9KTtcbiAgfVxuXG4gIHNldFBhY2thZ2VWZXJzaW9uVGFnKGFwcDogSUFwcGxpY2F0aW9uLCB2ZXJzaW9uOiBzdHJpbmcsIHRhZ3M6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLnNldFBhY2thZ2VWZXJzaW9uVGFnKGFwcCwgdmVyc2lvbiwgdGFncyk7XG4gIH1cblxuICBkZWxldGVQYWNrYWdlVmVyc2lvbihhcHA6IElBcHBsaWNhdGlvbiwgcGFyYW1zOiBJQXBwbGljYXRpb25WZXJzaW9uRGVsZXRlUGFyYW1zKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmRlbGV0ZVZlcnNpb25QYWNrYWdlKGFwcCwgcGFyYW1zKTtcbiAgfVxuXG4gIGdldEh1bWFuaXplZEFwcE5hbWUoYXBwOiBJQXBwbGljYXRpb24pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmh1bWFuaXplQXBwTmFtZS50cmFuc2Zvcm0oYXBwLm5hbWUpLnBpcGUoZGVib3VuY2VUaW1lKDI1MCksIHRha2UoMSkpLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgY3JlYXRlQ29uZmlnKGFwcDogSUFwcGxpY2F0aW9uLCBmb3JtR3JvdXBWYWx1ZTogRm9ybUdyb3VwKTogUGFydGlhbDxJQXBwbGljYXRpb24+IHtcbiAgICBjb25zdCB7IGlkLCB0eXBlLCBhdmFpbGFiaWxpdHkgfSA9IGFwcDtcbiAgICBsZXQgY29uZmlnID0gcGljayhmb3JtR3JvdXBWYWx1ZSwgWyduYW1lJywgJ2tleScsICdjb250ZXh0UGF0aCddKTtcbiAgICBjb25maWcgPSB7XG4gICAgICAuLi5jb25maWcsXG4gICAgICBpc1NldHVwOiB0cnVlLFxuICAgICAgaWQsXG4gICAgICB0eXBlLFxuICAgICAgYXZhaWxhYmlsaXR5XG4gICAgfTtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlQXBwTWFuaWZlc3QoXG4gICAgYXBwbGljYXRpb246IElBcHBsaWNhdGlvbixcbiAgICBzb3VyY2VQYWNrYWdlOiBJQXBwbGljYXRpb25cbiAgKTogUHJvbWlzZTx7IHJlczogSUZldGNoUmVzcG9uc2U7IGRhdGE6IGFueSB9PiB7XG4gICAgY29uc3QgeyBpZCB9ID0gYXBwbGljYXRpb247XG4gICAgY29uc3QgY2xlYW5lZEFwcCA9IHRoaXMucmVtb3ZlQXBwUHJvcGVydGllcyhhcHBsaWNhdGlvbik7XG4gICAgaWYgKCFjbGVhbmVkQXBwLm1hbmlmZXN0KSB7XG4gICAgICBjbGVhbmVkQXBwLm1hbmlmZXN0ID0ge307XG4gICAgfVxuICAgIGNsZWFuZWRBcHAubWFuaWZlc3QuaXNQYWNrYWdlID0gZmFsc2U7XG4gICAgY2xlYW5lZEFwcC5tYW5pZmVzdC5zb3VyY2UgPSBzb3VyY2VQYWNrYWdlLmlkO1xuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlXG4gICAgICAuYmluYXJ5KGlkKVxuICAgICAgLnVwZGF0ZUZpbGVzKFt7IHBhdGg6IENVTVVMT0NJVFlfSlNPTiwgY29udGVudHM6IEpTT04uc3RyaW5naWZ5KGNsZWFuZWRBcHApIGFzIGFueSB9XSk7XG4gIH1cblxuICBhc3luYyBsaXN0QXJjaGl2ZXMoYXBwSWQ6IHN0cmluZyB8IG51bWJlciB8IElBcHBsaWNhdGlvbik6IFByb21pc2U8SUFwcGxpY2F0aW9uQmluYXJ5W10+IHtcbiAgICBjb25zdCBmaWx0ZXIgPSB7XG4gICAgICBwYWdlU2l6ZTogMTAwXG4gICAgfTtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmJpbmFyeShhcHBJZCkubGlzdChmaWx0ZXIpKS5kYXRhO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlQXJjaGl2ZShhcmNoaXZlOiBJQXBwbGljYXRpb25CaW5hcnksIGFwcDogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaHVtYW5pemVkQXJjaGl2ZU5hbWUgPSBhd2FpdCB0aGlzLmdldEh1bWFuaXplZEFwcE5hbWUoYXJjaGl2ZSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMubW9kYWwuY29uZmlybShcbiAgICAgICAgZ2V0dGV4dCgnRGVsZXRlIGFyY2hpdmUnKSxcbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgZ2V0dGV4dChcbiAgICAgICAgICAgIGBZb3UgYXJlIGFib3V0IHRvIGRlbGV0ZSBhcmNoaXZlIFwie3sgaHVtYW5pemVkQXJjaGl2ZU5hbWUgfX1cIi4gRG8geW91IHdhbnQgdG8gcHJvY2VlZD9gXG4gICAgICAgICAgKSxcbiAgICAgICAgICB7IGh1bWFuaXplZEFyY2hpdmVOYW1lIH1cbiAgICAgICAgKSxcbiAgICAgICAgU3RhdHVzLkRBTkdFUixcbiAgICAgICAgeyBvazogZ2V0dGV4dCgnRGVsZXRlJyksIGNhbmNlbDogZ2V0dGV4dCgnQ2FuY2VsJykgfVxuICAgICAgKTtcbiAgICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmJpbmFyeShhcHApLmRlbGV0ZShhcmNoaXZlLmlkKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnQXJjaGl2ZSBkZWxldGVkLicpKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgaWYgKGV4KSB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmRhbmdlcihnZXQoZXgsICdkYXRhLm1lc3NhZ2UnKSwgZXguZGF0YSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbmNlbGxlZCcpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldEFyY2hpdmVNYW5hZ2VkT2JqZWN0KGJpbmFyeUlkOiBzdHJpbmcpOiBQcm9taXNlPElNYW5hZ2VkT2JqZWN0PiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmludmVudG9yeVNlcnZpY2UuZGV0YWlsKGJpbmFyeUlkKSkuZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGRvd25sb2FkQXJjaGl2ZShcbiAgICBhcHA6IElBcHBsaWNhdGlvbixcbiAgICBhcmNoaXZlOiBQaWNrPElBcHBsaWNhdGlvbkJpbmFyeSwgJ25hbWUnIHwgJ2lkJz5cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJpbmFyeSA9IGF3YWl0IHRoaXMuZ2V0QmluYXJ5KGFwcCwgYXJjaGl2ZSk7XG4gICAgICBjb25zdCBmaWxlQmluYXJ5ID0gbmV3IEJsb2IoW2JpbmFyeV0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL3gtemlwLWNvbXByZXNzZWQnIH0pO1xuICAgICAgc2F2ZUFzKGZpbGVCaW5hcnksIGFyY2hpdmUubmFtZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gZW1wdHlcbiAgICB9XG4gIH1cblxuICBhc3luYyB1cGRhdGVBcHAoXG4gICAgYXBwOiBJQXBwbGljYXRpb24sXG4gICAgZGVsZXRlT25GYWlsdXJlOiBib29sZWFuID0gZmFsc2VcbiAgKTogUHJvbWlzZTxJUmVzdWx0PElBcHBsaWNhdGlvbj4+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLnVwZGF0ZShhcHApO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGV4KTtcbiAgICAgIGlmIChkZWxldGVPbkZhaWx1cmUpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZGVsZXRlKGFwcC5pZCk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQXBwbGljYXRpb24gY3JlYXRpb24gZmFpbGVkLicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUFwcChhcHA6IElBcHBsaWNhdGlvbiwgc2lsZW50ID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBodW1hbml6ZWRBcHBOYW1lID0gYXdhaXQgdGhpcy5nZXRIdW1hbml6ZWRBcHBOYW1lKGFwcCk7XG4gICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgIGF3YWl0IHRoaXMubW9kYWwuY29uZmlybShcbiAgICAgICAgZ2V0dGV4dCgnRGVsZXRlIGFwcGxpY2F0aW9uJyksXG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgIGdldHRleHQoXG4gICAgICAgICAgICBgWW91IGFyZSBhYm91dCB0byBkZWxldGUgYXBwbGljYXRpb24gXCJ7eyBodW1hbml6ZWRBcHBOYW1lIH19XCIuIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/YFxuICAgICAgICAgICksXG4gICAgICAgICAgeyBodW1hbml6ZWRBcHBOYW1lIH1cbiAgICAgICAgKSxcbiAgICAgICAgU3RhdHVzLkRBTkdFUixcbiAgICAgICAgeyBvazogZ2V0dGV4dCgnRGVsZXRlJyksIGNhbmNlbDogZ2V0dGV4dCgnQ2FuY2VsJykgfVxuICAgICAgKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZGVsZXRlKGFwcC5pZCk7XG4gICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnQXBwbGljYXRpb24gZGVsZXRlZC4nKSk7XG4gICAgfVxuICAgIHRoaXMuYXBwRGVsZXRlZC5lbWl0KGFwcCk7XG4gIH1cblxuICBhc3luYyBjaGVja0lmU3Vic2NyaWJlZChhcHA6IElBcHBsaWNhdGlvbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGN1cnJlbnRUZW5hbnQgPSBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UuY3VycmVudCgpO1xuICAgIGNvbnN0IHN1YnNjcmliZWRBcHBzID0gY3VycmVudFRlbmFudC5kYXRhLmFwcGxpY2F0aW9ucy5yZWZlcmVuY2VzO1xuICAgIHJldHVybiBzdWJzY3JpYmVkQXBwcy5zb21lKGFwcGxpY2F0aW9uID0+IGFwcGxpY2F0aW9uLmFwcGxpY2F0aW9uLmlkID09PSBhcHAuaWQpO1xuICB9XG5cbiAgYXN5bmMgc3Vic2NyaWJlQXBwKGFwcDogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY3VycmVudFRlbmFudDogSUN1cnJlbnRUZW5hbnQgPSB0aGlzLmFwcFN0YXRlU2VydmljZS5jdXJyZW50VGVuYW50LnZhbHVlO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2Uuc3Vic2NyaWJlQXBwbGljYXRpb24oY3VycmVudFRlbmFudCwgYXBwKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnU3VjY2Vzc2Z1bGx5IHN1YnNjcmliZWQgdG8gYXBwbGljYXRpb24uJykpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGV4KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB1bnN1YnNjcmliZUFwcChhcHA6IElBcHBsaWNhdGlvbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGN1cnJlbnRUZW5hbnQ6IElDdXJyZW50VGVuYW50ID0gdGhpcy5hcHBTdGF0ZVNlcnZpY2UuY3VycmVudFRlbmFudC52YWx1ZTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy50ZW5hbnRTZXJ2aWNlLnVuc3Vic2NyaWJlQXBwbGljYXRpb24oY3VycmVudFRlbmFudCwgYXBwKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnU3VjY2Vzc2Z1bGx5IHVuc3Vic2NyaWJlZCBmcm9tIGFwcGxpY2F0aW9uLicpKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShleCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaXNWYWxpZEFwcFR5cGUoYXJjaGl2ZTogRmlsZSwgYXBwVHlwZTogQXBwbGljYXRpb25UeXBlKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRUeXBlID0gYXdhaXQgdGhpcy5nZXRBcHBUeXBlKGFyY2hpdmUpO1xuICAgICAgaWYgKGN1cnJlbnRUeXBlICE9PSBhcHBUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihFUlJPUl9UWVBFLlRZUEVfVkFMSURBVElPTik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnByb2dyZXNzLm5leHQodGhpcy5wcm9ncmVzcy52YWx1ZSArIDEwKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihFUlJPUl9UWVBFLlRZUEVfVkFMSURBVElPTik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdXBsb2FkQXJjaGl2ZVRvQXBwKFxuICAgIGFyY2hpdmU6IEZpbGUsXG4gICAgYXBwOiBJQXBwbGljYXRpb24sXG4gICAgaXNOZXdWZXJzaW9uOiBib29sZWFuID0gZmFsc2VcbiAgKTogUHJvbWlzZTxJQXBwbGljYXRpb24+IHtcbiAgICBsZXQgdXBsb2FkT3ZlcnJpZGVzOiBJVXBsb2FkUGFyYW1zT3ZlcnJpZGU7XG4gICAgaWYgKGlzTmV3VmVyc2lvbikge1xuICAgICAgdXBsb2FkT3ZlcnJpZGVzID0gYXdhaXQgdGhpcy5nZXRVcGxvYWRPdmVycmlkZXMoYXJjaGl2ZSwgYXBwKTtcbiAgICB9XG4gICAgY29uc3QgYmluYXJ5U2VydmljZSA9IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmJpbmFyeShhcHApO1xuICAgIHRoaXMueGhyID0gYmluYXJ5U2VydmljZS51cGxvYWRXaXRoUHJvZ3Jlc3NYaHIoXG4gICAgICBhcmNoaXZlLFxuICAgICAgdGhpcy51cGRhdGVVcGxvYWRQcm9ncmVzcy5iaW5kKHRoaXMpLFxuICAgICAgJycsXG4gICAgICB1cGxvYWRPdmVycmlkZXNcbiAgICApO1xuXG4gICAgY29uc3QgYmluYXJ5TW8gPSBhd2FpdCBiaW5hcnlTZXJ2aWNlLmdldFhNTEh0dHBSZXNwb25zZSh0aGlzLnhocik7XG5cbiAgICAvLyBUT0RPIGNvbW1lbnRlZCBpdCBkdWUgdG86IGh0dHBzOi8vY3VtdWxvY2l0eS5hdGxhc3NpYW4ubmV0L2Jyb3dzZS9NVE0tNDg1NTNcbiAgICAvLyBBZGQgaXQgYmFjayB3aGVuIEJFIGZpeGVzIGlzc3VlcyB3aXRoIGFjdGl2ZVZlcnNpb24uXG4gICAgLy8gaWYgKGlzTmV3VmVyc2lvbikge1xuICAgIC8vICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0QXBwbGljYXRpb24oYXBwKTtcbiAgICAvLyB9XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLnNldEFwcEFjdGl2ZVZlcnNpb24oYXBwLCAoYmluYXJ5TW8uYmluYXJ5SWQgfHwgYmluYXJ5TW8uaWQpIGFzIHN0cmluZykpLmRhdGE7XG4gIH1cblxuICBhc3luYyB2YWxpZGF0ZVBhY2thZ2VLZXlBbmRDb250ZXh0UGF0aChhcmNoaXZlOiBGaWxlLCBhcHA6IElBcHBsaWNhdGlvbikge1xuICAgIGNvbnN0IG1hbmlmZXN0ID0gYXdhaXQgdGhpcy5nZXRDdW11bG9jaXR5SnNvbihhcmNoaXZlKS50b1Byb21pc2UoKTtcbiAgICBjb25zdCBjb250ZXh0UGF0aCA9IGdldChtYW5pZmVzdCwgJ2NvbnRleHRQYXRoJyk7XG4gICAgY29uc3QgYXBwS2V5ID0gZ2V0KG1hbmlmZXN0LCAna2V5Jyk7XG4gICAgaWYgKGNvbnRleHRQYXRoICE9PSBhcHAuY29udGV4dFBhdGggfHwgYXBwS2V5ICE9PSBhcHAua2V5KSB7XG4gICAgICBjb25zdCBlcnJvciA9IHtcbiAgICAgICAgZGF0YTogeyBtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChFUlJPUl9NRVNTQUdFUy5JTlZBTElEX1BBQ0tBR0UpIH1cbiAgICAgIH07XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjcmVhdGVBcHBGb3JBcmNoaXZlKGFyY2hpdmUsIGlzUGFja2FnZVR5cGVBcmNoaXZlOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPElBcHBsaWNhdGlvbj4ge1xuICAgIGxldCBpc1BhY2thZ2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBjb25zdCBhcHBUeXBlID0gYXdhaXQgdGhpcy5nZXRBcHBUeXBlKGFyY2hpdmUpO1xuICAgIGxldCBhcHBNb2RlbDogYW55ID0ge307XG4gICAgY29uc3Qgc3VwcG9ydGVkQXBwVHlwZXMgPSBbQXBwbGljYXRpb25UeXBlLkhPU1RFRCwgQXBwbGljYXRpb25UeXBlLk1JQ1JPU0VSVklDRV07XG5cbiAgICBpZiAoc3VwcG9ydGVkQXBwVHlwZXMuaW5jbHVkZXMoYXBwVHlwZSkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGFwcE1vZGVsID0gYXdhaXQgdGhpcy5nZXRDdW11bG9jaXR5SnNvbihhcmNoaXZlKS50b1Byb21pc2UoKTtcbiAgICAgICAgaXNQYWNrYWdlID0gYXBwTW9kZWwuaXNQYWNrYWdlO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBkbyBub3RoaW5nLCB3ZSBhbGxvdyBoYXZpbmcgSE9TVEVEIGFwcGxpY2F0aW9ucyB3aXRob3V0IHRoZSBtYW5pZmVzdCBmaWxlXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldEJhc2VOYW1lRnJvbUFyY2hpdmVPckFwcE1vZGVsKGFyY2hpdmUsIGFwcFR5cGUsIGFwcE1vZGVsKTtcbiAgICBjb25zdCBjbGVhcmVkTmFtZSA9IHRoaXMucmVtb3ZlRm9yYmlkZGVuQ2hhcmFjdGVycyhuYW1lKTtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEFwcEtleShhcHBNb2RlbCwgY2xlYXJlZE5hbWUpO1xuICAgIGNvbnN0IGNvbnRleHRQYXRoID0gdGhpcy5nZXRDb250ZXh0UGF0aChhcHBNb2RlbCwgbmFtZSk7XG5cbiAgICBjb25zdCBhcHBUb1NhdmUgPSB7XG4gICAgICByZXNvdXJjZXNVcmw6ICcvJyxcbiAgICAgIHR5cGU6IGFwcFR5cGUsXG4gICAgICBuYW1lLFxuICAgICAga2V5LFxuICAgICAgY29udGV4dFBhdGhcbiAgICB9O1xuXG4gICAgaWYgKGlzUGFja2FnZVR5cGVBcmNoaXZlICYmICFpc1BhY2thZ2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihFUlJPUl9UWVBFLklOVkFMSURfUEFDS0FHRSk7XG4gICAgfSBlbHNlIGlmICghaXNQYWNrYWdlVHlwZUFyY2hpdmUgJiYgaXNQYWNrYWdlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoRVJST1JfVFlQRS5JTlZBTElEX0FQUExJQ0FUSU9OKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNOYW1lTGVuZ3RoRXhjZWVkZWQobmFtZSwgYXBwVHlwZSkpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCk7XG4gICAgICBlcnJvci5uYW1lID0gRVJST1JfVFlQRS5NSUNST1NFUlZJQ0VfTkFNRV9UT09fTE9ORztcbiAgICAgIGVycm9yLm1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChFUlJPUl9NRVNTQUdFU1tlcnJvci5uYW1lXSwge1xuICAgICAgICBuYW1lLFxuICAgICAgICBtYXhDaGFyczogTUlDUk9TRVJWSUNFX05BTUVfTUFYX0xFTkdUSFxuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmNyZWF0ZSh7XG4gICAgICAgIC4uLmFwcFRvU2F2ZSxcbiAgICAgICAgbWFuaWZlc3Q6IHtcbiAgICAgICAgICBpc1BhY2thZ2UsXG4gICAgICAgICAgLi4uKGFwcE1vZGVsPy5wYWNrYWdlICYmIHsgcGFja2FnZTogYXBwTW9kZWwucGFja2FnZSB9KVxuICAgICAgICB9IGFzIHVua25vd24gYXMgSU1hbmlmZXN0XG4gICAgICB9KVxuICAgICkuZGF0YTtcbiAgfVxuXG4gIGFzeW5jIHJlYWN0aXZhdGVBcmNoaXZlKGFwcDogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLnJlYWN0aXZhdGVBcmNoaXZlKGFwcC5pZCk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKGdldHRleHQoJ0FwcGxpY2F0aW9uIHJlYWN0aXZhdGVkLicpKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShleCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmVtb3ZlT2xkZXN0QXJjaGl2ZShhcHA6IElBcHBsaWNhdGlvbiwgYXJjaGl2ZXM6IElBcHBsaWNhdGlvbkJpbmFyeVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMubW9kYWwuY29uZmlybShcbiAgICAgICAgZ2V0dGV4dCgnRGVsZXRlIG9sZGVzdCBhcmNoaXZlIGFuZCBjb250aW51ZScpLFxuICAgICAgICBnZXR0ZXh0KFxuICAgICAgICAgICdVcCB0byA2IGFyY2hpdmVzIGNhbiBiZSBzYXZlZCBpbiB0aGUgcGxhdGZvcm0uIElmIHlvdSB1cGxvYWQgYSBuZXcgYXJjaGl2ZSwgdGhlIG9sZGVzdCBhcmNoaXZlIHRoYXQgaXMgbm90IGFjdGl2ZSB3aWxsIGJlIGRlbGV0ZWQuIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/J1xuICAgICAgICApLFxuICAgICAgICBTdGF0dXMuSU5GTyxcbiAgICAgICAgeyBvazogZ2V0dGV4dCgnRGVsZXRlIGFuZCBjb250aW51ZScpIH1cbiAgICAgICk7XG4gICAgICBjb25zdCBhcmNoaXZlVG9EZWxldGUgPSBhcmNoaXZlc1thcmNoaXZlcy5sZW5ndGggLSAyXTtcbiAgICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmJpbmFyeShhcHApLmRlbGV0ZShhcmNoaXZlVG9EZWxldGUuaWQpO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdBcmNoaXZlIGRlbGV0ZWQuJykpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGV4KTtcbiAgICB9XG4gIH1cblxuICBnZXRBcHBTdGF0ZShhcHA6IElBcHBsaWNhdGlvbik6IEFwcGxpY2F0aW9uU3RhdGUge1xuICAgIGlmICghdGhpcy5pc093bmVyKGFwcCkpIHtcbiAgICAgIHJldHVybiBBUFBfU1RBVEUuU1VCU0NSSUJFRDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNVbnBhY2tlZChhcHApKSB7XG4gICAgICByZXR1cm4gQVBQX1NUQVRFLlVOUEFDS0VEO1xuICAgIH0gZWxzZSBpZiAoYXBwLnR5cGUgPT09IEFwcGxpY2F0aW9uVHlwZS5FWFRFUk5BTCkge1xuICAgICAgcmV0dXJuIEFQUF9TVEFURS5FWFRFUk5BTDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNQYWNrYWdlQmx1ZXByaW50KGFwcCkpIHtcbiAgICAgIHJldHVybiBBUFBfU1RBVEUuUEFDS0FHRV9CTFVFUFJJTlQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzUGx1Z2luc1BhY2thZ2UoYXBwKSkge1xuICAgICAgcmV0dXJuIEFQUF9TVEFURS5QQUNLQUdFX1BMVUdJTjtcbiAgICB9XG4gICAgcmV0dXJuIEFQUF9TVEFURS5DVVNUT007XG4gIH1cblxuICBpc1BhY2thZ2VCbHVlcHJpbnQoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1BhY2thZ2UoYXBwKSAmJiBhcHAubWFuaWZlc3QucGFja2FnZSA9PT0gJ2JsdWVwcmludCc7XG4gIH1cblxuICBpc1BsdWdpbnNQYWNrYWdlKGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNQYWNrYWdlKGFwcCkgJiYgYXBwLm1hbmlmZXN0LnBhY2thZ2UgPT09ICdwbHVnaW4nO1xuICB9XG5cbiAgaXNVbnBhY2tlZChhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIWFwcC5tYW5pZmVzdD8uc291cmNlO1xuICB9XG5cbiAgaGFzRXhwb3J0cyhhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIWFwcC5tYW5pZmVzdD8uZXhwb3J0cz8ubGVuZ3RoO1xuICB9XG5cbiAgaXNBcHBsaWNhdGlvbihhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBhcHAudHlwZSAhPT0gQXBwbGljYXRpb25UeXBlLk1JQ1JPU0VSVklDRSAmJiAhdGhpcy5pc0ZlYXR1cmUoYXBwKSAmJiAhdGhpcy5pc1BhY2thZ2UoYXBwKVxuICAgICk7XG4gIH1cblxuICBpc0N1c3RvbU1pY3Jvc2VydmljZShhcHA6IElBcHBsaWNhdGlvbikge1xuICAgIHJldHVybiB0aGlzLmlzT3duZXIoYXBwKSAmJiBhcHAudHlwZSA9PT0gQXBwbGljYXRpb25UeXBlLk1JQ1JPU0VSVklDRTtcbiAgfVxuXG4gIGFzeW5jIGdldEJpbmFyeShcbiAgICBhcHA6IElBcHBsaWNhdGlvbixcbiAgICBhcmNoaXZlOiBJQXBwbGljYXRpb25CaW5hcnkgfCBJSWRlbnRpZmllZFxuICApOiBQcm9taXNlPEFycmF5QnVmZmVyPiB7XG4gICAgbGV0IGJpbmFyeTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuYmluYXJ5KGFwcCkuZG93bmxvYWRBcmNoaXZlKGFyY2hpdmUuaWQpO1xuICAgICAgYmluYXJ5ID0gYXdhaXQgcmVzLmFycmF5QnVmZmVyKCk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGNvbnN0IG1zZyA9IGdldHRleHQoJ0NvdWxkIG5vdCBnZXQgdGhlIGJpbmFyeS4nKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmRhbmdlcihtc2cpO1xuICAgIH1cbiAgICByZXR1cm4gYmluYXJ5O1xuICB9XG5cbiAgYXN5bmMgaXNPdmVyd3JpdHRlbkJ5Q3VzdG9tQXBwKGFwcDogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuICF0aGlzLmlzT3duZXIoYXBwKSAmJiAoYXdhaXQgdGhpcy5oYXNTdWJzY3JpYmVkQXBwUGFyZW50KGFwcCkpO1xuICB9XG5cbiAgYXN5bmMgaGFzU3Vic2NyaWJlZEFwcFBhcmVudChhcHA6IElBcHBsaWNhdGlvbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghdGhpcy5hcHBzR3JvdXBlZEJ5Q29udGV4dFBhdGgpIHtcbiAgICAgIGF3YWl0IHRoaXMuZ2V0V2ViQXBwbGljYXRpb25zKCk7XG4gICAgfVxuICAgIHJldHVybiBhcHAuY29udGV4dFBhdGggJiYgdGhpcy5hcHBzR3JvdXBlZEJ5Q29udGV4dFBhdGhbYXBwLmNvbnRleHRQYXRoXT8ubGVuZ3RoID09PSAyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBzZXRBdmFpbGFiaWxpdHlUb1ByaXZhdGVJZk5vdFNldEFscmVhZHkoYXBwOiBJQXBwbGljYXRpb24pOiBJQXBwbGljYXRpb24ge1xuICAgIGFwcC5hdmFpbGFiaWxpdHkgPSBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eS5QUklWQVRFO1xuICAgIHJldHVybiBhcHA7XG4gIH1cblxuICBwcml2YXRlIGdldEFwcEtleShhcHBNb2RlbDogSUFwcGxpY2F0aW9uLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBrZXkgPSBhcHBNb2RlbD8ua2V5O1xuICAgIGlmICgha2V5KSB7XG4gICAgICBrZXkgPSBgJHtrZWJhYkNhc2UobmFtZSl9LWtleWA7XG4gICAgfVxuICAgIHJldHVybiBrZXk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbnRleHRQYXRoKGFwcE1vZGVsOiBJQXBwbGljYXRpb24sIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGFwcE1vZGVsPy5jb250ZXh0UGF0aCB8fCBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUZvcmJpZGRlbkNoYXJhY3RlcnMoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvW15hLXpBLVowLTktX10vZywgJycpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0N1cnJlbnRBcHAoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICBjb25zdCBjdXJyZW50QXBwID0gdGhpcy5hcHBTdGF0ZVNlcnZpY2Uuc3RhdGUuYXBwO1xuICAgIHJldHVybiBjdXJyZW50QXBwLmNvbnRleHRQYXRoID09PSBhcHAuY29udGV4dFBhdGg7XG4gIH1cblxuICBwcml2YXRlIGdldEN1bXVsb2NpdHlKc29uKGFyY2hpdmU6IEZpbGUpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLnppcFNlcnZpY2UuZ2V0SnNvbkRhdGEoYXJjaGl2ZSwge1xuICAgICAgZmlsZW5hbWU6IENVTVVMT0NJVFlfSlNPTlxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBcHBUeXBlKGFyY2hpdmU6IEZpbGUpOiBQcm9taXNlPEFwcGxpY2F0aW9uVHlwZT4ge1xuICAgIHJldHVybiB0aGlzLmdldEN1bXVsb2NpdHlKc29uKGFyY2hpdmUpXG4gICAgICAudG9Qcm9taXNlKClcbiAgICAgIC50aGVuKFxuICAgICAgICBkYXRhID0+XG4gICAgICAgICAgZ2V0KGRhdGEsICd0eXBlJykgfHxcbiAgICAgICAgICAoZ2V0KGRhdGEsICdhcGlWZXJzaW9uJykgPyBBcHBsaWNhdGlvblR5cGUuTUlDUk9TRVJWSUNFIDogQXBwbGljYXRpb25UeXBlLkhPU1RFRClcbiAgICAgIClcbiAgICAgIC5jYXRjaCgoKSA9PiBBcHBsaWNhdGlvblR5cGUuSE9TVEVEKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QmFzZU5hbWVGcm9tQXJjaGl2ZU9yQXBwTW9kZWwoXG4gICAgYXJjaGl2ZTogYW55LFxuICAgIGFwcFR5cGU6IEFwcGxpY2F0aW9uVHlwZSxcbiAgICBhcHBNb2RlbD86IElBcHBsaWNhdGlvblxuICApOiBzdHJpbmcge1xuICAgIGxldCBiYXNlTmFtZSA9IGFwcE1vZGVsPy5uYW1lIHx8IGFyY2hpdmUubmFtZS5yZXBsYWNlKC9cXC56aXAkL2ksICcnKTtcbiAgICBpZiAoYXBwVHlwZSA9PT0gJ01JQ1JPU0VSVklDRScpIHtcbiAgICAgIGJhc2VOYW1lID0gdGhpcy5yZW1vdmVWZXJzaW9uRnJvbU5hbWUoYmFzZU5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gYmFzZU5hbWU7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrSWZBcHBOYW1lS2V5UGF0aEV4aXN0cyhcbiAgICBleGlzdGluZ0FwcHM6IElBcHBsaWNhdGlvbltdLFxuICAgIGFwcDogSUFwcGxpY2F0aW9uLFxuICAgIHJldHJ5Tm86IG51bWJlclxuICApOiBJQXBwbGljYXRpb24ge1xuICAgIHJldHVybiBleGlzdGluZ0FwcHMuZmluZChcbiAgICAgIGV4aXN0aW5nQXBwID0+XG4gICAgICAgIGV4aXN0aW5nQXBwLm5hbWUgPT09IGFwcC5uYW1lIHx8XG4gICAgICAgIGV4aXN0aW5nQXBwLmtleSA9PT0gYXBwLmtleSB8fFxuICAgICAgICBleGlzdGluZ0FwcC5jb250ZXh0UGF0aCA9PT0gYXBwLmNvbnRleHRQYXRoIHx8XG4gICAgICAgIGV4aXN0aW5nQXBwLm5hbWUgPT09IFthcHAubmFtZSwgcmV0cnlOb10uam9pbignLScpIHx8XG4gICAgICAgIGV4aXN0aW5nQXBwLmtleSA9PT0gW2FwcC5rZXksIHJldHJ5Tm9dLmpvaW4oJy0nKSB8fFxuICAgICAgICBleGlzdGluZ0FwcC5jb250ZXh0UGF0aCA9PT0gW2FwcC5jb250ZXh0UGF0aCwgcmV0cnlOb10uam9pbignLScpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlQXBwUHJvcGVydGllcyhhcHA6IElBcHBsaWNhdGlvbik6IElBcHBsaWNhdGlvbiB7XG4gICAgY29uc3QgdGVtcEFwcCA9IGNsb25lRGVlcChhcHApO1xuICAgIGNvbnN0IHByb3BlcnRpZXNUb1JlbW92ZSA9IFsnaWQnLCAnb3duZXInLCAnYWN0aXZlVmVyc2lvbklkJywgJ3NlbGYnXTtcblxuICAgIHByb3BlcnRpZXNUb1JlbW92ZS5mb3JFYWNoKHByb3AgPT4gZGVsZXRlIHRlbXBBcHBbcHJvcF0pO1xuICAgIHJldHVybiB0ZW1wQXBwO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRVcGxvYWRPdmVycmlkZXMoXG4gICAgYXJjaGl2ZTogRmlsZSxcbiAgICBhcHA6IElBcHBsaWNhdGlvblxuICApOiBQcm9taXNlPElVcGxvYWRQYXJhbXNPdmVycmlkZT4ge1xuICAgIGNvbnN0IHsgdmVyc2lvbiB9ID0gYXdhaXQgdGhpcy5nZXRDdW11bG9jaXR5SnNvbihhcmNoaXZlKS50b1Byb21pc2UoKTtcbiAgICBjb25zdCBpc0luaXRpYWxQYWNrYWdlID0gYXBwLmFwcGxpY2F0aW9uVmVyc2lvbnM/Lmxlbmd0aCA9PT0gMDtcbiAgICByZXR1cm4ge1xuICAgICAgbGlzdFVybDogJ3ZlcnNpb25zJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgQWNjZXB0OiAnYXBwbGljYXRpb24vdm5kLmNvbS5uc24uY3VtdWxvY2l0eS5hcHBsaWNhdGlvblZlcnNpb24ranNvbjtjaGFyc2V0PVVURi04O3Zlcj0wLjknXG4gICAgICB9LFxuICAgICAgYm9keUZpbGVQcm9wZXJ0eTogJ2FwcGxpY2F0aW9uQmluYXJ5JyxcbiAgICAgIHJlcXVlc3RCb2R5OiB7XG4gICAgICAgIGFwcGxpY2F0aW9uVmVyc2lvbjogeyB2ZXJzaW9uLCAuLi4oaXNJbml0aWFsUGFja2FnZSAmJiB7IHRhZ3M6IFsnbGF0ZXN0J10gfSkgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVZlcnNpb25Gcm9tTmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCB2ZXJzaW9uUmVnRXhwID0gLy1cXGQrXFwuXFxkK1xcLlxcZCsoXFwuXFxkKyk/KC1cXGQrKT8oLiopJC87XG4gICAgcmV0dXJuIG5hbWUucmVwbGFjZSh2ZXJzaW9uUmVnRXhwLCAnJyk7XG4gIH1cblxuICBwcml2YXRlIGlzTmFtZUxlbmd0aEV4Y2VlZGVkKG5hbWUsIGFwcFR5cGUpIHtcbiAgICByZXR1cm4gbmFtZS5sZW5ndGggPiBNSUNST1NFUlZJQ0VfTkFNRV9NQVhfTEVOR1RIICYmIGFwcFR5cGUgPT09IEFwcGxpY2F0aW9uVHlwZS5NSUNST1NFUlZJQ0U7XG4gIH1cbn1cbiJdfQ==
|
|
583
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNvc3lzdGVtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9lY29zeXN0ZW0vc2hhcmVkL2Vjb3N5c3RlbS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsa0JBQWtCLEVBQ2xCLGVBQWUsRUFXZixnQkFBZ0IsRUFJaEIsYUFBYSxFQUNkLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFDTCxZQUFZLEVBQ1osZUFBZSxFQUNmLE9BQU8sRUFDUCxtQkFBbUIsRUFDbkIsWUFBWSxFQUNaLE1BQU0sRUFDTixVQUFVLEVBQ1gsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDcEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEUsT0FBTyxFQUFvQixVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7QUFFakUsTUFBTSxlQUFlLEdBQUcsaUJBQWlCLENBQUM7QUFDMUMsTUFB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LElBQUksQ0FBQyxNQUFNLEdBQUcsNEJBQTRCLElBQUksT0FBTyxLQUFLLGVBQWUsQ0FBQyxZQUFZLENBQUM7SUFDaEcsQ0FBQzs7NkdBbHJCVSxnQkFBZ0I7aUhBQWhCLGdCQUFnQixjQUZmLE1BQU07MkZBRVAsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgQXBwbGljYXRpb25BdmFpbGFiaWxpdHksXG4gIEFwcGxpY2F0aW9uU2VydmljZSxcbiAgQXBwbGljYXRpb25UeXBlLFxuICBJQXBwbGljYXRpb24sXG4gIElBcHBsaWNhdGlvbkJpbmFyeSxcbiAgSUFwcGxpY2F0aW9uVmVyc2lvbixcbiAgSUFwcGxpY2F0aW9uVmVyc2lvbkRlbGV0ZVBhcmFtcyxcbiAgSUN1cnJlbnRUZW5hbnQsXG4gIElkUmVmZXJlbmNlLFxuICBJRmV0Y2hSZXNwb25zZSxcbiAgSUlkZW50aWZpZWQsXG4gIElNYW5hZ2VkT2JqZWN0LFxuICBJTWFuaWZlc3QsXG4gIEludmVudG9yeVNlcnZpY2UsXG4gIElSZXN1bHQsXG4gIElSZXN1bHRMaXN0LFxuICBJVXBsb2FkUGFyYW1zT3ZlcnJpZGUsXG4gIFRlbmFudFNlcnZpY2Vcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQWxlcnRTZXJ2aWNlLFxuICBBcHBTdGF0ZVNlcnZpY2UsXG4gIGdldHRleHQsXG4gIEh1bWFuaXplQXBwTmFtZVBpcGUsXG4gIE1vZGFsU2VydmljZSxcbiAgU3RhdHVzLFxuICBaaXBTZXJ2aWNlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgc2F2ZUFzIH0gZnJvbSAnZmlsZS1zYXZlcic7XG5pbXBvcnQgeyBjbG9uZURlZXAsIGdldCwgZ3JvdXBCeSwga2ViYWJDYXNlLCBwaWNrLCB1bmlxQnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBndCwgY29lcmNlIH0gZnJvbSAnc2VtdmVyJztcbmltcG9ydCB7IEVjb3N5c3RlbUVycm9yIH0gZnJvbSAnLi9lY29zeXN0ZW0tZXJyb3InO1xuaW1wb3J0IHsgQVBQX1NUQVRFLCBFUlJPUl9NRVNTQUdFUyB9IGZyb20gJy4vZWNvc3lzdGVtLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvblN0YXRlLCBFUlJPUl9UWVBFIH0gZnJvbSAnLi9lY29zeXN0ZW0ubW9kZWwnO1xuXG5jb25zdCBDVU1VTE9DSVRZX0pTT04gPSAnY3VtdWxvY2l0eS5qc29uJztcbmNvbnN0IE1JQ1JPU0VSVklDRV9OQU1FX01BWF9MRU5HVEggPSAyMztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRWNvc3lzdGVtU2VydmljZSB7XG4gIGFwcERlbGV0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElBcHBsaWNhdGlvbj4oKTtcbiAgcHJvZ3Jlc3M6IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KG51bGwpO1xuICBwcml2YXRlIGFwcHNHcm91cGVkQnlDb250ZXh0UGF0aDogYW55W107XG4gIHByaXZhdGUgeGhyOiBYTUxIdHRwUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG1vZGFsOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIGh1bWFuaXplQXBwTmFtZTogSHVtYW5pemVBcHBOYW1lUGlwZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcHBsaWNhdGlvblNlcnZpY2U6IEFwcGxpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGFwcFN0YXRlU2VydmljZTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgemlwU2VydmljZTogWmlwU2VydmljZSxcbiAgICBwcml2YXRlIHRlbmFudFNlcnZpY2U6IFRlbmFudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnlTZXJ2aWNlOiBJbnZlbnRvcnlTZXJ2aWNlXG4gICkge31cblxuICBnZXRVbmlxdWVBcHBDb25maWcoc3JjQXBwOiBJQXBwbGljYXRpb24sIGV4aXN0aW5nQXBwczogSUFwcGxpY2F0aW9uW10pOiBJQXBwbGljYXRpb24ge1xuICAgIGxldCBhcHA6IElBcHBsaWNhdGlvbiA9IHtcbiAgICAgIG5hbWU6IHNyY0FwcC5uYW1lLFxuICAgICAga2V5OiBzcmNBcHAua2V5LFxuICAgICAgY29udGV4dFBhdGg6IHNyY0FwcC5jb250ZXh0UGF0aFxuICAgIH07XG4gICAgZm9yIChsZXQgcmV0cnlObyA9IDA7IHJldHJ5Tm8gPCA5OyApIHtcbiAgICAgIGlmICh0aGlzLmNoZWNrSWZBcHBOYW1lS2V5UGF0aEV4aXN0cyhleGlzdGluZ0FwcHMsIGFwcCwgcmV0cnlObykpIHtcbiAgICAgICAgcmV0cnlObysrO1xuICAgICAgICBhcHAgPSB7XG4gICAgICAgICAgbmFtZTogW3NyY0FwcC5uYW1lLCByZXRyeU5vXS5qb2luKCctJyksXG4gICAgICAgICAga2V5OiBbc3JjQXBwLmtleSwgcmV0cnlOb10uam9pbignLScpLFxuICAgICAgICAgIGNvbnRleHRQYXRoOiBbc3JjQXBwLmNvbnRleHRQYXRoLCByZXRyeU5vXS5qb2luKCctJylcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhcHA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcHA7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIENvbXBhcmVzIGN1cnJlbnRseSBkZXBsb3llZCBhcHBsaWNhdGlvbiB2ZXJzaW9uIHdpdGggYXBwbGljYXRpb24gdmVyc2lvbiB0YWdnZWQgYXMgXCJsYXRlc3RcIlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY3VycmVudEFwcGxpY2F0aW9uVmVyc2lvbiBEZXBsb3llZCBhcHBsaWNhdGlvbiB2ZXJzaW9uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBsYXRlc3RBcHAgTGF0ZXN0IGFwcGxpY2F0aW9uIHZlcnNpb24gb2JqZWN0XG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgbGF0ZXN0IHZlcnNpb24gaXMgZ3JlYXRlciB0aGFuIGN1cnJlbnQsIG90aGVyd2lzZSBmYWxzZVxuICAgKi9cbiAgc2hvdWxkVXBncmFkZVBhY2thZ2UoY3VycmVudEFwcGxpY2F0aW9uVmVyc2lvbjogc3RyaW5nLCBsYXRlc3RBcHA6IElBcHBsaWNhdGlvblZlcnNpb24pOiBib29sZWFuIHtcbiAgICBjb25zdCBsYXRlc3RBcHBsaWNhdGlvblZlcnNpb24gPSBsYXRlc3RBcHA/LnZlcnNpb247XG5cbiAgICBpZiAoIWxhdGVzdEFwcGxpY2F0aW9uVmVyc2lvbiB8fCAhY3VycmVudEFwcGxpY2F0aW9uVmVyc2lvbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBndChjb2VyY2UobGF0ZXN0QXBwbGljYXRpb25WZXJzaW9uKSwgY29lcmNlKGN1cnJlbnRBcHBsaWNhdGlvblZlcnNpb24pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogR2V0cyBhbiBvYmplY3QgdGhhdCBjb250YWlucyBzZWFyY2hlZCB0YWdcbiAgICpcbiAgICogQHBhcmFtIHthcnJheX0gYXBwbGljYXRpb25WZXJzaW9ucyBBcnJheSB3aXRoIGFsbCBhdmFpbGFibGUgdmVyc2lvbnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhZ05hbWUgU2VhcmNoZWQgdGFnXG4gICAqXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IFJldHVybnMgYW4gb2JqZWN0IHdpdGggc2VhcmNoZWQgdGFnXG4gICAqL1xuICBnZXRBcHBsaWNhdGlvblZlcnNpb25PYmplY3RCeVRhZyhcbiAgICBhcHBsaWNhdGlvblZlcnNpb25zOiBJQXBwbGljYXRpb25WZXJzaW9uW10sXG4gICAgdGFnTmFtZTogc3RyaW5nXG4gICk6IElBcHBsaWNhdGlvblZlcnNpb24ge1xuICAgIHJldHVybiBhcHBsaWNhdGlvblZlcnNpb25zPy5maW5kKGVsZW1lbnQgPT4gZWxlbWVudC50YWdzLmluY2x1ZGVzKHRhZ05hbWUpKTtcbiAgfVxuXG4gIGFzeW5jIGdldEFwcGxpY2F0aW9uKGFwcElkOiBJZFJlZmVyZW5jZSk6IFByb21pc2U8SUFwcGxpY2F0aW9uPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5kZXRhaWwoYXBwSWQpKS5kYXRhO1xuICB9XG5cbiAgZ2V0QXBwbGljYXRpb25zKGN1c3RvbUZpbHRlcjogYW55ID0ge30pOiBQcm9taXNlPElSZXN1bHRMaXN0PElBcHBsaWNhdGlvbj4+IHtcbiAgICBjb25zdCBmaWx0ZXI6IG9iamVjdCA9IHtcbiAgICAgIHBhZ2VTaXplOiAyMDAwLFxuICAgICAgd2l0aFRvdGFsUGFnZXM6IHRydWVcbiAgICB9O1xuICAgIE9iamVjdC5hc3NpZ24oZmlsdGVyLCBjdXN0b21GaWx0ZXIpO1xuICAgIGNvbnN0IGN1cnJlbnRUZW5hbnQgPSB0aGlzLmFwcFN0YXRlU2VydmljZS5jdXJyZW50VGVuYW50LnZhbHVlO1xuICAgIHJldHVybiB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5saXN0QnlUZW5hbnQoY3VycmVudFRlbmFudC5uYW1lLCBmaWx0ZXIpO1xuICB9XG5cbiAgYXN5bmMgZ2V0TWljcm9zZXJ2aWNlcygpOiBQcm9taXNlPElBcHBsaWNhdGlvbltdPiB7XG4gICAgY29uc3QgYXBwcyA9IChhd2FpdCB0aGlzLmdldEFwcGxpY2F0aW9ucygpKS5kYXRhO1xuICAgIGNvbnN0IG1pY3Jvc2VydmljZXMgPSBhcHBzLmZpbHRlcihhcHAgPT4gdGhpcy5pc01pY3Jvc2VydmljZShhcHApKTtcbiAgICByZXR1cm4gbWljcm9zZXJ2aWNlcy5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcbiAgfVxuXG4gIGFzeW5jIGdldFdlYkFwcGxpY2F0aW9ucyhjdXN0b21GaWx0ZXI6IGFueSA9IHt9KTogUHJvbWlzZTxJQXBwbGljYXRpb25bXT4ge1xuICAgIGNvbnN0IGFwcHMgPSAoYXdhaXQgdGhpcy5nZXRBcHBsaWNhdGlvbnMoY3VzdG9tRmlsdGVyKSkuZGF0YTtcbiAgICBjb25zdCB3ZWJBcHBzID0gYXBwcy5maWx0ZXIoYXBwID0+IHRoaXMuaXNBcHBsaWNhdGlvbihhcHApKTtcbiAgICB0aGlzLmFwcHNHcm91cGVkQnlDb250ZXh0UGF0aCA9IGdyb3VwQnkod2ViQXBwcywgJ2NvbnRleHRQYXRoJyk7XG4gICAgcmV0dXJuIHdlYkFwcHMuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XG4gIH1cblxuICBhc3luYyBnZXRGZWF0dXJlQXBwbGljYXRpb25zKGN1c3RvbUZpbHRlcjogYW55ID0ge30pOiBQcm9taXNlPElBcHBsaWNhdGlvbltdPiB7XG4gICAgY29uc3QgYXBwcyA9IChhd2FpdCB0aGlzLmdldEFwcGxpY2F0aW9ucyhjdXN0b21GaWx0ZXIpKS5kYXRhO1xuICAgIGNvbnN0IHdlYkFwcHMgPSBhcHBzLmZpbHRlcihhcHAgPT4gdGhpcy5pc0ZlYXR1cmUoYXBwKSk7XG4gICAgcmV0dXJuIHdlYkFwcHMuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XG4gIH1cblxuICBhc3luYyBnZXRQYWNrYWdlQXBwbGljYXRpb25zKGN1c3RvbUZpbHRlcjogYW55ID0ge30pOiBQcm9taXNlPElBcHBsaWNhdGlvbltdPiB7XG4gICAgY29uc3QgZmlsdGVyID0gT2JqZWN0LmFzc2lnbih7fSwgY3VzdG9tRmlsdGVyKTtcbiAgICBjb25zdCBzaGFyZWRGaWx0ZXIgPSBPYmplY3QuYXNzaWduKFxuICAgICAge1xuICAgICAgICBhdmFpbGFiaWxpdHk6IEFwcGxpY2F0aW9uQXZhaWxhYmlsaXR5LlNIQVJFRCxcbiAgICAgICAgdHlwZTogJ0hPU1RFRCcsXG4gICAgICAgIHBhZ2VTaXplOiAyMDAwXG4gICAgICB9LFxuICAgICAgY3VzdG9tRmlsdGVyXG4gICAgKTtcbiAgICBjb25zdCBbeyBkYXRhOiBhcHBzIH0sIHsgZGF0YTogc2hhcmVkIH1dID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgdGhpcy5nZXRBcHBsaWNhdGlvbnMoZmlsdGVyKSxcbiAgICAgIHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmxpc3Qoc2hhcmVkRmlsdGVyKVxuICAgIF0pO1xuICAgIGNvbnN0IHdlYkFwcHMgPSBbLi4uYXBwcywgLi4uc2hhcmVkXS5maWx0ZXIoYXBwID0+IHRoaXMuaXNQYWNrYWdlKGFwcCkpO1xuICAgIC8vIGFuIGFwcCBjb3VsZCBiZSBzdWJzY3JpYmVkIHRvIGEgdGVuYW50LCBidXQgYWxzbyBoYXZlIGl0J3MgYXZhaWxhYmlsaXR5IHNldCB0byBTSEFSRUQsIGluIHRoYXQgY2FzZSBpdCB3b3VsZCBvY2N1ciB0d2ljZS5cbiAgICBjb25zdCB1bmlxV2ViQXBwcyA9IHVuaXFCeSh3ZWJBcHBzLCAoYXBwOiBJQXBwbGljYXRpb24pID0+IGFwcC5pZCk7XG4gICAgcmV0dXJuIHVuaXFXZWJBcHBzLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xuICB9XG5cbiAgYXN5bmMgaXNNaWNyb3NlcnZpY2VIb3N0aW5nQWxsb3dlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGRhdGE6IGFwcHMgfSA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmxpc3RCeU5hbWUoJ2ZlYXR1cmUtbWljcm9zZXJ2aWNlLWhvc3RpbmcnKTtcbiAgICByZXR1cm4gISFhcHBzLmZpbHRlcihhcHAgPT4gYXBwLm93bmVyPy50ZW5hbnQ/LmlkID09PSAnbWFuYWdlbWVudCcpLmxlbmd0aDtcbiAgfVxuXG4gIGNhbk9wZW5BcHBJbkJyb3dzZXIoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICBjb25zdCBpc05vdEFGZWF0dXJlID0gIXRoaXMuaXNGZWF0dXJlKGFwcCk7XG4gICAgY29uc3QgaGFzUHJvcGVyVHlwZSA9IFtcbiAgICAgIEFwcGxpY2F0aW9uVHlwZS5IT1NURUQsXG4gICAgICBBcHBsaWNhdGlvblR5cGUuRVhURVJOQUwsXG4gICAgICBBcHBsaWNhdGlvblR5cGUuUkVQT1NJVE9SWVxuICAgIF0uaW5jbHVkZXMoYXBwLnR5cGUpO1xuICAgIGNvbnN0IGlzTm90QVBhY2thZ2UgPSAhdGhpcy5pc1BhY2thZ2UoYXBwKTtcbiAgICByZXR1cm4gaXNOb3RBRmVhdHVyZSAmJiBoYXNQcm9wZXJUeXBlICYmIGlzTm90QVBhY2thZ2U7XG4gIH1cblxuICBvcGVuQXBwKGFwcCkge1xuICAgIHdpbmRvdy5vcGVuKHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmdldEhyZWYoYXBwKSwgJ19ibGFuaycsICdub29wZW5lcixub3JlZmVycmVyJyk7XG4gIH1cblxuICBhc3luYyBjYW5EZWxldGVBcHAoYXBwOiBJQXBwbGljYXRpb24pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5pc093bmVyKGFwcCkgJiYgKChhd2FpdCB0aGlzLmhhc1N1YnNjcmliZWRBcHBQYXJlbnQoYXBwKSkgfHwgIXRoaXMuaXNDdXJyZW50QXBwKGFwcCkpXG4gICAgKTtcbiAgfVxuXG4gIGlzT3duZXIoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICBjb25zdCBjdXJyZW50VGVuYW50OiBJQ3VycmVudFRlbmFudCA9IHRoaXMuYXBwU3RhdGVTZXJ2aWNlLmN1cnJlbnRUZW5hbnQudmFsdWU7XG4gICAgY29uc3QgYXBwT3duZXIgPSBnZXQoYXBwLCAnb3duZXIudGVuYW50LmlkJyk7XG4gICAgcmV0dXJuIGN1cnJlbnRUZW5hbnQubmFtZSA9PT0gYXBwT3duZXI7XG4gIH1cblxuICBpc0ZlYXR1cmUoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFhcHAubmFtZS5tYXRjaCgvZmVhdHVyZS0vKTtcbiAgfVxuXG4gIGlzTWljcm9zZXJ2aWNlKGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGFwcC50eXBlID09PSAnTUlDUk9TRVJWSUNFJztcbiAgfVxuXG4gIGlzRXh0ZXJuYWwoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gYXBwLnR5cGUgPT09ICdFWFRFUk5BTCc7XG4gIH1cblxuICBpc1BhY2thZ2UoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gYXBwLm1hbmlmZXN0Py5pc1BhY2thZ2UgPT09IHRydWU7XG4gIH1cblxuICBpc1BsdWdpbihhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhcHAubWFuaWZlc3Q/LnBhY2thZ2UgPT09ICdwbHVnaW4nO1xuICB9XG5cbiAgY2FuY2VsQXBwQ3JlYXRpb24oYXBwOiBJQXBwbGljYXRpb24pOiB2b2lkIHtcbiAgICBpZiAodGhpcy54aHIpIHtcbiAgICAgIHRoaXMueGhyLmFib3J0KCk7XG4gICAgfVxuICAgIGlmIChhcHApIHtcbiAgICAgIHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmRlbGV0ZShhcHApO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVVwbG9hZFByb2dyZXNzKGV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50Lmxlbmd0aENvbXB1dGFibGUpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRQcm9ncmVzcyA9IHRoaXMucHJvZ3Jlc3MudmFsdWU7XG4gICAgICB0aGlzLnByb2dyZXNzLm5leHQoY3VycmVudFByb2dyZXNzICsgKGV2ZW50LmxvYWRlZCAvIGV2ZW50LnRvdGFsKSAqICg5NSAtIGN1cnJlbnRQcm9ncmVzcykpO1xuICAgIH1cbiAgfVxuXG4gIHNldEFwcEFjdGl2ZVZlcnNpb24oYXBwOiBJQXBwbGljYXRpb24sIGFjdGl2ZVZlcnNpb25JZDogc3RyaW5nKTogUHJvbWlzZTxJQXBwbGljYXRpb24+IHtcbiAgICByZXR1cm4gdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UudXBkYXRlKHsgaWQ6IGFwcC5pZCwgYWN0aXZlVmVyc2lvbklkIH0pO1xuICB9XG5cbiAgc2V0UGFja2FnZVZlcnNpb25UYWcoYXBwOiBJQXBwbGljYXRpb24sIHZlcnNpb246IHN0cmluZywgdGFnczogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gdGhpcy5hcHBsaWNhdGlvblNlcnZpY2Uuc2V0UGFja2FnZVZlcnNpb25UYWcoYXBwLCB2ZXJzaW9uLCB0YWdzKTtcbiAgfVxuXG4gIGRlbGV0ZVBhY2thZ2VWZXJzaW9uKGFwcDogSUFwcGxpY2F0aW9uLCBwYXJhbXM6IElBcHBsaWNhdGlvblZlcnNpb25EZWxldGVQYXJhbXMpIHtcbiAgICByZXR1cm4gdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZGVsZXRlVmVyc2lvblBhY2thZ2UoYXBwLCBwYXJhbXMpO1xuICB9XG5cbiAgZ2V0SHVtYW5pemVkQXBwTmFtZShhcHA6IElBcHBsaWNhdGlvbik6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuaHVtYW5pemVBcHBOYW1lLnRyYW5zZm9ybShhcHAubmFtZSkucGlwZShkZWJvdW5jZVRpbWUoMjUwKSwgdGFrZSgxKSkudG9Qcm9taXNlKCk7XG4gIH1cblxuICBjcmVhdGVDb25maWcoYXBwOiBJQXBwbGljYXRpb24sIGZvcm1Hcm91cFZhbHVlOiBGb3JtR3JvdXApOiBQYXJ0aWFsPElBcHBsaWNhdGlvbj4ge1xuICAgIGNvbnN0IHsgaWQsIHR5cGUsIGF2YWlsYWJpbGl0eSB9ID0gYXBwO1xuICAgIGxldCBjb25maWcgPSBwaWNrKGZvcm1Hcm91cFZhbHVlLCBbJ25hbWUnLCAna2V5JywgJ2NvbnRleHRQYXRoJ10pO1xuICAgIGNvbmZpZyA9IHtcbiAgICAgIC4uLmNvbmZpZyxcbiAgICAgIGlzU2V0dXA6IHRydWUsXG4gICAgICBpZCxcbiAgICAgIHR5cGUsXG4gICAgICBhdmFpbGFiaWxpdHlcbiAgICB9O1xuICAgIHJldHVybiBjb25maWc7XG4gIH1cblxuICBhc3luYyB1cGRhdGVBcHBNYW5pZmVzdChcbiAgICBhcHBsaWNhdGlvbjogSUFwcGxpY2F0aW9uLFxuICAgIHNvdXJjZVBhY2thZ2U6IElBcHBsaWNhdGlvblxuICApOiBQcm9taXNlPHsgcmVzOiBJRmV0Y2hSZXNwb25zZTsgZGF0YTogYW55IH0+IHtcbiAgICBjb25zdCB7IGlkIH0gPSBhcHBsaWNhdGlvbjtcbiAgICBjb25zdCBjbGVhbmVkQXBwID0gdGhpcy5yZW1vdmVBcHBQcm9wZXJ0aWVzKGFwcGxpY2F0aW9uKTtcbiAgICBpZiAoIWNsZWFuZWRBcHAubWFuaWZlc3QpIHtcbiAgICAgIGNsZWFuZWRBcHAubWFuaWZlc3QgPSB7fTtcbiAgICB9XG4gICAgY2xlYW5lZEFwcC5tYW5pZmVzdC5pc1BhY2thZ2UgPSBmYWxzZTtcbiAgICBjbGVhbmVkQXBwLm1hbmlmZXN0LnNvdXJjZSA9IHNvdXJjZVBhY2thZ2UuaWQ7XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2VcbiAgICAgIC5iaW5hcnkoaWQpXG4gICAgICAudXBkYXRlRmlsZXMoW3sgcGF0aDogQ1VNVUxPQ0lUWV9KU09OLCBjb250ZW50czogSlNPTi5zdHJpbmdpZnkoY2xlYW5lZEFwcCkgYXMgYW55IH1dKTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RBcmNoaXZlcyhhcHBJZDogc3RyaW5nIHwgbnVtYmVyIHwgSUFwcGxpY2F0aW9uKTogUHJvbWlzZTxJQXBwbGljYXRpb25CaW5hcnlbXT4ge1xuICAgIGNvbnN0IGZpbHRlciA9IHtcbiAgICAgIHBhZ2VTaXplOiAxMDBcbiAgICB9O1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuYmluYXJ5KGFwcElkKS5saXN0KGZpbHRlcikpLmRhdGE7XG4gIH1cblxuICBhc3luYyBkZWxldGVBcmNoaXZlKGFyY2hpdmU6IElBcHBsaWNhdGlvbkJpbmFyeSwgYXBwOiBJQXBwbGljYXRpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBodW1hbml6ZWRBcmNoaXZlTmFtZSA9IGF3YWl0IHRoaXMuZ2V0SHVtYW5pemVkQXBwTmFtZShhcmNoaXZlKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5tb2RhbC5jb25maXJtKFxuICAgICAgICBnZXR0ZXh0KCdEZWxldGUgYXJjaGl2ZScpLFxuICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICBnZXR0ZXh0KFxuICAgICAgICAgICAgYFlvdSBhcmUgYWJvdXQgdG8gZGVsZXRlIGFyY2hpdmUgXCJ7eyBodW1hbml6ZWRBcmNoaXZlTmFtZSB9fVwiLiBEbyB5b3Ugd2FudCB0byBwcm9jZWVkP2BcbiAgICAgICAgICApLFxuICAgICAgICAgIHsgaHVtYW5pemVkQXJjaGl2ZU5hbWUgfVxuICAgICAgICApLFxuICAgICAgICBTdGF0dXMuREFOR0VSLFxuICAgICAgICB7IG9rOiBnZXR0ZXh0KCdEZWxldGUnKSwgY2FuY2VsOiBnZXR0ZXh0KCdDYW5jZWwnKSB9XG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuYmluYXJ5KGFwcCkuZGVsZXRlKGFyY2hpdmUuaWQpO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdBcmNoaXZlIGRlbGV0ZWQuJykpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXgpIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZGFuZ2VyKGdldChleCwgJ2RhdGEubWVzc2FnZScpLCBleC5kYXRhKTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2FuY2VsbGVkJyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0QXJjaGl2ZU1hbmFnZWRPYmplY3QoYmluYXJ5SWQ6IHN0cmluZyk6IFByb21pc2U8SU1hbmFnZWRPYmplY3Q+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuaW52ZW50b3J5U2VydmljZS5kZXRhaWwoYmluYXJ5SWQpKS5kYXRhO1xuICB9XG5cbiAgYXN5bmMgZG93bmxvYWRBcmNoaXZlKFxuICAgIGFwcDogSUFwcGxpY2F0aW9uLFxuICAgIGFyY2hpdmU6IFBpY2s8SUFwcGxpY2F0aW9uQmluYXJ5LCAnbmFtZScgfCAnaWQnPlxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmluYXJ5ID0gYXdhaXQgdGhpcy5nZXRCaW5hcnkoYXBwLCBhcmNoaXZlKTtcbiAgICAgIGNvbnN0IGZpbGVCaW5hcnkgPSBuZXcgQmxvYihbYmluYXJ5XSwgeyB0eXBlOiAnYXBwbGljYXRpb24veC16aXAtY29tcHJlc3NlZCcgfSk7XG4gICAgICBzYXZlQXMoZmlsZUJpbmFyeSwgYXJjaGl2ZS5uYW1lKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBlbXB0eVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUFwcChcbiAgICBhcHA6IElBcHBsaWNhdGlvbixcbiAgICBkZWxldGVPbkZhaWx1cmU6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBQcm9taXNlPElSZXN1bHQ8SUFwcGxpY2F0aW9uPj4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UudXBkYXRlKGFwcCk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIHRoaXMuYWxlcnRFcnJvcihleCk7XG4gICAgICBpZiAoZGVsZXRlT25GYWlsdXJlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmRlbGV0ZShhcHAuaWQpO1xuICAgICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5BUFBMSUNBVElPTl9DUkVBVElPTl9GQUlMRUQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUFwcChhcHA6IElBcHBsaWNhdGlvbiwgc2lsZW50ID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBodW1hbml6ZWRBcHBOYW1lID0gYXdhaXQgdGhpcy5nZXRIdW1hbml6ZWRBcHBOYW1lKGFwcCk7XG4gICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgIGF3YWl0IHRoaXMubW9kYWwuY29uZmlybShcbiAgICAgICAgZ2V0dGV4dCgnRGVsZXRlIGFwcGxpY2F0aW9uJyksXG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgIGdldHRleHQoXG4gICAgICAgICAgICBgWW91IGFyZSBhYm91dCB0byBkZWxldGUgYXBwbGljYXRpb24gXCJ7eyBodW1hbml6ZWRBcHBOYW1lIH19XCIuIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/YFxuICAgICAgICAgICksXG4gICAgICAgICAgeyBodW1hbml6ZWRBcHBOYW1lIH1cbiAgICAgICAgKSxcbiAgICAgICAgU3RhdHVzLkRBTkdFUixcbiAgICAgICAgeyBvazogZ2V0dGV4dCgnRGVsZXRlJyksIGNhbmNlbDogZ2V0dGV4dCgnQ2FuY2VsJykgfVxuICAgICAgKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZGVsZXRlKGFwcC5pZCk7XG4gICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnQXBwbGljYXRpb24gZGVsZXRlZC4nKSk7XG4gICAgfVxuICAgIHRoaXMuYXBwRGVsZXRlZC5lbWl0KGFwcCk7XG4gIH1cblxuICBhc3luYyBjaGVja0lmU3Vic2NyaWJlZChhcHA6IElBcHBsaWNhdGlvbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGN1cnJlbnRUZW5hbnQgPSBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UuY3VycmVudCgpO1xuICAgIGNvbnN0IHN1YnNjcmliZWRBcHBzID0gY3VycmVudFRlbmFudC5kYXRhLmFwcGxpY2F0aW9ucy5yZWZlcmVuY2VzO1xuICAgIHJldHVybiBzdWJzY3JpYmVkQXBwcy5zb21lKGFwcGxpY2F0aW9uID0+IGFwcGxpY2F0aW9uLmFwcGxpY2F0aW9uLmlkID09PSBhcHAuaWQpO1xuICB9XG5cbiAgYXN5bmMgc3Vic2NyaWJlQXBwKGFwcDogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY3VycmVudFRlbmFudDogSUN1cnJlbnRUZW5hbnQgPSB0aGlzLmFwcFN0YXRlU2VydmljZS5jdXJyZW50VGVuYW50LnZhbHVlO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2Uuc3Vic2NyaWJlQXBwbGljYXRpb24oY3VycmVudFRlbmFudCwgYXBwKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnU3VjY2Vzc2Z1bGx5IHN1YnNjcmliZWQgdG8gYXBwbGljYXRpb24uJykpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLmFsZXJ0RXJyb3IoZXgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVuc3Vic2NyaWJlQXBwKGFwcDogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY3VycmVudFRlbmFudDogSUN1cnJlbnRUZW5hbnQgPSB0aGlzLmFwcFN0YXRlU2VydmljZS5jdXJyZW50VGVuYW50LnZhbHVlO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UudW5zdWJzY3JpYmVBcHBsaWNhdGlvbihjdXJyZW50VGVuYW50LCBhcHApO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdTdWNjZXNzZnVsbHkgdW5zdWJzY3JpYmVkIGZyb20gYXBwbGljYXRpb24uJykpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLmFsZXJ0RXJyb3IoZXgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGlzVmFsaWRBcHBUeXBlKGFyY2hpdmU6IEZpbGUsIGFwcFR5cGU6IEFwcGxpY2F0aW9uVHlwZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjdXJyZW50VHlwZSA9IGF3YWl0IHRoaXMuZ2V0QXBwVHlwZShhcmNoaXZlKTtcbiAgICAgIGlmIChjdXJyZW50VHlwZSAhPT0gYXBwVHlwZSkge1xuICAgICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5UWVBFX1ZBTElEQVRJT04pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9ncmVzcy5uZXh0KHRoaXMucHJvZ3Jlc3MudmFsdWUgKyAxMCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5UWVBFX1ZBTElEQVRJT04pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwbG9hZEFyY2hpdmVUb0FwcChcbiAgICBhcmNoaXZlOiBGaWxlLFxuICAgIGFwcDogSUFwcGxpY2F0aW9uLFxuICAgIGlzTmV3VmVyc2lvbjogYm9vbGVhbiA9IGZhbHNlXG4gICk6IFByb21pc2U8SUFwcGxpY2F0aW9uPiB7XG4gICAgbGV0IHVwbG9hZE92ZXJyaWRlczogSVVwbG9hZFBhcmFtc092ZXJyaWRlO1xuICAgIGlmIChpc05ld1ZlcnNpb24pIHtcbiAgICAgIHVwbG9hZE92ZXJyaWRlcyA9IGF3YWl0IHRoaXMuZ2V0VXBsb2FkT3ZlcnJpZGVzKGFyY2hpdmUsIGFwcCk7XG4gICAgfVxuICAgIGNvbnN0IGJpbmFyeVNlcnZpY2UgPSB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5iaW5hcnkoYXBwKTtcbiAgICB0aGlzLnhociA9IGJpbmFyeVNlcnZpY2UudXBsb2FkV2l0aFByb2dyZXNzWGhyKFxuICAgICAgYXJjaGl2ZSxcbiAgICAgIHRoaXMudXBkYXRlVXBsb2FkUHJvZ3Jlc3MuYmluZCh0aGlzKSxcbiAgICAgICcnLFxuICAgICAgdXBsb2FkT3ZlcnJpZGVzXG4gICAgKTtcblxuICAgIGNvbnN0IGJpbmFyeU1vID0gYXdhaXQgYmluYXJ5U2VydmljZS5nZXRYTUxIdHRwUmVzcG9uc2UodGhpcy54aHIpO1xuXG4gICAgLy8gVE9ETyBjb21tZW50ZWQgaXQgZHVlIHRvOiBodHRwczovL2N1bXVsb2NpdHkuYXRsYXNzaWFuLm5ldC9icm93c2UvTVRNLTQ4NTUzXG4gICAgLy8gQWRkIGl0IGJhY2sgd2hlbiBCRSBmaXhlcyBpc3N1ZXMgd2l0aCBhY3RpdmVWZXJzaW9uLlxuICAgIC8vIGlmIChpc05ld1ZlcnNpb24pIHtcbiAgICAvLyAgIHJldHVybiBhd2FpdCB0aGlzLmdldEFwcGxpY2F0aW9uKGFwcCk7XG4gICAgLy8gfVxuICAgIHJldHVybiAoYXdhaXQgdGhpcy5zZXRBcHBBY3RpdmVWZXJzaW9uKGFwcCwgKGJpbmFyeU1vLmJpbmFyeUlkIHx8IGJpbmFyeU1vLmlkKSBhcyBzdHJpbmcpKS5kYXRhO1xuICB9XG5cbiAgYXN5bmMgdmFsaWRhdGVBcmNoaXZlVG9BcHBDb21wYXRpYmlsaXR5KGFyY2hpdmU6IEZpbGUsIGFwcDogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgYXBwVHlwZSA9IGF3YWl0IHRoaXMuZ2V0QXBwVHlwZShhcmNoaXZlKTtcbiAgICBpZiAoYXBwVHlwZSAhPT0gYXBwLnR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFY29zeXN0ZW1FcnJvcihFUlJPUl9UWVBFLklOVkFMSURfQVBQTElDQVRJT04pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByb2dyZXNzLm5leHQodGhpcy5wcm9ncmVzcy52YWx1ZSArIDEwKTtcbiAgICB9XG4gICAgY29uc3QgbWFuaWZlc3QgPSBhd2FpdCB0aGlzLmdldEN1bXVsb2NpdHlKc29uKGFyY2hpdmUpO1xuICAgIC8vIEEgdXNlciBjYW4gdXBsb2FkIGFuIGFwcCB3aXRob3V0IGEgQ3VtdWxvY2l0eSBKU09OIGZpbGUgKGUuZy4gYSByZWFjdCBhcHApLlxuICAgIC8vIFRoaXMgaXMgYWxsb3dlZCBhbmQgc2hvdWxkIG5vdCB0cmlnZ2VyIGEgdmFsaWRhdGlvbiBlcnJvci5cbiAgICBpZiAoIW1hbmlmZXN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHRoaXMudmFsaWRhdGVQYWNrYWdlS2V5QW5kQ29udGV4dFBhdGgobWFuaWZlc3QsIGFwcCk7XG4gIH1cblxuICBhc3luYyBnZXRDdW11bG9jaXR5SnNvbihhcmNoaXZlOiBGaWxlKTogUHJvbWlzZTxJTWFuaWZlc3QgfCBudWxsPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGM4eU1hbmlmZXN0ID0gYXdhaXQgdGhpcy5nZXRDdW11bG9jaXR5SnNvbiQoYXJjaGl2ZSkudG9Qcm9taXNlKCk7XG4gICAgICByZXR1cm4gYzh5TWFuaWZlc3Q7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUFwcEZvckFyY2hpdmUoYXJjaGl2ZSwgaXNQYWNrYWdlVHlwZUFyY2hpdmUgPSBmYWxzZSk6IFByb21pc2U8SUFwcGxpY2F0aW9uPiB7XG4gICAgbGV0IGlzUGFja2FnZSA9IGZhbHNlO1xuICAgIGNvbnN0IGFwcFR5cGUgPSBhd2FpdCB0aGlzLmdldEFwcFR5cGUoYXJjaGl2ZSk7XG4gICAgbGV0IGFwcE1vZGVsOiBhbnkgPSB7fTtcbiAgICBjb25zdCBzdXBwb3J0ZWRBcHBUeXBlcyA9IFtBcHBsaWNhdGlvblR5cGUuSE9TVEVELCBBcHBsaWNhdGlvblR5cGUuTUlDUk9TRVJWSUNFXTtcblxuICAgIGlmIChzdXBwb3J0ZWRBcHBUeXBlcy5pbmNsdWRlcyhhcHBUeXBlKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXBwTW9kZWwgPSBhd2FpdCB0aGlzLmdldEN1bXVsb2NpdHlKc29uJChhcmNoaXZlKS50b1Byb21pc2UoKTtcbiAgICAgICAgaXNQYWNrYWdlID0gYXBwTW9kZWwuaXNQYWNrYWdlO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBkbyBub3RoaW5nLCB3ZSBhbGxvdyBoYXZpbmcgSE9TVEVEIGFwcGxpY2F0aW9ucyB3aXRob3V0IHRoZSBtYW5pZmVzdCBmaWxlXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldEJhc2VOYW1lRnJvbUFyY2hpdmVPckFwcE1vZGVsKGFyY2hpdmUsIGFwcFR5cGUsIGFwcE1vZGVsKTtcbiAgICBjb25zdCBjbGVhcmVkTmFtZSA9IHRoaXMucmVtb3ZlRm9yYmlkZGVuQ2hhcmFjdGVycyhuYW1lKTtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEFwcEtleShhcHBNb2RlbCwgY2xlYXJlZE5hbWUpO1xuICAgIGNvbnN0IGNvbnRleHRQYXRoID0gdGhpcy5nZXRDb250ZXh0UGF0aChhcHBNb2RlbCwgbmFtZSk7XG5cbiAgICBjb25zdCBhcHBUb1NhdmUgPSB7XG4gICAgICByZXNvdXJjZXNVcmw6ICcvJyxcbiAgICAgIHR5cGU6IGFwcFR5cGUsXG4gICAgICBuYW1lLFxuICAgICAga2V5LFxuICAgICAgY29udGV4dFBhdGhcbiAgICB9O1xuXG4gICAgaWYgKGlzUGFja2FnZVR5cGVBcmNoaXZlICYmICFpc1BhY2thZ2UpIHtcbiAgICAgIHRocm93IG5ldyBFY29zeXN0ZW1FcnJvcihFUlJPUl9UWVBFLklOVkFMSURfUEFDS0FHRSk7XG4gICAgfSBlbHNlIGlmICghaXNQYWNrYWdlVHlwZUFyY2hpdmUgJiYgaXNQYWNrYWdlKSB7XG4gICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5JTlZBTElEX0FQUExJQ0FUSU9OKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNOYW1lTGVuZ3RoRXhjZWVkZWQobmFtZSwgYXBwVHlwZSkpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCk7XG4gICAgICBlcnJvci5uYW1lID0gRVJST1JfVFlQRS5NSUNST1NFUlZJQ0VfTkFNRV9UT09fTE9ORztcbiAgICAgIGVycm9yLm1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChFUlJPUl9NRVNTQUdFU1tlcnJvci5uYW1lXSwge1xuICAgICAgICBuYW1lLFxuICAgICAgICBtYXhDaGFyczogTUlDUk9TRVJWSUNFX05BTUVfTUFYX0xFTkdUSFxuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmNyZWF0ZSh7XG4gICAgICAgIC4uLmFwcFRvU2F2ZSxcbiAgICAgICAgbWFuaWZlc3Q6IHtcbiAgICAgICAgICBpc1BhY2thZ2UsXG4gICAgICAgICAgLi4uKGFwcE1vZGVsPy5wYWNrYWdlICYmIHsgcGFja2FnZTogYXBwTW9kZWwucGFja2FnZSB9KVxuICAgICAgICB9IGFzIHVua25vd24gYXMgSU1hbmlmZXN0XG4gICAgICB9KVxuICAgICkuZGF0YTtcbiAgfVxuXG4gIGFzeW5jIHJlYWN0aXZhdGVBcmNoaXZlKGFwcDogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLnJlYWN0aXZhdGVBcmNoaXZlKGFwcC5pZCk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKGdldHRleHQoJ0FwcGxpY2F0aW9uIHJlYWN0aXZhdGVkLicpKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgdGhpcy5hbGVydEVycm9yKGV4KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyByZW1vdmVPbGRlc3RBcmNoaXZlKGFwcDogSUFwcGxpY2F0aW9uLCBhcmNoaXZlczogSUFwcGxpY2F0aW9uQmluYXJ5W10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5tb2RhbC5jb25maXJtKFxuICAgICAgICBnZXR0ZXh0KCdEZWxldGUgb2xkZXN0IGFyY2hpdmUgYW5kIGNvbnRpbnVlJyksXG4gICAgICAgIGdldHRleHQoXG4gICAgICAgICAgJ1VwIHRvIDYgYXJjaGl2ZXMgY2FuIGJlIHNhdmVkIGluIHRoZSBwbGF0Zm9ybS4gSWYgeW91IHVwbG9hZCBhIG5ldyBhcmNoaXZlLCB0aGUgb2xkZXN0IGFyY2hpdmUgdGhhdCBpcyBub3QgYWN0aXZlIHdpbGwgYmUgZGVsZXRlZC4gRG8geW91IHdhbnQgdG8gcHJvY2VlZD8nXG4gICAgICAgICksXG4gICAgICAgIFN0YXR1cy5JTkZPLFxuICAgICAgICB7IG9rOiBnZXR0ZXh0KCdEZWxldGUgYW5kIGNvbnRpbnVlJykgfVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFyY2hpdmVUb0RlbGV0ZSA9IGFyY2hpdmVzW2FyY2hpdmVzLmxlbmd0aCAtIDJdO1xuICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuYmluYXJ5KGFwcCkuZGVsZXRlKGFyY2hpdmVUb0RlbGV0ZS5pZCk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKGdldHRleHQoJ0FyY2hpdmUgZGVsZXRlZC4nKSk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIHRoaXMuYWxlcnRFcnJvcihleCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0QXBwU3RhdGUoYXBwOiBJQXBwbGljYXRpb24pOiBBcHBsaWNhdGlvblN0YXRlIHtcbiAgICBpZiAoIXRoaXMuaXNPd25lcihhcHApKSB7XG4gICAgICByZXR1cm4gQVBQX1NUQVRFLlNVQlNDUklCRUQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzVW5wYWNrZWQoYXBwKSkge1xuICAgICAgcmV0dXJuIEFQUF9TVEFURS5VTlBBQ0tFRDtcbiAgICB9IGVsc2UgaWYgKGFwcC50eXBlID09PSBBcHBsaWNhdGlvblR5cGUuRVhURVJOQUwpIHtcbiAgICAgIHJldHVybiBBUFBfU1RBVEUuRVhURVJOQUw7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzUGFja2FnZUJsdWVwcmludChhcHApKSB7XG4gICAgICByZXR1cm4gQVBQX1NUQVRFLlBBQ0tBR0VfQkxVRVBSSU5UO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc1BsdWdpbnNQYWNrYWdlKGFwcCkpIHtcbiAgICAgIHJldHVybiBBUFBfU1RBVEUuUEFDS0FHRV9QTFVHSU47XG4gICAgfVxuICAgIHJldHVybiBBUFBfU1RBVEUuQ1VTVE9NO1xuICB9XG5cbiAgaXNQYWNrYWdlQmx1ZXByaW50KGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNQYWNrYWdlKGFwcCkgJiYgYXBwLm1hbmlmZXN0LnBhY2thZ2UgPT09ICdibHVlcHJpbnQnO1xuICB9XG5cbiAgaXNQbHVnaW5zUGFja2FnZShhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzUGFja2FnZShhcHApICYmIGFwcC5tYW5pZmVzdC5wYWNrYWdlID09PSAncGx1Z2luJztcbiAgfVxuXG4gIGlzVW5wYWNrZWQoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFhcHAubWFuaWZlc3Q/LnNvdXJjZTtcbiAgfVxuXG4gIGhhc0V4cG9ydHMoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFhcHAubWFuaWZlc3Q/LmV4cG9ydHM/Lmxlbmd0aDtcbiAgfVxuXG4gIGlzQXBwbGljYXRpb24oYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgYXBwLnR5cGUgIT09IEFwcGxpY2F0aW9uVHlwZS5NSUNST1NFUlZJQ0UgJiYgIXRoaXMuaXNGZWF0dXJlKGFwcCkgJiYgIXRoaXMuaXNQYWNrYWdlKGFwcClcbiAgICApO1xuICB9XG5cbiAgaXNDdXN0b21NaWNyb3NlcnZpY2UoYXBwOiBJQXBwbGljYXRpb24pIHtcbiAgICByZXR1cm4gdGhpcy5pc093bmVyKGFwcCkgJiYgYXBwLnR5cGUgPT09IEFwcGxpY2F0aW9uVHlwZS5NSUNST1NFUlZJQ0U7XG4gIH1cblxuICBhc3luYyBnZXRCaW5hcnkoXG4gICAgYXBwOiBJQXBwbGljYXRpb24sXG4gICAgYXJjaGl2ZTogSUFwcGxpY2F0aW9uQmluYXJ5IHwgSUlkZW50aWZpZWRcbiAgKTogUHJvbWlzZTxBcnJheUJ1ZmZlcj4ge1xuICAgIGxldCBiaW5hcnk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmJpbmFyeShhcHApLmRvd25sb2FkQXJjaGl2ZShhcmNoaXZlLmlkKTtcbiAgICAgIGJpbmFyeSA9IGF3YWl0IHJlcy5hcnJheUJ1ZmZlcigpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBjb25zdCBtc2cgPSBnZXR0ZXh0KCdDb3VsZCBub3QgZ2V0IHRoZSBiaW5hcnkuJyk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5kYW5nZXIobXNnKTtcbiAgICB9XG4gICAgcmV0dXJuIGJpbmFyeTtcbiAgfVxuXG4gIGFzeW5jIGlzT3ZlcndyaXR0ZW5CeUN1c3RvbUFwcChhcHA6IElBcHBsaWNhdGlvbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiAhdGhpcy5pc093bmVyKGFwcCkgJiYgKGF3YWl0IHRoaXMuaGFzU3Vic2NyaWJlZEFwcFBhcmVudChhcHApKTtcbiAgfVxuXG4gIGFzeW5jIGhhc1N1YnNjcmliZWRBcHBQYXJlbnQoYXBwOiBJQXBwbGljYXRpb24pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXRoaXMuYXBwc0dyb3VwZWRCeUNvbnRleHRQYXRoKSB7XG4gICAgICBhd2FpdCB0aGlzLmdldFdlYkFwcGxpY2F0aW9ucygpO1xuICAgIH1cbiAgICByZXR1cm4gYXBwLmNvbnRleHRQYXRoICYmIHRoaXMuYXBwc0dyb3VwZWRCeUNvbnRleHRQYXRoW2FwcC5jb250ZXh0UGF0aF0/Lmxlbmd0aCA9PT0gMjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgc2V0QXZhaWxhYmlsaXR5VG9Qcml2YXRlSWZOb3RTZXRBbHJlYWR5KGFwcDogSUFwcGxpY2F0aW9uKTogSUFwcGxpY2F0aW9uIHtcbiAgICBhcHAuYXZhaWxhYmlsaXR5ID0gQXBwbGljYXRpb25BdmFpbGFiaWxpdHkuUFJJVkFURTtcbiAgICByZXR1cm4gYXBwO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3dzIGFuIGVycm9yIGRpYWxvZy5cbiAgICogQHBhcmFtIGVycm9yIEVpdGhlciBhIHNlcnZlciBlcnJvciBvciBhbiBpbnRlcm5hbCBbW0Vjb3N5c3RlbUVycm9yXV0uXG4gICAqL1xuICBhbGVydEVycm9yKGVycm9yOiBFcnJvciB8IEVjb3N5c3RlbUVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRWNvc3lzdGVtRXJyb3IpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmRhbmdlcihlcnJvci5tZXNzYWdlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdmFsaWRhdGVQYWNrYWdlS2V5QW5kQ29udGV4dFBhdGgobWFuaWZlc3Q6IElNYW5pZmVzdCwgYXBwOiBJQXBwbGljYXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0UGF0aCA9IGdldChtYW5pZmVzdCwgJ2NvbnRleHRQYXRoJyk7XG4gICAgY29uc3QgYXBwS2V5ID0gZ2V0KG1hbmlmZXN0LCAna2V5Jyk7XG4gICAgaWYgKGNvbnRleHRQYXRoICE9PSBhcHAuY29udGV4dFBhdGggfHwgYXBwS2V5ICE9PSBhcHAua2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5LRVlfT1JfQ09OVEVYVF9QQVRIX01JU01BVENIKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEFwcEtleShhcHBNb2RlbDogSUFwcGxpY2F0aW9uLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBrZXkgPSBhcHBNb2RlbD8ua2V5O1xuICAgIGlmICgha2V5KSB7XG4gICAgICBrZXkgPSBgJHtrZWJhYkNhc2UobmFtZSl9LWtleWA7XG4gICAgfVxuICAgIHJldHVybiBrZXk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbnRleHRQYXRoKGFwcE1vZGVsOiBJQXBwbGljYXRpb24sIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGFwcE1vZGVsPy5jb250ZXh0UGF0aCB8fCBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUZvcmJpZGRlbkNoYXJhY3RlcnMoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvW15hLXpBLVowLTktX10vZywgJycpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0N1cnJlbnRBcHAoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICBjb25zdCBjdXJyZW50QXBwID0gdGhpcy5hcHBTdGF0ZVNlcnZpY2Uuc3RhdGUuYXBwO1xuICAgIHJldHVybiBjdXJyZW50QXBwLmNvbnRleHRQYXRoID09PSBhcHAuY29udGV4dFBhdGg7XG4gIH1cblxuICBwcml2YXRlIGdldEN1bXVsb2NpdHlKc29uJChhcmNoaXZlOiBGaWxlKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy56aXBTZXJ2aWNlLmdldEpzb25EYXRhKGFyY2hpdmUsIHtcbiAgICAgIGZpbGVuYW1lOiBDVU1VTE9DSVRZX0pTT05cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXBwVHlwZShhcmNoaXZlOiBGaWxlKTogUHJvbWlzZTxBcHBsaWNhdGlvblR5cGU+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRDdW11bG9jaXR5SnNvbiQoYXJjaGl2ZSlcbiAgICAgIC50b1Byb21pc2UoKVxuICAgICAgLnRoZW4oXG4gICAgICAgIGRhdGEgPT5cbiAgICAgICAgICBnZXQoZGF0YSwgJ3R5cGUnKSB8fFxuICAgICAgICAgIChnZXQoZGF0YSwgJ2FwaVZlcnNpb24nKSA/IEFwcGxpY2F0aW9uVHlwZS5NSUNST1NFUlZJQ0UgOiBBcHBsaWNhdGlvblR5cGUuSE9TVEVEKVxuICAgICAgKVxuICAgICAgLmNhdGNoKCgpID0+IEFwcGxpY2F0aW9uVHlwZS5IT1NURUQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRCYXNlTmFtZUZyb21BcmNoaXZlT3JBcHBNb2RlbChcbiAgICBhcmNoaXZlOiBhbnksXG4gICAgYXBwVHlwZTogQXBwbGljYXRpb25UeXBlLFxuICAgIGFwcE1vZGVsPzogSUFwcGxpY2F0aW9uXG4gICk6IHN0cmluZyB7XG4gICAgbGV0IGJhc2VOYW1lID0gYXBwTW9kZWw/Lm5hbWUgfHwgYXJjaGl2ZS5uYW1lLnJlcGxhY2UoL1xcLnppcCQvaSwgJycpO1xuICAgIGlmIChhcHBUeXBlID09PSAnTUlDUk9TRVJWSUNFJykge1xuICAgICAgYmFzZU5hbWUgPSB0aGlzLnJlbW92ZVZlcnNpb25Gcm9tTmFtZShiYXNlTmFtZSk7XG4gICAgfVxuICAgIHJldHVybiBiYXNlTmFtZTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tJZkFwcE5hbWVLZXlQYXRoRXhpc3RzKFxuICAgIGV4aXN0aW5nQXBwczogSUFwcGxpY2F0aW9uW10sXG4gICAgYXBwOiBJQXBwbGljYXRpb24sXG4gICAgcmV0cnlObzogbnVtYmVyXG4gICk6IElBcHBsaWNhdGlvbiB7XG4gICAgcmV0dXJuIGV4aXN0aW5nQXBwcy5maW5kKFxuICAgICAgZXhpc3RpbmdBcHAgPT5cbiAgICAgICAgZXhpc3RpbmdBcHAubmFtZSA9PT0gYXBwLm5hbWUgfHxcbiAgICAgICAgZXhpc3RpbmdBcHAua2V5ID09PSBhcHAua2V5IHx8XG4gICAgICAgIGV4aXN0aW5nQXBwLmNvbnRleHRQYXRoID09PSBhcHAuY29udGV4dFBhdGggfHxcbiAgICAgICAgZXhpc3RpbmdBcHAubmFtZSA9PT0gW2FwcC5uYW1lLCByZXRyeU5vXS5qb2luKCctJykgfHxcbiAgICAgICAgZXhpc3RpbmdBcHAua2V5ID09PSBbYXBwLmtleSwgcmV0cnlOb10uam9pbignLScpIHx8XG4gICAgICAgIGV4aXN0aW5nQXBwLmNvbnRleHRQYXRoID09PSBbYXBwLmNvbnRleHRQYXRoLCByZXRyeU5vXS5qb2luKCctJylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVBcHBQcm9wZXJ0aWVzKGFwcDogSUFwcGxpY2F0aW9uKTogSUFwcGxpY2F0aW9uIHtcbiAgICBjb25zdCB0ZW1wQXBwID0gY2xvbmVEZWVwKGFwcCk7XG4gICAgY29uc3QgcHJvcGVydGllc1RvUmVtb3ZlID0gWydpZCcsICdvd25lcicsICdhY3RpdmVWZXJzaW9uSWQnLCAnc2VsZiddO1xuXG4gICAgcHJvcGVydGllc1RvUmVtb3ZlLmZvckVhY2gocHJvcCA9PiBkZWxldGUgdGVtcEFwcFtwcm9wXSk7XG4gICAgcmV0dXJuIHRlbXBBcHA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldFVwbG9hZE92ZXJyaWRlcyhcbiAgICBhcmNoaXZlOiBGaWxlLFxuICAgIGFwcDogSUFwcGxpY2F0aW9uXG4gICk6IFByb21pc2U8SVVwbG9hZFBhcmFtc092ZXJyaWRlPiB7XG4gICAgY29uc3QgeyB2ZXJzaW9uIH0gPSBhd2FpdCB0aGlzLmdldEN1bXVsb2NpdHlKc29uJChhcmNoaXZlKS50b1Byb21pc2UoKTtcbiAgICBjb25zdCBpc0luaXRpYWxQYWNrYWdlID0gYXBwLmFwcGxpY2F0aW9uVmVyc2lvbnM/Lmxlbmd0aCA9PT0gMDtcbiAgICByZXR1cm4ge1xuICAgICAgbGlzdFVybDogJ3ZlcnNpb25zJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgQWNjZXB0OiAnYXBwbGljYXRpb24vdm5kLmNvbS5uc24uY3VtdWxvY2l0eS5hcHBsaWNhdGlvblZlcnNpb24ranNvbjtjaGFyc2V0PVVURi04O3Zlcj0wLjknXG4gICAgICB9LFxuICAgICAgYm9keUZpbGVQcm9wZXJ0eTogJ2FwcGxpY2F0aW9uQmluYXJ5JyxcbiAgICAgIHJlcXVlc3RCb2R5OiB7XG4gICAgICAgIGFwcGxpY2F0aW9uVmVyc2lvbjogeyB2ZXJzaW9uLCAuLi4oaXNJbml0aWFsUGFja2FnZSAmJiB7IHRhZ3M6IFsnbGF0ZXN0J10gfSkgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVZlcnNpb25Gcm9tTmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCB2ZXJzaW9uUmVnRXhwID0gLy1cXGQrXFwuXFxkK1xcLlxcZCsoXFwuXFxkKyk/KC1cXGQrKT8oLiopJC87XG4gICAgcmV0dXJuIG5hbWUucmVwbGFjZSh2ZXJzaW9uUmVnRXhwLCAnJyk7XG4gIH1cblxuICBwcml2YXRlIGlzTmFtZUxlbmd0aEV4Y2VlZGVkKG5hbWUsIGFwcFR5cGUpIHtcbiAgICByZXR1cm4gbmFtZS5sZW5ndGggPiBNSUNST1NFUlZJQ0VfTkFNRV9NQVhfTEVOR1RIICYmIGFwcFR5cGUgPT09IEFwcGxpY2F0aW9uVHlwZS5NSUNST1NFUlZJQ0U7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -36,7 +36,7 @@ export class UploadArchiveComponent {
|
|
|
36
36
|
}
|
|
37
37
|
async onFile(file) {
|
|
38
38
|
try {
|
|
39
|
-
await this.ecosystemService.
|
|
39
|
+
await this.ecosystemService.validateArchiveToAppCompatibility(file, this.application);
|
|
40
40
|
const isCustomMicroservice = this.ecosystemService.isCustomMicroservice(this.application);
|
|
41
41
|
this.archives = isCustomMicroservice
|
|
42
42
|
? []
|
|
@@ -49,9 +49,6 @@ export class UploadArchiveComponent {
|
|
|
49
49
|
if (this.archives.length === 6 && !isCustomMicroservice) {
|
|
50
50
|
await this.ecosystemService.removeOldestArchive(this.application, this.archives);
|
|
51
51
|
}
|
|
52
|
-
if (this.uploadNewVersion) {
|
|
53
|
-
await this.ecosystemService.validatePackageKeyAndContextPath(file, this.application);
|
|
54
|
-
}
|
|
55
52
|
const app = await this.ecosystemService.uploadArchiveToApp(file, this.application, this.uploadNewVersion);
|
|
56
53
|
this.applicationChange.emit(app);
|
|
57
54
|
this.uploadProgress.next(100);
|
|
@@ -64,15 +61,15 @@ export class UploadArchiveComponent {
|
|
|
64
61
|
}
|
|
65
62
|
catch (ex) {
|
|
66
63
|
this.uploadInProgress = false;
|
|
67
|
-
this.
|
|
64
|
+
this.ecosystemService.alertError(ex);
|
|
68
65
|
}
|
|
69
66
|
}
|
|
70
67
|
}
|
|
71
68
|
UploadArchiveComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: UploadArchiveComponent, deps: [{ token: i1.EcosystemService }, { token: i2.AlertService }], target: i0.ɵɵFactoryTarget.Component });
|
|
72
|
-
UploadArchiveComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: UploadArchiveComponent, selector: "c8y-upload-archive", inputs: { application: "application", uploadNewVersion: "uploadNewVersion", preUploadCallback: "preUploadCallback" }, outputs: { applicationChange: "applicationChange", refresh: "refresh" }, ngImport: i0, template: "<c8y-drop-area\n (dropped)=\"onFileDroppedEvent($event)\"\n [accept]=\"'.zip'\"\n [
|
|
69
|
+
UploadArchiveComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: UploadArchiveComponent, selector: "c8y-upload-archive", inputs: { application: "application", uploadNewVersion: "uploadNewVersion", preUploadCallback: "preUploadCallback" }, outputs: { applicationChange: "applicationChange", refresh: "refresh" }, ngImport: i0, template: "<c8y-drop-area\n (dropped)=\"onFileDroppedEvent($event)\"\n [accept]=\"'.zip'\"\n [loading]=\"uploadInProgress\"\n [maxAllowedFiles]=\"1\"\n [message]=\"'Upload a *.zip file' | translate\"\n [progress]=\"uploadProgress | async\"\n [forceHideList]=\"true\"\n class=\"drop-area-sm\"\n>\n</c8y-drop-area>\n", dependencies: [{ kind: "component", type: i2.DropAreaComponent, selector: "c8y-drop-area", inputs: ["formControl", "title", "message", "icon", "loadingMessage", "forceHideList", "alwaysShow", "clickToOpen", "loading", "progress", "maxAllowedFiles", "files", "accept"], outputs: ["dropped"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] });
|
|
73
70
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: UploadArchiveComponent, decorators: [{
|
|
74
71
|
type: Component,
|
|
75
|
-
args: [{ selector: 'c8y-upload-archive', template: "<c8y-drop-area\n (dropped)=\"onFileDroppedEvent($event)\"\n [accept]=\"'.zip'\"\n [
|
|
72
|
+
args: [{ selector: 'c8y-upload-archive', template: "<c8y-drop-area\n (dropped)=\"onFileDroppedEvent($event)\"\n [accept]=\"'.zip'\"\n [loading]=\"uploadInProgress\"\n [maxAllowedFiles]=\"1\"\n [message]=\"'Upload a *.zip file' | translate\"\n [progress]=\"uploadProgress | async\"\n [forceHideList]=\"true\"\n class=\"drop-area-sm\"\n>\n</c8y-drop-area>\n" }]
|
|
76
73
|
}], ctorParameters: function () { return [{ type: i1.EcosystemService }, { type: i2.AlertService }]; }, propDecorators: { application: [{
|
|
77
74
|
type: Input
|
|
78
75
|
}], uploadNewVersion: [{
|
|
@@ -84,4 +81,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
|
|
|
84
81
|
}], refresh: [{
|
|
85
82
|
type: Output
|
|
86
83
|
}] } });
|
|
87
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWFyY2hpdmUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vZWNvc3lzdGVtL3NoYXJlZC91cGxvYWQtYXJjaGl2ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9lY29zeXN0ZW0vc2hhcmVkL3VwbG9hZC1hcmNoaXZlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7QUFNdkQsTUFBTSxPQUFPLHNCQUFzQjtJQWVqQyxZQUFvQixnQkFBa0MsRUFBVSxZQUEwQjtRQUF0RSxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQVUsaUJBQVksR0FBWixZQUFZLENBQWM7UUFiakYscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBRXhCLHNCQUFpQixHQUErQixJQUFJLFlBQVksRUFBZ0IsQ0FBQztRQUNqRixZQUFPLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFMUQsYUFBUSxHQUF5QixFQUFFLENBQUM7UUFLcEMscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBQ2xDLGtCQUFhLEdBQVksS0FBSyxDQUFDO0lBRThELENBQUM7SUFFOUYsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQztJQUN4QyxDQUFDO0lBRUQsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEtBQUs7UUFDNUIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDMUIsSUFBSTtnQkFDRixNQUFNLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2FBQ2hDO1lBQUMsT0FB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T3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJQXBwbGljYXRpb24sIElBcHBsaWNhdGlvbkJpbmFyeSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEFsZXJ0U2VydmljZSwgZ2V0dGV4dCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBFY29zeXN0ZW1TZXJ2aWNlIH0gZnJvbSAnLi9lY29zeXN0ZW0uc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS11cGxvYWQtYXJjaGl2ZScsXG4gIHRlbXBsYXRlVXJsOiAndXBsb2FkLWFyY2hpdmUuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFVwbG9hZEFyY2hpdmVDb21wb25lbnQge1xuICBASW5wdXQoKSBhcHBsaWNhdGlvbjogSUFwcGxpY2F0aW9uO1xuICBASW5wdXQoKSB1cGxvYWROZXdWZXJzaW9uID0gZmFsc2U7XG4gIEBJbnB1dCgpIHByZVVwbG9hZENhbGxiYWNrOiAoKSA9PiBQcm9taXNlPGFueT47XG4gIEBPdXRwdXQoKSBhcHBsaWNhdGlvbkNoYW5nZTogRXZlbnRFbWl0dGVyPElBcHBsaWNhdGlvbj4gPSBuZXcgRXZlbnRFbWl0dGVyPElBcHBsaWNhdGlvbj4oKTtcbiAgQE91dHB1dCgpIHJlZnJlc2g6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGFyY2hpdmVzOiBJQXBwbGljYXRpb25CaW5hcnlbXSA9IFtdO1xuICB0b0FjdGl2YXRlVmVyc2lvbklkOiBzdHJpbmc7XG4gIGxhc3Q6IElBcHBsaWNhdGlvbkJpbmFyeTtcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICBmaWxlTGlzdDogRmlsZUxpc3Q7XG4gIHVwbG9hZEluUHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY2FuUmVhY3RpdmF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWNvc3lzdGVtU2VydmljZTogRWNvc3lzdGVtU2VydmljZSwgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSkge31cblxuICBnZXQgdXBsb2FkUHJvZ3Jlc3MoKTogQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLmVjb3N5c3RlbVNlcnZpY2UucHJvZ3Jlc3M7XG4gIH1cblxuICBhc3luYyBvbkZpbGVEcm9wcGVkRXZlbnQoZXZlbnQpIHtcbiAgICBpZiAodGhpcy5wcmVVcGxvYWRDYWxsYmFjaykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wcmVVcGxvYWRDYWxsYmFjaygpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBkbyBub3RoaW5nLCBpLmUuIHdoZW4gY29uZmlybSBtb2RhbCBjYW5jZWxzIGFuZCB0aHJvd3MgdW5kZWZpbmVkXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGZpbGUgPSBldmVudFswXS5maWxlO1xuICAgICAgdGhpcy5vbkZpbGUoZmlsZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBvbkZpbGUoZmlsZTogRmlsZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UudmFsaWRhdGVBcmNoaXZlVG9BcHBDb21wYXRpYmlsaXR5KGZpbGUsIHRoaXMuYXBwbGljYXRpb24pO1xuICAgICAgY29uc3QgaXNDdXN0b21NaWNyb3NlcnZpY2UgPSB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuaXNDdXN0b21NaWNyb3NlcnZpY2UodGhpcy5hcHBsaWNhdGlvbik7XG4gICAgICB0aGlzLmFyY2hpdmVzID0gaXNDdXN0b21NaWNyb3NlcnZpY2VcbiAgICAgICAgPyBbXVxuICAgICAgICA6IGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS5saXN0QXJjaGl2ZXModGhpcy5hcHBsaWNhdGlvbi5pZCk7XG4gICAgICB0aGlzLmFyY2hpdmVzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgcmV0dXJuIChuZXcgRGF0ZShiLmNyZWF0ZWQpIGFzIGFueSkgLSAobmV3IERhdGUoYS5jcmVhdGVkKSBhcyBhbnkpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnVwbG9hZEluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgdGhpcy51cGxvYWRQcm9ncmVzcy5uZXh0KDApO1xuICAgICAgaWYgKHRoaXMuYXJjaGl2ZXMubGVuZ3RoID09PSA2ICYmICFpc0N1c3RvbU1pY3Jvc2VydmljZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UucmVtb3ZlT2xkZXN0QXJjaGl2ZSh0aGlzLmFwcGxpY2F0aW9uLCB0aGlzLmFyY2hpdmVzKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFwcCA9IGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS51cGxvYWRBcmNoaXZlVG9BcHAoXG4gICAgICAgIGZpbGUsXG4gICAgICAgIHRoaXMuYXBwbGljYXRpb24sXG4gICAgICAgIHRoaXMudXBsb2FkTmV3VmVyc2lvblxuICAgICAgKTtcbiAgICAgIHRoaXMuYXBwbGljYXRpb25DaGFuZ2UuZW1pdChhcHApO1xuICAgICAgdGhpcy51cGxvYWRQcm9ncmVzcy5uZXh0KDEwMCk7XG4gICAgICB0aGlzLnVwbG9hZEluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVmcmVzaC5lbWl0KCk7XG4gICAgICBpZiAodGhpcy51cGxvYWROZXdWZXJzaW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnQXJjaGl2ZSB1cGxvYWRlZCBhbmQgYWN0aXZhdGVkLicpKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgdGhpcy51cGxvYWRJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuYWxlcnRFcnJvcihleCk7XG4gICAgfVxuICB9XG59XG4iLCI8Yzh5LWRyb3AtYXJlYVxuICAoZHJvcHBlZCk9XCJvbkZpbGVEcm9wcGVkRXZlbnQoJGV2ZW50KVwiXG4gIFthY2NlcHRdPVwiJy56aXAnXCJcbiAgW2xvYWRpbmddPVwidXBsb2FkSW5Qcm9ncmVzc1wiXG4gIFttYXhBbGxvd2VkRmlsZXNdPVwiMVwiXG4gIFttZXNzYWdlXT1cIidVcGxvYWQgYSAqLnppcCBmaWxlJyB8IHRyYW5zbGF0ZVwiXG4gIFtwcm9ncmVzc109XCJ1cGxvYWRQcm9ncmVzcyB8IGFzeW5jXCJcbiAgW2ZvcmNlSGlkZUxpc3RdPVwidHJ1ZVwiXG4gIGNsYXNzPVwiZHJvcC1hcmVhLXNtXCJcbj5cbjwvYzh5LWRyb3AtYXJlYT5cbiJdfQ==
|