ngx-material-entity 0.1.5 → 1.0.0

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 (70) hide show
  1. package/README.md +406 -35
  2. package/classes/entity.model.d.ts +1 -0
  3. package/classes/entity.utilities.d.ts +2 -1
  4. package/components/input/array/array-date-input/array-date-input.component.d.ts +5 -16
  5. package/components/input/array/array-date-range-input/array-date-range-input.component.d.ts +5 -15
  6. package/components/input/array/array-date-time-input/array-date-time-input.component.d.ts +5 -15
  7. package/components/input/array/array-string-autocomplete-chips/array-string-autocomplete-chips.component.d.ts +5 -12
  8. package/components/input/array/array-string-chips-input/array-string-chips-input.component.d.ts +5 -12
  9. package/components/input/array/array-table.class.d.ts +10 -9
  10. package/components/input/base-input.component.d.ts +31 -0
  11. package/components/input/boolean/boolean-checkbox-input/boolean-checkbox-input.component.d.ts +5 -12
  12. package/components/input/boolean/boolean-dropdown-input/boolean-dropdown-input.component.d.ts +5 -13
  13. package/components/input/boolean/boolean-toggle-input/boolean-toggle-input.component.d.ts +5 -12
  14. package/components/input/custom/custom.component.d.ts +13 -0
  15. package/components/input/date/date-input/date-input.component.d.ts +5 -13
  16. package/components/input/date/date-range-input/date-range-input.component.d.ts +5 -12
  17. package/components/input/date/date-time-input/date-time-input.component.d.ts +5 -12
  18. package/components/input/file/file-default-input/file-default-input.component.d.ts +5 -13
  19. package/components/input/file/file-image-input/file-image-input.component.d.ts +5 -13
  20. package/components/input/input.component.d.ts +1 -1
  21. package/components/input/input.module.d.ts +17 -16
  22. package/components/input/number/number-dropdown-input/number-dropdown-input.component.d.ts +5 -13
  23. package/components/input/number/number-input/number-input.component.d.ts +5 -13
  24. package/components/input/string/string-autocomplete-input/string-autocomplete-input.component.d.ts +5 -12
  25. package/components/input/string/string-dropdown-input/string-dropdown-input.component.d.ts +5 -13
  26. package/components/input/string/string-input/string-input.component.d.ts +5 -13
  27. package/components/input/string/string-textbox-input/string-textbox-input.component.d.ts +5 -13
  28. package/decorators/base/base-property.decorator.d.ts +1 -1
  29. package/decorators/base/decorator-types.enum.d.ts +4 -2
  30. package/decorators/custom/custom-decorator-internal.data.d.ts +17 -0
  31. package/decorators/custom/custom-decorator.data.d.ts +33 -0
  32. package/decorators/custom/custom.decorator.d.ts +11 -0
  33. package/esm2020/classes/entity.model.mjs +5 -1
  34. package/esm2020/classes/entity.utilities.mjs +19 -2
  35. package/esm2020/components/input/array/array-date-input/array-date-input.component.mjs +17 -35
  36. package/esm2020/components/input/array/array-date-range-input/array-date-range-input.component.mjs +17 -35
  37. package/esm2020/components/input/array/array-date-time-input/array-date-time-input.component.mjs +20 -35
  38. package/esm2020/components/input/array/array-string-autocomplete-chips/array-string-autocomplete-chips.component.mjs +9 -21
  39. package/esm2020/components/input/array/array-string-chips-input/array-string-chips-input.component.mjs +9 -21
  40. package/esm2020/components/input/array/array-table.class.mjs +19 -4
  41. package/esm2020/components/input/base-input.component.mjs +39 -0
  42. package/esm2020/components/input/boolean/boolean-checkbox-input/boolean-checkbox-input.component.mjs +8 -23
  43. package/esm2020/components/input/boolean/boolean-dropdown-input/boolean-dropdown-input.component.mjs +7 -25
  44. package/esm2020/components/input/boolean/boolean-toggle-input/boolean-toggle-input.component.mjs +8 -23
  45. package/esm2020/components/input/custom/custom.component.mjs +25 -0
  46. package/esm2020/components/input/date/date-input/date-input.component.mjs +8 -23
  47. package/esm2020/components/input/date/date-range-input/date-range-input.component.mjs +9 -21
  48. package/esm2020/components/input/date/date-time-input/date-time-input.component.mjs +11 -22
  49. package/esm2020/components/input/file/file-default-input/file-default-input.component.mjs +8 -23
  50. package/esm2020/components/input/file/file-image-input/file-image-input.component.mjs +8 -24
  51. package/esm2020/components/input/input.component.mjs +20 -14
  52. package/esm2020/components/input/input.module.mjs +4 -1
  53. package/esm2020/components/input/number/number-dropdown-input/number-dropdown-input.component.mjs +7 -25
  54. package/esm2020/components/input/number/number-input/number-input.component.mjs +7 -25
  55. package/esm2020/components/input/string/string-autocomplete-input/string-autocomplete-input.component.mjs +8 -23
  56. package/esm2020/components/input/string/string-dropdown-input/string-dropdown-input.component.mjs +7 -25
  57. package/esm2020/components/input/string/string-input/string-input.component.mjs +7 -25
  58. package/esm2020/components/input/string/string-textbox-input/string-textbox-input.component.mjs +7 -25
  59. package/esm2020/decorators/base/base-property.decorator.mjs +1 -1
  60. package/esm2020/decorators/base/decorator-types.enum.mjs +2 -1
  61. package/esm2020/decorators/custom/custom-decorator-internal.data.mjs +26 -0
  62. package/esm2020/decorators/custom/custom-decorator.data.mjs +2 -0
  63. package/esm2020/decorators/custom/custom.decorator.mjs +13 -0
  64. package/esm2020/public-api.mjs +4 -1
  65. package/fesm2015/ngx-material-entity.mjs +282 -427
  66. package/fesm2015/ngx-material-entity.mjs.map +1 -1
  67. package/fesm2020/ngx-material-entity.mjs +408 -552
  68. package/fesm2020/ngx-material-entity.mjs.map +1 -1
  69. package/package.json +1 -1
  70. package/public-api.d.ts +3 -0
@@ -1,24 +1,19 @@
1
1
  /* eslint-disable jsdoc/require-jsdoc */
2
- import { Component, EventEmitter, Input, Output } from '@angular/core';
3
- import { EntityUtilities } from '../../../../classes/entity.utilities';
2
+ import { Component } from '@angular/core';
4
3
  import { FileUtilities } from '../../../../classes/file.utilities';
5
- import { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';
6
4
  import { placeholder } from '../../../../mocks/placeholder-data.png';
5
+ import { NgxMatEntityBaseInputComponent } from '../../base-input.component';
7
6
  import * as i0 from "@angular/core";
8
7
  import * as i1 from "../file-input/file-input.component";
9
8
  import * as i2 from "@angular/material/button";
10
9
  import * as i3 from "@angular/common";
11
- export class FileImageInputComponent {
10
+ export class FileImageInputComponent extends NgxMatEntityBaseInputComponent {
12
11
  constructor() {
12
+ super(...arguments);
13
13
  this.FileUtilities = FileUtilities;
14
- this.inputChangeEvent = new EventEmitter();
15
14
  this.imageIndex = 0;
16
15
  this.placeHolder = placeholder;
17
16
  }
18
- async ngOnInit() {
19
- this.metadata = EntityUtilities.getPropertyMetadata(this.entity, this.key, DecoratorTypes.FILE_IMAGE);
20
- // setting the image is done inside the refresh method
21
- }
22
17
  async setSinglePreviewImage() {
23
18
  let singleFileData = this.entity[this.key];
24
19
  if (singleFileData) {
@@ -74,22 +69,11 @@ export class FileImageInputComponent {
74
69
  await this.setMultiPreviewImages(index);
75
70
  this.imageIndex = index;
76
71
  }
77
- emitChange() {
78
- this.inputChangeEvent.emit();
79
- }
80
72
  }
81
- FileImageInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: FileImageInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
82
- FileImageInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: FileImageInputComponent, selector: "file-image-input", inputs: { entity: "entity", key: "key", getValidationErrorMessage: "getValidationErrorMessage" }, outputs: { inputChangeEvent: "inputChangeEvent" }, ngImport: i0, template: "<div *ngIf=\"!metadata.dragAndDrop && !metadata.preview\">\n <file-input (fileDataChangeEvent)=\"refreshFileData($event)\" [entity]=\"entity\" [key]=\"key\" [getValidationErrorMessage]=\"getValidationErrorMessage\"></file-input>\n</div>\n\n<div *ngIf=\"metadata.dragAndDrop || metadata.preview\" class=\"file-input mat-elevation-z8\">\n <file-input (fileDataChangeEvent)=\"refreshFileData($event)\" [entity]=\"entity\" [key]=\"key\" [getValidationErrorMessage]=\"getValidationErrorMessage\"></file-input>\n\n <div class=\"image-preview\" *ngIf=\"metadata.preview && metadata.multiple\">\n <i (click)=\"prev()\" [class.disabled]=\"imageIndex === 0\" class=\"prev-button fa-solid fa-angle-left\"></i>\n <img *ngIf=\"multiPreviewImages?.[imageIndex]\" class=\"mat-elevation-z2\" [src]=\"multiPreviewImages?.[imageIndex]\">\n <img *ngIf=\"!multiPreviewImages?.[imageIndex]\" class=\"mat-elevation-z2\" [src]=\"metadata.previewPlaceholderUrl ?? placeHolder\">\n <i (click)=\"next()\" [class.disabled]=\"!multiPreviewImages || !multiPreviewImages.length || imageIndex === (multiPreviewImages.length - 1)\" class=\"next-button fa-solid fa-angle-right\"></i>\n </div>\n <div class=\"preview-nav\" *ngIf=\"metadata.preview && metadata.multiple\">\n <button (click)=\"setIndex(imageIndex-4)\" mat-icon-button *ngIf=\"\n this.multiPreviewImages\n && multiPreviewImages[imageIndex-4]\n && imageIndex === (this.multiPreviewImages.length - 1)\"\n >\n <span class=\"dot\"></span>\n <span class=\"image-index\">{{imageIndex - 3}}</span>\n </button>\n <!-- eslint-disable-next-line @angular-eslint/template/conditional-complexity -->\n <button (click)=\"setIndex(imageIndex-3)\" mat-icon-button *ngIf=\"this.multiPreviewImages\n && multiPreviewImages[imageIndex-3]\n && (\n imageIndex === (this.multiPreviewImages.length - 2)\n || imageIndex === (this.multiPreviewImages.length - 1)\n )\"\n >\n <span class=\"dot\"></span>\n <span class=\"image-index\">{{imageIndex - 2}}</span>\n </button>\n <button (click)=\"setIndex(imageIndex-2)\" mat-icon-button *ngIf=\"multiPreviewImages?.[imageIndex-2]\">\n <span class=\"dot\"></span>\n <span class=\"image-index\">{{imageIndex - 1}}</span>\n </button>\n <button (click)=\"setIndex(imageIndex-1)\" mat-icon-button *ngIf=\"multiPreviewImages?.[imageIndex-1]\">\n <i class=\"dot\"></i>\n <span class=\"image-index\">{{imageIndex}}</span>\n </button>\n <button mat-icon-button disabled>\n <i class=\"dot selected\"></i>\n <span class=\"image-index\">{{imageIndex + 1}}</span>\n </button>\n <button (click)=\"setIndex(imageIndex+1)\" mat-icon-button *ngIf=\"multiPreviewImages?.[imageIndex+1]\">\n <span class=\"dot\"></span>\n <span class=\"image-index\">{{imageIndex + 2}}</span>\n </button>\n <button (click)=\"setIndex(imageIndex+2)\" mat-icon-button *ngIf=\"multiPreviewImages?.[imageIndex+2]\">\n <span class=\"dot\"></span>\n <span class=\"image-index\">{{imageIndex + 3}}</span>\n </button>\n <button (click)=\"setIndex(imageIndex+3)\" mat-icon-button *ngIf=\"multiPreviewImages?.[imageIndex+3] && imageIndex <= 1\">\n <span class=\"dot\"></span>\n <span class=\"image-index\">{{imageIndex + 4}}</span>\n </button>\n <button (click)=\"setIndex(imageIndex+4)\" mat-icon-button *ngIf=\"multiPreviewImages?.[imageIndex+4] && imageIndex === 0\">\n <span class=\"dot\"></span>\n <span class=\"image-index\">{{imageIndex + 5}}</span>\n </button>\n </div>\n\n <div class=\"image-preview\" *ngIf=\"metadata.preview && !metadata.multiple\">\n <i class=\"prev-button disabled fa-solid fa-angle-left\"></i>\n <img class=\"mat-elevation-z2\" [src]=\"singlePreviewImage ?? metadata.previewPlaceholderUrl ?? placeHolder\">\n <i class=\"next-button disabled fa-solid fa-angle-right\"></i>\n </div>\n <div class=\"preview-nav\" *ngIf=\"metadata.preview && !metadata.multiple\">\n <button disabled mat-icon-button>\n <span class=\"dot selected\"></span>\n <span class=\"image-index\">1</span>\n </button>\n </div>\n</div>", styles: [".file-input{margin-top:15px;margin-bottom:15px;padding:15px;border-radius:5px}.image-preview{height:250px;display:flex;align-items:center;padding-top:15px;padding-bottom:15px}.image-preview .prev-button{font-size:100px;margin-left:5px}.image-preview .next-button{font-size:100px;margin-right:5px}.image-preview .prev-button:hover,.image-preview .next-button:hover{cursor:pointer}.image-preview .prev-button.disabled,.image-preview .next-button.disabled{color:#00000061}.image-preview .prev-button.disabled:hover,.image-preview .next-button.disabled:hover{cursor:default}.image-preview img{max-width:calc(100% - 100px);max-height:100%;margin-left:auto;margin-right:auto;border-radius:3px}.preview-nav{text-align:center}.preview-nav button{display:inline-block;width:18px;height:18px;margin-left:5px;margin-right:5px}.preview-nav button .dot{height:100%;width:100%;background-color:#00000061;border-radius:50%;display:block}.preview-nav button .dot.selected{background-color:#000000de}.preview-nav button .image-index{position:absolute;height:100%;width:100%;display:block;top:-11.5px;color:#fff}.preview-nav button:hover{background-color:#000}\n"], components: [{ type: i1.FileInputComponent, selector: "file-input", inputs: ["entity", "key", "getValidationErrorMessage"], outputs: ["fileDataChangeEvent"] }, { type: i2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
73
+ FileImageInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: FileImageInputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
74
+ FileImageInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: FileImageInputComponent, selector: "file-image-input", usesInheritance: true, ngImport: i0, template: "<div *ngIf=\"!metadata.dragAndDrop && !metadata.preview\">\n <file-input (fileDataChangeEvent)=\"refreshFileData($event)\" [entity]=\"entity\" [key]=\"key\" [getValidationErrorMessage]=\"getValidationErrorMessage\"></file-input>\n</div>\n\n<div *ngIf=\"metadata.dragAndDrop || metadata.preview\" class=\"file-input mat-elevation-z8\">\n <file-input (fileDataChangeEvent)=\"refreshFileData($event)\" [entity]=\"entity\" [key]=\"key\" [getValidationErrorMessage]=\"getValidationErrorMessage\"></file-input>\n\n <div class=\"image-preview\" *ngIf=\"metadata.preview && metadata.multiple\">\n <i (click)=\"prev()\" [class.disabled]=\"imageIndex === 0\" class=\"prev-button fa-solid fa-angle-left\"></i>\n <img *ngIf=\"multiPreviewImages?.[imageIndex]\" class=\"mat-elevation-z2\" [src]=\"multiPreviewImages?.[imageIndex]\">\n <img *ngIf=\"!multiPreviewImages?.[imageIndex]\" class=\"mat-elevation-z2\" [src]=\"metadata.previewPlaceholderUrl ?? placeHolder\">\n <i (click)=\"next()\" [class.disabled]=\"!multiPreviewImages || !multiPreviewImages.length || imageIndex === (multiPreviewImages.length - 1)\" class=\"next-button fa-solid fa-angle-right\"></i>\n </div>\n <div class=\"preview-nav\" *ngIf=\"metadata.preview && metadata.multiple\">\n <button (click)=\"setIndex(imageIndex-4)\" mat-icon-button *ngIf=\"\n this.multiPreviewImages\n && multiPreviewImages[imageIndex-4]\n && imageIndex === (this.multiPreviewImages.length - 1)\"\n >\n <span class=\"dot\"></span>\n <span class=\"image-index\">{{imageIndex - 3}}</span>\n </button>\n <!-- eslint-disable-next-line @angular-eslint/template/conditional-complexity -->\n <button (click)=\"setIndex(imageIndex-3)\" mat-icon-button *ngIf=\"this.multiPreviewImages\n && multiPreviewImages[imageIndex-3]\n && (\n imageIndex === (this.multiPreviewImages.length - 2)\n || imageIndex === (this.multiPreviewImages.length - 1)\n )\"\n >\n <span class=\"dot\"></span>\n <span class=\"image-index\">{{imageIndex - 2}}</span>\n </button>\n <button (click)=\"setIndex(imageIndex-2)\" mat-icon-button *ngIf=\"multiPreviewImages?.[imageIndex-2]\">\n <span class=\"dot\"></span>\n <span class=\"image-index\">{{imageIndex - 1}}</span>\n </button>\n <button (click)=\"setIndex(imageIndex-1)\" mat-icon-button *ngIf=\"multiPreviewImages?.[imageIndex-1]\">\n <i class=\"dot\"></i>\n <span class=\"image-index\">{{imageIndex}}</span>\n </button>\n <button mat-icon-button disabled>\n <i class=\"dot selected\"></i>\n <span class=\"image-index\">{{imageIndex + 1}}</span>\n </button>\n <button (click)=\"setIndex(imageIndex+1)\" mat-icon-button *ngIf=\"multiPreviewImages?.[imageIndex+1]\">\n <span class=\"dot\"></span>\n <span class=\"image-index\">{{imageIndex + 2}}</span>\n </button>\n <button (click)=\"setIndex(imageIndex+2)\" mat-icon-button *ngIf=\"multiPreviewImages?.[imageIndex+2]\">\n <span class=\"dot\"></span>\n <span class=\"image-index\">{{imageIndex + 3}}</span>\n </button>\n <button (click)=\"setIndex(imageIndex+3)\" mat-icon-button *ngIf=\"multiPreviewImages?.[imageIndex+3] && imageIndex <= 1\">\n <span class=\"dot\"></span>\n <span class=\"image-index\">{{imageIndex + 4}}</span>\n </button>\n <button (click)=\"setIndex(imageIndex+4)\" mat-icon-button *ngIf=\"multiPreviewImages?.[imageIndex+4] && imageIndex === 0\">\n <span class=\"dot\"></span>\n <span class=\"image-index\">{{imageIndex + 5}}</span>\n </button>\n </div>\n\n <div class=\"image-preview\" *ngIf=\"metadata.preview && !metadata.multiple\">\n <i class=\"prev-button disabled fa-solid fa-angle-left\"></i>\n <img class=\"mat-elevation-z2\" [src]=\"singlePreviewImage ?? metadata.previewPlaceholderUrl ?? placeHolder\">\n <i class=\"next-button disabled fa-solid fa-angle-right\"></i>\n </div>\n <div class=\"preview-nav\" *ngIf=\"metadata.preview && !metadata.multiple\">\n <button disabled mat-icon-button>\n <span class=\"dot selected\"></span>\n <span class=\"image-index\">1</span>\n </button>\n </div>\n</div>", styles: [".file-input{margin-top:15px;margin-bottom:15px;padding:15px;border-radius:5px}.image-preview{height:250px;display:flex;align-items:center;padding-top:15px;padding-bottom:15px}.image-preview .prev-button{font-size:100px;margin-left:5px}.image-preview .next-button{font-size:100px;margin-right:5px}.image-preview .prev-button:hover,.image-preview .next-button:hover{cursor:pointer}.image-preview .prev-button.disabled,.image-preview .next-button.disabled{color:#00000061}.image-preview .prev-button.disabled:hover,.image-preview .next-button.disabled:hover{cursor:default}.image-preview img{max-width:calc(100% - 100px);max-height:100%;margin-left:auto;margin-right:auto;border-radius:3px}.preview-nav{text-align:center}.preview-nav button{display:inline-block;width:18px;height:18px;margin-left:5px;margin-right:5px}.preview-nav button .dot{height:100%;width:100%;background-color:#00000061;border-radius:50%;display:block}.preview-nav button .dot.selected{background-color:#000000de}.preview-nav button .image-index{position:absolute;height:100%;width:100%;display:block;top:-11.5px;color:#fff}.preview-nav button:hover{background-color:#000}\n"], components: [{ type: i1.FileInputComponent, selector: "file-input", inputs: ["entity", "key", "getValidationErrorMessage"], outputs: ["fileDataChangeEvent"] }, { type: i2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
83
75
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: FileImageInputComponent, decorators: [{
84
76
  type: Component,
85
77
  args: [{ selector: 'file-image-input', template: "<div *ngIf=\"!metadata.dragAndDrop && !metadata.preview\">\n <file-input (fileDataChangeEvent)=\"refreshFileData($event)\" [entity]=\"entity\" [key]=\"key\" [getValidationErrorMessage]=\"getValidationErrorMessage\"></file-input>\n</div>\n\n<div *ngIf=\"metadata.dragAndDrop || metadata.preview\" class=\"file-input mat-elevation-z8\">\n <file-input (fileDataChangeEvent)=\"refreshFileData($event)\" [entity]=\"entity\" [key]=\"key\" [getValidationErrorMessage]=\"getValidationErrorMessage\"></file-input>\n\n <div class=\"image-preview\" *ngIf=\"metadata.preview && metadata.multiple\">\n <i (click)=\"prev()\" [class.disabled]=\"imageIndex === 0\" class=\"prev-button fa-solid fa-angle-left\"></i>\n <img *ngIf=\"multiPreviewImages?.[imageIndex]\" class=\"mat-elevation-z2\" [src]=\"multiPreviewImages?.[imageIndex]\">\n <img *ngIf=\"!multiPreviewImages?.[imageIndex]\" class=\"mat-elevation-z2\" [src]=\"metadata.previewPlaceholderUrl ?? placeHolder\">\n <i (click)=\"next()\" [class.disabled]=\"!multiPreviewImages || !multiPreviewImages.length || imageIndex === (multiPreviewImages.length - 1)\" class=\"next-button fa-solid fa-angle-right\"></i>\n </div>\n <div class=\"preview-nav\" *ngIf=\"metadata.preview && metadata.multiple\">\n <button (click)=\"setIndex(imageIndex-4)\" mat-icon-button *ngIf=\"\n this.multiPreviewImages\n && multiPreviewImages[imageIndex-4]\n && imageIndex === (this.multiPreviewImages.length - 1)\"\n >\n <span class=\"dot\"></span>\n <span class=\"image-index\">{{imageIndex - 3}}</span>\n </button>\n <!-- eslint-disable-next-line @angular-eslint/template/conditional-complexity -->\n <button (click)=\"setIndex(imageIndex-3)\" mat-icon-button *ngIf=\"this.multiPreviewImages\n && multiPreviewImages[imageIndex-3]\n && (\n imageIndex === (this.multiPreviewImages.length - 2)\n || imageIndex === (this.multiPreviewImages.length - 1)\n )\"\n >\n <span class=\"dot\"></span>\n <span class=\"image-index\">{{imageIndex - 2}}</span>\n </button>\n <button (click)=\"setIndex(imageIndex-2)\" mat-icon-button *ngIf=\"multiPreviewImages?.[imageIndex-2]\">\n <span class=\"dot\"></span>\n <span class=\"image-index\">{{imageIndex - 1}}</span>\n </button>\n <button (click)=\"setIndex(imageIndex-1)\" mat-icon-button *ngIf=\"multiPreviewImages?.[imageIndex-1]\">\n <i class=\"dot\"></i>\n <span class=\"image-index\">{{imageIndex}}</span>\n </button>\n <button mat-icon-button disabled>\n <i class=\"dot selected\"></i>\n <span class=\"image-index\">{{imageIndex + 1}}</span>\n </button>\n <button (click)=\"setIndex(imageIndex+1)\" mat-icon-button *ngIf=\"multiPreviewImages?.[imageIndex+1]\">\n <span class=\"dot\"></span>\n <span class=\"image-index\">{{imageIndex + 2}}</span>\n </button>\n <button (click)=\"setIndex(imageIndex+2)\" mat-icon-button *ngIf=\"multiPreviewImages?.[imageIndex+2]\">\n <span class=\"dot\"></span>\n <span class=\"image-index\">{{imageIndex + 3}}</span>\n </button>\n <button (click)=\"setIndex(imageIndex+3)\" mat-icon-button *ngIf=\"multiPreviewImages?.[imageIndex+3] && imageIndex <= 1\">\n <span class=\"dot\"></span>\n <span class=\"image-index\">{{imageIndex + 4}}</span>\n </button>\n <button (click)=\"setIndex(imageIndex+4)\" mat-icon-button *ngIf=\"multiPreviewImages?.[imageIndex+4] && imageIndex === 0\">\n <span class=\"dot\"></span>\n <span class=\"image-index\">{{imageIndex + 5}}</span>\n </button>\n </div>\n\n <div class=\"image-preview\" *ngIf=\"metadata.preview && !metadata.multiple\">\n <i class=\"prev-button disabled fa-solid fa-angle-left\"></i>\n <img class=\"mat-elevation-z2\" [src]=\"singlePreviewImage ?? metadata.previewPlaceholderUrl ?? placeHolder\">\n <i class=\"next-button disabled fa-solid fa-angle-right\"></i>\n </div>\n <div class=\"preview-nav\" *ngIf=\"metadata.preview && !metadata.multiple\">\n <button disabled mat-icon-button>\n <span class=\"dot selected\"></span>\n <span class=\"image-index\">1</span>\n </button>\n </div>\n</div>", styles: [".file-input{margin-top:15px;margin-bottom:15px;padding:15px;border-radius:5px}.image-preview{height:250px;display:flex;align-items:center;padding-top:15px;padding-bottom:15px}.image-preview .prev-button{font-size:100px;margin-left:5px}.image-preview .next-button{font-size:100px;margin-right:5px}.image-preview .prev-button:hover,.image-preview .next-button:hover{cursor:pointer}.image-preview .prev-button.disabled,.image-preview .next-button.disabled{color:#00000061}.image-preview .prev-button.disabled:hover,.image-preview .next-button.disabled:hover{cursor:default}.image-preview img{max-width:calc(100% - 100px);max-height:100%;margin-left:auto;margin-right:auto;border-radius:3px}.preview-nav{text-align:center}.preview-nav button{display:inline-block;width:18px;height:18px;margin-left:5px;margin-right:5px}.preview-nav button .dot{height:100%;width:100%;background-color:#00000061;border-radius:50%;display:block}.preview-nav button .dot.selected{background-color:#000000de}.preview-nav button .image-index{position:absolute;height:100%;width:100%;display:block;top:-11.5px;color:#fff}.preview-nav button:hover{background-color:#000}\n"] }]
86
- }], ctorParameters: function () { return []; }, propDecorators: { entity: [{
87
- type: Input
88
- }], key: [{
89
- type: Input
90
- }], getValidationErrorMessage: [{
91
- type: Input
92
- }], inputChangeEvent: [{
93
- type: Output
94
- }] } });
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1pbWFnZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jb21wb25lbnRzL2lucHV0L2ZpbGUvZmlsZS1pbWFnZS1pbnB1dC9maWxlLWltYWdlLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1tYXRlcmlhbC1lbnRpdHkvc3JjL2NvbXBvbmVudHMvaW5wdXQvZmlsZS9maWxlLWltYWdlLWlucHV0L2ZpbGUtaW1hZ2UtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0NBQXdDO0FBQ3hDLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFFbEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOzs7OztBQVNyRSxNQUFNLE9BQU8sdUJBQXVCO0lBdUJoQztRQXJCQSxrQkFBYSxHQUFHLGFBQWEsQ0FBQztRQVk5QixxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBTTVDLGVBQVUsR0FBVyxDQUFDLENBQUM7UUFDdkIsZ0JBQVcsR0FBRyxXQUFXLENBQUM7SUFFVixDQUFDO0lBRWpCLEtBQUssQ0FBQyxRQUFRO1FBQ1YsSUFBSSxDQUFDLFFBQVEsR0FBRyxlQUFlLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxVQUFVLENBQUMs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S0FBSyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDNUIsQ0FBQztJQUVELFVBQVU7UUFDTixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDakMsQ0FBQzs7cUhBN0ZRLHVCQUF1Qjt5R0FBdkIsdUJBQXVCLDZNQ2pCcEMsNDRJQTBFTTs0RkR6RE8sdUJBQXVCO2tCQU5uQyxTQUFTOytCQUVJLGtCQUFrQjswRUFTNUIsTUFBTTtzQkFETCxLQUFLO2dCQUlOLEdBQUc7c0JBREYsS0FBSztnQkFJTix5QkFBeUI7c0JBRHhCLEtBQUs7Z0JBSU4sZ0JBQWdCO3NCQURmLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBqc2RvYy9yZXF1aXJlLWpzZG9jICovXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ01vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSW1hZ2VGaWxlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgfSBmcm9tICcuLi8uLi8uLi8uLi9kZWNvcmF0b3JzL2ZpbGUvZmlsZS1kZWNvcmF0b3ItaW50ZXJuYWwuZGF0YSc7XG5pbXBvcnQgeyBFbnRpdHlVdGlsaXRpZXMgfSBmcm9tICcuLi8uLi8uLi8uLi9jbGFzc2VzL2VudGl0eS51dGlsaXRpZXMnO1xuaW1wb3J0IHsgRmlsZVV0aWxpdGllcyB9IGZyb20gJy4uLy4uLy4uLy4uL2NsYXNzZXMvZmlsZS51dGlsaXRpZXMnO1xuaW1wb3J0IHsgRGVjb3JhdG9yVHlwZXMgfSBmcm9tICcuLi8uLi8uLi8uLi9kZWNvcmF0b3JzL2Jhc2UvZGVjb3JhdG9yLXR5cGVzLmVudW0nO1xuaW1wb3J0IHsgRmlsZURhdGEgfSBmcm9tICcuLi8uLi8uLi8uLi9kZWNvcmF0b3JzL2ZpbGUvZmlsZS1kZWNvcmF0b3IuZGF0YSc7XG5pbXBvcnQgeyBwbGFjZWhvbGRlciB9IGZyb20gJy4uLy4uLy4uLy4uL21vY2tzL3BsYWNlaG9sZGVyLWRhdGEucG5nJztcbmltcG9ydCB7IEJhc2VFbnRpdHlUeXBlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY2xhc3Nlcy9lbnRpdHkubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICAgIHNlbGVjdG9yOiAnZmlsZS1pbWFnZS1pbnB1dCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ZpbGUtaW1hZ2UtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2ZpbGUtaW1hZ2UtaW5wdXQuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBGaWxlSW1hZ2VJbnB1dENvbXBvbmVudDxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+IGltcGxlbWVudHMgT25Jbml0IHtcblxuICAgIEZpbGVVdGlsaXRpZXMgPSBGaWxlVXRpbGl0aWVzO1xuXG4gICAgQElucHV0KClcbiAgICBlbnRpdHkhOiBFbnRpdHlUeXBlO1xuXG4gICAgQElucHV0KClcbiAgICBrZXkhOiBrZXlvZiBFbnRpdHlUeXBlO1xuXG4gICAgQElucHV0KClcbiAgICBnZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlITogKG1vZGVsOiBOZ01vZGVsKSA9PiBzdHJpbmc7XG5cbiAgICBAT3V0cHV0KClcbiAgICBpbnB1dENoYW5nZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgbWV0YWRhdGEhOiBJbWFnZUZpbGVEZWNvcmF0b3JDb25maWdJbnRlcm5hbDtcblxuICAgIHNpbmdsZVByZXZpZXdJbWFnZT86IHN0cmluZztcbiAgICBtdWx0aVByZXZpZXdJbWFnZXM/OiBzdHJpbmdbXTtcbiAgICBpbWFnZUluZGV4OiBudW1iZXIgPSAwO1xuICAgIHBsYWNlSG9sZGVyID0gcGxhY2Vob2xkZXI7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gICAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMubWV0YWRhdGEgPSBFbnRpdHlVdGlsaXRpZXMuZ2V0UHJvcGVydHlNZXRhZGF0YSh0aGlzLmVudGl0eSwgdGhpcy5rZXksIERlY29yYXRvclR5cGVzLkZJTEVfSU1BR0UpO1xuICAgICAgICAvLyBzZXR0aW5nIHRoZSBpbWFnZSBpcyBkb25lIGluc2lkZSB0aGUgcmVmcmVzaCBtZXRob2RcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHNldFNpbmdsZVByZXZpZXdJbWFnZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IHNpbmdsZUZpbGVEYXRhID0gdGhpcy5lbnRpdHlbdGhpcy5rZXldIGFzIEZpbGVEYXRhIHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAoc2luZ2xlRmlsZURhdGEpIHtcbiAgICAgICAgICAgIHNpbmdsZUZpbGVEYXRhID0gYXdhaXQgRmlsZVV0aWxpdGllcy5nZXRGaWxlRGF0YShzaW5nbGVGaWxlRGF0YSk7XG4gICAgICAgICAgICB0aGlzLnNpbmdsZVByZXZpZXdJbWFnZSA9IGF3YWl0IEZpbGVVdGlsaXRpZXMuZ2V0RGF0YVVSTEZyb21GaWxlKHNpbmdsZUZpbGVEYXRhLmZpbGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaW5nbGVQcmV2aWV3SW1hZ2UgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHNldE11bHRpUHJldmlld0ltYWdlcyhpbmRleDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IG11bHRpRmlsZURhdGEgPSB0aGlzLmVudGl0eVt0aGlzLmtleV0gYXMgRmlsZURhdGFbXSB8IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgcHJldmlld0ltYWdlczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgaWYgKG11bHRpRmlsZURhdGE/Lmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtdWx0aUZpbGVEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgPT09IGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIG11bHRpRmlsZURhdGFbaW5kZXhdID0gYXdhaXQgRmlsZVV0aWxpdGllcy5nZXRGaWxlRGF0YShtdWx0aUZpbGVEYXRhW2luZGV4XSk7XG4gICAgICAgICAgICAgICAgICAgIHByZXZpZXdJbWFnZXMucHVzaChhd2FpdCBGaWxlVXRpbGl0aWVzLmdldERhdGFVUkxGcm9tRmlsZShtdWx0aUZpbGVEYXRhW2luZGV4XS5maWxlIGFzIEJsb2IpIGFzIHN0cmluZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwcmV2aWV3SW1hZ2VzLnB1c2goJ2VtcHR5Jyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubXVsdGlQcmV2aWV3SW1hZ2VzID0gcHJldmlld0ltYWdlcztcbiAgICB9XG5cbiAgICBhc3luYyByZWZyZXNoRmlsZURhdGEoZmlsZURhdGE/OiBGaWxlRGF0YSB8IEZpbGVEYXRhW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgKHRoaXMuZW50aXR5W3RoaXMua2V5XSBhcyBGaWxlRGF0YSB8IEZpbGVEYXRhW10gfCB1bmRlZmluZWQpID0gZmlsZURhdGE7XG4gICAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgICAgICBpZiAodGhpcy5tZXRhZGF0YS5tdWx0aXBsZSkge1xuICAgICAgICAgICAgaWYgKCEoKGZpbGVEYXRhIGFzIEZpbGVEYXRhW10gfCB1bmRlZmluZWQpPy5bdGhpcy5pbWFnZUluZGV4XSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmltYWdlSW5kZXggPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXRNdWx0aVByZXZpZXdJbWFnZXModGhpcy5pbWFnZUluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2V0U2luZ2xlUHJldmlld0ltYWdlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBwcmV2KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5pbWFnZUluZGV4ID4gMCkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXRNdWx0aVByZXZpZXdJbWFnZXModGhpcy5pbWFnZUluZGV4IC0gMSk7XG4gICAgICAgICAgICB0aGlzLmltYWdlSW5kZXgtLTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIG5leHQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLm11bHRpUHJldmlld0ltYWdlcz8ubGVuZ3RoICYmIHRoaXMuaW1hZ2VJbmRleCAhPT0gKHRoaXMubXVsdGlQcmV2aWV3SW1hZ2VzLmxlbmd0aCAtIDEpKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNldE11bHRpUHJldmlld0ltYWdlcyh0aGlzLmltYWdlSW5kZXggKyAxKTtcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VJbmRleCsrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgc2V0SW5kZXgoaW5kZXg6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLnNldE11bHRpUHJldmlld0ltYWdlcyhpbmRleCk7XG4gICAgICAgIHRoaXMuaW1hZ2VJbmRleCA9IGluZGV4O1xuICAgIH1cblxuICAgIGVtaXRDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5wdXRDaGFuZ2VFdmVudC5lbWl0KCk7XG4gICAgfVxufSIsIjxkaXYgKm5nSWY9XCIhbWV0YWRhdGEuZHJhZ0FuZERyb3AgJiYgIW1ldGFkYXRhLnByZXZpZXdcIj5cbiAgICA8ZmlsZS1pbnB1dCAoZmlsZURhdGFDaGFuZ2VFdmVudCk9XCJyZWZyZXNoRmlsZURhdGEoJGV2ZW50KVwiIFtlbnRpdHldPVwiZW50aXR5XCIgW2tleV09XCJrZXlcIiBbZ2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZV09XCJnZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlXCI+PC9maWxlLWlucHV0PlxuPC9kaXY+XG5cbjxkaXYgKm5nSWY9XCJtZXRhZGF0YS5kcmFnQW5kRHJvcCB8fCBtZXRhZGF0YS5wcmV2aWV3XCIgY2xhc3M9XCJmaWxlLWlucHV0IG1hdC1lbGV2YXRpb24tejhcIj5cbiAgICA8ZmlsZS1pbnB1dCAoZmlsZURhdGFDaGFuZ2VFdmVudCk9XCJyZWZyZXNoRmlsZURhdGEoJGV2ZW50KVwiIFtlbnRpdHldPVwiZW50aXR5XCIgW2tleV09XCJrZXlcIiBbZ2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZV09XCJnZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlXCI+PC9maWxlLWlucHV0PlxuXG4gICAgPGRpdiBjbGFzcz1cImltYWdlLXByZXZpZXdcIiAqbmdJZj1cIm1ldGFkYXRhLnByZXZpZXcgJiYgbWV0YWRhdGEubXVsdGlwbGVcIj5cbiAgICAgICAgPGkgKGNsaWNrKT1cInByZXYoKVwiIFtjbGFzcy5kaXNhYmxlZF09XCJpbWFnZUluZGV4ID09PSAwXCIgY2xhc3M9XCJwcmV2LWJ1dHRvbiBmYS1zb2xpZCBmYS1hbmdsZS1sZWZ0XCI+PC9pPlxuICAgICAgICA8aW1nICpuZ0lmPVwibXVsdGlQcmV2aWV3SW1hZ2VzPy5baW1hZ2VJbmRleF1cIiBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejJcIiBbc3JjXT1cIm11bHRpUHJldmlld0ltYWdlcz8uW2ltYWdlSW5kZXhdXCI+XG4gICAgICAgIDxpbWcgKm5nSWY9XCIhbXVsdGlQcmV2aWV3SW1hZ2VzPy5baW1hZ2VJbmRleF1cIiBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejJcIiBbc3JjXT1cIm1ldGFkYXRhLnByZXZpZXdQbGFjZWhvbGRlclVybCA/PyBwbGFjZUhvbGRlclwiPlxuICAgICAgICA8aSAoY2xpY2spPVwibmV4dCgpXCIgW2NsYXNzLmRpc2FibGVkXT1cIiFtdWx0aVByZXZpZXdJbWFnZXMgfHwgIW11bHRpUHJldmlld0ltYWdlcy5sZW5ndGggfHwgaW1hZ2VJbmRleCA9PT0gKG11bHRpUHJldmlld0ltYWdlcy5sZW5ndGggLSAxKVwiIGNsYXNzPVwibmV4dC1idXR0b24gZmEtc29saWQgZmEtYW5nbGUtcmlnaHRcIj48L2k+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInByZXZpZXctbmF2XCIgKm5nSWY9XCJtZXRhZGF0YS5wcmV2aWV3ICYmIG1ldGFkYXRhLm11bHRpcGxlXCI+XG4gICAgICAgIDxidXR0b24gKGNsaWNrKT1cInNldEluZGV4KGltYWdlSW5kZXgtNClcIiBtYXQtaWNvbi1idXR0b24gKm5nSWY9XCJcbiAgICAgICAgICAgIHRoaXMubXVsdGlQcmV2aWV3SW1hZ2VzXG4gICAgICAgICAgICAmJiBtdWx0aVByZXZpZXdJbWFnZXNbaW1hZ2VJbmRleC00XVxuICAgICAgICAgICAgJiYgaW1hZ2VJbmRleCA9PT0gKHRoaXMubXVsdGlQcmV2aWV3SW1hZ2VzLmxlbmd0aCAtIDEpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkb3RcIj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImltYWdlLWluZGV4XCI+e3tpbWFnZUluZGV4IC0gM319PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPCEtLSBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L3RlbXBsYXRlL2NvbmRpdGlvbmFsLWNvbXBsZXhpdHkgLS0+XG4gICAgICAgIDxidXR0b24gKGNsaWNrKT1cInNldEluZGV4KGltYWdlSW5kZXgtMylcIiBtYXQtaWNvbi1idXR0b24gKm5nSWY9XCJ0aGlzLm11bHRpUHJldmlld0ltYWdlc1xuICAgICAgICAgICAgJiYgbXVsdGlQcmV2aWV3SW1hZ2VzW2ltYWdlSW5kZXgtM11cbiAgICAgICAgICAgICYmIChcbiAgICAgICAgICAgICAgICBpbWFnZUluZGV4ID09PSAodGhpcy5tdWx0aVByZXZpZXdJbWFnZXMubGVuZ3RoIC0gMilcbiAgICAgICAgICAgICAgICB8fCBpbWFnZUluZGV4ID09PSAodGhpcy5tdWx0aVByZXZpZXdJbWFnZXMubGVuZ3RoIC0gMSlcbiAgICAgICAgICAgIClcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRvdFwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW1hZ2UtaW5kZXhcIj57e2ltYWdlSW5kZXggLSAyfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJzZXRJbmRleChpbWFnZUluZGV4LTIpXCIgbWF0LWljb24tYnV0dG9uICpuZ0lmPVwibXVsdGlQcmV2aWV3SW1hZ2VzPy5baW1hZ2VJbmRleC0yXVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkb3RcIj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImltYWdlLWluZGV4XCI+e3tpbWFnZUluZGV4IC0gMX19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwic2V0SW5kZXgoaW1hZ2VJbmRleC0xKVwiIG1hdC1pY29uLWJ1dHRvbiAqbmdJZj1cIm11bHRpUHJldmlld0ltYWdlcz8uW2ltYWdlSW5kZXgtMV1cIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZG90XCI+PC9pPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbWFnZS1pbmRleFwiPnt7aW1hZ2VJbmRleH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gZGlzYWJsZWQ+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImRvdCBzZWxlY3RlZFwiPjwvaT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW1hZ2UtaW5kZXhcIj57e2ltYWdlSW5kZXggKyAxfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJzZXRJbmRleChpbWFnZUluZGV4KzEpXCIgbWF0LWljb24tYnV0dG9uICpuZ0lmPVwibXVsdGlQcmV2aWV3SW1hZ2VzPy5baW1hZ2VJbmRleCsxXVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkb3RcIj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImltYWdlLWluZGV4XCI+e3tpbWFnZUluZGV4ICsgMn19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwic2V0SW5kZXgoaW1hZ2VJbmRleCsyKVwiIG1hdC1pY29uLWJ1dHRvbiAqbmdJZj1cIm11bHRpUHJldmlld0ltYWdlcz8uW2ltYWdlSW5kZXgrMl1cIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZG90XCI+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbWFnZS1pbmRleFwiPnt7aW1hZ2VJbmRleCArIDN9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gKGNsaWNrKT1cInNldEluZGV4KGltYWdlSW5kZXgrMylcIiBtYXQtaWNvbi1idXR0b24gKm5nSWY9XCJtdWx0aVByZXZpZXdJbWFnZXM/LltpbWFnZUluZGV4KzNdICYmIGltYWdlSW5kZXggPD0gMVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkb3RcIj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImltYWdlLWluZGV4XCI+e3tpbWFnZUluZGV4ICsgNH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwic2V0SW5kZXgoaW1hZ2VJbmRleCs0KVwiIG1hdC1pY29uLWJ1dHRvbiAqbmdJZj1cIm11bHRpUHJldmlld0ltYWdlcz8uW2ltYWdlSW5kZXgrNF0gJiYgaW1hZ2VJbmRleCA9PT0gMFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkb3RcIj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImltYWdlLWluZGV4XCI+e3tpbWFnZUluZGV4ICsgNX19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJpbWFnZS1wcmV2aWV3XCIgKm5nSWY9XCJtZXRhZGF0YS5wcmV2aWV3ICYmICFtZXRhZGF0YS5tdWx0aXBsZVwiPlxuICAgICAgICA8aSBjbGFzcz1cInByZXYtYnV0dG9uIGRpc2FibGVkIGZhLXNvbGlkIGZhLWFuZ2xlLWxlZnRcIj48L2k+XG4gICAgICAgIDxpbWcgY2xhc3M9XCJtYXQtZWxldmF0aW9uLXoyXCIgW3NyY109XCJzaW5nbGVQcmV2aWV3SW1hZ2UgPz8gbWV0YWRhdGEucHJldmlld1BsYWNlaG9sZGVyVXJsID8/IHBsYWNlSG9sZGVyXCI+XG4gICAgICAgIDxpIGNsYXNzPVwibmV4dC1idXR0b24gZGlzYWJsZWQgZmEtc29saWQgZmEtYW5nbGUtcmlnaHRcIj48L2k+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInByZXZpZXctbmF2XCIgKm5nSWY9XCJtZXRhZGF0YS5wcmV2aWV3ICYmICFtZXRhZGF0YS5tdWx0aXBsZVwiPlxuICAgICAgICA8YnV0dG9uIGRpc2FibGVkIG1hdC1pY29uLWJ1dHRvbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZG90IHNlbGVjdGVkXCI+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbWFnZS1pbmRleFwiPjE8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
78
+ }] });
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1pbWFnZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jb21wb25lbnRzL2lucHV0L2ZpbGUvZmlsZS1pbWFnZS1pbnB1dC9maWxlLWltYWdlLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1tYXRlcmlhbC1lbnRpdHkvc3JjL2NvbXBvbmVudHMvaW5wdXQvZmlsZS9maWxlLWltYWdlLWlucHV0L2ZpbGUtaW1hZ2UtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0NBQXdDO0FBQ3hDLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBR25FLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUVyRSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7QUFRNUUsTUFBTSxPQUFPLHVCQUNULFNBQVEsOEJBQXFFO0lBUGpGOztRQVNJLGtCQUFhLEdBQUcsYUFBYSxDQUFDO1FBSTlCLGVBQVUsR0FBVyxDQUFDLENBQUM7UUFDdkIsZ0JBQVcsR0FBRyxXQUFXLENBQUM7S0E4RDdCO0lBNURXLEtBQUssQ0FBQyxxQkFBcUI7UUFDL0IsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUF5QixDQUFDO1FBQ25FLElBQUksY0FBYyxFQUFFO1lBQ2hCLGNBQWMsR0FBRyxNQUFNLGFBQWEsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDakUsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQU0sYUFBYSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN6RjthQUNJO1lBQ0QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFNBQVMsQ0FBQztTQUN2QztJQUNMLENBQUM7SUFFTyxLQUFLLENBQUMscUJBQXFCLENBQUMsS0FBYTtRQUM3QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQTJCLENBQUM7UUFDdEUsTUFBTSxhQUFhLEdBQWEsRUFBRSxDQUFDO1FBQ25DLElBQUksYUFBYSxFQUFFLE1BQU0sRUFBRTtZQUN2QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDM0MsSUFBSSxDQUFDLEtBQUssS0FBSyxFQUFFO29CQUNiLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLGFBQWEsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQzdFLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxhQUFhLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQVksQ0FBVyxDQUFDLENBQUM7aUJBQzNHO3FCQUNJO29CQUNELGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQy9CO2FBQ0o7U0FDSjtRQUNELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxhQUFhLENBQUM7SUFDNUMsQ0FBQztJQUVELEtBQUssQ0FBQyxlQUFlLENBQUMsUUFBZ0M7UUFDakQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUF1QyxHQUFHLFFBQVEsQ0FBQztRQUN4RSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtZQUN4QixJQUFJLENBQUMsQ0FBRSxRQUFtQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUU7Z0JBQzVELElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO2FBQ3ZCO1lBQ0QsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3JEO2FBQ0k7WUFDRCxNQUFNLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1NBQ3RDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJO1FBQ04sSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRTtZQUNyQixNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3RELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUNyQjtJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSTtRQUNOLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRTtZQUM3RixNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3RELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUNyQjtJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQWE7UUFDeEIsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDNUIsQ0FBQzs7cUhBckVRLHVCQUF1Qjt5R0FBdkIsdUJBQXVCLCtFQ2ZwQyw0NElBMEVNOzRGRDNETyx1QkFBdUI7a0JBTm5DLFNBQVM7K0JBRUksa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUganNkb2MvcmVxdWlyZS1qc2RvYyAqL1xuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZpbGVVdGlsaXRpZXMgfSBmcm9tICcuLi8uLi8uLi8uLi9jbGFzc2VzL2ZpbGUudXRpbGl0aWVzJztcbmltcG9ydCB7IERlY29yYXRvclR5cGVzIH0gZnJvbSAnLi4vLi4vLi4vLi4vZGVjb3JhdG9ycy9iYXNlL2RlY29yYXRvci10eXBlcy5lbnVtJztcbmltcG9ydCB7IEZpbGVEYXRhIH0gZnJvbSAnLi4vLi4vLi4vLi4vZGVjb3JhdG9ycy9maWxlL2ZpbGUtZGVjb3JhdG9yLmRhdGEnO1xuaW1wb3J0IHsgcGxhY2Vob2xkZXIgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2Nrcy9wbGFjZWhvbGRlci1kYXRhLnBuZyc7XG5pbXBvcnQgeyBCYXNlRW50aXR5VHlwZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NsYXNzZXMvZW50aXR5Lm1vZGVsJztcbmltcG9ydCB7IE5neE1hdEVudGl0eUJhc2VJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2Jhc2UtaW5wdXQuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ2ZpbGUtaW1hZ2UtaW5wdXQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9maWxlLWltYWdlLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9maWxlLWltYWdlLWlucHV0LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgRmlsZUltYWdlSW5wdXRDb21wb25lbnQ8RW50aXR5VHlwZSBleHRlbmRzIEJhc2VFbnRpdHlUeXBlPEVudGl0eVR5cGU+PlxuICAgIGV4dGVuZHMgTmd4TWF0RW50aXR5QmFzZUlucHV0Q29tcG9uZW50PEVudGl0eVR5cGUsIERlY29yYXRvclR5cGVzLkZJTEVfSU1BR0U+IGltcGxlbWVudHMgT25Jbml0IHtcblxuICAgIEZpbGVVdGlsaXRpZXMgPSBGaWxlVXRpbGl0aWVzO1xuXG4gICAgc2luZ2xlUHJldmlld0ltYWdlPzogc3RyaW5nO1xuICAgIG11bHRpUHJldmlld0ltYWdlcz86IHN0cmluZ1tdO1xuICAgIGltYWdlSW5kZXg6IG51bWJlciA9IDA7XG4gICAgcGxhY2VIb2xkZXIgPSBwbGFjZWhvbGRlcjtcblxuICAgIHByaXZhdGUgYXN5bmMgc2V0U2luZ2xlUHJldmlld0ltYWdlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBsZXQgc2luZ2xlRmlsZURhdGEgPSB0aGlzLmVudGl0eVt0aGlzLmtleV0gYXMgRmlsZURhdGEgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChzaW5nbGVGaWxlRGF0YSkge1xuICAgICAgICAgICAgc2luZ2xlRmlsZURhdGEgPSBhd2FpdCBGaWxlVXRpbGl0aWVzLmdldEZpbGVEYXRhKHNpbmdsZUZpbGVEYXRhKTtcbiAgICAgICAgICAgIHRoaXMuc2luZ2xlUHJldmlld0ltYWdlID0gYXdhaXQgRmlsZVV0aWxpdGllcy5nZXREYXRhVVJMRnJvbUZpbGUoc2luZ2xlRmlsZURhdGEuZmlsZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNpbmdsZVByZXZpZXdJbWFnZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgc2V0TXVsdGlQcmV2aWV3SW1hZ2VzKGluZGV4OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgbXVsdGlGaWxlRGF0YSA9IHRoaXMuZW50aXR5W3RoaXMua2V5XSBhcyBGaWxlRGF0YVtdIHwgdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBwcmV2aWV3SW1hZ2VzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBpZiAobXVsdGlGaWxlRGF0YT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG11bHRpRmlsZURhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaSA9PT0gaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgbXVsdGlGaWxlRGF0YVtpbmRleF0gPSBhd2FpdCBGaWxlVXRpbGl0aWVzLmdldEZpbGVEYXRhKG11bHRpRmlsZURhdGFbaW5kZXhdKTtcbiAgICAgICAgICAgICAgICAgICAgcHJldmlld0ltYWdlcy5wdXNoKGF3YWl0IEZpbGVVdGlsaXRpZXMuZ2V0RGF0YVVSTEZyb21GaWxlKG11bHRpRmlsZURhdGFbaW5kZXhdLmZpbGUgYXMgQmxvYikgYXMgc3RyaW5nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHByZXZpZXdJbWFnZXMucHVzaCgnZW1wdHknKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tdWx0aVByZXZpZXdJbWFnZXMgPSBwcmV2aWV3SW1hZ2VzO1xuICAgIH1cblxuICAgIGFzeW5jIHJlZnJlc2hGaWxlRGF0YShmaWxlRGF0YT86IEZpbGVEYXRhIHwgRmlsZURhdGFbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICAodGhpcy5lbnRpdHlbdGhpcy5rZXldIGFzIEZpbGVEYXRhIHwgRmlsZURhdGFbXSB8IHVuZGVmaW5lZCkgPSBmaWxlRGF0YTtcbiAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgICAgIGlmICh0aGlzLm1ldGFkYXRhLm11bHRpcGxlKSB7XG4gICAgICAgICAgICBpZiAoISgoZmlsZURhdGEgYXMgRmlsZURhdGFbXSB8IHVuZGVmaW5lZCk/Llt0aGlzLmltYWdlSW5kZXhdKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2VJbmRleCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNldE11bHRpUHJldmlld0ltYWdlcyh0aGlzLmltYWdlSW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXRTaW5nbGVQcmV2aWV3SW1hZ2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIHByZXYoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLmltYWdlSW5kZXggPiAwKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNldE11bHRpUHJldmlld0ltYWdlcyh0aGlzLmltYWdlSW5kZXggLSAxKTtcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VJbmRleC0tO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgbmV4dCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMubXVsdGlQcmV2aWV3SW1hZ2VzPy5sZW5ndGggJiYgdGhpcy5pbWFnZUluZGV4ICE9PSAodGhpcy5tdWx0aVByZXZpZXdJbWFnZXMubGVuZ3RoIC0gMSkpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2V0TXVsdGlQcmV2aWV3SW1hZ2VzKHRoaXMuaW1hZ2VJbmRleCArIDEpO1xuICAgICAgICAgICAgdGhpcy5pbWFnZUluZGV4Kys7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBzZXRJbmRleChpbmRleDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0TXVsdGlQcmV2aWV3SW1hZ2VzKGluZGV4KTtcbiAgICAgICAgdGhpcy5pbWFnZUluZGV4ID0gaW5kZXg7XG4gICAgfVxufSIsIjxkaXYgKm5nSWY9XCIhbWV0YWRhdGEuZHJhZ0FuZERyb3AgJiYgIW1ldGFkYXRhLnByZXZpZXdcIj5cbiAgICA8ZmlsZS1pbnB1dCAoZmlsZURhdGFDaGFuZ2VFdmVudCk9XCJyZWZyZXNoRmlsZURhdGEoJGV2ZW50KVwiIFtlbnRpdHldPVwiZW50aXR5XCIgW2tleV09XCJrZXlcIiBbZ2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZV09XCJnZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlXCI+PC9maWxlLWlucHV0PlxuPC9kaXY+XG5cbjxkaXYgKm5nSWY9XCJtZXRhZGF0YS5kcmFnQW5kRHJvcCB8fCBtZXRhZGF0YS5wcmV2aWV3XCIgY2xhc3M9XCJmaWxlLWlucHV0IG1hdC1lbGV2YXRpb24tejhcIj5cbiAgICA8ZmlsZS1pbnB1dCAoZmlsZURhdGFDaGFuZ2VFdmVudCk9XCJyZWZyZXNoRmlsZURhdGEoJGV2ZW50KVwiIFtlbnRpdHldPVwiZW50aXR5XCIgW2tleV09XCJrZXlcIiBbZ2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZV09XCJnZXRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlXCI+PC9maWxlLWlucHV0PlxuXG4gICAgPGRpdiBjbGFzcz1cImltYWdlLXByZXZpZXdcIiAqbmdJZj1cIm1ldGFkYXRhLnByZXZpZXcgJiYgbWV0YWRhdGEubXVsdGlwbGVcIj5cbiAgICAgICAgPGkgKGNsaWNrKT1cInByZXYoKVwiIFtjbGFzcy5kaXNhYmxlZF09XCJpbWFnZUluZGV4ID09PSAwXCIgY2xhc3M9XCJwcmV2LWJ1dHRvbiBmYS1zb2xpZCBmYS1hbmdsZS1sZWZ0XCI+PC9pPlxuICAgICAgICA8aW1nICpuZ0lmPVwibXVsdGlQcmV2aWV3SW1hZ2VzPy5baW1hZ2VJbmRleF1cIiBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejJcIiBbc3JjXT1cIm11bHRpUHJldmlld0ltYWdlcz8uW2ltYWdlSW5kZXhdXCI+XG4gICAgICAgIDxpbWcgKm5nSWY9XCIhbXVsdGlQcmV2aWV3SW1hZ2VzPy5baW1hZ2VJbmRleF1cIiBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejJcIiBbc3JjXT1cIm1ldGFkYXRhLnByZXZpZXdQbGFjZWhvbGRlclVybCA/PyBwbGFjZUhvbGRlclwiPlxuICAgICAgICA8aSAoY2xpY2spPVwibmV4dCgpXCIgW2NsYXNzLmRpc2FibGVkXT1cIiFtdWx0aVByZXZpZXdJbWFnZXMgfHwgIW11bHRpUHJldmlld0ltYWdlcy5sZW5ndGggfHwgaW1hZ2VJbmRleCA9PT0gKG11bHRpUHJldmlld0ltYWdlcy5sZW5ndGggLSAxKVwiIGNsYXNzPVwibmV4dC1idXR0b24gZmEtc29saWQgZmEtYW5nbGUtcmlnaHRcIj48L2k+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInByZXZpZXctbmF2XCIgKm5nSWY9XCJtZXRhZGF0YS5wcmV2aWV3ICYmIG1ldGFkYXRhLm11bHRpcGxlXCI+XG4gICAgICAgIDxidXR0b24gKGNsaWNrKT1cInNldEluZGV4KGltYWdlSW5kZXgtNClcIiBtYXQtaWNvbi1idXR0b24gKm5nSWY9XCJcbiAgICAgICAgICAgIHRoaXMubXVsdGlQcmV2aWV3SW1hZ2VzXG4gICAgICAgICAgICAmJiBtdWx0aVByZXZpZXdJbWFnZXNbaW1hZ2VJbmRleC00XVxuICAgICAgICAgICAgJiYgaW1hZ2VJbmRleCA9PT0gKHRoaXMubXVsdGlQcmV2aWV3SW1hZ2VzLmxlbmd0aCAtIDEpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkb3RcIj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImltYWdlLWluZGV4XCI+e3tpbWFnZUluZGV4IC0gM319PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPCEtLSBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L3RlbXBsYXRlL2NvbmRpdGlvbmFsLWNvbXBsZXhpdHkgLS0+XG4gICAgICAgIDxidXR0b24gKGNsaWNrKT1cInNldEluZGV4KGltYWdlSW5kZXgtMylcIiBtYXQtaWNvbi1idXR0b24gKm5nSWY9XCJ0aGlzLm11bHRpUHJldmlld0ltYWdlc1xuICAgICAgICAgICAgJiYgbXVsdGlQcmV2aWV3SW1hZ2VzW2ltYWdlSW5kZXgtM11cbiAgICAgICAgICAgICYmIChcbiAgICAgICAgICAgICAgICBpbWFnZUluZGV4ID09PSAodGhpcy5tdWx0aVByZXZpZXdJbWFnZXMubGVuZ3RoIC0gMilcbiAgICAgICAgICAgICAgICB8fCBpbWFnZUluZGV4ID09PSAodGhpcy5tdWx0aVByZXZpZXdJbWFnZXMubGVuZ3RoIC0gMSlcbiAgICAgICAgICAgIClcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRvdFwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW1hZ2UtaW5kZXhcIj57e2ltYWdlSW5kZXggLSAyfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJzZXRJbmRleChpbWFnZUluZGV4LTIpXCIgbWF0LWljb24tYnV0dG9uICpuZ0lmPVwibXVsdGlQcmV2aWV3SW1hZ2VzPy5baW1hZ2VJbmRleC0yXVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkb3RcIj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImltYWdlLWluZGV4XCI+e3tpbWFnZUluZGV4IC0gMX19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwic2V0SW5kZXgoaW1hZ2VJbmRleC0xKVwiIG1hdC1pY29uLWJ1dHRvbiAqbmdJZj1cIm11bHRpUHJldmlld0ltYWdlcz8uW2ltYWdlSW5kZXgtMV1cIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZG90XCI+PC9pPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbWFnZS1pbmRleFwiPnt7aW1hZ2VJbmRleH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gZGlzYWJsZWQ+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImRvdCBzZWxlY3RlZFwiPjwvaT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW1hZ2UtaW5kZXhcIj57e2ltYWdlSW5kZXggKyAxfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJzZXRJbmRleChpbWFnZUluZGV4KzEpXCIgbWF0LWljb24tYnV0dG9uICpuZ0lmPVwibXVsdGlQcmV2aWV3SW1hZ2VzPy5baW1hZ2VJbmRleCsxXVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkb3RcIj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImltYWdlLWluZGV4XCI+e3tpbWFnZUluZGV4ICsgMn19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwic2V0SW5kZXgoaW1hZ2VJbmRleCsyKVwiIG1hdC1pY29uLWJ1dHRvbiAqbmdJZj1cIm11bHRpUHJldmlld0ltYWdlcz8uW2ltYWdlSW5kZXgrMl1cIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZG90XCI+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbWFnZS1pbmRleFwiPnt7aW1hZ2VJbmRleCArIDN9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gKGNsaWNrKT1cInNldEluZGV4KGltYWdlSW5kZXgrMylcIiBtYXQtaWNvbi1idXR0b24gKm5nSWY9XCJtdWx0aVByZXZpZXdJbWFnZXM/LltpbWFnZUluZGV4KzNdICYmIGltYWdlSW5kZXggPD0gMVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkb3RcIj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImltYWdlLWluZGV4XCI+e3tpbWFnZUluZGV4ICsgNH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwic2V0SW5kZXgoaW1hZ2VJbmRleCs0KVwiIG1hdC1pY29uLWJ1dHRvbiAqbmdJZj1cIm11bHRpUHJldmlld0ltYWdlcz8uW2ltYWdlSW5kZXgrNF0gJiYgaW1hZ2VJbmRleCA9PT0gMFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkb3RcIj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImltYWdlLWluZGV4XCI+e3tpbWFnZUluZGV4ICsgNX19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJpbWFnZS1wcmV2aWV3XCIgKm5nSWY9XCJtZXRhZGF0YS5wcmV2aWV3ICYmICFtZXRhZGF0YS5tdWx0aXBsZVwiPlxuICAgICAgICA8aSBjbGFzcz1cInByZXYtYnV0dG9uIGRpc2FibGVkIGZhLXNvbGlkIGZhLWFuZ2xlLWxlZnRcIj48L2k+XG4gICAgICAgIDxpbWcgY2xhc3M9XCJtYXQtZWxldmF0aW9uLXoyXCIgW3NyY109XCJzaW5nbGVQcmV2aWV3SW1hZ2UgPz8gbWV0YWRhdGEucHJldmlld1BsYWNlaG9sZGVyVXJsID8/IHBsYWNlSG9sZGVyXCI+XG4gICAgICAgIDxpIGNsYXNzPVwibmV4dC1idXR0b24gZGlzYWJsZWQgZmEtc29saWQgZmEtYW5nbGUtcmlnaHRcIj48L2k+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInByZXZpZXctbmF2XCIgKm5nSWY9XCJtZXRhZGF0YS5wcmV2aWV3ICYmICFtZXRhZGF0YS5tdWx0aXBsZVwiPlxuICAgICAgICA8YnV0dG9uIGRpc2FibGVkIG1hdC1pY29uLWJ1dHRvbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZG90IHNlbGVjdGVkXCI+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbWFnZS1pbmRleFwiPjE8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9kaXY+Il19