@skyux/forms 11.0.0-alpha.6 → 11.0.0-alpha.7

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 (52) hide show
  1. package/documentation.json +2651 -2599
  2. package/esm2022/lib/modules/character-counter/character-counter-indicator.component.mjs +3 -3
  3. package/esm2022/lib/modules/character-counter/character-counter-screen-reader.pipe.mjs +3 -3
  4. package/esm2022/lib/modules/character-counter/character-counter.directive.mjs +3 -3
  5. package/esm2022/lib/modules/character-counter/character-counter.module.mjs +4 -4
  6. package/esm2022/lib/modules/checkbox/checkbox-group.component.mjs +3 -3
  7. package/esm2022/lib/modules/checkbox/checkbox-label-text-label.component.mjs +3 -3
  8. package/esm2022/lib/modules/checkbox/checkbox-label.component.mjs +3 -3
  9. package/esm2022/lib/modules/checkbox/checkbox.component.mjs +3 -3
  10. package/esm2022/lib/modules/checkbox/checkbox.module.mjs +4 -4
  11. package/esm2022/lib/modules/field-group/field-group.component.mjs +3 -3
  12. package/esm2022/lib/modules/field-group/field-group.module.mjs +4 -4
  13. package/esm2022/lib/modules/file-attachment/file-attachment-label.component.mjs +3 -3
  14. package/esm2022/lib/modules/file-attachment/file-attachment.component.mjs +8 -6
  15. package/esm2022/lib/modules/file-attachment/file-attachment.service.mjs +15 -5
  16. package/esm2022/lib/modules/file-attachment/file-attachments.module.mjs +4 -4
  17. package/esm2022/lib/modules/file-attachment/file-drop.component.mjs +8 -6
  18. package/esm2022/lib/modules/file-attachment/file-item.component.mjs +3 -3
  19. package/esm2022/lib/modules/file-attachment/file-item.service.mjs +3 -3
  20. package/esm2022/lib/modules/file-attachment/file-size.pipe.mjs +3 -3
  21. package/esm2022/lib/modules/form-error/form-error.component.mjs +3 -3
  22. package/esm2022/lib/modules/form-error/form-error.module.mjs +4 -4
  23. package/esm2022/lib/modules/form-error/form-errors.component.mjs +3 -3
  24. package/esm2022/lib/modules/form-error/form-errors.module.mjs +4 -4
  25. package/esm2022/lib/modules/input-box/input-box-adapter.service.mjs +3 -3
  26. package/esm2022/lib/modules/input-box/input-box-control.directive.mjs +3 -3
  27. package/esm2022/lib/modules/input-box/input-box-hint-text.pipe.mjs +3 -3
  28. package/esm2022/lib/modules/input-box/input-box-host.service.mjs +3 -3
  29. package/esm2022/lib/modules/input-box/input-box.component.mjs +3 -3
  30. package/esm2022/lib/modules/input-box/input-box.module.mjs +4 -4
  31. package/esm2022/lib/modules/radio/radio-group-id.service.mjs +3 -3
  32. package/esm2022/lib/modules/radio/radio-group.component.mjs +3 -3
  33. package/esm2022/lib/modules/radio/radio-label.component.mjs +3 -3
  34. package/esm2022/lib/modules/radio/radio.component.mjs +3 -3
  35. package/esm2022/lib/modules/radio/radio.module.mjs +4 -4
  36. package/esm2022/lib/modules/required-state/required-state.directive.mjs +3 -3
  37. package/esm2022/lib/modules/selection-box/selection-box-adapter.service.mjs +3 -3
  38. package/esm2022/lib/modules/selection-box/selection-box-description.component.mjs +3 -3
  39. package/esm2022/lib/modules/selection-box/selection-box-grid.component.mjs +3 -3
  40. package/esm2022/lib/modules/selection-box/selection-box-header.component.mjs +3 -3
  41. package/esm2022/lib/modules/selection-box/selection-box.component.mjs +3 -3
  42. package/esm2022/lib/modules/selection-box/selection-box.module.mjs +4 -4
  43. package/esm2022/lib/modules/shared/form-field-label-text-required.service.mjs +3 -3
  44. package/esm2022/lib/modules/shared/sky-forms-resources.module.mjs +7 -7
  45. package/esm2022/lib/modules/toggle-switch/toggle-switch-label.component.mjs +3 -3
  46. package/esm2022/lib/modules/toggle-switch/toggle-switch.component.mjs +3 -3
  47. package/esm2022/lib/modules/toggle-switch/toggle-switch.module.mjs +4 -4
  48. package/fesm2022/skyux-forms.mjs +170 -156
  49. package/fesm2022/skyux-forms.mjs.map +1 -1
  50. package/lib/modules/file-attachment/file-attachment.component.d.ts +6 -1
  51. package/lib/modules/file-attachment/file-drop.component.d.ts +6 -1
  52. package/package.json +14 -14
@@ -402,18 +402,18 @@ export class SkyFileAttachmentComponent {
402
402
  // istanbul ignore next
403
403
  // eslint-disable-next-line @typescript-eslint/no-empty-function
404
404
  #onTouched;
405
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: SkyFileAttachmentComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.SkyFileAttachmentService }, { token: i2.SkyFileItemService }, { token: i3.NgControl, optional: true, self: true }, { token: i4.SkyThemeService, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
406
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.1.1", type: SkyFileAttachmentComponent, selector: "sky-file-attachment", inputs: { acceptedTypes: "acceptedTypes", disabled: ["disabled", "disabled", booleanAttribute], helpPopoverContent: "helpPopoverContent", helpPopoverTitle: "helpPopoverTitle", helpKey: "helpKey", labelText: "labelText", labelHidden: ["labelHidden", "labelHidden", booleanAttribute], hintText: "hintText", maxFileSize: "maxFileSize", minFileSize: "minFileSize", stacked: ["stacked", "stacked", booleanAttribute], validateFn: "validateFn", required: "required" }, outputs: { fileChange: "fileChange", fileClick: "fileClick" }, host: { properties: { "class.sky-margin-stacked-lg": "this.stacked", "style.display": "this.display" } }, providers: [
405
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: SkyFileAttachmentComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.SkyFileAttachmentService }, { token: i2.SkyFileItemService }, { token: i3.NgControl, optional: true, self: true }, { token: i4.SkyThemeService, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
406
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.1.2", type: SkyFileAttachmentComponent, selector: "sky-file-attachment", inputs: { acceptedTypes: "acceptedTypes", acceptedTypesErrorMessage: "acceptedTypesErrorMessage", disabled: ["disabled", "disabled", booleanAttribute], helpPopoverContent: "helpPopoverContent", helpPopoverTitle: "helpPopoverTitle", helpKey: "helpKey", labelText: "labelText", labelHidden: ["labelHidden", "labelHidden", booleanAttribute], hintText: "hintText", maxFileSize: "maxFileSize", minFileSize: "minFileSize", stacked: ["stacked", "stacked", booleanAttribute], validateFn: "validateFn", required: "required" }, outputs: { fileChange: "fileChange", fileClick: "fileClick" }, host: { properties: { "class.sky-margin-stacked-lg": "this.stacked", "style.display": "this.display" } }, providers: [
407
407
  SkyFileAttachmentService,
408
408
  { provide: SKY_FORM_ERRORS_ENABLED, useValue: true },
409
- ], queries: [{ propertyName: "labelComponents", predicate: SkyFileAttachmentLabelComponent }], viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["fileInput"], descendants: true }], ngImport: i0, template: "<div class=\"sky-file-attachment-wrapper\">\n <div\n class=\"sky-file-attachment-label-wrapper\"\n [attr.id]=\"labelElementId\"\n [ngClass]=\"{\n 'sky-control-label-required': !labelText && required && hasLabelComponent\n }\"\n >\n <ng-container *ngIf=\"labelText; else labelContent\">\n <span\n *ngIf=\"!labelHidden\"\n class=\"sky-control-label sky-margin-inline-xs\"\n [ngClass]=\"{\n 'sky-control-label-required': required\n }\"\n >{{ labelText }}</span\n ><sky-help-inline\n *ngIf=\"helpPopoverContent || helpKey\"\n [labelText]=\"labelText\"\n [helpKey]=\"helpKey\"\n [popoverTitle]=\"helpPopoverTitle\"\n [popoverContent]=\"helpPopoverContent\"\n />\n </ng-container>\n <span\n class=\"sky-screen-reader-only\"\n *ngIf=\"required && (hasLabelComponent || labelText)\"\n >{{ 'skyux_file_attachment_required' | skyLibResources }}</span\n >\n </div>\n <div\n class=\"sky-file-attachment-upload sky-file-attachment sky-file-attachment-target\"\n [ngClass]=\"{\n 'sky-file-attachment-accept': acceptedOver,\n 'sky-file-attachment-reject': rejectedOver\n }\"\n (dragenter)=\"fileDragEnter($event)\"\n (dragover)=\"fileDragOver($event)\"\n (dragleave)=\"fileDragLeave($event)\"\n (drop)=\"fileDrop($event)\"\n >\n <div\n aria-hidden=\"true\"\n class=\"sky-screen-reader-only\"\n role=\"tooltip\"\n [attr.id]=\"fileDropDescriptionElementId\"\n >\n {{ 'skyux_file_attachment_file_upload_drag_or_click' | skyLibResources }}\n </div>\n <input\n hidden\n tabindex=\"-1\"\n type=\"file\"\n [attr.accept]=\"acceptedTypes || null\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n (change)=\"fileChangeEvent($event)\"\n #fileInput\n />\n <ng-container *ngIf=\"showFileAttachmentButton\">\n <button\n *ngIf=\"showFileAttachmentButton\"\n class=\"sky-file-attachment-btn sky-btn sky-btn-default\"\n type=\"button\"\n skyId\n [attr.aria-describedby]=\"\n (hintText ? hintTextEl.id + ' ' : '') + fileDropDescriptionElementId\n \"\n [attr.aria-label]=\"\n value\n ? ('skyux_file_attachment_button_label_replace_file_label'\n | skyLibResources: fileName)\n : ('skyux_file_attachment_button_label_choose_file_label'\n | skyLibResources)\n \"\n [attr.aria-labelledby]=\"\n attachButton.id +\n ' ' +\n (labelText\n ? labelElementId\n : hasLabelComponent\n ? labelComponents?.get(0)?.labelContentId?.id\n : undefined)\n \"\n [disabled]=\"disabled\"\n (click)=\"onDropClicked()\"\n #attachButton=\"skyId\"\n >\n <sky-icon icon=\"folder-open-o\" />\n {{\n value\n ? ('skyux_file_attachment_button_label_replace_file'\n | skyLibResources)\n : ('skyux_file_attachment_button_label_choose_file'\n | skyLibResources)\n }}\n </button>\n </ng-container>\n <sky-icon\n *ngIf=\"value && !isImage && currentThemeName === 'modern'\"\n class=\"sky-file-attachment-icon sky-deemphasized\"\n icon=\"file-o\"\n size=\"2x\"\n />\n <span\n *ngIf=\"value || currentThemeName === 'default'\"\n class=\"sky-file-attachment-name\"\n >\n <a\n *ngIf=\"value; else noFile\"\n [attr.title]=\"fileName\"\n (click)=\"emitClick()\"\n >\n {{ truncatedFileName }}\n </a>\n </span>\n <ng-template #noFile>\n <span class=\"sky-file-attachment-none sky-deemphasized\">\n {{ 'skyux_file_attachment_label_no_file_chosen' | skyLibResources }}\n </span>\n </ng-template>\n <button\n *ngIf=\"value\"\n class=\"sky-btn sky-btn-borderless sky-file-attachment-delete\"\n skyId\n type=\"button\"\n [attr.aria-label]=\"\n 'skyux_file_attachment_file_item_remove' | skyLibResources: fileName\n \"\n [attr.aria-labelledby]=\"\n deleteButton.id +\n ' ' +\n (hasLabelComponent\n ? labelComponents?.get(0)?.labelContentId?.id\n : undefined)\n \"\n [disabled]=\"disabled\"\n [skyThemeClass]=\"{\n 'sky-btn-icon-borderless': 'modern'\n }\"\n (click)=\"deleteFileAttachment()\"\n #deleteButton=\"skyId\"\n >\n <sky-icon icon=\"trash-o\" size=\"md\" />\n </button>\n </div>\n\n <img\n *ngIf=\"value && isImage\"\n class=\"sky-file-attachment-preview-img\"\n [alt]=\"\n 'skyux_file_attachment_file_upload_image_preview_alt_text'\n | skyLibResources\n \"\n [src]=\"value.url\"\n />\n</div>\n<div skyId #hintTextEl=\"skyId\">\n <div\n *ngIf=\"hintText\"\n class=\"sky-font-deemphasized sky-file-attachment-hint-text\"\n >\n {{ hintText }}\n </div>\n</div>\n\n<sky-form-errors\n *ngIf=\"labelText && (ngControl?.control?.errors || fileErrorValidation)\"\n [id]=\"errorId\"\n [errors]=\"\n ngControl?.errors !== null ? ngControl?.errors : fileErrorValidation\n \"\n [labelText]=\"labelText\"\n [showErrors]=\"ngControl?.touched || ngControl?.dirty\"\n>\n <ng-content select=\"sky-form-error\" />\n <sky-form-error\n *ngIf=\"fileErrorName === 'fileType'\"\n [errorName]=\"'fileType'\"\n [errorText]=\"\n 'skyux_file_attachment_file_type_error_label_text'\n | skyLibResources: fileErrorParam\n \"\n />\n <sky-form-error\n *ngIf=\"fileErrorName === 'maxFileSize'\"\n [errorName]=\"'maxFileSize'\"\n [errorText]=\"\n 'skyux_file_attachment_max_file_size_error_label_text'\n | skyLibResources: (fileErrorParam | skyFileSize)\n \"\n />\n <sky-form-error\n *ngIf=\"fileErrorName === 'minFileSize'\"\n [errorName]=\"'minFileSize'\"\n [errorText]=\"\n 'skyux_file_attachment_min_file_size_error_label_text'\n | skyLibResources: (fileErrorParam | skyFileSize)\n \"\n />\n</sky-form-errors>\n\n<ng-template #labelContent>\n <ng-content select=\"sky-file-attachment-label\" />\n</ng-template>\n", styles: [":host.sky-margin-stacked-lg{display:block}.sky-file-attachment-wrapper{display:inline-block}.sky-file-attachment-upload{padding-right:8px;display:block;border:1px solid transparent}.sky-file-attachment-accept{border-color:#72bf44;border-style:dashed;border-width:1px;border-radius:5px;color:#212327}.sky-file-attachment-reject{border-color:#ef4044;border-style:dashed;border-width:1px;border-radius:5px;color:#212327}:host(.ng-invalid.ng-dirty) .sky-file-attachment-btn{box-shadow:0 0 8px #ef404499;border:1px solid #ef4044}.sky-file-attachment-name{padding:0 5px}.sky-file-attachment-name a{cursor:pointer}.sky-file-attachment-delete{border:none;color:#cdcfd2;cursor:pointer;padding:0}.sky-file-attachment-delete:hover{color:#979ba2;transition:color .15s}.sky-file-attachment-preview-img{max-width:25%;height:auto;box-shadow:0 0 5px #666;margin:10px}.sky-file-attachment-hint-text{margin-top:var(--sky-margin-stacked-xs)}:host-context(.sky-theme-modern) .sky-control-label{color:#686c73;font-size:13px}:host-context(.sky-theme-modern) .sky-file-attachment-none{font-size:13px}:host-context(.sky-theme-modern) .sky-file-attachment-wrapper{display:flex;flex-wrap:wrap}:host-context(.sky-theme-modern) .sky-file-attachment-wrapper .sky-file-attachment-label-wrapper{width:100%}:host-context(.sky-theme-modern) .sky-file-attachment-wrapper .sky-file-attachment-preview-img{border-top:1px solid #cdcfd2;border-bottom:1px solid #cdcfd2;border-left:1px solid #cdcfd2;border-right:1px solid #cdcfd2;box-shadow:none;margin:0 10px 0 0;width:100px;flex:0;order:1}:host-context(.sky-theme-modern) .sky-file-attachment-wrapper .sky-file-attachment-btn{margin:0 10px 0 0}:host-context(.sky-theme-modern) .sky-file-attachment-wrapper .sky-file-attachment-icon{margin:5px 10px 5px 5px}:host-context(.sky-theme-modern) .sky-file-attachment-wrapper .sky-file-attachment-upload{flex:1;order:2;display:flex;align-items:flex-start}:host-context(.sky-theme-modern) .sky-file-attachment-wrapper .sky-file-attachment-upload .sky-file-attachment-name{margin:10px 10px 0 0;padding:0}:host-context(.sky-theme-modern) .sky-file-attachment-wrapper .sky-file-attachment-delete{width:40px;height:40px;color:#686c73!important}.sky-theme-modern .sky-control-label{color:#686c73;font-size:13px}.sky-theme-modern .sky-file-attachment-none{font-size:13px}.sky-theme-modern .sky-file-attachment-wrapper{display:flex;flex-wrap:wrap}.sky-theme-modern .sky-file-attachment-wrapper .sky-file-attachment-label-wrapper{width:100%}.sky-theme-modern .sky-file-attachment-wrapper .sky-file-attachment-preview-img{border-top:1px solid #cdcfd2;border-bottom:1px solid #cdcfd2;border-left:1px solid #cdcfd2;border-right:1px solid #cdcfd2;box-shadow:none;margin:0 10px 0 0;width:100px;flex:0;order:1}.sky-theme-modern .sky-file-attachment-wrapper .sky-file-attachment-btn{margin:0 10px 0 0}.sky-theme-modern .sky-file-attachment-wrapper .sky-file-attachment-icon{margin:5px 10px 5px 5px}.sky-theme-modern .sky-file-attachment-wrapper .sky-file-attachment-upload{flex:1;order:2;display:flex;align-items:flex-start}.sky-theme-modern .sky-file-attachment-wrapper .sky-file-attachment-upload .sky-file-attachment-name{margin:10px 10px 0 0;padding:0}.sky-theme-modern .sky-file-attachment-wrapper .sky-file-attachment-delete{width:40px;height:40px;color:#686c73!important}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.SkyFormErrorComponent, selector: "sky-form-error", inputs: ["errorName", "errorText"] }, { kind: "component", type: i7.SkyFormErrorsComponent, selector: "sky-form-errors", inputs: ["errors", "labelText", "showErrors"] }, { kind: "component", type: i8.λ1, selector: "sky-icon", inputs: ["icon", "iconName", "iconType", "size", "fixedWidth", "variant"] }, { kind: "directive", type: i9.λ2, selector: "[skyId]", exportAs: ["skyId"] }, { kind: "directive", type: i4.λ2, selector: "[skyThemeClass]", inputs: ["class", "skyThemeClass"] }, { kind: "component", type: i10.λ1, selector: "sky-help-inline", inputs: ["ariaControls", "ariaExpanded", "ariaLabel", "helpKey", "labelledBy", "labelText", "popoverContent", "popoverTitle"], outputs: ["actionClick"] }, { kind: "pipe", type: i11.SkyLibResourcesPipe, name: "skyLibResources" }, { kind: "pipe", type: i12.SkyFileSizePipe, name: "skyFileSize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
409
+ ], queries: [{ propertyName: "labelComponents", predicate: SkyFileAttachmentLabelComponent }], viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["fileInput"], descendants: true }], ngImport: i0, template: "<div class=\"sky-file-attachment-wrapper\">\n <div\n class=\"sky-file-attachment-label-wrapper\"\n [attr.id]=\"labelElementId\"\n [ngClass]=\"{\n 'sky-control-label-required': !labelText && required && hasLabelComponent\n }\"\n >\n <ng-container *ngIf=\"labelText; else labelContent\">\n <span\n *ngIf=\"!labelHidden\"\n class=\"sky-control-label sky-margin-inline-xs\"\n [ngClass]=\"{\n 'sky-control-label-required': required\n }\"\n >{{ labelText }}</span\n ><sky-help-inline\n *ngIf=\"helpPopoverContent || helpKey\"\n [labelText]=\"labelText\"\n [helpKey]=\"helpKey\"\n [popoverTitle]=\"helpPopoverTitle\"\n [popoverContent]=\"helpPopoverContent\"\n />\n </ng-container>\n <span\n class=\"sky-screen-reader-only\"\n *ngIf=\"required && (hasLabelComponent || labelText)\"\n >{{ 'skyux_file_attachment_required' | skyLibResources }}</span\n >\n </div>\n <div\n class=\"sky-file-attachment-upload sky-file-attachment sky-file-attachment-target\"\n [ngClass]=\"{\n 'sky-file-attachment-accept': acceptedOver,\n 'sky-file-attachment-reject': rejectedOver\n }\"\n (dragenter)=\"fileDragEnter($event)\"\n (dragover)=\"fileDragOver($event)\"\n (dragleave)=\"fileDragLeave($event)\"\n (drop)=\"fileDrop($event)\"\n >\n <div\n aria-hidden=\"true\"\n class=\"sky-screen-reader-only\"\n role=\"tooltip\"\n [attr.id]=\"fileDropDescriptionElementId\"\n >\n {{ 'skyux_file_attachment_file_upload_drag_or_click' | skyLibResources }}\n </div>\n <input\n hidden\n tabindex=\"-1\"\n type=\"file\"\n [attr.accept]=\"acceptedTypes || null\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n (change)=\"fileChangeEvent($event)\"\n #fileInput\n />\n <ng-container *ngIf=\"showFileAttachmentButton\">\n <button\n *ngIf=\"showFileAttachmentButton\"\n class=\"sky-file-attachment-btn sky-btn sky-btn-default\"\n type=\"button\"\n skyId\n [attr.aria-describedby]=\"\n (hintText ? hintTextEl.id + ' ' : '') + fileDropDescriptionElementId\n \"\n [attr.aria-label]=\"\n value\n ? ('skyux_file_attachment_button_label_replace_file_label'\n | skyLibResources: fileName)\n : ('skyux_file_attachment_button_label_choose_file_label'\n | skyLibResources)\n \"\n [attr.aria-labelledby]=\"\n attachButton.id +\n ' ' +\n (labelText\n ? labelElementId\n : hasLabelComponent\n ? labelComponents?.get(0)?.labelContentId?.id\n : undefined)\n \"\n [disabled]=\"disabled\"\n (click)=\"onDropClicked()\"\n #attachButton=\"skyId\"\n >\n <sky-icon icon=\"folder-open-o\" />\n {{\n value\n ? ('skyux_file_attachment_button_label_replace_file'\n | skyLibResources)\n : ('skyux_file_attachment_button_label_choose_file'\n | skyLibResources)\n }}\n </button>\n </ng-container>\n <sky-icon\n *ngIf=\"value && !isImage && currentThemeName === 'modern'\"\n class=\"sky-file-attachment-icon sky-deemphasized\"\n icon=\"file-o\"\n size=\"2x\"\n />\n <span\n *ngIf=\"value || currentThemeName === 'default'\"\n class=\"sky-file-attachment-name\"\n >\n <a\n *ngIf=\"value; else noFile\"\n [attr.title]=\"fileName\"\n (click)=\"emitClick()\"\n >\n {{ truncatedFileName }}\n </a>\n </span>\n <ng-template #noFile>\n <span class=\"sky-file-attachment-none sky-deemphasized\">\n {{ 'skyux_file_attachment_label_no_file_chosen' | skyLibResources }}\n </span>\n </ng-template>\n <button\n *ngIf=\"value\"\n class=\"sky-btn sky-btn-borderless sky-file-attachment-delete\"\n skyId\n type=\"button\"\n [attr.aria-label]=\"\n 'skyux_file_attachment_file_item_remove' | skyLibResources: fileName\n \"\n [attr.aria-labelledby]=\"\n deleteButton.id +\n ' ' +\n (hasLabelComponent\n ? labelComponents?.get(0)?.labelContentId?.id\n : undefined)\n \"\n [disabled]=\"disabled\"\n [skyThemeClass]=\"{\n 'sky-btn-icon-borderless': 'modern'\n }\"\n (click)=\"deleteFileAttachment()\"\n #deleteButton=\"skyId\"\n >\n <sky-icon icon=\"trash-o\" size=\"md\" />\n </button>\n </div>\n\n <img\n *ngIf=\"value && isImage\"\n class=\"sky-file-attachment-preview-img\"\n [alt]=\"\n 'skyux_file_attachment_file_upload_image_preview_alt_text'\n | skyLibResources\n \"\n [src]=\"value.url\"\n />\n</div>\n<div skyId #hintTextEl=\"skyId\">\n <div\n *ngIf=\"hintText\"\n class=\"sky-font-deemphasized sky-file-attachment-hint-text\"\n >\n {{ hintText }}\n </div>\n</div>\n\n<sky-form-errors\n *ngIf=\"labelText && (ngControl?.control?.errors || fileErrorValidation)\"\n [id]=\"errorId\"\n [errors]=\"\n ngControl?.errors !== null ? ngControl?.errors : fileErrorValidation\n \"\n [labelText]=\"labelText\"\n [showErrors]=\"ngControl?.touched || ngControl?.dirty\"\n>\n <ng-content select=\"sky-form-error\" />\n <sky-form-error\n *ngIf=\"fileErrorName === 'fileType'\"\n [errorName]=\"'fileType'\"\n [errorText]=\"\n acceptedTypesErrorMessage ??\n 'skyux_file_attachment_file_type_error_label_text'\n | skyLibResources: fileErrorParam\n \"\n />\n <sky-form-error\n *ngIf=\"fileErrorName === 'maxFileSize'\"\n [errorName]=\"'maxFileSize'\"\n [errorText]=\"\n 'skyux_file_attachment_max_file_size_error_label_text'\n | skyLibResources: (fileErrorParam | skyFileSize)\n \"\n />\n <sky-form-error\n *ngIf=\"fileErrorName === 'minFileSize'\"\n [errorName]=\"'minFileSize'\"\n [errorText]=\"\n 'skyux_file_attachment_min_file_size_error_label_text'\n | skyLibResources: (fileErrorParam | skyFileSize)\n \"\n />\n</sky-form-errors>\n\n<ng-template #labelContent>\n <ng-content select=\"sky-file-attachment-label\" />\n</ng-template>\n", styles: [":host.sky-margin-stacked-lg{display:block}.sky-file-attachment-wrapper{display:inline-block}.sky-file-attachment-upload{padding-right:8px;display:block;border:1px solid transparent}.sky-file-attachment-accept{border-color:#72bf44;border-style:dashed;border-width:1px;border-radius:5px;color:#212327}.sky-file-attachment-reject{border-color:#ef4044;border-style:dashed;border-width:1px;border-radius:5px;color:#212327}:host(.ng-invalid.ng-dirty) .sky-file-attachment-btn{box-shadow:0 0 8px #ef404499;border:1px solid #ef4044}.sky-file-attachment-name{padding:0 5px}.sky-file-attachment-name a{cursor:pointer}.sky-file-attachment-delete{border:none;color:#cdcfd2;cursor:pointer;padding:0}.sky-file-attachment-delete:hover{color:#979ba2;transition:color .15s}.sky-file-attachment-preview-img{max-width:25%;height:auto;box-shadow:0 0 5px #666;margin:10px}.sky-file-attachment-hint-text{margin-top:var(--sky-margin-stacked-xs)}:host-context(.sky-theme-modern) .sky-control-label{color:#686c73;font-size:13px}:host-context(.sky-theme-modern) .sky-file-attachment-none{font-size:13px}:host-context(.sky-theme-modern) .sky-file-attachment-wrapper{display:flex;flex-wrap:wrap}:host-context(.sky-theme-modern) .sky-file-attachment-wrapper .sky-file-attachment-label-wrapper{width:100%}:host-context(.sky-theme-modern) .sky-file-attachment-wrapper .sky-file-attachment-preview-img{border-top:1px solid #cdcfd2;border-bottom:1px solid #cdcfd2;border-left:1px solid #cdcfd2;border-right:1px solid #cdcfd2;box-shadow:none;margin:0 10px 0 0;width:100px;flex:0;order:1}:host-context(.sky-theme-modern) .sky-file-attachment-wrapper .sky-file-attachment-btn{margin:0 10px 0 0}:host-context(.sky-theme-modern) .sky-file-attachment-wrapper .sky-file-attachment-icon{margin:5px 10px 5px 5px}:host-context(.sky-theme-modern) .sky-file-attachment-wrapper .sky-file-attachment-upload{flex:1;order:2;display:flex;align-items:flex-start}:host-context(.sky-theme-modern) .sky-file-attachment-wrapper .sky-file-attachment-upload .sky-file-attachment-name{margin:10px 10px 0 0;padding:0}:host-context(.sky-theme-modern) .sky-file-attachment-wrapper .sky-file-attachment-delete{width:40px;height:40px;color:#686c73!important}.sky-theme-modern .sky-control-label{color:#686c73;font-size:13px}.sky-theme-modern .sky-file-attachment-none{font-size:13px}.sky-theme-modern .sky-file-attachment-wrapper{display:flex;flex-wrap:wrap}.sky-theme-modern .sky-file-attachment-wrapper .sky-file-attachment-label-wrapper{width:100%}.sky-theme-modern .sky-file-attachment-wrapper .sky-file-attachment-preview-img{border-top:1px solid #cdcfd2;border-bottom:1px solid #cdcfd2;border-left:1px solid #cdcfd2;border-right:1px solid #cdcfd2;box-shadow:none;margin:0 10px 0 0;width:100px;flex:0;order:1}.sky-theme-modern .sky-file-attachment-wrapper .sky-file-attachment-btn{margin:0 10px 0 0}.sky-theme-modern .sky-file-attachment-wrapper .sky-file-attachment-icon{margin:5px 10px 5px 5px}.sky-theme-modern .sky-file-attachment-wrapper .sky-file-attachment-upload{flex:1;order:2;display:flex;align-items:flex-start}.sky-theme-modern .sky-file-attachment-wrapper .sky-file-attachment-upload .sky-file-attachment-name{margin:10px 10px 0 0;padding:0}.sky-theme-modern .sky-file-attachment-wrapper .sky-file-attachment-delete{width:40px;height:40px;color:#686c73!important}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.SkyFormErrorComponent, selector: "sky-form-error", inputs: ["errorName", "errorText"] }, { kind: "component", type: i7.SkyFormErrorsComponent, selector: "sky-form-errors", inputs: ["errors", "labelText", "showErrors"] }, { kind: "component", type: i8.λ1, selector: "sky-icon", inputs: ["icon", "iconName", "iconType", "size", "fixedWidth", "variant"] }, { kind: "directive", type: i9.λ2, selector: "[skyId]", exportAs: ["skyId"] }, { kind: "directive", type: i4.λ2, selector: "[skyThemeClass]", inputs: ["class", "skyThemeClass"] }, { kind: "component", type: i10.λ1, selector: "sky-help-inline", inputs: ["ariaControls", "ariaExpanded", "ariaLabel", "helpKey", "labelledBy", "labelText", "popoverContent", "popoverTitle"], outputs: ["actionClick"] }, { kind: "pipe", type: i11.SkyLibResourcesPipe, name: "skyLibResources" }, { kind: "pipe", type: i12.SkyFileSizePipe, name: "skyFileSize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
410
410
  }
411
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: SkyFileAttachmentComponent, decorators: [{
411
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: SkyFileAttachmentComponent, decorators: [{
412
412
  type: Component,
413
413
  args: [{ selector: 'sky-file-attachment', providers: [
414
414
  SkyFileAttachmentService,
415
415
  { provide: SKY_FORM_ERRORS_ENABLED, useValue: true },
416
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"sky-file-attachment-wrapper\">\n <div\n class=\"sky-file-attachment-label-wrapper\"\n [attr.id]=\"labelElementId\"\n [ngClass]=\"{\n 'sky-control-label-required': !labelText && required && hasLabelComponent\n }\"\n >\n <ng-container *ngIf=\"labelText; else labelContent\">\n <span\n *ngIf=\"!labelHidden\"\n class=\"sky-control-label sky-margin-inline-xs\"\n [ngClass]=\"{\n 'sky-control-label-required': required\n }\"\n >{{ labelText }}</span\n ><sky-help-inline\n *ngIf=\"helpPopoverContent || helpKey\"\n [labelText]=\"labelText\"\n [helpKey]=\"helpKey\"\n [popoverTitle]=\"helpPopoverTitle\"\n [popoverContent]=\"helpPopoverContent\"\n />\n </ng-container>\n <span\n class=\"sky-screen-reader-only\"\n *ngIf=\"required && (hasLabelComponent || labelText)\"\n >{{ 'skyux_file_attachment_required' | skyLibResources }}</span\n >\n </div>\n <div\n class=\"sky-file-attachment-upload sky-file-attachment sky-file-attachment-target\"\n [ngClass]=\"{\n 'sky-file-attachment-accept': acceptedOver,\n 'sky-file-attachment-reject': rejectedOver\n }\"\n (dragenter)=\"fileDragEnter($event)\"\n (dragover)=\"fileDragOver($event)\"\n (dragleave)=\"fileDragLeave($event)\"\n (drop)=\"fileDrop($event)\"\n >\n <div\n aria-hidden=\"true\"\n class=\"sky-screen-reader-only\"\n role=\"tooltip\"\n [attr.id]=\"fileDropDescriptionElementId\"\n >\n {{ 'skyux_file_attachment_file_upload_drag_or_click' | skyLibResources }}\n </div>\n <input\n hidden\n tabindex=\"-1\"\n type=\"file\"\n [attr.accept]=\"acceptedTypes || null\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n (change)=\"fileChangeEvent($event)\"\n #fileInput\n />\n <ng-container *ngIf=\"showFileAttachmentButton\">\n <button\n *ngIf=\"showFileAttachmentButton\"\n class=\"sky-file-attachment-btn sky-btn sky-btn-default\"\n type=\"button\"\n skyId\n [attr.aria-describedby]=\"\n (hintText ? hintTextEl.id + ' ' : '') + fileDropDescriptionElementId\n \"\n [attr.aria-label]=\"\n value\n ? ('skyux_file_attachment_button_label_replace_file_label'\n | skyLibResources: fileName)\n : ('skyux_file_attachment_button_label_choose_file_label'\n | skyLibResources)\n \"\n [attr.aria-labelledby]=\"\n attachButton.id +\n ' ' +\n (labelText\n ? labelElementId\n : hasLabelComponent\n ? labelComponents?.get(0)?.labelContentId?.id\n : undefined)\n \"\n [disabled]=\"disabled\"\n (click)=\"onDropClicked()\"\n #attachButton=\"skyId\"\n >\n <sky-icon icon=\"folder-open-o\" />\n {{\n value\n ? ('skyux_file_attachment_button_label_replace_file'\n | skyLibResources)\n : ('skyux_file_attachment_button_label_choose_file'\n | skyLibResources)\n }}\n </button>\n </ng-container>\n <sky-icon\n *ngIf=\"value && !isImage && currentThemeName === 'modern'\"\n class=\"sky-file-attachment-icon sky-deemphasized\"\n icon=\"file-o\"\n size=\"2x\"\n />\n <span\n *ngIf=\"value || currentThemeName === 'default'\"\n class=\"sky-file-attachment-name\"\n >\n <a\n *ngIf=\"value; else noFile\"\n [attr.title]=\"fileName\"\n (click)=\"emitClick()\"\n >\n {{ truncatedFileName }}\n </a>\n </span>\n <ng-template #noFile>\n <span class=\"sky-file-attachment-none sky-deemphasized\">\n {{ 'skyux_file_attachment_label_no_file_chosen' | skyLibResources }}\n </span>\n </ng-template>\n <button\n *ngIf=\"value\"\n class=\"sky-btn sky-btn-borderless sky-file-attachment-delete\"\n skyId\n type=\"button\"\n [attr.aria-label]=\"\n 'skyux_file_attachment_file_item_remove' | skyLibResources: fileName\n \"\n [attr.aria-labelledby]=\"\n deleteButton.id +\n ' ' +\n (hasLabelComponent\n ? labelComponents?.get(0)?.labelContentId?.id\n : undefined)\n \"\n [disabled]=\"disabled\"\n [skyThemeClass]=\"{\n 'sky-btn-icon-borderless': 'modern'\n }\"\n (click)=\"deleteFileAttachment()\"\n #deleteButton=\"skyId\"\n >\n <sky-icon icon=\"trash-o\" size=\"md\" />\n </button>\n </div>\n\n <img\n *ngIf=\"value && isImage\"\n class=\"sky-file-attachment-preview-img\"\n [alt]=\"\n 'skyux_file_attachment_file_upload_image_preview_alt_text'\n | skyLibResources\n \"\n [src]=\"value.url\"\n />\n</div>\n<div skyId #hintTextEl=\"skyId\">\n <div\n *ngIf=\"hintText\"\n class=\"sky-font-deemphasized sky-file-attachment-hint-text\"\n >\n {{ hintText }}\n </div>\n</div>\n\n<sky-form-errors\n *ngIf=\"labelText && (ngControl?.control?.errors || fileErrorValidation)\"\n [id]=\"errorId\"\n [errors]=\"\n ngControl?.errors !== null ? ngControl?.errors : fileErrorValidation\n \"\n [labelText]=\"labelText\"\n [showErrors]=\"ngControl?.touched || ngControl?.dirty\"\n>\n <ng-content select=\"sky-form-error\" />\n <sky-form-error\n *ngIf=\"fileErrorName === 'fileType'\"\n [errorName]=\"'fileType'\"\n [errorText]=\"\n 'skyux_file_attachment_file_type_error_label_text'\n | skyLibResources: fileErrorParam\n \"\n />\n <sky-form-error\n *ngIf=\"fileErrorName === 'maxFileSize'\"\n [errorName]=\"'maxFileSize'\"\n [errorText]=\"\n 'skyux_file_attachment_max_file_size_error_label_text'\n | skyLibResources: (fileErrorParam | skyFileSize)\n \"\n />\n <sky-form-error\n *ngIf=\"fileErrorName === 'minFileSize'\"\n [errorName]=\"'minFileSize'\"\n [errorText]=\"\n 'skyux_file_attachment_min_file_size_error_label_text'\n | skyLibResources: (fileErrorParam | skyFileSize)\n \"\n />\n</sky-form-errors>\n\n<ng-template #labelContent>\n <ng-content select=\"sky-file-attachment-label\" />\n</ng-template>\n", styles: [":host.sky-margin-stacked-lg{display:block}.sky-file-attachment-wrapper{display:inline-block}.sky-file-attachment-upload{padding-right:8px;display:block;border:1px solid transparent}.sky-file-attachment-accept{border-color:#72bf44;border-style:dashed;border-width:1px;border-radius:5px;color:#212327}.sky-file-attachment-reject{border-color:#ef4044;border-style:dashed;border-width:1px;border-radius:5px;color:#212327}:host(.ng-invalid.ng-dirty) .sky-file-attachment-btn{box-shadow:0 0 8px #ef404499;border:1px solid #ef4044}.sky-file-attachment-name{padding:0 5px}.sky-file-attachment-name a{cursor:pointer}.sky-file-attachment-delete{border:none;color:#cdcfd2;cursor:pointer;padding:0}.sky-file-attachment-delete:hover{color:#979ba2;transition:color .15s}.sky-file-attachment-preview-img{max-width:25%;height:auto;box-shadow:0 0 5px #666;margin:10px}.sky-file-attachment-hint-text{margin-top:var(--sky-margin-stacked-xs)}:host-context(.sky-theme-modern) .sky-control-label{color:#686c73;font-size:13px}:host-context(.sky-theme-modern) .sky-file-attachment-none{font-size:13px}:host-context(.sky-theme-modern) .sky-file-attachment-wrapper{display:flex;flex-wrap:wrap}:host-context(.sky-theme-modern) .sky-file-attachment-wrapper .sky-file-attachment-label-wrapper{width:100%}:host-context(.sky-theme-modern) .sky-file-attachment-wrapper .sky-file-attachment-preview-img{border-top:1px solid #cdcfd2;border-bottom:1px solid #cdcfd2;border-left:1px solid #cdcfd2;border-right:1px solid #cdcfd2;box-shadow:none;margin:0 10px 0 0;width:100px;flex:0;order:1}:host-context(.sky-theme-modern) .sky-file-attachment-wrapper .sky-file-attachment-btn{margin:0 10px 0 0}:host-context(.sky-theme-modern) .sky-file-attachment-wrapper .sky-file-attachment-icon{margin:5px 10px 5px 5px}:host-context(.sky-theme-modern) .sky-file-attachment-wrapper .sky-file-attachment-upload{flex:1;order:2;display:flex;align-items:flex-start}:host-context(.sky-theme-modern) .sky-file-attachment-wrapper .sky-file-attachment-upload .sky-file-attachment-name{margin:10px 10px 0 0;padding:0}:host-context(.sky-theme-modern) .sky-file-attachment-wrapper .sky-file-attachment-delete{width:40px;height:40px;color:#686c73!important}.sky-theme-modern .sky-control-label{color:#686c73;font-size:13px}.sky-theme-modern .sky-file-attachment-none{font-size:13px}.sky-theme-modern .sky-file-attachment-wrapper{display:flex;flex-wrap:wrap}.sky-theme-modern .sky-file-attachment-wrapper .sky-file-attachment-label-wrapper{width:100%}.sky-theme-modern .sky-file-attachment-wrapper .sky-file-attachment-preview-img{border-top:1px solid #cdcfd2;border-bottom:1px solid #cdcfd2;border-left:1px solid #cdcfd2;border-right:1px solid #cdcfd2;box-shadow:none;margin:0 10px 0 0;width:100px;flex:0;order:1}.sky-theme-modern .sky-file-attachment-wrapper .sky-file-attachment-btn{margin:0 10px 0 0}.sky-theme-modern .sky-file-attachment-wrapper .sky-file-attachment-icon{margin:5px 10px 5px 5px}.sky-theme-modern .sky-file-attachment-wrapper .sky-file-attachment-upload{flex:1;order:2;display:flex;align-items:flex-start}.sky-theme-modern .sky-file-attachment-wrapper .sky-file-attachment-upload .sky-file-attachment-name{margin:10px 10px 0 0;padding:0}.sky-theme-modern .sky-file-attachment-wrapper .sky-file-attachment-delete{width:40px;height:40px;color:#686c73!important}\n"] }]
416
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"sky-file-attachment-wrapper\">\n <div\n class=\"sky-file-attachment-label-wrapper\"\n [attr.id]=\"labelElementId\"\n [ngClass]=\"{\n 'sky-control-label-required': !labelText && required && hasLabelComponent\n }\"\n >\n <ng-container *ngIf=\"labelText; else labelContent\">\n <span\n *ngIf=\"!labelHidden\"\n class=\"sky-control-label sky-margin-inline-xs\"\n [ngClass]=\"{\n 'sky-control-label-required': required\n }\"\n >{{ labelText }}</span\n ><sky-help-inline\n *ngIf=\"helpPopoverContent || helpKey\"\n [labelText]=\"labelText\"\n [helpKey]=\"helpKey\"\n [popoverTitle]=\"helpPopoverTitle\"\n [popoverContent]=\"helpPopoverContent\"\n />\n </ng-container>\n <span\n class=\"sky-screen-reader-only\"\n *ngIf=\"required && (hasLabelComponent || labelText)\"\n >{{ 'skyux_file_attachment_required' | skyLibResources }}</span\n >\n </div>\n <div\n class=\"sky-file-attachment-upload sky-file-attachment sky-file-attachment-target\"\n [ngClass]=\"{\n 'sky-file-attachment-accept': acceptedOver,\n 'sky-file-attachment-reject': rejectedOver\n }\"\n (dragenter)=\"fileDragEnter($event)\"\n (dragover)=\"fileDragOver($event)\"\n (dragleave)=\"fileDragLeave($event)\"\n (drop)=\"fileDrop($event)\"\n >\n <div\n aria-hidden=\"true\"\n class=\"sky-screen-reader-only\"\n role=\"tooltip\"\n [attr.id]=\"fileDropDescriptionElementId\"\n >\n {{ 'skyux_file_attachment_file_upload_drag_or_click' | skyLibResources }}\n </div>\n <input\n hidden\n tabindex=\"-1\"\n type=\"file\"\n [attr.accept]=\"acceptedTypes || null\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n (change)=\"fileChangeEvent($event)\"\n #fileInput\n />\n <ng-container *ngIf=\"showFileAttachmentButton\">\n <button\n *ngIf=\"showFileAttachmentButton\"\n class=\"sky-file-attachment-btn sky-btn sky-btn-default\"\n type=\"button\"\n skyId\n [attr.aria-describedby]=\"\n (hintText ? hintTextEl.id + ' ' : '') + fileDropDescriptionElementId\n \"\n [attr.aria-label]=\"\n value\n ? ('skyux_file_attachment_button_label_replace_file_label'\n | skyLibResources: fileName)\n : ('skyux_file_attachment_button_label_choose_file_label'\n | skyLibResources)\n \"\n [attr.aria-labelledby]=\"\n attachButton.id +\n ' ' +\n (labelText\n ? labelElementId\n : hasLabelComponent\n ? labelComponents?.get(0)?.labelContentId?.id\n : undefined)\n \"\n [disabled]=\"disabled\"\n (click)=\"onDropClicked()\"\n #attachButton=\"skyId\"\n >\n <sky-icon icon=\"folder-open-o\" />\n {{\n value\n ? ('skyux_file_attachment_button_label_replace_file'\n | skyLibResources)\n : ('skyux_file_attachment_button_label_choose_file'\n | skyLibResources)\n }}\n </button>\n </ng-container>\n <sky-icon\n *ngIf=\"value && !isImage && currentThemeName === 'modern'\"\n class=\"sky-file-attachment-icon sky-deemphasized\"\n icon=\"file-o\"\n size=\"2x\"\n />\n <span\n *ngIf=\"value || currentThemeName === 'default'\"\n class=\"sky-file-attachment-name\"\n >\n <a\n *ngIf=\"value; else noFile\"\n [attr.title]=\"fileName\"\n (click)=\"emitClick()\"\n >\n {{ truncatedFileName }}\n </a>\n </span>\n <ng-template #noFile>\n <span class=\"sky-file-attachment-none sky-deemphasized\">\n {{ 'skyux_file_attachment_label_no_file_chosen' | skyLibResources }}\n </span>\n </ng-template>\n <button\n *ngIf=\"value\"\n class=\"sky-btn sky-btn-borderless sky-file-attachment-delete\"\n skyId\n type=\"button\"\n [attr.aria-label]=\"\n 'skyux_file_attachment_file_item_remove' | skyLibResources: fileName\n \"\n [attr.aria-labelledby]=\"\n deleteButton.id +\n ' ' +\n (hasLabelComponent\n ? labelComponents?.get(0)?.labelContentId?.id\n : undefined)\n \"\n [disabled]=\"disabled\"\n [skyThemeClass]=\"{\n 'sky-btn-icon-borderless': 'modern'\n }\"\n (click)=\"deleteFileAttachment()\"\n #deleteButton=\"skyId\"\n >\n <sky-icon icon=\"trash-o\" size=\"md\" />\n </button>\n </div>\n\n <img\n *ngIf=\"value && isImage\"\n class=\"sky-file-attachment-preview-img\"\n [alt]=\"\n 'skyux_file_attachment_file_upload_image_preview_alt_text'\n | skyLibResources\n \"\n [src]=\"value.url\"\n />\n</div>\n<div skyId #hintTextEl=\"skyId\">\n <div\n *ngIf=\"hintText\"\n class=\"sky-font-deemphasized sky-file-attachment-hint-text\"\n >\n {{ hintText }}\n </div>\n</div>\n\n<sky-form-errors\n *ngIf=\"labelText && (ngControl?.control?.errors || fileErrorValidation)\"\n [id]=\"errorId\"\n [errors]=\"\n ngControl?.errors !== null ? ngControl?.errors : fileErrorValidation\n \"\n [labelText]=\"labelText\"\n [showErrors]=\"ngControl?.touched || ngControl?.dirty\"\n>\n <ng-content select=\"sky-form-error\" />\n <sky-form-error\n *ngIf=\"fileErrorName === 'fileType'\"\n [errorName]=\"'fileType'\"\n [errorText]=\"\n acceptedTypesErrorMessage ??\n 'skyux_file_attachment_file_type_error_label_text'\n | skyLibResources: fileErrorParam\n \"\n />\n <sky-form-error\n *ngIf=\"fileErrorName === 'maxFileSize'\"\n [errorName]=\"'maxFileSize'\"\n [errorText]=\"\n 'skyux_file_attachment_max_file_size_error_label_text'\n | skyLibResources: (fileErrorParam | skyFileSize)\n \"\n />\n <sky-form-error\n *ngIf=\"fileErrorName === 'minFileSize'\"\n [errorName]=\"'minFileSize'\"\n [errorText]=\"\n 'skyux_file_attachment_min_file_size_error_label_text'\n | skyLibResources: (fileErrorParam | skyFileSize)\n \"\n />\n</sky-form-errors>\n\n<ng-template #labelContent>\n <ng-content select=\"sky-file-attachment-label\" />\n</ng-template>\n", styles: [":host.sky-margin-stacked-lg{display:block}.sky-file-attachment-wrapper{display:inline-block}.sky-file-attachment-upload{padding-right:8px;display:block;border:1px solid transparent}.sky-file-attachment-accept{border-color:#72bf44;border-style:dashed;border-width:1px;border-radius:5px;color:#212327}.sky-file-attachment-reject{border-color:#ef4044;border-style:dashed;border-width:1px;border-radius:5px;color:#212327}:host(.ng-invalid.ng-dirty) .sky-file-attachment-btn{box-shadow:0 0 8px #ef404499;border:1px solid #ef4044}.sky-file-attachment-name{padding:0 5px}.sky-file-attachment-name a{cursor:pointer}.sky-file-attachment-delete{border:none;color:#cdcfd2;cursor:pointer;padding:0}.sky-file-attachment-delete:hover{color:#979ba2;transition:color .15s}.sky-file-attachment-preview-img{max-width:25%;height:auto;box-shadow:0 0 5px #666;margin:10px}.sky-file-attachment-hint-text{margin-top:var(--sky-margin-stacked-xs)}:host-context(.sky-theme-modern) .sky-control-label{color:#686c73;font-size:13px}:host-context(.sky-theme-modern) .sky-file-attachment-none{font-size:13px}:host-context(.sky-theme-modern) .sky-file-attachment-wrapper{display:flex;flex-wrap:wrap}:host-context(.sky-theme-modern) .sky-file-attachment-wrapper .sky-file-attachment-label-wrapper{width:100%}:host-context(.sky-theme-modern) .sky-file-attachment-wrapper .sky-file-attachment-preview-img{border-top:1px solid #cdcfd2;border-bottom:1px solid #cdcfd2;border-left:1px solid #cdcfd2;border-right:1px solid #cdcfd2;box-shadow:none;margin:0 10px 0 0;width:100px;flex:0;order:1}:host-context(.sky-theme-modern) .sky-file-attachment-wrapper .sky-file-attachment-btn{margin:0 10px 0 0}:host-context(.sky-theme-modern) .sky-file-attachment-wrapper .sky-file-attachment-icon{margin:5px 10px 5px 5px}:host-context(.sky-theme-modern) .sky-file-attachment-wrapper .sky-file-attachment-upload{flex:1;order:2;display:flex;align-items:flex-start}:host-context(.sky-theme-modern) .sky-file-attachment-wrapper .sky-file-attachment-upload .sky-file-attachment-name{margin:10px 10px 0 0;padding:0}:host-context(.sky-theme-modern) .sky-file-attachment-wrapper .sky-file-attachment-delete{width:40px;height:40px;color:#686c73!important}.sky-theme-modern .sky-control-label{color:#686c73;font-size:13px}.sky-theme-modern .sky-file-attachment-none{font-size:13px}.sky-theme-modern .sky-file-attachment-wrapper{display:flex;flex-wrap:wrap}.sky-theme-modern .sky-file-attachment-wrapper .sky-file-attachment-label-wrapper{width:100%}.sky-theme-modern .sky-file-attachment-wrapper .sky-file-attachment-preview-img{border-top:1px solid #cdcfd2;border-bottom:1px solid #cdcfd2;border-left:1px solid #cdcfd2;border-right:1px solid #cdcfd2;box-shadow:none;margin:0 10px 0 0;width:100px;flex:0;order:1}.sky-theme-modern .sky-file-attachment-wrapper .sky-file-attachment-btn{margin:0 10px 0 0}.sky-theme-modern .sky-file-attachment-wrapper .sky-file-attachment-icon{margin:5px 10px 5px 5px}.sky-theme-modern .sky-file-attachment-wrapper .sky-file-attachment-upload{flex:1;order:2;display:flex;align-items:flex-start}.sky-theme-modern .sky-file-attachment-wrapper .sky-file-attachment-upload .sky-file-attachment-name{margin:10px 10px 0 0;padding:0}.sky-theme-modern .sky-file-attachment-wrapper .sky-file-attachment-delete{width:40px;height:40px;color:#686c73!important}\n"] }]
417
417
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.SkyFileAttachmentService }, { type: i2.SkyFileItemService }, { type: i3.NgControl, decorators: [{
418
418
  type: Self
419
419
  }, {
@@ -422,6 +422,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImpor
422
422
  type: Optional
423
423
  }] }], propDecorators: { acceptedTypes: [{
424
424
  type: Input
425
+ }], acceptedTypesErrorMessage: [{
426
+ type: Input
425
427
  }], disabled: [{
426
428
  type: Input,
427
429
  args: [{ transform: booleanAttribute }]
@@ -466,4 +468,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImpor
466
468
  type: ContentChildren,
467
469
  args: [SkyFileAttachmentLabelComponent]
468
470
  }] } });
469
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1hdHRhY2htZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9mb3Jtcy9zcmMvbGliL21vZHVsZXMvZmlsZS1hdHRhY2htZW50L2ZpbGUtYXR0YWNobWVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZm9ybXMvc3JjL2xpYi9tb2R1bGVzL2ZpbGUtYXR0YWNobWVudC9maWxlLWF0dGFjaG1lbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsZUFBZSxFQUVmLFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBRU4sSUFBSSxFQUVKLFNBQVMsRUFDVCxnQkFBZ0IsRUFDaEIsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFDTCxlQUFlLEVBQ2YsWUFBWSxFQUNaLHVCQUF1QixHQUN4QixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHckQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBRXhHLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7Ozs7OztBQVFyRSxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFFakIsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLENBQUM7QUFDckMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLENBQUM7QUFFaEM7O0dBRUc7QUFXSCxNQUFNLE9BQU8sMEJBQTBCO0lBNERyQzs7O09BR0c7SUFDSCxJQUNXLFdBQVcsQ0FBQyxLQUF5QjtRQUM5QyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssSUFBSSxxQkFBcUIsQ0FBQztJQUN0RCxDQUFDO0lBRUQsSUFBVyxXQUFXO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFDVyxXQUFXLENBQUMsS0FBeUI7UUFDOUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLElBQUkscUJBQXFCLENBQUM7SUFDdEQsQ0FBQztJQUVELElBQVcsV0FBVztRQUNwQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQXFERCxJQUFXLEtBQUssQ0FBQyxLQUFxQztRQUNwRCwwREFBMEQ7UUFDMUQseUVBQXlFO1FBQ3pFLHVEQUF1RDtRQUN2RCxNQUFNLFVBQVUsR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDO1FBRTFELElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0RCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDdkIsQ0FBQztZQUNELElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFekIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDckIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QixJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUNyQyxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQVcsS0FBSztRQUNkLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBb0JELGlCQUFpQixDQUFpQztJQUVsRCxpQkFBaUIsQ0FBYztJQUUvQixjQUFjLENBQXVCO0lBRXJDLGFBQWEsQ0FBeUI7SUFFdEMsYUFBYSxDQUF5QjtJQUV0QyxPQUFPLENBQTBCO0lBRWpDLGVBQWUsQ0FBb0I7SUFDbkMsc0JBQXNCLENBQTJCO0lBQ2pELGdCQUFnQixDQUFxQjtJQUNyQyxTQUFTLENBQThCO0lBRTlCLE1BQU0sQ0FBd0I7SUFDOUIsaUJBQWlCLENBQW1DO0lBQ3BELGFBQWEsQ0FBa0M7SUFFL0Msa0JBQWtCLENBRXhCO0lBU0gsWUFDRSxjQUFpQyxFQUNqQyxxQkFBK0MsRUFDL0MsZUFBbUMsRUFDZixTQUFxQixFQUM3QixRQUEwQjtRQTdNeEM7OztXQUdHO1FBRUksYUFBUSxHQUFHLEtBQUssQ0FBQztRQStCeEI7O1dBRUc7UUFFSSxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQW1DM0I7OztXQUdHO1FBR0ksWUFBTyxHQUFHLEtBQUssQ0FBQztRQVN2Qjs7V0FFRztRQUVJLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBMkIsQ0FBQztRQUVoRTs7O1dBR0c7UUFFSSxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQTBCLENBQUM7UUFFdkQsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFFckIsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBTTFCLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBRTVCOzs7Ozs7V0FNRztRQUVJLGFBQVEsR0FBd0IsS0FBSyxDQUFDO1FBK0J0QyxhQUFRLEdBQUcsRUFBRSxDQUFDO1FBRWQsNkJBQXdCLEdBQUcsSUFBSSxDQUFDO1FBRWhDLHNCQUFpQixHQUFHLEVBQUUsQ0FBQztRQVV2QixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBSXZCLHNCQUFpQixHQUFHLFFBQVEsRUFBRSxDQUFDO1FBRS9CLG1CQUFjLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUVyQyxrQkFBYSxHQUFHLHFCQUFxQixDQUFDO1FBRXRDLGtCQUFhLEdBQUcscUJBQXFCLENBQUM7UUFTN0IsV0FBTSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM5QixzQkFBaUIsR0FBRyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUNwRCxrQkFBYSxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBRS9DLHVCQUFrQixHQUFHLE1BQU0sQ0FBQyxvQ0FBb0MsRUFBRTtZQUN6RSxRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUMsQ0FBQztRQUdPLFlBQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBK1U3Qyx1QkFBdUI7UUFDdkIsdUlBQXVJO1FBQ3ZJLGNBQVMsR0FBRyxDQUFDLENBQU0sRUFBUSxFQUFFO1lBQzNCLE9BQU87UUFDVCxDQUFDLENBQUM7UUFDRix1QkFBdUI7UUFDdkIsZ0VBQWdFO1FBQ2hFLGVBQVUsR0FBRyxHQUFTLEVBQUU7WUFDdEIsT0FBTztRQUNULENBQUMsQ0FBQztRQTNVQSxJQUFJLENBQUMsZUFBZSxHQUFHLGNBQWMsQ0FBQztRQUN0QyxJQUFJLENBQUMsc0JBQXNCLEdBQUcscUJBQXFCLENBQUM7UUFDcEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGVBQWUsQ0FBQztRQUN4QyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztRQUUxQixJQUFJLENBQUMsY0FBYyxHQUFHLDZCQUE2QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUM1RSxJQUFJLENBQUMsNEJBQTRCLEdBQUcsd0NBQXdDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3JHLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQztJQUVNLFFBQVE7UUFDYixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWM7aUJBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2lCQUNwQyxTQUFTLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRTtnQkFDM0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGFBQWEsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDakUsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7WUFDckMsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsa0JBQWtCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDL0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDeEIsQ0FBQztRQUNELElBQUksQ0FBQyxrQkFBa0IsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVNLGVBQWU7UUFDcEIsZ0RBQWdEO1FBQ2hELG1GQUFtRjtRQUNuRix1REFBdUQ7UUFDdkQsb0ZBQW9GO1FBQ3BGLDZEQUE2RDtRQUM3RCwwQkFBMEI7UUFDMUIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsU0FBVSxDQUFDLE9BQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtvQkFDNUMsU0FBUyxFQUFFLEtBQUs7aUJBQ2pCLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RDLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLFFBQVE7Z0JBQ1gsSUFBSSxDQUFDLFFBQVEsSUFBSSxlQUFlLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNFLENBQUM7SUFDSCxDQUFDO0lBRU0sa0JBQWtCO1FBQ3ZCLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUVyQyw4Q0FBOEM7WUFDOUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPO2lCQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztpQkFDcEMsU0FBUyxDQUNSLENBQUMsa0JBQThELEVBQUUsRUFBRTtnQkFDakUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBQ3ZELElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEMsQ0FBQyxDQUNGLENBQUM7UUFDTixDQUFDO0lBQ0gsQ0FBQztJQUVNLGFBQWE7UUFDbEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLDBCQUEwQjtRQUMxQixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNyQyxDQUFDO0lBQ0gsQ0FBQztJQUVNLGVBQWUsQ0FBQyxlQUFzQjtRQUMzQyxJQUFJLENBQUMsWUFBWSxDQUNkLGVBQWUsQ0FBQyxNQUF1QyxFQUFFLEtBQUssQ0FDaEUsQ0FBQztJQUNKLENBQUM7SUFFTSxhQUFhLENBQUMsY0FBeUI7UUFDNUMsc0RBQXNEO1FBQ3RELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDO1FBQy9DLGNBQWMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNqQyxjQUFjLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVNLFlBQVksQ0FBQyxhQUF3QjtRQUMxQyxNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDO1FBRTVDLGFBQWEsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNoQyxhQUFhLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFL0IsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNuQixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFFekMsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztvQkFDekIsSUFDRSxJQUFJLENBQUMsSUFBSTt3QkFDVCxJQUFJLENBQUMsc0JBQXNCLENBQUMsZ0JBQWdCLENBQzFDLElBQUksQ0FBQyxJQUFJLEVBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FDbkIsRUFDRCxDQUFDO3dCQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO3dCQUN6QixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQzt3QkFDMUIsT0FBTztvQkFDVCxDQUFDO2dCQUNILENBQUM7Z0JBRUQsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDM0MsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7b0JBQzFCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO2dCQUMzQixDQUFDO1lBQ0gsQ0FBQztpQkFBTSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDMUIsc0RBQXNEO2dCQUN0RCw0Q0FBNEM7Z0JBQzVDLDRGQUE0RjtnQkFDNUYsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBQzNCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVNLFFBQVEsQ0FBQyxTQUFvQjtRQUNsQyxTQUFTLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDNUIsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRTNCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFFMUIsSUFBSSxTQUFTLENBQUMsWUFBWSxJQUFJLFNBQVMsQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDM0QsSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzVDLE9BQU87WUFDVCxDQUFDO1lBRUQsSUFDRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQ3RFLENBQUM7Z0JBQ0QsT0FBTztZQUNULENBQUM7WUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEQsQ0FBQztJQUNILENBQUM7SUFFTSxhQUFhLENBQUMsY0FBeUI7UUFDNUMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEtBQUssY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3JELElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQzFCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO0lBRU0sb0JBQW9CO1FBQ3pCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN2QyxJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztRQUN2QixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXRDLHdDQUF3QztRQUN4QyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLGNBQWMsQ0FDakIsZ0RBQWdELEVBQ2hELFFBQVEsQ0FDVCxDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVNLGdCQUFnQixDQUFDLEVBQXVCO1FBQzdDLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFDTSxpQkFBaUIsQ0FBQyxFQUFhO1FBQ3BDLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxVQUFVLENBQUMsS0FBVTtRQUMxQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksZ0JBQWdCLENBQUMsVUFBbUI7UUFDekMsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7UUFDM0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRU0sU0FBUztRQUNkLDBCQUEwQjtRQUMxQixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO2dCQUNsQixJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUs7YUFDakIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsY0FBc0IsRUFBRSxHQUFHLElBQVc7UUFDbkQsSUFBSSxDQUFDLGFBQWE7YUFDZixTQUFTLENBQUMsY0FBYyxFQUFFLEdBQUcsSUFBSSxDQUFDO2FBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDYixTQUFTLENBQUMsQ0FBQyx1QkFBdUIsRUFBRSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUMzRCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxXQUF5QjtRQUM1QyxJQUFJLFdBQVcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO1lBQy9CLElBQUksQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxTQUFTLENBQUM7UUFDdkMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzNCLGlGQUFpRjtZQUNqRixJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzFCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsYUFBYSxHQUFHLFdBQVcsRUFBRSxTQUFTLENBQUM7WUFDNUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxXQUFXLEVBQUUsVUFBVSxDQUFDO1FBQ2hELENBQUM7UUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztZQUNuQixJQUFJLEVBQUUsV0FBVztTQUNTLENBQUMsQ0FBQztRQUU5QiwwQkFBMEI7UUFDMUIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUN4QyxDQUFDO0lBQ0gsQ0FBQztJQUVELFNBQVMsQ0FBQyxJQUFpQjtRQUN6QixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNkLE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7WUFFaEMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQVUsRUFBUSxFQUFFO2dCQUNuRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFDL0MsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztnQkFDL0IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLGdCQUFnQixFQUFFLENBQUM7b0JBQ3JCLElBQUksQ0FBQyxjQUFjLENBQ2pCLGlEQUFpRCxFQUNqRCxnQkFBZ0IsRUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ2YsQ0FBQztnQkFDSixDQUFDO3FCQUFNLENBQUM7b0JBQ04sSUFBSSxDQUFDLGNBQWMsQ0FDakIsOENBQThDLEVBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNmLENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxHQUFTLEVBQUU7Z0JBQzFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQyxDQUFDLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsR0FBUyxFQUFFO2dCQUMxQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEMsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxDQUFDO0lBQ0gsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUF1QjtRQUNsQyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsQ0FDM0QsS0FBSyxFQUNMLElBQUksQ0FBQyxXQUFXLEVBQ2hCLElBQUksQ0FBQyxXQUFXLEVBQ2hCLElBQUksQ0FBQyxhQUFhLEVBQ2xCLElBQUksQ0FBQyxVQUFVLENBQ2hCLENBQUM7WUFFRixLQUFLLE1BQU0sSUFBSSxJQUFJLGNBQWMsRUFBRSxDQUFDO2dCQUNsQyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDbkIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNsQyxDQUFDO3FCQUFNLENBQUM7b0JBQ04sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdkIsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFrQjtRQUM3QixJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsTUFBTSxRQUFRLEdBQ1osSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUk7Z0JBQ2xELENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUk7Z0JBQ2hCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1lBRWYsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7WUFFekIsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ3pELENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsaUJBQWlCLEdBQUcsUUFBUSxDQUFDO1lBQ3BDLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFDOUIsQ0FBQztJQUNILENBQUM7SUFFRCwyQkFBMkI7UUFDekIsSUFBSSxDQUFDLHdCQUF3QixHQUFHLENBQUMsQ0FDL0IsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssUUFBUSxDQUNqRCxDQUFDO1FBQ0YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsdUJBQXVCO0lBQ3ZCLHVJQUF1STtJQUN2SSxTQUFTLENBRVA7SUFDRix1QkFBdUI7SUFDdkIsZ0VBQWdFO0lBQ2hFLFVBQVUsQ0FFUjs4R0FyaUJTLDBCQUEwQjtrR0FBMUIsMEJBQTBCLGdIQWVqQixnQkFBZ0IsMktBbUNoQixnQkFBZ0IsaUhBd0NoQixnQkFBZ0IseU9BaEd6QjtZQUNULHdCQUF3QjtZQUN4QixFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO1NBQ3JELDBEQStLZ0IsK0JBQStCLG1JQzVPbEQsZ29NQTZNQTs7MkZEN0lhLDBCQUEwQjtrQkFWdEMsU0FBUzsrQkFDRSxxQkFBcUIsYUFHcEI7d0JBQ1Qsd0JBQXdCO3dCQUN4QixFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO3FCQUNyRCxtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTTs7MEJBeU41QyxJQUFJOzswQkFBSSxRQUFROzswQkFDaEIsUUFBUTt5Q0EvTUosYUFBYTtzQkFEbkIsS0FBSztnQkFRQyxRQUFRO3NCQURkLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBUy9CLGtCQUFrQjtzQkFEeEIsS0FBSztnQkFRQyxnQkFBZ0I7c0JBRHRCLEtBQUs7Z0JBU0MsT0FBTztzQkFEYixLQUFLO2dCQU9DLFNBQVM7c0JBRGYsS0FBSztnQkFPQyxXQUFXO3NCQURqQixLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQVEvQixRQUFRO3NCQURkLEtBQUs7Z0JBUUssV0FBVztzQkFEckIsS0FBSztnQkFjSyxXQUFXO3NCQURyQixLQUFLO2dCQWVDLE9BQU87c0JBRmIsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTs7c0JBQ3JDLFdBQVc7dUJBQUMsNkJBQTZCO2dCQVFuQyxVQUFVO3NCQURoQixLQUFLO2dCQU9DLFVBQVU7c0JBRGhCLE1BQU07Z0JBUUEsU0FBUztzQkFEZixNQUFNO2dCQXFCQSxRQUFRO3NCQURkLEtBQUs7Z0JBSUMsT0FBTztzQkFEYixXQUFXO3VCQUFDLGVBQWU7Z0JBb0NyQixPQUFPO3NCQURiLFNBQVM7dUJBQUMsV0FBVztnQkFJZixlQUFlO3NCQURyQixlQUFlO3VCQUFDLCtCQUErQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBTZWxmLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBib29sZWFuQXR0cmlidXRlLFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdDb250cm9sLCBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgU2t5Rm9ybXNVdGlsaXR5LFxuICBTa3lJZFNlcnZpY2UsXG4gIFNreUxpdmVBbm5vdW5jZXJTZXJ2aWNlLFxufSBmcm9tICdAc2t5dXgvY29yZSc7XG5pbXBvcnQgeyBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlIH0gZnJvbSAnQHNreXV4L2kxOG4nO1xuaW1wb3J0IHsgU2t5VGhlbWVTZXJ2aWNlIH0gZnJvbSAnQHNreXV4L3RoZW1lJztcblxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBTS1lfRk9STV9FUlJPUlNfRU5BQkxFRCB9IGZyb20gJy4uL2Zvcm0tZXJyb3IvZm9ybS1lcnJvcnMtZW5hYmxlZC10b2tlbic7XG5pbXBvcnQgeyBTa3lGb3JtRmllbGRMYWJlbFRleHRSZXF1aXJlZFNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQvZm9ybS1maWVsZC1sYWJlbC10ZXh0LXJlcXVpcmVkLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBTa3lGaWxlQXR0YWNobWVudExhYmVsQ29tcG9uZW50IH0gZnJvbSAnLi9maWxlLWF0dGFjaG1lbnQtbGFiZWwuY29tcG9uZW50JztcbmltcG9ydCB7IFNreUZpbGVBdHRhY2htZW50U2VydmljZSB9IGZyb20gJy4vZmlsZS1hdHRhY2htZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgU2t5RmlsZUl0ZW0gfSBmcm9tICcuL2ZpbGUtaXRlbSc7XG5pbXBvcnQgeyBTa3lGaWxlSXRlbUVycm9yVHlwZSB9IGZyb20gJy4vZmlsZS1pdGVtLWVycm9yLXR5cGUnO1xuaW1wb3J0IHsgU2t5RmlsZUl0ZW1TZXJ2aWNlIH0gZnJvbSAnLi9maWxlLWl0ZW0uc2VydmljZSc7XG5pbXBvcnQgeyBTa3lGaWxlVmFsaWRhdGVGbiB9IGZyb20gJy4vZmlsZS12YWxpZGF0ZS1mdW5jdGlvbic7XG5pbXBvcnQgeyBTa3lGaWxlQXR0YWNobWVudENoYW5nZSB9IGZyb20gJy4vdHlwZXMvZmlsZS1hdHRhY2htZW50LWNoYW5nZSc7XG5pbXBvcnQgeyBTa3lGaWxlQXR0YWNobWVudENsaWNrIH0gZnJvbSAnLi90eXBlcy9maWxlLWF0dGFjaG1lbnQtY2xpY2snO1xuXG5sZXQgdW5pcXVlSWQgPSAwO1xuXG5jb25zdCBNQVhfRklMRV9TSVpFX0RFRkFVTFQgPSA1MDAwMDA7XG5jb25zdCBNSU5fRklMRV9TSVpFX0RFRkFVTFQgPSAwO1xuXG4vKipcbiAqIFByb3ZpZGVzIGFuIGVsZW1lbnQgdG8gYXR0YWNoIGEgc2luZ2xlIGxvY2FsIGZpbGUuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS1maWxlLWF0dGFjaG1lbnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZmlsZS1hdHRhY2htZW50LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmlsZS1hdHRhY2htZW50LmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIFNreUZpbGVBdHRhY2htZW50U2VydmljZSxcbiAgICB7IHByb3ZpZGU6IFNLWV9GT1JNX0VSUk9SU19FTkFCTEVELCB1c2VWYWx1ZTogdHJ1ZSB9LFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2t5RmlsZUF0dGFjaG1lbnRDb21wb25lbnRcbiAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBBZnRlckNvbnRlbnRJbml0LCBPbkluaXQsIE9uRGVzdHJveVxue1xuICAvKipcbiAgICogVGhlIGNvbW1hLWRlbGltaXRlZCBzdHJpbmcgbGl0ZXJhbCBvZiBNSU1FIHR5cGVzIHRoYXQgdXNlcnMgY2FuIGF0dGFjaC5cbiAgICogQnkgZGVmYXVsdCwgYWxsIGZpbGUgdHlwZXMgYXJlIGFsbG93ZWQuXG4gICAqIEByZXF1aXJlZFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGFjY2VwdGVkVHlwZXM6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0byBkaXNhYmxlIHRoZSBpbnB1dCBvbiB0ZW1wbGF0ZS1kcml2ZW4gZm9ybXMuIERvbid0IHVzZSB0aGlzIGlucHV0IG9uIHJlYWN0aXZlIGZvcm1zIGJlY2F1c2UgdGhleSBtYXkgb3ZlcndyaXRlIHRoZSBpbnB1dCBvciBsZWF2ZSB0aGUgY29udHJvbCBvdXQgb2Ygc3luYy5cbiAgICogVG8gc2V0IHRoZSBkaXNhYmxlZCBzdGF0ZSBvbiByZWFjdGl2ZSBmb3JtcywgdXNlIHRoZSBgRm9ybUNvbnRyb2xgIGluc3RlYWQuXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgcHVibGljIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBoZWxwIHBvcG92ZXIuIFdoZW4gc3BlY2lmaWVkIGFsb25nIHdpdGggYGxhYmVsVGV4dGAsIGEgW2hlbHAgaW5saW5lXShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvaGVscC1pbmxpbmUpXG4gICAqIGJ1dHRvbiBpcyBhZGRlZCB0byB0aGUgc2luZ2xlIGZpbGUgYXR0YWNobWVudCBsYWJlbC4gVGhlIGhlbHAgaW5saW5lIGJ1dHRvbiBkaXNwbGF5cyBhIFtwb3BvdmVyXShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvcG9wb3ZlcilcbiAgICogd2hlbiBjbGlja2VkIHVzaW5nIHRoZSBzcGVjaWZpZWQgY29udGVudCBhbmQgb3B0aW9uYWwgdGl0bGUuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGVscFBvcG92ZXJDb250ZW50OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIHRpdGxlIG9mIHRoZSBoZWxwIHBvcG92ZXIuIFRoaXMgcHJvcGVydHkgb25seSBhcHBsaWVzIHdoZW4gYGhlbHBQb3BvdmVyQ29udGVudGAgaXNcbiAgICogYWxzbyBzcGVjaWZpZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGVscFBvcG92ZXJUaXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBBIGhlbHAga2V5IHRoYXQgaWRlbnRpZmllcyB0aGUgZ2xvYmFsIGhlbHAgY29udGVudCB0byBkaXNwbGF5LiBXaGVuIHNwZWNpZmllZCwgYSBbaGVscCBpbmxpbmVdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9oZWxwLWlubGluZSlcbiAgICogYnV0dG9uIGlzIHBsYWNlZCBiZXNpZGUgdGhlIHNpbmdsZSBmaWxlIGF0dGFjaG1lbnQgbGFiZWwuIENsaWNraW5nIHRoZSBidXR0b24gaW52b2tlcyBbZ2xvYmFsIGhlbHBdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvbGVhcm4vZGV2ZWxvcC9nbG9iYWwtaGVscClcbiAgICogYXMgY29uZmlndXJlZCBieSB0aGUgYXBwbGljYXRpb24uXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGVscEtleTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgdGV4dCB0byBkaXNwbGF5IGFzIHRoZSBmaWxlIGF0dGFjaG1lbnQncyBsYWJlbC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBsYWJlbFRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0byBoaWRlIGBsYWJlbFRleHRgIGZyb20gdmlldy5cbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBwdWJsaWMgbGFiZWxIaWRkZW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogW1BlcnNpc3RlbnQgaW5saW5lIGhlbHAgdGV4dF0oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9kZXNpZ24vZ3VpZGVsaW5lcy91c2VyLWFzc2lzdGFuY2UjaW5saW5lLWhlbHApIHRoYXQgcHJvdmlkZXNcbiAgICogYWRkaXRpb25hbCBjb250ZXh0IHRvIHRoZSB1c2VyLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGhpbnRUZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIHNpemUgaW4gYnl0ZXMgZm9yIHZhbGlkIGZpbGVzLlxuICAgKiBAZGVmYXVsdCA1MDAwMDBcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbWF4RmlsZVNpemUodmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19tYXhGaWxlU2l6ZSA9IHZhbHVlID8/IE1BWF9GSUxFX1NJWkVfREVGQVVMVDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbWF4RmlsZVNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy4jX21heEZpbGVTaXplO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIHNpemUgaW4gYnl0ZXMgZm9yIHZhbGlkIGZpbGVzLlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG1pbkZpbGVTaXplKHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfbWluRmlsZVNpemUgPSB2YWx1ZSA/PyBNSU5fRklMRV9TSVpFX0RFRkFVTFQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1pbkZpbGVTaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuI19taW5GaWxlU2l6ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBzaW5nbGUgZmlsZSBhdHRhY2htZW50IGlzIHN0YWNrZWQgb24gYW5vdGhlciBmb3JtIGNvbXBvbmVudC4gV2hlbiBzcGVjaWZpZWQsXG4gICAqIHRoZSBhcHByb3ByaWF0ZSB2ZXJ0aWNhbCBzcGFjaW5nIGlzIGF1dG9tYXRpY2FsbHkgYWRkZWQgdG8gdGhlIHNpbmdsZSBmaWxlIGF0dGFjaG1lbnQuXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5za3ktbWFyZ2luLXN0YWNrZWQtbGcnKVxuICBwdWJsaWMgc3RhY2tlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VzdG9tIHZhbGlkYXRpb24gZnVuY3Rpb24uIFRoaXMgdmFsaWRhdGlvbiBydW5zIGFsb25nc2lkZSB0aGUgaW50ZXJuYWxcbiAgICogZmlsZSB2YWxpZGF0aW9uLiBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgYFNreUZpbGVJdGVtYCBvYmplY3QgYXMgYSBwYXJhbWV0ZXIuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgdmFsaWRhdGVGbjogU2t5RmlsZVZhbGlkYXRlRm4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdXNlcnMgYWRkIG9yIHJlbW92ZSBmaWxlcy5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgZmlsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8U2t5RmlsZUF0dGFjaG1lbnRDaGFuZ2U+KCk7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdXNlcnMgc2VsZWN0IHRoZSBmaWxlIG5hbWUgbGluay4gTWFrZSBzdXJlIHRvIGJpbmQgdGhlIGV2ZW50LlxuICAgKiBJZiB5b3UgZG8gbm90LCB0aGUgZmlsZSBuYW1lIGxpbmsgd2lsbCBiZSBhIGRlYWQgbGluay5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgZmlsZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxTa3lGaWxlQXR0YWNobWVudENsaWNrPigpO1xuXG4gIHB1YmxpYyBhY2NlcHRlZE92ZXIgPSBmYWxzZTtcblxuICBwdWJsaWMgaGFzTGFiZWxDb21wb25lbnQgPSBmYWxzZTtcblxuICBwdWJsaWMgZmlsZURyb3BEZXNjcmlwdGlvbkVsZW1lbnRJZDogc3RyaW5nO1xuXG4gIHB1YmxpYyBsYWJlbEVsZW1lbnRJZDogc3RyaW5nO1xuXG4gIHB1YmxpYyByZWplY3RlZE92ZXIgPSBmYWxzZTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgaW5wdXQgaXMgcmVxdWlyZWQgZm9yIGZvcm0gdmFsaWRhdGlvbi5cbiAgICogV2hlbiB5b3Ugc2V0IHRoaXMgcHJvcGVydHkgdG8gYHRydWVgLCB0aGUgY29tcG9uZW50IGFkZHMgYGFyaWEtcmVxdWlyZWRgIGFuZCBgcmVxdWlyZWRgXG4gICAqIGF0dHJpYnV0ZXMgdG8gdGhlIGlucHV0IGVsZW1lbnQgc28gdGhhdCBmb3JtcyBkaXNwbGF5IGFuIGludmFsaWQgc3RhdGUgdW50aWwgdGhlIGlucHV0IGVsZW1lbnRcbiAgICogaXMgY29tcGxldGUuXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBgYXJpYS1yZXF1aXJlZGAgYXR0cmlidXRlLCBzZWUgdGhlIFtXQUktQVJJQSBkZWZpbml0aW9uXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEvI2FyaWEtcmVxdWlyZWQpLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHJlcXVpcmVkOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS5kaXNwbGF5JylcbiAgcHVibGljIGRpc3BsYXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBTa3lGaWxlSXRlbSB8IHVuZGVmaW5lZCB8IG51bGwpIHtcbiAgICAvLyBUaGUgbnVsbCBjaGVjayBpcyBuZWVkZWQgdG8gYWRkcmVzcyBhIGJ1ZyBpbiBBbmd1bGFyIDQuXG4gICAgLy8gd3JpdGVWYWx1ZSBpcyBiZWluZyBjYWxsZWQgdHdpY2UsIGZpcnN0IHRpbWUgd2l0aCBhIHBoYW50b20gbnVsbCB2YWx1ZVxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTQ5ODhcbiAgICBjb25zdCBpc05ld1ZhbHVlID0gdmFsdWUgIT09IHRoaXMudmFsdWUgJiYgdmFsdWUgIT09IG51bGw7XG5cbiAgICBpZiAoaXNOZXdWYWx1ZSkge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuaXNJbWFnZSA9IHRoaXMuI2ZpbGVJdGVtU2VydmljZS5pc0ltYWdlKHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaXNJbWFnZSA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy4jc2V0RmlsZU5hbWUodmFsdWUpO1xuXG4gICAgICB0aGlzLiNfdmFsdWUgPSB2YWx1ZTtcbiAgICAgIHRoaXMuI29uQ2hhbmdlKHZhbHVlKTtcbiAgICAgIHRoaXMuI3VwZGF0ZUZpbGVBdHRhY2htZW50QnV0dG9uKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCB2YWx1ZSgpOiBTa3lGaWxlSXRlbSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI192YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBjdXJyZW50VGhlbWVOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGZpbGVOYW1lID0gJyc7XG5cbiAgcHVibGljIHNob3dGaWxlQXR0YWNobWVudEJ1dHRvbiA9IHRydWU7XG5cbiAgcHVibGljIHRydW5jYXRlZEZpbGVOYW1lID0gJyc7XG5cbiAgQFZpZXdDaGlsZCgnZmlsZUlucHV0JylcbiAgcHVibGljIGlucHV0RWw6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihTa3lGaWxlQXR0YWNobWVudExhYmVsQ29tcG9uZW50KVxuICBwdWJsaWMgbGFiZWxDb21wb25lbnRzOlxuICAgIHwgUXVlcnlMaXN0PFNreUZpbGVBdHRhY2htZW50TGFiZWxDb21wb25lbnQ+XG4gICAgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGlzSW1hZ2UgPSBmYWxzZTtcblxuICAjZW50ZXJFdmVudFRhcmdldDogRXZlbnRUYXJnZXQgfCB1bmRlZmluZWQgfCBudWxsO1xuXG4gICNmaWxlQXR0YWNobWVudElkID0gdW5pcXVlSWQrKztcblxuICAjbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgI19tYXhGaWxlU2l6ZSA9IE1BWF9GSUxFX1NJWkVfREVGQVVMVDtcblxuICAjX21pbkZpbGVTaXplID0gTUlOX0ZJTEVfU0laRV9ERUZBVUxUO1xuXG4gICNfdmFsdWU6IFNreUZpbGVJdGVtIHwgdW5kZWZpbmVkO1xuXG4gICNjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWY7XG4gICNmaWxlQXR0YWNobWVudFNlcnZpY2U6IFNreUZpbGVBdHRhY2htZW50U2VydmljZTtcbiAgI2ZpbGVJdGVtU2VydmljZTogU2t5RmlsZUl0ZW1TZXJ2aWNlO1xuICAjdGhlbWVTdmM6IFNreVRoZW1lU2VydmljZSB8IHVuZGVmaW5lZDtcblxuICByZWFkb25seSAjaWRTdmMgPSBpbmplY3QoU2t5SWRTZXJ2aWNlKTtcbiAgcmVhZG9ubHkgI2xpdmVBbm5vdW5jZXJTdmMgPSBpbmplY3QoU2t5TGl2ZUFubm91bmNlclNlcnZpY2UpO1xuICByZWFkb25seSAjcmVzb3VyY2VzU3ZjID0gaW5qZWN0KFNreUxpYlJlc291cmNlc1NlcnZpY2UpO1xuXG4gIHJlYWRvbmx5ICNsYWJlbFRleHRSZXF1aXJlZCA9IGluamVjdChTa3lGb3JtRmllbGRMYWJlbFRleHRSZXF1aXJlZFNlcnZpY2UsIHtcbiAgICBvcHRpb25hbDogdHJ1ZSxcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIG5nQ29udHJvbDogTmdDb250cm9sIHwgdW5kZWZpbmVkO1xuICBwcm90ZWN0ZWQgZXJyb3JJZCA9IHRoaXMuI2lkU3ZjLmdlbmVyYXRlSWQoKTtcblxuICBwcm90ZWN0ZWQgZmlsZUVycm9yTmFtZTogU2t5RmlsZUl0ZW1FcnJvclR5cGUgfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCBmaWxlRXJyb3JQYXJhbTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwcm90ZWN0ZWQgZmlsZUVycm9yVmFsaWRhdGlvbjogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIGZpbGVBdHRhY2htZW50U2VydmljZTogU2t5RmlsZUF0dGFjaG1lbnRTZXJ2aWNlLFxuICAgIGZpbGVJdGVtU2VydmljZTogU2t5RmlsZUl0ZW1TZXJ2aWNlLFxuICAgIEBTZWxmKCkgQE9wdGlvbmFsKCkgbmdDb250cm9sPzogTmdDb250cm9sLFxuICAgIEBPcHRpb25hbCgpIHRoZW1lU3ZjPzogU2t5VGhlbWVTZXJ2aWNlLFxuICApIHtcbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3RvciA9IGNoYW5nZURldGVjdG9yO1xuICAgIHRoaXMuI2ZpbGVBdHRhY2htZW50U2VydmljZSA9IGZpbGVBdHRhY2htZW50U2VydmljZTtcbiAgICB0aGlzLiNmaWxlSXRlbVNlcnZpY2UgPSBmaWxlSXRlbVNlcnZpY2U7XG4gICAgdGhpcy5uZ0NvbnRyb2wgPSBuZ0NvbnRyb2w7XG4gICAgdGhpcy4jdGhlbWVTdmMgPSB0aGVtZVN2YztcblxuICAgIHRoaXMubGFiZWxFbGVtZW50SWQgPSBgc2t5LWZpbGUtYXR0YWNobWVudC1sYWJlbC0ke3RoaXMuI2ZpbGVBdHRhY2htZW50SWR9YDtcbiAgICB0aGlzLmZpbGVEcm9wRGVzY3JpcHRpb25FbGVtZW50SWQgPSBgc2t5LWZpbGUtYXR0YWNobWVudC1kcm9wLWRlc2NyaXB0aW9uLSR7dGhpcy4jZmlsZUF0dGFjaG1lbnRJZH1gO1xuICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xuICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLiN0aGVtZVN2Yykge1xuICAgICAgdGhpcy4jdGhlbWVTdmMuc2V0dGluZ3NDaGFuZ2VcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgICAuc3Vic2NyaWJlKCh0aGVtZVNldHRpbmdzKSA9PiB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50VGhlbWVOYW1lID0gdGhlbWVTZXR0aW5ncy5jdXJyZW50U2V0dGluZ3MudGhlbWUubmFtZTtcbiAgICAgICAgICB0aGlzLiN1cGRhdGVGaWxlQXR0YWNobWVudEJ1dHRvbigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy4jbGFiZWxUZXh0UmVxdWlyZWQgJiYgIXRoaXMubGFiZWxUZXh0KSB7XG4gICAgICB0aGlzLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgfVxuICAgIHRoaXMuI2xhYmVsVGV4dFJlcXVpcmVkPy52YWxpZGF0ZUxhYmVsVGV4dCh0aGlzLmxhYmVsVGV4dCk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIC8vIFRoaXMgaXMgbmVlZGVkIHRvIGFkZHJlc3MgYSBidWcgaW4gQW5ndWxhciA3LlxuICAgIC8vIFdoZW4gYSBjb250cm9sIHZhbHVlIGlzIHNldCBpbml0aWFsbHksIGl0cyB2YWx1ZSBpcyBub3QgcmVwcmVzZW50ZWQgb24gdGhlIHZpZXcuXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xMzc5MlxuICAgIC8vIE9mIG5vdGUgaXMgdGhlIHBhcmVudCBjaGVjayB3aGljaCBhbGxvd3MgdXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBmb3JtIGlzIHJlYWN0aXZlLlxuICAgIC8vIFdpdGhvdXQgdGhpcyBjaGVjayB0aGVyZSBpcyBhIGNoYW5nZWQgYmVmb3JlIGNoZWNrZWQgZXJyb3JcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMubmdDb250cm9sIS5jb250cm9sIS5zZXRWYWx1ZSh0aGlzLnZhbHVlLCB7XG4gICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMucmVxdWlyZWQgPVxuICAgICAgICB0aGlzLnJlcXVpcmVkIHx8IFNreUZvcm1zVXRpbGl0eS5oYXNSZXF1aXJlZFZhbGlkYXRpb24odGhpcy5uZ0NvbnRyb2wpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubGFiZWxDb21wb25lbnRzKSB7XG4gICAgICB0aGlzLmhhc0xhYmVsQ29tcG9uZW50ID0gdGhpcy5sYWJlbENvbXBvbmVudHMubGVuZ3RoID4gMDtcbiAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgLy8gSGFuZGxlcyB1cGRhdGluZyBjbGFzc2VzIHdoZW4gbGFiZWwgY2hhbmdlc1xuICAgICAgdGhpcy5sYWJlbENvbXBvbmVudHMuY2hhbmdlc1xuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgKG5ld0xhYmVsQ29tcG9uZW50czogUXVlcnlMaXN0PFNreUZpbGVBdHRhY2htZW50TGFiZWxDb21wb25lbnQ+KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhc0xhYmVsQ29tcG9uZW50ID0gbmV3TGFiZWxDb21wb25lbnRzLmxlbmd0aCA+IDA7XG4gICAgICAgICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbkRyb3BDbGlja2VkKCk6IHZvaWQge1xuICAgIHRoaXMuI29uVG91Y2hlZCgpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMuaW5wdXRFbCkge1xuICAgICAgdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZmlsZUNoYW5nZUV2ZW50KGZpbGVDaGFuZ2VFdmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLiNoYW5kbGVGaWxlcyhcbiAgICAgIChmaWxlQ2hhbmdlRXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQgfCB1bmRlZmluZWQpPy5maWxlcyxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGZpbGVEcmFnRW50ZXIoZHJhZ0VudGVyRXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIC8vIFNhdmUgdGhpcyB0YXJnZXQgdG8ga25vdyB3aGVuIHRoZSBkcmFnIGV2ZW50IGxlYXZlc1xuICAgIHRoaXMuI2VudGVyRXZlbnRUYXJnZXQgPSBkcmFnRW50ZXJFdmVudC50YXJnZXQ7XG4gICAgZHJhZ0VudGVyRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZHJhZ0VudGVyRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIHB1YmxpYyBmaWxlRHJhZ092ZXIoZHJhZ092ZXJFdmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdHJhbnNmZXIgPSBkcmFnT3ZlckV2ZW50LmRhdGFUcmFuc2ZlcjtcblxuICAgIGRyYWdPdmVyRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZHJhZ092ZXJFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgaWYgKHRyYW5zZmVyKSB7XG4gICAgICBpZiAodHJhbnNmZXIuaXRlbXMpIHtcbiAgICAgICAgY29uc3QgZmlsZXMgPSBBcnJheS5mcm9tKHRyYW5zZmVyLml0ZW1zKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmaWxlLnR5cGUgJiZcbiAgICAgICAgICAgIHRoaXMuI2ZpbGVBdHRhY2htZW50U2VydmljZS5maWxlVHlwZVJlamVjdGVkKFxuICAgICAgICAgICAgICBmaWxlLnR5cGUsXG4gICAgICAgICAgICAgIHRoaXMuYWNjZXB0ZWRUeXBlcyxcbiAgICAgICAgICAgIClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMucmVqZWN0ZWRPdmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuYWNjZXB0ZWRPdmVyID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCA+IDAgJiYgIXRoaXMuYWNjZXB0ZWRPdmVyKSB7XG4gICAgICAgICAgdGhpcy5yZWplY3RlZE92ZXIgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmFjY2VwdGVkT3ZlciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHJhbnNmZXIuZmlsZXMpIHtcbiAgICAgICAgLy8gSWYgdGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBEYXRhVHJhbnNmZXIuaXRlbXMsXG4gICAgICAgIC8vIGRlZmVyIGZpbGUtdHlwZSBjaGVja2luZyB0byBkcm9wIGhhbmRsZXIuXG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9EYXRhVHJhbnNmZXIvaXRlbXMjQnJvd3Nlcl9jb21wYXRpYmlsaXR5XG4gICAgICAgIHRoaXMucmVqZWN0ZWRPdmVyID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYWNjZXB0ZWRPdmVyID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZmlsZURyb3AoZHJvcEV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICBkcm9wRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZHJvcEV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICB0aGlzLiNlbnRlckV2ZW50VGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucmVqZWN0ZWRPdmVyID0gZmFsc2U7XG4gICAgdGhpcy5hY2NlcHRlZE92ZXIgPSBmYWxzZTtcblxuICAgIGlmIChkcm9wRXZlbnQuZGF0YVRyYW5zZmVyICYmIGRyb3BFdmVudC5kYXRhVHJhbnNmZXIuZmlsZXMpIHtcbiAgICAgIGlmIChkcm9wRXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuI2ZpbGVBdHRhY2htZW50U2VydmljZS5oYXNEaXJlY3RvcnkoZHJvcEV2ZW50LmRhdGFUcmFuc2Zlci5maWxlcylcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuI2hhbmRsZUZpbGVzKGRyb3BFdmVudC5kYXRhVHJhbnNmZXIuZmlsZXMpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmaWxlRHJhZ0xlYXZlKGRyYWdMZWF2ZUV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jZW50ZXJFdmVudFRhcmdldCA9PT0gZHJhZ0xlYXZlRXZlbnQudGFyZ2V0KSB7XG4gICAgICB0aGlzLnJlamVjdGVkT3ZlciA9IGZhbHNlO1xuICAgICAgdGhpcy5hY2NlcHRlZE92ZXIgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZGVsZXRlRmlsZUF0dGFjaG1lbnQoKTogdm9pZCB7XG4gICAgY29uc3QgZmlsZU5hbWUgPSB0aGlzLnZhbHVlPy5maWxlLm5hbWU7XG4gICAgdGhpcy52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLiNlbWl0RmlsZUNoYW5nZUV2ZW50KHRoaXMudmFsdWUpO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2U6IHNhZmV0eSBjaGVjayAqL1xuICAgIGlmIChmaWxlTmFtZSkge1xuICAgICAgdGhpcy4jYW5ub3VuY2VTdGF0ZShcbiAgICAgICAgJ3NreXV4X2ZpbGVfYXR0YWNobWVudF9maWxlX3VwbG9hZF9maWxlX3JlbW92ZWQnLFxuICAgICAgICBmaWxlTmFtZSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5maWxlQ2hhbmdlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogYW55KSA9PiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLiNvbkNoYW5nZSA9IGZuO1xuICB9XG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gYW55KTogdm9pZCB7XG4gICAgdGhpcy4jb25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBTZXRzIHRoZSBkaXNhYmxlZCBzdGF0ZSBvZiB0aGUgY29udHJvbC4gSW1wbGVtZW50ZWQgYXMgYSBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICAgKiBAcGFyYW0gaXNEaXNhYmxlZCBXaGV0aGVyIHRoZSBjb250cm9sIHNob3VsZCBiZSBkaXNhYmxlZC5cbiAgICovXG4gIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHB1YmxpYyBlbWl0Q2xpY2soKTogdm9pZCB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgdGhpcy5maWxlQ2xpY2suZW1pdCh7XG4gICAgICAgIGZpbGU6IHRoaXMudmFsdWUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAjYW5ub3VuY2VTdGF0ZShyZXNvdXJjZVN0cmluZzogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgIHRoaXMuI3Jlc291cmNlc1N2Y1xuICAgICAgLmdldFN0cmluZyhyZXNvdXJjZVN0cmluZywgLi4uYXJncylcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKChpbnRlcm5hdGlvbmFsaXplZFN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLiNsaXZlQW5ub3VuY2VyU3ZjLmFubm91bmNlKGludGVybmF0aW9uYWxpemVkU3RyaW5nKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgI2VtaXRGaWxlQ2hhbmdlRXZlbnQoY3VycmVudEZpbGU/OiBTa3lGaWxlSXRlbSk6IHZvaWQge1xuICAgIGlmIChjdXJyZW50RmlsZSAmJiAhY3VycmVudEZpbGUuZXJyb3JUeXBlKSB7XG4gICAgICB0aGlzLndyaXRlVmFsdWUoY3VycmVudEZpbGUpO1xuICAgICAgdGhpcy5maWxlRXJyb3JOYW1lID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5maWxlRXJyb3JQYXJhbSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZmlsZUVycm9yVmFsaWRhdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy53cml0ZVZhbHVlKHVuZGVmaW5lZCk7XG4gICAgICAvLyBNYWtlcyBzdXJlIHZhbHVlIGFjY2Vzc29yIGlzIG1hcmtlZCBhcyBkaXJ0eSBldmVuIGlmIGN1cnJlbnQgZmlsZSBpcyB1bmRlZmluZWRcbiAgICAgIHRoaXMuI29uQ2hhbmdlKHVuZGVmaW5lZCk7XG4gICAgICB0aGlzLmZpbGVFcnJvclZhbGlkYXRpb24gPSB7IGZpbGVFcnJvcjogdHJ1ZSB9O1xuICAgICAgdGhpcy5maWxlRXJyb3JOYW1lID0gY3VycmVudEZpbGU/LmVycm9yVHlwZTtcbiAgICAgIHRoaXMuZmlsZUVycm9yUGFyYW0gPSBjdXJyZW50RmlsZT8uZXJyb3JQYXJhbTtcbiAgICB9XG4gICAgdGhpcy5maWxlQ2hhbmdlLmVtaXQoe1xuICAgICAgZmlsZTogY3VycmVudEZpbGUsXG4gICAgfSBhcyBTa3lGaWxlQXR0YWNobWVudENoYW5nZSk7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLmlucHV0RWwpIHtcbiAgICAgIHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgfVxuICB9XG5cbiAgI2xvYWRGaWxlKGZpbGU6IFNreUZpbGVJdGVtKTogdm9pZCB7XG4gICAgaWYgKGZpbGUuZmlsZSkge1xuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcblxuICAgICAgcmVhZGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCAoZXZlbnQ6IGFueSk6IHZvaWQgPT4ge1xuICAgICAgICBjb25zdCBwcmV2aW91c0ZpbGVOYW1lID0gdGhpcy52YWx1ZT8uZmlsZS5uYW1lO1xuICAgICAgICBmaWxlLnVybCA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7XG4gICAgICAgIHRoaXMuI2VtaXRGaWxlQ2hhbmdlRXZlbnQoZmlsZSk7XG4gICAgICAgIGlmIChwcmV2aW91c0ZpbGVOYW1lKSB7XG4gICAgICAgICAgdGhpcy4jYW5ub3VuY2VTdGF0ZShcbiAgICAgICAgICAgICdza3l1eF9maWxlX2F0dGFjaG1lbnRfZmlsZV91cGxvYWRfZmlsZV9yZXBsYWNlZCcsXG4gICAgICAgICAgICBwcmV2aW91c0ZpbGVOYW1lLFxuICAgICAgICAgICAgZmlsZS5maWxlLm5hbWUsXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLiNhbm5vdW5jZVN0YXRlKFxuICAgICAgICAgICAgJ3NreXV4X2ZpbGVfYXR0YWNobWVudF9maWxlX3VwbG9hZF9maWxlX2FkZGVkJyxcbiAgICAgICAgICAgIGZpbGUuZmlsZS5uYW1lLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZWFkZXIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCAoKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuI2VtaXRGaWxlQ2hhbmdlRXZlbnQoZmlsZSk7XG4gICAgICB9KTtcblxuICAgICAgcmVhZGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLiNlbWl0RmlsZUNoYW5nZUV2ZW50KGZpbGUpO1xuICAgICAgfSk7XG5cbiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUuZmlsZSk7XG4gICAgfVxuICB9XG5cbiAgI2hhbmRsZUZpbGVzKGZpbGVzPzogRmlsZUxpc3QgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKGZpbGVzKSB7XG4gICAgICBjb25zdCBwcm9jZXNzZWRGaWxlcyA9IHRoaXMuI2ZpbGVBdHRhY2htZW50U2VydmljZS5jaGVja0ZpbGVzKFxuICAgICAgICBmaWxlcyxcbiAgICAgICAgdGhpcy5taW5GaWxlU2l6ZSxcbiAgICAgICAgdGhpcy5tYXhGaWxlU2l6ZSxcbiAgICAgICAgdGhpcy5hY2NlcHRlZFR5cGVzLFxuICAgICAgICB0aGlzLnZhbGlkYXRlRm4sXG4gICAgICApO1xuXG4gICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgcHJvY2Vzc2VkRmlsZXMpIHtcbiAgICAgICAgaWYgKGZpbGUuZXJyb3JUeXBlKSB7XG4gICAgICAgICAgdGhpcy4jZW1pdEZpbGVDaGFuZ2VFdmVudChmaWxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLiNsb2FkRmlsZShmaWxlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICNzZXRGaWxlTmFtZShmaWxlPzogU2t5RmlsZUl0ZW0pOiB2b2lkIHtcbiAgICBpZiAoZmlsZSkge1xuICAgICAgY29uc3QgZHJvcE5hbWUgPVxuICAgICAgICB0aGlzLiNmaWxlSXRlbVNlcnZpY2UuaXNGaWxlKGZpbGUpICYmIGZpbGUuZmlsZS5uYW1lXG4gICAgICAgICAgPyBmaWxlLmZpbGUubmFtZVxuICAgICAgICAgIDogZmlsZS51cmw7XG5cbiAgICAgIHRoaXMuZmlsZU5hbWUgPSBkcm9wTmFtZTtcblxuICAgICAgaWYgKGRyb3BOYW1lLmxlbmd0aCA+IDI2KSB7XG4gICAgICAgIHRoaXMudHJ1bmNhdGVkRmlsZU5hbWUgPSBkcm9wTmFtZS5zbGljZSgwLCAyNikgKyAnLi4uJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudHJ1bmNhdGVkRmlsZU5hbWUgPSBkcm9wTmFtZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWxlTmFtZSA9ICcnO1xuICAgICAgdGhpcy50cnVuY2F0ZWRGaWxlTmFtZSA9ICcnO1xuICAgIH1cbiAgfVxuXG4gICN1cGRhdGVGaWxlQXR0YWNobWVudEJ1dHRvbigpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dGaWxlQXR0YWNobWVudEJ1dHRvbiA9ICEoXG4gICAgICB0aGlzLnZhbHVlICYmIHRoaXMuY3VycmVudFRoZW1lTmFtZSA9PT0gJ21vZGVybidcbiAgICApO1xuICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvbiwgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICNvbkNoYW5nZSA9IChfOiBhbnkpOiB2b2lkID0+IHtcbiAgICByZXR1cm47XG4gIH07XG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgI29uVG91Y2hlZCA9ICgpOiB2b2lkID0+IHtcbiAgICByZXR1cm47XG4gIH07XG59XG4iLCI8ZGl2IGNsYXNzPVwic2t5LWZpbGUtYXR0YWNobWVudC13cmFwcGVyXCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cInNreS1maWxlLWF0dGFjaG1lbnQtbGFiZWwtd3JhcHBlclwiXG4gICAgW2F0dHIuaWRdPVwibGFiZWxFbGVtZW50SWRcIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICdza3ktY29udHJvbC1sYWJlbC1yZXF1aXJlZCc6ICFsYWJlbFRleHQgJiYgcmVxdWlyZWQgJiYgaGFzTGFiZWxDb21wb25lbnRcbiAgICB9XCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsYWJlbFRleHQ7IGVsc2UgbGFiZWxDb250ZW50XCI+XG4gICAgICA8c3BhblxuICAgICAgICAqbmdJZj1cIiFsYWJlbEhpZGRlblwiXG4gICAgICAgIGNsYXNzPVwic2t5LWNvbnRyb2wtbGFiZWwgc2t5LW1hcmdpbi1pbmxpbmUteHNcIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgJ3NreS1jb250cm9sLWxhYmVsLXJlcXVpcmVkJzogcmVxdWlyZWRcbiAgICAgICAgfVwiXG4gICAgICAgID57eyBsYWJlbFRleHQgfX08L3NwYW5cbiAgICAgID48c2t5LWhlbHAtaW5saW5lXG4gICAgICAgICpuZ0lmPVwiaGVscFBvcG92ZXJDb250ZW50IHx8IGhlbHBLZXlcIlxuICAgICAgICBbbGFiZWxUZXh0XT1cImxhYmVsVGV4dFwiXG4gICAgICAgIFtoZWxwS2V5XT1cImhlbHBLZXlcIlxuICAgICAgICBbcG9wb3ZlclRpdGxlXT1cImhlbHBQb3BvdmVyVGl0bGVcIlxuICAgICAgICBbcG9wb3ZlckNvbnRlbnRdPVwiaGVscFBvcG92ZXJDb250ZW50XCJcbiAgICAgIC8+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPHNwYW5cbiAgICAgIGNsYXNzPVwic2t5LXNjcmVlbi1yZWFkZXItb25seVwiXG4gICAgICAqbmdJZj1cInJlcXVpcmVkICYmIChoYXNMYWJlbENvbXBvbmVudCB8fCBsYWJlbFRleHQpXCJcbiAgICAgID57eyAnc2t5dXhfZmlsZV9hdHRhY2htZW50X3JlcXVpcmVkJyB8IHNreUxpYlJlc291cmNlcyB9fTwvc3BhblxuICAgID5cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICBjbGFzcz1cInNreS1maWxlLWF0dGFjaG1lbnQtdXBsb2FkIHNreS1maWxlLWF0dGFjaG1lbnQgc2t5LWZpbGUtYXR0YWNobWVudC10YXJnZXRcIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICdza3ktZmlsZS1hdHRhY2htZW50LWFjY2VwdCc6IGFjY2VwdGVkT3ZlcixcbiAgICAgICdza3ktZmlsZS1hdHRhY2htZW50LXJlamVjdCc6IHJlamVjdGVkT3ZlclxuICAgIH1cIlxuICAgIChkcmFnZW50ZXIpPVwiZmlsZURyYWdFbnRlcigkZXZlbnQpXCJcbiAgICAoZHJhZ292ZXIpPVwiZmlsZURyYWdPdmVyKCRldmVudClcIlxuICAgIChkcmFnbGVhdmUpPVwiZmlsZURyYWdMZWF2ZSgkZXZlbnQpXCJcbiAgICAoZHJvcCk9XCJmaWxlRHJvcCgkZXZlbnQpXCJcbiAgPlxuICAgIDxkaXZcbiAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICBjbGFzcz1cInNreS1zY3JlZW4tcmVhZGVyLW9ubHlcIlxuICAgICAgcm9sZT1cInRvb2x0aXBcIlxuICAgICAgW2F0dHIuaWRdPVwiZmlsZURyb3BEZXNjcmlwdGlvbkVsZW1lbnRJZFwiXG4gICAgPlxuICAgICAge3sgJ3NreXV4X2ZpbGVfYXR0YWNobWVudF9maWxlX3VwbG9hZF9kcmFnX29yX2NsaWNrJyB8IHNreUxpYlJlc291cmNlcyB9fVxuICAgIDwvZGl2PlxuICAgIDxpbnB1dFxuICAgICAgaGlkZGVuXG4gICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgIFthdHRyLmFjY2VwdF09XCJhY2NlcHRlZFR5cGVzIHx8IG51bGxcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAoY2hhbmdlKT1cImZpbGVDaGFuZ2VFdmVudCgkZXZlbnQpXCJcbiAgICAgICNmaWxlSW5wdXRcbiAgICAvPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93RmlsZUF0dGFjaG1lbnRCdXR0b25cIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCJzaG93RmlsZUF0dGFjaG1lbnRCdXR0b25cIlxuICAgICAgICBjbGFzcz1cInNreS1maWxlLWF0dGFjaG1lbnQtYnRuIHNreS1idG4gc2t5LWJ0bi1kZWZhdWx0XCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHNreUlkXG4gICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiXG4gICAgICAgICAgKGhpbnRUZXh0ID8gaGludFRleHRFbC5pZCArICcgJyA6ICcnKSArIGZpbGVEcm9wRGVzY3JpcHRpb25FbGVtZW50SWRcbiAgICAgICAgXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgPyAoJ3NreXV4X2ZpbGVfYXR0YWNobWVudF9idXR0b25fbGFiZWxfcmVwbGFjZV9maWxlX2xhYmVsJ1xuICAgICAgICAgICAgICB8IHNreUxpYlJlc291cmNlczogZmlsZU5hbWUpXG4gICAgICAgICAgICA6ICgnc2t5dXhfZmlsZV9hdHRhY2htZW50X2J1dHRvbl9sYWJlbF9jaG9vc2VfZmlsZV9sYWJlbCdcbiAgICAgICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXMpXG4gICAgICAgIFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJcbiAgICAgICAgICBhdHRhY2hCdXR0b24uaWQgK1xuICAgICAgICAgICcgJyArXG4gICAgICAgICAgKGxhYmVsVGV4dFxuICAgICAgICAgICAgPyBsYWJlbEVsZW1lbnRJZFxuICAgICAgICAgICAgOiBoYXNMYWJlbENvbXBvbmVudFxuICAgICAgICAgICAgICA/IGxhYmVsQ29tcG9uZW50cz8uZ2V0KDApPy5sYWJlbENvbnRlbnRJZD8uaWRcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQpXG4gICAgICAgIFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIChjbGljayk9XCJvbkRyb3BDbGlja2VkKClcIlxuICAgICAgICAjYXR0YWNoQnV0dG9uPVwic2t5SWRcIlxuICAgICAgPlxuICAgICAgICA8c2t5LWljb24gaWNvbj1cImZvbGRlci1vcGVuLW9cIiAvPlxuICAgICAgICB7e1xuICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICA/ICgnc2t5dXhfZmlsZV9hdHRhY2htZW50X2J1dHRvbl9sYWJlbF9yZXBsYWNlX2ZpbGUnXG4gICAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzKVxuICAgICAgICAgICAgOiAoJ3NreXV4X2ZpbGVfYXR0YWNobWVudF9idXR0b25fbGFiZWxfY2hvb3NlX2ZpbGUnXG4gICAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzKVxuICAgICAgICB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPHNreS1pY29uXG4gICAgICAqbmdJZj1cInZhbHVlICYmICFpc0ltYWdlICYmIGN1cnJlbnRUaGVtZU5hbWUgPT09ICdtb2Rlcm4nXCJcbiAgICAgIGNsYXNzPVwic2t5LWZpbGUtYXR0YWNobWVudC1pY29uIHNreS1kZWVtcGhhc2l6ZWRcIlxuICAgICAgaWNvbj1cImZpbGUtb1wiXG4gICAgICBzaXplPVwiMnhcIlxuICAgIC8+XG4gICAgPHNwYW5cbiAgICAgICpuZ0lmPVwidmFsdWUgfHwgY3VycmVudFRoZW1lTmFtZSA9PT0gJ2RlZmF1bHQnXCJcbiAgICAgIGNsYXNzPVwic2t5LWZpbGUtYXR0YWNobWVudC1uYW1lXCJcbiAgICA+XG4gICAgICA8YVxuICAgICAgICAqbmdJZj1cInZhbHVlOyBlbHNlIG5vRmlsZVwiXG4gICAgICAgIFthdHRyLnRpdGxlXT1cImZpbGVOYW1lXCJcbiAgICAgICAgKGNsaWNrKT1cImVtaXRDbGljaygpXCJcbiAgICAgID5cbiAgICAgICAge3sgdHJ1bmNhdGVkRmlsZU5hbWUgfX1cbiAgICAgIDwvYT5cbiAgICA8L3NwYW4+XG4gICAgPG5nLXRlbXBsYXRlICNub0ZpbGU+XG4gICAgICA8c3BhbiBjbGFzcz1cInNreS1maWxlLWF0dGFjaG1lbnQtbm9uZSBza3ktZGVlbXBoYXNpemVkXCI+XG4gICAgICAgIHt7ICdza3l1eF9maWxlX2F0dGFjaG1lbnRfbGFiZWxfbm9fZmlsZV9jaG9zZW4nIHwgc2t5TGliUmVzb3VyY2VzIH19XG4gICAgICA8L3NwYW4+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdJZj1cInZhbHVlXCJcbiAgICAgIGNsYXNzPVwic2t5LWJ0biBza3ktYnRuLWJvcmRlcmxlc3Mgc2t5LWZpbGUtYXR0YWNobWVudC1kZWxldGVcIlxuICAgICAgc2t5SWRcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgJ3NreXV4X2ZpbGVfYXR0YWNobWVudF9maWxlX2l0ZW1fcmVtb3ZlJyB8IHNreUxpYlJlc291cmNlczogZmlsZU5hbWVcbiAgICAgIFwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiXG4gICAgICAgIGRlbGV0ZUJ1dHRvbi5pZCArXG4gICAgICAgICcgJyArXG4gICAgICAgIChoYXNMYWJlbENvbXBvbmVudFxuICAgICAgICAgID8gbGFiZWxDb21wb25lbnRzPy5nZXQoMCk/LmxhYmVsQ29udGVudElkPy5pZFxuICAgICAgICAgIDogdW5kZWZpbmVkKVxuICAgICAgXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICBbc2t5VGhlbWVDbGFzc109XCJ7XG4gICAgICAgICdza3ktYnRuLWljb24tYm9yZGVybGVzcyc6ICdtb2Rlcm4nXG4gICAgICB9XCJcbiAgICAgIChjbGljayk9XCJkZWxldGVGaWxlQXR0YWNobWVudCgpXCJcbiAgICAgICNkZWxldGVCdXR0b249XCJza3lJZFwiXG4gICAgPlxuICAgICAgPHNreS1pY29uIGljb249XCJ0cmFzaC1vXCIgc2l6ZT1cIm1kXCIgLz5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPGltZ1xuICAgICpuZ0lmPVwidmFsdWUgJiYgaXNJbWFnZVwiXG4gICAgY2xhc3M9XCJza3ktZmlsZS1hdHRhY2htZW50LXByZXZpZXctaW1nXCJcbiAgICBbYWx0XT1cIlxuICAgICAgJ3NreXV4X2ZpbGVfYXR0YWNobWVudF9maWxlX3VwbG9hZF9pbWFnZV9wcmV2aWV3X2FsdF90ZXh0J1xuICAgICAgICB8IHNreUxpYlJlc291cmNlc1xuICAgIFwiXG4gICAgW3NyY109XCJ2YWx1ZS51cmxcIlxuICAvPlxuPC9kaXY+XG48ZGl2IHNreUlkICNoaW50VGV4dEVsPVwic2t5SWRcIj5cbiAgPGRpdlxuICAgICpuZ0lmPVwiaGludFRleHRcIlxuICAgIGNsYXNzPVwic2t5LWZvbnQtZGVlbXBoYXNpemVkIHNreS1maWxlLWF0dGFjaG1lbnQtaGludC10ZXh0XCJcbiAgPlxuICAgIHt7IGhpbnRUZXh0IH19XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxza3ktZm9ybS1lcnJvcnNcbiAgKm5nSWY9XCJsYWJlbFRleHQgJiYgKG5nQ29udHJvbD8uY29udHJvbD8uZXJyb3JzIHx8IGZpbGVFcnJvclZhbGlkYXRpb24pXCJcbiAgW2lkXT1cImVycm9ySWRcIlxuICBbZXJyb3JzXT1cIlxuICAgIG5nQ29udHJvbD8uZXJyb3JzICE9PSBudWxsID8gbmdDb250cm9sPy5lcnJvcnMgOiBmaWxlRXJyb3JWYWxpZGF0aW9uXG4gIFwiXG4gIFtsYWJlbFRleHRdPVwibGFiZWxUZXh0XCJcbiAgW3Nob3dFcnJvcnNdPVwibmdDb250cm9sPy50b3VjaGVkIHx8IG5nQ29udHJvbD8uZGlydHlcIlxuPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJza3ktZm9ybS1lcnJvclwiIC8+XG4gIDxza3ktZm9ybS1lcnJvclxuICAgICpuZ0lmPVwiZmlsZUVycm9yTmFtZSA9PT0gJ2ZpbGVUeXBlJ1wiXG4gICAgW2Vycm9yTmFtZV09XCInZmlsZVR5cGUnXCJcbiAgICBbZXJyb3JUZXh0XT1cIlxuICAgICAgJ3NreXV4X2ZpbGVfYXR0YWNobWVudF9maWxlX3R5cGVfZXJyb3JfbGFiZWxfdGV4dCdcbiAgICAgICAgfCBza3lMaWJSZXNvdXJjZXM6IGZpbGVFcnJvclBhcmFtXG4gICAgXCJcbiAgLz5cbiAgPHNreS1mb3JtLWVycm9yXG4gICAgKm5nSWY9XCJmaWxlRXJyb3JOYW1lID09PSAnbWF4RmlsZVNpemUnXCJcbiAgICBbZXJyb3JOYW1lXT1cIidtYXhGaWxlU2l6ZSdcIlxuICAgIFtlcnJvclRleHRdPVwiXG4gICAgICAnc2t5dXhfZmlsZV9hdHRhY2htZW50X21heF9maWxlX3NpemVfZXJyb3JfbGFiZWxfdGV4dCdcbiAgICAgICAgfCBza3lMaWJSZXNvdXJjZXM6IChmaWxlRXJyb3JQYXJhbSB8IHNreUZpbGVTaXplKVxuICAgIFwiXG4gIC8+XG4gIDxza3ktZm9ybS1lcnJvclxuICAgICpuZ0lmPVwiZmlsZUVycm9yTmFtZSA9PT0gJ21pbkZpbGVTaXplJ1wiXG4gICAgW2Vycm9yTmFtZV09XCInbWluRmlsZVNpemUnXCJcbiAgICBbZXJyb3JUZXh0XT1cIlxuICAgICAgJ3NreXV4X2ZpbGVfYXR0YWNobWVudF9taW5fZmlsZV9zaXplX2Vycm9yX2xhYmVsX3RleHQnXG4gICAgICAgIHwgc2t5TGliUmVzb3VyY2VzOiAoZmlsZUVycm9yUGFyYW0gfCBza3lGaWxlU2l6ZSlcbiAgICBcIlxuICAvPlxuPC9za3ktZm9ybS1lcnJvcnM+XG5cbjxuZy10ZW1wbGF0ZSAjbGFiZWxDb250ZW50PlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJza3ktZmlsZS1hdHRhY2htZW50LWxhYmVsXCIgLz5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
471
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1hdHRhY2htZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9mb3Jtcy9zcmMvbGliL21vZHVsZXMvZmlsZS1hdHRhY2htZW50L2ZpbGUtYXR0YWNobWVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZm9ybXMvc3JjL2xpYi9tb2R1bGVzL2ZpbGUtYXR0YWNobWVudC9maWxlLWF0dGFjaG1lbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsZUFBZSxFQUVmLFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBRU4sSUFBSSxFQUVKLFNBQVMsRUFDVCxnQkFBZ0IsRUFDaEIsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFDTCxlQUFlLEVBQ2YsWUFBWSxFQUNaLHVCQUF1QixHQUN4QixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHckQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBRXhHLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7Ozs7OztBQVFyRSxJQUFJLFFBQVEsR0FBRyxDQUFDLENB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UyxFQUFFLGdCQUFnQixFQUFFOztzQkFDckMsV0FBVzt1QkFBQyw2QkFBNkI7Z0JBUW5DLFVBQVU7c0JBRGhCLEtBQUs7Z0JBT0MsVUFBVTtzQkFEaEIsTUFBTTtnQkFRQSxTQUFTO3NCQURmLE1BQU07Z0JBcUJBLFFBQVE7c0JBRGQsS0FBSztnQkFJQyxPQUFPO3NCQURiLFdBQVc7dUJBQUMsZUFBZTtnQkFvQ3JCLE9BQU87c0JBRGIsU0FBUzt1QkFBQyxXQUFXO2dCQUlmLGVBQWU7c0JBRHJCLGVBQWU7dUJBQUMsK0JBQStCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFNlbGYsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ0NvbnRyb2wsIFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBTa3lGb3Jtc1V0aWxpdHksXG4gIFNreUlkU2VydmljZSxcbiAgU2t5TGl2ZUFubm91bmNlclNlcnZpY2UsXG59IGZyb20gJ0Bza3l1eC9jb3JlJztcbmltcG9ydCB7IFNreUxpYlJlc291cmNlc1NlcnZpY2UgfSBmcm9tICdAc2t5dXgvaTE4bic7XG5pbXBvcnQgeyBTa3lUaGVtZVNlcnZpY2UgfSBmcm9tICdAc2t5dXgvdGhlbWUnO1xuXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNLWV9GT1JNX0VSUk9SU19FTkFCTEVEIH0gZnJvbSAnLi4vZm9ybS1lcnJvci9mb3JtLWVycm9ycy1lbmFibGVkLXRva2VuJztcbmltcG9ydCB7IFNreUZvcm1GaWVsZExhYmVsVGV4dFJlcXVpcmVkU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9mb3JtLWZpZWxkLWxhYmVsLXRleHQtcmVxdWlyZWQuc2VydmljZSc7XG5cbmltcG9ydCB7IFNreUZpbGVBdHRhY2htZW50TGFiZWxDb21wb25lbnQgfSBmcm9tICcuL2ZpbGUtYXR0YWNobWVudC1sYWJlbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5RmlsZUF0dGFjaG1lbnRTZXJ2aWNlIH0gZnJvbSAnLi9maWxlLWF0dGFjaG1lbnQuc2VydmljZSc7XG5pbXBvcnQgeyBTa3lGaWxlSXRlbSB9IGZyb20gJy4vZmlsZS1pdGVtJztcbmltcG9ydCB7IFNreUZpbGVJdGVtRXJyb3JUeXBlIH0gZnJvbSAnLi9maWxlLWl0ZW0tZXJyb3ItdHlwZSc7XG5pbXBvcnQgeyBTa3lGaWxlSXRlbVNlcnZpY2UgfSBmcm9tICcuL2ZpbGUtaXRlbS5zZXJ2aWNlJztcbmltcG9ydCB7IFNreUZpbGVWYWxpZGF0ZUZuIH0gZnJvbSAnLi9maWxlLXZhbGlkYXRlLWZ1bmN0aW9uJztcbmltcG9ydCB7IFNreUZpbGVBdHRhY2htZW50Q2hhbmdlIH0gZnJvbSAnLi90eXBlcy9maWxlLWF0dGFjaG1lbnQtY2hhbmdlJztcbmltcG9ydCB7IFNreUZpbGVBdHRhY2htZW50Q2xpY2sgfSBmcm9tICcuL3R5cGVzL2ZpbGUtYXR0YWNobWVudC1jbGljayc7XG5cbmxldCB1bmlxdWVJZCA9IDA7XG5cbmNvbnN0IE1BWF9GSUxFX1NJWkVfREVGQVVMVCA9IDUwMDAwMDtcbmNvbnN0IE1JTl9GSUxFX1NJWkVfREVGQVVMVCA9IDA7XG5cbi8qKlxuICogUHJvdmlkZXMgYW4gZWxlbWVudCB0byBhdHRhY2ggYSBzaW5nbGUgbG9jYWwgZmlsZS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2t5LWZpbGUtYXR0YWNobWVudCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9maWxlLWF0dGFjaG1lbnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9maWxlLWF0dGFjaG1lbnQuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgU2t5RmlsZUF0dGFjaG1lbnRTZXJ2aWNlLFxuICAgIHsgcHJvdmlkZTogU0tZX0ZPUk1fRVJST1JTX0VOQUJMRUQsIHVzZVZhbHVlOiB0cnVlIH0sXG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lGaWxlQXR0YWNobWVudENvbXBvbmVudFxuICBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudEluaXQsIE9uSW5pdCwgT25EZXN0cm95XG57XG4gIC8qKlxuICAgKiBUaGUgY29tbWEtZGVsaW1pdGVkIHN0cmluZyBsaXRlcmFsIG9mIE1JTUUgdHlwZXMgdGhhdCB1c2VycyBjYW4gYXR0YWNoLlxuICAgKiBCeSBkZWZhdWx0LCBhbGwgZmlsZSB0eXBlcyBhcmUgYWxsb3dlZC5cbiAgICogQHJlcXVpcmVkXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgYWNjZXB0ZWRUeXBlczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBBIGN1c3RvbSBlcnJvciBtZXNzYWdlIHRvIGRpc3BsYXkgd2hlbiBhIGZpbGUgZG9lc24ndCBtYXRjaCB0aGUgYWNjZXB0ZWQgdHlwZXMuXG4gICAqIFRoaXMgcmVwbGFjZXMgYSBkZWZhdWx0IGVycm9yIG1lc3NhZ2UgdGhhdCBsaXN0cyBhbGwgYWNjZXB0ZWQgdHlwZXMuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgYWNjZXB0ZWRUeXBlc0Vycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGRpc2FibGUgdGhlIGlucHV0IG9uIHRlbXBsYXRlLWRyaXZlbiBmb3Jtcy4gRG9uJ3QgdXNlIHRoaXMgaW5wdXQgb24gcmVhY3RpdmUgZm9ybXMgYmVjYXVzZSB0aGV5IG1heSBvdmVyd3JpdGUgdGhlIGlucHV0IG9yIGxlYXZlIHRoZSBjb250cm9sIG91dCBvZiBzeW5jLlxuICAgKiBUbyBzZXQgdGhlIGRpc2FibGVkIHN0YXRlIG9uIHJlYWN0aXZlIGZvcm1zLCB1c2UgdGhlIGBGb3JtQ29udHJvbGAgaW5zdGVhZC5cbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBwdWJsaWMgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGhlbHAgcG9wb3Zlci4gV2hlbiBzcGVjaWZpZWQgYWxvbmcgd2l0aCBgbGFiZWxUZXh0YCwgYSBbaGVscCBpbmxpbmVdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9oZWxwLWlubGluZSlcbiAgICogYnV0dG9uIGlzIGFkZGVkIHRvIHRoZSBzaW5nbGUgZmlsZSBhdHRhY2htZW50IGxhYmVsLiBUaGUgaGVscCBpbmxpbmUgYnV0dG9uIGRpc3BsYXlzIGEgW3BvcG92ZXJdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9wb3BvdmVyKVxuICAgKiB3aGVuIGNsaWNrZWQgdXNpbmcgdGhlIHNwZWNpZmllZCBjb250ZW50IGFuZCBvcHRpb25hbCB0aXRsZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoZWxwUG9wb3ZlckNvbnRlbnQ6IHN0cmluZyB8IFRlbXBsYXRlUmVmPHVua25vd24+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgdGl0bGUgb2YgdGhlIGhlbHAgcG9wb3Zlci4gVGhpcyBwcm9wZXJ0eSBvbmx5IGFwcGxpZXMgd2hlbiBgaGVscFBvcG92ZXJDb250ZW50YCBpc1xuICAgKiBhbHNvIHNwZWNpZmllZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoZWxwUG9wb3ZlclRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEEgaGVscCBrZXkgdGhhdCBpZGVudGlmaWVzIHRoZSBnbG9iYWwgaGVscCBjb250ZW50IHRvIGRpc3BsYXkuIFdoZW4gc3BlY2lmaWVkLCBhIFtoZWxwIGlubGluZV0oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9jb21wb25lbnRzL2hlbHAtaW5saW5lKVxuICAgKiBidXR0b24gaXMgcGxhY2VkIGJlc2lkZSB0aGUgc2luZ2xlIGZpbGUgYXR0YWNobWVudCBsYWJlbC4gQ2xpY2tpbmcgdGhlIGJ1dHRvbiBpbnZva2VzIFtnbG9iYWwgaGVscF0oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9sZWFybi9kZXZlbG9wL2dsb2JhbC1oZWxwKVxuICAgKiBhcyBjb25maWd1cmVkIGJ5IHRoZSBhcHBsaWNhdGlvbi5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoZWxwS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IHRvIGRpc3BsYXkgYXMgdGhlIGZpbGUgYXR0YWNobWVudCdzIGxhYmVsLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGxhYmVsVGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGhpZGUgYGxhYmVsVGV4dGAgZnJvbSB2aWV3LlxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIHB1YmxpYyBsYWJlbEhpZGRlbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBbUGVyc2lzdGVudCBpbmxpbmUgaGVscCB0ZXh0XShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2Rlc2lnbi9ndWlkZWxpbmVzL3VzZXItYXNzaXN0YW5jZSNpbmxpbmUtaGVscCkgdGhhdCBwcm92aWRlc1xuICAgKiBhZGRpdGlvbmFsIGNvbnRleHQgdG8gdGhlIHVzZXIuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGludFRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gc2l6ZSBpbiBieXRlcyBmb3IgdmFsaWQgZmlsZXMuXG4gICAqIEBkZWZhdWx0IDUwMDAwMFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtYXhGaWxlU2l6ZSh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX21heEZpbGVTaXplID0gdmFsdWUgPz8gTUFYX0ZJTEVfU0laRV9ERUZBVUxUO1xuICB9XG5cbiAgcHVibGljIGdldCBtYXhGaWxlU2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLiNfbWF4RmlsZVNpemU7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG1pbmltdW0gc2l6ZSBpbiBieXRlcyBmb3IgdmFsaWQgZmlsZXMuXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbWluRmlsZVNpemUodmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19taW5GaWxlU2l6ZSA9IHZhbHVlID8/IE1JTl9GSUxFX1NJWkVfREVGQVVMVDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbWluRmlsZVNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy4jX21pbkZpbGVTaXplO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHNpbmdsZSBmaWxlIGF0dGFjaG1lbnQgaXMgc3RhY2tlZCBvbiBhbm90aGVyIGZvcm0gY29tcG9uZW50LiBXaGVuIHNwZWNpZmllZCxcbiAgICogdGhlIGFwcHJvcHJpYXRlIHZlcnRpY2FsIHNwYWNpbmcgaXMgYXV0b21hdGljYWxseSBhZGRlZCB0byB0aGUgc2luZ2xlIGZpbGUgYXR0YWNobWVudC5cbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNreS1tYXJnaW4tc3RhY2tlZC1sZycpXG4gIHB1YmxpYyBzdGFja2VkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSBjdXN0b20gdmFsaWRhdGlvbiBmdW5jdGlvbi4gVGhpcyB2YWxpZGF0aW9uIHJ1bnMgYWxvbmdzaWRlIHRoZSBpbnRlcm5hbFxuICAgKiBmaWxlIHZhbGlkYXRpb24uIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBgU2t5RmlsZUl0ZW1gIG9iamVjdCBhcyBhIHBhcmFtZXRlci5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB2YWxpZGF0ZUZuOiBTa3lGaWxlVmFsaWRhdGVGbiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB1c2VycyBhZGQgb3IgcmVtb3ZlIGZpbGVzLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBmaWxlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxTa3lGaWxlQXR0YWNobWVudENoYW5nZT4oKTtcblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB1c2VycyBzZWxlY3QgdGhlIGZpbGUgbmFtZSBsaW5rLiBNYWtlIHN1cmUgdG8gYmluZCB0aGUgZXZlbnQuXG4gICAqIElmIHlvdSBkbyBub3QsIHRoZSBmaWxlIG5hbWUgbGluayB3aWxsIGJlIGEgZGVhZCBsaW5rLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBmaWxlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPFNreUZpbGVBdHRhY2htZW50Q2xpY2s+KCk7XG5cbiAgcHVibGljIGFjY2VwdGVkT3ZlciA9IGZhbHNlO1xuXG4gIHB1YmxpYyBoYXNMYWJlbENvbXBvbmVudCA9IGZhbHNlO1xuXG4gIHB1YmxpYyBmaWxlRHJvcERlc2NyaXB0aW9uRWxlbWVudElkOiBzdHJpbmc7XG5cbiAgcHVibGljIGxhYmVsRWxlbWVudElkOiBzdHJpbmc7XG5cbiAgcHVibGljIHJlamVjdGVkT3ZlciA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBpbnB1dCBpcyByZXF1aXJlZCBmb3IgZm9ybSB2YWxpZGF0aW9uLlxuICAgKiBXaGVuIHlvdSBzZXQgdGhpcyBwcm9wZXJ0eSB0byBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgYWRkcyBgYXJpYS1yZXF1aXJlZGAgYW5kIGByZXF1aXJlZGBcbiAgICogYXR0cmlidXRlcyB0byB0aGUgaW5wdXQgZWxlbWVudCBzbyB0aGF0IGZvcm1zIGRpc3BsYXkgYW4gaW52YWxpZCBzdGF0ZSB1bnRpbCB0aGUgaW5wdXQgZWxlbWVudFxuICAgKiBpcyBjb21wbGV0ZS5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGBhcmlhLXJlcXVpcmVkYCBhdHRyaWJ1dGUsIHNlZSB0aGUgW1dBSS1BUklBIGRlZmluaXRpb25dKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS8jYXJpYS1yZXF1aXJlZCkuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgcmVxdWlyZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcblxuICBASG9zdEJpbmRpbmcoJ3N0eWxlLmRpc3BsYXknKVxuICBwdWJsaWMgZGlzcGxheTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IFNreUZpbGVJdGVtIHwgdW5kZWZpbmVkIHwgbnVsbCkge1xuICAgIC8vIFRoZSBudWxsIGNoZWNrIGlzIG5lZWRlZCB0byBhZGRyZXNzIGEgYnVnIGluIEFuZ3VsYXIgNC5cbiAgICAvLyB3cml0ZVZhbHVlIGlzIGJlaW5nIGNhbGxlZCB0d2ljZSwgZmlyc3QgdGltZSB3aXRoIGEgcGhhbnRvbSBudWxsIHZhbHVlXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xNDk4OFxuICAgIGNvbnN0IGlzTmV3VmFsdWUgPSB2YWx1ZSAhPT0gdGhpcy52YWx1ZSAmJiB2YWx1ZSAhPT0gbnVsbDtcblxuICAgIGlmIChpc05ld1ZhbHVlKSB7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5pc0ltYWdlID0gdGhpcy4jZmlsZUl0ZW1TZXJ2aWNlLmlzSW1hZ2UodmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pc0ltYWdlID0gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLiNzZXRGaWxlTmFtZSh2YWx1ZSk7XG5cbiAgICAgIHRoaXMuI192YWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy4jb25DaGFuZ2UodmFsdWUpO1xuICAgICAgdGhpcy4jdXBkYXRlRmlsZUF0dGFjaG1lbnRCdXR0b24oKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IFNreUZpbGVJdGVtIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX3ZhbHVlO1xuICB9XG5cbiAgcHVibGljIGN1cnJlbnRUaGVtZU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgZmlsZU5hbWUgPSAnJztcblxuICBwdWJsaWMgc2hvd0ZpbGVBdHRhY2htZW50QnV0dG9uID0gdHJ1ZTtcblxuICBwdWJsaWMgdHJ1bmNhdGVkRmlsZU5hbWUgPSAnJztcblxuICBAVmlld0NoaWxkKCdmaWxlSW5wdXQnKVxuICBwdWJsaWMgaW5wdXRFbDogRWxlbWVudFJlZiB8IHVuZGVmaW5lZDtcblxuICBAQ29udGVudENoaWxkcmVuKFNreUZpbGVBdHRhY2htZW50TGFiZWxDb21wb25lbnQpXG4gIHB1YmxpYyBsYWJlbENvbXBvbmVudHM6XG4gICAgfCBRdWVyeUxpc3Q8U2t5RmlsZUF0dGFjaG1lbnRMYWJlbENvbXBvbmVudD5cbiAgICB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgaXNJbWFnZSA9IGZhbHNlO1xuXG4gICNlbnRlckV2ZW50VGFyZ2V0OiBFdmVudFRhcmdldCB8IHVuZGVmaW5lZCB8IG51bGw7XG5cbiAgI2ZpbGVBdHRhY2htZW50SWQgPSB1bmlxdWVJZCsrO1xuXG4gICNuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAjX21heEZpbGVTaXplID0gTUFYX0ZJTEVfU0laRV9ERUZBVUxUO1xuXG4gICNfbWluRmlsZVNpemUgPSBNSU5fRklMRV9TSVpFX0RFRkFVTFQ7XG5cbiAgI192YWx1ZTogU2t5RmlsZUl0ZW0gfCB1bmRlZmluZWQ7XG5cbiAgI2NoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZjtcbiAgI2ZpbGVBdHRhY2htZW50U2VydmljZTogU2t5RmlsZUF0dGFjaG1lbnRTZXJ2aWNlO1xuICAjZmlsZUl0ZW1TZXJ2aWNlOiBTa3lGaWxlSXRlbVNlcnZpY2U7XG4gICN0aGVtZVN2YzogU2t5VGhlbWVTZXJ2aWNlIHwgdW5kZWZpbmVkO1xuXG4gIHJlYWRvbmx5ICNpZFN2YyA9IGluamVjdChTa3lJZFNlcnZpY2UpO1xuICByZWFkb25seSAjbGl2ZUFubm91bmNlclN2YyA9IGluamVjdChTa3lMaXZlQW5ub3VuY2VyU2VydmljZSk7XG4gIHJlYWRvbmx5ICNyZXNvdXJjZXNTdmMgPSBpbmplY3QoU2t5TGliUmVzb3VyY2VzU2VydmljZSk7XG5cbiAgcmVhZG9ubHkgI2xhYmVsVGV4dFJlcXVpcmVkID0gaW5qZWN0KFNreUZvcm1GaWVsZExhYmVsVGV4dFJlcXVpcmVkU2VydmljZSwge1xuICAgIG9wdGlvbmFsOiB0cnVlLFxuICB9KTtcblxuICBwcm90ZWN0ZWQgbmdDb250cm9sOiBOZ0NvbnRyb2wgfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCBlcnJvcklkID0gdGhpcy4jaWRTdmMuZ2VuZXJhdGVJZCgpO1xuXG4gIHByb3RlY3RlZCBmaWxlRXJyb3JOYW1lOiBTa3lGaWxlSXRlbUVycm9yVHlwZSB8IHVuZGVmaW5lZDtcbiAgcHJvdGVjdGVkIGZpbGVFcnJvclBhcmFtOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCBmaWxlRXJyb3JWYWxpZGF0aW9uOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgZmlsZUF0dGFjaG1lbnRTZXJ2aWNlOiBTa3lGaWxlQXR0YWNobWVudFNlcnZpY2UsXG4gICAgZmlsZUl0ZW1TZXJ2aWNlOiBTa3lGaWxlSXRlbVNlcnZpY2UsXG4gICAgQFNlbGYoKSBAT3B0aW9uYWwoKSBuZ0NvbnRyb2w/OiBOZ0NvbnRyb2wsXG4gICAgQE9wdGlvbmFsKCkgdGhlbWVTdmM/OiBTa3lUaGVtZVNlcnZpY2UsXG4gICkge1xuICAgIHRoaXMuI2NoYW5nZURldGVjdG9yID0gY2hhbmdlRGV0ZWN0b3I7XG4gICAgdGhpcy4jZmlsZUF0dGFjaG1lbnRTZXJ2aWNlID0gZmlsZUF0dGFjaG1lbnRTZXJ2aWNlO1xuICAgIHRoaXMuI2ZpbGVJdGVtU2VydmljZSA9IGZpbGVJdGVtU2VydmljZTtcbiAgICB0aGlzLm5nQ29udHJvbCA9IG5nQ29udHJvbDtcbiAgICB0aGlzLiN0aGVtZVN2YyA9IHRoZW1lU3ZjO1xuXG4gICAgdGhpcy5sYWJlbEVsZW1lbnRJZCA9IGBza3ktZmlsZS1hdHRhY2htZW50LWxhYmVsLSR7dGhpcy4jZmlsZUF0dGFjaG1lbnRJZH1gO1xuICAgIHRoaXMuZmlsZURyb3BEZXNjcmlwdGlvbkVsZW1lbnRJZCA9IGBza3ktZmlsZS1hdHRhY2htZW50LWRyb3AtZGVzY3JpcHRpb24tJHt0aGlzLiNmaWxlQXR0YWNobWVudElkfWA7XG4gICAgaWYgKHRoaXMubmdDb250cm9sKSB7XG4gICAgICB0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI3RoZW1lU3ZjKSB7XG4gICAgICB0aGlzLiN0aGVtZVN2Yy5zZXR0aW5nc0NoYW5nZVxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHRoZW1lU2V0dGluZ3MpID0+IHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRUaGVtZU5hbWUgPSB0aGVtZVNldHRpbmdzLmN1cnJlbnRTZXR0aW5ncy50aGVtZS5uYW1lO1xuICAgICAgICAgIHRoaXMuI3VwZGF0ZUZpbGVBdHRhY2htZW50QnV0dG9uKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLiNsYWJlbFRleHRSZXF1aXJlZCAmJiAhdGhpcy5sYWJlbFRleHQpIHtcbiAgICAgIHRoaXMuZGlzcGxheSA9ICdub25lJztcbiAgICB9XG4gICAgdGhpcy4jbGFiZWxUZXh0UmVxdWlyZWQ/LnZhbGlkYXRlTGFiZWxUZXh0KHRoaXMubGFiZWxUZXh0KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgLy8gVGhpcyBpcyBuZWVkZWQgdG8gYWRkcmVzcyBhIGJ1ZyBpbiBBbmd1bGFyIDcuXG4gICAgLy8gV2hlbiBhIGNvbnRyb2wgdmFsdWUgaXMgc2V0IGluaXRpYWxseSwgaXRzIHZhbHVlIGlzIG5vdCByZXByZXNlbnRlZCBvbiB0aGUgdmlldy5cbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzEzNzkyXG4gICAgLy8gT2Ygbm90ZSBpcyB0aGUgcGFyZW50IGNoZWNrIHdoaWNoIGFsbG93cyB1cyB0byBkZXRlcm1pbmUgaWYgdGhlIGZvcm0gaXMgcmVhY3RpdmUuXG4gICAgLy8gV2l0aG91dCB0aGlzIGNoZWNrIHRoZXJlIGlzIGEgY2hhbmdlZCBiZWZvcmUgY2hlY2tlZCBlcnJvclxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMubmdDb250cm9sKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5uZ0NvbnRyb2whLmNvbnRyb2whLnNldFZhbHVlKHRoaXMudmFsdWUsIHtcbiAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5yZXF1aXJlZCA9XG4gICAgICAgIHRoaXMucmVxdWlyZWQgfHwgU2t5Rm9ybXNVdGlsaXR5Lmhhc1JlcXVpcmVkVmFsaWRhdGlvbih0aGlzLm5nQ29udHJvbCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5sYWJlbENvbXBvbmVudHMpIHtcbiAgICAgIHRoaXMuaGFzTGFiZWxDb21wb25lbnQgPSB0aGlzLmxhYmVsQ29tcG9uZW50cy5sZW5ndGggPiAwO1xuICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAvLyBIYW5kbGVzIHVwZGF0aW5nIGNsYXNzZXMgd2hlbiBsYWJlbCBjaGFuZ2VzXG4gICAgICB0aGlzLmxhYmVsQ29tcG9uZW50cy5jaGFuZ2VzXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAobmV3TGFiZWxDb21wb25lbnRzOiBRdWVyeUxpc3Q8U2t5RmlsZUF0dGFjaG1lbnRMYWJlbENvbXBvbmVudD4pID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGFzTGFiZWxDb21wb25lbnQgPSBuZXdMYWJlbENvbXBvbmVudHMubGVuZ3RoID4gMDtcbiAgICAgICAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uRHJvcENsaWNrZWQoKTogdm9pZCB7XG4gICAgdGhpcy4jb25Ub3VjaGVkKCk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy5pbnB1dEVsKSB7XG4gICAgICB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmaWxlQ2hhbmdlRXZlbnQoZmlsZUNoYW5nZUV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuI2hhbmRsZUZpbGVzKFxuICAgICAgKGZpbGVDaGFuZ2VFdmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCB8IHVuZGVmaW5lZCk/LmZpbGVzLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZmlsZURyYWdFbnRlcihkcmFnRW50ZXJFdmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgLy8gU2F2ZSB0aGlzIHRhcmdldCB0byBrbm93IHdoZW4gdGhlIGRyYWcgZXZlbnQgbGVhdmVzXG4gICAgdGhpcy4jZW50ZXJFdmVudFRhcmdldCA9IGRyYWdFbnRlckV2ZW50LnRhcmdldDtcbiAgICBkcmFnRW50ZXJFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBkcmFnRW50ZXJFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cbiAgcHVibGljIGZpbGVEcmFnT3ZlcihkcmFnT3ZlckV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0cmFuc2ZlciA9IGRyYWdPdmVyRXZlbnQuZGF0YVRyYW5zZmVyO1xuXG4gICAgZHJhZ092ZXJFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBkcmFnT3ZlckV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBpZiAodHJhbnNmZXIpIHtcbiAgICAgIGlmICh0cmFuc2Zlci5pdGVtcykge1xuICAgICAgICBjb25zdCBmaWxlcyA9IEFycmF5LmZyb20odHJhbnNmZXIuaXRlbXMpO1xuXG4gICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGZpbGUudHlwZSAmJlxuICAgICAgICAgICAgdGhpcy4jZmlsZUF0dGFjaG1lbnRTZXJ2aWNlLmZpbGVUeXBlUmVqZWN0ZWQoXG4gICAgICAgICAgICAgIGZpbGUudHlwZSxcbiAgICAgICAgICAgICAgdGhpcy5hY2NlcHRlZFR5cGVzLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5yZWplY3RlZE92ZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5hY2NlcHRlZE92ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsZXMubGVuZ3RoID4gMCAmJiAhdGhpcy5hY2NlcHRlZE92ZXIpIHtcbiAgICAgICAgICB0aGlzLnJlamVjdGVkT3ZlciA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuYWNjZXB0ZWRPdmVyID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0cmFuc2Zlci5maWxlcykge1xuICAgICAgICAvLyBJZiB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IERhdGFUcmFuc2Zlci5pdGVtcyxcbiAgICAgICAgLy8gZGVmZXIgZmlsZS10eXBlIGNoZWNraW5nIHRvIGRyb3AgaGFuZGxlci5cbiAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RhdGFUcmFuc2Zlci9pdGVtcyNCcm93c2VyX2NvbXBhdGliaWxpdHlcbiAgICAgICAgdGhpcy5yZWplY3RlZE92ZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hY2NlcHRlZE92ZXIgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmaWxlRHJvcChkcm9wRXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIGRyb3BFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBkcm9wRXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIHRoaXMuI2VudGVyRXZlbnRUYXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5yZWplY3RlZE92ZXIgPSBmYWxzZTtcbiAgICB0aGlzLmFjY2VwdGVkT3ZlciA9IGZhbHNlO1xuXG4gICAgaWYgKGRyb3BFdmVudC5kYXRhVHJhbnNmZXIgJiYgZHJvcEV2ZW50LmRhdGFUcmFuc2Zlci5maWxlcykge1xuICAgICAgaWYgKGRyb3BFdmVudC5kYXRhVHJhbnNmZXIuZmlsZXMubGVuZ3RoID4gMSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy4jZmlsZUF0dGFjaG1lbnRTZXJ2aWNlLmhhc0RpcmVjdG9yeShkcm9wRXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy4jaGFuZGxlRmlsZXMoZHJvcEV2ZW50LmRhdGFUcmFuc2Zlci5maWxlcyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZpbGVEcmFnTGVhdmUoZHJhZ0xlYXZlRXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLiNlbnRlckV2ZW50VGFyZ2V0ID09PSBkcmFnTGVhdmVFdmVudC50YXJnZXQpIHtcbiAgICAgIHRoaXMucmVqZWN0ZWRPdmVyID0gZmFsc2U7XG4gICAgICB0aGlzLmFjY2VwdGVkT3ZlciA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBkZWxldGVGaWxlQXR0YWNobWVudCgpOiB2b2lkIHtcbiAgICBjb25zdCBmaWxlTmFtZSA9IHRoaXMudmFsdWU/LmZpbGUubmFtZTtcbiAgICB0aGlzLnZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuI2VtaXRGaWxlQ2hhbmdlRXZlbnQodGhpcy52YWx1ZSk7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogc2FmZXR5IGNoZWNrICovXG4gICAgaWYgKGZpbGVOYW1lKSB7XG4gICAgICB0aGlzLiNhbm5vdW5jZVN0YXRlKFxuICAgICAgICAnc2t5dXhfZmlsZV9hdHRhY2htZW50X2ZpbGVfdXBsb2FkX2ZpbGVfcmVtb3ZlZCcsXG4gICAgICAgIGZpbGVOYW1lLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmZpbGVDaGFuZ2UuY29tcGxldGUoKTtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBhbnkpID0+IGFueSk6IHZvaWQge1xuICAgIHRoaXMuI29uQ2hhbmdlID0gZm47XG4gIH1cbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLiNvblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIFNldHMgdGhlIGRpc2FibGVkIHN0YXRlIG9mIHRoZSBjb250cm9sLiBJbXBsZW1lbnRlZCBhcyBhIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gICAqIEBwYXJhbSBpc0Rpc2FibGVkIFdoZXRoZXIgdGhlIGNvbnRyb2wgc2hvdWxkIGJlIGRpc2FibGVkLlxuICAgKi9cbiAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHVibGljIGVtaXRDbGljaygpOiB2b2lkIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICB0aGlzLmZpbGVDbGljay5lbWl0KHtcbiAgICAgICAgZmlsZTogdGhpcy52YWx1ZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gICNhbm5vdW5jZVN0YXRlKHJlc291cmNlU3RyaW5nOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgdGhpcy4jcmVzb3VyY2VzU3ZjXG4gICAgICAuZ2V0U3RyaW5nKHJlc291cmNlU3RyaW5nLCAuLi5hcmdzKVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKGludGVybmF0aW9uYWxpemVkU3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMuI2xpdmVBbm5vdW5jZXJTdmMuYW5ub3VuY2UoaW50ZXJuYXRpb25hbGl6ZWRTdHJpbmcpO1xuICAgICAgfSk7XG4gIH1cblxuICAjZW1pdEZpbGVDaGFuZ2VFdmVudChjdXJyZW50RmlsZT86IFNreUZpbGVJdGVtKTogdm9pZCB7XG4gICAgaWYgKGN1cnJlbnRGaWxlICYmICFjdXJyZW50RmlsZS5lcnJvclR5cGUpIHtcbiAgICAgIHRoaXMud3JpdGVWYWx1ZShjdXJyZW50RmlsZSk7XG4gICAgICB0aGlzLmZpbGVFcnJvck5hbWUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmZpbGVFcnJvclBhcmFtID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5maWxlRXJyb3JWYWxpZGF0aW9uID0gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndyaXRlVmFsdWUodW5kZWZpbmVkKTtcbiAgICAgIC8vIE1ha2VzIHN1cmUgdmFsdWUgYWNjZXNzb3IgaXMgbWFya2VkIGFzIGRpcnR5IGV2ZW4gaWYgY3VycmVudCBmaWxlIGlzIHVuZGVmaW5lZFxuICAgICAgdGhpcy4jb25DaGFuZ2UodW5kZWZpbmVkKTtcbiAgICAgIHRoaXMuZmlsZUVycm9yVmFsaWRhdGlvbiA9IHsgZmlsZUVycm9yOiB0cnVlIH07XG4gICAgICB0aGlzLmZpbGVFcnJvck5hbWUgPSBjdXJyZW50RmlsZT8uZXJyb3JUeXBlO1xuICAgICAgdGhpcy5maWxlRXJyb3JQYXJhbSA9IGN1cnJlbnRGaWxlPy5lcnJvclBhcmFtO1xuICAgIH1cbiAgICB0aGlzLmZpbGVDaGFuZ2UuZW1pdCh7XG4gICAgICBmaWxlOiBjdXJyZW50RmlsZSxcbiAgICB9IGFzIFNreUZpbGVBdHRhY2htZW50Q2hhbmdlKTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMuaW5wdXRFbCkge1xuICAgICAgdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICB9XG4gIH1cblxuICAjbG9hZEZpbGUoZmlsZTogU2t5RmlsZUl0ZW0pOiB2b2lkIHtcbiAgICBpZiAoZmlsZS5maWxlKSB7XG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXG4gICAgICByZWFkZXIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIChldmVudDogYW55KTogdm9pZCA9PiB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzRmlsZU5hbWUgPSB0aGlzLnZhbHVlPy5maWxlLm5hbWU7XG4gICAgICAgIGZpbGUudXJsID0gZXZlbnQudGFyZ2V0LnJlc3VsdDtcbiAgICAgICAgdGhpcy4jZW1pdEZpbGVDaGFuZ2VFdmVudChmaWxlKTtcbiAgICAgICAgaWYgKHByZXZpb3VzRmlsZU5hbWUpIHtcbiAgICAgICAgICB0aGlzLiNhbm5vdW5jZVN0YXRlKFxuICAgICAgICAgICAgJ3NreXV4X2ZpbGVfYXR0YWNobWVudF9maWxlX3VwbG9hZF9maWxlX3JlcGxhY2VkJyxcbiAgICAgICAgICAgIHByZXZpb3VzRmlsZU5hbWUsXG4gICAgICAgICAgICBmaWxlLmZpbGUubmFtZSxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuI2Fubm91bmNlU3RhdGUoXG4gICAgICAgICAgICAnc2t5dXhfZmlsZV9hdHRhY2htZW50X2ZpbGVfdXBsb2FkX2ZpbGVfYWRkZWQnLFxuICAgICAgICAgICAgZmlsZS5maWxlLm5hbWUsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJlYWRlci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsICgpOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy4jZW1pdEZpbGVDaGFuZ2VFdmVudChmaWxlKTtcbiAgICAgIH0pO1xuXG4gICAgICByZWFkZXIuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuI2VtaXRGaWxlQ2hhbmdlRXZlbnQoZmlsZSk7XG4gICAgICB9KTtcblxuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZS5maWxlKTtcbiAgICB9XG4gIH1cblxuICAjaGFuZGxlRmlsZXMoZmlsZXM/OiBGaWxlTGlzdCB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoZmlsZXMpIHtcbiAgICAgIGNvbnN0IHByb2Nlc3NlZEZpbGVzID0gdGhpcy4jZmlsZUF0dGFjaG1lbnRTZXJ2aWNlLmNoZWNrRmlsZXMoXG4gICAgICAgIGZpbGVzLFxuICAgICAgICB0aGlzLm1pbkZpbGVTaXplLFxuICAgICAgICB0aGlzLm1heEZpbGVTaXplLFxuICAgICAgICB0aGlzLmFjY2VwdGVkVHlwZXMsXG4gICAgICAgIHRoaXMudmFsaWRhdGVGbixcbiAgICAgICk7XG5cbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBwcm9jZXNzZWRGaWxlcykge1xuICAgICAgICBpZiAoZmlsZS5lcnJvclR5cGUpIHtcbiAgICAgICAgICB0aGlzLiNlbWl0RmlsZUNoYW5nZUV2ZW50KGZpbGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuI2xvYWRGaWxlKGZpbGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgI3NldEZpbGVOYW1lKGZpbGU/OiBTa3lGaWxlSXRlbSk6IHZvaWQge1xuICAgIGlmIChmaWxlKSB7XG4gICAgICBjb25zdCBkcm9wTmFtZSA9XG4gICAgICAgIHRoaXMuI2ZpbGVJdGVtU2VydmljZS5pc0ZpbGUoZmlsZSkgJiYgZmlsZS5maWxlLm5hbWVcbiAgICAgICAgICA/IGZpbGUuZmlsZS5uYW1lXG4gICAgICAgICAgOiBmaWxlLnVybDtcblxuICAgICAgdGhpcy5maWxlTmFtZSA9IGRyb3BOYW1lO1xuXG4gICAgICBpZiAoZHJvcE5hbWUubGVuZ3RoID4gMjYpIHtcbiAgICAgICAgdGhpcy50cnVuY2F0ZWRGaWxlTmFtZSA9IGRyb3BOYW1lLnNsaWNlKDAsIDI2KSArICcuLi4nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50cnVuY2F0ZWRGaWxlTmFtZSA9IGRyb3BOYW1lO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbGVOYW1lID0gJyc7XG4gICAgICB0aGlzLnRydW5jYXRlZEZpbGVOYW1lID0gJyc7XG4gICAgfVxuICB9XG5cbiAgI3VwZGF0ZUZpbGVBdHRhY2htZW50QnV0dG9uKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0ZpbGVBdHRhY2htZW50QnV0dG9uID0gIShcbiAgICAgIHRoaXMudmFsdWUgJiYgdGhpcy5jdXJyZW50VGhlbWVOYW1lID09PSAnbW9kZXJuJ1xuICAgICk7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMsIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgI29uQ2hhbmdlID0gKF86IGFueSk6IHZvaWQgPT4ge1xuICAgIHJldHVybjtcbiAgfTtcbiAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAjb25Ub3VjaGVkID0gKCk6IHZvaWQgPT4ge1xuICAgIHJldHVybjtcbiAgfTtcbn1cbiIsIjxkaXYgY2xhc3M9XCJza3ktZmlsZS1hdHRhY2htZW50LXdyYXBwZXJcIj5cbiAgPGRpdlxuICAgIGNsYXNzPVwic2t5LWZpbGUtYXR0YWNobWVudC1sYWJlbC13cmFwcGVyXCJcbiAgICBbYXR0ci5pZF09XCJsYWJlbEVsZW1lbnRJZFwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgJ3NreS1jb250cm9sLWxhYmVsLXJlcXVpcmVkJzogIWxhYmVsVGV4dCAmJiByZXF1aXJlZCAmJiBoYXNMYWJlbENvbXBvbmVudFxuICAgIH1cIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxhYmVsVGV4dDsgZWxzZSBsYWJlbENvbnRlbnRcIj5cbiAgICAgIDxzcGFuXG4gICAgICAgICpuZ0lmPVwiIWxhYmVsSGlkZGVuXCJcbiAgICAgICAgY2xhc3M9XCJza3ktY29udHJvbC1sYWJlbCBza3ktbWFyZ2luLWlubGluZS14c1wiXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAnc2t5LWNvbnRyb2wtbGFiZWwtcmVxdWlyZWQnOiByZXF1aXJlZFxuICAgICAgICB9XCJcbiAgICAgICAgPnt7IGxhYmVsVGV4dCB9fTwvc3BhblxuICAgICAgPjxza3ktaGVscC1pbmxpbmVcbiAgICAgICAgKm5nSWY9XCJoZWxwUG9wb3ZlckNvbnRlbnQgfHwgaGVscEtleVwiXG4gICAgICAgIFtsYWJlbFRleHRdPVwibGFiZWxUZXh0XCJcbiAgICAgICAgW2hlbHBLZXldPVwiaGVscEtleVwiXG4gICAgICAgIFtwb3BvdmVyVGl0bGVdPVwiaGVscFBvcG92ZXJUaXRsZVwiXG4gICAgICAgIFtwb3BvdmVyQ29udGVudF09XCJoZWxwUG9wb3ZlckNvbnRlbnRcIlxuICAgICAgLz5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8c3BhblxuICAgICAgY2xhc3M9XCJza3ktc2NyZWVuLXJlYWRlci1vbmx5XCJcbiAgICAgICpuZ0lmPVwicmVxdWlyZWQgJiYgKGhhc0xhYmVsQ29tcG9uZW50IHx8IGxhYmVsVGV4dClcIlxuICAgICAgPnt7ICdza3l1eF9maWxlX2F0dGFjaG1lbnRfcmVxdWlyZWQnIHwgc2t5TGliUmVzb3VyY2VzIH19PC9zcGFuXG4gICAgPlxuICA8L2Rpdj5cbiAgPGRpdlxuICAgIGNsYXNzPVwic2t5LWZpbGUtYXR0YWNobWVudC11cGxvYWQgc2t5LWZpbGUtYXR0YWNobWVudCBza3ktZmlsZS1hdHRhY2htZW50LXRhcmdldFwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgJ3NreS1maWxlLWF0dGFjaG1lbnQtYWNjZXB0JzogYWNjZXB0ZWRPdmVyLFxuICAgICAgJ3NreS1maWxlLWF0dGFjaG1lbnQtcmVqZWN0JzogcmVqZWN0ZWRPdmVyXG4gICAgfVwiXG4gICAgKGRyYWdlbnRlcik9XCJmaWxlRHJhZ0VudGVyKCRldmVudClcIlxuICAgIChkcmFnb3Zlcik9XCJmaWxlRHJhZ092ZXIoJGV2ZW50KVwiXG4gICAgKGRyYWdsZWF2ZSk9XCJmaWxlRHJhZ0xlYXZlKCRldmVudClcIlxuICAgIChkcm9wKT1cImZpbGVEcm9wKCRldmVudClcIlxuICA+XG4gICAgPGRpdlxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgIGNsYXNzPVwic2t5LXNjcmVlbi1yZWFkZXItb25seVwiXG4gICAgICByb2xlPVwidG9vbHRpcFwiXG4gICAgICBbYXR0ci5pZF09XCJmaWxlRHJvcERlc2NyaXB0aW9uRWxlbWVudElkXCJcbiAgICA+XG4gICAgICB7eyAnc2t5dXhfZmlsZV9hdHRhY2htZW50X2ZpbGVfdXBsb2FkX2RyYWdfb3JfY2xpY2snIHwgc2t5TGliUmVzb3VyY2VzIH19XG4gICAgPC9kaXY+XG4gICAgPGlucHV0XG4gICAgICBoaWRkZW5cbiAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgW2F0dHIuYWNjZXB0XT1cImFjY2VwdGVkVHlwZXMgfHwgbnVsbFwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgIChjaGFuZ2UpPVwiZmlsZUNoYW5nZUV2ZW50KCRldmVudClcIlxuICAgICAgI2ZpbGVJbnB1dFxuICAgIC8+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dGaWxlQXR0YWNobWVudEJ1dHRvblwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cInNob3dGaWxlQXR0YWNobWVudEJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwic2t5LWZpbGUtYXR0YWNobWVudC1idG4gc2t5LWJ0biBza3ktYnRuLWRlZmF1bHRcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgc2t5SWRcbiAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJcbiAgICAgICAgICAoaGludFRleHQgPyBoaW50VGV4dEVsLmlkICsgJyAnIDogJycpICsgZmlsZURyb3BEZXNjcmlwdGlvbkVsZW1lbnRJZFxuICAgICAgICBcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICA/ICgnc2t5dXhfZmlsZV9hdHRhY2htZW50X2J1dHRvbl9sYWJlbF9yZXBsYWNlX2ZpbGVfbGFiZWwnXG4gICAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzOiBmaWxlTmFtZSlcbiAgICAgICAgICAgIDogKCdza3l1eF9maWxlX2F0dGFjaG1lbnRfYnV0dG9uX2xhYmVsX2Nob29zZV9maWxlX2xhYmVsJ1xuICAgICAgICAgICAgICB8IHNreUxpYlJlc291cmNlcylcbiAgICAgICAgXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cIlxuICAgICAgICAgIGF0dGFjaEJ1dHRvbi5pZCArXG4gICAgICAgICAgJyAnICtcbiAgICAgICAgICAobGFiZWxUZXh0XG4gICAgICAgICAgICA/IGxhYmVsRWxlbWVudElkXG4gICAgICAgICAgICA6IGhhc0xhYmVsQ29tcG9uZW50XG4gICAgICAgICAgICAgID8gbGFiZWxDb21wb25lbnRzPy5nZXQoMCk/LmxhYmVsQ29udGVudElkPy5pZFxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZClcbiAgICAgICAgXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uRHJvcENsaWNrZWQoKVwiXG4gICAgICAgICNhdHRhY2hCdXR0b249XCJza3lJZFwiXG4gICAgICA+XG4gICAgICAgIDxza3ktaWNvbiBpY29uPVwiZm9sZGVyLW9wZW4tb1wiIC8+XG4gICAgICAgIHt7XG4gICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgID8gKCdza3l1eF9maWxlX2F0dGFjaG1lbnRfYnV0dG9uX2xhYmVsX3JlcGxhY2VfZmlsZSdcbiAgICAgICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXMpXG4gICAgICAgICAgICA6ICgnc2t5dXhfZmlsZV9hdHRhY2htZW50X2J1dHRvbl9sYWJlbF9jaG9vc2VfZmlsZSdcbiAgICAgICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXMpXG4gICAgICAgIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8c2t5LWljb25cbiAgICAgICpuZ0lmPVwidmFsdWUgJiYgIWlzSW1hZ2UgJiYgY3VycmVudFRoZW1lTmFtZSA9PT0gJ21vZGVybidcIlxuICAgICAgY2xhc3M9XCJza3ktZmlsZS1hdHRhY2htZW50LWljb24gc2t5LWRlZW1waGFzaXplZFwiXG4gICAgICBpY29uPVwiZmlsZS1vXCJcbiAgICAgIHNpemU9XCIyeFwiXG4gICAgLz5cbiAgICA8c3BhblxuICAgICAgKm5nSWY9XCJ2YWx1ZSB8fCBjdXJyZW50VGhlbWVOYW1lID09PSAnZGVmYXVsdCdcIlxuICAgICAgY2xhc3M9XCJza3ktZmlsZS1hdHRhY2htZW50LW5hbWVcIlxuICAgID5cbiAgICAgIDxhXG4gICAgICAgICpuZ0lmPVwidmFsdWU7IGVsc2Ugbm9GaWxlXCJcbiAgICAgICAgW2F0dHIudGl0bGVdPVwiZmlsZU5hbWVcIlxuICAgICAgICAoY2xpY2spPVwiZW1pdENsaWNrKClcIlxuICAgICAgPlxuICAgICAgICB7eyB0cnVuY2F0ZWRGaWxlTmFtZSB9fVxuICAgICAgPC9hPlxuICAgIDwvc3Bhbj5cbiAgICA8bmctdGVtcGxhdGUgI25vRmlsZT5cbiAgICAgIDxzcGFuIGNsYXNzPVwic2t5LWZpbGUtYXR0YWNobWVudC1ub25lIHNreS1kZWVtcGhhc2l6ZWRcIj5cbiAgICAgICAge3sgJ3NreXV4X2ZpbGVfYXR0YWNobWVudF9sYWJlbF9ub19maWxlX2Nob3NlbicgfCBza3lMaWJSZXNvdXJjZXMgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwidmFsdWVcIlxuICAgICAgY2xhc3M9XCJza3ktYnRuIHNreS1idG4tYm9yZGVybGVzcyBza3ktZmlsZS1hdHRhY2htZW50LWRlbGV0ZVwiXG4gICAgICBza3lJZFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAnc2t5dXhfZmlsZV9hdHRhY2htZW50X2ZpbGVfaXRlbV9yZW1vdmUnIHwgc2t5TGliUmVzb3VyY2VzOiBmaWxlTmFtZVxuICAgICAgXCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJcbiAgICAgICAgZGVsZXRlQnV0dG9uLmlkICtcbiAgICAgICAgJyAnICtcbiAgICAgICAgKGhhc0xhYmVsQ29tcG9uZW50XG4gICAgICAgICAgPyBsYWJlbENvbXBvbmVudHM/LmdldCgwKT8ubGFiZWxDb250ZW50SWQ/LmlkXG4gICAgICAgICAgOiB1bmRlZmluZWQpXG4gICAgICBcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIFtza3lUaGVtZUNsYXNzXT1cIntcbiAgICAgICAgJ3NreS1idG4taWNvbi1ib3JkZXJsZXNzJzogJ21vZGVybidcbiAgICAgIH1cIlxuICAgICAgKGNsaWNrKT1cImRlbGV0ZUZpbGVBdHRhY2htZW50KClcIlxuICAgICAgI2RlbGV0ZUJ1dHRvbj1cInNreUlkXCJcbiAgICA+XG4gICAgICA8c2t5LWljb24gaWNvbj1cInRyYXNoLW9cIiBzaXplPVwibWRcIiAvPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8aW1nXG4gICAgKm5nSWY9XCJ2YWx1ZSAmJiBpc0ltYWdlXCJcbiAgICBjbGFzcz1cInNreS1maWxlLWF0dGFjaG1lbnQtcHJldmlldy1pbWdcIlxuICAgIFthbHRdPVwiXG4gICAgICAnc2t5dXhfZmlsZV9hdHRhY2htZW50X2ZpbGVfdXBsb2FkX2ltYWdlX3ByZXZpZXdfYWx0X3RleHQnXG4gICAgICAgIHwgc2t5TGliUmVzb3VyY2VzXG4gICAgXCJcbiAgICBbc3JjXT1cInZhbHVlLnVybFwiXG4gIC8+XG48L2Rpdj5cbjxkaXYgc2t5SWQgI2hpbnRUZXh0RWw9XCJza3lJZFwiPlxuICA8ZGl2XG4gICAgKm5nSWY9XCJoaW50VGV4dFwiXG4gICAgY2xhc3M9XCJza3ktZm9udC1kZWVtcGhhc2l6ZWQgc2t5LWZpbGUtYXR0YWNobWVudC1oaW50LXRleHRcIlxuICA+XG4gICAge3sgaGludFRleHQgfX1cbiAgPC9kaXY+XG48L2Rpdj5cblxuPHNreS1mb3JtLWVycm9yc1xuICAqbmdJZj1cImxhYmVsVGV4dCAmJiAobmdDb250cm9sPy5jb250cm9sPy5lcnJvcnMgfHwgZmlsZUVycm9yVmFsaWRhdGlvbilcIlxuICBbaWRdPVwiZXJyb3JJZFwiXG4gIFtlcnJvcnNdPVwiXG4gICAgbmdDb250cm9sPy5lcnJvcnMgIT09IG51bGwgPyBuZ0NvbnRyb2w/LmVycm9ycyA6IGZpbGVFcnJvclZhbGlkYXRpb25cbiAgXCJcbiAgW2xhYmVsVGV4dF09XCJsYWJlbFRleHRcIlxuICBbc2hvd0Vycm9yc109XCJuZ0NvbnRyb2w/LnRvdWNoZWQgfHwgbmdDb250cm9sPy5kaXJ0eVwiXG4+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cInNreS1mb3JtLWVycm9yXCIgLz5cbiAgPHNreS1mb3JtLWVycm9yXG4gICAgKm5nSWY9XCJmaWxlRXJyb3JOYW1lID09PSAnZmlsZVR5cGUnXCJcbiAgICBbZXJyb3JOYW1lXT1cIidmaWxlVHlwZSdcIlxuICAgIFtlcnJvclRleHRdPVwiXG4gICAgICBhY2NlcHRlZFR5cGVzRXJyb3JNZXNzYWdlID8/XG4gICAgICAgICdza3l1eF9maWxlX2F0dGFjaG1lbnRfZmlsZV90eXBlX2Vycm9yX2xhYmVsX3RleHQnXG4gICAgICAgIHwgc2t5TGliUmVzb3VyY2VzOiBmaWxlRXJyb3JQYXJhbVxuICAgIFwiXG4gIC8+XG4gIDxza3ktZm9ybS1lcnJvclxuICAgICpuZ0lmPVwiZmlsZUVycm9yTmFtZSA9PT0gJ21heEZpbGVTaXplJ1wiXG4gICAgW2Vycm9yTmFtZV09XCInbWF4RmlsZVNpemUnXCJcbiAgICBbZXJyb3JUZXh0XT1cIlxuICAgICAgJ3NreXV4X2ZpbGVfYXR0YWNobWVudF9tYXhfZmlsZV9zaXplX2Vycm9yX2xhYmVsX3RleHQnXG4gICAgICAgIHwgc2t5TGliUmVzb3VyY2VzOiAoZmlsZUVycm9yUGFyYW0gfCBza3lGaWxlU2l6ZSlcbiAgICBcIlxuICAvPlxuICA8c2t5LWZvcm0tZXJyb3JcbiAgICAqbmdJZj1cImZpbGVFcnJvck5hbWUgPT09ICdtaW5GaWxlU2l6ZSdcIlxuICAgIFtlcnJvck5hbWVdPVwiJ21pbkZpbGVTaXplJ1wiXG4gICAgW2Vycm9yVGV4dF09XCJcbiAgICAgICdza3l1eF9maWxlX2F0dGFjaG1lbnRfbWluX2ZpbGVfc2l6ZV9lcnJvcl9sYWJlbF90ZXh0J1xuICAgICAgICB8IHNreUxpYlJlc291cmNlczogKGZpbGVFcnJvclBhcmFtIHwgc2t5RmlsZVNpemUpXG4gICAgXCJcbiAgLz5cbjwvc2t5LWZvcm0tZXJyb3JzPlxuXG48bmctdGVtcGxhdGUgI2xhYmVsQ29udGVudD5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwic2t5LWZpbGUtYXR0YWNobWVudC1sYWJlbFwiIC8+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -22,7 +22,7 @@ export class SkyFileAttachmentService {
22
22
  }
23
23
  else if (this.fileTypeRejected(fileItem.file.type, acceptedTypes)) {
24
24
  fileItem.errorType = 'fileType';
25
- fileItem.errorParam = acceptedTypes;
25
+ fileItem.errorParam = this.#getAcceptedTypesList(acceptedTypes);
26
26
  fileResults.push(fileItem);
27
27
  }
28
28
  else if (validateFn) {
@@ -78,16 +78,26 @@ export class SkyFileAttachmentService {
78
78
  }
79
79
  return false;
80
80
  }
81
+ #getAcceptedTypesList(rawTypes) {
82
+ return rawTypes
83
+ ?.toUpperCase()
84
+ .split(',')
85
+ .map((type) => {
86
+ const subType = this.#getMimeSubtype(type);
87
+ return subType.startsWith('X-') ? subType.substr(2) : subType;
88
+ })
89
+ .join(', ');
90
+ }
81
91
  #getMimeSubtype(type) {
82
92
  return type.substr(type.indexOf('/') + 1, type.length);
83
93
  }
84
94
  #getMimeMainType(type) {
85
95
  return type.substr(0, type.indexOf('/'));
86
96
  }
87
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: SkyFileAttachmentService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
88
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: SkyFileAttachmentService }); }
97
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: SkyFileAttachmentService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
98
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: SkyFileAttachmentService }); }
89
99
  }
90
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: SkyFileAttachmentService, decorators: [{
100
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: SkyFileAttachmentService, decorators: [{
91
101
  type: Injectable
92
102
  }] });
93
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1hdHRhY2htZW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZm9ybXMvc3JjL2xpYi9tb2R1bGVzL2ZpbGUtYXR0YWNobWVudC9maWxlLWF0dGFjaG1lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQzs7R0FFRztBQUVILE1BQU0sT0FBTyx3QkFBd0I7SUFDNUIsVUFBVSxDQUNmLEtBQWUsRUFDZixXQUFtQixFQUNuQixXQUFtQixFQUNuQixhQUFzQixFQUN0QixVQUE4QjtRQUU5QixNQUFNLFdBQVcsR0FBa0IsRUFBRSxDQUFDO1FBRXRDLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDbEQsTUFBTSxRQUFRLEdBQUc7Z0JBQ2YsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2FBQ1QsQ0FBQztZQUVqQixJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsRUFBRSxDQUFDO2dCQUNyQyxRQUFRLENBQUMsU0FBUyxHQUFHLGFBQWEsQ0FBQztnQkFDbkMsUUFBUSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzdDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDN0IsQ0FBQztpQkFBTSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsRUFBRSxDQUFDO2dCQUM1QyxRQUFRLENBQUMsU0FBUyxHQUFHLGFBQWEsQ0FBQztnQkFDbkMsUUFBUSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzdDLFdBQVcs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LEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELGdCQUFnQixDQUFDLElBQVk7UUFDM0IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQzs4R0FuR1Usd0JBQXdCO2tIQUF4Qix3QkFBd0I7OzJGQUF4Qix3QkFBd0I7a0JBRHBDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFNreUZpbGVJdGVtIH0gZnJvbSAnLi9maWxlLWl0ZW0nO1xuaW1wb3J0IHsgU2t5RmlsZVZhbGlkYXRlRm4gfSBmcm9tICcuL2ZpbGUtdmFsaWRhdGUtZnVuY3Rpb24nO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2t5RmlsZUF0dGFjaG1lbnRTZXJ2aWNlIHtcbiAgcHVibGljIGNoZWNrRmlsZXMoXG4gICAgZmlsZXM6IEZpbGVMaXN0LFxuICAgIG1pbkZpbGVTaXplOiBudW1iZXIsXG4gICAgbWF4RmlsZVNpemU6IG51bWJlcixcbiAgICBhY2NlcHRlZFR5cGVzPzogc3RyaW5nLFxuICAgIHZhbGlkYXRlRm4/OiBTa3lGaWxlVmFsaWRhdGVGbixcbiAgKTogU2t5RmlsZUl0ZW1bXSB7XG4gICAgY29uc3QgZmlsZVJlc3VsdHM6IFNreUZpbGVJdGVtW10gPSBbXTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBmaWxlcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IGZpbGVJdGVtID0ge1xuICAgICAgICBmaWxlOiBmaWxlcy5pdGVtKGluZGV4KSxcbiAgICAgIH0gYXMgU2t5RmlsZUl0ZW07XG5cbiAgICAgIGlmIChmaWxlSXRlbS5maWxlLnNpemUgPCBtaW5GaWxlU2l6ZSkge1xuICAgICAgICBmaWxlSXRlbS5lcnJvclR5cGUgPSAnbWluRmlsZVNpemUnO1xuICAgICAgICBmaWxlSXRlbS5lcnJvclBhcmFtID0gbWluRmlsZVNpemUudG9TdHJpbmcoKTtcbiAgICAgICAgZmlsZVJlc3VsdHMucHVzaChmaWxlSXRlbSk7XG4gICAgICB9IGVsc2UgaWYgKGZpbGVJdGVtLmZpbGUuc2l6ZSA+IG1heEZpbGVTaXplKSB7XG4gICAgICAgIGZpbGVJdGVtLmVycm9yVHlwZSA9ICdtYXhGaWxlU2l6ZSc7XG4gICAgICAgIGZpbGVJdGVtLmVycm9yUGFyYW0gPSBtYXhGaWxlU2l6ZS50b1N0cmluZygpO1xuICAgICAgICBmaWxlUmVzdWx0cy5wdXNoKGZpbGVJdGVtKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5maWxlVHlwZVJlamVjdGVkKGZpbGVJdGVtLmZpbGUudHlwZSwgYWNjZXB0ZWRUeXBlcykpIHtcbiAgICAgICAgZmlsZUl0ZW0uZXJyb3JUeXBlID0gJ2ZpbGVUeXBlJztcbiAgICAgICAgZmlsZUl0ZW0uZXJyb3JQYXJhbSA9IGFjY2VwdGVkVHlwZXM7XG4gICAgICAgIGZpbGVSZXN1bHRzLnB1c2goZmlsZUl0ZW0pO1xuICAgICAgfSBlbHNlIGlmICh2YWxpZGF0ZUZuKSB7XG4gICAgICAgIGNvbnN0IGVycm9yUGFyYW0gPSB2YWxpZGF0ZUZuKGZpbGVJdGVtKTtcblxuICAgICAgICBpZiAoZXJyb3JQYXJhbSkge1xuICAgICAgICAgIGZpbGVJdGVtLmVycm9yVHlwZSA9ICd2YWxpZGF0ZSc7XG4gICAgICAgICAgZmlsZUl0ZW0uZXJyb3JQYXJhbSA9IGVycm9yUGFyYW07XG4gICAgICAgIH1cbiAgICAgICAgZmlsZVJlc3VsdHMucHVzaChmaWxlSXRlbSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWxlUmVzdWx0cy5wdXNoKGZpbGVJdGVtKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZpbGVSZXN1bHRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIGEgZGlyZWN0b3J5IGlzIGZvdW5kIGluIHRoZSBwcm92aWRlZCBgZmlsZXNgIHBhcmFtZXRlci5cbiAgICovXG4gIHB1YmxpYyBoYXNEaXJlY3RvcnkoZmlsZXM6IEZpbGVMaXN0KTogYm9vbGVhbiB7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGZpbGVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgZmlsZTogYW55ID0gZmlsZXMuaXRlbShpbmRleCk7XG4gICAgICBpZiAoXG4gICAgICAgIGZpbGUud2Via2l0R2V0QXNFbnRyeSAmJlxuICAgICAgICBmaWxlLndlYmtpdEdldEFzRW50cnkoKSAmJlxuICAgICAgICBmaWxlLndlYmtpdEdldEFzRW50cnkoKS5pc0RpcmVjdG9yeVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBmaWxlVHlwZVJlamVjdGVkKGZpbGVUeXBlOiBzdHJpbmcsIGFjY2VwdGVkVHlwZXM/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIWFjY2VwdGVkVHlwZXMpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIWZpbGVUeXBlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBhY2NlcHRlZFR5cGVzVXBwZXIgPSBhY2NlcHRlZFR5cGVzLnRvVXBwZXJDYXNlKCk7XG4gICAgY29uc3QgdHlwZUFycmF5ID0gYWNjZXB0ZWRUeXBlc1VwcGVyLnNwbGl0KCcsJyk7XG5cbiAgICByZXR1cm4gIXRoaXMuI2ZpbGVUeXBlSW5BcnJheSh0eXBlQXJyYXksIGZpbGVUeXBlLnRvVXBwZXJDYXNlKCkpO1xuICB9XG5cbiAgI2ZpbGVUeXBlSW5BcnJheSh0eXBlQXJyYXk6IHN0cmluZ1tdLCBmaWxlVHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVBcnJheS5pbmRleE9mKGZpbGVUeXBlKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlQXJyYXkpIHtcbiAgICAgIGNvbnN0IHZhbGlkU3VidHlwZSA9IHRoaXMuI2dldE1pbWVTdWJ0eXBlKHR5cGUpO1xuXG4gICAgICBpZiAodmFsaWRTdWJ0eXBlID09PSAnKicpIHtcbiAgICAgICAgaWYgKHRoaXMuI2dldE1pbWVNYWluVHlwZSh0eXBlKSA9PT0gdGhpcy4jZ2V0TWltZU1haW5UeXBlKGZpbGVUeXBlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgI2dldE1pbWVTdWJ0eXBlKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHR5cGUuc3Vic3RyKHR5cGUuaW5kZXhPZignLycpICsgMSwgdHlwZS5sZW5ndGgpO1xuICB9XG5cbiAgI2dldE1pbWVNYWluVHlwZSh0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0eXBlLnN1YnN0cigwLCB0eXBlLmluZGV4T2YoJy8nKSk7XG4gIH1cbn1cbiJdfQ==
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1hdHRhY2htZW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZm9ybXMvc3JjL2xpYi9tb2R1bGVzL2ZpbGUtYXR0YWNobWVudC9maWxlLWF0dGFjaG1lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQzs7R0FFRztBQUVILE1BQU0sT0FBTyx3QkFBd0I7SUFDNUIsVUFBVSxDQUNmLEtBQWUsRUFDZixXQUFtQixFQUNuQixXQUFtQixFQUNuQixhQUFzQixFQUN0QixVQUE4QjtRQUU5QixNQUFNLFdBQVcsR0FBa0IsRUFBRSxDQUFDO1FBRXRDLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDbEQsTUFBTSxRQUFRLEdBQUc7Z0JBQ2YsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2FBQ1QsQ0FBQztZQUVqQixJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsRUFBRSxDQUFDO2dCQUNyQyxRQUFRLENBQUMsU0FBUyxHQUFHLGFBQWEsQ0FBQztnQkFDbkMsUUFBUSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzdDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDN0IsQ0FBQztpQkFBTSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsRUFBRSxDQUFDO2dCQUM1QyxRQUFRLENBQUMsU0FBUyxHQUFHLGFBQWEsQ0FBQztnQkFDbkMsUUFBUSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzdDLFdBQVcs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LEVBQUUsV0FBVyxFQUFFO2FBQ2QsS0FBSyxDQUFDLEdBQUcsQ0FBQzthQUNWLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ1osTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQyxPQUFPLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNoRSxDQUFDLENBQUM7YUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUVELGVBQWUsQ0FBQyxJQUFZO1FBQzFCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELGdCQUFnQixDQUFDLElBQVk7UUFDM0IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQzs4R0E5R1Usd0JBQXdCO2tIQUF4Qix3QkFBd0I7OzJGQUF4Qix3QkFBd0I7a0JBRHBDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFNreUZpbGVJdGVtIH0gZnJvbSAnLi9maWxlLWl0ZW0nO1xuaW1wb3J0IHsgU2t5RmlsZVZhbGlkYXRlRm4gfSBmcm9tICcuL2ZpbGUtdmFsaWRhdGUtZnVuY3Rpb24nO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2t5RmlsZUF0dGFjaG1lbnRTZXJ2aWNlIHtcbiAgcHVibGljIGNoZWNrRmlsZXMoXG4gICAgZmlsZXM6IEZpbGVMaXN0LFxuICAgIG1pbkZpbGVTaXplOiBudW1iZXIsXG4gICAgbWF4RmlsZVNpemU6IG51bWJlcixcbiAgICBhY2NlcHRlZFR5cGVzPzogc3RyaW5nLFxuICAgIHZhbGlkYXRlRm4/OiBTa3lGaWxlVmFsaWRhdGVGbixcbiAgKTogU2t5RmlsZUl0ZW1bXSB7XG4gICAgY29uc3QgZmlsZVJlc3VsdHM6IFNreUZpbGVJdGVtW10gPSBbXTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBmaWxlcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IGZpbGVJdGVtID0ge1xuICAgICAgICBmaWxlOiBmaWxlcy5pdGVtKGluZGV4KSxcbiAgICAgIH0gYXMgU2t5RmlsZUl0ZW07XG5cbiAgICAgIGlmIChmaWxlSXRlbS5maWxlLnNpemUgPCBtaW5GaWxlU2l6ZSkge1xuICAgICAgICBmaWxlSXRlbS5lcnJvclR5cGUgPSAnbWluRmlsZVNpemUnO1xuICAgICAgICBmaWxlSXRlbS5lcnJvclBhcmFtID0gbWluRmlsZVNpemUudG9TdHJpbmcoKTtcbiAgICAgICAgZmlsZVJlc3VsdHMucHVzaChmaWxlSXRlbSk7XG4gICAgICB9IGVsc2UgaWYgKGZpbGVJdGVtLmZpbGUuc2l6ZSA+IG1heEZpbGVTaXplKSB7XG4gICAgICAgIGZpbGVJdGVtLmVycm9yVHlwZSA9ICdtYXhGaWxlU2l6ZSc7XG4gICAgICAgIGZpbGVJdGVtLmVycm9yUGFyYW0gPSBtYXhGaWxlU2l6ZS50b1N0cmluZygpO1xuICAgICAgICBmaWxlUmVzdWx0cy5wdXNoKGZpbGVJdGVtKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5maWxlVHlwZVJlamVjdGVkKGZpbGVJdGVtLmZpbGUudHlwZSwgYWNjZXB0ZWRUeXBlcykpIHtcbiAgICAgICAgZmlsZUl0ZW0uZXJyb3JUeXBlID0gJ2ZpbGVUeXBlJztcbiAgICAgICAgZmlsZUl0ZW0uZXJyb3JQYXJhbSA9IHRoaXMuI2dldEFjY2VwdGVkVHlwZXNMaXN0KGFjY2VwdGVkVHlwZXMpO1xuICAgICAgICBmaWxlUmVzdWx0cy5wdXNoKGZpbGVJdGVtKTtcbiAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGVGbikge1xuICAgICAgICBjb25zdCBlcnJvclBhcmFtID0gdmFsaWRhdGVGbihmaWxlSXRlbSk7XG5cbiAgICAgICAgaWYgKGVycm9yUGFyYW0pIHtcbiAgICAgICAgICBmaWxlSXRlbS5lcnJvclR5cGUgPSAndmFsaWRhdGUnO1xuICAgICAgICAgIGZpbGVJdGVtLmVycm9yUGFyYW0gPSBlcnJvclBhcmFtO1xuICAgICAgICB9XG4gICAgICAgIGZpbGVSZXN1bHRzLnB1c2goZmlsZUl0ZW0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmlsZVJlc3VsdHMucHVzaChmaWxlSXRlbSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmaWxlUmVzdWx0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiBhIGRpcmVjdG9yeSBpcyBmb3VuZCBpbiB0aGUgcHJvdmlkZWQgYGZpbGVzYCBwYXJhbWV0ZXIuXG4gICAqL1xuICBwdWJsaWMgaGFzRGlyZWN0b3J5KGZpbGVzOiBGaWxlTGlzdCk6IGJvb2xlYW4ge1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBmaWxlcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IGZpbGU6IGFueSA9IGZpbGVzLml0ZW0oaW5kZXgpO1xuICAgICAgaWYgKFxuICAgICAgICBmaWxlLndlYmtpdEdldEFzRW50cnkgJiZcbiAgICAgICAgZmlsZS53ZWJraXRHZXRBc0VudHJ5KCkgJiZcbiAgICAgICAgZmlsZS53ZWJraXRHZXRBc0VudHJ5KCkuaXNEaXJlY3RvcnlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgZmlsZVR5cGVSZWplY3RlZChmaWxlVHlwZTogc3RyaW5nLCBhY2NlcHRlZFR5cGVzPzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCFhY2NlcHRlZFR5cGVzKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCFmaWxlVHlwZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgYWNjZXB0ZWRUeXBlc1VwcGVyID0gYWNjZXB0ZWRUeXBlcy50b1VwcGVyQ2FzZSgpO1xuICAgIGNvbnN0IHR5cGVBcnJheSA9IGFjY2VwdGVkVHlwZXNVcHBlci5zcGxpdCgnLCcpO1xuXG4gICAgcmV0dXJuICF0aGlzLiNmaWxlVHlwZUluQXJyYXkodHlwZUFycmF5LCBmaWxlVHlwZS50b1VwcGVyQ2FzZSgpKTtcbiAgfVxuXG4gICNmaWxlVHlwZUluQXJyYXkodHlwZUFycmF5OiBzdHJpbmdbXSwgZmlsZVR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlQXJyYXkuaW5kZXhPZihmaWxlVHlwZSkgIT09IC0xKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZUFycmF5KSB7XG4gICAgICBjb25zdCB2YWxpZFN1YnR5cGUgPSB0aGlzLiNnZXRNaW1lU3VidHlwZSh0eXBlKTtcblxuICAgICAgaWYgKHZhbGlkU3VidHlwZSA9PT0gJyonKSB7XG4gICAgICAgIGlmICh0aGlzLiNnZXRNaW1lTWFpblR5cGUodHlwZSkgPT09IHRoaXMuI2dldE1pbWVNYWluVHlwZShmaWxlVHlwZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gICNnZXRBY2NlcHRlZFR5cGVzTGlzdChyYXdUeXBlczogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gcmF3VHlwZXNcbiAgICAgID8udG9VcHBlckNhc2UoKVxuICAgICAgLnNwbGl0KCcsJylcbiAgICAgIC5tYXAoKHR5cGUpID0+IHtcbiAgICAgICAgY29uc3Qgc3ViVHlwZSA9IHRoaXMuI2dldE1pbWVTdWJ0eXBlKHR5cGUpO1xuICAgICAgICByZXR1cm4gc3ViVHlwZS5zdGFydHNXaXRoKCdYLScpID8gc3ViVHlwZS5zdWJzdHIoMikgOiBzdWJUeXBlO1xuICAgICAgfSlcbiAgICAgIC5qb2luKCcsICcpO1xuICB9XG5cbiAgI2dldE1pbWVTdWJ0eXBlKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHR5cGUuc3Vic3RyKHR5cGUuaW5kZXhPZignLycpICsgMSwgdHlwZS5sZW5ndGgpO1xuICB9XG5cbiAgI2dldE1pbWVNYWluVHlwZSh0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0eXBlLnN1YnN0cigwLCB0eXBlLmluZGV4T2YoJy8nKSk7XG4gIH1cbn1cbiJdfQ==
@@ -16,8 +16,8 @@ import { SkyFileItemService } from './file-item.service';
16
16
  import { SkyFileSizePipe } from './file-size.pipe';
17
17
  import * as i0 from "@angular/core";
18
18
  export class SkyFileAttachmentsModule {
19
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: SkyFileAttachmentsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
20
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.1.1", ngImport: i0, type: SkyFileAttachmentsModule, declarations: [SkyFileAttachmentComponent,
19
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: SkyFileAttachmentsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
20
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.1.2", ngImport: i0, type: SkyFileAttachmentsModule, declarations: [SkyFileAttachmentComponent,
21
21
  SkyFileAttachmentLabelComponent,
22
22
  SkyFileDropComponent,
23
23
  SkyFileItemComponent,
@@ -36,7 +36,7 @@ export class SkyFileAttachmentsModule {
36
36
  SkyFileItemComponent,
37
37
  SkyFileSizePipe,
38
38
  SkyFormErrorModule] }); }
39
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: SkyFileAttachmentsModule, providers: [DecimalPipe, SkyFileItemService], imports: [CommonModule,
39
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: SkyFileAttachmentsModule, providers: [DecimalPipe, SkyFileItemService], imports: [CommonModule,
40
40
  FormsModule,
41
41
  SkyFormsResourcesModule,
42
42
  SkyFormErrorModule,
@@ -47,7 +47,7 @@ export class SkyFileAttachmentsModule {
47
47
  SkyTrimModule,
48
48
  SkyHelpInlineModule, SkyFormErrorModule] }); }
49
49
  }
50
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: SkyFileAttachmentsModule, decorators: [{
50
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: SkyFileAttachmentsModule, decorators: [{
51
51
  type: NgModule,
52
52
  args: [{
53
53
  declarations: [