ng-configcat-publicapi-ui 4.0.1 → 4.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/bootstrap.mjs +2 -1
- package/esm2022/lib/dialogs/reroute-dialog/reroute-dialog.mjs +28 -0
- package/esm2022/lib/ng-configcat-publicapi-ui.module.mjs +6 -3
- package/esm2022/lib/v2/feature-flag/feature-flag.component.mjs +6 -6
- package/esm2022/lib/v2/feature-flag-item.component.mjs +8 -17
- package/fesm2022/ng-configcat-publicapi-ui.mjs +37 -23
- package/fesm2022/ng-configcat-publicapi-ui.mjs.map +1 -1
- package/lib/bootstrap.d.ts +1 -0
- package/lib/dialogs/reroute-dialog/reroute-dialog.d.ts +20 -0
- package/lib/ng-configcat-publicapi-ui.module.d.ts +27 -26
- package/lib/v2/feature-flag/feature-flag.component.d.ts +2 -2
- package/package.json +1 -1
|
@@ -5,6 +5,7 @@ import { forkJoin, throwError } from 'rxjs';
|
|
|
5
5
|
import { ConfirmationDialogComponent } from '../dialogs/confirmation-dialog/confirmation-dialog';
|
|
6
6
|
import { ReasonDialogComponent } from '../dialogs/reason-dialog/reason-dialog.component';
|
|
7
7
|
import { SaveSnackbarComponent } from '../dialogs/save-snackbar/save-snackbar.component';
|
|
8
|
+
import { RerouteDialogComponent } from '../bootstrap';
|
|
8
9
|
import * as i0 from "@angular/core";
|
|
9
10
|
import * as i1 from "../_services/form-generator";
|
|
10
11
|
import * as i2 from "@angular/material/dialog";
|
|
@@ -230,33 +231,23 @@ export class FeatureFlagItemComponent extends BaseComponent {
|
|
|
230
231
|
this.deleteSettingRequested.emit({ config: this.settingFormula.config, environment: this.settingFormula.environment, setting: setting.setting });
|
|
231
232
|
}
|
|
232
233
|
subscriptionLimitReachedCalled() {
|
|
233
|
-
|
|
234
|
+
this.dialog.open(RerouteDialogComponent, {
|
|
234
235
|
data: {
|
|
235
236
|
title: 'You have reached the limits of your plan',
|
|
236
237
|
body: ` Upgrade your plan or join our <a href="https://configcat.com/referrals" target="_blank" rel="noopener noreferrer">referral program</a> to increase your limits.`,
|
|
237
238
|
yesButtonLabel: `See plans`,
|
|
239
|
+
yesButtonLink: this.dashboardBasePath + "/organization/plans",
|
|
238
240
|
noButtonLabel: `Close`
|
|
239
241
|
}
|
|
240
242
|
});
|
|
241
|
-
dialogRef.afterClosed().subscribe(result => {
|
|
242
|
-
if (result === 'yes') {
|
|
243
|
-
const plansUrl = this.dashboardBasePath + "/organization/plans";
|
|
244
|
-
window.open(plansUrl, '_blank');
|
|
245
|
-
}
|
|
246
|
-
});
|
|
247
243
|
}
|
|
248
244
|
addSegmentConditionRequestedWithoutSegments() {
|
|
249
|
-
|
|
245
|
+
this.dialog.open(RerouteDialogComponent, {
|
|
250
246
|
data: {
|
|
251
247
|
title: 'There are no segments in this product yet.',
|
|
252
248
|
body: `Go ahead to the ConfiCat Dashboard and create your first user segment before adding it to a targeting rule.`,
|
|
253
249
|
yesButtonLabel: `Go to the dashboard`,
|
|
254
|
-
|
|
255
|
-
});
|
|
256
|
-
dialogRef.afterClosed().subscribe(result => {
|
|
257
|
-
if (result === 'yes') {
|
|
258
|
-
const segmentUrl = this.dashboardBasePath + "/product/" + this.productId + "/segments";
|
|
259
|
-
window.open(segmentUrl, '_blank');
|
|
250
|
+
yesButtonLink: this.dashboardBasePath + "/product/" + this.productId + "/segments"
|
|
260
251
|
}
|
|
261
252
|
});
|
|
262
253
|
}
|
|
@@ -302,11 +293,11 @@ export class FeatureFlagItemComponent extends BaseComponent {
|
|
|
302
293
|
this.expandedStateChanged.emit();
|
|
303
294
|
}
|
|
304
295
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: FeatureFlagItemComponent, deps: [{ token: i1.FormGenerator }, { token: i2.MatDialog }, { token: i3.MatSnackBar }, { token: i4.PublicApiService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
305
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.1", type: FeatureFlagItemComponent, selector: "configcat-feature-flag-item", inputs: { productId: "productId", environmentId: "environmentId", configId: "configId", settingId: "settingId", canDeleteSetting: "canDeleteSetting", deleteSettingText: "deleteSettingText", showEnvironmentName: "showEnvironmentName" }, outputs: { deleteSettingRequested: "deleteSettingRequested", loadSucceeded: "loadSucceeded", loadFailed: "loadFailed", saveSucceeded: "saveSucceeded", saveFailed: "saveFailed", expandedStateChanged: "expandedStateChanged", formValuesChanged: "formValuesChanged" }, usesInheritance: true, ngImport: i0, template: "<div class=\"container\">\n <ng-container *ngIf=\"!loading\">\n <form [formGroup]=\"formGroup\" (ngSubmit)=\"submit()\" id=\"feature-flag-form\">\n <div [ngClass]=\"{'invalid-flag': formGroup.invalid}\">\n <app-feature-flag [formGroup]=\"formGroup\" [flagState]=\"flagState\" [segments]=\"segments\"\n (deleteSettingRequested)=\"onDeleteSettingRequested($event)\"\n [featureFlagLimitations]=\"settingFormula.featureFlagLimitations\" [hasOtherEnvironment]=\"false\"\n (subscriptionLimitReached)=\"subscriptionLimitReachedCalled()\"\n (addSegmentConditionRequestedWithoutSegments)=\"addSegmentConditionRequestedWithoutSegments()\"\n (prerequisiteConditionChanged)=\"recalcPrerequisites()\" (recalcAddButtons)=\"recalcAddButtons()\"\n (expandedChanged)=\"expandedChanged($event)\"\n [showEnvironmentName]=\"showEnvironmentName\" [environmentName]=\"settingFormula.environment.name\"\n [deleteSettingText]=\"deleteSettingText\">\n </app-feature-flag>\n </div>\n <div class=\"save\" *ngIf=\"!settingFormula.readOnly && formGroup?.dirty\">\n <button class=\"save-button\" mat-flat-button color=\"warn\" type=\"submit\" [class.animate]=\"formGroup.dirty\"\n [track]=\"['save & publish click', 'feature flags and settings']\">\n <mat-icon>backup</mat-icon> <span> Save & publish changes</span>\n </button>\n <button type=\"button\" class=\"revert-button\" mat-stroked-button (click)=\"revert()\"\n [track]=\"['revert click', 'feature flags and settings']\">\n <span>Revert</span>\n </button>\n <div class=\"feedback\" *ngIf=\"formGroup.touched && formGroup.invalid && showFeedBackMessage\">\n <div class=\"error\" *ngIf=\"formGroup.errors && formGroup.errors.internalServerError\">\n <span>Something went wrong and we could not save your settings. You can try again or <a\n href=\"https://configcat.com/support\" target=\"_blank\" rel=\"noopener noreferrer\">contact\n us.</a></span>\n </div>\n <div class=\"error\" *ngIf=\"!formGroup.errors || !formGroup.errors.internalServerError\">\n <span>Oh no! A feature flag has invalid or missing data. </span>\n </div>\n </div>\n </div>\n </form>\n\n </ng-container>\n</div>", styles: [".container .expand-collapse{--mdc-text-button-container-height: 24px;--mdc-filled-button-container-height: 24px;--mdc-outlined-button-container-height: 24px;--mdc-protected-button-container-height: 24px;--mat-text-button-touch-target-display: none;--mat-filled-button-touch-target-display: none;--mat-protected-button-touch-target-display: none;--mat-outlined-button-touch-target-display: none;margin-left:auto;margin-top:.3rem;display:flex;flex-wrap:nowrap}.container .expand-collapse .btn{font-size:.6em;padding:0 8px;min-width:105px}.container .expand-collapse .btn mat-icon{font-size:14px;width:14px;height:14px;margin-right:4px;color:#838383}.container .expand-collapse .expand{margin-right:6px}.container .read-only-notification{margin-top:.6rem}.container .save{position:sticky;bottom:0;background-color:#fff;display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;z-index:999;padding-top:.5rem;padding-bottom:.5rem}.container .save .save-button{animation:shadow-pulse 1s 3}.container .save .save-button:disabled{animation:none}.container .save>*{margin-top:.5rem;margin-bottom:.5rem;margin-right:.6em}.container .error{color:#f44336;padding:5px;font-size:.9em}.container .error a{color:#f44336;text-decoration:underline}@media (max-width: 750px){.expand-collapse{flex-wrap:wrap!important}.expand-collapse .btn{margin-bottom:2px}}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i9.FeatureFlagComponent, selector: "app-feature-flag", inputs: ["formGroup", "flagState", "segments", "featureFlagLimitations", "hasOtherEnvironment", "environmentName", "showEnvironmentName", "deleteSettingText"], outputs: ["addSegmentConditionRequestedWithoutSegments", "expandedChanged", "deleteSettingRequested", "subscriptionLimitReached", "prerequisiteConditionChanged", "recalcAddButtons"] }, { kind: "directive", type: i10.TrackingDirective, selector: "[track]", inputs: ["track"] }] }); }
|
|
296
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.1", type: FeatureFlagItemComponent, selector: "configcat-feature-flag-item", inputs: { productId: "productId", environmentId: "environmentId", configId: "configId", settingId: "settingId", canDeleteSetting: "canDeleteSetting", deleteSettingText: "deleteSettingText", showEnvironmentName: "showEnvironmentName" }, outputs: { deleteSettingRequested: "deleteSettingRequested", loadSucceeded: "loadSucceeded", loadFailed: "loadFailed", saveSucceeded: "saveSucceeded", saveFailed: "saveFailed", expandedStateChanged: "expandedStateChanged", formValuesChanged: "formValuesChanged" }, usesInheritance: true, ngImport: i0, template: "<div class=\"container\">\n <ng-container *ngIf=\"!loading\">\n <form [formGroup]=\"formGroup\" (ngSubmit)=\"submit()\" id=\"feature-flag-form\">\n <div [ngClass]=\"{'invalid-flag': formGroup.invalid}\">\n <app-feature-flag [formGroup]=\"formGroup\" [flagState]=\"flagState\" [segments]=\"segments\"\n (deleteSettingRequested)=\"onDeleteSettingRequested($event)\"\n [featureFlagLimitations]=\"settingFormula.featureFlagLimitations\" [hasOtherEnvironment]=\"false\"\n (subscriptionLimitReached)=\"subscriptionLimitReachedCalled()\"\n (addSegmentConditionRequestedWithoutSegments)=\"addSegmentConditionRequestedWithoutSegments()\"\n (prerequisiteConditionChanged)=\"recalcPrerequisites()\" (recalcAddButtons)=\"recalcAddButtons()\"\n (expandedChanged)=\"expandedChanged($event)\"\n [showEnvironmentName]=\"showEnvironmentName\" [environmentName]=\"settingFormula.environment.name\"\n [deleteSettingText]=\"deleteSettingText\" [canDeleteSetting]=\"canDeleteSetting\">\n </app-feature-flag>\n </div>\n <div class=\"save\" *ngIf=\"!settingFormula.readOnly && formGroup?.dirty\">\n <button class=\"save-button\" mat-flat-button color=\"warn\" type=\"submit\" [class.animate]=\"formGroup.dirty\"\n [track]=\"['save & publish click', 'feature flags and settings']\">\n <mat-icon>backup</mat-icon> <span> Save & publish changes</span>\n </button>\n <button type=\"button\" class=\"revert-button\" mat-stroked-button (click)=\"revert()\"\n [track]=\"['revert click', 'feature flags and settings']\">\n <span>Revert</span>\n </button>\n <div class=\"feedback\" *ngIf=\"formGroup.touched && formGroup.invalid && showFeedBackMessage\">\n <div class=\"error\" *ngIf=\"formGroup.errors && formGroup.errors.internalServerError\">\n <span>Something went wrong and we could not save your settings. You can try again or <a\n href=\"https://configcat.com/support\" target=\"_blank\" rel=\"noopener noreferrer\">contact\n us.</a></span>\n </div>\n <div class=\"error\" *ngIf=\"!formGroup.errors || !formGroup.errors.internalServerError\">\n <span>Oh no! A feature flag has invalid or missing data. </span>\n </div>\n </div>\n </div>\n </form>\n\n </ng-container>\n</div>", styles: [".container .expand-collapse{--mdc-text-button-container-height: 24px;--mdc-filled-button-container-height: 24px;--mdc-outlined-button-container-height: 24px;--mdc-protected-button-container-height: 24px;--mat-text-button-touch-target-display: none;--mat-filled-button-touch-target-display: none;--mat-protected-button-touch-target-display: none;--mat-outlined-button-touch-target-display: none;margin-left:auto;margin-top:.3rem;display:flex;flex-wrap:nowrap}.container .expand-collapse .btn{font-size:.6em;padding:0 8px;min-width:105px}.container .expand-collapse .btn mat-icon{font-size:14px;width:14px;height:14px;margin-right:4px;color:#838383}.container .expand-collapse .expand{margin-right:6px}.container .read-only-notification{margin-top:.6rem}.container .save{position:sticky;bottom:0;background-color:#fff;display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;z-index:999;padding-top:.5rem;padding-bottom:.5rem}.container .save .save-button{animation:shadow-pulse 1s 3}.container .save .save-button:disabled{animation:none}.container .save>*{margin-top:.5rem;margin-bottom:.5rem;margin-right:.6em}.container .error{color:#f44336;padding:5px;font-size:.9em}.container .error a{color:#f44336;text-decoration:underline}@media (max-width: 750px){.expand-collapse{flex-wrap:wrap!important}.expand-collapse .btn{margin-bottom:2px}}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i9.FeatureFlagComponent, selector: "app-feature-flag", inputs: ["formGroup", "flagState", "segments", "featureFlagLimitations", "hasOtherEnvironment", "environmentName", "showEnvironmentName", "deleteSettingText", "canDeleteSetting"], outputs: ["addSegmentConditionRequestedWithoutSegments", "expandedChanged", "deleteSettingRequested", "subscriptionLimitReached", "prerequisiteConditionChanged", "recalcAddButtons"] }, { kind: "directive", type: i10.TrackingDirective, selector: "[track]", inputs: ["track"] }] }); }
|
|
306
297
|
}
|
|
307
298
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: FeatureFlagItemComponent, decorators: [{
|
|
308
299
|
type: Component,
|
|
309
|
-
args: [{ selector: 'configcat-feature-flag-item', template: "<div class=\"container\">\n <ng-container *ngIf=\"!loading\">\n <form [formGroup]=\"formGroup\" (ngSubmit)=\"submit()\" id=\"feature-flag-form\">\n <div [ngClass]=\"{'invalid-flag': formGroup.invalid}\">\n <app-feature-flag [formGroup]=\"formGroup\" [flagState]=\"flagState\" [segments]=\"segments\"\n (deleteSettingRequested)=\"onDeleteSettingRequested($event)\"\n [featureFlagLimitations]=\"settingFormula.featureFlagLimitations\" [hasOtherEnvironment]=\"false\"\n (subscriptionLimitReached)=\"subscriptionLimitReachedCalled()\"\n (addSegmentConditionRequestedWithoutSegments)=\"addSegmentConditionRequestedWithoutSegments()\"\n (prerequisiteConditionChanged)=\"recalcPrerequisites()\" (recalcAddButtons)=\"recalcAddButtons()\"\n (expandedChanged)=\"expandedChanged($event)\"\n [showEnvironmentName]=\"showEnvironmentName\" [environmentName]=\"settingFormula.environment.name\"\n [deleteSettingText]=\"deleteSettingText\">\n </app-feature-flag>\n </div>\n <div class=\"save\" *ngIf=\"!settingFormula.readOnly && formGroup?.dirty\">\n <button class=\"save-button\" mat-flat-button color=\"warn\" type=\"submit\" [class.animate]=\"formGroup.dirty\"\n [track]=\"['save & publish click', 'feature flags and settings']\">\n <mat-icon>backup</mat-icon> <span> Save & publish changes</span>\n </button>\n <button type=\"button\" class=\"revert-button\" mat-stroked-button (click)=\"revert()\"\n [track]=\"['revert click', 'feature flags and settings']\">\n <span>Revert</span>\n </button>\n <div class=\"feedback\" *ngIf=\"formGroup.touched && formGroup.invalid && showFeedBackMessage\">\n <div class=\"error\" *ngIf=\"formGroup.errors && formGroup.errors.internalServerError\">\n <span>Something went wrong and we could not save your settings. You can try again or <a\n href=\"https://configcat.com/support\" target=\"_blank\" rel=\"noopener noreferrer\">contact\n us.</a></span>\n </div>\n <div class=\"error\" *ngIf=\"!formGroup.errors || !formGroup.errors.internalServerError\">\n <span>Oh no! A feature flag has invalid or missing data. </span>\n </div>\n </div>\n </div>\n </form>\n\n </ng-container>\n</div>", styles: [".container .expand-collapse{--mdc-text-button-container-height: 24px;--mdc-filled-button-container-height: 24px;--mdc-outlined-button-container-height: 24px;--mdc-protected-button-container-height: 24px;--mat-text-button-touch-target-display: none;--mat-filled-button-touch-target-display: none;--mat-protected-button-touch-target-display: none;--mat-outlined-button-touch-target-display: none;margin-left:auto;margin-top:.3rem;display:flex;flex-wrap:nowrap}.container .expand-collapse .btn{font-size:.6em;padding:0 8px;min-width:105px}.container .expand-collapse .btn mat-icon{font-size:14px;width:14px;height:14px;margin-right:4px;color:#838383}.container .expand-collapse .expand{margin-right:6px}.container .read-only-notification{margin-top:.6rem}.container .save{position:sticky;bottom:0;background-color:#fff;display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;z-index:999;padding-top:.5rem;padding-bottom:.5rem}.container .save .save-button{animation:shadow-pulse 1s 3}.container .save .save-button:disabled{animation:none}.container .save>*{margin-top:.5rem;margin-bottom:.5rem;margin-right:.6em}.container .error{color:#f44336;padding:5px;font-size:.9em}.container .error a{color:#f44336;text-decoration:underline}@media (max-width: 750px){.expand-collapse{flex-wrap:wrap!important}.expand-collapse .btn{margin-bottom:2px}}\n"] }]
|
|
300
|
+
args: [{ selector: 'configcat-feature-flag-item', template: "<div class=\"container\">\n <ng-container *ngIf=\"!loading\">\n <form [formGroup]=\"formGroup\" (ngSubmit)=\"submit()\" id=\"feature-flag-form\">\n <div [ngClass]=\"{'invalid-flag': formGroup.invalid}\">\n <app-feature-flag [formGroup]=\"formGroup\" [flagState]=\"flagState\" [segments]=\"segments\"\n (deleteSettingRequested)=\"onDeleteSettingRequested($event)\"\n [featureFlagLimitations]=\"settingFormula.featureFlagLimitations\" [hasOtherEnvironment]=\"false\"\n (subscriptionLimitReached)=\"subscriptionLimitReachedCalled()\"\n (addSegmentConditionRequestedWithoutSegments)=\"addSegmentConditionRequestedWithoutSegments()\"\n (prerequisiteConditionChanged)=\"recalcPrerequisites()\" (recalcAddButtons)=\"recalcAddButtons()\"\n (expandedChanged)=\"expandedChanged($event)\"\n [showEnvironmentName]=\"showEnvironmentName\" [environmentName]=\"settingFormula.environment.name\"\n [deleteSettingText]=\"deleteSettingText\" [canDeleteSetting]=\"canDeleteSetting\">\n </app-feature-flag>\n </div>\n <div class=\"save\" *ngIf=\"!settingFormula.readOnly && formGroup?.dirty\">\n <button class=\"save-button\" mat-flat-button color=\"warn\" type=\"submit\" [class.animate]=\"formGroup.dirty\"\n [track]=\"['save & publish click', 'feature flags and settings']\">\n <mat-icon>backup</mat-icon> <span> Save & publish changes</span>\n </button>\n <button type=\"button\" class=\"revert-button\" mat-stroked-button (click)=\"revert()\"\n [track]=\"['revert click', 'feature flags and settings']\">\n <span>Revert</span>\n </button>\n <div class=\"feedback\" *ngIf=\"formGroup.touched && formGroup.invalid && showFeedBackMessage\">\n <div class=\"error\" *ngIf=\"formGroup.errors && formGroup.errors.internalServerError\">\n <span>Something went wrong and we could not save your settings. You can try again or <a\n href=\"https://configcat.com/support\" target=\"_blank\" rel=\"noopener noreferrer\">contact\n us.</a></span>\n </div>\n <div class=\"error\" *ngIf=\"!formGroup.errors || !formGroup.errors.internalServerError\">\n <span>Oh no! A feature flag has invalid or missing data. </span>\n </div>\n </div>\n </div>\n </form>\n\n </ng-container>\n</div>", styles: [".container .expand-collapse{--mdc-text-button-container-height: 24px;--mdc-filled-button-container-height: 24px;--mdc-outlined-button-container-height: 24px;--mdc-protected-button-container-height: 24px;--mat-text-button-touch-target-display: none;--mat-filled-button-touch-target-display: none;--mat-protected-button-touch-target-display: none;--mat-outlined-button-touch-target-display: none;margin-left:auto;margin-top:.3rem;display:flex;flex-wrap:nowrap}.container .expand-collapse .btn{font-size:.6em;padding:0 8px;min-width:105px}.container .expand-collapse .btn mat-icon{font-size:14px;width:14px;height:14px;margin-right:4px;color:#838383}.container .expand-collapse .expand{margin-right:6px}.container .read-only-notification{margin-top:.6rem}.container .save{position:sticky;bottom:0;background-color:#fff;display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;z-index:999;padding-top:.5rem;padding-bottom:.5rem}.container .save .save-button{animation:shadow-pulse 1s 3}.container .save .save-button:disabled{animation:none}.container .save>*{margin-top:.5rem;margin-bottom:.5rem;margin-right:.6em}.container .error{color:#f44336;padding:5px;font-size:.9em}.container .error a{color:#f44336;text-decoration:underline}@media (max-width: 750px){.expand-collapse{flex-wrap:wrap!important}.expand-collapse .btn{margin-bottom:2px}}\n"] }]
|
|
310
301
|
}], ctorParameters: () => [{ type: i1.FormGenerator }, { type: i2.MatDialog }, { type: i3.MatSnackBar }, { type: i4.PublicApiService }], propDecorators: { productId: [{
|
|
311
302
|
type: Input
|
|
312
303
|
}], environmentId: [{
|
|
@@ -336,4 +327,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.1", ngImpor
|
|
|
336
327
|
}], formValuesChanged: [{
|
|
337
328
|
type: Output
|
|
338
329
|
}] } });
|
|
339
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1mbGFnLWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29uZmlnY2F0LXB1YmxpY2FwaS11aS9zcmMvbGliL3YyL2ZlYXR1cmUtZmxhZy1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbmZpZ2NhdC1wdWJsaWNhcGktdWkvc3JjL2xpYi92Mi9mZWF0dXJlLWZsYWctaXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUd2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBYSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUcvRSxPQUFPLEVBQWdCLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDakcsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFJekYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0RBQWtELENBQUM7Ozs7Ozs7Ozs7OztBQVF6RixNQUFNLE9BQU8sd0JBQXlCLFNBQVEsYUFBYTtJQXdDekQsWUFDVSxhQUE0QixFQUM1QixNQUFpQixFQUNqQixRQUFxQixFQUM3QixnQkFBa0M7UUFFbEMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFMaEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNqQixhQUFRLEdBQVIsUUFBUSxDQUFhO1FBcEN0QixxQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFD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LE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2UvYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VnbWVudExpc3RNb2RlbCwgU2V0dGluZ0RhdGFNb2RlbCwgU2V0dGluZ0Zvcm11bGFNb2RlbCwgVXBkYXRlRXZhbHVhdGlvbkZvcm11bGFNb2RlbCB9IGZyb20gJ25nLWNvbmZpZ2NhdC1wdWJsaWNhcGknO1xuaW1wb3J0IHsgSUZsYWdTdGF0ZSB9IGZyb20gJy4uL19tb2RlbHMvZmxhZy1zdGF0ZSc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJUHJlcmVxdWlzaXRlU2V0dGluZywgVGFyZ2V0aW5nUnVsZUZvcm0sIFVwZGF0ZVNldHRpbmdWYWx1ZUZvcm0gfSBmcm9tICcuLi9fbW9kZWxzL3NldHRpbmctdmFsdWUtZm9ybWdyb3VwJztcbmltcG9ydCB7IFB1YmxpY0FwaVNlcnZpY2UgfSBmcm9tICcuLi9fc2VydmljZXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBmb3JrSm9pbiwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vZGlhbG9ncy9jb25maXJtYXRpb24tZGlhbG9nL2NvbmZpcm1hdGlvbi1kaWFsb2cnO1xuaW1wb3J0IHsgUmVhc29uRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vZGlhbG9ncy9yZWFzb24tZGlhbG9nL3JlYXNvbi1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IEZvcm1HZW5lcmF0b3IgfSBmcm9tICcuLi9fc2VydmljZXMvZm9ybS1nZW5lcmF0b3InO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcbmltcG9ydCB7IFNhdmVTbmFja2JhckNvbXBvbmVudCB9IGZyb20gJy4uL2RpYWxvZ3Mvc2F2ZS1zbmFja2Jhci9zYXZlLXNuYWNrYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEZWxldGVTZXR0aW5nTW9kZWwgfSBmcm9tICcuLi9fbW9kZWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY29uZmlnY2F0LWZlYXR1cmUtZmxhZy1pdGVtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZlYXR1cmUtZmxhZy1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmVhdHVyZS1mbGFnLWl0ZW0uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBGZWF0dXJlRmxhZ0l0ZW1Db21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIEBJbnB1dCgpIHByb2R1Y3RJZCE6IHN0cmluZztcbiAgQElucHV0KCkgZW52aXJvbm1lbnRJZCE6IHN0cmluZztcbiAgQElucHV0KCkgY29uZmlnSWQhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNldHRpbmdJZCE6IG51bWJlcjtcblxuICBASW5wdXQoKSBjYW5EZWxldGVTZXR0aW5nID0gdHJ1ZTtcbiAgQElucHV0KCkgZGVsZXRlU2V0dGluZ1RleHQgPSAnRGVsZXRlIHNldHRpbmcnO1xuICBASW5wdXQoKSBzaG93RW52aXJvbm1lbnROYW1lID0gdHJ1ZTtcblxuICBAT3V0cHV0KCkgZGVsZXRlU2V0dGluZ1JlcXVlc3RlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KCkgbG9hZFN1Y2NlZWRlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGxvYWRGYWlsZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBzYXZlU3VjY2VlZGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgc2F2ZUZhaWxlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGV4cGFuZGVkU3RhdGVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZm9ybVZhbHVlc0NoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgc2VnbWVudHMhOiBTZWdtZW50TGlzdE1vZGVsW107XG4gIGRhc2hib2FyZEJhc2VQYXRoOiBzdHJpbmc7XG4gIGxvYWRpbmcgPSB0cnVlO1xuXG4gIGZvcm1Hcm91cDogRm9ybUdyb3VwPFVwZGF0ZVNldHRpbmdWYWx1ZUZvcm0+O1xuICBmb3JtVmFsdWVDaGFuZ2VzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgc2V0dGluZ3M6IFNldHRpbmdEYXRhTW9kZWxbXTtcblxuICBmbGFnU3RhdGU6IElGbGFnU3RhdGU7XG5cbiAgc2V0dGluZ0Zvcm11bGE6IFNldHRpbmdGb3JtdWxhTW9kZWw7XG4gIHByZXJlcXVpc2l0ZVNldHRpbmdzOiBJUHJlcmVxdWlzaXRlU2V0dGluZ1tdO1xuXG4gIHNob3dGZWVkQmFja01lc3NhZ2UgPSBmYWxzZTtcblxuICBoYXNTZXR0aW5nVmFsdWVzID0gZmFsc2U7XG5cbiAgaGFzT3RoZXJFbnZpcm9ubWVudCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZm9ybUdlbmVyYXRvcjogRm9ybUdlbmVyYXRvcixcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgIHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyLFxuICAgIHB1YmxpY0FwaVNlcnZpY2U6IFB1YmxpY0FwaVNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIocHVibGljQXBpU2VydmljZSk7XG4gICAgdGhpcy5kYXNoYm9hcmRCYXNlUGF0aCA9IHB1YmxpY0FwaVNlcnZpY2UuZ2V0RGFzaGJvYXJkQmFzZVBhdGgoKTtcbiAgfVxuXG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5yZWxvYWRTZXR0aW5nVmFsdWVzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlRm9ybVZhbHVlQ2hhbmdlc1N1YnNjcmlwdGlvbigpO1xuICB9XG5cbiAgcmVsb2FkU2V0dGluZ1ZhbHVlcygpIHtcblxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5jcmVhdGVTZXR0aW5nVmFsdWVzVjJTZXJ2aWNlKClcblxuICAgIGZvcmtKb2luKHtcbiAgICAgIHNlZ21lbnRzOiB0aGlzLmNyZWF0ZVNlZ21lbnRzU2VydmljZSgpLmdldFNlZ21lbnRzKHRoaXMucHJvZHVjdElkKSxcbiAgICAgIHNldHRpbmdzOiB0aGlzLmNyZWF0ZVNldHRpbmdzU2VydmljZSgpLmdldFNldHRpbmdzKHRoaXMuY29uZmlnSWQpLFxuICAgICAgc2V0dGluZ0Zvcm11bGE6IHRoaXMuY3JlYXRlU2V0dGluZ1ZhbHVlc1YyU2VydmljZSgpLmdldFNldHRpbmdWYWx1ZVYyKHRoaXMuZW52aXJvbm1lbnRJZCwgdGhpcy5zZXR0aW5nSWQpXG4gICAgfSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICB0aGlzLnNldHRpbmdzID0gcmVzdWx0LnNldHRpbmdzO1xuICAgICAgdGhpcy5wcmVyZXF1aXNpdGVTZXR0aW5ncyA9IHRoaXMuc2V0dGluZ3MubWFwKHN2ID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzZXR0aW5nSWQ6IHN2LnNldHRpbmdJZCxcbiAgICAgICAgICBrZXk6IHN2LmtleSxcbiAgICAgICAgICBuYW1lOiBzdi5uYW1lLFxuICAgICAgICAgIHNldHRpbmdUeXBlOiBzdi5zZXR0aW5nVHlwZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2VnbWVudHMgPSByZXN1bHQuc2VnbWVudHM7XG4gICAgICB0aGlzLmhhbmRsZUZldGNoZWRTZXR0aW5nVmFsdWVzKHJlc3VsdC5zZXR0aW5nRm9ybXVsYSk7XG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMubG9hZFN1Y2NlZWRlZC5lbWl0KCk7XG4gICAgfSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmxvYWRGYWlsZWQuZW1pdChlcnJvcik7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlRmV0Y2hlZFNldHRpbmdWYWx1ZXMobW9kZWw6IFNldHRpbmdGb3JtdWxhTW9kZWwpIHtcbiAgICB0aGlzLnNldHRpbmdGb3JtdWxhID0gbW9kZWw7XG4gICAgLy8gd2hlbiB3ZSBoYXZlIGxlc3Mgd2UgaGFkIHByZXZpb3VzbHlcbiAgICB0aGlzLmZsYWdTdGF0ZSA9IHtcbiAgICAgIGFkZEJ1dHRvblJlbmRlclN0YXRlOiB7XG4gICAgICAgIGhhc1BlcmNlbnRhZ2VPbmx5UnVsZTogZmFsc2UsXG4gICAgICAgIHJlbmRlclRvcEFkZEJ1dHRvbnM6IGZhbHNlLFxuICAgICAgICBhZGRSdWxlQnV0dG9uVHJhY2tlcjogW11cbiAgICAgIH0sXG4gICAgICByZWFkT25seTogbW9kZWwucmVhZE9ubHksXG4gICAgICBkZXBlbmRlZVNldHRpbmdzOiBbXSxcbiAgICAgIHNldHRpbmdWYWx1ZTogbW9kZWwsXG4gICAgICBwYW5lbEV4cGFuZGVkOiB0cnVlLFxuICAgICAgcHJlcmVxdWlzaXRlU2V0dGluZ3M6IHRoaXMuZ2V0QXZhaWxhYmxlUHJlcmVxdWlzaXRlU2V0dGluZ3MobW9kZWwuc2V0dGluZy5zZXR0aW5nSWQpXG4gICAgfVxuXG4gICAgdGhpcy51bnN1YnNjcmliZUZvcm1WYWx1ZUNoYW5nZXNTdWJzY3JpcHRpb24oKTtcblxuICAgIHRoaXMuY3JlYXRlRm9ybUdyb3VwRnJvbVN0YXRlKHRoaXMuc2V0dGluZ0Zvcm11bGEpO1xuXG4gICAgdGhpcy5mb3JtVmFsdWVDaGFuZ2VzU3Vic2NyaXB0aW9uID0gdGhpcy5mb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmZvcm1WYWx1ZXNDaGFuZ2VkLmVtaXQoKTtcbiAgICB9KVxuXG4gICAgdGhpcy5yZWNhbGNBZGRCdXR0b25zKCk7XG4gICAgdGhpcy5yZWNhbGNQcmVyZXF1aXNpdGVzKCk7XG4gIH1cblxuICB1bnN1YnNjcmliZUZvcm1WYWx1ZUNoYW5nZXNTdWJzY3JpcHRpb24oKSB7XG4gICAgaWYgKHRoaXMuZm9ybVZhbHVlQ2hhbmdlc1N1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5mb3JtVmFsdWVDaGFuZ2VzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLmZvcm1WYWx1ZUNoYW5nZXNTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRm9ybUdyb3VwRnJvbVN0YXRlKG1vZGVsOiBTZXR0aW5nRm9ybXVsYU1vZGVsKSB7XG4gICAgdGhpcy5mb3JtR3JvdXAgPSB0aGlzLmZvcm1HZW5lcmF0b3IuZ2VuZXJhdGVTZXR0aW5nVmFsdWVzRm9ybUdyb3VwKG1vZGVsLCBtb2RlbC5yZWFkT25seSwgdGhpcy5wcmVyZXF1aXNpdGVTZXR0aW5ncywgbW9kZWwuZmVhdHVyZUZsYWdMaW1pdGF0aW9ucyk7XG4gIH1cblxuICBnZXRBdmFpbGFibGVQcmVyZXF1aXNpdGVTZXR0aW5ncyhzZXR0aW5nSWQ6IG51bWJlcikge1xuICAgIHJldHVybiB0aGlzLnByZXJlcXVpc2l0ZVNldHRpbmdzLmZpbHRlcihkcyA9PiBkcy5zZXR0aW5nSWQgIT09IHNldHRpbmdJZCk7XG4gIH1cblxuICByZXZlcnQoKSB7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDb25maXJtYXRpb25EaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgdGl0bGU6ICdSZXZlcnQgdG8gbGFzdCBzYXZlZCBzdGF0ZT8nLFxuICAgICAgICBib2R5OiAnQWxsIGNoYW5nZXMgd2lsbCBiZSBsb3N0LicsXG4gICAgICAgIHllc0J1dHRvbkxhYmVsOiAnUmV2ZXJ0JyxcbiAgICAgICAgbm9CdXR0b25MYWJlbDogJ05vJ1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0ID09PSAneWVzJykge1xuICAgICAgICB0aGlzLnJldmVydERpcnR5VmFsdWVzRnJvbVN0YXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXZlcnREaXJ0eVZhbHVlc0Zyb21TdGF0ZSgpIHtcblxuICAgIGlmICh0aGlzLmZvcm1Hcm91cC5kaXJ0eSkge1xuICAgICAgdGhpcy5mb3JtR3JvdXAuc2V0Q29udHJvbCgnZGVmYXVsdFZhbHVlJyxcbiAgICAgICAgdGhpcy5mb3JtR2VuZXJhdG9yLmdlbmVyYXRlVmFsdWVGb3JtR3JvdXAodGhpcy5zZXR0aW5nRm9ybXVsYS5kZWZhdWx0VmFsdWUsIHRoaXMuc2V0dGluZ0Zvcm11bGEuc2V0dGluZy5zZXR0aW5nVHlwZSwgdGhpcy5zZXR0aW5nRm9ybXVsYS5yZWFkT25seSwgdGhpcy5zZXR0aW5nRm9ybXVsYS5mZWF0dXJlRmxhZ0xpbWl0YXRpb25zKSk7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5zZXRDb250cm9sKCdwZXJjZW50YWdlRXZhbHVhdGlvbkF0dHJpYnV0ZScsXG4gICAgICAgIG5ldyBGb3JtQ29udHJvbCh7IHZhbHVlOiB0aGlzLnNldHRpbmdGb3JtdWxhLnBlcmNlbnRhZ2VFdmFsdWF0aW9uQXR0cmlidXRlLCBkaXNhYmxlZDogdGhpcy5zZXR0aW5nRm9ybXVsYS5yZWFkT25seSB9LCB7IHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLm1heCgxMDAwKV0gfSksKTtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLnNldENvbnRyb2woJ3RhcmdldGluZ1J1bGVzJyxcbiAgICAgICAgbmV3IEZvcm1BcnJheTxGb3JtR3JvdXA8VGFyZ2V0aW5nUnVsZUZvcm0+PihcbiAgICAgICAgICB0aGlzLnNldHRpbmdGb3JtdWxhLnRhcmdldGluZ1J1bGVzLm1hcChmdCA9PiB0aGlzLmZvcm1HZW5lcmF0b3IuZ2VuZXJhdGVUYXJnZXRpbmdSdWxlRm9ybUdyb3VwKGZ0LCB0aGlzLnNldHRpbmdGb3JtdWxhLnNldHRpbmcuc2V0dGluZ1R5cGUsIHRoaXMuc2V0dGluZ0Zvcm11bGEucmVhZE9ubHksIHRoaXMucHJlcmVxdWlzaXRlU2V0dGluZ3MsIHRoaXMuc2V0dGluZ0Zvcm11bGEuZmVhdHVyZUZsYWdMaW1pdGF0aW9ucykpXG4gICAgICAgICkpO1xuICAgICAgdGhpcy5yZWNhbGNBZGRCdXR0b25zKCk7XG4gICAgfVxuXG4gICAgdGhpcy5mb3JtR3JvdXAubWFya0FzUHJpc3RpbmUoKTtcbiAgICB0aGlzLmZvcm1Hcm91cC5tYXJrQXNVbnRvdWNoZWQoKTtcbiAgICB0aGlzLnJlY2FsY1ByZXJlcXVpc2l0ZXMoKTtcbiAgICB0aGlzLnNob3dGZWVkQmFja01lc3NhZ2UgPSBmYWxzZTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICBpZiAoIXRoaXMuZm9ybUdyb3VwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmZvcm1Hcm91cC52YWxpZCkge1xuICAgICAgdGhpcy5zaG93RmVlZEJhY2tNZXNzYWdlID0gdHJ1ZTtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNob3dGZWVkQmFja01lc3NhZ2UgPSBmYWxzZTtcbiAgICBjb25zdCB2YWx1ZTogVXBkYXRlRXZhbHVhdGlvbkZvcm11bGFNb2RlbCA9IHtcbiAgICAgIC4uLnRoaXMuZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCksXG4gICAgfTtcblxuICAgIHRoaXMudXBkYXRlU2V0dGluZ1ZhbHVlcyh2YWx1ZSk7XG4gIH1cblxuICB1cGRhdGVTZXR0aW5nVmFsdWVzKHVwZGF0ZU1vZGVsOiBVcGRhdGVFdmFsdWF0aW9uRm9ybXVsYU1vZGVsLCByZWFzb246IHN0cmluZyA9IG51bGwpIHtcblxuICAgIHRoaXMuY3JlYXRlU2V0dGluZ1ZhbHVlc1YyU2VydmljZSgpLnJlcGxhY2VTZXR0aW5nVmFsdWVWMih0aGlzLmVudmlyb25tZW50SWQsIHRoaXMuc2V0dGluZ0lkLCB1cGRhdGVNb2RlbCwgcmVhc29uKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IHNldHRpbmdWYWx1ZXMgPT4ge1xuICAgICAgICAgIHRoaXMuaGFuZGxlRmV0Y2hlZFNldHRpbmdWYWx1ZXMoc2V0dGluZ1ZhbHVlcyk7XG5cbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW5Gcm9tQ29tcG9uZW50KFNhdmVTbmFja2JhckNvbXBvbmVudCwgeyBkdXJhdGlvbjogNTAwMCwgcGFuZWxDbGFzczogJ2dyZWVuLXNuYWNrYmFyJyB9KTtcbiAgICAgICAgICB0aGlzLnNhdmVTdWNjZWVkZWQuZW1pdCgpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG5cbiAgICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDAgJiYgZXJyb3IuZXJyb3IgJiYgZXJyb3IuZXJyb3IuUmVhc29uICYmIGVycm9yLmVycm9yLlJlYXNvblswXSA9PT0gJ1JlYXNvbiByZXF1aXJlZC4nKSB7XG4gICAgICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFJlYXNvbkRpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICAgICAgICB3aWR0aDogJzQ1MHB4J1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKVxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuYnV0dG9uID09PSAnc2F2ZScgJiYgcmVzdWx0LnJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTZXR0aW5nVmFsdWVzKHVwZGF0ZU1vZGVsLCByZXN1bHQucmVhc29uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwMCAmJiBlcnJvci5lcnJvciAmJiBlcnJvci5lcnJvci5TZWdtZW50Q29uZGl0aW9uICYmIGVycm9yLmVycm9yLlNlZ21lbnRDb25kaXRpb25bMF0gPT09ICdTZWdtZW50IG5vdCBmb3VuZC4nKSB7XG4gICAgICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENvbmZpcm1hdGlvbkRpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICAgICAgICB3aWR0aDogJzQ1MHB4JyxcbiAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIHRpdGxlOiAnQ2Fubm90IHNhdmUgZmVhdHVyZSBmbGFncycsXG4gICAgICAgICAgICAgICAgYm9keTogJ0Egc2VnbWVudCByZWZlcmVuY2VkIGJ5IG9uZSBvZiB5b3VyIGZlYXR1cmUgZmxhZ3MgaGFzIGJlZW4gZGVsZXRlZC4gUmVsb2FkIHRoZSBjb25maWcgdG8gc2VlIGl0cyBsYXRlc3Qgc3RhdGUsIGFwcGx5IHlvdXIgY2hhbmdlcyBhbmQgdHJ5IHRoZSBzYXZlIGFnYWluLicsXG4gICAgICAgICAgICAgICAgeWVzQnV0dG9uTGFiZWw6ICdSZWxvYWQnLFxuICAgICAgICAgICAgICAgIGhpZGVOb0J1dHRvbjogdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVsb2FkU2V0dGluZ1ZhbHVlcygpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDAgJiYgZXJyb3IuZXJyb3IgJiYgKCcnICsgZXJyb3IuZXJyb3IpLnN0YXJ0c1dpdGgoJ0NpcmN1bGFyIGRlcGVuZGVuY3kgZGV0ZWN0ZWQuJykpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9ICgnJyArIGVycm9yLmVycm9yKS5zbGljZSgnQ2lyY3VsYXIgZGVwZW5kZW5jeSBkZXRlY3RlZC4nLmxlbmd0aCArIDEpO1xuICAgICAgICAgICAgdGhpcy5kaWFsb2cub3BlbihDb25maXJtYXRpb25EaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgICAgICAgd2lkdGg6ICc0NTBweCcsXG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICB0aXRsZTogJ0Nhbm5vdCBzYXZlIGZlYXR1cmUgZmxhZ3MuJyxcbiAgICAgICAgICAgICAgICBib2R5OiAnQ2lyY3VsYXIgZGVwZW5kZW5jeSBkZXRlY3RlZCBiZXR3ZWVuIHRoZSBmb2xsb3dpbmcgZmVhdHVyZSBmbGFnczo8cD4nICsgZXJyb3JNZXNzYWdlICsgJzwvcD5QbGVhc2UgPHN0cm9uZz5lbGltaW5hdGUgdGhlIGNpcmN1bGFyIGRlcGVuZGVuY3k8L3N0cm9uZz4gYmVmb3JlIHNhdmluZyB5b3VyIGZlYXR1cmUgZmxhZ3MuJyxcbiAgICAgICAgICAgICAgICB5ZXNCdXR0b25MYWJlbDogJ0kgdW5kZXJzdGFuZCcsXG4gICAgICAgICAgICAgICAgaGlkZU5vQnV0dG9uOiB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnNldEVycm9ycyh7IGludGVybmFsU2VydmVyRXJyb3I6ICdJbnRlcm5hbCBzZXJ2ZXIgZXJyb3InIH0pO1xuICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgICB0aGlzLnNob3dGZWVkQmFja01lc3NhZ2UgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuc2F2ZUZhaWxlZC5lbWl0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgb25EZWxldGVTZXR0aW5nUmVxdWVzdGVkKHNldHRpbmcpIHtcbiAgICBpZiAodGhpcy5mb3JtR3JvdXAuZGlydHkpIHtcbiAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQ29uZmlybWF0aW9uRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICB0aXRsZTogJ0Rpc2NhcmQgY2hhbmdlcz8nLFxuICAgICAgICAgIGJvZHk6ICdZb3UgaGF2ZSB1bnNhdmVkIGZlYXR1cmUgZmxhZyBjaGFuZ2VzLiBJZiB5b3UgY29udGludWUsIHVuc2F2ZWQgY2hhbmdlcyB3aWxsIGJlIGxvc3QuJyxcbiAgICAgICAgICB5ZXNCdXR0b25MYWJlbDogJ0Rpc2NhcmQgY2hhbmdlcycsXG4gICAgICAgICAgbm9CdXR0b25MYWJlbDogJ05vJ1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKClcbiAgICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09ICd5ZXMnKSB7XG4gICAgICAgICAgICB0aGlzLnJldmVydERpcnR5VmFsdWVzRnJvbVN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZVNldHRpbmdJbnRlcm5hbChzZXR0aW5nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlbGV0ZVNldHRpbmdJbnRlcm5hbChzZXR0aW5nKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZVNldHRpbmdJbnRlcm5hbChzZXR0aW5nKSB7XG4gICAgdGhpcy5kZWxldGVTZXR0aW5nUmVxdWVzdGVkLmVtaXQoPERlbGV0ZVNldHRpbmdNb2RlbD57IGNvbmZpZzogdGhpcy5zZXR0aW5nRm9ybXVsYS5jb25maWcsIGVudmlyb25tZW50OiB0aGlzLnNldHRpbmdGb3JtdWxhLmVudmlyb25tZW50LCBzZXR0aW5nOiBzZXR0aW5nLnNldHRpbmcgfSlcbiAgfVxuXG4gIHN1YnNjcmlwdGlvbkxpbWl0UmVhY2hlZENhbGxlZCgpIHtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENvbmZpcm1hdGlvbkRpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgZGF0YToge1xuICAgICAgICB0aXRsZTogJ1lvdSBoYXZlIHJlYWNoZWQgdGhlIGxpbWl0cyBvZiB5b3VyIHBsYW4nLFxuICAgICAgICBib2R5OiBgIFVwZ3JhZGUgeW91ciBwbGFuIG9yIGpvaW4gb3VyIDxhIGhyZWY9XCJodHRwczovL2NvbmZpZ2NhdC5jb20vcmVmZXJyYWxzXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPnJlZmVycmFsIHByb2dyYW08L2E+IHRvIGluY3JlYXNlIHlvdXIgbGltaXRzLmAsXG4gICAgICAgIHllc0J1dHRvbkxhYmVsOiBgU2VlIHBsYW5zYCxcbiAgICAgICAgbm9CdXR0b25MYWJlbDogYENsb3NlYFxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0ID09PSAneWVzJykge1xuICAgICAgICBjb25zdCBwbGFuc1VybCA9IHRoaXMuZGFzaGJvYXJkQmFzZVBhdGggKyBcIi9vcmdhbml6YXRpb24vcGxhbnNcIlxuICAgICAgICB3aW5kb3cub3BlbihwbGFuc1VybCwgJ19ibGFuaycpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYWRkU2VnbWVudENvbmRpdGlvblJlcXVlc3RlZFdpdGhvdXRTZWdtZW50cygpIHtcbiAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQ29uZmlybWF0aW9uRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIHRpdGxlOiAnVGhlcmUgYXJlIG5vIHNlZ21lbnRzIGluIHRoaXMgcHJvZHVjdCB5ZXQuJyxcbiAgICAgICAgYm9keTogYEdvIGFoZWFkIHRvIHRoZSBDb25maUNhdCBEYXNoYm9hcmQgYW5kIGNyZWF0ZSB5b3VyIGZpcnN0IHVzZXIgc2VnbWVudCBiZWZvcmUgYWRkaW5nIGl0IHRvIGEgdGFyZ2V0aW5nIHJ1bGUuYCxcbiAgICAgICAgeWVzQnV0dG9uTGFiZWw6IGBHbyB0byB0aGUgZGFzaGJvYXJkYCxcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCA9PT0gJ3llcycpIHtcbiAgICAgICAgY29uc3Qgc2VnbWVudFVybCA9IHRoaXMuZGFzaGJvYXJkQmFzZVBhdGggKyBcIi9wcm9kdWN0L1wiICsgdGhpcy5wcm9kdWN0SWQgKyBcIi9zZWdtZW50c1wiXG4gICAgICAgIHdpbmRvdy5vcGVuKHNlZ21lbnRVcmwsICdfYmxhbmsnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHRyYWNrQnlJbmRleChpbmRleDogbnVtYmVyKTogYW55IHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICByZWNhbGNQcmVyZXF1aXNpdGVzKCk6IHZvaWQge1xuICAgIGNvbnN0IHNldHRpbmdWYWx1ZSA9IHRoaXMuc2V0dGluZ0Zvcm11bGE7XG4gICAgdGhpcy5mbGFnU3RhdGUuZGVwZW5kZWVTZXR0aW5ncyA9IHRoaXMuc2V0dGluZ3MuZmlsdGVyKHMgPT4gc2V0dGluZ1ZhbHVlLnNldHRpbmdJZHNXaGVyZVByZXJlcXVpc2l0ZT8uaW5jbHVkZXMocy5zZXR0aW5nSWQpKVxuICAgICAgLm1hcChzID0+IHsgcmV0dXJuIHsga2V5OiBzLmtleSwgbmFtZTogcy5uYW1lLCBzZXR0aW5nSWQ6IHMuc2V0dGluZ0lkIH0gfSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmVjYWxjQWRkQnV0dG9ucygpOiB2b2lkIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZmxhZ1N0YXRlO1xuICAgIGNvbnN0IGdyb3VwID0gdGhpcy5mb3JtR3JvdXA7XG5cbiAgICBzdGF0ZS5hZGRCdXR0b25SZW5kZXJTdGF0ZS5yZW5kZXJUb3BBZGRCdXR0b25zID0gIWdyb3VwLmNvbnRyb2xzLnRhcmdldGluZ1J1bGVzLmNvbnRyb2xzLmxlbmd0aCB8fFxuICAgICAgdGhpcy5oYXNPbmx5UGVyY2VudGFnZVJ1bGUoZ3JvdXApO1xuXG4gICAgaWYgKCFncm91cC5jb250cm9scy50YXJnZXRpbmdSdWxlcy5jb250cm9scy5sZW5ndGgpIHtcbiAgICAgIHN0YXRlLmFkZEJ1dHRvblJlbmRlclN0YXRlLmFkZFJ1bGVCdXR0b25UcmFja2VyID0gW107XG4gICAgICBzdGF0ZS5hZGRCdXR0b25SZW5kZXJTdGF0ZS5oYXNQZXJjZW50YWdlT25seVJ1bGUgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaGFzUGVyY09ubHkgPSBzdGF0ZS5hZGRCdXR0b25SZW5kZXJTdGF0ZS5oYXNQZXJjZW50YWdlT25seVJ1bGUgPSBncm91cC5jb250cm9scy50YXJnZXRpbmdSdWxlcy5jb250cm9scy5sZW5ndGggPiAwXG4gICAgICAgICYmIHRoaXMuZm9ybUdlbmVyYXRvci5pc1BlcmNlbnRhZ2VPbmx5VGFyZ2V0aW5nUnVsZShncm91cC5jb250cm9scy50YXJnZXRpbmdSdWxlcy5jb250cm9sc1tncm91cC5jb250cm9scy50YXJnZXRpbmdSdWxlcy5jb250cm9scy5sZW5ndGggLSAxXSk7XG4gICAgICBzdGF0ZS5hZGRCdXR0b25SZW5kZXJTdGF0ZS5hZGRSdWxlQnV0dG9uVHJhY2tlciA9IGdyb3VwLmNvbnRyb2xzLnRhcmdldGluZ1J1bGVzLmNvbnRyb2xzLm1hcCgoaXRlbSwgaSwgcnVsZXMpID0+IHtcbiAgICAgICAgY29uc3QgaXNMYXN0UnVsZSA9IGkgPT09IGdyb3VwLmNvbnRyb2xzLnRhcmdldGluZ1J1bGVzLmNvbnRyb2xzLmxlbmd0aCAtIDE7XG4gICAgICAgIGNvbnN0IGlzQmVmb3JlTGFzdCA9IGkgPT09IGdyb3VwLmNvbnRyb2xzLnRhcmdldGluZ1J1bGVzLmNvbnRyb2xzLmxlbmd0aCAtIDI7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2hvd0FkZFJ1bGVCdXR0b25zOiBoYXNQZXJjT25seSA/IGkgPT09IHJ1bGVzLmxlbmd0aCAtIDIgOiBpID09PSBydWxlcy5sZW5ndGggLSAxLFxuICAgICAgICAgIHNob3dPckNoaXA6IGhhc1BlcmNPbmx5ID8gaSA8IHJ1bGVzLmxlbmd0aCAtIDIgOiBpIDwgcnVsZXMubGVuZ3RoIC0gMSxcbiAgICAgICAgICByZW5kZXJTZXBhcmF0aW9uQXJlYTogdGhpcy5mb3JtR2VuZXJhdG9yLmlzUGVyY2VudGFnZU9ubHlUYXJnZXRpbmdSdWxlKGl0ZW0pIHx8XG4gICAgICAgICAgICAodGhpcy5zZXR0aW5nRm9ybXVsYS5yZWFkT25seSAmJiAoaXNMYXN0UnVsZSB8fCAoaGFzUGVyY09ubHkgJiYgaXNCZWZvcmVMYXN0KSkpLFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBoYXNPbmx5UGVyY2VudGFnZVJ1bGUoZ3JvdXA6IEZvcm1Hcm91cDxVcGRhdGVTZXR0aW5nVmFsdWVGb3JtPik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBncm91cC5jb250cm9scy50YXJnZXRpbmdSdWxlcy5jb250cm9scy5sZW5ndGggPT09IDEgJiZcbiAgICAgIHRoaXMuZm9ybUdlbmVyYXRvci5pc1BlcmNlbnRhZ2VPbmx5VGFyZ2V0aW5nUnVsZShncm91cC5jb250cm9scy50YXJnZXRpbmdSdWxlcy5jb250cm9sc1swXSlcbiAgfVxuXG4gIGV4cGFuZGVkQ2hhbmdlZChleHBhbmRlZFN0YXRlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5mbGFnU3RhdGUucGFuZWxFeHBhbmRlZCA9IGV4cGFuZGVkU3RhdGU7XG4gICAgdGhpcy5leHBhbmRlZFN0YXRlQ2hhbmdlZC5lbWl0KCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxvYWRpbmdcIj5cbiAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIiAobmdTdWJtaXQpPVwic3VibWl0KClcIiBpZD1cImZlYXR1cmUtZmxhZy1mb3JtXCI+XG4gICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnaW52YWxpZC1mbGFnJzogZm9ybUdyb3VwLmludmFsaWR9XCI+XG4gICAgICAgICAgICAgICAgPGFwcC1mZWF0dXJlLWZsYWcgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIiBbZmxhZ1N0YXRlXT1cImZsYWdTdGF0ZVwiIFtzZWdtZW50c109XCJzZWdtZW50c1wiXG4gICAgICAgICAgICAgICAgICAgIChkZWxldGVTZXR0aW5nUmVxdWVzdGVkKT1cIm9uRGVsZXRlU2V0dGluZ1JlcXVlc3RlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2ZlYXR1cmVGbGFnTGltaXRhdGlvbnNdPVwic2V0dGluZ0Zvcm11bGEuZmVhdHVyZUZsYWdMaW1pdGF0aW9uc1wiIFtoYXNPdGhlckVudmlyb25tZW50XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgKHN1YnNjcmlwdGlvbkxpbWl0UmVhY2hlZCk9XCJzdWJzY3JpcHRpb25MaW1pdFJlYWNoZWRDYWxsZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgIChhZGRTZWdtZW50Q29uZGl0aW9uUmVxdWVzdGVkV2l0aG91dFNlZ21lbnRzKT1cImFkZFNlZ21lbnRDb25kaXRpb25SZXF1ZXN0ZWRXaXRob3V0U2VnbWVudHMoKVwiXG4gICAgICAgICAgICAgICAgICAgIChwcmVyZXF1aXNpdGVDb25kaXRpb25DaGFuZ2VkKT1cInJlY2FsY1ByZXJlcXVpc2l0ZXMoKVwiIChyZWNhbGNBZGRCdXR0b25zKT1cInJlY2FsY0FkZEJ1dHRvbnMoKVwiXG4gICAgICAgICAgICAgICAgICAgIChleHBhbmRlZENoYW5nZWQpPVwiZXhwYW5kZWRDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbc2hvd0Vudmlyb25tZW50TmFtZV09XCJzaG93RW52aXJvbm1lbnROYW1lXCIgW2Vudmlyb25tZW50TmFtZV09XCJzZXR0aW5nRm9ybXVsYS5lbnZpcm9ubWVudC5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW2RlbGV0ZVNldHRpbmdUZXh0XT1cImRlbGV0ZVNldHRpbmdUZXh0XCI+XG4gICAgICAgICAgICAgICAgPC9hcHAtZmVhdHVyZS1mbGFnPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2F2ZVwiICpuZ0lmPVwiIXNldHRpbmdGb3JtdWxhLnJlYWRPbmx5ICYmIGZvcm1Hcm91cD8uZGlydHlcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2F2ZS1idXR0b25cIiBtYXQtZmxhdC1idXR0b24gY29sb3I9XCJ3YXJuXCIgdHlwZT1cInN1Ym1pdFwiIFtjbGFzcy5hbmltYXRlXT1cImZvcm1Hcm91cC5kaXJ0eVwiXG4gICAgICAgICAgICAgICAgICAgIFt0cmFja109XCJbJ3NhdmUgJiBwdWJsaXNoIGNsaWNrJywgJ2ZlYXR1cmUgZmxhZ3MgYW5kIHNldHRpbmdzJ11cIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmJhY2t1cDwvbWF0LWljb24+IDxzcGFuPiBTYXZlICYgcHVibGlzaCBjaGFuZ2VzPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwicmV2ZXJ0LWJ1dHRvblwiIG1hdC1zdHJva2VkLWJ1dHRvbiAoY2xpY2spPVwicmV2ZXJ0KClcIlxuICAgICAgICAgICAgICAgICAgICBbdHJhY2tdPVwiWydyZXZlcnQgY2xpY2snLCAnZmVhdHVyZSBmbGFncyBhbmQgc2V0dGluZ3MnXVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5SZXZlcnQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZlZWRiYWNrXCIgKm5nSWY9XCJmb3JtR3JvdXAudG91Y2hlZCAmJiBmb3JtR3JvdXAuaW52YWxpZCAmJiBzaG93RmVlZEJhY2tNZXNzYWdlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlcnJvclwiICpuZ0lmPVwiZm9ybUdyb3VwLmVycm9ycyAmJiBmb3JtR3JvdXAuZXJyb3JzLmludGVybmFsU2VydmVyRXJyb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB3ZSBjb3VsZCBub3Qgc2F2ZSB5b3VyIHNldHRpbmdzLiBZb3UgY2FuIHRyeSBhZ2FpbiBvciA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPVwiaHR0cHM6Ly9jb25maWdjYXQuY29tL3N1cHBvcnRcIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+Y29udGFjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cy48L2E+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVycm9yXCIgKm5nSWY9XCIhZm9ybUdyb3VwLmVycm9ycyB8fCAhZm9ybUdyb3VwLmVycm9ycy5pbnRlcm5hbFNlcnZlckVycm9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5PaCBubyEgQSBmZWF0dXJlIGZsYWcgaGFzIGludmFsaWQgb3IgbWlzc2luZyBkYXRhLiZuYnNwOzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9mb3JtPlxuXG4gICAgPC9uZy1jb250YWluZXI+XG48L2Rpdj4iXX0=
|
|
330
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1mbGFnLWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29uZmlnY2F0LXB1YmxpY2FwaS11aS9zcmMvbGliL3YyL2ZlYXR1cmUtZmxhZy1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbmZpZ2NhdC1wdWJsaWNhcGktdWkvc3JjL2xpYi92Mi9mZWF0dXJlLWZsYWctaXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUd2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBYSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUcvRSxPQUFPLEVBQWdCLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDakcsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFJekYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFFekYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sY0FBYyxDQUFDOzs7Ozs7Ozs7Ozs7QUFPdEQsTUFBTSxPQUFPLHdCQUF5QixTQUFRLGFBQWE7SUF3Q3pELFlBQ1UsYUFBNEIsRUFDNUIsTUFBaUIsRUFDakIsUUFBcUIsRUFDN0IsZ0JBQWtDO1FBRWxDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBTGhCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDakIsYUFBUSxHQUFS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Q0FBQyxNQUFNLEtBQUssQ0FBQztZQUN4RCxJQUFJLENBQUMsYUFBYSxDQUFDLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQy9GLENBQUM7SUFFRCxlQUFlLENBQUMsYUFBc0I7UUFDcEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQzdDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNuQyxDQUFDOzhHQTNWVSx3QkFBd0I7a0dBQXhCLHdCQUF3Qiwra0JDdEJyQyxnc0ZBc0NNOzsyRkRoQk8sd0JBQXdCO2tCQUxwQyxTQUFTOytCQUNFLDZCQUE2QjttS0FNOUIsU0FBUztzQkFBakIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFFRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFFSSxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBRUcsYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vYmFzZS9iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWdtZW50TGlzdE1vZGVsLCBTZXR0aW5nRGF0YU1vZGVsLCBTZXR0aW5nRm9ybXVsYU1vZGVsLCBVcGRhdGVFdmFsdWF0aW9uRm9ybXVsYU1vZGVsIH0gZnJvbSAnbmctY29uZmlnY2F0LXB1YmxpY2FwaSc7XG5pbXBvcnQgeyBJRmxhZ1N0YXRlIH0gZnJvbSAnLi4vX21vZGVscy9mbGFnLXN0YXRlJztcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElQcmVyZXF1aXNpdGVTZXR0aW5nLCBUYXJnZXRpbmdSdWxlRm9ybSwgVXBkYXRlU2V0dGluZ1ZhbHVlRm9ybSB9IGZyb20gJy4uL19tb2RlbHMvc2V0dGluZy12YWx1ZS1mb3JtZ3JvdXAnO1xuaW1wb3J0IHsgUHVibGljQXBpU2VydmljZSB9IGZyb20gJy4uL19zZXJ2aWNlcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGZvcmtKb2luLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb25maXJtYXRpb25EaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9kaWFsb2dzL2NvbmZpcm1hdGlvbi1kaWFsb2cvY29uZmlybWF0aW9uLWRpYWxvZyc7XG5pbXBvcnQgeyBSZWFzb25EaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9kaWFsb2dzL3JlYXNvbi1kaWFsb2cvcmVhc29uLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9ybUdlbmVyYXRvciB9IGZyb20gJy4uL19zZXJ2aWNlcy9mb3JtLWdlbmVyYXRvcic7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xuaW1wb3J0IHsgU2F2ZVNuYWNrYmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vZGlhbG9ncy9zYXZlLXNuYWNrYmFyL3NhdmUtc25hY2tiYXIuY29tcG9uZW50JztcbmltcG9ydCB7IERlbGV0ZVNldHRpbmdNb2RlbCB9IGZyb20gJy4uL19tb2RlbHMnO1xuaW1wb3J0IHsgUmVyb3V0ZURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2Jvb3RzdHJhcCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NvbmZpZ2NhdC1mZWF0dXJlLWZsYWctaXRlbScsXG4gIHRlbXBsYXRlVXJsOiAnLi9mZWF0dXJlLWZsYWctaXRlbS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ZlYXR1cmUtZmxhZy1pdGVtLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgRmVhdHVyZUZsYWdJdGVtQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBASW5wdXQoKSBwcm9kdWN0SWQhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGVudmlyb25tZW50SWQhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNvbmZpZ0lkITogc3RyaW5nO1xuICBASW5wdXQoKSBzZXR0aW5nSWQhOiBudW1iZXI7XG5cbiAgQElucHV0KCkgY2FuRGVsZXRlU2V0dGluZyA9IHRydWU7XG4gIEBJbnB1dCgpIGRlbGV0ZVNldHRpbmdUZXh0ID0gJ0RlbGV0ZSBzZXR0aW5nJztcbiAgQElucHV0KCkgc2hvd0Vudmlyb25tZW50TmFtZSA9IHRydWU7XG5cbiAgQE91dHB1dCgpIGRlbGV0ZVNldHRpbmdSZXF1ZXN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpIGxvYWRTdWNjZWVkZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBsb2FkRmFpbGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgc2F2ZVN1Y2NlZWRlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHNhdmVGYWlsZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBleHBhbmRlZFN0YXRlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGZvcm1WYWx1ZXNDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHNlZ21lbnRzITogU2VnbWVudExpc3RNb2RlbFtdO1xuICBkYXNoYm9hcmRCYXNlUGF0aDogc3RyaW5nO1xuICBsb2FkaW5nID0gdHJ1ZTtcblxuICBmb3JtR3JvdXA6IEZvcm1Hcm91cDxVcGRhdGVTZXR0aW5nVmFsdWVGb3JtPjtcbiAgZm9ybVZhbHVlQ2hhbmdlc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIHNldHRpbmdzOiBTZXR0aW5nRGF0YU1vZGVsW107XG5cbiAgZmxhZ1N0YXRlOiBJRmxhZ1N0YXRlO1xuXG4gIHNldHRpbmdGb3JtdWxhOiBTZXR0aW5nRm9ybXVsYU1vZGVsO1xuICBwcmVyZXF1aXNpdGVTZXR0aW5nczogSVByZXJlcXVpc2l0ZVNldHRpbmdbXTtcblxuICBzaG93RmVlZEJhY2tNZXNzYWdlID0gZmFsc2U7XG5cbiAgaGFzU2V0dGluZ1ZhbHVlcyA9IGZhbHNlO1xuXG4gIGhhc090aGVyRW52aXJvbm1lbnQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZvcm1HZW5lcmF0b3I6IEZvcm1HZW5lcmF0b3IsXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0JhcixcbiAgICBwdWJsaWNBcGlTZXJ2aWNlOiBQdWJsaWNBcGlTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKHB1YmxpY0FwaVNlcnZpY2UpO1xuICAgIHRoaXMuZGFzaGJvYXJkQmFzZVBhdGggPSBwdWJsaWNBcGlTZXJ2aWNlLmdldERhc2hib2FyZEJhc2VQYXRoKCk7XG4gIH1cblxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMucmVsb2FkU2V0dGluZ1ZhbHVlcygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy51bnN1YnNjcmliZUZvcm1WYWx1ZUNoYW5nZXNTdWJzY3JpcHRpb24oKTtcbiAgfVxuXG4gIHJlbG9hZFNldHRpbmdWYWx1ZXMoKSB7XG5cbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuY3JlYXRlU2V0dGluZ1ZhbHVlc1YyU2VydmljZSgpXG5cbiAgICBmb3JrSm9pbih7XG4gICAgICBzZWdtZW50czogdGhpcy5jcmVhdGVTZWdtZW50c1NlcnZpY2UoKS5nZXRTZWdtZW50cyh0aGlzLnByb2R1Y3RJZCksXG4gICAgICBzZXR0aW5nczogdGhpcy5jcmVhdGVTZXR0aW5nc1NlcnZpY2UoKS5nZXRTZXR0aW5ncyh0aGlzLmNvbmZpZ0lkKSxcbiAgICAgIHNldHRpbmdGb3JtdWxhOiB0aGlzLmNyZWF0ZVNldHRpbmdWYWx1ZXNWMlNlcnZpY2UoKS5nZXRTZXR0aW5nVmFsdWVWMih0aGlzLmVudmlyb25tZW50SWQsIHRoaXMuc2V0dGluZ0lkKVxuICAgIH0pLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgdGhpcy5zZXR0aW5ncyA9IHJlc3VsdC5zZXR0aW5ncztcbiAgICAgIHRoaXMucHJlcmVxdWlzaXRlU2V0dGluZ3MgPSB0aGlzLnNldHRpbmdzLm1hcChzdiA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2V0dGluZ0lkOiBzdi5zZXR0aW5nSWQsXG4gICAgICAgICAga2V5OiBzdi5rZXksXG4gICAgICAgICAgbmFtZTogc3YubmFtZSxcbiAgICAgICAgICBzZXR0aW5nVHlwZTogc3Yuc2V0dGluZ1R5cGVcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLnNlZ21lbnRzID0gcmVzdWx0LnNlZ21lbnRzO1xuICAgICAgdGhpcy5oYW5kbGVGZXRjaGVkU2V0dGluZ1ZhbHVlcyhyZXN1bHQuc2V0dGluZ0Zvcm11bGEpO1xuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmxvYWRTdWNjZWVkZWQuZW1pdCgpO1xuICAgIH0sXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkRmFpbGVkLmVtaXQoZXJyb3IpO1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XG4gICAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZUZldGNoZWRTZXR0aW5nVmFsdWVzKG1vZGVsOiBTZXR0aW5nRm9ybXVsYU1vZGVsKSB7XG4gICAgdGhpcy5zZXR0aW5nRm9ybXVsYSA9IG1vZGVsO1xuICAgIC8vIHdoZW4gd2UgaGF2ZSBsZXNzIHdlIGhhZCBwcmV2aW91c2x5XG4gICAgdGhpcy5mbGFnU3RhdGUgPSB7XG4gICAgICBhZGRCdXR0b25SZW5kZXJTdGF0ZToge1xuICAgICAgICBoYXNQZXJjZW50YWdlT25seVJ1bGU6IGZhbHNlLFxuICAgICAgICByZW5kZXJUb3BBZGRCdXR0b25zOiBmYWxzZSxcbiAgICAgICAgYWRkUnVsZUJ1dHRvblRyYWNrZXI6IFtdXG4gICAgICB9LFxuICAgICAgcmVhZE9ubHk6IG1vZGVsLnJlYWRPbmx5LFxuICAgICAgZGVwZW5kZWVTZXR0aW5nczogW10sXG4gICAgICBzZXR0aW5nVmFsdWU6IG1vZGVsLFxuICAgICAgcGFuZWxFeHBhbmRlZDogdHJ1ZSxcbiAgICAgIHByZXJlcXVpc2l0ZVNldHRpbmdzOiB0aGlzLmdldEF2YWlsYWJsZVByZXJlcXVpc2l0ZVNldHRpbmdzKG1vZGVsLnNldHRpbmcuc2V0dGluZ0lkKVxuICAgIH1cblxuICAgIHRoaXMudW5zdWJzY3JpYmVGb3JtVmFsdWVDaGFuZ2VzU3Vic2NyaXB0aW9uKCk7XG5cbiAgICB0aGlzLmNyZWF0ZUZvcm1Hcm91cEZyb21TdGF0ZSh0aGlzLnNldHRpbmdGb3JtdWxhKTtcblxuICAgIHRoaXMuZm9ybVZhbHVlQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IHRoaXMuZm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5mb3JtVmFsdWVzQ2hhbmdlZC5lbWl0KCk7XG4gICAgfSlcblxuICAgIHRoaXMucmVjYWxjQWRkQnV0dG9ucygpO1xuICAgIHRoaXMucmVjYWxjUHJlcmVxdWlzaXRlcygpO1xuICB9XG5cbiAgdW5zdWJzY3JpYmVGb3JtVmFsdWVDaGFuZ2VzU3Vic2NyaXB0aW9uKCkge1xuICAgIGlmICh0aGlzLmZvcm1WYWx1ZUNoYW5nZXNTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZm9ybVZhbHVlQ2hhbmdlc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5mb3JtVmFsdWVDaGFuZ2VzU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZvcm1Hcm91cEZyb21TdGF0ZShtb2RlbDogU2V0dGluZ0Zvcm11bGFNb2RlbCkge1xuICAgIHRoaXMuZm9ybUdyb3VwID0gdGhpcy5mb3JtR2VuZXJhdG9yLmdlbmVyYXRlU2V0dGluZ1ZhbHVlc0Zvcm1Hcm91cChtb2RlbCwgbW9kZWwucmVhZE9ubHksIHRoaXMucHJlcmVxdWlzaXRlU2V0dGluZ3MsIG1vZGVsLmZlYXR1cmVGbGFnTGltaXRhdGlvbnMpO1xuICB9XG5cbiAgZ2V0QXZhaWxhYmxlUHJlcmVxdWlzaXRlU2V0dGluZ3Moc2V0dGluZ0lkOiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy5wcmVyZXF1aXNpdGVTZXR0aW5ncy5maWx0ZXIoZHMgPT4gZHMuc2V0dGluZ0lkICE9PSBzZXR0aW5nSWQpO1xuICB9XG5cbiAgcmV2ZXJ0KCkge1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQ29uZmlybWF0aW9uRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIHRpdGxlOiAnUmV2ZXJ0IHRvIGxhc3Qgc2F2ZWQgc3RhdGU/JyxcbiAgICAgICAgYm9keTogJ0FsbCBjaGFuZ2VzIHdpbGwgYmUgbG9zdC4nLFxuICAgICAgICB5ZXNCdXR0b25MYWJlbDogJ1JldmVydCcsXG4gICAgICAgIG5vQnV0dG9uTGFiZWw6ICdObydcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCA9PT0gJ3llcycpIHtcbiAgICAgICAgdGhpcy5yZXZlcnREaXJ0eVZhbHVlc0Zyb21TdGF0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV2ZXJ0RGlydHlWYWx1ZXNGcm9tU3RhdGUoKSB7XG5cbiAgICBpZiAodGhpcy5mb3JtR3JvdXAuZGlydHkpIHtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLnNldENvbnRyb2woJ2RlZmF1bHRWYWx1ZScsXG4gICAgICAgIHRoaXMuZm9ybUdlbmVyYXRvci5nZW5lcmF0ZVZhbHVlRm9ybUdyb3VwKHRoaXMuc2V0dGluZ0Zvcm11bGEuZGVmYXVsdFZhbHVlLCB0aGlzLnNldHRpbmdGb3JtdWxhLnNldHRpbmcuc2V0dGluZ1R5cGUsIHRoaXMuc2V0dGluZ0Zvcm11bGEucmVhZE9ubHksIHRoaXMuc2V0dGluZ0Zvcm11bGEuZmVhdHVyZUZsYWdMaW1pdGF0aW9ucykpO1xuICAgICAgdGhpcy5mb3JtR3JvdXAuc2V0Q29udHJvbCgncGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGUnLFxuICAgICAgICBuZXcgRm9ybUNvbnRyb2woeyB2YWx1ZTogdGhpcy5zZXR0aW5nRm9ybXVsYS5wZXJjZW50YWdlRXZhbHVhdGlvbkF0dHJpYnV0ZSwgZGlzYWJsZWQ6IHRoaXMuc2V0dGluZ0Zvcm11bGEucmVhZE9ubHkgfSwgeyB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5tYXgoMTAwMCldIH0pLCk7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5zZXRDb250cm9sKCd0YXJnZXRpbmdSdWxlcycsXG4gICAgICAgIG5ldyBGb3JtQXJyYXk8Rm9ybUdyb3VwPFRhcmdldGluZ1J1bGVGb3JtPj4oXG4gICAgICAgICAgdGhpcy5zZXR0aW5nRm9ybXVsYS50YXJnZXRpbmdSdWxlcy5tYXAoZnQgPT4gdGhpcy5mb3JtR2VuZXJhdG9yLmdlbmVyYXRlVGFyZ2V0aW5nUnVsZUZvcm1Hcm91cChmdCwgdGhpcy5zZXR0aW5nRm9ybXVsYS5zZXR0aW5nLnNldHRpbmdUeXBlLCB0aGlzLnNldHRpbmdGb3JtdWxhLnJlYWRPbmx5LCB0aGlzLnByZXJlcXVpc2l0ZVNldHRpbmdzLCB0aGlzLnNldHRpbmdGb3JtdWxhLmZlYXR1cmVGbGFnTGltaXRhdGlvbnMpKVxuICAgICAgICApKTtcbiAgICAgIHRoaXMucmVjYWxjQWRkQnV0dG9ucygpO1xuICAgIH1cblxuICAgIHRoaXMuZm9ybUdyb3VwLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgdGhpcy5mb3JtR3JvdXAubWFya0FzVW50b3VjaGVkKCk7XG4gICAgdGhpcy5yZWNhbGNQcmVyZXF1aXNpdGVzKCk7XG4gICAgdGhpcy5zaG93RmVlZEJhY2tNZXNzYWdlID0gZmFsc2U7XG4gIH1cblxuICBzdWJtaXQoKSB7XG4gICAgaWYgKCF0aGlzLmZvcm1Hcm91cCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5mb3JtR3JvdXAudmFsaWQpIHtcbiAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrTWVzc2FnZSA9IHRydWU7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zaG93RmVlZEJhY2tNZXNzYWdlID0gZmFsc2U7XG4gICAgY29uc3QgdmFsdWU6IFVwZGF0ZUV2YWx1YXRpb25Gb3JtdWxhTW9kZWwgPSB7XG4gICAgICAuLi50aGlzLmZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpLFxuICAgIH07XG5cbiAgICB0aGlzLnVwZGF0ZVNldHRpbmdWYWx1ZXModmFsdWUpO1xuICB9XG5cbiAgdXBkYXRlU2V0dGluZ1ZhbHVlcyh1cGRhdGVNb2RlbDogVXBkYXRlRXZhbHVhdGlvbkZvcm11bGFNb2RlbCwgcmVhc29uOiBzdHJpbmcgPSBudWxsKSB7XG5cbiAgICB0aGlzLmNyZWF0ZVNldHRpbmdWYWx1ZXNWMlNlcnZpY2UoKS5yZXBsYWNlU2V0dGluZ1ZhbHVlVjIodGhpcy5lbnZpcm9ubWVudElkLCB0aGlzLnNldHRpbmdJZCwgdXBkYXRlTW9kZWwsIHJlYXNvbilcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiBzZXR0aW5nVmFsdWVzID0+IHtcbiAgICAgICAgICB0aGlzLmhhbmRsZUZldGNoZWRTZXR0aW5nVmFsdWVzKHNldHRpbmdWYWx1ZXMpO1xuXG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuRnJvbUNvbXBvbmVudChTYXZlU25hY2tiYXJDb21wb25lbnQsIHsgZHVyYXRpb246IDUwMDAsIHBhbmVsQ2xhc3M6ICdncmVlbi1zbmFja2JhcicgfSk7XG4gICAgICAgICAgdGhpcy5zYXZlU3VjY2VlZGVkLmVtaXQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuXG4gICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDAwICYmIGVycm9yLmVycm9yICYmIGVycm9yLmVycm9yLlJlYXNvbiAmJiBlcnJvci5lcnJvci5SZWFzb25bMF0gPT09ICdSZWFzb24gcmVxdWlyZWQuJykge1xuICAgICAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihSZWFzb25EaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgICAgICAgd2lkdGg6ICc0NTBweCdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKClcbiAgICAgICAgICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmJ1dHRvbiA9PT0gJ3NhdmUnICYmIHJlc3VsdC5yZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2V0dGluZ1ZhbHVlcyh1cGRhdGVNb2RlbCwgcmVzdWx0LnJlYXNvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDAgJiYgZXJyb3IuZXJyb3IgJiYgZXJyb3IuZXJyb3IuU2VnbWVudENvbmRpdGlvbiAmJiBlcnJvci5lcnJvci5TZWdtZW50Q29uZGl0aW9uWzBdID09PSAnU2VnbWVudCBub3QgZm91bmQuJykge1xuICAgICAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDb25maXJtYXRpb25EaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgICAgICAgd2lkdGg6ICc0NTBweCcsXG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICB0aXRsZTogJ0Nhbm5vdCBzYXZlIGZlYXR1cmUgZmxhZ3MnLFxuICAgICAgICAgICAgICAgIGJvZHk6ICdBIHNlZ21lbnQgcmVmZXJlbmNlZCBieSBvbmUgb2YgeW91ciBmZWF0dXJlIGZsYWdzIGhhcyBiZWVuIGRlbGV0ZWQuIFJlbG9hZCB0aGUgY29uZmlnIHRvIHNlZSBpdHMgbGF0ZXN0IHN0YXRlLCBhcHBseSB5b3VyIGNoYW5nZXMgYW5kIHRyeSB0aGUgc2F2ZSBhZ2Fpbi4nLFxuICAgICAgICAgICAgICAgIHllc0J1dHRvbkxhYmVsOiAnUmVsb2FkJyxcbiAgICAgICAgICAgICAgICBoaWRlTm9CdXR0b246IHRydWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKVxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZFNldHRpbmdWYWx1ZXMoKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDAwICYmIGVycm9yLmVycm9yICYmICgnJyArIGVycm9yLmVycm9yKS5zdGFydHNXaXRoKCdDaXJjdWxhciBkZXBlbmRlbmN5IGRldGVjdGVkLicpKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSAoJycgKyBlcnJvci5lcnJvcikuc2xpY2UoJ0NpcmN1bGFyIGRlcGVuZGVuY3kgZGV0ZWN0ZWQuJy5sZW5ndGggKyAxKTtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nLm9wZW4oQ29uZmlybWF0aW9uRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgICAgIHdpZHRoOiAnNDUwcHgnLFxuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICdDYW5ub3Qgc2F2ZSBmZWF0dXJlIGZsYWdzLicsXG4gICAgICAgICAgICAgICAgYm9keTogJ0NpcmN1bGFyIGRlcGVuZGVuY3kgZGV0ZWN0ZWQgYmV0d2VlbiB0aGUgZm9sbG93aW5nIGZlYXR1cmUgZmxhZ3M6PHA+JyArIGVycm9yTWVzc2FnZSArICc8L3A+UGxlYXNlIDxzdHJvbmc+ZWxpbWluYXRlIHRoZSBjaXJjdWxhciBkZXBlbmRlbmN5PC9zdHJvbmc+IGJlZm9yZSBzYXZpbmcgeW91ciBmZWF0dXJlIGZsYWdzLicsXG4gICAgICAgICAgICAgICAgeWVzQnV0dG9uTGFiZWw6ICdJIHVuZGVyc3RhbmQnLFxuICAgICAgICAgICAgICAgIGhpZGVOb0J1dHRvbjogdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5zZXRFcnJvcnMoeyBpbnRlcm5hbFNlcnZlckVycm9yOiAnSW50ZXJuYWwgc2VydmVyIGVycm9yJyB9KTtcbiAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tNZXNzYWdlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnNhdmVGYWlsZWQuZW1pdCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIG9uRGVsZXRlU2V0dGluZ1JlcXVlc3RlZChzZXR0aW5nKSB7XG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwLmRpcnR5KSB7XG4gICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENvbmZpcm1hdGlvbkRpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgdGl0bGU6ICdEaXNjYXJkIGNoYW5nZXM/JyxcbiAgICAgICAgICBib2R5OiAnWW91IGhhdmUgdW5zYXZlZCBmZWF0dXJlIGZsYWcgY2hhbmdlcy4gSWYgeW91IGNvbnRpbnVlLCB1bnNhdmVkIGNoYW5nZXMgd2lsbCBiZSBsb3N0LicsXG4gICAgICAgICAgeWVzQnV0dG9uTGFiZWw6ICdEaXNjYXJkIGNoYW5nZXMnLFxuICAgICAgICAgIG5vQnV0dG9uTGFiZWw6ICdObydcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpXG4gICAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSAneWVzJykge1xuICAgICAgICAgICAgdGhpcy5yZXZlcnREaXJ0eVZhbHVlc0Zyb21TdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5kZWxldGVTZXR0aW5nSW50ZXJuYWwoc2V0dGluZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZWxldGVTZXR0aW5nSW50ZXJuYWwoc2V0dGluZyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVTZXR0aW5nSW50ZXJuYWwoc2V0dGluZykge1xuICAgIHRoaXMuZGVsZXRlU2V0dGluZ1JlcXVlc3RlZC5lbWl0KDxEZWxldGVTZXR0aW5nTW9kZWw+eyBjb25maWc6IHRoaXMuc2V0dGluZ0Zvcm11bGEuY29uZmlnLCBlbnZpcm9ubWVudDogdGhpcy5zZXR0aW5nRm9ybXVsYS5lbnZpcm9ubWVudCwgc2V0dGluZzogc2V0dGluZy5zZXR0aW5nIH0pXG4gIH1cblxuICBzdWJzY3JpcHRpb25MaW1pdFJlYWNoZWRDYWxsZWQoKSB7XG4gICAgdGhpcy5kaWFsb2cub3BlbihSZXJvdXRlRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIHRpdGxlOiAnWW91IGhhdmUgcmVhY2hlZCB0aGUgbGltaXRzIG9mIHlvdXIgcGxhbicsXG4gICAgICAgIGJvZHk6IGAgVXBncmFkZSB5b3VyIHBsYW4gb3Igam9pbiBvdXIgPGEgaHJlZj1cImh0dHBzOi8vY29uZmlnY2F0LmNvbS9yZWZlcnJhbHNcIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+cmVmZXJyYWwgcHJvZ3JhbTwvYT4gdG8gaW5jcmVhc2UgeW91ciBsaW1pdHMuYCxcbiAgICAgICAgeWVzQnV0dG9uTGFiZWw6IGBTZWUgcGxhbnNgLFxuICAgICAgICB5ZXNCdXR0b25MaW5rOiB0aGlzLmRhc2hib2FyZEJhc2VQYXRoICsgXCIvb3JnYW5pemF0aW9uL3BsYW5zXCIsXG4gICAgICAgIG5vQnV0dG9uTGFiZWw6IGBDbG9zZWBcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFkZFNlZ21lbnRDb25kaXRpb25SZXF1ZXN0ZWRXaXRob3V0U2VnbWVudHMoKSB7XG4gICAgdGhpcy5kaWFsb2cub3BlbihSZXJvdXRlRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIHRpdGxlOiAnVGhlcmUgYXJlIG5vIHNlZ21lbnRzIGluIHRoaXMgcHJvZHVjdCB5ZXQuJyxcbiAgICAgICAgYm9keTogYEdvIGFoZWFkIHRvIHRoZSBDb25maUNhdCBEYXNoYm9hcmQgYW5kIGNyZWF0ZSB5b3VyIGZpcnN0IHVzZXIgc2VnbWVudCBiZWZvcmUgYWRkaW5nIGl0IHRvIGEgdGFyZ2V0aW5nIHJ1bGUuYCxcbiAgICAgICAgeWVzQnV0dG9uTGFiZWw6IGBHbyB0byB0aGUgZGFzaGJvYXJkYCxcbiAgICAgICAgeWVzQnV0dG9uTGluazogdGhpcy5kYXNoYm9hcmRCYXNlUGF0aCArIFwiL3Byb2R1Y3QvXCIgKyB0aGlzLnByb2R1Y3RJZCArIFwiL3NlZ21lbnRzXCJcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHRyYWNrQnlJbmRleChpbmRleDogbnVtYmVyKTogYW55IHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICByZWNhbGNQcmVyZXF1aXNpdGVzKCk6IHZvaWQge1xuICAgIGNvbnN0IHNldHRpbmdWYWx1ZSA9IHRoaXMuc2V0dGluZ0Zvcm11bGE7XG4gICAgdGhpcy5mbGFnU3RhdGUuZGVwZW5kZWVTZXR0aW5ncyA9IHRoaXMuc2V0dGluZ3MuZmlsdGVyKHMgPT4gc2V0dGluZ1ZhbHVlLnNldHRpbmdJZHNXaGVyZVByZXJlcXVpc2l0ZT8uaW5jbHVkZXMocy5zZXR0aW5nSWQpKVxuICAgICAgLm1hcChzID0+IHsgcmV0dXJuIHsga2V5OiBzLmtleSwgbmFtZTogcy5uYW1lLCBzZXR0aW5nSWQ6IHMuc2V0dGluZ0lkIH0gfSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmVjYWxjQWRkQnV0dG9ucygpOiB2b2lkIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZmxhZ1N0YXRlO1xuICAgIGNvbnN0IGdyb3VwID0gdGhpcy5mb3JtR3JvdXA7XG5cbiAgICBzdGF0ZS5hZGRCdXR0b25SZW5kZXJTdGF0ZS5yZW5kZXJUb3BBZGRCdXR0b25zID0gIWdyb3VwLmNvbnRyb2xzLnRhcmdldGluZ1J1bGVzLmNvbnRyb2xzLmxlbmd0aCB8fFxuICAgICAgdGhpcy5oYXNPbmx5UGVyY2VudGFnZVJ1bGUoZ3JvdXApO1xuXG4gICAgaWYgKCFncm91cC5jb250cm9scy50YXJnZXRpbmdSdWxlcy5jb250cm9scy5sZW5ndGgpIHtcbiAgICAgIHN0YXRlLmFkZEJ1dHRvblJlbmRlclN0YXRlLmFkZFJ1bGVCdXR0b25UcmFja2VyID0gW107XG4gICAgICBzdGF0ZS5hZGRCdXR0b25SZW5kZXJTdGF0ZS5oYXNQZXJjZW50YWdlT25seVJ1bGUgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaGFzUGVyY09ubHkgPSBzdGF0ZS5hZGRCdXR0b25SZW5kZXJTdGF0ZS5oYXNQZXJjZW50YWdlT25seVJ1bGUgPSBncm91cC5jb250cm9scy50YXJnZXRpbmdSdWxlcy5jb250cm9scy5sZW5ndGggPiAwXG4gICAgICAgICYmIHRoaXMuZm9ybUdlbmVyYXRvci5pc1BlcmNlbnRhZ2VPbmx5VGFyZ2V0aW5nUnVsZShncm91cC5jb250cm9scy50YXJnZXRpbmdSdWxlcy5jb250cm9sc1tncm91cC5jb250cm9scy50YXJnZXRpbmdSdWxlcy5jb250cm9scy5sZW5ndGggLSAxXSk7XG4gICAgICBzdGF0ZS5hZGRCdXR0b25SZW5kZXJTdGF0ZS5hZGRSdWxlQnV0dG9uVHJhY2tlciA9IGdyb3VwLmNvbnRyb2xzLnRhcmdldGluZ1J1bGVzLmNvbnRyb2xzLm1hcCgoaXRlbSwgaSwgcnVsZXMpID0+IHtcbiAgICAgICAgY29uc3QgaXNMYXN0UnVsZSA9IGkgPT09IGdyb3VwLmNvbnRyb2xzLnRhcmdldGluZ1J1bGVzLmNvbnRyb2xzLmxlbmd0aCAtIDE7XG4gICAgICAgIGNvbnN0IGlzQmVmb3JlTGFzdCA9IGkgPT09IGdyb3VwLmNvbnRyb2xzLnRhcmdldGluZ1J1bGVzLmNvbnRyb2xzLmxlbmd0aCAtIDI7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2hvd0FkZFJ1bGVCdXR0b25zOiBoYXNQZXJjT25seSA/IGkgPT09IHJ1bGVzLmxlbmd0aCAtIDIgOiBpID09PSBydWxlcy5sZW5ndGggLSAxLFxuICAgICAgICAgIHNob3dPckNoaXA6IGhhc1BlcmNPbmx5ID8gaSA8IHJ1bGVzLmxlbmd0aCAtIDIgOiBpIDwgcnVsZXMubGVuZ3RoIC0gMSxcbiAgICAgICAgICByZW5kZXJTZXBhcmF0aW9uQXJlYTogdGhpcy5mb3JtR2VuZXJhdG9yLmlzUGVyY2VudGFnZU9ubHlUYXJnZXRpbmdSdWxlKGl0ZW0pIHx8XG4gICAgICAgICAgICAodGhpcy5zZXR0aW5nRm9ybXVsYS5yZWFkT25seSAmJiAoaXNMYXN0UnVsZSB8fCAoaGFzUGVyY09ubHkgJiYgaXNCZWZvcmVMYXN0KSkpLFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBoYXNPbmx5UGVyY2VudGFnZVJ1bGUoZ3JvdXA6IEZvcm1Hcm91cDxVcGRhdGVTZXR0aW5nVmFsdWVGb3JtPik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBncm91cC5jb250cm9scy50YXJnZXRpbmdSdWxlcy5jb250cm9scy5sZW5ndGggPT09IDEgJiZcbiAgICAgIHRoaXMuZm9ybUdlbmVyYXRvci5pc1BlcmNlbnRhZ2VPbmx5VGFyZ2V0aW5nUnVsZShncm91cC5jb250cm9scy50YXJnZXRpbmdSdWxlcy5jb250cm9sc1swXSlcbiAgfVxuXG4gIGV4cGFuZGVkQ2hhbmdlZChleHBhbmRlZFN0YXRlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5mbGFnU3RhdGUucGFuZWxFeHBhbmRlZCA9IGV4cGFuZGVkU3RhdGU7XG4gICAgdGhpcy5leHBhbmRlZFN0YXRlQ2hhbmdlZC5lbWl0KCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxvYWRpbmdcIj5cbiAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIiAobmdTdWJtaXQpPVwic3VibWl0KClcIiBpZD1cImZlYXR1cmUtZmxhZy1mb3JtXCI+XG4gICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnaW52YWxpZC1mbGFnJzogZm9ybUdyb3VwLmludmFsaWR9XCI+XG4gICAgICAgICAgICAgICAgPGFwcC1mZWF0dXJlLWZsYWcgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIiBbZmxhZ1N0YXRlXT1cImZsYWdTdGF0ZVwiIFtzZWdtZW50c109XCJzZWdtZW50c1wiXG4gICAgICAgICAgICAgICAgICAgIChkZWxldGVTZXR0aW5nUmVxdWVzdGVkKT1cIm9uRGVsZXRlU2V0dGluZ1JlcXVlc3RlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2ZlYXR1cmVGbGFnTGltaXRhdGlvbnNdPVwic2V0dGluZ0Zvcm11bGEuZmVhdHVyZUZsYWdMaW1pdGF0aW9uc1wiIFtoYXNPdGhlckVudmlyb25tZW50XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgKHN1YnNjcmlwdGlvbkxpbWl0UmVhY2hlZCk9XCJzdWJzY3JpcHRpb25MaW1pdFJlYWNoZWRDYWxsZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgIChhZGRTZWdtZW50Q29uZGl0aW9uUmVxdWVzdGVkV2l0aG91dFNlZ21lbnRzKT1cImFkZFNlZ21lbnRDb25kaXRpb25SZXF1ZXN0ZWRXaXRob3V0U2VnbWVudHMoKVwiXG4gICAgICAgICAgICAgICAgICAgIChwcmVyZXF1aXNpdGVDb25kaXRpb25DaGFuZ2VkKT1cInJlY2FsY1ByZXJlcXVpc2l0ZXMoKVwiIChyZWNhbGNBZGRCdXR0b25zKT1cInJlY2FsY0FkZEJ1dHRvbnMoKVwiXG4gICAgICAgICAgICAgICAgICAgIChleHBhbmRlZENoYW5nZWQpPVwiZXhwYW5kZWRDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbc2hvd0Vudmlyb25tZW50TmFtZV09XCJzaG93RW52aXJvbm1lbnROYW1lXCIgW2Vudmlyb25tZW50TmFtZV09XCJzZXR0aW5nRm9ybXVsYS5lbnZpcm9ubWVudC5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW2RlbGV0ZVNldHRpbmdUZXh0XT1cImRlbGV0ZVNldHRpbmdUZXh0XCIgW2NhbkRlbGV0ZVNldHRpbmddPVwiY2FuRGVsZXRlU2V0dGluZ1wiPlxuICAgICAgICAgICAgICAgIDwvYXBwLWZlYXR1cmUtZmxhZz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNhdmVcIiAqbmdJZj1cIiFzZXR0aW5nRm9ybXVsYS5yZWFkT25seSAmJiBmb3JtR3JvdXA/LmRpcnR5XCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNhdmUtYnV0dG9uXCIgbWF0LWZsYXQtYnV0dG9uIGNvbG9yPVwid2FyblwiIHR5cGU9XCJzdWJtaXRcIiBbY2xhc3MuYW5pbWF0ZV09XCJmb3JtR3JvdXAuZGlydHlcIlxuICAgICAgICAgICAgICAgICAgICBbdHJhY2tdPVwiWydzYXZlICYgcHVibGlzaCBjbGljaycsICdmZWF0dXJlIGZsYWdzIGFuZCBzZXR0aW5ncyddXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5iYWNrdXA8L21hdC1pY29uPiA8c3Bhbj4gU2F2ZSAmIHB1Ymxpc2ggY2hhbmdlczwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInJldmVydC1idXR0b25cIiBtYXQtc3Ryb2tlZC1idXR0b24gKGNsaWNrKT1cInJldmVydCgpXCJcbiAgICAgICAgICAgICAgICAgICAgW3RyYWNrXT1cIlsncmV2ZXJ0IGNsaWNrJywgJ2ZlYXR1cmUgZmxhZ3MgYW5kIHNldHRpbmdzJ11cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+UmV2ZXJ0PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZWVkYmFja1wiICpuZ0lmPVwiZm9ybUdyb3VwLnRvdWNoZWQgJiYgZm9ybUdyb3VwLmludmFsaWQgJiYgc2hvd0ZlZWRCYWNrTWVzc2FnZVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXJyb3JcIiAqbmdJZj1cImZvcm1Hcm91cC5lcnJvcnMgJiYgZm9ybUdyb3VwLmVycm9ycy5pbnRlcm5hbFNlcnZlckVycm9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5Tb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgd2UgY291bGQgbm90IHNhdmUgeW91ciBzZXR0aW5ncy4gWW91IGNhbiB0cnkgYWdhaW4gb3IgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj1cImh0dHBzOi8vY29uZmlnY2F0LmNvbS9zdXBwb3J0XCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPmNvbnRhY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXMuPC9hPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlcnJvclwiICpuZ0lmPVwiIWZvcm1Hcm91cC5lcnJvcnMgfHwgIWZvcm1Hcm91cC5lcnJvcnMuaW50ZXJuYWxTZXJ2ZXJFcnJvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+T2ggbm8hIEEgZmVhdHVyZSBmbGFnIGhhcyBpbnZhbGlkIG9yIG1pc3NpbmcgZGF0YS4mbmJzcDs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cblxuICAgIDwvbmctY29udGFpbmVyPlxuPC9kaXY+Il19
|