@alfresco/adf-process-services-cloud 6.9.0-8740657097 → 6.9.0-8784492571
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/esm2020/lib/form/components/widgets/attach-file/attach-file-cloud-widget.component.mjs +20 -17
- package/esm2020/lib/form/components/widgets/attach-file/upload-cloud.widget.mjs +11 -9
- package/esm2020/lib/form/components/widgets/data-table/data-table.widget.mjs +6 -7
- package/esm2020/lib/form/components/widgets/display-external-property/display-external-property.widget.mjs +7 -15
- package/esm2020/lib/form/components/widgets/dropdown/dropdown-cloud.widget.mjs +19 -19
- package/esm2020/lib/form/components/widgets/radio-buttons/radio-buttons-cloud.widget.mjs +6 -7
- package/esm2020/lib/form/services/content-cloud-node-selector.service.mjs +7 -12
- package/esm2020/lib/group/components/group-cloud.component.mjs +18 -22
- package/esm2020/lib/people/components/people-cloud.component.mjs +17 -19
- package/esm2020/lib/process/process-list/services/process-list-cloud.service.mjs +4 -3
- package/esm2020/lib/process/process-list/services/process-task-list-cloud.service.mjs +4 -3
- package/esm2020/lib/process/services/process-cloud.service.mjs +3 -11
- package/esm2020/lib/process/start-process/services/start-process-cloud.service.mjs +2 -3
- package/esm2020/lib/services/base-cloud.service.mjs +3 -6
- package/esm2020/lib/services/user-preference-cloud.service.mjs +1 -5
- package/esm2020/lib/task/services/task-cloud.service.mjs +8 -24
- package/esm2020/lib/task/start-task/components/start-task-cloud.component.mjs +8 -15
- package/esm2020/lib/task/task-list/services/service-task-list-cloud.service.mjs +1 -4
- package/esm2020/lib/task/task-list/services/task-list-cloud.service.mjs +1 -2
- package/fesm2015/adf-process-services-cloud.mjs +134 -190
- package/fesm2015/adf-process-services-cloud.mjs.map +1 -1
- package/fesm2020/adf-process-services-cloud.mjs +136 -191
- package/fesm2020/adf-process-services-cloud.mjs.map +1 -1
- package/lib/form/components/widgets/attach-file/attach-file-cloud-widget.component.d.ts +5 -4
- package/lib/form/components/widgets/attach-file/upload-cloud.widget.d.ts +5 -5
- package/lib/form/components/widgets/data-table/data-table.widget.d.ts +2 -3
- package/lib/form/components/widgets/display-external-property/display-external-property.widget.d.ts +2 -3
- package/lib/form/components/widgets/dropdown/dropdown-cloud.widget.d.ts +2 -3
- package/lib/form/components/widgets/radio-buttons/radio-buttons-cloud.widget.d.ts +2 -3
- package/lib/form/services/content-cloud-node-selector.service.d.ts +2 -3
- package/lib/group/components/group-cloud.component.d.ts +1 -3
- package/lib/people/components/people-cloud.component.d.ts +1 -3
- package/lib/process/services/process-cloud.service.d.ts +0 -1
- package/lib/services/base-cloud.service.d.ts +1 -2
- package/lib/task/services/task-cloud.service.d.ts +0 -1
- package/lib/task/start-task/components/start-task-cloud.component.d.ts +2 -3
- package/package.json +4 -4
package/esm2020/lib/form/components/widgets/attach-file/attach-file-cloud-widget.component.mjs
CHANGED
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
17
|
/* eslint-disable @angular-eslint/component-selector */
|
|
18
|
-
import { Component, ViewEncapsulation } from '@angular/core';
|
|
19
|
-
import { FormService,
|
|
18
|
+
import { Component, EventEmitter, Output, ViewEncapsulation } from '@angular/core';
|
|
19
|
+
import { FormService, ThumbnailService, NotificationService, ContentLinkModel, AppConfigService, AlfrescoApiService, UploadWidgetContentLinkModel } from '@alfresco/adf-core';
|
|
20
20
|
import { NodesApi } from '@alfresco/js-api';
|
|
21
21
|
import { ContentCloudNodeSelectorService } from '../../../services/content-cloud-node-selector.service';
|
|
22
22
|
import { ProcessCloudContentService } from '../../../services/process-cloud-content.service';
|
|
@@ -40,8 +40,8 @@ export const ALIAS_USER_FOLDER = '-my-';
|
|
|
40
40
|
export const APP_NAME = '-appname-';
|
|
41
41
|
export const VALID_ALIAS = [ALIAS_ROOT_FOLDER, ALIAS_USER_FOLDER, '-shared-'];
|
|
42
42
|
export class AttachFileCloudWidgetComponent extends UploadCloudWidgetComponent {
|
|
43
|
-
constructor(formService,
|
|
44
|
-
super(formService, thumbnails, processCloudContentService, notificationService
|
|
43
|
+
constructor(formService, thumbnails, processCloudContentService, notificationService, contentNodeSelectorService, appConfigService, apiService, contentNodeSelectorPanelService, newVersionUploaderService) {
|
|
44
|
+
super(formService, thumbnails, processCloudContentService, notificationService);
|
|
45
45
|
this.contentNodeSelectorService = contentNodeSelectorService;
|
|
46
46
|
this.appConfigService = appConfigService;
|
|
47
47
|
this.apiService = apiService;
|
|
@@ -49,6 +49,7 @@ export class AttachFileCloudWidgetComponent extends UploadCloudWidgetComponent {
|
|
|
49
49
|
this.newVersionUploaderService = newVersionUploaderService;
|
|
50
50
|
this.typeId = 'AttachFileCloudWidgetComponent';
|
|
51
51
|
this.rootNodeId = ALIAS_USER_FOLDER;
|
|
52
|
+
this.error = new EventEmitter();
|
|
52
53
|
this.previewState = false;
|
|
53
54
|
this.displayedColumns = ['icon', 'fileName', 'action'];
|
|
54
55
|
}
|
|
@@ -63,7 +64,7 @@ export class AttachFileCloudWidgetComponent extends UploadCloudWidgetComponent {
|
|
|
63
64
|
this.contentModelFormFileHandler(files[0]);
|
|
64
65
|
}
|
|
65
66
|
this.field.params.displayableCMProperties = this.field.params.displayableCMProperties ?? [];
|
|
66
|
-
this.displayedColumns.splice(2, 0, ...(this.field.params.displayableCMProperties?.map(property => property?.name) || []));
|
|
67
|
+
this.displayedColumns.splice(2, 0, ...(this.field.params.displayableCMProperties?.map((property) => property?.name) || []));
|
|
67
68
|
this.setPreviewState();
|
|
68
69
|
}
|
|
69
70
|
isPathStaticType() {
|
|
@@ -101,7 +102,7 @@ export class AttachFileCloudWidgetComponent extends UploadCloudWidgetComponent {
|
|
|
101
102
|
this.contentNodeSelectorService
|
|
102
103
|
.openUploadFileDialog(this.rootNodeId, selectedMode, this.isAlfrescoAndLocal(), true)
|
|
103
104
|
.subscribe((selections) => {
|
|
104
|
-
selections.forEach(node => (node['isExternal'] = true));
|
|
105
|
+
selections.forEach((node) => (node['isExternal'] = true));
|
|
105
106
|
const selectionWithoutDuplication = this.removeExistingSelection(selections);
|
|
106
107
|
const hadFilesAttached = this.field.value?.length > 0;
|
|
107
108
|
this.fixIncompatibilityFromPreviousAndNewForm(selectionWithoutDuplication);
|
|
@@ -137,7 +138,7 @@ export class AttachFileCloudWidgetComponent extends UploadCloudWidgetComponent {
|
|
|
137
138
|
nodeId = await this.contentNodeSelectorService.getNodeIdFromPath(destinationPath);
|
|
138
139
|
}
|
|
139
140
|
catch (error) {
|
|
140
|
-
this.
|
|
141
|
+
this.error.emit(error);
|
|
141
142
|
}
|
|
142
143
|
return nodeId;
|
|
143
144
|
}
|
|
@@ -147,7 +148,7 @@ export class AttachFileCloudWidgetComponent extends UploadCloudWidgetComponent {
|
|
|
147
148
|
nodeId = await this.contentNodeSelectorService.getNodeIdFromFolderVariableValue(destinationFolderPath.value, ALIAS_USER_FOLDER);
|
|
148
149
|
}
|
|
149
150
|
catch (error) {
|
|
150
|
-
this.
|
|
151
|
+
this.error.emit(error);
|
|
151
152
|
}
|
|
152
153
|
return nodeId;
|
|
153
154
|
}
|
|
@@ -167,8 +168,8 @@ export class AttachFileCloudWidgetComponent extends UploadCloudWidgetComponent {
|
|
|
167
168
|
return this.isValidAlias(alias) ? { alias, path } : { alias: ALIAS_USER_FOLDER, path: undefined };
|
|
168
169
|
}
|
|
169
170
|
removeExistingSelection(selections) {
|
|
170
|
-
const existingNode = [...this.field.value || []];
|
|
171
|
-
return selections.filter(opt => !existingNode.some((node) => node.id === opt.id));
|
|
171
|
+
const existingNode = [...(this.field.value || [])];
|
|
172
|
+
return selections.filter((opt) => !existingNode.some((node) => node.id === opt.id));
|
|
172
173
|
}
|
|
173
174
|
downloadContent(file) {
|
|
174
175
|
this.processCloudContentService.downloadFile(file.id);
|
|
@@ -178,7 +179,7 @@ export class AttachFileCloudWidgetComponent extends UploadCloudWidgetComponent {
|
|
|
178
179
|
if (newVersionUploaderData.action === NewVersionUploaderDataAction.upload) {
|
|
179
180
|
this.replaceOldFileVersionWithNew(newVersionUploaderData);
|
|
180
181
|
}
|
|
181
|
-
}, error => this.notificationService.showError(error.value));
|
|
182
|
+
}, (error) => this.notificationService.showError(error.value));
|
|
182
183
|
}
|
|
183
184
|
onAttachFileClicked(nodeSelector) {
|
|
184
185
|
nodeSelector.nodeId = nodeSelector.id;
|
|
@@ -199,11 +200,11 @@ export class AttachFileCloudWidgetComponent extends UploadCloudWidgetComponent {
|
|
|
199
200
|
contentModelFormFileHandler(file) {
|
|
200
201
|
if (file?.id && this.isRetrieveMetadataOptionEnabled()) {
|
|
201
202
|
const values = {};
|
|
202
|
-
this.nodesApi.getNode(file.id).then(acsNode => {
|
|
203
|
+
this.nodesApi.getNode(file.id).then((acsNode) => {
|
|
203
204
|
const metadata = acsNode?.entry?.properties;
|
|
204
205
|
if (metadata) {
|
|
205
206
|
const keys = Object.keys(metadata);
|
|
206
|
-
keys.forEach(key => {
|
|
207
|
+
keys.forEach((key) => {
|
|
207
208
|
const sanitizedKey = key.replace(':', '_');
|
|
208
209
|
values[sanitizedKey] = metadata[key];
|
|
209
210
|
});
|
|
@@ -229,8 +230,8 @@ export class AttachFileCloudWidgetComponent extends UploadCloudWidgetComponent {
|
|
|
229
230
|
this.previewState = this.formService.getPreviewState();
|
|
230
231
|
}
|
|
231
232
|
}
|
|
232
|
-
AttachFileCloudWidgetComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: AttachFileCloudWidgetComponent, deps: [{ token: i1.FormService }, { token: i1.
|
|
233
|
-
AttachFileCloudWidgetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: AttachFileCloudWidgetComponent, selector: "adf-cloud-attach-file-cloud-widget", host: { listeners: { "click": "event($event)", "blur": "event($event)", "change": "event($event)", "focus": "event($event)", "focusin": "event($event)", "focusout": "event($event)", "input": "event($event)", "invalid": "event($event)", "select": "event($event)" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"adf-attach-file-widget-container\">\n <div class=\"adf-attach-widget {{field.className}}\"\n [class.adf-readonly]=\"field.readOnly\">\n <label class=\"adf-label\" [attr.for]=\"field.id\">{{field.name}}\n <span class=\"adf-asterisk\" *ngIf=\"isRequired()\">*</span>\n </label>\n <div class=\"adf-attach-widget-container\" (focusout)=\"markAsTouched()\">\n <div class=\"adf-attach-widget__menu-upload\" *ngIf=\"isUploadButtonVisible()\">\n <button\n (click)=\"openSelectDialog()\"\n mat-raised-button\n class=\"adf-attach-widget__menu-upload__button\"\n color=\"primary\"\n [id]=\"field.id\"\n [matTooltip]=\"field.tooltip\"\n matTooltipPosition=\"above\"\n matTooltipShowDelay=\"1000\">\n {{ 'FORM.FIELD.ATTACH' | translate }}\n <mat-icon class=\"adf-attach-widget__menu-upload__button__icon\">{{getWidgetIcon()}}</mat-icon>\n </button>\n </div>\n </div>\n </div>\n\n <div data-automation-id=\"adf-attach-widget-readonly-list\" class=\"adf-attach-widget-readonly-table\">\n <adf-cloud-file-properties-table\n [uploadedFiles]=\"uploadedFiles\"\n [hasFile]=\"hasFile\"\n [selectedNode]=\"selectedNode\"\n [field]=\"field\"\n [displayedColumns]=\"displayedColumns\"\n [mimeTypeIcon]=\"mimeTypeIcon\"\n (rowClick)=\"onRowClicked($event)\"\n (attachFileClick)=\"onAttachFileClicked($event)\"\n (downloadFile)=\"downloadContent($event)\"\n (uploadNewFileVersion)=\"onUploadNewFileVersion($event)\"\n (contentModelFileHandler)=\"contentModelFormFileHandler($event)\"\n (removeAttachFile)=\"onRemoveAttachFile($event)\"\n ></adf-cloud-file-properties-table>\n <div *ngIf=\"!hasFile && field.readOnly\" id=\"{{'adf-attach-empty-list-'+field.id}}\">\n {{ 'FORM.FIELD.NO_FILE_ATTACHED' | translate }}\n </div>\n\n </div>\n\n <error-widget [error]=\"field.validationSummary\"></error-widget>\n <error-widget *ngIf=\"!field.isValid && isTouched() && !isSelected()\" required=\"{{ 'FORM.FIELD.REQUIRED' | translate }}\"></error-widget>\n</div>\n", styles: [".adf-attach-widget-container{display:flex;align-items:center}.adf-attach-widget-container input{cursor:pointer;height:100%;right:0;opacity:0;position:absolute;top:0;width:300px;z-index:4}.adf-attach-widget__menu-upload{display:flex;align-items:center;margin-right:8px}.adf-attach-widget__menu-upload .adf-attach-widget__menu-upload__button{line-height:28px;font-size:var(--theme-caption-font-size)}.adf-attach-widget__menu-upload button span{font-size:var(--theme-caption-font-size)}.adf-attach-widget__input-type{width:.1px;height:.1px;opacity:0;overflow:hidden;position:absolute;z-index:-1}.adf-attach-widget__image-logo{padding-left:5px}.adf-attach-widget{display:flex;justify-content:space-between;word-break:break-all;padding:.4375em;border-bottom:none;background:var(--adf-theme-mat-grey-color-a200);min-height:27px;margin-bottom:12px}.adf-attach-widget .adf-label{width:32px;font-size:var(--theme-caption-font-size);line-height:var(--theme-headline-line-height);text-align:left;white-space:nowrap;margin-left:8px}.adf-attach-widget__icon{font-size:var(--theme-adf-picture-1-font-size);height:var(--theme-adf-picture-1-font-size);width:var(--theme-adf-picture-1-font-size);line-height:calc(var(--theme-adf-picture-1-font-size) - 2px)}.adf-attach-widget__reset{margin-top:-2px}.adf-attach-files-row>div:first-child{cursor:pointer}.adf-attach-files-row .adf-file{margin-bottom:0}.adf-attach-selected-file-row>div:first-child .adf-datatable-selected{color:var(--theme-primary-color);padding-right:6px}.adf-attach-file-widget-container{margin:15px}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i1.ErrorWidgetComponent, selector: "error-widget", inputs: ["error", "required"] }, { kind: "component", type: i9.FilePropertiesTableCloudComponent, selector: "adf-cloud-file-properties-table", inputs: ["uploadedFiles", "hasFile", "selectedNode", "field", "displayedColumns", "mimeTypeIcon"], outputs: ["rowClick", "attachFileClick", "downloadFile", "uploadNewFileVersion", "contentModelFileHandler", "removeAttachFile"] }, { kind: "pipe", type: i10.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
|
|
233
|
+
AttachFileCloudWidgetComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: AttachFileCloudWidgetComponent, deps: [{ token: i1.FormService }, { token: i1.ThumbnailService }, { token: i2.ProcessCloudContentService }, { token: i1.NotificationService }, { token: i3.ContentCloudNodeSelectorService }, { token: i1.AppConfigService }, { token: i1.AlfrescoApiService }, { token: i4.ContentNodeSelectorPanelService }, { token: i4.NewVersionUploaderService }], target: i0.ɵɵFactoryTarget.Component });
|
|
234
|
+
AttachFileCloudWidgetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: AttachFileCloudWidgetComponent, selector: "adf-cloud-attach-file-cloud-widget", outputs: { error: "error" }, host: { listeners: { "click": "event($event)", "blur": "event($event)", "change": "event($event)", "focus": "event($event)", "focusin": "event($event)", "focusout": "event($event)", "input": "event($event)", "invalid": "event($event)", "select": "event($event)" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"adf-attach-file-widget-container\">\n <div class=\"adf-attach-widget {{field.className}}\"\n [class.adf-readonly]=\"field.readOnly\">\n <label class=\"adf-label\" [attr.for]=\"field.id\">{{field.name}}\n <span class=\"adf-asterisk\" *ngIf=\"isRequired()\">*</span>\n </label>\n <div class=\"adf-attach-widget-container\" (focusout)=\"markAsTouched()\">\n <div class=\"adf-attach-widget__menu-upload\" *ngIf=\"isUploadButtonVisible()\">\n <button\n (click)=\"openSelectDialog()\"\n mat-raised-button\n class=\"adf-attach-widget__menu-upload__button\"\n color=\"primary\"\n [id]=\"field.id\"\n [matTooltip]=\"field.tooltip\"\n matTooltipPosition=\"above\"\n matTooltipShowDelay=\"1000\">\n {{ 'FORM.FIELD.ATTACH' | translate }}\n <mat-icon class=\"adf-attach-widget__menu-upload__button__icon\">{{getWidgetIcon()}}</mat-icon>\n </button>\n </div>\n </div>\n </div>\n\n <div data-automation-id=\"adf-attach-widget-readonly-list\" class=\"adf-attach-widget-readonly-table\">\n <adf-cloud-file-properties-table\n [uploadedFiles]=\"uploadedFiles\"\n [hasFile]=\"hasFile\"\n [selectedNode]=\"selectedNode\"\n [field]=\"field\"\n [displayedColumns]=\"displayedColumns\"\n [mimeTypeIcon]=\"mimeTypeIcon\"\n (rowClick)=\"onRowClicked($event)\"\n (attachFileClick)=\"onAttachFileClicked($event)\"\n (downloadFile)=\"downloadContent($event)\"\n (uploadNewFileVersion)=\"onUploadNewFileVersion($event)\"\n (contentModelFileHandler)=\"contentModelFormFileHandler($event)\"\n (removeAttachFile)=\"onRemoveAttachFile($event)\"\n ></adf-cloud-file-properties-table>\n <div *ngIf=\"!hasFile && field.readOnly\" id=\"{{'adf-attach-empty-list-'+field.id}}\">\n {{ 'FORM.FIELD.NO_FILE_ATTACHED' | translate }}\n </div>\n\n </div>\n\n <error-widget [error]=\"field.validationSummary\"></error-widget>\n <error-widget *ngIf=\"!field.isValid && isTouched() && !isSelected()\" required=\"{{ 'FORM.FIELD.REQUIRED' | translate }}\"></error-widget>\n</div>\n", styles: [".adf-attach-widget-container{display:flex;align-items:center}.adf-attach-widget-container input{cursor:pointer;height:100%;right:0;opacity:0;position:absolute;top:0;width:300px;z-index:4}.adf-attach-widget__menu-upload{display:flex;align-items:center;margin-right:8px}.adf-attach-widget__menu-upload .adf-attach-widget__menu-upload__button{line-height:28px;font-size:var(--theme-caption-font-size)}.adf-attach-widget__menu-upload button span{font-size:var(--theme-caption-font-size)}.adf-attach-widget__input-type{width:.1px;height:.1px;opacity:0;overflow:hidden;position:absolute;z-index:-1}.adf-attach-widget__image-logo{padding-left:5px}.adf-attach-widget{display:flex;justify-content:space-between;word-break:break-all;padding:.4375em;border-bottom:none;background:var(--adf-theme-mat-grey-color-a200);min-height:27px;margin-bottom:12px}.adf-attach-widget .adf-label{width:32px;font-size:var(--theme-caption-font-size);line-height:var(--theme-headline-line-height);text-align:left;white-space:nowrap;margin-left:8px}.adf-attach-widget__icon{font-size:var(--theme-adf-picture-1-font-size);height:var(--theme-adf-picture-1-font-size);width:var(--theme-adf-picture-1-font-size);line-height:calc(var(--theme-adf-picture-1-font-size) - 2px)}.adf-attach-widget__reset{margin-top:-2px}.adf-attach-files-row>div:first-child{cursor:pointer}.adf-attach-files-row .adf-file{margin-bottom:0}.adf-attach-selected-file-row>div:first-child .adf-datatable-selected{color:var(--theme-primary-color);padding-right:6px}.adf-attach-file-widget-container{margin:15px}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i1.ErrorWidgetComponent, selector: "error-widget", inputs: ["error", "required"] }, { kind: "component", type: i9.FilePropertiesTableCloudComponent, selector: "adf-cloud-file-properties-table", inputs: ["uploadedFiles", "hasFile", "selectedNode", "field", "displayedColumns", "mimeTypeIcon"], outputs: ["rowClick", "attachFileClick", "downloadFile", "uploadNewFileVersion", "contentModelFileHandler", "removeAttachFile"] }, { kind: "pipe", type: i10.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
|
|
234
235
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: AttachFileCloudWidgetComponent, decorators: [{
|
|
235
236
|
type: Component,
|
|
236
237
|
args: [{ selector: 'adf-cloud-attach-file-cloud-widget', host: {
|
|
@@ -244,5 +245,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
|
|
|
244
245
|
'(invalid)': 'event($event)',
|
|
245
246
|
'(select)': 'event($event)'
|
|
246
247
|
}, encapsulation: ViewEncapsulation.None, template: "<div class=\"adf-attach-file-widget-container\">\n <div class=\"adf-attach-widget {{field.className}}\"\n [class.adf-readonly]=\"field.readOnly\">\n <label class=\"adf-label\" [attr.for]=\"field.id\">{{field.name}}\n <span class=\"adf-asterisk\" *ngIf=\"isRequired()\">*</span>\n </label>\n <div class=\"adf-attach-widget-container\" (focusout)=\"markAsTouched()\">\n <div class=\"adf-attach-widget__menu-upload\" *ngIf=\"isUploadButtonVisible()\">\n <button\n (click)=\"openSelectDialog()\"\n mat-raised-button\n class=\"adf-attach-widget__menu-upload__button\"\n color=\"primary\"\n [id]=\"field.id\"\n [matTooltip]=\"field.tooltip\"\n matTooltipPosition=\"above\"\n matTooltipShowDelay=\"1000\">\n {{ 'FORM.FIELD.ATTACH' | translate }}\n <mat-icon class=\"adf-attach-widget__menu-upload__button__icon\">{{getWidgetIcon()}}</mat-icon>\n </button>\n </div>\n </div>\n </div>\n\n <div data-automation-id=\"adf-attach-widget-readonly-list\" class=\"adf-attach-widget-readonly-table\">\n <adf-cloud-file-properties-table\n [uploadedFiles]=\"uploadedFiles\"\n [hasFile]=\"hasFile\"\n [selectedNode]=\"selectedNode\"\n [field]=\"field\"\n [displayedColumns]=\"displayedColumns\"\n [mimeTypeIcon]=\"mimeTypeIcon\"\n (rowClick)=\"onRowClicked($event)\"\n (attachFileClick)=\"onAttachFileClicked($event)\"\n (downloadFile)=\"downloadContent($event)\"\n (uploadNewFileVersion)=\"onUploadNewFileVersion($event)\"\n (contentModelFileHandler)=\"contentModelFormFileHandler($event)\"\n (removeAttachFile)=\"onRemoveAttachFile($event)\"\n ></adf-cloud-file-properties-table>\n <div *ngIf=\"!hasFile && field.readOnly\" id=\"{{'adf-attach-empty-list-'+field.id}}\">\n {{ 'FORM.FIELD.NO_FILE_ATTACHED' | translate }}\n </div>\n\n </div>\n\n <error-widget [error]=\"field.validationSummary\"></error-widget>\n <error-widget *ngIf=\"!field.isValid && isTouched() && !isSelected()\" required=\"{{ 'FORM.FIELD.REQUIRED' | translate }}\"></error-widget>\n</div>\n", styles: [".adf-attach-widget-container{display:flex;align-items:center}.adf-attach-widget-container input{cursor:pointer;height:100%;right:0;opacity:0;position:absolute;top:0;width:300px;z-index:4}.adf-attach-widget__menu-upload{display:flex;align-items:center;margin-right:8px}.adf-attach-widget__menu-upload .adf-attach-widget__menu-upload__button{line-height:28px;font-size:var(--theme-caption-font-size)}.adf-attach-widget__menu-upload button span{font-size:var(--theme-caption-font-size)}.adf-attach-widget__input-type{width:.1px;height:.1px;opacity:0;overflow:hidden;position:absolute;z-index:-1}.adf-attach-widget__image-logo{padding-left:5px}.adf-attach-widget{display:flex;justify-content:space-between;word-break:break-all;padding:.4375em;border-bottom:none;background:var(--adf-theme-mat-grey-color-a200);min-height:27px;margin-bottom:12px}.adf-attach-widget .adf-label{width:32px;font-size:var(--theme-caption-font-size);line-height:var(--theme-headline-line-height);text-align:left;white-space:nowrap;margin-left:8px}.adf-attach-widget__icon{font-size:var(--theme-adf-picture-1-font-size);height:var(--theme-adf-picture-1-font-size);width:var(--theme-adf-picture-1-font-size);line-height:calc(var(--theme-adf-picture-1-font-size) - 2px)}.adf-attach-widget__reset{margin-top:-2px}.adf-attach-files-row>div:first-child{cursor:pointer}.adf-attach-files-row .adf-file{margin-bottom:0}.adf-attach-selected-file-row>div:first-child .adf-datatable-selected{color:var(--theme-primary-color);padding-right:6px}.adf-attach-file-widget-container{margin:15px}\n"] }]
|
|
247
|
-
}], ctorParameters: function () { return [{ type: i1.FormService }, { type: i1.
|
|
248
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNoLWZpbGUtY2xvdWQtd2lkZ2V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvZm9ybS9jb21wb25lbnRzL3dpZGdldHMvYXR0YWNoLWZpbGUvYXR0YWNoLWZpbGUtY2xvdWQtd2lkZ2V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvZm9ybS9jb21wb25lbnRzL3dpZGdldHMvYXR0YWNoLWZpbGUvYXR0YWNoLWZpbGUtY2xvdWQtd2lkZ2V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILHVEQUF1RDtBQUV2RCxPQUFPLEVBQUUsU0FBUyxFQUFxQixpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRixPQUFPLEVBQ0gsV0FBVyxFQUNYLFVBQVUsRUFDVixnQkFBZ0IsRUFDaEIsbUJBQW1CLEVBRW5CLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLDRCQUE0QixFQUUvQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBUSxRQUFRLEVBQWdDLE1BQU0sa0JBQWtCLENBQUM7QUFDaEYsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDeEcsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDN0YsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkUsT0FBTyxFQUE4Qix5QkFBeUIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ3hILE9BQU8sRUFBRSwrQkFBK0IsRUFBRSw0QkFBNEIsRUFBZ0MseUJBQXlCLEVBQTRCLE1BQU0sZ0NBQWdD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LyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyMyBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yICovXG5cbmltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIEZvcm1TZXJ2aWNlLFxuICAgIExvZ1NlcnZpY2UsXG4gICAgVGh1bWJuYWlsU2VydmljZSxcbiAgICBOb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgIEZvcm1WYWx1ZXMsXG4gICAgQ29udGVudExpbmtNb2RlbCxcbiAgICBBcHBDb25maWdTZXJ2aWNlLFxuICAgIEFsZnJlc2NvQXBpU2VydmljZSxcbiAgICBVcGxvYWRXaWRnZXRDb250ZW50TGlua01vZGVsLFxuICAgIERlc3RpbmF0aW9uRm9sZGVyUGF0aFxufSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUnO1xuaW1wb3J0IHsgTm9kZSwgTm9kZXNBcGksIFJlbGF0ZWRDb250ZW50UmVwcmVzZW50YXRpb24gfSBmcm9tICdAYWxmcmVzY28vanMtYXBpJztcbmltcG9ydCB7IENvbnRlbnRDbG91ZE5vZGVTZWxlY3RvclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jb250ZW50LWNsb3VkLW5vZGUtc2VsZWN0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBQcm9jZXNzQ2xvdWRDb250ZW50U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3Byb2Nlc3MtY2xvdWQtY29udGVudC5zZXJ2aWNlJztcbmltcG9ydCB7IFVwbG9hZENsb3VkV2lkZ2V0Q29tcG9uZW50IH0gZnJvbSAnLi91cGxvYWQtY2xvdWQud2lkZ2V0JztcbmltcG9ydCB7IERlc3RpbmF0aW9uRm9sZGVyUGF0aE1vZGVsLCBEZXN0aW5hdGlvbkZvbGRlclBhdGhUeXBlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2Zvcm0tY2xvdWQtcmVwcmVzZW50YXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgQ29udGVudE5vZGVTZWxlY3RvclBhbmVsU2VydmljZSwgTmV3VmVyc2lvblVwbG9hZGVyRGF0YUFjdGlvbiwgTmV3VmVyc2lvblVwbG9hZGVyRGlhbG9nRGF0YSwgTmV3VmVyc2lvblVwbG9hZGVyU2VydmljZSwgVmVyc2lvbk1hbmFnZXJVcGxvYWREYXRhIH0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb250ZW50LXNlcnZpY2VzJztcblxuZXhwb3J0IGNvbnN0IFJFVFJJRVZFX01FVEFEQVRBX09QVElPTiA9ICdyZXRyaWV2ZU1ldGFkYXRhJztcbmV4cG9ydCBjb25zdCBBTElBU19ST09UX0ZPTERFUiA9ICctcm9vdC0nO1xuZXhwb3J0IGNvbnN0IEFMSUFTX1VTRVJfRk9MREVSID0gJy1teS0nO1xuZXhwb3J0IGNvbnN0IEFQUF9OQU1FID0gJy1hcHBuYW1lLSc7XG5leHBvcnQgY29uc3QgVkFMSURfQUxJQVMgPSBbIEFMSUFTX1JPT1RfRk9MREVSLCBBTElBU19VU0VSX0ZPTERFUiwgJy1zaGFyZWQtJyBdO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FkZi1jbG91ZC1hdHRhY2gtZmlsZS1jbG91ZC13aWRnZXQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hdHRhY2gtZmlsZS1jbG91ZC13aWRnZXQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2F0dGFjaC1maWxlLWNsb3VkLXdpZGdldC5jb21wb25lbnQuc2NzcyddLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJyhjbGljayknOiAnZXZlbnQoJGV2ZW50KScsXG4gICAgICAgICcoYmx1ciknOiAnZXZlbnQoJGV2ZW50KScsXG4gICAgICAgICcoY2hhbmdlKSc6ICdldmVudCgkZXZlbnQpJyxcbiAgICAgICAgJyhmb2N1cyknOiAnZXZlbnQoJGV2ZW50KScsXG4gICAgICAgICcoZm9jdXNpbiknOiAnZXZlbnQoJGV2ZW50KScsXG4gICAgICAgICcoZm9jdXNvdXQpJzogJ2V2ZW50KCRldmVudCknLFxuICAgICAgICAnKGlucHV0KSc6ICdldmVudCgkZXZlbnQpJyxcbiAgICAgICAgJyhpbnZhbGlkKSc6ICdldmVudCgkZXZlbnQpJyxcbiAgICAgICAgJyhzZWxlY3QpJzogJ2V2ZW50KCRldmVudCknXG4gICAgfSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIEF0dGFjaEZpbGVDbG91ZFdpZGdldENvbXBvbmVudCBleHRlbmRzIFVwbG9hZENsb3VkV2lkZ2V0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIHR5cGVJZCA9ICdBdHRhY2hGaWxlQ2xvdWRXaWRnZXRDb21wb25lbnQnO1xuICAgIHJvb3ROb2RlSWQgPSBBTElBU19VU0VSX0ZPTERFUjtcbiAgICBzZWxlY3RlZE5vZGU6IE5vZGU7XG5cbiAgICBwcml2YXRlIHByZXZpZXdTdGF0ZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgX25vZGVzQXBpOiBOb2Rlc0FwaTtcbiAgICBnZXQgbm9kZXNBcGkoKTogTm9kZXNBcGkge1xuICAgICAgICB0aGlzLl9ub2Rlc0FwaSA9IHRoaXMuX25vZGVzQXBpID8/IG5ldyBOb2Rlc0FwaSh0aGlzLmFwaVNlcnZpY2UuZ2V0SW5zdGFuY2UoKSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9ub2Rlc0FwaTtcbiAgICB9XG4gICAgZGlzcGxheWVkQ29sdW1ucyA9IFsnaWNvbicsICdmaWxlTmFtZScsICdhY3Rpb24nXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBmb3JtU2VydmljZTogRm9ybVNlcnZpY2UsXG4gICAgICAgIGxvZ2dlcjogTG9nU2VydmljZSxcbiAgICAgICAgdGh1bWJuYWlsczogVGh1bWJuYWlsU2VydmljZSxcbiAgICAgICAgcHJvY2Vzc0Nsb3VkQ29udGVudFNlcnZpY2U6IFByb2Nlc3NDbG91ZENvbnRlbnRTZXJ2aWNlLFxuICAgICAgICBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbnRlbnROb2RlU2VsZWN0b3JTZXJ2aWNlOiBDb250ZW50Q2xvdWROb2RlU2VsZWN0b3JTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGFwcENvbmZpZ1NlcnZpY2U6IEFwcENvbmZpZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYXBpU2VydmljZTogQWxmcmVzY29BcGlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbnRlbnROb2RlU2VsZWN0b3JQYW5lbFNlcnZpY2U6IENvbnRlbnROb2RlU2VsZWN0b3JQYW5lbFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbmV3VmVyc2lvblVwbG9hZGVyU2VydmljZTogTmV3VmVyc2lvblVwbG9hZGVyU2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcihmb3JtU2VydmljZSwgdGh1bWJuYWlscywgcHJvY2Vzc0Nsb3VkQ29udGVudFNlcnZpY2UsIG5vdGlmaWNhdGlvblNlcnZpY2UsIGxvZ2dlcik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIGlmICh0aGlzLmhhc0ZpbGUgJiYgdGhpcy5maWVsZC52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlcyA9IHRoaXMuZmllbGQudmFsdWUgfHwgdGhpcy5maWVsZC5mb3JtLnZhbHVlc1t0aGlzLmZpZWxkLmlkXTtcbiAgICAgICAgICAgIHRoaXMuY29udGVudE1vZGVsRm9ybUZpbGVIYW5kbGVyKGZpbGVzWzBdKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpZWxkLnBhcmFtcy5kaXNwbGF5YWJsZUNNUHJvcGVydGllcyA9IHRoaXMuZmllbGQucGFyYW1zLmRpc3BsYXlhYmxlQ01Qcm9wZXJ0aWVzID8/IFtdO1xuICAgICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMuc3BsaWNlKDIsIDAsIC4uLih0aGlzLmZpZWxkLnBhcmFtcy5kaXNwbGF5YWJsZUNNUHJvcGVydGllcz8ubWFwKHByb3BlcnR5ID0+IHByb3BlcnR5Py5uYW1lKSB8fCBbXSkpO1xuICAgICAgICB0aGlzLnNldFByZXZpZXdTdGF0ZSgpO1xuICAgIH1cblxuICAgIGlzUGF0aFN0YXRpY1R5cGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkLnBhcmFtcz8uZmlsZVNvdXJjZT8uZGVzdGluYXRpb25Gb2xkZXJQYXRoPy50eXBlID09PSBEZXN0aW5hdGlvbkZvbGRlclBhdGhUeXBlLlNUQVRJQ19UWVBFO1xuICAgIH1cblxuICAgIGlzVXBsb2FkQnV0dG9uVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICghdGhpcy5oYXNGaWxlIHx8IHRoaXMubXVsdGlwbGVPcHRpb24pICYmICF0aGlzLmZpZWxkLnJlYWRPbmx5O1xuICAgIH1cblxuICAgIG9uUmVtb3ZlQXR0YWNoRmlsZShmaWxlOiBGaWxlIHwgUmVsYXRlZENvbnRlbnRSZXByZXNlbnRhdGlvbiB8IE5vZGUpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVGaWxlKGZpbGUpO1xuICAgICAgICBpZiAoZmlsZVsnaWQnXSA9PT0gdGhpcy5zZWxlY3RlZE5vZGU/LmlkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb250ZW50TW9kZWxGb3JtRmlsZUhhbmRsZXIodGhpcy5maWVsZC52YWx1ZS5sZW5ndGggPiAwID8gdGhpcy5maWVsZC52YWx1ZVswXSA6IG51bGwpO1xuICAgIH1cblxuICAgIGZldGNoQXBwTmFtZUZyb21BcHBDb25maWcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwQ29uZmlnU2VydmljZS5nZXQoJ2FsZnJlc2NvLWRlcGxveWVkLWFwcHMnKVswXT8ubmFtZTtcbiAgICB9XG5cbiAgICByZXBsYWNlQXBwTmFtZUFsaWFzV2l0aFZhbHVlKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmIChwYXRoPy5tYXRjaChBUFBfTkFNRSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGFwcE5hbWUgPSB0aGlzLmZldGNoQXBwTmFtZUZyb21BcHBDb25maWcoKTtcbiAgICAgICAgICAgIHJldHVybiBwYXRoLnJlcGxhY2UoQVBQX05BTUUsIGFwcE5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH1cblxuICAgIGFzeW5jIG9wZW5TZWxlY3REaWFsb2coKSB7XG4gICAgICAgIGlmICh0aGlzLnByZXZpZXdTdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnNob3dXYXJuaW5nKCdGT1JNLlBSRVZJRVcuQVRUQUNIX0ZJTEVfV0lER0VULk9OX0FUVEFDSF9GSUxFX0NMSUNLJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZE1vZGUgPSB0aGlzLmZpZWxkLnBhcmFtcy5tdWx0aXBsZSA/ICdtdWx0aXBsZScgOiAnc2luZ2xlJztcbiAgICAgICAgICAgIGNvbnN0IG5vZGVJZCA9IGF3YWl0IHRoaXMuZ2V0RGVzdGluYXRpb25Gb2xkZXJOb2RlSWQoKTtcbiAgICAgICAgICAgIHRoaXMucm9vdE5vZGVJZCA9IG5vZGVJZCA/IG5vZGVJZCA6IEFMSUFTX1VTRVJfRk9MREVSO1xuICAgICAgICAgICAgdGhpcy5jb250ZW50Tm9kZVNlbGVjdG9yUGFuZWxTZXJ2aWNlLmN1c3RvbU1vZGVscyA9IHRoaXMuZmllbGQucGFyYW1zLmN1c3RvbU1vZGVscztcblxuICAgICAgICAgICAgdGhpcy5jb250ZW50Tm9kZVNlbGVjdG9yU2VydmljZVxuICAgICAgICAgICAgICAgIC5vcGVuVXBsb2FkRmlsZURpYWxvZyh0aGlzLnJvb3ROb2RlSWQsIHNlbGVjdGVkTW9kZSwgdGhpcy5pc0FsZnJlc2NvQW5kTG9jYWwoKSwgdHJ1ZSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChzZWxlY3Rpb25zOiBOb2RlW10pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9ucy5mb3JFYWNoKG5vZGUgPT4gKG5vZGVbJ2lzRXh0ZXJuYWwnXSA9IHRydWUpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uV2l0aG91dER1cGxpY2F0aW9uID0gdGhpcy5yZW1vdmVFeGlzdGluZ1NlbGVjdGlvbihzZWxlY3Rpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFkRmlsZXNBdHRhY2hlZCA9IHRoaXMuZmllbGQudmFsdWU/Lmxlbmd0aCA+IDA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZml4SW5jb21wYXRpYmlsaXR5RnJvbVByZXZpb3VzQW5kTmV3Rm9ybShzZWxlY3Rpb25XaXRob3V0RHVwbGljYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWhhZEZpbGVzQXR0YWNoZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGVudE1vZGVsRm9ybUZpbGVIYW5kbGVyKHRoaXMuZmllbGQudmFsdWUubGVuZ3RoID4gMCA/IHRoaXMuZmllbGQudmFsdWVbMF0gOiBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXREZXN0aW5hdGlvbkZvbGRlck5vZGVJZCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBsZXQgcm9vdE5vZGVJZDogc3RyaW5nO1xuXG4gICAgICAgIHN3aXRjaCAodGhpcy5maWVsZD8ucGFyYW1zPy5maWxlU291cmNlPy5kZXN0aW5hdGlvbkZvbGRlclBhdGg/LnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgRGVzdGluYXRpb25Gb2xkZXJQYXRoVHlwZS5TVEFUSUNfVFlQRTpcbiAgICAgICAgICAgICAgICByb290Tm9kZUlkID0gYXdhaXQgdGhpcy5nZXROb2RlSWRGcm9tUGF0aCh0aGlzLmZpZWxkLnBhcmFtcy5maWxlU291cmNlLmRlc3RpbmF0aW9uRm9sZGVyUGF0aCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERlc3RpbmF0aW9uRm9sZGVyUGF0aFR5cGUuU1RSSU5HX1RZUEU6XG4gICAgICAgICAgICAgICAgcm9vdE5vZGVJZCA9IGF3YWl0IHRoaXMuZ2V0Tm9kZUlkRnJvbVBhdGgodGhpcy5maWVsZC5wYXJhbXMuZmlsZVNvdXJjZS5kZXN0aW5hdGlvbkZvbGRlclBhdGgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEZXN0aW5hdGlvbkZvbGRlclBhdGhUeXBlLkZPTERFUl9UWVBFOlxuICAgICAgICAgICAgICAgIHJvb3ROb2RlSWQgPSBhd2FpdCB0aGlzLmdldE5vZGVJZEZyb21Gb2xkZXJWYXJpYWJsZVZhbHVlKHRoaXMuZmllbGQucGFyYW1zLmZpbGVTb3VyY2UuZGVzdGluYXRpb25Gb2xkZXJQYXRoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcm9vdE5vZGVJZCA9IGF3YWl0IHRoaXMuZ2V0Tm9kZUlkRnJvbVBhdGgoeyB0eXBlOiAnJywgdmFsdWU6IEFMSUFTX1VTRVJfRk9MREVSIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJvb3ROb2RlSWQ7XG4gICAgfVxuXG4gICBhc3luYyBnZXROb2RlSWRGcm9tUGF0aChkZXN0aW5hdGlvbkZvbGRlclBhdGg6IERlc3RpbmF0aW9uRm9sZGVyUGF0aCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGxldCBub2RlSWQ6IHN0cmluZztcbiAgICAgICAgY29uc3QgZGVzdGluYXRpb25QYXRoID0gIHRoaXMuZ2V0QWxpYXNBbmRSZWxhdGl2ZVBhdGhGcm9tRGVzdGluYXRpb25Gb2xkZXJQYXRoKGRlc3RpbmF0aW9uRm9sZGVyUGF0aC52YWx1ZSk7XG4gICAgICAgIGRlc3RpbmF0aW9uUGF0aC5wYXRoID0gdGhpcy5yZXBsYWNlQXBwTmFtZUFsaWFzV2l0aFZhbHVlKGRlc3RpbmF0aW9uUGF0aC5wYXRoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5vZGVJZCA9IGF3YWl0IHRoaXMuY29udGVudE5vZGVTZWxlY3RvclNlcnZpY2UuZ2V0Tm9kZUlkRnJvbVBhdGgoZGVzdGluYXRpb25QYXRoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMubG9nU2VydmljZS5lcnJvcihlcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9kZUlkO1xuICAgIH1cblxuICAgIGFzeW5jIGdldE5vZGVJZEZyb21Gb2xkZXJWYXJpYWJsZVZhbHVlKGRlc3RpbmF0aW9uRm9sZGVyUGF0aDogRGVzdGluYXRpb25Gb2xkZXJQYXRoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgbGV0IG5vZGVJZDogc3RyaW5nO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbm9kZUlkID0gYXdhaXQgdGhpcy5jb250ZW50Tm9kZVNlbGVjdG9yU2VydmljZS5nZXROb2RlSWRGcm9tRm9sZGVyVmFyaWFibGVWYWx1ZShkZXN0aW5hdGlvbkZvbGRlclBhdGgudmFsdWUsIEFMSUFTX1VTRVJfRk9MREVSKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMubG9nU2VydmljZS5lcnJvcihlcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9kZUlkO1xuICAgIH1cblxuICAgIGdldEFsaWFzQW5kUmVsYXRpdmVQYXRoRnJvbURlc3RpbmF0aW9uRm9sZGVyUGF0aChkZXN0aW5hdGlvbkZvbGRlclBhdGg6IHN0cmluZyk6IERlc3RpbmF0aW9uRm9sZGVyUGF0aE1vZGVsIHtcbiAgICAgICAgbGV0IGFsaWFzOiBzdHJpbmc7IGxldCBwYXRoOiBzdHJpbmc7XG4gICAgICAgIGlmIChkZXN0aW5hdGlvbkZvbGRlclBhdGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0T2ZSZWxhdGl2ZVBhdGhJbmRleCA9IGRlc3RpbmF0aW9uRm9sZGVyUGF0aC5pbmRleE9mKCcvJyk7XG4gICAgICAgICAgICBpZiAoc3RhcnRPZlJlbGF0aXZlUGF0aEluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICBhbGlhcyA9IGRlc3RpbmF0aW9uRm9sZGVyUGF0aC5zdWJzdHJpbmcoMCwgc3RhcnRPZlJlbGF0aXZlUGF0aEluZGV4KTtcbiAgICAgICAgICAgICAgICBwYXRoID0gZGVzdGluYXRpb25Gb2xkZXJQYXRoLnN1YnN0cmluZyhzdGFydE9mUmVsYXRpdmVQYXRoSW5kZXgsIGRlc3RpbmF0aW9uRm9sZGVyUGF0aC5sZW5ndGgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhbGlhcyA9IGRlc3RpbmF0aW9uRm9sZGVyUGF0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWRBbGlhcyhhbGlhcykgPyB7IGFsaWFzLCBwYXRoIH0gOiB7IGFsaWFzOiBBTElBU19VU0VSX0ZPTERFUiwgcGF0aDogdW5kZWZpbmVkIH07XG4gICAgfVxuXG4gICAgcmVtb3ZlRXhpc3RpbmdTZWxlY3Rpb24oc2VsZWN0aW9uczogTm9kZVtdKSB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nTm9kZTogTm9kZVtdID0gWy4uLnRoaXMuZmllbGQudmFsdWUgfHwgW11dO1xuICAgICAgICByZXR1cm4gc2VsZWN0aW9ucy5maWx0ZXIob3B0ID0+ICFleGlzdGluZ05vZGUuc29tZSgobm9kZSkgPT4gbm9kZS5pZCA9PT0gb3B0LmlkKSk7XG4gICAgfVxuXG4gICAgZG93bmxvYWRDb250ZW50KGZpbGU6IE5vZGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzQ2xvdWRDb250ZW50U2VydmljZS5kb3dubG9hZEZpbGUoZmlsZS5pZCk7XG4gICAgfVxuXG4gICAgb25VcGxvYWROZXdGaWxlVmVyc2lvbihub2RlOiBOZXdWZXJzaW9uVXBsb2FkZXJEaWFsb2dEYXRhKTogdm9pZCB7XG4gICAgICAgIHRoaXMubmV3VmVyc2lvblVwbG9hZGVyU2VydmljZS5vcGVuVXBsb2FkTmV3VmVyc2lvbkRpYWxvZyhub2RlKS5zdWJzY3JpYmUoKG5ld1ZlcnNpb25VcGxvYWRlckRhdGEpID0+IHtcbiAgICAgICAgICAgIGlmIChuZXdWZXJzaW9uVXBsb2FkZXJEYXRhLmFjdGlvbiA9PT0gTmV3VmVyc2lvblVwbG9hZGVyRGF0YUFjdGlvbi51cGxvYWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlcGxhY2VPbGRGaWxlVmVyc2lvbldpdGhOZXcobmV3VmVyc2lvblVwbG9hZGVyRGF0YSBhcyBWZXJzaW9uTWFuYWdlclVwbG9hZERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3IgPT4gdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnNob3dFcnJvcihlcnJvci52YWx1ZSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBvbkF0dGFjaEZpbGVDbGlja2VkKG5vZGVTZWxlY3RvcjogYW55KSB7XG4gICAgICAgIG5vZGVTZWxlY3Rvci5ub2RlSWQgPSBub2RlU2VsZWN0b3IuaWQ7XG4gICAgICAgIHRoaXMuZmlsZUNsaWNrZWQobmV3IENvbnRlbnRMaW5rTW9kZWwobm9kZVNlbGVjdG9yKSk7XG4gICAgfVxuXG4gICAgZ2V0V2lkZ2V0SWNvbigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0FsZnJlc2NvQW5kTG9jYWwoKSA/ICdmaWxlX3VwbG9hZCcgOiAnYXR0YWNoX2ZpbGUnO1xuICAgIH1cblxuICAgIG9uUm93Q2xpY2tlZChmaWxlPzogTm9kZSkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE5vZGU/LmlkID09PSBmaWxlPy5pZCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUgPSBmaWxlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29udGVudE1vZGVsRm9ybUZpbGVIYW5kbGVyKHRoaXMuc2VsZWN0ZWROb2RlKTtcbiAgICB9XG5cbiAgICBjb250ZW50TW9kZWxGb3JtRmlsZUhhbmRsZXIoZmlsZT86IGFueSkge1xuICAgICAgICBpZiAoZmlsZT8uaWQgJiYgdGhpcy5pc1JldHJpZXZlTWV0YWRhdGFPcHRpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlczogRm9ybVZhbHVlcyA9IHt9O1xuICAgICAgICAgICAgdGhpcy5ub2Rlc0FwaS5nZXROb2RlKGZpbGUuaWQpLnRoZW4oYWNzTm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWV0YWRhdGEgPSBhY3NOb2RlPy5lbnRyeT8ucHJvcGVydGllcztcbiAgICAgICAgICAgICAgICBpZiAobWV0YWRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG1ldGFkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzYW5pdGl6ZWRLZXkgPSBrZXkucmVwbGFjZSgnOicsICdfJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbc2FuaXRpemVkS2V5XSA9IG1ldGFkYXRhW2tleV07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1TZXJ2aWNlLnVwZGF0ZUZvcm1WYWx1ZXNSZXF1ZXN0ZWQubmV4dCh2YWx1ZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsZUNsaWNrZWQobmV3IFVwbG9hZFdpZGdldENvbnRlbnRMaW5rTW9kZWwoZmlsZSwgdGhpcy5maWVsZC5pZCkpO1xuICAgIH1cblxuICAgIGlzUmV0cmlldmVNZXRhZGF0YU9wdGlvbkVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkPy5wYXJhbXM/Lm1lbnVPcHRpb25zICYmIHRoaXMuZmllbGQucGFyYW1zLm1lbnVPcHRpb25zW1JFVFJJRVZFX01FVEFEQVRBX09QVElPTl07XG4gICAgfVxuXG4gICAgaXNWYWxpZEFsaWFzKGFsaWFzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGFsaWFzICYmIFZBTElEX0FMSUFTLmluY2x1ZGVzKGFsaWFzKTtcbiAgICB9XG5cbiAgICBpc1NlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNGaWxlO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmNvbnRlbnROb2RlU2VsZWN0b3JQYW5lbFNlcnZpY2UuY3VzdG9tTW9kZWxzID0gW107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRQcmV2aWV3U3RhdGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJldmlld1N0YXRlID0gdGhpcy5mb3JtU2VydmljZS5nZXRQcmV2aWV3U3RhdGUoKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYWRmLWF0dGFjaC1maWxlLXdpZGdldC1jb250YWluZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYWRmLWF0dGFjaC13aWRnZXQge3tmaWVsZC5jbGFzc05hbWV9fVwiXG4gICAgICAgIFtjbGFzcy5hZGYtcmVhZG9ubHldPVwiZmllbGQucmVhZE9ubHlcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYWRmLWxhYmVsXCIgW2F0dHIuZm9yXT1cImZpZWxkLmlkXCI+e3tmaWVsZC5uYW1lfX1cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWRmLWFzdGVyaXNrXCIgKm5nSWY9XCJpc1JlcXVpcmVkKClcIj4qPC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLWF0dGFjaC13aWRnZXQtY29udGFpbmVyXCIgKGZvY3Vzb3V0KT1cIm1hcmtBc1RvdWNoZWQoKVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1hdHRhY2gtd2lkZ2V0X19tZW51LXVwbG9hZFwiICpuZ0lmPVwiaXNVcGxvYWRCdXR0b25WaXNpYmxlKClcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuU2VsZWN0RGlhbG9nKClcIlxuICAgICAgICAgICAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1hdHRhY2gtd2lkZ2V0X19tZW51LXVwbG9hZF9fYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmlkXCJcbiAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiZmllbGQudG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjEwMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdGT1JNLkZJRUxELkFUVEFDSCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImFkZi1hdHRhY2gtd2lkZ2V0X19tZW51LXVwbG9hZF9fYnV0dG9uX19pY29uXCI+e3tnZXRXaWRnZXRJY29uKCl9fTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGRhdGEtYXV0b21hdGlvbi1pZD1cImFkZi1hdHRhY2gtd2lkZ2V0LXJlYWRvbmx5LWxpc3RcIiBjbGFzcz1cImFkZi1hdHRhY2gtd2lkZ2V0LXJlYWRvbmx5LXRhYmxlXCI+XG4gICAgICAgIDxhZGYtY2xvdWQtZmlsZS1wcm9wZXJ0aWVzLXRhYmxlXG4gICAgICAgICAgICBbdXBsb2FkZWRGaWxlc109XCJ1cGxvYWRlZEZpbGVzXCJcbiAgICAgICAgICAgIFtoYXNGaWxlXT1cImhhc0ZpbGVcIlxuICAgICAgICAgICAgW3NlbGVjdGVkTm9kZV09XCJzZWxlY3RlZE5vZGVcIlxuICAgICAgICAgICAgW2ZpZWxkXT1cImZpZWxkXCJcbiAgICAgICAgICAgIFtkaXNwbGF5ZWRDb2x1bW5zXT1cImRpc3BsYXllZENvbHVtbnNcIlxuICAgICAgICAgICAgW21pbWVUeXBlSWNvbl09XCJtaW1lVHlwZUljb25cIlxuICAgICAgICAgICAgKHJvd0NsaWNrKT1cIm9uUm93Q2xpY2tlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChhdHRhY2hGaWxlQ2xpY2spPVwib25BdHRhY2hGaWxlQ2xpY2tlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChkb3dubG9hZEZpbGUpPVwiZG93bmxvYWRDb250ZW50KCRldmVudClcIlxuICAgICAgICAgICAgKHVwbG9hZE5ld0ZpbGVWZXJzaW9uKT1cIm9uVXBsb2FkTmV3RmlsZVZlcnNpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAoY29udGVudE1vZGVsRmlsZUhhbmRsZXIpPVwiY29udGVudE1vZGVsRm9ybUZpbGVIYW5kbGVyKCRldmVudClcIlxuICAgICAgICAgICAgKHJlbW92ZUF0dGFjaEZpbGUpPVwib25SZW1vdmVBdHRhY2hGaWxlKCRldmVudClcIlxuICAgICAgICA+PC9hZGYtY2xvdWQtZmlsZS1wcm9wZXJ0aWVzLXRhYmxlPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWhhc0ZpbGUgJiYgZmllbGQucmVhZE9ubHlcIiBpZD1cInt7J2FkZi1hdHRhY2gtZW1wdHktbGlzdC0nK2ZpZWxkLmlkfX1cIj5cbiAgICAgICAgICAgIHt7ICdGT1JNLkZJRUxELk5PX0ZJTEVfQVRUQUNIRUQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvZGl2PlxuXG4gICAgPC9kaXY+XG5cbiAgICA8ZXJyb3Itd2lkZ2V0IFtlcnJvcl09XCJmaWVsZC52YWxpZGF0aW9uU3VtbWFyeVwiPjwvZXJyb3Itd2lkZ2V0PlxuICAgIDxlcnJvci13aWRnZXQgKm5nSWY9XCIhZmllbGQuaXNWYWxpZCAmJiBpc1RvdWNoZWQoKSAmJiAhaXNTZWxlY3RlZCgpXCIgcmVxdWlyZWQ9XCJ7eyAnRk9STS5GSUVMRC5SRVFVSVJFRCcgfCB0cmFuc2xhdGUgfX1cIj48L2Vycm9yLXdpZGdldD5cbjwvZGl2PlxuIl19
|
|
248
|
+
}], ctorParameters: function () { return [{ type: i1.FormService }, { type: i1.ThumbnailService }, { type: i2.ProcessCloudContentService }, { type: i1.NotificationService }, { type: i3.ContentCloudNodeSelectorService }, { type: i1.AppConfigService }, { type: i1.AlfrescoApiService }, { type: i4.ContentNodeSelectorPanelService }, { type: i4.NewVersionUploaderService }]; }, propDecorators: { error: [{
|
|
249
|
+
type: Output
|
|
250
|
+
}] } });
|
|
251
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNoLWZpbGUtY2xvdWQtd2lkZ2V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvZm9ybS9jb21wb25lbnRzL3dpZGdldHMvYXR0YWNoLWZpbGUvYXR0YWNoLWZpbGUtY2xvdWQtd2lkZ2V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvZm9ybS9jb21wb25lbnRzL3dpZGdldHMvYXR0YWNoLWZpbGUvYXR0YWNoLWZpbGUtY2xvdWQtd2lkZ2V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILHVEQUF1RDtBQUV2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBcUIsTUFBTSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RHLE9BQU8sRUFDSCxXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUVuQixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNsQiw0QkFBNEIsRUFFL0IsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQVEsUUFBUSxFQUFnQyxNQUFNLGtCQUFrQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQ3hHLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQzdGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ25FLE9BQU8sRUFBOEIseUJBQXlCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUN4SCxPQUFPLEVBQ0gsK0JBQStCLEVBQy9CLDRCQUE0QixFQUU1Qix5QkFBeUIsRUFFNUIsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7Ozs7Ozs7O0FBRXhDLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLGtCQUFrQixDQUFDO0FBQzNELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLFFBQVEsQ0FBQztBQUMxQyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUM7QUFDeEMsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQztBQUNwQyxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxVQUFVLENBQUMsQ0FBQztBQW1COUUsTUFBTSxPQUFPLDhCQUErQixTQUFRLDBCQUEwQjtJQWdCMUUsWUFDSSxXQUF3QixFQUN4QixVQUE0QixFQUM1QiwwQkFBc0QsRUFDdEQsbUJBQXdDLEVBQ2hDLDBCQUEyRCxFQUMzRCxnQkFBa0MsRUFDbEMsVUFBOEIsRUFDOUIsK0JBQWdFLEVBQ2hFLHlCQUFvRDtRQUU1RCxLQUFLLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSwwQkFBMEIsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBTnhFLCtCQUEwQixHQUExQiwwQkFBMEIsQ0FBaUM7UUFDM0QscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxlQUFVLEdBQVYsVUFBVSxDQUFvQjtRQUM5QixvQ0FBK0IsR0FBL0IsK0JBQStCLENBQWlDO1FBQ2hFLDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBMkI7UUF4QmhFLFdBQU0sR0FBRyxnQ0FBZ0MsQ0FBQztRQUMxQyxlQUFVLEdBQUcsaUJBQWlCLENBQUM7UUFJL0IsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFeEIsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFNN0IscUJBQWdCLEdBQUcsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBY2xELENBQUM7SUFsQkQsSUFBSSxRQUFRO1FBQ1IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUMvRSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQWlCRCxRQUFRO1FBQ0osS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzdDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3hFLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM5QztRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLHVCQUF1QixJQUFJLEVBQUUsQ0FBQztRQUM1RixJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLHVCQUF1QixFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUgsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxnQkFBZ0I7UUFDWixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxxQkFBcUIsRUFBRSxJQUFJLEtBQUsseUJBQXlCLENBQUMsV0FBVyxDQUFDO0lBQ2hILENBQUM7SUFFRCxxQkFBcUI7UUFDakIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztJQUMxRSxDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBZ0Q7UUFDL0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsRUFBRTtZQUN0QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztTQUM1QjtRQUNELElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0YsQ0FBQztJQUVELHlCQUF5QjtRQUNyQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7SUFDeEUsQ0FBQztJQUVELDRCQUE0QixDQUFDLElBQVk7UUFDckMsSUFBSSxJQUFJLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3ZCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1lBQ2pELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDMUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsS0FBSyxDQUFDLGdCQUFnQjtRQUNsQixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbkIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO1NBQ2hHO2FBQU07WUFDSCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQ3hFLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7WUFDdkQsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUM7WUFDdEQsSUFBSSxDQUFDLCtCQUErQixDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUM7WUFFbkYsSUFBSSxDQUFDLDBCQUEwQjtpQkFDMUIsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsSUFBSSxDQUFDO2lCQUNwRixTQUFTLENBQUMsQ0FBQyxVQUFrQixFQUFFLEVBQUU7Z0JBQzlCLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQzFELE1BQU0sMkJBQTJCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUM3RSxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBQ3RELElBQUksQ0FBQyx3Q0FBd0MsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO2dCQUMzRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7b0JBQ25CLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQzlGO1lBQ0wsQ0FBQyxDQUFDLENBQUM7U0FDVjtJQUNMLENBQUM7SUFFTyxLQUFLLENBQUMsMEJBQTBCO1FBQ3BDLElBQUksVUFBa0IsQ0FBQztRQUV2QixRQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxxQkFBcUIsRUFBRSxJQUFJLEVBQUU7WUFDakUsS0FBSyx5QkFBeUIsQ0FBQyxXQUFXO2dCQUN0QyxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFDLENBQUM7Z0JBQzlGLE1BQU07WUFDVixLQUFLLHlCQUF5QixDQUFDLFdBQVc7Z0JBQ3RDLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUMsQ0FBQztnQkFDOUYsTUFBTTtZQUNWLEtBQUsseUJBQXlCLENBQUMsV0FBVztnQkFDdEMsVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLGdDQUFnQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2dCQUM3RyxNQUFNO1lBQ1Y7Z0JBQ0ksVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO2dCQUNsRixNQUFNO1NBQ2I7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0lBRUQsS0FBSyxDQUFDLGlCQUFpQixDQUFDLHFCQUE0QztRQUNoRSxJQUFJLE1BQWMsQ0FBQztRQUNuQixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsZ0RBQWdELENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0csZUFBZSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9FLElBQUk7WUFDQSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsMEJBQTBCLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDckY7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNaLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzFCO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVELEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxxQkFBNEM7UUFDL0UsSUFBSSxNQUFjLENBQUM7UUFDbkIsSUFBSTtZQUNBLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxnQ0FBZ0MsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztTQUNuSTtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ1osSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDMUI7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQsZ0RBQWdELENBQUMscUJBQTZCO1FBQzFFLElBQUksS0FBYSxDQUFDO1FBQ2xCLElBQUksSUFBWSxDQUFDO1FBQ2pCLElBQUkscUJBQXFCLEVBQUU7WUFDdkIsTUFBTSx3QkFBd0IsR0FBRyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDcEUsSUFBSSx3QkFBd0IsSUFBSSxDQUFDLEVBQUU7Z0JBQy9CLEtBQUssR0FBRyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLHdCQUF3QixDQUFDLENBQUM7Z0JBQ3JFLElBQUksR0FBRyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsd0JBQXdCLEVBQUUscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDbEc7aUJBQU07Z0JBQ0gsS0FBSyxHQUFHLHFCQUFxQixDQUFDO2FBQ2pDO1NBQ0o7UUFFRCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFDdEcsQ0FBQztJQUVELHVCQUF1QixDQUFDLFVBQWtCO1FBQ3RDLE1BQU0sWUFBWSxHQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0QsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUVELGVBQWUsQ0FBQyxJQUFVO1FBQ3RCLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxJQUFrQztRQUNyRCxJQUFJLENBQUMseUJBQXlCLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUNyRSxDQUFDLHNCQUFzQixFQUFFLEVBQUU7WUFDdkIsSUFBSSxzQkFBc0IsQ0FBQyxNQUFNLEtBQUssNEJBQTRCLENBQUMsTUFBTSxFQUFFO2dCQUN2RSxJQUFJLENBQUMsNEJBQTRCLENBQUMsc0JBQWtELENBQUMsQ0FBQzthQUN6RjtRQUNMLENBQUMsRUFDRCxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQzdELENBQUM7SUFDTixDQUFDO0lBRUQsbUJBQW1CLENBQUMsWUFBaUI7UUFDakMsWUFBWSxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxhQUFhO1FBQ1QsT0FBTyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUM7SUFDckUsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFXO1FBQ3BCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEtBQUssSUFBSSxFQUFFLEVBQUUsRUFBRTtZQUNwQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztTQUM1QjthQUFNO1lBQ0gsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7U0FDNUI7UUFDRCxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCwyQkFBMkIsQ0FBQyxJQUFVO1FBQ2xDLElBQUksSUFBSSxFQUFFLEVBQUUsSUFBSSxJQUFJLENBQUMsK0JBQStCLEVBQUUsRUFBRTtZQUNwRCxNQUFNLE1BQU0sR0FBZSxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUM1QyxNQUFNLFFBQVEsR0FBRyxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQztnQkFDNUMsSUFBSSxRQUFRLEVBQUU7b0JBQ1YsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO3dCQUNqQixNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQzt3QkFDM0MsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDekMsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsSUFBSSxDQUFDLFdBQVcsQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQzNEO1lBQ0wsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSw0QkFBNEIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCwrQkFBK0I7UUFDM0IsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxXQUFXLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFDdEcsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFhO1FBQ3RCLE9BQU8sS0FBSyxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELFVBQVU7UUFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEIsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsK0JBQStCLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUMzRCxDQUFDO0lBRU8sZUFBZTtRQUNuQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDM0QsQ0FBQzs7MkhBbk9RLDhCQUE4QjsrR0FBOUIsOEJBQThCLHlZQ25FM0MsODNFQWdEQTsyRkRtQmEsOEJBQThCO2tCQWpCMUMsU0FBUzsrQkFDSSxvQ0FBb0MsUUFHeEM7d0JBQ0YsU0FBUyxFQUFFLGVBQWU7d0JBQzFCLFFBQVEsRUFBRSxlQUFlO3dCQUN6QixVQUFVLEVBQUUsZUFBZTt3QkFDM0IsU0FBUyxFQUFFLGVBQWU7d0JBQzFCLFdBQVcsRUFBRSxlQUFlO3dCQUM1QixZQUFZLEVBQUUsZUFBZTt3QkFDN0IsU0FBUyxFQUFFLGVBQWU7d0JBQzFCLFdBQVcsRUFBRSxlQUFlO3dCQUM1QixVQUFVLEVBQUUsZUFBZTtxQkFDOUIsaUJBQ2MsaUJBQWlCLENBQUMsSUFBSTtnWkFRckMsS0FBSztzQkFESixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyMyBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yICovXG5cbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBGb3JtU2VydmljZSxcbiAgICBUaHVtYm5haWxTZXJ2aWNlLFxuICAgIE5vdGlmaWNhdGlvblNlcnZpY2UsXG4gICAgRm9ybVZhbHVlcyxcbiAgICBDb250ZW50TGlua01vZGVsLFxuICAgIEFwcENvbmZpZ1NlcnZpY2UsXG4gICAgQWxmcmVzY29BcGlTZXJ2aWNlLFxuICAgIFVwbG9hZFdpZGdldENvbnRlbnRMaW5rTW9kZWwsXG4gICAgRGVzdGluYXRpb25Gb2xkZXJQYXRoXG59IGZyb20gJ0BhbGZyZXNjby9hZGYtY29yZSc7XG5pbXBvcnQgeyBOb2RlLCBOb2Rlc0FwaSwgUmVsYXRlZENvbnRlbnRSZXByZXNlbnRhdGlvbiB9IGZyb20gJ0BhbGZyZXNjby9qcy1hcGknO1xuaW1wb3J0IHsgQ29udGVudENsb3VkTm9kZVNlbGVjdG9yU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2NvbnRlbnQtY2xvdWQtbm9kZS1zZWxlY3Rvci5zZXJ2aWNlJztcbmltcG9ydCB7IFByb2Nlc3NDbG91ZENvbnRlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcHJvY2Vzcy1jbG91ZC1jb250ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgVXBsb2FkQ2xvdWRXaWRnZXRDb21wb25lbnQgfSBmcm9tICcuL3VwbG9hZC1jbG91ZC53aWRnZXQnO1xuaW1wb3J0IHsgRGVzdGluYXRpb25Gb2xkZXJQYXRoTW9kZWwsIERlc3RpbmF0aW9uRm9sZGVyUGF0aFR5cGUgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZm9ybS1jbG91ZC1yZXByZXNlbnRhdGlvbi5tb2RlbCc7XG5pbXBvcnQge1xuICAgIENvbnRlbnROb2RlU2VsZWN0b3JQYW5lbFNlcnZpY2UsXG4gICAgTmV3VmVyc2lvblVwbG9hZGVyRGF0YUFjdGlvbixcbiAgICBOZXdWZXJzaW9uVXBsb2FkZXJEaWFsb2dEYXRhLFxuICAgIE5ld1ZlcnNpb25VcGxvYWRlclNlcnZpY2UsXG4gICAgVmVyc2lvbk1hbmFnZXJVcGxvYWREYXRhXG59IGZyb20gJ0BhbGZyZXNjby9hZGYtY29udGVudC1zZXJ2aWNlcyc7XG5cbmV4cG9ydCBjb25zdCBSRVRSSUVWRV9NRVRBREFUQV9PUFRJT04gPSAncmV0cmlldmVNZXRhZGF0YSc7XG5leHBvcnQgY29uc3QgQUxJQVNfUk9PVF9GT0xERVIgPSAnLXJvb3QtJztcbmV4cG9ydCBjb25zdCBBTElBU19VU0VSX0ZPTERFUiA9ICctbXktJztcbmV4cG9ydCBjb25zdCBBUFBfTkFNRSA9ICctYXBwbmFtZS0nO1xuZXhwb3J0IGNvbnN0IFZBTElEX0FMSUFTID0gW0FMSUFTX1JPT1RfRk9MREVSLCBBTElBU19VU0VSX0ZPTERFUiwgJy1zaGFyZWQtJ107XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWRmLWNsb3VkLWF0dGFjaC1maWxlLWNsb3VkLXdpZGdldCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2F0dGFjaC1maWxlLWNsb3VkLXdpZGdldC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vYXR0YWNoLWZpbGUtY2xvdWQtd2lkZ2V0LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgaG9zdDoge1xuICAgICAgICAnKGNsaWNrKSc6ICdldmVudCgkZXZlbnQpJyxcbiAgICAgICAgJyhibHVyKSc6ICdldmVudCgkZXZlbnQpJyxcbiAgICAgICAgJyhjaGFuZ2UpJzogJ2V2ZW50KCRldmVudCknLFxuICAgICAgICAnKGZvY3VzKSc6ICdldmVudCgkZXZlbnQpJyxcbiAgICAgICAgJyhmb2N1c2luKSc6ICdldmVudCgkZXZlbnQpJyxcbiAgICAgICAgJyhmb2N1c291dCknOiAnZXZlbnQoJGV2ZW50KScsXG4gICAgICAgICcoaW5wdXQpJzogJ2V2ZW50KCRldmVudCknLFxuICAgICAgICAnKGludmFsaWQpJzogJ2V2ZW50KCRldmVudCknLFxuICAgICAgICAnKHNlbGVjdCknOiAnZXZlbnQoJGV2ZW50KSdcbiAgICB9LFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgQXR0YWNoRmlsZUNsb3VkV2lkZ2V0Q29tcG9uZW50IGV4dGVuZHMgVXBsb2FkQ2xvdWRXaWRnZXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgdHlwZUlkID0gJ0F0dGFjaEZpbGVDbG91ZFdpZGdldENvbXBvbmVudCc7XG4gICAgcm9vdE5vZGVJZCA9IEFMSUFTX1VTRVJfRk9MREVSO1xuICAgIHNlbGVjdGVkTm9kZTogTm9kZTtcblxuICAgIEBPdXRwdXQoKVxuICAgIGVycm9yID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICBwcml2YXRlIHByZXZpZXdTdGF0ZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgX25vZGVzQXBpOiBOb2Rlc0FwaTtcbiAgICBnZXQgbm9kZXNBcGkoKTogTm9kZXNBcGkge1xuICAgICAgICB0aGlzLl9ub2Rlc0FwaSA9IHRoaXMuX25vZGVzQXBpID8/IG5ldyBOb2Rlc0FwaSh0aGlzLmFwaVNlcnZpY2UuZ2V0SW5zdGFuY2UoKSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9ub2Rlc0FwaTtcbiAgICB9XG4gICAgZGlzcGxheWVkQ29sdW1ucyA9IFsnaWNvbicsICdmaWxlTmFtZScsICdhY3Rpb24nXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBmb3JtU2VydmljZTogRm9ybVNlcnZpY2UsXG4gICAgICAgIHRodW1ibmFpbHM6IFRodW1ibmFpbFNlcnZpY2UsXG4gICAgICAgIHByb2Nlc3NDbG91ZENvbnRlbnRTZXJ2aWNlOiBQcm9jZXNzQ2xvdWRDb250ZW50U2VydmljZSxcbiAgICAgICAgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb250ZW50Tm9kZVNlbGVjdG9yU2VydmljZTogQ29udGVudENsb3VkTm9kZVNlbGVjdG9yU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhcHBDb25maWdTZXJ2aWNlOiBBcHBDb25maWdTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGFwaVNlcnZpY2U6IEFsZnJlc2NvQXBpU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb250ZW50Tm9kZVNlbGVjdG9yUGFuZWxTZXJ2aWNlOiBDb250ZW50Tm9kZVNlbGVjdG9yUGFuZWxTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG5ld1ZlcnNpb25VcGxvYWRlclNlcnZpY2U6IE5ld1ZlcnNpb25VcGxvYWRlclNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoZm9ybVNlcnZpY2UsIHRodW1ibmFpbHMsIHByb2Nlc3NDbG91ZENvbnRlbnRTZXJ2aWNlLCBub3RpZmljYXRpb25TZXJ2aWNlKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgaWYgKHRoaXMuaGFzRmlsZSAmJiB0aGlzLmZpZWxkLnZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gdGhpcy5maWVsZC52YWx1ZSB8fCB0aGlzLmZpZWxkLmZvcm0udmFsdWVzW3RoaXMuZmllbGQuaWRdO1xuICAgICAgICAgICAgdGhpcy5jb250ZW50TW9kZWxGb3JtRmlsZUhhbmRsZXIoZmlsZXNbMF0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmllbGQucGFyYW1zLmRpc3BsYXlhYmxlQ01Qcm9wZXJ0aWVzID0gdGhpcy5maWVsZC5wYXJhbXMuZGlzcGxheWFibGVDTVByb3BlcnRpZXMgPz8gW107XG4gICAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucy5zcGxpY2UoMiwgMCwgLi4uKHRoaXMuZmllbGQucGFyYW1zLmRpc3BsYXlhYmxlQ01Qcm9wZXJ0aWVzPy5tYXAoKHByb3BlcnR5KSA9PiBwcm9wZXJ0eT8ubmFtZSkgfHwgW10pKTtcbiAgICAgICAgdGhpcy5zZXRQcmV2aWV3U3RhdGUoKTtcbiAgICB9XG5cbiAgICBpc1BhdGhTdGF0aWNUeXBlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5maWVsZC5wYXJhbXM/LmZpbGVTb3VyY2U/LmRlc3RpbmF0aW9uRm9sZGVyUGF0aD8udHlwZSA9PT0gRGVzdGluYXRpb25Gb2xkZXJQYXRoVHlwZS5TVEFUSUNfVFlQRTtcbiAgICB9XG5cbiAgICBpc1VwbG9hZEJ1dHRvblZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoIXRoaXMuaGFzRmlsZSB8fCB0aGlzLm11bHRpcGxlT3B0aW9uKSAmJiAhdGhpcy5maWVsZC5yZWFkT25seTtcbiAgICB9XG5cbiAgICBvblJlbW92ZUF0dGFjaEZpbGUoZmlsZTogRmlsZSB8IFJlbGF0ZWRDb250ZW50UmVwcmVzZW50YXRpb24gfCBOb2RlKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlRmlsZShmaWxlKTtcbiAgICAgICAgaWYgKGZpbGVbJ2lkJ10gPT09IHRoaXMuc2VsZWN0ZWROb2RlPy5pZCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29udGVudE1vZGVsRm9ybUZpbGVIYW5kbGVyKHRoaXMuZmllbGQudmFsdWUubGVuZ3RoID4gMCA/IHRoaXMuZmllbGQudmFsdWVbMF0gOiBudWxsKTtcbiAgICB9XG5cbiAgICBmZXRjaEFwcE5hbWVGcm9tQXBwQ29uZmlnKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwcENvbmZpZ1NlcnZpY2UuZ2V0KCdhbGZyZXNjby1kZXBsb3llZC1hcHBzJylbMF0/Lm5hbWU7XG4gICAgfVxuXG4gICAgcmVwbGFjZUFwcE5hbWVBbGlhc1dpdGhWYWx1ZShwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAocGF0aD8ubWF0Y2goQVBQX05BTUUpKSB7XG4gICAgICAgICAgICBjb25zdCBhcHBOYW1lID0gdGhpcy5mZXRjaEFwcE5hbWVGcm9tQXBwQ29uZmlnKCk7XG4gICAgICAgICAgICByZXR1cm4gcGF0aC5yZXBsYWNlKEFQUF9OQU1FLCBhcHBOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICB9XG5cbiAgICBhc3luYyBvcGVuU2VsZWN0RGlhbG9nKCkge1xuICAgICAgICBpZiAodGhpcy5wcmV2aWV3U3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zaG93V2FybmluZygnRk9STS5QUkVWSUVXLkFUVEFDSF9GSUxFX1dJREdFVC5PTl9BVFRBQ0hfRklMRV9DTElDSycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRNb2RlID0gdGhpcy5maWVsZC5wYXJhbXMubXVsdGlwbGUgPyAnbXVsdGlwbGUnIDogJ3NpbmdsZSc7XG4gICAgICAgICAgICBjb25zdCBub2RlSWQgPSBhd2FpdCB0aGlzLmdldERlc3RpbmF0aW9uRm9sZGVyTm9kZUlkKCk7XG4gICAgICAgICAgICB0aGlzLnJvb3ROb2RlSWQgPSBub2RlSWQgPyBub2RlSWQgOiBBTElBU19VU0VSX0ZPTERFUjtcbiAgICAgICAgICAgIHRoaXMuY29udGVudE5vZGVTZWxlY3RvclBhbmVsU2VydmljZS5jdXN0b21Nb2RlbHMgPSB0aGlzLmZpZWxkLnBhcmFtcy5jdXN0b21Nb2RlbHM7XG5cbiAgICAgICAgICAgIHRoaXMuY29udGVudE5vZGVTZWxlY3RvclNlcnZpY2VcbiAgICAgICAgICAgICAgICAub3BlblVwbG9hZEZpbGVEaWFsb2codGhpcy5yb290Tm9kZUlkLCBzZWxlY3RlZE1vZGUsIHRoaXMuaXNBbGZyZXNjb0FuZExvY2FsKCksIHRydWUpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoc2VsZWN0aW9uczogTm9kZVtdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbnMuZm9yRWFjaCgobm9kZSkgPT4gKG5vZGVbJ2lzRXh0ZXJuYWwnXSA9IHRydWUpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uV2l0aG91dER1cGxpY2F0aW9uID0gdGhpcy5yZW1vdmVFeGlzdGluZ1NlbGVjdGlvbihzZWxlY3Rpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFkRmlsZXNBdHRhY2hlZCA9IHRoaXMuZmllbGQudmFsdWU/Lmxlbmd0aCA+IDA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZml4SW5jb21wYXRpYmlsaXR5RnJvbVByZXZpb3VzQW5kTmV3Rm9ybShzZWxlY3Rpb25XaXRob3V0RHVwbGljYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWhhZEZpbGVzQXR0YWNoZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGVudE1vZGVsRm9ybUZpbGVIYW5kbGVyKHRoaXMuZmllbGQudmFsdWUubGVuZ3RoID4gMCA/IHRoaXMuZmllbGQudmFsdWVbMF0gOiBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXREZXN0aW5hdGlvbkZvbGRlck5vZGVJZCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBsZXQgcm9vdE5vZGVJZDogc3RyaW5nO1xuXG4gICAgICAgIHN3aXRjaCAodGhpcy5maWVsZD8ucGFyYW1zPy5maWxlU291cmNlPy5kZXN0aW5hdGlvbkZvbGRlclBhdGg/LnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgRGVzdGluYXRpb25Gb2xkZXJQYXRoVHlwZS5TVEFUSUNfVFlQRTpcbiAgICAgICAgICAgICAgICByb290Tm9kZUlkID0gYXdhaXQgdGhpcy5nZXROb2RlSWRGcm9tUGF0aCh0aGlzLmZpZWxkLnBhcmFtcy5maWxlU291cmNlLmRlc3RpbmF0aW9uRm9sZGVyUGF0aCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERlc3RpbmF0aW9uRm9sZGVyUGF0aFR5cGUuU1RSSU5HX1RZUEU6XG4gICAgICAgICAgICAgICAgcm9vdE5vZGVJZCA9IGF3YWl0IHRoaXMuZ2V0Tm9kZUlkRnJvbVBhdGgodGhpcy5maWVsZC5wYXJhbXMuZmlsZVNvdXJjZS5kZXN0aW5hdGlvbkZvbGRlclBhdGgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEZXN0aW5hdGlvbkZvbGRlclBhdGhUeXBlLkZPTERFUl9UWVBFOlxuICAgICAgICAgICAgICAgIHJvb3ROb2RlSWQgPSBhd2FpdCB0aGlzLmdldE5vZGVJZEZyb21Gb2xkZXJWYXJpYWJsZVZhbHVlKHRoaXMuZmllbGQucGFyYW1zLmZpbGVTb3VyY2UuZGVzdGluYXRpb25Gb2xkZXJQYXRoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcm9vdE5vZGVJZCA9IGF3YWl0IHRoaXMuZ2V0Tm9kZUlkRnJvbVBhdGgoeyB0eXBlOiAnJywgdmFsdWU6IEFMSUFTX1VTRVJfRk9MREVSIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJvb3ROb2RlSWQ7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0Tm9kZUlkRnJvbVBhdGgoZGVzdGluYXRpb25Gb2xkZXJQYXRoOiBEZXN0aW5hdGlvbkZvbGRlclBhdGgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBsZXQgbm9kZUlkOiBzdHJpbmc7XG4gICAgICAgIGNvbnN0IGRlc3RpbmF0aW9uUGF0aCA9IHRoaXMuZ2V0QWxpYXNBbmRSZWxhdGl2ZVBhdGhGcm9tRGVzdGluYXRpb25Gb2xkZXJQYXRoKGRlc3RpbmF0aW9uRm9sZGVyUGF0aC52YWx1ZSk7XG4gICAgICAgIGRlc3RpbmF0aW9uUGF0aC5wYXRoID0gdGhpcy5yZXBsYWNlQXBwTmFtZUFsaWFzV2l0aFZhbHVlKGRlc3RpbmF0aW9uUGF0aC5wYXRoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5vZGVJZCA9IGF3YWl0IHRoaXMuY29udGVudE5vZGVTZWxlY3RvclNlcnZpY2UuZ2V0Tm9kZUlkRnJvbVBhdGgoZGVzdGluYXRpb25QYXRoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3IuZW1pdChlcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9kZUlkO1xuICAgIH1cblxuICAgIGFzeW5jIGdldE5vZGVJZEZyb21Gb2xkZXJWYXJpYWJsZVZhbHVlKGRlc3RpbmF0aW9uRm9sZGVyUGF0aDogRGVzdGluYXRpb25Gb2xkZXJQYXRoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgbGV0IG5vZGVJZDogc3RyaW5nO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbm9kZUlkID0gYXdhaXQgdGhpcy5jb250ZW50Tm9kZVNlbGVjdG9yU2VydmljZS5nZXROb2RlSWRGcm9tRm9sZGVyVmFyaWFibGVWYWx1ZShkZXN0aW5hdGlvbkZvbGRlclBhdGgudmFsdWUsIEFMSUFTX1VTRVJfRk9MREVSKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3IuZW1pdChlcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9kZUlkO1xuICAgIH1cblxuICAgIGdldEFsaWFzQW5kUmVsYXRpdmVQYXRoRnJvbURlc3RpbmF0aW9uRm9sZGVyUGF0aChkZXN0aW5hdGlvbkZvbGRlclBhdGg6IHN0cmluZyk6IERlc3RpbmF0aW9uRm9sZGVyUGF0aE1vZGVsIHtcbiAgICAgICAgbGV0IGFsaWFzOiBzdHJpbmc7XG4gICAgICAgIGxldCBwYXRoOiBzdHJpbmc7XG4gICAgICAgIGlmIChkZXN0aW5hdGlvbkZvbGRlclBhdGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0T2ZSZWxhdGl2ZVBhdGhJbmRleCA9IGRlc3RpbmF0aW9uRm9sZGVyUGF0aC5pbmRleE9mKCcvJyk7XG4gICAgICAgICAgICBpZiAoc3RhcnRPZlJlbGF0aXZlUGF0aEluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICBhbGlhcyA9IGRlc3RpbmF0aW9uRm9sZGVyUGF0aC5zdWJzdHJpbmcoMCwgc3RhcnRPZlJlbGF0aXZlUGF0aEluZGV4KTtcbiAgICAgICAgICAgICAgICBwYXRoID0gZGVzdGluYXRpb25Gb2xkZXJQYXRoLnN1YnN0cmluZyhzdGFydE9mUmVsYXRpdmVQYXRoSW5kZXgsIGRlc3RpbmF0aW9uRm9sZGVyUGF0aC5sZW5ndGgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhbGlhcyA9IGRlc3RpbmF0aW9uRm9sZGVyUGF0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWRBbGlhcyhhbGlhcykgPyB7IGFsaWFzLCBwYXRoIH0gOiB7IGFsaWFzOiBBTElBU19VU0VSX0ZPTERFUiwgcGF0aDogdW5kZWZpbmVkIH07XG4gICAgfVxuXG4gICAgcmVtb3ZlRXhpc3RpbmdTZWxlY3Rpb24oc2VsZWN0aW9uczogTm9kZVtdKSB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nTm9kZTogTm9kZVtdID0gWy4uLih0aGlzLmZpZWxkLnZhbHVlIHx8IFtdKV07XG4gICAgICAgIHJldHVybiBzZWxlY3Rpb25zLmZpbHRlcigob3B0KSA9PiAhZXhpc3RpbmdOb2RlLnNvbWUoKG5vZGUpID0+IG5vZGUuaWQgPT09IG9wdC5pZCkpO1xuICAgIH1cblxuICAgIGRvd25sb2FkQ29udGVudChmaWxlOiBOb2RlKTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJvY2Vzc0Nsb3VkQ29udGVudFNlcnZpY2UuZG93bmxvYWRGaWxlKGZpbGUuaWQpO1xuICAgIH1cblxuICAgIG9uVXBsb2FkTmV3RmlsZVZlcnNpb24obm9kZTogTmV3VmVyc2lvblVwbG9hZGVyRGlhbG9nRGF0YSk6IHZvaWQge1xuICAgICAgICB0aGlzLm5ld1ZlcnNpb25VcGxvYWRlclNlcnZpY2Uub3BlblVwbG9hZE5ld1ZlcnNpb25EaWFsb2cobm9kZSkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgKG5ld1ZlcnNpb25VcGxvYWRlckRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobmV3VmVyc2lvblVwbG9hZGVyRGF0YS5hY3Rpb24gPT09IE5ld1ZlcnNpb25VcGxvYWRlckRhdGFBY3Rpb24udXBsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVwbGFjZU9sZEZpbGVWZXJzaW9uV2l0aE5ldyhuZXdWZXJzaW9uVXBsb2FkZXJEYXRhIGFzIFZlcnNpb25NYW5hZ2VyVXBsb2FkRGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIChlcnJvcikgPT4gdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnNob3dFcnJvcihlcnJvci52YWx1ZSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBvbkF0dGFjaEZpbGVDbGlja2VkKG5vZGVTZWxlY3RvcjogYW55KSB7XG4gICAgICAgIG5vZGVTZWxlY3Rvci5ub2RlSWQgPSBub2RlU2VsZWN0b3IuaWQ7XG4gICAgICAgIHRoaXMuZmlsZUNsaWNrZWQobmV3IENvbnRlbnRMaW5rTW9kZWwobm9kZVNlbGVjdG9yKSk7XG4gICAgfVxuXG4gICAgZ2V0V2lkZ2V0SWNvbigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0FsZnJlc2NvQW5kTG9jYWwoKSA/ICdmaWxlX3VwbG9hZCcgOiAnYXR0YWNoX2ZpbGUnO1xuICAgIH1cblxuICAgIG9uUm93Q2xpY2tlZChmaWxlPzogTm9kZSkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE5vZGU/LmlkID09PSBmaWxlPy5pZCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUgPSBmaWxlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29udGVudE1vZGVsRm9ybUZpbGVIYW5kbGVyKHRoaXMuc2VsZWN0ZWROb2RlKTtcbiAgICB9XG5cbiAgICBjb250ZW50TW9kZWxGb3JtRmlsZUhhbmRsZXIoZmlsZT86IGFueSkge1xuICAgICAgICBpZiAoZmlsZT8uaWQgJiYgdGhpcy5pc1JldHJpZXZlTWV0YWRhdGFPcHRpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlczogRm9ybVZhbHVlcyA9IHt9O1xuICAgICAgICAgICAgdGhpcy5ub2Rlc0FwaS5nZXROb2RlKGZpbGUuaWQpLnRoZW4oKGFjc05vZGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXRhZGF0YSA9IGFjc05vZGU/LmVudHJ5Py5wcm9wZXJ0aWVzO1xuICAgICAgICAgICAgICAgIGlmIChtZXRhZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobWV0YWRhdGEpO1xuICAgICAgICAgICAgICAgICAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2FuaXRpemVkS2V5ID0ga2V5LnJlcGxhY2UoJzonLCAnXycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzW3Nhbml0aXplZEtleV0gPSBtZXRhZGF0YVtrZXldO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtU2VydmljZS51cGRhdGVGb3JtVmFsdWVzUmVxdWVzdGVkLm5leHQodmFsdWVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbGVDbGlja2VkKG5ldyBVcGxvYWRXaWRnZXRDb250ZW50TGlua01vZGVsKGZpbGUsIHRoaXMuZmllbGQuaWQpKTtcbiAgICB9XG5cbiAgICBpc1JldHJpZXZlTWV0YWRhdGFPcHRpb25FbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5maWVsZD8ucGFyYW1zPy5tZW51T3B0aW9ucyAmJiB0aGlzLmZpZWxkLnBhcmFtcy5tZW51T3B0aW9uc1tSRVRSSUVWRV9NRVRBREFUQV9PUFRJT05dO1xuICAgIH1cblxuICAgIGlzVmFsaWRBbGlhcyhhbGlhczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBhbGlhcyAmJiBWQUxJRF9BTElBUy5pbmNsdWRlcyhhbGlhcyk7XG4gICAgfVxuXG4gICAgaXNTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzRmlsZTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5jb250ZW50Tm9kZVNlbGVjdG9yUGFuZWxTZXJ2aWNlLmN1c3RvbU1vZGVscyA9IFtdO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0UHJldmlld1N0YXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByZXZpZXdTdGF0ZSA9IHRoaXMuZm9ybVNlcnZpY2UuZ2V0UHJldmlld1N0YXRlKCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImFkZi1hdHRhY2gtZmlsZS13aWRnZXQtY29udGFpbmVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImFkZi1hdHRhY2gtd2lkZ2V0IHt7ZmllbGQuY2xhc3NOYW1lfX1cIlxuICAgICAgICBbY2xhc3MuYWRmLXJlYWRvbmx5XT1cImZpZWxkLnJlYWRPbmx5XCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImFkZi1sYWJlbFwiIFthdHRyLmZvcl09XCJmaWVsZC5pZFwiPnt7ZmllbGQubmFtZX19XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFkZi1hc3Rlcmlza1wiICpuZ0lmPVwiaXNSZXF1aXJlZCgpXCI+Kjwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1hdHRhY2gtd2lkZ2V0LWNvbnRhaW5lclwiIChmb2N1c291dCk9XCJtYXJrQXNUb3VjaGVkKClcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtYXR0YWNoLXdpZGdldF9fbWVudS11cGxvYWRcIiAqbmdJZj1cImlzVXBsb2FkQnV0dG9uVmlzaWJsZSgpXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlblNlbGVjdERpYWxvZygpXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtYXR0YWNoLXdpZGdldF9fbWVudS11cGxvYWRfX2J1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5pZFwiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImZpZWxkLnRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCIxMDAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAnRk9STS5GSUVMRC5BVFRBQ0gnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJhZGYtYXR0YWNoLXdpZGdldF9fbWVudS11cGxvYWRfX2J1dHRvbl9faWNvblwiPnt7Z2V0V2lkZ2V0SWNvbigpfX08L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBkYXRhLWF1dG9tYXRpb24taWQ9XCJhZGYtYXR0YWNoLXdpZGdldC1yZWFkb25seS1saXN0XCIgY2xhc3M9XCJhZGYtYXR0YWNoLXdpZGdldC1yZWFkb25seS10YWJsZVwiPlxuICAgICAgICA8YWRmLWNsb3VkLWZpbGUtcHJvcGVydGllcy10YWJsZVxuICAgICAgICAgICAgW3VwbG9hZGVkRmlsZXNdPVwidXBsb2FkZWRGaWxlc1wiXG4gICAgICAgICAgICBbaGFzRmlsZV09XCJoYXNGaWxlXCJcbiAgICAgICAgICAgIFtzZWxlY3RlZE5vZGVdPVwic2VsZWN0ZWROb2RlXCJcbiAgICAgICAgICAgIFtmaWVsZF09XCJmaWVsZFwiXG4gICAgICAgICAgICBbZGlzcGxheWVkQ29sdW1uc109XCJkaXNwbGF5ZWRDb2x1bW5zXCJcbiAgICAgICAgICAgIFttaW1lVHlwZUljb25dPVwibWltZVR5cGVJY29uXCJcbiAgICAgICAgICAgIChyb3dDbGljayk9XCJvblJvd0NsaWNrZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoYXR0YWNoRmlsZUNsaWNrKT1cIm9uQXR0YWNoRmlsZUNsaWNrZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoZG93bmxvYWRGaWxlKT1cImRvd25sb2FkQ29udGVudCgkZXZlbnQpXCJcbiAgICAgICAgICAgICh1cGxvYWROZXdGaWxlVmVyc2lvbik9XCJvblVwbG9hZE5ld0ZpbGVWZXJzaW9uKCRldmVudClcIlxuICAgICAgICAgICAgKGNvbnRlbnRNb2RlbEZpbGVIYW5kbGVyKT1cImNvbnRlbnRNb2RlbEZvcm1GaWxlSGFuZGxlcigkZXZlbnQpXCJcbiAgICAgICAgICAgIChyZW1vdmVBdHRhY2hGaWxlKT1cIm9uUmVtb3ZlQXR0YWNoRmlsZSgkZXZlbnQpXCJcbiAgICAgICAgPjwvYWRmLWNsb3VkLWZpbGUtcHJvcGVydGllcy10YWJsZT5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFoYXNGaWxlICYmIGZpZWxkLnJlYWRPbmx5XCIgaWQ9XCJ7eydhZGYtYXR0YWNoLWVtcHR5LWxpc3QtJytmaWVsZC5pZH19XCI+XG4gICAgICAgICAgICB7eyAnRk9STS5GSUVMRC5OT19GSUxFX0FUVEFDSEVEJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2Rpdj5cblxuICAgIDwvZGl2PlxuXG4gICAgPGVycm9yLXdpZGdldCBbZXJyb3JdPVwiZmllbGQudmFsaWRhdGlvblN1bW1hcnlcIj48L2Vycm9yLXdpZGdldD5cbiAgICA8ZXJyb3Itd2lkZ2V0ICpuZ0lmPVwiIWZpZWxkLmlzVmFsaWQgJiYgaXNUb3VjaGVkKCkgJiYgIWlzU2VsZWN0ZWQoKVwiIHJlcXVpcmVkPVwie3sgJ0ZPUk0uRklFTEQuUkVRVUlSRUQnIHwgdHJhbnNsYXRlIH19XCI+PC9lcnJvci13aWRnZXQ+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -15,10 +15,10 @@
|
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
17
|
/* eslint-disable @angular-eslint/component-selector */
|
|
18
|
-
import { Component, ElementRef, ViewChild, ViewEncapsulation } from '@angular/core';
|
|
18
|
+
import { Component, ElementRef, EventEmitter, Output, ViewChild, ViewEncapsulation } from '@angular/core';
|
|
19
19
|
import { from } from 'rxjs';
|
|
20
20
|
import { mergeMap } from 'rxjs/operators';
|
|
21
|
-
import { WidgetComponent,
|
|
21
|
+
import { WidgetComponent, FormService, ThumbnailService, NotificationService } from '@alfresco/adf-core';
|
|
22
22
|
import { ProcessCloudContentService } from '../../../services/process-cloud-content.service';
|
|
23
23
|
import { FileSourceTypes, DestinationFolderPathType } from '../../../models/form-cloud-representation.model';
|
|
24
24
|
import * as i0 from "@angular/core";
|
|
@@ -32,13 +32,13 @@ import * as i7 from "@angular/material/list";
|
|
|
32
32
|
import * as i8 from "@angular/material/tooltip";
|
|
33
33
|
import * as i9 from "@ngx-translate/core";
|
|
34
34
|
export class UploadCloudWidgetComponent extends WidgetComponent {
|
|
35
|
-
constructor(formService, thumbnailService, processCloudContentService, notificationService
|
|
35
|
+
constructor(formService, thumbnailService, processCloudContentService, notificationService) {
|
|
36
36
|
super(formService);
|
|
37
37
|
this.thumbnailService = thumbnailService;
|
|
38
38
|
this.processCloudContentService = processCloudContentService;
|
|
39
39
|
this.notificationService = notificationService;
|
|
40
|
-
this.logService = logService;
|
|
41
40
|
this.multipleOption = '';
|
|
41
|
+
this.error = new EventEmitter();
|
|
42
42
|
}
|
|
43
43
|
ngOnInit() {
|
|
44
44
|
if (this.field?.value?.length > 0) {
|
|
@@ -75,7 +75,7 @@ export class UploadCloudWidgetComponent extends WidgetComponent {
|
|
|
75
75
|
.pipe(mergeMap((file) => this.uploadRawContent(file)))
|
|
76
76
|
.subscribe((res) => {
|
|
77
77
|
filesSaved.push(res);
|
|
78
|
-
}, (error) => this.
|
|
78
|
+
}, (error) => this.widgetError.emit(`Error uploading file. See console output for more details. ${error}`), () => {
|
|
79
79
|
this.fixIncompatibilityFromPreviousAndNewForm(filesSaved);
|
|
80
80
|
this.hasFile = true;
|
|
81
81
|
});
|
|
@@ -156,8 +156,8 @@ export class UploadCloudWidgetComponent extends WidgetComponent {
|
|
|
156
156
|
return this.field.form.getProcessVariableValue(this.field.params.fileSource?.destinationFolderPath?.name);
|
|
157
157
|
}
|
|
158
158
|
}
|
|
159
|
-
UploadCloudWidgetComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: UploadCloudWidgetComponent, deps: [{ token: i1.FormService }, { token: i1.ThumbnailService }, { token: i2.ProcessCloudContentService }, { token: i1.NotificationService }
|
|
160
|
-
UploadCloudWidgetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: UploadCloudWidgetComponent, selector: "upload-cloud-widget", host: { listeners: { "click": "event($event)", "blur": "event($event)", "change": "event($event)", "focus": "event($event)", "focusin": "event($event)", "focusout": "event($event)", "input": "event($event)", "invalid": "event($event)", "select": "event($event)" } }, viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["uploadFiles"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"adf-upload-widget {{field.className}}\" [class.adf-invalid]=\"!field.isValid\"\n [class.adf-readonly]=\"field.readOnly\">\n <label class=\"adf-label\" [attr.for]=\"field.id\">{{ field.name | translate }}<span class=\"adf-asterisk\"\n *ngIf=\"isRequired()\">*</span></label>\n <div class=\"adf-cloud-upload-widget-container\">\n <div>\n <mat-list *ngIf=\"hasFile\">\n <mat-list-item class=\"adf-upload-files-row\" *ngFor=\"let file of uploadedFiles\">\n <img mat-list-icon class=\"adf-upload-widget__icon\" [id]=\"'file-'+file.id+'-icon'\"\n [src]=\"getIcon(file.content.mimeType)\" [alt]=\"mimeTypeIcon\" (click)=\"fileClicked(file)\"\n (keyup.enter)=\"fileClicked(file)\" role=\"button\" tabindex=\"0\" />\n <span class=\"adf-upload-widget__button\" matLine id=\"{{'file-'+file.id}}\" (click)=\"fileClicked(file)\" (keyup.enter)=\"fileClicked(file)\"\n role=\"button\" tabindex=\"0\" class=\"adf-file\">{{file.name}}</span>\n <button *ngIf=\"!field.readOnly\" mat-icon-button [id]=\"'file-'+file.id+'-remove'\"\n (click)=\"removeFile(file);\" (keyup.enter)=\"removeFile(file);\">\n <mat-icon class=\"mat-24\">highlight_off</mat-icon>\n </button>\n </mat-list-item>\n </mat-list>\n </div>\n\n <div *ngIf=\"(!hasFile || multipleOption) && !field.readOnly\">\n <button mat-raised-button color=\"primary\" (click)=\"uploadFiles.click()\" [matTooltip]=\"field.tooltip\"\n matTooltipPosition=\"above\" matTooltipShowDelay=\"1000\">\n {{ 'FORM.FIELD.UPLOAD' | translate }}<mat-icon>file_upload</mat-icon>\n <input #uploadFiles [multiple]=\"multipleOption\" type=\"file\" [id]=\"field.form.nodeId\"\n (change)=\"onFileChanged($event)\" />\n </button>\n </div>\n\n <div *ngIf=\"!hasFile && field.readOnly\">\n {{ 'FORM.FIELD.NO_FILE_ATTACHED' | translate }}\n </div>\n\n </div>\n <error-widget [error]=\"field.validationSummary\"></error-widget>\n <error-widget *ngIf=\"isInvalidFieldRequired()\" required=\"{{ 'FORM.FIELD.REQUIRED' | translate }}\"></error-widget>\n</div>\n", styles: [".adf-cloud-upload-widget-container{margin-bottom:15px}.adf-cloud-upload-widget-container input{display:none}.adf-cloud-upload-widget{width:100%;word-break:break-all;padding:.4375em 0;border-top:.8438em solid transparent}.adf-cloud-upload-widget__icon{padding:6px;float:left;cursor:pointer}.adf-cloud-upload-widget__reset{margin-top:-2px}.adf-cloud-upload-files-row .adf-upload-widget__button{margin-bottom:0}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i5.MatLine, selector: "[mat-line], [matLine]" }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatList, selector: "mat-list, mat-action-list", inputs: ["disableRipple", "disabled"], exportAs: ["matList"] }, { kind: "component", type: i7.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["disableRipple", "disabled"], exportAs: ["matListItem"] }, { kind: "directive", type: i7.MatListIconCssMatStyler, selector: "[mat-list-icon], [matListIcon]" }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i1.ErrorWidgetComponent, selector: "error-widget", inputs: ["error", "required"] }, { kind: "pipe", type: i9.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
|
|
159
|
+
UploadCloudWidgetComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: UploadCloudWidgetComponent, deps: [{ token: i1.FormService }, { token: i1.ThumbnailService }, { token: i2.ProcessCloudContentService }, { token: i1.NotificationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
160
|
+
UploadCloudWidgetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: UploadCloudWidgetComponent, selector: "upload-cloud-widget", outputs: { error: "error" }, host: { listeners: { "click": "event($event)", "blur": "event($event)", "change": "event($event)", "focus": "event($event)", "focusin": "event($event)", "focusout": "event($event)", "input": "event($event)", "invalid": "event($event)", "select": "event($event)" } }, viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["uploadFiles"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"adf-upload-widget {{field.className}}\" [class.adf-invalid]=\"!field.isValid\"\n [class.adf-readonly]=\"field.readOnly\">\n <label class=\"adf-label\" [attr.for]=\"field.id\">{{ field.name | translate }}<span class=\"adf-asterisk\"\n *ngIf=\"isRequired()\">*</span></label>\n <div class=\"adf-cloud-upload-widget-container\">\n <div>\n <mat-list *ngIf=\"hasFile\">\n <mat-list-item class=\"adf-upload-files-row\" *ngFor=\"let file of uploadedFiles\">\n <img mat-list-icon class=\"adf-upload-widget__icon\" [id]=\"'file-'+file.id+'-icon'\"\n [src]=\"getIcon(file.content.mimeType)\" [alt]=\"mimeTypeIcon\" (click)=\"fileClicked(file)\"\n (keyup.enter)=\"fileClicked(file)\" role=\"button\" tabindex=\"0\" />\n <span class=\"adf-upload-widget__button\" matLine id=\"{{'file-'+file.id}}\" (click)=\"fileClicked(file)\" (keyup.enter)=\"fileClicked(file)\"\n role=\"button\" tabindex=\"0\" class=\"adf-file\">{{file.name}}</span>\n <button *ngIf=\"!field.readOnly\" mat-icon-button [id]=\"'file-'+file.id+'-remove'\"\n (click)=\"removeFile(file);\" (keyup.enter)=\"removeFile(file);\">\n <mat-icon class=\"mat-24\">highlight_off</mat-icon>\n </button>\n </mat-list-item>\n </mat-list>\n </div>\n\n <div *ngIf=\"(!hasFile || multipleOption) && !field.readOnly\">\n <button mat-raised-button color=\"primary\" (click)=\"uploadFiles.click()\" [matTooltip]=\"field.tooltip\"\n matTooltipPosition=\"above\" matTooltipShowDelay=\"1000\">\n {{ 'FORM.FIELD.UPLOAD' | translate }}<mat-icon>file_upload</mat-icon>\n <input #uploadFiles [multiple]=\"multipleOption\" type=\"file\" [id]=\"field.form.nodeId\"\n (change)=\"onFileChanged($event)\" />\n </button>\n </div>\n\n <div *ngIf=\"!hasFile && field.readOnly\">\n {{ 'FORM.FIELD.NO_FILE_ATTACHED' | translate }}\n </div>\n\n </div>\n <error-widget [error]=\"field.validationSummary\"></error-widget>\n <error-widget *ngIf=\"isInvalidFieldRequired()\" required=\"{{ 'FORM.FIELD.REQUIRED' | translate }}\"></error-widget>\n</div>\n", styles: [".adf-cloud-upload-widget-container{margin-bottom:15px}.adf-cloud-upload-widget-container input{display:none}.adf-cloud-upload-widget{width:100%;word-break:break-all;padding:.4375em 0;border-top:.8438em solid transparent}.adf-cloud-upload-widget__icon{padding:6px;float:left;cursor:pointer}.adf-cloud-upload-widget__reset{margin-top:-2px}.adf-cloud-upload-files-row .adf-upload-widget__button{margin-bottom:0}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i5.MatLine, selector: "[mat-line], [matLine]" }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatList, selector: "mat-list, mat-action-list", inputs: ["disableRipple", "disabled"], exportAs: ["matList"] }, { kind: "component", type: i7.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["disableRipple", "disabled"], exportAs: ["matListItem"] }, { kind: "directive", type: i7.MatListIconCssMatStyler, selector: "[mat-list-icon], [matListIcon]" }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i1.ErrorWidgetComponent, selector: "error-widget", inputs: ["error", "required"] }, { kind: "pipe", type: i9.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
|
|
161
161
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: UploadCloudWidgetComponent, decorators: [{
|
|
162
162
|
type: Component,
|
|
163
163
|
args: [{ selector: 'upload-cloud-widget', host: {
|
|
@@ -171,8 +171,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
|
|
|
171
171
|
'(invalid)': 'event($event)',
|
|
172
172
|
'(select)': 'event($event)'
|
|
173
173
|
}, encapsulation: ViewEncapsulation.None, template: "<div class=\"adf-upload-widget {{field.className}}\" [class.adf-invalid]=\"!field.isValid\"\n [class.adf-readonly]=\"field.readOnly\">\n <label class=\"adf-label\" [attr.for]=\"field.id\">{{ field.name | translate }}<span class=\"adf-asterisk\"\n *ngIf=\"isRequired()\">*</span></label>\n <div class=\"adf-cloud-upload-widget-container\">\n <div>\n <mat-list *ngIf=\"hasFile\">\n <mat-list-item class=\"adf-upload-files-row\" *ngFor=\"let file of uploadedFiles\">\n <img mat-list-icon class=\"adf-upload-widget__icon\" [id]=\"'file-'+file.id+'-icon'\"\n [src]=\"getIcon(file.content.mimeType)\" [alt]=\"mimeTypeIcon\" (click)=\"fileClicked(file)\"\n (keyup.enter)=\"fileClicked(file)\" role=\"button\" tabindex=\"0\" />\n <span class=\"adf-upload-widget__button\" matLine id=\"{{'file-'+file.id}}\" (click)=\"fileClicked(file)\" (keyup.enter)=\"fileClicked(file)\"\n role=\"button\" tabindex=\"0\" class=\"adf-file\">{{file.name}}</span>\n <button *ngIf=\"!field.readOnly\" mat-icon-button [id]=\"'file-'+file.id+'-remove'\"\n (click)=\"removeFile(file);\" (keyup.enter)=\"removeFile(file);\">\n <mat-icon class=\"mat-24\">highlight_off</mat-icon>\n </button>\n </mat-list-item>\n </mat-list>\n </div>\n\n <div *ngIf=\"(!hasFile || multipleOption) && !field.readOnly\">\n <button mat-raised-button color=\"primary\" (click)=\"uploadFiles.click()\" [matTooltip]=\"field.tooltip\"\n matTooltipPosition=\"above\" matTooltipShowDelay=\"1000\">\n {{ 'FORM.FIELD.UPLOAD' | translate }}<mat-icon>file_upload</mat-icon>\n <input #uploadFiles [multiple]=\"multipleOption\" type=\"file\" [id]=\"field.form.nodeId\"\n (change)=\"onFileChanged($event)\" />\n </button>\n </div>\n\n <div *ngIf=\"!hasFile && field.readOnly\">\n {{ 'FORM.FIELD.NO_FILE_ATTACHED' | translate }}\n </div>\n\n </div>\n <error-widget [error]=\"field.validationSummary\"></error-widget>\n <error-widget *ngIf=\"isInvalidFieldRequired()\" required=\"{{ 'FORM.FIELD.REQUIRED' | translate }}\"></error-widget>\n</div>\n", styles: [".adf-cloud-upload-widget-container{margin-bottom:15px}.adf-cloud-upload-widget-container input{display:none}.adf-cloud-upload-widget{width:100%;word-break:break-all;padding:.4375em 0;border-top:.8438em solid transparent}.adf-cloud-upload-widget__icon{padding:6px;float:left;cursor:pointer}.adf-cloud-upload-widget__reset{margin-top:-2px}.adf-cloud-upload-files-row .adf-upload-widget__button{margin-bottom:0}\n"] }]
|
|
174
|
-
}], ctorParameters: function () { return [{ type: i1.FormService }, { type: i1.ThumbnailService }, { type: i2.ProcessCloudContentService }, { type: i1.NotificationService }
|
|
174
|
+
}], ctorParameters: function () { return [{ type: i1.FormService }, { type: i1.ThumbnailService }, { type: i2.ProcessCloudContentService }, { type: i1.NotificationService }]; }, propDecorators: { error: [{
|
|
175
|
+
type: Output
|
|
176
|
+
}], fileInput: [{
|
|
175
177
|
type: ViewChild,
|
|
176
178
|
args: ['uploadFiles']
|
|
177
179
|
}] } });
|
|
178
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWNsb3VkLndpZGdldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvZm9ybS9jb21wb25lbnRzL3dpZGdldHMvYXR0YWNoLWZpbGUvdXBsb2FkLWNsb3VkLndpZGdldC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvZm9ybS9jb21wb25lbnRzL3dpZGdldHMvYXR0YWNoLWZpbGUvdXBsb2FkLWNsb3VkLndpZGdldC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILHVEQUF1RDtBQUV2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBVSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUYsT0FBTyxFQUFjLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckgsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDN0YsT0FBTyxFQUFFLGVBQWUsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDOzs7Ozs7Ozs7OztBQW9CN0csTUFBTSxPQUFPLDBCQUEyQixTQUFRLGVBQWU7SUFTM0QsWUFDSSxXQUF3QixFQUNoQixnQkFBa0MsRUFDaEMsMEJBQXNELEVBQ3RELG1CQUF3QyxFQUN4QyxVQUFzQjtRQUVoQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFMWCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FB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QUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUMxRixDQUFDO0lBRU8sNkJBQTZCO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLHFCQUFxQixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlHLENBQUM7O3VIQTlKUSwwQkFBMEI7MkdBQTFCLDBCQUEwQix1Y0M3Q3ZDLHkxRUFzQ0E7MkZET2EsMEJBQTBCO2tCQWpCdEMsU0FBUzsrQkFDSSxxQkFBcUIsUUFHekI7d0JBQ0YsU0FBUyxFQUFFLGVBQWU7d0JBQzFCLFFBQVEsRUFBRSxlQUFlO3dCQUN6QixVQUFVLEVBQUUsZUFBZTt3QkFDM0IsU0FBUyxFQUFFLGVBQWU7d0JBQzFCLFdBQVcsRUFBRSxlQUFlO3dCQUM1QixZQUFZLEVBQUUsZUFBZTt3QkFDN0IsU0FBUyxFQUFFLGVBQWU7d0JBQzFCLFdBQVcsRUFBRSxlQUFlO3dCQUM1QixVQUFVLEVBQUUsZUFBZTtxQkFDOUIsaUJBQ2MsaUJBQWlCLENBQUMsSUFBSTtxT0FTckMsU0FBUztzQkFEUixTQUFTO3VCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDIzIEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8qIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3IgKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkluaXQsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5vZGUgfSBmcm9tICdAYWxmcmVzY28vanMtYXBpJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1lcmdlTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgV2lkZ2V0Q29tcG9uZW50LCBMb2dTZXJ2aWNlLCBGb3JtU2VydmljZSwgVGh1bWJuYWlsU2VydmljZSwgTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJ0BhbGZyZXNjby9hZGYtY29yZSc7XG5pbXBvcnQgeyBQcm9jZXNzQ2xvdWRDb250ZW50U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3Byb2Nlc3MtY2xvdWQtY29udGVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbGVTb3VyY2VUeXBlcywgRGVzdGluYXRpb25Gb2xkZXJQYXRoVHlwZSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9mb3JtLWNsb3VkLXJlcHJlc2VudGF0aW9uLm1vZGVsJztcbmltcG9ydCB7IFZlcnNpb25NYW5hZ2VyVXBsb2FkRGF0YSB9IGZyb20gJ0BhbGZyZXNjby9hZGYtY29udGVudC1zZXJ2aWNlcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndXBsb2FkLWNsb3VkLXdpZGdldCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3VwbG9hZC1jbG91ZC53aWRnZXQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdXBsb2FkLWNsb3VkLndpZGdldC5zY3NzJ10sXG4gICAgaG9zdDoge1xuICAgICAgICAnKGNsaWNrKSc6ICdldmVudCgkZXZlbnQpJyxcbiAgICAgICAgJyhibHVyKSc6ICdldmVudCgkZXZlbnQpJyxcbiAgICAgICAgJyhjaGFuZ2UpJzogJ2V2ZW50KCRldmVudCknLFxuICAgICAgICAnKGZvY3VzKSc6ICdldmVudCgkZXZlbnQpJyxcbiAgICAgICAgJyhmb2N1c2luKSc6ICdldmVudCgkZXZlbnQpJyxcbiAgICAgICAgJyhmb2N1c291dCknOiAnZXZlbnQoJGV2ZW50KScsXG4gICAgICAgICcoaW5wdXQpJzogJ2V2ZW50KCRldmVudCknLFxuICAgICAgICAnKGludmFsaWQpJzogJ2V2ZW50KCRldmVudCknLFxuICAgICAgICAnKHNlbGVjdCknOiAnZXZlbnQoJGV2ZW50KSdcbiAgICB9LFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgVXBsb2FkQ2xvdWRXaWRnZXRDb21wb25lbnQgZXh0ZW5kcyBXaWRnZXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIGhhc0ZpbGU6IGJvb2xlYW47XG4gICAgZGlzcGxheVRleHQ6IHN0cmluZztcbiAgICBtdWx0aXBsZU9wdGlvbjogc3RyaW5nID0gJyc7XG4gICAgbWltZVR5cGVJY29uOiBzdHJpbmc7XG5cbiAgICBAVmlld0NoaWxkKCd1cGxvYWRGaWxlcycpXG4gICAgZmlsZUlucHV0OiBFbGVtZW50UmVmO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGZvcm1TZXJ2aWNlOiBGb3JtU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB0aHVtYm5haWxTZXJ2aWNlOiBUaHVtYm5haWxTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgcHJvY2Vzc0Nsb3VkQ29udGVudFNlcnZpY2U6IFByb2Nlc3NDbG91ZENvbnRlbnRTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIGxvZ1NlcnZpY2U6IExvZ1NlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoZm9ybVNlcnZpY2UpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAodGhpcy5maWVsZD8udmFsdWU/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuaGFzRmlsZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmZpeEluY29tcGF0aWJpbGl0eUZyb21QcmV2aW91c0FuZE5ld0Zvcm0oW10pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2V0TXVsdGlwbGVGaWxlUGFyYW0oKTtcbiAgICAgICAgdGhpcy5zZXREZXN0aW5hdGlvbkZvbGRlclBhdGhGcm9tTWFwcGVkVmFyaWFibGUoKTtcbiAgICB9XG5cbiAgICByZW1vdmVGaWxlKGZpbGU6IGFueSkge1xuICAgICAgICBpZiAodGhpcy5maWVsZCkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVFbGVtZW50RnJvbUxpc3QoZmlsZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXBsYWNlT2xkRmlsZVZlcnNpb25XaXRoTmV3KHZlcnNpb25NYW5hZ2VyRGF0YTogVmVyc2lvbk1hbmFnZXJVcGxvYWREYXRhKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRVcGxvYWRlZEZpbGVJbmRleCA9IHRoaXMudXBsb2FkZWRGaWxlcy5maW5kSW5kZXgoKGZpbGUpID0+IGZpbGUubmFtZSA9PT0gdmVyc2lvbk1hbmFnZXJEYXRhLmN1cnJlbnRWZXJzaW9uLm5hbWUpO1xuICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZXNbY3VycmVudFVwbG9hZGVkRmlsZUluZGV4XSA9IHsgLi4udmVyc2lvbk1hbmFnZXJEYXRhLm5ld1ZlcnNpb24udmFsdWUuZW50cnkgfTtcbiAgICAgICAgdGhpcy5maWVsZC52YWx1ZSA9IFsuLi50aGlzLnVwbG9hZGVkRmlsZXNdO1xuICAgICAgICB0aGlzLmZpZWxkLmZvcm0udmFsdWVzW3RoaXMuZmllbGQuaWRdID0gWy4uLnRoaXMudXBsb2FkZWRGaWxlc107XG4gICAgfVxuXG4gICAgb25GaWxlQ2hhbmdlZChldmVudDogYW55KSB7XG4gICAgICAgIGNvbnN0IGZpbGVzOiBGaWxlW10gPSBbXTtcbiAgICAgICAgY29uc3QgZmlsZXNTYXZlZDogTm9kZVtdID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIEFycmF5LmZyb208RmlsZT4oZXZlbnQudGFyZ2V0LmZpbGVzKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzVXBsb2FkZWQoZmlsZSkpIHtcbiAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGZpbGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0ZPUk0uRklFTEQuRklMRV9BTFJFQURZX1VQTE9BREVEJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsZXMgJiYgZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZnJvbShmaWxlcylcbiAgICAgICAgICAgICAgICAucGlwZShtZXJnZU1hcCgoZmlsZSkgPT4gdGhpcy51cGxvYWRSYXdDb250ZW50KGZpbGUpKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICAgICAocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlc1NhdmVkLnB1c2gocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgKGVycm9yKSA9PiB0aGlzLmxvZ1NlcnZpY2UuZXJyb3IoYEVycm9yIHVwbG9hZGluZyBmaWxlLiBTZWUgY29uc29sZSBvdXRwdXQgZm9yIG1vcmUgZGV0YWlscy4gJHtlcnJvcn1gKSxcbiAgICAgICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXhJbmNvbXBhdGliaWxpdHlGcm9tUHJldmlvdXNBbmROZXdGb3JtKGZpbGVzU2F2ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNGaWxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGlzVXBsb2FkZWQoZmlsZTogRmlsZSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBjdXJyZW50OiBOb2RlW10gPSB0aGlzLmZpZWxkLnZhbHVlIHx8IFtdO1xuICAgICAgICByZXR1cm4gY3VycmVudC5zb21lKChlbnRyeSkgPT4gZW50cnkubmFtZSA9PT0gZmlsZS5uYW1lKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZml4SW5jb21wYXRpYmlsaXR5RnJvbVByZXZpb3VzQW5kTmV3Rm9ybShmaWxlc1NhdmVkOiBOb2RlW10pIHtcbiAgICAgICAgY29uc3QgdmFsdWU6IE5vZGVbXSA9IFsuLi4odGhpcy5maWVsZC52YWx1ZSB8fCBbXSldO1xuICAgICAgICB2YWx1ZS5wdXNoKC4uLihmaWxlc1NhdmVkIHx8IFtdKSk7XG5cbiAgICAgICAgdGhpcy5maWVsZC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmZpZWxkLmZvcm0udmFsdWVzW3RoaXMuZmllbGQuaWRdID0gdmFsdWU7XG5cbiAgICAgICAgdGhpcy5oYXNGaWxlID0gdmFsdWUubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBnZXRJY29uKG1pbWVUeXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy50aHVtYm5haWxTZXJ2aWNlLmdldE1pbWVUeXBlSWNvbihtaW1lVHlwZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGxvYWRSYXdDb250ZW50KGZpbGU6IEZpbGUpOiBPYnNlcnZhYmxlPE5vZGU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0Nsb3VkQ29udGVudFNlcnZpY2UuY3JlYXRlVGVtcG9yYXJ5UmF3UmVsYXRlZENvbnRlbnQoZmlsZSwgdGhpcy5maWVsZC5mb3JtLm5vZGVJZCk7XG4gICAgfVxuXG4gICAgZ2V0TXVsdGlwbGVGaWxlUGFyYW0oKSB7XG4gICAgICAgIGlmICh0aGlzLmZpZWxkPy5wYXJhbXM/Lm11bHRpcGxlKSB7XG4gICAgICAgICAgICB0aGlzLm11bHRpcGxlT3B0aW9uID0gdGhpcy5maWVsZC5wYXJhbXMubXVsdGlwbGUgPyAnbXVsdGlwbGUnIDogJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgdXBsb2FkZWRGaWxlcygpOiBhbnlbXSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZmllbGQudmFsdWUgfHwgdGhpcy5maWVsZC5mb3JtLnZhbHVlc1t0aGlzLmZpZWxkLmlkXTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCB8fCBbXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZUVsZW1lbnRGcm9tTGlzdChmaWxlOiBhbnkpIHtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRWYWx1ZXMgPSB0aGlzLnVwbG9hZGVkRmlsZXMuZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWUuaWQgIT09IGZpbGUuaWQpO1xuICAgICAgICB0aGlzLnJlc2V0Rm9ybVZhbHVlcyhmaWx0ZXJlZFZhbHVlcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldEZvcm1WYWx1ZXModmFsdWVzOiBhbnlbXSkge1xuICAgICAgICBpZiAodmFsdWVzICYmIHZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkLnZhbHVlID0gdmFsdWVzO1xuICAgICAgICAgICAgdGhpcy5maWVsZC5mb3JtLnZhbHVlc1t0aGlzLmZpZWxkLmlkXSA9IHZhbHVlcztcbiAgICAgICAgICAgIHRoaXMuaGFzRmlsZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkLnZhbHVlID0gW107XG4gICAgICAgICAgICB0aGlzLmZpZWxkLmZvcm0udmFsdWVzW3RoaXMuZmllbGQuaWRdID0gW107XG4gICAgICAgICAgICB0aGlzLmhhc0ZpbGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZpbGVDbGlja2VkKGZpbGU6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm1TZXJ2aWNlLmZvcm1Db250ZW50Q2xpY2tlZC5uZXh0KGZpbGUpO1xuICAgIH1cblxuICAgIGlzQWxmcmVzY29BbmRMb2NhbCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmllbGQ/LnBhcmFtcz8uZmlsZVNvdXJjZT8uc2VydmljZUlkID09PSBGaWxlU291cmNlVHlwZXMuQUxMX0ZJTEVfU09VUkNFU19TRVJWSUNFX0lEO1xuICAgIH1cblxuICAgIGlzUGF0aFZhcmlhYmxlVHlwZSh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmllbGQ/LnBhcmFtcz8uZmlsZVNvdXJjZT8uZGVzdGluYXRpb25Gb2xkZXJQYXRoPy50eXBlID09PSB0eXBlO1xuICAgIH1cblxuICAgIHNldERlc3RpbmF0aW9uRm9sZGVyUGF0aEZyb21NYXBwZWRWYXJpYWJsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNBbGZyZXNjb0FuZExvY2FsKCkpIHtcbiAgICAgICAgICAgIHRoaXMucHJlcGFyZVVwbG9hZFdpZGdldERlc3RpbmF0aW9uRm9sZGVyUGF0aEZyb21TdHJpbmdWYXJpYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5wcmVwYXJlVXBsb2FkV2lkZ2V0RGVzdGluYXRpb25Gb2xkZXJQYXRoRnJvbUZvbGRlclZhcmlhYmxlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXBhcmVVcGxvYWRXaWRnZXREZXN0aW5hdGlvbkZvbGRlclBhdGhGcm9tU3RyaW5nVmFyaWFibGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzUGF0aFZhcmlhYmxlVHlwZShEZXN0aW5hdGlvbkZvbGRlclBhdGhUeXBlLlNUUklOR19UWVBFKSkge1xuICAgICAgICAgICAgdGhpcy5zZXRVcGxvYWRXaWRnZXREZXN0aW5hdGlvbkZvbGRlclBhdGgodGhpcy5nZXREZXN0aW5hdGlvbkZvbGRlclBhdGhWYWx1ZSgpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcHJlcGFyZVVwbG9hZFdpZGdldERlc3RpbmF0aW9uRm9sZGVyUGF0aEZyb21Gb2xkZXJWYXJpYWJsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNQYXRoVmFyaWFibGVUeXBlKERlc3RpbmF0aW9uRm9sZGVyUGF0aFR5cGUuRk9MREVSX1RZUEUpKSB7XG4gICAgICAgICAgICBjb25zdCBmb2xkZXIgPSB0aGlzLmdldERlc3RpbmF0aW9uRm9sZGVyUGF0aFZhbHVlKCk7XG4gICAgICAgICAgICB0aGlzLnNldFVwbG9hZFdpZGdldERlc3RpbmF0aW9uRm9sZGVyUGF0aChmb2xkZXI/Lmxlbmd0aCA/IGZvbGRlclswXS5pZCA6IHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFVwbG9hZFdpZGdldERlc3RpbmF0aW9uRm9sZGVyUGF0aChwYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5maWVsZC5wYXJhbXMuZmlsZVNvdXJjZS5kZXN0aW5hdGlvbkZvbGRlclBhdGhbJ3ZhbHVlJ10gPSBwYXRoID8gcGF0aCA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERlc3RpbmF0aW9uRm9sZGVyUGF0aFZhbHVlKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkLmZvcm0uZ2V0UHJvY2Vzc1ZhcmlhYmxlVmFsdWUodGhpcy5maWVsZC5wYXJhbXMuZmlsZVNvdXJjZT8uZGVzdGluYXRpb25Gb2xkZXJQYXRoPy5uYW1lKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYWRmLXVwbG9hZC13aWRnZXQge3tmaWVsZC5jbGFzc05hbWV9fVwiIFtjbGFzcy5hZGYtaW52YWxpZF09XCIhZmllbGQuaXNWYWxpZFwiXG4gICAgW2NsYXNzLmFkZi1yZWFkb25seV09XCJmaWVsZC5yZWFkT25seVwiPlxuICAgIDxsYWJlbCBjbGFzcz1cImFkZi1sYWJlbFwiIFthdHRyLmZvcl09XCJmaWVsZC5pZFwiPnt7IGZpZWxkLm5hbWUgfCB0cmFuc2xhdGUgfX08c3BhbiBjbGFzcz1cImFkZi1hc3Rlcmlza1wiXG4gICAgICAgICAgICAqbmdJZj1cImlzUmVxdWlyZWQoKVwiPio8L3NwYW4+PC9sYWJlbD5cbiAgICA8ZGl2IGNsYXNzPVwiYWRmLWNsb3VkLXVwbG9hZC13aWRnZXQtY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8bWF0LWxpc3QgKm5nSWY9XCJoYXNGaWxlXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1saXN0LWl0ZW0gY2xhc3M9XCJhZGYtdXBsb2FkLWZpbGVzLXJvd1wiICpuZ0Zvcj1cImxldCBmaWxlIG9mIHVwbG9hZGVkRmlsZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGltZyBtYXQtbGlzdC1pY29uIGNsYXNzPVwiYWRmLXVwbG9hZC13aWRnZXRfX2ljb25cIiBbaWRdPVwiJ2ZpbGUtJytmaWxlLmlkKyctaWNvbidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJnZXRJY29uKGZpbGUuY29udGVudC5taW1lVHlwZSlcIiBbYWx0XT1cIm1pbWVUeXBlSWNvblwiIChjbGljayk9XCJmaWxlQ2xpY2tlZChmaWxlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiZmlsZUNsaWNrZWQoZmlsZSlcIiByb2xlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCIwXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhZGYtdXBsb2FkLXdpZGdldF9fYnV0dG9uXCIgbWF0TGluZSBpZD1cInt7J2ZpbGUtJytmaWxlLmlkfX1cIiAoY2xpY2spPVwiZmlsZUNsaWNrZWQoZmlsZSlcIiAoa2V5dXAuZW50ZXIpPVwiZmlsZUNsaWNrZWQoZmlsZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiMFwiIGNsYXNzPVwiYWRmLWZpbGVcIj57e2ZpbGUubmFtZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIWZpZWxkLnJlYWRPbmx5XCIgbWF0LWljb24tYnV0dG9uIFtpZF09XCInZmlsZS0nK2ZpbGUuaWQrJy1yZW1vdmUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVGaWxlKGZpbGUpO1wiIChrZXl1cC5lbnRlcik9XCJyZW1vdmVGaWxlKGZpbGUpO1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0LTI0XCI+aGlnaGxpZ2h0X29mZjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWxpc3QtaXRlbT5cbiAgICAgICAgICAgIDwvbWF0LWxpc3Q+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgKm5nSWY9XCIoIWhhc0ZpbGUgfHwgbXVsdGlwbGVPcHRpb24pICYmICFmaWVsZC5yZWFkT25seVwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwidXBsb2FkRmlsZXMuY2xpY2soKVwiIFttYXRUb29sdGlwXT1cImZpZWxkLnRvb2x0aXBcIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCIgbWF0VG9vbHRpcFNob3dEZWxheT1cIjEwMDBcIj5cbiAgICAgICAgICAgICAgICB7eyAnRk9STS5GSUVMRC5VUExPQUQnIHwgdHJhbnNsYXRlIH19PG1hdC1pY29uPmZpbGVfdXBsb2FkPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgI3VwbG9hZEZpbGVzIFttdWx0aXBsZV09XCJtdWx0aXBsZU9wdGlvblwiIHR5cGU9XCJmaWxlXCIgW2lkXT1cImZpZWxkLmZvcm0ubm9kZUlkXCJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkZpbGVDaGFuZ2VkKCRldmVudClcIiAvPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgKm5nSWY9XCIhaGFzRmlsZSAmJiBmaWVsZC5yZWFkT25seVwiPlxuICAgICAgICAgICAge3sgJ0ZPUk0uRklFTEQuTk9fRklMRV9BVFRBQ0hFRCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9kaXY+XG5cbiAgICA8L2Rpdj5cbiAgICA8ZXJyb3Itd2lkZ2V0IFtlcnJvcl09XCJmaWVsZC52YWxpZGF0aW9uU3VtbWFyeVwiPjwvZXJyb3Itd2lkZ2V0PlxuICAgIDxlcnJvci13aWRnZXQgKm5nSWY9XCJpc0ludmFsaWRGaWVsZFJlcXVpcmVkKClcIiByZXF1aXJlZD1cInt7ICdGT1JNLkZJRUxELlJFUVVJUkVEJyB8IHRyYW5zbGF0ZSB9fVwiPjwvZXJyb3Itd2lkZ2V0PlxuPC9kaXY+XG4iXX0=
|
|
180
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWNsb3VkLndpZGdldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvZm9ybS9jb21wb25lbnRzL3dpZGdldHMvYXR0YWNoLWZpbGUvdXBsb2FkLWNsb3VkLndpZGdldC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvZm9ybS9jb21wb25lbnRzL3dpZGdldHMvYXR0YWNoLWZpbGUvdXBsb2FkLWNsb3VkLndpZGdldC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILHVEQUF1RDtBQUV2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVsSCxPQUFPLEVBQWMsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3pHLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQzdGLE9BQU8sRUFBRSxlQUFlLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQzs7Ozs7Ozs7Ozs7QUFvQjdHLE1BQU0sT0FBTywwQkFBMkIsU0FBUSxlQUFlO0lBWTNELFlBQ0ksV0FBd0IsRUFDaEIsZ0JBQWtDLEVBQ2hDLDBCQUFzRCxFQUN0RCxtQkFBd0M7UUFFbEQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBSlgscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNo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LElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQzFGLENBQUM7SUFFTyw2QkFBNkI7UUFDakMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUscUJBQXFCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUcsQ0FBQzs7dUhBaEtRLDBCQUEwQjsyR0FBMUIsMEJBQTBCLG9lQzdDdkMseTFFQXNDQTsyRkRPYSwwQkFBMEI7a0JBakJ0QyxTQUFTOytCQUNJLHFCQUFxQixRQUd6Qjt3QkFDRixTQUFTLEVBQUUsZUFBZTt3QkFDMUIsUUFBUSxFQUFFLGVBQWU7d0JBQ3pCLFVBQVUsRUFBRSxlQUFlO3dCQUMzQixTQUFTLEVBQUUsZUFBZTt3QkFDMUIsV0FBVyxFQUFFLGVBQWU7d0JBQzVCLFlBQVksRUFBRSxlQUFlO3dCQUM3QixTQUFTLEVBQUUsZUFBZTt3QkFDMUIsV0FBVyxFQUFFLGVBQWU7d0JBQzVCLFVBQVUsRUFBRSxlQUFlO3FCQUM5QixpQkFDYyxpQkFBaUIsQ0FBQyxJQUFJOzRNQVNyQyxLQUFLO3NCQURKLE1BQU07Z0JBSVAsU0FBUztzQkFEUixTQUFTO3VCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDIzIEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8qIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3IgKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOb2RlIH0gZnJvbSAnQGFsZnJlc2NvL2pzLWFwaSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZXJnZU1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFdpZGdldENvbXBvbmVudCwgRm9ybVNlcnZpY2UsIFRodW1ibmFpbFNlcnZpY2UsIE5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUnO1xuaW1wb3J0IHsgUHJvY2Vzc0Nsb3VkQ29udGVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wcm9jZXNzLWNsb3VkLWNvbnRlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBGaWxlU291cmNlVHlwZXMsIERlc3RpbmF0aW9uRm9sZGVyUGF0aFR5cGUgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZm9ybS1jbG91ZC1yZXByZXNlbnRhdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBWZXJzaW9uTWFuYWdlclVwbG9hZERhdGEgfSBmcm9tICdAYWxmcmVzY28vYWRmLWNvbnRlbnQtc2VydmljZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3VwbG9hZC1jbG91ZC13aWRnZXQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi91cGxvYWQtY2xvdWQud2lkZ2V0Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3VwbG9hZC1jbG91ZC53aWRnZXQuc2NzcyddLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJyhjbGljayknOiAnZXZlbnQoJGV2ZW50KScsXG4gICAgICAgICcoYmx1ciknOiAnZXZlbnQoJGV2ZW50KScsXG4gICAgICAgICcoY2hhbmdlKSc6ICdldmVudCgkZXZlbnQpJyxcbiAgICAgICAgJyhmb2N1cyknOiAnZXZlbnQoJGV2ZW50KScsXG4gICAgICAgICcoZm9jdXNpbiknOiAnZXZlbnQoJGV2ZW50KScsXG4gICAgICAgICcoZm9jdXNvdXQpJzogJ2V2ZW50KCRldmVudCknLFxuICAgICAgICAnKGlucHV0KSc6ICdldmVudCgkZXZlbnQpJyxcbiAgICAgICAgJyhpbnZhbGlkKSc6ICdldmVudCgkZXZlbnQpJyxcbiAgICAgICAgJyhzZWxlY3QpJzogJ2V2ZW50KCRldmVudCknXG4gICAgfSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIFVwbG9hZENsb3VkV2lkZ2V0Q29tcG9uZW50IGV4dGVuZHMgV2lkZ2V0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBoYXNGaWxlOiBib29sZWFuO1xuICAgIGRpc3BsYXlUZXh0OiBzdHJpbmc7XG4gICAgbXVsdGlwbGVPcHRpb246IHN0cmluZyA9ICcnO1xuICAgIG1pbWVUeXBlSWNvbjogc3RyaW5nO1xuXG4gICAgQE91dHB1dCgpXG4gICAgZXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIEBWaWV3Q2hpbGQoJ3VwbG9hZEZpbGVzJylcbiAgICBmaWxlSW5wdXQ6IEVsZW1lbnRSZWY7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgZm9ybVNlcnZpY2U6IEZvcm1TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHRodW1ibmFpbFNlcnZpY2U6IFRodW1ibmFpbFNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBwcm9jZXNzQ2xvdWRDb250ZW50U2VydmljZTogUHJvY2Vzc0Nsb3VkQ29udGVudFNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGZvcm1TZXJ2aWNlKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZmllbGQ/LnZhbHVlPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmhhc0ZpbGUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5maXhJbmNvbXBhdGliaWxpdHlGcm9tUHJldmlvdXNBbmROZXdGb3JtKFtdKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdldE11bHRpcGxlRmlsZVBhcmFtKCk7XG4gICAgICAgIHRoaXMuc2V0RGVzdGluYXRpb25Gb2xkZXJQYXRoRnJvbU1hcHBlZFZhcmlhYmxlKCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlRmlsZShmaWxlOiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMuZmllbGQpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRWxlbWVudEZyb21MaXN0KGZpbGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVwbGFjZU9sZEZpbGVWZXJzaW9uV2l0aE5ldyh2ZXJzaW9uTWFuYWdlckRhdGE6IFZlcnNpb25NYW5hZ2VyVXBsb2FkRGF0YSkge1xuICAgICAgICBjb25zdCBjdXJyZW50VXBsb2FkZWRGaWxlSW5kZXggPSB0aGlzLnVwbG9hZGVkRmlsZXMuZmluZEluZGV4KChmaWxlKSA9PiBmaWxlLm5hbWUgPT09IHZlcnNpb25NYW5hZ2VyRGF0YS5jdXJyZW50VmVyc2lvbi5uYW1lKTtcbiAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVzW2N1cnJlbnRVcGxvYWRlZEZpbGVJbmRleF0gPSB7IC4uLnZlcnNpb25NYW5hZ2VyRGF0YS5uZXdWZXJzaW9uLnZhbHVlLmVudHJ5IH07XG4gICAgICAgIHRoaXMuZmllbGQudmFsdWUgPSBbLi4udGhpcy51cGxvYWRlZEZpbGVzXTtcbiAgICAgICAgdGhpcy5maWVsZC5mb3JtLnZhbHVlc1t0aGlzLmZpZWxkLmlkXSA9IFsuLi50aGlzLnVwbG9hZGVkRmlsZXNdO1xuICAgIH1cblxuICAgIG9uRmlsZUNoYW5nZWQoZXZlbnQ6IGFueSkge1xuICAgICAgICBjb25zdCBmaWxlczogRmlsZVtdID0gW107XG4gICAgICAgIGNvbnN0IGZpbGVzU2F2ZWQ6IE5vZGVbXSA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBBcnJheS5mcm9tPEZpbGU+KGV2ZW50LnRhcmdldC5maWxlcykpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc1VwbG9hZGVkKGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgZmlsZXMucHVzaChmaWxlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnNob3dXYXJuaW5nKCdGT1JNLkZJRUxELkZJTEVfQUxSRUFEWV9VUExPQURFRCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGVzICYmIGZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZyb20oZmlsZXMpXG4gICAgICAgICAgICAgICAgLnBpcGUobWVyZ2VNYXAoKGZpbGUpID0+IHRoaXMudXBsb2FkUmF3Q29udGVudChmaWxlKSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAgICAgKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXNTYXZlZC5wdXNoKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIChlcnJvcikgPT4gdGhpcy53aWRnZXRFcnJvci5lbWl0KGBFcnJvciB1cGxvYWRpbmcgZmlsZS4gU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBtb3JlIGRldGFpbHMuICR7ZXJyb3J9YCksXG4gICAgICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZml4SW5jb21wYXRpYmlsaXR5RnJvbVByZXZpb3VzQW5kTmV3Rm9ybShmaWxlc1NhdmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzRmlsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1VwbG9hZGVkKGZpbGU6IEZpbGUpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgY3VycmVudDogTm9kZVtdID0gdGhpcy5maWVsZC52YWx1ZSB8fCBbXTtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQuc29tZSgoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IGZpbGUubmFtZSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGZpeEluY29tcGF0aWJpbGl0eUZyb21QcmV2aW91c0FuZE5ld0Zvcm0oZmlsZXNTYXZlZDogTm9kZVtdKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlOiBOb2RlW10gPSBbLi4uKHRoaXMuZmllbGQudmFsdWUgfHwgW10pXTtcbiAgICAgICAgdmFsdWUucHVzaCguLi4oZmlsZXNTYXZlZCB8fCBbXSkpO1xuXG4gICAgICAgIHRoaXMuZmllbGQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5maWVsZC5mb3JtLnZhbHVlc1t0aGlzLmZpZWxkLmlkXSA9IHZhbHVlO1xuXG4gICAgICAgIHRoaXMuaGFzRmlsZSA9IHZhbHVlLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgZ2V0SWNvbihtaW1lVHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGh1bWJuYWlsU2VydmljZS5nZXRNaW1lVHlwZUljb24obWltZVR5cGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBsb2FkUmF3Q29udGVudChmaWxlOiBGaWxlKTogT2JzZXJ2YWJsZTxOb2RlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NDbG91ZENvbnRlbnRTZXJ2aWNlLmNyZWF0ZVRlbXBvcmFyeVJhd1JlbGF0ZWRDb250ZW50KGZpbGUsIHRoaXMuZmllbGQuZm9ybS5ub2RlSWQpO1xuICAgIH1cblxuICAgIGdldE11bHRpcGxlRmlsZVBhcmFtKCkge1xuICAgICAgICBpZiAodGhpcy5maWVsZD8ucGFyYW1zPy5tdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhpcy5tdWx0aXBsZU9wdGlvbiA9IHRoaXMuZmllbGQucGFyYW1zLm11bHRpcGxlID8gJ211bHRpcGxlJyA6ICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHVwbG9hZGVkRmlsZXMoKTogYW55W10ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmZpZWxkLnZhbHVlIHx8IHRoaXMuZmllbGQuZm9ybS52YWx1ZXNbdGhpcy5maWVsZC5pZF07XG4gICAgICAgIHJldHVybiByZXN1bHQgfHwgW107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVFbGVtZW50RnJvbUxpc3QoZmlsZTogYW55KSB7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkVmFsdWVzID0gdGhpcy51cGxvYWRlZEZpbGVzLmZpbHRlcigodmFsdWUpID0+IHZhbHVlLmlkICE9PSBmaWxlLmlkKTtcbiAgICAgICAgdGhpcy5yZXNldEZvcm1WYWx1ZXMoZmlsdGVyZWRWYWx1ZXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRGb3JtVmFsdWVzKHZhbHVlczogYW55W10pIHtcbiAgICAgICAgaWYgKHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5maWVsZC52YWx1ZSA9IHZhbHVlcztcbiAgICAgICAgICAgIHRoaXMuZmllbGQuZm9ybS52YWx1ZXNbdGhpcy5maWVsZC5pZF0gPSB2YWx1ZXM7XG4gICAgICAgICAgICB0aGlzLmhhc0ZpbGUgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5maWVsZC52YWx1ZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5maWVsZC5mb3JtLnZhbHVlc1t0aGlzLmZpZWxkLmlkXSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5oYXNGaWxlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmaWxlQ2xpY2tlZChmaWxlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtU2VydmljZS5mb3JtQ29udGVudENsaWNrZWQubmV4dChmaWxlKTtcbiAgICB9XG5cbiAgICBpc0FsZnJlc2NvQW5kTG9jYWwoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkPy5wYXJhbXM/LmZpbGVTb3VyY2U/LnNlcnZpY2VJZCA9PT0gRmlsZVNvdXJjZVR5cGVzLkFMTF9GSUxFX1NPVVJDRVNfU0VSVklDRV9JRDtcbiAgICB9XG5cbiAgICBpc1BhdGhWYXJpYWJsZVR5cGUodHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkPy5wYXJhbXM/LmZpbGVTb3VyY2U/LmRlc3RpbmF0aW9uRm9sZGVyUGF0aD8udHlwZSA9PT0gdHlwZTtcbiAgICB9XG5cbiAgICBzZXREZXN0aW5hdGlvbkZvbGRlclBhdGhGcm9tTWFwcGVkVmFyaWFibGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzQWxmcmVzY29BbmRMb2NhbCgpKSB7XG4gICAgICAgICAgICB0aGlzLnByZXBhcmVVcGxvYWRXaWRnZXREZXN0aW5hdGlvbkZvbGRlclBhdGhGcm9tU3RyaW5nVmFyaWFibGUoKTtcbiAgICAgICAgICAgIHRoaXMucHJlcGFyZVVwbG9hZFdpZGdldERlc3RpbmF0aW9uRm9sZGVyUGF0aEZyb21Gb2xkZXJWYXJpYWJsZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmVwYXJlVXBsb2FkV2lkZ2V0RGVzdGluYXRpb25Gb2xkZXJQYXRoRnJvbVN0cmluZ1ZhcmlhYmxlKCkge1xuICAgICAgICBpZiAodGhpcy5pc1BhdGhWYXJpYWJsZVR5cGUoRGVzdGluYXRpb25Gb2xkZXJQYXRoVHlwZS5TVFJJTkdfVFlQRSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VXBsb2FkV2lkZ2V0RGVzdGluYXRpb25Gb2xkZXJQYXRoKHRoaXMuZ2V0RGVzdGluYXRpb25Gb2xkZXJQYXRoVmFsdWUoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXBhcmVVcGxvYWRXaWRnZXREZXN0aW5hdGlvbkZvbGRlclBhdGhGcm9tRm9sZGVyVmFyaWFibGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzUGF0aFZhcmlhYmxlVHlwZShEZXN0aW5hdGlvbkZvbGRlclBhdGhUeXBlLkZPTERFUl9UWVBFKSkge1xuICAgICAgICAgICAgY29uc3QgZm9sZGVyID0gdGhpcy5nZXREZXN0aW5hdGlvbkZvbGRlclBhdGhWYWx1ZSgpO1xuICAgICAgICAgICAgdGhpcy5zZXRVcGxvYWRXaWRnZXREZXN0aW5hdGlvbkZvbGRlclBhdGgoZm9sZGVyPy5sZW5ndGggPyBmb2xkZXJbMF0uaWQgOiB1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRVcGxvYWRXaWRnZXREZXN0aW5hdGlvbkZvbGRlclBhdGgocGF0aDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuZmllbGQucGFyYW1zLmZpbGVTb3VyY2UuZGVzdGluYXRpb25Gb2xkZXJQYXRoWyd2YWx1ZSddID0gcGF0aCA/IHBhdGggOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREZXN0aW5hdGlvbkZvbGRlclBhdGhWYWx1ZSgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5maWVsZC5mb3JtLmdldFByb2Nlc3NWYXJpYWJsZVZhbHVlKHRoaXMuZmllbGQucGFyYW1zLmZpbGVTb3VyY2U/LmRlc3RpbmF0aW9uRm9sZGVyUGF0aD8ubmFtZSk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImFkZi11cGxvYWQtd2lkZ2V0IHt7ZmllbGQuY2xhc3NOYW1lfX1cIiBbY2xhc3MuYWRmLWludmFsaWRdPVwiIWZpZWxkLmlzVmFsaWRcIlxuICAgIFtjbGFzcy5hZGYtcmVhZG9ubHldPVwiZmllbGQucmVhZE9ubHlcIj5cbiAgICA8bGFiZWwgY2xhc3M9XCJhZGYtbGFiZWxcIiBbYXR0ci5mb3JdPVwiZmllbGQuaWRcIj57eyBmaWVsZC5uYW1lIHwgdHJhbnNsYXRlIH19PHNwYW4gY2xhc3M9XCJhZGYtYXN0ZXJpc2tcIlxuICAgICAgICAgICAgKm5nSWY9XCJpc1JlcXVpcmVkKClcIj4qPC9zcGFuPjwvbGFiZWw+XG4gICAgPGRpdiBjbGFzcz1cImFkZi1jbG91ZC11cGxvYWQtd2lkZ2V0LWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPG1hdC1saXN0ICpuZ0lmPVwiaGFzRmlsZVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGlzdC1pdGVtIGNsYXNzPVwiYWRmLXVwbG9hZC1maWxlcy1yb3dcIiAqbmdGb3I9XCJsZXQgZmlsZSBvZiB1cGxvYWRlZEZpbGVzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgbWF0LWxpc3QtaWNvbiBjbGFzcz1cImFkZi11cGxvYWQtd2lkZ2V0X19pY29uXCIgW2lkXT1cIidmaWxlLScrZmlsZS5pZCsnLWljb24nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiZ2V0SWNvbihmaWxlLmNvbnRlbnQubWltZVR5cGUpXCIgW2FsdF09XCJtaW1lVHlwZUljb25cIiAoY2xpY2spPVwiZmlsZUNsaWNrZWQoZmlsZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImZpbGVDbGlja2VkKGZpbGUpXCIgcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiMFwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWRmLXVwbG9hZC13aWRnZXRfX2J1dHRvblwiIG1hdExpbmUgaWQ9XCJ7eydmaWxlLScrZmlsZS5pZH19XCIgKGNsaWNrKT1cImZpbGVDbGlja2VkKGZpbGUpXCIgKGtleXVwLmVudGVyKT1cImZpbGVDbGlja2VkKGZpbGUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIiB0YWJpbmRleD1cIjBcIiBjbGFzcz1cImFkZi1maWxlXCI+e3tmaWxlLm5hbWV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFmaWVsZC5yZWFkT25seVwiIG1hdC1pY29uLWJ1dHRvbiBbaWRdPVwiJ2ZpbGUtJytmaWxlLmlkKyctcmVtb3ZlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlRmlsZShmaWxlKTtcIiAoa2V5dXAuZW50ZXIpPVwicmVtb3ZlRmlsZShmaWxlKTtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdC0yNFwiPmhpZ2hsaWdodF9vZmY8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1saXN0LWl0ZW0+XG4gICAgICAgICAgICA8L21hdC1saXN0PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2ICpuZ0lmPVwiKCFoYXNGaWxlIHx8IG11bHRpcGxlT3B0aW9uKSAmJiAhZmllbGQucmVhZE9ubHlcIj5cbiAgICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInVwbG9hZEZpbGVzLmNsaWNrKClcIiBbbWF0VG9vbHRpcF09XCJmaWVsZC50b29sdGlwXCJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIG1hdFRvb2x0aXBTaG93RGVsYXk9XCIxMDAwXCI+XG4gICAgICAgICAgICAgICAge3sgJ0ZPUk0uRklFTEQuVVBMT0FEJyB8IHRyYW5zbGF0ZSB9fTxtYXQtaWNvbj5maWxlX3VwbG9hZDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPGlucHV0ICN1cGxvYWRGaWxlcyBbbXVsdGlwbGVdPVwibXVsdGlwbGVPcHRpb25cIiB0eXBlPVwiZmlsZVwiIFtpZF09XCJmaWVsZC5mb3JtLm5vZGVJZFwiXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25GaWxlQ2hhbmdlZCgkZXZlbnQpXCIgLz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWhhc0ZpbGUgJiYgZmllbGQucmVhZE9ubHlcIj5cbiAgICAgICAgICAgIHt7ICdGT1JNLkZJRUxELk5PX0ZJTEVfQVRUQUNIRUQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvZGl2PlxuXG4gICAgPC9kaXY+XG4gICAgPGVycm9yLXdpZGdldCBbZXJyb3JdPVwiZmllbGQudmFsaWRhdGlvblN1bW1hcnlcIj48L2Vycm9yLXdpZGdldD5cbiAgICA8ZXJyb3Itd2lkZ2V0ICpuZ0lmPVwiaXNJbnZhbGlkRmllbGRSZXF1aXJlZCgpXCIgcmVxdWlyZWQ9XCJ7eyAnRk9STS5GSUVMRC5SRVFVSVJFRCcgfCB0cmFuc2xhdGUgfX1cIj48L2Vycm9yLXdpZGdldD5cbjwvZGl2PlxuIl19
|