valtech-components 4.0.1029 → 4.0.1031

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.
Files changed (31) hide show
  1. package/esm2022/lib/components/atoms/avatar/avatar.component.mjs +7 -9
  2. package/esm2022/lib/components/atoms/progress-bar/progress-bar.component.mjs +13 -12
  3. package/esm2022/lib/components/molecules/action-card/action-card.component.mjs +92 -36
  4. package/esm2022/lib/components/molecules/action-card/types.mjs +1 -1
  5. package/esm2022/lib/components/molecules/card/card.component.mjs +56 -28
  6. package/esm2022/lib/components/molecules/comment/comment.component.mjs +1 -1
  7. package/esm2022/lib/components/molecules/progress-status/progress-status.component.mjs +2 -2
  8. package/esm2022/lib/components/molecules/stats-card/stats-card.component.mjs +22 -10
  9. package/esm2022/lib/components/organisms/about-view/about-view.component.mjs +2 -2
  10. package/esm2022/lib/components/organisms/attachment-uploader/attachment-uploader.component.mjs +26 -5
  11. package/esm2022/lib/components/organisms/attachment-uploader/types.mjs +1 -1
  12. package/esm2022/lib/components/organisms/comment-section/comment-section.component.mjs +2 -2
  13. package/esm2022/lib/components/organisms/security-view/security-view.component.mjs +2 -2
  14. package/esm2022/lib/components/organisms/settings-hub/settings-hub.component.mjs +2 -2
  15. package/esm2022/lib/components/organisms/settings-hub/settings-sections.mjs +2 -11
  16. package/esm2022/lib/components/organisms/wizard/wizard-footer/wizard-footer.component.mjs +2 -2
  17. package/esm2022/lib/services/i18n/default-content.mjs +3 -1
  18. package/esm2022/lib/version.mjs +2 -2
  19. package/fesm2022/valtech-components.mjs +220 -111
  20. package/fesm2022/valtech-components.mjs.map +1 -1
  21. package/lib/components/atoms/avatar/avatar.component.d.ts +2 -2
  22. package/lib/components/atoms/progress-bar/progress-bar.component.d.ts +2 -1
  23. package/lib/components/molecules/action-card/action-card.component.d.ts +28 -7
  24. package/lib/components/molecules/action-card/types.d.ts +4 -1
  25. package/lib/components/molecules/card/card.component.d.ts +2 -2
  26. package/lib/components/molecules/stats-card/stats-card.component.d.ts +3 -1
  27. package/lib/components/organisms/attachment-uploader/attachment-uploader.component.d.ts +5 -2
  28. package/lib/components/organisms/attachment-uploader/types.d.ts +6 -0
  29. package/lib/components/organisms/settings-hub/settings-sections.d.ts +1 -1
  30. package/lib/version.d.ts +1 -1
  31. package/package.json +1 -1
@@ -25,6 +25,13 @@ export class AttachmentUploaderComponent {
25
25
  })));
26
26
  }
27
27
  }
28
+ ngOnDestroy() {
29
+ this.closeCamera();
30
+ for (const url of this.previewUrls) {
31
+ URL.revokeObjectURL(url);
32
+ }
33
+ this.previewUrls.clear();
34
+ }
28
35
  constructor() {
29
36
  this.props = input({});
30
37
  this.attachmentsChange = output();
@@ -34,6 +41,7 @@ export class AttachmentUploaderComponent {
34
41
  this.attachments = signal([]);
35
42
  this.showCameraOverlay = signal(false);
36
43
  this.cameraStream = null;
44
+ this.previewUrls = new Set();
37
45
  this.maxFiles = computed(() => this.props().maxFiles ?? 5);
38
46
  this.accept = computed(() => this.props().accept ?? 'image/jpeg,image/png,image/webp,application/pdf');
39
47
  this.maxReached = computed(() => this.attachments().length >= this.maxFiles());
@@ -106,18 +114,26 @@ export class AttachmentUploaderComponent {
106
114
  const toProcess = files.slice(0, available);
107
115
  for (const file of toProcess) {
108
116
  const id = crypto.randomUUID();
117
+ const previewUrl = this.createPreviewUrl(file);
109
118
  if (this.props().lazy) {
110
119
  // Lazy mode: buffear sin subir. El consumer sube cuando tenga el destino.
111
- this.attachments.update(list => [...list, { id, file, status: 'ready' }]);
120
+ this.attachments.update(list => [...list, { id, file, previewUrl, status: 'ready' }]);
112
121
  this.attachmentsChange.emit(this.attachments());
113
122
  }
114
123
  else {
115
- this.attachments.update(list => [...list, { id, file, status: 'uploading' }]);
124
+ this.attachments.update(list => [...list, { id, file, previewUrl, status: 'uploading' }]);
116
125
  this.attachmentsChange.emit(this.attachments());
117
126
  this.uploadFile(id, file);
118
127
  }
119
128
  }
120
129
  }
130
+ createPreviewUrl(file) {
131
+ if (!file.type.startsWith('image/'))
132
+ return undefined;
133
+ const url = URL.createObjectURL(file);
134
+ this.previewUrls.add(url);
135
+ return url;
136
+ }
121
137
  compressImage(file) {
122
138
  return new Promise((resolve, reject) => {
123
139
  new Compressor(file, {
@@ -186,6 +202,11 @@ export class AttachmentUploaderComponent {
186
202
  this.attachmentsChange.emit(this.attachments());
187
203
  }
188
204
  remove(id) {
205
+ const item = this.attachments().find(a => a.id === id);
206
+ if (item?.previewUrl) {
207
+ URL.revokeObjectURL(item.previewUrl);
208
+ this.previewUrls.delete(item.previewUrl);
209
+ }
189
210
  this.attachments.update(list => list.filter(a => a.id !== id));
190
211
  this.attachmentsChange.emit(this.attachments());
191
212
  }
@@ -201,11 +222,11 @@ export class AttachmentUploaderComponent {
201
222
  return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
202
223
  }
203
224
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AttachmentUploaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
204
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AttachmentUploaderComponent, isStandalone: true, selector: "val-attachment-uploader", inputs: { props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { attachmentsChange: "attachmentsChange" }, viewQueries: [{ propertyName: "cameraPicker", first: true, predicate: ["cameraPicker"], descendants: true }, { propertyName: "cameraVideo", first: true, predicate: ["cameraVideo"], descendants: true }], ngImport: i0, template: "<div class=\"attachment-uploader\">\n @if (props().title) {\n <val-title class=\"attachment-title\" [props]=\"{ content: props().title, size: 'small', color: 'dark', bold: false }\" />\n }\n\n <!-- file picker est\u00E1ndar -->\n <input #filePicker type=\"file\" [accept]=\"accept()\" multiple class=\"hidden-input\" (change)=\"onFilesSelected($event)\" />\n <!-- fallback c\u00E1mara: solo se dispara si getUserMedia falla/denegado -->\n <input\n #cameraPicker\n type=\"file\"\n accept=\"image/*\"\n capture=\"environment\"\n class=\"hidden-input\"\n (change)=\"onFilesSelected($event)\"\n />\n\n <div class=\"attachment-actions\">\n <ion-button\n class=\"attachment-action\"\n fill=\"outline\"\n size=\"small\"\n [disabled]=\"isDisabled()\"\n (click)=\"filePicker.click()\"\n >\n <ion-icon slot=\"start\" name=\"attach-outline\"></ion-icon>\n {{ i18n.t('attachAdd') }}\n </ion-button>\n <ion-button class=\"attachment-action\" fill=\"outline\" size=\"small\" [disabled]=\"isDisabled()\" (click)=\"openCamera()\">\n <ion-icon slot=\"start\" name=\"camera-outline\"></ion-icon>\n {{ i18n.t('attachCamera') }}\n </ion-button>\n </div>\n\n @if (attachments().length > 0) {\n <div class=\"attachment-list\">\n @for (item of attachments(); track item.id) {\n <div class=\"attachment-item\" [class]=\"'status-' + item.status\">\n @if (!item.isExternal) {\n <ion-icon\n class=\"file-icon\"\n [name]=\"item.file?.type?.startsWith('image/') ? 'image-outline' : 'document-outline'\"\n ></ion-icon>\n }\n <div class=\"file-info\">\n @if (item.isExternal && item.url) {\n <img class=\"file-thumb\" [src]=\"item.url\" alt=\"foto\" loading=\"lazy\" (error)=\"thumbFailed(item.id)\" />\n } @else {\n <span class=\"file-name\">{{ item.file?.name ?? 'archivo' }}</span>\n <span class=\"file-size\">{{ item.file ? formatSize(item.file.size) : '' }}</span>\n }\n </div>\n\n @if (item.status === 'uploading') {\n <ion-spinner class=\"status-icon\" name=\"circular\"></ion-spinner>\n } @else if (item.status === 'ready') {\n <ion-icon class=\"status-icon\" name=\"checkmark-circle-outline\" color=\"success\"></ion-icon>\n } @else if (item.status === 'error') {\n <ion-icon class=\"status-icon\" name=\"close-circle-outline\" color=\"danger\"></ion-icon>\n } @if (item.status !== 'uploading') {\n <ion-button fill=\"clear\" size=\"small\" color=\"dark\" (click)=\"remove(item.id)\">\n <ion-icon slot=\"icon-only\" name=\"close-outline\"></ion-icon>\n </ion-button>\n } @if (item.status === 'error' && item.error) {\n <ion-note color=\"danger\" class=\"error-note\">{{ item.error }}</ion-note>\n }\n </div>\n }\n </div>\n } @if (props().hint) {\n <p class=\"attachment-hint\">{{ props().hint }}</p>\n }\n</div>\n\n<!-- Overlay de c\u00E1mara (getUserMedia) -->\n@if (showCameraOverlay()) {\n<div class=\"camera-overlay\" (click)=\"closeCamera()\">\n <div class=\"camera-modal\" (click)=\"$event.stopPropagation()\">\n <video #cameraVideo autoplay playsinline class=\"camera-preview\"></video>\n <div class=\"camera-controls\">\n <ion-button class=\"camera-control camera-control--cancel\" fill=\"outline\" (click)=\"closeCamera()\">\n {{ i18n.t('attachCancel') }}\n </ion-button>\n <ion-button class=\"camera-control camera-control--capture\" shape=\"round\" (click)=\"capturePhoto()\">\n <ion-icon slot=\"start\" name=\"camera-outline\"></ion-icon>\n {{ i18n.t('attachCapture') }}\n </ion-button>\n </div>\n </div>\n</div>\n}\n", styles: [".hidden-input{display:none}.camera-overlay{position:fixed;inset:0;z-index:9999;background:#000000d9;display:flex;align-items:center;justify-content:center}.camera-modal{display:flex;flex-direction:column;gap:16px;padding:16px;max-width:min(640px,95vw);width:100%}.camera-preview{width:100%;border-radius:12px;background:#000;aspect-ratio:16/9;object-fit:cover}.camera-controls{display:flex;justify-content:center;gap:12px;flex-wrap:wrap}.camera-controls .camera-control{margin:0;font-weight:700}.camera-controls .camera-control--cancel{--color: #fff;--border-color: rgba(255, 255, 255, .5);--background: rgba(255, 255, 255, .06);--background-hover: rgba(255, 255, 255, .12);--background-activated: rgba(255, 255, 255, .16)}.camera-controls .camera-control--capture{--background: #fff;--background-hover: #f4f4f5;--background-activated: #e4e4e7;--color: #18181b;--box-shadow: 0 10px 24px rgba(0, 0, 0, .28)}.attachment-uploader{display:flex;flex-direction:column;gap:8px}.attachment-title{display:block;margin-bottom:2px}.attachment-hint{margin:2px 0 0;text-align:left;font-size:.75rem;line-height:1.4;color:var(--ion-color-dark)}.attachment-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.attachment-actions ion-button{margin:0;height:32px}.attachment-actions .attachment-action{--background: var(--ion-card-background, var(--ion-background-color, #fff));--background-hover: rgba(var(--ion-color-primary-rgb, 56, 128, 255), .06);--background-activated: rgba(var(--ion-color-primary-rgb, 56, 128, 255), .1);--border-color: var(--ion-border-color, rgba(0, 0, 0, .14));--color: var(--ion-text-color, #222428);--color-activated: var(--ion-text-color, #222428)}.attachment-list{display:flex;flex-direction:column;gap:4px}.attachment-item{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:8px;background:var(--ion-background-color, #fff);border:1px solid var(--ion-color-light-shade, rgba(0, 0, 0, .08));flex-wrap:wrap}.attachment-item.status-error{border-color:var(--ion-color-danger)}.file-icon{font-size:1.375rem;color:var(--ion-text-color);flex-shrink:0}.file-info{flex:1;min-width:0;display:flex;flex-direction:column}.file-thumb{width:48px;height:48px;object-fit:cover;border-radius:6px;flex-shrink:0}.file-name{font-size:.8125rem;color:var(--ion-text-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.file-size{font-size:.6875rem;color:var(--ion-color-dark)}:host-context(.dark) .attachment-item,:host-context(.ion-palette-dark) .attachment-item,:host-context(html.ion-palette-dark) .attachment-item,:host-context(body.dark) .attachment-item,:host-context([data-theme=dark]) .attachment-item{background:#ffffff0a;border-color:#ffffff1f}:host-context(.dark) .attachment-item.status-error,:host-context(.ion-palette-dark) .attachment-item.status-error,:host-context(html.ion-palette-dark) .attachment-item.status-error,:host-context(body.dark) .attachment-item.status-error,:host-context([data-theme=dark]) .attachment-item.status-error{border-color:var(--ion-color-danger)}:host-context(.dark) .attachment-action,:host-context(.ion-palette-dark) .attachment-action,:host-context(html.ion-palette-dark) .attachment-action,:host-context(body.dark) .attachment-action,:host-context([data-theme=dark]) .attachment-action{--background: rgba(255, 255, 255, .04);--background-hover: rgba(255, 255, 255, .08);--background-activated: rgba(255, 255, 255, .12);--border-color: rgba(255, 255, 255, .16);--color: var(--ion-text-color, #fff);--color-activated: var(--ion-text-color, #fff)}.status-icon{font-size:1.25rem;flex-shrink:0}.error-note{font-size:.6875rem;width:100%}.max-note{font-size:.75rem}\n"], dependencies: [{ kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonNote, selector: "ion-note", inputs: ["color", "mode"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }], encapsulation: i0.ViewEncapsulation.None }); }
225
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AttachmentUploaderComponent, isStandalone: true, selector: "val-attachment-uploader", inputs: { props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { attachmentsChange: "attachmentsChange" }, viewQueries: [{ propertyName: "cameraPicker", first: true, predicate: ["cameraPicker"], descendants: true }, { propertyName: "cameraVideo", first: true, predicate: ["cameraVideo"], descendants: true }], ngImport: i0, template: "<div class=\"attachment-uploader\">\n @if (props().title) {\n <val-title class=\"attachment-title\" [props]=\"{ content: props().title, size: 'small', color: 'dark', bold: false }\" />\n }\n\n <!-- file picker est\u00E1ndar -->\n <input #filePicker type=\"file\" [accept]=\"accept()\" multiple class=\"hidden-input\" (change)=\"onFilesSelected($event)\" />\n <!-- fallback c\u00E1mara: solo se dispara si getUserMedia falla/denegado -->\n <input\n #cameraPicker\n type=\"file\"\n accept=\"image/*\"\n capture=\"environment\"\n class=\"hidden-input\"\n (change)=\"onFilesSelected($event)\"\n />\n\n <div class=\"attachment-actions\">\n <ion-button\n class=\"attachment-action\"\n fill=\"outline\"\n size=\"small\"\n [disabled]=\"isDisabled()\"\n (click)=\"filePicker.click()\"\n >\n <ion-icon slot=\"start\" name=\"attach-outline\"></ion-icon>\n {{ i18n.t('attachAdd') }}\n </ion-button>\n <ion-button class=\"attachment-action\" fill=\"outline\" size=\"small\" [disabled]=\"isDisabled()\" (click)=\"openCamera()\">\n <ion-icon slot=\"start\" name=\"camera-outline\"></ion-icon>\n {{ i18n.t('attachCamera') }}\n </ion-button>\n </div>\n\n @if (attachments().length > 0) {\n <div class=\"attachment-list\">\n @for (item of attachments(); track item.id) {\n <div class=\"attachment-item\" [class]=\"'status-' + item.status\">\n @if (item.previewUrl || item.thumbnailUrl || (item.isExternal && item.url)) {\n <img\n class=\"file-thumb\"\n [src]=\"item.previewUrl || item.thumbnailUrl || item.url\"\n [alt]=\"item.file?.name ?? i18n.t('attachFile')\"\n loading=\"lazy\"\n (error)=\"thumbFailed(item.id)\"\n />\n } @else if (!item.isExternal) {\n <ion-icon\n class=\"file-icon\"\n [name]=\"item.file?.type?.startsWith('image/') ? 'image-outline' : 'document-outline'\"\n ></ion-icon>\n }\n <div class=\"file-info\">\n <span class=\"file-name\">{{ item.file?.name ?? i18n.t('attachFile') }}</span>\n <span class=\"file-size\">{{ item.file ? formatSize(item.file.size) : '' }}</span>\n </div>\n\n @if (item.status === 'uploading') {\n <ion-spinner class=\"status-icon\" name=\"circular\"></ion-spinner>\n } @else if (item.status === 'ready') {\n <ion-icon class=\"status-icon\" name=\"checkmark-circle-outline\" color=\"success\"></ion-icon>\n } @else if (item.status === 'error') {\n <ion-icon class=\"status-icon\" name=\"close-circle-outline\" color=\"danger\"></ion-icon>\n } @if (item.status !== 'uploading') {\n <ion-button fill=\"clear\" size=\"small\" color=\"dark\" (click)=\"remove(item.id)\">\n <ion-icon slot=\"icon-only\" name=\"close-outline\"></ion-icon>\n </ion-button>\n } @if (item.status === 'error' && item.error) {\n <ion-note color=\"danger\" class=\"error-note\">{{ item.error }}</ion-note>\n }\n </div>\n }\n </div>\n } @if (props().hint) {\n <p class=\"attachment-hint\">{{ props().hint }}</p>\n }\n</div>\n\n<!-- Overlay de c\u00E1mara (getUserMedia) -->\n@if (showCameraOverlay()) {\n<div class=\"camera-overlay\" (click)=\"closeCamera()\">\n <div class=\"camera-modal\" (click)=\"$event.stopPropagation()\">\n <video #cameraVideo autoplay playsinline class=\"camera-preview\"></video>\n <div class=\"camera-controls\">\n <ion-button class=\"camera-control camera-control--cancel\" fill=\"outline\" (click)=\"closeCamera()\">\n {{ i18n.t('attachCancel') }}\n </ion-button>\n <ion-button class=\"camera-control camera-control--capture\" shape=\"round\" (click)=\"capturePhoto()\">\n <ion-icon slot=\"start\" name=\"camera-outline\"></ion-icon>\n {{ i18n.t('attachCapture') }}\n </ion-button>\n </div>\n </div>\n</div>\n}\n", styles: [".hidden-input{display:none}.camera-overlay{position:fixed;inset:0;z-index:9999;background:#000000d9;display:flex;align-items:center;justify-content:center}.camera-modal{display:flex;flex-direction:column;gap:16px;padding:16px;max-width:min(640px,95vw);width:100%}.camera-preview{width:100%;border-radius:12px;background:#000;aspect-ratio:16/9;object-fit:cover}.camera-controls{display:flex;justify-content:center;gap:12px;flex-wrap:wrap}.camera-controls .camera-control{margin:0;font-weight:700}.camera-controls .camera-control--cancel{--color: #fff;--border-color: rgba(255, 255, 255, .5);--background: rgba(255, 255, 255, .06);--background-hover: rgba(255, 255, 255, .12);--background-activated: rgba(255, 255, 255, .16)}.camera-controls .camera-control--capture{--background: #fff;--background-hover: #f4f4f5;--background-activated: #e4e4e7;--color: #18181b;--box-shadow: 0 10px 24px rgba(0, 0, 0, .28)}.attachment-uploader{display:flex;flex-direction:column;gap:8px}.attachment-title{display:block;margin-bottom:2px}.attachment-hint{margin:2px 0 0;text-align:left;font-size:.75rem;line-height:1.4;color:var(--ion-color-dark)}.attachment-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.attachment-actions ion-button{margin:0;height:32px}.attachment-actions .attachment-action{--background: var(--ion-card-background, var(--ion-background-color, #fff));--background-hover: rgba(var(--ion-color-primary-rgb, 56, 128, 255), .06);--background-activated: rgba(var(--ion-color-primary-rgb, 56, 128, 255), .1);--border-color: var(--ion-border-color, rgba(0, 0, 0, .14));--color: var(--ion-text-color, #222428);--color-activated: var(--ion-text-color, #222428)}.attachment-list{display:flex;flex-direction:column;gap:4px}.attachment-item{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:8px;background:var(--ion-background-color, #fff);border:1px solid var(--ion-color-light-shade, rgba(0, 0, 0, .08));flex-wrap:wrap}.attachment-item.status-error{border-color:var(--ion-color-danger)}.file-icon{font-size:1.375rem;color:var(--ion-text-color);flex-shrink:0}.file-info{flex:1;min-width:0;display:flex;flex-direction:column}.file-thumb{width:48px;height:48px;object-fit:cover;border-radius:6px;flex-shrink:0}.file-name{font-size:.8125rem;color:var(--ion-text-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.file-size{font-size:.6875rem;color:var(--ion-color-dark)}:host-context(.dark) .attachment-item,:host-context(.ion-palette-dark) .attachment-item,:host-context(html.ion-palette-dark) .attachment-item,:host-context(body.dark) .attachment-item,:host-context([data-theme=dark]) .attachment-item{background:#ffffff0a;border-color:#ffffff1f}:host-context(.dark) .attachment-item.status-error,:host-context(.ion-palette-dark) .attachment-item.status-error,:host-context(html.ion-palette-dark) .attachment-item.status-error,:host-context(body.dark) .attachment-item.status-error,:host-context([data-theme=dark]) .attachment-item.status-error{border-color:var(--ion-color-danger)}:host-context(.dark) .attachment-action,:host-context(.ion-palette-dark) .attachment-action,:host-context(html.ion-palette-dark) .attachment-action,:host-context(body.dark) .attachment-action,:host-context([data-theme=dark]) .attachment-action{--background: rgba(255, 255, 255, .04);--background-hover: rgba(255, 255, 255, .08);--background-activated: rgba(255, 255, 255, .12);--border-color: rgba(255, 255, 255, .16);--color: var(--ion-text-color, #fff);--color-activated: var(--ion-text-color, #fff)}.status-icon{font-size:1.25rem;flex-shrink:0}.error-note{font-size:.6875rem;width:100%}.max-note{font-size:.75rem}\n"], dependencies: [{ kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonNote, selector: "ion-note", inputs: ["color", "mode"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }], encapsulation: i0.ViewEncapsulation.None }); }
205
226
  }
206
227
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AttachmentUploaderComponent, decorators: [{
207
228
  type: Component,
208
- args: [{ selector: 'val-attachment-uploader', standalone: true, imports: [IonButton, IonIcon, IonNote, IonSpinner, TitleComponent], encapsulation: ViewEncapsulation.None, template: "<div class=\"attachment-uploader\">\n @if (props().title) {\n <val-title class=\"attachment-title\" [props]=\"{ content: props().title, size: 'small', color: 'dark', bold: false }\" />\n }\n\n <!-- file picker est\u00E1ndar -->\n <input #filePicker type=\"file\" [accept]=\"accept()\" multiple class=\"hidden-input\" (change)=\"onFilesSelected($event)\" />\n <!-- fallback c\u00E1mara: solo se dispara si getUserMedia falla/denegado -->\n <input\n #cameraPicker\n type=\"file\"\n accept=\"image/*\"\n capture=\"environment\"\n class=\"hidden-input\"\n (change)=\"onFilesSelected($event)\"\n />\n\n <div class=\"attachment-actions\">\n <ion-button\n class=\"attachment-action\"\n fill=\"outline\"\n size=\"small\"\n [disabled]=\"isDisabled()\"\n (click)=\"filePicker.click()\"\n >\n <ion-icon slot=\"start\" name=\"attach-outline\"></ion-icon>\n {{ i18n.t('attachAdd') }}\n </ion-button>\n <ion-button class=\"attachment-action\" fill=\"outline\" size=\"small\" [disabled]=\"isDisabled()\" (click)=\"openCamera()\">\n <ion-icon slot=\"start\" name=\"camera-outline\"></ion-icon>\n {{ i18n.t('attachCamera') }}\n </ion-button>\n </div>\n\n @if (attachments().length > 0) {\n <div class=\"attachment-list\">\n @for (item of attachments(); track item.id) {\n <div class=\"attachment-item\" [class]=\"'status-' + item.status\">\n @if (!item.isExternal) {\n <ion-icon\n class=\"file-icon\"\n [name]=\"item.file?.type?.startsWith('image/') ? 'image-outline' : 'document-outline'\"\n ></ion-icon>\n }\n <div class=\"file-info\">\n @if (item.isExternal && item.url) {\n <img class=\"file-thumb\" [src]=\"item.url\" alt=\"foto\" loading=\"lazy\" (error)=\"thumbFailed(item.id)\" />\n } @else {\n <span class=\"file-name\">{{ item.file?.name ?? 'archivo' }}</span>\n <span class=\"file-size\">{{ item.file ? formatSize(item.file.size) : '' }}</span>\n }\n </div>\n\n @if (item.status === 'uploading') {\n <ion-spinner class=\"status-icon\" name=\"circular\"></ion-spinner>\n } @else if (item.status === 'ready') {\n <ion-icon class=\"status-icon\" name=\"checkmark-circle-outline\" color=\"success\"></ion-icon>\n } @else if (item.status === 'error') {\n <ion-icon class=\"status-icon\" name=\"close-circle-outline\" color=\"danger\"></ion-icon>\n } @if (item.status !== 'uploading') {\n <ion-button fill=\"clear\" size=\"small\" color=\"dark\" (click)=\"remove(item.id)\">\n <ion-icon slot=\"icon-only\" name=\"close-outline\"></ion-icon>\n </ion-button>\n } @if (item.status === 'error' && item.error) {\n <ion-note color=\"danger\" class=\"error-note\">{{ item.error }}</ion-note>\n }\n </div>\n }\n </div>\n } @if (props().hint) {\n <p class=\"attachment-hint\">{{ props().hint }}</p>\n }\n</div>\n\n<!-- Overlay de c\u00E1mara (getUserMedia) -->\n@if (showCameraOverlay()) {\n<div class=\"camera-overlay\" (click)=\"closeCamera()\">\n <div class=\"camera-modal\" (click)=\"$event.stopPropagation()\">\n <video #cameraVideo autoplay playsinline class=\"camera-preview\"></video>\n <div class=\"camera-controls\">\n <ion-button class=\"camera-control camera-control--cancel\" fill=\"outline\" (click)=\"closeCamera()\">\n {{ i18n.t('attachCancel') }}\n </ion-button>\n <ion-button class=\"camera-control camera-control--capture\" shape=\"round\" (click)=\"capturePhoto()\">\n <ion-icon slot=\"start\" name=\"camera-outline\"></ion-icon>\n {{ i18n.t('attachCapture') }}\n </ion-button>\n </div>\n </div>\n</div>\n}\n", styles: [".hidden-input{display:none}.camera-overlay{position:fixed;inset:0;z-index:9999;background:#000000d9;display:flex;align-items:center;justify-content:center}.camera-modal{display:flex;flex-direction:column;gap:16px;padding:16px;max-width:min(640px,95vw);width:100%}.camera-preview{width:100%;border-radius:12px;background:#000;aspect-ratio:16/9;object-fit:cover}.camera-controls{display:flex;justify-content:center;gap:12px;flex-wrap:wrap}.camera-controls .camera-control{margin:0;font-weight:700}.camera-controls .camera-control--cancel{--color: #fff;--border-color: rgba(255, 255, 255, .5);--background: rgba(255, 255, 255, .06);--background-hover: rgba(255, 255, 255, .12);--background-activated: rgba(255, 255, 255, .16)}.camera-controls .camera-control--capture{--background: #fff;--background-hover: #f4f4f5;--background-activated: #e4e4e7;--color: #18181b;--box-shadow: 0 10px 24px rgba(0, 0, 0, .28)}.attachment-uploader{display:flex;flex-direction:column;gap:8px}.attachment-title{display:block;margin-bottom:2px}.attachment-hint{margin:2px 0 0;text-align:left;font-size:.75rem;line-height:1.4;color:var(--ion-color-dark)}.attachment-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.attachment-actions ion-button{margin:0;height:32px}.attachment-actions .attachment-action{--background: var(--ion-card-background, var(--ion-background-color, #fff));--background-hover: rgba(var(--ion-color-primary-rgb, 56, 128, 255), .06);--background-activated: rgba(var(--ion-color-primary-rgb, 56, 128, 255), .1);--border-color: var(--ion-border-color, rgba(0, 0, 0, .14));--color: var(--ion-text-color, #222428);--color-activated: var(--ion-text-color, #222428)}.attachment-list{display:flex;flex-direction:column;gap:4px}.attachment-item{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:8px;background:var(--ion-background-color, #fff);border:1px solid var(--ion-color-light-shade, rgba(0, 0, 0, .08));flex-wrap:wrap}.attachment-item.status-error{border-color:var(--ion-color-danger)}.file-icon{font-size:1.375rem;color:var(--ion-text-color);flex-shrink:0}.file-info{flex:1;min-width:0;display:flex;flex-direction:column}.file-thumb{width:48px;height:48px;object-fit:cover;border-radius:6px;flex-shrink:0}.file-name{font-size:.8125rem;color:var(--ion-text-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.file-size{font-size:.6875rem;color:var(--ion-color-dark)}:host-context(.dark) .attachment-item,:host-context(.ion-palette-dark) .attachment-item,:host-context(html.ion-palette-dark) .attachment-item,:host-context(body.dark) .attachment-item,:host-context([data-theme=dark]) .attachment-item{background:#ffffff0a;border-color:#ffffff1f}:host-context(.dark) .attachment-item.status-error,:host-context(.ion-palette-dark) .attachment-item.status-error,:host-context(html.ion-palette-dark) .attachment-item.status-error,:host-context(body.dark) .attachment-item.status-error,:host-context([data-theme=dark]) .attachment-item.status-error{border-color:var(--ion-color-danger)}:host-context(.dark) .attachment-action,:host-context(.ion-palette-dark) .attachment-action,:host-context(html.ion-palette-dark) .attachment-action,:host-context(body.dark) .attachment-action,:host-context([data-theme=dark]) .attachment-action{--background: rgba(255, 255, 255, .04);--background-hover: rgba(255, 255, 255, .08);--background-activated: rgba(255, 255, 255, .12);--border-color: rgba(255, 255, 255, .16);--color: var(--ion-text-color, #fff);--color-activated: var(--ion-text-color, #fff)}.status-icon{font-size:1.25rem;flex-shrink:0}.error-note{font-size:.6875rem;width:100%}.max-note{font-size:.75rem}\n"] }]
229
+ args: [{ selector: 'val-attachment-uploader', standalone: true, imports: [IonButton, IonIcon, IonNote, IonSpinner, TitleComponent], encapsulation: ViewEncapsulation.None, template: "<div class=\"attachment-uploader\">\n @if (props().title) {\n <val-title class=\"attachment-title\" [props]=\"{ content: props().title, size: 'small', color: 'dark', bold: false }\" />\n }\n\n <!-- file picker est\u00E1ndar -->\n <input #filePicker type=\"file\" [accept]=\"accept()\" multiple class=\"hidden-input\" (change)=\"onFilesSelected($event)\" />\n <!-- fallback c\u00E1mara: solo se dispara si getUserMedia falla/denegado -->\n <input\n #cameraPicker\n type=\"file\"\n accept=\"image/*\"\n capture=\"environment\"\n class=\"hidden-input\"\n (change)=\"onFilesSelected($event)\"\n />\n\n <div class=\"attachment-actions\">\n <ion-button\n class=\"attachment-action\"\n fill=\"outline\"\n size=\"small\"\n [disabled]=\"isDisabled()\"\n (click)=\"filePicker.click()\"\n >\n <ion-icon slot=\"start\" name=\"attach-outline\"></ion-icon>\n {{ i18n.t('attachAdd') }}\n </ion-button>\n <ion-button class=\"attachment-action\" fill=\"outline\" size=\"small\" [disabled]=\"isDisabled()\" (click)=\"openCamera()\">\n <ion-icon slot=\"start\" name=\"camera-outline\"></ion-icon>\n {{ i18n.t('attachCamera') }}\n </ion-button>\n </div>\n\n @if (attachments().length > 0) {\n <div class=\"attachment-list\">\n @for (item of attachments(); track item.id) {\n <div class=\"attachment-item\" [class]=\"'status-' + item.status\">\n @if (item.previewUrl || item.thumbnailUrl || (item.isExternal && item.url)) {\n <img\n class=\"file-thumb\"\n [src]=\"item.previewUrl || item.thumbnailUrl || item.url\"\n [alt]=\"item.file?.name ?? i18n.t('attachFile')\"\n loading=\"lazy\"\n (error)=\"thumbFailed(item.id)\"\n />\n } @else if (!item.isExternal) {\n <ion-icon\n class=\"file-icon\"\n [name]=\"item.file?.type?.startsWith('image/') ? 'image-outline' : 'document-outline'\"\n ></ion-icon>\n }\n <div class=\"file-info\">\n <span class=\"file-name\">{{ item.file?.name ?? i18n.t('attachFile') }}</span>\n <span class=\"file-size\">{{ item.file ? formatSize(item.file.size) : '' }}</span>\n </div>\n\n @if (item.status === 'uploading') {\n <ion-spinner class=\"status-icon\" name=\"circular\"></ion-spinner>\n } @else if (item.status === 'ready') {\n <ion-icon class=\"status-icon\" name=\"checkmark-circle-outline\" color=\"success\"></ion-icon>\n } @else if (item.status === 'error') {\n <ion-icon class=\"status-icon\" name=\"close-circle-outline\" color=\"danger\"></ion-icon>\n } @if (item.status !== 'uploading') {\n <ion-button fill=\"clear\" size=\"small\" color=\"dark\" (click)=\"remove(item.id)\">\n <ion-icon slot=\"icon-only\" name=\"close-outline\"></ion-icon>\n </ion-button>\n } @if (item.status === 'error' && item.error) {\n <ion-note color=\"danger\" class=\"error-note\">{{ item.error }}</ion-note>\n }\n </div>\n }\n </div>\n } @if (props().hint) {\n <p class=\"attachment-hint\">{{ props().hint }}</p>\n }\n</div>\n\n<!-- Overlay de c\u00E1mara (getUserMedia) -->\n@if (showCameraOverlay()) {\n<div class=\"camera-overlay\" (click)=\"closeCamera()\">\n <div class=\"camera-modal\" (click)=\"$event.stopPropagation()\">\n <video #cameraVideo autoplay playsinline class=\"camera-preview\"></video>\n <div class=\"camera-controls\">\n <ion-button class=\"camera-control camera-control--cancel\" fill=\"outline\" (click)=\"closeCamera()\">\n {{ i18n.t('attachCancel') }}\n </ion-button>\n <ion-button class=\"camera-control camera-control--capture\" shape=\"round\" (click)=\"capturePhoto()\">\n <ion-icon slot=\"start\" name=\"camera-outline\"></ion-icon>\n {{ i18n.t('attachCapture') }}\n </ion-button>\n </div>\n </div>\n</div>\n}\n", styles: [".hidden-input{display:none}.camera-overlay{position:fixed;inset:0;z-index:9999;background:#000000d9;display:flex;align-items:center;justify-content:center}.camera-modal{display:flex;flex-direction:column;gap:16px;padding:16px;max-width:min(640px,95vw);width:100%}.camera-preview{width:100%;border-radius:12px;background:#000;aspect-ratio:16/9;object-fit:cover}.camera-controls{display:flex;justify-content:center;gap:12px;flex-wrap:wrap}.camera-controls .camera-control{margin:0;font-weight:700}.camera-controls .camera-control--cancel{--color: #fff;--border-color: rgba(255, 255, 255, .5);--background: rgba(255, 255, 255, .06);--background-hover: rgba(255, 255, 255, .12);--background-activated: rgba(255, 255, 255, .16)}.camera-controls .camera-control--capture{--background: #fff;--background-hover: #f4f4f5;--background-activated: #e4e4e7;--color: #18181b;--box-shadow: 0 10px 24px rgba(0, 0, 0, .28)}.attachment-uploader{display:flex;flex-direction:column;gap:8px}.attachment-title{display:block;margin-bottom:2px}.attachment-hint{margin:2px 0 0;text-align:left;font-size:.75rem;line-height:1.4;color:var(--ion-color-dark)}.attachment-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.attachment-actions ion-button{margin:0;height:32px}.attachment-actions .attachment-action{--background: var(--ion-card-background, var(--ion-background-color, #fff));--background-hover: rgba(var(--ion-color-primary-rgb, 56, 128, 255), .06);--background-activated: rgba(var(--ion-color-primary-rgb, 56, 128, 255), .1);--border-color: var(--ion-border-color, rgba(0, 0, 0, .14));--color: var(--ion-text-color, #222428);--color-activated: var(--ion-text-color, #222428)}.attachment-list{display:flex;flex-direction:column;gap:4px}.attachment-item{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:8px;background:var(--ion-background-color, #fff);border:1px solid var(--ion-color-light-shade, rgba(0, 0, 0, .08));flex-wrap:wrap}.attachment-item.status-error{border-color:var(--ion-color-danger)}.file-icon{font-size:1.375rem;color:var(--ion-text-color);flex-shrink:0}.file-info{flex:1;min-width:0;display:flex;flex-direction:column}.file-thumb{width:48px;height:48px;object-fit:cover;border-radius:6px;flex-shrink:0}.file-name{font-size:.8125rem;color:var(--ion-text-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.file-size{font-size:.6875rem;color:var(--ion-color-dark)}:host-context(.dark) .attachment-item,:host-context(.ion-palette-dark) .attachment-item,:host-context(html.ion-palette-dark) .attachment-item,:host-context(body.dark) .attachment-item,:host-context([data-theme=dark]) .attachment-item{background:#ffffff0a;border-color:#ffffff1f}:host-context(.dark) .attachment-item.status-error,:host-context(.ion-palette-dark) .attachment-item.status-error,:host-context(html.ion-palette-dark) .attachment-item.status-error,:host-context(body.dark) .attachment-item.status-error,:host-context([data-theme=dark]) .attachment-item.status-error{border-color:var(--ion-color-danger)}:host-context(.dark) .attachment-action,:host-context(.ion-palette-dark) .attachment-action,:host-context(html.ion-palette-dark) .attachment-action,:host-context(body.dark) .attachment-action,:host-context([data-theme=dark]) .attachment-action{--background: rgba(255, 255, 255, .04);--background-hover: rgba(255, 255, 255, .08);--background-activated: rgba(255, 255, 255, .12);--border-color: rgba(255, 255, 255, .16);--color: var(--ion-text-color, #fff);--color-activated: var(--ion-text-color, #fff)}.status-icon{font-size:1.25rem;flex-shrink:0}.error-note{font-size:.6875rem;width:100%}.max-note{font-size:.75rem}\n"] }]
209
230
  }], ctorParameters: () => [], propDecorators: { cameraPicker: [{
210
231
  type: ViewChild,
211
232
  args: ['cameraPicker']
@@ -213,4 +234,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
213
234
  type: ViewChild,
214
235
  args: ['cameraVideo']
215
236
  }] } });
216
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNobWVudC11cGxvYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2F0dGFjaG1lbnQtdXBsb2FkZXIvYXR0YWNobWVudC11cGxvYWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2F0dGFjaG1lbnQtdXBsb2FkZXIvYXR0YWNobWVudC11cGxvYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFVBQVUsTUFBTSxjQUFjLENBQUM7QUFDdEMsT0FBTyxFQUNMLFNBQVMsRUFHVCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUNMLGFBQWEsRUFDYixhQUFhLEVBQ2Isc0JBQXNCLEVBQ3RCLGtCQUFrQixFQUNsQixZQUFZLEVBQ1osZUFBZSxFQUNmLFlBQVksR0FDYixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7QUFXbkUsTUFBTSxPQUFPLDJCQUEyQjtJQXVCdEMsSUFBSSxTQUFTO1FB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SSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxXQUFXLENBQUMsRUFBVTtRQUNwQiwwRUFBMEU7UUFDMUUsS0FBSyxFQUFFLENBQUM7SUFDVixDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQWE7UUFDdEIsSUFBSSxLQUFLLEdBQUcsSUFBSTtZQUFFLE9BQU8sR0FBRyxLQUFLLElBQUksQ0FBQztRQUN0QyxJQUFJLEtBQUssR0FBRyxJQUFJLEdBQUcsSUFBSTtZQUFFLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ2pFLE9BQU8sR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ3BELENBQUM7K0dBeE5VLDJCQUEyQjttR0FBM0IsMkJBQTJCLHVkQ3RDeEMsd29IQTJGQSxzbkhEMURZLFNBQVMsb1BBQUUsT0FBTywySkFBRSxPQUFPLGdGQUFFLFVBQVUseUdBQUUsY0FBYzs7NEZBS3RELDJCQUEyQjtrQkFSdkMsU0FBUzsrQkFDRSx5QkFBeUIsY0FDdkIsSUFBSSxXQUNQLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGNBQWMsQ0FBQyxpQkFHbkQsaUJBQWlCLENBQUMsSUFBSTt3REFHVixZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWM7Z0JBQ0MsV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvbXByZXNzb3IgZnJvbSAnY29tcHJlc3NvcmpzJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSW9uQnV0dG9uLCBJb25JY29uLCBJb25Ob3RlLCBJb25TcGlubmVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcbmltcG9ydCB7XG4gIGF0dGFjaE91dGxpbmUsXG4gIGNhbWVyYU91dGxpbmUsXG4gIGNoZWNrbWFya0NpcmNsZU91dGxpbmUsXG4gIGNsb3NlQ2lyY2xlT3V0bGluZSxcbiAgY2xvc2VPdXRsaW5lLFxuICBkb2N1bWVudE91dGxpbmUsXG4gIGltYWdlT3V0bGluZSxcbn0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuaW1wb3J0IHsgRmVlZGJhY2tTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZmVlZGJhY2snO1xuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9pMThuJztcbmltcG9ydCB7IEltYWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ltYWdlJztcbmltcG9ydCB7IFRpdGxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvdGl0bGUvdGl0bGUuY29tcG9uZW50JztcbmltcG9ydCB7IEF0dGFjaG1lbnRJdGVtLCBBdHRhY2htZW50VXBsb2FkZXJNZXRhZGF0YSB9IGZyb20gJy4vdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtYXR0YWNobWVudC11cGxvYWRlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtJb25CdXR0b24sIElvbkljb24sIElvbk5vdGUsIElvblNwaW5uZXIsIFRpdGxlQ29tcG9uZW50XSxcbiAgdGVtcGxhdGVVcmw6ICcuL2F0dGFjaG1lbnQtdXBsb2FkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vYXR0YWNobWVudC11cGxvYWRlci5jb21wb25lbnQuc2NzcycsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIEF0dGFjaG1lbnRVcGxvYWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBWaWV3Q2hpbGQoJ2NhbWVyYVBpY2tlcicpIGNhbWVyYVBpY2tlciE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ2NhbWVyYVZpZGVvJykgY2FtZXJhVmlkZW8hOiBFbGVtZW50UmVmPEhUTUxWaWRlb0VsZW1lbnQ+O1xuXG4gIHByb3BzID0gaW5wdXQ8QXR0YWNobWVudFVwbG9hZGVyTWV0YWRhdGE+KHt9KTtcblxuICBhdHRhY2htZW50c0NoYW5nZSA9IG91dHB1dDxBdHRhY2htZW50SXRlbVtdPigpO1xuXG4gIHByb3RlY3RlZCBpMThuID0gaW5qZWN0KEkxOG5TZXJ2aWNlKTtcbiAgcHJpdmF0ZSBmZWVkYmFja1NlcnZpY2UgPSBpbmplY3QoRmVlZGJhY2tTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIGltYWdlU2VydmljZSA9IGluamVjdChJbWFnZVNlcnZpY2UpO1xuXG4gIGF0dGFjaG1lbnRzID0gc2lnbmFsPEF0dGFjaG1lbnRJdGVtW10+KFtdKTtcbiAgc2hvd0NhbWVyYU92ZXJsYXkgPSBzaWduYWwoZmFsc2UpO1xuXG4gIHByaXZhdGUgY2FtZXJhU3RyZWFtOiBNZWRpYVN0cmVhbSB8IG51bGwgPSBudWxsO1xuXG4gIG1heEZpbGVzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5wcm9wcygpLm1heEZpbGVzID8/IDUpO1xuICBhY2NlcHQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnByb3BzKCkuYWNjZXB0ID8/ICdpbWFnZS9qcGVnLGltYWdlL3BuZyxpbWFnZS93ZWJwLGFwcGxpY2F0aW9uL3BkZicpO1xuICBtYXhSZWFjaGVkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5hdHRhY2htZW50cygpLmxlbmd0aCA+PSB0aGlzLm1heEZpbGVzKCkpO1xuICBpc0Rpc2FibGVkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5wcm9wcygpLmRpc2FibGVkID09PSB0cnVlIHx8IHRoaXMubWF4UmVhY2hlZCgpKTtcbiAgaXNVcGxvYWRpbmcgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmF0dGFjaG1lbnRzKCkuc29tZShhID0+IGEuc3RhdHVzID09PSAndXBsb2FkaW5nJykpO1xuXG4gIGdldCByZWFkeVVybHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmF0dGFjaG1lbnRzKClcbiAgICAgIC5maWx0ZXIoYSA9PiBhLnN0YXR1cyA9PT0gJ3JlYWR5JylcbiAgICAgIC5tYXAoYSA9PiBhLnVybCEpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLnByb3BzKCkuZXhpc3RpbmdVcmxzID8/IFtdO1xuICAgIGlmIChleGlzdGluZy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmF0dGFjaG1lbnRzLnNldChcbiAgICAgICAgZXhpc3RpbmcubWFwKCh1cmwsIGkpID0+ICh7XG4gICAgICAgICAgaWQ6IGBleGlzdGluZy0ke2l9LSR7dXJsLnNwbGl0KCcvJykucG9wKCl9YCxcbiAgICAgICAgICBzdGF0dXM6ICdyZWFkeScgYXMgY29uc3QsXG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIGlzRXh0ZXJuYWw6IHRydWUsXG4gICAgICAgIH0pKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBhZGRJY29ucyh7XG4gICAgICBhdHRhY2hPdXRsaW5lLFxuICAgICAgY2FtZXJhT3V0bGluZSxcbiAgICAgIGNoZWNrbWFya0NpcmNsZU91dGxpbmUsXG4gICAgICBjbG9zZUNpcmNsZU91dGxpbmUsXG4gICAgICBjbG9zZU91dGxpbmUsXG4gICAgICBkb2N1bWVudE91dGxpbmUsXG4gICAgICBpbWFnZU91dGxpbmUsXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBvcGVuQ2FtZXJhKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghbmF2aWdhdG9yLm1lZGlhRGV2aWNlcz8uZ2V0VXNlck1lZGlhKSB7XG4gICAgICB0aGlzLmNhbWVyYVBpY2tlci5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICB0aGlzLmNhbWVyYVN0cmVhbSA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHtcbiAgICAgICAgdmlkZW86IHsgZmFjaW5nTW9kZTogeyBpZGVhbDogJ2Vudmlyb25tZW50JyB9LCB3aWR0aDogeyBpZGVhbDogMTkyMCB9LCBoZWlnaHQ6IHsgaWRlYWw6IDEwODAgfSB9LFxuICAgICAgfSk7XG4gICAgICB0aGlzLnNob3dDYW1lcmFPdmVybGF5LnNldCh0cnVlKTtcbiAgICAgIC8vIEVsIHZpZGVvIGVsZW1lbnQgc2UgcmVuZGVyaXphIGRlc3B1w6lzIGRlbCBzaWduYWwg4oaSIGVzcGVyYXIgdW4gdGlja1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNhbWVyYVZpZGVvPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgdGhpcy5jYW1lcmFWaWRlby5uYXRpdmVFbGVtZW50LnNyY09iamVjdCA9IHRoaXMuY2FtZXJhU3RyZWFtO1xuICAgICAgICB9XG4gICAgICB9LCA1MCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBQZXJtaXNvIGRlbmVnYWRvIG8gZGlzcG9zaXRpdm8gc2luIGPDoW1hcmEg4oaSIGZhbGxiYWNrIGZpbGUgcGlja2VyXG4gICAgICB0aGlzLmNhbWVyYVBpY2tlci5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gICAgfVxuICB9XG5cbiAgY2FwdHVyZVBob3RvKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvID0gdGhpcy5jYW1lcmFWaWRlbz8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIXZpZGVvKSByZXR1cm47XG5cbiAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICBjYW52YXMud2lkdGggPSB2aWRlby52aWRlb1dpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSB2aWRlby52aWRlb0hlaWdodDtcbiAgICBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKSEuZHJhd0ltYWdlKHZpZGVvLCAwLCAwKTtcblxuICAgIGNhbnZhcy50b0Jsb2IoXG4gICAgICBibG9iID0+IHtcbiAgICAgICAgaWYgKCFibG9iKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGZpbGUgPSBuZXcgRmlsZShbYmxvYl0sIGBmb3RvXyR7RGF0ZS5ub3coKX0uanBnYCwgeyB0eXBlOiAnaW1hZ2UvanBlZycgfSk7XG4gICAgICAgIHRoaXMuY2xvc2VDYW1lcmEoKTtcbiAgICAgICAgdGhpcy5wcm9jZXNzRmlsZXMoW2ZpbGVdKTtcbiAgICAgIH0sXG4gICAgICAnaW1hZ2UvanBlZycsXG4gICAgICAwLjlcbiAgICApO1xuICB9XG5cbiAgY2xvc2VDYW1lcmEoKTogdm9pZCB7XG4gICAgdGhpcy5jYW1lcmFTdHJlYW0/LmdldFRyYWNrcygpLmZvckVhY2godCA9PiB0LnN0b3AoKSk7XG4gICAgdGhpcy5jYW1lcmFTdHJlYW0gPSBudWxsO1xuICAgIGlmICh0aGlzLmNhbWVyYVZpZGVvPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICB0aGlzLmNhbWVyYVZpZGVvLm5hdGl2ZUVsZW1lbnQuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5zaG93Q2FtZXJhT3ZlcmxheS5zZXQoZmFsc2UpO1xuICB9XG5cbiAgYXN5bmMgb25GaWxlc1NlbGVjdGVkKGV2ZW50OiBFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3QgZmlsZXMgPSBBcnJheS5mcm9tKGlucHV0LmZpbGVzID8/IFtdKTtcbiAgICBpbnB1dC52YWx1ZSA9ICcnO1xuICAgIHRoaXMucHJvY2Vzc0ZpbGVzKGZpbGVzKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc0ZpbGVzKGZpbGVzOiBGaWxlW10pOiB2b2lkIHtcbiAgICBjb25zdCBhdmFpbGFibGUgPSB0aGlzLm1heEZpbGVzKCkgLSB0aGlzLmF0dGFjaG1lbnRzKCkubGVuZ3RoO1xuICAgIGNvbnN0IHRvUHJvY2VzcyA9IGZpbGVzLnNsaWNlKDAsIGF2YWlsYWJsZSk7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIHRvUHJvY2Vzcykge1xuICAgICAgY29uc3QgaWQgPSBjcnlwdG8ucmFuZG9tVVVJRCgpO1xuICAgICAgaWYgKHRoaXMucHJvcHMoKS5sYXp5KSB7XG4gICAgICAgIC8vIExhenkgbW9kZTogYnVmZmVhciBzaW4gc3ViaXIuIEVsIGNvbnN1bWVyIHN1YmUgY3VhbmRvIHRlbmdhIGVsIGRlc3Rpbm8uXG4gICAgICAgIHRoaXMuYXR0YWNobWVudHMudXBkYXRlKGxpc3QgPT4gWy4uLmxpc3QsIHsgaWQsIGZpbGUsIHN0YXR1czogJ3JlYWR5JyB9XSk7XG4gICAgICAgIHRoaXMuYXR0YWNobWVudHNDaGFuZ2UuZW1pdCh0aGlzLmF0dGFjaG1lbnRzKCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hdHRhY2htZW50cy51cGRhdGUobGlzdCA9PiBbLi4ubGlzdCwgeyBpZCwgZmlsZSwgc3RhdHVzOiAndXBsb2FkaW5nJyB9XSk7XG4gICAgICAgIHRoaXMuYXR0YWNobWVudHNDaGFuZ2UuZW1pdCh0aGlzLmF0dGFjaG1lbnRzKCkpO1xuICAgICAgICB0aGlzLnVwbG9hZEZpbGUoaWQsIGZpbGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29tcHJlc3NJbWFnZShmaWxlOiBGaWxlKTogUHJvbWlzZTxGaWxlPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIG5ldyBDb21wcmVzc29yKGZpbGUsIHtcbiAgICAgICAgcXVhbGl0eTogMC44LFxuICAgICAgICBtYXhXaWR0aDogMTkyMCxcbiAgICAgICAgbWF4SGVpZ2h0OiAxOTIwLFxuICAgICAgICBjb252ZXJ0U2l6ZTogMiAqIDEwMjQgKiAxMDI0LFxuICAgICAgICBzdWNjZXNzKHJlc3VsdCkge1xuICAgICAgICAgIHJlc29sdmUobmV3IEZpbGUoW3Jlc3VsdF0sIGZpbGUubmFtZSwgeyB0eXBlOiByZXN1bHQudHlwZSB9KSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmEgeSBzdWJlIGxhIG1pbmlhdHVyYSBkZSB1bmEgaW1hZ2VuIHlhIGNvbXByaW1pZGEuXG4gICAqXG4gICAqIFJlY2liZSBlbCBhcmNoaXZvIENPTVBSSU1JRE8gYSBwcm9ww7NzaXRvOiBgY29tcHJlc3NvcmpzYCB5YSBub3JtYWxpesOzIGxhXG4gICAqIG9yaWVudGFjacOzbiBFWElGLCB5IGBJbWFnZVNlcnZpY2VgIHRyYWJhamEgc29icmUgY2FudmFzIHNpbiBsZWVyIEVYSUYg4oCUIHNpXG4gICAqIHNlIGxlIHBhc2FyYSBlbCBvcmlnaW5hbCwgbGFzIGZvdG9zIHZlcnRpY2FsZXMgZGUgdGVsw6lmb25vIHNhbGRyw61hblxuICAgKiByb3RhZGFzLiBWZXIgbGEgbm90YSBlbiBgZ2VuZXJhdGVUaHVtYm5haWxgICh0eXBlcy50cykuXG4gICAqXG4gICAqIE51bmNhIGVzIGZhdGFsOiBzaSBmYWxsYSwgZWwgYWRqdW50byBxdWVkYSBzdWJpZG8gc2luIG1pbmlhdHVyYSB5IGxhc1xuICAgKiBsaXN0YXMgY2FlbiBhbCBhcmNoaXZvIGdyYW5kZS4gUGVyZGVyIGxhIG1pbmlhdHVyYSBubyBqdXN0aWZpY2EgcGVyZGVyIGxhXG4gICAqIGZvdG8gcXVlIGVsIHVzdWFyaW8gYWNhYmEgZGUgc3ViaXIuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHVwbG9hZFRodW1ibmFpbChjb21wcmVzc2VkOiBGaWxlKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMucHJvcHMoKS50aHVtYm5haWxTaXplID8/IDMyMDtcbiAgICAgIGNvbnN0IHRodW1iID0gYXdhaXQgdGhpcy5pbWFnZVNlcnZpY2UudGh1bWJuYWlsKGNvbXByZXNzZWQsIHNpemUpO1xuICAgICAgY29uc3QgYmFzZU5hbWUgPSBjb21wcmVzc2VkLm5hbWUucmVwbGFjZSgvXFwuW14uXSskLywgJycpO1xuICAgICAgY29uc3QgdGh1bWJGaWxlID0gbmV3IEZpbGUoW3RodW1iLmJsb2JdLCBgJHtiYXNlTmFtZX0tdGh1bWIuanBnYCwgeyB0eXBlOiAnaW1hZ2UvanBlZycgfSk7XG5cbiAgICAgIGNvbnN0IHRodW1iVXBsb2FkRm4gPVxuICAgICAgICB0aGlzLnByb3BzKCkudGh1bWJuYWlsVXBsb2FkRm4gPz9cbiAgICAgICAgdGhpcy5wcm9wcygpLnVwbG9hZEZuID8/XG4gICAgICAgIHRoaXMuZmVlZGJhY2tTZXJ2aWNlPy51cGxvYWRBdHRhY2htZW50LmJpbmQodGhpcy5mZWVkYmFja1NlcnZpY2UpO1xuICAgICAgaWYgKCF0aHVtYlVwbG9hZEZuKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgICByZXR1cm4gYXdhaXQgdGh1bWJVcGxvYWRGbih0aHVtYkZpbGUpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwbG9hZEZpbGUoaWQ6IHN0cmluZywgZmlsZTogRmlsZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzaG91bGRDb21wcmVzcyA9IHRoaXMucHJvcHMoKS5jb21wcmVzc0ltYWdlcyAhPT0gZmFsc2UgJiYgZmlsZS50eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpO1xuICAgICAgY29uc3QgZmlsZVRvVXBsb2FkID0gc2hvdWxkQ29tcHJlc3MgPyBhd2FpdCB0aGlzLmNvbXByZXNzSW1hZ2UoZmlsZSkgOiBmaWxlO1xuICAgICAgY29uc3QgdXBsb2FkRm4gPSB0aGlzLnByb3BzKCkudXBsb2FkRm4gPz8gdGhpcy5mZWVkYmFja1NlcnZpY2U/LnVwbG9hZEF0dGFjaG1lbnQuYmluZCh0aGlzLmZlZWRiYWNrU2VydmljZSk7XG4gICAgICBpZiAoIXVwbG9hZEZuKSB0aHJvdyBuZXcgRXJyb3IoJ05vIHVwbG9hZCBmdW5jdGlvbiBjb25maWd1cmVkJyk7XG4gICAgICBjb25zdCB1cmwgPSBhd2FpdCB1cGxvYWRGbihmaWxlVG9VcGxvYWQpO1xuXG4gICAgICAvLyBMYSBtaW5pYXR1cmEgU0lFTVBSRSBzYWxlIGRlIHVuIGFyY2hpdm8gcGFzYWRvIHBvciBjb21wcmVzc29yanMsIHF1ZSBlc1xuICAgICAgLy8gbG8gcXVlIGVuZGVyZXphIGxhIG9yaWVudGFjacOzbiBFWElGLiBTaSBlbCBjb25zdW1lciBkZXNhY3RpdsOzIGxhXG4gICAgICAvLyBjb21wcmVzacOzbiwgc2UgY29tcHJpbWUgaWd1YWwgc29sbyBwYXJhIGdlbmVyYXIgbGEgbWluaWF0dXJhIOKAlCBlbFxuICAgICAgLy8gYXJjaGl2byBxdWUgc2Ugc3ViZSBjb21vIHByaW5jaXBhbCBzaWd1ZSBzaWVuZG8gZWwgb3JpZ2luYWwuXG4gICAgICBjb25zdCB3YW50c1RodW1iID0gdGhpcy5wcm9wcygpLmdlbmVyYXRlVGh1bWJuYWlsID09PSB0cnVlICYmIGZpbGUudHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKTtcbiAgICAgIGNvbnN0IHRodW1ibmFpbFVybCA9IHdhbnRzVGh1bWJcbiAgICAgICAgPyBhd2FpdCB0aGlzLnVwbG9hZFRodW1ibmFpbChzaG91bGRDb21wcmVzcyA/IGZpbGVUb1VwbG9hZCA6IGF3YWl0IHRoaXMuY29tcHJlc3NJbWFnZShmaWxlKSlcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIHRoaXMuYXR0YWNobWVudHMudXBkYXRlKGxpc3QgPT4gbGlzdC5tYXAoYSA9PiAoYS5pZCA9PT0gaWQgPyB7IC4uLmEsIHN0YXR1czogJ3JlYWR5JywgdXJsLCB0aHVtYm5haWxVcmwgfSA6IGEpKSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICBjb25zdCBlcnJvciA9IHRoaXMuaTE4bi50KCdhdHRhY2hVcGxvYWRGYWlsZWQnKTtcbiAgICAgIHRoaXMuYXR0YWNobWVudHMudXBkYXRlKGxpc3QgPT4gbGlzdC5tYXAoYSA9PiAoYS5pZCA9PT0gaWQgPyB7IC4uLmEsIHN0YXR1czogJ2Vycm9yJywgZXJyb3IgfSA6IGEpKSk7XG4gICAgfVxuICAgIHRoaXMuYXR0YWNobWVudHNDaGFuZ2UuZW1pdCh0aGlzLmF0dGFjaG1lbnRzKCkpO1xuICB9XG5cbiAgcmVtb3ZlKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmF0dGFjaG1lbnRzLnVwZGF0ZShsaXN0ID0+IGxpc3QuZmlsdGVyKGEgPT4gYS5pZCAhPT0gaWQpKTtcbiAgICB0aGlzLmF0dGFjaG1lbnRzQ2hhbmdlLmVtaXQodGhpcy5hdHRhY2htZW50cygpKTtcbiAgfVxuXG4gIHRodW1iRmFpbGVkKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBuby1vcCDigJQgc2kgbGEgaW1hZ2VuIGZhbGxhLCBsYSBlc3RydWN0dXJhIHlhIHRpZW5lIGVsIGZhbGxiYWNrIGRlIHRleHRvXG4gICAgdm9pZCBpZDtcbiAgfVxuXG4gIGZvcm1hdFNpemUoYnl0ZXM6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKGJ5dGVzIDwgMTAyNCkgcmV0dXJuIGAke2J5dGVzfSBCYDtcbiAgICBpZiAoYnl0ZXMgPCAxMDI0ICogMTAyNCkgcmV0dXJuIGAke01hdGgucm91bmQoYnl0ZXMgLyAxMDI0KX0gS0JgO1xuICAgIHJldHVybiBgJHsoYnl0ZXMgLyAoMTAyNCAqIDEwMjQpKS50b0ZpeGVkKDEpfSBNQmA7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJhdHRhY2htZW50LXVwbG9hZGVyXCI+XG4gIEBpZiAocHJvcHMoKS50aXRsZSkge1xuICA8dmFsLXRpdGxlIGNsYXNzPVwiYXR0YWNobWVudC10aXRsZVwiIFtwcm9wc109XCJ7IGNvbnRlbnQ6IHByb3BzKCkudGl0bGUsIHNpemU6ICdzbWFsbCcsIGNvbG9yOiAnZGFyaycsIGJvbGQ6IGZhbHNlIH1cIiAvPlxuICB9XG5cbiAgPCEtLSBmaWxlIHBpY2tlciBlc3TDoW5kYXIgLS0+XG4gIDxpbnB1dCAjZmlsZVBpY2tlciB0eXBlPVwiZmlsZVwiIFthY2NlcHRdPVwiYWNjZXB0KClcIiBtdWx0aXBsZSBjbGFzcz1cImhpZGRlbi1pbnB1dFwiIChjaGFuZ2UpPVwib25GaWxlc1NlbGVjdGVkKCRldmVudClcIiAvPlxuICA8IS0tIGZhbGxiYWNrIGPDoW1hcmE6IHNvbG8gc2UgZGlzcGFyYSBzaSBnZXRVc2VyTWVkaWEgZmFsbGEvZGVuZWdhZG8gLS0+XG4gIDxpbnB1dFxuICAgICNjYW1lcmFQaWNrZXJcbiAgICB0eXBlPVwiZmlsZVwiXG4gICAgYWNjZXB0PVwiaW1hZ2UvKlwiXG4gICAgY2FwdHVyZT1cImVudmlyb25tZW50XCJcbiAgICBjbGFzcz1cImhpZGRlbi1pbnB1dFwiXG4gICAgKGNoYW5nZSk9XCJvbkZpbGVzU2VsZWN0ZWQoJGV2ZW50KVwiXG4gIC8+XG5cbiAgPGRpdiBjbGFzcz1cImF0dGFjaG1lbnQtYWN0aW9uc1wiPlxuICAgIDxpb24tYnV0dG9uXG4gICAgICBjbGFzcz1cImF0dGFjaG1lbnQtYWN0aW9uXCJcbiAgICAgIGZpbGw9XCJvdXRsaW5lXCJcbiAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZCgpXCJcbiAgICAgIChjbGljayk9XCJmaWxlUGlja2VyLmNsaWNrKClcIlxuICAgID5cbiAgICAgIDxpb24taWNvbiBzbG90PVwic3RhcnRcIiBuYW1lPVwiYXR0YWNoLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAge3sgaTE4bi50KCdhdHRhY2hBZGQnKSB9fVxuICAgIDwvaW9uLWJ1dHRvbj5cbiAgICA8aW9uLWJ1dHRvbiBjbGFzcz1cImF0dGFjaG1lbnQtYWN0aW9uXCIgZmlsbD1cIm91dGxpbmVcIiBzaXplPVwic21hbGxcIiBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZCgpXCIgKGNsaWNrKT1cIm9wZW5DYW1lcmEoKVwiPlxuICAgICAgPGlvbi1pY29uIHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJjYW1lcmEtb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICB7eyBpMThuLnQoJ2F0dGFjaENhbWVyYScpIH19XG4gICAgPC9pb24tYnV0dG9uPlxuICA8L2Rpdj5cblxuICBAaWYgKGF0dGFjaG1lbnRzKCkubGVuZ3RoID4gMCkge1xuICA8ZGl2IGNsYXNzPVwiYXR0YWNobWVudC1saXN0XCI+XG4gICAgQGZvciAoaXRlbSBvZiBhdHRhY2htZW50cygpOyB0cmFjayBpdGVtLmlkKSB7XG4gICAgPGRpdiBjbGFzcz1cImF0dGFjaG1lbnQtaXRlbVwiIFtjbGFzc109XCInc3RhdHVzLScgKyBpdGVtLnN0YXR1c1wiPlxuICAgICAgQGlmICghaXRlbS5pc0V4dGVybmFsKSB7XG4gICAgICA8aW9uLWljb25cbiAgICAgICAgY2xhc3M9XCJmaWxlLWljb25cIlxuICAgICAgICBbbmFtZV09XCJpdGVtLmZpbGU/LnR5cGU/LnN0YXJ0c1dpdGgoJ2ltYWdlLycpID8gJ2ltYWdlLW91dGxpbmUnIDogJ2RvY3VtZW50LW91dGxpbmUnXCJcbiAgICAgID48L2lvbi1pY29uPlxuICAgICAgfVxuICAgICAgPGRpdiBjbGFzcz1cImZpbGUtaW5mb1wiPlxuICAgICAgICBAaWYgKGl0ZW0uaXNFeHRlcm5hbCAmJiBpdGVtLnVybCkge1xuICAgICAgICA8aW1nIGNsYXNzPVwiZmlsZS10aHVtYlwiIFtzcmNdPVwiaXRlbS51cmxcIiBhbHQ9XCJmb3RvXCIgbG9hZGluZz1cImxhenlcIiAoZXJyb3IpPVwidGh1bWJGYWlsZWQoaXRlbS5pZClcIiAvPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWxlLW5hbWVcIj57eyBpdGVtLmZpbGU/Lm5hbWUgPz8gJ2FyY2hpdm8nIH19PC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImZpbGUtc2l6ZVwiPnt7IGl0ZW0uZmlsZSA/IGZvcm1hdFNpemUoaXRlbS5maWxlLnNpemUpIDogJycgfX08L3NwYW4+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuXG4gICAgICBAaWYgKGl0ZW0uc3RhdHVzID09PSAndXBsb2FkaW5nJykge1xuICAgICAgPGlvbi1zcGlubmVyIGNsYXNzPVwic3RhdHVzLWljb25cIiBuYW1lPVwiY2lyY3VsYXJcIj48L2lvbi1zcGlubmVyPlxuICAgICAgfSBAZWxzZSBpZiAoaXRlbS5zdGF0dXMgPT09ICdyZWFkeScpIHtcbiAgICAgIDxpb24taWNvbiBjbGFzcz1cInN0YXR1cy1pY29uXCIgbmFtZT1cImNoZWNrbWFyay1jaXJjbGUtb3V0bGluZVwiIGNvbG9yPVwic3VjY2Vzc1wiPjwvaW9uLWljb24+XG4gICAgICB9IEBlbHNlIGlmIChpdGVtLnN0YXR1cyA9PT0gJ2Vycm9yJykge1xuICAgICAgPGlvbi1pY29uIGNsYXNzPVwic3RhdHVzLWljb25cIiBuYW1lPVwiY2xvc2UtY2lyY2xlLW91dGxpbmVcIiBjb2xvcj1cImRhbmdlclwiPjwvaW9uLWljb24+XG4gICAgICB9IEBpZiAoaXRlbS5zdGF0dXMgIT09ICd1cGxvYWRpbmcnKSB7XG4gICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwiY2xlYXJcIiBzaXplPVwic21hbGxcIiBjb2xvcj1cImRhcmtcIiAoY2xpY2spPVwicmVtb3ZlKGl0ZW0uaWQpXCI+XG4gICAgICAgIDxpb24taWNvbiBzbG90PVwiaWNvbi1vbmx5XCIgbmFtZT1cImNsb3NlLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgfSBAaWYgKGl0ZW0uc3RhdHVzID09PSAnZXJyb3InICYmIGl0ZW0uZXJyb3IpIHtcbiAgICAgIDxpb24tbm90ZSBjb2xvcj1cImRhbmdlclwiIGNsYXNzPVwiZXJyb3Itbm90ZVwiPnt7IGl0ZW0uZXJyb3IgfX08L2lvbi1ub3RlPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG4gIH0gQGlmIChwcm9wcygpLmhpbnQpIHtcbiAgPHAgY2xhc3M9XCJhdHRhY2htZW50LWhpbnRcIj57eyBwcm9wcygpLmhpbnQgfX08L3A+XG4gIH1cbjwvZGl2PlxuXG48IS0tIE92ZXJsYXkgZGUgY8OhbWFyYSAoZ2V0VXNlck1lZGlhKSAtLT5cbkBpZiAoc2hvd0NhbWVyYU92ZXJsYXkoKSkge1xuPGRpdiBjbGFzcz1cImNhbWVyYS1vdmVybGF5XCIgKGNsaWNrKT1cImNsb3NlQ2FtZXJhKClcIj5cbiAgPGRpdiBjbGFzcz1cImNhbWVyYS1tb2RhbFwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICA8dmlkZW8gI2NhbWVyYVZpZGVvIGF1dG9wbGF5IHBsYXlzaW5saW5lIGNsYXNzPVwiY2FtZXJhLXByZXZpZXdcIj48L3ZpZGVvPlxuICAgIDxkaXYgY2xhc3M9XCJjYW1lcmEtY29udHJvbHNcIj5cbiAgICAgIDxpb24tYnV0dG9uIGNsYXNzPVwiY2FtZXJhLWNvbnRyb2wgY2FtZXJhLWNvbnRyb2wtLWNhbmNlbFwiIGZpbGw9XCJvdXRsaW5lXCIgKGNsaWNrKT1cImNsb3NlQ2FtZXJhKClcIj5cbiAgICAgICAge3sgaTE4bi50KCdhdHRhY2hDYW5jZWwnKSB9fVxuICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPGlvbi1idXR0b24gY2xhc3M9XCJjYW1lcmEtY29udHJvbCBjYW1lcmEtY29udHJvbC0tY2FwdHVyZVwiIHNoYXBlPVwicm91bmRcIiAoY2xpY2spPVwiY2FwdHVyZVBob3RvKClcIj5cbiAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJjYW1lcmEtb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgIHt7IGkxOG4udCgnYXR0YWNoQ2FwdHVyZScpIH19XG4gICAgICA8L2lvbi1idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG59XG4iXX0=
237
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNobWVudC11cGxvYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2F0dGFjaG1lbnQtdXBsb2FkZXIvYXR0YWNobWVudC11cGxvYWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2F0dGFjaG1lbnQtdXBsb2FkZXIvYXR0YWNobWVudC11cGxvYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFVBQVUsTUFBTSxjQUFjLENBQUM7QUFDdEMsT0FBTyxFQUNMLFNBQVMsRUFJVCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUNMLGFBQWEsRUFDYixhQUFhLEVBQ2Isc0JBQXNCLEVBQ3RCLGtCQUFrQixFQUNsQixZQUFZLEVBQ1osZUFBZSxFQUNmLFlBQVksR0FDYixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7QUFXbkUsTUFBTSxPQUFPLDJCQUEyQjtJQXdCdEMsSUFBSSxTQUFTO1FB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LEtBQUssRUFBRSxDQUFDO0lBQ1YsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFhO1FBQ3RCLElBQUksS0FBSyxHQUFHLElBQUk7WUFBRSxPQUFPLEdBQUcsS0FBSyxJQUFJLENBQUM7UUFDdEMsSUFBSSxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUk7WUFBRSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNqRSxPQUFPLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNwRCxDQUFDOytHQTlPVSwyQkFBMkI7bUdBQTNCLDJCQUEyQix1ZEN2Q3hDLG15SEErRkEsc25IRDdEWSxTQUFTLG9QQUFFLE9BQU8sMkpBQUUsT0FBTyxnRkFBRSxVQUFVLHlHQUFFLGNBQWM7OzRGQUt0RCwyQkFBMkI7a0JBUnZDLFNBQVM7K0JBQ0UseUJBQXlCLGNBQ3ZCLElBQUksV0FDUCxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxjQUFjLENBQUMsaUJBR25ELGlCQUFpQixDQUFDLElBQUk7d0RBR1YsWUFBWTtzQkFBdEMsU0FBUzt1QkFBQyxjQUFjO2dCQUNDLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb21wcmVzc29yIGZyb20gJ2NvbXByZXNzb3Jqcyc7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSW9uQnV0dG9uLCBJb25JY29uLCBJb25Ob3RlLCBJb25TcGlubmVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcbmltcG9ydCB7XG4gIGF0dGFjaE91dGxpbmUsXG4gIGNhbWVyYU91dGxpbmUsXG4gIGNoZWNrbWFya0NpcmNsZU91dGxpbmUsXG4gIGNsb3NlQ2lyY2xlT3V0bGluZSxcbiAgY2xvc2VPdXRsaW5lLFxuICBkb2N1bWVudE91dGxpbmUsXG4gIGltYWdlT3V0bGluZSxcbn0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuaW1wb3J0IHsgRmVlZGJhY2tTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZmVlZGJhY2snO1xuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9pMThuJztcbmltcG9ydCB7IEltYWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ltYWdlJztcbmltcG9ydCB7IFRpdGxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvdGl0bGUvdGl0bGUuY29tcG9uZW50JztcbmltcG9ydCB7IEF0dGFjaG1lbnRJdGVtLCBBdHRhY2htZW50VXBsb2FkZXJNZXRhZGF0YSB9IGZyb20gJy4vdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtYXR0YWNobWVudC11cGxvYWRlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtJb25CdXR0b24sIElvbkljb24sIElvbk5vdGUsIElvblNwaW5uZXIsIFRpdGxlQ29tcG9uZW50XSxcbiAgdGVtcGxhdGVVcmw6ICcuL2F0dGFjaG1lbnQtdXBsb2FkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vYXR0YWNobWVudC11cGxvYWRlci5jb21wb25lbnQuc2NzcycsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIEF0dGFjaG1lbnRVcGxvYWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgnY2FtZXJhUGlja2VyJykgY2FtZXJhUGlja2VyITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnY2FtZXJhVmlkZW8nKSBjYW1lcmFWaWRlbyE6IEVsZW1lbnRSZWY8SFRNTFZpZGVvRWxlbWVudD47XG5cbiAgcHJvcHMgPSBpbnB1dDxBdHRhY2htZW50VXBsb2FkZXJNZXRhZGF0YT4oe30pO1xuXG4gIGF0dGFjaG1lbnRzQ2hhbmdlID0gb3V0cHV0PEF0dGFjaG1lbnRJdGVtW10+KCk7XG5cbiAgcHJvdGVjdGVkIGkxOG4gPSBpbmplY3QoSTE4blNlcnZpY2UpO1xuICBwcml2YXRlIGZlZWRiYWNrU2VydmljZSA9IGluamVjdChGZWVkYmFja1NlcnZpY2UsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgaW1hZ2VTZXJ2aWNlID0gaW5qZWN0KEltYWdlU2VydmljZSk7XG5cbiAgYXR0YWNobWVudHMgPSBzaWduYWw8QXR0YWNobWVudEl0ZW1bXT4oW10pO1xuICBzaG93Q2FtZXJhT3ZlcmxheSA9IHNpZ25hbChmYWxzZSk7XG5cbiAgcHJpdmF0ZSBjYW1lcmFTdHJlYW06IE1lZGlhU3RyZWFtIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcHJldmlld1VybHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBtYXhGaWxlcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMucHJvcHMoKS5tYXhGaWxlcyA/PyA1KTtcbiAgYWNjZXB0ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5wcm9wcygpLmFjY2VwdCA/PyAnaW1hZ2UvanBlZyxpbWFnZS9wbmcsaW1hZ2Uvd2VicCxhcHBsaWNhdGlvbi9wZGYnKTtcbiAgbWF4UmVhY2hlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuYXR0YWNobWVudHMoKS5sZW5ndGggPj0gdGhpcy5tYXhGaWxlcygpKTtcbiAgaXNEaXNhYmxlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMucHJvcHMoKS5kaXNhYmxlZCA9PT0gdHJ1ZSB8fCB0aGlzLm1heFJlYWNoZWQoKSk7XG4gIGlzVXBsb2FkaW5nID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5hdHRhY2htZW50cygpLnNvbWUoYSA9PiBhLnN0YXR1cyA9PT0gJ3VwbG9hZGluZycpKTtcblxuICBnZXQgcmVhZHlVcmxzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5hdHRhY2htZW50cygpXG4gICAgICAuZmlsdGVyKGEgPT4gYS5zdGF0dXMgPT09ICdyZWFkeScpXG4gICAgICAubWFwKGEgPT4gYS51cmwhKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5wcm9wcygpLmV4aXN0aW5nVXJscyA/PyBbXTtcbiAgICBpZiAoZXhpc3RpbmcubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5hdHRhY2htZW50cy5zZXQoXG4gICAgICAgIGV4aXN0aW5nLm1hcCgodXJsLCBpKSA9PiAoe1xuICAgICAgICAgIGlkOiBgZXhpc3RpbmctJHtpfS0ke3VybC5zcGxpdCgnLycpLnBvcCgpfWAsXG4gICAgICAgICAgc3RhdHVzOiAncmVhZHknIGFzIGNvbnN0LFxuICAgICAgICAgIHVybCxcbiAgICAgICAgICBpc0V4dGVybmFsOiB0cnVlLFxuICAgICAgICB9KSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZUNhbWVyYSgpO1xuICAgIGZvciAoY29uc3QgdXJsIG9mIHRoaXMucHJldmlld1VybHMpIHtcbiAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcbiAgICB9XG4gICAgdGhpcy5wcmV2aWV3VXJscy5jbGVhcigpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgYWRkSWNvbnMoe1xuICAgICAgYXR0YWNoT3V0bGluZSxcbiAgICAgIGNhbWVyYU91dGxpbmUsXG4gICAgICBjaGVja21hcmtDaXJjbGVPdXRsaW5lLFxuICAgICAgY2xvc2VDaXJjbGVPdXRsaW5lLFxuICAgICAgY2xvc2VPdXRsaW5lLFxuICAgICAgZG9jdW1lbnRPdXRsaW5lLFxuICAgICAgaW1hZ2VPdXRsaW5lLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgb3BlbkNhbWVyYSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIW5hdmlnYXRvci5tZWRpYURldmljZXM/LmdldFVzZXJNZWRpYSkge1xuICAgICAgdGhpcy5jYW1lcmFQaWNrZXIubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgdGhpcy5jYW1lcmFTdHJlYW0gPSBhd2FpdCBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7XG4gICAgICAgIHZpZGVvOiB7IGZhY2luZ01vZGU6IHsgaWRlYWw6ICdlbnZpcm9ubWVudCcgfSwgd2lkdGg6IHsgaWRlYWw6IDE5MjAgfSwgaGVpZ2h0OiB7IGlkZWFsOiAxMDgwIH0gfSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zaG93Q2FtZXJhT3ZlcmxheS5zZXQodHJ1ZSk7XG4gICAgICAvLyBFbCB2aWRlbyBlbGVtZW50IHNlIHJlbmRlcml6YSBkZXNwdcOpcyBkZWwgc2lnbmFsIOKGkiBlc3BlcmFyIHVuIHRpY2tcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jYW1lcmFWaWRlbz8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgIHRoaXMuY2FtZXJhVmlkZW8ubmF0aXZlRWxlbWVudC5zcmNPYmplY3QgPSB0aGlzLmNhbWVyYVN0cmVhbTtcbiAgICAgICAgfVxuICAgICAgfSwgNTApO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gUGVybWlzbyBkZW5lZ2FkbyBvIGRpc3Bvc2l0aXZvIHNpbiBjw6FtYXJhIOKGkiBmYWxsYmFjayBmaWxlIHBpY2tlclxuICAgICAgdGhpcy5jYW1lcmFQaWNrZXIubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICAgIH1cbiAgfVxuXG4gIGNhcHR1cmVQaG90bygpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlbyA9IHRoaXMuY2FtZXJhVmlkZW8/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKCF2aWRlbykgcmV0dXJuO1xuXG4gICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgY2FudmFzLndpZHRoID0gdmlkZW8udmlkZW9XaWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gdmlkZW8udmlkZW9IZWlnaHQ7XG4gICAgY2FudmFzLmdldENvbnRleHQoJzJkJykhLmRyYXdJbWFnZSh2aWRlbywgMCwgMCk7XG5cbiAgICBjYW52YXMudG9CbG9iKFxuICAgICAgYmxvYiA9PiB7XG4gICAgICAgIGlmICghYmxvYikgcmV0dXJuO1xuICAgICAgICBjb25zdCBmaWxlID0gbmV3IEZpbGUoW2Jsb2JdLCBgZm90b18ke0RhdGUubm93KCl9LmpwZ2AsIHsgdHlwZTogJ2ltYWdlL2pwZWcnIH0pO1xuICAgICAgICB0aGlzLmNsb3NlQ2FtZXJhKCk7XG4gICAgICAgIHRoaXMucHJvY2Vzc0ZpbGVzKFtmaWxlXSk7XG4gICAgICB9LFxuICAgICAgJ2ltYWdlL2pwZWcnLFxuICAgICAgMC45XG4gICAgKTtcbiAgfVxuXG4gIGNsb3NlQ2FtZXJhKCk6IHZvaWQge1xuICAgIHRoaXMuY2FtZXJhU3RyZWFtPy5nZXRUcmFja3MoKS5mb3JFYWNoKHQgPT4gdC5zdG9wKCkpO1xuICAgIHRoaXMuY2FtZXJhU3RyZWFtID0gbnVsbDtcbiAgICBpZiAodGhpcy5jYW1lcmFWaWRlbz8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5jYW1lcmFWaWRlby5uYXRpdmVFbGVtZW50LnNyY09iamVjdCA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuc2hvd0NhbWVyYU92ZXJsYXkuc2V0KGZhbHNlKTtcbiAgfVxuXG4gIGFzeW5jIG9uRmlsZXNTZWxlY3RlZChldmVudDogRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGNvbnN0IGZpbGVzID0gQXJyYXkuZnJvbShpbnB1dC5maWxlcyA/PyBbXSk7XG4gICAgaW5wdXQudmFsdWUgPSAnJztcbiAgICB0aGlzLnByb2Nlc3NGaWxlcyhmaWxlcyk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NGaWxlcyhmaWxlczogRmlsZVtdKTogdm9pZCB7XG4gICAgY29uc3QgYXZhaWxhYmxlID0gdGhpcy5tYXhGaWxlcygpIC0gdGhpcy5hdHRhY2htZW50cygpLmxlbmd0aDtcbiAgICBjb25zdCB0b1Byb2Nlc3MgPSBmaWxlcy5zbGljZSgwLCBhdmFpbGFibGUpO1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiB0b1Byb2Nlc3MpIHtcbiAgICAgIGNvbnN0IGlkID0gY3J5cHRvLnJhbmRvbVVVSUQoKTtcbiAgICAgIGNvbnN0IHByZXZpZXdVcmwgPSB0aGlzLmNyZWF0ZVByZXZpZXdVcmwoZmlsZSk7XG4gICAgICBpZiAodGhpcy5wcm9wcygpLmxhenkpIHtcbiAgICAgICAgLy8gTGF6eSBtb2RlOiBidWZmZWFyIHNpbiBzdWJpci4gRWwgY29uc3VtZXIgc3ViZSBjdWFuZG8gdGVuZ2EgZWwgZGVzdGluby5cbiAgICAgICAgdGhpcy5hdHRhY2htZW50cy51cGRhdGUobGlzdCA9PiBbLi4ubGlzdCwgeyBpZCwgZmlsZSwgcHJldmlld1VybCwgc3RhdHVzOiAncmVhZHknIH1dKTtcbiAgICAgICAgdGhpcy5hdHRhY2htZW50c0NoYW5nZS5lbWl0KHRoaXMuYXR0YWNobWVudHMoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmF0dGFjaG1lbnRzLnVwZGF0ZShsaXN0ID0+IFsuLi5saXN0LCB7IGlkLCBmaWxlLCBwcmV2aWV3VXJsLCBzdGF0dXM6ICd1cGxvYWRpbmcnIH1dKTtcbiAgICAgICAgdGhpcy5hdHRhY2htZW50c0NoYW5nZS5lbWl0KHRoaXMuYXR0YWNobWVudHMoKSk7XG4gICAgICAgIHRoaXMudXBsb2FkRmlsZShpZCwgZmlsZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVQcmV2aWV3VXJsKGZpbGU6IEZpbGUpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICghZmlsZS50eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSk7XG4gICAgdGhpcy5wcmV2aWV3VXJscy5hZGQodXJsKTtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wcmVzc0ltYWdlKGZpbGU6IEZpbGUpOiBQcm9taXNlPEZpbGU+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbmV3IENvbXByZXNzb3IoZmlsZSwge1xuICAgICAgICBxdWFsaXR5OiAwLjgsXG4gICAgICAgIG1heFdpZHRoOiAxOTIwLFxuICAgICAgICBtYXhIZWlnaHQ6IDE5MjAsXG4gICAgICAgIGNvbnZlcnRTaXplOiAyICogMTAyNCAqIDEwMjQsXG4gICAgICAgIHN1Y2Nlc3MocmVzdWx0KSB7XG4gICAgICAgICAgcmVzb2x2ZShuZXcgRmlsZShbcmVzdWx0XSwgZmlsZS5uYW1lLCB7IHR5cGU6IHJlc3VsdC50eXBlIH0pKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYSB5IHN1YmUgbGEgbWluaWF0dXJhIGRlIHVuYSBpbWFnZW4geWEgY29tcHJpbWlkYS5cbiAgICpcbiAgICogUmVjaWJlIGVsIGFyY2hpdm8gQ09NUFJJTUlETyBhIHByb3DDs3NpdG86IGBjb21wcmVzc29yanNgIHlhIG5vcm1hbGl6w7MgbGFcbiAgICogb3JpZW50YWNpw7NuIEVYSUYsIHkgYEltYWdlU2VydmljZWAgdHJhYmFqYSBzb2JyZSBjYW52YXMgc2luIGxlZXIgRVhJRiDigJQgc2lcbiAgICogc2UgbGUgcGFzYXJhIGVsIG9yaWdpbmFsLCBsYXMgZm90b3MgdmVydGljYWxlcyBkZSB0ZWzDqWZvbm8gc2FsZHLDrWFuXG4gICAqIHJvdGFkYXMuIFZlciBsYSBub3RhIGVuIGBnZW5lcmF0ZVRodW1ibmFpbGAgKHR5cGVzLnRzKS5cbiAgICpcbiAgICogTnVuY2EgZXMgZmF0YWw6IHNpIGZhbGxhLCBlbCBhZGp1bnRvIHF1ZWRhIHN1YmlkbyBzaW4gbWluaWF0dXJhIHkgbGFzXG4gICAqIGxpc3RhcyBjYWVuIGFsIGFyY2hpdm8gZ3JhbmRlLiBQZXJkZXIgbGEgbWluaWF0dXJhIG5vIGp1c3RpZmljYSBwZXJkZXIgbGFcbiAgICogZm90byBxdWUgZWwgdXN1YXJpbyBhY2FiYSBkZSBzdWJpci5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgdXBsb2FkVGh1bWJuYWlsKGNvbXByZXNzZWQ6IEZpbGUpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzaXplID0gdGhpcy5wcm9wcygpLnRodW1ibmFpbFNpemUgPz8gMzIwO1xuICAgICAgY29uc3QgdGh1bWIgPSBhd2FpdCB0aGlzLmltYWdlU2VydmljZS50aHVtYm5haWwoY29tcHJlc3NlZCwgc2l6ZSk7XG4gICAgICBjb25zdCBiYXNlTmFtZSA9IGNvbXByZXNzZWQubmFtZS5yZXBsYWNlKC9cXC5bXi5dKyQvLCAnJyk7XG4gICAgICBjb25zdCB0aHVtYkZpbGUgPSBuZXcgRmlsZShbdGh1bWIuYmxvYl0sIGAke2Jhc2VOYW1lfS10aHVtYi5qcGdgLCB7IHR5cGU6ICdpbWFnZS9qcGVnJyB9KTtcblxuICAgICAgY29uc3QgdGh1bWJVcGxvYWRGbiA9XG4gICAgICAgIHRoaXMucHJvcHMoKS50aHVtYm5haWxVcGxvYWRGbiA/P1xuICAgICAgICB0aGlzLnByb3BzKCkudXBsb2FkRm4gPz9cbiAgICAgICAgdGhpcy5mZWVkYmFja1NlcnZpY2U/LnVwbG9hZEF0dGFjaG1lbnQuYmluZCh0aGlzLmZlZWRiYWNrU2VydmljZSk7XG4gICAgICBpZiAoIXRodW1iVXBsb2FkRm4pIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAgIHJldHVybiBhd2FpdCB0aHVtYlVwbG9hZEZuKHRodW1iRmlsZSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBsb2FkRmlsZShpZDogc3RyaW5nLCBmaWxlOiBGaWxlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNob3VsZENvbXByZXNzID0gdGhpcy5wcm9wcygpLmNvbXByZXNzSW1hZ2VzICE9PSBmYWxzZSAmJiBmaWxlLnR5cGUuc3RhcnRzV2l0aCgnaW1hZ2UvJyk7XG4gICAgICBjb25zdCBmaWxlVG9VcGxvYWQgPSBzaG91bGRDb21wcmVzcyA/IGF3YWl0IHRoaXMuY29tcHJlc3NJbWFnZShmaWxlKSA6IGZpbGU7XG4gICAgICBjb25zdCB1cGxvYWRGbiA9IHRoaXMucHJvcHMoKS51cGxvYWRGbiA/PyB0aGlzLmZlZWRiYWNrU2VydmljZT8udXBsb2FkQXR0YWNobWVudC5iaW5kKHRoaXMuZmVlZGJhY2tTZXJ2aWNlKTtcbiAgICAgIGlmICghdXBsb2FkRm4pIHRocm93IG5ldyBFcnJvcignTm8gdXBsb2FkIGZ1bmN0aW9uIGNvbmZpZ3VyZWQnKTtcbiAgICAgIGNvbnN0IHVybCA9IGF3YWl0IHVwbG9hZEZuKGZpbGVUb1VwbG9hZCk7XG5cbiAgICAgIC8vIExhIG1pbmlhdHVyYSBTSUVNUFJFIHNhbGUgZGUgdW4gYXJjaGl2byBwYXNhZG8gcG9yIGNvbXByZXNzb3JqcywgcXVlIGVzXG4gICAgICAvLyBsbyBxdWUgZW5kZXJlemEgbGEgb3JpZW50YWNpw7NuIEVYSUYuIFNpIGVsIGNvbnN1bWVyIGRlc2FjdGl2w7MgbGFcbiAgICAgIC8vIGNvbXByZXNpw7NuLCBzZSBjb21wcmltZSBpZ3VhbCBzb2xvIHBhcmEgZ2VuZXJhciBsYSBtaW5pYXR1cmEg4oCUIGVsXG4gICAgICAvLyBhcmNoaXZvIHF1ZSBzZSBzdWJlIGNvbW8gcHJpbmNpcGFsIHNpZ3VlIHNpZW5kbyBlbCBvcmlnaW5hbC5cbiAgICAgIGNvbnN0IHdhbnRzVGh1bWIgPSB0aGlzLnByb3BzKCkuZ2VuZXJhdGVUaHVtYm5haWwgPT09IHRydWUgJiYgZmlsZS50eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpO1xuICAgICAgY29uc3QgdGh1bWJuYWlsVXJsID0gd2FudHNUaHVtYlxuICAgICAgICA/IGF3YWl0IHRoaXMudXBsb2FkVGh1bWJuYWlsKHNob3VsZENvbXByZXNzID8gZmlsZVRvVXBsb2FkIDogYXdhaXQgdGhpcy5jb21wcmVzc0ltYWdlKGZpbGUpKVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgdGhpcy5hdHRhY2htZW50cy51cGRhdGUobGlzdCA9PiBsaXN0Lm1hcChhID0+IChhLmlkID09PSBpZCA/IHsgLi4uYSwgc3RhdHVzOiAncmVhZHknLCB1cmwsIHRodW1ibmFpbFVybCB9IDogYSkpKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5pMThuLnQoJ2F0dGFjaFVwbG9hZEZhaWxlZCcpO1xuICAgICAgdGhpcy5hdHRhY2htZW50cy51cGRhdGUobGlzdCA9PiBsaXN0Lm1hcChhID0+IChhLmlkID09PSBpZCA/IHsgLi4uYSwgc3RhdHVzOiAnZXJyb3InLCBlcnJvciB9IDogYSkpKTtcbiAgICB9XG4gICAgdGhpcy5hdHRhY2htZW50c0NoYW5nZS5lbWl0KHRoaXMuYXR0YWNobWVudHMoKSk7XG4gIH1cblxuICByZW1vdmUoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmF0dGFjaG1lbnRzKCkuZmluZChhID0+IGEuaWQgPT09IGlkKTtcbiAgICBpZiAoaXRlbT8ucHJldmlld1VybCkge1xuICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChpdGVtLnByZXZpZXdVcmwpO1xuICAgICAgdGhpcy5wcmV2aWV3VXJscy5kZWxldGUoaXRlbS5wcmV2aWV3VXJsKTtcbiAgICB9XG4gICAgdGhpcy5hdHRhY2htZW50cy51cGRhdGUobGlzdCA9PiBsaXN0LmZpbHRlcihhID0+IGEuaWQgIT09IGlkKSk7XG4gICAgdGhpcy5hdHRhY2htZW50c0NoYW5nZS5lbWl0KHRoaXMuYXR0YWNobWVudHMoKSk7XG4gIH1cblxuICB0aHVtYkZhaWxlZChpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gbm8tb3Ag4oCUIHNpIGxhIGltYWdlbiBmYWxsYSwgbGEgZXN0cnVjdHVyYSB5YSB0aWVuZSBlbCBmYWxsYmFjayBkZSB0ZXh0b1xuICAgIHZvaWQgaWQ7XG4gIH1cblxuICBmb3JtYXRTaXplKGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmIChieXRlcyA8IDEwMjQpIHJldHVybiBgJHtieXRlc30gQmA7XG4gICAgaWYgKGJ5dGVzIDwgMTAyNCAqIDEwMjQpIHJldHVybiBgJHtNYXRoLnJvdW5kKGJ5dGVzIC8gMTAyNCl9IEtCYDtcbiAgICByZXR1cm4gYCR7KGJ5dGVzIC8gKDEwMjQgKiAxMDI0KSkudG9GaXhlZCgxKX0gTUJgO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYXR0YWNobWVudC11cGxvYWRlclwiPlxuICBAaWYgKHByb3BzKCkudGl0bGUpIHtcbiAgPHZhbC10aXRsZSBjbGFzcz1cImF0dGFjaG1lbnQtdGl0bGVcIiBbcHJvcHNdPVwieyBjb250ZW50OiBwcm9wcygpLnRpdGxlLCBzaXplOiAnc21hbGwnLCBjb2xvcjogJ2RhcmsnLCBib2xkOiBmYWxzZSB9XCIgLz5cbiAgfVxuXG4gIDwhLS0gZmlsZSBwaWNrZXIgZXN0w6FuZGFyIC0tPlxuICA8aW5wdXQgI2ZpbGVQaWNrZXIgdHlwZT1cImZpbGVcIiBbYWNjZXB0XT1cImFjY2VwdCgpXCIgbXVsdGlwbGUgY2xhc3M9XCJoaWRkZW4taW5wdXRcIiAoY2hhbmdlKT1cIm9uRmlsZXNTZWxlY3RlZCgkZXZlbnQpXCIgLz5cbiAgPCEtLSBmYWxsYmFjayBjw6FtYXJhOiBzb2xvIHNlIGRpc3BhcmEgc2kgZ2V0VXNlck1lZGlhIGZhbGxhL2RlbmVnYWRvIC0tPlxuICA8aW5wdXRcbiAgICAjY2FtZXJhUGlja2VyXG4gICAgdHlwZT1cImZpbGVcIlxuICAgIGFjY2VwdD1cImltYWdlLypcIlxuICAgIGNhcHR1cmU9XCJlbnZpcm9ubWVudFwiXG4gICAgY2xhc3M9XCJoaWRkZW4taW5wdXRcIlxuICAgIChjaGFuZ2UpPVwib25GaWxlc1NlbGVjdGVkKCRldmVudClcIlxuICAvPlxuXG4gIDxkaXYgY2xhc3M9XCJhdHRhY2htZW50LWFjdGlvbnNcIj5cbiAgICA8aW9uLWJ1dHRvblxuICAgICAgY2xhc3M9XCJhdHRhY2htZW50LWFjdGlvblwiXG4gICAgICBmaWxsPVwib3V0bGluZVwiXG4gICAgICBzaXplPVwic21hbGxcIlxuICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWQoKVwiXG4gICAgICAoY2xpY2spPVwiZmlsZVBpY2tlci5jbGljaygpXCJcbiAgICA+XG4gICAgICA8aW9uLWljb24gc2xvdD1cInN0YXJ0XCIgbmFtZT1cImF0dGFjaC1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgIHt7IGkxOG4udCgnYXR0YWNoQWRkJykgfX1cbiAgICA8L2lvbi1idXR0b24+XG4gICAgPGlvbi1idXR0b24gY2xhc3M9XCJhdHRhY2htZW50LWFjdGlvblwiIGZpbGw9XCJvdXRsaW5lXCIgc2l6ZT1cInNtYWxsXCIgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWQoKVwiIChjbGljayk9XCJvcGVuQ2FtZXJhKClcIj5cbiAgICAgIDxpb24taWNvbiBzbG90PVwic3RhcnRcIiBuYW1lPVwiY2FtZXJhLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAge3sgaTE4bi50KCdhdHRhY2hDYW1lcmEnKSB9fVxuICAgIDwvaW9uLWJ1dHRvbj5cbiAgPC9kaXY+XG5cbiAgQGlmIChhdHRhY2htZW50cygpLmxlbmd0aCA+IDApIHtcbiAgPGRpdiBjbGFzcz1cImF0dGFjaG1lbnQtbGlzdFwiPlxuICAgIEBmb3IgKGl0ZW0gb2YgYXR0YWNobWVudHMoKTsgdHJhY2sgaXRlbS5pZCkge1xuICAgIDxkaXYgY2xhc3M9XCJhdHRhY2htZW50LWl0ZW1cIiBbY2xhc3NdPVwiJ3N0YXR1cy0nICsgaXRlbS5zdGF0dXNcIj5cbiAgICAgIEBpZiAoaXRlbS5wcmV2aWV3VXJsIHx8IGl0ZW0udGh1bWJuYWlsVXJsIHx8IChpdGVtLmlzRXh0ZXJuYWwgJiYgaXRlbS51cmwpKSB7XG4gICAgICA8aW1nXG4gICAgICAgIGNsYXNzPVwiZmlsZS10aHVtYlwiXG4gICAgICAgIFtzcmNdPVwiaXRlbS5wcmV2aWV3VXJsIHx8IGl0ZW0udGh1bWJuYWlsVXJsIHx8IGl0ZW0udXJsXCJcbiAgICAgICAgW2FsdF09XCJpdGVtLmZpbGU/Lm5hbWUgPz8gaTE4bi50KCdhdHRhY2hGaWxlJylcIlxuICAgICAgICBsb2FkaW5nPVwibGF6eVwiXG4gICAgICAgIChlcnJvcik9XCJ0aHVtYkZhaWxlZChpdGVtLmlkKVwiXG4gICAgICAvPlxuICAgICAgfSBAZWxzZSBpZiAoIWl0ZW0uaXNFeHRlcm5hbCkge1xuICAgICAgPGlvbi1pY29uXG4gICAgICAgIGNsYXNzPVwiZmlsZS1pY29uXCJcbiAgICAgICAgW25hbWVdPVwiaXRlbS5maWxlPy50eXBlPy5zdGFydHNXaXRoKCdpbWFnZS8nKSA/ICdpbWFnZS1vdXRsaW5lJyA6ICdkb2N1bWVudC1vdXRsaW5lJ1wiXG4gICAgICA+PC9pb24taWNvbj5cbiAgICAgIH1cbiAgICAgIDxkaXYgY2xhc3M9XCJmaWxlLWluZm9cIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWxlLW5hbWVcIj57eyBpdGVtLmZpbGU/Lm5hbWUgPz8gaTE4bi50KCdhdHRhY2hGaWxlJykgfX08L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZmlsZS1zaXplXCI+e3sgaXRlbS5maWxlID8gZm9ybWF0U2l6ZShpdGVtLmZpbGUuc2l6ZSkgOiAnJyB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICBAaWYgKGl0ZW0uc3RhdHVzID09PSAndXBsb2FkaW5nJykge1xuICAgICAgPGlvbi1zcGlubmVyIGNsYXNzPVwic3RhdHVzLWljb25cIiBuYW1lPVwiY2lyY3VsYXJcIj48L2lvbi1zcGlubmVyPlxuICAgICAgfSBAZWxzZSBpZiAoaXRlbS5zdGF0dXMgPT09ICdyZWFkeScpIHtcbiAgICAgIDxpb24taWNvbiBjbGFzcz1cInN0YXR1cy1pY29uXCIgbmFtZT1cImNoZWNrbWFyay1jaXJjbGUtb3V0bGluZVwiIGNvbG9yPVwic3VjY2Vzc1wiPjwvaW9uLWljb24+XG4gICAgICB9IEBlbHNlIGlmIChpdGVtLnN0YXR1cyA9PT0gJ2Vycm9yJykge1xuICAgICAgPGlvbi1pY29uIGNsYXNzPVwic3RhdHVzLWljb25cIiBuYW1lPVwiY2xvc2UtY2lyY2xlLW91dGxpbmVcIiBjb2xvcj1cImRhbmdlclwiPjwvaW9uLWljb24+XG4gICAgICB9IEBpZiAoaXRlbS5zdGF0dXMgIT09ICd1cGxvYWRpbmcnKSB7XG4gICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwiY2xlYXJcIiBzaXplPVwic21hbGxcIiBjb2xvcj1cImRhcmtcIiAoY2xpY2spPVwicmVtb3ZlKGl0ZW0uaWQpXCI+XG4gICAgICAgIDxpb24taWNvbiBzbG90PVwiaWNvbi1vbmx5XCIgbmFtZT1cImNsb3NlLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgfSBAaWYgKGl0ZW0uc3RhdHVzID09PSAnZXJyb3InICYmIGl0ZW0uZXJyb3IpIHtcbiAgICAgIDxpb24tbm90ZSBjb2xvcj1cImRhbmdlclwiIGNsYXNzPVwiZXJyb3Itbm90ZVwiPnt7IGl0ZW0uZXJyb3IgfX08L2lvbi1ub3RlPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG4gIH0gQGlmIChwcm9wcygpLmhpbnQpIHtcbiAgPHAgY2xhc3M9XCJhdHRhY2htZW50LWhpbnRcIj57eyBwcm9wcygpLmhpbnQgfX08L3A+XG4gIH1cbjwvZGl2PlxuXG48IS0tIE92ZXJsYXkgZGUgY8OhbWFyYSAoZ2V0VXNlck1lZGlhKSAtLT5cbkBpZiAoc2hvd0NhbWVyYU92ZXJsYXkoKSkge1xuPGRpdiBjbGFzcz1cImNhbWVyYS1vdmVybGF5XCIgKGNsaWNrKT1cImNsb3NlQ2FtZXJhKClcIj5cbiAgPGRpdiBjbGFzcz1cImNhbWVyYS1tb2RhbFwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICA8dmlkZW8gI2NhbWVyYVZpZGVvIGF1dG9wbGF5IHBsYXlzaW5saW5lIGNsYXNzPVwiY2FtZXJhLXByZXZpZXdcIj48L3ZpZGVvPlxuICAgIDxkaXYgY2xhc3M9XCJjYW1lcmEtY29udHJvbHNcIj5cbiAgICAgIDxpb24tYnV0dG9uIGNsYXNzPVwiY2FtZXJhLWNvbnRyb2wgY2FtZXJhLWNvbnRyb2wtLWNhbmNlbFwiIGZpbGw9XCJvdXRsaW5lXCIgKGNsaWNrKT1cImNsb3NlQ2FtZXJhKClcIj5cbiAgICAgICAge3sgaTE4bi50KCdhdHRhY2hDYW5jZWwnKSB9fVxuICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPGlvbi1idXR0b24gY2xhc3M9XCJjYW1lcmEtY29udHJvbCBjYW1lcmEtY29udHJvbC0tY2FwdHVyZVwiIHNoYXBlPVwicm91bmRcIiAoY2xpY2spPVwiY2FwdHVyZVBob3RvKClcIj5cbiAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJjYW1lcmEtb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgIHt7IGkxOG4udCgnYXR0YWNoQ2FwdHVyZScpIH19XG4gICAgICA8L2lvbi1idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG59XG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2F0dGFjaG1lbnQtdXBsb2FkZXIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgQXR0YWNobWVudEl0ZW0ge1xuICBpZDogc3RyaW5nO1xuICBmaWxlPzogRmlsZTsgLy8gb3BjaW9uYWwg4oCUIHVuZGVmaW5lZCBwYXJhIGl0ZW1zIHByZS1zZWVkZWQgZGVzZGUgVVJMXG4gIHN0YXR1czogJ3VwbG9hZGluZycgfCAncmVhZHknIHwgJ2Vycm9yJztcbiAgdXJsPzogc3RyaW5nO1xuICAvKipcbiAgICogVVJMIGRlIGxhIG1pbmlhdHVyYSwgcHJlc2VudGUgc29sbyBzaSBzZSBwaWRpw7MgYGdlbmVyYXRlVGh1bWJuYWlsYCB5IGVsXG4gICAqIGFyY2hpdm8gZXMgdW5hIGltYWdlbi4gRXMgbGEgcXVlIGRlYmVuIHVzYXIgbGFzIExJU1RBUzogYHVybGAgYXB1bnRhIGFsXG4gICAqIGFyY2hpdm8gZGUgaGFzdGEgMTkyMHB4LCB5IHBlZGlybG8gcGFyYSBwaW50YXIgdW4gcmVjdWFkcm8gZGUgODRweCBlcyBsYVxuICAgKiBkaWZlcmVuY2lhIGVudHJlIDI0MEtCIHkgMTVLQiBwb3IgZmlsYS4gVmVyIGBnZW5lcmF0ZVRodW1ibmFpbGAuXG4gICAqL1xuICB0aHVtYm5haWxVcmw/OiBzdHJpbmc7XG4gIGVycm9yPzogc3RyaW5nO1xuICBpc0V4dGVybmFsPzogYm9vbGVhbjsgLy8gdHJ1ZSBwYXJhIGl0ZW1zIGNhcmdhZG9zIGRlc2RlIGV4aXN0aW5nVXJscy9VUkwgZXh0ZXJuYVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF0dGFjaG1lbnRVcGxvYWRlck1ldGFkYXRhIHtcbiAgLyoqIFTDrXR1bG8gZGVsIGNhbXBvIChzZSByZW5kZXJpemEgYXJyaWJhLCBlc3RpbG8gbGFiZWwgZGUgdmFsLWZvcm0pLiAqL1xuICB0aXRsZT86IHN0cmluZztcbiAgLyoqIFRleHRvIGRlIGF5dWRhIChzZSByZW5kZXJpemEgYmFqbyBsYXMgYWNjaW9uZXMsIGFsaW5lYWRvIGFsIGluaWNpbykuICovXG4gIGhpbnQ/OiBzdHJpbmc7XG4gIG1heEZpbGVzPzogbnVtYmVyO1xuICBhY2NlcHQ/OiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqIENvbXByZXNzIGltYWdlcyBiZWZvcmUgdXBsb2FkIChkZWZhdWx0OiB0cnVlKS4gUERGcyBhcmUgbmV2ZXIgY29tcHJlc3NlZC4gKi9cbiAgY29tcHJlc3NJbWFnZXM/OiBib29sZWFuO1xuICAvKipcbiAgICogR2VuZXJhIHkgc3ViZSBhZGVtw6FzIHVuYSBtaW5pYXR1cmEgY3VhZHJhZGEgcG9yIGNhZGEgaW1hZ2VuLCB5IGxhIGV4cG9uZSBlblxuICAgKiBgQXR0YWNobWVudEl0ZW0udGh1bWJuYWlsVXJsYCAoZGVmYXVsdDogZmFsc2UpLlxuICAgKlxuICAgKiBQb3IgcXXDqSBlcyBvcHQtaW4geSBubyBlbCBkZWZhdWx0OiBzdWJlIERPUyBhcmNoaXZvcyBwb3IgaW1hZ2VuIGVuIHZleiBkZVxuICAgKiB1bm8sIHkgbm8gdG9kbyBjb25zdW1lciBxdWllcmUgcGFnYXIgZXNlIGNvc3RvIChuaSB0ZW5lciBlbCBhcmNoaXZvIGV4dHJhXG4gICAqIGVuIHN1IGJ1Y2tldCkuIEFjdMOtdmFsbyBjdWFuZG8gbGFzIGZvdG9zIHNlIG11ZXN0cmVuIGVuIHVuYSBsaXN0YSBvIGdyaWxsYSxcbiAgICogcXVlIGVzIGRvbmRlIGVsIGFob3JybyBlcyByZWFsLlxuICAgKlxuICAgKiBMYSBtaW5pYXR1cmEgc2UgZ2VuZXJhIGEgcGFydGlyIGRlbCBhcmNoaXZvIFlBIGNvbXByaW1pZG8sIG5vIGRlbCBvcmlnaW5hbDpcbiAgICogYGNvbXByZXNzb3Jqc2Agbm9ybWFsaXphIGxhIG9yaWVudGFjacOzbiBFWElGIGFsIGNvbXByaW1pciwgYXPDrSBxdWUgYSBlc2FcbiAgICogYWx0dXJhIGxhIGltYWdlbiB5YSBlc3TDoSBkZXJlY2hhLiBHZW5lcmFybGEgZGVsIG9yaWdpbmFsIGxhIHNhY2Fyw61hIHJvdGFkYVxuICAgKiBlbiBsYXMgZm90b3MgdmVydGljYWxlcyBkZSB0ZWzDqWZvbm8gKEltYWdlU2VydmljZSB1c2EgY2FudmFzIHkgbm8gbGVlIEVYSUYpLlxuICAgKi9cbiAgZ2VuZXJhdGVUaHVtYm5haWw/OiBib29sZWFuO1xuICAvKiogTGFkbyBkZSBsYSBtaW5pYXR1cmEgZW4gcMOteGVsZXMgKGRlZmF1bHQ6IDMyMCkuIEN1YWRyYWRhLCByZWNvcnRlIGNlbnRyYWRvLiAqL1xuICB0aHVtYm5haWxTaXplPzogbnVtYmVyO1xuICAvKipcbiAgICogRnVuY2nDs24gZGUgc3ViaWRhIGRlIGxhIG1pbmlhdHVyYS4gU2kgc2Ugb21pdGUsIHNlIHVzYSBgdXBsb2FkRm5gIGNvbiB1blxuICAgKiBGaWxlIHJlbm9tYnJhZG8gYSBgPG5vbWJyZT4tdGh1bWIuanBnYCDigJQgYXPDrSBlbCBjb25zdW1lciBxdWUgZGVyaXZhIGxhIHJ1dGFcbiAgICogZGVsIG5vbWJyZSBkZWwgYXJjaGl2byBubyBuZWNlc2l0YSBoYWNlciBuYWRhLlxuICAgKi9cbiAgdGh1bWJuYWlsVXBsb2FkRm4/OiAoZmlsZTogRmlsZSkgPT4gUHJvbWlzZTxzdHJpbmc+O1xuICAvKiogVXBsb2FkIGZ1bmN0aW9uLiBJZiBvbWl0dGVkLCBmYWxscyBiYWNrIHRvIEZlZWRiYWNrU2VydmljZS51cGxvYWRBdHRhY2htZW50LiAqL1xuICB1cGxvYWRGbj86IChmaWxlOiBGaWxlKSA9PiBQcm9taXNlPHN0cmluZz47XG4gIC8qKiBVUkxzIGRlIGl0ZW1zIHlhIHN1Ymlkb3Mg4oCUIHNlIHByZS1zZWVkZWFuIGNvbW8gaXRlbXMgJ3JlYWR5JyBhbCBtb250YXIuICovXG4gIGV4aXN0aW5nVXJscz86IHN0cmluZ1tdO1xuICAvKipcbiAgICogTGF6eSBtb2RlOiBsb3MgYXJjaGl2b3Mgc2VsZWNjaW9uYWRvcyBzZSBidWZmZXJlYW4gKHN0YXR1cyAncmVhZHknLCBmaWxlIGNvbnNlcnZhZG8pXG4gICAqIHNpbiBzdWJpci4gRWwgY29uc3VtZXIgcmVjaWJlIEF0dGFjaG1lbnRJdGVtW10gY29uIGZpbGUgc2V0IHkgc3ViZSBtYW51YWxtZW50ZS5cbiAgICogw5p0aWwgY3VhbmRvIGVsIGRlc3Rpbm8gKGVqLiBhbmltYWwgSUQpIG5vIGV4aXN0ZSBhw7puIGFsIG1vbWVudG8gZGUgc2VsZWNjaW9uYXIuXG4gICAqL1xuICBsYXp5PzogYm9vbGVhbjtcbn1cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2F0dGFjaG1lbnQtdXBsb2FkZXIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgQXR0YWNobWVudEl0ZW0ge1xuICBpZDogc3RyaW5nO1xuICBmaWxlPzogRmlsZTsgLy8gb3BjaW9uYWwg4oCUIHVuZGVmaW5lZCBwYXJhIGl0ZW1zIHByZS1zZWVkZWQgZGVzZGUgVVJMXG4gIHN0YXR1czogJ3VwbG9hZGluZycgfCAncmVhZHknIHwgJ2Vycm9yJztcbiAgdXJsPzogc3RyaW5nO1xuICAvKipcbiAgICogVVJMIGRlIGxhIG1pbmlhdHVyYSwgcHJlc2VudGUgc29sbyBzaSBzZSBwaWRpw7MgYGdlbmVyYXRlVGh1bWJuYWlsYCB5IGVsXG4gICAqIGFyY2hpdm8gZXMgdW5hIGltYWdlbi4gRXMgbGEgcXVlIGRlYmVuIHVzYXIgbGFzIExJU1RBUzogYHVybGAgYXB1bnRhIGFsXG4gICAqIGFyY2hpdm8gZGUgaGFzdGEgMTkyMHB4LCB5IHBlZGlybG8gcGFyYSBwaW50YXIgdW4gcmVjdWFkcm8gZGUgODRweCBlcyBsYVxuICAgKiBkaWZlcmVuY2lhIGVudHJlIDI0MEtCIHkgMTVLQiBwb3IgZmlsYS4gVmVyIGBnZW5lcmF0ZVRodW1ibmFpbGAuXG4gICAqL1xuICB0aHVtYm5haWxVcmw/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBVUkwgbG9jYWwgZWbDrW1lcmEgcGFyYSBwcmV2aXN1YWxpemFyIGltw6FnZW5lcyBzZWxlY2Npb25hZGFzIGFudGVzIGRlIHF1ZVxuICAgKiBleGlzdGEgdW5hIFVSTCByZW1vdGEuIFNlIGNyZWEgY29uIGBVUkwuY3JlYXRlT2JqZWN0VVJMYCB5IGVsIGNvbXBvbmVudGUgbGFcbiAgICogbGliZXJhIGFsIHJlbW92ZXIgZWwgYWRqdW50byBvIGRlc3RydWlyc2UuXG4gICAqL1xuICBwcmV2aWV3VXJsPzogc3RyaW5nO1xuICBlcnJvcj86IHN0cmluZztcbiAgaXNFeHRlcm5hbD86IGJvb2xlYW47IC8vIHRydWUgcGFyYSBpdGVtcyBjYXJnYWRvcyBkZXNkZSBleGlzdGluZ1VybHMvVVJMIGV4dGVybmFcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdHRhY2htZW50VXBsb2FkZXJNZXRhZGF0YSB7XG4gIC8qKiBUw610dWxvIGRlbCBjYW1wbyAoc2UgcmVuZGVyaXphIGFycmliYSwgZXN0aWxvIGxhYmVsIGRlIHZhbC1mb3JtKS4gKi9cbiAgdGl0bGU/OiBzdHJpbmc7XG4gIC8qKiBUZXh0byBkZSBheXVkYSAoc2UgcmVuZGVyaXphIGJham8gbGFzIGFjY2lvbmVzLCBhbGluZWFkbyBhbCBpbmljaW8pLiAqL1xuICBoaW50Pzogc3RyaW5nO1xuICBtYXhGaWxlcz86IG51bWJlcjtcbiAgYWNjZXB0Pzogc3RyaW5nO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIC8qKiBDb21wcmVzcyBpbWFnZXMgYmVmb3JlIHVwbG9hZCAoZGVmYXVsdDogdHJ1ZSkuIFBERnMgYXJlIG5ldmVyIGNvbXByZXNzZWQuICovXG4gIGNvbXByZXNzSW1hZ2VzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEdlbmVyYSB5IHN1YmUgYWRlbcOhcyB1bmEgbWluaWF0dXJhIGN1YWRyYWRhIHBvciBjYWRhIGltYWdlbiwgeSBsYSBleHBvbmUgZW5cbiAgICogYEF0dGFjaG1lbnRJdGVtLnRodW1ibmFpbFVybGAgKGRlZmF1bHQ6IGZhbHNlKS5cbiAgICpcbiAgICogUG9yIHF1w6kgZXMgb3B0LWluIHkgbm8gZWwgZGVmYXVsdDogc3ViZSBET1MgYXJjaGl2b3MgcG9yIGltYWdlbiBlbiB2ZXogZGVcbiAgICogdW5vLCB5IG5vIHRvZG8gY29uc3VtZXIgcXVpZXJlIHBhZ2FyIGVzZSBjb3N0byAobmkgdGVuZXIgZWwgYXJjaGl2byBleHRyYVxuICAgKiBlbiBzdSBidWNrZXQpLiBBY3TDrXZhbG8gY3VhbmRvIGxhcyBmb3RvcyBzZSBtdWVzdHJlbiBlbiB1bmEgbGlzdGEgbyBncmlsbGEsXG4gICAqIHF1ZSBlcyBkb25kZSBlbCBhaG9ycm8gZXMgcmVhbC5cbiAgICpcbiAgICogTGEgbWluaWF0dXJhIHNlIGdlbmVyYSBhIHBhcnRpciBkZWwgYXJjaGl2byBZQSBjb21wcmltaWRvLCBubyBkZWwgb3JpZ2luYWw6XG4gICAqIGBjb21wcmVzc29yanNgIG5vcm1hbGl6YSBsYSBvcmllbnRhY2nDs24gRVhJRiBhbCBjb21wcmltaXIsIGFzw60gcXVlIGEgZXNhXG4gICAqIGFsdHVyYSBsYSBpbWFnZW4geWEgZXN0w6EgZGVyZWNoYS4gR2VuZXJhcmxhIGRlbCBvcmlnaW5hbCBsYSBzYWNhcsOtYSByb3RhZGFcbiAgICogZW4gbGFzIGZvdG9zIHZlcnRpY2FsZXMgZGUgdGVsw6lmb25vIChJbWFnZVNlcnZpY2UgdXNhIGNhbnZhcyB5IG5vIGxlZSBFWElGKS5cbiAgICovXG4gIGdlbmVyYXRlVGh1bWJuYWlsPzogYm9vbGVhbjtcbiAgLyoqIExhZG8gZGUgbGEgbWluaWF0dXJhIGVuIHDDrXhlbGVzIChkZWZhdWx0OiAzMjApLiBDdWFkcmFkYSwgcmVjb3J0ZSBjZW50cmFkby4gKi9cbiAgdGh1bWJuYWlsU2l6ZT86IG51bWJlcjtcbiAgLyoqXG4gICAqIEZ1bmNpw7NuIGRlIHN1YmlkYSBkZSBsYSBtaW5pYXR1cmEuIFNpIHNlIG9taXRlLCBzZSB1c2EgYHVwbG9hZEZuYCBjb24gdW5cbiAgICogRmlsZSByZW5vbWJyYWRvIGEgYDxub21icmU+LXRodW1iLmpwZ2Ag4oCUIGFzw60gZWwgY29uc3VtZXIgcXVlIGRlcml2YSBsYSBydXRhXG4gICAqIGRlbCBub21icmUgZGVsIGFyY2hpdm8gbm8gbmVjZXNpdGEgaGFjZXIgbmFkYS5cbiAgICovXG4gIHRodW1ibmFpbFVwbG9hZEZuPzogKGZpbGU6IEZpbGUpID0+IFByb21pc2U8c3RyaW5nPjtcbiAgLyoqIFVwbG9hZCBmdW5jdGlvbi4gSWYgb21pdHRlZCwgZmFsbHMgYmFjayB0byBGZWVkYmFja1NlcnZpY2UudXBsb2FkQXR0YWNobWVudC4gKi9cbiAgdXBsb2FkRm4/OiAoZmlsZTogRmlsZSkgPT4gUHJvbWlzZTxzdHJpbmc+O1xuICAvKiogVVJMcyBkZSBpdGVtcyB5YSBzdWJpZG9zIOKAlCBzZSBwcmUtc2VlZGVhbiBjb21vIGl0ZW1zICdyZWFkeScgYWwgbW9udGFyLiAqL1xuICBleGlzdGluZ1VybHM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIExhenkgbW9kZTogbG9zIGFyY2hpdm9zIHNlbGVjY2lvbmFkb3Mgc2UgYnVmZmVyZWFuIChzdGF0dXMgJ3JlYWR5JywgZmlsZSBjb25zZXJ2YWRvKVxuICAgKiBzaW4gc3ViaXIuIEVsIGNvbnN1bWVyIHJlY2liZSBBdHRhY2htZW50SXRlbVtdIGNvbiBmaWxlIHNldCB5IHN1YmUgbWFudWFsbWVudGUuXG4gICAqIMOadGlsIGN1YW5kbyBlbCBkZXN0aW5vIChlai4gYW5pbWFsIElEKSBubyBleGlzdGUgYcO6biBhbCBtb21lbnRvIGRlIHNlbGVjY2lvbmFyLlxuICAgKi9cbiAgbGF6eT86IGJvb2xlYW47XG59XG4iXX0=
@@ -332,7 +332,7 @@ export class CommentSectionComponent {
332
332
  </div>
333
333
  }
334
334
  </div>
335
- `, isInline: true, styles: ["@charset \"UTF-8\";:root{--val-container-sm: 540px;--val-container-md: 720px;--val-container-lg: 880px;--val-container-xl: 1100px;--val-container-xl-wide: 1280px;--val-container-md-wide: 900px;--val-container-aside: 0px;--val-container-padding: 16px;--val-radius-xs: 10px;--val-radius-sm: 16px;--val-radius-md: 20px;--val-radius-lg: 28px;--val-radius-xl: 36px;--val-radius-full: 999px;--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #737478;--ion-color-medium-rgb: 115,116,120;--ion-color-medium-contrast: #ffffff;--ion-color-medium-contrast-rgb: 255,255,255;--ion-color-medium-shade: #65666a;--ion-color-medium-tint: #818286;--ion-color-warning: #ffde38;--ion-color-warning-rgb: 255, 222, 56;--ion-color-warning-contrast: #000000;--ion-color-warning-contrast-rgb: 0, 0, 0;--ion-color-warning-shade: #e0c331;--ion-color-warning-tint: #ffe14c;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-dark)}body.dark,html.ion-palette-dark,body[data-theme=dark]{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}:host{display:block}.comment-section.loading{pointer-events:none}.section-header{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;margin-bottom:20px;padding-bottom:16px;border-bottom:1px solid var(--ion-color-light-shade)}.header-title{display:flex;align-items:center;gap:8px}.title-icon{font-size:1.5rem;color:var(--ion-color-primary)}.title{margin:0;font-size:1.125rem;font-weight:600;color:var(--ion-text-color)}.count-badge{font-size:.75rem;font-weight:600;--padding-start: 8px;--padding-end: 8px}.header-actions{display:flex;align-items:center;gap:8px}.sort-select-item{--padding-start: 0;--padding-end: 0;--inner-padding-end: 0;--background: transparent;--min-height: 36px}.sort-select-item ion-select{--padding-start: 8px;--padding-end: 8px;min-width:140px;font-size:.875rem}.sort-icon{font-size:1.125rem;color:var(--ion-color-dark);margin-right:4px}.new-comment-section{margin-bottom:24px;padding:16px;background-color:var(--ion-color-light);border-radius:12px}.input-wrapper{display:flex;gap:12px}.input-avatar{flex-shrink:0}.input-avatar val-avatar{--size: 40px}.input-container{flex:1;min-width:0}.comment-textarea{--background: var(--ion-background-color);--padding-start: 12px;--padding-end: 12px;--padding-top: 10px;--padding-bottom: 10px;border-radius:8px;font-size:.875rem;min-height:60px;border:1px solid var(--ion-color-light-shade);transition:border-color .2s}.comment-textarea:focus-within{border-color:var(--ion-color-primary)}.input-actions{display:flex;align-items:center;justify-content:flex-end;gap:12px;margin-top:10px}.char-counter{font-size:.75rem;color:var(--ion-color-dark)}.char-counter.warning{color:var(--ion-color-warning);font-weight:500}.loading-state{display:flex;flex-direction:column;gap:20px}.skeleton-comment{display:flex;gap:12px;padding:12px 0}.skeleton-comment .skeleton-content{flex:1;display:flex;flex-direction:column;gap:8px}.comments-list{display:flex;flex-direction:column;gap:10px}.comments-list.with-dividers{gap:0}.comments-list.with-dividers val-comment{padding:16px 0}.comments-list.with-dividers val-comment:first-child{padding-top:0}.comment-divider{height:1px;background-color:var(--ion-color-light-shade);margin:0}.load-more-section{display:flex;justify-content:center;padding:20px 0}.load-more-section ion-button{min-width:200px}.load-more-section ion-spinner{width:28px;height:28px}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px 24px;text-align:center}.empty-icon{font-size:4rem;color:var(--ion-color-dark);opacity:.5;margin-bottom:16px}.empty-title{margin:0 0 8px;font-size:1.125rem;font-weight:600;color:var(--ion-text-color)}.empty-message{margin:0;font-size:.875rem;color:var(--ion-color-dark);max-width:300px}@media (max-width: 576px){.section-header{flex-direction:column;align-items:flex-start}.header-actions,.sort-select-item{width:100%}.sort-select-item ion-select{width:100%}.input-wrapper{flex-direction:column}.input-avatar{display:none}.input-actions{flex-direction:column;align-items:stretch}.input-actions ion-button{width:100%}}:host-context(body.dark) .new-comment-section,:host-context(.dark) .new-comment-section,:host-context(.ion-palette-dark) .new-comment-section,:host-context(html.ion-palette-dark) .new-comment-section,:host-context([data-theme=dark]) .new-comment-section{background-color:var(--ion-color-step-100, #1a1a1a)}:host-context(body.dark) .comment-textarea,:host-context(.dark) .comment-textarea,:host-context(.ion-palette-dark) .comment-textarea,:host-context(html.ion-palette-dark) .comment-textarea,:host-context([data-theme=dark]) .comment-textarea{--background: var(--ion-color-step-50, #121212);border-color:var(--ion-color-step-200, #2a2a2a)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonBadge, selector: "ion-badge", inputs: ["color", "mode"] }, { kind: "component", type: IonTextarea, selector: "ion-textarea", inputs: ["autoGrow", "autocapitalize", "autofocus", "clearOnEdit", "color", "cols", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "maxlength", "minlength", "mode", "name", "placeholder", "readonly", "required", "rows", "shape", "spellcheck", "value", "wrap"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonSelect, selector: "ion-select", inputs: ["cancelText", "color", "compareWith", "disabled", "errorText", "expandedIcon", "fill", "helperText", "interface", "interfaceOptions", "justify", "label", "labelPlacement", "mode", "multiple", "name", "okText", "placeholder", "selectedText", "shape", "toggleIcon", "value"] }, { kind: "component", type: IonSelectOption, selector: "ion-select-option", inputs: ["disabled", "value"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: IonInfiniteScroll, selector: "ion-infinite-scroll", inputs: ["disabled", "position", "threshold"] }, { kind: "component", type: IonInfiniteScrollContent, selector: "ion-infinite-scroll-content", inputs: ["loadingSpinner", "loadingText"] }, { kind: "component", type: CommentComponent, selector: "val-comment", inputs: ["props"], outputs: ["authorClick", "reactionClick", "actionClick", "menuItemClick", "loadMoreClick", "collapseToggle"] }, { kind: "component", type: AvatarComponent, selector: "val-avatar", inputs: ["preset", "props"], outputs: ["onClick"] }, { kind: "component", type: SkeletonComponent, selector: "val-skeleton", inputs: ["props"] }] }); }
335
+ `, isInline: true, styles: ["@charset \"UTF-8\";:root{--val-container-sm: 540px;--val-container-md: 720px;--val-container-lg: 880px;--val-container-xl: 1100px;--val-container-xl-wide: 1280px;--val-container-md-wide: 900px;--val-container-aside: 0px;--val-container-padding: 16px;--val-radius-xs: 10px;--val-radius-sm: 16px;--val-radius-md: 20px;--val-radius-lg: 28px;--val-radius-xl: 36px;--val-radius-full: 999px;--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #737478;--ion-color-medium-rgb: 115,116,120;--ion-color-medium-contrast: #ffffff;--ion-color-medium-contrast-rgb: 255,255,255;--ion-color-medium-shade: #65666a;--ion-color-medium-tint: #818286;--ion-color-warning: #ffde38;--ion-color-warning-rgb: 255, 222, 56;--ion-color-warning-contrast: #000000;--ion-color-warning-contrast-rgb: 0, 0, 0;--ion-color-warning-shade: #e0c331;--ion-color-warning-tint: #ffe14c;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-dark)}body.dark,html.ion-palette-dark,body[data-theme=dark]{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}:host{display:block}.comment-section.loading{pointer-events:none}.section-header{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;margin-bottom:20px;padding-bottom:16px;border-bottom:1px solid var(--ion-color-light-shade)}.header-title{display:flex;align-items:center;gap:8px}.title-icon{font-size:1.5rem;color:var(--ion-color-primary)}.title{margin:0;font-size:1.125rem;font-weight:600;color:var(--ion-text-color)}.count-badge{font-size:.75rem;font-weight:600;--padding-start: 8px;--padding-end: 8px}.header-actions{display:flex;align-items:center;gap:8px}.sort-select-item{--padding-start: 0;--padding-end: 0;--inner-padding-end: 0;--background: transparent;--min-height: 36px}.sort-select-item ion-select{--padding-start: 8px;--padding-end: 8px;min-width:140px;font-size:.875rem}.sort-icon{font-size:1.125rem;color:var(--ion-color-dark);margin-right:4px}.new-comment-section{margin-bottom:24px;padding:16px;background-color:var(--ion-color-light);border-radius:12px}.input-wrapper{display:flex;gap:12px}.input-avatar{flex-shrink:0}.input-avatar val-avatar{--size: 40px}.input-container{flex:1;min-width:0}.comment-textarea{--background: var(--ion-background-color);--padding-start: 12px;--padding-end: 12px;--padding-top: 10px;--padding-bottom: 10px;border-radius:8px;font-size:.875rem;min-height:60px;border:1px solid var(--ion-color-light-shade);transition:border-color .2s}.comment-textarea:focus-within{border-color:var(--ion-color-primary)}.input-actions{display:flex;align-items:center;justify-content:flex-end;gap:12px;margin-top:10px}.char-counter{font-size:.75rem;color:var(--ion-color-dark)}.char-counter.warning{color:var(--ion-color-warning);font-weight:500}.loading-state{display:flex;flex-direction:column;gap:20px}.skeleton-comment{display:flex;gap:12px;padding:12px 0}.skeleton-comment .skeleton-content{flex:1;display:flex;flex-direction:column;gap:8px}.comments-list{display:flex;flex-direction:column;gap:10px}.comments-list.with-dividers{gap:0}.comments-list.with-dividers val-comment{padding:16px 0}.comments-list.with-dividers val-comment:first-child{padding-top:0}.comment-divider{height:1px;background-color:var(--ion-color-light-shade);margin:0}.load-more-section{display:flex;justify-content:center;padding:20px 0}.load-more-section ion-button{min-width:200px}.load-more-section ion-spinner{width:28px;height:28px}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px 24px;text-align:center}.empty-icon{font-size:4rem;color:var(--ion-color-dark);opacity:.5;margin-bottom:16px}.empty-title{margin:0 0 8px;font-size:1.125rem;font-weight:600;color:var(--ion-text-color)}.empty-message{margin:0;font-size:.875rem;color:var(--ion-color-dark);max-width:300px}@media (max-width: 576px){.section-header{flex-direction:column;align-items:flex-start}.header-actions,.sort-select-item{width:100%}.sort-select-item ion-select{width:100%}.input-wrapper{flex-direction:column}.input-avatar{display:none}.input-actions{flex-direction:column;align-items:stretch}.input-actions ion-button{width:100%}}:host-context(body.dark) .new-comment-section,:host-context(.dark) .new-comment-section,:host-context(.ion-palette-dark) .new-comment-section,:host-context(html.ion-palette-dark) .new-comment-section,:host-context([data-theme=dark]) .new-comment-section{background-color:var(--ion-color-step-100, #1a1a1a)}:host-context(body.dark) .comment-textarea,:host-context(.dark) .comment-textarea,:host-context(.ion-palette-dark) .comment-textarea,:host-context(html.ion-palette-dark) .comment-textarea,:host-context([data-theme=dark]) .comment-textarea{--background: var(--ion-color-step-50, #121212);border-color:var(--ion-color-step-200, #2a2a2a)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonBadge, selector: "ion-badge", inputs: ["color", "mode"] }, { kind: "component", type: IonTextarea, selector: "ion-textarea", inputs: ["autoGrow", "autocapitalize", "autofocus", "clearOnEdit", "color", "cols", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "maxlength", "minlength", "mode", "name", "placeholder", "readonly", "required", "rows", "shape", "spellcheck", "value", "wrap"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonSelect, selector: "ion-select", inputs: ["cancelText", "color", "compareWith", "disabled", "errorText", "expandedIcon", "fill", "helperText", "interface", "interfaceOptions", "justify", "label", "labelPlacement", "mode", "multiple", "name", "okText", "placeholder", "selectedText", "shape", "toggleIcon", "value"] }, { kind: "component", type: IonSelectOption, selector: "ion-select-option", inputs: ["disabled", "value"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: IonInfiniteScroll, selector: "ion-infinite-scroll", inputs: ["disabled", "position", "threshold"] }, { kind: "component", type: IonInfiniteScrollContent, selector: "ion-infinite-scroll-content", inputs: ["loadingSpinner", "loadingText"] }, { kind: "component", type: CommentComponent, selector: "val-comment", inputs: ["props"], outputs: ["authorClick", "reactionClick", "actionClick", "menuItemClick", "loadMoreClick", "collapseToggle"] }, { kind: "component", type: AvatarComponent, selector: "val-avatar, vds-avatar", inputs: ["preset", "props"], outputs: ["onClick"] }, { kind: "component", type: SkeletonComponent, selector: "val-skeleton", inputs: ["props"] }] }); }
336
336
  }
337
337
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CommentSectionComponent, decorators: [{
338
338
  type: Component,
@@ -518,4 +518,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
518
518
  }], replyStart: [{
519
519
  type: Output
520
520
  }] } });
521
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC1zZWN0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvY29tbWVudC1zZWN0aW9uL2NvbW1lbnQtc2VjdGlvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUNMLE9BQU8sRUFDUCxTQUFTLEVBQ1QsUUFBUSxFQUNSLFdBQVcsRUFDWCxPQUFPLEVBQ1AsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsaUJBQWlCLEVBQ2pCLHdCQUF3QixHQUN6QixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixhQUFhLEVBQ2IsV0FBVyxFQUNYLHlCQUF5QixFQUN6QixtQkFBbUIsR0FDcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUNBQXlDLENBQUM7OztBQWdCNUUsUUFBUSxDQUFDO0lBQ1Asa0JBQWtCO0lBQ2xCLGFBQWE7SUFDYixXQUFXO0lBQ1gseUJBQXlCO0lBQ3pCLG1CQUFtQjtDQUNwQixDQUFD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aWFBQ1gsT0FBTywwTkFDUCxTQUFTLGtWQUNULGVBQWUsNkZBQ2YsVUFBVSx5R0FDVixpQkFBaUIsK0dBQ2pCLHdCQUF3QixtSEFDeEIsZ0JBQWdCLHlMQUNoQixlQUFlLDBHQUNmLGlCQUFpQjs7NEZBOExSLHVCQUF1QjtrQkFoTm5DLFNBQVM7K0JBQ0UscUJBQXFCLGNBQ25CLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsT0FBTzt3QkFDUCxTQUFTO3dCQUNULFFBQVE7d0JBQ1IsV0FBVzt3QkFDWCxPQUFPO3dCQUNQLFNBQVM7d0JBQ1QsZUFBZTt3QkFDZixVQUFVO3dCQUNWLGlCQUFpQjt3QkFDakIsd0JBQXdCO3dCQUN4QixnQkFBZ0I7d0JBQ2hCLGVBQWU7d0JBQ2YsaUJBQWlCO3FCQUNsQixZQUNTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOElUOzhCQWlEUSxLQUFLO3NCQUFiLEtBQUs7Z0JBR0ksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBR0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBR0csVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9pMThuJztcbmltcG9ydCB7XG4gIElvbkljb24sXG4gIElvbkJ1dHRvbixcbiAgSW9uQmFkZ2UsXG4gIElvblRleHRhcmVhLFxuICBJb25JdGVtLFxuICBJb25TZWxlY3QsXG4gIElvblNlbGVjdE9wdGlvbixcbiAgSW9uU3Bpbm5lcixcbiAgSW9uSW5maW5pdGVTY3JvbGwsXG4gIElvbkluZmluaXRlU2Nyb2xsQ29udGVudCxcbn0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcbmltcG9ydCB7XG4gIGNoYXRidWJibGVzT3V0bGluZSxcbiAgZmlsdGVyT3V0bGluZSxcbiAgc2VuZE91dGxpbmUsXG4gIGNoYXRidWJibGVFbGxpcHNlc091dGxpbmUsXG4gIHN3YXBWZXJ0aWNhbE91dGxpbmUsXG59IGZyb20gJ2lvbmljb25zL2ljb25zJztcblxuaW1wb3J0IHsgQ29tbWVudENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9jb21tZW50L2NvbW1lbnQuY29tcG9uZW50JztcbmltcG9ydCB7IEF2YXRhckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL2F2YXRhci9hdmF0YXIuY29tcG9uZW50JztcbmltcG9ydCB7IFNrZWxldG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvc2tlbGV0b24vc2tlbGV0b24uY29tcG9uZW50JztcbmltcG9ydCB7XG4gIENvbW1lbnRTZWN0aW9uTWV0YWRhdGEsXG4gIENvbW1lbnRTb3J0T3B0aW9uLFxuICBDb21tZW50U29ydENoYW5nZUV2ZW50LFxuICBDb21tZW50U3VibWl0RXZlbnQsXG4gIENvbW1lbnRTZWN0aW9uTG9hZE1vcmVFdmVudCxcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge1xuICBDb21tZW50QXV0aG9yQ2xpY2tFdmVudCxcbiAgQ29tbWVudFJlYWN0aW9uQ2xpY2tFdmVudCxcbiAgQ29tbWVudEFjdGlvbkNsaWNrRXZlbnQsXG4gIENvbW1lbnRNZW51SXRlbUNsaWNrRXZlbnQsXG4gIENvbW1lbnRMb2FkTW9yZUV2ZW50LFxufSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvY29tbWVudC90eXBlcyc7XG5cbmFkZEljb25zKHtcbiAgY2hhdGJ1YmJsZXNPdXRsaW5lLFxuICBmaWx0ZXJPdXRsaW5lLFxuICBzZW5kT3V0bGluZSxcbiAgY2hhdGJ1YmJsZUVsbGlwc2VzT3V0bGluZSxcbiAgc3dhcFZlcnRpY2FsT3V0bGluZSxcbn0pO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtY29tbWVudC1zZWN0aW9uJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBJb25JY29uLFxuICAgIElvbkJ1dHRvbixcbiAgICBJb25CYWRnZSxcbiAgICBJb25UZXh0YXJlYSxcbiAgICBJb25JdGVtLFxuICAgIElvblNlbGVjdCxcbiAgICBJb25TZWxlY3RPcHRpb24sXG4gICAgSW9uU3Bpbm5lcixcbiAgICBJb25JbmZpbml0ZVNjcm9sbCxcbiAgICBJb25JbmZpbml0ZVNjcm9sbENvbnRlbnQsXG4gICAgQ29tbWVudENvbXBvbmVudCxcbiAgICBBdmF0YXJDb21wb25lbnQsXG4gICAgU2tlbGV0b25Db21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImNvbW1lbnQtc2VjdGlvblwiIFtjbGFzcy5sb2FkaW5nXT1cInByb3BzLmxvYWRpbmdcIj5cbiAgICAgIDwhLS0gSGVhZGVyIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItdGl0bGVcIj5cbiAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNoYXRidWJibGVzLW91dGxpbmVcIiBjbGFzcz1cInRpdGxlLWljb25cIj48L2lvbi1pY29uPlxuICAgICAgICAgIDxoMyBjbGFzcz1cInRpdGxlXCI+e3sgZGlzcGxheVRpdGxlIH19PC9oMz5cbiAgICAgICAgICBAaWYgKHByb3BzLnNob3dDb3VudCAhPT0gZmFsc2UgJiYgcHJvcHMuY291bnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgPGlvbi1iYWRnZSBjb2xvcj1cIm1lZGl1bVwiIGNsYXNzPVwiY291bnQtYmFkZ2VcIj5cbiAgICAgICAgICAgICAge3sgZm9ybWF0Q291bnQocHJvcHMuY291bnQpIH19XG4gICAgICAgICAgICA8L2lvbi1iYWRnZT5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIEBpZiAocHJvcHMuc29ydE9wdGlvbnMgJiYgcHJvcHMuc29ydE9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItYWN0aW9uc1wiPlxuICAgICAgICAgICAgPGlvbi1pdGVtIGxpbmVzPVwibm9uZVwiIGNsYXNzPVwic29ydC1zZWxlY3QtaXRlbVwiPlxuICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInN3YXAtdmVydGljYWwtb3V0bGluZVwiIHNsb3Q9XCJzdGFydFwiIGNsYXNzPVwic29ydC1pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgPGlvbi1zZWxlY3RcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwicHJvcHMuc2VsZWN0ZWRTb3J0XCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicHJvcHMuc29ydExhYmVsIHx8IGdldFNvcnRCeUxhYmVsKClcIlxuICAgICAgICAgICAgICAgIGludGVyZmFjZT1cInBvcG92ZXJcIlxuICAgICAgICAgICAgICAgIChpb25DaGFuZ2UpPVwib25Tb3J0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQGZvciAob3B0aW9uIG9mIHByb3BzLnNvcnRPcHRpb25zOyB0cmFjayBvcHRpb24udG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgIDxpb24tc2VsZWN0LW9wdGlvbiBbdmFsdWVdPVwib3B0aW9uLnRva2VuXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGdldFNvcnRPcHRpb25MYWJlbChvcHRpb24pIH19XG4gICAgICAgICAgICAgICAgICA8L2lvbi1zZWxlY3Qtb3B0aW9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9pb24tc2VsZWN0PlxuICAgICAgICAgICAgPC9pb24taXRlbT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gTmV3IENvbW1lbnQgSW5wdXQgLS0+XG4gICAgICBAaWYgKHByb3BzLnNob3dJbnB1dCAhPT0gZmFsc2UpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cIm5ldy1jb21tZW50LXNlY3Rpb25cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtd3JhcHBlclwiPlxuICAgICAgICAgICAgQGlmIChwcm9wcy5pbnB1dENvbmZpZz8uY3VycmVudFVzZXI/LmF2YXRhcikge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtYXZhdGFyXCI+XG4gICAgICAgICAgICAgICAgPHZhbC1hdmF0YXIgW3Byb3BzXT1cInByb3BzLmlucHV0Q29uZmlnLmN1cnJlbnRVc2VyLmF2YXRhclwiPjwvdmFsLWF2YXRhcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgPGlvbi10ZXh0YXJlYVxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibmV3Q29tbWVudFRleHRcIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJnZXRJbnB1dFBsYWNlaG9sZGVyKClcIlxuICAgICAgICAgICAgICAgIFttYXhsZW5ndGhdPVwicHJvcHMuaW5wdXRDb25maWc/Lm1heExlbmd0aCB8fCAyMDAwXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicHJvcHMuaW5wdXRDb25maWc/LmRpc2FibGVkIHx8IHByb3BzLmxvYWRpbmdcIlxuICAgICAgICAgICAgICAgIFthdXRvR3Jvd109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICByb3dzPVwiMlwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb21tZW50LXRleHRhcmVhXCJcbiAgICAgICAgICAgICAgPjwvaW9uLXRleHRhcmVhPlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgQGlmIChwcm9wcy5pbnB1dENvbmZpZz8uc2hvd0NvdW50ZXIgJiYgcHJvcHMuaW5wdXRDb25maWc/Lm1heExlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGFyLWNvdW50ZXJcIiBbY2xhc3Mud2FybmluZ109XCJpc05lYXJMaW1pdCgpXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IG5ld0NvbW1lbnRUZXh0Lmxlbmd0aCB9fSAvIHt7IHByb3BzLmlucHV0Q29uZmlnLm1heExlbmd0aCB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICBbY29sb3JdPVwicHJvcHMuaW5wdXRDb25maWc/LnN1Ym1pdENvbG9yIHx8IHByb3BzLmNvbG9yIHx8ICdwcmltYXJ5J1wiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNhblN1Ym1pdCgpXCJcbiAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TdWJtaXRDb21tZW50KClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwic2VuZC1vdXRsaW5lXCIgc2xvdD1cInN0YXJ0XCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgICAgIHt7IGdldFN1Ym1pdExhYmVsKCkgfX1cbiAgICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuXG4gICAgICBAaWYgKHByb3BzLmxvYWRpbmcpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImxvYWRpbmctc3RhdGVcIj5cbiAgICAgICAgICBAZm9yIChpIG9mIGdldFNrZWxldG9uQXJyYXkoKTsgdHJhY2sgaSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNrZWxldG9uLWNvbW1lbnRcIj5cbiAgICAgICAgICAgICAgPHZhbC1za2VsZXRvbiBbcHJvcHNdPVwieyB0eXBlOiAnYXZhdGFyJywgd2lkdGg6ICczNnB4JywgaGVpZ2h0OiAnMzZweCcgfVwiPjwvdmFsLXNrZWxldG9uPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2tlbGV0b24tY29udGVudFwiPlxuICAgICAgICAgICAgICAgIDx2YWwtc2tlbGV0b24gW3Byb3BzXT1cInsgdHlwZTogJ3RleHQnLCB3aWR0aDogJzEyMHB4JywgaGVpZ2h0OiAnMTRweCcgfVwiPjwvdmFsLXNrZWxldG9uPlxuICAgICAgICAgICAgICAgIDx2YWwtc2tlbGV0b24gW3Byb3BzXT1cInsgdHlwZTogJ3BhcmFncmFwaCcsIGxpbmVzOiAyIH1cIj48L3ZhbC1za2VsZXRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfSBAZWxzZSBpZiAocHJvcHMuY29tbWVudHMgJiYgcHJvcHMuY29tbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiY29tbWVudHMtbGlzdFwiIFtjbGFzcy53aXRoLWRpdmlkZXJzXT1cInByb3BzLnNob3dEaXZpZGVyc1wiPlxuICAgICAgICAgIEBmb3IgKGNvbW1lbnQgb2YgcHJvcHMuY29tbWVudHM7IHRyYWNrIGNvbW1lbnQudG9rZW4pIHtcbiAgICAgICAgICAgIDx2YWwtY29tbWVudFxuICAgICAgICAgICAgICBbcHJvcHNdPVwiY29tbWVudFwiXG4gICAgICAgICAgICAgIChhdXRob3JDbGljayk9XCJhdXRob3JDbGljay5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAocmVhY3Rpb25DbGljayk9XCJyZWFjdGlvbkNsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChhY3Rpb25DbGljayk9XCJvbkNvbW1lbnRBY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChtZW51SXRlbUNsaWNrKT1cIm1lbnVJdGVtQ2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKGxvYWRNb3JlQ2xpY2spPVwiY29tbWVudExvYWRNb3JlLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChjb2xsYXBzZVRvZ2dsZSk9XCJjb2xsYXBzZVRvZ2dsZS5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgPjwvdmFsLWNvbW1lbnQ+XG5cbiAgICAgICAgICAgIEBpZiAocHJvcHMuc2hvd0RpdmlkZXJzICYmICEkbGFzdCkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tbWVudC1kaXZpZGVyXCI+PC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQGlmIChwcm9wcy5oYXNNb3JlICYmIHByb3BzLnBhZ2luYXRpb25Nb2RlICE9PSAnaW5maW5pdGUnKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9hZC1tb3JlLXNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgQGlmIChwcm9wcy5sb2FkaW5nTW9yZSkge1xuICAgICAgICAgICAgICAgIDxpb24tc3Bpbm5lciBuYW1lPVwiY2lyY3VsYXJcIiBbY29sb3JdPVwicHJvcHMuY29sb3IgfHwgJ3ByaW1hcnknXCI+PC9pb24tc3Bpbm5lcj5cbiAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cIm91dGxpbmVcIiBbY29sb3JdPVwicHJvcHMuY29sb3IgfHwgJ3ByaW1hcnknXCIgZXhwYW5kPVwiYmxvY2tcIiAoY2xpY2spPVwib25Mb2FkTW9yZSgpXCI+XG4gICAgICAgICAgICAgICAgICB7eyBkaXNwbGF5TG9hZE1vcmVMYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICBAaWYgKHByb3BzLnBhZ2luYXRpb25Nb2RlID09PSAnaW5maW5pdGUnKSB7XG4gICAgICAgICAgPGlvbi1pbmZpbml0ZS1zY3JvbGxcbiAgICAgICAgICAgIFt0aHJlc2hvbGRdPVwicHJvcHMuaW5maW5pdGVTY3JvbGxUaHJlc2hvbGQgfHwgJzEwMHB4J1wiXG4gICAgICAgICAgICBbcG9zaXRpb25dPVwicHJvcHMuaW5maW5pdGVTY3JvbGxQb3NpdGlvbiB8fCAnYm90dG9tJ1wiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXByb3BzLmhhc01vcmVcIlxuICAgICAgICAgICAgKGlvbkluZmluaXRlKT1cIm9uSW5maW5pdGVTY3JvbGwoJGV2ZW50KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlvbi1pbmZpbml0ZS1zY3JvbGwtY29udGVudFxuICAgICAgICAgICAgICBbbG9hZGluZ1NwaW5uZXJdPVwiJ2NyZXNjZW50J1wiXG4gICAgICAgICAgICAgIFtsb2FkaW5nVGV4dF09XCJkaXNwbGF5TG9hZE1vcmVMYWJlbFwiXG4gICAgICAgICAgICA+PC9pb24taW5maW5pdGUtc2Nyb2xsLWNvbnRlbnQ+XG4gICAgICAgICAgPC9pb24taW5maW5pdGUtc2Nyb2xsPlxuICAgICAgICB9XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlXCI+XG4gICAgICAgICAgPGlvbi1pY29uIFtuYW1lXT1cInByb3BzLmVtcHR5U3RhdGU/Lmljb24gfHwgJ2NoYXRidWJibGUtZWxsaXBzZXMtb3V0bGluZSdcIiBjbGFzcz1cImVtcHR5LWljb25cIj48L2lvbi1pY29uPlxuICAgICAgICAgIDxoNCBjbGFzcz1cImVtcHR5LXRpdGxlXCI+e3sgZ2V0RW1wdHlUaXRsZSgpIH19PC9oND5cbiAgICAgICAgICA8cCBjbGFzcz1cImVtcHR5LW1lc3NhZ2VcIj57eyBnZXRFbXB0eU1lc3NhZ2UoKSB9fTwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlVXJsczogWycuL2NvbW1lbnQtc2VjdGlvbi5jb21wb25lbnQuc2NzcyddLFxufSlcbi8qKlxuICogdmFsLWNvbW1lbnQtc2VjdGlvblxuICpcbiAqIEFuIG9yZ2FuaXNtIGNvbXBvbmVudCB0aGF0IHByb3ZpZGVzIGEgY29tcGxldGUgY29tbWVudCBzZWN0aW9uIHdpdGg6XG4gKiAtIEhlYWRlciB3aXRoIHRpdGxlIGFuZCBjb3VudFxuICogLSBTb3J0L2ZpbHRlciBvcHRpb25zXG4gKiAtIE5ldyBjb21tZW50IGlucHV0XG4gKiAtIENvbW1lbnRzIGxpc3Qgd2l0aCB2YWwtY29tbWVudFxuICogLSBMb2FkIG1vcmUgcGFnaW5hdGlvblxuICogLSBFbXB0eSBzdGF0ZVxuICpcbiAqIEBleGFtcGxlIEJhc2ljIHVzYWdlXG4gKiA8dmFsLWNvbW1lbnQtc2VjdGlvbiBbcHJvcHNdPVwie1xuICogICB0aXRsZTogJ0NvbW1lbnRzJyxcbiAqICAgY291bnQ6IDQyLFxuICogICBjb21tZW50czogY29tbWVudHNBcnJheSxcbiAqICAgc2hvd0lucHV0OiB0cnVlXG4gKiB9XCI+PC92YWwtY29tbWVudC1zZWN0aW9uPlxuICpcbiAqIEBleGFtcGxlIFdpdGggc29ydGluZ1xuICogPHZhbC1jb21tZW50LXNlY3Rpb24gW3Byb3BzXT1cIntcbiAqICAgdGl0bGU6ICdSZXZpZXdzJyxcbiAqICAgY291bnQ6IDEyOCxcbiAqICAgY29tbWVudHM6IHJldmlld3MsXG4gKiAgIHNvcnRPcHRpb25zOiBbXG4gKiAgICAgeyB0b2tlbjogJ25ld2VzdCcsIGxhYmVsOiAnTmV3ZXN0IGZpcnN0JyB9LFxuICogICAgIHsgdG9rZW46ICdvbGRlc3QnLCBsYWJlbDogJ09sZGVzdCBmaXJzdCcgfSxcbiAqICAgICB7IHRva2VuOiAncG9wdWxhcicsIGxhYmVsOiAnTW9zdCBwb3B1bGFyJyB9XG4gKiAgIF0sXG4gKiAgIHNlbGVjdGVkU29ydDogJ25ld2VzdCdcbiAqIH1cIiAoc29ydENoYW5nZSk9XCJvblNvcnQoJGV2ZW50KVwiPjwvdmFsLWNvbW1lbnQtc2VjdGlvbj5cbiAqXG4gKiBAaW5wdXQgcHJvcHM6IENvbW1lbnRTZWN0aW9uTWV0YWRhdGEgLSBDb25maWd1cmF0aW9uIGZvciB0aGUgc2VjdGlvblxuICogQG91dHB1dCBzb3J0Q2hhbmdlIC0gU29ydCBvcHRpb24gY2hhbmdlZFxuICogQG91dHB1dCBjb21tZW50U3VibWl0IC0gTmV3IGNvbW1lbnQgc3VibWl0dGVkXG4gKiBAb3V0cHV0IGxvYWRNb3JlIC0gTG9hZCBtb3JlIGNsaWNrZWRcbiAqIEBvdXRwdXQgYXV0aG9yQ2xpY2sgLSBDb21tZW50IGF1dGhvciBjbGlja2VkIChidWJibGVkIGZyb20gdmFsLWNvbW1lbnQpXG4gKiBAb3V0cHV0IHJlYWN0aW9uQ2xpY2sgLSBSZWFjdGlvbiBjbGlja2VkIChidWJibGVkKVxuICogQG91dHB1dCBhY3Rpb25DbGljayAtIEFjdGlvbiBjbGlja2VkIChidWJibGVkKVxuICogQG91dHB1dCBtZW51SXRlbUNsaWNrIC0gTWVudSBpdGVtIGNsaWNrZWQgKGJ1YmJsZWQpXG4gKiBAb3V0cHV0IGNvbW1lbnRMb2FkTW9yZSAtIExvYWQgbW9yZSByZXBsaWVzIGNsaWNrZWQgKGJ1YmJsZWQpXG4gKiBAb3V0cHV0IGNvbGxhcHNlVG9nZ2xlIC0gQ29tbWVudCBjb2xsYXBzZSB0b2dnbGVkIChidWJibGVkKVxuICovXG5leHBvcnQgY2xhc3MgQ29tbWVudFNlY3Rpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIGkxOG4gPSBpbmplY3QoSTE4blNlcnZpY2UpO1xuXG4gIEBJbnB1dCgpIHByb3BzOiBDb21tZW50U2VjdGlvbk1ldGFkYXRhO1xuXG4gIC8vIFNlY3Rpb24gZXZlbnRzXG4gIEBPdXRwdXQoKSBzb3J0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxDb21tZW50U29ydENoYW5nZUV2ZW50PigpO1xuICBAT3V0cHV0KCkgY29tbWVudFN1Ym1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8Q29tbWVudFN1Ym1pdEV2ZW50PigpO1xuICBAT3V0cHV0KCkgbG9hZE1vcmUgPSBuZXcgRXZlbnRFbWl0dGVyPENvbW1lbnRTZWN0aW9uTG9hZE1vcmVFdmVudD4oKTtcblxuICAvLyBCdWJibGVkIGV2ZW50cyBmcm9tIHZhbC1jb21tZW50XG4gIEBPdXRwdXQoKSBhdXRob3JDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8Q29tbWVudEF1dGhvckNsaWNrRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSByZWFjdGlvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxDb21tZW50UmVhY3Rpb25DbGlja0V2ZW50PigpO1xuICBAT3V0cHV0KCkgYWN0aW9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPENvbW1lbnRBY3Rpb25DbGlja0V2ZW50PigpO1xuICBAT3V0cHV0KCkgbWVudUl0ZW1DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8Q29tbWVudE1lbnVJdGVtQ2xpY2tFdmVudD4oKTtcbiAgQE91dHB1dCgpIGNvbW1lbnRMb2FkTW9yZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q29tbWVudExvYWRNb3JlRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBjb2xsYXBzZVRvZ2dsZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyB0b2tlbjogc3RyaW5nOyBjb2xsYXBzZWQ6IGJvb2xlYW4gfT4oKTtcblxuICAvLyBSZXBseSBzdGF0ZVxuICBAT3V0cHV0KCkgcmVwbHlTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBjb21tZW50VG9rZW46IHN0cmluZyB9PigpO1xuXG4gIG5ld0NvbW1lbnRUZXh0ID0gJyc7XG4gIHJlcGx5aW5nVG86IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIGRpc3BsYXlUaXRsZSA9ICcnO1xuICBkaXNwbGF5TG9hZE1vcmVMYWJlbCA9ICcnO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlRGlzcGxheVRleHRzKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZURpc3BsYXlUZXh0cygpOiB2b2lkIHtcbiAgICB0aGlzLmRpc3BsYXlUaXRsZSA9IHRoaXMucHJvcHMudGl0bGUgfHwgdGhpcy5pMThuLnQoJ2NvbW1lbnRzJyk7XG4gICAgdGhpcy5kaXNwbGF5TG9hZE1vcmVMYWJlbCA9IHRoaXMucHJvcHMubG9hZE1vcmVMYWJlbCB8fCB0aGlzLmkxOG4udCgnbG9hZE1vcmVDb21tZW50cycpO1xuICB9XG5cbiAgZ2V0U29ydEJ5TGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pMThuLnQoJ3NvcnRCeScpO1xuICB9XG5cbiAgZm9ybWF0Q291bnQoY291bnQ6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKGNvdW50ID49IDEwMDAwMDApIHtcbiAgICAgIHJldHVybiAoY291bnQgLyAxMDAwMDAwKS50b0ZpeGVkKDEpLnJlcGxhY2UoL1xcLjAkLywgJycpICsgJ00nO1xuICAgIH1cbiAgICBpZiAoY291bnQgPj0gMTAwMCkge1xuICAgICAgcmV0dXJuIChjb3VudCAvIDEwMDApLnRvRml4ZWQoMSkucmVwbGFjZSgvXFwuMCQvLCAnJykgKyAnSyc7XG4gICAgfVxuICAgIHJldHVybiBjb3VudC50b1N0cmluZygpO1xuICB9XG5cbiAgZ2V0U29ydE9wdGlvbkxhYmVsKG9wdGlvbjogQ29tbWVudFNvcnRPcHRpb24pOiBzdHJpbmcge1xuICAgIHJldHVybiBvcHRpb24ubGFiZWw7XG4gIH1cblxuICBnZXRJbnB1dFBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaW5wdXRDb25maWc/LnBsYWNlaG9sZGVyIHx8IHRoaXMuaTE4bi50KCd3cml0ZUNvbW1lbnQnKTtcbiAgfVxuXG4gIGdldFN1Ym1pdExhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaW5wdXRDb25maWc/LnN1Ym1pdExhYmVsIHx8IHRoaXMuaTE4bi50KCdwdWJsaXNoJyk7XG4gIH1cblxuICBnZXRFbXB0eVRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZW1wdHlTdGF0ZT8udGl0bGUgfHwgdGhpcy5pMThuLnQoJ25vQ29tbWVudHNZZXQnKTtcbiAgfVxuXG4gIGdldEVtcHR5TWVzc2FnZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmVtcHR5U3RhdGU/Lm1lc3NhZ2UgfHwgdGhpcy5pMThuLnQoJ2JlRmlyc3RUb0NvbW1lbnQnKTtcbiAgfVxuXG4gIGdldFNrZWxldG9uQXJyYXkoKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IGNvdW50ID0gdGhpcy5wcm9wcy5za2VsZXRvbkNvdW50IHx8IDM7XG4gICAgcmV0dXJuIEFycmF5KGNvdW50KVxuICAgICAgLmZpbGwoMClcbiAgICAgIC5tYXAoKF8sIGkpID0+IGkpO1xuICB9XG5cbiAgY2FuU3VibWl0KCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG1pbkxlbmd0aCA9IHRoaXMucHJvcHMuaW5wdXRDb25maWc/Lm1pbkxlbmd0aCB8fCAxO1xuICAgIHJldHVybiB0aGlzLm5ld0NvbW1lbnRUZXh0LnRyaW0oKS5sZW5ndGggPj0gbWluTGVuZ3RoICYmICF0aGlzLnByb3BzLmxvYWRpbmcgJiYgIXRoaXMucHJvcHMuaW5wdXRDb25maWc/LmRpc2FibGVkO1xuICB9XG5cbiAgaXNOZWFyTGltaXQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbWF4TGVuZ3RoID0gdGhpcy5wcm9wcy5pbnB1dENvbmZpZz8ubWF4TGVuZ3RoIHx8IDIwMDA7XG4gICAgcmV0dXJuIHRoaXMubmV3Q29tbWVudFRleHQubGVuZ3RoID4gbWF4TGVuZ3RoICogMC45O1xuICB9XG5cbiAgb25Tb3J0Q2hhbmdlKGV2ZW50OiBDdXN0b21FdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkVG9rZW4gPSBldmVudC5kZXRhaWwudmFsdWU7XG4gICAgY29uc3Qgb3B0aW9uID0gdGhpcy5wcm9wcy5zb3J0T3B0aW9ucz8uZmluZChvID0+IG8udG9rZW4gPT09IHNlbGVjdGVkVG9rZW4pO1xuXG4gICAgaWYgKG9wdGlvbikge1xuICAgICAgdGhpcy5zb3J0Q2hhbmdlLmVtaXQoe1xuICAgICAgICBvcHRpb24sXG4gICAgICAgIHByZXZpb3VzU29ydDogdGhpcy5wcm9wcy5zZWxlY3RlZFNvcnQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvblN1Ym1pdENvbW1lbnQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhblN1Ym1pdCgpKSByZXR1cm47XG5cbiAgICB0aGlzLmNvbW1lbnRTdWJtaXQuZW1pdCh7XG4gICAgICBjb250ZW50OiB0aGlzLm5ld0NvbW1lbnRUZXh0LnRyaW0oKSxcbiAgICAgIHBhcmVudFRva2VuOiB0aGlzLnJlcGx5aW5nVG8gfHwgdW5kZWZpbmVkLFxuICAgICAgc2VjdGlvblRva2VuOiB0aGlzLnByb3BzLnRva2VuLFxuICAgIH0pO1xuXG4gICAgdGhpcy5uZXdDb21tZW50VGV4dCA9ICcnO1xuICAgIHRoaXMucmVwbHlpbmdUbyA9IG51bGw7XG4gIH1cblxuICBvbkNvbW1lbnRBY3Rpb24oZXZlbnQ6IENvbW1lbnRBY3Rpb25DbGlja0V2ZW50KTogdm9pZCB7XG4gICAgLy8gQ2hlY2sgaWYgaXQncyBhIHJlcGx5IGFjdGlvblxuICAgIGlmIChldmVudC5hY3Rpb24udG9rZW4gPT09ICdyZXBseScpIHtcbiAgICAgIHRoaXMucmVwbHlpbmdUbyA9IGV2ZW50LmNvbW1lbnRUb2tlbjtcbiAgICAgIHRoaXMucmVwbHlTdGFydC5lbWl0KHsgY29tbWVudFRva2VuOiBldmVudC5jb21tZW50VG9rZW4gfSk7XG4gICAgfVxuXG4gICAgdGhpcy5hY3Rpb25DbGljay5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG9uTG9hZE1vcmUoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkTW9yZS5lbWl0KHtcbiAgICAgIHNlY3Rpb25Ub2tlbjogdGhpcy5wcm9wcy50b2tlbixcbiAgICAgIGN1cnJlbnRDb3VudDogdGhpcy5wcm9wcy5jb21tZW50cz8ubGVuZ3RoIHx8IDAsXG4gICAgfSk7XG4gIH1cblxuICBvbkluZmluaXRlU2Nyb2xsKGV2ZW50OiBDdXN0b21FdmVudCk6IHZvaWQge1xuICAgIHRoaXMubG9hZE1vcmUuZW1pdCh7XG4gICAgICBzZWN0aW9uVG9rZW46IHRoaXMucHJvcHMudG9rZW4sXG4gICAgICBjdXJyZW50Q291bnQ6IHRoaXMucHJvcHMuY29tbWVudHM/Lmxlbmd0aCB8fCAwLFxuICAgIH0pO1xuXG4gICAgLy8gVGhlIHBhcmVudCBjb21wb25lbnQgc2hvdWxkIGNhbGwgY29tcGxldGVJbmZpbml0ZVNjcm9sbCgpIHdoZW4gZG9uZSBsb2FkaW5nXG4gICAgLy8gU3RvcmUgcmVmZXJlbmNlIHRvIGNvbXBsZXRlIHRoZSBpbmZpbml0ZSBzY3JvbGxcbiAgICB0aGlzLmluZmluaXRlU2Nyb2xsRXZlbnQgPSBldmVudDtcbiAgfVxuXG4gIC8vIENhbGwgdGhpcyBtZXRob2QgZnJvbSBwYXJlbnQgYWZ0ZXIgbG9hZGluZyBtb3JlIGNvbW1lbnRzXG4gIGNvbXBsZXRlSW5maW5pdGVTY3JvbGwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5maW5pdGVTY3JvbGxFdmVudCkge1xuICAgICAgKHRoaXMuaW5maW5pdGVTY3JvbGxFdmVudC50YXJnZXQgYXMgSFRNTElvbkluZmluaXRlU2Nyb2xsRWxlbWVudCkuY29tcGxldGUoKTtcbiAgICAgIHRoaXMuaW5maW5pdGVTY3JvbGxFdmVudCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbmZpbml0ZVNjcm9sbEV2ZW50OiBDdXN0b21FdmVudCB8IG51bGwgPSBudWxsO1xuXG4gIC8vIE1ldGhvZCB0byBwcm9ncmFtbWF0aWNhbGx5IHN0YXJ0IGEgcmVwbHlcbiAgc3RhcnRSZXBseShjb21tZW50VG9rZW46IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucmVwbHlpbmdUbyA9IGNvbW1lbnRUb2tlbjtcbiAgfVxuXG4gIC8vIE1ldGhvZCB0byBjYW5jZWwgcmVwbHlcbiAgY2FuY2VsUmVwbHkoKTogdm9pZCB7XG4gICAgdGhpcy5yZXBseWluZ1RvID0gbnVsbDtcbiAgfVxufVxuIl19
521
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC1zZWN0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvY29tbWVudC1zZWN0aW9uL2NvbW1lbnQtc2VjdGlvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUNMLE9BQU8sRUFDUCxTQUFTLEVBQ1QsUUFBUSxFQUNSLFdBQVcsRUFDWCxPQUFPLEVBQ1AsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsaUJBQWlCLEVBQ2pCLHdCQUF3QixHQUN6QixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixhQUFhLEVBQ2IsV0FBVyxFQUNYLHlCQUF5QixFQUN6QixtQkFBbUIsR0FDcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUNBQXlDLENBQUM7OztBQWdCNUUsUUFBUSxDQUFDO0lBQ1Asa0JBQWtCO0lBQ2xCLGFBQWE7SUFDYixXQUFXO0lBQ1gseUJBQXlCO0lBQ3pCLG1CQUFtQjtDQUNwQixDQUFD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aWFBQ1gsT0FBTywwTkFDUCxTQUFTLGtWQUNULGVBQWUsNkZBQ2YsVUFBVSx5R0FDVixpQkFBaUIsK0dBQ2pCLHdCQUF3QixtSEFDeEIsZ0JBQWdCLHlMQUNoQixlQUFlLHNIQUNmLGlCQUFpQjs7NEZBOExSLHVCQUF1QjtrQkFoTm5DLFNBQVM7K0JBQ0UscUJBQXFCLGNBQ25CLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsT0FBTzt3QkFDUCxTQUFTO3dCQUNULFFBQVE7d0JBQ1IsV0FBVzt3QkFDWCxPQUFPO3dCQUNQLFNBQVM7d0JBQ1QsZUFBZTt3QkFDZixVQUFVO3dCQUNWLGlCQUFpQjt3QkFDakIsd0JBQXdCO3dCQUN4QixnQkFBZ0I7d0JBQ2hCLGVBQWU7d0JBQ2YsaUJBQWlCO3FCQUNsQixZQUNTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOElUOzhCQWlEUSxLQUFLO3NCQUFiLEtBQUs7Z0JBR0ksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBR0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBR0csVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9pMThuJztcbmltcG9ydCB7XG4gIElvbkljb24sXG4gIElvbkJ1dHRvbixcbiAgSW9uQmFkZ2UsXG4gIElvblRleHRhcmVhLFxuICBJb25JdGVtLFxuICBJb25TZWxlY3QsXG4gIElvblNlbGVjdE9wdGlvbixcbiAgSW9uU3Bpbm5lcixcbiAgSW9uSW5maW5pdGVTY3JvbGwsXG4gIElvbkluZmluaXRlU2Nyb2xsQ29udGVudCxcbn0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcbmltcG9ydCB7XG4gIGNoYXRidWJibGVzT3V0bGluZSxcbiAgZmlsdGVyT3V0bGluZSxcbiAgc2VuZE91dGxpbmUsXG4gIGNoYXRidWJibGVFbGxpcHNlc091dGxpbmUsXG4gIHN3YXBWZXJ0aWNhbE91dGxpbmUsXG59IGZyb20gJ2lvbmljb25zL2ljb25zJztcblxuaW1wb3J0IHsgQ29tbWVudENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9jb21tZW50L2NvbW1lbnQuY29tcG9uZW50JztcbmltcG9ydCB7IEF2YXRhckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL2F2YXRhci9hdmF0YXIuY29tcG9uZW50JztcbmltcG9ydCB7IFNrZWxldG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvc2tlbGV0b24vc2tlbGV0b24uY29tcG9uZW50JztcbmltcG9ydCB7XG4gIENvbW1lbnRTZWN0aW9uTWV0YWRhdGEsXG4gIENvbW1lbnRTb3J0T3B0aW9uLFxuICBDb21tZW50U29ydENoYW5nZUV2ZW50LFxuICBDb21tZW50U3VibWl0RXZlbnQsXG4gIENvbW1lbnRTZWN0aW9uTG9hZE1vcmVFdmVudCxcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge1xuICBDb21tZW50QXV0aG9yQ2xpY2tFdmVudCxcbiAgQ29tbWVudFJlYWN0aW9uQ2xpY2tFdmVudCxcbiAgQ29tbWVudEFjdGlvbkNsaWNrRXZlbnQsXG4gIENvbW1lbnRNZW51SXRlbUNsaWNrRXZlbnQsXG4gIENvbW1lbnRMb2FkTW9yZUV2ZW50LFxufSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvY29tbWVudC90eXBlcyc7XG5cbmFkZEljb25zKHtcbiAgY2hhdGJ1YmJsZXNPdXRsaW5lLFxuICBmaWx0ZXJPdXRsaW5lLFxuICBzZW5kT3V0bGluZSxcbiAgY2hhdGJ1YmJsZUVsbGlwc2VzT3V0bGluZSxcbiAgc3dhcFZlcnRpY2FsT3V0bGluZSxcbn0pO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtY29tbWVudC1zZWN0aW9uJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBJb25JY29uLFxuICAgIElvbkJ1dHRvbixcbiAgICBJb25CYWRnZSxcbiAgICBJb25UZXh0YXJlYSxcbiAgICBJb25JdGVtLFxuICAgIElvblNlbGVjdCxcbiAgICBJb25TZWxlY3RPcHRpb24sXG4gICAgSW9uU3Bpbm5lcixcbiAgICBJb25JbmZpbml0ZVNjcm9sbCxcbiAgICBJb25JbmZpbml0ZVNjcm9sbENvbnRlbnQsXG4gICAgQ29tbWVudENvbXBvbmVudCxcbiAgICBBdmF0YXJDb21wb25lbnQsXG4gICAgU2tlbGV0b25Db21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImNvbW1lbnQtc2VjdGlvblwiIFtjbGFzcy5sb2FkaW5nXT1cInByb3BzLmxvYWRpbmdcIj5cbiAgICAgIDwhLS0gSGVhZGVyIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItdGl0bGVcIj5cbiAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNoYXRidWJibGVzLW91dGxpbmVcIiBjbGFzcz1cInRpdGxlLWljb25cIj48L2lvbi1pY29uPlxuICAgICAgICAgIDxoMyBjbGFzcz1cInRpdGxlXCI+e3sgZGlzcGxheVRpdGxlIH19PC9oMz5cbiAgICAgICAgICBAaWYgKHByb3BzLnNob3dDb3VudCAhPT0gZmFsc2UgJiYgcHJvcHMuY291bnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgPGlvbi1iYWRnZSBjb2xvcj1cIm1lZGl1bVwiIGNsYXNzPVwiY291bnQtYmFkZ2VcIj5cbiAgICAgICAgICAgICAge3sgZm9ybWF0Q291bnQocHJvcHMuY291bnQpIH19XG4gICAgICAgICAgICA8L2lvbi1iYWRnZT5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIEBpZiAocHJvcHMuc29ydE9wdGlvbnMgJiYgcHJvcHMuc29ydE9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItYWN0aW9uc1wiPlxuICAgICAgICAgICAgPGlvbi1pdGVtIGxpbmVzPVwibm9uZVwiIGNsYXNzPVwic29ydC1zZWxlY3QtaXRlbVwiPlxuICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInN3YXAtdmVydGljYWwtb3V0bGluZVwiIHNsb3Q9XCJzdGFydFwiIGNsYXNzPVwic29ydC1pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgPGlvbi1zZWxlY3RcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwicHJvcHMuc2VsZWN0ZWRTb3J0XCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicHJvcHMuc29ydExhYmVsIHx8IGdldFNvcnRCeUxhYmVsKClcIlxuICAgICAgICAgICAgICAgIGludGVyZmFjZT1cInBvcG92ZXJcIlxuICAgICAgICAgICAgICAgIChpb25DaGFuZ2UpPVwib25Tb3J0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQGZvciAob3B0aW9uIG9mIHByb3BzLnNvcnRPcHRpb25zOyB0cmFjayBvcHRpb24udG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgIDxpb24tc2VsZWN0LW9wdGlvbiBbdmFsdWVdPVwib3B0aW9uLnRva2VuXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGdldFNvcnRPcHRpb25MYWJlbChvcHRpb24pIH19XG4gICAgICAgICAgICAgICAgICA8L2lvbi1zZWxlY3Qtb3B0aW9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9pb24tc2VsZWN0PlxuICAgICAgICAgICAgPC9pb24taXRlbT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gTmV3IENvbW1lbnQgSW5wdXQgLS0+XG4gICAgICBAaWYgKHByb3BzLnNob3dJbnB1dCAhPT0gZmFsc2UpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cIm5ldy1jb21tZW50LXNlY3Rpb25cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtd3JhcHBlclwiPlxuICAgICAgICAgICAgQGlmIChwcm9wcy5pbnB1dENvbmZpZz8uY3VycmVudFVzZXI/LmF2YXRhcikge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtYXZhdGFyXCI+XG4gICAgICAgICAgICAgICAgPHZhbC1hdmF0YXIgW3Byb3BzXT1cInByb3BzLmlucHV0Q29uZmlnLmN1cnJlbnRVc2VyLmF2YXRhclwiPjwvdmFsLWF2YXRhcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgPGlvbi10ZXh0YXJlYVxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibmV3Q29tbWVudFRleHRcIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJnZXRJbnB1dFBsYWNlaG9sZGVyKClcIlxuICAgICAgICAgICAgICAgIFttYXhsZW5ndGhdPVwicHJvcHMuaW5wdXRDb25maWc/Lm1heExlbmd0aCB8fCAyMDAwXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicHJvcHMuaW5wdXRDb25maWc/LmRpc2FibGVkIHx8IHByb3BzLmxvYWRpbmdcIlxuICAgICAgICAgICAgICAgIFthdXRvR3Jvd109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICByb3dzPVwiMlwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb21tZW50LXRleHRhcmVhXCJcbiAgICAgICAgICAgICAgPjwvaW9uLXRleHRhcmVhPlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgQGlmIChwcm9wcy5pbnB1dENvbmZpZz8uc2hvd0NvdW50ZXIgJiYgcHJvcHMuaW5wdXRDb25maWc/Lm1heExlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGFyLWNvdW50ZXJcIiBbY2xhc3Mud2FybmluZ109XCJpc05lYXJMaW1pdCgpXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IG5ld0NvbW1lbnRUZXh0Lmxlbmd0aCB9fSAvIHt7IHByb3BzLmlucHV0Q29uZmlnLm1heExlbmd0aCB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICBbY29sb3JdPVwicHJvcHMuaW5wdXRDb25maWc/LnN1Ym1pdENvbG9yIHx8IHByb3BzLmNvbG9yIHx8ICdwcmltYXJ5J1wiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNhblN1Ym1pdCgpXCJcbiAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TdWJtaXRDb21tZW50KClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwic2VuZC1vdXRsaW5lXCIgc2xvdD1cInN0YXJ0XCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgICAgIHt7IGdldFN1Ym1pdExhYmVsKCkgfX1cbiAgICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuXG4gICAgICBAaWYgKHByb3BzLmxvYWRpbmcpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImxvYWRpbmctc3RhdGVcIj5cbiAgICAgICAgICBAZm9yIChpIG9mIGdldFNrZWxldG9uQXJyYXkoKTsgdHJhY2sgaSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNrZWxldG9uLWNvbW1lbnRcIj5cbiAgICAgICAgICAgICAgPHZhbC1za2VsZXRvbiBbcHJvcHNdPVwieyB0eXBlOiAnYXZhdGFyJywgd2lkdGg6ICczNnB4JywgaGVpZ2h0OiAnMzZweCcgfVwiPjwvdmFsLXNrZWxldG9uPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2tlbGV0b24tY29udGVudFwiPlxuICAgICAgICAgICAgICAgIDx2YWwtc2tlbGV0b24gW3Byb3BzXT1cInsgdHlwZTogJ3RleHQnLCB3aWR0aDogJzEyMHB4JywgaGVpZ2h0OiAnMTRweCcgfVwiPjwvdmFsLXNrZWxldG9uPlxuICAgICAgICAgICAgICAgIDx2YWwtc2tlbGV0b24gW3Byb3BzXT1cInsgdHlwZTogJ3BhcmFncmFwaCcsIGxpbmVzOiAyIH1cIj48L3ZhbC1za2VsZXRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfSBAZWxzZSBpZiAocHJvcHMuY29tbWVudHMgJiYgcHJvcHMuY29tbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiY29tbWVudHMtbGlzdFwiIFtjbGFzcy53aXRoLWRpdmlkZXJzXT1cInByb3BzLnNob3dEaXZpZGVyc1wiPlxuICAgICAgICAgIEBmb3IgKGNvbW1lbnQgb2YgcHJvcHMuY29tbWVudHM7IHRyYWNrIGNvbW1lbnQudG9rZW4pIHtcbiAgICAgICAgICAgIDx2YWwtY29tbWVudFxuICAgICAgICAgICAgICBbcHJvcHNdPVwiY29tbWVudFwiXG4gICAgICAgICAgICAgIChhdXRob3JDbGljayk9XCJhdXRob3JDbGljay5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAocmVhY3Rpb25DbGljayk9XCJyZWFjdGlvbkNsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChhY3Rpb25DbGljayk9XCJvbkNvbW1lbnRBY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChtZW51SXRlbUNsaWNrKT1cIm1lbnVJdGVtQ2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKGxvYWRNb3JlQ2xpY2spPVwiY29tbWVudExvYWRNb3JlLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChjb2xsYXBzZVRvZ2dsZSk9XCJjb2xsYXBzZVRvZ2dsZS5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgPjwvdmFsLWNvbW1lbnQ+XG5cbiAgICAgICAgICAgIEBpZiAocHJvcHMuc2hvd0RpdmlkZXJzICYmICEkbGFzdCkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tbWVudC1kaXZpZGVyXCI+PC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQGlmIChwcm9wcy5oYXNNb3JlICYmIHByb3BzLnBhZ2luYXRpb25Nb2RlICE9PSAnaW5maW5pdGUnKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9hZC1tb3JlLXNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgQGlmIChwcm9wcy5sb2FkaW5nTW9yZSkge1xuICAgICAgICAgICAgICAgIDxpb24tc3Bpbm5lciBuYW1lPVwiY2lyY3VsYXJcIiBbY29sb3JdPVwicHJvcHMuY29sb3IgfHwgJ3ByaW1hcnknXCI+PC9pb24tc3Bpbm5lcj5cbiAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cIm91dGxpbmVcIiBbY29sb3JdPVwicHJvcHMuY29sb3IgfHwgJ3ByaW1hcnknXCIgZXhwYW5kPVwiYmxvY2tcIiAoY2xpY2spPVwib25Mb2FkTW9yZSgpXCI+XG4gICAgICAgICAgICAgICAgICB7eyBkaXNwbGF5TG9hZE1vcmVMYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICBAaWYgKHByb3BzLnBhZ2luYXRpb25Nb2RlID09PSAnaW5maW5pdGUnKSB7XG4gICAgICAgICAgPGlvbi1pbmZpbml0ZS1zY3JvbGxcbiAgICAgICAgICAgIFt0aHJlc2hvbGRdPVwicHJvcHMuaW5maW5pdGVTY3JvbGxUaHJlc2hvbGQgfHwgJzEwMHB4J1wiXG4gICAgICAgICAgICBbcG9zaXRpb25dPVwicHJvcHMuaW5maW5pdGVTY3JvbGxQb3NpdGlvbiB8fCAnYm90dG9tJ1wiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXByb3BzLmhhc01vcmVcIlxuICAgICAgICAgICAgKGlvbkluZmluaXRlKT1cIm9uSW5maW5pdGVTY3JvbGwoJGV2ZW50KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlvbi1pbmZpbml0ZS1zY3JvbGwtY29udGVudFxuICAgICAgICAgICAgICBbbG9hZGluZ1NwaW5uZXJdPVwiJ2NyZXNjZW50J1wiXG4gICAgICAgICAgICAgIFtsb2FkaW5nVGV4dF09XCJkaXNwbGF5TG9hZE1vcmVMYWJlbFwiXG4gICAgICAgICAgICA+PC9pb24taW5maW5pdGUtc2Nyb2xsLWNvbnRlbnQ+XG4gICAgICAgICAgPC9pb24taW5maW5pdGUtc2Nyb2xsPlxuICAgICAgICB9XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlXCI+XG4gICAgICAgICAgPGlvbi1pY29uIFtuYW1lXT1cInByb3BzLmVtcHR5U3RhdGU/Lmljb24gfHwgJ2NoYXRidWJibGUtZWxsaXBzZXMtb3V0bGluZSdcIiBjbGFzcz1cImVtcHR5LWljb25cIj48L2lvbi1pY29uPlxuICAgICAgICAgIDxoNCBjbGFzcz1cImVtcHR5LXRpdGxlXCI+e3sgZ2V0RW1wdHlUaXRsZSgpIH19PC9oND5cbiAgICAgICAgICA8cCBjbGFzcz1cImVtcHR5LW1lc3NhZ2VcIj57eyBnZXRFbXB0eU1lc3NhZ2UoKSB9fTwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlVXJsczogWycuL2NvbW1lbnQtc2VjdGlvbi5jb21wb25lbnQuc2NzcyddLFxufSlcbi8qKlxuICogdmFsLWNvbW1lbnQtc2VjdGlvblxuICpcbiAqIEFuIG9yZ2FuaXNtIGNvbXBvbmVudCB0aGF0IHByb3ZpZGVzIGEgY29tcGxldGUgY29tbWVudCBzZWN0aW9uIHdpdGg6XG4gKiAtIEhlYWRlciB3aXRoIHRpdGxlIGFuZCBjb3VudFxuICogLSBTb3J0L2ZpbHRlciBvcHRpb25zXG4gKiAtIE5ldyBjb21tZW50IGlucHV0XG4gKiAtIENvbW1lbnRzIGxpc3Qgd2l0aCB2YWwtY29tbWVudFxuICogLSBMb2FkIG1vcmUgcGFnaW5hdGlvblxuICogLSBFbXB0eSBzdGF0ZVxuICpcbiAqIEBleGFtcGxlIEJhc2ljIHVzYWdlXG4gKiA8dmFsLWNvbW1lbnQtc2VjdGlvbiBbcHJvcHNdPVwie1xuICogICB0aXRsZTogJ0NvbW1lbnRzJyxcbiAqICAgY291bnQ6IDQyLFxuICogICBjb21tZW50czogY29tbWVudHNBcnJheSxcbiAqICAgc2hvd0lucHV0OiB0cnVlXG4gKiB9XCI+PC92YWwtY29tbWVudC1zZWN0aW9uPlxuICpcbiAqIEBleGFtcGxlIFdpdGggc29ydGluZ1xuICogPHZhbC1jb21tZW50LXNlY3Rpb24gW3Byb3BzXT1cIntcbiAqICAgdGl0bGU6ICdSZXZpZXdzJyxcbiAqICAgY291bnQ6IDEyOCxcbiAqICAgY29tbWVudHM6IHJldmlld3MsXG4gKiAgIHNvcnRPcHRpb25zOiBbXG4gKiAgICAgeyB0b2tlbjogJ25ld2VzdCcsIGxhYmVsOiAnTmV3ZXN0IGZpcnN0JyB9LFxuICogICAgIHsgdG9rZW46ICdvbGRlc3QnLCBsYWJlbDogJ09sZGVzdCBmaXJzdCcgfSxcbiAqICAgICB7IHRva2VuOiAncG9wdWxhcicsIGxhYmVsOiAnTW9zdCBwb3B1bGFyJyB9XG4gKiAgIF0sXG4gKiAgIHNlbGVjdGVkU29ydDogJ25ld2VzdCdcbiAqIH1cIiAoc29ydENoYW5nZSk9XCJvblNvcnQoJGV2ZW50KVwiPjwvdmFsLWNvbW1lbnQtc2VjdGlvbj5cbiAqXG4gKiBAaW5wdXQgcHJvcHM6IENvbW1lbnRTZWN0aW9uTWV0YWRhdGEgLSBDb25maWd1cmF0aW9uIGZvciB0aGUgc2VjdGlvblxuICogQG91dHB1dCBzb3J0Q2hhbmdlIC0gU29ydCBvcHRpb24gY2hhbmdlZFxuICogQG91dHB1dCBjb21tZW50U3VibWl0IC0gTmV3IGNvbW1lbnQgc3VibWl0dGVkXG4gKiBAb3V0cHV0IGxvYWRNb3JlIC0gTG9hZCBtb3JlIGNsaWNrZWRcbiAqIEBvdXRwdXQgYXV0aG9yQ2xpY2sgLSBDb21tZW50IGF1dGhvciBjbGlja2VkIChidWJibGVkIGZyb20gdmFsLWNvbW1lbnQpXG4gKiBAb3V0cHV0IHJlYWN0aW9uQ2xpY2sgLSBSZWFjdGlvbiBjbGlja2VkIChidWJibGVkKVxuICogQG91dHB1dCBhY3Rpb25DbGljayAtIEFjdGlvbiBjbGlja2VkIChidWJibGVkKVxuICogQG91dHB1dCBtZW51SXRlbUNsaWNrIC0gTWVudSBpdGVtIGNsaWNrZWQgKGJ1YmJsZWQpXG4gKiBAb3V0cHV0IGNvbW1lbnRMb2FkTW9yZSAtIExvYWQgbW9yZSByZXBsaWVzIGNsaWNrZWQgKGJ1YmJsZWQpXG4gKiBAb3V0cHV0IGNvbGxhcHNlVG9nZ2xlIC0gQ29tbWVudCBjb2xsYXBzZSB0b2dnbGVkIChidWJibGVkKVxuICovXG5leHBvcnQgY2xhc3MgQ29tbWVudFNlY3Rpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIGkxOG4gPSBpbmplY3QoSTE4blNlcnZpY2UpO1xuXG4gIEBJbnB1dCgpIHByb3BzOiBDb21tZW50U2VjdGlvbk1ldGFkYXRhO1xuXG4gIC8vIFNlY3Rpb24gZXZlbnRzXG4gIEBPdXRwdXQoKSBzb3J0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxDb21tZW50U29ydENoYW5nZUV2ZW50PigpO1xuICBAT3V0cHV0KCkgY29tbWVudFN1Ym1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8Q29tbWVudFN1Ym1pdEV2ZW50PigpO1xuICBAT3V0cHV0KCkgbG9hZE1vcmUgPSBuZXcgRXZlbnRFbWl0dGVyPENvbW1lbnRTZWN0aW9uTG9hZE1vcmVFdmVudD4oKTtcblxuICAvLyBCdWJibGVkIGV2ZW50cyBmcm9tIHZhbC1jb21tZW50XG4gIEBPdXRwdXQoKSBhdXRob3JDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8Q29tbWVudEF1dGhvckNsaWNrRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSByZWFjdGlvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxDb21tZW50UmVhY3Rpb25DbGlja0V2ZW50PigpO1xuICBAT3V0cHV0KCkgYWN0aW9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPENvbW1lbnRBY3Rpb25DbGlja0V2ZW50PigpO1xuICBAT3V0cHV0KCkgbWVudUl0ZW1DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8Q29tbWVudE1lbnVJdGVtQ2xpY2tFdmVudD4oKTtcbiAgQE91dHB1dCgpIGNvbW1lbnRMb2FkTW9yZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q29tbWVudExvYWRNb3JlRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBjb2xsYXBzZVRvZ2dsZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyB0b2tlbjogc3RyaW5nOyBjb2xsYXBzZWQ6IGJvb2xlYW4gfT4oKTtcblxuICAvLyBSZXBseSBzdGF0ZVxuICBAT3V0cHV0KCkgcmVwbHlTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBjb21tZW50VG9rZW46IHN0cmluZyB9PigpO1xuXG4gIG5ld0NvbW1lbnRUZXh0ID0gJyc7XG4gIHJlcGx5aW5nVG86IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIGRpc3BsYXlUaXRsZSA9ICcnO1xuICBkaXNwbGF5TG9hZE1vcmVMYWJlbCA9ICcnO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlRGlzcGxheVRleHRzKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZURpc3BsYXlUZXh0cygpOiB2b2lkIHtcbiAgICB0aGlzLmRpc3BsYXlUaXRsZSA9IHRoaXMucHJvcHMudGl0bGUgfHwgdGhpcy5pMThuLnQoJ2NvbW1lbnRzJyk7XG4gICAgdGhpcy5kaXNwbGF5TG9hZE1vcmVMYWJlbCA9IHRoaXMucHJvcHMubG9hZE1vcmVMYWJlbCB8fCB0aGlzLmkxOG4udCgnbG9hZE1vcmVDb21tZW50cycpO1xuICB9XG5cbiAgZ2V0U29ydEJ5TGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pMThuLnQoJ3NvcnRCeScpO1xuICB9XG5cbiAgZm9ybWF0Q291bnQoY291bnQ6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKGNvdW50ID49IDEwMDAwMDApIHtcbiAgICAgIHJldHVybiAoY291bnQgLyAxMDAwMDAwKS50b0ZpeGVkKDEpLnJlcGxhY2UoL1xcLjAkLywgJycpICsgJ00nO1xuICAgIH1cbiAgICBpZiAoY291bnQgPj0gMTAwMCkge1xuICAgICAgcmV0dXJuIChjb3VudCAvIDEwMDApLnRvRml4ZWQoMSkucmVwbGFjZSgvXFwuMCQvLCAnJykgKyAnSyc7XG4gICAgfVxuICAgIHJldHVybiBjb3VudC50b1N0cmluZygpO1xuICB9XG5cbiAgZ2V0U29ydE9wdGlvbkxhYmVsKG9wdGlvbjogQ29tbWVudFNvcnRPcHRpb24pOiBzdHJpbmcge1xuICAgIHJldHVybiBvcHRpb24ubGFiZWw7XG4gIH1cblxuICBnZXRJbnB1dFBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaW5wdXRDb25maWc/LnBsYWNlaG9sZGVyIHx8IHRoaXMuaTE4bi50KCd3cml0ZUNvbW1lbnQnKTtcbiAgfVxuXG4gIGdldFN1Ym1pdExhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaW5wdXRDb25maWc/LnN1Ym1pdExhYmVsIHx8IHRoaXMuaTE4bi50KCdwdWJsaXNoJyk7XG4gIH1cblxuICBnZXRFbXB0eVRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZW1wdHlTdGF0ZT8udGl0bGUgfHwgdGhpcy5pMThuLnQoJ25vQ29tbWVudHNZZXQnKTtcbiAgfVxuXG4gIGdldEVtcHR5TWVzc2FnZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmVtcHR5U3RhdGU/Lm1lc3NhZ2UgfHwgdGhpcy5pMThuLnQoJ2JlRmlyc3RUb0NvbW1lbnQnKTtcbiAgfVxuXG4gIGdldFNrZWxldG9uQXJyYXkoKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IGNvdW50ID0gdGhpcy5wcm9wcy5za2VsZXRvbkNvdW50IHx8IDM7XG4gICAgcmV0dXJuIEFycmF5KGNvdW50KVxuICAgICAgLmZpbGwoMClcbiAgICAgIC5tYXAoKF8sIGkpID0+IGkpO1xuICB9XG5cbiAgY2FuU3VibWl0KCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG1pbkxlbmd0aCA9IHRoaXMucHJvcHMuaW5wdXRDb25maWc/Lm1pbkxlbmd0aCB8fCAxO1xuICAgIHJldHVybiB0aGlzLm5ld0NvbW1lbnRUZXh0LnRyaW0oKS5sZW5ndGggPj0gbWluTGVuZ3RoICYmICF0aGlzLnByb3BzLmxvYWRpbmcgJiYgIXRoaXMucHJvcHMuaW5wdXRDb25maWc/LmRpc2FibGVkO1xuICB9XG5cbiAgaXNOZWFyTGltaXQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbWF4TGVuZ3RoID0gdGhpcy5wcm9wcy5pbnB1dENvbmZpZz8ubWF4TGVuZ3RoIHx8IDIwMDA7XG4gICAgcmV0dXJuIHRoaXMubmV3Q29tbWVudFRleHQubGVuZ3RoID4gbWF4TGVuZ3RoICogMC45O1xuICB9XG5cbiAgb25Tb3J0Q2hhbmdlKGV2ZW50OiBDdXN0b21FdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkVG9rZW4gPSBldmVudC5kZXRhaWwudmFsdWU7XG4gICAgY29uc3Qgb3B0aW9uID0gdGhpcy5wcm9wcy5zb3J0T3B0aW9ucz8uZmluZChvID0+IG8udG9rZW4gPT09IHNlbGVjdGVkVG9rZW4pO1xuXG4gICAgaWYgKG9wdGlvbikge1xuICAgICAgdGhpcy5zb3J0Q2hhbmdlLmVtaXQoe1xuICAgICAgICBvcHRpb24sXG4gICAgICAgIHByZXZpb3VzU29ydDogdGhpcy5wcm9wcy5zZWxlY3RlZFNvcnQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvblN1Ym1pdENvbW1lbnQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhblN1Ym1pdCgpKSByZXR1cm47XG5cbiAgICB0aGlzLmNvbW1lbnRTdWJtaXQuZW1pdCh7XG4gICAgICBjb250ZW50OiB0aGlzLm5ld0NvbW1lbnRUZXh0LnRyaW0oKSxcbiAgICAgIHBhcmVudFRva2VuOiB0aGlzLnJlcGx5aW5nVG8gfHwgdW5kZWZpbmVkLFxuICAgICAgc2VjdGlvblRva2VuOiB0aGlzLnByb3BzLnRva2VuLFxuICAgIH0pO1xuXG4gICAgdGhpcy5uZXdDb21tZW50VGV4dCA9ICcnO1xuICAgIHRoaXMucmVwbHlpbmdUbyA9IG51bGw7XG4gIH1cblxuICBvbkNvbW1lbnRBY3Rpb24oZXZlbnQ6IENvbW1lbnRBY3Rpb25DbGlja0V2ZW50KTogdm9pZCB7XG4gICAgLy8gQ2hlY2sgaWYgaXQncyBhIHJlcGx5IGFjdGlvblxuICAgIGlmIChldmVudC5hY3Rpb24udG9rZW4gPT09ICdyZXBseScpIHtcbiAgICAgIHRoaXMucmVwbHlpbmdUbyA9IGV2ZW50LmNvbW1lbnRUb2tlbjtcbiAgICAgIHRoaXMucmVwbHlTdGFydC5lbWl0KHsgY29tbWVudFRva2VuOiBldmVudC5jb21tZW50VG9rZW4gfSk7XG4gICAgfVxuXG4gICAgdGhpcy5hY3Rpb25DbGljay5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG9uTG9hZE1vcmUoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkTW9yZS5lbWl0KHtcbiAgICAgIHNlY3Rpb25Ub2tlbjogdGhpcy5wcm9wcy50b2tlbixcbiAgICAgIGN1cnJlbnRDb3VudDogdGhpcy5wcm9wcy5jb21tZW50cz8ubGVuZ3RoIHx8IDAsXG4gICAgfSk7XG4gIH1cblxuICBvbkluZmluaXRlU2Nyb2xsKGV2ZW50OiBDdXN0b21FdmVudCk6IHZvaWQge1xuICAgIHRoaXMubG9hZE1vcmUuZW1pdCh7XG4gICAgICBzZWN0aW9uVG9rZW46IHRoaXMucHJvcHMudG9rZW4sXG4gICAgICBjdXJyZW50Q291bnQ6IHRoaXMucHJvcHMuY29tbWVudHM/Lmxlbmd0aCB8fCAwLFxuICAgIH0pO1xuXG4gICAgLy8gVGhlIHBhcmVudCBjb21wb25lbnQgc2hvdWxkIGNhbGwgY29tcGxldGVJbmZpbml0ZVNjcm9sbCgpIHdoZW4gZG9uZSBsb2FkaW5nXG4gICAgLy8gU3RvcmUgcmVmZXJlbmNlIHRvIGNvbXBsZXRlIHRoZSBpbmZpbml0ZSBzY3JvbGxcbiAgICB0aGlzLmluZmluaXRlU2Nyb2xsRXZlbnQgPSBldmVudDtcbiAgfVxuXG4gIC8vIENhbGwgdGhpcyBtZXRob2QgZnJvbSBwYXJlbnQgYWZ0ZXIgbG9hZGluZyBtb3JlIGNvbW1lbnRzXG4gIGNvbXBsZXRlSW5maW5pdGVTY3JvbGwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5maW5pdGVTY3JvbGxFdmVudCkge1xuICAgICAgKHRoaXMuaW5maW5pdGVTY3JvbGxFdmVudC50YXJnZXQgYXMgSFRNTElvbkluZmluaXRlU2Nyb2xsRWxlbWVudCkuY29tcGxldGUoKTtcbiAgICAgIHRoaXMuaW5maW5pdGVTY3JvbGxFdmVudCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbmZpbml0ZVNjcm9sbEV2ZW50OiBDdXN0b21FdmVudCB8IG51bGwgPSBudWxsO1xuXG4gIC8vIE1ldGhvZCB0byBwcm9ncmFtbWF0aWNhbGx5IHN0YXJ0IGEgcmVwbHlcbiAgc3RhcnRSZXBseShjb21tZW50VG9rZW46IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucmVwbHlpbmdUbyA9IGNvbW1lbnRUb2tlbjtcbiAgfVxuXG4gIC8vIE1ldGhvZCB0byBjYW5jZWwgcmVwbHlcbiAgY2FuY2VsUmVwbHkoKTogdm9pZCB7XG4gICAgdGhpcy5yZXBseWluZ1RvID0gbnVsbDtcbiAgfVxufVxuIl19