@c8y/ngx-components 1021.49.4 → 1021.49.12
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/LICENSE +1 -1
- package/alarms/alarms.component.d.ts +1 -1
- package/alarms/alarms.component.d.ts.map +1 -1
- package/context-dashboard/context-dashboard.component.d.ts +3 -2
- package/context-dashboard/context-dashboard.component.d.ts.map +1 -1
- package/core/common/ApplicationOptions.d.ts +1 -1
- package/core/docs/docs.service.d.ts +1 -1
- package/core/docs/docs.service.d.ts.map +1 -1
- package/core/select/typeahead.component.d.ts.map +1 -1
- package/esm2022/alarms/alarms.component.mjs +2 -2
- package/esm2022/context-dashboard/context-dashboard.component.mjs +11 -8
- package/esm2022/context-dashboard/device-info-dashboard/device-info-dashboard.component.mjs +3 -3
- package/esm2022/core/common/ApplicationOptions.mjs +1 -1
- package/esm2022/core/docs/defaults.items.mjs +5 -5
- package/esm2022/core/docs/docs.service.mjs +2 -2
- package/esm2022/core/search/search-input.component.mjs +3 -3
- package/esm2022/core/select/typeahead.component.mjs +2 -2
- package/esm2022/widgets/implementations/cockpit-welcome/welcome.component.mjs +2 -2
- package/fesm2022/c8y-ngx-components-alarms.mjs +1 -1
- package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs +12 -9
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-welcome.mjs +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-welcome.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +8 -8
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -48,7 +48,7 @@ export class ContextDashboardComponent {
|
|
|
48
48
|
this.childrenClasses = '';
|
|
49
49
|
this.setTitle = false;
|
|
50
50
|
this.defaultWidgets = [];
|
|
51
|
-
this.
|
|
51
|
+
this._canCopy = true;
|
|
52
52
|
this.canDelete = true;
|
|
53
53
|
this.isLoading = true;
|
|
54
54
|
this.showContextHelpButton = true;
|
|
@@ -58,6 +58,7 @@ export class ContextDashboardComponent {
|
|
|
58
58
|
this.hideAvailability = false;
|
|
59
59
|
this.class = '';
|
|
60
60
|
this.widgets = [];
|
|
61
|
+
this.canCopy = true;
|
|
61
62
|
this.dashboardTypeLabel = gettext('Dashboard for "{{ dashboardType }}"');
|
|
62
63
|
this.dashboardTypePopover = gettext(`
|
|
63
64
|
The layout and configuration of this dashboard is used by all other assets of model type
|
|
@@ -388,9 +389,10 @@ export class ContextDashboardComponent {
|
|
|
388
389
|
? await this.contextDashboardService.canEditDashboard(this.mo)
|
|
389
390
|
: false;
|
|
390
391
|
this.canCopy =
|
|
391
|
-
this.
|
|
392
|
-
this.contextDashboardService.
|
|
393
|
-
|
|
392
|
+
this._canCopy &&
|
|
393
|
+
(this.contextDashboardService.isDeviceDashboard(this.mo) ||
|
|
394
|
+
this.contextDashboardService.isDeviceType(this.mo) ||
|
|
395
|
+
this.contextDashboardService.isGroupDashboard(this.mo));
|
|
394
396
|
const dashboardChildren = cloneDeep(this.mo.c8y_Dashboard?.children);
|
|
395
397
|
const dashboardClasses = {
|
|
396
398
|
'c8y-grid-dashboard': true,
|
|
@@ -653,7 +655,7 @@ export class ContextDashboardComponent {
|
|
|
653
655
|
: this.gainsightService.hashGroupName(str);
|
|
654
656
|
}
|
|
655
657
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ContextDashboardComponent, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }, { token: i2.ContextDashboardService }, { token: i3.AlertService }, { token: i0.Renderer2 }, { token: CONTEXT_DASHBOARD_CONFIG }, { token: i4.WidgetService }, { token: i5.BsModalService }, { token: i3.GainsightService }, { token: i3.ActionBarService }, { token: i6.TranslateService }, { token: i3.ModalService }, { token: i7.DashboardEditModeService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
656
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: ContextDashboardComponent, selector: "c8y-context-dashboard", inputs: { name: "name", childrenClasses: "childrenClasses", context: "context", setTitle: "setTitle", defaultWidgets: "defaultWidgets",
|
|
658
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: ContextDashboardComponent, selector: "c8y-context-dashboard", inputs: { name: "name", childrenClasses: "childrenClasses", context: "context", setTitle: "setTitle", defaultWidgets: "defaultWidgets", _canCopy: ["canCopy", "_canCopy"], canDelete: "canDelete", isLoading: "isLoading", breadcrumbSettings: "breadcrumbSettings", showContextHelpButton: "showContextHelpButton", translateWidgetTitle: "translateWidgetTitle", hideAvailability: "hideAvailability" }, host: { listeners: { "window:beforeunload": "beforeUnloadHandler($event)" }, properties: { "class": "this.class" }, styleAttribute: "\n display: block;\n ", classAttribute: "dashboard c8y-grid-dashboard" }, viewQueries: [{ propertyName: "dashboardDetails", first: true, predicate: DashboardDetailComponent, descendants: true, static: true }, { propertyName: "widgetsDashboard", first: true, predicate: WidgetsDashboardComponent, descendants: true, static: true }], ngImport: i0, template: "<c8y-title *ngIf=\"title\">\n {{ title }}\n</c8y-title>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"10000\"\n *ngIf=\"dashboard?.deviceType && dashboard.deviceTypeValue\"\n>\n <button\n class=\"btn-clean btn-link\"\n popoverTitle=\"{{ 'Dashboard template' | translate }}\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"dashboardTypePopoverRef\"\n placement=\"bottom\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n >\n <span class=\"tag tag--info text-12\">\n <span class=\"dashboard-template-marker\"></span>\n {{ dashboardTypeLabel | translate: { dashboardType: dashboard.deviceTypeValue } }}\n </span>\n </button>\n <ng-template #dashboardTypePopoverRef>\n <div\n [innerHTML]=\"dashboardTypePopover | translate: { dashboardType: dashboard.deviceTypeValue }\"\n ></div>\n </ng-template>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"-1\"\n *ngIf=\"defaultWidgets.length > 0\"\n>\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reset widgets' | translate }}\"\n type=\"button\"\n px-event=\"Reset dashboard\"\n (click)=\"restore()\"\n [disabled]=\"disabled || (widgetsDashboard?.editMode$ | async)\"\n data-cy=\"context-dashboard--button-reset-dashboard\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"reset\"\n ></i>\n <span class=\"visible-xs-inline hidden-sm visible-md-inline visible-lg-inline\">\n {{ 'Reset widgets' | translate }}\n </span>\n </button>\n</c8y-action-bar-item>\n\n<c8y-help\n src=\"/docs/cockpit/working-with-dashboards/#working-with-dashboards\"\n *ngIf=\"showContextHelpButton\"\n></c8y-help>\n\n<c8y-dashboard-detail\n class=\"d-contents\"\n [isReport]=\"isReport\"\n [dashboard]=\"dashboard\"\n [mo]=\"mo\"\n [context]=\"context\"\n [deviceType]=\"context?.type\"\n [hideAvailability]=\"hideAvailability\"\n (dashboardSaved)=\"reloadDashboard($event)\"\n (previewChanged)=\"dashboardPreview($event)\"\n></c8y-dashboard-detail>\n\n<c8y-widgets-dashboard\n [context]=\"context\"\n [contextDashboard]=\"dashboard\"\n [widgets]=\"widgets\"\n [isCopyDisabled]=\"isCopyDisabled\"\n [settings]=\"{\n isLoading: isLoading,\n isDisabled: disabled,\n canDelete: canDelete && !!dashboard,\n translateWidgetTitle: dashboard?.translateWidgetTitle ?? translateWidgetTitle,\n allowFullscreen: moduleConfig.allowFullscreen,\n title: setTitle ? dashboard?.name || title : undefined,\n widgetMargin: dashboard?.widgetMargin,\n canCopy: canCopy && !!dashboard,\n defaultWidth: dashboard?.columns >= 24 ? 8 : 4,\n columns: dashboard?.columns || 12\n }\"\n [breadcrumb]=\"breadcrumbSettings\"\n [editModeButtons]=\"{\n undoButtonDisabled: editModeService.undoButtonDisabled,\n changeToUndoName: editModeService.changeToUndoName,\n redoButtonDisabled: !editModeService.redoStackLastItem,\n changeToRedoName: editModeService.redoStackLastItem?.name\n }\"\n (onChangeDashboard)=\"positionOrWidgetDimensionChange($event)\"\n (onAddWidget)=\"addWidget()\"\n (onEditWidget)=\"editWidget($event)\"\n (onDeleteWidget)=\"deleteWidget($event)\"\n (onSaveDashboard)=\"saveWidgetsToDashboard()\"\n (onCancelDashboard)=\"cancelEditMode()\"\n (revertChange)=\"revertChange($event)\"\n (onChangeStart)=\"addDashboardClassToBody()\"\n (onChangeEnd)=\"removeDashboardClassFromBody()\"\n (onEditDashboard)=\"dashboardDetails.show(true)\"\n (onCopyDashboard)=\"copyDashboard()\"\n (onDeleteDashboard)=\"deleteDashboard()\"\n></c8y-widgets-dashboard>\n", dependencies: [{ kind: "component", type: i3.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: i3.WidgetsDashboardComponent, selector: "c8y-widgets-dashboard", inputs: ["widgets", "context", "contextDashboard", "settings", "isCopyDisabled", "breadcrumb", "editModeButtons"], outputs: ["onAddWidget", "onEditWidget", "onDeleteWidget", "onChangeDashboard", "onResize", "onEditDashboard", "onCopyDashboard", "onDeleteDashboard", "onChangeStart", "onChangeEnd", "onSaveDashboard", "onCancelDashboard", "revertChange"] }, { kind: "component", type: i3.HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "directive", type: i9.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "component", type: i10.DashboardDetailComponent, selector: "c8y-dashboard-detail", inputs: ["isReport", "deviceType", "context", "mo", "dashboard", "isNamedDashboard", "hideAvailability"], outputs: ["dashboardSaved", "previewChanged"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i8.AsyncPipe, name: "async" }] }); }
|
|
657
659
|
}
|
|
658
660
|
__decorate([
|
|
659
661
|
memoize(),
|
|
@@ -682,8 +684,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
682
684
|
type: Input
|
|
683
685
|
}], defaultWidgets: [{
|
|
684
686
|
type: Input
|
|
685
|
-
}],
|
|
686
|
-
type: Input
|
|
687
|
+
}], _canCopy: [{
|
|
688
|
+
type: Input,
|
|
689
|
+
args: ['canCopy']
|
|
687
690
|
}], canDelete: [{
|
|
688
691
|
type: Input
|
|
689
692
|
}], isLoading: [{
|
|
@@ -709,4 +712,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
709
712
|
type: HostListener,
|
|
710
713
|
args: ['window:beforeunload', ['$event']]
|
|
711
714
|
}], convertStringToHash: [] } });
|
|
712
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1kYXNoYm9hcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29udGV4dC1kYXNoYm9hcmQvY29udGV4dC1kYXNoYm9hcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vY29udGV4dC1kYXNoYm9hcmQvY29udGV4dC1kYXNoYm9hcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsV0FBVyxFQUNYLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUdMLFNBQVMsRUFDVCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLFlBQVksRUFFWiwyQkFBMkIsRUFFM0Isb0JBQW9CLEVBSXBCLGdCQUFnQixFQUNoQixPQUFPLEVBQ1AsT0FBTyxFQUNQLFlBQVksRUFDWix5QkFBeUIsRUFFekIsTUFBTSxFQUdOLHlCQUF5QixFQUMxQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXJELE9BQU8sRUFFTCx3QkFBd0IsRUFJeEIsNkJBQTZCLEVBRzdCLGtCQUFrQixFQUNsQixxQkFBcUIsRUFDdEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7Ozs7Ozs7Ozs7OztBQUdqRjs7OztHQUlHO0FBV0gsTUFBTSxPQUFPLHlCQUF5QjtJQXFDcEMsSUFBSSxRQUFRO1FBQ1YsT0FBTyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxXQUFXLENBQUM7SUFDbkYsQ0FBQztJQWdCRCxZQUNVLEtBQXFCLEVBQ3JCLE1BQWMsRUFDZCx1QkFBZ0QsRUFDaEQsS0FBbUIsRUFDbkIsUUFBbUIsRUFDYyxZQUFvQyxFQUNyRSxhQUE0QixFQUM1QixPQUF1QixFQUN2QixnQkFBa0MsRUFDbEMsZ0JBQWtDLEVBQ2xDLGdCQUFrQyxFQUNsQyxLQUFtQixFQUNwQixlQUF5QztRQVp4QyxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtRQUNoRCxVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQ25CLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDYyxpQkFBWSxHQUFaLFlBQVksQ0FBd0I7UUFDckUsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDdkIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsVUFBSyxHQUFMLEtBQUssQ0FBYztRQUNwQixvQkFBZSxHQUFmLGVBQWUsQ0FBMEI7UUFoRWxELG9CQUFlLEdBQUcsRUFBRSxDQUFDO1FBSXJCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFHakIsbUJBQWMsR0FBYSxFQUFFLENBQUM7UUFFOUIsWUFBTyxHQUFHLElBQUksQ0FBQztRQUVmLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFFakIsY0FBUyxHQUFHLElBQUksQ0FBQztRQUlqQiwwQkFBcUIsR0FBRyxJQUFJLENBQUM7UUFHN0I7O1dBRUc7UUFFSCxxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFHekIsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQVVYLFlBQU8sR0FBYSxFQUFFLENBQUM7UUFNZCx1QkFBa0IsR0FBRyxPQUFPLENBQUMscUNBQXFDLENBQUMsQ0FBQztRQUNwRSx5QkFBb0IsR0FBRyxPQUFPLENBQUM7OzttQkFHdkIsQ0FBQyxDQUFDO1FBRVgsaUNBQTRCLEdBQUcsS0FBSyxDQUFDO0lBZ0IxQyxDQUFDO0lBRUosUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUM1QixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFHRCxLQUFLLENBQUMsbUJBQW1CLENBQUMsTUFBeUI7UUFDakQsTUFBTSxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNuQixNQUFNLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUM1QixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILGlCQUFpQixDQUFDLE1BQU07UUFDdEIsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3pCLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzFFLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM3QixDQUFDO1FBQ0QsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDbEYsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3ZCLFdBQVcsRUFBRSxJQUFJO2FBQ2xCLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBQ0Q7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsYUFBYSxDQUFDLFdBQVcsR0FBRyxLQUFLO1FBQ3JDLE1BQU0sYUFBYSxHQUNqQixDQUFDLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN4RCxDQUFDLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBRTNELG1IQUFtSDtRQUNuSCxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xCLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLE9BQU87UUFDWCxNQUFNLElBQUksR0FBRyxPQUFPLENBQ2xCLDJKQUEySixDQUM1SixDQUFDO1FBRUYsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Z0JBQ3ZFLEVBQUUsRUFBRSxPQUFPLENBQUMsa0JBQWtCLENBQUM7Z0JBQy9CLE1BQU0sRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDO2FBQzFCLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUM5RixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsR0FBRztnQkFDekMsVUFBVSxFQUFFLE9BQU87YUFDcEIsQ0FBQztZQUNGLE1BQU0sSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbkQsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdEIsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckMsQ0FBQztRQUNILENBQUM7Z0JBQVMsQ0FBQztZQUNULElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBQ0Q7Ozs7O09BS0c7SUFDSCwrQkFBK0IsQ0FBQyxLQUE2QztRQUMzRSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsRUFBRSxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUM7UUFDNUUsTUFBTSxlQUFlLEdBQ25CLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUN6RixJQUFJLFVBQTBDLENBQUM7UUFDL0MsSUFBSSxjQUF3QixDQUFDO1FBQzdCLElBQUksZUFBZSxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQ2hDLFVBQVUsR0FBRyw2QkFBNkIsQ0FBQyxLQUFLLENBQUM7WUFDakQsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdkUsY0FBYyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLENBQUM7YUFBTSxDQUFDO1lBQ04sVUFBVSxHQUFHLDZCQUE2QixDQUFDLFdBQVcsQ0FBQztZQUN2RCxjQUFjLEdBQUcsS0FBSyxDQUFDLFFBQVE7aUJBQzVCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDUCxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDL0MsSUFDRSxDQUFDLENBQUMsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxFQUFFO29CQUN4QixDQUFDLENBQUMsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxFQUFFO29CQUN4QixDQUFDLENBQUMsS0FBSyxJQUFJLGNBQWMsQ0FBQyxNQUFNO29CQUNoQyxDQUFDLENBQUMsTUFBTSxJQUFJLGNBQWMsQ0FBQyxPQUFPLEVBQ2xDLENBQUM7b0JBQ0QsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUNoQixDQUFDO1lBQ0gsQ0FBQyxDQUFDO2lCQUNELE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQixDQUFDO1FBRUQsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWSxDQUFDLFVBQTRCO1FBQzdDLElBQUksaUJBQStDLENBQUM7UUFDcEQsSUFBSSxVQUFVLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDMUIsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUM7UUFDM0QsQ0FBQzthQUFNLENBQUM7WUFDTixpQkFBaUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQztRQUMzRCxDQUFDO1FBQ0QsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILHVCQUF1QixDQUNyQixLQUE2QyxFQUM3QyxVQUEwQyxFQUMxQyxlQUFtRSxFQUNuRSxjQUF3QjtRQUV4QixNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQzNCLE1BQU0sY0FBYyxHQUE2QixLQUFLLENBQ3BELFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDNUMsSUFBSSxDQUNMLENBQUM7UUFDRixJQUFJLENBQUMsV0FBVyxDQUNkLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLEVBQzlDLGVBQWUsRUFDZixjQUFjLENBQ2YsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxhQUFhO1FBQ2pCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDO1FBRTdELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLEdBQUc7WUFDM0MsV0FBVyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUN2QixTQUFTLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDO1lBQzNDLE9BQU8sRUFBRSxTQUFTLENBQUM7Z0JBQ2pCLE9BQU8sRUFBRSxXQUFXO2dCQUNwQixXQUFXLEVBQUUsSUFBSSxDQUFDLE9BQU87YUFDMUIsQ0FBQztTQUNILENBQUM7UUFFRixJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDM0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FDdkMsa0ZBQWtGLEVBQ2xGLEVBQUUsR0FBRyxFQUFFLENBQ1IsQ0FBQztZQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLENBQUM7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGVBQWU7UUFDbkIsTUFBTSxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3BGLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFDRCxNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxxQkFBcUI7UUFDdkIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUM7SUFDdEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBb0I7UUFDbkMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDOUMsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLG1CQUFtQixDQUM1RCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FDaEQsQ0FBQztRQUNGLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqQixPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUNuQixHQUFHLFNBQVM7WUFDWixJQUFJLEVBQUUsRUFBRSxHQUFHLFNBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUU7U0FDNUYsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxTQUFTLENBQUMsUUFBcUM7UUFDbkQsTUFBTSxvQkFBb0IsR0FBRyxRQUFRO1lBQ25DLENBQUMsQ0FBQztnQkFDRSxHQUFHLFFBQVE7Z0JBQ1gsSUFBSSxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO2FBQy9CO1lBQ0gsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUViLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUN6RixNQUFNLFlBQVksR0FBbUM7WUFDbkQsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ1gsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWE7WUFDckQsUUFBUSxFQUFFLG9CQUFvQjtTQUMvQixDQUFDO1FBRUYsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFDckQsS0FBSyxFQUFFLFVBQVU7WUFDakIsZUFBZSxFQUFFLFlBQVk7WUFDN0IsY0FBYyxFQUFFLGFBQWE7WUFDN0IsWUFBWTtZQUNaLG1CQUFtQixFQUFFLElBQUk7WUFDekIsUUFBUSxFQUFFLEtBQUs7U0FDaEIsQ0FBQyxDQUFDLE9BQWdDLENBQUM7UUFFcEMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxTQUFTLEdBQUcsTUFBTSxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUN0QyxDQUFDO1lBQ0QsU0FBUyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdkQsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ25DLGlIQUFpSDtZQUNqSCx3REFBd0Q7WUFDeEQsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDYixNQUFNLFFBQVEsR0FBRztvQkFDZixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxFQUFFLENBQUMsUUFBUTtvQkFDbEQsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUztpQkFDMUIsQ0FBQztnQkFDRixJQUFJLENBQUMsV0FBVyxDQUNkO29CQUNFLElBQUksRUFBRSw2QkFBNkIsQ0FBQyxNQUFNO29CQUMxQyxRQUFRO2lCQUNULEVBQ0QsUUFBUSxFQUNSLENBQUMsU0FBUyxDQUFDLENBQ1osQ0FBQztZQUNKLENBQUM7WUFDRCxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEIsQ0FBQztRQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDWixpQkFBaUI7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsc0JBQXNCO1FBQzFCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDNUQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUM7UUFFdkQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsa0JBQWtCLEdBQUc7WUFDekMsVUFBVSxFQUFFLFFBQVE7WUFDcEIsYUFBYSxFQUFFLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDO1NBQzdFLENBQUM7UUFDRixNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUM7WUFDeEIsSUFBSSxFQUFFLDZCQUE2QixDQUFDLE9BQU87WUFDM0MsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFFBQVE7WUFDeEMsYUFBYSxFQUFFLEVBQUU7U0FDbEIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsK0JBQStCLEVBQUUsQ0FBQztJQUMvRCxDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxZQUFZLEdBQUcsS0FBSztRQUN2QyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdkQsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7UUFDekMsQ0FBQztRQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQixzRkFBc0Y7WUFDdEYsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTTtRQUN2QixNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN6RCxNQUFNLEtBQUssR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDM0IsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoRSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbEMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzlDLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBb0I7UUFDckMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUM7WUFDbEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2hFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRXRELE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLENBQUM7WUFDN0IsU0FBUyxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUU3RSxrRUFBa0U7WUFDbEUsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUM5RSxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVmLE1BQU0sS0FBSyxHQUFHLElBQUksb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDL0MsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsNkJBQTZCLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRTtnQkFDcEYsTUFBTTthQUNQLENBQUMsQ0FBQztRQUNMLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILHVCQUF1QjtRQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDdkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNsRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSCw0QkFBNEI7UUFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDckQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxlQUF5QjtRQUNwQyxJQUFJLENBQUMsNEJBQTRCLEdBQUcsSUFBSSxDQUFDLFNBQVM7WUFDaEQsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLHVCQUF1QixDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDOUQsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUNWLElBQUksQ0FBQyxPQUFPO1lBQ1YsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RCxNQUFNLGlCQUFpQixHQUFpQyxTQUFTLENBQy9ELElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FDaEMsQ0FBQztRQUNGLE1BQU0sZ0JBQWdCLEdBQUc7WUFDdkIsb0JBQW9CLEVBQUUsSUFBSTtZQUMxQixTQUFTLEVBQUUsSUFBSTtZQUNmLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPO1NBQzNCLENBQUM7UUFDRixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxTQUFTO1lBQ2xDLENBQUMsQ0FBQyxJQUFJLENBQUMsK0JBQStCLEVBQUU7WUFDeEMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUM7WUFDeEIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxlQUFlLENBQUM7WUFDOUIsUUFBUSxFQUFFLGlCQUFpQjtZQUMzQixhQUFhLEVBQUUsRUFBRTtTQUNsQixDQUFDLENBQUM7UUFFSCxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ3BDLENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUV2QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxhQUErQjtRQUNwRCxJQUFJLGFBQWEsRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUMzQixNQUFNLGdCQUFnQixHQUFHO2dCQUN2QixvQkFBb0IsRUFBRSxJQUFJO2dCQUMxQixTQUFTLEVBQUUsSUFBSTtnQkFDZixHQUFHLGFBQWEsQ0FBQyxPQUFPO2FBQ3pCLENBQUM7WUFDRixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkQsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxHQUFHO2dCQUM3QixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYTtnQkFDL0IsR0FBRyxhQUFhLENBQUMsYUFBYTthQUMvQixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsZUFBZSxDQUFDLFdBQTBDO1FBQzlELElBQUksQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLGFBQWEsQ0FBQztRQUMzQyxJQUFJLENBQUMsRUFBRSxHQUFHLFdBQVcsQ0FBQztRQUN0QixNQUFNLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRU8sS0FBSyxDQUFDLFVBQVUsQ0FDdEIsaUJBQStDLEVBQy9DLGVBQWUsR0FBRyxLQUFLO1FBRXZCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUM5QixNQUFNLENBQUMsTUFBTSxDQUFDLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNsRCxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqRCxJQUFJLFlBQVksRUFBRSxDQUFDO2dCQUNqQixJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDakMsQ0FBQztZQUNELElBQUksZUFBZSxFQUFFLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFO29CQUMvQyxVQUFVLEVBQUUsTUFBTSxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUMsSUFBSTtpQkFDOUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFO1lBQ25FLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO1lBQ2pFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUM7WUFDaEMsSUFBSSxDQUFDLEVBQUUsR0FBRyxTQUFTLENBQUM7WUFDcEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQztZQUN2QyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsSUFBSSxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMzRSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7Z0JBQzdELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDbkMsQ0FBQztZQUNELElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztZQUN4RSxDQUFDO1lBQ0QsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNsRixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNLLHlCQUF5QixDQUFDLFNBQTJCLEVBQUUsS0FBYSxFQUFFLElBQVk7UUFDeEYsSUFBSSxJQUFJLEtBQUssaUJBQWlCLElBQUksS0FBSyxFQUFFLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQ2xFLFNBQVMsQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7UUFDeEMsQ0FBQztJQUNILENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsdUJBQXVCO2FBQ3hDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDO2FBQ3ZFLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUNkLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsTUFBYztRQUN2QyxNQUFNLGNBQWMsR0FBRyxxQkFBcUIsQ0FBQyxJQUFJLENBQy9DLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FDakQsQ0FBQztRQUNGLE1BQU0sYUFBYSxHQUFHLGNBQWM7WUFDbEMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFO1lBQ3ZCLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDM0QsT0FBTztZQUNMLElBQUksRUFBRSxJQUFJO1lBQ1YsZ0JBQWdCLEVBQUUsSUFBSTtZQUN0QixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUk7WUFDcEQsR0FBRyxhQUFhO1NBQ2pCLENBQUM7SUFDSixDQUFDO0lBRU8saUJBQWlCLENBQUMsS0FBOEI7UUFDdEQsT0FBTztZQUNMLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxxQ0FBcUMsRUFBRSw0QkFBNEIsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCO1lBQzVHLEdBQUk7Z0JBQ0YsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNYLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDWCxNQUFNLEVBQUUsS0FBSyxDQUFDLEtBQUs7Z0JBQ25CLE9BQU8sRUFBRSxLQUFLLENBQUMsTUFBTTthQUNYO1NBQ2IsQ0FBQztJQUNKLENBQUM7SUFFTywwQkFBMEI7UUFDaEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLGtCQUFrQixHQUFHO1lBQ3hCLElBQUksRUFBRSxJQUFJO1lBQ1YsS0FBSyxFQUFFLFNBQVM7WUFDaEIsSUFBSSxFQUFFLFNBQVM7U0FDaEIsQ0FBQztRQUNGLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLENBQUM7SUFFTywrQkFBK0I7UUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyw2QkFBNkIsRUFBRSxFQUFFLENBQUM7WUFDbEUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLDJCQUEyQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzNFLENBQUM7UUFDRCxNQUFNLDRCQUE0QixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDakYsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7WUFDbEMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7WUFDM0MsT0FBTyxDQUFDLENBQ04sQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUN2RCxJQUFJLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FDMUUsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7WUFDbEMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLDJCQUEyQixDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQy9FLENBQUM7UUFDRCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFTyxXQUFXLENBQ2pCLEtBQXdELEVBQ3hELGVBQW1FLEVBQ25FLGNBQXdCO1FBRXhCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxlQUFlLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDcEYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRU8seUJBQXlCLENBQy9CLGVBQW1FLEVBQ25FLGNBQXdCO1FBRXhCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxFQUFFLENBQUMsYUFBYSxDQUFDO1FBQzNFLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztZQUNwQyxhQUFhLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3RDLENBQUM7UUFDRCxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3pCLElBQUksZUFBZSxLQUFLLFNBQVMsSUFBSSxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pFLDJHQUEyRztnQkFDM0csT0FBTyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDakMsSUFBSSxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7b0JBQ2pDLE9BQU8sYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3BDLENBQUM7Z0JBQ0QsSUFBSSxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7b0JBQ3RDLE9BQU8sYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzFDLENBQUM7WUFDSCxDQUFDO2lCQUFNLElBQ0wsQ0FBQyxlQUFlLEtBQUssUUFBUSxJQUFJLGVBQWUsS0FBSyxhQUFhLENBQUM7Z0JBQ25FLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQzNCLENBQUM7Z0JBQ0Qsc0dBQXNHO1lBQ3hHLENBQUM7aUJBQU0sQ0FBQztnQkFDTixhQUFhLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMzQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0lBRU8sNEJBQTRCLENBQ2xDLFdBQW9EO1FBRXBELE1BQU0sa0JBQWtCLEdBQWlELEVBQUUsQ0FBQztRQUM1RSxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ3ZELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDcEIsU0FBUztZQUNYLENBQUM7WUFDRCxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3RSxDQUFDO1FBQ0QsT0FBTyxrQkFBa0IsQ0FBQztJQUM1QixDQUFDO0lBRU8sS0FBSyxDQUFDLGVBQWU7UUFDM0IsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN0RSxNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTNFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUU7WUFDakYsU0FBUyxFQUFFLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCO1lBQ25FLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU07WUFDbkQsSUFBSSxFQUFFLGFBQWE7WUFDbkIsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUNkLE1BQU0sRUFBRSxHQUFHLGFBQWEsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QyxhQUFhLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXO1lBQy9ELGVBQWUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxXQUFXO1lBQzVELGVBQWUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVc7WUFDbkUsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVc7WUFDdEYsNEJBQTRCLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUM1QyxDQUFDLENBQUMsR0FBRyxVQUFVLElBQUksYUFBYSxFQUFFO2dCQUNsQyxDQUFDLENBQUMsV0FBVztZQUNmLHdCQUF3QixFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVc7WUFDN0YsMEJBQTBCLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVc7WUFDMUYsZ0NBQWdDLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUNoRCxDQUFDLENBQUMsR0FBRyxVQUFVLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksYUFBYSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNuRSxDQUFDLENBQUMsV0FBVztZQUNmLGFBQWEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDaEYsT0FBTyxFQUFFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUNwRSxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sS0FBSyxDQUFDLGFBQWE7UUFDekIsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN0RSxNQUFNLGFBQWEsR0FDakIsQ0FBQyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3RELElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sQ0FBQztRQUVULElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQ2hDLElBQUksQ0FBQyxRQUFRO1lBQ1gsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsT0FBTztZQUM3QyxDQUFDLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQ2xEO1lBQ0UsU0FBUyxFQUFFLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsY0FBYztZQUNqRSxNQUFNLEVBQUUsa0JBQWtCLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJO1lBQ2pELElBQUksRUFBRSxhQUFhO1lBQ25CLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDZCxNQUFNLEVBQUUsR0FBRyxhQUFhLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEMsYUFBYSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVztZQUMvRCxlQUFlLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsV0FBVztZQUM1RCxlQUFlLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXO1lBQ25FLGlCQUFpQixFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXO1lBQ3RGLDRCQUE0QixFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDNUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxJQUFJLGFBQWEsRUFBRTtnQkFDbEMsQ0FBQyxDQUFDLFdBQVc7WUFDZix3QkFBd0IsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ3hDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNwQyxDQUFDLENBQUMsV0FBVztZQUNmLDBCQUEwQixFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXO1lBQzFGLGdDQUFnQyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDaEQsQ0FBQyxDQUFDLEdBQUcsVUFBVSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLGFBQWEsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDbkUsQ0FBQyxDQUFDLFdBQVc7WUFDZixhQUFhLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQ2hGLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDcEIsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTTtnQkFDN0MsQ0FBQyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUMvRCxDQUNGLENBQUM7SUFDSixDQUFDO0lBRU8sMkJBQTJCLENBQUMsR0FBbUI7UUFDckQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQztRQUNwRixJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2xDLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFHYSxBQUFOLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxHQUFXO1FBQzNDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNULE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3RELENBQUMsQ0FBQyxHQUFHO1lBQ0wsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0MsQ0FBQzs4R0FudkJVLHlCQUF5QixrS0E2RDFCLHdCQUF3QjtrR0E3RHZCLHlCQUF5Qixrc0JBaUN6Qix3QkFBd0IsaUdBQ3hCLHlCQUF5Qiw4REN6R3RDLDRoSEE2R0E7O0FEc3NCZ0I7SUFEYixPQUFPLEVBQUU7Ozs7b0VBUVQ7MkZBbnZCVSx5QkFBeUI7a0JBVnJDLFNBQVM7K0JBQ0UsdUJBQXVCLFFBRTNCO3dCQUNKLEtBQUssRUFBRTs7S0FFTjt3QkFDRCxLQUFLLEVBQUUsOEJBQThCO3FCQUN0Qzs7MEJBK0RFLE1BQU07MkJBQUMsd0JBQXdCO2lRQTNEbEMsSUFBSTtzQkFESCxLQUFLO2dCQUdOLGVBQWU7c0JBRGQsS0FBSztnQkFHTixPQUFPO3NCQUROLEtBQUs7Z0JBR04sUUFBUTtzQkFEUCxLQUFLO2dCQUlOLGNBQWM7c0JBRGIsS0FBSztnQkFHTixPQUFPO3NCQUROLEtBQUs7Z0JBR04sU0FBUztzQkFEUixLQUFLO2dCQUdOLFNBQVM7c0JBRFIsS0FBSztnQkFHTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBR04scUJBQXFCO3NCQURwQixLQUFLO2dCQUdHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFLTixnQkFBZ0I7c0JBRGYsS0FBSztnQkFJTixLQUFLO3NCQURKLFdBQVc7dUJBQUMsT0FBTztnQkFHbUMsZ0JBQWdCO3NCQUF0RSxTQUFTO3VCQUFDLHdCQUF3QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFckQsZ0JBQWdCO3NCQURmLFNBQVM7dUJBQUMseUJBQXlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQThDaEQsbUJBQW1CO3NCQUR4QixZQUFZO3VCQUFDLHFCQUFxQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQTZwQmpDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFJlbmRlcmVyMixcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBBY3Rpb25CYXJTZXJ2aWNlLFxuICBBbGVydFNlcnZpY2UsXG4gIEJyZWFkY3J1bWJJdGVtLFxuICBDb3B5RGFzaGJvYXJkRGlzYWJsZWRSZWFzb24sXG4gIERhc2hib2FyZENoYW5nZSxcbiAgRGFzaGJvYXJkQ2hpbGRDaGFuZ2UsXG4gIERhc2hib2FyZENoaWxkQ29tcG9uZW50LFxuICBEYXNoYm9hcmRDb3B5UGVybWlzc2lvbixcbiAgRHluYW1pY0NvbXBvbmVudERlZmluaXRpb24sXG4gIEdhaW5zaWdodFNlcnZpY2UsXG4gIGdldHRleHQsXG4gIG1lbW9pemUsXG4gIE1vZGFsU2VydmljZSxcbiAgTkVXX0RBU0hCT0FSRF9RVUVSWV9QQVJBTSxcbiAgUmV2ZXJ0Q2hhbmdlVHlwZSxcbiAgU3RhdHVzLFxuICBXaWRnZXQsXG4gIFdpZGdldENoYW5nZSxcbiAgV2lkZ2V0c0Rhc2hib2FyZENvbXBvbmVudFxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGNsb25lRGVlcCwgZXZlcnksIGZpbmRJbmRleCwga2ViYWJDYXNlLCBrZXlCeSwgb21pdCwgc29tZSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBDYW5EZWFjdGl2YXRlQ29tcG9uZW50LFxuICBDT05URVhUX0RBU0hCT0FSRF9DT05GSUcsXG4gIENvbnRleHREYXNoYm9hcmQsXG4gIENvbnRleHREYXNoYm9hcmRDb25maWcsXG4gIENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0LFxuICBEQVNIQk9BUkRfQ0hJTERSRU5fU1RBVEVfTkFNRSxcbiAgRGFzaGJvYXJkQ2hpbGRyZW5TdGF0ZSxcbiAgRGFzaGJvYXJkSGlzdG9yeURlc2NyaXB0aW9uLFxuICBQUk9EVUNUX0VYUEVSSUVOQ0UsXG4gIFdJREdFVF9IRUFERVJfQ0xBU1NFU1xufSBmcm9tICcuL2NvbnRleHQtZGFzaGJvYXJkLm1vZGVsJztcbmltcG9ydCB7IENvbnRleHREYXNoYm9hcmRTZXJ2aWNlIH0gZnJvbSAnLi9jb250ZXh0LWRhc2hib2FyZC5zZXJ2aWNlJztcbmltcG9ydCB7IERhc2hib2FyZERldGFpbENvbXBvbmVudCB9IGZyb20gJy4vZGFzaGJvYXJkLWRldGFpbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgV2lkZ2V0Q29uZmlnQ29tcG9uZW50IH0gZnJvbSAnLi93aWRnZXQtY29uZmlnLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBXaWRnZXRTZXJ2aWNlIH0gZnJvbSAnLi93aWRnZXQuc2VydmljZSc7XG5pbXBvcnQgeyBEYXNoYm9hcmRFZGl0TW9kZVNlcnZpY2UgfSBmcm9tICcuL21lbWVudG8vZGFzaGJvYXJkLWVkaXQtbW9kZS5zZXJ2aWNlJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuXG4vKipcbiAqIFRoZSBjb250ZXh0IGRhc2hib2FyZCBpcyBhIGRhc2hib2FyZCB3aGljaCByZXNvbHZlcyBpdCBkYXRhIGZyb20gdGhlIGN1cnJlbnQgY29udGV4dCAoZGV2aWNlIG9yIGdyb3VwKVxuICogaXQgaXMgZGlzcGxheWVkIG9uLiBJdCB1c3VhbGx5IHVzZXMgdGhlIHJvdXRlLmRhdGEgZm9yIGl0LCBidXQgeW91IGNhbiBwYXNzXG4gKiBhIGRpZmZlcmVudCBtYW5hZ2VkT2JqZWN0IHRvIHRoZSBbbW9dIGlucHV0IHBhcmFtZXRlciB0byBjaGFuZ2UgdGhhdCBiZWhhdmlvci5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWNvbnRleHQtZGFzaGJvYXJkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbnRleHQtZGFzaGJvYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDoge1xuICAgIHN0eWxlOiBgXG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICBgLFxuICAgIGNsYXNzOiAnZGFzaGJvYXJkIGM4eS1ncmlkLWRhc2hib2FyZCdcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBDb250ZXh0RGFzaGJvYXJkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIENhbkRlYWN0aXZhdGVDb21wb25lbnQge1xuICBASW5wdXQoKVxuICBuYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIGNoaWxkcmVuQ2xhc3NlcyA9ICcnO1xuICBASW5wdXQoKVxuICBjb250ZXh0OiBhbnk7XG4gIEBJbnB1dCgpXG4gIHNldFRpdGxlID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgZGVmYXVsdFdpZGdldHM6IFdpZGdldFtdID0gW107XG4gIEBJbnB1dCgpXG4gIGNhbkNvcHkgPSB0cnVlO1xuICBASW5wdXQoKVxuICBjYW5EZWxldGUgPSB0cnVlO1xuICBASW5wdXQoKVxuICBpc0xvYWRpbmcgPSB0cnVlO1xuICBASW5wdXQoKVxuICBicmVhZGNydW1iU2V0dGluZ3M6IEJyZWFkY3J1bWJJdGVtO1xuICBASW5wdXQoKVxuICBzaG93Q29udGV4dEhlbHBCdXR0b24gPSB0cnVlO1xuICAvKiogV2hldGhlciB0byB0cmFuc2xhdGUgd2lkZ2V0IHRpdGxlcy4gSG93ZXZlciwgZGFzaGJvYXJkJ3Mgb3duIHNldHRpbmcgdGFrZXMgcHJlY2VkZW5jZS4gSXQgZG9lcyBub3Qgb3ZlcnJpZGUgZGFzaGJvYXJkJ3Mgc2V0dGluZyAqL1xuICBASW5wdXQoKSB0cmFuc2xhdGVXaWRnZXRUaXRsZTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEhpZGVzIGRhc2hib2FyZCBhdmFpbGFiaWxpdHkgc2VsZWN0aW9uLlxuICAgKi9cbiAgQElucHV0KClcbiAgaGlkZUF2YWlsYWJpbGl0eSA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBjbGFzcyA9ICcnO1xuXG4gIEBWaWV3Q2hpbGQoRGFzaGJvYXJkRGV0YWlsQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KSBkYXNoYm9hcmREZXRhaWxzOiBEYXNoYm9hcmREZXRhaWxDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoV2lkZ2V0c0Rhc2hib2FyZENvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgd2lkZ2V0c0Rhc2hib2FyZDogV2lkZ2V0c0Rhc2hib2FyZENvbXBvbmVudDtcblxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmhhc1Blcm1pc3Npb25Ub0VkaXREYXNoYm9hcmQgfHwgIXRoaXMuZGFzaGJvYXJkRGV0YWlscz8uaXNDb2xsYXBzZWQ7XG4gIH1cblxuICB3aWRnZXRzOiBXaWRnZXRbXSA9IFtdO1xuICBtbzogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q7XG4gIGRhc2hib2FyZDogQ29udGV4dERhc2hib2FyZDtcbiAgdGl0bGU6IHN0cmluZztcbiAgaXNDb3B5RGlzYWJsZWQ6IERhc2hib2FyZENvcHlQZXJtaXNzaW9uO1xuICBpc1JlcG9ydDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZGFzaGJvYXJkVHlwZUxhYmVsID0gZ2V0dGV4dCgnRGFzaGJvYXJkIGZvciBcInt7IGRhc2hib2FyZFR5cGUgfX1cIicpO1xuICByZWFkb25seSBkYXNoYm9hcmRUeXBlUG9wb3ZlciA9IGdldHRleHQoYFxuICBUaGUgbGF5b3V0IGFuZCBjb25maWd1cmF0aW9uIG9mIHRoaXMgZGFzaGJvYXJkIGlzIHVzZWQgYnkgYWxsIG90aGVyIGFzc2V0cyBvZiBtb2RlbCB0eXBlXG4gIDxzdHJvbmc+e3sgZGFzaGJvYXJkVHlwZSB9fTwvc3Ryb25nPi4gQW55IGNoYW5nZXMgbWFkZSB0byB0aGlzIGRhc2hib2FyZCBpbnN0YW5jZSB3aWxsIGJlIGFwcGxpZWQgdG8gYWxsXG4gIG90aGVyIGluc3RhbmNlcy5gKTtcbiAgcHJpdmF0ZSBkYXRhU3ViOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgaGFzUGVybWlzc2lvblRvRWRpdERhc2hib2FyZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBjb250ZXh0RGFzaGJvYXJkU2VydmljZTogQ29udGV4dERhc2hib2FyZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydDogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBASW5qZWN0KENPTlRFWFRfREFTSEJPQVJEX0NPTkZJRykgcHVibGljIG1vZHVsZUNvbmZpZzogQ29udGV4dERhc2hib2FyZENvbmZpZyxcbiAgICBwcml2YXRlIHdpZGdldFNlcnZpY2U6IFdpZGdldFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBic01vZGFsOiBCc01vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIGdhaW5zaWdodFNlcnZpY2U6IEdhaW5zaWdodFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY3Rpb25CYXJTZXJ2aWNlOiBBY3Rpb25CYXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsOiBNb2RhbFNlcnZpY2UsXG4gICAgcHVibGljIGVkaXRNb2RlU2VydmljZTogRGFzaGJvYXJkRWRpdE1vZGVTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAoIXRoaXMubmFtZSkge1xuICAgICAgdGhpcy5sb2FkQ29udGV4dERhc2hib2FyZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmxvYWROYW1lZERhc2hib2FyZCgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmJlZm9yZXVubG9hZCcsIFsnJGV2ZW50J10pXG4gIGFzeW5jIGJlZm9yZVVubG9hZEhhbmRsZXIoJGV2ZW50OiBCZWZvcmVVbmxvYWRFdmVudCkge1xuICAgIGNvbnN0IGNhbkRlYWN0aXZhdGUgPSBhd2FpdCB0aGlzLmNhbkRlYWN0aXZhdGUodHJ1ZSk7XG4gICAgaWYgKCFjYW5EZWFjdGl2YXRlKSB7XG4gICAgICAkZXZlbnQucmV0dXJuVmFsdWUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIHRoZSBjdXJyZW50IGNvbnRleHQgdG8gdGhlIHdpZGdldFxuICAgKiBAcGFyYW0gd2lkZ2V0IFRoZSB3aWRnZXQgdG8gYXBwbHkgdGhlIGNvbnRleHQgdG8uXG4gICAqL1xuICBhcHBseURldmljZVRhcmdldCh3aWRnZXQpIHtcbiAgICBpZiAod2lkZ2V0LmNvbmZpZy5kZXZpY2UpIHtcbiAgICAgIHdpZGdldC5jb25maWcuZGV2aWNlID0geyBpZDogdGhpcy5jb250ZXh0LmlkLCBuYW1lOiB0aGlzLmNvbnRleHQubmFtZSB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSByb3V0ZSBsaXN0ZW5lci5cbiAgICovXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGFTdWIpIHtcbiAgICAgIHRoaXMuZGF0YVN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBjb25zdCBpc05ld0Rhc2hib2FyZCA9IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbTkVXX0RBU0hCT0FSRF9RVUVSWV9QQVJBTV07XG4gICAgaWYgKGlzTmV3RGFzaGJvYXJkKSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgICBxdWVyeVBhcmFtczogbnVsbFxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBHdWFyZHMgY29tcG9uZW50IGZyb20gdW5pbnRlbmRlZCBuYXZpZ2F0aW9uIGF3YXkgb3IgY2xvc2luZyB0YWIgd2l0aG91dCBzYXZpbmcgY2hhbmdlcy5cbiAgICogTmF2aWdhdGlvbiBjb250aW51ZXMgaWYgdHJ1ZSBpcyByZXR1cm5lZCwgYW5kIG5hdmlnYXRpb24gaXMgY2FuY2VsbGVkIGlmIHJldHVybmVkIHZhbHVlIGlzIGZhbHNlLlxuICAgKiBAcGFyYW0gb21pdENvbmZpcm0gT21pdHMgY29uZmlybSBjYWxscyBpbnNpZGUgbWV0aG9kIGJvZHkgKHdpdGhvdXQgdGhpcyBwYXJhbSwgd2hlbiBtZXRob2QgaXMgdXNlZCBpblxuICAgKiBvbiAnYmVmb3JldW5sb2FkJyBldmVudCBoYW5kbGVyLCBlcnJvciBpcyB0aHJvd24gaW4gY29uc29sZSBiZWNhdXNlIGNvbmZpcm0gaXMgYmxvY2tlZCBieSBicm93c2VyIGFueXdheSBhbmQgcmV0dXJucyBmYWxzZSlcbiAgICovXG4gIGFzeW5jIGNhbkRlYWN0aXZhdGUob21pdENvbmZpcm0gPSBmYWxzZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGNhbkRlYWN0aXZhdGUgPVxuICAgICAgKGF3YWl0IHRoaXMuZGFzaGJvYXJkRGV0YWlscy5jYW5EZWFjdGl2YXRlKG9taXRDb25maXJtKSkgJiZcbiAgICAgIChhd2FpdCB0aGlzLndpZGdldHNEYXNoYm9hcmQuY2FuRGVhY3RpdmF0ZShvbWl0Q29uZmlybSkpO1xuXG4gICAgLy8gTmVlZGVkIGluIG9yZGVyIHRvIHJlc2V0IGVkaXQgbW9kZSwgb3RoZXJ3aXNlIHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gZGFzaGJvYXJkcywgdGhlIGVkaXQgbW9kZSBpcyBzdGlsbCBlbmFibGVkLlxuICAgIGlmIChjYW5EZWFjdGl2YXRlKSB7XG4gICAgICBhd2FpdCB0aGlzLmNhbmNlbEVkaXRNb2RlKHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gY2FuRGVhY3RpdmF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlcyB0aGUgZGFzaGJvYXJkIHdpZGdldHMgdG8gdGhlIGRlZmF1bHQgd2lkZ2V0cy5cbiAgICovXG4gIGFzeW5jIHJlc3RvcmUoKSB7XG4gICAgY29uc3QgbWVzZyA9IGdldHRleHQoXG4gICAgICAnWW91IGFyZSBhYm91dCB0byByZXNldCB0aGUgd2lkZ2V0cyBvZiB0aGlzIGRhc2hib2FyZC4gQWxsIGNoYW5nZXMgdG8gdGhlIGRhc2hib2FyZCB3aWRnZXRzIHdpbGwgZ2V0IGxvc3QgYW5kIGNhbm5vdCBiZSByZWNvdmVyZWQuIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/J1xuICAgICk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5tb2RhbC5jb25maXJtKGdldHRleHQoJ1Jlc2V0IHdpZGdldHMnKSwgbWVzZywgU3RhdHVzLldBUk5JTkcsIHtcbiAgICAgICAgb2s6IGdldHRleHQoJ1Jlc2V0YGRhc2hib2FyZGAnKSxcbiAgICAgICAgY2FuY2VsOiBnZXR0ZXh0KCdDYW5jZWwnKVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMubW8uYzh5X0Rhc2hib2FyZC5jaGlsZHJlbiA9IHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UubWFwV2lkZ2V0cyh0aGlzLmRlZmF1bHRXaWRnZXRzKTtcbiAgICAgIHRoaXMubW8uYzh5X0Rhc2hib2FyZC5oaXN0b3J5RGVzY3JpcHRpb24gPSB7XG4gICAgICAgIGNoYW5nZVR5cGU6ICdyZXNldCdcbiAgICAgIH07XG4gICAgICBhd2FpdCB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLnVwZGF0ZSh0aGlzLm1vKTtcbiAgICAgIGF3YWl0IHRoaXMub25Mb2FkKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICB0aGlzLmFsZXJ0LmFkZFNlcnZlckZhaWx1cmUoZXJyb3IpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogTWV0aG9kIGNhbGxlZCBvbiBldmVyeSB3aWRnZXRzIGRpbWVuc2lvbnMgb3IgcG9zaXRpb24gY2hhbmdlIGJ1dCBhbHNvIGZvciBhZGRpbmcgbmV3IHdpZGdldCAoYmVjYXVzZSBhZGRpbmdcbiAgICogd2lkZ2V0IGNhdXNlcyBsYXlvdXQgY2hhbmdlcykuIEl0IHJlY29nbml6ZXMgd2hhdCB0eXBlIG9mIGNoYW5nZSBoYXMgYmVlbiBkb25lIGFuZCB1cGRhdGVzIGN1cnJlbnQgd2lkZ2V0cyBzdGF0ZVxuICAgKiBhY2NvcmRpbmdseS5cbiAgICogQHBhcmFtIGNoaWxkIENoYW5nZSBvYmplY3QuXG4gICAqL1xuICBwb3NpdGlvbk9yV2lkZ2V0RGltZW5zaW9uQ2hhbmdlKGNoaWxkOiBEYXNoYm9hcmRDaGlsZENoYW5nZSB8IERhc2hib2FyZENoYW5nZSk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHRoaXMuZWRpdE1vZGVTZXJ2aWNlLmdldEN1cnJlbnRTdGF0ZSgpPy5jaGlsZHJlbiB8fCB7fTtcbiAgICBjb25zdCBkZXNjcmlwdGlvblByb3A6IGtleW9mIERhc2hib2FyZEhpc3RvcnlEZXNjcmlwdGlvblsnd2lkZ2V0Q2hhbmdlcyddID1cbiAgICAgIGNoaWxkLmNoaWxkcmVuLmxlbmd0aCA9PT0gT2JqZWN0LnZhbHVlcyhjdXJyZW50U3RhdGUpLmxlbmd0aCA/ICdhcnJhbmdlbWVudCcgOiAnYWRkZWQnO1xuICAgIGxldCBjaGFuZ2VOYW1lOiBEYXNoYm9hcmRDaGlsZHJlblN0YXRlWyduYW1lJ107XG4gICAgbGV0IHdpZGdldHNDaGFuZ2VkOiBXaWRnZXRbXTtcbiAgICBpZiAoZGVzY3JpcHRpb25Qcm9wID09PSAnYWRkZWQnKSB7XG4gICAgICBjaGFuZ2VOYW1lID0gREFTSEJPQVJEX0NISUxEUkVOX1NUQVRFX05BTUUuYWRkZWQ7XG4gICAgICBjb25zdCBhZGRlZFdpZGdldCA9IGNoaWxkLmNoaWxkcmVuLmZpbmQoYyA9PiAhY3VycmVudFN0YXRlW2MuZGF0YS5pZF0pO1xuICAgICAgd2lkZ2V0c0NoYW5nZWQgPSBbYWRkZWRXaWRnZXQuZGF0YV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoYW5nZU5hbWUgPSBEQVNIQk9BUkRfQ0hJTERSRU5fU1RBVEVfTkFNRS5hcnJhbmdlbWVudDtcbiAgICAgIHdpZGdldHNDaGFuZ2VkID0gY2hpbGQuY2hpbGRyZW5cbiAgICAgICAgLm1hcChjID0+IHtcbiAgICAgICAgICBjb25zdCBsYXN0U3RhdGVDaGlsZCA9IGN1cnJlbnRTdGF0ZVtjLmRhdGEuaWRdO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGMueCAhPSBsYXN0U3RhdGVDaGlsZC5feCB8fFxuICAgICAgICAgICAgYy55ICE9IGxhc3RTdGF0ZUNoaWxkLl95IHx8XG4gICAgICAgICAgICBjLndpZHRoICE9IGxhc3RTdGF0ZUNoaWxkLl93aWR0aCB8fFxuICAgICAgICAgICAgYy5oZWlnaHQgIT0gbGFzdFN0YXRlQ2hpbGQuX2hlaWdodFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGMuZGF0YTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVEYXNoYm9hcmRDaGlsZHJlbihjaGlsZCwgY2hhbmdlTmFtZSwgZGVzY3JpcHRpb25Qcm9wLCB3aWRnZXRzQ2hhbmdlZCk7XG4gIH1cblxuICBhc3luYyByZXZlcnRDaGFuZ2UocmV2ZXJ0VHlwZTogUmV2ZXJ0Q2hhbmdlVHlwZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBkYXNoYm9hcmRDaGlsZHJlbjogQ29udGV4dERhc2hib2FyZFsnY2hpbGRyZW4nXTtcbiAgICBpZiAocmV2ZXJ0VHlwZSA9PT0gJ3VuZG8nKSB7XG4gICAgICBkYXNoYm9hcmRDaGlsZHJlbiA9IHRoaXMuZWRpdE1vZGVTZXJ2aWNlLnVuZG8oKS5jaGlsZHJlbjtcbiAgICB9IGVsc2Uge1xuICAgICAgZGFzaGJvYXJkQ2hpbGRyZW4gPSB0aGlzLmVkaXRNb2RlU2VydmljZS5yZWRvKCkuY2hpbGRyZW47XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuc2V0V2lkZ2V0cyhkYXNoYm9hcmRDaGlsZHJlbik7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBhbGwgZGFzaGJvYXJkcyBjaGlsZHJlbidzLiBVc2VmdWwgZm9yIHBvc2l0aW9uIGNoYW5nZXMgb24gdGhlIGRhc2hib2FyZC5cbiAgICogQHBhcmFtIGNoaWxkIFRoZSBjaGlsZCB0byBjaGFuZ2UuXG4gICAqIEBwYXJhbSBjaGFuZ2VOYW1lIE5hbWUgb2YgdGhlIGNoYW5nZSB0byBpbmRpY2F0ZSBpdCBvbiB1bmRvL3JlZG8gYnV0dG9uLlxuICAgKiBAcGFyYW0gZGVzY3JpcHRpb25Qcm9wIFByb3BlcnR5IHRvIGFkZCB0byBkYXNoYm9hcmQgY2hhbmdlIGhpc3RvcnkuXG4gICAqIEBwYXJhbSB3aWRnZXRzQ2hhbmdlZCBMaXN0IG9mIGNoYW5nZWQgd2lkZ2V0cy5cbiAgICovXG4gIHVwZGF0ZURhc2hib2FyZENoaWxkcmVuKFxuICAgIGNoaWxkOiBEYXNoYm9hcmRDaGlsZENoYW5nZSB8IERhc2hib2FyZENoYW5nZSxcbiAgICBjaGFuZ2VOYW1lOiBEYXNoYm9hcmRDaGlsZHJlblN0YXRlWyduYW1lJ10sXG4gICAgZGVzY3JpcHRpb25Qcm9wOiBrZXlvZiBEYXNoYm9hcmRIaXN0b3J5RGVzY3JpcHRpb25bJ3dpZGdldENoYW5nZXMnXSxcbiAgICB3aWRnZXRzQ2hhbmdlZDogV2lkZ2V0W11cbiAgKTogdm9pZCB7XG4gICAgY29uc3QgeyBjaGlsZHJlbiB9ID0gY2hpbGQ7XG4gICAgY29uc3QgbWFwcGVkQ2hpbGRyZW46IHsgW2lkOiBzdHJpbmddOiBXaWRnZXQgfSA9IGtleUJ5KFxuICAgICAgY2hpbGRyZW4ubWFwKGMgPT4gdGhpcy5jb21wb25lbnRUb1dpZGdldChjKSksXG4gICAgICAnaWQnXG4gICAgKTtcbiAgICB0aGlzLnNldE5ld1N0YXRlKFxuICAgICAgeyBuYW1lOiBjaGFuZ2VOYW1lLCBjaGlsZHJlbjogbWFwcGVkQ2hpbGRyZW4gfSxcbiAgICAgIGRlc2NyaXB0aW9uUHJvcCxcbiAgICAgIHdpZGdldHNDaGFuZ2VkXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3BpZXMgdGhlIGRhc2hib2FyZCBhbmQgY3VycmVudCBjb250ZXh0IHRvIGEgY2xpcGJvYXJkLlxuICAgKi9cbiAgYXN5bmMgY29weURhc2hib2FyZCgpIHtcbiAgICBjb25zdCB2aWV3Q29udGV4dCA9IHRoaXMucm91dGUucGFyZW50LnNuYXBzaG90LmRhdGE/LmNvbnRleHQ7XG5cbiAgICB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmNvcHlDbGlwYm9hcmQgPSB7XG4gICAgICBkYXNoYm9hcmRJZDogdGhpcy5tby5pZCxcbiAgICAgIGRhc2hib2FyZDogY2xvbmVEZWVwKHRoaXMubW8uYzh5X0Rhc2hib2FyZCksXG4gICAgICBjb250ZXh0OiBjbG9uZURlZXAoe1xuICAgICAgICBjb250ZXh0OiB2aWV3Q29udGV4dCxcbiAgICAgICAgY29udGV4dERhdGE6IHRoaXMuY29udGV4dFxuICAgICAgfSlcbiAgICB9O1xuXG4gICAgaWYgKHZpZXdDb250ZXh0KSB7XG4gICAgICBjb25zdCBjdHggPSB2aWV3Q29udGV4dC5zcGxpdCgnLycpLnNoaWZ0KCk7XG4gICAgICBjb25zdCBtc2cgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgJ0Rhc2hib2FyZCBjb3BpZWQuIE5hdmlnYXRlIHRvIHRoZSBkZXNpcmVkIHt7IGN0eCB9fSBhbmQgc2VsZWN0IFwiUGFzdGUgZGFzaGJvYXJkXCInLFxuICAgICAgICB7IGN0eCB9XG4gICAgICApO1xuICAgICAgdGhpcy5hbGVydC5zdWNjZXNzKG1zZyk7XG4gICAgfVxuICAgIHRoaXMuYWN0aW9uQmFyU2VydmljZS5yZWZyZXNoKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHRoZSBjb21wbGV0ZSBkYXNoYm9hcmQgYW5kIG5hdmlnYXRlIGF3YXkuXG4gICAqL1xuICBhc3luYyBkZWxldGVEYXNoYm9hcmQoKSB7XG4gICAgYXdhaXQgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5kZWxldGUodGhpcy5tbyk7XG4gICAgaWYgKHRoaXMucm91dGUucGFyZW50KSB7XG4gICAgICBjb25zdCByb3V0ZSA9IHRoaXMucm91dGUucGFyZW50LnNuYXBzaG90LnVybC5tYXAoc2VnbWVudCA9PiBzZWdtZW50LnBhdGgpLmpvaW4oJy8nKTtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwocm91dGUpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLm9uRGVsZXRlR1NFdmVudCgpO1xuICB9XG5cbiAgZ2V0IGlzRGV2aWNlVHlwZURhc2hib2FyZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmRhc2hib2FyZD8uZGV2aWNlVHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFZGl0cyBhIHdpZGdldCBvbiB0aGUgZGFzaGJvYXJkLlxuICAgKiBAcGFyYW0gY2hhbmdlIFRoZSB3aWRnZXQgY2hhbmdlIGV2ZW50LlxuICAgKi9cbiAgYXN5bmMgZWRpdFdpZGdldChjaGFuZ2U6IFdpZGdldENoYW5nZSkge1xuICAgIGNvbnN0IHsgeCwgeSwgd2lkdGgsIGhlaWdodCB9ID0gY2hhbmdlLnNvdXJjZTtcbiAgICBjb25zdCBjb21wb25lbnQgPSBhd2FpdCB0aGlzLndpZGdldFNlcnZpY2UuZ2V0V2lkZ2V0RGVmaW5pdGlvbihcbiAgICAgIGNoYW5nZS53aWRnZXQubmFtZSB8fCBjaGFuZ2Uud2lkZ2V0LmNvbXBvbmVudElkXG4gICAgKTtcbiAgICBpZiAoIWNvbXBvbmVudCkge1xuICAgICAgdGhpcy5hZGRXaWRnZXQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5hZGRXaWRnZXQoe1xuICAgICAgLi4uY29tcG9uZW50LFxuICAgICAgZGF0YTogeyAuLi5jb21wb25lbnQuZGF0YSwgLi4uY2hhbmdlLndpZGdldCwgX3g6IHgsIF95OiB5LCBfd2lkdGg6IHdpZHRoLCBfaGVpZ2h0OiBoZWlnaHQgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB3aWRnZXQgdG8gdGhlIGRhc2hib2FyZC5cbiAgICogQHBhcmFtIHNlbGVjdGVkIERlZmluZSBhIHNlbGVjdGVkIGNvbXBvbmVudCB0byBzd2l0Y2ggdG8gZWRpdCBtb2RlIGRpcmVjdGx5LlxuICAgKi9cbiAgYXN5bmMgYWRkV2lkZ2V0KHNlbGVjdGVkPzogRHluYW1pY0NvbXBvbmVudERlZmluaXRpb24pIHtcbiAgICBjb25zdCBwYXJ0aWFsQ2xvbmVTZWxlY3RlZCA9IHNlbGVjdGVkXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zZWxlY3RlZCxcbiAgICAgICAgICBkYXRhOiBjbG9uZURlZXAoc2VsZWN0ZWQuZGF0YSlcbiAgICAgICAgfVxuICAgICAgOiBzZWxlY3RlZDtcblxuICAgIGNvbnN0IGFjdGl2ZUNvbnRleHQgPSB0aGlzLmNvbnRleHQuY29udGV4dERhdGEgPyB0aGlzLmNvbnRleHQuY29udGV4dERhdGEgOiB0aGlzLmNvbnRleHQ7XG4gICAgY29uc3QgaW5pdGlhbFN0YXRlOiBQYXJ0aWFsPFdpZGdldENvbmZpZ0NvbXBvbmVudD4gPSB7XG4gICAgICBtbzogdGhpcy5tbyxcbiAgICAgIGNvbnRleHQ6IHRoaXMuY29udGV4dC5jOHlfUmVwb3J0ID8ge30gOiBhY3RpdmVDb250ZXh0LFxuICAgICAgc2VsZWN0ZWQ6IHBhcnRpYWxDbG9uZVNlbGVjdGVkXG4gICAgfTtcblxuICAgIGNvbnN0IG1vZGFsID0gdGhpcy5ic01vZGFsLnNob3coV2lkZ2V0Q29uZmlnQ29tcG9uZW50LCB7XG4gICAgICBjbGFzczogJ21vZGFsLWxnJyxcbiAgICAgIGFyaWFEZXNjcmliZWRieTogJ21vZGFsLWJvZHknLFxuICAgICAgYXJpYUxhYmVsbGVkQnk6ICdtb2RhbC10aXRsZScsXG4gICAgICBpbml0aWFsU3RhdGUsXG4gICAgICBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlLFxuICAgICAga2V5Ym9hcmQ6IGZhbHNlXG4gICAgfSkuY29udGVudCBhcyBXaWRnZXRDb25maWdDb21wb25lbnQ7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgbmV3V2lkZ2V0ID0gYXdhaXQgbW9kYWwucmVzdWx0O1xuICAgICAgaWYgKCF0aGlzLm1vLmM4eV9EYXNoYm9hcmQuY2hpbGRyZW4pIHtcbiAgICAgICAgdGhpcy5tby5jOHlfRGFzaGJvYXJkLmNoaWxkcmVuID0ge307XG4gICAgICB9XG4gICAgICBuZXdXaWRnZXQuY2xhc3NlcyA9IHRoaXMubWVyZ2VXaWRnZXRDbGFzc2VzKG5ld1dpZGdldCk7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZVdpZGdldChuZXdXaWRnZXQpO1xuICAgICAgLy8gTmV3IHN0YXRlIGluIGVkaXQgbW9kZSBpcyBhZGRlZCBvbmx5IGZvciB3aWRnZXQgdXBkYXRlLiBXaGVuIGFkZGluZyB3aWRnZXQsIGxheW91dCBjaGFuZ2UgaXMgYWx3YXlzIHRyaWdnZXJlZCxcbiAgICAgIC8vIHNvIGl0J3MgZWFzaWVyIHRvIHNldCBuZXcgc3RhdGUgb24gbGF5b3V0IGNoYW5nZSBvbmx5XG4gICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB7XG4gICAgICAgICAgLi4udGhpcy5lZGl0TW9kZVNlcnZpY2UuZ2V0Q3VycmVudFN0YXRlKCkuY2hpbGRyZW4sXG4gICAgICAgICAgW25ld1dpZGdldC5pZF06IG5ld1dpZGdldFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnNldE5ld1N0YXRlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IERBU0hCT0FSRF9DSElMRFJFTl9TVEFURV9OQU1FLmNvbmZpZyxcbiAgICAgICAgICAgIGNoaWxkcmVuXG4gICAgICAgICAgfSxcbiAgICAgICAgICAnY29uZmlnJyxcbiAgICAgICAgICBbbmV3V2lkZ2V0XVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgbW9kYWwuY2xvc2UoKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgLy8gaW50ZW5kZWQgZW1wdHlcbiAgICB9XG4gIH1cblxuICBhc3luYyBzYXZlV2lkZ2V0c1RvRGFzaGJvYXJkKCkge1xuICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHRoaXMuZWRpdE1vZGVTZXJ2aWNlLmdldEN1cnJlbnRTdGF0ZSgpO1xuICAgIHRoaXMubW8uYzh5X0Rhc2hib2FyZC5jaGlsZHJlbiA9IGN1cnJlbnRTdGF0ZS5jaGlsZHJlbjtcblxuICAgIHRoaXMubW8uYzh5X0Rhc2hib2FyZC5oaXN0b3J5RGVzY3JpcHRpb24gPSB7XG4gICAgICBjaGFuZ2VUeXBlOiAndXBkYXRlJyxcbiAgICAgIHdpZGdldENoYW5nZXM6IHRoaXMubWFwU3RhdGVUb0hpc3RvcnlEZXNjcmlwdGlvbihjdXJyZW50U3RhdGUuY2hhbmdlSGlzdG9yeSlcbiAgICB9O1xuICAgIGF3YWl0IHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UudXBkYXRlKHRoaXMubW8pO1xuICAgIHRoaXMuZWRpdE1vZGVTZXJ2aWNlLnJlc2V0KCk7XG4gICAgdGhpcy5lZGl0TW9kZVNlcnZpY2UuaW5pdCh7XG4gICAgICBuYW1lOiBEQVNIQk9BUkRfQ0hJTERSRU5fU1RBVEVfTkFNRS5pbml0aWFsLFxuICAgICAgY2hpbGRyZW46IHRoaXMubW8uYzh5X0Rhc2hib2FyZC5jaGlsZHJlbixcbiAgICAgIGNoYW5nZUhpc3Rvcnk6IHt9XG4gICAgfSk7XG5cbiAgICB0aGlzLmlzQ29weURpc2FibGVkID0gdGhpcy5nZXREYXNoYm9hcmRDb3B5UGVybWlzc2lvblN0YXRlKCk7XG4gIH1cblxuICBhc3luYyBjYW5jZWxFZGl0TW9kZShvbkRlYWN0aXZhdGUgPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGRhc2hib2FyZENoaWxkcmVuID0gdGhpcy5lZGl0TW9kZVNlcnZpY2UucmVzZXQoKTtcbiAgICBpZiAodGhpcy5kYXNoYm9hcmQpIHtcbiAgICAgIHRoaXMuZGFzaGJvYXJkLmhpc3RvcnlEZXNjcmlwdGlvbiA9IHt9O1xuICAgIH1cbiAgICB0aGlzLndpZGdldHNEYXNoYm9hcmQuZWRpdE1vZGUkLm5leHQoZmFsc2UpO1xuICAgIGlmICghb25EZWFjdGl2YXRlKSB7XG4gICAgICAvLyB3aGVuIHNldFdpZGdldHMgaXMgY2FsbGVkIGR1cmluZyBuYXZpZ2F0aW9uIGZyb20gZGV2aWNlIHRvIGRldmljZSwgbmF2aWdhdGlvbiBmYWlsc1xuICAgICAgYXdhaXQgdGhpcy5zZXRXaWRnZXRzKGRhc2hib2FyZENoaWxkcmVuLmNoaWxkcmVuKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBhIHdpZGdldCBvciBhZGRzIGEgbmV3IG9uZSBpZiBpdCBkb2Vzbid0IGV4aXN0IG9uXG4gICAqIHRoZSBkYXNoYm9hcmQuXG4gICAqIEBwYXJhbSB3aWRnZXQgVGhlIG5ldyB3aWRnZXRcbiAgICovXG4gIGFzeW5jIHVwZGF0ZVdpZGdldCh3aWRnZXQpIHtcbiAgICBjb25zdCBpbmRleCA9IGZpbmRJbmRleCh0aGlzLndpZGdldHMsIHsgaWQ6IHdpZGdldC5pZCB9KTtcbiAgICBjb25zdCBpc05ldyA9IGluZGV4ID09PSAtMTtcbiAgICBjb25zdCBtYXBwZWRXaWRnZXQgPSBhd2FpdCB0aGlzLndpZGdldFNlcnZpY2UubWFwTGVnYWN5KHdpZGdldCk7XG4gICAgaWYgKGlzTmV3KSB7XG4gICAgICB0aGlzLndpZGdldHMucHVzaChtYXBwZWRXaWRnZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndpZGdldHMuc3BsaWNlKGluZGV4LCAxLCBtYXBwZWRXaWRnZXQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgd2lkZ2V0IGFuZCByZWFycmFuZ2VzIHRoZSByZW1haW5pbmcgb25lc1xuICAgKiBpZiBuZWNlc3NhcnkuXG4gICAqIEBwYXJhbSBjaGFuZ2UgVGhlIGNoYW5nZSBldmVudC5cbiAgICovXG4gIGFzeW5jIGRlbGV0ZVdpZGdldChjaGFuZ2U6IFdpZGdldENoYW5nZSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IHdpZGdldCwgc291cmNlIH0gPSBjaGFuZ2U7XG4gICAgICBjb25zdCByZW1vdmVkID0gdGhpcy53aWRnZXRzLmZpbmQoKHsgaWQgfSkgPT4gaWQgPT09IHdpZGdldC5pZCk7XG4gICAgICB0aGlzLndpZGdldHMuc3BsaWNlKHRoaXMud2lkZ2V0cy5pbmRleE9mKHJlbW92ZWQpLCAxKTtcblxuICAgICAgY29uc3QgeyBkYXNoYm9hcmQgfSA9IHNvdXJjZTtcbiAgICAgIGRhc2hib2FyZC5jaGlsZHJlbiA9IGRhc2hib2FyZC5jaGlsZHJlbi5maWx0ZXIoYyA9PiBjLmRhdGEuaWQgIT09IHdpZGdldC5pZCk7XG5cbiAgICAgIC8vIHVzaW5nIHNldFRpbWVvdXQgdG8gZ2l2ZSB0aGUgY29tcG9uZW50IHRoZSBjaGFuY2UgdG8gcmVtb3ZlIGl0LlxuICAgICAgY29uc3Qgc2xlZXAgPSB0aW1lb3V0ID0+IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0KSk7XG4gICAgICBhd2FpdCBzbGVlcCgwKTtcblxuICAgICAgY29uc3QgY2hpbGQgPSBuZXcgRGFzaGJvYXJkQ2hpbGRDaGFuZ2Uoc291cmNlKTtcbiAgICAgIGNoaWxkLmNvbGxhcHNlVXBBbGwoKTtcbiAgICAgIHRoaXMudXBkYXRlRGFzaGJvYXJkQ2hpbGRyZW4oY2hpbGQsIERBU0hCT0FSRF9DSElMRFJFTl9TVEFURV9OQU1FLnJlbW92ZWQsICdyZW1vdmVkJywgW1xuICAgICAgICB3aWRnZXRcbiAgICAgIF0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuYWxlcnQuYWRkU2VydmVyRmFpbHVyZShlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyBhIHdvcmthcm91bmQgdG8gZW5zdXJlIHRoYXQgdGhlIGRyYWdnZWQtZWxlbWVudFxuICAgKiAod2hpY2ggaXMgYXR0YWNoZWQgdG8gdGhlIGJvZHkpIGhhcyB0aGUgcmlnaHQgc3R5bGluZy5cbiAgICovXG4gIGFkZERhc2hib2FyZENsYXNzVG9Cb2R5KCkge1xuICAgIHRoaXMuY2xhc3Muc3BsaXQoJyAnKS5mb3JFYWNoKGNzc0NsYXNzID0+IHtcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgY3NzQ2xhc3MpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYSB3b3JrYXJvdW5kIHRvIGVuc3VyZSB0aGF0IHRoZSBkcmFnZ2VkLWVsZW1lbnRcbiAgICogKHdoaWNoIGlzIGF0dGFjaGVkIHRvIHRoZSBib2R5KSBoYXMgdGhlIHJpZ2h0IHN0eWxpbmcuXG4gICAqL1xuICByZW1vdmVEYXNoYm9hcmRDbGFzc0Zyb21Cb2R5KCkge1xuICAgIHRoaXMuY2xhc3Muc3BsaXQoJyAnKS5mb3JFYWNoKGNzc0NsYXNzID0+IHtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZG9jdW1lbnQuYm9keSwgY3NzQ2xhc3MpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgb25Mb2FkKHRyYWNrRXhwZXJpZW5jZT86IGJvb2xlYW4pIHtcbiAgICB0aGlzLmhhc1Blcm1pc3Npb25Ub0VkaXREYXNoYm9hcmQgPSB0aGlzLmRhc2hib2FyZFxuICAgICAgPyBhd2FpdCB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmNhbkVkaXREYXNoYm9hcmQodGhpcy5tbylcbiAgICAgIDogZmFsc2U7XG4gICAgdGhpcy5jYW5Db3B5ID1cbiAgICAgIHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuaXNEZXZpY2VEYXNoYm9hcmQodGhpcy5tbykgfHxcbiAgICAgIHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuaXNEZXZpY2VUeXBlKHRoaXMubW8pIHx8XG4gICAgICB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmlzR3JvdXBEYXNoYm9hcmQodGhpcy5tbyk7XG4gICAgY29uc3QgZGFzaGJvYXJkQ2hpbGRyZW46IENvbnRleHREYXNoYm9hcmRbJ2NoaWxkcmVuJ10gPSBjbG9uZURlZXAoXG4gICAgICB0aGlzLm1vLmM4eV9EYXNoYm9hcmQ/LmNoaWxkcmVuXG4gICAgKTtcbiAgICBjb25zdCBkYXNoYm9hcmRDbGFzc2VzID0ge1xuICAgICAgJ2M4eS1ncmlkLWRhc2hib2FyZCc6IHRydWUsXG4gICAgICBkYXNoYm9hcmQ6IHRydWUsXG4gICAgICAuLi50aGlzLmRhc2hib2FyZD8uY2xhc3Nlc1xuICAgIH07XG4gICAgdGhpcy5pc0NvcHlEaXNhYmxlZCA9IHRoaXMuZGFzaGJvYXJkXG4gICAgICA/IHRoaXMuZ2V0RGFzaGJvYXJkQ29weVBlcm1pc3Npb25TdGF0ZSgpXG4gICAgICA6IHsgc3RhdGU6IGZhbHNlLCByZWFzb246IG51bGwgfTtcbiAgICB0aGlzLmVkaXRNb2RlU2VydmljZS5pbml0KHtcbiAgICAgIG5hbWU6IGdldHRleHQoJ0luaXRpYWwgc3RhdGUnKSxcbiAgICAgIGNoaWxkcmVuOiBkYXNoYm9hcmRDaGlsZHJlbixcbiAgICAgIGNoYW5nZUhpc3Rvcnk6IHt9XG4gICAgfSk7XG5cbiAgICBhd2FpdCB0aGlzLnNldFdpZGdldHMoZGFzaGJvYXJkQ2hpbGRyZW4sIHRyYWNrRXhwZXJpZW5jZSk7XG4gICAgdGhpcy5jbGFzcyA9IE9iamVjdC5rZXlzKGRhc2hib2FyZENsYXNzZXMpLmpvaW4oJyAnKTtcbiAgICBpZiAodGhpcy5pc1JlcG9ydCkge1xuICAgICAgdGhpcy5hZGRSZXBvcnREYXNoYm9hcmRTZXR0aW5ncygpO1xuICAgIH1cbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgaWYgKCF0aGlzLmRhc2hib2FyZCkge1xuICAgICAgdGhpcy5kYXNoYm9hcmREZXRhaWxzLnNob3coZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLm9uTG9hZEdTRXZlbnQoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkYXNoYm9hcmRQcmV2aWV3KGxheW91dENoYW5nZXM6IENvbnRleHREYXNoYm9hcmQpIHtcbiAgICBpZiAobGF5b3V0Q2hhbmdlcz8uY2xhc3Nlcykge1xuICAgICAgY29uc3QgZGFzaGJvYXJkQ2xhc3NlcyA9IHtcbiAgICAgICAgJ2M4eS1ncmlkLWRhc2hib2FyZCc6IHRydWUsXG4gICAgICAgIGRhc2hib2FyZDogdHJ1ZSxcbiAgICAgICAgLi4ubGF5b3V0Q2hhbmdlcy5jbGFzc2VzXG4gICAgICB9O1xuICAgICAgdGhpcy5jbGFzcyA9IE9iamVjdC5rZXlzKGRhc2hib2FyZENsYXNzZXMpLmpvaW4oJyAnKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZGFzaGJvYXJkKSB7XG4gICAgICB0aGlzLmRhc2hib2FyZC53aWRnZXRDbGFzc2VzID0ge1xuICAgICAgICAuLi50aGlzLmRhc2hib2FyZC53aWRnZXRDbGFzc2VzLFxuICAgICAgICAuLi5sYXlvdXRDaGFuZ2VzLndpZGdldENsYXNzZXNcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmVsb2FkRGFzaGJvYXJkKGRhc2hib2FyZE1vOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCkge1xuICAgIHRoaXMuZGFzaGJvYXJkID0gZGFzaGJvYXJkTW8uYzh5X0Rhc2hib2FyZDtcbiAgICB0aGlzLm1vID0gZGFzaGJvYXJkTW87XG4gICAgYXdhaXQgdGhpcy5vbkxvYWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2V0V2lkZ2V0cyhcbiAgICBkYXNoYm9hcmRDaGlsZHJlbjogQ29udGV4dERhc2hib2FyZFsnY2hpbGRyZW4nXSxcbiAgICB0cmFja0V4cGVyaWVuY2UgPSBmYWxzZVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpc0RldmljZVR5cGUgPSB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmlzRGV2aWNlVHlwZSh0aGlzLm1vKTtcbiAgICB0aGlzLndpZGdldHMgPSBhd2FpdCBQcm9taXNlLmFsbDxXaWRnZXQ+KFxuICAgICAgT2JqZWN0LnZhbHVlcyhkYXNoYm9hcmRDaGlsZHJlbiB8fCB7fSkubWFwKHdpZGdldCA9PiB7XG4gICAgICAgIHdpZGdldC5jbGFzc2VzID0gdGhpcy5tZXJnZVdpZGdldENsYXNzZXMod2lkZ2V0KTtcbiAgICAgICAgaWYgKGlzRGV2aWNlVHlwZSkge1xuICAgICAgICAgIHRoaXMuYXBwbHlEZXZpY2VUYXJnZXQod2lkZ2V0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHJhY2tFeHBlcmllbmNlKSB7XG4gICAgICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudCgnbG9hZFdpZGdldCcsIHtcbiAgICAgICAgICAgIHdpZGdldE5hbWU6IHdpZGdldC5jb21wb25lbnRJZCB8fCB3aWRnZXQubmFtZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLndpZGdldFNlcnZpY2UubWFwTGVnYWN5KHdpZGdldCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRDb250ZXh0RGFzaGJvYXJkKCkge1xuICAgIHRoaXMuZGF0YVN1YiA9IHRoaXMucm91dGUuZGF0YS5zdWJzY3JpYmUoKHsgZGFzaGJvYXJkLCBpc1JlcG9ydCB9KSA9PiB7XG4gICAgICB0aGlzLmNvbnRleHQgPSB0aGlzLnJvdXRlLnBhcmVudC5zbmFwc2hvdC5kYXRhLmNvbnRleHREYXRhIHx8IHt9O1xuICAgICAgdGhpcy50aXRsZSA9IHRoaXMuY29udGV4dD8ubmFtZTtcbiAgICAgIHRoaXMubW8gPSBkYXNoYm9hcmQ7XG4gICAgICB0aGlzLmRhc2hib2FyZCA9IHRoaXMubW8uYzh5X0Rhc2hib2FyZDtcbiAgICAgIHRoaXMuaXNSZXBvcnQgPSBpc1JlcG9ydCB8fCB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmlzUmVwb3J0KHRoaXMubW8pO1xuICAgICAgaWYgKHRoaXMuaXNSZXBvcnQgJiYgdGhpcy5kYXNoYm9hcmQgJiYgIXRoaXMuZGFzaGJvYXJkPy5uYW1lKSB7XG4gICAgICAgIHRoaXMuZGFzaGJvYXJkLm5hbWUgPSB0aGlzLnRpdGxlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaXNSZXBvcnQgJiYgdGhpcy5kYXNoYm9hcmQpIHtcbiAgICAgICAgdGhpcy5kYXNoYm9hcmQuYzh5X0lzTmF2aWdhdG9yTm9kZSA9IHRoaXMuY29udGV4dC5jOHlfSXNOYXZpZ2F0b3JOb2RlO1xuICAgICAgfVxuICAgICAgdGhpcy5wYXRjaFNlbnNvclBob25lRGFzaGJvYXJkKHRoaXMuZGFzaGJvYXJkLCB0aGlzLm1vLm93bmVyLCB0aGlzLmNvbnRleHQ/LnR5cGUpO1xuICAgICAgdGhpcy5vbkxvYWQodHJ1ZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVG8gZW5hYmxlIHRyYW5zbGF0aW9uIGZvciB3aWRnZXRzIHdpdGhpbiB0aGUgZGFzaGJvYXJkLCB0aGUgXCJ0cmFuc2xhdGVXaWRnZXRUaXRsZVwiIGZsYWcgbXVzdCBiZSBlbmFibGVkLlxuICAgKiBUaGUgcHJvcGVydHkgbmVlZHMgdG8gYmUgcGF0Y2hlZCwgYXMgdGhlIFwiU2Vuc29yIEFwcFwiIGRvZXMgbm90IHByb3ZpZGUgdGhpcyBzZXR0aW5nLlxuICAgKi9cbiAgcHJpdmF0ZSBwYXRjaFNlbnNvclBob25lRGFzaGJvYXJkKGRhc2hib2FyZDogQ29udGV4dERhc2hib2FyZCwgb3duZXI6IHN0cmluZywgdHlwZTogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGUgPT09ICdjOHlfU2Vuc29yUGhvbmUnICYmIG93bmVyPy5pbmNsdWRlcygnZGV2aWNlX3Bob25lJykpIHtcbiAgICAgIGRhc2hib2FyZC50cmFuc2xhdGVXaWRnZXRUaXRsZSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsb2FkTmFtZWREYXNoYm9hcmQoKSB7XG4gICAgdGhpcy5kYXRhU3ViID0gdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZVxuICAgICAgLmdldE5hbWVkRGFzaGJvYXJkT3JDcmVhdGUodGhpcy5uYW1lLCB0aGlzLmRlZmF1bHRXaWRnZXRzLCB0aGlzLmNvbnRleHQpXG4gICAgICAuc3Vic2NyaWJlKG1vID0+IHtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gdGhpcy5jb250ZXh0IHx8IHt9O1xuICAgICAgICB0aGlzLm1vID0gbW87XG4gICAgICAgIHRoaXMuZGFzaGJvYXJkID0gdGhpcy5tby5jOHlfRGFzaGJvYXJkO1xuICAgICAgICB0aGlzLm9uTG9hZCh0cnVlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBtZXJnZVdpZGdldENsYXNzZXMod2lkZ2V0OiBXaWRnZXQpOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiB7XG4gICAgY29uc3QgaGFzSGVhZGVyQ2xhc3MgPSBXSURHRVRfSEVBREVSX0NMQVNTRVMuZmluZChcbiAgICAgIGVsID0+IHdpZGdldC5jbGFzc2VzICYmIHdpZGdldC5jbGFzc2VzW2VsLmNsYXNzXVxuICAgICk7XG4gICAgY29uc3Qgd2lkZ2V0Q2xhc3NlcyA9IGhhc0hlYWRlckNsYXNzXG4gICAgICA/IHsgLi4ud2lkZ2V0LmNsYXNzZXMgfVxuICAgICAgOiB7IC4uLnRoaXMuZGFzaGJvYXJkLndpZGdldENsYXNzZXMsIC4uLndpZGdldC5jbGFzc2VzIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGNhcmQ6IHRydWUsXG4gICAgICAnY2FyZC1kYXNoYm9hcmQnOiB0cnVlLFxuICAgICAgW2tlYmFiQ2FzZSh3aWRnZXQuY29tcG9uZW50SWQgfHwgd2lkZ2V0Lm5hbWUpXTogdHJ1ZSxcbiAgICAgIC4uLndpZGdldENsYXNzZXNcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wb25lbnRUb1dpZGdldChjaGlsZDogRGFzaGJvYXJkQ2hpbGRDb21wb25lbnQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ub21pdChjaGlsZC5kYXRhLCBbJ2NvbXBvbmVudFRyYW5zZm9ybUNvbmZpZ1dpdGhDb250ZXh0JywgJ3RyYW5zZm9ybUNvbmZpZ1dpdGhDb250ZXh0J10pLCAvLyByZW1vdmUgbGVnYWN5XG4gICAgICAuLi4oe1xuICAgICAgICBfeDogY2hpbGQueCxcbiAgICAgICAgX3k6IGNoaWxkLnksXG4gICAgICAgIF93aWR0aDogY2hpbGQud2lkdGgsXG4gICAgICAgIF9oZWlnaHQ6IGNoaWxkLmhlaWdodFxuICAgICAgfSBhcyBXaWRnZXQpXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUmVwb3J0RGFzaGJvYXJkU2V0dGluZ3MoKSB7XG4gICAgdGhpcy5zZXRUaXRsZSA9IHRydWU7XG4gICAgdGhpcy50aXRsZSA9IHRoaXMuY29udGV4dD8ubmFtZSB8fCBnZXR0ZXh0KCdOZXcgcmVwb3J0Jyk7XG4gICAgdGhpcy5icmVhZGNydW1iU2V0dGluZ3MgPSB7XG4gICAgICBpY29uOiAndGgnLFxuICAgICAgbGFiZWw6ICdSZXBvcnRzJyxcbiAgICAgIHBhdGg6ICdyZXBvcnRzJ1xuICAgIH07XG4gICAgdGhpcy5jYW5EZWxldGUgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGFzaGJvYXJkQ29weVBlcm1pc3Npb25TdGF0ZSgpOiBEYXNoYm9hcmRDb3B5UGVybWlzc2lvbiB7XG4gICAgaWYgKCF0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmhhc1Blcm1pc3Npb25zVG9Db3B5RGFzaGJvYXJkKCkpIHtcbiAgICAgIHJldHVybiB7IHN0YXRlOiBmYWxzZSwgcmVhc29uOiBDb3B5RGFzaGJvYXJkRGlzYWJsZWRSZWFzb24uUEVSTUlTU0lPTlMgfTtcbiAgICB9XG4gICAgY29uc3QgYWxsRGFzaGJvYXJkQ2hpbGRyZW5BcmVWYWxpZCA9IGV2ZXJ5KHRoaXMubW8uYzh5X0Rhc2hib2FyZC5jaGlsZHJlbiwgY2hpbGQgPT4ge1xuICAgICAgY29uc3QgY29uZmlnID0gY2hpbGQuY29uZmlnIHx8IHt9O1xuICAgICAgY29uc3QgZGF0YVBvaW50cyA9IGNvbmZpZy5kYXRhcG9pbnRzIHx8IFtdO1xuICAgICAgcmV0dXJuICEoXG4gICAgICAgIChjb25maWcuZGV2aWNlICYmIGNvbmZpZy5kZXZpY2UuaWQgIT09IHRoaXMuY29udGV4dC5pZCkgfHxcbiAgICAgICAgc29tZShkYXRhUG9pbnRzLCBkYXRhUG9pbnQgPT4gZGF0YVBvaW50Ll9fdGFyZ2V0Py5pZCAhPT0gdGhpcy5jb250ZXh0LmlkKVxuICAgICAgKTtcbiAgICB9KTtcbiAgICBpZiAoIWFsbERhc2hib2FyZENoaWxkcmVuQXJlVmFsaWQpIHtcbiAgICAgIHJldHVybiB7IHN0YXRlOiBmYWxzZSwgcmVhc29uOiBDb3B5RGFzaGJvYXJkRGlzYWJsZWRSZWFzb24uV1JPTkdfUkVGRVJFTkNFIH07XG4gICAgfVxuICAgIHJldHVybiB7IHN0YXRlOiB0cnVlIH07XG4gIH1cblxuICBwcml2YXRlIHNldE5ld1N0YXRlKFxuICAgIHN0YXRlOiBQaWNrPERhc2hib2FyZENoaWxkcmVuU3RhdGUsICduYW1lJyB8ICdjaGlsZHJlbic+LFxuICAgIGRlc2NyaXB0aW9uUHJvcDoga2V5b2YgRGFzaGJvYXJkSGlzdG9yeURlc2NyaXB0aW9uWyd3aWRnZXRDaGFuZ2VzJ10sXG4gICAgd2lkZ2V0c0NoYW5nZWQ6IFdpZGdldFtdXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gdGhpcy5nZXREZXNjcmlwdGlvbkZvck5ld1N0YXRlKGRlc2NyaXB0aW9uUHJvcCwgd2lkZ2V0c0NoYW5nZWQpO1xuICAgIHRoaXMuZWRpdE1vZGVTZXJ2aWNlLm5ld1N0YXRlKHsgLi4uc3RhdGUsIGNoYW5nZUhpc3Rvcnk6IGRlc2NyaXB0aW9uIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZXNjcmlwdGlvbkZvck5ld1N0YXRlKFxuICAgIGRlc2NyaXB0aW9uUHJvcDoga2V5b2YgRGFzaGJvYXJkSGlzdG9yeURlc2NyaXB0aW9uWyd3aWRnZXRDaGFuZ2VzJ10sXG4gICAgd2lkZ2V0c0NoYW5nZWQ6IFdpZGdldFtdXG4gICk6IERhc2hib2FyZENoaWxkcmVuU3RhdGVbJ2NoYW5nZUhpc3RvcnknXSB7XG4gICAgY29uc3QgY2hhbmdlSGlzdG9yeSA9IHRoaXMuZWRpdE1vZGVTZXJ2aWNlLmdldEN1cnJlbnRTdGF0ZSgpLmNoYW5nZUhpc3Rvcnk7XG4gICAgaWYgKCFjaGFuZ2VIaXN0b3J5W2Rlc2NyaXB0aW9uUHJvcF0pIHtcbiAgICAgIGNoYW5nZUhpc3RvcnlbZGVzY3JpcHRpb25Qcm9wXSA9IHt9O1xuICAgIH1cbiAgICB3aWRnZXRzQ2hhbmdlZC5mb3JFYWNoKHcgPT4ge1xuICAgICAgaWYgKGRlc2NyaXB0aW9uUHJvcCA9PT0gJ3JlbW92ZWQnICYmIGNoYW5nZUhpc3RvcnkuYWRkZWQ/Llt3LmlkXSkge1xuICAgICAgICAvLyBpZiB3aWRnZXQgd2FzIGFkZGVkIGR1cmluZyBjdXJyZW50IGVkaXQgc2Vzc2lvbiBhbmQgdGhlbiByZW1vdmVkLCBpdCBzaG91bGQgbm90IGJlIGF0IGRlc2NyaXB0aW9uIGF0IGFsbFxuICAgICAgICBkZWxldGUgY2hhbmdlSGlzdG9yeS5hZGRlZFt3LmlkXTtcbiAgICAgICAgaWYgKGNoYW5nZUhpc3RvcnkuY29uZmlnPy5bdy5pZF0pIHtcbiAgICAgICAgICBkZWxldGUgY2hhbmdlSGlzdG9yeS5jb25maWdbdy5pZF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZUhpc3RvcnkuYXJyYW5nZW1lbnQ/Llt3LmlkXSkge1xuICAgICAgICAgIGRlbGV0ZSBjaGFuZ2VIaXN0b3J5Py5hcnJhbmdlbWVudFt3LmlkXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgKGRlc2NyaXB0aW9uUHJvcCA9PT0gJ2NvbmZpZycgfHwgZGVzY3JpcHRpb25Qcm9wID09PSAnYXJyYW5nZW1lbnQnKSAmJlxuICAgICAgICBjaGFuZ2VIaXN0b3J5LmFkZGVkPy5bdy5pZF1cbiAgICAgICkge1xuICAgICAgICAvLyBpZiB3aWRnZXQgd2FzIGFkZGVkIGFuZCB0aGVuIG1vZGlmaWVkIGluIGN1cnJlbnQgZWRpdCBzZXNzaW9uLCBpdCBzaG91bGQgb25seSBiZSBpbmRpY2F0ZWQgYXMgYWRkZWRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoYW5nZUhpc3RvcnlbZGVzY3JpcHRpb25Qcm9wXVt3LmlkXSA9IHc7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY2hhbmdlSGlzdG9yeTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwU3RhdGVUb0hpc3RvcnlEZXNjcmlwdGlvbihcbiAgICBkZXNjcmlwdGlvbjogRGFzaGJvYXJkQ2hpbGRyZW5TdGF0ZVsnY2hhbmdlSGlzdG9yeSddXG4gICk6IERhc2hib2FyZEhpc3RvcnlEZXNjcmlwdGlvblsnd2lkZ2V0Q2hhbmdlcyddIHtcbiAgICBjb25zdCBoaXN0b3J5RGVzY3JpcHRpb246IERhc2hib2FyZEhpc3RvcnlEZXNjcmlwdGlvblsnd2lkZ2V0Q2hhbmdlcyddID0ge307XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGVzY3JpcHRpb24pKSB7XG4gICAgICBjb25zdCB3aWRnZXRzID0gT2JqZWN0LnZhbHVlcyh2YWx1ZSk7XG4gICAgICBpZiAoIXdpZGdldHMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaGlzdG9yeURlc2NyaXB0aW9uW2tleV0gPSBPYmplY3QudmFsdWVzKHZhbHVlKS5tYXAod2lkZ2V0ID0+IHdpZGdldC50aXRsZSk7XG4gICAgfVxuICAgIHJldHVybiBoaXN0b3J5RGVzY3JpcHRpb247XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIG9uRGVsZXRlR1NFdmVudCgpIHtcbiAgICBjb25zdCBwYXJlbnROYW1lID0gYXdhaXQgdGhpcy5jb252ZXJ0U3RyaW5nVG9IYXNoKHRoaXMuY29udGV4dD8ubmFtZSk7XG4gICAgY29uc3QgZGFzaGJvYXJkTmFtZSA9IGF3YWl0IHRoaXMuY29udmVydFN0cmluZ1RvSGFzaCh0aGlzLmRhc2hib2FyZD8ubmFtZSk7XG5cbiAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KFBST0RVQ1RfRVhQRVJJRU5DRS5EQVNIQk9BUkQuRVZFTlRTLkRBU0hCT0FSRFMsIHtcbiAgICAgIGNvbXBvbmVudDogUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5DT01QT05FTlRTLkRFTEVURV9EQVNIQk9BUkQsXG4gICAgICBhY3Rpb246IFBST0RVQ1RfRVhQRVJJRU5DRS5EQVNIQk9BUkQuQUNUSU9OUy5ERUxFVEUsXG4gICAgICBuYW1lOiBkYXNoYm9hcmROYW1lLFxuICAgICAgaWQ6IHRoaXMubW8uaWQsXG4gICAgICBuYW1lSWQ6IGAke2Rhc2hib2FyZE5hbWV9XyR7dGhpcy5tby5pZH1gLFxuICAgICAgcGFyZW50QXNzZXRJZDogdGhpcy5jb250ZXh0Py5pZCA/IHRoaXMuY29udGV4dC5pZCA6ICdub0NvbnRleHQnLFxuICAgICAgcGFyZW50QXNzZXROYW1lOiB0aGlzLmNvbnRleHQ/LmlkID8gcGFyZW50TmFtZSA6ICdub0NvbnRleHQnLFxuICAgICAgcGFyZW50QXNzZXRUeXBlOiB0aGlzLmNvbnRleHQ/LmlkID8gdGhpcy5jb250ZXh0LnR5cGUgOiAnbm9Db250ZXh0JyxcbiAgICAgIHBhcmVudEFzc2V0TmFtZUlkOiB0aGlzLmNvbnRleHQ/LmlkID8gYCR7cGFyZW50TmFtZX1fJHt0aGlzLmNvbnRleHQuaWR9YCA6ICdub0NvbnRleHQnLFxuICAgICAgcGFyZW50QXNzZXROYW1lRGFzaGJvYXJkTmFtZTogdGhpcy5jb250ZXh0Py5pZFxuICAgICAgICA/IGAke3BhcmVudE5hbWV9XyR7ZGFzaGJvYXJkTmFtZX1gXG4gICAgICAgIDogJ25vQ29udGV4dCcsXG4gICAgICBwYXJlbnRBc3NldElkRGFzaGJvYXJkSWQ6IHRoaXMuY29udGV4dD8uaWQgPyBgJHt0aGlzLmNvbnRleHQuaWR9XyR7dGhpcy5tby5pZH1gIDogJ25vQ29udGV4dCcsXG4gICAgICBwYXJlbnRBc3NldE5hbWVEYXNoYm9hcmRJZDogdGhpcy5jb250ZXh0Py5pZCA/IGAke3BhcmVudE5hbWV9XyR7dGhpcy5tby5pZH1gIDogJ25vQ29udGV4dCcsXG4gICAgICBwYXJlbnRBc3NldE5hbWVJZERhc2hib2FyZE5hbWVJZDogdGhpcy5jb250ZXh0Py5pZFxuICAgICAgICA/IGAke3BhcmVudE5hbWV9XyR7dGhpcy5jb250ZXh0LmlkfV8ke2Rhc2hib2FyZE5hbWV9XyR7dGhpcy5tby5pZH1gXG4gICAgICAgIDogJ25vQ29udGV4dCcsXG4gICAgICBkYXNoYm9hcmRUeXBlOiB0aGlzLmRhc2hib2FyZC5kZXZpY2VUeXBlID8gdGhpcy5kYXNoYm9hcmQuZGV2aWNlVHlwZVZhbHVlIDogbnVsbCxcbiAgICAgIGNvbnRleHQ6IHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuZ2V0Q29udGV4dEZvckdTKHRoaXMuY29udGV4dClcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgb25Mb2FkR1NFdmVudCgpIHtcbiAgICBjb25zdCBwYXJlbnROYW1lID0gYXdhaXQgdGhpcy5jb252ZXJ0U3RyaW5nVG9IYXNoKHRoaXMuY29udGV4dD8ubmFtZSk7XG4gICAgY29uc3QgZGFzaGJvYXJkTmFtZSA9XG4gICAgICAoYXdhaXQgdGhpcy5jb252ZXJ0U3RyaW5nVG9IYXNoKHRoaXMuZGFzaGJvYXJkPy5uYW1lKSkgPz9cbiAgICAgIHRoaXMuZXh0cmFjdERlZmF1bHREYXNoYm9hcmROYW1lKHRoaXMubW8pID8/XG4gICAgICAnbm9uZSc7XG5cbiAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KFxuICAgICAgdGhpcy5pc1JlcG9ydFxuICAgICAgICA/IFBST0RVQ1RfRVhQRVJJRU5DRS5EQVNIQk9BUkQuRVZFTlRTLlJFUE9SVFNcbiAgICAgICAgOiBQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkVWRU5UUy5EQVNIQk9BUkRTLFxuICAgICAge1xuICAgICAgICBjb21wb25lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5EQVNIQk9BUkQuQ09NUE9ORU5UUy5EQVNIQk9BUkRfVklFVyxcbiAgICAgICAgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkFDVElPTlMuTE9BRCxcbiAgICAgICAgbmFtZTogZGFzaGJvYXJkTmFtZSxcbiAgICAgICAgaWQ6IHRoaXMubW8uaWQsXG4gICAgICAgIG5hbWVJZDogYCR7ZGFzaGJvYXJkTmFtZX1fJHt0aGlzLm1vLmlkfWAsXG4gICAgICAgIHBhcmVudEFzc2V0SWQ6IHRoaXMuY29udGV4dD8uaWQgPyB0aGlzLmNvbnRleHQuaWQgOiAnbm9Db250ZXh0JyxcbiAgICAgICAgcGFyZW50QXNzZXROYW1lOiB0aGlzLmNvbnRleHQ/LmlkID8gcGFyZW50TmFtZSA6ICdub0NvbnRleHQnLFxuICAgICAgICBwYXJlbnRBc3NldFR5cGU6IHRoaXMuY29udGV4dD8uaWQgPyB0aGlzLmNvbnRleHQudHlwZSA6ICdub0NvbnRleHQnLFxuICAgICAgICBwYXJlbnRBc3NldE5hbWVJZDogdGhpcy5jb250ZXh0Py5pZCA/IGAke3BhcmVudE5hbWV9XyR7dGhpcy5jb250ZXh0LmlkfWAgOiAnbm9Db250ZXh0JyxcbiAgICAgICAgcGFyZW50QXNzZXROYW1lRGFzaGJvYXJkTmFtZTogdGhpcy5jb250ZXh0Py5pZFxuICAgICAgICAgID8gYCR7cGFyZW50TmFtZX1fJHtkYXNoYm9hcmROYW1lfWBcbiAgICAgICAgICA6ICdub0NvbnRleHQnLFxuICAgICAgICBwYXJlbnRBc3NldElkRGFzaGJvYXJkSWQ6IHRoaXMuY29udGV4dD8uaWRcbiAgICAgICAgICA/IGAke3RoaXMuY29udGV4dC5pZH1fJHt0aGlzLm1vLmlkfWBcbiAgICAgICAgICA6ICdub0NvbnRleHQnLFxuICAgICAgICBwYXJlbnRBc3NldE5hbWVEYXNoYm9hcmRJZDogdGhpcy5jb250ZXh0Py5pZCA/IGAke3BhcmVudE5hbWV9XyR7dGhpcy5tby5pZH1gIDogJ25vQ29udGV4dCcsXG4gICAgICAgIHBhcmVudEFzc2V0TmFtZUlkRGFzaGJvYXJkTmFtZUlkOiB0aGlzLmNvbnRleHQ/LmlkXG4gICAgICAgICAgPyBgJHtwYXJlbnROYW1lfV8ke3RoaXMuY29udGV4dC5pZH1fJHtkYXNoYm9hcmROYW1lfV8ke3RoaXMubW8uaWR9YFxuICAgICAgICAgIDogJ25vQ29udGV4dCcsXG4gICAgICAgIGRhc2hib2FyZFR5cGU6IHRoaXMuZGFzaGJvYXJkLmRldmljZVR5cGUgPyB0aGlzLmRhc2hib2FyZC5kZXZpY2VUeXBlVmFsdWUgOiBudWxsLFxuICAgICAgICBjb250ZXh0OiB0aGlzLmlzUmVwb3J0XG4gICAgICAgICAgPyBQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkNPTlRFWFQuUkVQT1JUXG4gICAgICAgICAgOiB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmdldENvbnRleHRGb3JHUyh0aGlzLmNvbnRleHQpXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdERlZmF1bHREYXNoYm9hcmROYW1lKG9iajogSU1hbmFnZWRPYmplY3QpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBuYW1lS2V5ID0gT2JqZWN0LmtleXMob2JqKS5maW5kKGtleSA9PiBrZXkuc3RhcnRzV2l0aCgnYzh5X0Rhc2hib2FyZCFuYW1lIScpKTtcbiAgICBpZiAobmFtZUtleSkge1xuICAgICAgcmV0dXJuIG5hbWVLZXkuc3BsaXQoJyEnKS5wb3AoKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBAbWVtb2l6ZSgpXG4gIHByaXZhdGUgYXN5bmMgY29udmVydFN0cmluZ1RvSGFzaChzdHI6IHN0cmluZykge1xuICAgIGlmICghc3RyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmdhaW5zaWdodFNlcnZpY2Uuc2hvdWxkU2VuZFBpaURhdGEoKSlcbiAgICAgID8gc3RyXG4gICAgICA6IHRoaXMuZ2FpbnNpZ2h0U2VydmljZS5oYXNoR3JvdXBOYW1lKHN0cik7XG4gIH1cbn1cbiIsIjxjOHktdGl0bGUgKm5nSWY9XCJ0aXRsZVwiPlxuICB7eyB0aXRsZSB9fVxuPC9jOHktdGl0bGU+XG5cbjxjOHktYWN0aW9uLWJhci1pdGVtXG4gIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiXG4gIFtwcmlvcml0eV09XCIxMDAwMFwiXG4gICpuZ0lmPVwiZGFzaGJvYXJkPy5kZXZpY2VUeXBlICYmIGRhc2hib2FyZC5kZXZpY2VUeXBlVmFsdWVcIlxuPlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJidG4tY2xlYW4gYnRuLWxpbmtcIlxuICAgIHBvcG92ZXJUaXRsZT1cInt7ICdEYXNoYm9hcmQgdGVtcGxhdGUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidIZWxwJyB8IHRyYW5zbGF0ZVwiXG4gICAgW3BvcG92ZXJdPVwiZGFzaGJvYXJkVHlwZVBvcG92ZXJSZWZcIlxuICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXG4gICAgdHJpZ2dlcnM9XCJmb2N1c1wiXG4gICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gID5cbiAgICA8c3BhbiBjbGFzcz1cInRhZyB0YWctLWluZm8gdGV4dC0xMlwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJkYXNoYm9hcmQtdGVtcGxhdGUtbWFya2VyXCI+PC9zcGFuPlxuICAgICAge3sgZGFzaGJvYXJkVHlwZUxhYmVsIHwgdHJhbnNsYXRlOiB7IGRhc2hib2FyZFR5cGU6IGRhc2hib2FyZC5kZXZpY2VUeXBlVmFsdWUgfSB9fVxuICAgIDwvc3Bhbj5cbiAgPC9idXR0b24+XG4gIDxuZy10ZW1wbGF0ZSAjZGFzaGJvYXJkVHlwZVBvcG92ZXJSZWY+XG4gICAgPGRpdlxuICAgICAgW2lubmVySFRNTF09XCJkYXNoYm9hcmRUeXBlUG9wb3ZlciB8IHRyYW5zbGF0ZTogeyBkYXNoYm9hcmRUeXBlOiBkYXNoYm9hcmQuZGV2aWNlVHlwZVZhbHVlIH1cIlxuICAgID48L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW1cbiAgW3BsYWNlbWVudF09XCIncmlnaHQnXCJcbiAgW3ByaW9yaXR5XT1cIi0xXCJcbiAgKm5nSWY9XCJkZWZhdWx0V2lkZ2V0cy5sZW5ndGggPiAwXCJcbj5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCJcbiAgICB0aXRsZT1cInt7ICdSZXNldCB3aWRnZXRzJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgcHgtZXZlbnQ9XCJSZXNldCBkYXNoYm9hcmRcIlxuICAgIChjbGljayk9XCJyZXN0b3JlKClcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCAod2lkZ2V0c0Rhc2hib2FyZD8uZWRpdE1vZGUkIHwgYXN5bmMpXCJcbiAgICBkYXRhLWN5PVwiY29udGV4dC1kYXNoYm9hcmQtLWJ1dHRvbi1yZXNldC1kYXNoYm9hcmRcIlxuICA+XG4gICAgPGlcbiAgICAgIGNsYXNzPVwibS1yLTRcIlxuICAgICAgYzh5SWNvbj1cInJlc2V0XCJcbiAgICA+PC9pPlxuICAgIDxzcGFuIGNsYXNzPVwidmlzaWJsZS14cy1pbmxpbmUgaGlkZGVuLXNtIHZpc2libGUtbWQtaW5saW5lIHZpc2libGUtbGctaW5saW5lXCI+XG4gICAgICB7eyAnUmVzZXQgd2lkZ2V0cycgfCB0cmFuc2xhdGUgfX1cbiAgICA8L3NwYW4+XG4gIDwvYnV0dG9uPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48Yzh5LWhlbHBcbiAgc3JjPVwiL2RvY3MvY29ja3BpdC93b3JraW5nLXdpdGgtZGFzaGJvYXJkcy8jd29ya2luZy13aXRoLWRhc2hib2FyZHNcIlxuICAqbmdJZj1cInNob3dDb250ZXh0SGVscEJ1dHRvblwiXG4+PC9jOHktaGVscD5cblxuPGM4eS1kYXNoYm9hcmQtZGV0YWlsXG4gIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gIFtpc1JlcG9ydF09XCJpc1JlcG9ydFwiXG4gIFtkYXNoYm9hcmRdPVwiZGFzaGJvYXJkXCJcbiAgW21vXT1cIm1vXCJcbiAgW2NvbnRleHRdPVwiY29udGV4dFwiXG4gIFtkZXZpY2VUeXBlXT1cImNvbnRleHQ/LnR5cGVcIlxuICBbaGlkZUF2YWlsYWJpbGl0eV09XCJoaWRlQXZhaWxhYmlsaXR5XCJcbiAgKGRhc2hib2FyZFNhdmVkKT1cInJlbG9hZERhc2hib2FyZCgkZXZlbnQpXCJcbiAgKHByZXZpZXdDaGFuZ2VkKT1cImRhc2hib2FyZFByZXZpZXcoJGV2ZW50KVwiXG4+PC9jOHktZGFzaGJvYXJkLWRldGFpbD5cblxuPGM4eS13aWRnZXRzLWRhc2hib2FyZFxuICBbY29udGV4dF09XCJjb250ZXh0XCJcbiAgW2NvbnRleHREYXNoYm9hcmRdPVwiZGFzaGJvYXJkXCJcbiAgW3dpZGdldHNdPVwid2lkZ2V0c1wiXG4gIFtpc0NvcHlEaXNhYmxlZF09XCJpc0NvcHlEaXNhYmxlZFwiXG4gIFtzZXR0aW5nc109XCJ7XG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgaXNEaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgY2FuRGVsZXRlOiBjYW5EZWxldGUgJiYgISFkYXNoYm9hcmQsXG4gICAgdHJhbnNsYXRlV2lkZ2V0VGl0bGU6IGRhc2hib2FyZD8udHJhbnNsYXRlV2lkZ2V0VGl0bGUgPz8gdHJhbnNsYXRlV2lkZ2V0VGl0bGUsXG4gICAgYWxsb3dGdWxsc2NyZWVuOiBtb2R1bGVDb25maWcuYWxsb3dGdWxsc2NyZWVuLFxuICAgIHRpdGxlOiBzZXRUaXRsZSA/IGRhc2hib2FyZD8ubmFtZSB8fCB0aXRsZSA6IHVuZGVmaW5lZCxcbiAgICB3aWRnZXRNYXJnaW46IGRhc2hib2FyZD8ud2lkZ2V0TWFyZ2luLFxuICAgIGNhbkNvcHk6IGNhbkNvcHkgJiYgISFkYXNoYm9hcmQsXG4gICAgZGVmYXVsdFdpZHRoOiBkYXNoYm9hcmQ/LmNvbHVtbnMgPj0gMjQgPyA4IDogNCxcbiAgICBjb2x1bW5zOiBkYXNoYm9hcmQ/LmNvbHVtbnMgfHwgMTJcbiAgfVwiXG4gIFticmVhZGNydW1iXT1cImJyZWFkY3J1bWJTZXR0aW5nc1wiXG4gIFtlZGl0TW9kZUJ1dHRvbnNdPVwie1xuICAgIHVuZG9CdXR0b25EaXNhYmxlZDogZWRpdE1vZGVTZXJ2aWNlLnVuZG9CdXR0b25EaXNhYmxlZCxcbiAgICBjaGFuZ2VUb1VuZG9OYW1lOiBlZGl0TW9kZVNlcnZpY2UuY2hhbmdlVG9VbmRvTmFtZSxcbiAgICByZWRvQnV0dG9uRGlzYWJsZWQ6ICFlZGl0TW9kZVNlcnZpY2UucmVkb1N0YWNrTGFzdEl0ZW0sXG4gICAgY2hhbmdlVG9SZWRvTmFtZTogZWRpdE1vZGVTZXJ2aWNlLnJlZG9TdGFja0xhc3RJdGVtPy5uYW1lXG4gIH1cIlxuICAob25DaGFuZ2VEYXNoYm9hcmQpPVwicG9zaXRpb25PcldpZGdldERpbWVuc2lvbkNoYW5nZSgkZXZlbnQpXCJcbiAgKG9uQWRkV2lkZ2V0KT1cImFkZFdpZGdldCgpXCJcbiAgKG9uRWRpdFdpZGdldCk9XCJlZGl0V2lkZ2V0KCRldmVudClcIlxuICAob25EZWxldGVXaWRnZXQpPVwiZGVsZXRlV2lkZ2V0KCRldmVudClcIlxuICAob25TYXZlRGFzaGJvYXJkKT1cInNhdmVXaWRnZXRzVG9EYXNoYm9hcmQoKVwiXG4gIChvbkNhbmNlbERhc2hib2FyZCk9XCJjYW5jZWxFZGl0TW9kZSgpXCJcbiAgKHJldmVydENoYW5nZSk9XCJyZXZlcnRDaGFuZ2UoJGV2ZW50KVwiXG4gIChvbkNoYW5nZVN0YXJ0KT1cImFkZERhc2hib2FyZENsYXNzVG9Cb2R5KClcIlxuICAob25DaGFuZ2VFbmQpPVwicmVtb3ZlRGFzaGJvYXJkQ2xhc3NGcm9tQm9keSgpXCJcbiAgKG9uRWRpdERhc2hib2FyZCk9XCJkYXNoYm9hcmREZXRhaWxzLnNob3codHJ1ZSlcIlxuICAob25Db3B5RGFzaGJvYXJkKT1cImNvcHlEYXNoYm9hcmQoKVwiXG4gIChvbkRlbGV0ZURhc2hib2FyZCk9XCJkZWxldGVEYXNoYm9hcmQoKVwiXG4+PC9jOHktd2lkZ2V0cy1kYXNoYm9hcmQ+XG4iXX0=
|
|
715
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1kYXNoYm9hcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29udGV4dC1kYXNoYm9hcmQvY29udGV4dC1kYXNoYm9hcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vY29udGV4dC1kYXNoYm9hcmQvY29udGV4dC1kYXNoYm9hcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsV0FBVyxFQUNYLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUdMLFNBQVMsRUFDVCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLFlBQVksRUFFWiwyQkFBMkIsRUFFM0Isb0JBQW9CLEVBSXBCLGdCQUFnQixFQUNoQixPQUFPLEVBQ1AsT0FBTyxFQUNQLFlBQVksRUFDWix5QkFBeUIsRUFFekIsTUFBTSxFQUdOLHlCQUF5QixFQUMxQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXJELE9BQU8sRUFFTCx3QkFBd0IsRUFJeEIsNkJBQTZCLEVBRzdCLGtCQUFrQixFQUNsQixxQkFBcUIsRUFDdEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4QkFBOEIs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QUNFLHVCQUF1QixRQUUzQjt3QkFDSixLQUFLLEVBQUU7O0tBRU47d0JBQ0QsS0FBSyxFQUFFLDhCQUE4QjtxQkFDdEM7OzBCQWdFRSxNQUFNOzJCQUFDLHdCQUF3QjtpUUE1RGxDLElBQUk7c0JBREgsS0FBSztnQkFHTixlQUFlO3NCQURkLEtBQUs7Z0JBR04sT0FBTztzQkFETixLQUFLO2dCQUdOLFFBQVE7c0JBRFAsS0FBSztnQkFJTixjQUFjO3NCQURiLEtBQUs7Z0JBR04sUUFBUTtzQkFEUCxLQUFLO3VCQUFDLFNBQVM7Z0JBR2hCLFNBQVM7c0JBRFIsS0FBSztnQkFHTixTQUFTO3NCQURSLEtBQUs7Z0JBR04sa0JBQWtCO3NCQURqQixLQUFLO2dCQUdOLHFCQUFxQjtzQkFEcEIsS0FBSztnQkFHRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBS04sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBSU4sS0FBSztzQkFESixXQUFXO3VCQUFDLE9BQU87Z0JBR21DLGdCQUFnQjtzQkFBdEUsU0FBUzt1QkFBQyx3QkFBd0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRXJELGdCQUFnQjtzQkFEZixTQUFTO3VCQUFDLHlCQUF5QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkErQ2hELG1CQUFtQjtzQkFEeEIsWUFBWTt1QkFBQyxxQkFBcUIsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkE4cEJqQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBSZW5kZXJlcjIsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtcbiAgQWN0aW9uQmFyU2VydmljZSxcbiAgQWxlcnRTZXJ2aWNlLFxuICBCcmVhZGNydW1iSXRlbSxcbiAgQ29weURhc2hib2FyZERpc2FibGVkUmVhc29uLFxuICBEYXNoYm9hcmRDaGFuZ2UsXG4gIERhc2hib2FyZENoaWxkQ2hhbmdlLFxuICBEYXNoYm9hcmRDaGlsZENvbXBvbmVudCxcbiAgRGFzaGJvYXJkQ29weVBlcm1pc3Npb24sXG4gIER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uLFxuICBHYWluc2lnaHRTZXJ2aWNlLFxuICBnZXR0ZXh0LFxuICBtZW1vaXplLFxuICBNb2RhbFNlcnZpY2UsXG4gIE5FV19EQVNIQk9BUkRfUVVFUllfUEFSQU0sXG4gIFJldmVydENoYW5nZVR5cGUsXG4gIFN0YXR1cyxcbiAgV2lkZ2V0LFxuICBXaWRnZXRDaGFuZ2UsXG4gIFdpZGdldHNEYXNoYm9hcmRDb21wb25lbnRcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBjbG9uZURlZXAsIGV2ZXJ5LCBmaW5kSW5kZXgsIGtlYmFiQ2FzZSwga2V5QnksIG9taXQsIHNvbWUgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgQ2FuRGVhY3RpdmF0ZUNvbXBvbmVudCxcbiAgQ09OVEVYVF9EQVNIQk9BUkRfQ09ORklHLFxuICBDb250ZXh0RGFzaGJvYXJkLFxuICBDb250ZXh0RGFzaGJvYXJkQ29uZmlnLFxuICBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCxcbiAgREFTSEJPQVJEX0NISUxEUkVOX1NUQVRFX05BTUUsXG4gIERhc2hib2FyZENoaWxkcmVuU3RhdGUsXG4gIERhc2hib2FyZEhpc3RvcnlEZXNjcmlwdGlvbixcbiAgUFJPRFVDVF9FWFBFUklFTkNFLFxuICBXSURHRVRfSEVBREVSX0NMQVNTRVNcbn0gZnJvbSAnLi9jb250ZXh0LWRhc2hib2FyZC5tb2RlbCc7XG5pbXBvcnQgeyBDb250ZXh0RGFzaGJvYXJkU2VydmljZSB9IGZyb20gJy4vY29udGV4dC1kYXNoYm9hcmQuc2VydmljZSc7XG5pbXBvcnQgeyBEYXNoYm9hcmREZXRhaWxDb21wb25lbnQgfSBmcm9tICcuL2Rhc2hib2FyZC1kZXRhaWwuY29tcG9uZW50JztcbmltcG9ydCB7IFdpZGdldENvbmZpZ0NvbXBvbmVudCB9IGZyb20gJy4vd2lkZ2V0LWNvbmZpZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgV2lkZ2V0U2VydmljZSB9IGZyb20gJy4vd2lkZ2V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgRGFzaGJvYXJkRWRpdE1vZGVTZXJ2aWNlIH0gZnJvbSAnLi9tZW1lbnRvL2Rhc2hib2FyZC1lZGl0LW1vZGUuc2VydmljZSc7XG5pbXBvcnQgeyBJTWFuYWdlZE9iamVjdCB9IGZyb20gJ0BjOHkvY2xpZW50JztcblxuLyoqXG4gKiBUaGUgY29udGV4dCBkYXNoYm9hcmQgaXMgYSBkYXNoYm9hcmQgd2hpY2ggcmVzb2x2ZXMgaXQgZGF0YSBmcm9tIHRoZSBjdXJyZW50IGNvbnRleHQgKGRldmljZSBvciBncm91cClcbiAqIGl0IGlzIGRpc3BsYXllZCBvbi4gSXQgdXN1YWxseSB1c2VzIHRoZSByb3V0ZS5kYXRhIGZvciBpdCwgYnV0IHlvdSBjYW4gcGFzc1xuICogYSBkaWZmZXJlbnQgbWFuYWdlZE9iamVjdCB0byB0aGUgW21vXSBpbnB1dCBwYXJhbWV0ZXIgdG8gY2hhbmdlIHRoYXQgYmVoYXZpb3IuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1jb250ZXh0LWRhc2hib2FyZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb250ZXh0LWRhc2hib2FyZC5jb21wb25lbnQuaHRtbCcsXG4gIGhvc3Q6IHtcbiAgICBzdHlsZTogYFxuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgYCxcbiAgICBjbGFzczogJ2Rhc2hib2FyZCBjOHktZ3JpZC1kYXNoYm9hcmQnXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgQ29udGV4dERhc2hib2FyZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBDYW5EZWFjdGl2YXRlQ29tcG9uZW50IHtcbiAgQElucHV0KClcbiAgbmFtZTogc3RyaW5nO1xuICBASW5wdXQoKVxuICBjaGlsZHJlbkNsYXNzZXMgPSAnJztcbiAgQElucHV0KClcbiAgY29udGV4dDogYW55O1xuICBASW5wdXQoKVxuICBzZXRUaXRsZSA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGRlZmF1bHRXaWRnZXRzOiBXaWRnZXRbXSA9IFtdO1xuICBASW5wdXQoJ2NhbkNvcHknKVxuICBfY2FuQ29weSA9IHRydWU7XG4gIEBJbnB1dCgpXG4gIGNhbkRlbGV0ZSA9IHRydWU7XG4gIEBJbnB1dCgpXG4gIGlzTG9hZGluZyA9IHRydWU7XG4gIEBJbnB1dCgpXG4gIGJyZWFkY3J1bWJTZXR0aW5nczogQnJlYWRjcnVtYkl0ZW07XG4gIEBJbnB1dCgpXG4gIHNob3dDb250ZXh0SGVscEJ1dHRvbiA9IHRydWU7XG4gIC8qKiBXaGV0aGVyIHRvIHRyYW5zbGF0ZSB3aWRnZXQgdGl0bGVzLiBIb3dldmVyLCBkYXNoYm9hcmQncyBvd24gc2V0dGluZyB0YWtlcyBwcmVjZWRlbmNlLiBJdCBkb2VzIG5vdCBvdmVycmlkZSBkYXNoYm9hcmQncyBzZXR0aW5nICovXG4gIEBJbnB1dCgpIHRyYW5zbGF0ZVdpZGdldFRpdGxlOiBib29sZWFuO1xuICAvKipcbiAgICogSGlkZXMgZGFzaGJvYXJkIGF2YWlsYWJpbGl0eSBzZWxlY3Rpb24uXG4gICAqL1xuICBASW5wdXQoKVxuICBoaWRlQXZhaWxhYmlsaXR5ID0gZmFsc2U7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gIGNsYXNzID0gJyc7XG5cbiAgQFZpZXdDaGlsZChEYXNoYm9hcmREZXRhaWxDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pIGRhc2hib2FyZERldGFpbHM6IERhc2hib2FyZERldGFpbENvbXBvbmVudDtcbiAgQFZpZXdDaGlsZChXaWRnZXRzRGFzaGJvYXJkQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICB3aWRnZXRzRGFzaGJvYXJkOiBXaWRnZXRzRGFzaGJvYXJkQ29tcG9uZW50O1xuXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuaGFzUGVybWlzc2lvblRvRWRpdERhc2hib2FyZCB8fCAhdGhpcy5kYXNoYm9hcmREZXRhaWxzPy5pc0NvbGxhcHNlZDtcbiAgfVxuXG4gIHdpZGdldHM6IFdpZGdldFtdID0gW107XG4gIG1vOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdDtcbiAgZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkO1xuICB0aXRsZTogc3RyaW5nO1xuICBpc0NvcHlEaXNhYmxlZDogRGFzaGJvYXJkQ29weVBlcm1pc3Npb247XG4gIGlzUmVwb3J0OiBib29sZWFuO1xuICBjYW5Db3B5ID0gdHJ1ZTtcbiAgcmVhZG9ubHkgZGFzaGJvYXJkVHlwZUxhYmVsID0gZ2V0dGV4dCgnRGFzaGJvYXJkIGZvciBcInt7IGRhc2hib2FyZFR5cGUgfX1cIicpO1xuICByZWFkb25seSBkYXNoYm9hcmRUeXBlUG9wb3ZlciA9IGdldHRleHQoYFxuICBUaGUgbGF5b3V0IGFuZCBjb25maWd1cmF0aW9uIG9mIHRoaXMgZGFzaGJvYXJkIGlzIHVzZWQgYnkgYWxsIG90aGVyIGFzc2V0cyBvZiBtb2RlbCB0eXBlXG4gIDxzdHJvbmc+e3sgZGFzaGJvYXJkVHlwZSB9fTwvc3Ryb25nPi4gQW55IGNoYW5nZXMgbWFkZSB0byB0aGlzIGRhc2hib2FyZCBpbnN0YW5jZSB3aWxsIGJlIGFwcGxpZWQgdG8gYWxsXG4gIG90aGVyIGluc3RhbmNlcy5gKTtcbiAgcHJpdmF0ZSBkYXRhU3ViOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgaGFzUGVybWlzc2lvblRvRWRpdERhc2hib2FyZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBjb250ZXh0RGFzaGJvYXJkU2VydmljZTogQ29udGV4dERhc2hib2FyZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydDogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBASW5qZWN0KENPTlRFWFRfREFTSEJPQVJEX0NPTkZJRykgcHVibGljIG1vZHVsZUNvbmZpZzogQ29udGV4dERhc2hib2FyZENvbmZpZyxcbiAgICBwcml2YXRlIHdpZGdldFNlcnZpY2U6IFdpZGdldFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBic01vZGFsOiBCc01vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIGdhaW5zaWdodFNlcnZpY2U6IEdhaW5zaWdodFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY3Rpb25CYXJTZXJ2aWNlOiBBY3Rpb25CYXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsOiBNb2RhbFNlcnZpY2UsXG4gICAgcHVibGljIGVkaXRNb2RlU2VydmljZTogRGFzaGJvYXJkRWRpdE1vZGVTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAoIXRoaXMubmFtZSkge1xuICAgICAgdGhpcy5sb2FkQ29udGV4dERhc2hib2FyZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmxvYWROYW1lZERhc2hib2FyZCgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmJlZm9yZXVubG9hZCcsIFsnJGV2ZW50J10pXG4gIGFzeW5jIGJlZm9yZVVubG9hZEhhbmRsZXIoJGV2ZW50OiBCZWZvcmVVbmxvYWRFdmVudCkge1xuICAgIGNvbnN0IGNhbkRlYWN0aXZhdGUgPSBhd2FpdCB0aGlzLmNhbkRlYWN0aXZhdGUodHJ1ZSk7XG4gICAgaWYgKCFjYW5EZWFjdGl2YXRlKSB7XG4gICAgICAkZXZlbnQucmV0dXJuVmFsdWUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIHRoZSBjdXJyZW50IGNvbnRleHQgdG8gdGhlIHdpZGdldFxuICAgKiBAcGFyYW0gd2lkZ2V0IFRoZSB3aWRnZXQgdG8gYXBwbHkgdGhlIGNvbnRleHQgdG8uXG4gICAqL1xuICBhcHBseURldmljZVRhcmdldCh3aWRnZXQpIHtcbiAgICBpZiAod2lkZ2V0LmNvbmZpZy5kZXZpY2UpIHtcbiAgICAgIHdpZGdldC5jb25maWcuZGV2aWNlID0geyBpZDogdGhpcy5jb250ZXh0LmlkLCBuYW1lOiB0aGlzLmNvbnRleHQubmFtZSB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSByb3V0ZSBsaXN0ZW5lci5cbiAgICovXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGFTdWIpIHtcbiAgICAgIHRoaXMuZGF0YVN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBjb25zdCBpc05ld0Rhc2hib2FyZCA9IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbTkVXX0RBU0hCT0FSRF9RVUVSWV9QQVJBTV07XG4gICAgaWYgKGlzTmV3RGFzaGJvYXJkKSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgICBxdWVyeVBhcmFtczogbnVsbFxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBHdWFyZHMgY29tcG9uZW50IGZyb20gdW5pbnRlbmRlZCBuYXZpZ2F0aW9uIGF3YXkgb3IgY2xvc2luZyB0YWIgd2l0aG91dCBzYXZpbmcgY2hhbmdlcy5cbiAgICogTmF2aWdhdGlvbiBjb250aW51ZXMgaWYgdHJ1ZSBpcyByZXR1cm5lZCwgYW5kIG5hdmlnYXRpb24gaXMgY2FuY2VsbGVkIGlmIHJldHVybmVkIHZhbHVlIGlzIGZhbHNlLlxuICAgKiBAcGFyYW0gb21pdENvbmZpcm0gT21pdHMgY29uZmlybSBjYWxscyBpbnNpZGUgbWV0aG9kIGJvZHkgKHdpdGhvdXQgdGhpcyBwYXJhbSwgd2hlbiBtZXRob2QgaXMgdXNlZCBpblxuICAgKiBvbiAnYmVmb3JldW5sb2FkJyBldmVudCBoYW5kbGVyLCBlcnJvciBpcyB0aHJvd24gaW4gY29uc29sZSBiZWNhdXNlIGNvbmZpcm0gaXMgYmxvY2tlZCBieSBicm93c2VyIGFueXdheSBhbmQgcmV0dXJucyBmYWxzZSlcbiAgICovXG4gIGFzeW5jIGNhbkRlYWN0aXZhdGUob21pdENvbmZpcm0gPSBmYWxzZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGNhbkRlYWN0aXZhdGUgPVxuICAgICAgKGF3YWl0IHRoaXMuZGFzaGJvYXJkRGV0YWlscy5jYW5EZWFjdGl2YXRlKG9taXRDb25maXJtKSkgJiZcbiAgICAgIChhd2FpdCB0aGlzLndpZGdldHNEYXNoYm9hcmQuY2FuRGVhY3RpdmF0ZShvbWl0Q29uZmlybSkpO1xuXG4gICAgLy8gTmVlZGVkIGluIG9yZGVyIHRvIHJlc2V0IGVkaXQgbW9kZSwgb3RoZXJ3aXNlIHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gZGFzaGJvYXJkcywgdGhlIGVkaXQgbW9kZSBpcyBzdGlsbCBlbmFibGVkLlxuICAgIGlmIChjYW5EZWFjdGl2YXRlKSB7XG4gICAgICBhd2FpdCB0aGlzLmNhbmNlbEVkaXRNb2RlKHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gY2FuRGVhY3RpdmF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlcyB0aGUgZGFzaGJvYXJkIHdpZGdldHMgdG8gdGhlIGRlZmF1bHQgd2lkZ2V0cy5cbiAgICovXG4gIGFzeW5jIHJlc3RvcmUoKSB7XG4gICAgY29uc3QgbWVzZyA9IGdldHRleHQoXG4gICAgICAnWW91IGFyZSBhYm91dCB0byByZXNldCB0aGUgd2lkZ2V0cyBvZiB0aGlzIGRhc2hib2FyZC4gQWxsIGNoYW5nZXMgdG8gdGhlIGRhc2hib2FyZCB3aWRnZXRzIHdpbGwgZ2V0IGxvc3QgYW5kIGNhbm5vdCBiZSByZWNvdmVyZWQuIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/J1xuICAgICk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5tb2RhbC5jb25maXJtKGdldHRleHQoJ1Jlc2V0IHdpZGdldHMnKSwgbWVzZywgU3RhdHVzLldBUk5JTkcsIHtcbiAgICAgICAgb2s6IGdldHRleHQoJ1Jlc2V0YGRhc2hib2FyZGAnKSxcbiAgICAgICAgY2FuY2VsOiBnZXR0ZXh0KCdDYW5jZWwnKVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMubW8uYzh5X0Rhc2hib2FyZC5jaGlsZHJlbiA9IHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UubWFwV2lkZ2V0cyh0aGlzLmRlZmF1bHRXaWRnZXRzKTtcbiAgICAgIHRoaXMubW8uYzh5X0Rhc2hib2FyZC5oaXN0b3J5RGVzY3JpcHRpb24gPSB7XG4gICAgICAgIGNoYW5nZVR5cGU6ICdyZXNldCdcbiAgICAgIH07XG4gICAgICBhd2FpdCB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLnVwZGF0ZSh0aGlzLm1vKTtcbiAgICAgIGF3YWl0IHRoaXMub25Mb2FkKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICB0aGlzLmFsZXJ0LmFkZFNlcnZlckZhaWx1cmUoZXJyb3IpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogTWV0aG9kIGNhbGxlZCBvbiBldmVyeSB3aWRnZXRzIGRpbWVuc2lvbnMgb3IgcG9zaXRpb24gY2hhbmdlIGJ1dCBhbHNvIGZvciBhZGRpbmcgbmV3IHdpZGdldCAoYmVjYXVzZSBhZGRpbmdcbiAgICogd2lkZ2V0IGNhdXNlcyBsYXlvdXQgY2hhbmdlcykuIEl0IHJlY29nbml6ZXMgd2hhdCB0eXBlIG9mIGNoYW5nZSBoYXMgYmVlbiBkb25lIGFuZCB1cGRhdGVzIGN1cnJlbnQgd2lkZ2V0cyBzdGF0ZVxuICAgKiBhY2NvcmRpbmdseS5cbiAgICogQHBhcmFtIGNoaWxkIENoYW5nZSBvYmplY3QuXG4gICAqL1xuICBwb3NpdGlvbk9yV2lkZ2V0RGltZW5zaW9uQ2hhbmdlKGNoaWxkOiBEYXNoYm9hcmRDaGlsZENoYW5nZSB8IERhc2hib2FyZENoYW5nZSk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHRoaXMuZWRpdE1vZGVTZXJ2aWNlLmdldEN1cnJlbnRTdGF0ZSgpPy5jaGlsZHJlbiB8fCB7fTtcbiAgICBjb25zdCBkZXNjcmlwdGlvblByb3A6IGtleW9mIERhc2hib2FyZEhpc3RvcnlEZXNjcmlwdGlvblsnd2lkZ2V0Q2hhbmdlcyddID1cbiAgICAgIGNoaWxkLmNoaWxkcmVuLmxlbmd0aCA9PT0gT2JqZWN0LnZhbHVlcyhjdXJyZW50U3RhdGUpLmxlbmd0aCA/ICdhcnJhbmdlbWVudCcgOiAnYWRkZWQnO1xuICAgIGxldCBjaGFuZ2VOYW1lOiBEYXNoYm9hcmRDaGlsZHJlblN0YXRlWyduYW1lJ107XG4gICAgbGV0IHdpZGdldHNDaGFuZ2VkOiBXaWRnZXRbXTtcbiAgICBpZiAoZGVzY3JpcHRpb25Qcm9wID09PSAnYWRkZWQnKSB7XG4gICAgICBjaGFuZ2VOYW1lID0gREFTSEJPQVJEX0NISUxEUkVOX1NUQVRFX05BTUUuYWRkZWQ7XG4gICAgICBjb25zdCBhZGRlZFdpZGdldCA9IGNoaWxkLmNoaWxkcmVuLmZpbmQoYyA9PiAhY3VycmVudFN0YXRlW2MuZGF0YS5pZF0pO1xuICAgICAgd2lkZ2V0c0NoYW5nZWQgPSBbYWRkZWRXaWRnZXQuZGF0YV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoYW5nZU5hbWUgPSBEQVNIQk9BUkRfQ0hJTERSRU5fU1RBVEVfTkFNRS5hcnJhbmdlbWVudDtcbiAgICAgIHdpZGdldHNDaGFuZ2VkID0gY2hpbGQuY2hpbGRyZW5cbiAgICAgICAgLm1hcChjID0+IHtcbiAgICAgICAgICBjb25zdCBsYXN0U3RhdGVDaGlsZCA9IGN1cnJlbnRTdGF0ZVtjLmRhdGEuaWRdO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGMueCAhPSBsYXN0U3RhdGVDaGlsZC5feCB8fFxuICAgICAgICAgICAgYy55ICE9IGxhc3RTdGF0ZUNoaWxkLl95IHx8XG4gICAgICAgICAgICBjLndpZHRoICE9IGxhc3RTdGF0ZUNoaWxkLl93aWR0aCB8fFxuICAgICAgICAgICAgYy5oZWlnaHQgIT0gbGFzdFN0YXRlQ2hpbGQuX2hlaWdodFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGMuZGF0YTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVEYXNoYm9hcmRDaGlsZHJlbihjaGlsZCwgY2hhbmdlTmFtZSwgZGVzY3JpcHRpb25Qcm9wLCB3aWRnZXRzQ2hhbmdlZCk7XG4gIH1cblxuICBhc3luYyByZXZlcnRDaGFuZ2UocmV2ZXJ0VHlwZTogUmV2ZXJ0Q2hhbmdlVHlwZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBkYXNoYm9hcmRDaGlsZHJlbjogQ29udGV4dERhc2hib2FyZFsnY2hpbGRyZW4nXTtcbiAgICBpZiAocmV2ZXJ0VHlwZSA9PT0gJ3VuZG8nKSB7XG4gICAgICBkYXNoYm9hcmRDaGlsZHJlbiA9IHRoaXMuZWRpdE1vZGVTZXJ2aWNlLnVuZG8oKS5jaGlsZHJlbjtcbiAgICB9IGVsc2Uge1xuICAgICAgZGFzaGJvYXJkQ2hpbGRyZW4gPSB0aGlzLmVkaXRNb2RlU2VydmljZS5yZWRvKCkuY2hpbGRyZW47XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuc2V0V2lkZ2V0cyhkYXNoYm9hcmRDaGlsZHJlbik7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBhbGwgZGFzaGJvYXJkcyBjaGlsZHJlbidzLiBVc2VmdWwgZm9yIHBvc2l0aW9uIGNoYW5nZXMgb24gdGhlIGRhc2hib2FyZC5cbiAgICogQHBhcmFtIGNoaWxkIFRoZSBjaGlsZCB0byBjaGFuZ2UuXG4gICAqIEBwYXJhbSBjaGFuZ2VOYW1lIE5hbWUgb2YgdGhlIGNoYW5nZSB0byBpbmRpY2F0ZSBpdCBvbiB1bmRvL3JlZG8gYnV0dG9uLlxuICAgKiBAcGFyYW0gZGVzY3JpcHRpb25Qcm9wIFByb3BlcnR5IHRvIGFkZCB0byBkYXNoYm9hcmQgY2hhbmdlIGhpc3RvcnkuXG4gICAqIEBwYXJhbSB3aWRnZXRzQ2hhbmdlZCBMaXN0IG9mIGNoYW5nZWQgd2lkZ2V0cy5cbiAgICovXG4gIHVwZGF0ZURhc2hib2FyZENoaWxkcmVuKFxuICAgIGNoaWxkOiBEYXNoYm9hcmRDaGlsZENoYW5nZSB8IERhc2hib2FyZENoYW5nZSxcbiAgICBjaGFuZ2VOYW1lOiBEYXNoYm9hcmRDaGlsZHJlblN0YXRlWyduYW1lJ10sXG4gICAgZGVzY3JpcHRpb25Qcm9wOiBrZXlvZiBEYXNoYm9hcmRIaXN0b3J5RGVzY3JpcHRpb25bJ3dpZGdldENoYW5nZXMnXSxcbiAgICB3aWRnZXRzQ2hhbmdlZDogV2lkZ2V0W11cbiAgKTogdm9pZCB7XG4gICAgY29uc3QgeyBjaGlsZHJlbiB9ID0gY2hpbGQ7XG4gICAgY29uc3QgbWFwcGVkQ2hpbGRyZW46IHsgW2lkOiBzdHJpbmddOiBXaWRnZXQgfSA9IGtleUJ5KFxuICAgICAgY2hpbGRyZW4ubWFwKGMgPT4gdGhpcy5jb21wb25lbnRUb1dpZGdldChjKSksXG4gICAgICAnaWQnXG4gICAgKTtcbiAgICB0aGlzLnNldE5ld1N0YXRlKFxuICAgICAgeyBuYW1lOiBjaGFuZ2VOYW1lLCBjaGlsZHJlbjogbWFwcGVkQ2hpbGRyZW4gfSxcbiAgICAgIGRlc2NyaXB0aW9uUHJvcCxcbiAgICAgIHdpZGdldHNDaGFuZ2VkXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3BpZXMgdGhlIGRhc2hib2FyZCBhbmQgY3VycmVudCBjb250ZXh0IHRvIGEgY2xpcGJvYXJkLlxuICAgKi9cbiAgYXN5bmMgY29weURhc2hib2FyZCgpIHtcbiAgICBjb25zdCB2aWV3Q29udGV4dCA9IHRoaXMucm91dGUucGFyZW50LnNuYXBzaG90LmRhdGE/LmNvbnRleHQ7XG5cbiAgICB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmNvcHlDbGlwYm9hcmQgPSB7XG4gICAgICBkYXNoYm9hcmRJZDogdGhpcy5tby5pZCxcbiAgICAgIGRhc2hib2FyZDogY2xvbmVEZWVwKHRoaXMubW8uYzh5X0Rhc2hib2FyZCksXG4gICAgICBjb250ZXh0OiBjbG9uZURlZXAoe1xuICAgICAgICBjb250ZXh0OiB2aWV3Q29udGV4dCxcbiAgICAgICAgY29udGV4dERhdGE6IHRoaXMuY29udGV4dFxuICAgICAgfSlcbiAgICB9O1xuXG4gICAgaWYgKHZpZXdDb250ZXh0KSB7XG4gICAgICBjb25zdCBjdHggPSB2aWV3Q29udGV4dC5zcGxpdCgnLycpLnNoaWZ0KCk7XG4gICAgICBjb25zdCBtc2cgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgJ0Rhc2hib2FyZCBjb3BpZWQuIE5hdmlnYXRlIHRvIHRoZSBkZXNpcmVkIHt7IGN0eCB9fSBhbmQgc2VsZWN0IFwiUGFzdGUgZGFzaGJvYXJkXCInLFxuICAgICAgICB7IGN0eCB9XG4gICAgICApO1xuICAgICAgdGhpcy5hbGVydC5zdWNjZXNzKG1zZyk7XG4gICAgfVxuICAgIHRoaXMuYWN0aW9uQmFyU2VydmljZS5yZWZyZXNoKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHRoZSBjb21wbGV0ZSBkYXNoYm9hcmQgYW5kIG5hdmlnYXRlIGF3YXkuXG4gICAqL1xuICBhc3luYyBkZWxldGVEYXNoYm9hcmQoKSB7XG4gICAgYXdhaXQgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5kZWxldGUodGhpcy5tbyk7XG4gICAgaWYgKHRoaXMucm91dGUucGFyZW50KSB7XG4gICAgICBjb25zdCByb3V0ZSA9IHRoaXMucm91dGUucGFyZW50LnNuYXBzaG90LnVybC5tYXAoc2VnbWVudCA9PiBzZWdtZW50LnBhdGgpLmpvaW4oJy8nKTtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwocm91dGUpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLm9uRGVsZXRlR1NFdmVudCgpO1xuICB9XG5cbiAgZ2V0IGlzRGV2aWNlVHlwZURhc2hib2FyZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmRhc2hib2FyZD8uZGV2aWNlVHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFZGl0cyBhIHdpZGdldCBvbiB0aGUgZGFzaGJvYXJkLlxuICAgKiBAcGFyYW0gY2hhbmdlIFRoZSB3aWRnZXQgY2hhbmdlIGV2ZW50LlxuICAgKi9cbiAgYXN5bmMgZWRpdFdpZGdldChjaGFuZ2U6IFdpZGdldENoYW5nZSkge1xuICAgIGNvbnN0IHsgeCwgeSwgd2lkdGgsIGhlaWdodCB9ID0gY2hhbmdlLnNvdXJjZTtcbiAgICBjb25zdCBjb21wb25lbnQgPSBhd2FpdCB0aGlzLndpZGdldFNlcnZpY2UuZ2V0V2lkZ2V0RGVmaW5pdGlvbihcbiAgICAgIGNoYW5nZS53aWRnZXQubmFtZSB8fCBjaGFuZ2Uud2lkZ2V0LmNvbXBvbmVudElkXG4gICAgKTtcbiAgICBpZiAoIWNvbXBvbmVudCkge1xuICAgICAgdGhpcy5hZGRXaWRnZXQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5hZGRXaWRnZXQoe1xuICAgICAgLi4uY29tcG9uZW50LFxuICAgICAgZGF0YTogeyAuLi5jb21wb25lbnQuZGF0YSwgLi4uY2hhbmdlLndpZGdldCwgX3g6IHgsIF95OiB5LCBfd2lkdGg6IHdpZHRoLCBfaGVpZ2h0OiBoZWlnaHQgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB3aWRnZXQgdG8gdGhlIGRhc2hib2FyZC5cbiAgICogQHBhcmFtIHNlbGVjdGVkIERlZmluZSBhIHNlbGVjdGVkIGNvbXBvbmVudCB0byBzd2l0Y2ggdG8gZWRpdCBtb2RlIGRpcmVjdGx5LlxuICAgKi9cbiAgYXN5bmMgYWRkV2lkZ2V0KHNlbGVjdGVkPzogRHluYW1pY0NvbXBvbmVudERlZmluaXRpb24pIHtcbiAgICBjb25zdCBwYXJ0aWFsQ2xvbmVTZWxlY3RlZCA9IHNlbGVjdGVkXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zZWxlY3RlZCxcbiAgICAgICAgICBkYXRhOiBjbG9uZURlZXAoc2VsZWN0ZWQuZGF0YSlcbiAgICAgICAgfVxuICAgICAgOiBzZWxlY3RlZDtcblxuICAgIGNvbnN0IGFjdGl2ZUNvbnRleHQgPSB0aGlzLmNvbnRleHQuY29udGV4dERhdGEgPyB0aGlzLmNvbnRleHQuY29udGV4dERhdGEgOiB0aGlzLmNvbnRleHQ7XG4gICAgY29uc3QgaW5pdGlhbFN0YXRlOiBQYXJ0aWFsPFdpZGdldENvbmZpZ0NvbXBvbmVudD4gPSB7XG4gICAgICBtbzogdGhpcy5tbyxcbiAgICAgIGNvbnRleHQ6IHRoaXMuY29udGV4dC5jOHlfUmVwb3J0ID8ge30gOiBhY3RpdmVDb250ZXh0LFxuICAgICAgc2VsZWN0ZWQ6IHBhcnRpYWxDbG9uZVNlbGVjdGVkXG4gICAgfTtcblxuICAgIGNvbnN0IG1vZGFsID0gdGhpcy5ic01vZGFsLnNob3coV2lkZ2V0Q29uZmlnQ29tcG9uZW50LCB7XG4gICAgICBjbGFzczogJ21vZGFsLWxnJyxcbiAgICAgIGFyaWFEZXNjcmliZWRieTogJ21vZGFsLWJvZHknLFxuICAgICAgYXJpYUxhYmVsbGVkQnk6ICdtb2RhbC10aXRsZScsXG4gICAgICBpbml0aWFsU3RhdGUsXG4gICAgICBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlLFxuICAgICAga2V5Ym9hcmQ6IGZhbHNlXG4gICAgfSkuY29udGVudCBhcyBXaWRnZXRDb25maWdDb21wb25lbnQ7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgbmV3V2lkZ2V0ID0gYXdhaXQgbW9kYWwucmVzdWx0O1xuICAgICAgaWYgKCF0aGlzLm1vLmM4eV9EYXNoYm9hcmQuY2hpbGRyZW4pIHtcbiAgICAgICAgdGhpcy5tby5jOHlfRGFzaGJvYXJkLmNoaWxkcmVuID0ge307XG4gICAgICB9XG4gICAgICBuZXdXaWRnZXQuY2xhc3NlcyA9IHRoaXMubWVyZ2VXaWRnZXRDbGFzc2VzKG5ld1dpZGdldCk7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZVdpZGdldChuZXdXaWRnZXQpO1xuICAgICAgLy8gTmV3IHN0YXRlIGluIGVkaXQgbW9kZSBpcyBhZGRlZCBvbmx5IGZvciB3aWRnZXQgdXBkYXRlLiBXaGVuIGFkZGluZyB3aWRnZXQsIGxheW91dCBjaGFuZ2UgaXMgYWx3YXlzIHRyaWdnZXJlZCxcbiAgICAgIC8vIHNvIGl0J3MgZWFzaWVyIHRvIHNldCBuZXcgc3RhdGUgb24gbGF5b3V0IGNoYW5nZSBvbmx5XG4gICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB7XG4gICAgICAgICAgLi4udGhpcy5lZGl0TW9kZVNlcnZpY2UuZ2V0Q3VycmVudFN0YXRlKCkuY2hpbGRyZW4sXG4gICAgICAgICAgW25ld1dpZGdldC5pZF06IG5ld1dpZGdldFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnNldE5ld1N0YXRlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IERBU0hCT0FSRF9DSElMRFJFTl9TVEFURV9OQU1FLmNvbmZpZyxcbiAgICAgICAgICAgIGNoaWxkcmVuXG4gICAgICAgICAgfSxcbiAgICAgICAgICAnY29uZmlnJyxcbiAgICAgICAgICBbbmV3V2lkZ2V0XVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgbW9kYWwuY2xvc2UoKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgLy8gaW50ZW5kZWQgZW1wdHlcbiAgICB9XG4gIH1cblxuICBhc3luYyBzYXZlV2lkZ2V0c1RvRGFzaGJvYXJkKCkge1xuICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHRoaXMuZWRpdE1vZGVTZXJ2aWNlLmdldEN1cnJlbnRTdGF0ZSgpO1xuICAgIHRoaXMubW8uYzh5X0Rhc2hib2FyZC5jaGlsZHJlbiA9IGN1cnJlbnRTdGF0ZS5jaGlsZHJlbjtcblxuICAgIHRoaXMubW8uYzh5X0Rhc2hib2FyZC5oaXN0b3J5RGVzY3JpcHRpb24gPSB7XG4gICAgICBjaGFuZ2VUeXBlOiAndXBkYXRlJyxcbiAgICAgIHdpZGdldENoYW5nZXM6IHRoaXMubWFwU3RhdGVUb0hpc3RvcnlEZXNjcmlwdGlvbihjdXJyZW50U3RhdGUuY2hhbmdlSGlzdG9yeSlcbiAgICB9O1xuICAgIGF3YWl0IHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UudXBkYXRlKHRoaXMubW8pO1xuICAgIHRoaXMuZWRpdE1vZGVTZXJ2aWNlLnJlc2V0KCk7XG4gICAgdGhpcy5lZGl0TW9kZVNlcnZpY2UuaW5pdCh7XG4gICAgICBuYW1lOiBEQVNIQk9BUkRfQ0hJTERSRU5fU1RBVEVfTkFNRS5pbml0aWFsLFxuICAgICAgY2hpbGRyZW46IHRoaXMubW8uYzh5X0Rhc2hib2FyZC5jaGlsZHJlbixcbiAgICAgIGNoYW5nZUhpc3Rvcnk6IHt9XG4gICAgfSk7XG5cbiAgICB0aGlzLmlzQ29weURpc2FibGVkID0gdGhpcy5nZXREYXNoYm9hcmRDb3B5UGVybWlzc2lvblN0YXRlKCk7XG4gIH1cblxuICBhc3luYyBjYW5jZWxFZGl0TW9kZShvbkRlYWN0aXZhdGUgPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGRhc2hib2FyZENoaWxkcmVuID0gdGhpcy5lZGl0TW9kZVNlcnZpY2UucmVzZXQoKTtcbiAgICBpZiAodGhpcy5kYXNoYm9hcmQpIHtcbiAgICAgIHRoaXMuZGFzaGJvYXJkLmhpc3RvcnlEZXNjcmlwdGlvbiA9IHt9O1xuICAgIH1cbiAgICB0aGlzLndpZGdldHNEYXNoYm9hcmQuZWRpdE1vZGUkLm5leHQoZmFsc2UpO1xuICAgIGlmICghb25EZWFjdGl2YXRlKSB7XG4gICAgICAvLyB3aGVuIHNldFdpZGdldHMgaXMgY2FsbGVkIGR1cmluZyBuYXZpZ2F0aW9uIGZyb20gZGV2aWNlIHRvIGRldmljZSwgbmF2aWdhdGlvbiBmYWlsc1xuICAgICAgYXdhaXQgdGhpcy5zZXRXaWRnZXRzKGRhc2hib2FyZENoaWxkcmVuLmNoaWxkcmVuKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBhIHdpZGdldCBvciBhZGRzIGEgbmV3IG9uZSBpZiBpdCBkb2Vzbid0IGV4aXN0IG9uXG4gICAqIHRoZSBkYXNoYm9hcmQuXG4gICAqIEBwYXJhbSB3aWRnZXQgVGhlIG5ldyB3aWRnZXRcbiAgICovXG4gIGFzeW5jIHVwZGF0ZVdpZGdldCh3aWRnZXQpIHtcbiAgICBjb25zdCBpbmRleCA9IGZpbmRJbmRleCh0aGlzLndpZGdldHMsIHsgaWQ6IHdpZGdldC5pZCB9KTtcbiAgICBjb25zdCBpc05ldyA9IGluZGV4ID09PSAtMTtcbiAgICBjb25zdCBtYXBwZWRXaWRnZXQgPSBhd2FpdCB0aGlzLndpZGdldFNlcnZpY2UubWFwTGVnYWN5KHdpZGdldCk7XG4gICAgaWYgKGlzTmV3KSB7XG4gICAgICB0aGlzLndpZGdldHMucHVzaChtYXBwZWRXaWRnZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndpZGdldHMuc3BsaWNlKGluZGV4LCAxLCBtYXBwZWRXaWRnZXQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgd2lkZ2V0IGFuZCByZWFycmFuZ2VzIHRoZSByZW1haW5pbmcgb25lc1xuICAgKiBpZiBuZWNlc3NhcnkuXG4gICAqIEBwYXJhbSBjaGFuZ2UgVGhlIGNoYW5nZSBldmVudC5cbiAgICovXG4gIGFzeW5jIGRlbGV0ZVdpZGdldChjaGFuZ2U6IFdpZGdldENoYW5nZSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IHdpZGdldCwgc291cmNlIH0gPSBjaGFuZ2U7XG4gICAgICBjb25zdCByZW1vdmVkID0gdGhpcy53aWRnZXRzLmZpbmQoKHsgaWQgfSkgPT4gaWQgPT09IHdpZGdldC5pZCk7XG4gICAgICB0aGlzLndpZGdldHMuc3BsaWNlKHRoaXMud2lkZ2V0cy5pbmRleE9mKHJlbW92ZWQpLCAxKTtcblxuICAgICAgY29uc3QgeyBkYXNoYm9hcmQgfSA9IHNvdXJjZTtcbiAgICAgIGRhc2hib2FyZC5jaGlsZHJlbiA9IGRhc2hib2FyZC5jaGlsZHJlbi5maWx0ZXIoYyA9PiBjLmRhdGEuaWQgIT09IHdpZGdldC5pZCk7XG5cbiAgICAgIC8vIHVzaW5nIHNldFRpbWVvdXQgdG8gZ2l2ZSB0aGUgY29tcG9uZW50IHRoZSBjaGFuY2UgdG8gcmVtb3ZlIGl0LlxuICAgICAgY29uc3Qgc2xlZXAgPSB0aW1lb3V0ID0+IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0KSk7XG4gICAgICBhd2FpdCBzbGVlcCgwKTtcblxuICAgICAgY29uc3QgY2hpbGQgPSBuZXcgRGFzaGJvYXJkQ2hpbGRDaGFuZ2Uoc291cmNlKTtcbiAgICAgIGNoaWxkLmNvbGxhcHNlVXBBbGwoKTtcbiAgICAgIHRoaXMudXBkYXRlRGFzaGJvYXJkQ2hpbGRyZW4oY2hpbGQsIERBU0hCT0FSRF9DSElMRFJFTl9TVEFURV9OQU1FLnJlbW92ZWQsICdyZW1vdmVkJywgW1xuICAgICAgICB3aWRnZXRcbiAgICAgIF0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuYWxlcnQuYWRkU2VydmVyRmFpbHVyZShlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyBhIHdvcmthcm91bmQgdG8gZW5zdXJlIHRoYXQgdGhlIGRyYWdnZWQtZWxlbWVudFxuICAgKiAod2hpY2ggaXMgYXR0YWNoZWQgdG8gdGhlIGJvZHkpIGhhcyB0aGUgcmlnaHQgc3R5bGluZy5cbiAgICovXG4gIGFkZERhc2hib2FyZENsYXNzVG9Cb2R5KCkge1xuICAgIHRoaXMuY2xhc3Muc3BsaXQoJyAnKS5mb3JFYWNoKGNzc0NsYXNzID0+IHtcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgY3NzQ2xhc3MpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYSB3b3JrYXJvdW5kIHRvIGVuc3VyZSB0aGF0IHRoZSBkcmFnZ2VkLWVsZW1lbnRcbiAgICogKHdoaWNoIGlzIGF0dGFjaGVkIHRvIHRoZSBib2R5KSBoYXMgdGhlIHJpZ2h0IHN0eWxpbmcuXG4gICAqL1xuICByZW1vdmVEYXNoYm9hcmRDbGFzc0Zyb21Cb2R5KCkge1xuICAgIHRoaXMuY2xhc3Muc3BsaXQoJyAnKS5mb3JFYWNoKGNzc0NsYXNzID0+IHtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZG9jdW1lbnQuYm9keSwgY3NzQ2xhc3MpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgb25Mb2FkKHRyYWNrRXhwZXJpZW5jZT86IGJvb2xlYW4pIHtcbiAgICB0aGlzLmhhc1Blcm1pc3Npb25Ub0VkaXREYXNoYm9hcmQgPSB0aGlzLmRhc2hib2FyZFxuICAgICAgPyBhd2FpdCB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmNhbkVkaXREYXNoYm9hcmQodGhpcy5tbylcbiAgICAgIDogZmFsc2U7XG4gICAgdGhpcy5jYW5Db3B5ID1cbiAgICAgIHRoaXMuX2NhbkNvcHkgJiZcbiAgICAgICh0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmlzRGV2aWNlRGFzaGJvYXJkKHRoaXMubW8pIHx8XG4gICAgICAgIHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuaXNEZXZpY2VUeXBlKHRoaXMubW8pIHx8XG4gICAgICAgIHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuaXNHcm91cERhc2hib2FyZCh0aGlzLm1vKSk7XG4gICAgY29uc3QgZGFzaGJvYXJkQ2hpbGRyZW46IENvbnRleHREYXNoYm9hcmRbJ2NoaWxkcmVuJ10gPSBjbG9uZURlZXAoXG4gICAgICB0aGlzLm1vLmM4eV9EYXNoYm9hcmQ/LmNoaWxkcmVuXG4gICAgKTtcbiAgICBjb25zdCBkYXNoYm9hcmRDbGFzc2VzID0ge1xuICAgICAgJ2M4eS1ncmlkLWRhc2hib2FyZCc6IHRydWUsXG4gICAgICBkYXNoYm9hcmQ6IHRydWUsXG4gICAgICAuLi50aGlzLmRhc2hib2FyZD8uY2xhc3Nlc1xuICAgIH07XG4gICAgdGhpcy5pc0NvcHlEaXNhYmxlZCA9IHRoaXMuZGFzaGJvYXJkXG4gICAgICA/IHRoaXMuZ2V0RGFzaGJvYXJkQ29weVBlcm1pc3Npb25TdGF0ZSgpXG4gICAgICA6IHsgc3RhdGU6IGZhbHNlLCByZWFzb246IG51bGwgfTtcbiAgICB0aGlzLmVkaXRNb2RlU2VydmljZS5pbml0KHtcbiAgICAgIG5hbWU6IGdldHRleHQoJ0luaXRpYWwgc3RhdGUnKSxcbiAgICAgIGNoaWxkcmVuOiBkYXNoYm9hcmRDaGlsZHJlbixcbiAgICAgIGNoYW5nZUhpc3Rvcnk6IHt9XG4gICAgfSk7XG5cbiAgICBhd2FpdCB0aGlzLnNldFdpZGdldHMoZGFzaGJvYXJkQ2hpbGRyZW4sIHRyYWNrRXhwZXJpZW5jZSk7XG4gICAgdGhpcy5jbGFzcyA9IE9iamVjdC5rZXlzKGRhc2hib2FyZENsYXNzZXMpLmpvaW4oJyAnKTtcbiAgICBpZiAodGhpcy5pc1JlcG9ydCkge1xuICAgICAgdGhpcy5hZGRSZXBvcnREYXNoYm9hcmRTZXR0aW5ncygpO1xuICAgIH1cbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgaWYgKCF0aGlzLmRhc2hib2FyZCkge1xuICAgICAgdGhpcy5kYXNoYm9hcmREZXRhaWxzLnNob3coZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLm9uTG9hZEdTRXZlbnQoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkYXNoYm9hcmRQcmV2aWV3KGxheW91dENoYW5nZXM6IENvbnRleHREYXNoYm9hcmQpIHtcbiAgICBpZiAobGF5b3V0Q2hhbmdlcz8uY2xhc3Nlcykge1xuICAgICAgY29uc3QgZGFzaGJvYXJkQ2xhc3NlcyA9IHtcbiAgICAgICAgJ2M4eS1ncmlkLWRhc2hib2FyZCc6IHRydWUsXG4gICAgICAgIGRhc2hib2FyZDogdHJ1ZSxcbiAgICAgICAgLi4ubGF5b3V0Q2hhbmdlcy5jbGFzc2VzXG4gICAgICB9O1xuICAgICAgdGhpcy5jbGFzcyA9IE9iamVjdC5rZXlzKGRhc2hib2FyZENsYXNzZXMpLmpvaW4oJyAnKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZGFzaGJvYXJkKSB7XG4gICAgICB0aGlzLmRhc2hib2FyZC53aWRnZXRDbGFzc2VzID0ge1xuICAgICAgICAuLi50aGlzLmRhc2hib2FyZC53aWRnZXRDbGFzc2VzLFxuICAgICAgICAuLi5sYXlvdXRDaGFuZ2VzLndpZGdldENsYXNzZXNcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmVsb2FkRGFzaGJvYXJkKGRhc2hib2FyZE1vOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCkge1xuICAgIHRoaXMuZGFzaGJvYXJkID0gZGFzaGJvYXJkTW8uYzh5X0Rhc2hib2FyZDtcbiAgICB0aGlzLm1vID0gZGFzaGJvYXJkTW87XG4gICAgYXdhaXQgdGhpcy5vbkxvYWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2V0V2lkZ2V0cyhcbiAgICBkYXNoYm9hcmRDaGlsZHJlbjogQ29udGV4dERhc2hib2FyZFsnY2hpbGRyZW4nXSxcbiAgICB0cmFja0V4cGVyaWVuY2UgPSBmYWxzZVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpc0RldmljZVR5cGUgPSB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmlzRGV2aWNlVHlwZSh0aGlzLm1vKTtcbiAgICB0aGlzLndpZGdldHMgPSBhd2FpdCBQcm9taXNlLmFsbDxXaWRnZXQ+KFxuICAgICAgT2JqZWN0LnZhbHVlcyhkYXNoYm9hcmRDaGlsZHJlbiB8fCB7fSkubWFwKHdpZGdldCA9PiB7XG4gICAgICAgIHdpZGdldC5jbGFzc2VzID0gdGhpcy5tZXJnZVdpZGdldENsYXNzZXMod2lkZ2V0KTtcbiAgICAgICAgaWYgKGlzRGV2aWNlVHlwZSkge1xuICAgICAgICAgIHRoaXMuYXBwbHlEZXZpY2VUYXJnZXQod2lkZ2V0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHJhY2tFeHBlcmllbmNlKSB7XG4gICAgICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudCgnbG9hZFdpZGdldCcsIHtcbiAgICAgICAgICAgIHdpZGdldE5hbWU6IHdpZGdldC5jb21wb25lbnRJZCB8fCB3aWRnZXQubmFtZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLndpZGdldFNlcnZpY2UubWFwTGVnYWN5KHdpZGdldCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRDb250ZXh0RGFzaGJvYXJkKCkge1xuICAgIHRoaXMuZGF0YVN1YiA9IHRoaXMucm91dGUuZGF0YS5zdWJzY3JpYmUoKHsgZGFzaGJvYXJkLCBpc1JlcG9ydCB9KSA9PiB7XG4gICAgICB0aGlzLmNvbnRleHQgPSB0aGlzLnJvdXRlLnBhcmVudC5zbmFwc2hvdC5kYXRhLmNvbnRleHREYXRhIHx8IHt9O1xuICAgICAgdGhpcy50aXRsZSA9IHRoaXMuY29udGV4dD8ubmFtZTtcbiAgICAgIHRoaXMubW8gPSBkYXNoYm9hcmQ7XG4gICAgICB0aGlzLmRhc2hib2FyZCA9IHRoaXMubW8uYzh5X0Rhc2hib2FyZDtcbiAgICAgIHRoaXMuaXNSZXBvcnQgPSBpc1JlcG9ydCB8fCB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmlzUmVwb3J0KHRoaXMubW8pO1xuICAgICAgaWYgKHRoaXMuaXNSZXBvcnQgJiYgdGhpcy5kYXNoYm9hcmQgJiYgIXRoaXMuZGFzaGJvYXJkPy5uYW1lKSB7XG4gICAgICAgIHRoaXMuZGFzaGJvYXJkLm5hbWUgPSB0aGlzLnRpdGxlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaXNSZXBvcnQgJiYgdGhpcy5kYXNoYm9hcmQpIHtcbiAgICAgICAgdGhpcy5kYXNoYm9hcmQuYzh5X0lzTmF2aWdhdG9yTm9kZSA9IHRoaXMuY29udGV4dC5jOHlfSXNOYXZpZ2F0b3JOb2RlO1xuICAgICAgfVxuICAgICAgdGhpcy5wYXRjaFNlbnNvclBob25lRGFzaGJvYXJkKHRoaXMuZGFzaGJvYXJkLCB0aGlzLm1vLm93bmVyLCB0aGlzLmNvbnRleHQ/LnR5cGUpO1xuICAgICAgdGhpcy5vbkxvYWQodHJ1ZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVG8gZW5hYmxlIHRyYW5zbGF0aW9uIGZvciB3aWRnZXRzIHdpdGhpbiB0aGUgZGFzaGJvYXJkLCB0aGUgXCJ0cmFuc2xhdGVXaWRnZXRUaXRsZVwiIGZsYWcgbXVzdCBiZSBlbmFibGVkLlxuICAgKiBUaGUgcHJvcGVydHkgbmVlZHMgdG8gYmUgcGF0Y2hlZCwgYXMgdGhlIFwiU2Vuc29yIEFwcFwiIGRvZXMgbm90IHByb3ZpZGUgdGhpcyBzZXR0aW5nLlxuICAgKi9cbiAgcHJpdmF0ZSBwYXRjaFNlbnNvclBob25lRGFzaGJvYXJkKGRhc2hib2FyZDogQ29udGV4dERhc2hib2FyZCwgb3duZXI6IHN0cmluZywgdHlwZTogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGUgPT09ICdjOHlfU2Vuc29yUGhvbmUnICYmIG93bmVyPy5pbmNsdWRlcygnZGV2aWNlX3Bob25lJykpIHtcbiAgICAgIGRhc2hib2FyZC50cmFuc2xhdGVXaWRnZXRUaXRsZSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsb2FkTmFtZWREYXNoYm9hcmQoKSB7XG4gICAgdGhpcy5kYXRhU3ViID0gdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZVxuICAgICAgLmdldE5hbWVkRGFzaGJvYXJkT3JDcmVhdGUodGhpcy5uYW1lLCB0aGlzLmRlZmF1bHRXaWRnZXRzLCB0aGlzLmNvbnRleHQpXG4gICAgICAuc3Vic2NyaWJlKG1vID0+IHtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gdGhpcy5jb250ZXh0IHx8IHt9O1xuICAgICAgICB0aGlzLm1vID0gbW87XG4gICAgICAgIHRoaXMuZGFzaGJvYXJkID0gdGhpcy5tby5jOHlfRGFzaGJvYXJkO1xuICAgICAgICB0aGlzLm9uTG9hZCh0cnVlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBtZXJnZVdpZGdldENsYXNzZXMod2lkZ2V0OiBXaWRnZXQpOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiB7XG4gICAgY29uc3QgaGFzSGVhZGVyQ2xhc3MgPSBXSURHRVRfSEVBREVSX0NMQVNTRVMuZmluZChcbiAgICAgIGVsID0+IHdpZGdldC5jbGFzc2VzICYmIHdpZGdldC5jbGFzc2VzW2VsLmNsYXNzXVxuICAgICk7XG4gICAgY29uc3Qgd2lkZ2V0Q2xhc3NlcyA9IGhhc0hlYWRlckNsYXNzXG4gICAgICA/IHsgLi4ud2lkZ2V0LmNsYXNzZXMgfVxuICAgICAgOiB7IC4uLnRoaXMuZGFzaGJvYXJkLndpZGdldENsYXNzZXMsIC4uLndpZGdldC5jbGFzc2VzIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGNhcmQ6IHRydWUsXG4gICAgICAnY2FyZC1kYXNoYm9hcmQnOiB0cnVlLFxuICAgICAgW2tlYmFiQ2FzZSh3aWRnZXQuY29tcG9uZW50SWQgfHwgd2lkZ2V0Lm5hbWUpXTogdHJ1ZSxcbiAgICAgIC4uLndpZGdldENsYXNzZXNcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wb25lbnRUb1dpZGdldChjaGlsZDogRGFzaGJvYXJkQ2hpbGRDb21wb25lbnQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ub21pdChjaGlsZC5kYXRhLCBbJ2NvbXBvbmVudFRyYW5zZm9ybUNvbmZpZ1dpdGhDb250ZXh0JywgJ3RyYW5zZm9ybUNvbmZpZ1dpdGhDb250ZXh0J10pLCAvLyByZW1vdmUgbGVnYWN5XG4gICAgICAuLi4oe1xuICAgICAgICBfeDogY2hpbGQueCxcbiAgICAgICAgX3k6IGNoaWxkLnksXG4gICAgICAgIF93aWR0aDogY2hpbGQud2lkdGgsXG4gICAgICAgIF9oZWlnaHQ6IGNoaWxkLmhlaWdodFxuICAgICAgfSBhcyBXaWRnZXQpXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUmVwb3J0RGFzaGJvYXJkU2V0dGluZ3MoKSB7XG4gICAgdGhpcy5zZXRUaXRsZSA9IHRydWU7XG4gICAgdGhpcy50aXRsZSA9IHRoaXMuY29udGV4dD8ubmFtZSB8fCBnZXR0ZXh0KCdOZXcgcmVwb3J0Jyk7XG4gICAgdGhpcy5icmVhZGNydW1iU2V0dGluZ3MgPSB7XG4gICAgICBpY29uOiAndGgnLFxuICAgICAgbGFiZWw6ICdSZXBvcnRzJyxcbiAgICAgIHBhdGg6ICdyZXBvcnRzJ1xuICAgIH07XG4gICAgdGhpcy5jYW5EZWxldGUgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGFzaGJvYXJkQ29weVBlcm1pc3Npb25TdGF0ZSgpOiBEYXNoYm9hcmRDb3B5UGVybWlzc2lvbiB7XG4gICAgaWYgKCF0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmhhc1Blcm1pc3Npb25zVG9Db3B5RGFzaGJvYXJkKCkpIHtcbiAgICAgIHJldHVybiB7IHN0YXRlOiBmYWxzZSwgcmVhc29uOiBDb3B5RGFzaGJvYXJkRGlzYWJsZWRSZWFzb24uUEVSTUlTU0lPTlMgfTtcbiAgICB9XG4gICAgY29uc3QgYWxsRGFzaGJvYXJkQ2hpbGRyZW5BcmVWYWxpZCA9IGV2ZXJ5KHRoaXMubW8uYzh5X0Rhc2hib2FyZC5jaGlsZHJlbiwgY2hpbGQgPT4ge1xuICAgICAgY29uc3QgY29uZmlnID0gY2hpbGQuY29uZmlnIHx8IHt9O1xuICAgICAgY29uc3QgZGF0YVBvaW50cyA9IGNvbmZpZy5kYXRhcG9pbnRzIHx8IFtdO1xuICAgICAgcmV0dXJuICEoXG4gICAgICAgIChjb25maWcuZGV2aWNlICYmIGNvbmZpZy5kZXZpY2UuaWQgIT09IHRoaXMuY29udGV4dC5pZCkgfHxcbiAgICAgICAgc29tZShkYXRhUG9pbnRzLCBkYXRhUG9pbnQgPT4gZGF0YVBvaW50Ll9fdGFyZ2V0Py5pZCAhPT0gdGhpcy5jb250ZXh0LmlkKVxuICAgICAgKTtcbiAgICB9KTtcbiAgICBpZiAoIWFsbERhc2hib2FyZENoaWxkcmVuQXJlVmFsaWQpIHtcbiAgICAgIHJldHVybiB7IHN0YXRlOiBmYWxzZSwgcmVhc29uOiBDb3B5RGFzaGJvYXJkRGlzYWJsZWRSZWFzb24uV1JPTkdfUkVGRVJFTkNFIH07XG4gICAgfVxuICAgIHJldHVybiB7IHN0YXRlOiB0cnVlIH07XG4gIH1cblxuICBwcml2YXRlIHNldE5ld1N0YXRlKFxuICAgIHN0YXRlOiBQaWNrPERhc2hib2FyZENoaWxkcmVuU3RhdGUsICduYW1lJyB8ICdjaGlsZHJlbic+LFxuICAgIGRlc2NyaXB0aW9uUHJvcDoga2V5b2YgRGFzaGJvYXJkSGlzdG9yeURlc2NyaXB0aW9uWyd3aWRnZXRDaGFuZ2VzJ10sXG4gICAgd2lkZ2V0c0NoYW5nZWQ6IFdpZGdldFtdXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gdGhpcy5nZXREZXNjcmlwdGlvbkZvck5ld1N0YXRlKGRlc2NyaXB0aW9uUHJvcCwgd2lkZ2V0c0NoYW5nZWQpO1xuICAgIHRoaXMuZWRpdE1vZGVTZXJ2aWNlLm5ld1N0YXRlKHsgLi4uc3RhdGUsIGNoYW5nZUhpc3Rvcnk6IGRlc2NyaXB0aW9uIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZXNjcmlwdGlvbkZvck5ld1N0YXRlKFxuICAgIGRlc2NyaXB0aW9uUHJvcDoga2V5b2YgRGFzaGJvYXJkSGlzdG9yeURlc2NyaXB0aW9uWyd3aWRnZXRDaGFuZ2VzJ10sXG4gICAgd2lkZ2V0c0NoYW5nZWQ6IFdpZGdldFtdXG4gICk6IERhc2hib2FyZENoaWxkcmVuU3RhdGVbJ2NoYW5nZUhpc3RvcnknXSB7XG4gICAgY29uc3QgY2hhbmdlSGlzdG9yeSA9IHRoaXMuZWRpdE1vZGVTZXJ2aWNlLmdldEN1cnJlbnRTdGF0ZSgpLmNoYW5nZUhpc3Rvcnk7XG4gICAgaWYgKCFjaGFuZ2VIaXN0b3J5W2Rlc2NyaXB0aW9uUHJvcF0pIHtcbiAgICAgIGNoYW5nZUhpc3RvcnlbZGVzY3JpcHRpb25Qcm9wXSA9IHt9O1xuICAgIH1cbiAgICB3aWRnZXRzQ2hhbmdlZC5mb3JFYWNoKHcgPT4ge1xuICAgICAgaWYgKGRlc2NyaXB0aW9uUHJvcCA9PT0gJ3JlbW92ZWQnICYmIGNoYW5nZUhpc3RvcnkuYWRkZWQ/Llt3LmlkXSkge1xuICAgICAgICAvLyBpZiB3aWRnZXQgd2FzIGFkZGVkIGR1cmluZyBjdXJyZW50IGVkaXQgc2Vzc2lvbiBhbmQgdGhlbiByZW1vdmVkLCBpdCBzaG91bGQgbm90IGJlIGF0IGRlc2NyaXB0aW9uIGF0IGFsbFxuICAgICAgICBkZWxldGUgY2hhbmdlSGlzdG9yeS5hZGRlZFt3LmlkXTtcbiAgICAgICAgaWYgKGNoYW5nZUhpc3RvcnkuY29uZmlnPy5bdy5pZF0pIHtcbiAgICAgICAgICBkZWxldGUgY2hhbmdlSGlzdG9yeS5jb25maWdbdy5pZF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZUhpc3RvcnkuYXJyYW5nZW1lbnQ/Llt3LmlkXSkge1xuICAgICAgICAgIGRlbGV0ZSBjaGFuZ2VIaXN0b3J5Py5hcnJhbmdlbWVudFt3LmlkXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgKGRlc2NyaXB0aW9uUHJvcCA9PT0gJ2NvbmZpZycgfHwgZGVzY3JpcHRpb25Qcm9wID09PSAnYXJyYW5nZW1lbnQnKSAmJlxuICAgICAgICBjaGFuZ2VIaXN0b3J5LmFkZGVkPy5bdy5pZF1cbiAgICAgICkge1xuICAgICAgICAvLyBpZiB3aWRnZXQgd2FzIGFkZGVkIGFuZCB0aGVuIG1vZGlmaWVkIGluIGN1cnJlbnQgZWRpdCBzZXNzaW9uLCBpdCBzaG91bGQgb25seSBiZSBpbmRpY2F0ZWQgYXMgYWRkZWRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoYW5nZUhpc3RvcnlbZGVzY3JpcHRpb25Qcm9wXVt3LmlkXSA9IHc7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY2hhbmdlSGlzdG9yeTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwU3RhdGVUb0hpc3RvcnlEZXNjcmlwdGlvbihcbiAgICBkZXNjcmlwdGlvbjogRGFzaGJvYXJkQ2hpbGRyZW5TdGF0ZVsnY2hhbmdlSGlzdG9yeSddXG4gICk6IERhc2hib2FyZEhpc3RvcnlEZXNjcmlwdGlvblsnd2lkZ2V0Q2hhbmdlcyddIHtcbiAgICBjb25zdCBoaXN0b3J5RGVzY3JpcHRpb246IERhc2hib2FyZEhpc3RvcnlEZXNjcmlwdGlvblsnd2lkZ2V0Q2hhbmdlcyddID0ge307XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGVzY3JpcHRpb24pKSB7XG4gICAgICBjb25zdCB3aWRnZXRzID0gT2JqZWN0LnZhbHVlcyh2YWx1ZSk7XG4gICAgICBpZiAoIXdpZGdldHMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaGlzdG9yeURlc2NyaXB0aW9uW2tleV0gPSBPYmplY3QudmFsdWVzKHZhbHVlKS5tYXAod2lkZ2V0ID0+IHdpZGdldC50aXRsZSk7XG4gICAgfVxuICAgIHJldHVybiBoaXN0b3J5RGVzY3JpcHRpb247XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIG9uRGVsZXRlR1NFdmVudCgpIHtcbiAgICBjb25zdCBwYXJlbnROYW1lID0gYXdhaXQgdGhpcy5jb252ZXJ0U3RyaW5nVG9IYXNoKHRoaXMuY29udGV4dD8ubmFtZSk7XG4gICAgY29uc3QgZGFzaGJvYXJkTmFtZSA9IGF3YWl0IHRoaXMuY29udmVydFN0cmluZ1RvSGFzaCh0aGlzLmRhc2hib2FyZD8ubmFtZSk7XG5cbiAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KFBST0RVQ1RfRVhQRVJJRU5DRS5EQVNIQk9BUkQuRVZFTlRTLkRBU0hCT0FSRFMsIHtcbiAgICAgIGNvbXBvbmVudDogUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5DT01QT05FTlRTLkRFTEVURV9EQVNIQk9BUkQsXG4gICAgICBhY3Rpb246IFBST0RVQ1RfRVhQRVJJRU5DRS5EQVNIQk9BUkQuQUNUSU9OUy5ERUxFVEUsXG4gICAgICBuYW1lOiBkYXNoYm9hcmROYW1lLFxuICAgICAgaWQ6IHRoaXMubW8uaWQsXG4gICAgICBuYW1lSWQ6IGAke2Rhc2hib2FyZE5hbWV9XyR7dGhpcy5tby5pZH1gLFxuICAgICAgcGFyZW50QXNzZXRJZDogdGhpcy5jb250ZXh0Py5pZCA/IHRoaXMuY29udGV4dC5pZCA6ICdub0NvbnRleHQnLFxuICAgICAgcGFyZW50QXNzZXROYW1lOiB0aGlzLmNvbnRleHQ/LmlkID8gcGFyZW50TmFtZSA6ICdub0NvbnRleHQnLFxuICAgICAgcGFyZW50QXNzZXRUeXBlOiB0aGlzLmNvbnRleHQ/LmlkID8gdGhpcy5jb250ZXh0LnR5cGUgOiAnbm9Db250ZXh0JyxcbiAgICAgIHBhcmVudEFzc2V0TmFtZUlkOiB0aGlzLmNvbnRleHQ/LmlkID8gYCR7cGFyZW50TmFtZX1fJHt0aGlzLmNvbnRleHQuaWR9YCA6ICdub0NvbnRleHQnLFxuICAgICAgcGFyZW50QXNzZXROYW1lRGFzaGJvYXJkTmFtZTogdGhpcy5jb250ZXh0Py5pZFxuICAgICAgICA/IGAke3BhcmVudE5hbWV9XyR7ZGFzaGJvYXJkTmFtZX1gXG4gICAgICAgIDogJ25vQ29udGV4dCcsXG4gICAgICBwYXJlbnRBc3NldElkRGFzaGJvYXJkSWQ6IHRoaXMuY29udGV4dD8uaWQgPyBgJHt0aGlzLmNvbnRleHQuaWR9XyR7dGhpcy5tby5pZH1gIDogJ25vQ29udGV4dCcsXG4gICAgICBwYXJlbnRBc3NldE5hbWVEYXNoYm9hcmRJZDogdGhpcy5jb250ZXh0Py5pZCA/IGAke3BhcmVudE5hbWV9XyR7dGhpcy5tby5pZH1gIDogJ25vQ29udGV4dCcsXG4gICAgICBwYXJlbnRBc3NldE5hbWVJZERhc2hib2FyZE5hbWVJZDogdGhpcy5jb250ZXh0Py5pZFxuICAgICAgICA/IGAke3BhcmVudE5hbWV9XyR7dGhpcy5jb250ZXh0LmlkfV8ke2Rhc2hib2FyZE5hbWV9XyR7dGhpcy5tby5pZH1gXG4gICAgICAgIDogJ25vQ29udGV4dCcsXG4gICAgICBkYXNoYm9hcmRUeXBlOiB0aGlzLmRhc2hib2FyZC5kZXZpY2VUeXBlID8gdGhpcy5kYXNoYm9hcmQuZGV2aWNlVHlwZVZhbHVlIDogbnVsbCxcbiAgICAgIGNvbnRleHQ6IHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuZ2V0Q29udGV4dEZvckdTKHRoaXMuY29udGV4dClcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgb25Mb2FkR1NFdmVudCgpIHtcbiAgICBjb25zdCBwYXJlbnROYW1lID0gYXdhaXQgdGhpcy5jb252ZXJ0U3RyaW5nVG9IYXNoKHRoaXMuY29udGV4dD8ubmFtZSk7XG4gICAgY29uc3QgZGFzaGJvYXJkTmFtZSA9XG4gICAgICAoYXdhaXQgdGhpcy5jb252ZXJ0U3RyaW5nVG9IYXNoKHRoaXMuZGFzaGJvYXJkPy5uYW1lKSkgPz9cbiAgICAgIHRoaXMuZXh0cmFjdERlZmF1bHREYXNoYm9hcmROYW1lKHRoaXMubW8pID8/XG4gICAgICAnbm9uZSc7XG5cbiAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KFxuICAgICAgdGhpcy5pc1JlcG9ydFxuICAgICAgICA/IFBST0RVQ1RfRVhQRVJJRU5DRS5EQVNIQk9BUkQuRVZFTlRTLlJFUE9SVFNcbiAgICAgICAgOiBQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkVWRU5UUy5EQVNIQk9BUkRTLFxuICAgICAge1xuICAgICAgICBjb21wb25lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5EQVNIQk9BUkQuQ09NUE9ORU5UUy5EQVNIQk9BUkRfVklFVyxcbiAgICAgICAgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkFDVElPTlMuTE9BRCxcbiAgICAgICAgbmFtZTogZGFzaGJvYXJkTmFtZSxcbiAgICAgICAgaWQ6IHRoaXMubW8uaWQsXG4gICAgICAgIG5hbWVJZDogYCR7ZGFzaGJvYXJkTmFtZX1fJHt0aGlzLm1vLmlkfWAsXG4gICAgICAgIHBhcmVudEFzc2V0SWQ6IHRoaXMuY29udGV4dD8uaWQgPyB0aGlzLmNvbnRleHQuaWQgOiAnbm9Db250ZXh0JyxcbiAgICAgICAgcGFyZW50QXNzZXROYW1lOiB0aGlzLmNvbnRleHQ/LmlkID8gcGFyZW50TmFtZSA6ICdub0NvbnRleHQnLFxuICAgICAgICBwYXJlbnRBc3NldFR5cGU6IHRoaXMuY29udGV4dD8uaWQgPyB0aGlzLmNvbnRleHQudHlwZSA6ICdub0NvbnRleHQnLFxuICAgICAgICBwYXJlbnRBc3NldE5hbWVJZDogdGhpcy5jb250ZXh0Py5pZCA/IGAke3BhcmVudE5hbWV9XyR7dGhpcy5jb250ZXh0LmlkfWAgOiAnbm9Db250ZXh0JyxcbiAgICAgICAgcGFyZW50QXNzZXROYW1lRGFzaGJvYXJkTmFtZTogdGhpcy5jb250ZXh0Py5pZFxuICAgICAgICAgID8gYCR7cGFyZW50TmFtZX1fJHtkYXNoYm9hcmROYW1lfWBcbiAgICAgICAgICA6ICdub0NvbnRleHQnLFxuICAgICAgICBwYXJlbnRBc3NldElkRGFzaGJvYXJkSWQ6IHRoaXMuY29udGV4dD8uaWRcbiAgICAgICAgICA/IGAke3RoaXMuY29udGV4dC5pZH1fJHt0aGlzLm1vLmlkfWBcbiAgICAgICAgICA6ICdub0NvbnRleHQnLFxuICAgICAgICBwYXJlbnRBc3NldE5hbWVEYXNoYm9hcmRJZDogdGhpcy5jb250ZXh0Py5pZCA/IGAke3BhcmVudE5hbWV9XyR7dGhpcy5tby5pZH1gIDogJ25vQ29udGV4dCcsXG4gICAgICAgIHBhcmVudEFzc2V0TmFtZUlkRGFzaGJvYXJkTmFtZUlkOiB0aGlzLmNvbnRleHQ/LmlkXG4gICAgICAgICAgPyBgJHtwYXJlbnROYW1lfV8ke3RoaXMuY29udGV4dC5pZH1fJHtkYXNoYm9hcmROYW1lfV8ke3RoaXMubW8uaWR9YFxuICAgICAgICAgIDogJ25vQ29udGV4dCcsXG4gICAgICAgIGRhc2hib2FyZFR5cGU6IHRoaXMuZGFzaGJvYXJkLmRldmljZVR5cGUgPyB0aGlzLmRhc2hib2FyZC5kZXZpY2VUeXBlVmFsdWUgOiBudWxsLFxuICAgICAgICBjb250ZXh0OiB0aGlzLmlzUmVwb3J0XG4gICAgICAgICAgPyBQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkNPTlRFWFQuUkVQT1JUXG4gICAgICAgICAgOiB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmdldENvbnRleHRGb3JHUyh0aGlzLmNvbnRleHQpXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdERlZmF1bHREYXNoYm9hcmROYW1lKG9iajogSU1hbmFnZWRPYmplY3QpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBuYW1lS2V5ID0gT2JqZWN0LmtleXMob2JqKS5maW5kKGtleSA9PiBrZXkuc3RhcnRzV2l0aCgnYzh5X0Rhc2hib2FyZCFuYW1lIScpKTtcbiAgICBpZiAobmFtZUtleSkge1xuICAgICAgcmV0dXJuIG5hbWVLZXkuc3BsaXQoJyEnKS5wb3AoKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBAbWVtb2l6ZSgpXG4gIHByaXZhdGUgYXN5bmMgY29udmVydFN0cmluZ1RvSGFzaChzdHI6IHN0cmluZykge1xuICAgIGlmICghc3RyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmdhaW5zaWdodFNlcnZpY2Uuc2hvdWxkU2VuZFBpaURhdGEoKSlcbiAgICAgID8gc3RyXG4gICAgICA6IHRoaXMuZ2FpbnNpZ2h0U2VydmljZS5oYXNoR3JvdXBOYW1lKHN0cik7XG4gIH1cbn1cbiIsIjxjOHktdGl0bGUgKm5nSWY9XCJ0aXRsZVwiPlxuICB7eyB0aXRsZSB9fVxuPC9jOHktdGl0bGU+XG5cbjxjOHktYWN0aW9uLWJhci1pdGVtXG4gIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiXG4gIFtwcmlvcml0eV09XCIxMDAwMFwiXG4gICpuZ0lmPVwiZGFzaGJvYXJkPy5kZXZpY2VUeXBlICYmIGRhc2hib2FyZC5kZXZpY2VUeXBlVmFsdWVcIlxuPlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJidG4tY2xlYW4gYnRuLWxpbmtcIlxuICAgIHBvcG92ZXJUaXRsZT1cInt7ICdEYXNoYm9hcmQgdGVtcGxhdGUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidIZWxwJyB8IHRyYW5zbGF0ZVwiXG4gICAgW3BvcG92ZXJdPVwiZGFzaGJvYXJkVHlwZVBvcG92ZXJSZWZcIlxuICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXG4gICAgdHJpZ2dlcnM9XCJmb2N1c1wiXG4gICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gID5cbiAgICA8c3BhbiBjbGFzcz1cInRhZyB0YWctLWluZm8gdGV4dC0xMlwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJkYXNoYm9hcmQtdGVtcGxhdGUtbWFya2VyXCI+PC9zcGFuPlxuICAgICAge3sgZGFzaGJvYXJkVHlwZUxhYmVsIHwgdHJhbnNsYXRlOiB7IGRhc2hib2FyZFR5cGU6IGRhc2hib2FyZC5kZXZpY2VUeXBlVmFsdWUgfSB9fVxuICAgIDwvc3Bhbj5cbiAgPC9idXR0b24+XG4gIDxuZy10ZW1wbGF0ZSAjZGFzaGJvYXJkVHlwZVBvcG92ZXJSZWY+XG4gICAgPGRpdlxuICAgICAgW2lubmVySFRNTF09XCJkYXNoYm9hcmRUeXBlUG9wb3ZlciB8IHRyYW5zbGF0ZTogeyBkYXNoYm9hcmRUeXBlOiBkYXNoYm9hcmQuZGV2aWNlVHlwZVZhbHVlIH1cIlxuICAgID48L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW1cbiAgW3BsYWNlbWVudF09XCIncmlnaHQnXCJcbiAgW3ByaW9yaXR5XT1cIi0xXCJcbiAgKm5nSWY9XCJkZWZhdWx0V2lkZ2V0cy5sZW5ndGggPiAwXCJcbj5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCJcbiAgICB0aXRsZT1cInt7ICdSZXNldCB3aWRnZXRzJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgcHgtZXZlbnQ9XCJSZXNldCBkYXNoYm9hcmRcIlxuICAgIChjbGljayk9XCJyZXN0b3JlKClcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCAod2lkZ2V0c0Rhc2hib2FyZD8uZWRpdE1vZGUkIHwgYXN5bmMpXCJcbiAgICBkYXRhLWN5PVwiY29udGV4dC1kYXNoYm9hcmQtLWJ1dHRvbi1yZXNldC1kYXNoYm9hcmRcIlxuICA+XG4gICAgPGlcbiAgICAgIGNsYXNzPVwibS1yLTRcIlxuICAgICAgYzh5SWNvbj1cInJlc2V0XCJcbiAgICA+PC9pPlxuICAgIDxzcGFuIGNsYXNzPVwidmlzaWJsZS14cy1pbmxpbmUgaGlkZGVuLXNtIHZpc2libGUtbWQtaW5saW5lIHZpc2libGUtbGctaW5saW5lXCI+XG4gICAgICB7eyAnUmVzZXQgd2lkZ2V0cycgfCB0cmFuc2xhdGUgfX1cbiAgICA8L3NwYW4+XG4gIDwvYnV0dG9uPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48Yzh5LWhlbHBcbiAgc3JjPVwiL2RvY3MvY29ja3BpdC93b3JraW5nLXdpdGgtZGFzaGJvYXJkcy8jd29ya2luZy13aXRoLWRhc2hib2FyZHNcIlxuICAqbmdJZj1cInNob3dDb250ZXh0SGVscEJ1dHRvblwiXG4+PC9jOHktaGVscD5cblxuPGM4eS1kYXNoYm9hcmQtZGV0YWlsXG4gIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gIFtpc1JlcG9ydF09XCJpc1JlcG9ydFwiXG4gIFtkYXNoYm9hcmRdPVwiZGFzaGJvYXJkXCJcbiAgW21vXT1cIm1vXCJcbiAgW2NvbnRleHRdPVwiY29udGV4dFwiXG4gIFtkZXZpY2VUeXBlXT1cImNvbnRleHQ/LnR5cGVcIlxuICBbaGlkZUF2YWlsYWJpbGl0eV09XCJoaWRlQXZhaWxhYmlsaXR5XCJcbiAgKGRhc2hib2FyZFNhdmVkKT1cInJlbG9hZERhc2hib2FyZCgkZXZlbnQpXCJcbiAgKHByZXZpZXdDaGFuZ2VkKT1cImRhc2hib2FyZFByZXZpZXcoJGV2ZW50KVwiXG4+PC9jOHktZGFzaGJvYXJkLWRldGFpbD5cblxuPGM4eS13aWRnZXRzLWRhc2hib2FyZFxuICBbY29udGV4dF09XCJjb250ZXh0XCJcbiAgW2NvbnRleHREYXNoYm9hcmRdPVwiZGFzaGJvYXJkXCJcbiAgW3dpZGdldHNdPVwid2lkZ2V0c1wiXG4gIFtpc0NvcHlEaXNhYmxlZF09XCJpc0NvcHlEaXNhYmxlZFwiXG4gIFtzZXR0aW5nc109XCJ7XG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgaXNEaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgY2FuRGVsZXRlOiBjYW5EZWxldGUgJiYgISFkYXNoYm9hcmQsXG4gICAgdHJhbnNsYXRlV2lkZ2V0VGl0bGU6IGRhc2hib2FyZD8udHJhbnNsYXRlV2lkZ2V0VGl0bGUgPz8gdHJhbnNsYXRlV2lkZ2V0VGl0bGUsXG4gICAgYWxsb3dGdWxsc2NyZWVuOiBtb2R1bGVDb25maWcuYWxsb3dGdWxsc2NyZWVuLFxuICAgIHRpdGxlOiBzZXRUaXRsZSA/IGRhc2hib2FyZD8ubmFtZSB8fCB0aXRsZSA6IHVuZGVmaW5lZCxcbiAgICB3aWRnZXRNYXJnaW46IGRhc2hib2FyZD8ud2lkZ2V0TWFyZ2luLFxuICAgIGNhbkNvcHk6IGNhbkNvcHkgJiYgISFkYXNoYm9hcmQsXG4gICAgZGVmYXVsdFdpZHRoOiBkYXNoYm9hcmQ/LmNvbHVtbnMgPj0gMjQgPyA4IDogNCxcbiAgICBjb2x1bW5zOiBkYXNoYm9hcmQ/LmNvbHVtbnMgfHwgMTJcbiAgfVwiXG4gIFticmVhZGNydW1iXT1cImJyZWFkY3J1bWJTZXR0aW5nc1wiXG4gIFtlZGl0TW9kZUJ1dHRvbnNdPVwie1xuICAgIHVuZG9CdXR0b25EaXNhYmxlZDogZWRpdE1vZGVTZXJ2aWNlLnVuZG9CdXR0b25EaXNhYmxlZCxcbiAgICBjaGFuZ2VUb1VuZG9OYW1lOiBlZGl0TW9kZVNlcnZpY2UuY2hhbmdlVG9VbmRvTmFtZSxcbiAgICByZWRvQnV0dG9uRGlzYWJsZWQ6ICFlZGl0TW9kZVNlcnZpY2UucmVkb1N0YWNrTGFzdEl0ZW0sXG4gICAgY2hhbmdlVG9SZWRvTmFtZTogZWRpdE1vZGVTZXJ2aWNlLnJlZG9TdGFja0xhc3RJdGVtPy5uYW1lXG4gIH1cIlxuICAob25DaGFuZ2VEYXNoYm9hcmQpPVwicG9zaXRpb25PcldpZGdldERpbWVuc2lvbkNoYW5nZSgkZXZlbnQpXCJcbiAgKG9uQWRkV2lkZ2V0KT1cImFkZFdpZGdldCgpXCJcbiAgKG9uRWRpdFdpZGdldCk9XCJlZGl0V2lkZ2V0KCRldmVudClcIlxuICAob25EZWxldGVXaWRnZXQpPVwiZGVsZXRlV2lkZ2V0KCRldmVudClcIlxuICAob25TYXZlRGFzaGJvYXJkKT1cInNhdmVXaWRnZXRzVG9EYXNoYm9hcmQoKVwiXG4gIChvbkNhbmNlbERhc2hib2FyZCk9XCJjYW5jZWxFZGl0TW9kZSgpXCJcbiAgKHJldmVydENoYW5nZSk9XCJyZXZlcnRDaGFuZ2UoJGV2ZW50KVwiXG4gIChvbkNoYW5nZVN0YXJ0KT1cImFkZERhc2hib2FyZENsYXNzVG9Cb2R5KClcIlxuICAob25DaGFuZ2VFbmQpPVwicmVtb3ZlRGFzaGJvYXJkQ2xhc3NGcm9tQm9keSgpXCJcbiAgKG9uRWRpdERhc2hib2FyZCk9XCJkYXNoYm9hcmREZXRhaWxzLnNob3codHJ1ZSlcIlxuICAob25Db3B5RGFzaGJvYXJkKT1cImNvcHlEYXNoYm9hcmQoKVwiXG4gIChvbkRlbGV0ZURhc2hib2FyZCk9XCJkZWxldGVEYXNoYm9hcmQoKVwiXG4+PC9jOHktd2lkZ2V0cy1kYXNoYm9hcmQ+XG4iXX0=
|
|
@@ -337,13 +337,13 @@ export class DeviceInfoDashboardComponent {
|
|
|
337
337
|
return this.contextDashboard?.canDeactivate();
|
|
338
338
|
}
|
|
339
339
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DeviceInfoDashboardComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.WidgetService }, { token: i3.TranslateService }, { token: i4.InventoryService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
340
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: DeviceInfoDashboardComponent, selector: "c8y-device-info-dashboard-dashboard", viewQueries: [{ propertyName: "contextDashboard", first: true, predicate: ContextDashboardComponent, descendants: true }], ngImport: i0, template: "<div *ngIf=\"!isLoading\">\n <c8y-title>\n {{ title }}\n </c8y-title>\n <c8y-context-dashboard\n [translateWidgetTitle]=\"true\"\n [name]=\"dashboardName\"\n [context]=\"currentContext\"\n [defaultWidgets]=\"widgetsList\"\n [canDelete]=\"false\"\n [hideAvailability]=\"true\"\n ></c8y-context-dashboard>\n</div>\n", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: i7.ContextDashboardComponent, selector: "c8y-context-dashboard", inputs: ["name", "childrenClasses", "context", "setTitle", "defaultWidgets", "canCopy", "canDelete", "isLoading", "breadcrumbSettings", "showContextHelpButton", "translateWidgetTitle", "hideAvailability"] }] }); }
|
|
340
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: DeviceInfoDashboardComponent, selector: "c8y-device-info-dashboard-dashboard", viewQueries: [{ propertyName: "contextDashboard", first: true, predicate: ContextDashboardComponent, descendants: true }], ngImport: i0, template: "<div *ngIf=\"!isLoading\">\n <c8y-title>\n {{ title }}\n </c8y-title>\n <c8y-context-dashboard\n [translateWidgetTitle]=\"true\"\n [name]=\"dashboardName\"\n [context]=\"currentContext\"\n [defaultWidgets]=\"widgetsList\"\n [canDelete]=\"false\"\n [hideAvailability]=\"true\"\n [canCopy]=\"false\"\n ></c8y-context-dashboard>\n</div>\n", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: i7.ContextDashboardComponent, selector: "c8y-context-dashboard", inputs: ["name", "childrenClasses", "context", "setTitle", "defaultWidgets", "canCopy", "canDelete", "isLoading", "breadcrumbSettings", "showContextHelpButton", "translateWidgetTitle", "hideAvailability"] }] }); }
|
|
341
341
|
}
|
|
342
342
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DeviceInfoDashboardComponent, decorators: [{
|
|
343
343
|
type: Component,
|
|
344
|
-
args: [{ selector: 'c8y-device-info-dashboard-dashboard', template: "<div *ngIf=\"!isLoading\">\n <c8y-title>\n {{ title }}\n </c8y-title>\n <c8y-context-dashboard\n [translateWidgetTitle]=\"true\"\n [name]=\"dashboardName\"\n [context]=\"currentContext\"\n [defaultWidgets]=\"widgetsList\"\n [canDelete]=\"false\"\n [hideAvailability]=\"true\"\n ></c8y-context-dashboard>\n</div>\n" }]
|
|
344
|
+
args: [{ selector: 'c8y-device-info-dashboard-dashboard', template: "<div *ngIf=\"!isLoading\">\n <c8y-title>\n {{ title }}\n </c8y-title>\n <c8y-context-dashboard\n [translateWidgetTitle]=\"true\"\n [name]=\"dashboardName\"\n [context]=\"currentContext\"\n [defaultWidgets]=\"widgetsList\"\n [canDelete]=\"false\"\n [hideAvailability]=\"true\"\n [canCopy]=\"false\"\n ></c8y-context-dashboard>\n</div>\n" }]
|
|
345
345
|
}], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i2.WidgetService }, { type: i3.TranslateService }, { type: i4.InventoryService }], propDecorators: { contextDashboard: [{
|
|
346
346
|
type: ViewChild,
|
|
347
347
|
args: [ContextDashboardComponent, { static: false }]
|
|
348
348
|
}] } });
|
|
349
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlLWluZm8tZGFzaGJvYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvbnRleHQtZGFzaGJvYXJkL2RldmljZS1pbmZvLWRhc2hib2FyZC9kZXZpY2UtaW5mby1kYXNoYm9hcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vY29udGV4dC1kYXNoYm9hcmQvZGV2aWNlLWluZm8tZGFzaGJvYXJkL2RldmljZS1pbmZvLWRhc2hib2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9DLE9BQU8sRUFBZSxPQUFPLEVBQVUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsSUFBSSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWxELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7Ozs7Ozs7QUFNM0UsTUFBTSxPQUFPLDRCQUE0QjtJQThRdkMsWUFDVSxNQUFzQixFQUN0QixhQUE0QixFQUM1QixnQkFBa0MsRUFDbEMsZ0JBQWtDO1FBSGxDLFdBQU0sR0FBTixNQUFNLENBQWdCO1FBQ3RCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMscUJBQWdC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RUFBRSxDQUFDLENBQUM7UUFDdkYsTUFBTSxvQkFBb0IsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUNoQyxxQkFBcUIsQ0FBQyxJQUFJLENBQ3hCLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEtBQUssUUFBUSxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUMzRSxDQUFDO1FBQ0osTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxDQUFDO1FBQzFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxDQUFDO0lBQ2hELENBQUM7OEdBeFZVLDRCQUE0QjtrR0FBNUIsNEJBQTRCLDZIQVE1Qix5QkFBeUIsZ0RDdkJ0QyxvVkFhQTs7MkZERWEsNEJBQTRCO2tCQUp4QyxTQUFTOytCQUNFLHFDQUFxQzs2S0FZL0MsZ0JBQWdCO3NCQURmLFNBQVM7dUJBQUMseUJBQXlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEludmVudG9yeVNlcnZpY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBDb250ZXh0RGF0YSwgZ2V0dGV4dCwgV2lkZ2V0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBmcm9tLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgbWVyZ2VNYXAsIHRhcCwgdG9BcnJheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFdpZGdldFNlcnZpY2UgfSBmcm9tICcuLi93aWRnZXQuc2VydmljZSc7XG5pbXBvcnQgeyBDYW5EZWFjdGl2YXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29udGV4dC1kYXNoYm9hcmQubW9kZWwnO1xuaW1wb3J0IHsgQ29udGV4dERhc2hib2FyZENvbXBvbmVudCB9IGZyb20gJy4uL2NvbnRleHQtZGFzaGJvYXJkLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1kZXZpY2UtaW5mby1kYXNoYm9hcmQtZGFzaGJvYXJkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RldmljZS1pbmZvLWRhc2hib2FyZC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgRGV2aWNlSW5mb0Rhc2hib2FyZENvbXBvbmVudCBpbXBsZW1lbnRzIENhbkRlYWN0aXZhdGVDb21wb25lbnQge1xuICBpc0xvYWRpbmcgPSB0cnVlO1xuICB0aXRsZTogc3RyaW5nO1xuICBkYXNoYm9hcmROYW1lID0gJyc7XG4gIHdpZGdldHNMaXN0OiBXaWRnZXRbXTtcbiAgY3VycmVudENvbnRleHQ6IENvbnRleHREYXRhO1xuICBjb250ZXh0U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHdpZGdldHNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgQFZpZXdDaGlsZChDb250ZXh0RGFzaGJvYXJkQ29tcG9uZW50LCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgY29udGV4dERhc2hib2FyZDogQ29udGV4dERhc2hib2FyZENvbXBvbmVudDtcblxuICBERVZJQ0VfSU5GT19XSURHRVRTID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdkZXZpY2VTdGF0dXNXaWRnZXQnLFxuICAgICAgdGl0bGU6IGdldHRleHQoJ0RldmljZSBzdGF0dXMnKSxcbiAgICAgIF94OiAwLFxuICAgICAgX3k6IDAsXG4gICAgICBfaGVpZ2h0OiA1LFxuICAgICAgX3dpZHRoOiA4XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnRGF0YSBwb2ludHMgZ3JhcGgnLFxuICAgICAgdGl0bGU6IGdldHRleHQoJ0RldmljZSBhbmQgY29tbXVuaWNhdGlvbicpLFxuICAgICAgX3g6IDgsXG4gICAgICBfeTogMCxcbiAgICAgIF9oZWlnaHQ6IDUsXG4gICAgICBfd2lkdGg6IDE2LFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIGludGVydmFsOiAnaG91cnMnLFxuICAgICAgICBhZ2dyZWdhdGlvbjogJ05PTkUnLFxuICAgICAgICByZWFsdGltZTogdHJ1ZSxcbiAgICAgICAgZGF0YXBvaW50c0luaXRpYWxEaXNwbGF5TGltaXQ6IDMsXG4gICAgICAgIGRhdGFwb2ludHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmcmFnbWVudDogJ2M4eV9CYXR0ZXJ5JyxcbiAgICAgICAgICAgIHNlcmllczogJ2xldmVsJyxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQmF0dGVyeTogbGV2ZWwnKSxcbiAgICAgICAgICAgIHVuaXQ6ICclJyxcbiAgICAgICAgICAgIHJlbmRlclR5cGU6ICdtaW4nLFxuICAgICAgICAgICAgbGluZVR5cGU6ICdsaW5lJyxcbiAgICAgICAgICAgIGNvbG9yOiAnIzVlMDdiMycsXG4gICAgICAgICAgICBfX2FjdGl2ZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnJhZ21lbnQ6ICdjOHlfU2lnbmFsU3RyZW5ndGgnLFxuICAgICAgICAgICAgc2VyaWVzOiAncnNzaScsXG4gICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1NpZ25hbDogUlNTSScpLFxuICAgICAgICAgICAgdW5pdDogJ2RCbScsXG4gICAgICAgICAgICByZW5kZXJUeXBlOiAnbWluJyxcbiAgICAgICAgICAgIGxpbmVUeXBlOiAnbGluZScsXG4gICAgICAgICAgICBjb2xvcjogJyNhN2QwZjEnLFxuICAgICAgICAgICAgX19hY3RpdmU6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZyYWdtZW50OiAnYzh5X01lbW9yeU1lYXN1cmVtZW50JyxcbiAgICAgICAgICAgIHNlcmllczogJ1VzZWQnLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdNZW1vcnk6IHVzZWQnKSxcbiAgICAgICAgICAgIHVuaXQ6ICdNQicsXG4gICAgICAgICAgICByZW5kZXJUeXBlOiAnbWluJyxcbiAgICAgICAgICAgIGxpbmVUeXBlOiAnbGluZScsXG4gICAgICAgICAgICBjb2xvcjogJyNmNzUyMjknLFxuICAgICAgICAgICAgX19hY3RpdmU6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZyYWdtZW50OiAnYzh5X0NQVU1lYXN1cmVtZW50JyxcbiAgICAgICAgICAgIHNlcmllczogJ1dvcmtsb2FkJyxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQ1BVOiB3b3JrbG9hZCcpLFxuICAgICAgICAgICAgdW5pdDogJyUnLFxuICAgICAgICAgICAgcmVuZGVyVHlwZTogJ21pbicsXG4gICAgICAgICAgICBsaW5lVHlwZTogJ2xpbmUnLFxuICAgICAgICAgICAgY29sb3I6ICcjYjI0ZjNlJyxcbiAgICAgICAgICAgIF9fYWN0aXZlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmcmFnbWVudDogJ2M4eV9OZXR3b3JrU3RhdGlzdGljcycsXG4gICAgICAgICAgICBzZXJpZXM6ICdVcGxvYWQnLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdOZXR3b3JrOiB1cGxvYWQnKSxcbiAgICAgICAgICAgIHVuaXQ6ICdLQi9zJyxcbiAgICAgICAgICAgIHJlbmRlclR5cGU6ICdtaW4nLFxuICAgICAgICAgICAgbGluZVR5cGU6ICdsaW5lJyxcbiAgICAgICAgICAgIGNvbG9yOiAnIzg4YzAzOScsXG4gICAgICAgICAgICBfX2FjdGl2ZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnJhZ21lbnQ6ICdjOHlfU2lnbmFsU3RyZW5ndGgnLFxuICAgICAgICAgICAgc2VyaWVzOiAnUkNTUCcsXG4gICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1NpZ25hbDogUkNTUCcpLFxuICAgICAgICAgICAgcmVuZGVyVHlwZTogJ21pbicsXG4gICAgICAgICAgICBsaW5lVHlwZTogJ2xpbmUnLFxuICAgICAgICAgICAgY29sb3I6ICcjNWUyZjE5JyxcbiAgICAgICAgICAgIF9fYWN0aXZlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmcmFnbWVudDogJ2M4eV9TaWduYWxTdHJlbmd0aCcsXG4gICAgICAgICAgICBzZXJpZXM6ICdSU0NQJyxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnU2lnbmFsOiBSU0NQJyksXG4gICAgICAgICAgICByZW5kZXJUeXBlOiAnbWluJyxcbiAgICAgICAgICAgIGxpbmVUeXBlOiAnbGluZScsXG4gICAgICAgICAgICBjb2xvcjogJyM1ZTJmMTknLFxuICAgICAgICAgICAgX19hY3RpdmU6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZyYWdtZW50OiAnYzh5X1NpZ25hbFN0cmVuZ3RoJyxcbiAgICAgICAgICAgIHNlcmllczogJ1JTUlAnLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdTaWduYWw6IFJTUlAnKSxcbiAgICAgICAgICAgIHJlbmRlclR5cGU6ICdtaW4nLFxuICAgICAgICAgICAgbGluZVR5cGU6ICdsaW5lJyxcbiAgICAgICAgICAgIGNvbG9yOiAnIzQzYmEzYicsXG4gICAgICAgICAgICBfX2FjdGl2ZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnJhZ21lbnQ6ICdjOHlfU2lnbmFsU3RyZW5ndGgnLFxuICAgICAgICAgICAgc2VyaWVzOiAnUlNSUScsXG4gICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1NpZ25hbDogUlNSUScpLFxuICAgICAgICAgICAgcmVuZGVyVHlwZTogJ21pbicsXG4gICAgICAgICAgICBsaW5lVHlwZTogJ2xpbmUnLFxuICAgICAgICAgICAgY29sb3I6ICcjMTRiMGIzJyxcbiAgICAgICAgICAgIF9fYWN0aXZlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmcmFnbWVudDogJ2M4eV9TaWduYWxTdHJlbmd0aCcsXG4gICAgICAgICAgICBzZXJpZXM6ICdiZXInLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdTaWduYWw6IEJFUicpLFxuICAgICAgICAgICAgdW5pdDogJyUnLFxuICAgICAgICAgICAgcmVuZGVyVHlwZTogJ21pbicsXG4gICAgICAgICAgICBsaW5lVHlwZTogJ2xpbmUnLFxuICAgICAgICAgICAgY29sb3I6ICcjNDRmZjMzJyxcbiAgICAgICAgICAgIF9fYWN0aXZlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmcmFnbWVudDogJ2M4eV9TaWduYWxTdHJlbmd0aCcsXG4gICAgICAgICAgICBzZXJpZXM6ICdFQ04wJyxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnU2lnbmFsOiBFQ04wJyksXG4gICAgICAgICAgICByZW5kZXJUeXBlOiAnbWluJyxcbiAgICAgICAgICAgIGxpbmVUeXBlOiAnbGluZScsXG4gICAgICAgICAgICBjb2xvcjogJyM4NzNlZmEnLFxuICAgICAgICAgICAgX19hY3RpdmU6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZyYWdtZW50OiAnYzh5X05ldHdvcmtTdGF0aXN0aWNzJyxcbiAgICAgICAgICAgIHNlcmllczogJ0Rvd25sb2FkJyxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnTmV0d29yazogZG93bmxvYWQnKSxcbiAgICAgICAgICAgIHVuaXQ6ICdLQi9zJyxcbiAgICAgICAgICAgIHJlbmRlclR5cGU6ICdtaW4nLFxuICAgICAgICAgICAgbGluZVR5cGU6ICdsaW5lJyxcbiAgICAgICAgICAgIGNvbG9yOiAnI2YyN2E0NScsXG4gICAgICAgICAgICBfX2FjdGl2ZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnJhZ21lbnQ6ICdjOHlfTWVtb3J5TWVhc3VyZW1lbnQnLFxuICAgICAgICAgICAgc2VyaWVzOiAnVG90YWwnLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdNZW1vcnk6IHRvdGFsJyksXG4gICAgICAgICAgICB1bml0OiAnTUInLFxuICAgICAgICAgICAgcmVuZGVyVHlwZTogJ21pbicsXG4gICAgICAgICAgICBsaW5lVHlwZTogJ2xpbmUnLFxuICAgICAgICAgICAgY29sb3I6ICcjZGFkZDhjJyxcbiAgICAgICAgICAgIF9fYWN0aXZlOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBhbGFybXNFdmVudHNDb25maWdzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbGFiZWw6ICdjOHlfTG9jYXRpb25VcGRhdGUnLFxuICAgICAgICAgICAgdGltZWxpbmVUeXBlOiAnRVZFTlQnLFxuICAgICAgICAgICAgY29sb3I6ICcjNmY2Y2QwJyxcbiAgICAgICAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ2M4eV9Mb2NhdGlvblVwZGF0ZSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfX2FjdGl2ZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbGFiZWw6ICdjOHlfVW5hdmFpbGFiaWxpdHlBbGFybScsXG4gICAgICAgICAgICB0aW1lbGluZVR5cGU6ICdBTEFSTScsXG4gICAgICAgICAgICBjb2xvcjogJyMzNzViZjInLFxuICAgICAgICAgICAgZmlsdGVyczoge1xuICAgICAgICAgICAgICB0eXBlOiAnYzh5X1VuYXZhaWxhYmlsaXR5QWxhcm0nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX19hY3RpdmU6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdBc3NldCBQcm9wZXJ0aWVzJyxcbiAgICAgIHRpdGxlOiBnZXR0ZXh0KCdEZXZpY2UgZGF0YScpLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlkOiAnYzh5U2NoZW1hISFpZCcsXG4gICAgICAgICAgICAgIF9fYWN0aXZlOiB0cnVlLFxuICAgICAgICAgICAgICBrZXlQYXRoOiBbJ2lkJ10sXG4gICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICBsYWJlbDogJ0lEJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWQ6ICdjOHlTY2hlbWEhIW5hbWUnLFxuICAgICAgICAgICAgICBfX2FjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAga2V5UGF0aDogWyduYW1lJ10sXG4gICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICBsYWJlbDogJ05hbWUnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZDogJ2M4eVNjaGVtYSEhdHlwZScsXG4gICAgICAgICAgICAgIF9fYWN0aXZlOiB0cnVlLFxuICAgICAgICAgICAgICBrZXlQYXRoOiBbJ3R5cGUnXSxcbiAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgIGxhYmVsOiAnVHlwZSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlkOiAnYzh5U2NoZW1hISFsYXN0VXBkYXRlZCcsXG4gICAgICAgICAgICAgIF9fYWN0aXZlOiB0cnVlLFxuICAgICAgICAgICAgICBrZXlQYXRoOiBbJ2xhc3RVcGRhdGVkJ10sXG4gICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICBsYWJlbDogJ0xhc3QgVXBkYXRlZCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlkOiAnYzh5U2NoZW1hISFjcmVhdGlvblRpbWUnLFxuICAgICAgICAgICAgICBfX2FjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAga2V5UGF0aDogWydjcmVhdGlvblRpbWUnXSxcbiAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgIGxhYmVsOiAnQ3JlYXRpb24gVGltZSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdLFxuICAgICAgICAgIGFsbG93RGlzcGxheUFuZEVkaXRLbm93blByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgIGhpZGRlblByb3BlcnRpZXNLZXlQYXRoczogWydvd25lciddXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBfeDogMCxcbiAgICAgIF95OiA1LFxuICAgICAgX2hlaWdodDogOCxcbiAgICAgIF93aWR0aDogOFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ0FsYXJtIGxpc3QnLFxuICAgICAgdGl0bGU6IGdldHRleHQoJ0FjdGl2ZSwgY3JpdGljYWwgYWxhcm1zJyksXG4gICAgICBfeDogOCxcbiAgICAgIF95OiA1LFxuICAgICAgX2hlaWdodDogNCxcbiAgICAgIF93aWR0aDogOCxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgb3JkZXJNb2RlOiAnQUNUSVZFX0ZJUlNUJyxcbiAgICAgICAgICBzZXZlcml0eTogeyBDUklUSUNBTDogdHJ1ZSB9LFxuICAgICAgICAgIHN0YXR1czoge1xuICAgICAgICAgICAgQUNUSVZFOiB0cnVlLFxuICAgICAgICAgICAgQUNLTk9XTEVER0VEOiBmYWxzZSxcbiAgICAgICAgICAgIENMRUFSRUQ6IGZhbHNlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0eXBlczogW11cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2RldmljZUdyb3VwQXNzaWdubWVudFdpZGdldCcsXG4gICAgICB0aXRsZTogZ2V0dGV4dCgnR3JvdXAgYXNzaWdubWVudCcpLFxuICAgICAgX3g6IDE2LFxuICAgICAgX3k6IDUsXG4gICAgICBfaGVpZ2h0OiA0LFxuICAgICAgX3dpZHRoOiA4XG4gICAgfSxcbiAgICB7XG4gICAgICBjb21wb25lbnRJZDogJ01hcCcsXG4gICAgICB0aXRsZTogZ2V0dGV4dCgnTG9jYXRpb24nKSxcbiAgICAgIF94OiA4LFxuICAgICAgX3k6IDksXG4gICAgICBfaGVpZ2h0OiA0LFxuICAgICAgX3dpZHRoOiAxNlxuICAgIH1cbiAgXSBhcyBXaWRnZXRbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlcjogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSB3aWRnZXRTZXJ2aWNlOiBXaWRnZXRTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGludmVudG9yeVNlcnZpY2U6IEludmVudG9yeVNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY29udGV4dFN1YnNjcmlwdGlvbiA9IHRoaXMucm91dGVyLnBhcmVudC5kYXRhXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKCh7IGNvbnRleHREYXRhIH0pID0+IHtcbiAgICAgICAgICBjb25zdCBjb250ZXh0TmFtZVZhbGlkID0gY29udGV4dERhdGEubmFtZSAmJiBjb250ZXh0RGF0YS5uYW1lLnRyaW0oKTtcbiAgICAgICAgICB0aGlzLnRpdGxlID0gY29udGV4dE5hbWVWYWxpZCA/IGNvbnRleHREYXRhLm5hbWUgOiBjb250ZXh0RGF0YS5pZDtcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZE5hbWUgPSBgJHtjb250ZXh0RGF0YS5pZH0tZGV2aWNlLWluZm9gO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShhc3luYyBkYXRhID0+IHtcbiAgICAgICAgdGhpcy5jdXJyZW50Q29udGV4dCA9IGRhdGEgYXMgQ29udGV4dERhdGE7XG4gICAgICAgIHRoaXMuYWRkRGV2aWNlVGFyZ2V0Rm9yRFAoZGF0YS5jb250ZXh0RGF0YS5pZCwgZGF0YS5jb250ZXh0RGF0YS5uYW1lKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy53aWRnZXRzU3Vic2NyaXB0aW9uID0gZnJvbSh0aGlzLkRFVklDRV9JTkZPX1dJREdFVFMpXG4gICAgICAucGlwZShcbiAgICAgICAgbWVyZ2VNYXAod2lkZ2V0ID0+IHRoaXMud2lkZ2V0U2VydmljZS5tYXBMZWdhY3kod2lkZ2V0KSksXG4gICAgICAgIG1hcCh3aWRnZXQgPT4ge1xuICAgICAgICAgIGxldCBkZXZpY2UgPSB0aGlzLnJvdXRlci5wYXJlbnQuc25hcHNob3QuZGF0YS5jb250ZXh0RGF0YTtcbiAgICAgICAgICBpZiAoZGV2aWNlKSB7XG4gICAgICAgICAgICBkZXZpY2UgPSB7XG4gICAgICAgICAgICAgIG5hbWU6IGRldmljZS5uYW1lLFxuICAgICAgICAgICAgICBpZDogZGV2aWNlLmlkXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4ud2lkZ2V0LFxuICAgICAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgICAgIC4uLndpZGdldC5jb25maWcsXG4gICAgICAgICAgICAgIGRldmljZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH0pLFxuICAgICAgICB0b0FycmF5KClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoYXN5bmMgZGF0YSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuZmlsdGVyU3VwcG9ydGVkU2VyaWVzRm9yRFAodGhpcy5jdXJyZW50Q29udGV4dC5jb250ZXh0RGF0YS5pZCwgZGF0YSk7XG4gICAgICAgIHRoaXMud2lkZ2V0c0xpc3QgPSBkYXRhO1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgfSk7XG4gIH1cblxuICBhZGREZXZpY2VUYXJnZXRGb3JEUChpZDogc3RyaW5nIHwgbnVtYmVyLCBuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBkcFdpZGdldCA9IHRoaXMuREVWSUNFX0lORk9fV0lER0VUUy5maWx0ZXIoaXRlbSA9PiBpdGVtLm5hbWUgPT0gJ0RhdGEgcG9pbnRzIGdyYXBoJylbMF07XG4gICAgLy8gQWRkIHRhcmdldCB0byBkYXRhUG9pbnQgY29uZmlnXG4gICAgZHBXaWRnZXQuY29uZmlnLmRhdGFwb2ludHMubWFwKGl0ZW0gPT4gKGl0ZW1bJ19fdGFyZ2V0J10gPSB7IGlkLCBuYW1lIH0pKTtcbiAgICAvLyBBZGQgdGFyZ2V0IHRvIGFsYXJtRXZlbnRzIENvbmZpZ1xuICAgIGRwV2lkZ2V0LmNvbmZpZy5hbGFybXNFdmVudHNDb25maWdzLm1hcChpdGVtID0+IChpdGVtWydfX3RhcmdldCddID0geyBpZCwgbmFtZSB9KSk7XG4gIH1cblxuICBhc3luYyBmaWx0ZXJTdXBwb3J0ZWRTZXJpZXNGb3JEUChpZDogc3RyaW5nIHwgbnVtYmVyLCB3aWRnZXRzOiBXaWRnZXRbXSkge1xuICAgIGNvbnN0IHN1cHBvcnRlZE1lYXN1cmVtZW50cyA9IGF3YWl0IHRoaXMuaW52ZW50b3J5U2VydmljZS5nZXRNZWFzdXJlbWVudHNBbmRTZXJpZXMoaWQpO1xuICAgIGNvbnN0IGlzRGF0YVBvaW50U3VwcG9ydGVkID0gZHAgPT5cbiAgICAgIHN1cHBvcnRlZE1lYXN1cmVtZW50cy5zb21lKFxuICAgICAgICAoeyBmcmFnbWVudCwgc2VyaWVzIH0pID0+IGRwLmZyYWdtZW50ID09PSBmcmFnbWVudCAmJiBkcC5zZXJpZXMgPT09IHNlcmllc1xuICAgICAgKTtcbiAgICBjb25zdCBkcFdpZGdldCA9IHdpZGdldHMuZmluZCgoeyBuYW1lIH0pID0+IG5hbWUgPT09ICdEYXRhIHBvaW50cyBncmFwaCcpO1xuICAgIGRwV2lkZ2V0LmNvbmZpZy5kYXRhcG9pbnRzID0gZHBXaWRnZXQuY29uZmlnLmRhdGFwb2ludHMuZmlsdGVyKGlzRGF0YVBvaW50U3VwcG9ydGVkKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMud2lkZ2V0c1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY29udGV4dFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgY2FuRGVhY3RpdmF0ZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0RGFzaGJvYXJkPy5jYW5EZWFjdGl2YXRlKCk7XG4gIH1cbn1cbiIsIjxkaXYgKm5nSWY9XCIhaXNMb2FkaW5nXCI+XG4gIDxjOHktdGl0bGU+XG4gICAge3sgdGl0bGUgfX1cbiAgPC9jOHktdGl0bGU+XG4gIDxjOHktY29udGV4dC1kYXNoYm9hcmRcbiAgICBbdHJhbnNsYXRlV2lkZ2V0VGl0bGVdPVwidHJ1ZVwiXG4gICAgW25hbWVdPVwiZGFzaGJvYXJkTmFtZVwiXG4gICAgW2NvbnRleHRdPVwiY3VycmVudENvbnRleHRcIlxuICAgIFtkZWZhdWx0V2lkZ2V0c109XCJ3aWRnZXRzTGlzdFwiXG4gICAgW2NhbkRlbGV0ZV09XCJmYWxzZVwiXG4gICAgW2hpZGVBdmFpbGFiaWxpdHldPVwidHJ1ZVwiXG4gID48L2M4eS1jb250ZXh0LWRhc2hib2FyZD5cbjwvZGl2PlxuIl19
|
|
349
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlLWluZm8tZGFzaGJvYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvbnRleHQtZGFzaGJvYXJkL2RldmljZS1pbmZvLWRhc2hib2FyZC9kZXZpY2UtaW5mby1kYXNoYm9hcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vY29udGV4dC1kYXNoYm9hcmQvZGV2aWNlLWluZm8tZGFzaGJvYXJkL2RldmljZS1pbmZvLWRhc2hib2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9DLE9BQU8sRUFBZSxPQUFPLEVBQVUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsSUFBSSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWxELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7Ozs7Ozs7QUFNM0UsTUFBTSxPQUFPLDRCQUE0QjtJQThRdkMsWUFDVSxNQUFzQixFQUN0QixhQUE0QixFQUM1QixnQkFBa0MsRUFDbEMsZ0JBQWtDO1FBSGxDLFdBQU0sR0FBTixNQUFNLENBQWdCO1FBQ3RCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMscUJBQWdC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RUFBRSxDQUFDLENBQUM7UUFDdkYsTUFBTSxvQkFBb0IsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUNoQyxxQkFBcUIsQ0FBQyxJQUFJLENBQ3hCLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEtBQUssUUFBUSxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUMzRSxDQUFDO1FBQ0osTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxDQUFDO1FBQzFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxDQUFDO0lBQ2hELENBQUM7OEdBeFZVLDRCQUE0QjtrR0FBNUIsNEJBQTRCLDZIQVE1Qix5QkFBeUIsZ0RDdkJ0Qyw2V0FjQTs7MkZEQ2EsNEJBQTRCO2tCQUp4QyxTQUFTOytCQUNFLHFDQUFxQzs2S0FZL0MsZ0JBQWdCO3NCQURmLFNBQVM7dUJBQUMseUJBQXlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEludmVudG9yeVNlcnZpY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBDb250ZXh0RGF0YSwgZ2V0dGV4dCwgV2lkZ2V0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBmcm9tLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgbWVyZ2VNYXAsIHRhcCwgdG9BcnJheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFdpZGdldFNlcnZpY2UgfSBmcm9tICcuLi93aWRnZXQuc2VydmljZSc7XG5pbXBvcnQgeyBDYW5EZWFjdGl2YXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29udGV4dC1kYXNoYm9hcmQubW9kZWwnO1xuaW1wb3J0IHsgQ29udGV4dERhc2hib2FyZENvbXBvbmVudCB9IGZyb20gJy4uL2NvbnRleHQtZGFzaGJvYXJkLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1kZXZpY2UtaW5mby1kYXNoYm9hcmQtZGFzaGJvYXJkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RldmljZS1pbmZvLWRhc2hib2FyZC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgRGV2aWNlSW5mb0Rhc2hib2FyZENvbXBvbmVudCBpbXBsZW1lbnRzIENhbkRlYWN0aXZhdGVDb21wb25lbnQge1xuICBpc0xvYWRpbmcgPSB0cnVlO1xuICB0aXRsZTogc3RyaW5nO1xuICBkYXNoYm9hcmROYW1lID0gJyc7XG4gIHdpZGdldHNMaXN0OiBXaWRnZXRbXTtcbiAgY3VycmVudENvbnRleHQ6IENvbnRleHREYXRhO1xuICBjb250ZXh0U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHdpZGdldHNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgQFZpZXdDaGlsZChDb250ZXh0RGFzaGJvYXJkQ29tcG9uZW50LCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgY29udGV4dERhc2hib2FyZDogQ29udGV4dERhc2hib2FyZENvbXBvbmVudDtcblxuICBERVZJQ0VfSU5GT19XSURHRVRTID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdkZXZpY2VTdGF0dXNXaWRnZXQnLFxuICAgICAgdGl0bGU6IGdldHRleHQoJ0RldmljZSBzdGF0dXMnKSxcbiAgICAgIF94OiAwLFxuICAgICAgX3k6IDAsXG4gICAgICBfaGVpZ2h0OiA1LFxuICAgICAgX3dpZHRoOiA4XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnRGF0YSBwb2ludHMgZ3JhcGgnLFxuICAgICAgdGl0bGU6IGdldHRleHQoJ0RldmljZSBhbmQgY29tbXVuaWNhdGlvbicpLFxuICAgICAgX3g6IDgsXG4gICAgICBfeTogMCxcbiAgICAgIF9oZWlnaHQ6IDUsXG4gICAgICBfd2lkdGg6IDE2LFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIGludGVydmFsOiAnaG91cnMnLFxuICAgICAgICBhZ2dyZWdhdGlvbjogJ05PTkUnLFxuICAgICAgICByZWFsdGltZTogdHJ1ZSxcbiAgICAgICAgZGF0YXBvaW50c0luaXRpYWxEaXNwbGF5TGltaXQ6IDMsXG4gICAgICAgIGRhdGFwb2ludHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmcmFnbWVudDogJ2M4eV9CYXR0ZXJ5JyxcbiAgICAgICAgICAgIHNlcmllczogJ2xldmVsJyxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQmF0dGVyeTogbGV2ZWwnKSxcbiAgICAgICAgICAgIHVuaXQ6ICclJyxcbiAgICAgICAgICAgIHJlbmRlclR5cGU6ICdtaW4nLFxuICAgICAgICAgICAgbGluZVR5cGU6ICdsaW5lJyxcbiAgICAgICAgICAgIGNvbG9yOiAnIzVlMDdiMycsXG4gICAgICAgICAgICBfX2FjdGl2ZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnJhZ21lbnQ6ICdjOHlfU2lnbmFsU3RyZW5ndGgnLFxuICAgICAgICAgICAgc2VyaWVzOiAncnNzaScsXG4gICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1NpZ25hbDogUlNTSScpLFxuICAgICAgICAgICAgdW5pdDogJ2RCbScsXG4gICAgICAgICAgICByZW5kZXJUeXBlOiAnbWluJyxcbiAgICAgICAgICAgIGxpbmVUeXBlOiAnbGluZScsXG4gICAgICAgICAgICBjb2xvcjogJyNhN2QwZjEnLFxuICAgICAgICAgICAgX19hY3RpdmU6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZyYWdtZW50OiAnYzh5X01lbW9yeU1lYXN1cmVtZW50JyxcbiAgICAgICAgICAgIHNlcmllczogJ1VzZWQnLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdNZW1vcnk6IHVzZWQnKSxcbiAgICAgICAgICAgIHVuaXQ6ICdNQicsXG4gICAgICAgICAgICByZW5kZXJUeXBlOiAnbWluJyxcbiAgICAgICAgICAgIGxpbmVUeXBlOiAnbGluZScsXG4gICAgICAgICAgICBjb2xvcjogJyNmNzUyMjknLFxuICAgICAgICAgICAgX19hY3RpdmU6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZyYWdtZW50OiAnYzh5X0NQVU1lYXN1cmVtZW50JyxcbiAgICAgICAgICAgIHNlcmllczogJ1dvcmtsb2FkJyxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQ1BVOiB3b3JrbG9hZCcpLFxuICAgICAgICAgICAgdW5pdDogJyUnLFxuICAgICAgICAgICAgcmVuZGVyVHlwZTogJ21pbicsXG4gICAgICAgICAgICBsaW5lVHlwZTogJ2xpbmUnLFxuICAgICAgICAgICAgY29sb3I6ICcjYjI0ZjNlJyxcbiAgICAgICAgICAgIF9fYWN0aXZlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmcmFnbWVudDogJ2M4eV9OZXR3b3JrU3RhdGlzdGljcycsXG4gICAgICAgICAgICBzZXJpZXM6ICdVcGxvYWQnLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdOZXR3b3JrOiB1cGxvYWQnKSxcbiAgICAgICAgICAgIHVuaXQ6ICdLQi9zJyxcbiAgICAgICAgICAgIHJlbmRlclR5cGU6ICdtaW4nLFxuICAgICAgICAgICAgbGluZVR5cGU6ICdsaW5lJyxcbiAgICAgICAgICAgIGNvbG9yOiAnIzg4YzAzOScsXG4gICAgICAgICAgICBfX2FjdGl2ZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnJhZ21lbnQ6ICdjOHlfU2lnbmFsU3RyZW5ndGgnLFxuICAgICAgICAgICAgc2VyaWVzOiAnUkNTUCcsXG4gICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1NpZ25hbDogUkNTUCcpLFxuICAgICAgICAgICAgcmVuZGVyVHlwZTogJ21pbicsXG4gICAgICAgICAgICBsaW5lVHlwZTogJ2xpbmUnLFxuICAgICAgICAgICAgY29sb3I6ICcjNWUyZjE5JyxcbiAgICAgICAgICAgIF9fYWN0aXZlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmcmFnbWVudDogJ2M4eV9TaWduYWxTdHJlbmd0aCcsXG4gICAgICAgICAgICBzZXJpZXM6ICdSU0NQJyxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnU2lnbmFsOiBSU0NQJyksXG4gICAgICAgICAgICByZW5kZXJUeXBlOiAnbWluJyxcbiAgICAgICAgICAgIGxpbmVUeXBlOiAnbGluZScsXG4gICAgICAgICAgICBjb2xvcjogJyM1ZTJmMTknLFxuICAgICAgICAgICAgX19hY3RpdmU6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZyYWdtZW50OiAnYzh5X1NpZ25hbFN0cmVuZ3RoJyxcbiAgICAgICAgICAgIHNlcmllczogJ1JTUlAnLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdTaWduYWw6IFJTUlAnKSxcbiAgICAgICAgICAgIHJlbmRlclR5cGU6ICdtaW4nLFxuICAgICAgICAgICAgbGluZVR5cGU6ICdsaW5lJyxcbiAgICAgICAgICAgIGNvbG9yOiAnIzQzYmEzYicsXG4gICAgICAgICAgICBfX2FjdGl2ZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnJhZ21lbnQ6ICdjOHlfU2lnbmFsU3RyZW5ndGgnLFxuICAgICAgICAgICAgc2VyaWVzOiAnUlNSUScsXG4gICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1NpZ25hbDogUlNSUScpLFxuICAgICAgICAgICAgcmVuZGVyVHlwZTogJ21pbicsXG4gICAgICAgICAgICBsaW5lVHlwZTogJ2xpbmUnLFxuICAgICAgICAgICAgY29sb3I6ICcjMTRiMGIzJyxcbiAgICAgICAgICAgIF9fYWN0aXZlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmcmFnbWVudDogJ2M4eV9TaWduYWxTdHJlbmd0aCcsXG4gICAgICAgICAgICBzZXJpZXM6ICdiZXInLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdTaWduYWw6IEJFUicpLFxuICAgICAgICAgICAgdW5pdDogJyUnLFxuICAgICAgICAgICAgcmVuZGVyVHlwZTogJ21pbicsXG4gICAgICAgICAgICBsaW5lVHlwZTogJ2xpbmUnLFxuICAgICAgICAgICAgY29sb3I6ICcjNDRmZjMzJyxcbiAgICAgICAgICAgIF9fYWN0aXZlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmcmFnbWVudDogJ2M4eV9TaWduYWxTdHJlbmd0aCcsXG4gICAgICAgICAgICBzZXJpZXM6ICdFQ04wJyxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnU2lnbmFsOiBFQ04wJyksXG4gICAgICAgICAgICByZW5kZXJUeXBlOiAnbWluJyxcbiAgICAgICAgICAgIGxpbmVUeXBlOiAnbGluZScsXG4gICAgICAgICAgICBjb2xvcjogJyM4NzNlZmEnLFxuICAgICAgICAgICAgX19hY3RpdmU6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZyYWdtZW50OiAnYzh5X05ldHdvcmtTdGF0aXN0aWNzJyxcbiAgICAgICAgICAgIHNlcmllczogJ0Rvd25sb2FkJyxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnTmV0d29yazogZG93bmxvYWQnKSxcbiAgICAgICAgICAgIHVuaXQ6ICdLQi9zJyxcbiAgICAgICAgICAgIHJlbmRlclR5cGU6ICdtaW4nLFxuICAgICAgICAgICAgbGluZVR5cGU6ICdsaW5lJyxcbiAgICAgICAgICAgIGNvbG9yOiAnI2YyN2E0NScsXG4gICAgICAgICAgICBfX2FjdGl2ZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnJhZ21lbnQ6ICdjOHlfTWVtb3J5TWVhc3VyZW1lbnQnLFxuICAgICAgICAgICAgc2VyaWVzOiAnVG90YWwnLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdNZW1vcnk6IHRvdGFsJyksXG4gICAgICAgICAgICB1bml0OiAnTUInLFxuICAgICAgICAgICAgcmVuZGVyVHlwZTogJ21pbicsXG4gICAgICAgICAgICBsaW5lVHlwZTogJ2xpbmUnLFxuICAgICAgICAgICAgY29sb3I6ICcjZGFkZDhjJyxcbiAgICAgICAgICAgIF9fYWN0aXZlOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBhbGFybXNFdmVudHNDb25maWdzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbGFiZWw6ICdjOHlfTG9jYXRpb25VcGRhdGUnLFxuICAgICAgICAgICAgdGltZWxpbmVUeXBlOiAnRVZFTlQnLFxuICAgICAgICAgICAgY29sb3I6ICcjNmY2Y2QwJyxcbiAgICAgICAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ2M4eV9Mb2NhdGlvblVwZGF0ZSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfX2FjdGl2ZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbGFiZWw6ICdjOHlfVW5hdmFpbGFiaWxpdHlBbGFybScsXG4gICAgICAgICAgICB0aW1lbGluZVR5cGU6ICdBTEFSTScsXG4gICAgICAgICAgICBjb2xvcjogJyMzNzViZjInLFxuICAgICAgICAgICAgZmlsdGVyczoge1xuICAgICAgICAgICAgICB0eXBlOiAnYzh5X1VuYXZhaWxhYmlsaXR5QWxhcm0nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX19hY3RpdmU6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdBc3NldCBQcm9wZXJ0aWVzJyxcbiAgICAgIHRpdGxlOiBnZXR0ZXh0KCdEZXZpY2UgZGF0YScpLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlkOiAnYzh5U2NoZW1hISFpZCcsXG4gICAgICAgICAgICAgIF9fYWN0aXZlOiB0cnVlLFxuICAgICAgICAgICAgICBrZXlQYXRoOiBbJ2lkJ10sXG4gICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICBsYWJlbDogJ0lEJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWQ6ICdjOHlTY2hlbWEhIW5hbWUnLFxuICAgICAgICAgICAgICBfX2FjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAga2V5UGF0aDogWyduYW1lJ10sXG4gICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICBsYWJlbDogJ05hbWUnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZDogJ2M4eVNjaGVtYSEhdHlwZScsXG4gICAgICAgICAgICAgIF9fYWN0aXZlOiB0cnVlLFxuICAgICAgICAgICAgICBrZXlQYXRoOiBbJ3R5cGUnXSxcbiAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgIGxhYmVsOiAnVHlwZSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlkOiAnYzh5U2NoZW1hISFsYXN0VXBkYXRlZCcsXG4gICAgICAgICAgICAgIF9fYWN0aXZlOiB0cnVlLFxuICAgICAgICAgICAgICBrZXlQYXRoOiBbJ2xhc3RVcGRhdGVkJ10sXG4gICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICBsYWJlbDogJ0xhc3QgVXBkYXRlZCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlkOiAnYzh5U2NoZW1hISFjcmVhdGlvblRpbWUnLFxuICAgICAgICAgICAgICBfX2FjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAga2V5UGF0aDogWydjcmVhdGlvblRpbWUnXSxcbiAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgIGxhYmVsOiAnQ3JlYXRpb24gVGltZSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdLFxuICAgICAgICAgIGFsbG93RGlzcGxheUFuZEVkaXRLbm93blByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgIGhpZGRlblByb3BlcnRpZXNLZXlQYXRoczogWydvd25lciddXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBfeDogMCxcbiAgICAgIF95OiA1LFxuICAgICAgX2hlaWdodDogOCxcbiAgICAgIF93aWR0aDogOFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ0FsYXJtIGxpc3QnLFxuICAgICAgdGl0bGU6IGdldHRleHQoJ0FjdGl2ZSwgY3JpdGljYWwgYWxhcm1zJyksXG4gICAgICBfeDogOCxcbiAgICAgIF95OiA1LFxuICAgICAgX2hlaWdodDogNCxcbiAgICAgIF93aWR0aDogOCxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgb3JkZXJNb2RlOiAnQUNUSVZFX0ZJUlNUJyxcbiAgICAgICAgICBzZXZlcml0eTogeyBDUklUSUNBTDogdHJ1ZSB9LFxuICAgICAgICAgIHN0YXR1czoge1xuICAgICAgICAgICAgQUNUSVZFOiB0cnVlLFxuICAgICAgICAgICAgQUNLTk9XTEVER0VEOiBmYWxzZSxcbiAgICAgICAgICAgIENMRUFSRUQ6IGZhbHNlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0eXBlczogW11cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2RldmljZUdyb3VwQXNzaWdubWVudFdpZGdldCcsXG4gICAgICB0aXRsZTogZ2V0dGV4dCgnR3JvdXAgYXNzaWdubWVudCcpLFxuICAgICAgX3g6IDE2LFxuICAgICAgX3k6IDUsXG4gICAgICBfaGVpZ2h0OiA0LFxuICAgICAgX3dpZHRoOiA4XG4gICAgfSxcbiAgICB7XG4gICAgICBjb21wb25lbnRJZDogJ01hcCcsXG4gICAgICB0aXRsZTogZ2V0dGV4dCgnTG9jYXRpb24nKSxcbiAgICAgIF94OiA4LFxuICAgICAgX3k6IDksXG4gICAgICBfaGVpZ2h0OiA0LFxuICAgICAgX3dpZHRoOiAxNlxuICAgIH1cbiAgXSBhcyBXaWRnZXRbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlcjogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSB3aWRnZXRTZXJ2aWNlOiBXaWRnZXRTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGludmVudG9yeVNlcnZpY2U6IEludmVudG9yeVNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY29udGV4dFN1YnNjcmlwdGlvbiA9IHRoaXMucm91dGVyLnBhcmVudC5kYXRhXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKCh7IGNvbnRleHREYXRhIH0pID0+IHtcbiAgICAgICAgICBjb25zdCBjb250ZXh0TmFtZVZhbGlkID0gY29udGV4dERhdGEubmFtZSAmJiBjb250ZXh0RGF0YS5uYW1lLnRyaW0oKTtcbiAgICAgICAgICB0aGlzLnRpdGxlID0gY29udGV4dE5hbWVWYWxpZCA/IGNvbnRleHREYXRhLm5hbWUgOiBjb250ZXh0RGF0YS5pZDtcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZE5hbWUgPSBgJHtjb250ZXh0RGF0YS5pZH0tZGV2aWNlLWluZm9gO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShhc3luYyBkYXRhID0+IHtcbiAgICAgICAgdGhpcy5jdXJyZW50Q29udGV4dCA9IGRhdGEgYXMgQ29udGV4dERhdGE7XG4gICAgICAgIHRoaXMuYWRkRGV2aWNlVGFyZ2V0Rm9yRFAoZGF0YS5jb250ZXh0RGF0YS5pZCwgZGF0YS5jb250ZXh0RGF0YS5uYW1lKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy53aWRnZXRzU3Vic2NyaXB0aW9uID0gZnJvbSh0aGlzLkRFVklDRV9JTkZPX1dJREdFVFMpXG4gICAgICAucGlwZShcbiAgICAgICAgbWVyZ2VNYXAod2lkZ2V0ID0+IHRoaXMud2lkZ2V0U2VydmljZS5tYXBMZWdhY3kod2lkZ2V0KSksXG4gICAgICAgIG1hcCh3aWRnZXQgPT4ge1xuICAgICAgICAgIGxldCBkZXZpY2UgPSB0aGlzLnJvdXRlci5wYXJlbnQuc25hcHNob3QuZGF0YS5jb250ZXh0RGF0YTtcbiAgICAgICAgICBpZiAoZGV2aWNlKSB7XG4gICAgICAgICAgICBkZXZpY2UgPSB7XG4gICAgICAgICAgICAgIG5hbWU6IGRldmljZS5uYW1lLFxuICAgICAgICAgICAgICBpZDogZGV2aWNlLmlkXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4ud2lkZ2V0LFxuICAgICAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgICAgIC4uLndpZGdldC5jb25maWcsXG4gICAgICAgICAgICAgIGRldmljZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH0pLFxuICAgICAgICB0b0FycmF5KClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoYXN5bmMgZGF0YSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuZmlsdGVyU3VwcG9ydGVkU2VyaWVzRm9yRFAodGhpcy5jdXJyZW50Q29udGV4dC5jb250ZXh0RGF0YS5pZCwgZGF0YSk7XG4gICAgICAgIHRoaXMud2lkZ2V0c0xpc3QgPSBkYXRhO1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgfSk7XG4gIH1cblxuICBhZGREZXZpY2VUYXJnZXRGb3JEUChpZDogc3RyaW5nIHwgbnVtYmVyLCBuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBkcFdpZGdldCA9IHRoaXMuREVWSUNFX0lORk9fV0lER0VUUy5maWx0ZXIoaXRlbSA9PiBpdGVtLm5hbWUgPT0gJ0RhdGEgcG9pbnRzIGdyYXBoJylbMF07XG4gICAgLy8gQWRkIHRhcmdldCB0byBkYXRhUG9pbnQgY29uZmlnXG4gICAgZHBXaWRnZXQuY29uZmlnLmRhdGFwb2ludHMubWFwKGl0ZW0gPT4gKGl0ZW1bJ19fdGFyZ2V0J10gPSB7IGlkLCBuYW1lIH0pKTtcbiAgICAvLyBBZGQgdGFyZ2V0IHRvIGFsYXJtRXZlbnRzIENvbmZpZ1xuICAgIGRwV2lkZ2V0LmNvbmZpZy5hbGFybXNFdmVudHNDb25maWdzLm1hcChpdGVtID0+IChpdGVtWydfX3RhcmdldCddID0geyBpZCwgbmFtZSB9KSk7XG4gIH1cblxuICBhc3luYyBmaWx0ZXJTdXBwb3J0ZWRTZXJpZXNGb3JEUChpZDogc3RyaW5nIHwgbnVtYmVyLCB3aWRnZXRzOiBXaWRnZXRbXSkge1xuICAgIGNvbnN0IHN1cHBvcnRlZE1lYXN1cmVtZW50cyA9IGF3YWl0IHRoaXMuaW52ZW50b3J5U2VydmljZS5nZXRNZWFzdXJlbWVudHNBbmRTZXJpZXMoaWQpO1xuICAgIGNvbnN0IGlzRGF0YVBvaW50U3VwcG9ydGVkID0gZHAgPT5cbiAgICAgIHN1cHBvcnRlZE1lYXN1cmVtZW50cy5zb21lKFxuICAgICAgICAoeyBmcmFnbWVudCwgc2VyaWVzIH0pID0+IGRwLmZyYWdtZW50ID09PSBmcmFnbWVudCAmJiBkcC5zZXJpZXMgPT09IHNlcmllc1xuICAgICAgKTtcbiAgICBjb25zdCBkcFdpZGdldCA9IHdpZGdldHMuZmluZCgoeyBuYW1lIH0pID0+IG5hbWUgPT09ICdEYXRhIHBvaW50cyBncmFwaCcpO1xuICAgIGRwV2lkZ2V0LmNvbmZpZy5kYXRhcG9pbnRzID0gZHBXaWRnZXQuY29uZmlnLmRhdGFwb2ludHMuZmlsdGVyKGlzRGF0YVBvaW50U3VwcG9ydGVkKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMud2lkZ2V0c1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY29udGV4dFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgY2FuRGVhY3RpdmF0ZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0RGFzaGJvYXJkPy5jYW5EZWFjdGl2YXRlKCk7XG4gIH1cbn1cbiIsIjxkaXYgKm5nSWY9XCIhaXNMb2FkaW5nXCI+XG4gIDxjOHktdGl0bGU+XG4gICAge3sgdGl0bGUgfX1cbiAgPC9jOHktdGl0bGU+XG4gIDxjOHktY29udGV4dC1kYXNoYm9hcmRcbiAgICBbdHJhbnNsYXRlV2lkZ2V0VGl0bGVdPVwidHJ1ZVwiXG4gICAgW25hbWVdPVwiZGFzaGJvYXJkTmFtZVwiXG4gICAgW2NvbnRleHRdPVwiY3VycmVudENvbnRleHRcIlxuICAgIFtkZWZhdWx0V2lkZ2V0c109XCJ3aWRnZXRzTGlzdFwiXG4gICAgW2NhbkRlbGV0ZV09XCJmYWxzZVwiXG4gICAgW2hpZGVBdmFpbGFiaWxpdHldPVwidHJ1ZVwiXG4gICAgW2NhbkNvcHldPVwiZmFsc2VcIlxuICA+PC9jOHktY29udGV4dC1kYXNoYm9hcmQ+XG48L2Rpdj5cbiJdfQ==
|