kitsng-form-factory 0.4.39 → 0.4.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-fields/file-upload/file-upload.component.mjs +97 -20
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-fields/lookup-multi-select/lookup-multi-select.component.mjs +3 -2
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-fields/lookup-select/lookup-select.component.mjs +13 -11
- package/esm2022/lib/kitsng-form-factory/core/models/kitsng-form-factory.mjs +1 -1
- package/esm2022/lib/kitsng-form-factory/core/services/lookup-list.service.mjs +24 -10
- package/fesm2022/kitsng-form-factory.mjs +151 -57
- package/fesm2022/kitsng-form-factory.mjs.map +1 -1
- package/lib/kitsng-form-factory/components/kitsng-form-fields/file-upload/file-upload.component.d.ts +11 -4
- package/lib/kitsng-form-factory/components/kitsng-form-fields/lookup-select/lookup-select.component.d.ts +2 -2
- package/lib/kitsng-form-factory/core/models/kitsng-form-factory.d.ts +3 -0
- package/lib/kitsng-form-factory/core/services/lookup-list.service.d.ts +12 -2
- package/package.json +3 -2
|
@@ -17,17 +17,25 @@ export class FileUploadComponent {
|
|
|
17
17
|
this.modelChange = output();
|
|
18
18
|
this.selectedFiles = [];
|
|
19
19
|
this.uplodedFiles = [];
|
|
20
|
+
this.objectUrls = new Map();
|
|
21
|
+
this.removeFileCallback = (file) => {
|
|
22
|
+
this.removeFile(file);
|
|
23
|
+
};
|
|
20
24
|
}
|
|
21
25
|
ngOnInit() {
|
|
22
26
|
if (this._formControl.value) {
|
|
23
27
|
if (Array.isArray(this._formControl.value)) {
|
|
24
|
-
this.uplodedFiles = this._formControl.value;
|
|
28
|
+
this.uplodedFiles = [...this._formControl.value];
|
|
25
29
|
}
|
|
26
30
|
else if (typeof this._formControl.value === 'string') {
|
|
27
31
|
this.uplodedFiles.push(this._formControl.value);
|
|
28
32
|
}
|
|
29
33
|
}
|
|
30
34
|
}
|
|
35
|
+
ngOnDestroy() {
|
|
36
|
+
this.objectUrls.forEach(url => URL.revokeObjectURL(url));
|
|
37
|
+
this.objectUrls.clear();
|
|
38
|
+
}
|
|
31
39
|
getErrors() {
|
|
32
40
|
return this._formControl.errors;
|
|
33
41
|
}
|
|
@@ -41,24 +49,63 @@ export class FileUploadComponent {
|
|
|
41
49
|
selectedOption: this._formControl.value,
|
|
42
50
|
field: this.field,
|
|
43
51
|
});
|
|
44
|
-
if (this.options
|
|
45
|
-
this.options
|
|
52
|
+
if (this.options?.ngModelChange) {
|
|
53
|
+
this.options.ngModelChange(this._formControl.value, this._formControl.parent, this._formControl.value, this.field);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
removeFile(file) {
|
|
57
|
+
if (typeof file === 'string') {
|
|
58
|
+
this.removeFileUrl(file);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
this.removeSelectedFile(file);
|
|
46
62
|
}
|
|
47
63
|
}
|
|
48
64
|
removeFileUrl(removedFileUrl) {
|
|
49
|
-
if (this.options
|
|
50
|
-
this.options
|
|
65
|
+
if (this.options?.onRemoveFile) {
|
|
66
|
+
this.options.onRemoveFile(removedFileUrl, this._formControl.parent);
|
|
51
67
|
}
|
|
52
|
-
const index = this.uplodedFiles.findIndex(fileUrl => fileUrl
|
|
68
|
+
const index = this.uplodedFiles.findIndex(fileUrl => fileUrl === removedFileUrl);
|
|
53
69
|
if (index >= 0) {
|
|
54
70
|
this.uplodedFiles.splice(index, 1);
|
|
55
71
|
}
|
|
72
|
+
if (this.options?.multiple) {
|
|
73
|
+
this._formControl?.setValue([...this.uplodedFiles, ...this.selectedFiles]);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
this._formControl?.setValue(null);
|
|
77
|
+
}
|
|
78
|
+
this.ngModelChange();
|
|
79
|
+
}
|
|
80
|
+
removeSelectedFile(file) {
|
|
81
|
+
const index = this.selectedFiles.indexOf(file);
|
|
82
|
+
if (index >= 0) {
|
|
83
|
+
this.selectedFiles.splice(index, 1);
|
|
84
|
+
const url = this.objectUrls.get(file);
|
|
85
|
+
if (url) {
|
|
86
|
+
URL.revokeObjectURL(url);
|
|
87
|
+
this.objectUrls.delete(file);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
if (this.options?.multiple) {
|
|
91
|
+
this._formControl?.setValue([...this.uplodedFiles, ...this.selectedFiles]);
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
this._formControl?.setValue(null);
|
|
95
|
+
}
|
|
96
|
+
this.ngModelChange();
|
|
56
97
|
}
|
|
57
98
|
onUploadImage(event) {
|
|
58
99
|
const files = event.currentFiles;
|
|
59
100
|
this.selectedFiles = event.currentFiles;
|
|
60
101
|
if (files.length > 0) {
|
|
61
|
-
|
|
102
|
+
if (this.options?.multiple) {
|
|
103
|
+
this._formControl?.setValue([...this.uplodedFiles, ...this.selectedFiles]);
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
this.uplodedFiles = []; // clear old single file URL
|
|
107
|
+
this._formControl?.setValue(files[0]);
|
|
108
|
+
}
|
|
62
109
|
}
|
|
63
110
|
else {
|
|
64
111
|
if (!this.options?.multiple) {
|
|
@@ -70,14 +117,17 @@ export class FileUploadComponent {
|
|
|
70
117
|
onRemoveImage(event) {
|
|
71
118
|
const file = event.file;
|
|
72
119
|
if (this.options?.multiple) {
|
|
73
|
-
const index = this.selectedFiles.findIndex(f => f
|
|
74
|
-
console.log(index);
|
|
120
|
+
const index = this.selectedFiles.findIndex(f => f === file);
|
|
75
121
|
if (index >= 0) {
|
|
76
122
|
this.selectedFiles.splice(index, 1);
|
|
77
123
|
}
|
|
78
|
-
console.log(this.selectedFiles);
|
|
79
124
|
}
|
|
80
|
-
|
|
125
|
+
if (this.options?.multiple) {
|
|
126
|
+
this._formControl?.setValue([...this.uplodedFiles, ...this.selectedFiles]);
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
this._formControl?.setValue(null);
|
|
130
|
+
}
|
|
81
131
|
this.ngModelChange();
|
|
82
132
|
}
|
|
83
133
|
onImageError(event) {
|
|
@@ -86,18 +136,45 @@ export class FileUploadComponent {
|
|
|
86
136
|
}
|
|
87
137
|
this.ngModelChange();
|
|
88
138
|
}
|
|
139
|
+
getFileUrl(file) {
|
|
140
|
+
if (typeof file === 'string') {
|
|
141
|
+
return this.options?.apiBaseUrl ? (this.options.apiBaseUrl + file) : file;
|
|
142
|
+
}
|
|
143
|
+
else if (file instanceof File) {
|
|
144
|
+
if (!this.objectUrls.has(file)) {
|
|
145
|
+
this.objectUrls.set(file, URL.createObjectURL(file));
|
|
146
|
+
}
|
|
147
|
+
return this.objectUrls.get(file);
|
|
148
|
+
}
|
|
149
|
+
return '';
|
|
150
|
+
}
|
|
151
|
+
isImage(file) {
|
|
152
|
+
if (typeof file === 'string') {
|
|
153
|
+
return this.isImageUrl(file);
|
|
154
|
+
}
|
|
155
|
+
else if (file instanceof File) {
|
|
156
|
+
return file.type.startsWith('image/');
|
|
157
|
+
}
|
|
158
|
+
return false;
|
|
159
|
+
}
|
|
89
160
|
isImageUrl(url) {
|
|
90
161
|
const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'svg', 'webp'];
|
|
91
162
|
const fileExtension = this.getFileExtension(url);
|
|
92
163
|
return imageExtensions.includes(fileExtension.toLowerCase());
|
|
93
164
|
}
|
|
94
|
-
getFileName(
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
165
|
+
getFileName(file) {
|
|
166
|
+
if (typeof file === 'string') {
|
|
167
|
+
const parts = file.split('/');
|
|
168
|
+
const fileName = parts[parts.length - 1];
|
|
169
|
+
return fileName ?? '';
|
|
170
|
+
}
|
|
171
|
+
else if (file instanceof File) {
|
|
172
|
+
return file.name;
|
|
173
|
+
}
|
|
174
|
+
return '';
|
|
98
175
|
}
|
|
99
|
-
getFileExtension(
|
|
100
|
-
const fileName = this.getFileName(
|
|
176
|
+
getFileExtension(file) {
|
|
177
|
+
const fileName = this.getFileName(file);
|
|
101
178
|
const fileNameParts = fileName.split('.');
|
|
102
179
|
if (fileNameParts.length >= 2) {
|
|
103
180
|
return fileNameParts[fileNameParts.length - 1];
|
|
@@ -105,11 +182,11 @@ export class FileUploadComponent {
|
|
|
105
182
|
return '';
|
|
106
183
|
}
|
|
107
184
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: FileUploadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
108
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.8", type: FileUploadComponent, selector: "app-file-upload", inputs: { options: "options", field: "field", _formControl: "_formControl" }, outputs: { modelChange: "modelChange" }, ngImport: i0, template: "<app-form-element-layout\n [options]=\"options\"\n [field]=\"field\"\n [controlTemplateRef]=\"controlTemplate\"\n [formControlRef]=\"_formControl\"\n></app-form-element-layout>\n<ng-template #controlTemplate>\n <p-fileUpload\n [mode]=\"options?.fileInputMode ?? 'advanced'\"\n [styleClass]=\"'kitsng-uploader'\"\n [ngClass]=\"{'ng-invalid ng-dirty': (_formControl.errors && (_formControl.dirty || _formControl.touched)) ?? false}\"\n [multiple]=\"options?.multiple ?? false\"\n [fileLimit]=\"options?.fileLimit\"\n [disabled]=\"_formControl.disabled\"\n [accept]=\"options?.accept ?? 'image/*'\"\n [chooseLabel]= \"options?.chooseLabel ?? null\"\n [chooseIcon]= \"options?.chooseIcon ?? null\"\n [chooseStyleClass]= \"options?.chooseStyleClass ?? null\"\n [maxFileSize]=\"options?.maxFileSize?? 1000000\"\n [showCancelButton]=\"false\"\n [showUploadButton]=\"false\"\n [customUpload]=\"true\"\n [files]=\"selectedFiles\"\n (onSelect)=\"onUploadImage($event)\"\n (onImageError)=\"onImageError($event)\"\n (onRemove)=\"onRemoveImage($event)\"\n >\n <ng-template pTemplate=\"toolbar\">\n <ng-container *ngIf=\"options?.
|
|
185
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.8", type: FileUploadComponent, selector: "app-file-upload", inputs: { options: "options", field: "field", _formControl: "_formControl" }, outputs: { modelChange: "modelChange" }, ngImport: i0, template: "<app-form-element-layout\n [options]=\"options\"\n [field]=\"field\"\n [controlTemplateRef]=\"controlTemplate\"\n [formControlRef]=\"_formControl\"\n></app-form-element-layout>\n<ng-template #controlTemplate>\n <p-fileUpload\n [mode]=\"options?.fileInputMode ?? 'advanced'\"\n [styleClass]=\"'kitsng-uploader'\"\n [ngClass]=\"{'ng-invalid ng-dirty': (_formControl.errors && (_formControl.dirty || _formControl.touched)) ?? false}\"\n [multiple]=\"options?.multiple ?? false\"\n [fileLimit]=\"options?.fileLimit\"\n [disabled]=\"_formControl.disabled\"\n [accept]=\"options?.accept ?? 'image/*'\"\n [chooseLabel]= \"options?.chooseLabel ?? null\"\n [chooseIcon]= \"options?.chooseIcon ?? null\"\n [chooseStyleClass]= \"options?.chooseStyleClass ?? null\"\n [maxFileSize]=\"options?.maxFileSize?? 1000000\"\n [showCancelButton]=\"false\"\n [showUploadButton]=\"false\"\n [customUpload]=\"true\"\n [files]=\"selectedFiles\"\n (onSelect)=\"onUploadImage($event)\"\n (onImageError)=\"onImageError($event)\"\n (onRemove)=\"onRemoveImage($event)\"\n >\n <ng-template pTemplate=\"toolbar\">\n <ng-container *ngIf=\"options?.toolbarTemplate; else defaultToolbar\">\n <ng-container *ngTemplateOutlet=\"options.toolbarTemplate; context: { options: options, field: field, control: _formControl }\"></ng-container>\n </ng-container>\n <ng-template #defaultToolbar>\n <ng-container *ngIf=\"options?.showUploadMessage\">\n <div class=\"flex d-flex align-items-center justify-content-center flex-column\">\n <i class=\"pi pi-cloud-upload border-2 border-circle p-5 text-4xl text-400 border-400\"></i>\n <p class=\"mt-4 mb-0\">Drag and drop files to here to upload.</p>\n </div>\n </ng-container>\n </ng-template>\n </ng-template>\n <ng-template pTemplate=\"content\">\n <div *ngIf=\"uplodedFiles.length > 0\">\n <h5>Uploaded Files</h5>\n <div class=\"flex d-flex flex-wrap p-0 sm:p-5 gap-3\">\n <ng-container *ngFor=\"let file of uplodedFiles\">\n <ng-container *ngIf=\"options?.filePreviewTemplate; else defaultUploadedPreview\">\n <ng-container [ngTemplateOutlet]=\"options.filePreviewTemplate\" [ngTemplateOutletContext]=\"{ $implicit: file, file: file, isUploaded: true, remove: removeFileCallback, options: options, field: field, control: _formControl }\"></ng-container>\n </ng-container>\n <ng-template #defaultUploadedPreview>\n <ng-container [ngTemplateOutlet]=\"filePreviewTemp\" [ngTemplateOutletContext]=\"{ $implicit: file, isUploaded: true }\"></ng-container>\n </ng-template>\n </ng-container>\n </div>\n </div>\n<!--\n <div *ngIf=\"selectedFiles.length > 0\" class=\"mt-4\">\n <h5>Selected Files</h5>\n <div class=\"flex d-flex flex-wrap p-0 sm:p-5 gap-3\">\n <ng-container *ngFor=\"let file of selectedFiles\">\n <ng-container *ngIf=\"options?.filePreviewTemplate; else defaultSelectedPreview\">\n <ng-container [ngTemplateOutlet]=\"options.filePreviewTemplate\" [ngTemplateOutletContext]=\"{ $implicit: file, file: file, isUploaded: false, remove: removeFileCallback, options: options, field: field, control: _formControl }\"></ng-container>\n </ng-container>\n <ng-template #defaultSelectedPreview>\n <ng-container [ngTemplateOutlet]=\"filePreviewTemp\" [ngTemplateOutletContext]=\"{ $implicit: file, isUploaded: false }\"></ng-container>\n </ng-template>\n </ng-container>\n </div>\n </div> -->\n\n <ng-template #filePreviewTemp let-file let-isUploaded=\"isUploaded\">\n <ng-container *ngIf=\"file\">\n <div class=\"card m-0 px-6 flex d-flex flex-column border-1 surface-border align-items-center gap-3 shadow-none\">\n <ng-container *ngIf=\"isImage(file);else notImageTemp\">\n <div>\n <img role=\"presentation\" [src]=\"getFileUrl(file)\" width=\"100\" height=\"50\" style=\"object-fit: cover;\" />\n </div>\n <a [href]=\"getFileUrl(file)\" target=\"_blank\" >\n <span class=\"font-semibold\">{{getFileName(file)}}</span>\n </a>\n </ng-container>\n <ng-template #notImageTemp>\n <div>\n <img role=\"presentation\" [src]=\"getFileExtension(file) | fileTypeUrl\" width=\"48\" height=\"48\" />\n </div>\n <a [href]=\"getFileUrl(file)\" target=\"_blank\" [attr.download]=\"isUploaded ? '' : null\">\n <span class=\"font-semibold\">{{getFileName(file) | slice:0:18}}...</span>\n </a>\n </ng-template>\n <p-button *ngIf=\"options?.showRemoveButton !== false\" icon=\"pi pi-times\" label=\"Remove\" styleClass=\"p-button-outlined p-button-rounded p-button-danger\" (onClick)=\"removeFile(file)\"></p-button>\n </div>\n </ng-container>\n </ng-template>\n </ng-template>\n </p-fileUpload>\n <app-field-errors\n [customErrorMessages]=\"options?.errorMessages || {}\"\n [controlName]=\"options?.formControlName\"\n [errors]=\"getErrors()\"\n [errorMessage]=\"options.errorMessage\"\n [showErrors]=\"_formControl.dirty || _formControl.touched\"></app-field-errors>\n</ng-template>\n", styles: [":is() :is(p-fileUpload.ng-dirty.ng-invalid .p-fileupload-content,p-fileUpload.ng-dirty.ng-invalid .p-fileupload-buttonbar){border-color:#f44336!important}:is() .kitsng-uploader .p-fileupload-content{border-top:0!important}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i3.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i4.FileUpload, selector: "p-fileUpload", inputs: ["name", "url", "method", "multiple", "accept", "disabled", "auto", "withCredentials", "maxFileSize", "invalidFileSizeMessageSummary", "invalidFileSizeMessageDetail", "invalidFileTypeMessageSummary", "invalidFileTypeMessageDetail", "invalidFileLimitMessageDetail", "invalidFileLimitMessageSummary", "style", "styleClass", "previewWidth", "chooseLabel", "uploadLabel", "cancelLabel", "chooseIcon", "uploadIcon", "cancelIcon", "showUploadButton", "showCancelButton", "mode", "headers", "customUpload", "fileLimit", "uploadStyleClass", "cancelStyleClass", "removeStyleClass", "chooseStyleClass", "files"], outputs: ["onBeforeUpload", "onSend", "onUpload", "onError", "onClear", "onRemove", "onSelect", "onProgress", "uploadHandler", "onImageError", "onRemoveUploadedFile"] }, { kind: "component", type: i5.FormElementLayoutComponent, selector: "app-form-element-layout", inputs: ["options", "field", "controlTemplateRef", "formControlRef", "customTemplate"] }, { kind: "component", type: i6.FieldErrorsComponent, selector: "app-field-errors", inputs: ["errors", "errorMessage", "controlName", "customErrorMessages", "showErrors"] }, { kind: "pipe", type: i1.SlicePipe, name: "slice" }, { kind: "pipe", type: i7.FileTypeUrlPipe, name: "fileTypeUrl" }] }); }
|
|
109
186
|
}
|
|
110
187
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: FileUploadComponent, decorators: [{
|
|
111
188
|
type: Component,
|
|
112
|
-
args: [{ selector: 'app-file-upload', template: "<app-form-element-layout\n [options]=\"options\"\n [field]=\"field\"\n [controlTemplateRef]=\"controlTemplate\"\n [formControlRef]=\"_formControl\"\n></app-form-element-layout>\n<ng-template #controlTemplate>\n <p-fileUpload\n [mode]=\"options?.fileInputMode ?? 'advanced'\"\n [styleClass]=\"'kitsng-uploader'\"\n [ngClass]=\"{'ng-invalid ng-dirty': (_formControl.errors && (_formControl.dirty || _formControl.touched)) ?? false}\"\n [multiple]=\"options?.multiple ?? false\"\n [fileLimit]=\"options?.fileLimit\"\n [disabled]=\"_formControl.disabled\"\n [accept]=\"options?.accept ?? 'image/*'\"\n [chooseLabel]= \"options?.chooseLabel ?? null\"\n [chooseIcon]= \"options?.chooseIcon ?? null\"\n [chooseStyleClass]= \"options?.chooseStyleClass ?? null\"\n [maxFileSize]=\"options?.maxFileSize?? 1000000\"\n [showCancelButton]=\"false\"\n [showUploadButton]=\"false\"\n [customUpload]=\"true\"\n [files]=\"selectedFiles\"\n (onSelect)=\"onUploadImage($event)\"\n (onImageError)=\"onImageError($event)\"\n (onRemove)=\"onRemoveImage($event)\"\n >\n <ng-template pTemplate=\"toolbar\">\n <ng-container *ngIf=\"options?.
|
|
189
|
+
args: [{ selector: 'app-file-upload', template: "<app-form-element-layout\n [options]=\"options\"\n [field]=\"field\"\n [controlTemplateRef]=\"controlTemplate\"\n [formControlRef]=\"_formControl\"\n></app-form-element-layout>\n<ng-template #controlTemplate>\n <p-fileUpload\n [mode]=\"options?.fileInputMode ?? 'advanced'\"\n [styleClass]=\"'kitsng-uploader'\"\n [ngClass]=\"{'ng-invalid ng-dirty': (_formControl.errors && (_formControl.dirty || _formControl.touched)) ?? false}\"\n [multiple]=\"options?.multiple ?? false\"\n [fileLimit]=\"options?.fileLimit\"\n [disabled]=\"_formControl.disabled\"\n [accept]=\"options?.accept ?? 'image/*'\"\n [chooseLabel]= \"options?.chooseLabel ?? null\"\n [chooseIcon]= \"options?.chooseIcon ?? null\"\n [chooseStyleClass]= \"options?.chooseStyleClass ?? null\"\n [maxFileSize]=\"options?.maxFileSize?? 1000000\"\n [showCancelButton]=\"false\"\n [showUploadButton]=\"false\"\n [customUpload]=\"true\"\n [files]=\"selectedFiles\"\n (onSelect)=\"onUploadImage($event)\"\n (onImageError)=\"onImageError($event)\"\n (onRemove)=\"onRemoveImage($event)\"\n >\n <ng-template pTemplate=\"toolbar\">\n <ng-container *ngIf=\"options?.toolbarTemplate; else defaultToolbar\">\n <ng-container *ngTemplateOutlet=\"options.toolbarTemplate; context: { options: options, field: field, control: _formControl }\"></ng-container>\n </ng-container>\n <ng-template #defaultToolbar>\n <ng-container *ngIf=\"options?.showUploadMessage\">\n <div class=\"flex d-flex align-items-center justify-content-center flex-column\">\n <i class=\"pi pi-cloud-upload border-2 border-circle p-5 text-4xl text-400 border-400\"></i>\n <p class=\"mt-4 mb-0\">Drag and drop files to here to upload.</p>\n </div>\n </ng-container>\n </ng-template>\n </ng-template>\n <ng-template pTemplate=\"content\">\n <div *ngIf=\"uplodedFiles.length > 0\">\n <h5>Uploaded Files</h5>\n <div class=\"flex d-flex flex-wrap p-0 sm:p-5 gap-3\">\n <ng-container *ngFor=\"let file of uplodedFiles\">\n <ng-container *ngIf=\"options?.filePreviewTemplate; else defaultUploadedPreview\">\n <ng-container [ngTemplateOutlet]=\"options.filePreviewTemplate\" [ngTemplateOutletContext]=\"{ $implicit: file, file: file, isUploaded: true, remove: removeFileCallback, options: options, field: field, control: _formControl }\"></ng-container>\n </ng-container>\n <ng-template #defaultUploadedPreview>\n <ng-container [ngTemplateOutlet]=\"filePreviewTemp\" [ngTemplateOutletContext]=\"{ $implicit: file, isUploaded: true }\"></ng-container>\n </ng-template>\n </ng-container>\n </div>\n </div>\n<!--\n <div *ngIf=\"selectedFiles.length > 0\" class=\"mt-4\">\n <h5>Selected Files</h5>\n <div class=\"flex d-flex flex-wrap p-0 sm:p-5 gap-3\">\n <ng-container *ngFor=\"let file of selectedFiles\">\n <ng-container *ngIf=\"options?.filePreviewTemplate; else defaultSelectedPreview\">\n <ng-container [ngTemplateOutlet]=\"options.filePreviewTemplate\" [ngTemplateOutletContext]=\"{ $implicit: file, file: file, isUploaded: false, remove: removeFileCallback, options: options, field: field, control: _formControl }\"></ng-container>\n </ng-container>\n <ng-template #defaultSelectedPreview>\n <ng-container [ngTemplateOutlet]=\"filePreviewTemp\" [ngTemplateOutletContext]=\"{ $implicit: file, isUploaded: false }\"></ng-container>\n </ng-template>\n </ng-container>\n </div>\n </div> -->\n\n <ng-template #filePreviewTemp let-file let-isUploaded=\"isUploaded\">\n <ng-container *ngIf=\"file\">\n <div class=\"card m-0 px-6 flex d-flex flex-column border-1 surface-border align-items-center gap-3 shadow-none\">\n <ng-container *ngIf=\"isImage(file);else notImageTemp\">\n <div>\n <img role=\"presentation\" [src]=\"getFileUrl(file)\" width=\"100\" height=\"50\" style=\"object-fit: cover;\" />\n </div>\n <a [href]=\"getFileUrl(file)\" target=\"_blank\" >\n <span class=\"font-semibold\">{{getFileName(file)}}</span>\n </a>\n </ng-container>\n <ng-template #notImageTemp>\n <div>\n <img role=\"presentation\" [src]=\"getFileExtension(file) | fileTypeUrl\" width=\"48\" height=\"48\" />\n </div>\n <a [href]=\"getFileUrl(file)\" target=\"_blank\" [attr.download]=\"isUploaded ? '' : null\">\n <span class=\"font-semibold\">{{getFileName(file) | slice:0:18}}...</span>\n </a>\n </ng-template>\n <p-button *ngIf=\"options?.showRemoveButton !== false\" icon=\"pi pi-times\" label=\"Remove\" styleClass=\"p-button-outlined p-button-rounded p-button-danger\" (onClick)=\"removeFile(file)\"></p-button>\n </div>\n </ng-container>\n </ng-template>\n </ng-template>\n </p-fileUpload>\n <app-field-errors\n [customErrorMessages]=\"options?.errorMessages || {}\"\n [controlName]=\"options?.formControlName\"\n [errors]=\"getErrors()\"\n [errorMessage]=\"options.errorMessage\"\n [showErrors]=\"_formControl.dirty || _formControl.touched\"></app-field-errors>\n</ng-template>\n", styles: [":is() :is(p-fileUpload.ng-dirty.ng-invalid .p-fileupload-content,p-fileUpload.ng-dirty.ng-invalid .p-fileupload-buttonbar){border-color:#f44336!important}:is() .kitsng-uploader .p-fileupload-content{border-top:0!important}\n"] }]
|
|
113
190
|
}], ctorParameters: () => [], propDecorators: { options: [{
|
|
114
191
|
type: Input
|
|
115
192
|
}], field: [{
|
|
@@ -117,4 +194,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImpor
|
|
|
117
194
|
}], _formControl: [{
|
|
118
195
|
type: Input
|
|
119
196
|
}] } });
|
|
120
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2l0c25nLWZvcm0tZmFjdG9yeS9zcmMvbGliL2tpdHNuZy1mb3JtLWZhY3RvcnkvY29tcG9uZW50cy9raXRzbmctZm9ybS1maWVsZHMvZmlsZS11cGxvYWQvZmlsZS11cGxvYWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2l0c25nLWZvcm0tZmFjdG9yeS9zcmMvbGliL2tpdHNuZy1mb3JtLWZhY3RvcnkvY29tcG9uZW50cy9raXRzbmctZm9ybS1maWVsZHMvZmlsZS11cGxvYWQvZmlsZS11cGxvYWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7QUFtQmpFLE1BQU0sT0FBTyxtQkFBbUI7SUFnQjlCO1FBZkE7OztXQUdHO1FBQ0gsV0FBTSxHQUFRLEVBQUUsQ0FBQztRQVFqQixnQkFBVyxHQUFHLE1BQU0sRUFBa0ksQ0FBQztRQUN2SixrQkFBYSxHQUFXLEVBQUUsQ0FBQztRQUMzQixpQkFBWSxHQUFhLEVBQUUsQ0FBQztJQUU1QixDQUFDO0lBQ0QsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMxQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN6QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO1lBQ2hELENBQUM7aUJBQUssSUFBRyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxLQUFLLFFBQVEsRUFBQyxDQUFDO2dCQUNsRCxJQUFJ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QUMsQ0FBQztRQUN2QyxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLElBQUksYUFBYSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM5QixPQUFPLGFBQWEsQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2pELENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7OEdBekdVLG1CQUFtQjtrR0FBbkIsbUJBQW1CLDhLQ25CaEMsdW9KQW9GQTs7MkZEakVhLG1CQUFtQjtrQkFkL0IsU0FBUzsrQkFDSSxpQkFBaUI7d0RBdUJwQixPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIG91dHB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IEZpbGVSZW1vdmVFdmVudCwgRmlsZVNlbGVjdEV2ZW50IH0gZnJvbSBcInByaW1lbmcvZmlsZXVwbG9hZFwiO1xuaW1wb3J0IHsgS2l0c25nRm9ybUZhY3RvcnlNb2RlbCB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL21vZGVscy9raXRzbmctZm9ybS1mYWN0b3J5XCI7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLWZpbGUtdXBsb2FkJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZmlsZS11cGxvYWQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlczpbYFxuICAgICAgICA6aG9zdCA6Om5nLWRlZXB7XG4gICAgICAgICAgICBwLWZpbGVVcGxvYWQubmctZGlydHkubmctaW52YWxpZCAucC1maWxldXBsb2FkLWNvbnRlbnQsIHAtZmlsZVVwbG9hZC5uZy1kaXJ0eS5uZy1pbnZhbGlkIC5wLWZpbGV1cGxvYWQtYnV0dG9uYmFye1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2Y0NDMzNiAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLmtpdHNuZy11cGxvYWRlciAucC1maWxldXBsb2FkLWNvbnRlbnR7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXRvcDogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgYF0sXG59KVxuZXhwb3J0IGNsYXNzIEZpbGVVcGxvYWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAvKipcbiAgICogKiBHZW5lcmFsXG4gICAqIEBlcnJvcnMgRm9ybSBjb250cm9sIGVycm9yc1xuICAgKi9cbiAgZXJyb3JzOiBhbnkgPSB7fTtcbiAgLyoqXG4gICAqICogSW5wdXRzXG4gICAqIEBvcHRpb25zIENvbmZpZ3VyYXRpb24gZm9yIHRoaXMgZm9ybSBmaWVsZFxuICAgKi9cbiAgQElucHV0KCkgb3B0aW9uczogYW55O1xuICBASW5wdXQoKSBmaWVsZDogYW55O1xuICBASW5wdXQoKSBfZm9ybUNvbnRyb2whOiBGb3JtQ29udHJvbDxhbnk+O1xuICBtb2RlbENoYW5nZSA9IG91dHB1dDx7IGV2ZW50OiBhbnksIHBhcmVudEZvcm1Hcm91cD86IEZvcm1Hcm91cDxhbnk+IHwgRm9ybUFycmF5PGFueT4gfCBudWxsLCBzZWxlY3RlZE9wdGlvbj86IGFueSwgZmllbGQ/OiBLaXRzbmdGb3JtRmFjdG9yeU1vZGVsIH0+KCk7XG4gIHNlbGVjdGVkRmlsZXM6IEZpbGVbXSA9IFtdO1xuICB1cGxvZGVkRmlsZXM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0cnVjdG9yKCkge1xuICB9XG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9mb3JtQ29udHJvbC52YWx1ZSkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLl9mb3JtQ29udHJvbC52YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMudXBsb2RlZEZpbGVzID0gdGhpcy5fZm9ybUNvbnRyb2wudmFsdWU7XG4gICAgICAgIH1lbHNlIGlmKHR5cGVvZiB0aGlzLl9mb3JtQ29udHJvbC52YWx1ZSA9PT0gJ3N0cmluZycpe1xuICAgICAgICAgICAgdGhpcy51cGxvZGVkRmlsZXMucHVzaCh0aGlzLl9mb3JtQ29udHJvbC52YWx1ZSlcbiAgICAgICAgfVxuICAgIH1cbiAgfVxuICBnZXRFcnJvcnMoKXtcbiAgICByZXR1cm4gdGhpcy5fZm9ybUNvbnRyb2wuZXJyb3JzO1xuICB9XG5cbiAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICogICAgICAgICAgICAgICAgSEVMUEVSU1xuICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuICBuZ01vZGVsQ2hhbmdlKCkge1xuICAgIHRoaXMubW9kZWxDaGFuZ2UuZW1pdCh7XG4gICAgICAgIGV2ZW50OiB0aGlzLl9mb3JtQ29udHJvbC52YWx1ZSxcbiAgICAgICAgcGFyZW50Rm9ybUdyb3VwOiB0aGlzLl9mb3JtQ29udHJvbC5wYXJlbnQsXG4gICAgICAgIHNlbGVjdGVkT3B0aW9uOiB0aGlzLl9mb3JtQ29udHJvbC52YWx1ZSxcbiAgICAgICAgZmllbGQ6IHRoaXMuZmllbGQsXG4gICAgfSk7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5uZ01vZGVsQ2hhbmdlKSB7XG4gICAgICB0aGlzLm9wdGlvbnM/Lm5nTW9kZWxDaGFuZ2UodGhpcy5fZm9ybUNvbnRyb2wudmFsdWUsIHRoaXMuX2Zvcm1Db250cm9sLnBhcmVudCwgdGhpcy5fZm9ybUNvbnRyb2wudmFsdWUsIHRoaXMuZmllbGQpO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZUZpbGVVcmwocmVtb3ZlZEZpbGVVcmw6IHN0cmluZykge1xuICAgIGlmICh0aGlzLm9wdGlvbnMub25SZW1vdmVGaWxlKSB7XG4gICAgICB0aGlzLm9wdGlvbnM/Lm9uUmVtb3ZlRmlsZShyZW1vdmVkRmlsZVVybCwgdGhpcy5fZm9ybUNvbnRyb2wucGFyZW50KTtcbiAgICB9XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnVwbG9kZWRGaWxlcy5maW5kSW5kZXgoZmlsZVVybD0+ZmlsZVVybCA9PSByZW1vdmVkRmlsZVVybCk7XG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgdGhpcy51cGxvZGVkRmlsZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cblxuICBvblVwbG9hZEltYWdlKGV2ZW50OiBGaWxlU2VsZWN0RXZlbnQpe1xuICAgIGNvbnN0IGZpbGVzID0gZXZlbnQuY3VycmVudEZpbGVzO1xuICAgIHRoaXMuc2VsZWN0ZWRGaWxlcyA9IGV2ZW50LmN1cnJlbnRGaWxlcztcbiAgICBpZiAoZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5fZm9ybUNvbnRyb2w/LnNldFZhbHVlKHRoaXMub3B0aW9ucz8ubXVsdGlwbGU/IHRoaXMuc2VsZWN0ZWRGaWxlczogZmlsZXNbMF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zPy5tdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhpcy5fZm9ybUNvbnRyb2w/LnNldFZhbHVlKG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRoaXMubmdNb2RlbENoYW5nZSgpO1xuICB9XG4gIG9uUmVtb3ZlSW1hZ2UoZXZlbnQ6IEZpbGVSZW1vdmVFdmVudCl7XG4gICAgY29uc3QgZmlsZSA9IGV2ZW50LmZpbGU7XG4gICAgaWYgKHRoaXMub3B0aW9ucz8ubXVsdGlwbGUpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnNlbGVjdGVkRmlsZXMuZmluZEluZGV4KGY9PmYgPT0gZmlsZSk7XG4gICAgICAgIGNvbnNvbGUubG9nKGluZGV4KTtcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuc2VsZWN0ZWRGaWxlcyk7XG4gICAgfVxuICAgIHRoaXMuX2Zvcm1Db250cm9sPy5zZXRWYWx1ZSh0aGlzLm9wdGlvbnM/Lm11bHRpcGxlPyB0aGlzLnNlbGVjdGVkRmlsZXMgOiBudWxsKTtcbiAgICB0aGlzLm5nTW9kZWxDaGFuZ2UoKTtcbiAgfVxuICBvbkltYWdlRXJyb3IoZXZlbnQ6IGFueSl7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnM/Lm11bHRpcGxlKSB7XG4gICAgICAgIHRoaXMuX2Zvcm1Db250cm9sPy5zZXRWYWx1ZShudWxsKTtcbiAgICB9XG4gICAgdGhpcy5uZ01vZGVsQ2hhbmdlKCk7XG4gIH1cbiAgaXNJbWFnZVVybCh1cmw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGltYWdlRXh0ZW5zaW9ucyA9IFsnanBnJywgJ2pwZWcnLCAncG5nJywgJ2dpZicsICdibXAnLCAnc3ZnJywgJ3dlYnAnXTtcbiAgICBjb25zdCBmaWxlRXh0ZW5zaW9uID0gdGhpcy5nZXRGaWxlRXh0ZW5zaW9uKHVybCk7XG4gICAgcmV0dXJuIGltYWdlRXh0ZW5zaW9ucy5pbmNsdWRlcyhmaWxlRXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCkpO1xuICB9XG4gIGdldEZpbGVOYW1lKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJ0cyA9IHVybC5zcGxpdCgnLycpO1xuICAgIGNvbnN0IGZpbGVOYW1lID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV07XG4gICAgcmV0dXJuIGZpbGVOYW1lID8/ICcnO1xuICB9XG4gIGdldEZpbGVFeHRlbnNpb24odXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGZpbGVOYW1lID0gdGhpcy5nZXRGaWxlTmFtZSh1cmwpO1xuICAgIGNvbnN0IGZpbGVOYW1lUGFydHMgPSBmaWxlTmFtZS5zcGxpdCgnLicpO1xuICAgIGlmIChmaWxlTmFtZVBhcnRzLmxlbmd0aCA+PSAyKSB7XG4gICAgICByZXR1cm4gZmlsZU5hbWVQYXJ0c1tmaWxlTmFtZVBhcnRzLmxlbmd0aCAtIDFdO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cbn1cbiIsIjxhcHAtZm9ybS1lbGVtZW50LWxheW91dFxuICBbb3B0aW9uc109XCJvcHRpb25zXCJcbiAgW2ZpZWxkXT1cImZpZWxkXCJcbiAgW2NvbnRyb2xUZW1wbGF0ZVJlZl09XCJjb250cm9sVGVtcGxhdGVcIlxuICBbZm9ybUNvbnRyb2xSZWZdPVwiX2Zvcm1Db250cm9sXCJcbj48L2FwcC1mb3JtLWVsZW1lbnQtbGF5b3V0PlxuPG5nLXRlbXBsYXRlICNjb250cm9sVGVtcGxhdGU+XG4gICAgPHAtZmlsZVVwbG9hZFxuICAgICAgICBbbW9kZV09XCJvcHRpb25zPy5maWxlSW5wdXRNb2RlID8/ICdhZHZhbmNlZCdcIlxuICAgICAgICBbc3R5bGVDbGFzc109XCIna2l0c25nLXVwbG9hZGVyJ1wiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsnbmctaW52YWxpZCBuZy1kaXJ0eSc6IChfZm9ybUNvbnRyb2wuZXJyb3JzICYmIChfZm9ybUNvbnRyb2wuZGlydHkgfHwgX2Zvcm1Db250cm9sLnRvdWNoZWQpKSA/PyBmYWxzZX1cIlxuICAgICAgICBbbXVsdGlwbGVdPVwib3B0aW9ucz8ubXVsdGlwbGUgPz8gZmFsc2VcIlxuICAgICAgICBbZmlsZUxpbWl0XT1cIm9wdGlvbnM/LmZpbGVMaW1pdFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJfZm9ybUNvbnRyb2wuZGlzYWJsZWRcIlxuICAgICAgICBbYWNjZXB0XT1cIm9wdGlvbnM/LmFjY2VwdCA/PyAnaW1hZ2UvKidcIlxuICAgICAgICBbY2hvb3NlTGFiZWxdPSBcIm9wdGlvbnM/LmNob29zZUxhYmVsID8/IG51bGxcIlxuICAgICAgICBbY2hvb3NlSWNvbl09IFwib3B0aW9ucz8uY2hvb3NlSWNvbiA/PyBudWxsXCJcbiAgICAgICAgW2Nob29zZVN0eWxlQ2xhc3NdPSBcIm9wdGlvbnM/LmNob29zZVN0eWxlQ2xhc3MgPz8gbnVsbFwiXG4gICAgICAgIFttYXhGaWxlU2l6ZV09XCJvcHRpb25zPy5tYXhGaWxlU2l6ZT8/IDEwMDAwMDBcIlxuICAgICAgICBbc2hvd0NhbmNlbEJ1dHRvbl09XCJmYWxzZVwiXG4gICAgICAgIFtzaG93VXBsb2FkQnV0dG9uXT1cImZhbHNlXCJcbiAgICAgICAgW2N1c3RvbVVwbG9hZF09XCJ0cnVlXCJcbiAgICAgICAgW2ZpbGVzXT1cInNlbGVjdGVkRmlsZXNcIlxuICAgICAgICAob25TZWxlY3QpPVwib25VcGxvYWRJbWFnZSgkZXZlbnQpXCJcbiAgICAgICAgKG9uSW1hZ2VFcnJvcik9XCJvbkltYWdlRXJyb3IoJGV2ZW50KVwiXG4gICAgICAgIChvblJlbW92ZSk9XCJvblJlbW92ZUltYWdlKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJ0b29sYmFyXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9ucz8uc2hvd1VwbG9hZE1lc3NhZ2U7ZWxzZSBlbXB0eVRlbXBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZmxleC1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1jbG91ZC11cGxvYWQgYm9yZGVyLTIgYm9yZGVyLWNpcmNsZSBwLTUgdGV4dC00eGwgdGV4dC00MDAgYm9yZGVyLTQwMFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtdC00IG1iLTBcIj5EcmFnIGFuZCBkcm9wIGZpbGVzIHRvIGhlcmUgdG8gdXBsb2FkLjwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNlbXB0eVRlbXA+XG5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjb250ZW50XCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidXBsb2RlZEZpbGVzLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICA8aDU+VXBsb2FkZWQgRmlsZXM8L2g1PlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb25zPy5tdWx0aXBsZSAmJiB1cGxvZGVkRmlsZXMubGVuZ3RoID4gMDtlbHNlIHNpbmdsZUZpbGVPckVtcHR5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGQtZmxleCBmbGV4LXdyYXAgcC0wIHNtOnAtNSBnYXAtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmlsZSBvZiB1cGxvZGVkRmlsZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbGVQcmV2aWV3VGVtcFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7JGltcGxpY2l0OiBmaWxlfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2luZ2xlRmlsZU9yRW1wdHk+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmlsZVByZXZpZXdUZW1wXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6IHVwbG9kZWRGaWxlc1swXX1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZmlsZVByZXZpZXdUZW1wIGxldC1maWxlPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgbS0wIHB4LTYgZmxleCBkLWZsZXggZmxleC1jb2x1bW4gYm9yZGVyLTEgc3VyZmFjZS1ib3JkZXIgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zIHNoYWRvdy1ub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzSW1hZ2VVcmwoZmlsZSk7ZWxzZSBub3RJbWFnZVRlbXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgcm9sZT1cInByZXNlbnRhdGlvblwiICBbc3JjXT1cIm9wdGlvbnM/LmFwaUJhc2VVcmwgPyAob3B0aW9ucz8uYXBpQmFzZVVybCArIGZpbGUpOiBmaWxlXCIgd2lkdGg9XCIxMDBcIiBoZWlnaHQ9XCI1MFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwie3tmaWxlfX1cIiB0YXJnZXQ9XCJfYmxhbmtcIiA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LXNlbWlib2xkXCI+e3tnZXRGaWxlTmFtZShmaWxlKX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3RJbWFnZVRlbXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHJvbGU9XCJwcmVzZW50YXRpb25cIiAgW3NyY109XCJnZXRGaWxlRXh0ZW5zaW9uKGZpbGUpIHwgZmlsZVR5cGVVcmxcIiB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cInt7b3B0aW9ucz8uYXBpQmFzZVVybCA/IChvcHRpb25zPy5hcGlCYXNlVXJsICsgZmlsZSk6IGZpbGV9fVwiIHRhcmdldD1cIl9ibGFua1wiIGRvd25sb2FkICNmaWxlVXJsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1zZW1pYm9sZFwiPnt7Z2V0RmlsZU5hbWUoZmlsZSkgfCBzbGljZTowOjE4fX0uLi48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLWJ1dHRvbiBpY29uPVwicGkgcGktdGltZXNcIiBsYWJlbD1cIlJlbW92ZVwiIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1vdXRsaW5lZCBwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLWRhbmdlclwiIChvbkNsaWNrKT1cInJlbW92ZUZpbGVVcmwoZmlsZSlcIj48L3AtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L3AtZmlsZVVwbG9hZD5cbiAgICA8YXBwLWZpZWxkLWVycm9yc1xuICAgIFtjdXN0b21FcnJvck1lc3NhZ2VzXT1cIm9wdGlvbnM/LmVycm9yTWVzc2FnZXMgfHwge31cIlxuICAgIFtjb250cm9sTmFtZV09XCJvcHRpb25zPy5mb3JtQ29udHJvbE5hbWVcIlxuICAgIFtlcnJvcnNdPVwiZ2V0RXJyb3JzKClcIlxuICAgIFtlcnJvck1lc3NhZ2VdPVwib3B0aW9ucy5lcnJvck1lc3NhZ2VcIlxuICAgIFtzaG93RXJyb3JzXT1cIl9mb3JtQ29udHJvbC5kaXJ0eSB8fCBfZm9ybUNvbnRyb2wudG91Y2hlZFwiPjwvYXBwLWZpZWxkLWVycm9ycz5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
197
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2l0c25nLWZvcm0tZmFjdG9yeS9zcmMvbGliL2tpdHNuZy1mb3JtLWZhY3RvcnkvY29tcG9uZW50cy9raXRzbmctZm9ybS1maWVsZHMvZmlsZS11cGxvYWQvZmlsZS11cGxvYWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2l0c25nLWZvcm0tZmFjdG9yeS9zcmMvbGliL2tpdHNuZy1mb3JtLWZhY3RvcnkvY29tcG9uZW50cy9raXRzbmctZm9ybS1maWVsZHMvZmlsZS11cGxvYWQvZmlsZS11cGxvYWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7O0FBbUI1RSxNQUFNLE9BQU8sbUJBQW1CO0lBdUI5QjtRQXRCQTs7O1dBR0c7UUFDSCxXQUFNLEdBQVEsRUFBRSxDQUFDO1FBUWpCLGdCQUFXLEdBQUcsTUFBTSxFQUFrSSxDQUFDO1FBQ3ZKLGtCQUFhLEdBQVcsRUFBRSxDQUFDO1FBQzNCLGlCQUFZLEdBQWEsRUFBRSxDQUFDO1FBRXBCLGVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBZ0IsQ0FBQztRQUU3Qyx1QkFBa0IsR0FBRyxDQUFDLElBQVMsRUFBRSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsQ0FBQyxDQUFDO0lBRWEsQ0FBQztJQUVoQixRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzFCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3pD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QW1CLDhLQ25CaEMsdWlNQXFHQTs7MkZEbEZhLG1CQUFtQjtrQkFkL0IsU0FBUzsrQkFDSSxpQkFBaUI7d0RBdUJwQixPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIE9uRGVzdHJveSwgb3V0cHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgRmlsZVJlbW92ZUV2ZW50LCBGaWxlU2VsZWN0RXZlbnQgfSBmcm9tIFwicHJpbWVuZy9maWxldXBsb2FkXCI7XG5pbXBvcnQgeyBLaXRzbmdGb3JtRmFjdG9yeU1vZGVsIH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvbW9kZWxzL2tpdHNuZy1mb3JtLWZhY3RvcnlcIjtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtZmlsZS11cGxvYWQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVzOltgXG4gICAgICAgIDpob3N0IDo6bmctZGVlcHtcbiAgICAgICAgICAgIHAtZmlsZVVwbG9hZC5uZy1kaXJ0eS5uZy1pbnZhbGlkIC5wLWZpbGV1cGxvYWQtY29udGVudCwgcC1maWxlVXBsb2FkLm5nLWRpcnR5Lm5nLWludmFsaWQgLnAtZmlsZXVwbG9hZC1idXR0b25iYXJ7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjZjQ0MzM2ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAua2l0c25nLXVwbG9hZGVyIC5wLWZpbGV1cGxvYWQtY29udGVudHtcbiAgICAgICAgICAgICAgICBib3JkZXItdG9wOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBgXSxcbn0pXG5leHBvcnQgY2xhc3MgRmlsZVVwbG9hZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqICogR2VuZXJhbFxuICAgKiBAZXJyb3JzIEZvcm0gY29udHJvbCBlcnJvcnNcbiAgICovXG4gIGVycm9yczogYW55ID0ge307XG4gIC8qKlxuICAgKiAqIElucHV0c1xuICAgKiBAb3B0aW9ucyBDb25maWd1cmF0aW9uIGZvciB0aGlzIGZvcm0gZmllbGRcbiAgICovXG4gIEBJbnB1dCgpIG9wdGlvbnM6IGFueTtcbiAgQElucHV0KCkgZmllbGQ6IGFueTtcbiAgQElucHV0KCkgX2Zvcm1Db250cm9sITogRm9ybUNvbnRyb2w8YW55PjtcbiAgbW9kZWxDaGFuZ2UgPSBvdXRwdXQ8eyBldmVudDogYW55LCBwYXJlbnRGb3JtR3JvdXA/OiBGb3JtR3JvdXA8YW55PiB8IEZvcm1BcnJheTxhbnk+IHwgbnVsbCwgc2VsZWN0ZWRPcHRpb24/OiBhbnksIGZpZWxkPzogS2l0c25nRm9ybUZhY3RvcnlNb2RlbCB9PigpO1xuICBzZWxlY3RlZEZpbGVzOiBGaWxlW10gPSBbXTtcbiAgdXBsb2RlZEZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIHByaXZhdGUgb2JqZWN0VXJscyA9IG5ldyBNYXA8RmlsZSwgc3RyaW5nPigpO1xuXG4gIHJlbW92ZUZpbGVDYWxsYmFjayA9IChmaWxlOiBhbnkpID0+IHtcbiAgICB0aGlzLnJlbW92ZUZpbGUoZmlsZSk7XG4gIH07XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9mb3JtQ29udHJvbC52YWx1ZSkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLl9mb3JtQ29udHJvbC52YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMudXBsb2RlZEZpbGVzID0gWy4uLnRoaXMuX2Zvcm1Db250cm9sLnZhbHVlXTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5fZm9ybUNvbnRyb2wudmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLnVwbG9kZWRGaWxlcy5wdXNoKHRoaXMuX2Zvcm1Db250cm9sLnZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMub2JqZWN0VXJscy5mb3JFYWNoKHVybCA9PiBVUkwucmV2b2tlT2JqZWN0VVJMKHVybCkpO1xuICAgIHRoaXMub2JqZWN0VXJscy5jbGVhcigpO1xuICB9XG5cbiAgZ2V0RXJyb3JzKCl7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1Db250cm9sLmVycm9ycztcbiAgfVxuXG4gIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAqICAgICAgICAgICAgICAgIEhFTFBFUlNcbiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbiAgbmdNb2RlbENoYW5nZSgpIHtcbiAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQoe1xuICAgICAgICBldmVudDogdGhpcy5fZm9ybUNvbnRyb2wudmFsdWUsXG4gICAgICAgIHBhcmVudEZvcm1Hcm91cDogdGhpcy5fZm9ybUNvbnRyb2wucGFyZW50LFxuICAgICAgICBzZWxlY3RlZE9wdGlvbjogdGhpcy5fZm9ybUNvbnRyb2wudmFsdWUsXG4gICAgICAgIGZpZWxkOiB0aGlzLmZpZWxkLFxuICAgIH0pO1xuICAgIGlmICh0aGlzLm9wdGlvbnM/Lm5nTW9kZWxDaGFuZ2UpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5uZ01vZGVsQ2hhbmdlKHRoaXMuX2Zvcm1Db250cm9sLnZhbHVlLCB0aGlzLl9mb3JtQ29udHJvbC5wYXJlbnQsIHRoaXMuX2Zvcm1Db250cm9sLnZhbHVlLCB0aGlzLmZpZWxkKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVGaWxlKGZpbGU6IGFueSkge1xuICAgIGlmICh0eXBlb2YgZmlsZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMucmVtb3ZlRmlsZVVybChmaWxlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW1vdmVTZWxlY3RlZEZpbGUoZmlsZSk7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlRmlsZVVybChyZW1vdmVkRmlsZVVybDogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucz8ub25SZW1vdmVGaWxlKSB7XG4gICAgICB0aGlzLm9wdGlvbnMub25SZW1vdmVGaWxlKHJlbW92ZWRGaWxlVXJsLCB0aGlzLl9mb3JtQ29udHJvbC5wYXJlbnQpO1xuICAgIH1cbiAgICBjb25zdCBpbmRleCA9IHRoaXMudXBsb2RlZEZpbGVzLmZpbmRJbmRleChmaWxlVXJsID0+IGZpbGVVcmwgPT09IHJlbW92ZWRGaWxlVXJsKTtcbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICB0aGlzLnVwbG9kZWRGaWxlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zPy5tdWx0aXBsZSkge1xuICAgICAgdGhpcy5fZm9ybUNvbnRyb2w/LnNldFZhbHVlKFsuLi50aGlzLnVwbG9kZWRGaWxlcywgLi4udGhpcy5zZWxlY3RlZEZpbGVzXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2Zvcm1Db250cm9sPy5zZXRWYWx1ZShudWxsKTtcbiAgICB9XG4gICAgdGhpcy5uZ01vZGVsQ2hhbmdlKCk7XG4gIH1cblxuICByZW1vdmVTZWxlY3RlZEZpbGUoZmlsZTogRmlsZSkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zZWxlY3RlZEZpbGVzLmluZGV4T2YoZmlsZSk7XG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgY29uc3QgdXJsID0gdGhpcy5vYmplY3RVcmxzLmdldChmaWxlKTtcbiAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xuICAgICAgICB0aGlzLm9iamVjdFVybHMuZGVsZXRlKGZpbGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zPy5tdWx0aXBsZSkge1xuICAgICAgdGhpcy5fZm9ybUNvbnRyb2w/LnNldFZhbHVlKFsuLi50aGlzLnVwbG9kZWRGaWxlcywgLi4udGhpcy5zZWxlY3RlZEZpbGVzXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2Zvcm1Db250cm9sPy5zZXRWYWx1ZShudWxsKTtcbiAgICB9XG4gICAgdGhpcy5uZ01vZGVsQ2hhbmdlKCk7XG4gIH1cblxuICBvblVwbG9hZEltYWdlKGV2ZW50OiBGaWxlU2VsZWN0RXZlbnQpe1xuICAgIGNvbnN0IGZpbGVzID0gZXZlbnQuY3VycmVudEZpbGVzO1xuICAgIHRoaXMuc2VsZWN0ZWRGaWxlcyA9IGV2ZW50LmN1cnJlbnRGaWxlcztcbiAgICBpZiAoZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucz8ubXVsdGlwbGUpIHtcbiAgICAgICAgdGhpcy5fZm9ybUNvbnRyb2w/LnNldFZhbHVlKFsuLi50aGlzLnVwbG9kZWRGaWxlcywgLi4udGhpcy5zZWxlY3RlZEZpbGVzXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnVwbG9kZWRGaWxlcyA9IFtdOyAvLyBjbGVhciBvbGQgc2luZ2xlIGZpbGUgVVJMXG4gICAgICAgIHRoaXMuX2Zvcm1Db250cm9sPy5zZXRWYWx1ZShmaWxlc1swXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnM/Lm11bHRpcGxlKSB7XG4gICAgICAgICAgICB0aGlzLl9mb3JtQ29udHJvbD8uc2V0VmFsdWUobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5uZ01vZGVsQ2hhbmdlKCk7XG4gIH1cblxuICBvblJlbW92ZUltYWdlKGV2ZW50OiBGaWxlUmVtb3ZlRXZlbnQpe1xuICAgIGNvbnN0IGZpbGUgPSBldmVudC5maWxlO1xuICAgIGlmICh0aGlzLm9wdGlvbnM/Lm11bHRpcGxlKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zZWxlY3RlZEZpbGVzLmZpbmRJbmRleChmPT5mID09PSBmaWxlKTtcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnM/Lm11bHRpcGxlKSB7XG4gICAgICB0aGlzLl9mb3JtQ29udHJvbD8uc2V0VmFsdWUoWy4uLnRoaXMudXBsb2RlZEZpbGVzLCAuLi50aGlzLnNlbGVjdGVkRmlsZXNdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZm9ybUNvbnRyb2w/LnNldFZhbHVlKG51bGwpO1xuICAgIH1cbiAgICB0aGlzLm5nTW9kZWxDaGFuZ2UoKTtcbiAgfVxuXG4gIG9uSW1hZ2VFcnJvcihldmVudDogYW55KXtcbiAgICBpZiAoIXRoaXMub3B0aW9ucz8ubXVsdGlwbGUpIHtcbiAgICAgICAgdGhpcy5fZm9ybUNvbnRyb2w/LnNldFZhbHVlKG51bGwpO1xuICAgIH1cbiAgICB0aGlzLm5nTW9kZWxDaGFuZ2UoKTtcbiAgfVxuXG4gIGdldEZpbGVVcmwoZmlsZTogYW55KTogc3RyaW5nIHtcbiAgICBpZiAodHlwZW9mIGZpbGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zPy5hcGlCYXNlVXJsID8gKHRoaXMub3B0aW9ucy5hcGlCYXNlVXJsICsgZmlsZSkgOiBmaWxlO1xuICAgIH0gZWxzZSBpZiAoZmlsZSBpbnN0YW5jZW9mIEZpbGUpIHtcbiAgICAgIGlmICghdGhpcy5vYmplY3RVcmxzLmhhcyhmaWxlKSkge1xuICAgICAgICB0aGlzLm9iamVjdFVybHMuc2V0KGZpbGUsIFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMub2JqZWN0VXJscy5nZXQoZmlsZSkhO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpc0ltYWdlKGZpbGU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgZmlsZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzSW1hZ2VVcmwoZmlsZSk7XG4gICAgfSBlbHNlIGlmIChmaWxlIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgcmV0dXJuIGZpbGUudHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaXNJbWFnZVVybCh1cmw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGltYWdlRXh0ZW5zaW9ucyA9IFsnanBnJywgJ2pwZWcnLCAncG5nJywgJ2dpZicsICdibXAnLCAnc3ZnJywgJ3dlYnAnXTtcbiAgICBjb25zdCBmaWxlRXh0ZW5zaW9uID0gdGhpcy5nZXRGaWxlRXh0ZW5zaW9uKHVybCk7XG4gICAgcmV0dXJuIGltYWdlRXh0ZW5zaW9ucy5pbmNsdWRlcyhmaWxlRXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCkpO1xuICB9XG5cbiAgZ2V0RmlsZU5hbWUoZmlsZTogYW55KTogc3RyaW5nIHtcbiAgICBpZiAodHlwZW9mIGZpbGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBwYXJ0cyA9IGZpbGUuc3BsaXQoJy8nKTtcbiAgICAgIGNvbnN0IGZpbGVOYW1lID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV07XG4gICAgICByZXR1cm4gZmlsZU5hbWUgPz8gJyc7XG4gICAgfSBlbHNlIGlmIChmaWxlIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgcmV0dXJuIGZpbGUubmFtZTtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgZ2V0RmlsZUV4dGVuc2lvbihmaWxlOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGZpbGVOYW1lID0gdGhpcy5nZXRGaWxlTmFtZShmaWxlKTtcbiAgICBjb25zdCBmaWxlTmFtZVBhcnRzID0gZmlsZU5hbWUuc3BsaXQoJy4nKTtcbiAgICBpZiAoZmlsZU5hbWVQYXJ0cy5sZW5ndGggPj0gMikge1xuICAgICAgcmV0dXJuIGZpbGVOYW1lUGFydHNbZmlsZU5hbWVQYXJ0cy5sZW5ndGggLSAxXTtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG59XG4iLCI8YXBwLWZvcm0tZWxlbWVudC1sYXlvdXRcbiAgW29wdGlvbnNdPVwib3B0aW9uc1wiXG4gIFtmaWVsZF09XCJmaWVsZFwiXG4gIFtjb250cm9sVGVtcGxhdGVSZWZdPVwiY29udHJvbFRlbXBsYXRlXCJcbiAgW2Zvcm1Db250cm9sUmVmXT1cIl9mb3JtQ29udHJvbFwiXG4+PC9hcHAtZm9ybS1lbGVtZW50LWxheW91dD5cbjxuZy10ZW1wbGF0ZSAjY29udHJvbFRlbXBsYXRlPlxuICAgIDxwLWZpbGVVcGxvYWRcbiAgICAgICAgW21vZGVdPVwib3B0aW9ucz8uZmlsZUlucHV0TW9kZSA/PyAnYWR2YW5jZWQnXCJcbiAgICAgICAgW3N0eWxlQ2xhc3NdPVwiJ2tpdHNuZy11cGxvYWRlcidcIlxuICAgICAgICBbbmdDbGFzc109XCJ7J25nLWludmFsaWQgbmctZGlydHknOiAoX2Zvcm1Db250cm9sLmVycm9ycyAmJiAoX2Zvcm1Db250cm9sLmRpcnR5IHx8IF9mb3JtQ29udHJvbC50b3VjaGVkKSkgPz8gZmFsc2V9XCJcbiAgICAgICAgW211bHRpcGxlXT1cIm9wdGlvbnM/Lm11bHRpcGxlID8/IGZhbHNlXCJcbiAgICAgICAgW2ZpbGVMaW1pdF09XCJvcHRpb25zPy5maWxlTGltaXRcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiX2Zvcm1Db250cm9sLmRpc2FibGVkXCJcbiAgICAgICAgW2FjY2VwdF09XCJvcHRpb25zPy5hY2NlcHQgPz8gJ2ltYWdlLyonXCJcbiAgICAgICAgW2Nob29zZUxhYmVsXT0gXCJvcHRpb25zPy5jaG9vc2VMYWJlbCA/PyBudWxsXCJcbiAgICAgICAgW2Nob29zZUljb25dPSBcIm9wdGlvbnM/LmNob29zZUljb24gPz8gbnVsbFwiXG4gICAgICAgIFtjaG9vc2VTdHlsZUNsYXNzXT0gXCJvcHRpb25zPy5jaG9vc2VTdHlsZUNsYXNzID8/IG51bGxcIlxuICAgICAgICBbbWF4RmlsZVNpemVdPVwib3B0aW9ucz8ubWF4RmlsZVNpemU/PyAxMDAwMDAwXCJcbiAgICAgICAgW3Nob3dDYW5jZWxCdXR0b25dPVwiZmFsc2VcIlxuICAgICAgICBbc2hvd1VwbG9hZEJ1dHRvbl09XCJmYWxzZVwiXG4gICAgICAgIFtjdXN0b21VcGxvYWRdPVwidHJ1ZVwiXG4gICAgICAgIFtmaWxlc109XCJzZWxlY3RlZEZpbGVzXCJcbiAgICAgICAgKG9uU2VsZWN0KT1cIm9uVXBsb2FkSW1hZ2UoJGV2ZW50KVwiXG4gICAgICAgIChvbkltYWdlRXJyb3IpPVwib25JbWFnZUVycm9yKCRldmVudClcIlxuICAgICAgICAob25SZW1vdmUpPVwib25SZW1vdmVJbWFnZSgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwidG9vbGJhclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvbnM/LnRvb2xiYXJUZW1wbGF0ZTsgZWxzZSBkZWZhdWx0VG9vbGJhclwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJvcHRpb25zLnRvb2xiYXJUZW1wbGF0ZTsgY29udGV4dDogeyBvcHRpb25zOiBvcHRpb25zLCBmaWVsZDogZmllbGQsIGNvbnRyb2w6IF9mb3JtQ29udHJvbCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFRvb2xiYXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvbnM/LnNob3dVcGxvYWRNZXNzYWdlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1jbG91ZC11cGxvYWQgYm9yZGVyLTIgYm9yZGVyLWNpcmNsZSBwLTUgdGV4dC00eGwgdGV4dC00MDAgYm9yZGVyLTQwMFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibXQtNCBtYi0wXCI+RHJhZyBhbmQgZHJvcCBmaWxlcyB0byBoZXJlIHRvIHVwbG9hZC48L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ1cGxvZGVkRmlsZXMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgIDxoNT5VcGxvYWRlZCBGaWxlczwvaDU+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZC1mbGV4IGZsZXgtd3JhcCBwLTAgc206cC01IGdhcC0zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpbGUgb2YgdXBsb2RlZEZpbGVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9ucz8uZmlsZVByZXZpZXdUZW1wbGF0ZTsgZWxzZSBkZWZhdWx0VXBsb2FkZWRQcmV2aWV3XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJvcHRpb25zLmZpbGVQcmV2aWV3VGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGZpbGUsIGZpbGU6IGZpbGUsIGlzVXBsb2FkZWQ6IHRydWUsIHJlbW92ZTogcmVtb3ZlRmlsZUNhbGxiYWNrLCBvcHRpb25zOiBvcHRpb25zLCBmaWVsZDogZmllbGQsIGNvbnRyb2w6IF9mb3JtQ29udHJvbCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFVwbG9hZGVkUHJldmlldz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbGVQcmV2aWV3VGVtcFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogZmlsZSwgaXNVcGxvYWRlZDogdHJ1ZSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuPCEtLVxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdGVkRmlsZXMubGVuZ3RoID4gMFwiIGNsYXNzPVwibXQtNFwiPlxuICAgICAgICAgICAgICAgIDxoNT5TZWxlY3RlZCBGaWxlczwvaDU+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZC1mbGV4IGZsZXgtd3JhcCBwLTAgc206cC01IGdhcC0zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpbGUgb2Ygc2VsZWN0ZWRGaWxlc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvbnM/LmZpbGVQcmV2aWV3VGVtcGxhdGU7IGVsc2UgZGVmYXVsdFNlbGVjdGVkUHJldmlld1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwib3B0aW9ucy5maWxlUHJldmlld1RlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBmaWxlLCBmaWxlOiBmaWxlLCBpc1VwbG9hZGVkOiBmYWxzZSwgcmVtb3ZlOiByZW1vdmVGaWxlQ2FsbGJhY2ssIG9wdGlvbnM6IG9wdGlvbnMsIGZpZWxkOiBmaWVsZCwgY29udHJvbDogX2Zvcm1Db250cm9sIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0U2VsZWN0ZWRQcmV2aWV3PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmlsZVByZXZpZXdUZW1wXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBmaWxlLCBpc1VwbG9hZGVkOiBmYWxzZSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNmaWxlUHJldmlld1RlbXAgbGV0LWZpbGUgbGV0LWlzVXBsb2FkZWQ9XCJpc1VwbG9hZGVkXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgbS0wIHB4LTYgZmxleCBkLWZsZXggZmxleC1jb2x1bW4gYm9yZGVyLTEgc3VyZmFjZS1ib3JkZXIgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zIHNoYWRvdy1ub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNJbWFnZShmaWxlKTtlbHNlIG5vdEltYWdlVGVtcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgcm9sZT1cInByZXNlbnRhdGlvblwiIFtzcmNdPVwiZ2V0RmlsZVVybChmaWxlKVwiIHdpZHRoPVwiMTAwXCIgaGVpZ2h0PVwiNTBcIiBzdHlsZT1cIm9iamVjdC1maXQ6IGNvdmVyO1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgW2hyZWZdPVwiZ2V0RmlsZVVybChmaWxlKVwiIHRhcmdldD1cIl9ibGFua1wiID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1zZW1pYm9sZFwiPnt7Z2V0RmlsZU5hbWUoZmlsZSl9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm90SW1hZ2VUZW1wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgcm9sZT1cInByZXNlbnRhdGlvblwiIFtzcmNdPVwiZ2V0RmlsZUV4dGVuc2lvbihmaWxlKSB8IGZpbGVUeXBlVXJsXCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBbaHJlZl09XCJnZXRGaWxlVXJsKGZpbGUpXCIgdGFyZ2V0PVwiX2JsYW5rXCIgW2F0dHIuZG93bmxvYWRdPVwiaXNVcGxvYWRlZCA/ICcnIDogbnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LXNlbWlib2xkXCI+e3tnZXRGaWxlTmFtZShmaWxlKSB8IHNsaWNlOjA6MTh9fS4uLjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAtYnV0dG9uICpuZ0lmPVwib3B0aW9ucz8uc2hvd1JlbW92ZUJ1dHRvbiAhPT0gZmFsc2VcIiBpY29uPVwicGkgcGktdGltZXNcIiBsYWJlbD1cIlJlbW92ZVwiIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1vdXRsaW5lZCBwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLWRhbmdlclwiIChvbkNsaWNrKT1cInJlbW92ZUZpbGUoZmlsZSlcIj48L3AtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9wLWZpbGVVcGxvYWQ+XG4gICAgPGFwcC1maWVsZC1lcnJvcnNcbiAgICBbY3VzdG9tRXJyb3JNZXNzYWdlc109XCJvcHRpb25zPy5lcnJvck1lc3NhZ2VzIHx8IHt9XCJcbiAgICBbY29udHJvbE5hbWVdPVwib3B0aW9ucz8uZm9ybUNvbnRyb2xOYW1lXCJcbiAgICBbZXJyb3JzXT1cImdldEVycm9ycygpXCJcbiAgICBbZXJyb3JNZXNzYWdlXT1cIm9wdGlvbnMuZXJyb3JNZXNzYWdlXCJcbiAgICBbc2hvd0Vycm9yc109XCJfZm9ybUNvbnRyb2wuZGlydHkgfHwgX2Zvcm1Db250cm9sLnRvdWNoZWRcIj48L2FwcC1maWVsZC1lcnJvcnM+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
@@ -105,7 +105,7 @@ export class LookupMultiSelectComponent {
|
|
|
105
105
|
q['search'] = this.filterWord;
|
|
106
106
|
this.lookupListService
|
|
107
107
|
.getLookupLists(this.options()?.apiBaseUrl, this.options()?.entity, false, q, this.options()?.module, this.options()?.version, this.options()?.path ?? 'page', this.options()?.memoryCache ?? false)
|
|
108
|
-
.pipe(finalize(() => (this.loadingOptions = false)))
|
|
108
|
+
.pipe(takeUntil(this.destroy$), finalize(() => (this.loadingOptions = false)))
|
|
109
109
|
.subscribe({
|
|
110
110
|
next: (response) => {
|
|
111
111
|
this.totalItems = response?.data?.pageInfo?.totalItems;
|
|
@@ -174,6 +174,7 @@ export class LookupMultiSelectComponent {
|
|
|
174
174
|
getOptionById(id) {
|
|
175
175
|
this.lookupListService
|
|
176
176
|
.getById(id, this.options()?.entity, this.options()?.module, this.options()?.version, this.options()?.apiBaseUrl)
|
|
177
|
+
.pipe(takeUntil(this.destroy$))
|
|
177
178
|
.subscribe((value) => {
|
|
178
179
|
if (value) {
|
|
179
180
|
this.options().multiSelectOptions = [
|
|
@@ -266,4 +267,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImpor
|
|
|
266
267
|
type: ViewChild,
|
|
267
268
|
args: ['multiSelect']
|
|
268
269
|
}] } });
|
|
269
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9va3VwLW11bHRpLXNlbGVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9raXRzbmctZm9ybS1mYWN0b3J5L3NyYy9saWIva2l0c25nLWZvcm0tZmFjdG9yeS9jb21wb25lbnRzL2tpdHNuZy1mb3JtLWZpZWxkcy9sb29rdXAtbXVsdGktc2VsZWN0L2xvb2t1cC1tdWx0aS1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2l0c25nLWZvcm0tZmFjdG9yeS9zcmMvbGliL2tpdHNuZy1mb3JtLWZhY3RvcnkvY29tcG9uZW50cy9raXRzbmctZm9ybS1maWVsZHMvbG9va3VwLW11bHRpLXNlbGVjdC9sb29rdXAtbXVsdGktc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUNMLEtBQUssRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBWWxFLE1BQU0sT0FBTywwQkFBMEI7SUE4Q3JDLFlBQW9CLGlCQUFvQztRQUFwQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBN0N4RDs7O1dBR0c7UUFDSCxXQUFNLEdBQVEsRUFBRSxDQUFDO1FBQ2pCOzs7V0FHRztRQUNILFlBQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFPLENBQUM7UUFFaEM7OztXQUdHO1FBQ08saUJBQVksR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRWpELGdCQUFXLEdBQUcsTUFBTSxFQUtoQixDQUFDO1FBRUwsbUJBQWMsR0FBRyxJ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LElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUNELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQzs4R0E1VFUsMEJBQTBCO2tHQUExQiwwQkFBMEIsa29CQ3hCdkMsMmlLQW1IQTs7MkZEM0ZhLDBCQUEwQjtrQkFKdEMsU0FBUzsrQkFDRSx5QkFBeUI7c0ZBYzFCLEtBQUs7c0JBQWIsS0FBSztnQkFLSSxZQUFZO3NCQUFyQixNQUFNO2dCQUNFLFlBQVk7c0JBQXBCLEtBQUs7Z0JBMEJvQixXQUFXO3NCQUFwQyxTQUFTO3VCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgSW5wdXQsXG4gIGlucHV0LFxuICBjb21wdXRlZCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIEV2ZW50RW1pdHRlcixcbiAgb3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmluYWxpemUsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTG9va3VwTGlzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2VzL2xvb2t1cC1saXN0LnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgS2l0c25nQ29udHJvbEZpZWxkT3B0aW9uc01vZGVsLFxuICBLaXRzbmdGb3JtRmFjdG9yeU1vZGVsLFxufSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy9raXRzbmctZm9ybS1mYWN0b3J5JztcbmltcG9ydCB7IE11bHRpU2VsZWN0IH0gZnJvbSAncHJpbWVuZy9tdWx0aXNlbGVjdCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1sb29rdXAtbXVsdGktc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xvb2t1cC1tdWx0aS1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBMb29rdXBNdWx0aVNlbGVjdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8qKlxuICAgKiAqIEdlbmVyYWxcbiAgICogQGVycm9ycyBGb3JtIGNvbnRyb2wgZXJyb3JzXG4gICAqL1xuICBlcnJvcnM6IGFueSA9IHt9O1xuICAvKipcbiAgICogKiBJbnB1dHNcbiAgICogQG9wdGlvbnMgQ29uZmlndXJhdGlvbiBmb3IgdGhpcyBmb3JtIGZpZWxkXG4gICAqL1xuICBvcHRpb25zID0gaW5wdXQucmVxdWlyZWQ8YW55PigpO1xuICBASW5wdXQoKSBmaWVsZDogYW55O1xuICAvKipcbiAgICogKiBPdXRwdXRzXG4gICAqIEBoYW5kbGVDaGFuZ2UgRXZlbnQgd2hlbiBpdGVtIGluIGRyb3Bkb3duIGlzIHNlbGVjdGVkXG4gICAqL1xuICBAT3V0cHV0KCkgaGFuZGxlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBJbnB1dCgpIF9mb3JtQ29udHJvbCE6IEZvcm1Db250cm9sPGFueT47XG4gIG1vZGVsQ2hhbmdlID0gb3V0cHV0PHtcbiAgICBldmVudDogYW55O1xuICAgIHBhcmVudEZvcm1Hcm91cD86IEZvcm1Hcm91cDxhbnk+IHwgRm9ybUFycmF5PGFueT4gfCBudWxsO1xuICAgIHNlbGVjdGVkT3B0aW9uPzogYW55O1xuICAgIGZpZWxkPzogS2l0c25nRm9ybUZhY3RvcnlNb2RlbDtcbiAgfT4oKTtcblxuICBsb2FkaW5nT3B0aW9ucyA9IHRydWU7XG4gIGxvYWRpbmdFcnJvciA9IGZhbHNlO1xuXG4gIHBhZ2VJbmRleCA9IDE7XG4gIHRvdGFsSXRlbXMgPSAwO1xuICBhbGxUb3RhbEl0ZW1zID0gMDtcblxuICBmaWx0ZXJXb3JkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBmaXJzdFRpbWUgPSB0cnVlO1xuICB0ZW1wT3B0aW9uczogYW55W10gPSBbXTtcbiAgLyoqXG4gICAqICogU2VsZWN0ZWQgb3B0aW9ucyAoZnVsbCBvYmplY3RzKSBjb3JyZXNwb25kaW5nIHRvIHRoZSBjdXJyZW50IHNlbGVjdGVkIHZhbHVlc1xuICAgKi9cbiAgc2VsZWN0ZWRPcHRpb25zOiBhbnlbXSA9IFtdO1xuXG4gIHByaXZhdGUgX2ZpbHRlck9wdGlvbnM6IFN1YmplY3Q8c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4gPSBuZXcgU3ViamVjdCgpO1xuICBmaWx0ZXJPcHRpb25zJCA9IHRoaXMuX2ZpbHRlck9wdGlvbnMuYXNPYnNlcnZhYmxlKCk7XG5cbiAgQFZpZXdDaGlsZCgnbXVsdGlTZWxlY3QnKSBtdWx0aVNlbGVjdCE6IE11bHRpU2VsZWN0O1xuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGxvb2t1cExpc3RTZXJ2aWNlOiBMb29rdXBMaXN0U2VydmljZSkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm9wdGlvbnMoKS52YWx1ZSA9IHRoaXMuX2Zvcm1Db250cm9sLnZhbHVlO1xuICAgIHRoaXMuZ2V0T3B0aW9ucygpO1xuXG4gICAgdGhpcy5maWx0ZXJPcHRpb25zJFxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDUwMCksIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoKGZpbHRlcikgPT4ge1xuICAgICAgICB0aGlzLmZpbHRlcldvcmQgPSBmaWx0ZXI7XG4gICAgICAgIHRoaXMuZ2V0T3B0aW9ucygpO1xuICAgICAgfSk7XG4gIH1cblxuICBnZXRFcnJvcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1Db250cm9sLmVycm9ycztcbiAgfVxuXG4gIG5nTW9kZWxDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIGxldCBvcHRpb25zTGlzdDogYW55W10gPSBbXTtcbiAgICBpZiAoXG4gICAgICB0aGlzLmZpbHRlcldvcmQgIT09ICcnIHx8XG4gICAgICB0aGlzLmZpbHRlcldvcmQgIT09IG51bGwgfHxcbiAgICAgIHRoaXMuZmlsdGVyV29yZCAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBvcHRpb25zTGlzdCA9IFtcbiAgICAgICAgLi4udGhpcy50ZW1wT3B0aW9ucyxcbiAgICAgICAgLi4udGhpcy5vcHRpb25zKCk/Lm11bHRpU2VsZWN0T3B0aW9ucyxcbiAgICAgIF07XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnNMaXN0ID0gdGhpcy5vcHRpb25zKCk/Lm11bHRpU2VsZWN0T3B0aW9ucztcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9ucyA9IGV2ZW50Py5tYXAoKG9wOiBhbnkpID0+XG4gICAgICBvcHRpb25zTGlzdC5maW5kKFxuICAgICAgICAoY286IGFueSkgPT4gY29bdGhpcy5vcHRpb25zKCk/Lm9wdGlvblZhbHVlID8/ICdpZCddID09IG9wXG4gICAgICApXG4gICAgKTtcblxuICAgIC8vIHVwZGF0ZSBzZWxlY3RlZE9wdGlvbnMgcHJvcGVydHkgd2l0aCB0aGUgZnVsbCBvcHRpb24gb2JqZWN0c1xuICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zID0gb3B0aW9ucyA/PyBbXTtcblxuICAgIHRoaXMubW9kZWxDaGFuZ2UuZW1pdCh7XG4gICAgICBldmVudDogZXZlbnQsXG4gICAgICBwYXJlbnRGb3JtR3JvdXA6IHRoaXMuX2Zvcm1Db250cm9sLnBhcmVudCxcbiAgICAgIHNlbGVjdGVkT3B0aW9uOiBvcHRpb25zLFxuICAgICAgZmllbGQ6IHRoaXMuZmllbGQsXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zKCk/Lm5nTW9kZWxDaGFuZ2UpIHtcbiAgICAgIHRoaXMub3B0aW9ucygpPy5uZ01vZGVsQ2hhbmdlPy4oXG4gICAgICAgIGV2ZW50LFxuICAgICAgICB0aGlzLl9mb3JtQ29udHJvbC5wYXJlbnQgYXMgRm9ybUdyb3VwLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICB0aGlzLmZpZWxkXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMub25PcHRpb25DaGFuZ2Uob3B0aW9ucyk7XG4gIH1cblxuICBvbk9wdGlvbkNoYW5nZShlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vcHRpb25zKCk/Lm9uT3B0aW9uU2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMub3B0aW9ucygpPy5vbk9wdGlvblNlbGVjdGVkPy4oZSk7XG4gICAgfVxuICB9XG5cbiAgbXVsdGlTZWxlY3RPcHRpb25zID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcHRpb25zKCk/Lm11bHRpU2VsZWN0T3B0aW9ucyA/PyBbXSk7XG5cbiAgZ2V0T3B0aW9ucygpIHtcbiAgICB0aGlzLmxvYWRpbmdPcHRpb25zID0gdHJ1ZTtcbiAgICB0aGlzLmxvYWRpbmdFcnJvciA9IGZhbHNlO1xuXG4gICAgbGV0IHE6IGFueSA9IHtcbiAgICAgIHBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXgsXG4gICAgICBwYWdlU2l6ZTogdGhpcy5vcHRpb25zKCk/LnBhZ2VTaXplID8/IDEwMCxcbiAgICAgIC4uLih0aGlzLm9wdGlvbnMoKT8ucXVlcnkgPz8ge30pLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5maWx0ZXJXb3JkKSBxWydzZWFyY2gnXSA9IHRoaXMuZmlsdGVyV29yZDtcblxuICAgIHRoaXMubG9va3VwTGlzdFNlcnZpY2VcbiAgICAgIC5nZXRMb29rdXBMaXN0czxhbnk+KFxuICAgICAgICB0aGlzLm9wdGlvbnMoKT8uYXBpQmFzZVVybCEsXG4gICAgICAgIHRoaXMub3B0aW9ucygpPy5lbnRpdHkhLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgcSxcbiAgICAgICAgdGhpcy5vcHRpb25zKCk/Lm1vZHVsZSxcbiAgICAgICAgdGhpcy5vcHRpb25zKCk/LnZlcnNpb24sXG4gICAgICAgIHRoaXMub3B0aW9ucygpPy5wYXRoID8/ICdwYWdlJyxcbiAgICAgICAgdGhpcy5vcHRpb25zKCk/Lm1lbW9yeUNhY2hlID8/IGZhbHNlXG4gICAgICApXG4gICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiAodGhpcy5sb2FkaW5nT3B0aW9ucyA9IGZhbHNlKSkpXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gcmVzcG9uc2U/LmRhdGE/LnBhZ2VJbmZvPy50b3RhbEl0ZW1zO1xuICAgICAgICAgIGlmICghdGhpcy5vcHRpb25zKCkubXVsdGlTZWxlY3RPcHRpb25zIHx8IHRoaXMucGFnZUluZGV4ID09IDEpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucygpLm11bHRpU2VsZWN0T3B0aW9ucyA9IFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm9wdGlvbnMoKS5tdWx0aVNlbGVjdE9wdGlvbnMucHVzaChcbiAgICAgICAgICAgIC4uLihyZXNwb25zZS5kYXRhPy5pdGVtcz8ubWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgIC4uLml0ZW0ua3YsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSA/PyBbXSlcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMoKS5tdWx0aVNlbGVjdE9wdGlvbnM/Lmxlbmd0aCA+IDAgJiYgdGhpcy5maXJzdFRpbWUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMoKT8udmFsdWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5fZm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5vcHRpb25zKCk/LnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYWxsVG90YWxJdGVtcyA9IHJlc3BvbnNlPy5kYXRhPy5wYWdlSW5mbz8udG90YWxJdGVtcztcbiAgICAgICAgICAgIHRoaXMuZmlyc3RUaW1lID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMub3B0aW9ucygpLm11bHRpU2VsZWN0T3B0aW9ucyA9IHRoaXMuZGVkdXBsaWNhdGUoXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMoKT8ubXVsdGlTZWxlY3RPcHRpb25zXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLl9mb3JtQ29udHJvbD8udmFsdWUgJiZcbiAgICAgICAgICAgICh0aGlzLmZpbHRlcldvcmQgPT0gJycgfHxcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJXb3JkID09IG51bGwgfHxcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJXb3JkID09IHVuZGVmaW5lZClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuZW5zdXJlU2VsZWN0ZWRPcHRpb25zKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghdGhpcy5maWx0ZXJXb3JkKSB7XG4gICAgICAgICAgICB0aGlzLnRlbXBPcHRpb25zID0gdGhpcy5vcHRpb25zKCkubXVsdGlTZWxlY3RPcHRpb25zO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRlbXBPcHRpb25zID0gdGhpcy5kZWR1cGxpY2F0ZShbXG4gICAgICAgICAgICAgIC4uLnRoaXMudGVtcE9wdGlvbnMsXG4gICAgICAgICAgICAgIC4uLnRoaXMub3B0aW9ucygpLm11bHRpU2VsZWN0T3B0aW9ucyxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zKCkubXVsdGlTZWxlY3RPcHRpb25zID0gdGhpcy5kZWR1cGxpY2F0ZShbXG4gICAgICAgICAgICAgIC4uLnRoaXMub3B0aW9ucygpLm11bHRpU2VsZWN0T3B0aW9ucyxcbiAgICAgICAgICAgICAgLi4udGhpcy5zZWxlY3RlZE9wdGlvbnNcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnVwZGF0ZU92ZXJsYXlEcm9wZG93bm9wdGlvbnMoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gbG9hZCBvcHRpb25zOicsIGVycik7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nRXJyb3IgPSB0cnVlO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cblxuICB1cGRhdGVPdmVybGF5RHJvcGRvd25vcHRpb25zKCkge1xuICAgIGlmICh0aGlzLm11bHRpU2VsZWN0Py5vcHRpb25zKSB7XG4gICAgICB0aGlzLm11bHRpU2VsZWN0Lm9wdGlvbnMgPSB0aGlzLm9wdGlvbnMoKS5tdWx0aVNlbGVjdE9wdGlvbnM7XG4gICAgfVxuICB9XG4gIGVuc3VyZVNlbGVjdGVkT3B0aW9ucygpIHtcbiAgICBjb25zdCBzZWxlY3RlZFZhbHVlcyA9IHRoaXMuX2Zvcm1Db250cm9sLnZhbHVlIHx8IFtdO1xuICAgIHNlbGVjdGVkVmFsdWVzLmZvckVhY2goKHZhbDogYW55KSA9PiB7XG4gICAgICBjb25zdCBleGlzdHMgPSB0aGlzLm9wdGlvbnMoKS5tdWx0aVNlbGVjdE9wdGlvbnM/LnNvbWUoXG4gICAgICAgIChvcDogYW55KSA9PiBvcFt0aGlzLm9wdGlvbnMoKT8ub3B0aW9uVmFsdWUgPz8gJ2lkJ10gPT0gdmFsXG4gICAgICApO1xuICAgICAgaWYgKCFleGlzdHMpIHtcbiAgICAgICAgdGhpcy5nZXRPcHRpb25CeUlkKHZhbCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgLy8gcG9wdWxhdGUgc2VsZWN0ZWRPcHRpb25zIHdpdGggYW55IGN1cnJlbnRseSBhdmFpbGFibGUgZnVsbCBvcHRpb24gb2JqZWN0c1xuICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zID0gKHNlbGVjdGVkVmFsdWVzIHx8IFtdKVxuICAgICAgLm1hcCgodmFsOiBhbnkpID0+XG4gICAgICAgIHRoaXMub3B0aW9ucygpLm11bHRpU2VsZWN0T3B0aW9ucz8uZmluZChcbiAgICAgICAgICAob3A6IGFueSkgPT4gb3BbdGhpcy5vcHRpb25zKCk/Lm9wdGlvblZhbHVlID8/ICdpZCddID09IHZhbFxuICAgICAgICApXG4gICAgICApXG4gICAgICAuZmlsdGVyKChvOiBhbnkpID0+ICEhbyk7XG4gIH1cblxuICBnZXRPcHRpb25CeUlkKGlkOiBhbnkpIHtcbiAgICB0aGlzLmxvb2t1cExpc3RTZXJ2aWNlXG4gICAgICAuZ2V0QnlJZChcbiAgICAgICAgaWQsXG4gICAgICAgIHRoaXMub3B0aW9ucygpPy5lbnRpdHkhLFxuICAgICAgICB0aGlzLm9wdGlvbnMoKT8ubW9kdWxlLFxuICAgICAgICB0aGlzLm9wdGlvbnMoKT8udmVyc2lvbixcbiAgICAgICAgdGhpcy5vcHRpb25zKCk/LmFwaUJhc2VVcmxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIHRoaXMub3B0aW9ucygpLm11bHRpU2VsZWN0T3B0aW9ucyA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLi4udmFsdWUsXG4gICAgICAgICAgICAgIC4uLnZhbHVlLmt2LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC4uLnRoaXMub3B0aW9ucygpLm11bHRpU2VsZWN0T3B0aW9ucyxcbiAgICAgICAgICBdO1xuICAgICAgICAgIHRoaXMudXBkYXRlT3ZlcmxheURyb3Bkb3dub3B0aW9ucygpO1xuICAgICAgICAgIHRoaXMudGVtcE9wdGlvbnMgPSB0aGlzLm9wdGlvbnMoKS5tdWx0aVNlbGVjdE9wdGlvbnM7XG4gICAgICAgICAgLy8gdXBkYXRlIHNlbGVjdGVkT3B0aW9ucyBpbiBjYXNlIHRoaXMgd2FzIG9uZSBvZiB0aGUgc2VsZWN0ZWQgdmFsdWVzXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMgPSAodGhpcy5fZm9ybUNvbnRyb2w/LnZhbHVlIHx8IFtdKVxuICAgICAgICAgICAgLm1hcCgodmFsOiBhbnkpID0+XG4gICAgICAgICAgICAgIHRoaXMub3B0aW9ucygpLm11bHRpU2VsZWN0T3B0aW9ucz8uZmluZChcbiAgICAgICAgICAgICAgICAob3A6IGFueSkgPT4gb3BbdGhpcy5vcHRpb25zKCk/Lm9wdGlvblZhbHVlID8/ICdpZCddID09IHZhbFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZmlsdGVyKChvOiBhbnkpID0+ICEhbyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgZmlsdGVyT3B0aW9ucygpIHtcbiAgICB0aGlzLmFwcGx5RmlsdGVyKCk7XG4gIH1cblxuICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAodGhpcy5tdWx0aVNlbGVjdCkge1xuICAgICAgdGhpcy5tdWx0aVNlbGVjdC5vbkZpbHRlcktleURvd24oZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIGFwcGx5RmlsdGVyKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuZmlsdGVyV29yZCA9PSAnJyB8fFxuICAgICAgdGhpcy5maWx0ZXJXb3JkID09IG51bGwgfHxcbiAgICAgIHRoaXMuZmlsdGVyV29yZCA9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHRoaXMub3B0aW9ucygpLm11bHRpU2VsZWN0T3B0aW9ucyA9IHRoaXMudGVtcE9wdGlvbnM7XG4gICAgICB0aGlzLnRvdGFsSXRlbXMgPSB0aGlzLmFsbFRvdGFsSXRlbXM7XG4gICAgICB0aGlzLnVwZGF0ZU92ZXJsYXlEcm9wZG93bm9wdGlvbnMoKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5hbGxUb3RhbEl0ZW1zID4gdGhpcy50ZW1wT3B0aW9ucy5sZW5ndGggfHxcbiAgICAgICghdGhpcy5hbGxUb3RhbEl0ZW1zICYmIHRoaXMub3B0aW9ucygpLnBhdGggIT09ICdhbGwnKVxuICAgICkge1xuICAgICAgdGhpcy5wYWdlSW5kZXggPSAxO1xuICAgICAgdGhpcy5vcHRpb25zKCkubXVsdGlTZWxlY3RPcHRpb25zID0gW107XG4gICAgICB0aGlzLmxvYWRpbmdPcHRpb25zID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2ZpbHRlck9wdGlvbnMubmV4dCh0aGlzLmZpbHRlcldvcmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBrZXl3b3JkID0gKHRoaXMuZmlsdGVyV29yZCA/PyAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCBmaWx0ZXJCeSA9IHRoaXMub3B0aW9ucygpLmZpbHRlckJ5ID8/ICd0ZXh0JztcbiAgICAgIHRoaXMub3B0aW9ucygpLm11bHRpU2VsZWN0T3B0aW9ucyA9IHRoaXMudGVtcE9wdGlvbnMuZmlsdGVyKChvcHRpb24pID0+e1xuICAgICAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbj8uW2ZpbHRlckJ5XTtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBmYWxzZTtcblxuICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKVxuICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgIC5pbmNsdWRlcyhrZXl3b3JkKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy51cGRhdGVPdmVybGF5RHJvcGRvd25vcHRpb25zKCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZGVkdXBsaWNhdGUoYXJyOiBhbnlbXSk6IGFueVtdIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLm9wdGlvbnMoKS5vcHRpb25WYWx1ZSA/PyAnaWQnO1xuXG4gICAgcmV0dXJuIGFyci5maWx0ZXIoXG4gICAgICAoaXRlbSwgaW5kZXgsIHNlbGYpID0+XG4gICAgICAgIGluZGV4ID09PSBzZWxmLmZpbmRJbmRleCgodCkgPT4gdFtrZXldID09PSBpdGVtW2tleV0pXG4gICAgKTtcbiAgfVxuICByZXNldEZpbHRlcigpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmZpbHRlcldvcmQgIT0gJycgJiZcbiAgICAgIHRoaXMuZmlsdGVyV29yZCAhPSBudWxsICYmXG4gICAgICB0aGlzLmZpbHRlcldvcmQgIT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICB0aGlzLmZpbHRlcldvcmQgPSAnJztcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoKTtcbiAgICB9XG4gIH1cblxuICBsb2FkTW9yZSgpIHtcbiAgICB0aGlzLnBhZ2VJbmRleCsrO1xuICAgIHRoaXMuZ2V0T3B0aW9ucygpO1xuICB9XG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxufVxuIiwiPGFwcC1mb3JtLWVsZW1lbnQtbGF5b3V0XG4gIFtvcHRpb25zXT1cIm9wdGlvbnMoKVwiXG4gIFtmaWVsZF09XCJmaWVsZFwiXG4gIFtjb250cm9sVGVtcGxhdGVSZWZdPVwiY29udHJvbFRlbXBsYXRlXCJcbiAgW2Zvcm1Db250cm9sUmVmXT1cIl9mb3JtQ29udHJvbFwiXG4+PC9hcHAtZm9ybS1lbGVtZW50LWxheW91dD5cbjxuZy10ZW1wbGF0ZSAjY29udHJvbFRlbXBsYXRlPlxuICA8cC1tdWx0aVNlbGVjdFxuICAgICNtdWx0aVNlbGVjdFxuICAgIFtvcHRpb25zXT1cIm11bHRpU2VsZWN0T3B0aW9ucygpXCJcbiAgICBbcGxhY2Vob2xkZXJdPVwiKG9wdGlvbnMoKS5wbGFjZWhvbGRlcj8/JycpIHwgdHJhbnNsYXRlXCJcbiAgICBbZm9ybUNvbnRyb2xdPVwiX2Zvcm1Db250cm9sXCJcbiAgICBbb3B0aW9uTGFiZWxdPVwib3B0aW9ucygpLm9wdGlvbkxhYmVsID8/ICd0ZXh0J1wiXG4gICAgW29wdGlvblZhbHVlXT1cIm9wdGlvbnMoKS5vcHRpb25WYWx1ZSA/PyAnaWQnXCJcbiAgICBbb3B0aW9uR3JvdXBMYWJlbF09XCJvcHRpb25zKCkub3B0aW9uR3JvdXBMYWJlbCA/PyAndGV4dCdcIlxuICAgIFtvcHRpb25Hcm91cENoaWxkcmVuXT1cIm9wdGlvbnMoKS5vcHRpb25Hcm91cENoaWxkcmVuID8/ICdpdGVtcydcIlxuICAgIFtncm91cF09XCJvcHRpb25zKCkuZ3JvdXAgPz8gZmFsc2VcIlxuICAgIHN0eWxlQ2xhc3M9XCJ7e29wdGlvbnMoKS5jbGFzcyA/PyAndy1mdWxsJ319XCJcbiAgICBbc2hvd0NsZWFyXT1cIm9wdGlvbnMoKS5zaG93Q2xlYXIgPz8gZmFsc2VcIlxuICAgIFthcHBlbmRUb109XCJvcHRpb25zKCkuYXBwZW5kVG8gPz8gJ2JvZHknXCJcbiAgICBbZmlsdGVyXT1cIm9wdGlvbnMoKS5maWx0ZXIgPz8gZmFsc2VcIlxuICAgIFtmaWx0ZXJCeV09XCJvcHRpb25zKCkuZmlsdGVyQnkgPz8gJ3RleHQnXCJcbiAgICBbYXV0b2ZvY3VzRmlsdGVyXT1cIm9wdGlvbnMoKS5hdXRvZm9jdXNGaWx0ZXIgPz8gZmFsc2VcIlxuICAgIFthdXRvZm9jdXNdPVwib3B0aW9ucygpLmF1dG9mb2N1cyA/PyBmYWxzZVwiXG4gICAgW3Jlc2V0RmlsdGVyT25IaWRlXT1cInRydWVcIlxuICAgIChvblBhbmVsSGlkZSk9XCJyZXNldEZpbHRlcigpXCJcbiAgICBbcmVhZG9ubHldPVwib3B0aW9ucygpLnJlYWRvbmx5ID8/IGZhbHNlXCJcbiAgICBbc2hvd1RvZ2dsZUFsbF09XCJvcHRpb25zKCkuc2hvd1RvZ2dsZUFsbCA/PyBmYWxzZVwiXG4gICAgW25nQ2xhc3NdPVwieyduZy1pbnZhbGlkIG5nLWRpcnR5JzogKF9mb3JtQ29udHJvbC5lcnJvcnMgJiYgKF9mb3JtQ29udHJvbC5kaXJ0eSB8fCBfZm9ybUNvbnRyb2wudG91Y2hlZCkgJiYgIWxvYWRpbmdPcHRpb25zKSA/PyBmYWxzZX1cIlxuICAgIFtkaXNwbGF5XT1cIm9wdGlvbnMoKS5kaXNwbGF5ID8/ICdjaGlwJ1wiXG4gICAgKG5nTW9kZWxDaGFuZ2UpPVwibmdNb2RlbENoYW5nZSgkZXZlbnQpXCJcbiAgICA+XG4gICAgICAgIEBpZiAob3B0aW9ucygpLmZpbHRlcikge1xuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZpbHRlclwiIGxldC1vcHRpb25zPVwib3B0aW9uc1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb25zKCkuZmlsdGVyVGVtcGxhdGU7IGVsc2UgZGVmYXVsdEZpbHRlclRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwib3B0aW9ucygpLmZpbHRlclRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbDogX2Zvcm1Db250cm9sLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoOiBsb2FkTW9yZS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cDogX2Zvcm1Db250cm9sLnBhcmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VGVtcGxhdGU6IGRlZmF1bHRGaWx0ZXJUZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEZpbHRlclRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtaW5wdXRncm91cFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1pbnB1dGdyb3VwLWFkZG9uXCI+PGkgY2xhc3M9XCJwaSBwaS1zZWFyY2hcIj48L2k+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBwSW5wdXRUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgcEF1dG9Gb2N1c1xuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmlsdGVyV29yZFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F1dG9mb2N1c109XCJvcHRpb25zKCkuYXV0b2ZvY3VzRmlsdGVyID8/IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCJcbiAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJPcHRpb25zKClcIlxuICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxMDAlO1wiIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgfVxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJlbXB0eVwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImVtcHR5VGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICBwVGVtcGxhdGU9XCJmb290ZXJcIj5cbiAgICAgICAgICAgIEBpZiAoIWxvYWRpbmdPcHRpb25zKSB7XG4gICAgICAgICAgICAgIEBpZiAodG90YWxJdGVtcyA+ICh0ZW1wT3B0aW9ucy5sZW5ndGggfHwgMCkpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxwLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgc3R5bGVDbGFzcz1cInAtYnV0dG9uLW91dGxpbmVkIHAtYnV0dG9uLWxpbmtcIiBsYWJlbD1cIkxvYWQgTW9yZVwiIGljb249XCJwaSBwaS1zcGlubmVyXCIgKG9uQ2xpY2spPVwibG9hZE1vcmUoKVwiPjwvcC1idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICBAaWYgKCFmaXJzdFRpbWUgJiYgKChtdWx0aVNlbGVjdD8ub3B0aW9ucz8ubGVuZ3RoIHx8IDApID4gMCkpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgdGV4dC1wcmltYXJ5IGZ3LW1lZGl1bSBweS0zIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLXNwaW5uZXItZG90dGVkIHBpLXNwaW4gXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3snTG9hZGluZyBPcHRpb25zJ3x0cmFuc2xhdGV9fS4uLjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvcC1tdWx0aVNlbGVjdD5cbiAgPGFwcC1maWVsZC1lcnJvcnNcbiAgICBbY3VzdG9tRXJyb3JNZXNzYWdlc109XCJvcHRpb25zKCk/LmVycm9yTWVzc2FnZXMgfHwge31cIlxuICAgIFtjb250cm9sTmFtZV09XCJvcHRpb25zKCk/LmZvcm1Db250cm9sTmFtZVwiXG4gICAgW2Vycm9yc109XCJnZXRFcnJvcnMoKVwiXG4gICAgW2Vycm9yTWVzc2FnZV09XCJvcHRpb25zKCkuZXJyb3JNZXNzYWdlIHx8ICcnXCJcbiAgICBbc2hvd0Vycm9yc109XCIoX2Zvcm1Db250cm9sLmRpcnR5IHx8IF9mb3JtQ29udHJvbC50b3VjaGVkKSAmJiAhbG9hZGluZ09wdGlvbnNcIj48L2FwcC1maWVsZC1lcnJvcnM+XG48L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSAjZW1wdHlUZW1wbGF0ZT5cbiAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgIEBpZiAobG9hZGluZ09wdGlvbnMpIHtcbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8cC1wcm9ncmVzc1NwaW5uZXIgc3R5bGVDbGFzcz1cInctNHJlbSBoLTRyZW1cIj48L3AtcHJvZ3Jlc3NTcGlubmVyPlxuICAgICAgICAgIDxwPnt7J0xvYWRpbmcgT3B0aW9ucyd8dHJhbnNsYXRlfX08L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfSBAZWxzZSBpZiAobG9hZGluZ0Vycm9yKSB7XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPHA+e3snRmFpbGVkIHRvIGxvYWQgb3B0aW9ucy4nfHRyYW5zbGF0ZX19PC9wPlxuICAgICAgICAgIDxwLWJ1dHRvblxuICAgICAgICAgICAgbGFiZWw9XCJSZXRyeVwiXG4gICAgICAgICAgICBpY29uPVwicGkgcGktcmVmcmVzaFwiXG4gICAgICAgICAgICAob25DbGljayk9XCJnZXRPcHRpb25zKClcIlxuICAgICAgICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLW91dGxpbmVkIHAtYnV0dG9uLWRhbmdlclwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxwPlxuICAgICAgICAgIHt7J05vIE9wdGlvbnMgRm91bmQnfHRyYW5zbGF0ZX19XG4gICAgICAgIDwvcD5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
270
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9va3VwLW11bHRpLXNlbGVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9raXRzbmctZm9ybS1mYWN0b3J5L3NyYy9saWIva2l0c25nLWZvcm0tZmFjdG9yeS9jb21wb25lbnRzL2tpdHNuZy1mb3JtLWZpZWxkcy9sb29rdXAtbXVsdGktc2VsZWN0L2xvb2t1cC1tdWx0aS1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2l0c25nLWZvcm0tZmFjdG9yeS9zcmMvbGliL2tpdHNuZy1mb3JtLWZhY3RvcnkvY29tcG9uZW50cy9raXRzbmctZm9ybS1maWVsZHMvbG9va3VwLW11bHRpLXNlbGVjdC9sb29rdXAtbXVsdGktc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUNMLEtBQUssRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBWWxFLE1BQU0sT0FBTywwQkFBMEI7SUE4Q3JDLFlBQW9CLGlCQUFvQztRQUFwQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBN0N4RDs7O1dBR0c7UUFDSCxXQUFNLEdBQVEsRUFBRSxDQUFDO1FBQ2pCOzs7V0FHRztRQUNILFlBQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFPLENBQUM7UUFFaEM7OztXQUdHO1FBQ08saUJBQVksR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRWpELGdCQUFXLEdBQUcsTUFBTSxFQUtoQixDQUFDO1FBRUwsbUJBQWMsR0FBRyxJ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VUFBVSxHQUFHLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckIsQ0FBQztJQUNILENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBQ0QsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDOzhHQTdUVSwwQkFBMEI7a0dBQTFCLDBCQUEwQixrb0JDeEJ2QywyaUtBbUhBOzsyRkQzRmEsMEJBQTBCO2tCQUp0QyxTQUFTOytCQUNFLHlCQUF5QjtzRkFjMUIsS0FBSztzQkFBYixLQUFLO2dCQUtJLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0UsWUFBWTtzQkFBcEIsS0FBSztnQkEwQm9CLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBJbnB1dCxcbiAgaW5wdXQsXG4gIGNvbXB1dGVkLFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbiAgRXZlbnRFbWl0dGVyLFxuICBvdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaW5hbGl6ZSwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBMb29rdXBMaXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZXMvbG9va3VwLWxpc3Quc2VydmljZSc7XG5pbXBvcnQge1xuICBLaXRzbmdDb250cm9sRmllbGRPcHRpb25zTW9kZWwsXG4gIEtpdHNuZ0Zvcm1GYWN0b3J5TW9kZWwsXG59IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzL2tpdHNuZy1mb3JtLWZhY3RvcnknO1xuaW1wb3J0IHsgTXVsdGlTZWxlY3QgfSBmcm9tICdwcmltZW5nL211bHRpc2VsZWN0JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWxvb2t1cC1tdWx0aS1zZWxlY3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vbG9va3VwLW11bHRpLXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIExvb2t1cE11bHRpU2VsZWN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLyoqXG4gICAqICogR2VuZXJhbFxuICAgKiBAZXJyb3JzIEZvcm0gY29udHJvbCBlcnJvcnNcbiAgICovXG4gIGVycm9yczogYW55ID0ge307XG4gIC8qKlxuICAgKiAqIElucHV0c1xuICAgKiBAb3B0aW9ucyBDb25maWd1cmF0aW9uIGZvciB0aGlzIGZvcm0gZmllbGRcbiAgICovXG4gIG9wdGlvbnMgPSBpbnB1dC5yZXF1aXJlZDxhbnk+KCk7XG4gIEBJbnB1dCgpIGZpZWxkOiBhbnk7XG4gIC8qKlxuICAgKiAqIE91dHB1dHNcbiAgICogQGhhbmRsZUNoYW5nZSBFdmVudCB3aGVuIGl0ZW0gaW4gZHJvcGRvd24gaXMgc2VsZWN0ZWRcbiAgICovXG4gIEBPdXRwdXQoKSBoYW5kbGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQElucHV0KCkgX2Zvcm1Db250cm9sITogRm9ybUNvbnRyb2w8YW55PjtcbiAgbW9kZWxDaGFuZ2UgPSBvdXRwdXQ8e1xuICAgIGV2ZW50OiBhbnk7XG4gICAgcGFyZW50Rm9ybUdyb3VwPzogRm9ybUdyb3VwPGFueT4gfCBGb3JtQXJyYXk8YW55PiB8IG51bGw7XG4gICAgc2VsZWN0ZWRPcHRpb24/OiBhbnk7XG4gICAgZmllbGQ/OiBLaXRzbmdGb3JtRmFjdG9yeU1vZGVsO1xuICB9PigpO1xuXG4gIGxvYWRpbmdPcHRpb25zID0gdHJ1ZTtcbiAgbG9hZGluZ0Vycm9yID0gZmFsc2U7XG5cbiAgcGFnZUluZGV4ID0gMTtcbiAgdG90YWxJdGVtcyA9IDA7XG4gIGFsbFRvdGFsSXRlbXMgPSAwO1xuXG4gIGZpbHRlcldvcmQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGZpcnN0VGltZSA9IHRydWU7XG4gIHRlbXBPcHRpb25zOiBhbnlbXSA9IFtdO1xuICAvKipcbiAgICogKiBTZWxlY3RlZCBvcHRpb25zIChmdWxsIG9iamVjdHMpIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGN1cnJlbnQgc2VsZWN0ZWQgdmFsdWVzXG4gICAqL1xuICBzZWxlY3RlZE9wdGlvbnM6IGFueVtdID0gW107XG5cbiAgcHJpdmF0ZSBfZmlsdGVyT3B0aW9uczogU3ViamVjdDxzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPiA9IG5ldyBTdWJqZWN0KCk7XG4gIGZpbHRlck9wdGlvbnMkID0gdGhpcy5fZmlsdGVyT3B0aW9ucy5hc09ic2VydmFibGUoKTtcblxuICBAVmlld0NoaWxkKCdtdWx0aVNlbGVjdCcpIG11bHRpU2VsZWN0ITogTXVsdGlTZWxlY3Q7XG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbG9va3VwTGlzdFNlcnZpY2U6IExvb2t1cExpc3RTZXJ2aWNlKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMub3B0aW9ucygpLnZhbHVlID0gdGhpcy5fZm9ybUNvbnRyb2wudmFsdWU7XG4gICAgdGhpcy5nZXRPcHRpb25zKCk7XG5cbiAgICB0aGlzLmZpbHRlck9wdGlvbnMkXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoNTAwKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSgoZmlsdGVyKSA9PiB7XG4gICAgICAgIHRoaXMuZmlsdGVyV29yZCA9IGZpbHRlcjtcbiAgICAgICAgdGhpcy5nZXRPcHRpb25zKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIGdldEVycm9ycygpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybUNvbnRyb2wuZXJyb3JzO1xuICB9XG5cbiAgbmdNb2RlbENoYW5nZShldmVudDogYW55KSB7XG4gICAgbGV0IG9wdGlvbnNMaXN0OiBhbnlbXSA9IFtdO1xuICAgIGlmIChcbiAgICAgIHRoaXMuZmlsdGVyV29yZCAhPT0gJycgfHxcbiAgICAgIHRoaXMuZmlsdGVyV29yZCAhPT0gbnVsbCB8fFxuICAgICAgdGhpcy5maWx0ZXJXb3JkICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIG9wdGlvbnNMaXN0ID0gW1xuICAgICAgICAuLi50aGlzLnRlbXBPcHRpb25zLFxuICAgICAgICAuLi50aGlzLm9wdGlvbnMoKT8ubXVsdGlTZWxlY3RPcHRpb25zLFxuICAgICAgXTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9uc0xpc3QgPSB0aGlzLm9wdGlvbnMoKT8ubXVsdGlTZWxlY3RPcHRpb25zO1xuICAgIH1cbiAgICBjb25zdCBvcHRpb25zID0gZXZlbnQ/Lm1hcCgob3A6IGFueSkgPT5cbiAgICAgIG9wdGlvbnNMaXN0LmZpbmQoXG4gICAgICAgIChjbzogYW55KSA9PiBjb1t0aGlzLm9wdGlvbnMoKT8ub3B0aW9uVmFsdWUgPz8gJ2lkJ10gPT0gb3BcbiAgICAgIClcbiAgICApO1xuXG4gICAgLy8gdXBkYXRlIHNlbGVjdGVkT3B0aW9ucyBwcm9wZXJ0eSB3aXRoIHRoZSBmdWxsIG9wdGlvbiBvYmplY3RzXG4gICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMgPSBvcHRpb25zID8/IFtdO1xuXG4gICAgdGhpcy5tb2RlbENoYW5nZS5lbWl0KHtcbiAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgIHBhcmVudEZvcm1Hcm91cDogdGhpcy5fZm9ybUNvbnRyb2wucGFyZW50LFxuICAgICAgc2VsZWN0ZWRPcHRpb246IG9wdGlvbnMsXG4gICAgICBmaWVsZDogdGhpcy5maWVsZCxcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMoKT8ubmdNb2RlbENoYW5nZSkge1xuICAgICAgdGhpcy5vcHRpb25zKCk/Lm5nTW9kZWxDaGFuZ2U/LihcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIHRoaXMuX2Zvcm1Db250cm9sLnBhcmVudCBhcyBGb3JtR3JvdXAsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIHRoaXMuZmllbGRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5vbk9wdGlvbkNoYW5nZShvcHRpb25zKTtcbiAgfVxuXG4gIG9uT3B0aW9uQ2hhbmdlKGU6IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9wdGlvbnMoKT8ub25PcHRpb25TZWxlY3RlZCkge1xuICAgICAgdGhpcy5vcHRpb25zKCk/Lm9uT3B0aW9uU2VsZWN0ZWQ/LihlKTtcbiAgICB9XG4gIH1cblxuICBtdWx0aVNlbGVjdE9wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKT8ubXVsdGlTZWxlY3RPcHRpb25zID8/IFtdKTtcblxuICBnZXRPcHRpb25zKCkge1xuICAgIHRoaXMubG9hZGluZ09wdGlvbnMgPSB0cnVlO1xuICAgIHRoaXMubG9hZGluZ0Vycm9yID0gZmFsc2U7XG5cbiAgICBsZXQgcTogYW55ID0ge1xuICAgICAgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCxcbiAgICAgIHBhZ2VTaXplOiB0aGlzLm9wdGlvbnMoKT8ucGFnZVNpemUgPz8gMTAwLFxuICAgICAgLi4uKHRoaXMub3B0aW9ucygpPy5xdWVyeSA/PyB7fSksXG4gICAgfTtcblxuICAgIGlmICh0aGlzLmZpbHRlcldvcmQpIHFbJ3NlYXJjaCddID0gdGhpcy5maWx0ZXJXb3JkO1xuXG4gICAgdGhpcy5sb29rdXBMaXN0U2VydmljZVxuICAgICAgLmdldExvb2t1cExpc3RzPGFueT4oXG4gICAgICAgIHRoaXMub3B0aW9ucygpPy5hcGlCYXNlVXJsISxcbiAgICAgICAgdGhpcy5vcHRpb25zKCk/LmVudGl0eSEsXG4gICAgICAgIGZhbHNlLFxuICAgICAgICBxLFxuICAgICAgICB0aGlzLm9wdGlvbnMoKT8ubW9kdWxlLFxuICAgICAgICB0aGlzLm9wdGlvbnMoKT8udmVyc2lvbixcbiAgICAgICAgdGhpcy5vcHRpb25zKCk/LnBhdGggPz8gJ3BhZ2UnLFxuICAgICAgICB0aGlzLm9wdGlvbnMoKT8ubWVtb3J5Q2FjaGUgPz8gZmFsc2VcbiAgICAgIClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSwgZmluYWxpemUoKCkgPT4gKHRoaXMubG9hZGluZ09wdGlvbnMgPSBmYWxzZSkpKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMudG90YWxJdGVtcyA9IHJlc3BvbnNlPy5kYXRhPy5wYWdlSW5mbz8udG90YWxJdGVtcztcbiAgICAgICAgICBpZiAoIXRoaXMub3B0aW9ucygpLm11bHRpU2VsZWN0T3B0aW9ucyB8fCB0aGlzLnBhZ2VJbmRleCA9PSAxKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMoKS5tdWx0aVNlbGVjdE9wdGlvbnMgPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5vcHRpb25zKCkubXVsdGlTZWxlY3RPcHRpb25zLnB1c2goXG4gICAgICAgICAgICAuLi4ocmVzcG9uc2UuZGF0YT8uaXRlbXM/Lm1hcCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAuLi5pdGVtLmt2LFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSkgPz8gW10pXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zKCkubXVsdGlTZWxlY3RPcHRpb25zPy5sZW5ndGggPiAwICYmIHRoaXMuZmlyc3RUaW1lKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zKCk/LnZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2Zvcm1Db250cm9sLnNldFZhbHVlKHRoaXMub3B0aW9ucygpPy52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFsbFRvdGFsSXRlbXMgPSByZXNwb25zZT8uZGF0YT8ucGFnZUluZm8/LnRvdGFsSXRlbXM7XG4gICAgICAgICAgICB0aGlzLmZpcnN0VGltZSA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm9wdGlvbnMoKS5tdWx0aVNlbGVjdE9wdGlvbnMgPSB0aGlzLmRlZHVwbGljYXRlKFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zKCk/Lm11bHRpU2VsZWN0T3B0aW9uc1xuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5fZm9ybUNvbnRyb2w/LnZhbHVlICYmXG4gICAgICAgICAgICAodGhpcy5maWx0ZXJXb3JkID09ICcnIHx8XG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyV29yZCA9PSBudWxsIHx8XG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyV29yZCA9PSB1bmRlZmluZWQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmVuc3VyZVNlbGVjdGVkT3B0aW9ucygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXRoaXMuZmlsdGVyV29yZCkge1xuICAgICAgICAgICAgdGhpcy50ZW1wT3B0aW9ucyA9IHRoaXMub3B0aW9ucygpLm11bHRpU2VsZWN0T3B0aW9ucztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50ZW1wT3B0aW9ucyA9IHRoaXMuZGVkdXBsaWNhdGUoW1xuICAgICAgICAgICAgICAuLi50aGlzLnRlbXBPcHRpb25zLFxuICAgICAgICAgICAgICAuLi50aGlzLm9wdGlvbnMoKS5tdWx0aVNlbGVjdE9wdGlvbnMsXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucygpLm11bHRpU2VsZWN0T3B0aW9ucyA9IHRoaXMuZGVkdXBsaWNhdGUoW1xuICAgICAgICAgICAgICAuLi50aGlzLm9wdGlvbnMoKS5tdWx0aVNlbGVjdE9wdGlvbnMsXG4gICAgICAgICAgICAgIC4uLnRoaXMuc2VsZWN0ZWRPcHRpb25zXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy51cGRhdGVPdmVybGF5RHJvcGRvd25vcHRpb25zKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgb3B0aW9uczonLCBlcnIpO1xuICAgICAgICAgIHRoaXMubG9hZGluZ0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlT3ZlcmxheURyb3Bkb3dub3B0aW9ucygpIHtcbiAgICBpZiAodGhpcy5tdWx0aVNlbGVjdD8ub3B0aW9ucykge1xuICAgICAgdGhpcy5tdWx0aVNlbGVjdC5vcHRpb25zID0gdGhpcy5vcHRpb25zKCkubXVsdGlTZWxlY3RPcHRpb25zO1xuICAgIH1cbiAgfVxuICBlbnN1cmVTZWxlY3RlZE9wdGlvbnMoKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRWYWx1ZXMgPSB0aGlzLl9mb3JtQ29udHJvbC52YWx1ZSB8fCBbXTtcbiAgICBzZWxlY3RlZFZhbHVlcy5mb3JFYWNoKCh2YWw6IGFueSkgPT4ge1xuICAgICAgY29uc3QgZXhpc3RzID0gdGhpcy5vcHRpb25zKCkubXVsdGlTZWxlY3RPcHRpb25zPy5zb21lKFxuICAgICAgICAob3A6IGFueSkgPT4gb3BbdGhpcy5vcHRpb25zKCk/Lm9wdGlvblZhbHVlID8/ICdpZCddID09IHZhbFxuICAgICAgKTtcbiAgICAgIGlmICghZXhpc3RzKSB7XG4gICAgICAgIHRoaXMuZ2V0T3B0aW9uQnlJZCh2YWwpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIHBvcHVsYXRlIHNlbGVjdGVkT3B0aW9ucyB3aXRoIGFueSBjdXJyZW50bHkgYXZhaWxhYmxlIGZ1bGwgb3B0aW9uIG9iamVjdHNcbiAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucyA9IChzZWxlY3RlZFZhbHVlcyB8fCBbXSlcbiAgICAgIC5tYXAoKHZhbDogYW55KSA9PlxuICAgICAgICB0aGlzLm9wdGlvbnMoKS5tdWx0aVNlbGVjdE9wdGlvbnM/LmZpbmQoXG4gICAgICAgICAgKG9wOiBhbnkpID0+IG9wW3RoaXMub3B0aW9ucygpPy5vcHRpb25WYWx1ZSA/PyAnaWQnXSA9PSB2YWxcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLmZpbHRlcigobzogYW55KSA9PiAhIW8pO1xuICB9XG5cbiAgZ2V0T3B0aW9uQnlJZChpZDogYW55KSB7XG4gICAgdGhpcy5sb29rdXBMaXN0U2VydmljZVxuICAgICAgLmdldEJ5SWQoXG4gICAgICAgIGlkLFxuICAgICAgICB0aGlzLm9wdGlvbnMoKT8uZW50aXR5ISxcbiAgICAgICAgdGhpcy5vcHRpb25zKCk/Lm1vZHVsZSxcbiAgICAgICAgdGhpcy5vcHRpb25zKCk/LnZlcnNpb24sXG4gICAgICAgIHRoaXMub3B0aW9ucygpPy5hcGlCYXNlVXJsXG4gICAgICApXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMoKS5tdWx0aVNlbGVjdE9wdGlvbnMgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC4uLnZhbHVlLFxuICAgICAgICAgICAgICAuLi52YWx1ZS5rdixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAuLi50aGlzLm9wdGlvbnMoKS5tdWx0aVNlbGVjdE9wdGlvbnMsXG4gICAgICAgICAgXTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZU92ZXJsYXlEcm9wZG93bm9wdGlvbnMoKTtcbiAgICAgICAgICB0aGlzLnRlbXBPcHRpb25zID0gdGhpcy5vcHRpb25zKCkubXVsdGlTZWxlY3RPcHRpb25zO1xuICAgICAgICAgIC8vIHVwZGF0ZSBzZWxlY3RlZE9wdGlvbnMgaW4gY2FzZSB0aGlzIHdhcyBvbmUgb2YgdGhlIHNlbGVjdGVkIHZhbHVlc1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zID0gKHRoaXMuX2Zvcm1Db250cm9sPy52YWx1ZSB8fCBbXSlcbiAgICAgICAgICAgIC5tYXAoKHZhbDogYW55KSA9PlxuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMoKS5tdWx0aVNlbGVjdE9wdGlvbnM/LmZpbmQoXG4gICAgICAgICAgICAgICAgKG9wOiBhbnkpID0+IG9wW3RoaXMub3B0aW9ucygpPy5vcHRpb25WYWx1ZSA/PyAnaWQnXSA9PSB2YWxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmZpbHRlcigobzogYW55KSA9PiAhIW8pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIGZpbHRlck9wdGlvbnMoKSB7XG4gICAgdGhpcy5hcHBseUZpbHRlcigpO1xuICB9XG5cbiAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKHRoaXMubXVsdGlTZWxlY3QpIHtcbiAgICAgIHRoaXMubXVsdGlTZWxlY3Qub25GaWx0ZXJLZXlEb3duKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBhcHBseUZpbHRlcigpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmZpbHRlcldvcmQgPT0gJycgfHxcbiAgICAgIHRoaXMuZmlsdGVyV29yZCA9PSBudWxsIHx8XG4gICAgICB0aGlzLmZpbHRlcldvcmQgPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICB0aGlzLm9wdGlvbnMoKS5tdWx0aVNlbGVjdE9wdGlvbnMgPSB0aGlzLnRlbXBPcHRpb25zO1xuICAgICAgdGhpcy50b3RhbEl0ZW1zID0gdGhpcy5hbGxUb3RhbEl0ZW1zO1xuICAgICAgdGhpcy51cGRhdGVPdmVybGF5RHJvcGRvd25vcHRpb25zKCk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMuYWxsVG90YWxJdGVtcyA+IHRoaXMudGVtcE9wdGlvbnMubGVuZ3RoIHx8XG4gICAgICAoIXRoaXMuYWxsVG90YWxJdGVtcyAmJiB0aGlzLm9wdGlvbnMoKS5wYXRoICE9PSAnYWxsJylcbiAgICApIHtcbiAgICAgIHRoaXMucGFnZUluZGV4ID0gMTtcbiAgICAgIHRoaXMub3B0aW9ucygpLm11bHRpU2VsZWN0T3B0aW9ucyA9IFtdO1xuICAgICAgdGhpcy5sb2FkaW5nT3B0aW9ucyA9IHRydWU7XG4gICAgICB0aGlzLl9maWx0ZXJPcHRpb25zLm5leHQodGhpcy5maWx0ZXJXb3JkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qga2V5d29yZCA9ICh0aGlzLmZpbHRlcldvcmQgPz8gJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgZmlsdGVyQnkgPSB0aGlzLm9wdGlvbnMoKS5maWx0ZXJCeSA/PyAndGV4dCc7XG4gICAgICB0aGlzLm9wdGlvbnMoKS5tdWx0aVNlbGVjdE9wdGlvbnMgPSB0aGlzLnRlbXBPcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PntcbiAgICAgICAgY29uc3QgdmFsdWUgPSBvcHRpb24/LltmaWx0ZXJCeV07XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSlcbiAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAuaW5jbHVkZXMoa2V5d29yZCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMudXBkYXRlT3ZlcmxheURyb3Bkb3dub3B0aW9ucygpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGRlZHVwbGljYXRlKGFycjogYW55W10pOiBhbnlbXSB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5vcHRpb25zKCkub3B0aW9uVmFsdWUgPz8gJ2lkJztcblxuICAgIHJldHVybiBhcnIuZmlsdGVyKFxuICAgICAgKGl0ZW0sIGluZGV4LCBzZWxmKSA9PlxuICAgICAgICBpbmRleCA9PT0gc2VsZi5maW5kSW5kZXgoKHQpID0+IHRba2V5XSA9PT0gaXRlbVtrZXldKVxuICAgICk7XG4gIH1cbiAgcmVzZXRGaWx0ZXIoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5maWx0ZXJXb3JkICE9ICcnICYmXG4gICAgICB0aGlzLmZpbHRlcldvcmQgIT0gbnVsbCAmJlxuICAgICAgdGhpcy5maWx0ZXJXb3JkICE9IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgdGhpcy5maWx0ZXJXb3JkID0gJyc7XG4gICAgICB0aGlzLmFwcGx5RmlsdGVyKCk7XG4gICAgfVxuICB9XG5cbiAgbG9hZE1vcmUoKSB7XG4gICAgdGhpcy5wYWdlSW5kZXgrKztcbiAgICB0aGlzLmdldE9wdGlvbnMoKTtcbiAgfVxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiIsIjxhcHAtZm9ybS1lbGVtZW50LWxheW91dFxuICBbb3B0aW9uc109XCJvcHRpb25zKClcIlxuICBbZmllbGRdPVwiZmllbGRcIlxuICBbY29udHJvbFRlbXBsYXRlUmVmXT1cImNvbnRyb2xUZW1wbGF0ZVwiXG4gIFtmb3JtQ29udHJvbFJlZl09XCJfZm9ybUNvbnRyb2xcIlxuPjwvYXBwLWZvcm0tZWxlbWVudC1sYXlvdXQ+XG48bmctdGVtcGxhdGUgI2NvbnRyb2xUZW1wbGF0ZT5cbiAgPHAtbXVsdGlTZWxlY3RcbiAgICAjbXVsdGlTZWxlY3RcbiAgICBbb3B0aW9uc109XCJtdWx0aVNlbGVjdE9wdGlvbnMoKVwiXG4gICAgW3BsYWNlaG9sZGVyXT1cIihvcHRpb25zKCkucGxhY2Vob2xkZXI/PycnKSB8IHRyYW5zbGF0ZVwiXG4gICAgW2Zvcm1Db250cm9sXT1cIl9mb3JtQ29udHJvbFwiXG4gICAgW29wdGlvbkxhYmVsXT1cIm9wdGlvbnMoKS5vcHRpb25MYWJlbCA/PyAndGV4dCdcIlxuICAgIFtvcHRpb25WYWx1ZV09XCJvcHRpb25zKCkub3B0aW9uVmFsdWUgPz8gJ2lkJ1wiXG4gICAgW29wdGlvbkdyb3VwTGFiZWxdPVwib3B0aW9ucygpLm9wdGlvbkdyb3VwTGFiZWwgPz8gJ3RleHQnXCJcbiAgICBbb3B0aW9uR3JvdXBDaGlsZHJlbl09XCJvcHRpb25zKCkub3B0aW9uR3JvdXBDaGlsZHJlbiA/PyAnaXRlbXMnXCJcbiAgICBbZ3JvdXBdPVwib3B0aW9ucygpLmdyb3VwID8/IGZhbHNlXCJcbiAgICBzdHlsZUNsYXNzPVwie3tvcHRpb25zKCkuY2xhc3MgPz8gJ3ctZnVsbCd9fVwiXG4gICAgW3Nob3dDbGVhcl09XCJvcHRpb25zKCkuc2hvd0NsZWFyID8/IGZhbHNlXCJcbiAgICBbYXBwZW5kVG9dPVwib3B0aW9ucygpLmFwcGVuZFRvID8/ICdib2R5J1wiXG4gICAgW2ZpbHRlcl09XCJvcHRpb25zKCkuZmlsdGVyID8/IGZhbHNlXCJcbiAgICBbZmlsdGVyQnldPVwib3B0aW9ucygpLmZpbHRlckJ5ID8/ICd0ZXh0J1wiXG4gICAgW2F1dG9mb2N1c0ZpbHRlcl09XCJvcHRpb25zKCkuYXV0b2ZvY3VzRmlsdGVyID8/IGZhbHNlXCJcbiAgICBbYXV0b2ZvY3VzXT1cIm9wdGlvbnMoKS5hdXRvZm9jdXMgPz8gZmFsc2VcIlxuICAgIFtyZXNldEZpbHRlck9uSGlkZV09XCJ0cnVlXCJcbiAgICAob25QYW5lbEhpZGUpPVwicmVzZXRGaWx0ZXIoKVwiXG4gICAgW3JlYWRvbmx5XT1cIm9wdGlvbnMoKS5yZWFkb25seSA/PyBmYWxzZVwiXG4gICAgW3Nob3dUb2dnbGVBbGxdPVwib3B0aW9ucygpLnNob3dUb2dnbGVBbGwgPz8gZmFsc2VcIlxuICAgIFtuZ0NsYXNzXT1cInsnbmctaW52YWxpZCBuZy1kaXJ0eSc6IChfZm9ybUNvbnRyb2wuZXJyb3JzICYmIChfZm9ybUNvbnRyb2wuZGlydHkgfHwgX2Zvcm1Db250cm9sLnRvdWNoZWQpICYmICFsb2FkaW5nT3B0aW9ucykgPz8gZmFsc2V9XCJcbiAgICBbZGlzcGxheV09XCJvcHRpb25zKCkuZGlzcGxheSA/PyAnY2hpcCdcIlxuICAgIChuZ01vZGVsQ2hhbmdlKT1cIm5nTW9kZWxDaGFuZ2UoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgICBAaWYgKG9wdGlvbnMoKS5maWx0ZXIpIHtcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmaWx0ZXJcIiBsZXQtb3B0aW9ucz1cIm9wdGlvbnNcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9ucygpLmZpbHRlclRlbXBsYXRlOyBlbHNlIGRlZmF1bHRGaWx0ZXJUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wdGlvbnMoKS5maWx0ZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2w6IF9mb3JtQ29udHJvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaDogbG9hZE1vcmUuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXA6IF9mb3JtQ29udHJvbC5wYXJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFRlbXBsYXRlOiBkZWZhdWx0RmlsdGVyVGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRGaWx0ZXJUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWlucHV0Z3JvdXBcIiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtaW5wdXRncm91cC1hZGRvblwiPjxpIGNsYXNzPVwicGkgcGktc2VhcmNoXCI+PC9pPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgcElucHV0VGV4dFxuICAgICAgICAgICAgICAgICAgICAgIHBBdXRvRm9jdXNcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpbHRlcldvcmRcIlxuICAgICAgICAgICAgICAgICAgICAgIFthdXRvZm9jdXNdPVwib3B0aW9ucygpLmF1dG9mb2N1c0ZpbHRlciA/PyBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiXG4gICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZmlsdGVyT3B0aW9ucygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIH1cbiAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHlcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJlbXB0eVRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAgcFRlbXBsYXRlPVwiZm9vdGVyXCI+XG4gICAgICAgICAgICBAaWYgKCFsb2FkaW5nT3B0aW9ucykge1xuICAgICAgICAgICAgICBAaWYgKHRvdGFsSXRlbXMgPiAodGVtcE9wdGlvbnMubGVuZ3RoIHx8IDApKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICA8cC1idXR0b24gdHlwZT1cImJ1dHRvblwiIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1vdXRsaW5lZCBwLWJ1dHRvbi1saW5rXCIgbGFiZWw9XCJMb2FkIE1vcmVcIiBpY29uPVwicGkgcGktc3Bpbm5lclwiIChvbkNsaWNrKT1cImxvYWRNb3JlKClcIj48L3AtYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgQGlmICghZmlyc3RUaW1lICYmICgobXVsdGlTZWxlY3Q/Lm9wdGlvbnM/Lmxlbmd0aCB8fCAwKSA+IDApKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHRleHQtcHJpbWFyeSBmdy1tZWRpdW0gcHktMyBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1zcGlubmVyLWRvdHRlZCBwaS1zcGluIFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7J0xvYWRpbmcgT3B0aW9ucyd8dHJhbnNsYXRlfX0uLi48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICA8L3AtbXVsdGlTZWxlY3Q+XG4gIDxhcHAtZmllbGQtZXJyb3JzXG4gICAgW2N1c3RvbUVycm9yTWVzc2FnZXNdPVwib3B0aW9ucygpPy5lcnJvck1lc3NhZ2VzIHx8IHt9XCJcbiAgICBbY29udHJvbE5hbWVdPVwib3B0aW9ucygpPy5mb3JtQ29udHJvbE5hbWVcIlxuICAgIFtlcnJvcnNdPVwiZ2V0RXJyb3JzKClcIlxuICAgIFtlcnJvck1lc3NhZ2VdPVwib3B0aW9ucygpLmVycm9yTWVzc2FnZSB8fCAnJ1wiXG4gICAgW3Nob3dFcnJvcnNdPVwiKF9mb3JtQ29udHJvbC5kaXJ0eSB8fCBfZm9ybUNvbnRyb2wudG91Y2hlZCkgJiYgIWxvYWRpbmdPcHRpb25zXCI+PC9hcHAtZmllbGQtZXJyb3JzPlxuPC9uZy10ZW1wbGF0ZT5cblxuICA8bmctdGVtcGxhdGUgI2VtcHR5VGVtcGxhdGU+XG4gICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCI+XG4gICAgICBAaWYgKGxvYWRpbmdPcHRpb25zKSB7XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPHAtcHJvZ3Jlc3NTcGlubmVyIHN0eWxlQ2xhc3M9XCJ3LTRyZW0gaC00cmVtXCI+PC9wLXByb2dyZXNzU3Bpbm5lcj5cbiAgICAgICAgICA8cD57eydMb2FkaW5nIE9wdGlvbnMnfHRyYW5zbGF0ZX19PC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH0gQGVsc2UgaWYgKGxvYWRpbmdFcnJvcikge1xuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxwPnt7J0ZhaWxlZCB0byBsb2FkIG9wdGlvbnMuJ3x0cmFuc2xhdGV9fTwvcD5cbiAgICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgIGxhYmVsPVwiUmV0cnlcIlxuICAgICAgICAgICAgaWNvbj1cInBpIHBpLXJlZnJlc2hcIlxuICAgICAgICAgICAgKG9uQ2xpY2spPVwiZ2V0T3B0aW9ucygpXCJcbiAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1vdXRsaW5lZCBwLWJ1dHRvbi1kYW5nZXJcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8cD5cbiAgICAgICAgICB7eydObyBPcHRpb25zIEZvdW5kJ3x0cmFuc2xhdGV9fVxuICAgICAgICA8L3A+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG4iXX0=
|