barsa-sap-ui 2.0.39 → 2.0.41

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 (24) hide show
  1. package/esm2022/lib/barsa-chat/barsa-chat.component.mjs +15 -35
  2. package/esm2022/lib/barsa-chat/chat.model.mjs +1 -1
  3. package/esm2022/lib/barsa-chat-list/barsa-chat-list.component.mjs +22 -14
  4. package/esm2022/lib/barsa-chat-message/barsa-chat-message.component.mjs +4 -4
  5. package/esm2022/lib/constants.mjs +10 -6
  6. package/esm2022/lib/models/grid-data-provider.mjs +28 -2
  7. package/esm2022/lib/sap-ui-report-base.component.mjs +7 -3
  8. package/esm2022/lib/ui-grid-sort-item/ui-grid-sort-item.component.mjs +3 -3
  9. package/esm2022/lib/ui-grid-sort-setting/ui-grid-sort-setting.component.mjs +3 -34
  10. package/esm2022/lib/ui-linear-list-container-with-button/ui-linear-list-container-with-button.component.mjs +7 -5
  11. package/esm2022/lib/ui-pdf-viewer/ui-pdf-viewer.component.mjs +16 -9
  12. package/esm2022/lib/ui-text-field-auto-complete/ui-text-field-auto-complete.component.mjs +3 -3
  13. package/esm2022/lib/ulv-form-multi-select/ulv-form-multi-select.component.mjs +8 -4
  14. package/esm2022/lib/ulv-selection/ulv-selection.component.mjs +3 -3
  15. package/esm2022/lib/ulv-sort-settings/ulv-sort-settings.component.mjs +12 -2
  16. package/fesm2022/barsa-sap-ui.mjs +124 -110
  17. package/fesm2022/barsa-sap-ui.mjs.map +1 -1
  18. package/lib/barsa-chat/barsa-chat.component.d.ts +3 -4
  19. package/lib/barsa-chat/chat.model.d.ts +1 -1
  20. package/lib/barsa-chat-list/barsa-chat-list.component.d.ts +15 -2
  21. package/lib/barsa-chat-message/barsa-chat-message.component.d.ts +1 -1
  22. package/lib/ui-pdf-viewer/ui-pdf-viewer.component.d.ts +1 -0
  23. package/lib/ulv-form-multi-select/ulv-form-multi-select.component.d.ts +2 -1
  24. package/package.json +1 -1
@@ -12,7 +12,7 @@ import * as i8 from "../util-date-to-hh-mm.pipe";
12
12
  export class BarsaChatMessageComponent {
13
13
  constructor() {
14
14
  this.reply = new EventEmitter();
15
- this.userId = 1234;
15
+ this.userId = '_IougKSKlxFxAftSI7a48Szk-GkM1';
16
16
  }
17
17
  imageRatio(image) {
18
18
  const { originalWidth, originalHeight } = image;
@@ -31,7 +31,7 @@ export class BarsaChatMessageComponent {
31
31
  return { ...image, displayWidth, displayHeight };
32
32
  }
33
33
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: BarsaChatMessageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
34
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: BarsaChatMessageComponent, selector: "bsu-barsa-chat-message", inputs: { message: "message", showSender: "showSender", nextIsSame: "nextIsSame", pervIsSame: "pervIsSame", badge: "badge", nextHasBadge: "nextHasBadge", badgeLabel: "badgeLabel" }, outputs: { reply: "reply" }, ngImport: i0, template: "<div\n class=\"tw-w-full tw-px-4 tw-flex tw-flex-wrap\"\n [ngClass]=\"{\n'tw-pt-1': pervIsSame,\n'tw-pt-3': !pervIsSame,\n}\"\n>\n @if (badge) {\n <div class=\"tw-w-full tw-pb-6 tw-pt-5\">\n <div class=\"tw-w-fit tw-bg-zinc-500 tw-text-white tw-px-4 tw-mx-auto tw-rounded-full tw-text-md\">\n {{ badgeLabel }}\n </div>\n </div>\n }\n <div\n class=\"tw-w-full tw-flex tw-gap-2 tw-items-end tw-relative\"\n [ngClass]=\"{\n'tw-justify-start': message.owner.id === userId,\n'tw-flex-row-reverse': message.owner.id !== userId,\n'tw-ms-14': (nextIsSame && !nextHasBadge) && message.owner.id === userId,\n'tw-me-14': (nextIsSame && !nextHasBadge) && message.owner.id !== userId,\n }\"\n >\n @if (!nextIsSame || nextHasBadge) {\n <fd-avatar\n size=\"s\"\n [label]=\"message.owner?.name\"\n [circle]=\"true\"\n [image]=\"message.owner?.avatar\"\n [placeholder]=\"message.owner.avatar ? false : true\"\n ></fd-avatar>\n } @if (!nextIsSame || nextHasBadge) {\n <div\n class=\"tw-bg-transparent tw-overflow-hidden tw-size-3 tw-absolute tw-bottom-0 tw-border-[6px] tw-border-t-transparent\"\n [ngClass]=\"{\n 'tw-right-11 tw-border-b-bubble-mine tw-border-l-bubble-mine tw-border-r-transparent':\n message.owner.id === userId,\n 'tw-left-11 tw-border-b-default tw-border-r-default tw-border-l-transparent':\n message.owner.id !== userId\n }\"\n ></div>\n }\n <div\n @inPaneAnimation\n class=\"tw-max-w-[80%] tw-min-w-40 tw-rounded-2xl tw-text-base tw-relative tw-overflow-hidden\"\n [ngClass]=\"{\n '!tw-rounded-br-none':\n message.owner.id === userId && (nextHasBadge || (nextIsSame && !nextHasBadge) || !nextIsSame),\n '!tw-rounded-bl-none':\n message.owner.id !== userId && (nextHasBadge || (nextIsSame && !nextHasBadge) || !nextIsSame),\n '!tw-rounded-tr-none': message.owner.id === userId && pervIsSame && !badge,\n '!tw-rounded-tl-none': message.owner.id !== userId && pervIsSame && !badge\n }\"\n >\n @if (showSender && (!pervIsSame || badge)) {\n <div\n [ngClass]=\"{\n'tw-bg-bubble-mine': message.owner.id === userId && !message.image,\n'tw-bg-default': message.owner.id !== userId && !message.image,\n'tw-absolute tw-top-0 tw-right-0 tw-pb-8 tw-w-full tw-rounded-tr-2xl tw-bg-gradient-to-b tw-to-transparent': message.image,\n'tw-from-bubble-mine': message.owner.id === userId && message.image,\n'tw-from-default': message.owner.id !== userId && message.image,\n }\"\n class=\"tw-font-bold tw-text-base tw-px-3 tw-pt-2 tw-z-10\"\n >\n {{ message.owner.name }}\n </div>\n } @if (message.image) { @if (imageRatio(message.image); as image) {\n <div\n [ngClass]=\"{\n'tw-bg-bubble-mine/[.3]': message.owner.id === userId,\n'tw-bg-default/[.3]': message.owner.id !== userId,\n }\"\n class=\"tw-flex tw-justify-center tw-items-center tw-bg-zinc-500/[.3] tw-relative\"\n >\n <a\n [download]=\"message.image.name\"\n href=\"assets/bg-chat.jpg\"\n target=\"_blank\"\n class=\"tw-absolute tw-w-full tw-h-full tw-bg-black/[.4] dark:tw-bg-white/[.4] tw-opacity-0 hover:tw-opacity-100 tw-transition-all tw-cursor-pointer tw-flex tw-justify-center tw-items-center\"\n >\n <fd-icon class=\"!tw-text-default !tw-text-3xl\" glyph=\"download\"></fd-icon>\n </a>\n <img\n [ngStyle]=\"{\n width: image.displayWidth + 'px',\n height: image.displayHeight + 'px'\n }\"\n [src]=\"image.url\"\n />\n </div>\n } } @if (message.file?.name) {\n <div\n [ngClass]=\"{\n'tw-bg-bubble-mine': message.owner.id === userId,\n'tw-bg-default': message.owner.id !== userId,\n }\"\n class=\"tw-px-2 tw-pt-2 w-full tw-flex tw-gap-2\"\n >\n <a\n [download]=\"message.file?.FileName\"\n href=\"assets/bg-chat.jpg\"\n target=\"_blank\"\n class=\"tw-shrink-0 tw-row-0 tw-size-12 tw-rounded-lg tw-bg-orange-400 tw-flex tw-justify-center tw-items-center tw-cursor-pointer tw-transition-all hover:tw-bg-orange-600\"\n >\n <span class=\"tw-font-bold leading-6 tw-text-lg tw-text-white\">\n {{ message.file?.Type }}\n </span>\n </a>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-font-bold tw-text-md tw-text-base tw-w-full tw-truncate\">\n {{ message.file?.FileName }}</span\n >\n <span class=\"tw-text-sm tw-text-gray-500 dark:tw-text-gray-400 tw-w-full tw-truncate\">\n {{ message.file?.Size }}</span\n >\n </div>\n </div>\n } @if (message.text) {\n <div\n [ngClass]=\"{\n'tw-bg-bubble-mine': message.owner.id === userId,\n'tw-bg-default': message.owner.id !== userId,\n }\"\n class=\"tw-whitespace-pre-line tw-px-3 tw-pt-1\"\n [innerHTML]=\"message.text\"\n ></div>\n }\n <div\n class=\"tw-flex tw-w-full tw-px-2 tw-pt-1 tw-pb-2 tw-items-center tw-gap-2 tw-justify-end\"\n [ngClass]=\"{\n'tw-bg-bubble-mine': message.owner.id === userId,\n'tw-bg-default tw-flex-row-reverse': message.owner.id !== userId,\n}\"\n >\n <span class=\"tw-text-xs tw-text-gray-500 dark:tw-text-gray-300\">{{\n message.createdAt | utilDateToHhMm\n }}</span>\n <fd-popover placement=\"bottom-end\" title=\"bottom-end\">\n <fd-popover-control>\n <button\n fd-button\n fdType=\"transparent\"\n [fdCompact]=\"true\"\n glyph=\"navigation-down-arrow\"\n ></button>\n </fd-popover-control>\n <fd-popover-body minWidth=\"10rem\">\n <div class=\"tw-flex tw-flex-col tw-bg-default tw-w-full\" bodyClick>\n <label\n class=\"tw-px-4 tw-py-2 tw-flex tw-gap-2 tw-w-full hover:tw-bg-base/[.1] tw-transition-all tw-cursor-pointer\"\n (click)=\"reply.emit(message)\"\n >\n <fd-icon class=\"!tw-text-base !tw-text-3xl\" glyph=\"undo\"></fd-icon>\n <span class=\"!tw-text-base\">\u067E\u0627\u0633\u062E \u062F\u0627\u062F\u0646</span>\n </label>\n <label\n class=\"tw-px-4 tw-py-2 tw-flex tw-gap-2 tw-w-full hover:tw-bg-base/[.1] tw-transition-all tw-cursor-pointer\"\n >\n <fd-icon class=\"!tw-text-base !tw-text-3xl\" glyph=\"forward\"></fd-icon>\n <span class=\"!tw-text-base\">\u0627\u0631\u0633\u0627\u0644 \u06A9\u0631\u062F\u0646</span>\n </label>\n <label\n class=\"tw-px-4 tw-py-2 tw-flex tw-gap-2 tw-w-full hover:tw-bg-base/[.1] tw-transition-all tw-cursor-pointer\"\n >\n <fd-icon class=\"!tw-text-base !tw-text-3xl\" glyph=\"delete\"></fd-icon>\n <span class=\"!tw-text-base\">\u062D\u0630\u0641</span>\n </label>\n </div>\n </fd-popover-body>\n </fd-popover>\n </div>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.BodyClickDirective, selector: "[bodyClick]", inputs: ["disableBodyClick"] }, { kind: "component", type: i3.AvatarComponent, selector: "fd-avatar", inputs: ["class", "id", "ariaLabel", "ariaLabelledby", "label", "size", "font", "glyph", "zoomGlyph", "circle", "transparent", "contain", "placeholder", "tile", "border", "colorAccent", "random", "clickable", "valueState", "image", "alterIcon", "backupImage"], outputs: ["avatarClicked", "zoomGlyphClicked"] }, { kind: "directive", type: i4.ContentDensityDirective, selector: "[fdContentDensity]:not([fdCompact]):not([fdCondensed]):not([fdCozy]), [fdCompact]:not([fdContentDensity]):not([fdCondensed]):not([fdCozy]), [fdCondensed]:not([fdContentDensity]):not([fdCompact]):not([fdCozy]), [fdCozy]:not([fdContentDensity]):not([fdCompact]):not([fdCondensed])", inputs: ["fdContentDensity", "fdCompact", "fdCondensed", "fdCozy"], exportAs: ["fdContentDensity"] }, { kind: "component", type: i5.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i6.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "class", "ariaLabel", "ariaHidden"] }, { kind: "component", type: i7.PopoverControlComponent, selector: "fd-popover-control, [fdPopoverControl]" }, { kind: "component", type: i7.PopoverBodyComponent, selector: "fd-popover-body", inputs: ["minWidth", "maxWidth", "minHeight", "maxHeight"] }, { kind: "component", type: i7.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig", "preventSpaceKeyScroll"] }, { kind: "pipe", type: i8.UtilDateToHhMmPipe, name: "utilDateToHhMm" }], animations: [
34
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: BarsaChatMessageComponent, selector: "bsu-barsa-chat-message", inputs: { message: "message", showSender: "showSender", nextIsSame: "nextIsSame", pervIsSame: "pervIsSame", badge: "badge", nextHasBadge: "nextHasBadge", badgeLabel: "badgeLabel" }, outputs: { reply: "reply" }, ngImport: i0, template: "<div\n class=\"tw-w-full tw-px-4 tw-flex tw-flex-wrap\"\n [ngClass]=\"{\n'tw-pt-1': pervIsSame,\n'tw-pt-3': !pervIsSame,\n}\"\n>\n @if (badge) {\n <div class=\"tw-w-full tw-pb-6 tw-pt-5\">\n <div class=\"tw-w-fit tw-bg-zinc-500 tw-text-white tw-px-4 tw-mx-auto tw-rounded-full tw-text-md\">\n {{ badgeLabel }}\n </div>\n </div>\n }\n <div\n class=\"tw-w-full tw-flex tw-gap-2 tw-items-end tw-relative\"\n [ngClass]=\"{\n'tw-justify-start': message.owner.id === userId,\n'tw-flex-row-reverse': message.owner.id !== userId,\n'tw-ms-14': (nextIsSame && !nextHasBadge) && message.owner.id === userId,\n'tw-me-14': (nextIsSame && !nextHasBadge) && message.owner.id !== userId,\n }\"\n >\n @if (!nextIsSame || nextHasBadge) {\n <fd-avatar\n size=\"s\"\n [label]=\"message.owner.avatar ? '' : message.owner?.name\"\n [circle]=\"true\"\n [image]=\"message.owner?.avatar\"\n [placeholder]=\"message.owner.avatar ? false : true\"\n ></fd-avatar>\n } @if (!nextIsSame || nextHasBadge) {\n <div\n class=\"tw-bg-transparent tw-overflow-hidden tw-size-3 tw-absolute tw-bottom-0 tw-border-[6px] tw-border-t-transparent\"\n [ngClass]=\"{\n 'tw-right-11 tw-border-b-bubble-mine tw-border-l-bubble-mine tw-border-r-transparent':\n message.owner.id === userId,\n 'tw-left-11 tw-border-b-default tw-border-r-default tw-border-l-transparent':\n message.owner.id !== userId\n }\"\n ></div>\n }\n <div\n @inPaneAnimation\n class=\"tw-max-w-[80%] tw-min-w-40 tw-rounded-2xl tw-text-base tw-relative tw-overflow-hidden\"\n [ngClass]=\"{\n '!tw-rounded-br-none':\n message.owner.id === userId && (nextHasBadge || (nextIsSame && !nextHasBadge) || !nextIsSame),\n '!tw-rounded-bl-none':\n message.owner.id !== userId && (nextHasBadge || (nextIsSame && !nextHasBadge) || !nextIsSame),\n '!tw-rounded-tr-none': message.owner.id === userId && pervIsSame && !badge,\n '!tw-rounded-tl-none': message.owner.id !== userId && pervIsSame && !badge\n }\"\n >\n @if (showSender && (!pervIsSame || badge)) {\n <div\n [ngClass]=\"{\n'tw-bg-bubble-mine': message.owner.id === userId && !message.image,\n'tw-bg-default': message.owner.id !== userId && !message.image,\n'tw-absolute tw-top-0 tw-right-0 tw-pb-8 tw-w-full tw-rounded-tr-2xl tw-bg-gradient-to-b tw-to-transparent': message.image,\n'tw-from-bubble-mine': message.owner.id === userId && message.image,\n'tw-from-default': message.owner.id !== userId && message.image,\n }\"\n class=\"tw-font-bold tw-text-base tw-px-3 tw-pt-2 tw-z-10\"\n >\n {{ message.owner.name }}\n </div>\n } @if (message.image) { @if (imageRatio(message.image); as image) {\n <div\n [ngClass]=\"{\n'tw-bg-bubble-mine/[.3]': message.owner.id === userId,\n'tw-bg-default/[.3]': message.owner.id !== userId,\n }\"\n class=\"tw-flex tw-justify-center tw-items-center tw-bg-zinc-500/[.3] tw-relative\"\n >\n <a\n [download]=\"message.image.name\"\n href=\"assets/bg-chat.jpg\"\n target=\"_blank\"\n class=\"tw-absolute tw-w-full tw-h-full tw-bg-black/[.4] dark:tw-bg-white/[.4] tw-opacity-0 hover:tw-opacity-100 tw-transition-all tw-cursor-pointer tw-flex tw-justify-center tw-items-center\"\n >\n <fd-icon class=\"!tw-text-default !tw-text-3xl\" glyph=\"download\"></fd-icon>\n </a>\n <img\n [ngStyle]=\"{\n width: image.displayWidth + 'px',\n height: image.displayHeight + 'px'\n }\"\n [src]=\"image.url\"\n />\n </div>\n } } @if (message.file?.name) {\n <div\n [ngClass]=\"{\n'tw-bg-bubble-mine': message.owner.id === userId,\n'tw-bg-default': message.owner.id !== userId,\n }\"\n class=\"tw-px-2 tw-pt-2 w-full tw-flex tw-gap-2\"\n >\n <a\n [download]=\"message.file?.FileName\"\n href=\"assets/bg-chat.jpg\"\n target=\"_blank\"\n class=\"tw-shrink-0 tw-row-0 tw-size-12 tw-rounded-lg tw-bg-orange-400 tw-flex tw-justify-center tw-items-center tw-cursor-pointer tw-transition-all hover:tw-bg-orange-600\"\n >\n <span class=\"tw-font-bold leading-6 tw-text-lg tw-text-white\">\n {{ message.file?.Type }}\n </span>\n </a>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-font-bold tw-text-md tw-text-base tw-w-full tw-truncate\">\n {{ message.file?.FileName }}</span\n >\n <span class=\"tw-text-sm tw-text-gray-500 dark:tw-text-gray-400 tw-w-full tw-truncate\">\n {{ message.file?.Size }}</span\n >\n </div>\n </div>\n } @if (message.text) {\n <div\n [ngClass]=\"{\n'tw-bg-bubble-mine': message.owner.id === userId,\n'tw-bg-default': message.owner.id !== userId,\n }\"\n class=\"tw-whitespace-pre-line tw-px-3 tw-pt-1\"\n [innerHTML]=\"message.text\"\n ></div>\n }\n <div\n class=\"tw-flex tw-w-full tw-px-2 tw-pt-1 tw-pb-2 tw-items-center tw-gap-2 tw-justify-end\"\n [ngClass]=\"{\n'tw-bg-bubble-mine': message.owner.id === userId,\n'tw-bg-default tw-flex-row-reverse': message.owner.id !== userId,\n}\"\n >\n <span class=\"tw-text-xs tw-text-gray-500 dark:tw-text-gray-300\">{{\n message.createdAt | utilDateToHhMm\n }}</span>\n <fd-popover placement=\"bottom-end\" title=\"bottom-end\">\n <fd-popover-control>\n <button\n fd-button\n fdType=\"transparent\"\n [fdCompact]=\"true\"\n glyph=\"navigation-down-arrow\"\n ></button>\n </fd-popover-control>\n <fd-popover-body minWidth=\"10rem\">\n <div class=\"tw-flex tw-flex-col tw-bg-default tw-w-full\" bodyClick>\n <label\n class=\"tw-px-4 tw-py-2 tw-flex tw-gap-2 tw-w-full hover:tw-bg-base/[.1] tw-transition-all tw-cursor-pointer\"\n (click)=\"reply.emit(message)\"\n >\n <fd-icon class=\"!tw-text-base !tw-text-3xl\" glyph=\"undo\"></fd-icon>\n <span class=\"!tw-text-base\">\u067E\u0627\u0633\u062E \u062F\u0627\u062F\u0646</span>\n </label>\n <label\n class=\"tw-px-4 tw-py-2 tw-flex tw-gap-2 tw-w-full hover:tw-bg-base/[.1] tw-transition-all tw-cursor-pointer\"\n >\n <fd-icon class=\"!tw-text-base !tw-text-3xl\" glyph=\"forward\"></fd-icon>\n <span class=\"!tw-text-base\">\u0627\u0631\u0633\u0627\u0644 \u06A9\u0631\u062F\u0646</span>\n </label>\n <label\n class=\"tw-px-4 tw-py-2 tw-flex tw-gap-2 tw-w-full hover:tw-bg-base/[.1] tw-transition-all tw-cursor-pointer\"\n >\n <fd-icon class=\"!tw-text-base !tw-text-3xl\" glyph=\"delete\"></fd-icon>\n <span class=\"!tw-text-base\">\u062D\u0630\u0641</span>\n </label>\n </div>\n </fd-popover-body>\n </fd-popover>\n </div>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.BodyClickDirective, selector: "[bodyClick]", inputs: ["disableBodyClick"] }, { kind: "component", type: i3.AvatarComponent, selector: "fd-avatar", inputs: ["class", "id", "ariaLabel", "ariaLabelledby", "label", "size", "font", "glyph", "zoomGlyph", "circle", "transparent", "contain", "placeholder", "tile", "border", "colorAccent", "random", "clickable", "valueState", "image", "alterIcon", "backupImage"], outputs: ["avatarClicked", "zoomGlyphClicked"] }, { kind: "directive", type: i4.ContentDensityDirective, selector: "[fdContentDensity]:not([fdCompact]):not([fdCondensed]):not([fdCozy]), [fdCompact]:not([fdContentDensity]):not([fdCondensed]):not([fdCozy]), [fdCondensed]:not([fdContentDensity]):not([fdCompact]):not([fdCozy]), [fdCozy]:not([fdContentDensity]):not([fdCompact]):not([fdCondensed])", inputs: ["fdContentDensity", "fdCompact", "fdCondensed", "fdCozy"], exportAs: ["fdContentDensity"] }, { kind: "component", type: i5.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i6.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "class", "ariaLabel", "ariaHidden"] }, { kind: "component", type: i7.PopoverControlComponent, selector: "fd-popover-control, [fdPopoverControl]" }, { kind: "component", type: i7.PopoverBodyComponent, selector: "fd-popover-body", inputs: ["minWidth", "maxWidth", "minHeight", "maxHeight"] }, { kind: "component", type: i7.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig", "preventSpaceKeyScroll"] }, { kind: "pipe", type: i8.UtilDateToHhMmPipe, name: "utilDateToHhMm" }], animations: [
35
35
  trigger('inPaneAnimation', [
36
36
  transition(':enter', [
37
37
  style({ opacity: 0, transform: 'scale(0, 0)' }),
@@ -57,7 +57,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
57
57
  animate('300ms ease-in-out', style({ opacity: 0, transform: 'scale(0, 0)' }))
58
58
  ])
59
59
  ])
60
- ], template: "<div\n class=\"tw-w-full tw-px-4 tw-flex tw-flex-wrap\"\n [ngClass]=\"{\n'tw-pt-1': pervIsSame,\n'tw-pt-3': !pervIsSame,\n}\"\n>\n @if (badge) {\n <div class=\"tw-w-full tw-pb-6 tw-pt-5\">\n <div class=\"tw-w-fit tw-bg-zinc-500 tw-text-white tw-px-4 tw-mx-auto tw-rounded-full tw-text-md\">\n {{ badgeLabel }}\n </div>\n </div>\n }\n <div\n class=\"tw-w-full tw-flex tw-gap-2 tw-items-end tw-relative\"\n [ngClass]=\"{\n'tw-justify-start': message.owner.id === userId,\n'tw-flex-row-reverse': message.owner.id !== userId,\n'tw-ms-14': (nextIsSame && !nextHasBadge) && message.owner.id === userId,\n'tw-me-14': (nextIsSame && !nextHasBadge) && message.owner.id !== userId,\n }\"\n >\n @if (!nextIsSame || nextHasBadge) {\n <fd-avatar\n size=\"s\"\n [label]=\"message.owner?.name\"\n [circle]=\"true\"\n [image]=\"message.owner?.avatar\"\n [placeholder]=\"message.owner.avatar ? false : true\"\n ></fd-avatar>\n } @if (!nextIsSame || nextHasBadge) {\n <div\n class=\"tw-bg-transparent tw-overflow-hidden tw-size-3 tw-absolute tw-bottom-0 tw-border-[6px] tw-border-t-transparent\"\n [ngClass]=\"{\n 'tw-right-11 tw-border-b-bubble-mine tw-border-l-bubble-mine tw-border-r-transparent':\n message.owner.id === userId,\n 'tw-left-11 tw-border-b-default tw-border-r-default tw-border-l-transparent':\n message.owner.id !== userId\n }\"\n ></div>\n }\n <div\n @inPaneAnimation\n class=\"tw-max-w-[80%] tw-min-w-40 tw-rounded-2xl tw-text-base tw-relative tw-overflow-hidden\"\n [ngClass]=\"{\n '!tw-rounded-br-none':\n message.owner.id === userId && (nextHasBadge || (nextIsSame && !nextHasBadge) || !nextIsSame),\n '!tw-rounded-bl-none':\n message.owner.id !== userId && (nextHasBadge || (nextIsSame && !nextHasBadge) || !nextIsSame),\n '!tw-rounded-tr-none': message.owner.id === userId && pervIsSame && !badge,\n '!tw-rounded-tl-none': message.owner.id !== userId && pervIsSame && !badge\n }\"\n >\n @if (showSender && (!pervIsSame || badge)) {\n <div\n [ngClass]=\"{\n'tw-bg-bubble-mine': message.owner.id === userId && !message.image,\n'tw-bg-default': message.owner.id !== userId && !message.image,\n'tw-absolute tw-top-0 tw-right-0 tw-pb-8 tw-w-full tw-rounded-tr-2xl tw-bg-gradient-to-b tw-to-transparent': message.image,\n'tw-from-bubble-mine': message.owner.id === userId && message.image,\n'tw-from-default': message.owner.id !== userId && message.image,\n }\"\n class=\"tw-font-bold tw-text-base tw-px-3 tw-pt-2 tw-z-10\"\n >\n {{ message.owner.name }}\n </div>\n } @if (message.image) { @if (imageRatio(message.image); as image) {\n <div\n [ngClass]=\"{\n'tw-bg-bubble-mine/[.3]': message.owner.id === userId,\n'tw-bg-default/[.3]': message.owner.id !== userId,\n }\"\n class=\"tw-flex tw-justify-center tw-items-center tw-bg-zinc-500/[.3] tw-relative\"\n >\n <a\n [download]=\"message.image.name\"\n href=\"assets/bg-chat.jpg\"\n target=\"_blank\"\n class=\"tw-absolute tw-w-full tw-h-full tw-bg-black/[.4] dark:tw-bg-white/[.4] tw-opacity-0 hover:tw-opacity-100 tw-transition-all tw-cursor-pointer tw-flex tw-justify-center tw-items-center\"\n >\n <fd-icon class=\"!tw-text-default !tw-text-3xl\" glyph=\"download\"></fd-icon>\n </a>\n <img\n [ngStyle]=\"{\n width: image.displayWidth + 'px',\n height: image.displayHeight + 'px'\n }\"\n [src]=\"image.url\"\n />\n </div>\n } } @if (message.file?.name) {\n <div\n [ngClass]=\"{\n'tw-bg-bubble-mine': message.owner.id === userId,\n'tw-bg-default': message.owner.id !== userId,\n }\"\n class=\"tw-px-2 tw-pt-2 w-full tw-flex tw-gap-2\"\n >\n <a\n [download]=\"message.file?.FileName\"\n href=\"assets/bg-chat.jpg\"\n target=\"_blank\"\n class=\"tw-shrink-0 tw-row-0 tw-size-12 tw-rounded-lg tw-bg-orange-400 tw-flex tw-justify-center tw-items-center tw-cursor-pointer tw-transition-all hover:tw-bg-orange-600\"\n >\n <span class=\"tw-font-bold leading-6 tw-text-lg tw-text-white\">\n {{ message.file?.Type }}\n </span>\n </a>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-font-bold tw-text-md tw-text-base tw-w-full tw-truncate\">\n {{ message.file?.FileName }}</span\n >\n <span class=\"tw-text-sm tw-text-gray-500 dark:tw-text-gray-400 tw-w-full tw-truncate\">\n {{ message.file?.Size }}</span\n >\n </div>\n </div>\n } @if (message.text) {\n <div\n [ngClass]=\"{\n'tw-bg-bubble-mine': message.owner.id === userId,\n'tw-bg-default': message.owner.id !== userId,\n }\"\n class=\"tw-whitespace-pre-line tw-px-3 tw-pt-1\"\n [innerHTML]=\"message.text\"\n ></div>\n }\n <div\n class=\"tw-flex tw-w-full tw-px-2 tw-pt-1 tw-pb-2 tw-items-center tw-gap-2 tw-justify-end\"\n [ngClass]=\"{\n'tw-bg-bubble-mine': message.owner.id === userId,\n'tw-bg-default tw-flex-row-reverse': message.owner.id !== userId,\n}\"\n >\n <span class=\"tw-text-xs tw-text-gray-500 dark:tw-text-gray-300\">{{\n message.createdAt | utilDateToHhMm\n }}</span>\n <fd-popover placement=\"bottom-end\" title=\"bottom-end\">\n <fd-popover-control>\n <button\n fd-button\n fdType=\"transparent\"\n [fdCompact]=\"true\"\n glyph=\"navigation-down-arrow\"\n ></button>\n </fd-popover-control>\n <fd-popover-body minWidth=\"10rem\">\n <div class=\"tw-flex tw-flex-col tw-bg-default tw-w-full\" bodyClick>\n <label\n class=\"tw-px-4 tw-py-2 tw-flex tw-gap-2 tw-w-full hover:tw-bg-base/[.1] tw-transition-all tw-cursor-pointer\"\n (click)=\"reply.emit(message)\"\n >\n <fd-icon class=\"!tw-text-base !tw-text-3xl\" glyph=\"undo\"></fd-icon>\n <span class=\"!tw-text-base\">\u067E\u0627\u0633\u062E \u062F\u0627\u062F\u0646</span>\n </label>\n <label\n class=\"tw-px-4 tw-py-2 tw-flex tw-gap-2 tw-w-full hover:tw-bg-base/[.1] tw-transition-all tw-cursor-pointer\"\n >\n <fd-icon class=\"!tw-text-base !tw-text-3xl\" glyph=\"forward\"></fd-icon>\n <span class=\"!tw-text-base\">\u0627\u0631\u0633\u0627\u0644 \u06A9\u0631\u062F\u0646</span>\n </label>\n <label\n class=\"tw-px-4 tw-py-2 tw-flex tw-gap-2 tw-w-full hover:tw-bg-base/[.1] tw-transition-all tw-cursor-pointer\"\n >\n <fd-icon class=\"!tw-text-base !tw-text-3xl\" glyph=\"delete\"></fd-icon>\n <span class=\"!tw-text-base\">\u062D\u0630\u0641</span>\n </label>\n </div>\n </fd-popover-body>\n </fd-popover>\n </div>\n </div>\n </div>\n</div>\n" }]
60
+ ], template: "<div\n class=\"tw-w-full tw-px-4 tw-flex tw-flex-wrap\"\n [ngClass]=\"{\n'tw-pt-1': pervIsSame,\n'tw-pt-3': !pervIsSame,\n}\"\n>\n @if (badge) {\n <div class=\"tw-w-full tw-pb-6 tw-pt-5\">\n <div class=\"tw-w-fit tw-bg-zinc-500 tw-text-white tw-px-4 tw-mx-auto tw-rounded-full tw-text-md\">\n {{ badgeLabel }}\n </div>\n </div>\n }\n <div\n class=\"tw-w-full tw-flex tw-gap-2 tw-items-end tw-relative\"\n [ngClass]=\"{\n'tw-justify-start': message.owner.id === userId,\n'tw-flex-row-reverse': message.owner.id !== userId,\n'tw-ms-14': (nextIsSame && !nextHasBadge) && message.owner.id === userId,\n'tw-me-14': (nextIsSame && !nextHasBadge) && message.owner.id !== userId,\n }\"\n >\n @if (!nextIsSame || nextHasBadge) {\n <fd-avatar\n size=\"s\"\n [label]=\"message.owner.avatar ? '' : message.owner?.name\"\n [circle]=\"true\"\n [image]=\"message.owner?.avatar\"\n [placeholder]=\"message.owner.avatar ? false : true\"\n ></fd-avatar>\n } @if (!nextIsSame || nextHasBadge) {\n <div\n class=\"tw-bg-transparent tw-overflow-hidden tw-size-3 tw-absolute tw-bottom-0 tw-border-[6px] tw-border-t-transparent\"\n [ngClass]=\"{\n 'tw-right-11 tw-border-b-bubble-mine tw-border-l-bubble-mine tw-border-r-transparent':\n message.owner.id === userId,\n 'tw-left-11 tw-border-b-default tw-border-r-default tw-border-l-transparent':\n message.owner.id !== userId\n }\"\n ></div>\n }\n <div\n @inPaneAnimation\n class=\"tw-max-w-[80%] tw-min-w-40 tw-rounded-2xl tw-text-base tw-relative tw-overflow-hidden\"\n [ngClass]=\"{\n '!tw-rounded-br-none':\n message.owner.id === userId && (nextHasBadge || (nextIsSame && !nextHasBadge) || !nextIsSame),\n '!tw-rounded-bl-none':\n message.owner.id !== userId && (nextHasBadge || (nextIsSame && !nextHasBadge) || !nextIsSame),\n '!tw-rounded-tr-none': message.owner.id === userId && pervIsSame && !badge,\n '!tw-rounded-tl-none': message.owner.id !== userId && pervIsSame && !badge\n }\"\n >\n @if (showSender && (!pervIsSame || badge)) {\n <div\n [ngClass]=\"{\n'tw-bg-bubble-mine': message.owner.id === userId && !message.image,\n'tw-bg-default': message.owner.id !== userId && !message.image,\n'tw-absolute tw-top-0 tw-right-0 tw-pb-8 tw-w-full tw-rounded-tr-2xl tw-bg-gradient-to-b tw-to-transparent': message.image,\n'tw-from-bubble-mine': message.owner.id === userId && message.image,\n'tw-from-default': message.owner.id !== userId && message.image,\n }\"\n class=\"tw-font-bold tw-text-base tw-px-3 tw-pt-2 tw-z-10\"\n >\n {{ message.owner.name }}\n </div>\n } @if (message.image) { @if (imageRatio(message.image); as image) {\n <div\n [ngClass]=\"{\n'tw-bg-bubble-mine/[.3]': message.owner.id === userId,\n'tw-bg-default/[.3]': message.owner.id !== userId,\n }\"\n class=\"tw-flex tw-justify-center tw-items-center tw-bg-zinc-500/[.3] tw-relative\"\n >\n <a\n [download]=\"message.image.name\"\n href=\"assets/bg-chat.jpg\"\n target=\"_blank\"\n class=\"tw-absolute tw-w-full tw-h-full tw-bg-black/[.4] dark:tw-bg-white/[.4] tw-opacity-0 hover:tw-opacity-100 tw-transition-all tw-cursor-pointer tw-flex tw-justify-center tw-items-center\"\n >\n <fd-icon class=\"!tw-text-default !tw-text-3xl\" glyph=\"download\"></fd-icon>\n </a>\n <img\n [ngStyle]=\"{\n width: image.displayWidth + 'px',\n height: image.displayHeight + 'px'\n }\"\n [src]=\"image.url\"\n />\n </div>\n } } @if (message.file?.name) {\n <div\n [ngClass]=\"{\n'tw-bg-bubble-mine': message.owner.id === userId,\n'tw-bg-default': message.owner.id !== userId,\n }\"\n class=\"tw-px-2 tw-pt-2 w-full tw-flex tw-gap-2\"\n >\n <a\n [download]=\"message.file?.FileName\"\n href=\"assets/bg-chat.jpg\"\n target=\"_blank\"\n class=\"tw-shrink-0 tw-row-0 tw-size-12 tw-rounded-lg tw-bg-orange-400 tw-flex tw-justify-center tw-items-center tw-cursor-pointer tw-transition-all hover:tw-bg-orange-600\"\n >\n <span class=\"tw-font-bold leading-6 tw-text-lg tw-text-white\">\n {{ message.file?.Type }}\n </span>\n </a>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-font-bold tw-text-md tw-text-base tw-w-full tw-truncate\">\n {{ message.file?.FileName }}</span\n >\n <span class=\"tw-text-sm tw-text-gray-500 dark:tw-text-gray-400 tw-w-full tw-truncate\">\n {{ message.file?.Size }}</span\n >\n </div>\n </div>\n } @if (message.text) {\n <div\n [ngClass]=\"{\n'tw-bg-bubble-mine': message.owner.id === userId,\n'tw-bg-default': message.owner.id !== userId,\n }\"\n class=\"tw-whitespace-pre-line tw-px-3 tw-pt-1\"\n [innerHTML]=\"message.text\"\n ></div>\n }\n <div\n class=\"tw-flex tw-w-full tw-px-2 tw-pt-1 tw-pb-2 tw-items-center tw-gap-2 tw-justify-end\"\n [ngClass]=\"{\n'tw-bg-bubble-mine': message.owner.id === userId,\n'tw-bg-default tw-flex-row-reverse': message.owner.id !== userId,\n}\"\n >\n <span class=\"tw-text-xs tw-text-gray-500 dark:tw-text-gray-300\">{{\n message.createdAt | utilDateToHhMm\n }}</span>\n <fd-popover placement=\"bottom-end\" title=\"bottom-end\">\n <fd-popover-control>\n <button\n fd-button\n fdType=\"transparent\"\n [fdCompact]=\"true\"\n glyph=\"navigation-down-arrow\"\n ></button>\n </fd-popover-control>\n <fd-popover-body minWidth=\"10rem\">\n <div class=\"tw-flex tw-flex-col tw-bg-default tw-w-full\" bodyClick>\n <label\n class=\"tw-px-4 tw-py-2 tw-flex tw-gap-2 tw-w-full hover:tw-bg-base/[.1] tw-transition-all tw-cursor-pointer\"\n (click)=\"reply.emit(message)\"\n >\n <fd-icon class=\"!tw-text-base !tw-text-3xl\" glyph=\"undo\"></fd-icon>\n <span class=\"!tw-text-base\">\u067E\u0627\u0633\u062E \u062F\u0627\u062F\u0646</span>\n </label>\n <label\n class=\"tw-px-4 tw-py-2 tw-flex tw-gap-2 tw-w-full hover:tw-bg-base/[.1] tw-transition-all tw-cursor-pointer\"\n >\n <fd-icon class=\"!tw-text-base !tw-text-3xl\" glyph=\"forward\"></fd-icon>\n <span class=\"!tw-text-base\">\u0627\u0631\u0633\u0627\u0644 \u06A9\u0631\u062F\u0646</span>\n </label>\n <label\n class=\"tw-px-4 tw-py-2 tw-flex tw-gap-2 tw-w-full hover:tw-bg-base/[.1] tw-transition-all tw-cursor-pointer\"\n >\n <fd-icon class=\"!tw-text-base !tw-text-3xl\" glyph=\"delete\"></fd-icon>\n <span class=\"!tw-text-base\">\u062D\u0630\u0641</span>\n </label>\n </div>\n </fd-popover-body>\n </fd-popover>\n </div>\n </div>\n </div>\n</div>\n" }]
61
61
  }], propDecorators: { message: [{
62
62
  type: Input
63
63
  }], showSender: [{
@@ -75,4 +75,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
75
75
  }], reply: [{
76
76
  type: Output
77
77
  }] } });
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyc2EtY2hhdC1tZXNzYWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXNhcC11aS9zcmMvbGliL2JhcnNhLWNoYXQtbWVzc2FnZS9iYXJzYS1jaGF0LW1lc3NhZ2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvYmFyc2EtY2hhdC1tZXNzYWdlL2JhcnNhLWNoYXQtbWVzc2FnZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7OztBQW9CMUUsTUFBTSxPQUFPLHlCQUF5QjtJQWpCdEM7UUF5QmMsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDMUMsV0FBTSxHQUFHLElBQUksQ0FBQztLQWlCakI7SUFmRyxVQUFVLENBQUMsS0FBVTtRQUNqQixNQUFNLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxHQUFHLEtBQUssQ0FBQztRQUNoRCxJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7UUFDckIsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLElBQUksYUFBYSxHQUFHLGNBQWMsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sS0FBSyxHQUFHLGFBQWEsR0FBRyxHQUFHLENBQUM7WUFDbEMsWUFBWSxHQUFHLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDckMsYUFBYSxHQUFHLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDM0MsQ0FBQzthQUFNLENBQUM7WUFDSixNQUFNLEtBQUssR0FBRyxjQUFjLEdBQUcsR0FBRyxDQUFDO1lBQ25DLFlBQVksR0FBRyxhQUFhLEdBQUcsS0FBSyxDQUFDO1lBQ3JDLGFBQWEsR0FBRyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzNDLENBQUM7UUFDRCxPQUFPLEVBQUUsR0FBRyxLQUFLLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxDQUFDO0lBQ3JELENBQUM7OEdBekJRLHlCQUF5QjtrR0FBekIseUJBQXlCLGlSQ3JCdEMsbTJRQStLQSw4OEREdktnQjtZQUNSLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRTtnQkFDdkIsVUFBVSxDQUFDLFFBQVEsRUFBRTtvQkFDakIsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLENBQUM7b0JBQy9DLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7aUJBQ3RGLENBQUM7Z0JBQ0YsVUFBVSxDQUFDLFFBQVEsRUFBRTtvQkFDakIsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQztvQkFDckQsT0FBTyxDQUFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7aUJBQ2hGLENBQUM7YUFDTCxDQUFDO1NBQ0w7OzJGQUVRLHlCQUF5QjtrQkFqQnJDLFNBQVM7K0JBQ0ksd0JBQXdCLGNBR3RCO3dCQUNSLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRTs0QkFDdkIsVUFBVSxDQUFDLFFBQVEsRUFBRTtnQ0FDakIsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLENBQUM7Z0NBQy9DLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7NkJBQ3RGLENBQUM7NEJBQ0YsVUFBVSxDQUFDLFFBQVEsRUFBRTtnQ0FDakIsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQztnQ0FDckQsT0FBTyxDQUFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7NkJBQ2hGLENBQUM7eUJBQ0wsQ0FBQztxQkFDTDs4QkFHUSxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDSSxLQUFLO3NCQUFkLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgYW5pbWF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IE1lc3NhZ2UgfSBmcm9tICcuLi9iYXJzYS1jaGF0L2NoYXQubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2JzdS1iYXJzYS1jaGF0LW1lc3NhZ2UnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9iYXJzYS1jaGF0LW1lc3NhZ2UuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9iYXJzYS1jaGF0LW1lc3NhZ2UuY29tcG9uZW50LmNzcycsXG4gICAgYW5pbWF0aW9uczogW1xuICAgICAgICB0cmlnZ2VyKCdpblBhbmVBbmltYXRpb24nLCBbXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCc6ZW50ZXInLCBbXG4gICAgICAgICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICdzY2FsZSgwLCAwKScgfSksXG4gICAgICAgICAgICAgICAgYW5pbWF0ZSgnMzAwbXMgZWFzZS1pbi1vdXQnLCBzdHlsZSh7IG9wYWNpdHk6IDEsIHRyYW5zZm9ybTogJ3NjYWxlKDEwMCUsIDEwMCUpJyB9KSlcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignOmxlYXZlJywgW1xuICAgICAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMSwgdHJhbnNmb3JtOiAnc2NhbGUoMTAwJSwgMTAwJSknIH0pLFxuICAgICAgICAgICAgICAgIGFuaW1hdGUoJzMwMG1zIGVhc2UtaW4tb3V0Jywgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICdzY2FsZSgwLCAwKScgfSkpXG4gICAgICAgICAgICBdKVxuICAgICAgICBdKVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgQmFyc2FDaGF0TWVzc2FnZUNvbXBvbmVudCB7XG4gICAgQElucHV0KCkgbWVzc2FnZTogTWVzc2FnZTtcbiAgICBASW5wdXQoKSBzaG93U2VuZGVyOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIG5leHRJc1NhbWU6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcGVydklzU2FtZTogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBiYWRnZTogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBuZXh0SGFzQmFkZ2U6IGJvb2xlYW47XG4gICAgQElucHV0KCkgYmFkZ2VMYWJlbDogc3RyaW5nO1xuICAgIEBPdXRwdXQoKSByZXBseSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIHVzZXJJZCA9IDEyMzQ7XG5cbiAgICBpbWFnZVJhdGlvKGltYWdlOiBhbnkpOiBhbnkge1xuICAgICAgICBjb25zdCB7IG9yaWdpbmFsV2lkdGgsIG9yaWdpbmFsSGVpZ2h0IH0gPSBpbWFnZTtcbiAgICAgICAgbGV0IGRpc3BsYXlXaWR0aCA9IDA7XG4gICAgICAgIGxldCBkaXNwbGF5SGVpZ2h0ID0gMDtcbiAgICAgICAgaWYgKG9yaWdpbmFsV2lkdGggPiBvcmlnaW5hbEhlaWdodCkge1xuICAgICAgICAgICAgY29uc3QgcmF0aW8gPSBvcmlnaW5hbFdpZHRoIC8gMzIwO1xuICAgICAgICAgICAgZGlzcGxheVdpZHRoID0gb3JpZ2luYWxXaWR0aCAvIHJhdGlvO1xuICAgICAgICAgICAgZGlzcGxheUhlaWdodCA9IG9yaWdpbmFsSGVpZ2h0IC8gcmF0aW87XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByYXRpbyA9IG9yaWdpbmFsSGVpZ2h0IC8gMzIwO1xuICAgICAgICAgICAgZGlzcGxheVdpZHRoID0gb3JpZ2luYWxXaWR0aCAvIHJhdGlvO1xuICAgICAgICAgICAgZGlzcGxheUhlaWdodCA9IG9yaWdpbmFsSGVpZ2h0IC8gcmF0aW87XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgLi4uaW1hZ2UsIGRpc3BsYXlXaWR0aCwgZGlzcGxheUhlaWdodCB9O1xuICAgIH1cbn1cbiIsIjxkaXZcbiAgICBjbGFzcz1cInR3LXctZnVsbCB0dy1weC00IHR3LWZsZXggdHctZmxleC13cmFwXCJcbiAgICBbbmdDbGFzc109XCJ7XG4ndHctcHQtMSc6IHBlcnZJc1NhbWUsXG4ndHctcHQtMyc6ICFwZXJ2SXNTYW1lLFxufVwiXG4+XG4gICAgQGlmIChiYWRnZSkge1xuICAgIDxkaXYgY2xhc3M9XCJ0dy13LWZ1bGwgdHctcGItNiB0dy1wdC01XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0dy13LWZpdCB0dy1iZy16aW5jLTUwMCB0dy10ZXh0LXdoaXRlIHR3LXB4LTQgdHctbXgtYXV0byB0dy1yb3VuZGVkLWZ1bGwgdHctdGV4dC1tZFwiPlxuICAgICAgICAgICAge3sgYmFkZ2VMYWJlbCB9fVxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICB9XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cInR3LXctZnVsbCB0dy1mbGV4IHR3LWdhcC0yIHR3LWl0ZW1zLWVuZCB0dy1yZWxhdGl2ZVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbid0dy1qdXN0aWZ5LXN0YXJ0JzogbWVzc2FnZS5vd25lci5pZCA9PT0gdXNlcklkLFxuJ3R3LWZsZXgtcm93LXJldmVyc2UnOiBtZXNzYWdlLm93bmVyLmlkICE9PSB1c2VySWQsXG4ndHctbXMtMTQnOiAobmV4dElzU2FtZSAmJiAhbmV4dEhhc0JhZGdlKSAmJiBtZXNzYWdlLm93bmVyLmlkID09PSB1c2VySWQsXG4ndHctbWUtMTQnOiAobmV4dElzU2FtZSAmJiAhbmV4dEhhc0JhZGdlKSAmJiBtZXNzYWdlLm93bmVyLmlkICE9PSB1c2VySWQsXG4gICAgfVwiXG4gICAgPlxuICAgICAgICBAaWYgKCFuZXh0SXNTYW1lIHx8IG5leHRIYXNCYWRnZSkge1xuICAgICAgICA8ZmQtYXZhdGFyXG4gICAgICAgICAgICBzaXplPVwic1wiXG4gICAgICAgICAgICBbbGFiZWxdPVwibWVzc2FnZS5vd25lcj8ubmFtZVwiXG4gICAgICAgICAgICBbY2lyY2xlXT1cInRydWVcIlxuICAgICAgICAgICAgW2ltYWdlXT1cIm1lc3NhZ2Uub3duZXI/LmF2YXRhclwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibWVzc2FnZS5vd25lci5hdmF0YXIgPyBmYWxzZSA6IHRydWVcIlxuICAgICAgICA+PC9mZC1hdmF0YXI+XG4gICAgICAgIH0gQGlmICghbmV4dElzU2FtZSB8fCBuZXh0SGFzQmFkZ2UpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJ0dy1iZy10cmFuc3BhcmVudCB0dy1vdmVyZmxvdy1oaWRkZW4gdHctc2l6ZS0zIHR3LWFic29sdXRlIHR3LWJvdHRvbS0wIHR3LWJvcmRlci1bNnB4XSB0dy1ib3JkZXItdC10cmFuc3BhcmVudFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgJ3R3LXJpZ2h0LTExIHR3LWJvcmRlci1iLWJ1YmJsZS1taW5lIHR3LWJvcmRlci1sLWJ1YmJsZS1taW5lIHR3LWJvcmRlci1yLXRyYW5zcGFyZW50JzpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5vd25lci5pZCA9PT0gdXNlcklkLFxuICAgICAgICAgICAgICAgICd0dy1sZWZ0LTExIHR3LWJvcmRlci1iLWRlZmF1bHQgdHctYm9yZGVyLXItZGVmYXVsdCB0dy1ib3JkZXItbC10cmFuc3BhcmVudCc6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uub3duZXIuaWQgIT09IHVzZXJJZFxuICAgICAgICAgICAgfVwiXG4gICAgICAgID48L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBAaW5QYW5lQW5pbWF0aW9uXG4gICAgICAgICAgICBjbGFzcz1cInR3LW1heC13LVs4MCVdIHR3LW1pbi13LTQwIHR3LXJvdW5kZWQtMnhsIHR3LXRleHQtYmFzZSB0dy1yZWxhdGl2ZSB0dy1vdmVyZmxvdy1oaWRkZW5cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICchdHctcm91bmRlZC1ici1ub25lJzpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5vd25lci5pZCA9PT0gdXNlcklkICYmIChuZXh0SGFzQmFkZ2UgfHwgKG5leHRJc1NhbWUgJiYgIW5leHRIYXNCYWRnZSkgfHwgIW5leHRJc1NhbWUpLFxuICAgICAgICAgICAgICAgICchdHctcm91bmRlZC1ibC1ub25lJzpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5vd25lci5pZCAhPT0gdXNlcklkICYmIChuZXh0SGFzQmFkZ2UgfHwgKG5leHRJc1NhbWUgJiYgIW5leHRIYXNCYWRnZSkgfHwgIW5leHRJc1NhbWUpLFxuICAgICAgICAgICAgICAgICchdHctcm91bmRlZC10ci1ub25lJzogbWVzc2FnZS5vd25lci5pZCA9PT0gdXNlcklkICYmIHBlcnZJc1NhbWUgJiYgIWJhZGdlLFxuICAgICAgICAgICAgICAgICchdHctcm91bmRlZC10bC1ub25lJzogbWVzc2FnZS5vd25lci5pZCAhPT0gdXNlcklkICYmIHBlcnZJc1NhbWUgJiYgIWJhZGdlXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgPlxuICAgICAgICAgICAgQGlmIChzaG93U2VuZGVyICYmICghcGVydklzU2FtZSB8fCBiYWRnZSkpIHtcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4ndHctYmctYnViYmxlLW1pbmUnOiBtZXNzYWdlLm93bmVyLmlkID09PSB1c2VySWQgJiYgIW1lc3NhZ2UuaW1hZ2UsXG4ndHctYmctZGVmYXVsdCc6IG1lc3NhZ2Uub3duZXIuaWQgIT09IHVzZXJJZCAmJiAhbWVzc2FnZS5pbWFnZSxcbid0dy1hYnNvbHV0ZSB0dy10b3AtMCB0dy1yaWdodC0wIHR3LXBiLTggdHctdy1mdWxsIHR3LXJvdW5kZWQtdHItMnhsIHR3LWJnLWdyYWRpZW50LXRvLWIgdHctdG8tdHJhbnNwYXJlbnQnOiBtZXNzYWdlLmltYWdlLFxuJ3R3LWZyb20tYnViYmxlLW1pbmUnOiBtZXNzYWdlLm93bmVyLmlkID09PSB1c2VySWQgJiYgbWVzc2FnZS5pbWFnZSxcbid0dy1mcm9tLWRlZmF1bHQnOiBtZXNzYWdlLm93bmVyLmlkICE9PSB1c2VySWQgJiYgbWVzc2FnZS5pbWFnZSxcbiAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0dy1mb250LWJvbGQgdHctdGV4dC1iYXNlIHR3LXB4LTMgdHctcHQtMiB0dy16LTEwXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBtZXNzYWdlLm93bmVyLm5hbWUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfSBAaWYgKG1lc3NhZ2UuaW1hZ2UpIHsgQGlmIChpbWFnZVJhdGlvKG1lc3NhZ2UuaW1hZ2UpOyBhcyBpbWFnZSkge1xuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbid0dy1iZy1idWJibGUtbWluZS9bLjNdJzogbWVzc2FnZS5vd25lci5pZCA9PT0gdXNlcklkLFxuJ3R3LWJnLWRlZmF1bHQvWy4zXSc6IG1lc3NhZ2Uub3duZXIuaWQgIT09IHVzZXJJZCxcbiAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0dy1mbGV4IHR3LWp1c3RpZnktY2VudGVyIHR3LWl0ZW1zLWNlbnRlciB0dy1iZy16aW5jLTUwMC9bLjNdIHR3LXJlbGF0aXZlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICBbZG93bmxvYWRdPVwibWVzc2FnZS5pbWFnZS5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgaHJlZj1cImFzc2V0cy9iZy1jaGF0LmpwZ1wiXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHctYWJzb2x1dGUgdHctdy1mdWxsIHR3LWgtZnVsbCB0dy1iZy1ibGFjay9bLjRdIGRhcms6dHctYmctd2hpdGUvWy40XSB0dy1vcGFjaXR5LTAgaG92ZXI6dHctb3BhY2l0eS0xMDAgdHctdHJhbnNpdGlvbi1hbGwgdHctY3Vyc29yLXBvaW50ZXIgdHctZmxleCB0dy1qdXN0aWZ5LWNlbnRlciB0dy1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGZkLWljb24gY2xhc3M9XCIhdHctdGV4dC1kZWZhdWx0ICF0dy10ZXh0LTN4bFwiIGdseXBoPVwiZG93bmxvYWRcIj48L2ZkLWljb24+XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGltYWdlLmRpc3BsYXlXaWR0aCArICdweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGltYWdlLmRpc3BsYXlIZWlnaHQgKyAncHgnXG4gICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImltYWdlLnVybFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfSB9IEBpZiAobWVzc2FnZS5maWxlPy5uYW1lKSB7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuJ3R3LWJnLWJ1YmJsZS1taW5lJzogbWVzc2FnZS5vd25lci5pZCA9PT0gdXNlcklkLFxuJ3R3LWJnLWRlZmF1bHQnOiBtZXNzYWdlLm93bmVyLmlkICE9PSB1c2VySWQsXG4gICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidHctcHgtMiB0dy1wdC0yIHctZnVsbCB0dy1mbGV4IHR3LWdhcC0yXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICBbZG93bmxvYWRdPVwibWVzc2FnZS5maWxlPy5GaWxlTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIGhyZWY9XCJhc3NldHMvYmctY2hhdC5qcGdcIlxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInR3LXNocmluay0wIHR3LXJvdy0wIHR3LXNpemUtMTIgdHctcm91bmRlZC1sZyB0dy1iZy1vcmFuZ2UtNDAwIHR3LWZsZXggdHctanVzdGlmeS1jZW50ZXIgdHctaXRlbXMtY2VudGVyIHR3LWN1cnNvci1wb2ludGVyIHR3LXRyYW5zaXRpb24tYWxsIGhvdmVyOnR3LWJnLW9yYW5nZS02MDBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0dy1mb250LWJvbGQgbGVhZGluZy02IHR3LXRleHQtbGcgdHctdGV4dC13aGl0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgbWVzc2FnZS5maWxlPy5UeXBlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInR3LWZsZXggdHctZmxleC1jb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0dy1mb250LWJvbGQgdHctdGV4dC1tZCB0dy10ZXh0LWJhc2UgdHctdy1mdWxsIHR3LXRydW5jYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBtZXNzYWdlLmZpbGU/LkZpbGVOYW1lIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0dy10ZXh0LXNtIHR3LXRleHQtZ3JheS01MDAgZGFyazp0dy10ZXh0LWdyYXktNDAwIHR3LXctZnVsbCB0dy10cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgbWVzc2FnZS5maWxlPy5TaXplIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfSBAaWYgKG1lc3NhZ2UudGV4dCkge1xuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbid0dy1iZy1idWJibGUtbWluZSc6IG1lc3NhZ2Uub3duZXIuaWQgPT09IHVzZXJJZCxcbid0dy1iZy1kZWZhdWx0JzogbWVzc2FnZS5vd25lci5pZCAhPT0gdXNlcklkLFxuICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInR3LXdoaXRlc3BhY2UtcHJlLWxpbmUgdHctcHgtMyB0dy1wdC0xXCJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIm1lc3NhZ2UudGV4dFwiXG4gICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0dy1mbGV4IHR3LXctZnVsbCB0dy1weC0yIHR3LXB0LTEgdHctcGItMiB0dy1pdGVtcy1jZW50ZXIgdHctZ2FwLTIgdHctanVzdGlmeS1lbmRcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbid0dy1iZy1idWJibGUtbWluZSc6IG1lc3NhZ2Uub3duZXIuaWQgPT09IHVzZXJJZCxcbid0dy1iZy1kZWZhdWx0IHR3LWZsZXgtcm93LXJldmVyc2UnOiBtZXNzYWdlLm93bmVyLmlkICE9PSB1c2VySWQsXG59XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInR3LXRleHQteHMgdHctdGV4dC1ncmF5LTUwMCBkYXJrOnR3LXRleHQtZ3JheS0zMDBcIj57e1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmNyZWF0ZWRBdCB8IHV0aWxEYXRlVG9IaE1tXG4gICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPGZkLXBvcG92ZXIgcGxhY2VtZW50PVwiYm90dG9tLWVuZFwiIHRpdGxlPVwiYm90dG9tLWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZmQtcG9wb3Zlci1jb250cm9sPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmRDb21wYWN0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoPVwibmF2aWdhdGlvbi1kb3duLWFycm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9mZC1wb3BvdmVyLWNvbnRyb2w+XG4gICAgICAgICAgICAgICAgICAgIDxmZC1wb3BvdmVyLWJvZHkgbWluV2lkdGg9XCIxMHJlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInR3LWZsZXggdHctZmxleC1jb2wgdHctYmctZGVmYXVsdCB0dy13LWZ1bGxcIiBib2R5Q2xpY2s+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHctcHgtNCB0dy1weS0yIHR3LWZsZXggdHctZ2FwLTIgdHctdy1mdWxsIGhvdmVyOnR3LWJnLWJhc2UvWy4xXSB0dy10cmFuc2l0aW9uLWFsbCB0dy1jdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZXBseS5lbWl0KG1lc3NhZ2UpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1pY29uIGNsYXNzPVwiIXR3LXRleHQtYmFzZSAhdHctdGV4dC0zeGxcIiBnbHlwaD1cInVuZG9cIj48L2ZkLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiIXR3LXRleHQtYmFzZVwiPtm+2KfYs9iuINiv2KfYr9mGPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHctcHgtNCB0dy1weS0yIHR3LWZsZXggdHctZ2FwLTIgdHctdy1mdWxsIGhvdmVyOnR3LWJnLWJhc2UvWy4xXSB0dy10cmFuc2l0aW9uLWFsbCB0dy1jdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtaWNvbiBjbGFzcz1cIiF0dy10ZXh0LWJhc2UgIXR3LXRleHQtM3hsXCIgZ2x5cGg9XCJmb3J3YXJkXCI+PC9mZC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIiF0dy10ZXh0LWJhc2VcIj7Yp9ix2LPYp9mEINqp2LHYr9mGPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHctcHgtNCB0dy1weS0yIHR3LWZsZXggdHctZ2FwLTIgdHctdy1mdWxsIGhvdmVyOnR3LWJnLWJhc2UvWy4xXSB0dy10cmFuc2l0aW9uLWFsbCB0dy1jdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtaWNvbiBjbGFzcz1cIiF0dy10ZXh0LWJhc2UgIXR3LXRleHQtM3hsXCIgZ2x5cGg9XCJkZWxldGVcIj48L2ZkLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiIXR3LXRleHQtYmFzZVwiPtit2LDZgTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZmQtcG9wb3Zlci1ib2R5PlxuICAgICAgICAgICAgICAgIDwvZmQtcG9wb3Zlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyc2EtY2hhdC1tZXNzYWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXNhcC11aS9zcmMvbGliL2JhcnNhLWNoYXQtbWVzc2FnZS9iYXJzYS1jaGF0LW1lc3NhZ2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvYmFyc2EtY2hhdC1tZXNzYWdlL2JhcnNhLWNoYXQtbWVzc2FnZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7OztBQW9CMUUsTUFBTSxPQUFPLHlCQUF5QjtJQWpCdEM7UUF5QmMsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDMUMsV0FBTSxHQUFHLCtCQUErQixDQUFDO0tBaUI1QztJQWZHLFVBQVUsQ0FBQyxLQUFVO1FBQ2pCLE1BQU0sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQ2hELElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztRQUNyQixJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDdEIsSUFBSSxhQUFhLEdBQUcsY0FBYyxFQUFFLENBQUM7WUFDakMsTUFBTSxLQUFLLEdBQUcsYUFBYSxHQUFHLEdBQUcsQ0FBQztZQUNsQyxZQUFZLEdBQUcsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUNyQyxhQUFhLEdBQUcsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUMzQyxDQUFDO2FBQU0sQ0FBQztZQUNKLE1BQU0sS0FBSyxHQUFHLGNBQWMsR0FBRyxHQUFHLENBQUM7WUFDbkMsWUFBWSxHQUFHLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDckMsYUFBYSxHQUFHLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDM0MsQ0FBQztRQUNELE9BQU8sRUFBRSxHQUFHLEtBQUssRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLENBQUM7SUFDckQsQ0FBQzs4R0F6QlEseUJBQXlCO2tHQUF6Qix5QkFBeUIsaVJDckJ0QywrM1FBK0tBLDg4RER2S2dCO1lBQ1IsT0FBTyxDQUFDLGlCQUFpQixFQUFFO2dCQUN2QixVQUFVLENBQUMsUUFBUSxFQUFFO29CQUNqQixLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsQ0FBQztvQkFDL0MsT0FBTyxDQUFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLENBQUMsQ0FBQztpQkFDdEYsQ0FBQztnQkFDRixVQUFVLENBQUMsUUFBUSxFQUFFO29CQUNqQixLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxDQUFDO29CQUNyRCxPQUFPLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztpQkFDaEYsQ0FBQzthQUNMLENBQUM7U0FDTDs7MkZBRVEseUJBQXlCO2tCQWpCckMsU0FBUzsrQkFDSSx3QkFBd0IsY0FHdEI7d0JBQ1IsT0FBTyxDQUFDLGlCQUFpQixFQUFFOzRCQUN2QixVQUFVLENBQUMsUUFBUSxFQUFFO2dDQUNqQixLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsQ0FBQztnQ0FDL0MsT0FBTyxDQUFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLENBQUMsQ0FBQzs2QkFDdEYsQ0FBQzs0QkFDRixVQUFVLENBQUMsUUFBUSxFQUFFO2dDQUNqQixLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxDQUFDO2dDQUNyRCxPQUFPLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQzs2QkFDaEYsQ0FBQzt5QkFDTCxDQUFDO3FCQUNMOzhCQUdRLE9BQU87c0JBQWYsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNJLEtBQUs7c0JBQWQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBhbmltYXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgTWVzc2FnZSB9IGZyb20gJy4uL2JhcnNhLWNoYXQvY2hhdC5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYnN1LWJhcnNhLWNoYXQtbWVzc2FnZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2JhcnNhLWNoYXQtbWVzc2FnZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL2JhcnNhLWNoYXQtbWVzc2FnZS5jb21wb25lbnQuY3NzJyxcbiAgICBhbmltYXRpb25zOiBbXG4gICAgICAgIHRyaWdnZXIoJ2luUGFuZUFuaW1hdGlvbicsIFtcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJzplbnRlcicsIFtcbiAgICAgICAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3NjYWxlKDAsIDApJyB9KSxcbiAgICAgICAgICAgICAgICBhbmltYXRlKCczMDBtcyBlYXNlLWluLW91dCcsIHN0eWxlKHsgb3BhY2l0eTogMSwgdHJhbnNmb3JtOiAnc2NhbGUoMTAwJSwgMTAwJSknIH0pKVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCc6bGVhdmUnLCBbXG4gICAgICAgICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAxLCB0cmFuc2Zvcm06ICdzY2FsZSgxMDAlLCAxMDAlKScgfSksXG4gICAgICAgICAgICAgICAgYW5pbWF0ZSgnMzAwbXMgZWFzZS1pbi1vdXQnLCBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3NjYWxlKDAsIDApJyB9KSlcbiAgICAgICAgICAgIF0pXG4gICAgICAgIF0pXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBCYXJzYUNoYXRNZXNzYWdlQ29tcG9uZW50IHtcbiAgICBASW5wdXQoKSBtZXNzYWdlOiBNZXNzYWdlO1xuICAgIEBJbnB1dCgpIHNob3dTZW5kZXI6IGJvb2xlYW47XG4gICAgQElucHV0KCkgbmV4dElzU2FtZTogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwZXJ2SXNTYW1lOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGJhZGdlOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIG5leHRIYXNCYWRnZTogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBiYWRnZUxhYmVsOiBzdHJpbmc7XG4gICAgQE91dHB1dCgpIHJlcGx5ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgdXNlcklkID0gJ19Jb3VnS1NLbHhGeEFmdFNJN2E0OFN6ay1Ha00xJztcblxuICAgIGltYWdlUmF0aW8oaW1hZ2U6IGFueSk6IGFueSB7XG4gICAgICAgIGNvbnN0IHsgb3JpZ2luYWxXaWR0aCwgb3JpZ2luYWxIZWlnaHQgfSA9IGltYWdlO1xuICAgICAgICBsZXQgZGlzcGxheVdpZHRoID0gMDtcbiAgICAgICAgbGV0IGRpc3BsYXlIZWlnaHQgPSAwO1xuICAgICAgICBpZiAob3JpZ2luYWxXaWR0aCA+IG9yaWdpbmFsSGVpZ2h0KSB7XG4gICAgICAgICAgICBjb25zdCByYXRpbyA9IG9yaWdpbmFsV2lkdGggLyAzMjA7XG4gICAgICAgICAgICBkaXNwbGF5V2lkdGggPSBvcmlnaW5hbFdpZHRoIC8gcmF0aW87XG4gICAgICAgICAgICBkaXNwbGF5SGVpZ2h0ID0gb3JpZ2luYWxIZWlnaHQgLyByYXRpbztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJhdGlvID0gb3JpZ2luYWxIZWlnaHQgLyAzMjA7XG4gICAgICAgICAgICBkaXNwbGF5V2lkdGggPSBvcmlnaW5hbFdpZHRoIC8gcmF0aW87XG4gICAgICAgICAgICBkaXNwbGF5SGVpZ2h0ID0gb3JpZ2luYWxIZWlnaHQgLyByYXRpbztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyAuLi5pbWFnZSwgZGlzcGxheVdpZHRoLCBkaXNwbGF5SGVpZ2h0IH07XG4gICAgfVxufVxuIiwiPGRpdlxuICAgIGNsYXNzPVwidHctdy1mdWxsIHR3LXB4LTQgdHctZmxleCB0dy1mbGV4LXdyYXBcIlxuICAgIFtuZ0NsYXNzXT1cIntcbid0dy1wdC0xJzogcGVydklzU2FtZSxcbid0dy1wdC0zJzogIXBlcnZJc1NhbWUsXG59XCJcbj5cbiAgICBAaWYgKGJhZGdlKSB7XG4gICAgPGRpdiBjbGFzcz1cInR3LXctZnVsbCB0dy1wYi02IHR3LXB0LTVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInR3LXctZml0IHR3LWJnLXppbmMtNTAwIHR3LXRleHQtd2hpdGUgdHctcHgtNCB0dy1teC1hdXRvIHR3LXJvdW5kZWQtZnVsbCB0dy10ZXh0LW1kXCI+XG4gICAgICAgICAgICB7eyBiYWRnZUxhYmVsIH19XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIH1cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwidHctdy1mdWxsIHR3LWZsZXggdHctZ2FwLTIgdHctaXRlbXMtZW5kIHR3LXJlbGF0aXZlXCJcbiAgICAgICAgW25nQ2xhc3NdPVwie1xuJ3R3LWp1c3RpZnktc3RhcnQnOiBtZXNzYWdlLm93bmVyLmlkID09PSB1c2VySWQsXG4ndHctZmxleC1yb3ctcmV2ZXJzZSc6IG1lc3NhZ2Uub3duZXIuaWQgIT09IHVzZXJJZCxcbid0dy1tcy0xNCc6IChuZXh0SXNTYW1lICYmICFuZXh0SGFzQmFkZ2UpICYmIG1lc3NhZ2Uub3duZXIuaWQgPT09IHVzZXJJZCxcbid0dy1tZS0xNCc6IChuZXh0SXNTYW1lICYmICFuZXh0SGFzQmFkZ2UpICYmIG1lc3NhZ2Uub3duZXIuaWQgIT09IHVzZXJJZCxcbiAgICB9XCJcbiAgICA+XG4gICAgICAgIEBpZiAoIW5leHRJc1NhbWUgfHwgbmV4dEhhc0JhZGdlKSB7XG4gICAgICAgIDxmZC1hdmF0YXJcbiAgICAgICAgICAgIHNpemU9XCJzXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCJtZXNzYWdlLm93bmVyLmF2YXRhciA/ICcnIDogbWVzc2FnZS5vd25lcj8ubmFtZVwiXG4gICAgICAgICAgICBbY2lyY2xlXT1cInRydWVcIlxuICAgICAgICAgICAgW2ltYWdlXT1cIm1lc3NhZ2Uub3duZXI/LmF2YXRhclwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibWVzc2FnZS5vd25lci5hdmF0YXIgPyBmYWxzZSA6IHRydWVcIlxuICAgICAgICA+PC9mZC1hdmF0YXI+XG4gICAgICAgIH0gQGlmICghbmV4dElzU2FtZSB8fCBuZXh0SGFzQmFkZ2UpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJ0dy1iZy10cmFuc3BhcmVudCB0dy1vdmVyZmxvdy1oaWRkZW4gdHctc2l6ZS0zIHR3LWFic29sdXRlIHR3LWJvdHRvbS0wIHR3LWJvcmRlci1bNnB4XSB0dy1ib3JkZXItdC10cmFuc3BhcmVudFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgJ3R3LXJpZ2h0LTExIHR3LWJvcmRlci1iLWJ1YmJsZS1taW5lIHR3LWJvcmRlci1sLWJ1YmJsZS1taW5lIHR3LWJvcmRlci1yLXRyYW5zcGFyZW50JzpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5vd25lci5pZCA9PT0gdXNlcklkLFxuICAgICAgICAgICAgICAgICd0dy1sZWZ0LTExIHR3LWJvcmRlci1iLWRlZmF1bHQgdHctYm9yZGVyLXItZGVmYXVsdCB0dy1ib3JkZXItbC10cmFuc3BhcmVudCc6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uub3duZXIuaWQgIT09IHVzZXJJZFxuICAgICAgICAgICAgfVwiXG4gICAgICAgID48L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBAaW5QYW5lQW5pbWF0aW9uXG4gICAgICAgICAgICBjbGFzcz1cInR3LW1heC13LVs4MCVdIHR3LW1pbi13LTQwIHR3LXJvdW5kZWQtMnhsIHR3LXRleHQtYmFzZSB0dy1yZWxhdGl2ZSB0dy1vdmVyZmxvdy1oaWRkZW5cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICchdHctcm91bmRlZC1ici1ub25lJzpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5vd25lci5pZCA9PT0gdXNlcklkICYmIChuZXh0SGFzQmFkZ2UgfHwgKG5leHRJc1NhbWUgJiYgIW5leHRIYXNCYWRnZSkgfHwgIW5leHRJc1NhbWUpLFxuICAgICAgICAgICAgICAgICchdHctcm91bmRlZC1ibC1ub25lJzpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5vd25lci5pZCAhPT0gdXNlcklkICYmIChuZXh0SGFzQmFkZ2UgfHwgKG5leHRJc1NhbWUgJiYgIW5leHRIYXNCYWRnZSkgfHwgIW5leHRJc1NhbWUpLFxuICAgICAgICAgICAgICAgICchdHctcm91bmRlZC10ci1ub25lJzogbWVzc2FnZS5vd25lci5pZCA9PT0gdXNlcklkICYmIHBlcnZJc1NhbWUgJiYgIWJhZGdlLFxuICAgICAgICAgICAgICAgICchdHctcm91bmRlZC10bC1ub25lJzogbWVzc2FnZS5vd25lci5pZCAhPT0gdXNlcklkICYmIHBlcnZJc1NhbWUgJiYgIWJhZGdlXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgPlxuICAgICAgICAgICAgQGlmIChzaG93U2VuZGVyICYmICghcGVydklzU2FtZSB8fCBiYWRnZSkpIHtcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4ndHctYmctYnViYmxlLW1pbmUnOiBtZXNzYWdlLm93bmVyLmlkID09PSB1c2VySWQgJiYgIW1lc3NhZ2UuaW1hZ2UsXG4ndHctYmctZGVmYXVsdCc6IG1lc3NhZ2Uub3duZXIuaWQgIT09IHVzZXJJZCAmJiAhbWVzc2FnZS5pbWFnZSxcbid0dy1hYnNvbHV0ZSB0dy10b3AtMCB0dy1yaWdodC0wIHR3LXBiLTggdHctdy1mdWxsIHR3LXJvdW5kZWQtdHItMnhsIHR3LWJnLWdyYWRpZW50LXRvLWIgdHctdG8tdHJhbnNwYXJlbnQnOiBtZXNzYWdlLmltYWdlLFxuJ3R3LWZyb20tYnViYmxlLW1pbmUnOiBtZXNzYWdlLm93bmVyLmlkID09PSB1c2VySWQgJiYgbWVzc2FnZS5pbWFnZSxcbid0dy1mcm9tLWRlZmF1bHQnOiBtZXNzYWdlLm93bmVyLmlkICE9PSB1c2VySWQgJiYgbWVzc2FnZS5pbWFnZSxcbiAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0dy1mb250LWJvbGQgdHctdGV4dC1iYXNlIHR3LXB4LTMgdHctcHQtMiB0dy16LTEwXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBtZXNzYWdlLm93bmVyLm5hbWUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfSBAaWYgKG1lc3NhZ2UuaW1hZ2UpIHsgQGlmIChpbWFnZVJhdGlvKG1lc3NhZ2UuaW1hZ2UpOyBhcyBpbWFnZSkge1xuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbid0dy1iZy1idWJibGUtbWluZS9bLjNdJzogbWVzc2FnZS5vd25lci5pZCA9PT0gdXNlcklkLFxuJ3R3LWJnLWRlZmF1bHQvWy4zXSc6IG1lc3NhZ2Uub3duZXIuaWQgIT09IHVzZXJJZCxcbiAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0dy1mbGV4IHR3LWp1c3RpZnktY2VudGVyIHR3LWl0ZW1zLWNlbnRlciB0dy1iZy16aW5jLTUwMC9bLjNdIHR3LXJlbGF0aXZlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICBbZG93bmxvYWRdPVwibWVzc2FnZS5pbWFnZS5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgaHJlZj1cImFzc2V0cy9iZy1jaGF0LmpwZ1wiXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHctYWJzb2x1dGUgdHctdy1mdWxsIHR3LWgtZnVsbCB0dy1iZy1ibGFjay9bLjRdIGRhcms6dHctYmctd2hpdGUvWy40XSB0dy1vcGFjaXR5LTAgaG92ZXI6dHctb3BhY2l0eS0xMDAgdHctdHJhbnNpdGlvbi1hbGwgdHctY3Vyc29yLXBvaW50ZXIgdHctZmxleCB0dy1qdXN0aWZ5LWNlbnRlciB0dy1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGZkLWljb24gY2xhc3M9XCIhdHctdGV4dC1kZWZhdWx0ICF0dy10ZXh0LTN4bFwiIGdseXBoPVwiZG93bmxvYWRcIj48L2ZkLWljb24+XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGltYWdlLmRpc3BsYXlXaWR0aCArICdweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGltYWdlLmRpc3BsYXlIZWlnaHQgKyAncHgnXG4gICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImltYWdlLnVybFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfSB9IEBpZiAobWVzc2FnZS5maWxlPy5uYW1lKSB7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuJ3R3LWJnLWJ1YmJsZS1taW5lJzogbWVzc2FnZS5vd25lci5pZCA9PT0gdXNlcklkLFxuJ3R3LWJnLWRlZmF1bHQnOiBtZXNzYWdlLm93bmVyLmlkICE9PSB1c2VySWQsXG4gICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidHctcHgtMiB0dy1wdC0yIHctZnVsbCB0dy1mbGV4IHR3LWdhcC0yXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICBbZG93bmxvYWRdPVwibWVzc2FnZS5maWxlPy5GaWxlTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIGhyZWY9XCJhc3NldHMvYmctY2hhdC5qcGdcIlxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInR3LXNocmluay0wIHR3LXJvdy0wIHR3LXNpemUtMTIgdHctcm91bmRlZC1sZyB0dy1iZy1vcmFuZ2UtNDAwIHR3LWZsZXggdHctanVzdGlmeS1jZW50ZXIgdHctaXRlbXMtY2VudGVyIHR3LWN1cnNvci1wb2ludGVyIHR3LXRyYW5zaXRpb24tYWxsIGhvdmVyOnR3LWJnLW9yYW5nZS02MDBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0dy1mb250LWJvbGQgbGVhZGluZy02IHR3LXRleHQtbGcgdHctdGV4dC13aGl0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgbWVzc2FnZS5maWxlPy5UeXBlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInR3LWZsZXggdHctZmxleC1jb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0dy1mb250LWJvbGQgdHctdGV4dC1tZCB0dy10ZXh0LWJhc2UgdHctdy1mdWxsIHR3LXRydW5jYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBtZXNzYWdlLmZpbGU/LkZpbGVOYW1lIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0dy10ZXh0LXNtIHR3LXRleHQtZ3JheS01MDAgZGFyazp0dy10ZXh0LWdyYXktNDAwIHR3LXctZnVsbCB0dy10cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgbWVzc2FnZS5maWxlPy5TaXplIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfSBAaWYgKG1lc3NhZ2UudGV4dCkge1xuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbid0dy1iZy1idWJibGUtbWluZSc6IG1lc3NhZ2Uub3duZXIuaWQgPT09IHVzZXJJZCxcbid0dy1iZy1kZWZhdWx0JzogbWVzc2FnZS5vd25lci5pZCAhPT0gdXNlcklkLFxuICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInR3LXdoaXRlc3BhY2UtcHJlLWxpbmUgdHctcHgtMyB0dy1wdC0xXCJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIm1lc3NhZ2UudGV4dFwiXG4gICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0dy1mbGV4IHR3LXctZnVsbCB0dy1weC0yIHR3LXB0LTEgdHctcGItMiB0dy1pdGVtcy1jZW50ZXIgdHctZ2FwLTIgdHctanVzdGlmeS1lbmRcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbid0dy1iZy1idWJibGUtbWluZSc6IG1lc3NhZ2Uub3duZXIuaWQgPT09IHVzZXJJZCxcbid0dy1iZy1kZWZhdWx0IHR3LWZsZXgtcm93LXJldmVyc2UnOiBtZXNzYWdlLm93bmVyLmlkICE9PSB1c2VySWQsXG59XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInR3LXRleHQteHMgdHctdGV4dC1ncmF5LTUwMCBkYXJrOnR3LXRleHQtZ3JheS0zMDBcIj57e1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmNyZWF0ZWRBdCB8IHV0aWxEYXRlVG9IaE1tXG4gICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPGZkLXBvcG92ZXIgcGxhY2VtZW50PVwiYm90dG9tLWVuZFwiIHRpdGxlPVwiYm90dG9tLWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZmQtcG9wb3Zlci1jb250cm9sPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmRDb21wYWN0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoPVwibmF2aWdhdGlvbi1kb3duLWFycm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9mZC1wb3BvdmVyLWNvbnRyb2w+XG4gICAgICAgICAgICAgICAgICAgIDxmZC1wb3BvdmVyLWJvZHkgbWluV2lkdGg9XCIxMHJlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInR3LWZsZXggdHctZmxleC1jb2wgdHctYmctZGVmYXVsdCB0dy13LWZ1bGxcIiBib2R5Q2xpY2s+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHctcHgtNCB0dy1weS0yIHR3LWZsZXggdHctZ2FwLTIgdHctdy1mdWxsIGhvdmVyOnR3LWJnLWJhc2UvWy4xXSB0dy10cmFuc2l0aW9uLWFsbCB0dy1jdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZXBseS5lbWl0KG1lc3NhZ2UpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1pY29uIGNsYXNzPVwiIXR3LXRleHQtYmFzZSAhdHctdGV4dC0zeGxcIiBnbHlwaD1cInVuZG9cIj48L2ZkLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiIXR3LXRleHQtYmFzZVwiPtm+2KfYs9iuINiv2KfYr9mGPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHctcHgtNCB0dy1weS0yIHR3LWZsZXggdHctZ2FwLTIgdHctdy1mdWxsIGhvdmVyOnR3LWJnLWJhc2UvWy4xXSB0dy10cmFuc2l0aW9uLWFsbCB0dy1jdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtaWNvbiBjbGFzcz1cIiF0dy10ZXh0LWJhc2UgIXR3LXRleHQtM3hsXCIgZ2x5cGg9XCJmb3J3YXJkXCI+PC9mZC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIiF0dy10ZXh0LWJhc2VcIj7Yp9ix2LPYp9mEINqp2LHYr9mGPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHctcHgtNCB0dy1weS0yIHR3LWZsZXggdHctZ2FwLTIgdHctdy1mdWxsIGhvdmVyOnR3LWJnLWJhc2UvWy4xXSB0dy10cmFuc2l0aW9uLWFsbCB0dy1jdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtaWNvbiBjbGFzcz1cIiF0dy10ZXh0LWJhc2UgIXR3LXRleHQtM3hsXCIgZ2x5cGg9XCJkZWxldGVcIj48L2ZkLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiIXR3LXRleHQtYmFzZVwiPtit2LDZgTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZmQtcG9wb3Zlci1ib2R5PlxuICAgICAgICAgICAgICAgIDwvZmQtcG9wb3Zlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -30,14 +30,18 @@ export function GetFormLayoutGrid(ceil, colXl, colLg, colMd) {
30
30
  }
31
31
  export const sort = (a, b, key, isNumber) => {
32
32
  if (key) {
33
- a = getNestedValue(key, a);
34
- b = getNestedValue(key, b);
33
+ if (typeof a === 'object') {
34
+ a = getNestedValue(key, a);
35
+ }
36
+ if (typeof b === 'object') {
37
+ a = getNestedValue(key, a);
38
+ }
35
39
  }
36
40
  if (key === 'Rownumber' || isNumber) {
37
- return Number(a) > Number(b) ? 1 : -1;
41
+ return Number(a) === Number(b) ? 0 : Number(a) > Number(b) ? 1 : -1;
38
42
  }
39
43
  else if (typeof a === 'string' && typeof b === 'string') {
40
- return _trimEnd(a).localeCompare(_trimEnd(b));
44
+ return a.localeCompare(b);
41
45
  }
42
46
  return a > b ? 1 : a === b ? 0 : -1;
43
47
  };
@@ -53,7 +57,7 @@ export function _trimEnd(value) {
53
57
  return value.slice(0, end);
54
58
  }
55
59
  export function getNestedValue(key, object) {
56
- return key.split('.').reduce((a, b) => a[b], object);
60
+ return key.split('.').reduce((a, b) => (typeof a === 'undefined' ? a : a[b]), object);
57
61
  }
58
62
  export const IconTNT = [
59
63
  'technicalsystem',
@@ -418,4 +422,4 @@ export const IconBusinessSuite = [
418
422
  'stages-warning',
419
423
  'empty-warning'
420
424
  ];
421
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE1BQU0sVUFBVSxZQUFZLENBQUMsVUFBVSxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsTUFBTTtJQUN0RSxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ1QsTUFBTSxXQUFXLEdBQUcsT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFDckUsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDLGtCQUFrQixDQUFDO1lBQ3JELFNBQVMsRUFBRSxNQUFNO1lBQ2pCLE1BQU0sRUFBRSxPQUFPLE1BQU0sS0FBSyxRQUFRO1lBQ2xDLFdBQVc7U0FDZCxDQUFDLENBQUM7UUFDSCxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakIsUUFBUSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMvQixNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsYUFBNEIsQ0FBQztRQUNuRCxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLHlCQUF5QixDQUFnQixDQUFDO1FBRTNFLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxtQ0FBbUMsQ0FBZ0IsQ0FBQztRQUM5RixNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLDBCQUEwQixDQUFnQixDQUFDO1FBQzdFLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDakQsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyw0QkFBNEIsQ0FBZ0IsQ0FBQztRQUNqRixJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2Isd0NBQXdDO1lBQ3hDLFVBQVUsQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLFFB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Q1YsZUFBZTtJQUNmLG1CQUFtQjtJQUNuQixnQkFBZ0I7SUFDaEIsWUFBWTtJQUNaLGFBQWE7SUFDYixrQkFBa0I7SUFDbEIsWUFBWTtJQUNaLFFBQVE7SUFDUixpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLGNBQWM7SUFDZCxXQUFXO0lBQ1gsZUFBZTtJQUNmLGVBQWU7SUFDZixnQkFBZ0I7SUFDaEIsYUFBYTtJQUNiLGVBQWU7SUFDZixlQUFlO0lBQ2YsUUFBUTtJQUNSLFNBQVM7SUFDVCxjQUFjO0lBQ2QsZ0JBQWdCO0lBQ2hCLGNBQWM7SUFDZCxnQkFBZ0I7SUFDaEIsb0JBQW9CO0lBQ3BCLE1BQU07SUFDTixPQUFPO0lBQ1AsZUFBZTtJQUNmLGNBQWM7SUFDZCx1QkFBdUI7SUFDdkIsWUFBWTtJQUNaLGFBQWE7SUFDYixnQkFBZ0I7SUFDaEIsZ0JBQWdCO0lBQ2hCLGVBQWU7SUFDZixPQUFPO0lBQ1AsVUFBVTtJQUNWLFlBQVk7SUFDWixVQUFVO0lBQ1YsdUJBQXVCO0lBQ3ZCLEtBQUs7SUFDTCxlQUFlO0lBQ2YsTUFBTTtJQUNOLGVBQWU7SUFDZixpQkFBaUI7SUFDakIsTUFBTTtJQUNOLDRCQUE0QjtJQUM1QixnQkFBZ0I7SUFDaEIsZUFBZTtDQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBGb3JtTGF5b3V0Q29sIHtcbiAgICBjb2xYbDogbnVtYmVyO1xuICAgIGNvbExnOiBudW1iZXI7XG4gICAgY29sTWQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydEF2YXRhcihlbGVtZW50UmVmLCBoZWFkZXJBdmF0YXJSZWYsIHRpdGxlUmVmLCBhdmF0YXIpOiB2b2lkIHtcbiAgICBpZiAoYXZhdGFyKSB7XG4gICAgICAgIGNvbnN0IGlzTnVsbEltYWdlID0gdHlwZW9mIGF2YXRhciA9PT0gJ29iamVjdCcgJiYgYXZhdGFyLklzTnVsbEltYWdlO1xuICAgICAgICBjb25zdCBhdmF0YXJWaWV3UmVmID0gaGVhZGVyQXZhdGFyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh7XG4gICAgICAgICAgICAkaW1wbGljaXQ6IGF2YXRhcixcbiAgICAgICAgICAgIGlzSWNvbjogdHlwZW9mIGF2YXRhciA9PT0gJ3N0cmluZycsXG4gICAgICAgICAgICBpc051bGxJbWFnZVxuICAgICAgICB9KTtcbiAgICAgICAgdGl0bGVSZWYuY2xlYXIoKTtcbiAgICAgICAgdGl0bGVSZWYuaW5zZXJ0KGF2YXRhclZpZXdSZWYpO1xuICAgICAgICBjb25zdCBlbCA9IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgY29uc3QgdGl0bGVFbCA9IGVsLnF1ZXJ5U2VsZWN0b3IoJy5mZC1keW5hbWljLXBhZ2VfX3RpdGxlJykgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgICAgY29uc3QgdGl0bGVDb250YWluZXJFbCA9IGVsLnF1ZXJ5U2VsZWN0b3IoJy5mZC1keW5hbWljLXBhZ2VfX3RpdGxlLWNvbnRhaW5lcicpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjb25zdCBhdmF0YXJFbCA9IGVsLnF1ZXJ5U2VsZWN0b3IoJy5mZC1keW5hbWljLXBhZ2VfX2F2YXRhcicpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICB0aXRsZUNvbnRhaW5lckVsLmluc2VydEJlZm9yZShhdmF0YXJFbCwgdGl0bGVFbCk7XG4gICAgICAgIGNvbnN0IHN1YlRpdGxlRWwgPSBlbC5xdWVyeVNlbGVjdG9yKCcuZmQtZHluYW1pYy1wYWdlX19zdWJ0aXRsZScpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAoc3ViVGl0bGVFbCkge1xuICAgICAgICAgICAgLy8gY29uc3QgaW5Nb2JpbGUgPSBnZXREZXZpY2VJc01vYmlsZSgpO1xuICAgICAgICAgICAgc3ViVGl0bGVFbC5zdHlsZS5wYWRkaW5nUmlnaHQgPSBgY2FsYygkezEuNX1yZW0gKyAxMHB4KWA7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gR2V0Rm9ybUxheW91dEdyaWQoY2VpbDogYm9vbGVhbiwgY29sWGw6IG51bWJlciwgY29sTGc6IG51bWJlciwgY29sTWQ6IG51bWJlcik6IEZvcm1MYXlvdXRDb2wge1xuICAgIGNvbnN0IHggPSBjZWlsID8gTWF0aC5jZWlsIDogTWF0aC5yb3VuZDtcbiAgICByZXR1cm4ge1xuICAgICAgICBjb2xYbDogY29sWGwgPT09IDAgPyAwIDogeCgoMTIgLSBjb2xYbCkgLyAyKSxcbiAgICAgICAgY29sTGc6IGNvbExnID09PSAwID8gMCA6IHgoKDEyIC0gY29sTGcpIC8gMiksXG4gICAgICAgIGNvbE1kOiBjb2xNZCA9PT0gMCA/IDAgOiB4KCgxMiAtIGNvbE1kKSAvIDIpXG4gICAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IHNvcnQgPSA8VCBleHRlbmRzIG9iamVjdD4oYTogVCwgYjogVCwga2V5OiBzdHJpbmcgfCBudWxsLCBpc051bWJlcj86IGJvb2xlYW4pOiBudW1iZXIgPT4ge1xuICAgIGlmIChrZXkpIHtcbiAgICAgICAgYSA9IGdldE5lc3RlZFZhbHVlKGtleSwgYSk7XG4gICAgICAgIGIgPSBnZXROZXN0ZWRWYWx1ZShrZXksIGIpO1xuICAgIH1cbiAgICBpZiAoa2V5ID09PSAnUm93bnVtYmVyJyB8fCBpc051bWJlcikge1xuICAgICAgICByZXR1cm4gTnVtYmVyKGEpID4gTnVtYmVyKGIpID8gMSA6IC0xO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGEgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBiID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gX3RyaW1FbmQoYSBhcyBzdHJpbmcpLmxvY2FsZUNvbXBhcmUoX3RyaW1FbmQoYiBhcyBzdHJpbmcpKTtcbiAgICB9XG4gICAgcmV0dXJuIGEgPiBiID8gMSA6IGEgPT09IGIgPyAwIDogLTE7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIF90cmltRW5kKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNhY2hlID0gbmV3IFNldChTdHJpbmcodmFsdWUpKTtcbiAgICBsZXQgZW5kID0gdmFsdWUubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSB2YWx1ZS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBpZiAoIWNhY2hlLmhhcyh2YWx1ZVtpXSkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGVuZC0tO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWUuc2xpY2UoMCwgZW5kKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXN0ZWRWYWx1ZTxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4oa2V5OiBzdHJpbmcsIG9iamVjdDogVCk6IGFueSB7XG4gICAgcmV0dXJuIGtleS5zcGxpdCgnLicpLnJlZHVjZSgoYSwgYikgPT4gYVtiXSwgb2JqZWN0KTtcbn1cblxuZXhwb3J0IGNvbnN0IEljb25UTlQgPSBbXG4gICAgJ3RlY2huaWNhbHN5c3RlbScsXG4gICAgJ3N5c3RlbWphdmEnLFxuICAgICdzeXN0ZW1hYmFwJyxcbiAgICAnc3lzdGVtcmVjb21tZW5kYXRpb25zJyxcbiAgICAnc3lzdGVtJyxcbiAgICAnc3lzdGVtdHJleCcsXG4gICAgJ3N5c3RlbXRyYWNrcycsXG4gICAgJ3RlY2huaWNhbHNjZW5hcmlvJyxcbiAgICAndGVjaG5pY2FsaW5zdGFuY2UnLFxuICAgICd0aHJvdWdocHV0LWJhY2tsb2cnLFxuICAgICdiYXRjaC1wcm9jZXNzaW5nJyxcbiAgICAnZGF0YWJhc2UtY29uc2lzdGVuY3knLFxuICAgICdpbnRlcm1lZGlhdGUtbWVzc2FnZScsXG4gICAgJ2V4Y2VwdGlvbnMnLFxuICAgICdzeXN0ZW0tSEFOQScsXG4gICAgJ3B5dGhvbicsXG4gICAgJ3JhaXNlLWZhdWx0JyxcbiAgICAnY29kZTEnLFxuICAgICdjb2RlMicsXG4gICAgJ3NwaWtlLWFycmVzdCcsXG4gICAgJ3ZlcmlmeS1BUEknLFxuICAgICd1c2VyJyxcbiAgICAnbm90ZScsXG4gICAgJ3Rocm93aW5nLW1lc3NhZ2UnLFxuICAgICdjYXRjaGluZy1tZXNzYWdlJyxcbiAgICAnc3RhcnQtZXZlbnQnLFxuICAgICdlbmQtZXZlbnQnLFxuICAgICdnYXRld2F5JyxcbiAgICAnc3ViLXByb2Nlc3MtbWFya2VyJyxcbiAgICAnYWQtaG9jLW1hcmtlcicsXG4gICAgJ21hbnVhbC10YXNrJyxcbiAgICAnc2VuZC10YXNrJyxcbiAgICAncmVjZWl2ZS10YXNrJyxcbiAgICAnc2NyaXB0LXRhc2snLFxuICAgICdtYXJxdWVlJyxcbiAgICAnZGF0YS1pbnB1dC1hcnJvdycsXG4gICAgJ2RhdGEtb3V0cHV0LWFycm93JyxcbiAgICAnbW9yZScsXG4gICAgJ3BhdHRlcm4nLFxuICAgICd0YXNrJyxcbiAgICAnYXJyb3cnLFxuICAgICdkYXRhJyxcbiAgICAnZGF0YS1zdG9yZScsXG4gICAgJ3Bvb2wnLFxuICAgICdzd2ltbGFuZScsXG4gICAgJ3NlbGVjdCcsXG4gICAgJ2N1cnNvcicsXG4gICAgJ2FwaScsXG4gICAgJ28tZGF0YScsXG4gICAgJ2phdmFzY3JpcHQnLFxuICAgICd2YWx1ZS1tYXBwaW5nJyxcbiAgICAndGVybWluYXRlLWVuZC1ldmVudCcsXG4gICAgJ3BhcmFsbGVsLWdhdGV3YXknLFxuICAgICdleGNsdXNpdmUtZ2F0ZXdheScsXG4gICAgJ3NlcnZpY2UtdGFzaycsXG4gICAgJ3dvcmtmbG93LWVkaXRvcicsXG4gICAgJ2JvdW5kYXJ5LWludGVycnVwdGluZycsXG4gICAgJ2JvdW5kYXJ5LW5vbi1pbnRlcnJ1cHRpbmcnLFxuICAgICdibG9jaycsXG4gICAgJ2NvbnN0cmFpbi1ibG9jaycsXG4gICAgJ2FjdG9yJyxcbiAgICAnaW5zdGFuY2Utc3BlY2lmaWNhdGlvbicsXG4gICAgJ3ZhbHVlLXR5cGUnLFxuICAgICdpbnRlcmZhY2UtYmxvY2snLFxuICAgICd1bml0JyxcbiAgICAnc2lnbmFsJyxcbiAgICAncXVhbnRpdHkta2luZCcsXG4gICAgJ2l0ZW0tZmxvdycsXG4gICAgJ2RlcGVuZGVuY3knLFxuICAgICdnZW5lcmFsaXphdGlvbicsXG4gICAgJ2FnZ3JlZ2F0aW9uJyxcbiAgICAnY29tcG9zaXRpb24nLFxuICAgICdhc3NvY2lhdGlvbicsXG4gICAgJ3BvcnQnLFxuICAgICdwcm94eS1wb3J0JyxcbiAgICAnZnVsbC1wb3J0JyxcbiAgICAnb3BlcmF0aW9ucycsXG4gICAgJ2NvbnN0cmFpbnMnLFxuICAgICdyZWNlcHRpb25zJyxcbiAgICAncmVmZXJlbmNlcycsXG4gICAgJ3BhcnRzJyxcbiAgICAnZmxvdycsXG4gICAgJ3ZhbHVlcycsXG4gICAgJ2JpbGwtb2YtbWF0ZXJpYWwnLFxuICAgICdkb2N1bWVudC1pbmZvLXJlY29yZGluZycsXG4gICAgJ3VzZS1jYXNlLWRpYWdyYW0nLFxuICAgICdiZGQtZGlhZ3JhbScsXG4gICAgJ3JlcXVpcmVtZW50LWRpYWdyYW0nLFxuICAgICdwYWNrYWdlLWRpYWdyYW0nLFxuICAgICdpbnRlcm5hbC1ibG9jay1kaWFncmFtJyxcbiAgICAncmVxdWlyZW1lbnQtY29udGFpbm1lbnQtcmVsYXRpb25zaGlwJyxcbiAgICAndXNlLWNhc2UnLFxuICAgICd1c2UtY2FzZS1leHRlbnNpb24tcG9pbnQnLFxuICAgICdjb21tdW5pY2F0aW9uLXBhdGgnLFxuICAgICdub3RlLWNvbm5lY3Rpb24nLFxuICAgICdzdWJqZWN0JyxcbiAgICAnYXV0by1sYXlvdXQnLFxuICAgICdyZXF1aXJlZC1pbnRlcmZhY2UnLFxuICAgICdwcm92aWRlZC1pbnRlcmZhY2UnLFxuICAgICdzdWItY29udGVudCcsXG4gICAgJ2Nvbm5lY3RvcicsXG4gICAgJ2xvY2FsLXByb2Nlc3MtY2FsbCcsXG4gICAgJ2FnZ3JlZ2F0b3InLFxuICAgICdzcGxpdHRlcicsXG4gICAgJ2NvbnZlcnRlcicsXG4gICAgJ2NvbnRlbnQtbW9kaWZpZXInLFxuICAgICdtZXNzYWdlLXN0YXJ0LWV2ZW50JyxcbiAgICAnbWVzc2FnZS1lbmQtZXZlbnQnLFxuICAgICdlc2NhbGF0aW9uLWVuZC1ldmVudCcsXG4gICAgJ3N0YXJ0LXRpbWVyLWV2ZW50JyxcbiAgICAnZXJyb3Itc3RhcnQtZXZlbnQnLFxuICAgICdlcnJvci1lbmQtZXZlbnQnLFxuICAgICdjb250ZW50LWVucmljaGVyJyxcbiAgICAncmVhbGl6YXRpb24nLFxuICAgICdpbnRlcmZhY2UnLFxuICAgICd1c2luZXNzLWNhcGFiaWxpdHknLFxuICAgICdwcm9ncmVzcy1ncm91cCcsXG4gICAgJ3ZhbHVlLXN0cmVhbScsXG4gICAgJ3ZhbHVlLWZsb3cnLFxuICAgICdhcHBsaWNhdGlvbicsXG4gICAgJ2V0bC1qb2InLFxuICAgICdidXNpbmVzcy1zZXJ2aWNlJyxcbiAgICAnYXBwbGljYXRpb24tc2VydmljZScsXG4gICAgJ25ldHdvcmstbm9kZScsXG4gICAgJ25ldHdvcmsnLFxuICAgICdkZXBsb3ltZW50LWluc3RhbmNlJyxcbiAgICAnaW50cmFuZXQnLFxuICAgICdtb2JpbGUtbmV0d29yaycsXG4gICAgJ3ByaXZhdGUtY2xvdWQnLFxuICAgICdhbnRlbm5hJyxcbiAgICAnZmlyZXdhbGwnLFxuICAgICdodWInLFxuICAgICdtb2RlbScsXG4gICAgJ3JlcGVhdGVyJyxcbiAgICAncm91dGVyJyxcbiAgICAnc3dpdGNoJyxcbiAgICAnc2F0ZWxsaXRlJyxcbiAgICAnc3lzdGVtLTInLFxuICAgICdzdGF0dXMtYWN0aXZhdGluZycsXG4gICAgJ3N0YXR1cy1zdXNwZW5kZWQnLFxuICAgICdzdGF0dXMtc3VzcGVuZGluZycsXG4gICAgJ3N0YXR1cy10ZXJtaW5hdGVkJyxcbiAgICAnc3RhdHVzLXRlcm1pbmF0aW5nJyxcbiAgICAnc29sdXRpb24tbm90LWxpY2Vuc2VkJyxcbiAgICAnY2xlYXItYWxsLW1hcHBpbmcnLFxuICAgICdtYXAtYWxsLWZpZWxkcydcbl07XG5leHBvcnQgY29uc3QgSWNvbkJ1c2luZXNzU3VpdGUgPSBbXG4gICAgJ2hlYXJ0JyxcbiAgICAncXVhcnRlcicsXG4gICAgJ3llYXInLFxuICAgICdlcXVhbGl6ZXInLFxuICAgICdjb21wb25lbnQnLFxuICAgICdjb21wb25lbnQtcHJpdmF0ZScsXG4gICAgJ3Jhdy1tYXRlcmlhbCcsXG4gICAgJ3NtcycsXG4gICAgJ2FkZC1ub3RlJyxcbiAgICAnY2hhbmdlLXRpbWUtaG9yaXpvbicsXG4gICAgJ3RhYmxlLWNoYXJ0LWN1c3RvbWl6YXRpb24nLFxuICAgICdkZWxlZ2F0ZWQtaW1wb3J0YW50LXRhc2snLFxuICAgICdmb3JrbGlmdCcsXG4gICAgJ2NvaW5zJyxcbiAgICAnZmlsdGVyLW1lbnUnLFxuICAgICd0YXJnZXQtdG8tZGF0ZScsXG4gICAgJ3Byb2dyYW0nLFxuICAgICdwaGFzZScsXG4gICAgJ2NoZWNrbGlzdCcsXG4gICAgJ21pcnJvcmVkLXRhc2snLFxuICAgICdzdWItcHJvamVjdCcsXG4gICAgJ2NoZWNrbGlzdC1pdGVtJyxcbiAgICAnYWRob2MtYW5hbHlzaXMnLFxuICAgICdjaGFuZ2UtYW5hbHlzaXMnLFxuICAgICdyZXZpZXctZGVtYW5kcycsXG4gICAgJ3Byb2plY3QtZGVmaW5pdGlvbicsXG4gICAgJ2RhdGEtYWNjZXNzJyxcbiAgICAnZGVmaW5lLXNob3J0YWdlJyxcbiAgICAncmV2aWV3LXN1cHBsaWVzJyxcbiAgICAnY2hhbmdlLWxvZycsXG4gICAgJ3ByaW9yaXR5LTEnLFxuICAgICdwcmlvcml0eS0yJyxcbiAgICAnamFtJyxcbiAgICAnbWlsZXN0b25lJyxcbiAgICAnYnVsbGV0aW5nLXdpdGgtbnVtYmVycycsXG4gICAgJ2RlY3JlYXNlLWluZGVudCcsXG4gICAgJ2luY3JlYXNlLWluZGVudCcsXG4gICAgJ2JvbGQnLFxuICAgICdpdGFsaWMnLFxuICAgICdzdHJpa2UtdGhyb3VnaCcsXG4gICAgJ3VuZGVybGluZScsXG4gICAgJ3NhdmUtYXMnLFxuICAgICdzZWdtZW50YXRpb24nLFxuICAgICdjb250ZXh0LW1lbnUnLFxuICAgICdzbmFwc2hvdCcsXG4gICAgJ3N1YnRyYWN0aW9uLWItYScsXG4gICAgJ3N1YnRyYWN0aW9uLWEtYicsXG4gICAgJ2ludGVyc2VjdGlvbicsXG4gICAgJ3VuaW9uJyxcbiAgICAndG9wJyxcbiAgICAnYm90dG9tJyxcbiAgICAncGFnZS11cCcsXG4gICAgJ3BhZ2UtZG93bicsXG4gICAgJ2NyZWF0ZS1kYXNoYm9hcmQnLFxuICAgICd4Y2Vsc2l1cy1maWxlJyxcbiAgICAnb3Blbi1mb2xkZXInLFxuICAgICduZXV0cmFsJyxcbiAgICAnc3BsaXQtc2VnbWVudGF0aW9uJyxcbiAgICAnbWFuYWdlLWJ1ZGdldCcsXG4gICAgJ2Jsb2NrZWQnLFxuICAgICdwaXBldHRlJyxcbiAgICAndG9wLXJlY2lwZScsXG4gICAgJ3JlY2lwZScsXG4gICAgJ2luZ3JlZGllbnRzJyxcbiAgICAnbXVsdGlwbGUtY2hhcnRzJyxcbiAgICAnZGVzY2VuZGluZy1iYXJzJyxcbiAgICAnZGVzY2VuZGluZy1zdGFja2VkLWJhcnMnLFxuICAgICdzY2F0dGVyLXBsb3QnLFxuICAgICdzcGlsbCcsXG4gICAgJ2ZpcmUnLFxuICAgICdzdHJhdGlmaWNhdGlvbicsXG4gICAgJ3JlbGF0aW9uc2hpcCcsXG4gICAgJ21hcmdpbi1kZWNvbXBvc2l0aW9uJyxcbiAgICAnY29udHJvbC1ncm91cCcsXG4gICAgJ2NvbXBhcmlzb24tY2hhcnQnLFxuICAgICdyZXNwb25zaWJsZS1hcmVhJyxcbiAgICAnaW5jcmVhc2UnLFxuICAgICdkZWNyZWFzZScsXG4gICAgJ2N1cnJlbnQtc3RvY2snLFxuICAgICdleHBlZGl0ZScsXG4gICAgJ3Bvc3Rwb25lJyxcbiAgICAnYXBwcm92ZWQnLFxuICAgICdwYXJ0aWFsbHktZGVsaXZlcmVkJyxcbiAgICAnbGluZS1iYXItY2hhcnQnLFxuICAgICdleHBhbmQtYWxsJyxcbiAgICAnc3VibWlzc2lvbicsXG4gICAgJ2NoYW5nZS1yZXF1ZXN0JyxcbiAgICAnY29sdW1uLXVuc2VsZWN0ZWQnLFxuICAgICdjb2x1bW4tc2VsZWN0ZWQnLFxuICAgICdyb3ctdW5zZWxlY3RlZCcsXG4gICAgJ3Jvdy1zZWxlY3RlZCcsXG4gICAgJ3N0b2NrLXJlcXVpcmVtZW50cycsXG4gICAgJ2dlbmRlci1tYWxlLWFuZC1mZW1hbGUnLFxuICAgICdtYXJpdGFsLXN0YXR1cycsXG4gICAgJ2JpcnRoZGF5JyxcbiAgICAnY2xhc3NpZmljYXRpb24nLFxuICAgICdtYXJrZWQtZm9yLWRlbGV0aW9uJyxcbiAgICAnYnVsbGV0LWNoYXJ0JyxcbiAgICAncmVtb3ZlLWZpbHRlcicsXG4gICAgJ2JhbmstYWNjb3VudCcsXG4gICAgJ3NhdmluZ3MtYWNjb3VudCcsXG4gICAgJ2RlYml0LWNhcmQnLFxuICAgICd2aXAtY3VzdG9tZXInLFxuICAgICd1bmRlc2lyYWJsZS1jdXN0b21lcicsXG4gICAgJ2Fuc3dlcmVkLWNoYW5nZS1yZXF1ZXN0JyxcbiAgICAnY29sbGVjdGVkLWNoYW5nZS1yZXF1ZXN0JyxcbiAgICAnZHJhdy1mcmVlaGFuZCcsXG4gICAgJ2RyYXctY2lyY2xlJyxcbiAgICAnY29tcGxldGVkJyxcbiAgICAnYW5zd2VyZWQnLFxuICAgICd0cmFmZmljLWNvbmUnLFxuICAgICd0cmFmZmljLWxpZ2h0cycsXG4gICAgJ2NvbnRhaW5lcicsXG4gICAgJ2NvbnRhaW5lci1sb2FkaW5nJyxcbiAgICAndHJhZmZpYy1qYW0nLFxuICAgICdwcm9kdWN0cycsXG4gICAgJ3NpZGVwYW5lbCcsXG4gICAgJ3NwbGl0LXNjcmVlbicsXG4gICAgJ3RydWNrLWRyaXZlcicsXG4gICAgJ2tlZXAtc2VnbWVudCcsXG4gICAgJ2V4Y2x1ZGUtc2VnbWVudCcsXG4gICAgJ3NlcGFyYXRlLXNlZ21lbnRzJyxcbiAgICAnZGlzdHJpYnV0ZS1zZWdtZW50cycsXG4gICAgJ25leHQtb3Blbi1pdGVtJyxcbiAgICAnd2hlcmUtdXNlZCcsXG4gICAgJ291dGJvdW5kLWRlbGl2ZXJ5JyxcbiAgICAnb3V0Ym91bmQtZGVsaXZlcnktaW5hY3RpdmUnLFxuICAgICdvdXRib3VuZC1kZWxpdmVyeS1hY3RpdmUnLFxuICAgICd0YXJnZXQnLFxuICAgICdzb3VyY2UnLFxuICAgICdtYXRlcmlhbCcsXG4gICAgJ2R1ZS1kYXRlJyxcbiAgICAnb3ZlcmR1ZScsXG4gICAgJ3NldC1hcy1kZWZhdWx0JyxcbiAgICAnZmFjZS12ZXJ5LWJhZCcsXG4gICAgJ2ZhY2UtYmFkJyxcbiAgICAnZmFjZS1za2VwdGljYWwnLFxuICAgICdmYWNlLW5ldXRyYWwnLFxuICAgICdmYWNlLWFzdG9uaXNoZWQnLFxuICAgICdmYWNlLWhhcHB5JyxcbiAgICAnZmFjZS12ZXJ5LWhhcHB5JyxcbiAgICAnZmFjZS1hd2Z1bCcsXG4gICAgJ2ZhY2UtZGV2YXN0YXRlZCcsXG4gICAgJ2ZhY2Utb2tleS1kb2tleScsXG4gICAgJ2FsYXJtJyxcbiAgICAnYWN0aXZhdGUnLFxuICAgICdzZWdtZW50LXByZXZpZXctcmVmZXJlbmNlLW9iamVjdHMnLFxuICAgICdyYWRpdXMnLFxuICAgICdwb2x5Z29uZS1ibGFjaycsXG4gICAgJ3BvbHlnb25lLXdoaXRlJyxcbiAgICAncGxveWdvbmUnLFxuICAgICduby1maWx0ZXInLFxuICAgICdncmlwJyxcbiAgICAnd2F0ZXInLFxuICAgICdnYXMnLFxuICAgICdsaXF1aWQnLFxuICAgICd0aW1lLWRlcG9zaXQnLFxuICAgICdlYXJseS13aWR0aGRyYXdhbC1mb3ItdGltZS1kZXBvc2l0cycsXG4gICAgJ3RydWNrLWxvYWQnLFxuICAgICd0cnVjay11bmxvYWQnLFxuICAgICd0cnVjay1sb2FkLXVubG9hZCcsXG4gICAgJ3BoYXJtYWN5JyxcbiAgICAnbWVkaWNpbmUtc3lydXAnLFxuICAgICdyZW1pbmRlcicsXG4gICAgJ21lZGljaW5lLXBpbGwnLFxuICAgICdtZWRpY2luZS1vaW50bWVudCcsXG4gICAgJ21lZGljaW5lLWRyb3BzJyxcbiAgICAnYmxvb2QtdGVzdCcsXG4gICAgJ3RlbXBlcmF0dXJlJyxcbiAgICAnbWVkaWNpbmUtaW5oYWxlcicsXG4gICAgJ2Zvb3Qtc3RlcHMnLFxuICAgICd3ZWlnaHQnLFxuICAgICdoZWFsdGgtdHJhY2tpbmcnLFxuICAgICdibG9vZC1wcmVzc3VyZScsXG4gICAgJ2ltbXVuaXphdGlvbicsXG4gICAgJ2FsbGVyZ2llcycsXG4gICAgJ3Jlc2NoZWR1bGluZzInLFxuICAgICdyZXNlcXVlbmNpbmcyJyxcbiAgICAnbm8tdGltZS1jaGFuZ2UnLFxuICAgICd0aW1lLWNoYW5nZScsXG4gICAgJ3NtYXJ0LW1hdGNoZXInLFxuICAgICdsZWdhbC1zZWN0aW9uJyxcbiAgICAnY2F1c2VzJyxcbiAgICAnZWZmZWN0cycsXG4gICAgJ3NoYXJlZC1ieS1tZScsXG4gICAgJ3NoYXJlZC13aXRoLW1lJyxcbiAgICAnYWxlcnQtZ3JvdXBzJyxcbiAgICAnZnVuY3Rpb24tYWxlcnQnLFxuICAgICdmdW5jdGlvbi1oaWVyYXJjaHknLFxuICAgICdyZmlkJyxcbiAgICAnaW5wdXQnLFxuICAgICdzb2Z0d2FyZS1pdGVtJyxcbiAgICAncHJvZHVjdC12aWV3JyxcbiAgICAnc29mdHdhcmUtaXRlbS12YXJpYW50JyxcbiAgICAnbGlnaHRob3VzZScsXG4gICAgJ2RlbWFuZC11bml0JyxcbiAgICAnZm1hLW1hbmFnZW1lbnQnLFxuICAgICdmbWEtdmFsaWRhdGlvbicsXG4gICAgJ2ZtYS1hbmFseXRpY3MnLFxuICAgICdjbGFzcycsXG4gICAgJ292ZXJ2aWV3JyxcbiAgICAncHJvZHVjdGlvbicsXG4gICAgJ3N1YmNsYXNzJyxcbiAgICAndmFyaWFudC1jb25maWd1cmF0aW9uJyxcbiAgICAnc3VtJyxcbiAgICAnZW1wdHktdHJhaWxlcicsXG4gICAgJ2Rvb3InLFxuICAgICdsb2FkaW5nLXBvaW50JyxcbiAgICAnc3RvY2std2FyZWhvdXNlJyxcbiAgICAnZ2F0ZScsXG4gICAgJ3RpbWVzZXJpZXMtd2F0ZXJmYWxsLWNoYXJ0JyxcbiAgICAnc3RhZ2VzLXdhcm5pbmcnLFxuICAgICdlbXB0eS13YXJuaW5nJ1xuXTtcbiJdfQ==
425
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE1BQU0sVUFBVSxZQUFZLENBQUMsVUFBVSxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsTUFBTTtJQUN0RSxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ1QsTUFBTSxXQUFXLEdBQUcsT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFDckUsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDLGtCQUFrQixDQUFDO1lBQ3JELFNBQVMsRUFBRSxNQUFNO1lBQ2pCLE1BQU0sRUFBRSxPQUFPLE1BQU0sS0FBSyxRQUFRO1lBQ2xDLFdBQVc7U0FDZCxDQUFDLENBQUM7UUFDSCxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakIsUUFBUSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMvQixNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsYUFBNEIsQ0FBQztRQUNuRCxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLHlCQUF5QixDQUFnQixDQUFDO1FBRTNFLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxtQ0FBbUMsQ0FBZ0IsQ0FBQztRQUM5RixNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLDBCQUEwQixDQUFnQixDQUFDO1FBQzdFLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDakQsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyw0QkFBNEIsQ0FBZ0IsQ0FBQztRQUNqRixJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2Isd0NBQXdDO1lBQ3hDLFVBQVUsQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLFFB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QixPQUFPO0lBQ1AsVUFBVTtJQUNWLG1DQUFtQztJQUNuQyxRQUFRO0lBQ1IsZ0JBQWdCO0lBQ2hCLGdCQUFnQjtJQUNoQixVQUFVO0lBQ1YsV0FBVztJQUNYLE1BQU07SUFDTixPQUFPO0lBQ1AsS0FBSztJQUNMLFFBQVE7SUFDUixjQUFjO0lBQ2QscUNBQXFDO0lBQ3JDLFlBQVk7SUFDWixjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CLFVBQVU7SUFDVixnQkFBZ0I7SUFDaEIsVUFBVTtJQUNWLGVBQWU7SUFDZixtQkFBbUI7SUFDbkIsZ0JBQWdCO0lBQ2hCLFlBQVk7SUFDWixhQUFhO0lBQ2Isa0JBQWtCO0lBQ2xCLFlBQVk7SUFDWixRQUFRO0lBQ1IsaUJBQWlCO0lBQ2pCLGdCQUFnQjtJQUNoQixjQUFjO0lBQ2QsV0FBVztJQUNYLGVBQWU7SUFDZixlQUFlO0lBQ2YsZ0JBQWdCO0lBQ2hCLGFBQWE7SUFDYixlQUFlO0lBQ2YsZUFBZTtJQUNmLFFBQVE7SUFDUixTQUFTO0lBQ1QsY0FBYztJQUNkLGdCQUFnQjtJQUNoQixjQUFjO0lBQ2QsZ0JBQWdCO0lBQ2hCLG9CQUFvQjtJQUNwQixNQUFNO0lBQ04sT0FBTztJQUNQLGVBQWU7SUFDZixjQUFjO0lBQ2QsdUJBQXVCO0lBQ3ZCLFlBQVk7SUFDWixhQUFhO0lBQ2IsZ0JBQWdCO0lBQ2hCLGdCQUFnQjtJQUNoQixlQUFlO0lBQ2YsT0FBTztJQUNQLFVBQVU7SUFDVixZQUFZO0lBQ1osVUFBVTtJQUNWLHVCQUF1QjtJQUN2QixLQUFLO0lBQ0wsZUFBZTtJQUNmLE1BQU07SUFDTixlQUFlO0lBQ2YsaUJBQWlCO0lBQ2pCLE1BQU07SUFDTiw0QkFBNEI7SUFDNUIsZ0JBQWdCO0lBQ2hCLGVBQWU7Q0FDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgRm9ybUxheW91dENvbCB7XG4gICAgY29sWGw6IG51bWJlcjtcbiAgICBjb2xMZzogbnVtYmVyO1xuICAgIGNvbE1kOiBudW1iZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRBdmF0YXIoZWxlbWVudFJlZiwgaGVhZGVyQXZhdGFyUmVmLCB0aXRsZVJlZiwgYXZhdGFyKTogdm9pZCB7XG4gICAgaWYgKGF2YXRhcikge1xuICAgICAgICBjb25zdCBpc051bGxJbWFnZSA9IHR5cGVvZiBhdmF0YXIgPT09ICdvYmplY3QnICYmIGF2YXRhci5Jc051bGxJbWFnZTtcbiAgICAgICAgY29uc3QgYXZhdGFyVmlld1JlZiA9IGhlYWRlckF2YXRhclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcoe1xuICAgICAgICAgICAgJGltcGxpY2l0OiBhdmF0YXIsXG4gICAgICAgICAgICBpc0ljb246IHR5cGVvZiBhdmF0YXIgPT09ICdzdHJpbmcnLFxuICAgICAgICAgICAgaXNOdWxsSW1hZ2VcbiAgICAgICAgfSk7XG4gICAgICAgIHRpdGxlUmVmLmNsZWFyKCk7XG4gICAgICAgIHRpdGxlUmVmLmluc2VydChhdmF0YXJWaWV3UmVmKTtcbiAgICAgICAgY29uc3QgZWwgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHRpdGxlRWwgPSBlbC5xdWVyeVNlbGVjdG9yKCcuZmQtZHluYW1pYy1wYWdlX190aXRsZScpIGFzIEhUTUxFbGVtZW50O1xuXG4gICAgICAgIGNvbnN0IHRpdGxlQ29udGFpbmVyRWwgPSBlbC5xdWVyeVNlbGVjdG9yKCcuZmQtZHluYW1pYy1wYWdlX190aXRsZS1jb250YWluZXInKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgY29uc3QgYXZhdGFyRWwgPSBlbC5xdWVyeVNlbGVjdG9yKCcuZmQtZHluYW1pYy1wYWdlX19hdmF0YXInKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgdGl0bGVDb250YWluZXJFbC5pbnNlcnRCZWZvcmUoYXZhdGFyRWwsIHRpdGxlRWwpO1xuICAgICAgICBjb25zdCBzdWJUaXRsZUVsID0gZWwucXVlcnlTZWxlY3RvcignLmZkLWR5bmFtaWMtcGFnZV9fc3VidGl0bGUnKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgaWYgKHN1YlRpdGxlRWwpIHtcbiAgICAgICAgICAgIC8vIGNvbnN0IGluTW9iaWxlID0gZ2V0RGV2aWNlSXNNb2JpbGUoKTtcbiAgICAgICAgICAgIHN1YlRpdGxlRWwuc3R5bGUucGFkZGluZ1JpZ2h0ID0gYGNhbGMoJHsxLjV9cmVtICsgMTBweClgO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIEdldEZvcm1MYXlvdXRHcmlkKGNlaWw6IGJvb2xlYW4sIGNvbFhsOiBudW1iZXIsIGNvbExnOiBudW1iZXIsIGNvbE1kOiBudW1iZXIpOiBGb3JtTGF5b3V0Q29sIHtcbiAgICBjb25zdCB4ID0gY2VpbCA/IE1hdGguY2VpbCA6IE1hdGgucm91bmQ7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY29sWGw6IGNvbFhsID09PSAwID8gMCA6IHgoKDEyIC0gY29sWGwpIC8gMiksXG4gICAgICAgIGNvbExnOiBjb2xMZyA9PT0gMCA/IDAgOiB4KCgxMiAtIGNvbExnKSAvIDIpLFxuICAgICAgICBjb2xNZDogY29sTWQgPT09IDAgPyAwIDogeCgoMTIgLSBjb2xNZCkgLyAyKVxuICAgIH07XG59XG5cbmV4cG9ydCBjb25zdCBzb3J0ID0gPFQgZXh0ZW5kcyBvYmplY3Q+KGE6IFQsIGI6IFQsIGtleTogc3RyaW5nIHwgbnVsbCwgaXNOdW1iZXI/OiBib29sZWFuKTogbnVtYmVyID0+IHtcbiAgICBpZiAoa2V5KSB7XG4gICAgICAgIGlmICh0eXBlb2YgYSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGEgPSBnZXROZXN0ZWRWYWx1ZShrZXksIGEpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGEgPSBnZXROZXN0ZWRWYWx1ZShrZXksIGEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChrZXkgPT09ICdSb3dudW1iZXInIHx8IGlzTnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBOdW1iZXIoYSkgPT09IE51bWJlcihiKSA/IDAgOiBOdW1iZXIoYSkgPiBOdW1iZXIoYikgPyAxIDogLTE7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIGIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiAoYSBhcyBzdHJpbmcpLmxvY2FsZUNvbXBhcmUoYiBhcyBzdHJpbmcpO1xuICAgIH1cbiAgICByZXR1cm4gYSA+IGIgPyAxIDogYSA9PT0gYiA/IDAgOiAtMTtcbn07XG5leHBvcnQgZnVuY3Rpb24gX3RyaW1FbmQodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgY2FjaGUgPSBuZXcgU2V0KFN0cmluZyh2YWx1ZSkpO1xuICAgIGxldCBlbmQgPSB2YWx1ZS5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IHZhbHVlLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGlmICghY2FjaGUuaGFzKHZhbHVlW2ldKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZW5kLS07XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZS5zbGljZSgwLCBlbmQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldE5lc3RlZFZhbHVlPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PihrZXk6IHN0cmluZywgb2JqZWN0OiBUKTogYW55IHtcbiAgICByZXR1cm4ga2V5LnNwbGl0KCcuJykucmVkdWNlKChhLCBiKSA9PiAodHlwZW9mIGEgPT09ICd1bmRlZmluZWQnID8gYSA6IGFbYl0pLCBvYmplY3QpO1xufVxuXG5leHBvcnQgY29uc3QgSWNvblROVCA9IFtcbiAgICAndGVjaG5pY2Fsc3lzdGVtJyxcbiAgICAnc3lzdGVtamF2YScsXG4gICAgJ3N5c3RlbWFiYXAnLFxuICAgICdzeXN0ZW1yZWNvbW1lbmRhdGlvbnMnLFxuICAgICdzeXN0ZW0nLFxuICAgICdzeXN0ZW10cmV4JyxcbiAgICAnc3lzdGVtdHJhY2tzJyxcbiAgICAndGVjaG5pY2Fsc2NlbmFyaW8nLFxuICAgICd0ZWNobmljYWxpbnN0YW5jZScsXG4gICAgJ3Rocm91Z2hwdXQtYmFja2xvZycsXG4gICAgJ2JhdGNoLXByb2Nlc3NpbmcnLFxuICAgICdkYXRhYmFzZS1jb25zaXN0ZW5jeScsXG4gICAgJ2ludGVybWVkaWF0ZS1tZXNzYWdlJyxcbiAgICAnZXhjZXB0aW9ucycsXG4gICAgJ3N5c3RlbS1IQU5BJyxcbiAgICAncHl0aG9uJyxcbiAgICAncmFpc2UtZmF1bHQnLFxuICAgICdjb2RlMScsXG4gICAgJ2NvZGUyJyxcbiAgICAnc3Bpa2UtYXJyZXN0JyxcbiAgICAndmVyaWZ5LUFQSScsXG4gICAgJ3VzZXInLFxuICAgICdub3RlJyxcbiAgICAndGhyb3dpbmctbWVzc2FnZScsXG4gICAgJ2NhdGNoaW5nLW1lc3NhZ2UnLFxuICAgICdzdGFydC1ldmVudCcsXG4gICAgJ2VuZC1ldmVudCcsXG4gICAgJ2dhdGV3YXknLFxuICAgICdzdWItcHJvY2Vzcy1tYXJrZXInLFxuICAgICdhZC1ob2MtbWFya2VyJyxcbiAgICAnbWFudWFsLXRhc2snLFxuICAgICdzZW5kLXRhc2snLFxuICAgICdyZWNlaXZlLXRhc2snLFxuICAgICdzY3JpcHQtdGFzaycsXG4gICAgJ21hcnF1ZWUnLFxuICAgICdkYXRhLWlucHV0LWFycm93JyxcbiAgICAnZGF0YS1vdXRwdXQtYXJyb3cnLFxuICAgICdtb3JlJyxcbiAgICAncGF0dGVybicsXG4gICAgJ3Rhc2snLFxuICAgICdhcnJvdycsXG4gICAgJ2RhdGEnLFxuICAgICdkYXRhLXN0b3JlJyxcbiAgICAncG9vbCcsXG4gICAgJ3N3aW1sYW5lJyxcbiAgICAnc2VsZWN0JyxcbiAgICAnY3Vyc29yJyxcbiAgICAnYXBpJyxcbiAgICAnby1kYXRhJyxcbiAgICAnamF2YXNjcmlwdCcsXG4gICAgJ3ZhbHVlLW1hcHBpbmcnLFxuICAgICd0ZXJtaW5hdGUtZW5kLWV2ZW50JyxcbiAgICAncGFyYWxsZWwtZ2F0ZXdheScsXG4gICAgJ2V4Y2x1c2l2ZS1nYXRld2F5JyxcbiAgICAnc2VydmljZS10YXNrJyxcbiAgICAnd29ya2Zsb3ctZWRpdG9yJyxcbiAgICAnYm91bmRhcnktaW50ZXJydXB0aW5nJyxcbiAgICAnYm91bmRhcnktbm9uLWludGVycnVwdGluZycsXG4gICAgJ2Jsb2NrJyxcbiAgICAnY29uc3RyYWluLWJsb2NrJyxcbiAgICAnYWN0b3InLFxuICAgICdpbnN0YW5jZS1zcGVjaWZpY2F0aW9uJyxcbiAgICAndmFsdWUtdHlwZScsXG4gICAgJ2ludGVyZmFjZS1ibG9jaycsXG4gICAgJ3VuaXQnLFxuICAgICdzaWduYWwnLFxuICAgICdxdWFudGl0eS1raW5kJyxcbiAgICAnaXRlbS1mbG93JyxcbiAgICAnZGVwZW5kZW5jeScsXG4gICAgJ2dlbmVyYWxpemF0aW9uJyxcbiAgICAnYWdncmVnYXRpb24nLFxuICAgICdjb21wb3NpdGlvbicsXG4gICAgJ2Fzc29jaWF0aW9uJyxcbiAgICAncG9ydCcsXG4gICAgJ3Byb3h5LXBvcnQnLFxuICAgICdmdWxsLXBvcnQnLFxuICAgICdvcGVyYXRpb25zJyxcbiAgICAnY29uc3RyYWlucycsXG4gICAgJ3JlY2VwdGlvbnMnLFxuICAgICdyZWZlcmVuY2VzJyxcbiAgICAncGFydHMnLFxuICAgICdmbG93JyxcbiAgICAndmFsdWVzJyxcbiAgICAnYmlsbC1vZi1tYXRlcmlhbCcsXG4gICAgJ2RvY3VtZW50LWluZm8tcmVjb3JkaW5nJyxcbiAgICAndXNlLWNhc2UtZGlhZ3JhbScsXG4gICAgJ2JkZC1kaWFncmFtJyxcbiAgICAncmVxdWlyZW1lbnQtZGlhZ3JhbScsXG4gICAgJ3BhY2thZ2UtZGlhZ3JhbScsXG4gICAgJ2ludGVybmFsLWJsb2NrLWRpYWdyYW0nLFxuICAgICdyZXF1aXJlbWVudC1jb250YWlubWVudC1yZWxhdGlvbnNoaXAnLFxuICAgICd1c2UtY2FzZScsXG4gICAgJ3VzZS1jYXNlLWV4dGVuc2lvbi1wb2ludCcsXG4gICAgJ2NvbW11bmljYXRpb24tcGF0aCcsXG4gICAgJ25vdGUtY29ubmVjdGlvbicsXG4gICAgJ3N1YmplY3QnLFxuICAgICdhdXRvLWxheW91dCcsXG4gICAgJ3JlcXVpcmVkLWludGVyZmFjZScsXG4gICAgJ3Byb3ZpZGVkLWludGVyZmFjZScsXG4gICAgJ3N1Yi1jb250ZW50JyxcbiAgICAnY29ubmVjdG9yJyxcbiAgICAnbG9jYWwtcHJvY2Vzcy1jYWxsJyxcbiAgICAnYWdncmVnYXRvcicsXG4gICAgJ3NwbGl0dGVyJyxcbiAgICAnY29udmVydGVyJyxcbiAgICAnY29udGVudC1tb2RpZmllcicsXG4gICAgJ21lc3NhZ2Utc3RhcnQtZXZlbnQnLFxuICAgICdtZXNzYWdlLWVuZC1ldmVudCcsXG4gICAgJ2VzY2FsYXRpb24tZW5kLWV2ZW50JyxcbiAgICAnc3RhcnQtdGltZXItZXZlbnQnLFxuICAgICdlcnJvci1zdGFydC1ldmVudCcsXG4gICAgJ2Vycm9yLWVuZC1ldmVudCcsXG4gICAgJ2NvbnRlbnQtZW5yaWNoZXInLFxuICAgICdyZWFsaXphdGlvbicsXG4gICAgJ2ludGVyZmFjZScsXG4gICAgJ3VzaW5lc3MtY2FwYWJpbGl0eScsXG4gICAgJ3Byb2dyZXNzLWdyb3VwJyxcbiAgICAndmFsdWUtc3RyZWFtJyxcbiAgICAndmFsdWUtZmxvdycsXG4gICAgJ2FwcGxpY2F0aW9uJyxcbiAgICAnZXRsLWpvYicsXG4gICAgJ2J1c2luZXNzLXNlcnZpY2UnLFxuICAgICdhcHBsaWNhdGlvbi1zZXJ2aWNlJyxcbiAgICAnbmV0d29yay1ub2RlJyxcbiAgICAnbmV0d29yaycsXG4gICAgJ2RlcGxveW1lbnQtaW5zdGFuY2UnLFxuICAgICdpbnRyYW5ldCcsXG4gICAgJ21vYmlsZS1uZXR3b3JrJyxcbiAgICAncHJpdmF0ZS1jbG91ZCcsXG4gICAgJ2FudGVubmEnLFxuICAgICdmaXJld2FsbCcsXG4gICAgJ2h1YicsXG4gICAgJ21vZGVtJyxcbiAgICAncmVwZWF0ZXInLFxuICAgICdyb3V0ZXInLFxuICAgICdzd2l0Y2gnLFxuICAgICdzYXRlbGxpdGUnLFxuICAgICdzeXN0ZW0tMicsXG4gICAgJ3N0YXR1cy1hY3RpdmF0aW5nJyxcbiAgICAnc3RhdHVzLXN1c3BlbmRlZCcsXG4gICAgJ3N0YXR1cy1zdXNwZW5kaW5nJyxcbiAgICAnc3RhdHVzLXRlcm1pbmF0ZWQnLFxuICAgICdzdGF0dXMtdGVybWluYXRpbmcnLFxuICAgICdzb2x1dGlvbi1ub3QtbGljZW5zZWQnLFxuICAgICdjbGVhci1hbGwtbWFwcGluZycsXG4gICAgJ21hcC1hbGwtZmllbGRzJ1xuXTtcbmV4cG9ydCBjb25zdCBJY29uQnVzaW5lc3NTdWl0ZSA9IFtcbiAgICAnaGVhcnQnLFxuICAgICdxdWFydGVyJyxcbiAgICAneWVhcicsXG4gICAgJ2VxdWFsaXplcicsXG4gICAgJ2NvbXBvbmVudCcsXG4gICAgJ2NvbXBvbmVudC1wcml2YXRlJyxcbiAgICAncmF3LW1hdGVyaWFsJyxcbiAgICAnc21zJyxcbiAgICAnYWRkLW5vdGUnLFxuICAgICdjaGFuZ2UtdGltZS1ob3Jpem9uJyxcbiAgICAndGFibGUtY2hhcnQtY3VzdG9taXphdGlvbicsXG4gICAgJ2RlbGVnYXRlZC1pbXBvcnRhbnQtdGFzaycsXG4gICAgJ2ZvcmtsaWZ0JyxcbiAgICAnY29pbnMnLFxuICAgICdmaWx0ZXItbWVudScsXG4gICAgJ3RhcmdldC10by1kYXRlJyxcbiAgICAncHJvZ3JhbScsXG4gICAgJ3BoYXNlJyxcbiAgICAnY2hlY2tsaXN0JyxcbiAgICAnbWlycm9yZWQtdGFzaycsXG4gICAgJ3N1Yi1wcm9qZWN0JyxcbiAgICAnY2hlY2tsaXN0LWl0ZW0nLFxuICAgICdhZGhvYy1hbmFseXNpcycsXG4gICAgJ2NoYW5nZS1hbmFseXNpcycsXG4gICAgJ3Jldmlldy1kZW1hbmRzJyxcbiAgICAncHJvamVjdC1kZWZpbml0aW9uJyxcbiAgICAnZGF0YS1hY2Nlc3MnLFxuICAgICdkZWZpbmUtc2hvcnRhZ2UnLFxuICAgICdyZXZpZXctc3VwcGxpZXMnLFxuICAgICdjaGFuZ2UtbG9nJyxcbiAgICAncHJpb3JpdHktMScsXG4gICAgJ3ByaW9yaXR5LTInLFxuICAgICdqYW0nLFxuICAgICdtaWxlc3RvbmUnLFxuICAgICdidWxsZXRpbmctd2l0aC1udW1iZXJzJyxcbiAgICAnZGVjcmVhc2UtaW5kZW50JyxcbiAgICAnaW5jcmVhc2UtaW5kZW50JyxcbiAgICAnYm9sZCcsXG4gICAgJ2l0YWxpYycsXG4gICAgJ3N0cmlrZS10aHJvdWdoJyxcbiAgICAndW5kZXJsaW5lJyxcbiAgICAnc2F2ZS1hcycsXG4gICAgJ3NlZ21lbnRhdGlvbicsXG4gICAgJ2NvbnRleHQtbWVudScsXG4gICAgJ3NuYXBzaG90JyxcbiAgICAnc3VidHJhY3Rpb24tYi1hJyxcbiAgICAnc3VidHJhY3Rpb24tYS1iJyxcbiAgICAnaW50ZXJzZWN0aW9uJyxcbiAgICAndW5pb24nLFxuICAgICd0b3AnLFxuICAgICdib3R0b20nLFxuICAgICdwYWdlLXVwJyxcbiAgICAncGFnZS1kb3duJyxcbiAgICAnY3JlYXRlLWRhc2hib2FyZCcsXG4gICAgJ3hjZWxzaXVzLWZpbGUnLFxuICAgICdvcGVuLWZvbGRlcicsXG4gICAgJ25ldXRyYWwnLFxuICAgICdzcGxpdC1zZWdtZW50YXRpb24nLFxuICAgICdtYW5hZ2UtYnVkZ2V0JyxcbiAgICAnYmxvY2tlZCcsXG4gICAgJ3BpcGV0dGUnLFxuICAgICd0b3AtcmVjaXBlJyxcbiAgICAncmVjaXBlJyxcbiAgICAnaW5ncmVkaWVudHMnLFxuICAgICdtdWx0aXBsZS1jaGFydHMnLFxuICAgICdkZXNjZW5kaW5nLWJhcnMnLFxuICAgICdkZXNjZW5kaW5nLXN0YWNrZWQtYmFycycsXG4gICAgJ3NjYXR0ZXItcGxvdCcsXG4gICAgJ3NwaWxsJyxcbiAgICAnZmlyZScsXG4gICAgJ3N0cmF0aWZpY2F0aW9uJyxcbiAgICAncmVsYXRpb25zaGlwJyxcbiAgICAnbWFyZ2luLWRlY29tcG9zaXRpb24nLFxuICAgICdjb250cm9sLWdyb3VwJyxcbiAgICAnY29tcGFyaXNvbi1jaGFydCcsXG4gICAgJ3Jlc3BvbnNpYmxlLWFyZWEnLFxuICAgICdpbmNyZWFzZScsXG4gICAgJ2RlY3JlYXNlJyxcbiAgICAnY3VycmVudC1zdG9jaycsXG4gICAgJ2V4cGVkaXRlJyxcbiAgICAncG9zdHBvbmUnLFxuICAgICdhcHByb3ZlZCcsXG4gICAgJ3BhcnRpYWxseS1kZWxpdmVyZWQnLFxuICAgICdsaW5lLWJhci1jaGFydCcsXG4gICAgJ2V4cGFuZC1hbGwnLFxuICAgICdzdWJtaXNzaW9uJyxcbiAgICAnY2hhbmdlLXJlcXVlc3QnLFxuICAgICdjb2x1bW4tdW5zZWxlY3RlZCcsXG4gICAgJ2NvbHVtbi1zZWxlY3RlZCcsXG4gICAgJ3Jvdy11bnNlbGVjdGVkJyxcbiAgICAncm93LXNlbGVjdGVkJyxcbiAgICAnc3RvY2stcmVxdWlyZW1lbnRzJyxcbiAgICAnZ2VuZGVyLW1hbGUtYW5kLWZlbWFsZScsXG4gICAgJ21hcml0YWwtc3RhdHVzJyxcbiAgICAnYmlydGhkYXknLFxuICAgICdjbGFzc2lmaWNhdGlvbicsXG4gICAgJ21hcmtlZC1mb3ItZGVsZXRpb24nLFxuICAgICdidWxsZXQtY2hhcnQnLFxuICAgICdyZW1vdmUtZmlsdGVyJyxcbiAgICAnYmFuay1hY2NvdW50JyxcbiAgICAnc2F2aW5ncy1hY2NvdW50JyxcbiAgICAnZGViaXQtY2FyZCcsXG4gICAgJ3ZpcC1jdXN0b21lcicsXG4gICAgJ3VuZGVzaXJhYmxlLWN1c3RvbWVyJyxcbiAgICAnYW5zd2VyZWQtY2hhbmdlLXJlcXVlc3QnLFxuICAgICdjb2xsZWN0ZWQtY2hhbmdlLXJlcXVlc3QnLFxuICAgICdkcmF3LWZyZWVoYW5kJyxcbiAgICAnZHJhdy1jaXJjbGUnLFxuICAgICdjb21wbGV0ZWQnLFxuICAgICdhbnN3ZXJlZCcsXG4gICAgJ3RyYWZmaWMtY29uZScsXG4gICAgJ3RyYWZmaWMtbGlnaHRzJyxcbiAgICAnY29udGFpbmVyJyxcbiAgICAnY29udGFpbmVyLWxvYWRpbmcnLFxuICAgICd0cmFmZmljLWphbScsXG4gICAgJ3Byb2R1Y3RzJyxcbiAgICAnc2lkZXBhbmVsJyxcbiAgICAnc3BsaXQtc2NyZWVuJyxcbiAgICAndHJ1Y2stZHJpdmVyJyxcbiAgICAna2VlcC1zZWdtZW50JyxcbiAgICAnZXhjbHVkZS1zZWdtZW50JyxcbiAgICAnc2VwYXJhdGUtc2VnbWVudHMnLFxuICAgICdkaXN0cmlidXRlLXNlZ21lbnRzJyxcbiAgICAnbmV4dC1vcGVuLWl0ZW0nLFxuICAgICd3aGVyZS11c2VkJyxcbiAgICAnb3V0Ym91bmQtZGVsaXZlcnknLFxuICAgICdvdXRib3VuZC1kZWxpdmVyeS1pbmFjdGl2ZScsXG4gICAgJ291dGJvdW5kLWRlbGl2ZXJ5LWFjdGl2ZScsXG4gICAgJ3RhcmdldCcsXG4gICAgJ3NvdXJjZScsXG4gICAgJ21hdGVyaWFsJyxcbiAgICAnZHVlLWRhdGUnLFxuICAgICdvdmVyZHVlJyxcbiAgICAnc2V0LWFzLWRlZmF1bHQnLFxuICAgICdmYWNlLXZlcnktYmFkJyxcbiAgICAnZmFjZS1iYWQnLFxuICAgICdmYWNlLXNrZXB0aWNhbCcsXG4gICAgJ2ZhY2UtbmV1dHJhbCcsXG4gICAgJ2ZhY2UtYXN0b25pc2hlZCcsXG4gICAgJ2ZhY2UtaGFwcHknLFxuICAgICdmYWNlLXZlcnktaGFwcHknLFxuICAgICdmYWNlLWF3ZnVsJyxcbiAgICAnZmFjZS1kZXZhc3RhdGVkJyxcbiAgICAnZmFjZS1va2V5LWRva2V5JyxcbiAgICAnYWxhcm0nLFxuICAgICdhY3RpdmF0ZScsXG4gICAgJ3NlZ21lbnQtcHJldmlldy1yZWZlcmVuY2Utb2JqZWN0cycsXG4gICAgJ3JhZGl1cycsXG4gICAgJ3BvbHlnb25lLWJsYWNrJyxcbiAgICAncG9seWdvbmUtd2hpdGUnLFxuICAgICdwbG95Z29uZScsXG4gICAgJ25vLWZpbHRlcicsXG4gICAgJ2dyaXAnLFxuICAgICd3YXRlcicsXG4gICAgJ2dhcycsXG4gICAgJ2xpcXVpZCcsXG4gICAgJ3RpbWUtZGVwb3NpdCcsXG4gICAgJ2Vhcmx5LXdpZHRoZHJhd2FsLWZvci10aW1lLWRlcG9zaXRzJyxcbiAgICAndHJ1Y2stbG9hZCcsXG4gICAgJ3RydWNrLXVubG9hZCcsXG4gICAgJ3RydWNrLWxvYWQtdW5sb2FkJyxcbiAgICAncGhhcm1hY3knLFxuICAgICdtZWRpY2luZS1zeXJ1cCcsXG4gICAgJ3JlbWluZGVyJyxcbiAgICAnbWVkaWNpbmUtcGlsbCcsXG4gICAgJ21lZGljaW5lLW9pbnRtZW50JyxcbiAgICAnbWVkaWNpbmUtZHJvcHMnLFxuICAgICdibG9vZC10ZXN0JyxcbiAgICAndGVtcGVyYXR1cmUnLFxuICAgICdtZWRpY2luZS1pbmhhbGVyJyxcbiAgICAnZm9vdC1zdGVwcycsXG4gICAgJ3dlaWdodCcsXG4gICAgJ2hlYWx0aC10cmFja2luZycsXG4gICAgJ2Jsb29kLXByZXNzdXJlJyxcbiAgICAnaW1tdW5pemF0aW9uJyxcbiAgICAnYWxsZXJnaWVzJyxcbiAgICAncmVzY2hlZHVsaW5nMicsXG4gICAgJ3Jlc2VxdWVuY2luZzInLFxuICAgICduby10aW1lLWNoYW5nZScsXG4gICAgJ3RpbWUtY2hhbmdlJyxcbiAgICAnc21hcnQtbWF0Y2hlcicsXG4gICAgJ2xlZ2FsLXNlY3Rpb24nLFxuICAgICdjYXVzZXMnLFxuICAgICdlZmZlY3RzJyxcbiAgICAnc2hhcmVkLWJ5LW1lJyxcbiAgICAnc2hhcmVkLXdpdGgtbWUnLFxuICAgICdhbGVydC1ncm91cHMnLFxuICAgICdmdW5jdGlvbi1hbGVydCcsXG4gICAgJ2Z1bmN0aW9uLWhpZXJhcmNoeScsXG4gICAgJ3JmaWQnLFxuICAgICdpbnB1dCcsXG4gICAgJ3NvZnR3YXJlLWl0ZW0nLFxuICAgICdwcm9kdWN0LXZpZXcnLFxuICAgICdzb2Z0d2FyZS1pdGVtLXZhcmlhbnQnLFxuICAgICdsaWdodGhvdXNlJyxcbiAgICAnZGVtYW5kLXVuaXQnLFxuICAgICdmbWEtbWFuYWdlbWVudCcsXG4gICAgJ2ZtYS12YWxpZGF0aW9uJyxcbiAgICAnZm1hLWFuYWx5dGljcycsXG4gICAgJ2NsYXNzJyxcbiAgICAnb3ZlcnZpZXcnLFxuICAgICdwcm9kdWN0aW9uJyxcbiAgICAnc3ViY2xhc3MnLFxuICAgICd2YXJpYW50LWNvbmZpZ3VyYXRpb24nLFxuICAgICdzdW0nLFxuICAgICdlbXB0eS10cmFpbGVyJyxcbiAgICAnZG9vcicsXG4gICAgJ2xvYWRpbmctcG9pbnQnLFxuICAgICdzdG9jay13YXJlaG91c2UnLFxuICAgICdnYXRlJyxcbiAgICAndGltZXNlcmllcy13YXRlcmZhbGwtY2hhcnQnLFxuICAgICdzdGFnZXMtd2FybmluZycsXG4gICAgJ2VtcHR5LXdhcm5pbmcnXG5dO1xuIl19
@@ -6,7 +6,9 @@ export class GridMoDataList {
6
6
  constructor(moDataList$, gridSetting$, visibleColumns$, searchTerm$) {
7
7
  this.data$ = merge(moDataList$.pipe(tap((items) => (this.items = items))), gridSetting$.pipe(tap((gridSetting) => (this.gridSetting = gridSetting))), searchTerm$.pipe(tap((searchTerm) => (this.searchTerm = searchTerm))), visibleColumns$.pipe(tap((visibleColumns) => (this.visibleColumns = visibleColumns)))).pipe(filter(() => !!this.items), map(() => this.searchTerm
8
8
  ? searchEx(this.searchTerm, this.visibleColumns.map((c) => c.Name), this.items)
9
- : this.items), map(() => (this.gridSetting?.SortSettingList ? sortEx(this.getSortby(), this.items) : this.items)),
9
+ : this.items), map(() => this.gridSetting?.SortSettingList
10
+ ? this.items.slice().sort(multilevelSort(this.getSortby()))
11
+ : this.items),
10
12
  // map((items) => {
11
13
  // items.forEach((item) => (item.$Visibility = true));
12
14
  // return items;
@@ -63,6 +65,30 @@ const sortEx = (sortBy, moDataList) => {
63
65
  })
64
66
  .find((result, index, list) => result !== 0 || index === list.length - 1));
65
67
  };
68
+ function combineComparisonFunctions(compareFunctions) {
69
+ return (a, b) => {
70
+ return compareFunctions.reduce((result, compareFunction) => {
71
+ // Proceeds to the next comparison function if the previous one returned 0
72
+ console.log('before ', result);
73
+ console.log('next a ,b ', a, b);
74
+ return result || compareFunction(a, b);
75
+ }, 0);
76
+ };
77
+ }
78
+ function multilevelSort(criteria) {
79
+ const compareFunctions = criteria.map((x) => {
80
+ const { field, direction, isNumber } = x;
81
+ return (a, b) => {
82
+ const aValue = a[field || '$_x_']; // optionally transform the property value
83
+ const bValue = b[field || '$_x_']; // we use an identity function as default
84
+ const ascModifier = direction === SortDirection.ASC ? 1 : -1;
85
+ const res = Constants.sort(aValue, bValue, field, isNumber);
86
+ console.log('sort res=', res * ascModifier, 'on field', field, aValue, bValue);
87
+ return res * ascModifier;
88
+ };
89
+ });
90
+ return combineComparisonFunctions(compareFunctions);
91
+ }
66
92
  const search = ({ searchInput, columns }, items) => {
67
93
  return searchEx(searchInput?.text, columns, items);
68
94
  };
@@ -80,4 +106,4 @@ const searchEx = (searchTerm, columns, items) => {
80
106
  .some((value) => value.toLocaleLowerCase().includes(searchText.toLocaleLowerCase()));
81
107
  });
82
108
  };
83
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1kYXRhLXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvbW9kZWxzL2dyaWQtZGF0YS1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVsRCxPQUFPLEVBTUgsYUFBYSxFQUNoQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sS0FBSyxTQUFTLE1BQU0sY0FBYyxDQUFDO0FBRTFDLE1BQU0sT0FBTyxjQUFjO0lBT3ZCLFlBQ0ksV0FBOEMsRUFDOUMsWUFBcUMsRUFDckMsZUFBK0MsRUFDL0MsV0FBK0I7UUFFL0IsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQ2QsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ3RELFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUN6RSxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFDckUsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQ3hGLENB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LENBQUMsVUFBVSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdGLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWVyZ2UsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1xuICAgIENvbGxlY3Rpb25Tb3J0LFxuICAgIFRhYmxlU3RhdGUsXG4gICAgR3JpZFNldHRpbmcsXG4gICAgTWV0YW9iamVjdERhdGFNb2RlbCxcbiAgICBSZXBvcnRWaWV3Q29sdW1uLFxuICAgIFNvcnREaXJlY3Rpb25cbn0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xuaW1wb3J0ICogYXMgQ29uc3RhbnRzIGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjbGFzcyBHcmlkTW9EYXRhTGlzdCB7XG4gICAgaXRlbXM6IE1ldGFvYmplY3REYXRhTW9kZWxbXTtcbiAgICByZXN1bHRJdGVtczogTWV0YW9iamVjdERhdGFNb2RlbFtdO1xuICAgIGdyaWRTZXR0aW5nOiBHcmlkU2V0dGluZztcbiAgICB2aXNpYmxlQ29sdW1uczogUmVwb3J0Vmlld0NvbHVtbltdO1xuICAgIHNlYXJjaFRlcm06IHN0cmluZztcbiAgICBkYXRhJDogT2JzZXJ2YWJsZTxNZXRhb2JqZWN0RGF0YU1vZGVsW10+O1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBtb0RhdGFMaXN0JDogT2JzZXJ2YWJsZTxNZXRhb2JqZWN0RGF0YU1vZGVsW10+LFxuICAgICAgICBncmlkU2V0dGluZyQ6IE9ic2VydmFibGU8R3JpZFNldHRpbmc+LFxuICAgICAgICB2aXNpYmxlQ29sdW1ucyQ6IE9ic2VydmFibGU8UmVwb3J0Vmlld0NvbHVtbltdPixcbiAgICAgICAgc2VhcmNoVGVybSQ6IE9ic2VydmFibGU8c3RyaW5nPlxuICAgICkge1xuICAgICAgICB0aGlzLmRhdGEkID0gbWVyZ2UoXG4gICAgICAgICAgICBtb0RhdGFMaXN0JC5waXBlKHRhcCgoaXRlbXMpID0+ICh0aGlzLml0ZW1zID0gaXRlbXMpKSksXG4gICAgICAgICAgICBncmlkU2V0dGluZyQucGlwZSh0YXAoKGdyaWRTZXR0aW5nKSA9PiAodGhpcy5ncmlkU2V0dGluZyA9IGdyaWRTZXR0aW5nKSkpLFxuICAgICAgICAgICAgc2VhcmNoVGVybSQucGlwZSh0YXAoKHNlYXJjaFRlcm0pID0+ICh0aGlzLnNlYXJjaFRlcm0gPSBzZWFyY2hUZXJtKSkpLFxuICAgICAgICAgICAgdmlzaWJsZUNvbHVtbnMkLnBpcGUodGFwKCh2aXNpYmxlQ29sdW1ucykgPT4gKHRoaXMudmlzaWJsZUNvbHVtbnMgPSB2aXNpYmxlQ29sdW1ucykpKVxuICAgICAgICApLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoKCkgPT4gISF0aGlzLml0ZW1zKSxcbiAgICAgICAgICAgIG1hcCgoKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoVGVybVxuICAgICAgICAgICAgICAgICAgICA/IHNlYXJjaEV4KFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFRlcm0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlzaWJsZUNvbHVtbnMubWFwKChjKSA9PiBjLk5hbWUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuaXRlbXNcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBtYXAoKCkgPT4gKHRoaXMuZ3JpZFNldHRpbmc/LlNvcnRTZXR0aW5nTGlzdCA/IHNvcnRFeCh0aGlzLmdldFNvcnRieSgpLCB0aGlzLml0ZW1zKSA6IHRoaXMuaXRlbXMpKSxcbiAgICAgICAgICAgIC8vIG1hcCgoaXRlbXMpID0+IHtcbiAgICAgICAgICAgIC8vICAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiAoaXRlbS4kVmlzaWJpbGl0eSA9IHRydWUpKTtcbiAgICAgICAgICAgIC8vICAgICByZXR1cm4gaXRlbXM7XG4gICAgICAgICAgICAvLyB9KSxcbiAgICAgICAgICAgIHRhcCgoaXRlbXMpID0+ICh0aGlzLnJlc3VsdEl0ZW1zID0gaXRlbXMpKVxuICAgICAgICAgICAgLy8gdGFwKChpdGVtcykgPT4gY29uc29sZS5sb2coaXRlbXMpKVxuICAgICAgICApO1xuICAgIH1cbiAgICBnZXRTb3J0YnkoKTogQ29sbGVjdGlvblNvcnRbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWRTZXR0aW5nLlNvcnRTZXR0aW5nTGlzdC5tYXAoKGMpID0+ICh7XG4gICAgICAgICAgICBmaWVsZDogYy5OYW1lLFxuICAgICAgICAgICAgZGlyZWN0aW9uOiB0aGlzLmdldFNvcnREaXJlY3Rpb24oYy5Tb3J0RGlyZWN0aW9uKSxcbiAgICAgICAgICAgIGlzTnVtYmVyOiB0aGlzLnZpc2libGVDb2x1bW5zPy5maW5kKChkKSA9PiBkLk5hbWUgPT09IGMuTmFtZSk/LkZpZWxkVHlwZSA9PT0gJ9i52K/YrydcbiAgICAgICAgfSkpLmNvbmNhdCh7IGZpZWxkOiAnJE5ld0lubGluZU1vJywgZGlyZWN0aW9uOiBTb3J0RGlyZWN0aW9uLkRFU0MsIGlzTnVtYmVyOiBmYWxzZSB9KTtcbiAgICB9XG4gICAgZ2V0U29ydERpcmVjdGlvbihkaXJlY3Rpb24pOiBTb3J0RGlyZWN0aW9uIHtcbiAgICAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIGNhc2UgJ0FTQyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFNvcnREaXJlY3Rpb24uQVNDO1xuICAgICAgICAgICAgY2FzZSAnREVTQyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFNvcnREaXJlY3Rpb24uREVTQztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU29ydERpcmVjdGlvbi5OT05FO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdyaWREYXRhUHJvdmlkZXIge1xuICAgIGl0ZW1zOiBNZXRhb2JqZWN0RGF0YU1vZGVsW10gPSBbXTtcbiAgICBtb0RhdGFMaXN0JDogT2JzZXJ2YWJsZTxNZXRhb2JqZWN0RGF0YU1vZGVsW10+O1xuICAgIHRvdGFsSXRlbXMgPSAwO1xuICAgIGxhc3RTdGF0ZTogVGFibGVTdGF0ZTtcbiAgICBjb25zdHJ1Y3Rvcihtb0RhdGFMaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10pIHtcbiAgICAgICAgdGhpcy5pdGVtcyA9IG1vRGF0YUxpc3Q7XG4gICAgfVxuICAgIGZldGNoKHRhYmxlU3RhdGU6IFRhYmxlU3RhdGUpOiBPYnNlcnZhYmxlPE1ldGFvYmplY3REYXRhTW9kZWxbXT4ge1xuICAgICAgICB0aGlzLmxhc3RTdGF0ZSA9IHRhYmxlU3RhdGU7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE1vRGF0YUxpc3QodGFibGVTdGF0ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgZ2V0TW9EYXRhTGlzdCh0YWJsZVN0YXRlOiBUYWJsZVN0YXRlKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xuICAgICAgICB0aGlzLnRvdGFsSXRlbXMgPSB0aGlzLml0ZW1zLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIG9mKHRoaXMuaXRlbXMpLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGl0ZW1zKSA9PiAodGFibGVTdGF0ZS5zZWFyY2hJbnB1dCA/IHNlYXJjaCh0YWJsZVN0YXRlLCBpdGVtcykgOiBpdGVtcykpLFxuICAgICAgICAgICAgbWFwKChpdGVtcykgPT4gKHRhYmxlU3RhdGUuc29ydEJ5ID8gc29ydCh0YWJsZVN0YXRlLCBpdGVtcykgOiBpdGVtcykpXG4gICAgICAgICk7XG4gICAgfVxufVxuY29uc3Qgc29ydCA9ICh7IHNvcnRCeSB9OiBUYWJsZVN0YXRlLCBtb0RhdGFMaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10pOiBNZXRhb2JqZWN0RGF0YU1vZGVsW10gPT5cbiAgICBzb3J0RXgoc29ydEJ5LCBtb0RhdGFMaXN0KTtcblxuY29uc3Qgc29ydEV4ID0gKFxuICAgIHNvcnRCeTogeyBmaWVsZDogc3RyaW5nIHwgbnVsbDsgZGlyZWN0aW9uOiBzdHJpbmc7IGlzTnVtYmVyPzogYm9vbGVhbiB9W10sXG4gICAgbW9EYXRhTGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdXG4pOiBNZXRhb2JqZWN0RGF0YU1vZGVsW10gPT4ge1xuICAgIGNvbnN0IGl0ZW1zID0gbW9EYXRhTGlzdC5zbGljZSgpO1xuXG4gICAgY29uc3QgbmV3U29ydEJ5ID0gc29ydEJ5LmZpbHRlcigoeyBmaWVsZCB9KSA9PiAhIWZpZWxkKTtcblxuICAgIGlmIChuZXdTb3J0QnkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG5cbiAgICByZXR1cm4gaXRlbXMuc29ydChcbiAgICAgICAgKGEsIGIpID0+XG4gICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgICAgICAgICAgbmV3U29ydEJ5XG4gICAgICAgICAgICAgICAgLm1hcCgoeyBmaWVsZCwgZGlyZWN0aW9uLCBpc051bWJlciB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFzY01vZGlmaWVyID0gZGlyZWN0aW9uID09PSBTb3J0RGlyZWN0aW9uLkFTQyA/IDEgOiAtMTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvbnN0YW50cy5zb3J0KGEsIGIsIGZpZWxkLCBpc051bWJlcikgKiBhc2NNb2RpZmllcjtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5maW5kKChyZXN1bHQsIGluZGV4LCBsaXN0KSA9PiByZXN1bHQgIT09IDAgfHwgaW5kZXggPT09IGxpc3QubGVuZ3RoIC0gMSkhXG4gICAgKTtcbn07XG5jb25zdCBzZWFyY2ggPSAoeyBzZWFyY2hJbnB1dCwgY29sdW1ucyB9OiBUYWJsZVN0YXRlLCBpdGVtczogTWV0YW9iamVjdERhdGFNb2RlbFtdKTogTWV0YW9iamVjdERhdGFNb2RlbFtdID0+IHtcbiAgICByZXR1cm4gc2VhcmNoRXgoc2VhcmNoSW5wdXQ/LnRleHQsIGNvbHVtbnMsIGl0ZW1zKTtcbn07XG5jb25zdCBzZWFyY2hFeCA9IChzZWFyY2hUZXJtLCBjb2x1bW5zOiBzdHJpbmdbXSwgaXRlbXM6IE1ldGFvYmplY3REYXRhTW9kZWxbXSk6IE1ldGFvYmplY3REYXRhTW9kZWxbXSA9PiB7XG4gICAgY29uc3Qgc2VhcmNoVGV4dCA9IHNlYXJjaFRlcm0gfHwgJyc7XG4gICAgY29uc3Qga2V5c1RvU2VhcmNoQnkgPSBjb2x1bW5zO1xuXG4gICAgaWYgKHNlYXJjaFRleHQudHJpbSgpID09PSAnJyB8fCBrZXlzVG9TZWFyY2hCeS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXMuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlc0ZvclNlYXJjaCA9IGtleXNUb1NlYXJjaEJ5Lm1hcCgoa2V5KSA9PiBDb25zdGFudHMuZ2V0TmVzdGVkVmFsdWUoa2V5LCBpdGVtKSk7XG4gICAgICAgIHJldHVybiB2YWx1ZXNGb3JTZWFyY2hcbiAgICAgICAgICAgIC5maWx0ZXIoKHZhbHVlKSA9PiAhIXZhbHVlKVxuICAgICAgICAgICAgLm1hcCgodmFsdWUpOiBzdHJpbmcgPT4gdmFsdWUudG9TdHJpbmcoKSlcbiAgICAgICAgICAgIC5zb21lKCh2YWx1ZSkgPT4gdmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hUZXh0LnRvTG9jYWxlTG93ZXJDYXNlKCkpKTtcbiAgICB9KTtcbn07XG4iXX0=
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1kYXRhLXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvbW9kZWxzL2dyaWQtZGF0YS1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVsRCxPQUFPLEVBTUgsYUFBYSxFQUNoQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sS0FBSyxTQUFTLE1BQU0sY0FBYyxDQUFDO0FBRTFDLE1BQU0sT0FBTyxjQUFjO0lBT3ZCLFlBQ0ksV0FBOEMsRUFDOUMsWUFBcUMsRUFDckMsZUFBK0MsRUFDL0MsV0FBK0I7UUFFL0IsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQ2QsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ3RELFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUN6RSxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFDckUsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQ3hGLENB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QztRQUN6RixPQUFPLGVBQWU7YUFDakIsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2FBQzFCLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBVSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQ3hDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM3RixDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1lcmdlLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgICBDb2xsZWN0aW9uU29ydCxcbiAgICBUYWJsZVN0YXRlLFxuICAgIEdyaWRTZXR0aW5nLFxuICAgIE1ldGFvYmplY3REYXRhTW9kZWwsXG4gICAgUmVwb3J0Vmlld0NvbHVtbixcbiAgICBTb3J0RGlyZWN0aW9uXG59IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcbmltcG9ydCAqIGFzIENvbnN0YW50cyBmcm9tICcuLi9jb25zdGFudHMnO1xuXG5leHBvcnQgY2xhc3MgR3JpZE1vRGF0YUxpc3Qge1xuICAgIGl0ZW1zOiBNZXRhb2JqZWN0RGF0YU1vZGVsW107XG4gICAgcmVzdWx0SXRlbXM6IE1ldGFvYmplY3REYXRhTW9kZWxbXTtcbiAgICBncmlkU2V0dGluZzogR3JpZFNldHRpbmc7XG4gICAgdmlzaWJsZUNvbHVtbnM6IFJlcG9ydFZpZXdDb2x1bW5bXTtcbiAgICBzZWFyY2hUZXJtOiBzdHJpbmc7XG4gICAgZGF0YSQ6IE9ic2VydmFibGU8TWV0YW9iamVjdERhdGFNb2RlbFtdPjtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgbW9EYXRhTGlzdCQ6IE9ic2VydmFibGU8TWV0YW9iamVjdERhdGFNb2RlbFtdPixcbiAgICAgICAgZ3JpZFNldHRpbmckOiBPYnNlcnZhYmxlPEdyaWRTZXR0aW5nPixcbiAgICAgICAgdmlzaWJsZUNvbHVtbnMkOiBPYnNlcnZhYmxlPFJlcG9ydFZpZXdDb2x1bW5bXT4sXG4gICAgICAgIHNlYXJjaFRlcm0kOiBPYnNlcnZhYmxlPHN0cmluZz5cbiAgICApIHtcbiAgICAgICAgdGhpcy5kYXRhJCA9IG1lcmdlKFxuICAgICAgICAgICAgbW9EYXRhTGlzdCQucGlwZSh0YXAoKGl0ZW1zKSA9PiAodGhpcy5pdGVtcyA9IGl0ZW1zKSkpLFxuICAgICAgICAgICAgZ3JpZFNldHRpbmckLnBpcGUodGFwKChncmlkU2V0dGluZykgPT4gKHRoaXMuZ3JpZFNldHRpbmcgPSBncmlkU2V0dGluZykpKSxcbiAgICAgICAgICAgIHNlYXJjaFRlcm0kLnBpcGUodGFwKChzZWFyY2hUZXJtKSA9PiAodGhpcy5zZWFyY2hUZXJtID0gc2VhcmNoVGVybSkpKSxcbiAgICAgICAgICAgIHZpc2libGVDb2x1bW5zJC5waXBlKHRhcCgodmlzaWJsZUNvbHVtbnMpID0+ICh0aGlzLnZpc2libGVDb2x1bW5zID0gdmlzaWJsZUNvbHVtbnMpKSlcbiAgICAgICAgKS5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKCgpID0+ICEhdGhpcy5pdGVtcyksXG4gICAgICAgICAgICBtYXAoKCkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFRlcm1cbiAgICAgICAgICAgICAgICAgICAgPyBzZWFyY2hFeChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hUZXJtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpc2libGVDb2x1bW5zLm1hcCgoYykgPT4gYy5OYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtc1xuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLml0ZW1zXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgbWFwKCgpID0+XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkU2V0dGluZz8uU29ydFNldHRpbmdMaXN0XG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5pdGVtcy5zbGljZSgpLnNvcnQobXVsdGlsZXZlbFNvcnQodGhpcy5nZXRTb3J0YnkoKSkpXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5pdGVtc1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIC8vIG1hcCgoaXRlbXMpID0+IHtcbiAgICAgICAgICAgIC8vICAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiAoaXRlbS4kVmlzaWJpbGl0eSA9IHRydWUpKTtcbiAgICAgICAgICAgIC8vICAgICByZXR1cm4gaXRlbXM7XG4gICAgICAgICAgICAvLyB9KSxcbiAgICAgICAgICAgIHRhcCgoaXRlbXMpID0+ICh0aGlzLnJlc3VsdEl0ZW1zID0gaXRlbXMpKVxuICAgICAgICAgICAgLy8gdGFwKChpdGVtcykgPT4gY29uc29sZS5sb2coaXRlbXMpKVxuICAgICAgICApO1xuICAgIH1cbiAgICBnZXRTb3J0YnkoKTogQ29sbGVjdGlvblNvcnRbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWRTZXR0aW5nLlNvcnRTZXR0aW5nTGlzdC5tYXAoKGMpID0+ICh7XG4gICAgICAgICAgICBmaWVsZDogYy5OYW1lLFxuICAgICAgICAgICAgZGlyZWN0aW9uOiB0aGlzLmdldFNvcnREaXJlY3Rpb24oYy5Tb3J0RGlyZWN0aW9uKSxcbiAgICAgICAgICAgIGlzTnVtYmVyOiB0aGlzLnZpc2libGVDb2x1bW5zPy5maW5kKChkKSA9PiBkLk5hbWUgPT09IGMuTmFtZSk/LkZpZWxkVHlwZSA9PT0gJ9i52K/YrydcbiAgICAgICAgfSkpLmNvbmNhdCh7IGZpZWxkOiAnJE5ld0lubGluZU1vJywgZGlyZWN0aW9uOiBTb3J0RGlyZWN0aW9uLkRFU0MsIGlzTnVtYmVyOiBmYWxzZSB9KTtcbiAgICB9XG4gICAgZ2V0U29ydERpcmVjdGlvbihkaXJlY3Rpb24pOiBTb3J0RGlyZWN0aW9uIHtcbiAgICAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIGNhc2UgJ0FTQyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFNvcnREaXJlY3Rpb24uQVNDO1xuICAgICAgICAgICAgY2FzZSAnREVTQyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFNvcnREaXJlY3Rpb24uREVTQztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU29ydERpcmVjdGlvbi5OT05FO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdyaWREYXRhUHJvdmlkZXIge1xuICAgIGl0ZW1zOiBNZXRhb2JqZWN0RGF0YU1vZGVsW10gPSBbXTtcbiAgICBtb0RhdGFMaXN0JDogT2JzZXJ2YWJsZTxNZXRhb2JqZWN0RGF0YU1vZGVsW10+O1xuICAgIHRvdGFsSXRlbXMgPSAwO1xuICAgIGxhc3RTdGF0ZTogVGFibGVTdGF0ZTtcbiAgICBjb25zdHJ1Y3Rvcihtb0RhdGFMaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10pIHtcbiAgICAgICAgdGhpcy5pdGVtcyA9IG1vRGF0YUxpc3Q7XG4gICAgfVxuICAgIGZldGNoKHRhYmxlU3RhdGU6IFRhYmxlU3RhdGUpOiBPYnNlcnZhYmxlPE1ldGFvYmplY3REYXRhTW9kZWxbXT4ge1xuICAgICAgICB0aGlzLmxhc3RTdGF0ZSA9IHRhYmxlU3RhdGU7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE1vRGF0YUxpc3QodGFibGVTdGF0ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgZ2V0TW9EYXRhTGlzdCh0YWJsZVN0YXRlOiBUYWJsZVN0YXRlKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xuICAgICAgICB0aGlzLnRvdGFsSXRlbXMgPSB0aGlzLml0ZW1zLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIG9mKHRoaXMuaXRlbXMpLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGl0ZW1zKSA9PiAodGFibGVTdGF0ZS5zZWFyY2hJbnB1dCA/IHNlYXJjaCh0YWJsZVN0YXRlLCBpdGVtcykgOiBpdGVtcykpLFxuICAgICAgICAgICAgbWFwKChpdGVtcykgPT4gKHRhYmxlU3RhdGUuc29ydEJ5ID8gc29ydCh0YWJsZVN0YXRlLCBpdGVtcykgOiBpdGVtcykpXG4gICAgICAgICk7XG4gICAgfVxufVxuY29uc3Qgc29ydCA9ICh7IHNvcnRCeSB9OiBUYWJsZVN0YXRlLCBtb0RhdGFMaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10pOiBNZXRhb2JqZWN0RGF0YU1vZGVsW10gPT5cbiAgICBzb3J0RXgoc29ydEJ5LCBtb0RhdGFMaXN0KTtcblxuY29uc3Qgc29ydEV4ID0gKFxuICAgIHNvcnRCeTogeyBmaWVsZDogc3RyaW5nIHwgbnVsbDsgZGlyZWN0aW9uOiBzdHJpbmc7IGlzTnVtYmVyPzogYm9vbGVhbiB9W10sXG4gICAgbW9EYXRhTGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdXG4pOiBNZXRhb2JqZWN0RGF0YU1vZGVsW10gPT4ge1xuICAgIGNvbnN0IGl0ZW1zID0gbW9EYXRhTGlzdC5zbGljZSgpO1xuXG4gICAgY29uc3QgbmV3U29ydEJ5ID0gc29ydEJ5LmZpbHRlcigoeyBmaWVsZCB9KSA9PiAhIWZpZWxkKTtcblxuICAgIGlmIChuZXdTb3J0QnkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG5cbiAgICByZXR1cm4gaXRlbXMuc29ydChcbiAgICAgICAgKGEsIGIpID0+XG4gICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgICAgICAgICAgbmV3U29ydEJ5XG4gICAgICAgICAgICAgICAgLm1hcCgoeyBmaWVsZCwgZGlyZWN0aW9uLCBpc051bWJlciB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFzY01vZGlmaWVyID0gZGlyZWN0aW9uID09PSBTb3J0RGlyZWN0aW9uLkFTQyA/IDEgOiAtMTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvbnN0YW50cy5zb3J0KGEsIGIsIGZpZWxkLCBpc051bWJlcikgKiBhc2NNb2RpZmllcjtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5maW5kKChyZXN1bHQsIGluZGV4LCBsaXN0KSA9PiByZXN1bHQgIT09IDAgfHwgaW5kZXggPT09IGxpc3QubGVuZ3RoIC0gMSkhXG4gICAgKTtcbn07XG5mdW5jdGlvbiBjb21iaW5lQ29tcGFyaXNvbkZ1bmN0aW9ucyhjb21wYXJlRnVuY3Rpb25zKSB7XG4gICAgcmV0dXJuIChhLCBiKSA9PiB7XG4gICAgICAgIHJldHVybiBjb21wYXJlRnVuY3Rpb25zLnJlZHVjZSgocmVzdWx0LCBjb21wYXJlRnVuY3Rpb24pID0+IHtcbiAgICAgICAgICAgIC8vIFByb2NlZWRzIHRvIHRoZSBuZXh0IGNvbXBhcmlzb24gZnVuY3Rpb24gaWYgdGhlIHByZXZpb3VzIG9uZSByZXR1cm5lZCAwXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnYmVmb3JlICcsIHJlc3VsdCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnbmV4dCBhICxiICcsIGEsIGIpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCB8fCBjb21wYXJlRnVuY3Rpb24oYSwgYik7XG4gICAgICAgIH0sIDApO1xuICAgIH07XG59XG5mdW5jdGlvbiBtdWx0aWxldmVsU29ydChjcml0ZXJpYTogQ29sbGVjdGlvblNvcnRbXSkge1xuICAgIGNvbnN0IGNvbXBhcmVGdW5jdGlvbnMgPSBjcml0ZXJpYS5tYXAoKHgpID0+IHtcbiAgICAgICAgY29uc3QgeyBmaWVsZCwgZGlyZWN0aW9uLCBpc051bWJlciB9ID0geDtcblxuICAgICAgICByZXR1cm4gKGEsIGIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFWYWx1ZSA9IGFbZmllbGQgfHwgJyRfeF8nXTsgLy8gb3B0aW9uYWxseSB0cmFuc2Zvcm0gdGhlIHByb3BlcnR5IHZhbHVlXG4gICAgICAgICAgICBjb25zdCBiVmFsdWUgPSBiW2ZpZWxkIHx8ICckX3hfJ107IC8vIHdlIHVzZSBhbiBpZGVudGl0eSBmdW5jdGlvbiBhcyBkZWZhdWx0XG4gICAgICAgICAgICBjb25zdCBhc2NNb2RpZmllciA9IGRpcmVjdGlvbiA9PT0gU29ydERpcmVjdGlvbi5BU0MgPyAxIDogLTE7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBDb25zdGFudHMuc29ydChhVmFsdWUsIGJWYWx1ZSwgZmllbGQsIGlzTnVtYmVyKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdzb3J0IHJlcz0nLCByZXMgKiBhc2NNb2RpZmllciwgJ29uIGZpZWxkJywgZmllbGQsIGFWYWx1ZSwgYlZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiByZXMgKiBhc2NNb2RpZmllcjtcbiAgICAgICAgfTtcbiAgICB9KTtcblxuICAgIHJldHVybiBjb21iaW5lQ29tcGFyaXNvbkZ1bmN0aW9ucyhjb21wYXJlRnVuY3Rpb25zKTtcbn1cblxuY29uc3Qgc2VhcmNoID0gKHsgc2VhcmNoSW5wdXQsIGNvbHVtbnMgfTogVGFibGVTdGF0ZSwgaXRlbXM6IE1ldGFvYmplY3REYXRhTW9kZWxbXSk6IE1ldGFvYmplY3REYXRhTW9kZWxbXSA9PiB7XG4gICAgcmV0dXJuIHNlYXJjaEV4KHNlYXJjaElucHV0Py50ZXh0LCBjb2x1bW5zLCBpdGVtcyk7XG59O1xuY29uc3Qgc2VhcmNoRXggPSAoc2VhcmNoVGVybSwgY29sdW1uczogc3RyaW5nW10sIGl0ZW1zOiBNZXRhb2JqZWN0RGF0YU1vZGVsW10pOiBNZXRhb2JqZWN0RGF0YU1vZGVsW10gPT4ge1xuICAgIGNvbnN0IHNlYXJjaFRleHQgPSBzZWFyY2hUZXJtIHx8ICcnO1xuICAgIGNvbnN0IGtleXNUb1NlYXJjaEJ5ID0gY29sdW1ucztcblxuICAgIGlmIChzZWFyY2hUZXh0LnRyaW0oKSA9PT0gJycgfHwga2V5c1RvU2VhcmNoQnkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1zLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZXNGb3JTZWFyY2ggPSBrZXlzVG9TZWFyY2hCeS5tYXAoKGtleSkgPT4gQ29uc3RhbnRzLmdldE5lc3RlZFZhbHVlKGtleSwgaXRlbSkpO1xuICAgICAgICByZXR1cm4gdmFsdWVzRm9yU2VhcmNoXG4gICAgICAgICAgICAuZmlsdGVyKCh2YWx1ZSkgPT4gISF2YWx1ZSlcbiAgICAgICAgICAgIC5tYXAoKHZhbHVlKTogc3RyaW5nID0+IHZhbHVlLnRvU3RyaW5nKCkpXG4gICAgICAgICAgICAuc29tZSgodmFsdWUpID0+IHZhbHVlLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGV4dC50b0xvY2FsZUxvd2VyQ2FzZSgpKSk7XG4gICAgfSk7XG59O1xuIl19