barsa-sap-ui 2.0.128 → 2.0.129
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/barsa-table-column/barsa-table-column.component.mjs +3 -3
- package/esm2022/lib/barsa-table-row/barsa-table-row.component.mjs +3 -3
- package/esm2022/lib/card-item/card-item.component.mjs +3 -3
- package/esm2022/lib/column-renderer/column-renderer.component.mjs +9 -6
- package/esm2022/lib/list-item/list-item.component.mjs +1 -1
- package/esm2022/lib/ui-table-view/ui-table-view.component.mjs +6 -5
- package/fesm2022/barsa-sap-ui.mjs +34 -31
- package/fesm2022/barsa-sap-ui.mjs.map +1 -1
- package/lib/barsa-sap-ui.module.d.ts +1 -1
- package/lib/column-renderer/column-renderer.component.d.ts +2 -1
- package/lib/index.d.ts +1 -11
- package/lib/ui-table-view/ui-table-view.component.d.ts +1 -0
- package/package.json +1 -1
|
@@ -21,7 +21,7 @@ export class ListItemComponent extends BaseViewItemPropsComponent {
|
|
|
21
21
|
PreventDefaulEvent(e);
|
|
22
22
|
}
|
|
23
23
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: ListItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
24
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: ListItemComponent, selector: "bsu-list-item", inputs: { setting: "setting", isDisplayType: "isDisplayType" }, usesInheritance: true, ngImport: i0, template: "<ng-container\n *ngTemplateOutlet=\"isDisplayType ? displayTemplate : standardTemplate; context: { $implicit: mo }\"\n></ng-container>\n<ng-template #standardTemplate let-mo>\n <li\n fd-list-item\n class=\"standard-list-row\"\n [ngClass]=\"deviceSize\"\n [style.padding-right]=\"'calc( 1rem + ' + mo.level * 12 + 'px' + ' )'\"\n [class.selected]=\"isChecked === true\"\n [selected]=\"isChecked === true\"\n (dblclick)=\"onRowClick()\"\n (click)=\"onRowCheck()\"\n >\n <a\n fd-list-link\n [attr.rtl]=\"rtl\"\n class=\"li-link\"\n [class.checklist]=\"isCheckList\"\n #aEl\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [hostEl]=\"aEl\"\n >\n @if (isCheckList) {\n <fd-checkbox [name]=\"mo.$Caption\" [ngModel]=\"isChecked\" (change)=\"onRowCheck2($event)\"></fd-checkbox>\n } @if (setting.IconFont || setting.AvatarField) {\n <span fd-list-thumbnail>\n <fd-avatar\n alterIcon=\"alt|content|backup|default-icon\"\n [style.color]=\"setting.IconColor ? setting.IconColor : null\"\n [circle]=\"true\"\n [image]=\"\n setting.AvatarField\n ? (mo[setting.AvatarField.Name]?.FileId | picFieldSrc: 'ID':setting.AvatarField.FieldDefId)\n : ''\n \"\n [size]=\"avatarSize\"\n [transparent]=\"true\"\n [glyph]=\"\n setting.IconFont ??\n (mo.$State === 'New' && !isChecked ? 'favorite' : inlineEditMode && isChecked ? 'edit' : '')\n \"\n >\n </fd-avatar>\n </span>\n }\n <div fd-list-content>\n <div fd-list-byline [twoCol]=\"true\">\n <div fd-list-title>\n <ng-container\n *ngTemplateOutlet=\"\n renderColumn;\n context: {\n $implicit: setting.TitleField,\n layout94: layout$ | async,\n mo: mo,\n conditionalFormats: conditionalFormats,\n index: 0\n }\n \"\n ></ng-container>\n </div>\n <div fd-list-byline [style.padding-left]=\"canView && deviceName === 'desktop' ? '.9rem' : '0'\">\n <ng-container\n *ngTemplateOutlet=\"\n renderColumn;\n context: {\n $implicit: setting.StatusField,\n layout94: layout$ | async,\n mo: mo,\n conditionalFormats: conditionalFormats\n }\n \"\n ></ng-container>\n </div>\n </div>\n <div fd-list-byline>\n <ng-container\n *ngTemplateOutlet=\"\n renderColumn;\n context: {\n $implicit: setting.SubtitleField,\n layout94: layout$ | async,\n mo: mo,\n conditionalFormats: conditionalFormats\n }\n \"\n ></ng-container>\n </div>\n </div>\n @if (contextMenuItems.length) {\n <bsu-ulv-context-menu\n [menuItems]=\"contextMenuItems\"\n [conditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\n [mo]=\"mo\"\n (commandClick)=\"onUlvCommand()\"\n ></bsu-ulv-context-menu>\n } @if (canView && !hideOpenIcon) {\n <button (click)=\"onRowClick()\" fdType=\"transparent\" [glyph]=\"navigationArrow\" fd-button></button>\n }\n </a>\n </li>\n</ng-template>\n<ng-template #displayTemplate let-mo>\n @if (!mo.parent || mo.parent?.expanded) {\n <li\n class=\"display\"\n [ngClass]=\"deviceSize\"\n fd-list-item\n [interactive]=\"false\"\n (dblclick)=\"onRowClick()\"\n (click)=\"onRowCheck()\"\n [style.padding-right]=\"'calc( 1rem + ' + mo.level * 12 + 'px' + ' )'\"\n >\n <a\n fd-list-link\n [attr.rtl]=\"rtl\"\n class=\"li-link\"\n style=\"cursor: default\"\n [class.checklist]=\"isCheckList\"\n #aEl\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [hostEl]=\"aEl\"\n style=\"column-gap: 3px\"\n >\n @if (setting.AvatarField) {\n <img\n [src]=\"mo[setting.AvatarField.Name]?.FileId | picFieldSrc: 'ID':setting.AvatarField.FieldDefId\"\n style=\"width: 24px; height: 24px\"\n />\n } @if (setting.IconFont) {\n <i fd-list-icon [glyph]=\"setting.IconFont\" [style.color]=\"setting.IconColor ? setting.IconColor : null\">\n </i>\n } @if (!setting.IconFont && mo.$State === 'New' && !isChecked) {\n <i fd-list-icon glyph=\"favorite\"></i>\n } @if (!setting.IconFont && inlineEditMode && isChecked) {\n <i fd-list-icon glyph=\"edit\"></i>\n } @if (isCheckList) {\n <fd-checkbox [name]=\"mo.$Caption\" [ngModel]=\"isChecked\" (change)=\"onRowCheck2($event)\"></fd-checkbox>\n }\n <span fd-list-title>\n <ng-container\n *ngTemplateOutlet=\"\n renderColumn;\n context: {\n $implicit: setting.TitleField,\n conditionalFormats: conditionalFormats,\n layout94: layout$ | async,\n mo: mo,\n index: 0\n }\n \"\n ></ng-container>\n </span>\n <span fd-list-secondary [dir]=\"rtl ? 'ltr' : 'rtl'\" [class.flex1]=\"contextMenuItems.length === 0\">\n <ng-container\n *ngTemplateOutlet=\"\n renderColumn;\n context: {\n $implicit: setting.CounterField,\n conditionalFormats: conditionalFormats,\n layout94: layout$ | async,\n mo: mo,\n index: index\n }\n \"\n ></ng-container>\n @if (canView && !hideOpenIcon) {\n <button fd-button (click)=\"onRowClick()\" [glyph]=\"navigationArrow\" fdType=\"transparent\"></button>\n } @if (contextMenuItems.length) {\n <bsu-ulv-context-menu\n [menuItems]=\"contextMenuItems\"\n [conditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\n [mo]=\"mo\"\n (commandClick)=\"onUlvCommand()\"\n ></bsu-ulv-context-menu>\n }\n </span>\n </a>\n </li>\n }\n</ng-template>\n<ng-template\n #renderColumn\n let-column\n let-mo=\"mo\"\n let-conditionalFormats=\"conditionalFormats\"\n let-index=\"index\"\n let-layout94=\"layout94\"\n>\n @if (column) {\n <div\n #divEl\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [hostEl]=\"divEl\"\n [dbName]=\"column.Name\"\n >\n <bsu-column-renderer\n [mo]=\"mo\"\n [column]=\"column\"\n [disableEllapsis]=\"true\"\n [value]=\"column | columnValue: mo | bbbTranslate\"\n [icon]=\"column | columnIcon: mo\"\n [editMode]=\"inlineEditMode && allowInlineEdit\"\n [rtl]=\"rtl\"\n [deviceName]=\"deviceName\"\n [deviceSize]=\"deviceSize\"\n [index]=\"index\"\n [controlUi]=\"column.Caption | controlUi: layout94:column.Name\"\n (keyup.control.enter)=\"onEditFormPanelSave($event)\"\n (keyup.esc)=\"onEditFormPanelCancel($event)\"\n (keydown.Tab)=\"onTabKeyDown($event, index)\"\n [formLayoutShowLabel]=\"true\"\n ></bsu-column-renderer>\n </div>\n }\n</ng-template>\n", styles: [":host li.s{height:auto}:host .flex1{flex:1;display:flex;justify-content:start;flex-direction:row-reverse}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { 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: "component", type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i5.CheckboxComponent, selector: "fd-checkbox", inputs: ["wrapLabel", "valignLabel", "ariaLabel", "role", "value", "ariaLabelledBy", "ariaDescribedBy", "title", "inputId", "state", "name", "label", "disabled", "tristate", "tristateSelectable", "labelClass", "required", "displayOnly", "values", "standalone"], outputs: ["focusChange"] }, { kind: "component", type: i6.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "noData", "action", "interactive", "growing", "counter", "unread", "byline", "ariaRole", "id"], outputs: ["keyDown"] }, { kind: "directive", type: i6.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "directive", type: i6.ListSecondaryDirective, selector: "[fd-list-secondary], [fdListSecondary]", inputs: ["type"] }, { kind: "directive", type: i6.ListIconDirective, selector: "[fdListIcon], [fd-list-icon]", inputs: ["glyph", "glyphFont", "class", "role", "ariaHidden"] }, { kind: "directive", type: i6.ListLinkDirective, selector: "[fd-list-link], [fdListLink]", inputs: ["navigationIndicator", "navigated", "focusable"] }, { kind: "directive", type: i6.ListBylineDirective, selector: "[fdListByline], [fd-list-byline]", inputs: ["twoCol", "wrap"] }, { kind: "directive", type: i6.ListContentDirective, selector: "[fdListContent], [fd-list-content]", inputs: ["twoCol"] }, { kind: "directive", type: i6.ListThumbnailDirective, selector: "[fdListThumbnail], [fd-list-thumbnail]" }, { kind: "directive", type: i7.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "component", type: i8.UlvContextMenuComponent, selector: "bsu-ulv-context-menu,[ulvContextMenu]", inputs: ["onlyOverflow", "rightClickEnable", "deviceName", "menuItems", "allColumns", "index", "mo", "styleIndex", "conditionalFormats", "disableOverflowContextMenu", "footerMode", "appendTo"], outputs: ["commandClick"] }, { kind: "component", type: i9.ColumnRendererComponent, selector: "bsu-column-renderer,[colRenderer]", inputs: ["column", "mo", "index", "editMode", "customRowHeight", "controlUi", "formLayoutShowLabel", "isChecked", "isNewInlineMo", "containerDom", "disableEllapsis", "rtl", "deviceName", "deviceSize", "value", "icon"] }, { kind: "directive", type: i10.ApplyConditionalFormatsDirective, selector: "[applyConditionalFormats]", inputs: ["applyConditionalFormats", "styleIndex", "hostEl", "dbName"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i11.PictureFieldSourcePipe, name: "picFieldSrc" }, { kind: "pipe", type: i11.BbbTranslatePipe, name: "bbbTranslate" }, { kind: "pipe", type: i11.ControlUiPipe, name: "controlUi" }, { kind: "pipe", type: i11.ColumnIconPipe, name: "columnIcon" }, { kind: "pipe", type: i11.ColumnValuePipe, name: "columnValue" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: ListItemComponent, selector: "bsu-list-item", inputs: { setting: "setting", isDisplayType: "isDisplayType" }, usesInheritance: true, ngImport: i0, template: "<ng-container\n *ngTemplateOutlet=\"isDisplayType ? displayTemplate : standardTemplate; context: { $implicit: mo }\"\n></ng-container>\n<ng-template #standardTemplate let-mo>\n <li\n fd-list-item\n class=\"standard-list-row\"\n [ngClass]=\"deviceSize\"\n [style.padding-right]=\"'calc( 1rem + ' + mo.level * 12 + 'px' + ' )'\"\n [class.selected]=\"isChecked === true\"\n [selected]=\"isChecked === true\"\n (dblclick)=\"onRowClick()\"\n (click)=\"onRowCheck()\"\n >\n <a\n fd-list-link\n [attr.rtl]=\"rtl\"\n class=\"li-link\"\n [class.checklist]=\"isCheckList\"\n #aEl\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [hostEl]=\"aEl\"\n >\n @if (isCheckList) {\n <fd-checkbox [name]=\"mo.$Caption\" [ngModel]=\"isChecked\" (change)=\"onRowCheck2($event)\"></fd-checkbox>\n } @if (setting.IconFont || setting.AvatarField) {\n <span fd-list-thumbnail>\n <fd-avatar\n alterIcon=\"alt|content|backup|default-icon\"\n [style.color]=\"setting.IconColor ? setting.IconColor : null\"\n [circle]=\"true\"\n [image]=\"\n setting.AvatarField\n ? (mo[setting.AvatarField.Name]?.FileId | picFieldSrc: 'ID':setting.AvatarField.FieldDefId)\n : ''\n \"\n [size]=\"avatarSize\"\n [transparent]=\"true\"\n [glyph]=\"\n setting.IconFont ??\n (mo.$State === 'New' && !isChecked ? 'favorite' : inlineEditMode && isChecked ? 'edit' : '')\n \"\n >\n </fd-avatar>\n </span>\n }\n <div fd-list-content>\n <div fd-list-byline [twoCol]=\"true\">\n <div fd-list-title>\n <ng-container\n *ngTemplateOutlet=\"\n renderColumn;\n context: {\n $implicit: setting.TitleField,\n layout94: layout$ | async,\n mo: mo,\n conditionalFormats: conditionalFormats,\n index: 0\n }\n \"\n ></ng-container>\n </div>\n <div fd-list-byline [style.padding-left]=\"canView && deviceName === 'desktop' ? '.9rem' : '0'\">\n <ng-container\n *ngTemplateOutlet=\"\n renderColumn;\n context: {\n $implicit: setting.StatusField,\n layout94: layout$ | async,\n mo: mo,\n conditionalFormats: conditionalFormats\n }\n \"\n ></ng-container>\n </div>\n </div>\n <div fd-list-byline>\n <ng-container\n *ngTemplateOutlet=\"\n renderColumn;\n context: {\n $implicit: setting.SubtitleField,\n layout94: layout$ | async,\n mo: mo,\n conditionalFormats: conditionalFormats\n }\n \"\n ></ng-container>\n </div>\n </div>\n @if (contextMenuItems.length) {\n <bsu-ulv-context-menu\n [menuItems]=\"contextMenuItems\"\n [conditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\n [mo]=\"mo\"\n (commandClick)=\"onUlvCommand()\"\n ></bsu-ulv-context-menu>\n } @if (canView && !hideOpenIcon) {\n <button (click)=\"onRowClick()\" fdType=\"transparent\" [glyph]=\"navigationArrow\" fd-button></button>\n }\n </a>\n </li>\n</ng-template>\n<ng-template #displayTemplate let-mo>\n @if (!mo.parent || mo.parent?.expanded) {\n <li\n class=\"display\"\n [ngClass]=\"deviceSize\"\n fd-list-item\n [interactive]=\"false\"\n (dblclick)=\"onRowClick()\"\n (click)=\"onRowCheck()\"\n [style.padding-right]=\"'calc( 1rem + ' + mo.level * 12 + 'px' + ' )'\"\n >\n <a\n fd-list-link\n [attr.rtl]=\"rtl\"\n class=\"li-link\"\n style=\"cursor: default\"\n [class.checklist]=\"isCheckList\"\n #aEl\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [hostEl]=\"aEl\"\n style=\"column-gap: 3px\"\n >\n @if (setting.AvatarField) {\n <img\n [src]=\"mo[setting.AvatarField.Name]?.FileId | picFieldSrc: 'ID':setting.AvatarField.FieldDefId\"\n style=\"width: 24px; height: 24px\"\n />\n } @if (setting.IconFont) {\n <i fd-list-icon [glyph]=\"setting.IconFont\" [style.color]=\"setting.IconColor ? setting.IconColor : null\">\n </i>\n } @if (!setting.IconFont && mo.$State === 'New' && !isChecked) {\n <i fd-list-icon glyph=\"favorite\"></i>\n } @if (!setting.IconFont && inlineEditMode && isChecked) {\n <i fd-list-icon glyph=\"edit\"></i>\n } @if (isCheckList) {\n <fd-checkbox [name]=\"mo.$Caption\" [ngModel]=\"isChecked\" (change)=\"onRowCheck2($event)\"></fd-checkbox>\n }\n <span fd-list-title>\n <ng-container\n *ngTemplateOutlet=\"\n renderColumn;\n context: {\n $implicit: setting.TitleField,\n conditionalFormats: conditionalFormats,\n layout94: layout$ | async,\n mo: mo,\n index: 0\n }\n \"\n ></ng-container>\n </span>\n <span fd-list-secondary [dir]=\"rtl ? 'ltr' : 'rtl'\" [class.flex1]=\"contextMenuItems.length === 0\">\n <ng-container\n *ngTemplateOutlet=\"\n renderColumn;\n context: {\n $implicit: setting.CounterField,\n conditionalFormats: conditionalFormats,\n layout94: layout$ | async,\n mo: mo,\n index: index\n }\n \"\n ></ng-container>\n @if (canView && !hideOpenIcon) {\n <button fd-button (click)=\"onRowClick()\" [glyph]=\"navigationArrow\" fdType=\"transparent\"></button>\n } @if (contextMenuItems.length) {\n <bsu-ulv-context-menu\n [menuItems]=\"contextMenuItems\"\n [conditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\n [mo]=\"mo\"\n (commandClick)=\"onUlvCommand()\"\n ></bsu-ulv-context-menu>\n }\n </span>\n </a>\n </li>\n }\n</ng-template>\n<ng-template\n #renderColumn\n let-column\n let-mo=\"mo\"\n let-conditionalFormats=\"conditionalFormats\"\n let-index=\"index\"\n let-layout94=\"layout94\"\n>\n @if (column) {\n <div\n #divEl\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [hostEl]=\"divEl\"\n [dbName]=\"column.Name\"\n >\n <bsu-column-renderer\n [mo]=\"mo\"\n [column]=\"column\"\n [disableEllapsis]=\"true\"\n [value]=\"column | columnValue: mo | bbbTranslate\"\n [icon]=\"column | columnIcon: mo\"\n [editMode]=\"inlineEditMode && allowInlineEdit\"\n [rtl]=\"rtl\"\n [deviceName]=\"deviceName\"\n [deviceSize]=\"deviceSize\"\n [index]=\"index\"\n [controlUi]=\"column.Caption | controlUi: layout94:column.Name\"\n (keyup.control.enter)=\"onEditFormPanelSave($event)\"\n (keyup.esc)=\"onEditFormPanelCancel($event)\"\n (keydown.Tab)=\"onTabKeyDown($event, index)\"\n [formLayoutShowLabel]=\"true\"\n ></bsu-column-renderer>\n </div>\n }\n</ng-template>\n", styles: [":host li.s{height:auto}:host .flex1{flex:1;display:flex;justify-content:start;flex-direction:row-reverse}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { 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: "component", type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i5.CheckboxComponent, selector: "fd-checkbox", inputs: ["wrapLabel", "valignLabel", "ariaLabel", "role", "value", "ariaLabelledBy", "ariaDescribedBy", "title", "inputId", "state", "name", "label", "disabled", "tristate", "tristateSelectable", "labelClass", "required", "displayOnly", "values", "standalone"], outputs: ["focusChange"] }, { kind: "component", type: i6.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "noData", "action", "interactive", "growing", "counter", "unread", "byline", "ariaRole", "id"], outputs: ["keyDown"] }, { kind: "directive", type: i6.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "directive", type: i6.ListSecondaryDirective, selector: "[fd-list-secondary], [fdListSecondary]", inputs: ["type"] }, { kind: "directive", type: i6.ListIconDirective, selector: "[fdListIcon], [fd-list-icon]", inputs: ["glyph", "glyphFont", "class", "role", "ariaHidden"] }, { kind: "directive", type: i6.ListLinkDirective, selector: "[fd-list-link], [fdListLink]", inputs: ["navigationIndicator", "navigated", "focusable"] }, { kind: "directive", type: i6.ListBylineDirective, selector: "[fdListByline], [fd-list-byline]", inputs: ["twoCol", "wrap"] }, { kind: "directive", type: i6.ListContentDirective, selector: "[fdListContent], [fd-list-content]", inputs: ["twoCol"] }, { kind: "directive", type: i6.ListThumbnailDirective, selector: "[fdListThumbnail], [fd-list-thumbnail]" }, { kind: "directive", type: i7.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "component", type: i8.UlvContextMenuComponent, selector: "bsu-ulv-context-menu,[ulvContextMenu]", inputs: ["onlyOverflow", "rightClickEnable", "deviceName", "menuItems", "allColumns", "index", "mo", "styleIndex", "conditionalFormats", "disableOverflowContextMenu", "footerMode", "appendTo"], outputs: ["commandClick"] }, { kind: "component", type: i9.ColumnRendererComponent, selector: "bsu-column-renderer,[colRenderer]", inputs: ["column", "mo", "index", "editMode", "customRowHeight", "controlUi", "formLayoutShowLabel", "isChecked", "isNewInlineMo", "containerDom", "disableEllapsis", "rtl", "isMobile", "deviceName", "deviceSize", "value", "icon"] }, { kind: "directive", type: i10.ApplyConditionalFormatsDirective, selector: "[applyConditionalFormats]", inputs: ["applyConditionalFormats", "styleIndex", "hostEl", "dbName"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i11.PictureFieldSourcePipe, name: "picFieldSrc" }, { kind: "pipe", type: i11.BbbTranslatePipe, name: "bbbTranslate" }, { kind: "pipe", type: i11.ControlUiPipe, name: "controlUi" }, { kind: "pipe", type: i11.ColumnIconPipe, name: "columnIcon" }, { kind: "pipe", type: i11.ColumnValuePipe, name: "columnValue" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
25
25
|
}
|
|
26
26
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: ListItemComponent, decorators: [{
|
|
27
27
|
type: Component,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ChangeDetectionStrategy, Component, ElementRef, HostBinding, Input, signal, ViewChild } from '@angular/core';
|
|
2
2
|
import { Subject, takeUntil } from 'rxjs';
|
|
3
|
-
import { ReportViewBaseComponent, TableHeaderWidthMode, calcContextMenuWidth, calculateColumnWidth, calculateColumnWidthFitToContainer, calculateFreeColumnSize, calculateColumnContent, setColumnWidthByMaxMoContentWidth } from 'barsa-novin-ray-core';
|
|
3
|
+
import { ReportViewBaseComponent, TableHeaderWidthMode, calcContextMenuWidth, calculateColumnWidth, calculateColumnWidthFitToContainer, calculateFreeColumnSize, calculateColumnContent, setColumnWidthByMaxMoContentWidth, getDeviceIsMobile } from 'barsa-novin-ray-core';
|
|
4
4
|
import { BarsaTableHeaderComponent } from '../barsa-table-header/barsa-table-header.component';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
import * as i1 from "@angular/common";
|
|
@@ -27,6 +27,7 @@ export class UiTableViewComponent extends ReportViewBaseComponent {
|
|
|
27
27
|
this.notVisibleItems = [];
|
|
28
28
|
this.visibleItems = [];
|
|
29
29
|
this.oldWidth = 0;
|
|
30
|
+
this.isMobile = getDeviceIsMobile();
|
|
30
31
|
}
|
|
31
32
|
ngOnInit() {
|
|
32
33
|
super.ngOnInit();
|
|
@@ -171,7 +172,7 @@ export class UiTableViewComponent extends ReportViewBaseComponent {
|
|
|
171
172
|
}
|
|
172
173
|
_setWidth(setWidth) {
|
|
173
174
|
const widthOfDom = Math.floor(this._el.nativeElement.parentNode.getBoundingClientRect().width);
|
|
174
|
-
console.log(widthOfDom);
|
|
175
|
+
// console.log(widthOfDom);
|
|
175
176
|
if (widthOfDom === 0) {
|
|
176
177
|
return;
|
|
177
178
|
}
|
|
@@ -251,11 +252,11 @@ export class UiTableViewComponent extends ReportViewBaseComponent {
|
|
|
251
252
|
this._renderer2.setStyle(this._el.nativeElement, 'width', this._width);
|
|
252
253
|
}
|
|
253
254
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: UiTableViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
254
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: UiTableViewComponent, selector: "bsu-ui-table-view", inputs: { columnWidth: "columnWidth", minWidth: "minWidth", minHeight: "minHeight", disableResize: "disableResize", disableHeaderContextMenu: "disableHeaderContextMenu", rowResizer: "rowResizer", enableResizing: "enableResizing", disableFixedTableLayout: "disableFixedTableLayout" }, host: { properties: { "style.height.px": "this.height", "style.max-height": "this.maxHeight" } }, viewQueries: [{ propertyName: "_tableRef", first: true, predicate: ["tableTpl"], descendants: true, read: ElementRef, static: true }, { propertyName: "_tableHeaderComponent", first: true, predicate: BarsaTableHeaderComponent, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<table\n fd-table\n #tableTpl\n #headerBottomObserver\n intersectionObserver\n [intersectionThreshold]=\"0.1\"\n (visibilityChange)=\"onTableVisibilityChange($event, headerBottomObserver)\"\n [popIn]=\"popin\"\n [class.table-fixed]=\"\n !contextView?.Grid_HideHeader && (!popin || secondaryColumns.length === 0) && !disableFixedTableLayout\n \"\n [noBorderX]=\"viewSetting?.NoHoriztonalBorders === true\"\n [noBorderY]=\"viewSetting?.NoVerticalBorders === true || (popin && secondaryColumns.length > 0)\"\n>\n @if (columns | mergeFieldsToColumns: viewSetting?.MergeFieldsToColumns?.MoDataList; as mergeFieldsToColumns) {\n <ng-container\n *ngTemplateOutlet=\"\n headerTemplate;\n context: { $implicit: mergeFieldsToColumns, moDataListCount: moDataList?.length }\n \"\n ></ng-container>\n @if (moDataList?.length) {\n <ng-container\n *ngTemplateOutlet=\"\n bodyTemplate;\n context: { $implicit: mergeFieldsToColumns, previewColumn: allColumns | findPreviewColumn }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"footerTemplate; context: { $implicit: mergeFieldsToColumns }\"></ng-container>\n } }\n</table>\n<!--renderColumn-->\n\n@if (!moDataList?.length) {\n<bsu-no-data\n [class.no-topborder]=\"!hideToolbar\"\n [class.noborder]=\"contextView.Grid_HideHeader && hideToolbar\"\n [simple]=\"true\"\n>\n</bsu-no-data>\n}\n\n<ng-template #headerTemplate let-columns let-moDataListCount>\n <bsu-barsa-table-header\n [sticky]=\"stickyEnable()\"\n [hasSecondaryColumns]=\"secondaryColumns.length > 0\"\n [class.has-toolbar]=\"!hideToolbar\"\n [style.pointer-events]=\"moDataListCount ? 'auto' : 'none'\"\n [tableWidth]=\"elWidth\"\n [showDetailsInRow]=\"showDetailsInRow\"\n [hideOpenIcon]=\"hideOpenIcon\"\n [resizedByUser]=\"resizedByUser\"\n [tableHeaderMode]=\"tableHeaderMode\"\n [showRowNumber]=\"contextView?.Grid_ShowRowNumber\"\n [allChecked]=\"allChecked\"\n [rtl]=\"rtl\"\n [actionList]=\"actionList\"\n [disableResponsive]=\"disableResponsive\"\n [isCheckList]=\"isCheckList\"\n [columns]=\"\n columns\n | filterColumnsByDetails: detailsColumns:rowIndicator\n | filter: { IsPreview: false }\n | hideColumnsInmobile: viewSetting?.HideColumnsInMobile\n \"\n [fitWidth]=\"fitWidth\"\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\n [inlineEditMode]=\"inlineEditMode\"\n [contextMenuItems]=\"contextMenuItems\"\n [contextMenuWidth]=\"contextMenuWidth\"\n [showViewButton]=\"showViewButton\"\n [deviceSize]=\"deviceSize\"\n [viewSetting]=\"viewSetting\"\n [hideHeader]=\"contextView.Grid_HideHeader\"\n [rowIndicator]=\"rowIndicator\"\n [disableResize]=\"disableResize\"\n [disableHeaderContextMenu]=\"disableHeaderContextMenu\"\n (headerRender)=\"onSetTableHeaderDom($event)\"\n (columnResize)=\"onColumnResized($event)\"\n (columnResizing)=\"onColumnResizing($event)\"\n (fitToContent)=\"onFitToContent($event)\"\n (fitToContainer)=\"onFitToContainer()\"\n (freeColumnSize)=\"onFreeColumnSizing()\"\n (allCheckbox)=\"onAllCheckbox($event)\"\n (sortAscending)=\"onSortAscending($event)\"\n (sortDescending)=\"onSortDescending($event)\"\n (filter)=\"onFilter($event)\"\n (resetGridSettings)=\"resetGridSettings.emit()\"\n ></bsu-barsa-table-header>\n <!-- <div\n #headerBottomObserver\n intersectionObserver\n [intersectionThreshold]=\"0.1\"\n (visibilityChange)=\"onHeaderVisibilityChange($event, headerBottomObserver)\"\n ></div> -->\n</ng-template>\n<ng-template #bodyTemplate let-columns let-previewColumn=\"previewColumn\">\n <tbody\n #body\n fd-table-body\n [class.noborder]=\"viewSetting?.NoBodyBorders === true\"\n [noBorderX]=\"viewSetting?.NoHoriztonalBorders === true || previewColumn\"\n [noBorderY]=\"(popin && secondaryColumns.length > 0) || previewColumn\"\n >\n <ng-container>\n @for (mo of moDataList | multipleGroupBy: groupby; track _trackByRow(index, mo); let index = $index) {\n <ng-container\n *ngTemplateOutlet=\"\n hasRowOlgo ? rowOlgoTemplate : rowTemplate;\n context: {\n $implicit: mo,\n index: index,\n rowNumber: mo.Id | rowNumber: pagingSetting:moDataList,\n rowIndicatorColor: !columns.length ? '' : (columns[0].Caption | rval: mo:columns),\n columns: columns | columnCustomComponent: viewSetting?.ColumnComponents?.MoDataList,\n secondaryColumns:\n secondaryColumns | columnCustomComponent: viewSetting?.ColumnComponents?.MoDataList,\n moDataList: moDataList,\n moDataListCount: moDataList.length,\n cartableTemplate: cartableTemplates[mo.RelatedMo?.$TypeDefId + '@' + mo.CartableSettings?.Id],\n previewColumn: previewColumn,\n detailsCollapsed: viewSetting?.DetailsSetting?.DetailsCollapsed === true,\n hideDetailsText: viewSetting?.DetailsSetting?.HideDetailsText === true\n }\n \"\n ></ng-container>\n }\n </ng-container>\n </tbody>\n</ng-template>\n<ng-template #footerTemplate let-columns>\n @if (hasSummary) {\n <tfoot fd-table-footer>\n <tr fd-table-row class=\"row-summary\">\n @if (isCheckList) {\n <td fd-table-cell columnResizer>\n <strong class=\"col-total-text\">{{ 'Total' | bbbTranslate }}</strong>\n </td>\n } @if (!isCheckList) {\n <td fd-table-cell class=\"single-select\">\n <strong class=\"col-total-text\">{{ 'Total' | bbbTranslate }}</strong>\n </td>\n } @for (column of columns; track column; let i = $index) {\n <td>\n @if (column.HasSummary) {\n <strong style=\"direction: ltr; display: block\">\n {{ moDataList | totalSummary: column.Name | number }}</strong\n >\n }\n </td>\n } @if (contextMenuItems && contextMenuItems.length > 0) {\n <td fd-table-cell style=\"width: 100px\"></td>\n } @if (!hideOpenIcon && canView && (!inlineEditMode || !allowInlineEdit)) {\n <td fd-table-cell></td>\n }\n </tr>\n </tfoot>\n }\n</ng-template>\n<ng-template\n #rowOlgoTemplate\n let-mo\n let-index=\"index\"\n let-columns=\"columns\"\n let-moDataListCount=\"moDataListCount\"\n let-moDataList=\"moDataList\"\n let-cartableTemplate=\"cartableTemplate\"\n let-secondaryColumns=\"secondaryColumns\"\n let-rowIndicatorColor=\"rowIndicatorColor\"\n let-rowNumber=\"rowNumber\"\n let-previewColumn=\"previewColumn\"\n let-detailsCollapsed=\"detailsCollapsed\"\n let-hideDetailsText=\"hideDetailsText\"\n>\n <bnrc-dynamic-item-component\n [component]=\"viewSetting.RowOlgo\"\n [mo]=\"mo\"\n [detailsCollapsed]=\"detailsCollapsed\"\n [hideDetailsText]=\"hideDetailsText\"\n [isLastChildGroup]=\"mo.$IsLastChildGroup\"\n [groupSummary]=\"groupSummary\"\n [showViewButton]=\"showViewButton\"\n [UlvMainCtrlr]=\"UlvMainCtrlr\"\n [moDataList]=\"moDataList\"\n [showDetailsInRow]=\"showDetailsInRow\"\n [hideOpenIcon]=\"hideOpenIcon\"\n [detailsColumns]=\"detailsColumns\"\n [showRowNumber]=\"contextView?.Grid_ShowRowNumber\"\n [rowNumber]=\"rowNumber\"\n [columnComponents]=\"viewSetting?.ColumnComponents || null\"\n [cartableTemplate]=\"cartableTemplate\"\n [cartableMo]=\"mo.RelatedMo\"\n [dirtyColumns]=\"mo.$DirtyColumns\"\n [cartableWorkflowData]=\"mo.SerializedWorkflowData\"\n [serializedRelatedMo]=\"mo.SerializedRelatedMo\"\n [detailsText]=\"viewSetting?.DetailsSetting?.ButtonText\"\n [detailsTextFunction]=\"viewSetting?.DetailsSetting?.ButtonTextFunction\"\n [detailsComponent]=\"detailsComponent\"\n [coloringRow]=\"viewSetting?.ColoringRow\"\n [isChecked]=\"mo.$IsChecked\"\n [visibility]=\"mo.$Visibility\"\n [expanded]=\"mo.$Expanded\"\n [styleIndex]=\"mo.$StyleIndex\"\n [level]=\"mo.$Level\"\n [parentExpanded]=\"mo.$Parent?.$Expanded\"\n [moDataListCount]=\"moDataListCount\"\n [columnsCount]=\"columnsCount - detailsColumns.length\"\n [typeDefId]=\"typeDefId\"\n [extraRelation]=\"extraRelation\"\n [formSetting]=\"formSetting\"\n [index]=\"index\"\n [setting]=\"viewSetting\"\n [secondaryColumns]=\"secondaryColumns | filterColumnsByDetails: detailsColumns:rowIndicator\"\n [columns]=\"columns | filterColumnsByDetails: detailsColumns:rowIndicator\"\n [isNewInlineMo]=\"mo.$NewInlineMo\"\n [access]=\"access\"\n [inlineEditMode]=\"inlineEditMode\"\n [allowInlineEdit]=\"allowInlineEdit\"\n [rtl]=\"rtl\"\n [deviceName]=\"deviceName\"\n [deviceSize]=\"deviceSize\"\n [allColumns]=\"allColumns\"\n [contextMenuItems]=\"contextMenuItems\"\n [canView]=\"canView\"\n [conditionalFormats]=\"conditionalFormats\"\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\n [navigationArrow]=\"navigationArrow\"\n [isCheckList]=\"isCheckList\"\n [rowIndicator]=\"rowIndicator\"\n [rowIndicatorColor]=\"rowIndicatorColor\"\n (events)=\"onOlgoEvents($event)\"\n >\n </bnrc-dynamic-item-component>\n</ng-template>\n<ng-template\n #rowTemplate\n let-mo\n let-index=\"index\"\n let-rowNumber=\"rowNumber\"\n let-columns=\"columns\"\n let-moDataListCount=\"moDataListCount\"\n let-moDataList=\"moDataList\"\n let-cartableTemplate=\"cartableTemplate\"\n let-secondaryColumns=\"secondaryColumns\"\n let-rowIndicatorColor=\"rowIndicatorColor\"\n let-previewColumn=\"previewColumn\"\n let-detailsCollapsed=\"detailsCollapsed\"\n let-hideDetailsText=\"hideDetailsText\"\n>\n <bsu-barsa-table-row\n [mo]=\"mo\"\n [dirtyColumns]=\"mo.$DirtyColumns\"\n [isLastChildGroup]=\"mo.$IsLastChildGroup\"\n [moDataList]=\"moDataList\"\n [hideDetailsText]=\"hideDetailsText\"\n [detailsCollapsed]=\"detailsCollapsed\"\n [groupSummary]=\"groupSummary\"\n [UlvMainCtrlr]=\"UlvMainCtrlr\"\n [showDetailsInRow]=\"showDetailsInRow\"\n [hideOpenIcon]=\"hideOpenIcon\"\n [showRowNumber]=\"contextView?.Grid_ShowRowNumber\"\n [rowNumber]=\"rowNumber\"\n [coloringRow]=\"viewSetting?.ColoringRow\"\n [disableEllapsis]=\"viewSetting?.DisableEllapsis\"\n [showViewButton]=\"showViewButton\"\n [detailsColumns]=\"detailsColumns\"\n [columnComponents]=\"viewSetting?.ColumnComponents || null\"\n [cartableTemplate]=\"cartableTemplate\"\n [cartableMo]=\"mo.RelatedMo\"\n [cartableWorkflowData]=\"mo.SerializedWorkflowData\"\n [serializedRelatedMo]=\"mo.SerializedRelatedMo\"\n [detailsText]=\"viewSetting?.DetailsSetting?.ButtonText\"\n [detailsComponent]=\"detailsComponent\"\n [isChecked]=\"mo.$IsChecked\"\n [visibility]=\"mo.$Visibility\"\n [expanded]=\"mo.$Expanded\"\n [styleIndex]=\"mo.$StyleIndex\"\n [level]=\"mo.$Level\"\n [parentExpanded]=\"mo.$Parent?.$Expanded\"\n [moDataListCount]=\"moDataListCount\"\n [columnsCount]=\"columnsCount - detailsColumns.length\"\n [typeDefId]=\"typeDefId\"\n [extraRelation]=\"extraRelation\"\n [formSetting]=\"formSetting\"\n [index]=\"index\"\n [setting]=\"viewSetting\"\n [checkboxComponent]=\"viewSetting?.CheckboxComponent\"\n [secondaryColumns]=\"\n secondaryColumns\n | filterColumnsByDetails: detailsColumns:false\n | filter: { IsPreview: false }\n | hideColumnsInmobile: viewSetting?.HideColumnsInMobile\n \"\n [columns]=\"\n columns\n | filterColumnsByDetails: detailsColumns:rowIndicator\n | filter: { IsPreview: false }\n | hideColumnsInmobile: viewSetting?.HideColumnsInMobile\n \"\n [isNewInlineMo]=\"mo.$NewInlineMo\"\n [access]=\"access\"\n [simpleInlineEdit]=\"simpleInlineEdit\"\n [noSaveInlineEditInServer]=\"simpleInlineEdit\"\n [actionList]=\"actionList\"\n [inlineEditMode]=\"inlineEditMode\"\n [allowInlineEdit]=\"allowInlineEdit\"\n [rtl]=\"rtl\"\n [deviceName]=\"deviceName\"\n [deviceSize]=\"deviceSize\"\n [allColumns]=\"allColumns\"\n [contextMenuItems]=\"contextMenuItems\"\n [canView]=\"canView\"\n [conditionalFormats]=\"conditionalFormats\"\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\n [navigationArrow]=\"navigationArrow\"\n [isCheckList]=\"isCheckList\"\n [rowIndicator]=\"rowIndicator\"\n [rowIndicatorColor]=\"rowIndicatorColor\"\n [previewColumn]=\"previewColumn\"\n (columnSummary)=\"columnSummary.emit($event)\"\n (resetWorkflowState)=\"resetWorkflowState.emit(mo)\"\n (escapeKey)=\"onEscapeKey($event)\"\n (expandClick)=\"onExpandClick($event)\"\n (rowCheck)=\"onRowCheck($event)\"\n (workflowShareButtons)=\"onWorkflowShareButtons($event)\"\n (deselectAll)=\"onDeselectAll()\"\n (rowClick)=\"onRowClick($event)\"\n (ulvCommand)=\"onUlvCommand($event)\"\n (actionListClick)=\"onActionListClick(mo, index, $event)\"\n (selectNextInlineRecord)=\"onSelectNextInlineRecord($event)\"\n (editFormPanelSave)=\"onEditFormPanelSave($event)\"\n (editFormPanelCancel)=\"onEditFormPanelCancel($event)\"\n (editFormPanelValueChange)=\"onEditFormPanelValueChange($event)\"\n (cartableFormClosed)=\"onCartableFormClosed($event)\"\n >\n </bsu-barsa-table-row>\n <!-- <div\n #rowBottom\n intersectionObserver\n [intersectionThreshold]=\"0.1\"\n (visibilityChange)=\"onRowVisibilityChange($event, index, rowBottom)\"\n ></div> -->\n</ng-template>\n<div #tableBottomObserve></div>\n", styles: [":host{display:block;width:100%;position:relative;padding-bottom:.2rem;overflow-x:auto;max-width:100vw}.table-fixed{table-layout:fixed}.table-fixed td{overflow:hidden}tr td{font-weight:inherit}::ng-deep span.fd-toolbar__spacer{display:none}.row-summary{position:relative}.row-summary .col-total-text{position:absolute;top:25%}\n"], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.DynamicItemComponent, selector: "bnrc-dynamic-item-component", inputs: ["mo", "allColumns", "moDataList", "columns", "column", "index", "last", "deviceName", "deviceSize", "rtl", "editMode", "setting", "parameters", "contextMenuItems", "canView", "showRowNumber", "rowNumber", "formSetting", "conditionalFormats", "disableOverflowContextMenu", "navigationArrow", "isCheckList", "fields", "isChecked", "layout94$", "inlineEditMode", "isNewInlineMo", "allowInlineEdit", "typeDefId", "rowIndicator", "rowIndicatorColor", "UlvMainCtrlr"] }, { kind: "directive", type: i2.IntersectionObserverDirective, selector: "[intersectionObserver]", inputs: ["intersectionDebounce", "intersectionRootMargin", "intersectionRoot", "intersectionThreshold"], outputs: ["visibilityChange"] }, { kind: "directive", type: i2.ColumnResizerDirective, selector: "[columnResizer]", inputs: ["disableResizer"] }, { kind: "component", type: i3.TableComponent, selector: "table[fd-table]", inputs: ["noBorderX", "noBorderY", "noOuterBorder", "topBorder", "popIn", "responsive", "keys", "allCellsFocusable"], exportAs: ["fd-table"] }, { kind: "directive", type: i3.TableFooterDirective, selector: "[fdTableFooter], [fd-table-footer]" }, { kind: "directive", type: i3.TableBodyDirective, selector: "[fdTableBody], [fd-table-body]", inputs: ["noBorderX", "noBorderY"] }, { kind: "directive", type: i3.TableRowDirective, selector: "[fdTableRow], [fd-table-row]", inputs: ["activable", "highlightActive", "hoverable", "focusable", "main", "secondary", "active"] }, { kind: "directive", type: i3.TableCellDirective, selector: "[fdTableCell], [fd-table-cell]", inputs: ["noBorderX", "noBorderY", "activable", "focusable", "hoverable", "fitContent", "noPadding", "noData", "key"] }, { kind: "component", type: i4.NoDataComponent, selector: "bsu-no-data", inputs: ["simple"] }, { kind: "component", type: i5.BarsaTableHeaderComponent, selector: "bsu-barsa-table-header", inputs: ["allChecked", "isCheckList", "columns", "fitWidth", "contextMenuItems", "contextMenuWidth", "showViewButton", "hasSelected", "hideOpenIcon", "disableOverflowContextMenu", "inlineEditMode", "hideHeader", "showDetailsInRow", "viewSetting", "tableWidth", "resizedByUser", "disableResponsive", "actionList", "rowIndicator", "rtl", "sticky", "showRowNumber", "hasSecondaryColumns", "disableResize", "disableHeaderContextMenu", "deviceSize", "tableHeaderMode"], outputs: ["allCheckbox", "columnResize", "columnResizing", "fitToContent", "fitToContainer", "freeColumnSize", "sortAscending", "sortDescending", "filter", "resetGridSettings", "headerRender"] }, { kind: "component", type: i6.BarsaTableRowComponent, selector: "bsu-barsa-table-row", inputs: ["showDetailsInRow", "previewColumn", "columnComponents", "dirtyColumns", "detailsCollapsed"], outputs: ["columnSummary"] }, { kind: "pipe", type: i1.DecimalPipe, name: "number" }, { kind: "pipe", type: i2.FilterPipe, name: "filter" }, { kind: "pipe", type: i2.MultipleGroupByPipe, name: "multipleGroupBy" }, { kind: "pipe", type: i2.MoReportValuePipe, name: "rval" }, { kind: "pipe", type: i2.BbbTranslatePipe, name: "bbbTranslate" }, { kind: "pipe", type: i2.TotalSummaryPipe, name: "totalSummary" }, { kind: "pipe", type: i2.MergeFieldsToColumnsPipe, name: "mergeFieldsToColumns" }, { kind: "pipe", type: i2.FilterColumnsByDetailsPipe, name: "filterColumnsByDetails" }, { kind: "pipe", type: i2.ColumnCustomComponentPipe, name: "columnCustomComponent" }, { kind: "pipe", type: i2.RowNumberPipe, name: "rowNumber" }, { kind: "pipe", type: i2.FindPreviewColumnPipe, name: "findPreviewColumn" }, { kind: "pipe", type: i2.HideColumnsInmobilePipe, name: "hideColumnsInmobile" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
255
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: UiTableViewComponent, selector: "bsu-ui-table-view", inputs: { columnWidth: "columnWidth", minWidth: "minWidth", minHeight: "minHeight", disableResize: "disableResize", disableHeaderContextMenu: "disableHeaderContextMenu", rowResizer: "rowResizer", enableResizing: "enableResizing", disableFixedTableLayout: "disableFixedTableLayout" }, host: { properties: { "style.height.px": "this.height", "style.max-height": "this.maxHeight" } }, viewQueries: [{ propertyName: "_tableRef", first: true, predicate: ["tableTpl"], descendants: true, read: ElementRef, static: true }, { propertyName: "_tableHeaderComponent", first: true, predicate: BarsaTableHeaderComponent, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<table\n fd-table\n #tableTpl\n #headerBottomObserver\n intersectionObserver\n [intersectionThreshold]=\"0.1\"\n (visibilityChange)=\"onTableVisibilityChange($event, headerBottomObserver)\"\n [popIn]=\"popin\"\n [class.table-fixed]=\"\n !contextView?.Grid_HideHeader && (!popin || secondaryColumns.length === 0) && !disableFixedTableLayout\n \"\n [noBorderX]=\"viewSetting?.NoHoriztonalBorders === true\"\n [noBorderY]=\"viewSetting?.NoVerticalBorders === true || (popin && secondaryColumns.length > 0)\"\n>\n @if (columns | mergeFieldsToColumns: viewSetting?.MergeFieldsToColumns?.MoDataList; as mergeFieldsToColumns) {\n <ng-container\n *ngTemplateOutlet=\"\n headerTemplate;\n context: { $implicit: mergeFieldsToColumns, moDataListCount: moDataList?.length }\n \"\n ></ng-container>\n @if (moDataList?.length) {\n <ng-container\n *ngTemplateOutlet=\"\n bodyTemplate;\n context: { $implicit: mergeFieldsToColumns, previewColumn: allColumns | findPreviewColumn }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"footerTemplate; context: { $implicit: mergeFieldsToColumns }\"></ng-container>\n } }\n</table>\n<!--renderColumn-->\n\n@if (!moDataList?.length) {\n<bsu-no-data\n [class.no-topborder]=\"!hideToolbar\"\n [class.noborder]=\"contextView.Grid_HideHeader && hideToolbar\"\n [simple]=\"true\"\n>\n</bsu-no-data>\n}\n\n<ng-template #headerTemplate let-columns let-moDataListCount>\n <bsu-barsa-table-header\n [sticky]=\"stickyEnable()\"\n [hasSecondaryColumns]=\"secondaryColumns.length > 0\"\n [class.has-toolbar]=\"!hideToolbar\"\n [style.pointer-events]=\"moDataListCount ? 'auto' : 'none'\"\n [tableWidth]=\"elWidth\"\n [showDetailsInRow]=\"showDetailsInRow\"\n [hideOpenIcon]=\"hideOpenIcon\"\n [resizedByUser]=\"resizedByUser\"\n [tableHeaderMode]=\"tableHeaderMode\"\n [showRowNumber]=\"contextView?.Grid_ShowRowNumber\"\n [allChecked]=\"allChecked\"\n [rtl]=\"rtl\"\n [actionList]=\"actionList\"\n [disableResponsive]=\"disableResponsive\"\n [isCheckList]=\"isCheckList\"\n [columns]=\"\n columns\n | filterColumnsByDetails: detailsColumns:rowIndicator\n | filter: { IsPreview: false }\n | hideColumnsInmobile: viewSetting?.HideColumnsInMobile\n \"\n [fitWidth]=\"fitWidth\"\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\n [inlineEditMode]=\"inlineEditMode\"\n [contextMenuItems]=\"contextMenuItems\"\n [contextMenuWidth]=\"contextMenuWidth\"\n [showViewButton]=\"showViewButton\"\n [deviceSize]=\"deviceSize\"\n [viewSetting]=\"viewSetting\"\n [hideHeader]=\"contextView.Grid_HideHeader\"\n [rowIndicator]=\"rowIndicator\"\n [disableResize]=\"disableResize\"\n [disableHeaderContextMenu]=\"disableHeaderContextMenu\"\n (headerRender)=\"onSetTableHeaderDom($event)\"\n (columnResize)=\"onColumnResized($event)\"\n (columnResizing)=\"onColumnResizing($event)\"\n (fitToContent)=\"onFitToContent($event)\"\n (fitToContainer)=\"onFitToContainer()\"\n (freeColumnSize)=\"onFreeColumnSizing()\"\n (allCheckbox)=\"onAllCheckbox($event)\"\n (sortAscending)=\"onSortAscending($event)\"\n (sortDescending)=\"onSortDescending($event)\"\n (filter)=\"onFilter($event)\"\n (resetGridSettings)=\"resetGridSettings.emit()\"\n ></bsu-barsa-table-header>\n <!-- <div\n #headerBottomObserver\n intersectionObserver\n [intersectionThreshold]=\"0.1\"\n (visibilityChange)=\"onHeaderVisibilityChange($event, headerBottomObserver)\"\n ></div> -->\n</ng-template>\n<ng-template #bodyTemplate let-columns let-previewColumn=\"previewColumn\">\n <tbody\n #body\n fd-table-body\n [class.noborder]=\"viewSetting?.NoBodyBorders === true\"\n [noBorderX]=\"viewSetting?.NoHoriztonalBorders === true || previewColumn\"\n [noBorderY]=\"(popin && secondaryColumns.length > 0) || previewColumn\"\n >\n <ng-container>\n @for (mo of moDataList | multipleGroupBy: groupby; track _trackByRow(index, mo); let index = $index) {\n <ng-container\n *ngTemplateOutlet=\"\n hasRowOlgo ? rowOlgoTemplate : rowTemplate;\n context: {\n $implicit: mo,\n index: index,\n rowNumber: mo.Id | rowNumber: pagingSetting:moDataList,\n rowIndicatorColor: !columns.length ? '' : (columns[0].Caption | rval: mo:columns),\n columns: columns | columnCustomComponent: viewSetting?.ColumnComponents?.MoDataList,\n secondaryColumns:\n secondaryColumns | columnCustomComponent: viewSetting?.ColumnComponents?.MoDataList,\n moDataList: moDataList,\n moDataListCount: moDataList.length,\n cartableTemplate: cartableTemplates[mo.RelatedMo?.$TypeDefId + '@' + mo.CartableSettings?.Id],\n previewColumn: previewColumn,\n detailsCollapsed: viewSetting?.DetailsSetting?.DetailsCollapsed === true,\n hideDetailsText: viewSetting?.DetailsSetting?.HideDetailsText === true\n }\n \"\n ></ng-container>\n }\n </ng-container>\n </tbody>\n</ng-template>\n<ng-template #footerTemplate let-columns>\n @if (hasSummary) {\n <tfoot fd-table-footer>\n <tr fd-table-row class=\"row-summary\">\n @if (isCheckList) {\n <td fd-table-cell columnResizer>\n <strong class=\"col-total-text\">{{ 'Total' | bbbTranslate }}</strong>\n </td>\n } @if (!isCheckList) {\n <td fd-table-cell class=\"single-select\">\n <strong class=\"col-total-text\">{{ 'Total' | bbbTranslate }}</strong>\n </td>\n } @for (column of columns; track column; let i = $index) {\n <td>\n @if (column.HasSummary) {\n <strong style=\"direction: ltr; display: block\">\n {{ moDataList | totalSummary: column.Name | number }}</strong\n >\n }\n </td>\n } @if (contextMenuItems && contextMenuItems.length > 0) {\n <td fd-table-cell style=\"width: 100px\"></td>\n } @if (!hideOpenIcon && canView && (!inlineEditMode || !allowInlineEdit)) {\n <td fd-table-cell></td>\n }\n </tr>\n </tfoot>\n }\n</ng-template>\n<ng-template\n #rowOlgoTemplate\n let-mo\n let-index=\"index\"\n let-columns=\"columns\"\n let-moDataListCount=\"moDataListCount\"\n let-moDataList=\"moDataList\"\n let-cartableTemplate=\"cartableTemplate\"\n let-secondaryColumns=\"secondaryColumns\"\n let-rowIndicatorColor=\"rowIndicatorColor\"\n let-rowNumber=\"rowNumber\"\n let-previewColumn=\"previewColumn\"\n let-detailsCollapsed=\"detailsCollapsed\"\n let-hideDetailsText=\"hideDetailsText\"\n>\n <bnrc-dynamic-item-component\n [component]=\"viewSetting.RowOlgo\"\n [mo]=\"mo\"\n [detailsCollapsed]=\"detailsCollapsed\"\n [hideDetailsText]=\"hideDetailsText\"\n [isLastChildGroup]=\"mo.$IsLastChildGroup\"\n [groupSummary]=\"groupSummary\"\n [showViewButton]=\"showViewButton\"\n [UlvMainCtrlr]=\"UlvMainCtrlr\"\n [moDataList]=\"moDataList\"\n [showDetailsInRow]=\"showDetailsInRow\"\n [hideOpenIcon]=\"hideOpenIcon\"\n [detailsColumns]=\"detailsColumns\"\n [showRowNumber]=\"contextView?.Grid_ShowRowNumber\"\n [rowNumber]=\"rowNumber\"\n [columnComponents]=\"viewSetting?.ColumnComponents || null\"\n [cartableTemplate]=\"cartableTemplate\"\n [cartableMo]=\"mo.RelatedMo\"\n [dirtyColumns]=\"mo.$DirtyColumns\"\n [cartableWorkflowData]=\"mo.SerializedWorkflowData\"\n [serializedRelatedMo]=\"mo.SerializedRelatedMo\"\n [detailsText]=\"viewSetting?.DetailsSetting?.ButtonText\"\n [detailsTextFunction]=\"viewSetting?.DetailsSetting?.ButtonTextFunction\"\n [detailsComponent]=\"detailsComponent\"\n [coloringRow]=\"viewSetting?.ColoringRow\"\n [isChecked]=\"mo.$IsChecked\"\n [visibility]=\"mo.$Visibility\"\n [expanded]=\"mo.$Expanded\"\n [styleIndex]=\"mo.$StyleIndex\"\n [level]=\"mo.$Level\"\n [parentExpanded]=\"mo.$Parent?.$Expanded\"\n [moDataListCount]=\"moDataListCount\"\n [columnsCount]=\"columnsCount - detailsColumns.length\"\n [typeDefId]=\"typeDefId\"\n [extraRelation]=\"extraRelation\"\n [formSetting]=\"formSetting\"\n [index]=\"index\"\n [setting]=\"viewSetting\"\n [secondaryColumns]=\"secondaryColumns | filterColumnsByDetails: detailsColumns:rowIndicator\"\n [columns]=\"columns | filterColumnsByDetails: detailsColumns:rowIndicator\"\n [isNewInlineMo]=\"mo.$NewInlineMo\"\n [access]=\"access\"\n [inlineEditMode]=\"inlineEditMode\"\n [allowInlineEdit]=\"allowInlineEdit\"\n [rtl]=\"rtl\"\n [deviceName]=\"deviceName\"\n [deviceSize]=\"deviceSize\"\n [allColumns]=\"allColumns\"\n [contextMenuItems]=\"contextMenuItems\"\n [canView]=\"canView\"\n [conditionalFormats]=\"conditionalFormats\"\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\n [navigationArrow]=\"navigationArrow\"\n [isCheckList]=\"isCheckList\"\n [rowIndicator]=\"rowIndicator\"\n [rowIndicatorColor]=\"rowIndicatorColor\"\n (events)=\"onOlgoEvents($event)\"\n >\n </bnrc-dynamic-item-component>\n</ng-template>\n<ng-template\n #rowTemplate\n let-mo\n let-index=\"index\"\n let-rowNumber=\"rowNumber\"\n let-columns=\"columns\"\n let-moDataListCount=\"moDataListCount\"\n let-moDataList=\"moDataList\"\n let-cartableTemplate=\"cartableTemplate\"\n let-secondaryColumns=\"secondaryColumns\"\n let-rowIndicatorColor=\"rowIndicatorColor\"\n let-previewColumn=\"previewColumn\"\n let-detailsCollapsed=\"detailsCollapsed\"\n let-hideDetailsText=\"hideDetailsText\"\n>\n <bsu-barsa-table-row\n [mo]=\"mo\"\n [dirtyColumns]=\"mo.$DirtyColumns\"\n [isLastChildGroup]=\"mo.$IsLastChildGroup\"\n [moDataList]=\"moDataList\"\n [hideDetailsText]=\"hideDetailsText\"\n [detailsCollapsed]=\"detailsCollapsed\"\n [groupSummary]=\"groupSummary\"\n [UlvMainCtrlr]=\"UlvMainCtrlr\"\n [isMobile]=\"isMobile\"\n [showDetailsInRow]=\"showDetailsInRow\"\n [hideOpenIcon]=\"hideOpenIcon\"\n [showRowNumber]=\"contextView?.Grid_ShowRowNumber\"\n [rowNumber]=\"rowNumber\"\n [coloringRow]=\"viewSetting?.ColoringRow\"\n [disableEllapsis]=\"viewSetting?.DisableEllapsis\"\n [showViewButton]=\"showViewButton\"\n [detailsColumns]=\"detailsColumns\"\n [columnComponents]=\"viewSetting?.ColumnComponents || null\"\n [cartableTemplate]=\"cartableTemplate\"\n [cartableMo]=\"mo.RelatedMo\"\n [cartableWorkflowData]=\"mo.SerializedWorkflowData\"\n [serializedRelatedMo]=\"mo.SerializedRelatedMo\"\n [detailsText]=\"viewSetting?.DetailsSetting?.ButtonText\"\n [detailsComponent]=\"detailsComponent\"\n [isChecked]=\"mo.$IsChecked\"\n [visibility]=\"mo.$Visibility\"\n [expanded]=\"mo.$Expanded\"\n [styleIndex]=\"mo.$StyleIndex\"\n [level]=\"mo.$Level\"\n [parentExpanded]=\"mo.$Parent?.$Expanded\"\n [moDataListCount]=\"moDataListCount\"\n [columnsCount]=\"columnsCount - detailsColumns.length\"\n [typeDefId]=\"typeDefId\"\n [extraRelation]=\"extraRelation\"\n [formSetting]=\"formSetting\"\n [index]=\"index\"\n [setting]=\"viewSetting\"\n [checkboxComponent]=\"viewSetting?.CheckboxComponent\"\n [secondaryColumns]=\"\n secondaryColumns\n | filterColumnsByDetails: detailsColumns:false\n | filter: { IsPreview: false }\n | hideColumnsInmobile: viewSetting?.HideColumnsInMobile\n \"\n [columns]=\"\n columns\n | filterColumnsByDetails: detailsColumns:rowIndicator\n | filter: { IsPreview: false }\n | hideColumnsInmobile: viewSetting?.HideColumnsInMobile\n \"\n [isNewInlineMo]=\"mo.$NewInlineMo\"\n [access]=\"access\"\n [simpleInlineEdit]=\"simpleInlineEdit\"\n [noSaveInlineEditInServer]=\"simpleInlineEdit\"\n [actionList]=\"actionList\"\n [inlineEditMode]=\"inlineEditMode\"\n [allowInlineEdit]=\"allowInlineEdit\"\n [rtl]=\"rtl\"\n [deviceName]=\"deviceName\"\n [deviceSize]=\"deviceSize\"\n [allColumns]=\"allColumns\"\n [contextMenuItems]=\"contextMenuItems\"\n [canView]=\"canView\"\n [conditionalFormats]=\"conditionalFormats\"\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\n [navigationArrow]=\"navigationArrow\"\n [isCheckList]=\"isCheckList\"\n [rowIndicator]=\"rowIndicator\"\n [rowIndicatorColor]=\"rowIndicatorColor\"\n [previewColumn]=\"previewColumn\"\n (columnSummary)=\"columnSummary.emit($event)\"\n (resetWorkflowState)=\"resetWorkflowState.emit(mo)\"\n (escapeKey)=\"onEscapeKey($event)\"\n (expandClick)=\"onExpandClick($event)\"\n (rowCheck)=\"onRowCheck($event)\"\n (workflowShareButtons)=\"onWorkflowShareButtons($event)\"\n (deselectAll)=\"onDeselectAll()\"\n (rowClick)=\"onRowClick($event)\"\n (ulvCommand)=\"onUlvCommand($event)\"\n (actionListClick)=\"onActionListClick(mo, index, $event)\"\n (selectNextInlineRecord)=\"onSelectNextInlineRecord($event)\"\n (editFormPanelSave)=\"onEditFormPanelSave($event)\"\n (editFormPanelCancel)=\"onEditFormPanelCancel($event)\"\n (editFormPanelValueChange)=\"onEditFormPanelValueChange($event)\"\n (cartableFormClosed)=\"onCartableFormClosed($event)\"\n >\n </bsu-barsa-table-row>\n <!-- <div\n #rowBottom\n intersectionObserver\n [intersectionThreshold]=\"0.1\"\n (visibilityChange)=\"onRowVisibilityChange($event, index, rowBottom)\"\n ></div> -->\n</ng-template>\n<div #tableBottomObserve></div>\n", styles: [":host{display:block;width:100%;position:relative;padding-bottom:.2rem;overflow-x:auto;max-width:100vw}.table-fixed{table-layout:fixed}.table-fixed td{overflow:hidden}tr td{font-weight:inherit}::ng-deep span.fd-toolbar__spacer{display:none}.row-summary{position:relative}.row-summary .col-total-text{position:absolute;top:25%}\n"], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.DynamicItemComponent, selector: "bnrc-dynamic-item-component", inputs: ["mo", "allColumns", "moDataList", "columns", "column", "index", "last", "deviceName", "deviceSize", "rtl", "editMode", "setting", "parameters", "contextMenuItems", "canView", "showRowNumber", "rowNumber", "formSetting", "conditionalFormats", "disableOverflowContextMenu", "navigationArrow", "isCheckList", "fields", "isChecked", "layout94$", "inlineEditMode", "isNewInlineMo", "allowInlineEdit", "typeDefId", "rowIndicator", "rowIndicatorColor", "UlvMainCtrlr"] }, { kind: "directive", type: i2.IntersectionObserverDirective, selector: "[intersectionObserver]", inputs: ["intersectionDebounce", "intersectionRootMargin", "intersectionRoot", "intersectionThreshold"], outputs: ["visibilityChange"] }, { kind: "directive", type: i2.ColumnResizerDirective, selector: "[columnResizer]", inputs: ["disableResizer"] }, { kind: "component", type: i3.TableComponent, selector: "table[fd-table]", inputs: ["noBorderX", "noBorderY", "noOuterBorder", "topBorder", "popIn", "responsive", "keys", "allCellsFocusable"], exportAs: ["fd-table"] }, { kind: "directive", type: i3.TableFooterDirective, selector: "[fdTableFooter], [fd-table-footer]" }, { kind: "directive", type: i3.TableBodyDirective, selector: "[fdTableBody], [fd-table-body]", inputs: ["noBorderX", "noBorderY"] }, { kind: "directive", type: i3.TableRowDirective, selector: "[fdTableRow], [fd-table-row]", inputs: ["activable", "highlightActive", "hoverable", "focusable", "main", "secondary", "active"] }, { kind: "directive", type: i3.TableCellDirective, selector: "[fdTableCell], [fd-table-cell]", inputs: ["noBorderX", "noBorderY", "activable", "focusable", "hoverable", "fitContent", "noPadding", "noData", "key"] }, { kind: "component", type: i4.NoDataComponent, selector: "bsu-no-data", inputs: ["simple"] }, { kind: "component", type: i5.BarsaTableHeaderComponent, selector: "bsu-barsa-table-header", inputs: ["allChecked", "isCheckList", "columns", "fitWidth", "contextMenuItems", "contextMenuWidth", "showViewButton", "hasSelected", "hideOpenIcon", "disableOverflowContextMenu", "inlineEditMode", "hideHeader", "showDetailsInRow", "viewSetting", "tableWidth", "resizedByUser", "disableResponsive", "actionList", "rowIndicator", "rtl", "sticky", "showRowNumber", "hasSecondaryColumns", "disableResize", "disableHeaderContextMenu", "deviceSize", "tableHeaderMode"], outputs: ["allCheckbox", "columnResize", "columnResizing", "fitToContent", "fitToContainer", "freeColumnSize", "sortAscending", "sortDescending", "filter", "resetGridSettings", "headerRender"] }, { kind: "component", type: i6.BarsaTableRowComponent, selector: "bsu-barsa-table-row", inputs: ["showDetailsInRow", "previewColumn", "columnComponents", "dirtyColumns", "detailsCollapsed"], outputs: ["columnSummary"] }, { kind: "pipe", type: i1.DecimalPipe, name: "number" }, { kind: "pipe", type: i2.FilterPipe, name: "filter" }, { kind: "pipe", type: i2.MultipleGroupByPipe, name: "multipleGroupBy" }, { kind: "pipe", type: i2.MoReportValuePipe, name: "rval" }, { kind: "pipe", type: i2.BbbTranslatePipe, name: "bbbTranslate" }, { kind: "pipe", type: i2.TotalSummaryPipe, name: "totalSummary" }, { kind: "pipe", type: i2.MergeFieldsToColumnsPipe, name: "mergeFieldsToColumns" }, { kind: "pipe", type: i2.FilterColumnsByDetailsPipe, name: "filterColumnsByDetails" }, { kind: "pipe", type: i2.ColumnCustomComponentPipe, name: "columnCustomComponent" }, { kind: "pipe", type: i2.RowNumberPipe, name: "rowNumber" }, { kind: "pipe", type: i2.FindPreviewColumnPipe, name: "findPreviewColumn" }, { kind: "pipe", type: i2.HideColumnsInmobilePipe, name: "hideColumnsInmobile" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
255
256
|
}
|
|
256
257
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: UiTableViewComponent, decorators: [{
|
|
257
258
|
type: Component,
|
|
258
|
-
args: [{ selector: 'bsu-ui-table-view', changeDetection: ChangeDetectionStrategy.OnPush, template: "<table\n fd-table\n #tableTpl\n #headerBottomObserver\n intersectionObserver\n [intersectionThreshold]=\"0.1\"\n (visibilityChange)=\"onTableVisibilityChange($event, headerBottomObserver)\"\n [popIn]=\"popin\"\n [class.table-fixed]=\"\n !contextView?.Grid_HideHeader && (!popin || secondaryColumns.length === 0) && !disableFixedTableLayout\n \"\n [noBorderX]=\"viewSetting?.NoHoriztonalBorders === true\"\n [noBorderY]=\"viewSetting?.NoVerticalBorders === true || (popin && secondaryColumns.length > 0)\"\n>\n @if (columns | mergeFieldsToColumns: viewSetting?.MergeFieldsToColumns?.MoDataList; as mergeFieldsToColumns) {\n <ng-container\n *ngTemplateOutlet=\"\n headerTemplate;\n context: { $implicit: mergeFieldsToColumns, moDataListCount: moDataList?.length }\n \"\n ></ng-container>\n @if (moDataList?.length) {\n <ng-container\n *ngTemplateOutlet=\"\n bodyTemplate;\n context: { $implicit: mergeFieldsToColumns, previewColumn: allColumns | findPreviewColumn }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"footerTemplate; context: { $implicit: mergeFieldsToColumns }\"></ng-container>\n } }\n</table>\n<!--renderColumn-->\n\n@if (!moDataList?.length) {\n<bsu-no-data\n [class.no-topborder]=\"!hideToolbar\"\n [class.noborder]=\"contextView.Grid_HideHeader && hideToolbar\"\n [simple]=\"true\"\n>\n</bsu-no-data>\n}\n\n<ng-template #headerTemplate let-columns let-moDataListCount>\n <bsu-barsa-table-header\n [sticky]=\"stickyEnable()\"\n [hasSecondaryColumns]=\"secondaryColumns.length > 0\"\n [class.has-toolbar]=\"!hideToolbar\"\n [style.pointer-events]=\"moDataListCount ? 'auto' : 'none'\"\n [tableWidth]=\"elWidth\"\n [showDetailsInRow]=\"showDetailsInRow\"\n [hideOpenIcon]=\"hideOpenIcon\"\n [resizedByUser]=\"resizedByUser\"\n [tableHeaderMode]=\"tableHeaderMode\"\n [showRowNumber]=\"contextView?.Grid_ShowRowNumber\"\n [allChecked]=\"allChecked\"\n [rtl]=\"rtl\"\n [actionList]=\"actionList\"\n [disableResponsive]=\"disableResponsive\"\n [isCheckList]=\"isCheckList\"\n [columns]=\"\n columns\n | filterColumnsByDetails: detailsColumns:rowIndicator\n | filter: { IsPreview: false }\n | hideColumnsInmobile: viewSetting?.HideColumnsInMobile\n \"\n [fitWidth]=\"fitWidth\"\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\n [inlineEditMode]=\"inlineEditMode\"\n [contextMenuItems]=\"contextMenuItems\"\n [contextMenuWidth]=\"contextMenuWidth\"\n [showViewButton]=\"showViewButton\"\n [deviceSize]=\"deviceSize\"\n [viewSetting]=\"viewSetting\"\n [hideHeader]=\"contextView.Grid_HideHeader\"\n [rowIndicator]=\"rowIndicator\"\n [disableResize]=\"disableResize\"\n [disableHeaderContextMenu]=\"disableHeaderContextMenu\"\n (headerRender)=\"onSetTableHeaderDom($event)\"\n (columnResize)=\"onColumnResized($event)\"\n (columnResizing)=\"onColumnResizing($event)\"\n (fitToContent)=\"onFitToContent($event)\"\n (fitToContainer)=\"onFitToContainer()\"\n (freeColumnSize)=\"onFreeColumnSizing()\"\n (allCheckbox)=\"onAllCheckbox($event)\"\n (sortAscending)=\"onSortAscending($event)\"\n (sortDescending)=\"onSortDescending($event)\"\n (filter)=\"onFilter($event)\"\n (resetGridSettings)=\"resetGridSettings.emit()\"\n ></bsu-barsa-table-header>\n <!-- <div\n #headerBottomObserver\n intersectionObserver\n [intersectionThreshold]=\"0.1\"\n (visibilityChange)=\"onHeaderVisibilityChange($event, headerBottomObserver)\"\n ></div> -->\n</ng-template>\n<ng-template #bodyTemplate let-columns let-previewColumn=\"previewColumn\">\n <tbody\n #body\n fd-table-body\n [class.noborder]=\"viewSetting?.NoBodyBorders === true\"\n [noBorderX]=\"viewSetting?.NoHoriztonalBorders === true || previewColumn\"\n [noBorderY]=\"(popin && secondaryColumns.length > 0) || previewColumn\"\n >\n <ng-container>\n @for (mo of moDataList | multipleGroupBy: groupby; track _trackByRow(index, mo); let index = $index) {\n <ng-container\n *ngTemplateOutlet=\"\n hasRowOlgo ? rowOlgoTemplate : rowTemplate;\n context: {\n $implicit: mo,\n index: index,\n rowNumber: mo.Id | rowNumber: pagingSetting:moDataList,\n rowIndicatorColor: !columns.length ? '' : (columns[0].Caption | rval: mo:columns),\n columns: columns | columnCustomComponent: viewSetting?.ColumnComponents?.MoDataList,\n secondaryColumns:\n secondaryColumns | columnCustomComponent: viewSetting?.ColumnComponents?.MoDataList,\n moDataList: moDataList,\n moDataListCount: moDataList.length,\n cartableTemplate: cartableTemplates[mo.RelatedMo?.$TypeDefId + '@' + mo.CartableSettings?.Id],\n previewColumn: previewColumn,\n detailsCollapsed: viewSetting?.DetailsSetting?.DetailsCollapsed === true,\n hideDetailsText: viewSetting?.DetailsSetting?.HideDetailsText === true\n }\n \"\n ></ng-container>\n }\n </ng-container>\n </tbody>\n</ng-template>\n<ng-template #footerTemplate let-columns>\n @if (hasSummary) {\n <tfoot fd-table-footer>\n <tr fd-table-row class=\"row-summary\">\n @if (isCheckList) {\n <td fd-table-cell columnResizer>\n <strong class=\"col-total-text\">{{ 'Total' | bbbTranslate }}</strong>\n </td>\n } @if (!isCheckList) {\n <td fd-table-cell class=\"single-select\">\n <strong class=\"col-total-text\">{{ 'Total' | bbbTranslate }}</strong>\n </td>\n } @for (column of columns; track column; let i = $index) {\n <td>\n @if (column.HasSummary) {\n <strong style=\"direction: ltr; display: block\">\n {{ moDataList | totalSummary: column.Name | number }}</strong\n >\n }\n </td>\n } @if (contextMenuItems && contextMenuItems.length > 0) {\n <td fd-table-cell style=\"width: 100px\"></td>\n } @if (!hideOpenIcon && canView && (!inlineEditMode || !allowInlineEdit)) {\n <td fd-table-cell></td>\n }\n </tr>\n </tfoot>\n }\n</ng-template>\n<ng-template\n #rowOlgoTemplate\n let-mo\n let-index=\"index\"\n let-columns=\"columns\"\n let-moDataListCount=\"moDataListCount\"\n let-moDataList=\"moDataList\"\n let-cartableTemplate=\"cartableTemplate\"\n let-secondaryColumns=\"secondaryColumns\"\n let-rowIndicatorColor=\"rowIndicatorColor\"\n let-rowNumber=\"rowNumber\"\n let-previewColumn=\"previewColumn\"\n let-detailsCollapsed=\"detailsCollapsed\"\n let-hideDetailsText=\"hideDetailsText\"\n>\n <bnrc-dynamic-item-component\n [component]=\"viewSetting.RowOlgo\"\n [mo]=\"mo\"\n [detailsCollapsed]=\"detailsCollapsed\"\n [hideDetailsText]=\"hideDetailsText\"\n [isLastChildGroup]=\"mo.$IsLastChildGroup\"\n [groupSummary]=\"groupSummary\"\n [showViewButton]=\"showViewButton\"\n [UlvMainCtrlr]=\"UlvMainCtrlr\"\n [moDataList]=\"moDataList\"\n [showDetailsInRow]=\"showDetailsInRow\"\n [hideOpenIcon]=\"hideOpenIcon\"\n [detailsColumns]=\"detailsColumns\"\n [showRowNumber]=\"contextView?.Grid_ShowRowNumber\"\n [rowNumber]=\"rowNumber\"\n [columnComponents]=\"viewSetting?.ColumnComponents || null\"\n [cartableTemplate]=\"cartableTemplate\"\n [cartableMo]=\"mo.RelatedMo\"\n [dirtyColumns]=\"mo.$DirtyColumns\"\n [cartableWorkflowData]=\"mo.SerializedWorkflowData\"\n [serializedRelatedMo]=\"mo.SerializedRelatedMo\"\n [detailsText]=\"viewSetting?.DetailsSetting?.ButtonText\"\n [detailsTextFunction]=\"viewSetting?.DetailsSetting?.ButtonTextFunction\"\n [detailsComponent]=\"detailsComponent\"\n [coloringRow]=\"viewSetting?.ColoringRow\"\n [isChecked]=\"mo.$IsChecked\"\n [visibility]=\"mo.$Visibility\"\n [expanded]=\"mo.$Expanded\"\n [styleIndex]=\"mo.$StyleIndex\"\n [level]=\"mo.$Level\"\n [parentExpanded]=\"mo.$Parent?.$Expanded\"\n [moDataListCount]=\"moDataListCount\"\n [columnsCount]=\"columnsCount - detailsColumns.length\"\n [typeDefId]=\"typeDefId\"\n [extraRelation]=\"extraRelation\"\n [formSetting]=\"formSetting\"\n [index]=\"index\"\n [setting]=\"viewSetting\"\n [secondaryColumns]=\"secondaryColumns | filterColumnsByDetails: detailsColumns:rowIndicator\"\n [columns]=\"columns | filterColumnsByDetails: detailsColumns:rowIndicator\"\n [isNewInlineMo]=\"mo.$NewInlineMo\"\n [access]=\"access\"\n [inlineEditMode]=\"inlineEditMode\"\n [allowInlineEdit]=\"allowInlineEdit\"\n [rtl]=\"rtl\"\n [deviceName]=\"deviceName\"\n [deviceSize]=\"deviceSize\"\n [allColumns]=\"allColumns\"\n [contextMenuItems]=\"contextMenuItems\"\n [canView]=\"canView\"\n [conditionalFormats]=\"conditionalFormats\"\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\n [navigationArrow]=\"navigationArrow\"\n [isCheckList]=\"isCheckList\"\n [rowIndicator]=\"rowIndicator\"\n [rowIndicatorColor]=\"rowIndicatorColor\"\n (events)=\"onOlgoEvents($event)\"\n >\n </bnrc-dynamic-item-component>\n</ng-template>\n<ng-template\n #rowTemplate\n let-mo\n let-index=\"index\"\n let-rowNumber=\"rowNumber\"\n let-columns=\"columns\"\n let-moDataListCount=\"moDataListCount\"\n let-moDataList=\"moDataList\"\n let-cartableTemplate=\"cartableTemplate\"\n let-secondaryColumns=\"secondaryColumns\"\n let-rowIndicatorColor=\"rowIndicatorColor\"\n let-previewColumn=\"previewColumn\"\n let-detailsCollapsed=\"detailsCollapsed\"\n let-hideDetailsText=\"hideDetailsText\"\n>\n <bsu-barsa-table-row\n [mo]=\"mo\"\n [dirtyColumns]=\"mo.$DirtyColumns\"\n [isLastChildGroup]=\"mo.$IsLastChildGroup\"\n [moDataList]=\"moDataList\"\n [hideDetailsText]=\"hideDetailsText\"\n [detailsCollapsed]=\"detailsCollapsed\"\n [groupSummary]=\"groupSummary\"\n [UlvMainCtrlr]=\"UlvMainCtrlr\"\n [showDetailsInRow]=\"showDetailsInRow\"\n [hideOpenIcon]=\"hideOpenIcon\"\n [showRowNumber]=\"contextView?.Grid_ShowRowNumber\"\n [rowNumber]=\"rowNumber\"\n [coloringRow]=\"viewSetting?.ColoringRow\"\n [disableEllapsis]=\"viewSetting?.DisableEllapsis\"\n [showViewButton]=\"showViewButton\"\n [detailsColumns]=\"detailsColumns\"\n [columnComponents]=\"viewSetting?.ColumnComponents || null\"\n [cartableTemplate]=\"cartableTemplate\"\n [cartableMo]=\"mo.RelatedMo\"\n [cartableWorkflowData]=\"mo.SerializedWorkflowData\"\n [serializedRelatedMo]=\"mo.SerializedRelatedMo\"\n [detailsText]=\"viewSetting?.DetailsSetting?.ButtonText\"\n [detailsComponent]=\"detailsComponent\"\n [isChecked]=\"mo.$IsChecked\"\n [visibility]=\"mo.$Visibility\"\n [expanded]=\"mo.$Expanded\"\n [styleIndex]=\"mo.$StyleIndex\"\n [level]=\"mo.$Level\"\n [parentExpanded]=\"mo.$Parent?.$Expanded\"\n [moDataListCount]=\"moDataListCount\"\n [columnsCount]=\"columnsCount - detailsColumns.length\"\n [typeDefId]=\"typeDefId\"\n [extraRelation]=\"extraRelation\"\n [formSetting]=\"formSetting\"\n [index]=\"index\"\n [setting]=\"viewSetting\"\n [checkboxComponent]=\"viewSetting?.CheckboxComponent\"\n [secondaryColumns]=\"\n secondaryColumns\n | filterColumnsByDetails: detailsColumns:false\n | filter: { IsPreview: false }\n | hideColumnsInmobile: viewSetting?.HideColumnsInMobile\n \"\n [columns]=\"\n columns\n | filterColumnsByDetails: detailsColumns:rowIndicator\n | filter: { IsPreview: false }\n | hideColumnsInmobile: viewSetting?.HideColumnsInMobile\n \"\n [isNewInlineMo]=\"mo.$NewInlineMo\"\n [access]=\"access\"\n [simpleInlineEdit]=\"simpleInlineEdit\"\n [noSaveInlineEditInServer]=\"simpleInlineEdit\"\n [actionList]=\"actionList\"\n [inlineEditMode]=\"inlineEditMode\"\n [allowInlineEdit]=\"allowInlineEdit\"\n [rtl]=\"rtl\"\n [deviceName]=\"deviceName\"\n [deviceSize]=\"deviceSize\"\n [allColumns]=\"allColumns\"\n [contextMenuItems]=\"contextMenuItems\"\n [canView]=\"canView\"\n [conditionalFormats]=\"conditionalFormats\"\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\n [navigationArrow]=\"navigationArrow\"\n [isCheckList]=\"isCheckList\"\n [rowIndicator]=\"rowIndicator\"\n [rowIndicatorColor]=\"rowIndicatorColor\"\n [previewColumn]=\"previewColumn\"\n (columnSummary)=\"columnSummary.emit($event)\"\n (resetWorkflowState)=\"resetWorkflowState.emit(mo)\"\n (escapeKey)=\"onEscapeKey($event)\"\n (expandClick)=\"onExpandClick($event)\"\n (rowCheck)=\"onRowCheck($event)\"\n (workflowShareButtons)=\"onWorkflowShareButtons($event)\"\n (deselectAll)=\"onDeselectAll()\"\n (rowClick)=\"onRowClick($event)\"\n (ulvCommand)=\"onUlvCommand($event)\"\n (actionListClick)=\"onActionListClick(mo, index, $event)\"\n (selectNextInlineRecord)=\"onSelectNextInlineRecord($event)\"\n (editFormPanelSave)=\"onEditFormPanelSave($event)\"\n (editFormPanelCancel)=\"onEditFormPanelCancel($event)\"\n (editFormPanelValueChange)=\"onEditFormPanelValueChange($event)\"\n (cartableFormClosed)=\"onCartableFormClosed($event)\"\n >\n </bsu-barsa-table-row>\n <!-- <div\n #rowBottom\n intersectionObserver\n [intersectionThreshold]=\"0.1\"\n (visibilityChange)=\"onRowVisibilityChange($event, index, rowBottom)\"\n ></div> -->\n</ng-template>\n<div #tableBottomObserve></div>\n", styles: [":host{display:block;width:100%;position:relative;padding-bottom:.2rem;overflow-x:auto;max-width:100vw}.table-fixed{table-layout:fixed}.table-fixed td{overflow:hidden}tr td{font-weight:inherit}::ng-deep span.fd-toolbar__spacer{display:none}.row-summary{position:relative}.row-summary .col-total-text{position:absolute;top:25%}\n"] }]
|
|
259
|
+
args: [{ selector: 'bsu-ui-table-view', changeDetection: ChangeDetectionStrategy.OnPush, template: "<table\n fd-table\n #tableTpl\n #headerBottomObserver\n intersectionObserver\n [intersectionThreshold]=\"0.1\"\n (visibilityChange)=\"onTableVisibilityChange($event, headerBottomObserver)\"\n [popIn]=\"popin\"\n [class.table-fixed]=\"\n !contextView?.Grid_HideHeader && (!popin || secondaryColumns.length === 0) && !disableFixedTableLayout\n \"\n [noBorderX]=\"viewSetting?.NoHoriztonalBorders === true\"\n [noBorderY]=\"viewSetting?.NoVerticalBorders === true || (popin && secondaryColumns.length > 0)\"\n>\n @if (columns | mergeFieldsToColumns: viewSetting?.MergeFieldsToColumns?.MoDataList; as mergeFieldsToColumns) {\n <ng-container\n *ngTemplateOutlet=\"\n headerTemplate;\n context: { $implicit: mergeFieldsToColumns, moDataListCount: moDataList?.length }\n \"\n ></ng-container>\n @if (moDataList?.length) {\n <ng-container\n *ngTemplateOutlet=\"\n bodyTemplate;\n context: { $implicit: mergeFieldsToColumns, previewColumn: allColumns | findPreviewColumn }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"footerTemplate; context: { $implicit: mergeFieldsToColumns }\"></ng-container>\n } }\n</table>\n<!--renderColumn-->\n\n@if (!moDataList?.length) {\n<bsu-no-data\n [class.no-topborder]=\"!hideToolbar\"\n [class.noborder]=\"contextView.Grid_HideHeader && hideToolbar\"\n [simple]=\"true\"\n>\n</bsu-no-data>\n}\n\n<ng-template #headerTemplate let-columns let-moDataListCount>\n <bsu-barsa-table-header\n [sticky]=\"stickyEnable()\"\n [hasSecondaryColumns]=\"secondaryColumns.length > 0\"\n [class.has-toolbar]=\"!hideToolbar\"\n [style.pointer-events]=\"moDataListCount ? 'auto' : 'none'\"\n [tableWidth]=\"elWidth\"\n [showDetailsInRow]=\"showDetailsInRow\"\n [hideOpenIcon]=\"hideOpenIcon\"\n [resizedByUser]=\"resizedByUser\"\n [tableHeaderMode]=\"tableHeaderMode\"\n [showRowNumber]=\"contextView?.Grid_ShowRowNumber\"\n [allChecked]=\"allChecked\"\n [rtl]=\"rtl\"\n [actionList]=\"actionList\"\n [disableResponsive]=\"disableResponsive\"\n [isCheckList]=\"isCheckList\"\n [columns]=\"\n columns\n | filterColumnsByDetails: detailsColumns:rowIndicator\n | filter: { IsPreview: false }\n | hideColumnsInmobile: viewSetting?.HideColumnsInMobile\n \"\n [fitWidth]=\"fitWidth\"\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\n [inlineEditMode]=\"inlineEditMode\"\n [contextMenuItems]=\"contextMenuItems\"\n [contextMenuWidth]=\"contextMenuWidth\"\n [showViewButton]=\"showViewButton\"\n [deviceSize]=\"deviceSize\"\n [viewSetting]=\"viewSetting\"\n [hideHeader]=\"contextView.Grid_HideHeader\"\n [rowIndicator]=\"rowIndicator\"\n [disableResize]=\"disableResize\"\n [disableHeaderContextMenu]=\"disableHeaderContextMenu\"\n (headerRender)=\"onSetTableHeaderDom($event)\"\n (columnResize)=\"onColumnResized($event)\"\n (columnResizing)=\"onColumnResizing($event)\"\n (fitToContent)=\"onFitToContent($event)\"\n (fitToContainer)=\"onFitToContainer()\"\n (freeColumnSize)=\"onFreeColumnSizing()\"\n (allCheckbox)=\"onAllCheckbox($event)\"\n (sortAscending)=\"onSortAscending($event)\"\n (sortDescending)=\"onSortDescending($event)\"\n (filter)=\"onFilter($event)\"\n (resetGridSettings)=\"resetGridSettings.emit()\"\n ></bsu-barsa-table-header>\n <!-- <div\n #headerBottomObserver\n intersectionObserver\n [intersectionThreshold]=\"0.1\"\n (visibilityChange)=\"onHeaderVisibilityChange($event, headerBottomObserver)\"\n ></div> -->\n</ng-template>\n<ng-template #bodyTemplate let-columns let-previewColumn=\"previewColumn\">\n <tbody\n #body\n fd-table-body\n [class.noborder]=\"viewSetting?.NoBodyBorders === true\"\n [noBorderX]=\"viewSetting?.NoHoriztonalBorders === true || previewColumn\"\n [noBorderY]=\"(popin && secondaryColumns.length > 0) || previewColumn\"\n >\n <ng-container>\n @for (mo of moDataList | multipleGroupBy: groupby; track _trackByRow(index, mo); let index = $index) {\n <ng-container\n *ngTemplateOutlet=\"\n hasRowOlgo ? rowOlgoTemplate : rowTemplate;\n context: {\n $implicit: mo,\n index: index,\n rowNumber: mo.Id | rowNumber: pagingSetting:moDataList,\n rowIndicatorColor: !columns.length ? '' : (columns[0].Caption | rval: mo:columns),\n columns: columns | columnCustomComponent: viewSetting?.ColumnComponents?.MoDataList,\n secondaryColumns:\n secondaryColumns | columnCustomComponent: viewSetting?.ColumnComponents?.MoDataList,\n moDataList: moDataList,\n moDataListCount: moDataList.length,\n cartableTemplate: cartableTemplates[mo.RelatedMo?.$TypeDefId + '@' + mo.CartableSettings?.Id],\n previewColumn: previewColumn,\n detailsCollapsed: viewSetting?.DetailsSetting?.DetailsCollapsed === true,\n hideDetailsText: viewSetting?.DetailsSetting?.HideDetailsText === true\n }\n \"\n ></ng-container>\n }\n </ng-container>\n </tbody>\n</ng-template>\n<ng-template #footerTemplate let-columns>\n @if (hasSummary) {\n <tfoot fd-table-footer>\n <tr fd-table-row class=\"row-summary\">\n @if (isCheckList) {\n <td fd-table-cell columnResizer>\n <strong class=\"col-total-text\">{{ 'Total' | bbbTranslate }}</strong>\n </td>\n } @if (!isCheckList) {\n <td fd-table-cell class=\"single-select\">\n <strong class=\"col-total-text\">{{ 'Total' | bbbTranslate }}</strong>\n </td>\n } @for (column of columns; track column; let i = $index) {\n <td>\n @if (column.HasSummary) {\n <strong style=\"direction: ltr; display: block\">\n {{ moDataList | totalSummary: column.Name | number }}</strong\n >\n }\n </td>\n } @if (contextMenuItems && contextMenuItems.length > 0) {\n <td fd-table-cell style=\"width: 100px\"></td>\n } @if (!hideOpenIcon && canView && (!inlineEditMode || !allowInlineEdit)) {\n <td fd-table-cell></td>\n }\n </tr>\n </tfoot>\n }\n</ng-template>\n<ng-template\n #rowOlgoTemplate\n let-mo\n let-index=\"index\"\n let-columns=\"columns\"\n let-moDataListCount=\"moDataListCount\"\n let-moDataList=\"moDataList\"\n let-cartableTemplate=\"cartableTemplate\"\n let-secondaryColumns=\"secondaryColumns\"\n let-rowIndicatorColor=\"rowIndicatorColor\"\n let-rowNumber=\"rowNumber\"\n let-previewColumn=\"previewColumn\"\n let-detailsCollapsed=\"detailsCollapsed\"\n let-hideDetailsText=\"hideDetailsText\"\n>\n <bnrc-dynamic-item-component\n [component]=\"viewSetting.RowOlgo\"\n [mo]=\"mo\"\n [detailsCollapsed]=\"detailsCollapsed\"\n [hideDetailsText]=\"hideDetailsText\"\n [isLastChildGroup]=\"mo.$IsLastChildGroup\"\n [groupSummary]=\"groupSummary\"\n [showViewButton]=\"showViewButton\"\n [UlvMainCtrlr]=\"UlvMainCtrlr\"\n [moDataList]=\"moDataList\"\n [showDetailsInRow]=\"showDetailsInRow\"\n [hideOpenIcon]=\"hideOpenIcon\"\n [detailsColumns]=\"detailsColumns\"\n [showRowNumber]=\"contextView?.Grid_ShowRowNumber\"\n [rowNumber]=\"rowNumber\"\n [columnComponents]=\"viewSetting?.ColumnComponents || null\"\n [cartableTemplate]=\"cartableTemplate\"\n [cartableMo]=\"mo.RelatedMo\"\n [dirtyColumns]=\"mo.$DirtyColumns\"\n [cartableWorkflowData]=\"mo.SerializedWorkflowData\"\n [serializedRelatedMo]=\"mo.SerializedRelatedMo\"\n [detailsText]=\"viewSetting?.DetailsSetting?.ButtonText\"\n [detailsTextFunction]=\"viewSetting?.DetailsSetting?.ButtonTextFunction\"\n [detailsComponent]=\"detailsComponent\"\n [coloringRow]=\"viewSetting?.ColoringRow\"\n [isChecked]=\"mo.$IsChecked\"\n [visibility]=\"mo.$Visibility\"\n [expanded]=\"mo.$Expanded\"\n [styleIndex]=\"mo.$StyleIndex\"\n [level]=\"mo.$Level\"\n [parentExpanded]=\"mo.$Parent?.$Expanded\"\n [moDataListCount]=\"moDataListCount\"\n [columnsCount]=\"columnsCount - detailsColumns.length\"\n [typeDefId]=\"typeDefId\"\n [extraRelation]=\"extraRelation\"\n [formSetting]=\"formSetting\"\n [index]=\"index\"\n [setting]=\"viewSetting\"\n [secondaryColumns]=\"secondaryColumns | filterColumnsByDetails: detailsColumns:rowIndicator\"\n [columns]=\"columns | filterColumnsByDetails: detailsColumns:rowIndicator\"\n [isNewInlineMo]=\"mo.$NewInlineMo\"\n [access]=\"access\"\n [inlineEditMode]=\"inlineEditMode\"\n [allowInlineEdit]=\"allowInlineEdit\"\n [rtl]=\"rtl\"\n [deviceName]=\"deviceName\"\n [deviceSize]=\"deviceSize\"\n [allColumns]=\"allColumns\"\n [contextMenuItems]=\"contextMenuItems\"\n [canView]=\"canView\"\n [conditionalFormats]=\"conditionalFormats\"\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\n [navigationArrow]=\"navigationArrow\"\n [isCheckList]=\"isCheckList\"\n [rowIndicator]=\"rowIndicator\"\n [rowIndicatorColor]=\"rowIndicatorColor\"\n (events)=\"onOlgoEvents($event)\"\n >\n </bnrc-dynamic-item-component>\n</ng-template>\n<ng-template\n #rowTemplate\n let-mo\n let-index=\"index\"\n let-rowNumber=\"rowNumber\"\n let-columns=\"columns\"\n let-moDataListCount=\"moDataListCount\"\n let-moDataList=\"moDataList\"\n let-cartableTemplate=\"cartableTemplate\"\n let-secondaryColumns=\"secondaryColumns\"\n let-rowIndicatorColor=\"rowIndicatorColor\"\n let-previewColumn=\"previewColumn\"\n let-detailsCollapsed=\"detailsCollapsed\"\n let-hideDetailsText=\"hideDetailsText\"\n>\n <bsu-barsa-table-row\n [mo]=\"mo\"\n [dirtyColumns]=\"mo.$DirtyColumns\"\n [isLastChildGroup]=\"mo.$IsLastChildGroup\"\n [moDataList]=\"moDataList\"\n [hideDetailsText]=\"hideDetailsText\"\n [detailsCollapsed]=\"detailsCollapsed\"\n [groupSummary]=\"groupSummary\"\n [UlvMainCtrlr]=\"UlvMainCtrlr\"\n [isMobile]=\"isMobile\"\n [showDetailsInRow]=\"showDetailsInRow\"\n [hideOpenIcon]=\"hideOpenIcon\"\n [showRowNumber]=\"contextView?.Grid_ShowRowNumber\"\n [rowNumber]=\"rowNumber\"\n [coloringRow]=\"viewSetting?.ColoringRow\"\n [disableEllapsis]=\"viewSetting?.DisableEllapsis\"\n [showViewButton]=\"showViewButton\"\n [detailsColumns]=\"detailsColumns\"\n [columnComponents]=\"viewSetting?.ColumnComponents || null\"\n [cartableTemplate]=\"cartableTemplate\"\n [cartableMo]=\"mo.RelatedMo\"\n [cartableWorkflowData]=\"mo.SerializedWorkflowData\"\n [serializedRelatedMo]=\"mo.SerializedRelatedMo\"\n [detailsText]=\"viewSetting?.DetailsSetting?.ButtonText\"\n [detailsComponent]=\"detailsComponent\"\n [isChecked]=\"mo.$IsChecked\"\n [visibility]=\"mo.$Visibility\"\n [expanded]=\"mo.$Expanded\"\n [styleIndex]=\"mo.$StyleIndex\"\n [level]=\"mo.$Level\"\n [parentExpanded]=\"mo.$Parent?.$Expanded\"\n [moDataListCount]=\"moDataListCount\"\n [columnsCount]=\"columnsCount - detailsColumns.length\"\n [typeDefId]=\"typeDefId\"\n [extraRelation]=\"extraRelation\"\n [formSetting]=\"formSetting\"\n [index]=\"index\"\n [setting]=\"viewSetting\"\n [checkboxComponent]=\"viewSetting?.CheckboxComponent\"\n [secondaryColumns]=\"\n secondaryColumns\n | filterColumnsByDetails: detailsColumns:false\n | filter: { IsPreview: false }\n | hideColumnsInmobile: viewSetting?.HideColumnsInMobile\n \"\n [columns]=\"\n columns\n | filterColumnsByDetails: detailsColumns:rowIndicator\n | filter: { IsPreview: false }\n | hideColumnsInmobile: viewSetting?.HideColumnsInMobile\n \"\n [isNewInlineMo]=\"mo.$NewInlineMo\"\n [access]=\"access\"\n [simpleInlineEdit]=\"simpleInlineEdit\"\n [noSaveInlineEditInServer]=\"simpleInlineEdit\"\n [actionList]=\"actionList\"\n [inlineEditMode]=\"inlineEditMode\"\n [allowInlineEdit]=\"allowInlineEdit\"\n [rtl]=\"rtl\"\n [deviceName]=\"deviceName\"\n [deviceSize]=\"deviceSize\"\n [allColumns]=\"allColumns\"\n [contextMenuItems]=\"contextMenuItems\"\n [canView]=\"canView\"\n [conditionalFormats]=\"conditionalFormats\"\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\n [navigationArrow]=\"navigationArrow\"\n [isCheckList]=\"isCheckList\"\n [rowIndicator]=\"rowIndicator\"\n [rowIndicatorColor]=\"rowIndicatorColor\"\n [previewColumn]=\"previewColumn\"\n (columnSummary)=\"columnSummary.emit($event)\"\n (resetWorkflowState)=\"resetWorkflowState.emit(mo)\"\n (escapeKey)=\"onEscapeKey($event)\"\n (expandClick)=\"onExpandClick($event)\"\n (rowCheck)=\"onRowCheck($event)\"\n (workflowShareButtons)=\"onWorkflowShareButtons($event)\"\n (deselectAll)=\"onDeselectAll()\"\n (rowClick)=\"onRowClick($event)\"\n (ulvCommand)=\"onUlvCommand($event)\"\n (actionListClick)=\"onActionListClick(mo, index, $event)\"\n (selectNextInlineRecord)=\"onSelectNextInlineRecord($event)\"\n (editFormPanelSave)=\"onEditFormPanelSave($event)\"\n (editFormPanelCancel)=\"onEditFormPanelCancel($event)\"\n (editFormPanelValueChange)=\"onEditFormPanelValueChange($event)\"\n (cartableFormClosed)=\"onCartableFormClosed($event)\"\n >\n </bsu-barsa-table-row>\n <!-- <div\n #rowBottom\n intersectionObserver\n [intersectionThreshold]=\"0.1\"\n (visibilityChange)=\"onRowVisibilityChange($event, index, rowBottom)\"\n ></div> -->\n</ng-template>\n<div #tableBottomObserve></div>\n", styles: [":host{display:block;width:100%;position:relative;padding-bottom:.2rem;overflow-x:auto;max-width:100vw}.table-fixed{table-layout:fixed}.table-fixed td{overflow:hidden}tr td{font-weight:inherit}::ng-deep span.fd-toolbar__spacer{display:none}.row-summary{position:relative}.row-summary .col-total-text{position:absolute;top:25%}\n"] }]
|
|
259
260
|
}], propDecorators: { _tableRef: [{
|
|
260
261
|
type: ViewChild,
|
|
261
262
|
args: ['tableTpl', { static: true, read: ElementRef }]
|
|
@@ -285,4 +286,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
|
|
|
285
286
|
type: HostBinding,
|
|
286
287
|
args: ['style.max-height']
|
|
287
288
|
}] } });
|
|
288
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktdGFibGUtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1zYXAtdWkvc3JjL2xpYi91aS10YWJsZS12aWV3L3VpLXRhYmxlLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktdGFibGUtdmlldy91aS10YWJsZS12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixXQUFXLEVBQ1gsS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUVILHVCQUF1QixFQUV2QixvQkFBb0IsRUFFcEIsb0JBQW9CLEVBQ3BCLG9CQUFvQixFQUNwQixrQ0FBa0MsRUFDbEMsdUJBQXVCLEVBQ3ZCLHNCQUFzQixFQUN0QixpQ0FBaUMsRUFDcEMsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQzs7Ozs7Ozs7QUFRL0YsTUFBTSxPQUFPLG9CQUNULFNBQVEsdUJBQTJDO0lBUHZEOztRQW9Cb0MsV0FBTSxHQUFrQixJQUFJLENBQUM7UUFDNUIsY0FBUyxHQUFrQixJQUFJLENBQUM7UUFDakUsV0FBTSxHQUFHLE1BQU0sQ0FBQztRQUdoQixxQkFBZ0IsR0FBbUUsRUFBRSxDQUFDO1FBRXRGLG9CQUFlLEdBQUcsb0JBQW9CLENBQUMsY0FBYyxDQUFDO1FBQ3RELGlCQUFZLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLHVCQUFrQixHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVu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WUFDWixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUN6QixDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDNUMsQ0FBQztRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDM0UsQ0FBQzs4R0E1UVEsb0JBQW9CO2tHQUFwQixvQkFBb0IseWdCQUlnQixVQUFVLG1GQUM1Qyx5QkFBeUIsNEZDekN4QyxtaWRBd1ZBOzsyRkRwVGEsb0JBQW9CO2tCQU5oQyxTQUFTOytCQUNJLG1CQUFtQixtQkFHWix1QkFBdUIsQ0FBQyxNQUFNOzhCQU1ZLFNBQVM7c0JBQW5FLFNBQVM7dUJBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUNuQixxQkFBcUI7c0JBQTFELFNBQVM7dUJBQUMseUJBQXlCO2dCQUMzQixXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUMwQixNQUFNO3NCQUFyQyxXQUFXO3VCQUFDLGlCQUFpQjtnQkFDRyxTQUFTO3NCQUF6QyxXQUFXO3VCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25Jbml0LFxuICAgIHNpZ25hbCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgICBNZXRhb2JqZWN0RGF0YU1vZGVsLFxuICAgIFJlcG9ydFZpZXdCYXNlQ29tcG9uZW50LFxuICAgIFJlcG9ydFZpZXdDb2x1bW4sXG4gICAgVGFibGVIZWFkZXJXaWR0aE1vZGUsXG4gICAgQ29sdW1uUmVzaXplZEFyZ3MsXG4gICAgY2FsY0NvbnRleHRNZW51V2lkdGgsXG4gICAgY2FsY3VsYXRlQ29sdW1uV2lkdGgsXG4gICAgY2FsY3VsYXRlQ29sdW1uV2lkdGhGaXRUb0NvbnRhaW5lcixcbiAgICBjYWxjdWxhdGVGcmVlQ29sdW1uU2l6ZSxcbiAgICBjYWxjdWxhdGVDb2x1bW5Db250ZW50LFxuICAgIHNldENvbHVtbldpZHRoQnlNYXhNb0NvbnRlbnRXaWR0aFxufSBmcm9tICdiYXJzYS1ub3Zpbi1yYXktY29yZSc7XG5pbXBvcnQgeyBVaVRhYmxlVmlld1NldHRpbmcgfSBmcm9tICcuLi9tb2RlbHMvZ3JpZC12aWV3JztcbmltcG9ydCB7IEJhcnNhVGFibGVIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuLi9iYXJzYS10YWJsZS1oZWFkZXIvYmFyc2EtdGFibGUtaGVhZGVyLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYnN1LXVpLXRhYmxlLXZpZXcnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi91aS10YWJsZS12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi91aS10YWJsZS12aWV3LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgVWlUYWJsZVZpZXdDb21wb25lbnRcbiAgICBleHRlbmRzIFJlcG9ydFZpZXdCYXNlQ29tcG9uZW50PFVpVGFibGVWaWV3U2V0dGluZz5cbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzXG57XG4gICAgQFZpZXdDaGlsZCgndGFibGVUcGwnLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogRWxlbWVudFJlZiB9KSBfdGFibGVSZWY6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZChCYXJzYVRhYmxlSGVhZGVyQ29tcG9uZW50KSBfdGFibGVIZWFkZXJDb21wb25lbnQ6IEJhcnNhVGFibGVIZWFkZXJDb21wb25lbnQ7XG4gICAgQElucHV0KCkgY29sdW1uV2lkdGg6IG51bWJlcjtcbiAgICBASW5wdXQoKSBtaW5XaWR0aDtcbiAgICBASW5wdXQoKSBtaW5IZWlnaHQ7XG4gICAgQElucHV0KCkgZGlzYWJsZVJlc2l6ZTtcbiAgICBASW5wdXQoKSBkaXNhYmxlSGVhZGVyQ29udGV4dE1lbnU7XG4gICAgQElucHV0KCkgcm93UmVzaXplcjtcbiAgICBASW5wdXQoKSBlbmFibGVSZXNpemluZztcbiAgICBASW5wdXQoKSBkaXNhYmxlRml4ZWRUYWJsZUxheW91dDtcbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLmhlaWdodC5weCcpIGhlaWdodDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5tYXgtaGVpZ2h0JykgbWF4SGVpZ2h0OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBfd2lkdGggPSAnMTAwJSc7XG4gICAgc2hvd0RldGFpbHNJblJvdzogYm9vbGVhbjtcbiAgICBoYXNSb3dPbGdvOiBib29sZWFuO1xuICAgIGNvbHVtbkNvbXBvbmVudHM6IHsgY29sdW1uOiBSZXBvcnRWaWV3Q29sdW1uOyBjb21wb25lbnQ6IE1ldGFvYmplY3REYXRhTW9kZWwgfVtdID0gW107XG4gICAgcm93SW5kaWNhdG9yOiBib29sZWFuO1xuICAgIHRhYmxlSGVhZGVyTW9kZSA9IFRhYmxlSGVhZGVyV2lkdGhNb2RlLkZpdFRvQ29udGFpbmVyO1xuICAgIHN0aWNreUVuYWJsZSA9IHNpZ25hbChmYWxzZSk7XG4gICAgcm93VmlzaWJpbHR5Q2hhbmdlID0gc2lnbmFsKGZhbHNlKTtcbiAgICB0YWJsZUhlYWRlckRvbTogSFRNTEVsZW1lbnQ7XG4gICAgX2hlYWRlclRvcCQgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gICAgcm93VmlzaWJsZSQgPSBuZXcgU3ViamVjdDx7IGluZGV4OyBkb20gfT4oKTtcbiAgICBfaXNQYXJlbnRXaWR0aFNldCA9IGZhbHNlO1xuICAgIHRhYmxlSGVhZGVyVG9wID0gMDtcbiAgICB0YWJsZUhlYWRlckhlaWdodCA9IDA7XG4gICAgaGVhZGVyT2JzZXJ2ZXJEb206IEhUTUxFbGVtZW50O1xuICAgIG5vdFZpc2libGVJdGVtczogbnVtYmVyW10gPSBbXTtcbiAgICB2aXNpYmxlSXRlbXM6IG51bWJlcltdID0gW107XG4gICAgb2xkV2lkdGggPSAwO1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICBjb25zdCB4ID0gTWF0aC5mbG9vcih0aGlzLl9lbC5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpO1xuICAgICAgICBpZiAoeCkge1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIyLnNldFN0eWxlKHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQsICd3aWR0aCcsIGAke3ggLSAxMH1weGApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3BvcnRhbFNlcnZpY2Uud2luZG93UmVzaXplJC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHggPSBNYXRoLmZsb29yKHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQucGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCk7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlcjIuc2V0U3R5bGUodGhpcy5fdGFibGVSZWYubmF0aXZlRWxlbWVudCwgJ3dpZHRoJywgeCArICdweCcpO1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIyLnNldFN0eWxlKHRoaXMuX3RhYmxlUmVmLm5hdGl2ZUVsZW1lbnQsICdtYXgtd2lkdGgnLCB4ICsgJ3B4Jyk7XG4gICAgICAgICAgICB0aGlzLl9yZWZyZXNoVGhXaWR0aCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5oYXNSb3dPbGdvID0gdGhpcy52aWV3U2V0dGluZz8uUm93T2xnbz8uU2VsZWN0b3I7XG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gdGhpcy52aWV3U2V0dGluZz8uQm9keUhlaWdodDtcbiAgICAgICAgdGhpcy5fc2V0SGFzU3VtbWVyeSh0aGlzLmNhcnRhYmxlQ2hpbGRzTW8pO1xuICAgICAgICB0aGlzLl9zZXRIZWlnaHQodGhpcy5wYXJlbnRIZWlnaHQpO1xuICAgICAgICB0aGlzLl9zZXRXaWR0aCgpO1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVDb2x1bW5zV2lkdGgodGhpcy5tb0RhdGFMaXN0LCB0aGlzLmNvbHVtbnMpO1xuICAgICAgICB0aGlzLnRhYmxlSGVhZGVyTW9kZSA9IHRoaXMuZ3JpZEZyZWVDb2x1bW5TaXppbmdcbiAgICAgICAgICAgID8gVGFibGVIZWFkZXJXaWR0aE1vZGUuRnJlZUNvbHVtblNpemVcbiAgICAgICAgICAgIDogVGFibGVIZWFkZXJXaWR0aE1vZGUuRml0VG9Db250YWluZXI7XG4gICAgICAgIHRoaXMuX2NhbGNDb250ZXh0TWVudVdpZHRoKHRoaXMuY29udGV4dE1lbnVJdGVtcyk7XG4gICAgfVxuICAgIF9jYWxjQ29udGV4dE1lbnVXaWR0aChjb250ZXh0TWVudUl0ZW1zKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29udGV4dE1lbnVXaWR0aCA9IGNhbGNDb250ZXh0TWVudVdpZHRoKGNvbnRleHRNZW51SXRlbXMsIHRoaXMuZGlzYWJsZU92ZXJmbG93Q29udGV4dE1lbnUpO1xuICAgIH1cbiAgICBvblRhYmxlVmlzaWJpbGl0eUNoYW5nZShlLCBkb20pOiB2b2lkIHtcbiAgICAgICAgaWYgKGUgPT09ICdWaXNpYmxlJykge1xuICAgICAgICAgICAgdGhpcy5fc2V0V2lkdGgodHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgY2FydGFibGVUZW1wbGF0ZXMsIHBhcmVudEhlaWdodCwgY29udGV4dE1lbnVJdGVtcywgY29sdW1uc0NvdW50LCBjb2x1bW5zLCBzZWNvbmRhcnlDb2x1bW5zIH0gPSBjaGFuZ2VzO1xuICAgICAgICBpZiAoY29udGV4dE1lbnVJdGVtcyAmJiAhY29udGV4dE1lbnVJdGVtcy5maXJzdENoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5fY2FsY0NvbnRleHRNZW51V2lkdGgoY29udGV4dE1lbnVJdGVtcy5jdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FydGFibGVUZW1wbGF0ZXMgJiYgIWNhcnRhYmxlVGVtcGxhdGVzLmZpcnN0Q2hhbmdlICYmICF0aGlzLmhhc1N1bW1hcnkpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldEhhc1N1bW1lcnkoY2FydGFibGVUZW1wbGF0ZXMuY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGNvbHVtbnNDb3VudCAmJiAhY29sdW1uc0NvdW50LmZpcnN0Q2hhbmdlKSB8fCAoc2Vjb25kYXJ5Q29sdW1ucyAmJiAhc2Vjb25kYXJ5Q29sdW1ucy5maXJzdENoYW5nZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNvbHVtbnNXaWR0aCh0aGlzLm1vRGF0YUxpc3QsIGNvbHVtbnMuY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyZW50SGVpZ2h0ICYmICFwYXJlbnRIZWlnaHQuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldEhlaWdodChwYXJlbnRIZWlnaHQuY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcbiAgICB9XG4gICAgb25Db2x1bW5SZXNpemluZyhlOiB7IGNvbHVtbjogUmVwb3J0Vmlld0NvbHVtbjsgd2lkdGg6IG51bWJlciB9KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlSGVhZGVyQ29tcG9uZW50LlNldENvbHVtbldpZHRoVG9UaFdpZHRoKCk7XG4gICAgICAgIHRoaXMuX3NldFBhcmVudFdpZHRoKCk7XG4gICAgfVxuICAgIG9uQ29sdW1uUmVzaXplZChhcnI6IEFycmF5PENvbHVtblJlc2l6ZWRBcmdzPik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWNvbmRhcnlDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudGFibGVIZWFkZXJNb2RlID09PSBUYWJsZUhlYWRlcldpZHRoTW9kZS5GcmVlQ29sdW1uU2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5fdGFibGVIZWFkZXJDb21wb25lbnQuU2V0Q29sdW1uV2lkdGhUb1RoV2lkdGgoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlSGVhZGVyQ29tcG9uZW50LlNldENvbHVtbldpZHRoVG9QZXJjZW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdGFibGVIZWFkZXJDb21wb25lbnQuUmVmcmVzaFRhYmxlVGhXaWR0aCgpO1xuICAgICAgICB0aGlzLnJlc2l6ZWRCeVVzZXIgPSB0cnVlO1xuXG4gICAgICAgIC8vIHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZShsYXN0VGgsICd3aWR0aCcsIGAxMDAlYCk7XG4gICAgICAgIHRoaXMuY29sdW1uUmVzaXplZC5lbWl0KHsgY29sdW1uczogdGhpcy5jb2x1bW5zLCByZXNpemVkOiBhcnIgfSk7XG4gICAgfVxuICAgIG9uRml0VG9Db250YWluZXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGFibGVIZWFkZXJNb2RlID0gVGFibGVIZWFkZXJXaWR0aE1vZGUuRml0VG9Db250YWluZXI7XG4gICAgICAgIHRoaXMuX3NldFBhcmVudFdpZHRoRml0KCk7XG4gICAgICAgIHRoaXMuX3RhYmxlSGVhZGVyQ29tcG9uZW50LlNldENvbHVtbldpZHRoVG9QZXJjZW50KCk7XG4gICAgICAgIC8vIHRoaXMuX3JlZnJlc2hUaFdpZHRoKCk7XG4gICAgICAgIC8vIHRoaXMuX2ZpcmVSZXNpemVDaGFuZ2VkKCk7XG4gICAgfVxuICAgIG9uRnJlZUNvbHVtblNpemluZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50YWJsZUhlYWRlck1vZGUgPSBUYWJsZUhlYWRlcldpZHRoTW9kZS5GcmVlQ29sdW1uU2l6ZTtcbiAgICAgICAgdGhpcy5fdGFibGVIZWFkZXJDb21wb25lbnQuU2V0Q29sdW1uV2lkdGhUb1RoV2lkdGgoKTtcbiAgICAgICAgdGhpcy5fc2V0UGFyZW50V2lkdGhGaXRUb09mZnNldFdpZHRoKCk7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNvbHVtbnNXaWR0aCh0aGlzLm1vRGF0YUxpc3QsIHRoaXMuY29sdW1ucyk7XG4gICAgfVxuICAgIG9uRml0VG9Db250ZW50KGU6IHsgY29sdW1uOiBSZXBvcnRWaWV3Q29sdW1uOyB0aERvbTogSFRNTFRhYmxlQ2VsbEVsZW1lbnQgfSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IGNvbHVtbiwgdGhEb20gfSA9IGU7XG4gICAgICAgIHRoaXMudGFibGVIZWFkZXJNb2RlID0gVGFibGVIZWFkZXJXaWR0aE1vZGUuRnJlZUNvbHVtblNpemU7XG4gICAgICAgIHNldENvbHVtbldpZHRoQnlNYXhNb0NvbnRlbnRXaWR0aCh0aGlzLm1vRGF0YUxpc3QsIGNvbHVtbik7XG4gICAgICAgIGNvbHVtbi4kV2lkdGggPSBjb2x1bW4uJENvbnRlbnRXaWR0aDtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIyLnNldFN0eWxlKHRoRG9tLCAnd2lkdGgnLCBjb2x1bW4uJFdpZHRoKTtcbiAgICAgICAgdGhpcy5fZmlyZVJlc2l6ZUNoYW5nZWQoKTtcbiAgICB9XG5cbiAgICBvblNldFRhYmxlSGVhZGVyRG9tKGRvbSk6IHZvaWQge1xuICAgICAgICB0aGlzLnRhYmxlSGVhZGVyRG9tID0gZG9tO1xuICAgICAgICBjb25zdCByZWN0ID0gZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICB0aGlzLnRhYmxlSGVhZGVyVG9wID0gcmVjdC50b3A7XG4gICAgICAgIHRoaXMudGFibGVIZWFkZXJIZWlnaHQgPSByZWN0LmhlaWdodDtcbiAgICB9XG4gICAgb25IZWFkZXJWaXNpYmlsaXR5Q2hhbmdlKGUsIGRvbSk6IHZvaWQge1xuICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuaGVhZGVyT2JzZXJ2ZXJEb20gPSBkb207XG4gICAgICAgIGlmIChlID09PSAnTm90VmlzaWJsZScpIHtcbiAgICAgICAgICAgIHRoaXMuc3RpY2t5RW5hYmxlLnNldCh0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3RpY2t5RW5hYmxlLnNldChmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblJvd1Zpc2liaWxpdHlDaGFuZ2UoZSwgaW5kZXgsIGRvbSk6IHZvaWQge1xuICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChlICE9PSAnUGVuZGluZycpIHtcbiAgICAgICAgICAgIGlmIChlID09PSAnTm90VmlzaWJsZScpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy52aXNpYmxlSXRlbXMuaW5kZXhPZihpbmRleCkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93VmlzaWJsZSQubmV4dCh7IGluZGV4LCBkb20gfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlzaWJsZUl0ZW1zID0gdGhpcy52aXNpYmxlSXRlbXMuZmlsdGVyKChjKSA9PiBjICE9PSBpbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMubm90VmlzaWJsZUl0ZW1zLnB1c2goaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUgPT09ICdWaXNpYmxlJykge1xuICAgICAgICAgICAgICAgIHRoaXMubm90VmlzaWJsZUl0ZW1zID0gdGhpcy5ub3RWaXNpYmxlSXRlbXMuZmlsdGVyKChjKSA9PiBjICE9PSBpbmRleCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnZpc2libGVJdGVtcy5wdXNoKGluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRoaXMucm93VmlzaWJsZSQubmV4dCh7IGluZGV4LCBkb20gfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJpdmF0ZSBfc2V0UGFyZW50V2lkdGhGaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLl9lbC5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGUsICd3aWR0aCcsIGAxMDAlYCk7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLl90YWJsZVJlZi5uYXRpdmVFbGVtZW50LCAnbWluLXdpZHRoJywgYDEwMCVgKTtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIyLnNldFN0eWxlKHRoaXMuX3RhYmxlUmVmLm5hdGl2ZUVsZW1lbnQsICd3aWR0aCcsIGAxMDAlYCk7XG4gICAgfVxuICAgIHByaXZhdGUgX3NldFBhcmVudFdpZHRoRml0VG9PZmZzZXRXaWR0aCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeDEgPSBNYXRoLmZsb29yKHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQucGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCk7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLl9lbC5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGUsICd3aWR0aCcsIGAke3gxfXB4YCk7XG4gICAgICAgIGNvbnN0IHggPSBNYXRoLmZsb29yKHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgpO1xuICAgICAgICB0aGlzLl9yZW5kZXJlcjIuc2V0U3R5bGUodGhpcy5fdGFibGVSZWYubmF0aXZlRWxlbWVudCwgJ21pbi13aWR0aCcsIGAke3h9cHhgKTtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIyLnNldFN0eWxlKHRoaXMuX3RhYmxlUmVmLm5hdGl2ZUVsZW1lbnQsICd3aWR0aCcsIGAke3h9cHhgKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfc2V0UGFyZW50V2lkdGgoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHggPSBNYXRoLmZsb29yKHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQucGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCk7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLl9lbC5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGUsICd3aWR0aCcsIGAke3h9cHhgKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfcmVmcmVzaFRoV2lkdGgoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNvbHVtbnNXaWR0aCh0aGlzLm1vRGF0YUxpc3QsIHRoaXMuY29sdW1ucyk7XG4gICAgICAgIHRoaXMuX3RhYmxlSGVhZGVyQ29tcG9uZW50Py5SZWZyZXNoVGFibGVUaFdpZHRoKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX3NldFdpZHRoKHNldFdpZHRoPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCB3aWR0aE9mRG9tID0gTWF0aC5mbG9vcih0aGlzLl9lbC5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpO1xuICAgICAgICBjb25zb2xlLmxvZyh3aWR0aE9mRG9tKTtcblxuICAgICAgICBpZiAod2lkdGhPZkRvbSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh3aWR0aE9mRG9tICE9PSB0aGlzLm9sZFdpZHRoKSB7XG4gICAgICAgICAgICB0aGlzLl9yZWZyZXNoVGhXaWR0aCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub2xkV2lkdGggPSB3aWR0aE9mRG9tO1xuICAgICAgICBjb25zdCB3aWR0aE9mRG9tMiA9IE1hdGguZmxvb3IodGhpcy5fZWwubmF0aXZlRWxlbWVudC5wYXJlbnROb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKTtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIyLnNldFN0eWxlKHRoaXMuX3RhYmxlUmVmLm5hdGl2ZUVsZW1lbnQsICdtYXgtd2lkdGgnLCB3aWR0aE9mRG9tMiAtIDEwICsgJ3B4Jyk7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLl90YWJsZVJlZi5uYXRpdmVFbGVtZW50LCAnd2lkdGgnLCB3aWR0aE9mRG9tMiAtIDEwICsgJ3B4Jyk7XG4gICAgfVxuICAgIHByaXZhdGUgX2NhbGN1bGF0ZUhlYWRlclN0aWNreVRvcChkb206IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnN0aWNreUVuYWJsZSgpICYmIHRoaXMudGFibGVIZWFkZXJEb20pIHtcbiAgICAgICAgICAgIC8vIGNvbnN0IHJlYyA9IHRoaXMuaGVhZGVyT2JzZXJ2ZXJEb20uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAvLyBjb25zdCB0b3AgPSByZWMudG9wO1xuICAgICAgICAgICAgLy8gY29uc3QgY2FsYyA9IHRoaXMudGFibGVIZWFkZXJUb3AgLSB0b3AgLSB0aGlzLnRhYmxlSGVhZGVySGVpZ2h0ICsgJ3B4JztcbiAgICAgICAgICAgIGNvbnN0IHJlYyA9IGRvbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICAgICAgdGhpcy5faGVhZGVyVG9wJC5uZXh0KHJlYy50b3AgLSAxMiArIHRoaXMudGFibGVIZWFkZXJIZWlnaHQgKyAncHgnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBfZmlyZVJlc2l6ZUNoYW5nZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29sdW1uUmVzaXplZC5lbWl0KHtcbiAgICAgICAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1ucyxcbiAgICAgICAgICAgIHJlc2l6ZWQ6IHRoaXMuY29sdW1ucy5tYXAoKGMpID0+ICh7IG5hbWU6IGMuTmFtZSwgd2lkdGg6IGMuV2lkdGggfSkpXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2NhbGN1bGF0ZUNvbHVtbnNXaWR0aChtb0RhdGFMaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10sIGNvbHVtbnM6IFJlcG9ydFZpZXdDb2x1bW5bXSk6IHZvaWQge1xuICAgICAgICBzd2l0Y2ggKHRoaXMudGFibGVIZWFkZXJNb2RlKSB7XG4gICAgICAgICAgICBjYXNlIFRhYmxlSGVhZGVyV2lkdGhNb2RlLkZyZWVDb2x1bW5TaXplOlxuICAgICAgICAgICAgICAgIHRoaXMuX2ZyZWVDb2x1bW5TaXplKG1vRGF0YUxpc3QsIGNvbHVtbnMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBUYWJsZUhlYWRlcldpZHRoTW9kZS5GaXRUb1Jvd0NvbnRlbnQ6XG4gICAgICAgICAgICAgICAgdGhpcy5fZml0VG9Sb3dDb250ZW50Q29sdW1uKG1vRGF0YUxpc3QsIGNvbHVtbnMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBUYWJsZUhlYWRlcldpZHRoTW9kZS5GaXRUb0NvbnRhaW5lcjpcbiAgICAgICAgICAgICAgICB0aGlzLl9maXRUb0NvbnRhaW5lcihtb0RhdGFMaXN0LCBjb2x1bW5zKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2ZpdFRvQ29sdW1uKG1vRGF0YUxpc3QsIGNvbHVtbnMpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWxEb20gPSB0aGlzLl9lbC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjYWxjdWxhdGVDb2x1bW5XaWR0aChlbERvbSwgY29sdW1ucywgbW9EYXRhTGlzdCwgdGhpcy5kaXNhYmxlT3ZlcmZsb3dDb250ZXh0TWVudSwgdGhpcy5jb250ZXh0TWVudUl0ZW1zKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9maXRUb1Jvd0NvbnRlbnRDb2x1bW4obW9EYXRhTGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdLCBjb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW10pOiB2b2lkIHtcbiAgICAgICAgY2FsY3VsYXRlQ29sdW1uQ29udGVudChjb2x1bW5zLCBtb0RhdGFMaXN0KTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9maXRUb0NvbnRhaW5lcihtb0RhdGFMaXN0LCBjb2x1bW5zKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVsRG9tID0gdGhpcy5fZWwubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjYWxjdWxhdGVDb2x1bW5XaWR0aEZpdFRvQ29udGFpbmVyKFxuICAgICAgICAgICAgZWxEb20sXG4gICAgICAgICAgICB0aGlzLmNhblZpZXcsXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVIZWFkZXJDb250ZXh0TWVudSxcbiAgICAgICAgICAgIHRoaXMuY29udGV4dE1lbnVJdGVtcyxcbiAgICAgICAgICAgIHRoaXMuY29sdW1uc1xuICAgICAgICApO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2ZyZWVDb2x1bW5TaXplKG1vRGF0YUxpc3QsIGNvbHVtbnMpOiB2b2lkIHtcbiAgICAgICAgY2FsY3VsYXRlRnJlZUNvbHVtblNpemUodGhpcy5jb2x1bW5zKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9zZXRIZWlnaHQocGFyZW50SGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaW5EaWFsb2cpIHtcbiAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gcGFyZW50SGVpZ2h0O1xuICAgICAgICB9XG4gICAgfVxuICAgIHByb3RlY3RlZCBfc2V0SGFzU3VtbWVyeShjYXJ0YWJsZVRlbXBsYXRlcyk6IHZvaWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmRldGFpbHNDb2x1bW5zPy5sZW5ndGggPiAwIHx8XG4gICAgICAgICAgICB0aGlzLmRldGFpbHNDb21wb25lbnQ/LlNlbGVjdG9yIHx8XG4gICAgICAgICAgICAoY2FydGFibGVUZW1wbGF0ZXMgJiYgT2JqZWN0LmtleXMoY2FydGFibGVUZW1wbGF0ZXMpLmxlbmd0aCA+IDApXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5zaG93RGV0YWlsc0luUm93ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaGFzRGV0YWlsc0luUm93LmVtaXQodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhhc0RldGFpbHNJblJvdy5lbWl0KGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2NvbnRhaW5lcldpZHRoQ2hhbmdlZCh2YWw6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodmFsID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9ICcxMDAlJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsID8gdmFsICsgJ3B4JyA6ICcxMDAlJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yZW5kZXJlcjIuc2V0U3R5bGUodGhpcy5fZWwubmF0aXZlRWxlbWVudCwgJ3dpZHRoJywgdGhpcy5fd2lkdGgpO1xuICAgIH1cbn1cbiIsIjx0YWJsZVxuICAgIGZkLXRhYmxlXG4gICAgI3RhYmxlVHBsXG4gICAgI2hlYWRlckJvdHRvbU9ic2VydmVyXG4gICAgaW50ZXJzZWN0aW9uT2JzZXJ2ZXJcbiAgICBbaW50ZXJzZWN0aW9uVGhyZXNob2xkXT1cIjAuMVwiXG4gICAgKHZpc2liaWxpdHlDaGFuZ2UpPVwib25UYWJsZVZpc2liaWxpdHlDaGFuZ2UoJGV2ZW50LCBoZWFkZXJCb3R0b21PYnNlcnZlcilcIlxuICAgIFtwb3BJbl09XCJwb3BpblwiXG4gICAgW2NsYXNzLnRhYmxlLWZpeGVkXT1cIlxuICAgICAgICAhY29udGV4dFZpZXc/LkdyaWRfSGlkZUhlYWRlciAmJiAoIXBvcGluIHx8IHNlY29uZGFyeUNvbHVtbnMubGVuZ3RoID09PSAwKSAmJiAhZGlzYWJsZUZpeGVkVGFibGVMYXlvdXRcbiAgICBcIlxuICAgIFtub0JvcmRlclhdPVwidmlld1NldHRpbmc/Lk5vSG9yaXp0b25hbEJvcmRlcnMgPT09IHRydWVcIlxuICAgIFtub0JvcmRlclldPVwidmlld1NldHRpbmc/Lk5vVmVydGljYWxCb3JkZXJzID09PSB0cnVlIHx8IChwb3BpbiAmJiBzZWNvbmRhcnlDb2x1bW5zLmxlbmd0aCA+IDApXCJcbj5cbiAgICBAaWYgKGNvbHVtbnMgfCBtZXJnZUZpZWxkc1RvQ29sdW1uczogdmlld1NldHRpbmc/Lk1lcmdlRmllbGRzVG9Db2x1bW5zPy5Nb0RhdGFMaXN0OyBhcyBtZXJnZUZpZWxkc1RvQ29sdW1ucykge1xuICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIGhlYWRlclRlbXBsYXRlO1xuICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IG1lcmdlRmllbGRzVG9Db2x1bW5zLCBtb0RhdGFMaXN0Q291bnQ6IG1vRGF0YUxpc3Q/Lmxlbmd0aCB9XG4gICAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIEBpZiAobW9EYXRhTGlzdD8ubGVuZ3RoKSB7XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgYm9keVRlbXBsYXRlO1xuICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IG1lcmdlRmllbGRzVG9Db2x1bW5zLCBwcmV2aWV3Q29sdW1uOiBhbGxDb2x1bW5zIHwgZmluZFByZXZpZXdDb2x1bW4gfVxuICAgICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9vdGVyVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBtZXJnZUZpZWxkc1RvQ29sdW1ucyB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgfSB9XG48L3RhYmxlPlxuPCEtLXJlbmRlckNvbHVtbi0tPlxuXG5AaWYgKCFtb0RhdGFMaXN0Py5sZW5ndGgpIHtcbjxic3Utbm8tZGF0YVxuICAgIFtjbGFzcy5uby10b3Bib3JkZXJdPVwiIWhpZGVUb29sYmFyXCJcbiAgICBbY2xhc3Mubm9ib3JkZXJdPVwiY29udGV4dFZpZXcuR3JpZF9IaWRlSGVhZGVyICYmIGhpZGVUb29sYmFyXCJcbiAgICBbc2ltcGxlXT1cInRydWVcIlxuPlxuPC9ic3Utbm8tZGF0YT5cbn1cblxuPG5nLXRlbXBsYXRlICNoZWFkZXJUZW1wbGF0ZSBsZXQtY29sdW1ucyBsZXQtbW9EYXRhTGlzdENvdW50PlxuICAgIDxic3UtYmFyc2EtdGFibGUtaGVhZGVyXG4gICAgICAgIFtzdGlja3ldPVwic3RpY2t5RW5hYmxlKClcIlxuICAgICAgICBbaGFzU2Vjb25kYXJ5Q29sdW1uc109XCJzZWNvbmRhcnlDb2x1bW5zLmxlbmd0aCA+IDBcIlxuICAgICAgICBbY2xhc3MuaGFzLXRvb2xiYXJdPVwiIWhpZGVUb29sYmFyXCJcbiAgICAgICAgW3N0eWxlLnBvaW50ZXItZXZlbnRzXT1cIm1vRGF0YUxpc3RDb3VudCA/ICdhdXRvJyA6ICdub25lJ1wiXG4gICAgICAgIFt0YWJsZVdpZHRoXT1cImVsV2lkdGhcIlxuICAgICAgICBbc2hvd0RldGFpbHNJblJvd109XCJzaG93RGV0YWlsc0luUm93XCJcbiAgICAgICAgW2hpZGVPcGVuSWNvbl09XCJoaWRlT3Blbkljb25cIlxuICAgICAgICBbcmVzaXplZEJ5VXNlcl09XCJyZXNpemVkQnlVc2VyXCJcbiAgICAgICAgW3RhYmxlSGVhZGVyTW9kZV09XCJ0YWJsZUhlYWRlck1vZGVcIlxuICAgICAgICBbc2hvd1Jvd051bWJlcl09XCJjb250ZXh0Vmlldz8uR3JpZF9TaG93Um93TnVtYmVyXCJcbiAgICAgICAgW2FsbENoZWNrZWRdPVwiYWxsQ2hlY2tlZFwiXG4gICAgICAgIFtydGxdPVwicnRsXCJcbiAgICAgICAgW2FjdGlvbkxpc3RdPVwiYWN0aW9uTGlzdFwiXG4gICAgICAgIFtkaXNhYmxlUmVzcG9uc2l2ZV09XCJkaXNhYmxlUmVzcG9uc2l2ZVwiXG4gICAgICAgIFtpc0NoZWNrTGlzdF09XCJpc0NoZWNrTGlzdFwiXG4gICAgICAgIFtjb2x1bW5zXT1cIlxuICAgICAgICAgICAgY29sdW1uc1xuICAgICAgICAgICAgICAgIHwgZmlsdGVyQ29sdW1uc0J5RGV0YWlsczogZGV0YWlsc0NvbHVtbnM6cm93SW5kaWNhdG9yXG4gICAgICAgICAgICAgICAgfCBmaWx0ZXI6IHsgSXNQcmV2aWV3OiBmYWxzZSB9XG4gICAgICAgICAgICAgICAgfCBoaWRlQ29sdW1uc0lubW9iaWxlOiB2aWV3U2V0dGluZz8uSGlkZUNvbHVtbnNJbk1vYmlsZVxuICAgICAgICBcIlxuICAgICAgICBbZml0V2lkdGhdPVwiZml0V2lkdGhcIlxuICAgICAgICBbZGlzYWJsZU92ZXJmbG93Q29udGV4dE1lbnVdPVwiZGlzYWJsZU92ZXJmbG93Q29udGV4dE1lbnVcIlxuICAgICAgICBbaW5saW5lRWRpdE1vZGVdPVwiaW5saW5lRWRpdE1vZGVcIlxuICAgICAgICBbY29udGV4dE1lbnVJdGVtc109XCJjb250ZXh0TWVudUl0ZW1zXCJcbiAgICAgICAgW2NvbnRleHRNZW51V2lkdGhdPVwiY29udGV4dE1lbnVXaWR0aFwiXG4gICAgICAgIFtzaG93Vmlld0J1dHRvbl09XCJzaG93Vmlld0J1dHRvblwiXG4gICAgICAgIFtkZXZpY2VTaXplXT1cImRldmljZVNpemVcIlxuICAgICAgICBbdmlld1NldHRpbmddPVwidmlld1NldHRpbmdcIlxuICAgICAgICBbaGlkZUhlYWRlcl09XCJjb250ZXh0Vmlldy5HcmlkX0hpZGVIZWFkZXJcIlxuICAgICAgICBbcm93SW5kaWNhdG9yXT1cInJvd0luZGljYXRvclwiXG4gICAgICAgIFtkaXNhYmxlUmVzaXplXT1cImRpc2FibGVSZXNpemVcIlxuICAgICAgICBbZGlzYWJsZUhlYWRlckNvbnRleHRNZW51XT1cImRpc2FibGVIZWFkZXJDb250ZXh0TWVudVwiXG4gICAgICAgIChoZWFkZXJSZW5kZXIpPVwib25TZXRUYWJsZUhlYWRlckRvbSgkZXZlbnQpXCJcbiAgICAgICAgKGNvbHVtblJlc2l6ZSk9XCJvbkNvbHVtblJlc2l6ZWQoJGV2ZW50KVwiXG4gICAgICAgIChjb2x1bW5SZXNpemluZyk9XCJvbkNvbHVtblJlc2l6aW5nKCRldmVudClcIlxuICAgICAgICAoZml0VG9Db250ZW50KT1cIm9uRml0VG9Db250ZW50KCRldmVudClcIlxuICAgICAgICAoZml0VG9Db250YWluZXIpPVwib25GaXRUb0NvbnRhaW5lcigpXCJcbiAgICAgICAgKGZyZWVDb2x1bW5TaXplKT1cIm9uRnJlZUNvbHVtblNpemluZygpXCJcbiAgICAgICAgKGFsbENoZWNrYm94KT1cIm9uQWxsQ2hlY2tib3goJGV2ZW50KVwiXG4gICAgICAgIChzb3J0QXNjZW5kaW5nKT1cIm9uU29ydEFzY2VuZGluZygkZXZlbnQpXCJcbiAgICAgICAgKHNvcnREZXNjZW5kaW5nKT1cIm9uU29ydERlc2NlbmRpbmcoJGV2ZW50KVwiXG4gICAgICAgIChmaWx0ZXIpPVwib25GaWx0ZXIoJGV2ZW50KVwiXG4gICAgICAgIChyZXNldEdyaWRTZXR0aW5ncyk9XCJyZXNldEdyaWRTZXR0aW5ncy5lbWl0KClcIlxuICAgID48L2JzdS1iYXJzYS10YWJsZS1oZWFkZXI+XG4gICAgPCEtLSA8ZGl2XG4gICAgICAgICNoZWFkZXJCb3R0b21PYnNlcnZlclxuICAgICAgICBpbnRlcnNlY3Rpb25PYnNlcnZlclxuICAgICAgICBbaW50ZXJzZWN0aW9uVGhyZXNob2xkXT1cIjAuMVwiXG4gICAgICAgICh2aXNpYmlsaXR5Q2hhbmdlKT1cIm9uSGVhZGVyVmlzaWJpbGl0eUNoYW5nZSgkZXZlbnQsIGhlYWRlckJvdHRvbU9ic2VydmVyKVwiXG4gICAgPjwvZGl2PiAtLT5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2JvZHlUZW1wbGF0ZSBsZXQtY29sdW1ucyBsZXQtcHJldmlld0NvbHVtbj1cInByZXZpZXdDb2x1bW5cIj5cbiAgICA8dGJvZHlcbiAgICAgICAgI2JvZHlcbiAgICAgICAgZmQtdGFibGUtYm9keVxuICAgICAgICBbY2xhc3Mubm9ib3JkZXJdPVwidmlld1NldHRpbmc/Lk5vQm9keUJvcmRlcnMgPT09IHRydWVcIlxuICAgICAgICBbbm9Cb3JkZXJYXT1cInZpZXdTZXR0aW5nPy5Ob0hvcml6dG9uYWxCb3JkZXJzID09PSB0cnVlIHx8IHByZXZpZXdDb2x1bW5cIlxuICAgICAgICBbbm9Cb3JkZXJZXT1cIihwb3BpbiAmJiBzZWNvbmRhcnlDb2x1bW5zLmxlbmd0aCA+IDApIHx8IHByZXZpZXdDb2x1bW5cIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIEBmb3IgKG1vIG9mIG1vRGF0YUxpc3QgfCBtdWx0aXBsZUdyb3VwQnk6IGdyb3VwYnk7IHRyYWNrIF90cmFja0J5Um93KGluZGV4LCBtbyk7IGxldCBpbmRleCA9ICRpbmRleCkge1xuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgIGhhc1Jvd09sZ28gPyByb3dPbGdvVGVtcGxhdGUgOiByb3dUZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBtbyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd051bWJlcjogbW8uSWQgfCByb3dOdW1iZXI6IHBhZ2luZ1NldHRpbmc6bW9EYXRhTGlzdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd0luZGljYXRvckNvbG9yOiAhY29sdW1ucy5sZW5ndGggPyAnJyA6IChjb2x1bW5zWzBdLkNhcHRpb24gfCBydmFsOiBtbzpjb2x1bW5zKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnM6IGNvbHVtbnMgfCBjb2x1bW5DdXN0b21Db21wb25lbnQ6IHZpZXdTZXR0aW5nPy5Db2x1bW5Db21wb25lbnRzPy5Nb0RhdGFMaXN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kYXJ5Q29sdW1uczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRhcnlDb2x1bW5zIHwgY29sdW1uQ3VzdG9tQ29tcG9uZW50OiB2aWV3U2V0dGluZz8uQ29sdW1uQ29tcG9uZW50cz8uTW9EYXRhTGlzdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vRGF0YUxpc3Q6IG1vRGF0YUxpc3QsXG4gICAgICAgICAgICAgICAgICAgICAgICBtb0RhdGFMaXN0Q291bnQ6IG1vRGF0YUxpc3QubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FydGFibGVUZW1wbGF0ZTogY2FydGFibGVUZW1wbGF0ZXNbbW8uUmVsYXRlZE1vPy4kVHlwZURlZklkICsgJ0AnICsgbW8uQ2FydGFibGVTZXR0aW5ncz8uSWRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlld0NvbHVtbjogcHJldmlld0NvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHNDb2xsYXBzZWQ6IHZpZXdTZXR0aW5nPy5EZXRhaWxzU2V0dGluZz8uRGV0YWlsc0NvbGxhcHNlZCA9PT0gdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVEZXRhaWxzVGV4dDogdmlld1NldHRpbmc/LkRldGFpbHNTZXR0aW5nPy5IaWRlRGV0YWlsc1RleHQgPT09IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvdGJvZHk+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNmb290ZXJUZW1wbGF0ZSBsZXQtY29sdW1ucz5cbiAgICBAaWYgKGhhc1N1bW1hcnkpIHtcbiAgICA8dGZvb3QgZmQtdGFibGUtZm9vdGVyPlxuICAgICAgICA8dHIgZmQtdGFibGUtcm93IGNsYXNzPVwicm93LXN1bW1hcnlcIj5cbiAgICAgICAgICAgIEBpZiAoaXNDaGVja0xpc3QpIHtcbiAgICAgICAgICAgIDx0ZCBmZC10YWJsZS1jZWxsIGNvbHVtblJlc2l6ZXI+XG4gICAgICAgICAgICAgICAgPHN0cm9uZyBjbGFzcz1cImNvbC10b3RhbC10ZXh0XCI+e3sgJ1RvdGFsJyB8IGJiYlRyYW5zbGF0ZSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIH0gQGlmICghaXNDaGVja0xpc3QpIHtcbiAgICAgICAgICAgIDx0ZCBmZC10YWJsZS1jZWxsIGNsYXNzPVwic2luZ2xlLXNlbGVjdFwiPlxuICAgICAgICAgICAgICAgIDxzdHJvbmcgY2xhc3M9XCJjb2wtdG90YWwtdGV4dFwiPnt7ICdUb3RhbCcgfCBiYmJUcmFuc2xhdGUgfX08L3N0cm9uZz5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICB9IEBmb3IgKGNvbHVtbiBvZiBjb2x1bW5zOyB0cmFjayBjb2x1bW47IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgQGlmIChjb2x1bW4uSGFzU3VtbWFyeSkge1xuICAgICAgICAgICAgICAgIDxzdHJvbmcgc3R5bGU9XCJkaXJlY3Rpb246IGx0cjsgZGlzcGxheTogYmxvY2tcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgbW9EYXRhTGlzdCB8IHRvdGFsU3VtbWFyeTogY29sdW1uLk5hbWUgfCBudW1iZXIgfX08L3N0cm9uZ1xuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgfSBAaWYgKGNvbnRleHRNZW51SXRlbXMgJiYgY29udGV4dE1lbnVJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICA8dGQgZmQtdGFibGUtY2VsbCBzdHlsZT1cIndpZHRoOiAxMDBweFwiPjwvdGQ+XG4gICAgICAgICAgICB9IEBpZiAoIWhpZGVPcGVuSWNvbiAmJiBjYW5WaWV3ICYmICghaW5saW5lRWRpdE1vZGUgfHwgIWFsbG93SW5saW5lRWRpdCkpIHtcbiAgICAgICAgICAgIDx0ZCBmZC10YWJsZS1jZWxsPjwvdGQ+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvdHI+XG4gICAgPC90Zm9vdD5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlXG4gICAgI3Jvd09sZ29UZW1wbGF0ZVxuICAgIGxldC1tb1xuICAgIGxldC1pbmRleD1cImluZGV4XCJcbiAgICBsZXQtY29sdW1ucz1cImNvbHVtbnNcIlxuICAgIGxldC1tb0RhdGFMaXN0Q291bnQ9XCJtb0RhdGFMaXN0Q291bnRcIlxuICAgIGxldC1tb0RhdGFMaXN0PVwibW9EYXRhTGlzdFwiXG4gICAgbGV0LWNhcnRhYmxlVGVtcGxhdGU9XCJjYXJ0YWJsZVRlbXBsYXRlXCJcbiAgICBsZXQtc2Vjb25kYXJ5Q29sdW1ucz1cInNlY29uZGFyeUNvbHVtbnNcIlxuICAgIGxldC1yb3dJbmRpY2F0b3JDb2xvcj1cInJvd0luZGljYXRvckNvbG9yXCJcbiAgICBsZXQtcm93TnVtYmVyPVwicm93TnVtYmVyXCJcbiAgICBsZXQtcHJldmlld0NvbHVtbj1cInByZXZpZXdDb2x1bW5cIlxuICAgIGxldC1kZXRhaWxzQ29sbGFwc2VkPVwiZGV0YWlsc0NvbGxhcHNlZFwiXG4gICAgbGV0LWhpZGVEZXRhaWxzVGV4dD1cImhpZGVEZXRhaWxzVGV4dFwiXG4+XG4gICAgPGJucmMtZHluYW1pYy1pdGVtLWNvbXBvbmVudFxuICAgICAgICBbY29tcG9uZW50XT1cInZpZXdTZXR0aW5nLlJvd09sZ29cIlxuICAgICAgICBbbW9dPVwibW9cIlxuICAgICAgICBbZGV0YWlsc0NvbGxhcHNlZF09XCJkZXRhaWxzQ29sbGFwc2VkXCJcbiAgICAgICAgW2hpZGVEZXRhaWxzVGV4dF09XCJoaWRlRGV0YWlsc1RleHRcIlxuICAgICAgICBbaXNMYXN0Q2hpbGRHcm91cF09XCJtby4kSXNMYXN0Q2hpbGRHcm91cFwiXG4gICAgICAgIFtncm91cFN1bW1hcnldPVwiZ3JvdXBTdW1tYXJ5XCJcbiAgICAgICAgW3Nob3dWaWV3QnV0dG9uXT1cInNob3dWaWV3QnV0dG9uXCJcbiAgICAgICAgW1Vsdk1haW5DdHJscl09XCJVbHZNYWluQ3RybHJcIlxuICAgICAgICBbbW9EYXRhTGlzdF09XCJtb0RhdGFMaXN0XCJcbiAgICAgICAgW3Nob3dEZXRhaWxzSW5Sb3ddPVwic2hvd0RldGFpbHNJblJvd1wiXG4gICAgICAgIFtoaWRlT3Blbkljb25dPVwiaGlkZU9wZW5JY29uXCJcbiAgICAgICAgW2RldGFpbHNDb2x1bW5zXT1cImRldGFpbHNDb2x1bW5zXCJcbiAgICAgICAgW3Nob3dSb3dOdW1iZXJdPVwiY29udGV4dFZpZXc/LkdyaWRfU2hvd1Jvd051bWJlclwiXG4gICAgICAgIFtyb3dOdW1iZXJdPVwicm93TnVtYmVyXCJcbiAgICAgICAgW2NvbHVtbkNvbXBvbmVudHNdPVwidmlld1NldHRpbmc/LkNvbHVtbkNvbXBvbmVudHMgfHwgbnVsbFwiXG4gICAgICAgIFtjYXJ0YWJsZVRlbXBsYXRlXT1cImNhcnRhYmxlVGVtcGxhdGVcIlxuICAgICAgICBbY2FydGFibGVNb109XCJtby5SZWxhdGVkTW9cIlxuICAgICAgICBbZGlydHlDb2x1bW5zXT1cIm1vLiREaXJ0eUNvbHVtbnNcIlxuICAgICAgICBbY2FydGFibGVXb3JrZmxvd0RhdGFdPVwibW8uU2VyaWFsaXplZFdvcmtmbG93RGF0YVwiXG4gICAgICAgIFtzZXJpYWxpemVkUmVsYXRlZE1vXT1cIm1vLlNlcmlhbGl6ZWRSZWxhdGVkTW9cIlxuICAgICAgICBbZGV0YWlsc1RleHRdPVwidmlld1NldHRpbmc/LkRldGFpbHNTZXR0aW5nPy5CdXR0b25UZXh0XCJcbiAgICAgICAgW2RldGFpbHNUZXh0RnVuY3Rpb25dPVwidmlld1NldHRpbmc/LkRldGFpbHNTZXR0aW5nPy5CdXR0b25UZXh0RnVuY3Rpb25cIlxuICAgICAgICBbZGV0YWlsc0NvbXBvbmVudF09XCJkZXRhaWxzQ29tcG9uZW50XCJcbiAgICAgICAgW2NvbG9yaW5nUm93XT1cInZpZXdTZXR0aW5nPy5Db2xvcmluZ1Jvd1wiXG4gICAgICAgIFtpc0NoZWNrZWRdPVwibW8uJElzQ2hlY2tlZFwiXG4gICAgICAgIFt2aXNpYmlsaXR5XT1cIm1vLiRWaXNpYmlsaXR5XCJcbiAgICAgICAgW2V4cGFuZGVkXT1cIm1vLiRFeHBhbmRlZFwiXG4gICAgICAgIFtzdHlsZUluZGV4XT1cIm1vLiRTdHlsZUluZGV4XCJcbiAgICAgICAgW2xldmVsXT1cIm1vLiRMZXZlbFwiXG4gICAgICAgIFtwYXJlbnRFeHBhbmRlZF09XCJtby4kUGFyZW50Py4kRXhwYW5kZWRcIlxuICAgICAgICBbbW9EYXRhTGlzdENvdW50XT1cIm1vRGF0YUxpc3RDb3VudFwiXG4gICAgICAgIFtjb2x1bW5zQ291bnRdPVwiY29sdW1uc0NvdW50IC0gZGV0YWlsc0NvbHVtbnMubGVuZ3RoXCJcbiAgICAgICAgW3R5cGVEZWZJZF09XCJ0eXBlRGVmSWRcIlxuICAgICAgICBbZXh0cmFSZWxhdGlvbl09XCJleHRyYVJlbGF0aW9uXCJcbiAgICAgICAgW2Zvcm1TZXR0aW5nXT1cImZvcm1TZXR0aW5nXCJcbiAgICAgICAgW2luZGV4XT1cImluZGV4XCJcbiAgICAgICAgW3NldHRpbmddPVwidmlld1NldHRpbmdcIlxuICAgICAgICBbc2Vjb25kYXJ5Q29sdW1uc109XCJzZWNvbmRhcnlDb2x1bW5zIHwgZmlsdGVyQ29sdW1uc0J5RGV0YWlsczogZGV0YWlsc0NvbHVtbnM6cm93SW5kaWNhdG9yXCJcbiAgICAgICAgW2NvbHVtbnNdPVwiY29sdW1ucyB8IGZpbHRlckNvbHVtbnNCeURldGFpbHM6IGRldGFpbHNDb2x1bW5zOnJvd0luZGljYXRvclwiXG4gICAgICAgIFtpc05ld0lubGluZU1vXT1cIm1vLiROZXdJbmxpbmVNb1wiXG4gICAgICAgIFthY2Nlc3NdPVwiYWNjZXNzXCJcbiAgICAgICAgW2lubGluZUVkaXRNb2RlXT1cImlubGluZUVkaXRNb2RlXCJcbiAgICAgICAgW2FsbG93SW5saW5lRWRpdF09XCJhbGxvd0lubGluZUVkaXRcIlxuICAgICAgICBbcnRsXT1cInJ0bFwiXG4gICAgICAgIFtkZXZpY2VOYW1lXT1cImRldmljZU5hbWVcIlxuICAgICAgICBbZGV2aWNlU2l6ZV09XCJkZXZpY2VTaXplXCJcbiAgICAgICAgW2FsbENvbHVtbnNdPVwiYWxsQ29sdW1uc1wiXG4gICAgICAgIFtjb250ZXh0TWVudUl0ZW1zXT1cImNvbnRleHRNZW51SXRlbXNcIlxuICAgICAgICBbY2FuVmlld109XCJjYW5WaWV3XCJcbiAgICAgICAgW2NvbmRpdGlvbmFsRm9ybWF0c109XCJjb25kaXRpb25hbEZvcm1hdHNcIlxuICAgICAgICBbZGlzYWJsZU92ZXJmbG93Q29udGV4dE1lbnVdPVwiZGlzYWJsZU92ZXJmbG93Q29udGV4dE1lbnVcIlxuICAgICAgICBbbmF2aWdhdGlvbkFycm93XT1cIm5hdmlnYXRpb25BcnJvd1wiXG4gICAgICAgIFtpc0NoZWNrTGlzdF09XCJpc0NoZWNrTGlzdFwiXG4gICAgICAgIFtyb3dJbmRpY2F0b3JdPVwicm93SW5kaWNhdG9yXCJcbiAgICAgICAgW3Jvd0luZGljYXRvckNvbG9yXT1cInJvd0luZGljYXRvckNvbG9yXCJcbiAgICAgICAgKGV2ZW50cyk9XCJvbk9sZ29FdmVudHMoJGV2ZW50KVwiXG4gICAgPlxuICAgIDwvYm5yYy1keW5hbWljLWl0ZW0tY29tcG9uZW50PlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZVxuICAgICNyb3dUZW1wbGF0ZVxuICAgIGxldC1tb1xuICAgIGxldC1pbmRleD1cImluZGV4XCJcbiAgICBsZXQtcm93TnVtYmVyPVwicm93TnVtYmVyXCJcbiAgICBsZXQtY29sdW1ucz1cImNvbHVtbnNcIlxuICAgIGxldC1tb0RhdGFMaXN0Q291bnQ9XCJtb0RhdGFMaXN0Q291bnRcIlxuICAgIGxldC1tb0RhdGFMaXN0PVwibW9EYXRhTGlzdFwiXG4gICAgbGV0LWNhcnRhYmxlVGVtcGxhdGU9XCJjYXJ0YWJsZVRlbXBsYXRlXCJcbiAgICBsZXQtc2Vjb25kYXJ5Q29sdW1ucz1cInNlY29uZGFyeUNvbHVtbnNcIlxuICAgIGxldC1yb3dJbmRpY2F0b3JDb2xvcj1cInJvd0luZGljYXRvckNvbG9yXCJcbiAgICBsZXQtcHJldmlld0NvbHVtbj1cInByZXZpZXdDb2x1bW5cIlxuICAgIGxldC1kZXRhaWxzQ29sbGFwc2VkPVwiZGV0YWlsc0NvbGxhcHNlZFwiXG4gICAgbGV0LWhpZGVEZXRhaWxzVGV4dD1cImhpZGVEZXRhaWxzVGV4dFwiXG4+XG4gICAgPGJzdS1iYXJzYS10YWJsZS1yb3dcbiAgICAgICAgW21vXT1cIm1vXCJcbiAgICAgICAgW2RpcnR5Q29sdW1uc109XCJtby4kRGlydHlDb2x1bW5zXCJcbiAgICAgICAgW2lzTGFzdENoaWxkR3JvdXBdPVwibW8uJElzTGFzdENoaWxkR3JvdXBcIlxuICAgICAgICBbbW9EYXRhTGlzdF09XCJtb0RhdGFMaXN0XCJcbiAgICAgICAgW2hpZGVEZXRhaWxzVGV4dF09XCJoaWRlRGV0YWlsc1RleHRcIlxuICAgICAgICBbZGV0YWlsc0NvbGxhcHNlZF09XCJkZXRhaWxzQ29sbGFwc2VkXCJcbiAgICAgICAgW2dyb3VwU3VtbWFyeV09XCJncm91cFN1bW1hcnlcIlxuICAgICAgICBbVWx2TWFpbkN0cmxyXT1cIlVsdk1haW5DdHJsclwiXG4gICAgICAgIFtzaG93RGV0YWlsc0luUm93XT1cInNob3dEZXRhaWxzSW5Sb3dcIlxuICAgICAgICBbaGlkZU9wZW5JY29uXT1cImhpZGVPcGVuSWNvblwiXG4gICAgICAgIFtzaG93Um93TnVtYmVyXT1cImNvbnRleHRWaWV3Py5HcmlkX1Nob3dSb3dOdW1iZXJcIlxuICAgICAgICBbcm93TnVtYmVyXT1cInJvd051bWJlclwiXG4gICAgICAgIFtjb2xvcmluZ1Jvd109XCJ2aWV3U2V0dGluZz8uQ29sb3JpbmdSb3dcIlxuICAgICAgICBbZGlzYWJsZUVsbGFwc2lzXT1cInZpZXdTZXR0aW5nPy5EaXNhYmxlRWxsYXBzaXNcIlxuICAgICAgICBbc2hvd1ZpZXdCdXR0b25dPVwic2hvd1ZpZXdCdXR0b25cIlxuICAgICAgICBbZGV0YWlsc0NvbHVtbnNdPVwiZGV0YWlsc0NvbHVtbnNcIlxuICAgICAgICBbY29sdW1uQ29tcG9uZW50c109XCJ2aWV3U2V0dGluZz8uQ29sdW1uQ29tcG9uZW50cyB8fCBudWxsXCJcbiAgICAgICAgW2NhcnRhYmxlVGVtcGxhdGVdPVwiY2FydGFibGVUZW1wbGF0ZVwiXG4gICAgICAgIFtjYXJ0YWJsZU1vXT1cIm1vLlJlbGF0ZWRNb1wiXG4gICAgICAgIFtjYXJ0YWJsZVdvcmtmbG93RGF0YV09XCJtby5TZXJpYWxpemVkV29ya2Zsb3dEYXRhXCJcbiAgICAgICAgW3NlcmlhbGl6ZWRSZWxhdGVkTW9dPVwibW8uU2VyaWFsaXplZFJlbGF0ZWRNb1wiXG4gICAgICAgIFtkZXRhaWxzVGV4dF09XCJ2aWV3U2V0dGluZz8uRGV0YWlsc1NldHRpbmc/LkJ1dHRvblRleHRcIlxuICAgICAgICBbZGV0YWlsc0NvbXBvbmVudF09XCJkZXRhaWxzQ29tcG9uZW50XCJcbiAgICAgICAgW2lzQ2hlY2tlZF09XCJtby4kSXNDaGVja2VkXCJcbiAgICAgICAgW3Zpc2liaWxpdHldPVwibW8uJFZpc2liaWxpdHlcIlxuICAgICAgICBbZXhwYW5kZWRdPVwibW8uJEV4cGFuZGVkXCJcbiAgICAgICAgW3N0eWxlSW5kZXhdPVwibW8uJFN0eWxlSW5kZXhcIlxuICAgICAgICBbbGV2ZWxdPVwibW8uJExldmVsXCJcbiAgICAgICAgW3BhcmVudEV4cGFuZGVkXT1cIm1vLiRQYXJlbnQ/LiRFeHBhbmRlZFwiXG4gICAgICAgIFttb0RhdGFMaXN0Q291bnRdPVwibW9EYXRhTGlzdENvdW50XCJcbiAgICAgICAgW2NvbHVtbnNDb3VudF09XCJjb2x1bW5zQ291bnQgLSBkZXRhaWxzQ29sdW1ucy5sZW5ndGhcIlxuICAgICAgICBbdHlwZURlZklkXT1cInR5cGVEZWZJZFwiXG4gICAgICAgIFtleHRyYVJlbGF0aW9uXT1cImV4dHJhUmVsYXRpb25cIlxuICAgICAgICBbZm9ybVNldHRpbmddPVwiZm9ybVNldHRpbmdcIlxuICAgICAgICBbaW5kZXhdPVwiaW5kZXhcIlxuICAgICAgICBbc2V0dGluZ109XCJ2aWV3U2V0dGluZ1wiXG4gICAgICAgIFtjaGVja2JveENvbXBvbmVudF09XCJ2aWV3U2V0dGluZz8uQ2hlY2tib3hDb21wb25lbnRcIlxuICAgICAgICBbc2Vjb25kYXJ5Q29sdW1uc109XCJcbiAgICAgICAgICAgIHNlY29uZGFyeUNvbHVtbnNcbiAgICAgICAgICAgICAgICB8IGZpbHRlckNvbHVtbnNCeURldGFpbHM6IGRldGFpbHNDb2x1bW5zOmZhbHNlXG4gICAgICAgICAgICAgICAgfCBmaWx0ZXI6IHsgSXNQcmV2aWV3OiBmYWxzZSB9XG4gICAgICAgICAgICAgICAgfCBoaWRlQ29sdW1uc0lubW9iaWxlOiB2aWV3U2V0dGluZz8uSGlkZUNvbHVtbnNJbk1vYmlsZVxuICAgICAgICBcIlxuICAgICAgICBbY29sdW1uc109XCJcbiAgICAgICAgICAgIGNvbHVtbnNcbiAgICAgICAgICAgICAgICB8IGZpbHRlckNvbHVtbnNCeURldGFpbHM6IGRldGFpbHNDb2x1bW5zOnJvd0luZGljYXRvclxuICAgICAgICAgICAgICAgIHwgZmlsdGVyOiB7IElzUHJldmlldzogZmFsc2UgfVxuICAgICAgICAgICAgICAgIHwgaGlkZUNvbHVtbnNJbm1vYmlsZTogdmlld1NldHRpbmc/LkhpZGVDb2x1bW5zSW5Nb2JpbGVcbiAgICAgICAgXCJcbiAgICAgICAgW2lzTmV3SW5saW5lTW9dPVwibW8uJE5ld0lubGluZU1vXCJcbiAgICAgICAgW2FjY2Vzc109XCJhY2Nlc3NcIlxuICAgICAgICBbc2ltcGxlSW5saW5lRWRpdF09XCJzaW1wbGVJbmxpbmVFZGl0XCJcbiAgICAgICAgW25vU2F2ZUlubGluZUVkaXRJblNlcnZlcl09XCJzaW1wbGVJbmxpbmVFZGl0XCJcbiAgICAgICAgW2FjdGlvbkxpc3RdPVwiYWN0aW9uTGlzdFwiXG4gICAgICAgIFtpbmxpbmVFZGl0TW9kZV09XCJpbmxpbmVFZGl0TW9kZVwiXG4gICAgICAgIFthbGxvd0lubGluZUVkaXRdPVwiYWxsb3dJbmxpbmVFZGl0XCJcbiAgICAgICAgW3J0bF09XCJydGxcIlxuICAgICAgICBbZGV2aWNlTmFtZV09XCJkZXZpY2VOYW1lXCJcbiAgICAgICAgW2RldmljZVNpemVdPVwiZGV2aWNlU2l6ZVwiXG4gICAgICAgIFthbGxDb2x1bW5zXT1cImFsbENvbHVtbnNcIlxuICAgICAgICBbY29udGV4dE1lbnVJdGVtc109XCJjb250ZXh0TWVudUl0ZW1zXCJcbiAgICAgICAgW2NhblZpZXddPVwiY2FuVmlld1wiXG4gICAgICAgIFtjb25kaXRpb25hbEZvcm1hdHNdPVwiY29uZGl0aW9uYWxGb3JtYXRzXCJcbiAgICAgICAgW2Rpc2FibGVPdmVyZmxvd0NvbnRleHRNZW51XT1cImRpc2FibGVPdmVyZmxvd0NvbnRleHRNZW51XCJcbiAgICAgICAgW25hdmlnYXRpb25BcnJvd109XCJuYXZpZ2F0aW9uQXJyb3dcIlxuICAgICAgICBbaXNDaGVja0xpc3RdPVwiaXNDaGVja0xpc3RcIlxuICAgICAgICBbcm93SW5kaWNhdG9yXT1cInJvd0luZGljYXRvclwiXG4gICAgICAgIFtyb3dJbmRpY2F0b3JDb2xvcl09XCJyb3dJbmRpY2F0b3JDb2xvclwiXG4gICAgICAgIFtwcmV2aWV3Q29sdW1uXT1cInByZXZpZXdDb2x1bW5cIlxuICAgICAgICAoY29sdW1uU3VtbWFyeSk9XCJjb2x1bW5TdW1tYXJ5LmVtaXQoJGV2ZW50KVwiXG4gICAgICAgIChyZXNldFdvcmtmbG93U3RhdGUpPVwicmVzZXRXb3JrZmxvd1N0YXRlLmVtaXQobW8pXCJcbiAgICAgICAgKGVzY2FwZUtleSk9XCJvbkVzY2FwZUtleSgkZXZlbnQpXCJcbiAgICAgICAgKGV4cGFuZENsaWNrKT1cIm9uRXhwYW5kQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgIChyb3dDaGVjayk9XCJvblJvd0NoZWNrKCRldmVudClcIlxuICAgICAgICAod29ya2Zsb3dTaGFyZUJ1dHRvbnMpPVwib25Xb3JrZmxvd1NoYXJlQnV0dG9ucygkZXZlbnQpXCJcbiAgICAgICAgKGRlc2VsZWN0QWxsKT1cIm9uRGVzZWxlY3RBbGwoKVwiXG4gICAgICAgIChyb3dDbGljayk9XCJvblJvd0NsaWNrKCRldmVudClcIlxuICAgICAgICAodWx2Q29tbWFuZCk9XCJvblVsdkNvbW1hbmQoJGV2ZW50KVwiXG4gICAgICAgIChhY3Rpb25MaXN0Q2xpY2spPVwib25BY3Rpb25MaXN0Q2xpY2sobW8sIGluZGV4LCAkZXZlbnQpXCJcbiAgICAgICAgKHNlbGVjdE5leHRJbmxpbmVSZWNvcmQpPVwib25TZWxlY3ROZXh0SW5saW5lUmVjb3JkKCRldmVudClcIlxuICAgICAgICAoZWRpdEZvcm1QYW5lbFNhdmUpPVwib25FZGl0Rm9ybVBhbmVsU2F2ZSgkZXZlbnQpXCJcbiAgICAgICAgKGVkaXRGb3JtUGFuZWxDYW5jZWwpPVwib25FZGl0Rm9ybVBhbmVsQ2FuY2VsKCRldmVudClcIlxuICAgICAgICAoZWRpdEZvcm1QYW5lbFZhbHVlQ2hhbmdlKT1cIm9uRWRpdEZvcm1QYW5lbFZhbHVlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAoY2FydGFibGVGb3JtQ2xvc2VkKT1cIm9uQ2FydGFibGVGb3JtQ2xvc2VkKCRldmVudClcIlxuICAgID5cbiAgICA8L2JzdS1iYXJzYS10YWJsZS1yb3c+XG4gICAgPCEtLSA8ZGl2XG4gICAgICAgICNyb3dCb3R0b21cbiAgICAgICAgaW50ZXJzZWN0aW9uT2JzZXJ2ZXJcbiAgICAgICAgW2ludGVyc2VjdGlvblRocmVzaG9sZF09XCIwLjFcIlxuICAgICAgICAodmlzaWJpbGl0eUNoYW5nZSk9XCJvblJvd1Zpc2liaWxpdHlDaGFuZ2UoJGV2ZW50LCBpbmRleCwgcm93Qm90dG9tKVwiXG4gICAgPjwvZGl2PiAtLT5cbjwvbmctdGVtcGxhdGU+XG48ZGl2ICN0YWJsZUJvdHRvbU9ic2VydmU+PC9kaXY+XG4iXX0=
|
|
289
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktdGFibGUtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1zYXAtdWkvc3JjL2xpYi91aS10YWJsZS12aWV3L3VpLXRhYmxlLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktdGFibGUtdmlldy91aS10YWJsZS12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixXQUFXLEVBQ1gsS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUVILHVCQUF1QixFQUV2QixvQkFBb0IsRUFFcEIsb0JBQW9CLEVBQ3BCLG9CQUFvQixFQUNwQixrQ0FBa0MsRUFDbEMsdUJBQXVCLEVBQ3ZCLHNCQUFzQixFQUN0QixpQ0FBaUMsRUFDakMsaUJBQWlCLEVBQ3BCLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sb0RBQW9ELENBQUM7Ozs7Ozs7O0FBUS9GLE1BQU0sT0FBTyxvQkFDVCxTQUFRLHVCQUEyQztJQVB2RDs7UUFvQm9DLFdBQU0sR0FBa0IsSUFBSSxDQUFDO1FBQzVCLGNBQVMsR0FBa0IsSUFBSSxDQUFDO1FBQ2pFLFdBQU0sR0FBRyxNQUFNLENBQUM7UUFHaEIscUJBQWdCLEdBQW1FLEVBQUUsQ0FBQztRQUV0RixvQkFBZSxHQUFHLG9CQUFvQixDQUFDLGNBQWMsQ0FBQztRQUN0RCxpQkFBWSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3Qix1QkFBa0IsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbkMsZ0JBQVcsR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO1FBQ3BDLGdCQUFXLEdBQUcsSUFBSSxPQUFPLEVBQWtCLENBQUM7UUFDNUMsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQzFCLG1CQUFjLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLHNCQUFpQixHQUFHLENBQUMsQ0FBQztRQUV0QixvQkFBZSxHQUFhLEVBQUUsQ0FBQztRQUMvQixpQkFBWSxHQUFhLEVBQUUsQ0FBQztRQUM1QixhQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsYUFBUSxHQUFHLGlCQUFpQixFQUFFLENBQUM7S0E0T2xDO0lBM09HLFFBQVE7UUFDSixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0RixJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ0osSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDN0UsQ0FBQztRQUNELElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUMvRSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RGLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDMUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUM5RSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQztRQUN0RCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDO1FBQzlDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxvQkFBb0I7WUFDNUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLGNBQWM7WUFDckMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLGNBQWMsQ0FBQztRQUMxQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUNELHFCQUFxQixDQUFDLGdCQUFnQjtRQUNsQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsb0JBQW9CLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUM7SUFDcEcsQ0FBQztJQUNELHVCQUF1QixDQUFDLENBQUMsRUFBRSxHQUFHO1FBQzFCLElBQUksQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDOUIsTUFBTSxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQy9HLElBQUksZ0JBQWdCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNwRCxJQUFJLENBQUMscUJBQXFCLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDMUQsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM5QixDQUFDO1FBQ0QsSUFBSSxpQkFBaUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMxRSxJQUFJLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ3JHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN2RSxDQUFDO1FBQ0QsSUFBSSxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUNELEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUNELGdCQUFnQixDQUFDLENBQThDO1FBQzNELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQ3JELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBQ0QsZUFBZSxDQUFDLEdBQTZCO1FBQ3pDLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQy9CLE9BQU87UUFDWCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLG9CQUFvQixDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQy9ELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQ3pELENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLHFCQUFxQixDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDekQsQ0FBQztRQUNELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ2pELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBRTFCLHFEQUFxRDtRQUNyRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFDRCxnQkFBZ0I7UUFDWixJQUFJLENBQUMsZUFBZSxHQUFHLG9CQUFvQixDQUFDLGNBQWMsQ0FBQztRQUMzRCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMscUJBQXFCLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUNyRCwwQkFBMEI7UUFDMUIsNkJBQTZCO0lBQ2pDLENBQUM7SUFDRCxrQkFBa0I7UUFDZCxJQUFJLENBQUMsZUFBZSxHQUFHLG9CQUFvQixDQUFDLGNBQWMsQ0FBQztRQUMzRCxJQUFJLENBQUMscUJBQXFCLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUNyRCxJQUFJLENBQUMsK0JBQStCLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUNELGNBQWMsQ0FBQyxDQUE0RDtRQUN2RSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsZUFBZSxHQUFHLG9CQUFvQixDQUFDLGNBQWMsQ0FBQztRQUMzRCxpQ0FBaUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzNELE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQztRQUNyQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsbUJBQW1CLENBQUMsR0FBRztRQUNuQixJQUFJLENBQUMsY0FBYyxHQUFHLEdBQUcsQ0FBQztRQUMxQixNQUFNLElBQUksR0FBRyxHQUFHLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDL0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDekMsQ0FBQztJQUNELHdCQUF3QixDQUFDLENBQUMsRUFBRSxHQUFHO1FBQzNCLE9BQU87UUFDUCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxDQUFDO1FBQzdCLElBQUksQ0FBQyxLQUFLLFlBQVksRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsQ0FBQztJQUNMLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUc7UUFDL0IsT0FBTztRQUNQLElBQUksQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxLQUFLLFlBQVksRUFBRSxDQUFDO2dCQUNyQixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQzFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7b0JBQ3RDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQztnQkFDckUsQ0FBQztnQkFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQyxDQUFDO1lBQ0QsSUFBSSxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQztnQkFFdkUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEMsQ0FBQztZQUNELHlDQUF5QztRQUM3QyxDQUFDO0lBQ0wsQ0FBQztJQUNPLGtCQUFrQjtRQUN0QixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzdFLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUNPLCtCQUErQjtRQUNuQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hGLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5RSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFDTyxlQUFlO1FBQ25CLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLHFCQUFxQixFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUNPLGVBQWU7UUFDbkIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxxQkFBcUIsRUFBRSxtQkFBbUIsRUFBRSxDQUFDO0lBQ3RELENBQUM7SUFDTyxTQUFTLENBQUMsUUFBa0I7UUFDaEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvRiwyQkFBMkI7UUFFM0IsSUFBSSxVQUFVLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkIsT0FBTztRQUNYLENBQUM7UUFDRCxJQUFJLFVBQVUsS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzNCLENBQUM7UUFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztRQUMzQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxXQUFXLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQzdGLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxXQUFXLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQzdGLENBQUM7SUFDTyx5QkFBeUIsQ0FBQyxHQUFnQjtRQUM5QyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDN0MsOERBQThEO1lBQzlELHVCQUF1QjtZQUN2QiwwRUFBMEU7WUFDMUUsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFFeEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ3hFLENBQUM7SUFDTCxDQUFDO0lBRVMsa0JBQWtCO1FBQ3hCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO1lBQ3BCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDdkUsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUNTLHNCQUFzQixDQUFDLFVBQWlDLEVBQUUsT0FBMkI7UUFDM0YsUUFBUSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDM0IsS0FBSyxvQkFBb0IsQ0FBQyxjQUFjO2dCQUNwQyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDMUMsTUFBTTtZQUNWLEtBQUssb0JBQW9CLENBQUMsZUFBZTtnQkFDckMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDakQsTUFBTTtZQUNWLEtBQUssb0JBQW9CLENBQUMsY0FBYztnQkFDcEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQzFDLE1BQU07UUFDZCxDQUFDO0lBQ0wsQ0FBQztJQUNTLFlBQVksQ0FBQyxVQUFVLEVBQUUsT0FBTztRQUN0QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQTRCLENBQUM7UUFDcEQsb0JBQW9CLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLDBCQUEwQixFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzdHLENBQUM7SUFDUyxzQkFBc0IsQ0FBQyxVQUFpQyxFQUFFLE9BQTJCO1FBQzNGLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBQ1MsZUFBZSxDQUFDLFVBQVUsRUFBRSxPQUFPO1FBQ3pDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLGFBQTRCLENBQUM7UUFDbEUsa0NBQWtDLENBQzlCLEtBQUssRUFDTCxJQUFJLENBQUMsT0FBTyxFQUNaLElBQUksQ0FBQyx3QkFBd0IsRUFDN0IsSUFBSSxDQUFDLGdCQUFnQixFQUNyQixJQUFJLENBQUMsT0FBTyxDQUNmLENBQUM7SUFDTixDQUFDO0lBQ1MsZUFBZSxDQUFDLFVBQVUsRUFBRSxPQUFPO1FBQ3pDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQ1MsVUFBVSxDQUFDLFlBQW9CO1FBQ3JDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDO1FBQy9CLENBQUM7SUFDTCxDQUFDO0lBQ1MsY0FBYyxDQUFDLGlCQUFpQjtRQUN0QyxJQUNJLElBQUksQ0FBQyxjQUFjLEVBQUUsTUFBTSxHQUFHLENBQUM7WUFDL0IsSUFBSSxDQUFDLGdCQUFnQixFQUFFLFFBQVE7WUFDL0IsQ0FBQyxpQkFBaUIsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUNsRSxDQUFDO1lBQ0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztZQUM3QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLENBQUM7SUFDTCxDQUFDO0lBQ1Msc0JBQXNCLENBQUMsR0FBVztRQUN4QyxJQUFJLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUM1QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzRSxDQUFDOzhHQTdRUSxvQkFBb0I7a0dBQXBCLG9CQUFvQix5Z0JBSWdCLFVBQVUsbUZBQzVDLHlCQUF5Qiw0RkMxQ3hDLG9rZEF5VkE7OzJGRHBUYSxvQkFBb0I7a0JBTmhDLFNBQVM7K0JBQ0ksbUJBQW1CLG1CQUdaLHVCQUF1QixDQUFDLE1BQU07OEJBTVksU0FBUztzQkFBbkUsU0FBUzt1QkFBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBQ25CLHFCQUFxQjtzQkFBMUQsU0FBUzt1QkFBQyx5QkFBeUI7Z0JBQzNCLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBQzBCLE1BQU07c0JBQXJDLFdBQVc7dUJBQUMsaUJBQWlCO2dCQUNHLFNBQVM7c0JBQXpDLFdBQVc7dUJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgc2lnbmFsLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICAgIE1ldGFvYmplY3REYXRhTW9kZWwsXG4gICAgUmVwb3J0Vmlld0Jhc2VDb21wb25lbnQsXG4gICAgUmVwb3J0Vmlld0NvbHVtbixcbiAgICBUYWJsZUhlYWRlcldpZHRoTW9kZSxcbiAgICBDb2x1bW5SZXNpemVkQXJncyxcbiAgICBjYWxjQ29udGV4dE1lbnVXaWR0aCxcbiAgICBjYWxjdWxhdGVDb2x1bW5XaWR0aCxcbiAgICBjYWxjdWxhdGVDb2x1bW5XaWR0aEZpdFRvQ29udGFpbmVyLFxuICAgIGNhbGN1bGF0ZUZyZWVDb2x1bW5TaXplLFxuICAgIGNhbGN1bGF0ZUNvbHVtbkNvbnRlbnQsXG4gICAgc2V0Q29sdW1uV2lkdGhCeU1heE1vQ29udGVudFdpZHRoLFxuICAgIGdldERldmljZUlzTW9iaWxlXG59IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcbmltcG9ydCB7IFVpVGFibGVWaWV3U2V0dGluZyB9IGZyb20gJy4uL21vZGVscy9ncmlkLXZpZXcnO1xuaW1wb3J0IHsgQmFyc2FUYWJsZUhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4uL2JhcnNhLXRhYmxlLWhlYWRlci9iYXJzYS10YWJsZS1oZWFkZXIuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdic3UtdWktdGFibGUtdmlldycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3VpLXRhYmxlLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3VpLXRhYmxlLXZpZXcuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBVaVRhYmxlVmlld0NvbXBvbmVudFxuICAgIGV4dGVuZHMgUmVwb3J0Vmlld0Jhc2VDb21wb25lbnQ8VWlUYWJsZVZpZXdTZXR0aW5nPlxuICAgIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXNcbntcbiAgICBAVmlld0NoaWxkKCd0YWJsZVRwbCcsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBFbGVtZW50UmVmIH0pIF90YWJsZVJlZjogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKEJhcnNhVGFibGVIZWFkZXJDb21wb25lbnQpIF90YWJsZUhlYWRlckNvbXBvbmVudDogQmFyc2FUYWJsZUhlYWRlckNvbXBvbmVudDtcbiAgICBASW5wdXQoKSBjb2x1bW5XaWR0aDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIG1pbldpZHRoO1xuICAgIEBJbnB1dCgpIG1pbkhlaWdodDtcbiAgICBASW5wdXQoKSBkaXNhYmxlUmVzaXplO1xuICAgIEBJbnB1dCgpIGRpc2FibGVIZWFkZXJDb250ZXh0TWVudTtcbiAgICBASW5wdXQoKSByb3dSZXNpemVyO1xuICAgIEBJbnB1dCgpIGVuYWJsZVJlc2l6aW5nO1xuICAgIEBJbnB1dCgpIGRpc2FibGVGaXhlZFRhYmxlTGF5b3V0O1xuICAgIEBIb3N0QmluZGluZygnc3R5bGUuaGVpZ2h0LnB4JykgaGVpZ2h0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLm1heC1oZWlnaHQnKSBtYXhIZWlnaHQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIF93aWR0aCA9ICcxMDAlJztcbiAgICBzaG93RGV0YWlsc0luUm93OiBib29sZWFuO1xuICAgIGhhc1Jvd09sZ286IGJvb2xlYW47XG4gICAgY29sdW1uQ29tcG9uZW50czogeyBjb2x1bW46IFJlcG9ydFZpZXdDb2x1bW47IGNvbXBvbmVudDogTWV0YW9iamVjdERhdGFNb2RlbCB9W10gPSBbXTtcbiAgICByb3dJbmRpY2F0b3I6IGJvb2xlYW47XG4gICAgdGFibGVIZWFkZXJNb2RlID0gVGFibGVIZWFkZXJXaWR0aE1vZGUuRml0VG9Db250YWluZXI7XG4gICAgc3RpY2t5RW5hYmxlID0gc2lnbmFsKGZhbHNlKTtcbiAgICByb3dWaXNpYmlsdHlDaGFuZ2UgPSBzaWduYWwoZmFsc2UpO1xuICAgIHRhYmxlSGVhZGVyRG9tOiBIVE1MRWxlbWVudDtcbiAgICBfaGVhZGVyVG9wJCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgICByb3dWaXNpYmxlJCA9IG5ldyBTdWJqZWN0PHsgaW5kZXg7IGRvbSB9PigpO1xuICAgIF9pc1BhcmVudFdpZHRoU2V0ID0gZmFsc2U7XG4gICAgdGFibGVIZWFkZXJUb3AgPSAwO1xuICAgIHRhYmxlSGVhZGVySGVpZ2h0ID0gMDtcbiAgICBoZWFkZXJPYnNlcnZlckRvbTogSFRNTEVsZW1lbnQ7XG4gICAgbm90VmlzaWJsZUl0ZW1zOiBudW1iZXJbXSA9IFtdO1xuICAgIHZpc2libGVJdGVtczogbnVtYmVyW10gPSBbXTtcbiAgICBvbGRXaWR0aCA9IDA7XG4gICAgaXNNb2JpbGUgPSBnZXREZXZpY2VJc01vYmlsZSgpO1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICBjb25zdCB4ID0gTWF0aC5mbG9vcih0aGlzLl9lbC5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpO1xuICAgICAgICBpZiAoeCkge1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIyLnNldFN0eWxlKHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQsICd3aWR0aCcsIGAke3ggLSAxMH1weGApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3BvcnRhbFNlcnZpY2Uud2luZG93UmVzaXplJC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHggPSBNYXRoLmZsb29yKHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQucGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCk7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlcjIuc2V0U3R5bGUodGhpcy5fdGFibGVSZWYubmF0aXZlRWxlbWVudCwgJ3dpZHRoJywgeCArICdweCcpO1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIyLnNldFN0eWxlKHRoaXMuX3RhYmxlUmVmLm5hdGl2ZUVsZW1lbnQsICdtYXgtd2lkdGgnLCB4ICsgJ3B4Jyk7XG4gICAgICAgICAgICB0aGlzLl9yZWZyZXNoVGhXaWR0aCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5oYXNSb3dPbGdvID0gdGhpcy52aWV3U2V0dGluZz8uUm93T2xnbz8uU2VsZWN0b3I7XG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gdGhpcy52aWV3U2V0dGluZz8uQm9keUhlaWdodDtcbiAgICAgICAgdGhpcy5fc2V0SGFzU3VtbWVyeSh0aGlzLmNhcnRhYmxlQ2hpbGRzTW8pO1xuICAgICAgICB0aGlzLl9zZXRIZWlnaHQodGhpcy5wYXJlbnRIZWlnaHQpO1xuICAgICAgICB0aGlzLl9zZXRXaWR0aCgpO1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVDb2x1bW5zV2lkdGgodGhpcy5tb0RhdGFMaXN0LCB0aGlzLmNvbHVtbnMpO1xuICAgICAgICB0aGlzLnRhYmxlSGVhZGVyTW9kZSA9IHRoaXMuZ3JpZEZyZWVDb2x1bW5TaXppbmdcbiAgICAgICAgICAgID8gVGFibGVIZWFkZXJXaWR0aE1vZGUuRnJlZUNvbHVtblNpemVcbiAgICAgICAgICAgIDogVGFibGVIZWFkZXJXaWR0aE1vZGUuRml0VG9Db250YWluZXI7XG4gICAgICAgIHRoaXMuX2NhbGNDb250ZXh0TWVudVdpZHRoKHRoaXMuY29udGV4dE1lbnVJdGVtcyk7XG4gICAgfVxuICAgIF9jYWxjQ29udGV4dE1lbnVXaWR0aChjb250ZXh0TWVudUl0ZW1zKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29udGV4dE1lbnVXaWR0aCA9IGNhbGNDb250ZXh0TWVudVdpZHRoKGNvbnRleHRNZW51SXRlbXMsIHRoaXMuZGlzYWJsZU92ZXJmbG93Q29udGV4dE1lbnUpO1xuICAgIH1cbiAgICBvblRhYmxlVmlzaWJpbGl0eUNoYW5nZShlLCBkb20pOiB2b2lkIHtcbiAgICAgICAgaWYgKGUgPT09ICdWaXNpYmxlJykge1xuICAgICAgICAgICAgdGhpcy5fc2V0V2lkdGgodHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgY2FydGFibGVUZW1wbGF0ZXMsIHBhcmVudEhlaWdodCwgY29udGV4dE1lbnVJdGVtcywgY29sdW1uc0NvdW50LCBjb2x1bW5zLCBzZWNvbmRhcnlDb2x1bW5zIH0gPSBjaGFuZ2VzO1xuICAgICAgICBpZiAoY29udGV4dE1lbnVJdGVtcyAmJiAhY29udGV4dE1lbnVJdGVtcy5maXJzdENoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5fY2FsY0NvbnRleHRNZW51V2lkdGgoY29udGV4dE1lbnVJdGVtcy5jdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FydGFibGVUZW1wbGF0ZXMgJiYgIWNhcnRhYmxlVGVtcGxhdGVzLmZpcnN0Q2hhbmdlICYmICF0aGlzLmhhc1N1bW1hcnkpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldEhhc1N1bW1lcnkoY2FydGFibGVUZW1wbGF0ZXMuY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGNvbHVtbnNDb3VudCAmJiAhY29sdW1uc0NvdW50LmZpcnN0Q2hhbmdlKSB8fCAoc2Vjb25kYXJ5Q29sdW1ucyAmJiAhc2Vjb25kYXJ5Q29sdW1ucy5maXJzdENoYW5nZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNvbHVtbnNXaWR0aCh0aGlzLm1vRGF0YUxpc3QsIGNvbHVtbnMuY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyZW50SGVpZ2h0ICYmICFwYXJlbnRIZWlnaHQuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldEhlaWdodChwYXJlbnRIZWlnaHQuY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcbiAgICB9XG4gICAgb25Db2x1bW5SZXNpemluZyhlOiB7IGNvbHVtbjogUmVwb3J0Vmlld0NvbHVtbjsgd2lkdGg6IG51bWJlciB9KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlSGVhZGVyQ29tcG9uZW50LlNldENvbHVtbldpZHRoVG9UaFdpZHRoKCk7XG4gICAgICAgIHRoaXMuX3NldFBhcmVudFdpZHRoKCk7XG4gICAgfVxuICAgIG9uQ29sdW1uUmVzaXplZChhcnI6IEFycmF5PENvbHVtblJlc2l6ZWRBcmdzPik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWNvbmRhcnlDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudGFibGVIZWFkZXJNb2RlID09PSBUYWJsZUhlYWRlcldpZHRoTW9kZS5GcmVlQ29sdW1uU2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5fdGFibGVIZWFkZXJDb21wb25lbnQuU2V0Q29sdW1uV2lkdGhUb1RoV2lkdGgoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlSGVhZGVyQ29tcG9uZW50LlNldENvbHVtbldpZHRoVG9QZXJjZW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdGFibGVIZWFkZXJDb21wb25lbnQuUmVmcmVzaFRhYmxlVGhXaWR0aCgpO1xuICAgICAgICB0aGlzLnJlc2l6ZWRCeVVzZXIgPSB0cnVlO1xuXG4gICAgICAgIC8vIHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZShsYXN0VGgsICd3aWR0aCcsIGAxMDAlYCk7XG4gICAgICAgIHRoaXMuY29sdW1uUmVzaXplZC5lbWl0KHsgY29sdW1uczogdGhpcy5jb2x1bW5zLCByZXNpemVkOiBhcnIgfSk7XG4gICAgfVxuICAgIG9uRml0VG9Db250YWluZXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGFibGVIZWFkZXJNb2RlID0gVGFibGVIZWFkZXJXaWR0aE1vZGUuRml0VG9Db250YWluZXI7XG4gICAgICAgIHRoaXMuX3NldFBhcmVudFdpZHRoRml0KCk7XG4gICAgICAgIHRoaXMuX3RhYmxlSGVhZGVyQ29tcG9uZW50LlNldENvbHVtbldpZHRoVG9QZXJjZW50KCk7XG4gICAgICAgIC8vIHRoaXMuX3JlZnJlc2hUaFdpZHRoKCk7XG4gICAgICAgIC8vIHRoaXMuX2ZpcmVSZXNpemVDaGFuZ2VkKCk7XG4gICAgfVxuICAgIG9uRnJlZUNvbHVtblNpemluZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50YWJsZUhlYWRlck1vZGUgPSBUYWJsZUhlYWRlcldpZHRoTW9kZS5GcmVlQ29sdW1uU2l6ZTtcbiAgICAgICAgdGhpcy5fdGFibGVIZWFkZXJDb21wb25lbnQuU2V0Q29sdW1uV2lkdGhUb1RoV2lkdGgoKTtcbiAgICAgICAgdGhpcy5fc2V0UGFyZW50V2lkdGhGaXRUb09mZnNldFdpZHRoKCk7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNvbHVtbnNXaWR0aCh0aGlzLm1vRGF0YUxpc3QsIHRoaXMuY29sdW1ucyk7XG4gICAgfVxuICAgIG9uRml0VG9Db250ZW50KGU6IHsgY29sdW1uOiBSZXBvcnRWaWV3Q29sdW1uOyB0aERvbTogSFRNTFRhYmxlQ2VsbEVsZW1lbnQgfSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IGNvbHVtbiwgdGhEb20gfSA9IGU7XG4gICAgICAgIHRoaXMudGFibGVIZWFkZXJNb2RlID0gVGFibGVIZWFkZXJXaWR0aE1vZGUuRnJlZUNvbHVtblNpemU7XG4gICAgICAgIHNldENvbHVtbldpZHRoQnlNYXhNb0NvbnRlbnRXaWR0aCh0aGlzLm1vRGF0YUxpc3QsIGNvbHVtbik7XG4gICAgICAgIGNvbHVtbi4kV2lkdGggPSBjb2x1bW4uJENvbnRlbnRXaWR0aDtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIyLnNldFN0eWxlKHRoRG9tLCAnd2lkdGgnLCBjb2x1bW4uJFdpZHRoKTtcbiAgICAgICAgdGhpcy5fZmlyZVJlc2l6ZUNoYW5nZWQoKTtcbiAgICB9XG5cbiAgICBvblNldFRhYmxlSGVhZGVyRG9tKGRvbSk6IHZvaWQge1xuICAgICAgICB0aGlzLnRhYmxlSGVhZGVyRG9tID0gZG9tO1xuICAgICAgICBjb25zdCByZWN0ID0gZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICB0aGlzLnRhYmxlSGVhZGVyVG9wID0gcmVjdC50b3A7XG4gICAgICAgIHRoaXMudGFibGVIZWFkZXJIZWlnaHQgPSByZWN0LmhlaWdodDtcbiAgICB9XG4gICAgb25IZWFkZXJWaXNpYmlsaXR5Q2hhbmdlKGUsIGRvbSk6IHZvaWQge1xuICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuaGVhZGVyT2JzZXJ2ZXJEb20gPSBkb207XG4gICAgICAgIGlmIChlID09PSAnTm90VmlzaWJsZScpIHtcbiAgICAgICAgICAgIHRoaXMuc3RpY2t5RW5hYmxlLnNldCh0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3RpY2t5RW5hYmxlLnNldChmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblJvd1Zpc2liaWxpdHlDaGFuZ2UoZSwgaW5kZXgsIGRvbSk6IHZvaWQge1xuICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChlICE9PSAnUGVuZGluZycpIHtcbiAgICAgICAgICAgIGlmIChlID09PSAnTm90VmlzaWJsZScpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy52aXNpYmxlSXRlbXMuaW5kZXhPZihpbmRleCkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93VmlzaWJsZSQubmV4dCh7IGluZGV4LCBkb20gfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlzaWJsZUl0ZW1zID0gdGhpcy52aXNpYmxlSXRlbXMuZmlsdGVyKChjKSA9PiBjICE9PSBpbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMubm90VmlzaWJsZUl0ZW1zLnB1c2goaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUgPT09ICdWaXNpYmxlJykge1xuICAgICAgICAgICAgICAgIHRoaXMubm90VmlzaWJsZUl0ZW1zID0gdGhpcy5ub3RWaXNpYmxlSXRlbXMuZmlsdGVyKChjKSA9PiBjICE9PSBpbmRleCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnZpc2libGVJdGVtcy5wdXNoKGluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRoaXMucm93VmlzaWJsZSQubmV4dCh7IGluZGV4LCBkb20gfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJpdmF0ZSBfc2V0UGFyZW50V2lkdGhGaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLl9lbC5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGUsICd3aWR0aCcsIGAxMDAlYCk7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLl90YWJsZVJlZi5uYXRpdmVFbGVtZW50LCAnbWluLXdpZHRoJywgYDEwMCVgKTtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIyLnNldFN0eWxlKHRoaXMuX3RhYmxlUmVmLm5hdGl2ZUVsZW1lbnQsICd3aWR0aCcsIGAxMDAlYCk7XG4gICAgfVxuICAgIHByaXZhdGUgX3NldFBhcmVudFdpZHRoRml0VG9PZmZzZXRXaWR0aCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeDEgPSBNYXRoLmZsb29yKHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQucGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCk7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLl9lbC5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGUsICd3aWR0aCcsIGAke3gxfXB4YCk7XG4gICAgICAgIGNvbnN0IHggPSBNYXRoLmZsb29yKHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgpO1xuICAgICAgICB0aGlzLl9yZW5kZXJlcjIuc2V0U3R5bGUodGhpcy5fdGFibGVSZWYubmF0aXZlRWxlbWVudCwgJ21pbi13aWR0aCcsIGAke3h9cHhgKTtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIyLnNldFN0eWxlKHRoaXMuX3RhYmxlUmVmLm5hdGl2ZUVsZW1lbnQsICd3aWR0aCcsIGAke3h9cHhgKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfc2V0UGFyZW50V2lkdGgoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHggPSBNYXRoLmZsb29yKHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQucGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCk7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLl9lbC5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGUsICd3aWR0aCcsIGAke3h9cHhgKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfcmVmcmVzaFRoV2lkdGgoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNvbHVtbnNXaWR0aCh0aGlzLm1vRGF0YUxpc3QsIHRoaXMuY29sdW1ucyk7XG4gICAgICAgIHRoaXMuX3RhYmxlSGVhZGVyQ29tcG9uZW50Py5SZWZyZXNoVGFibGVUaFdpZHRoKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX3NldFdpZHRoKHNldFdpZHRoPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCB3aWR0aE9mRG9tID0gTWF0aC5mbG9vcih0aGlzLl9lbC5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyh3aWR0aE9mRG9tKTtcblxuICAgICAgICBpZiAod2lkdGhPZkRvbSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh3aWR0aE9mRG9tICE9PSB0aGlzLm9sZFdpZHRoKSB7XG4gICAgICAgICAgICB0aGlzLl9yZWZyZXNoVGhXaWR0aCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub2xkV2lkdGggPSB3aWR0aE9mRG9tO1xuICAgICAgICBjb25zdCB3aWR0aE9mRG9tMiA9IE1hdGguZmxvb3IodGhpcy5fZWwubmF0aXZlRWxlbWVudC5wYXJlbnROb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKTtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIyLnNldFN0eWxlKHRoaXMuX3RhYmxlUmVmLm5hdGl2ZUVsZW1lbnQsICdtYXgtd2lkdGgnLCB3aWR0aE9mRG9tMiAtIDEwICsgJ3B4Jyk7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLl90YWJsZVJlZi5uYXRpdmVFbGVtZW50LCAnd2lkdGgnLCB3aWR0aE9mRG9tMiAtIDEwICsgJ3B4Jyk7XG4gICAgfVxuICAgIHByaXZhdGUgX2NhbGN1bGF0ZUhlYWRlclN0aWNreVRvcChkb206IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnN0aWNreUVuYWJsZSgpICYmIHRoaXMudGFibGVIZWFkZXJEb20pIHtcbiAgICAgICAgICAgIC8vIGNvbnN0IHJlYyA9IHRoaXMuaGVhZGVyT2JzZXJ2ZXJEb20uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAvLyBjb25zdCB0b3AgPSByZWMudG9wO1xuICAgICAgICAgICAgLy8gY29uc3QgY2FsYyA9IHRoaXMudGFibGVIZWFkZXJUb3AgLSB0b3AgLSB0aGlzLnRhYmxlSGVhZGVySGVpZ2h0ICsgJ3B4JztcbiAgICAgICAgICAgIGNvbnN0IHJlYyA9IGRvbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICAgICAgdGhpcy5faGVhZGVyVG9wJC5uZXh0KHJlYy50b3AgLSAxMiArIHRoaXMudGFibGVIZWFkZXJIZWlnaHQgKyAncHgnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBfZmlyZVJlc2l6ZUNoYW5nZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29sdW1uUmVzaXplZC5lbWl0KHtcbiAgICAgICAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1ucyxcbiAgICAgICAgICAgIHJlc2l6ZWQ6IHRoaXMuY29sdW1ucy5tYXAoKGMpID0+ICh7IG5hbWU6IGMuTmFtZSwgd2lkdGg6IGMuV2lkdGggfSkpXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2NhbGN1bGF0ZUNvbHVtbnNXaWR0aChtb0RhdGFMaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10sIGNvbHVtbnM6IFJlcG9ydFZpZXdDb2x1bW5bXSk6IHZvaWQge1xuICAgICAgICBzd2l0Y2ggKHRoaXMudGFibGVIZWFkZXJNb2RlKSB7XG4gICAgICAgICAgICBjYXNlIFRhYmxlSGVhZGVyV2lkdGhNb2RlLkZyZWVDb2x1bW5TaXplOlxuICAgICAgICAgICAgICAgIHRoaXMuX2ZyZWVDb2x1bW5TaXplKG1vRGF0YUxpc3QsIGNvbHVtbnMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBUYWJsZUhlYWRlcldpZHRoTW9kZS5GaXRUb1Jvd0NvbnRlbnQ6XG4gICAgICAgICAgICAgICAgdGhpcy5fZml0VG9Sb3dDb250ZW50Q29sdW1uKG1vRGF0YUxpc3QsIGNvbHVtbnMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBUYWJsZUhlYWRlcldpZHRoTW9kZS5GaXRUb0NvbnRhaW5lcjpcbiAgICAgICAgICAgICAgICB0aGlzLl9maXRUb0NvbnRhaW5lcihtb0RhdGFMaXN0LCBjb2x1bW5zKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2ZpdFRvQ29sdW1uKG1vRGF0YUxpc3QsIGNvbHVtbnMpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWxEb20gPSB0aGlzLl9lbC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjYWxjdWxhdGVDb2x1bW5XaWR0aChlbERvbSwgY29sdW1ucywgbW9EYXRhTGlzdCwgdGhpcy5kaXNhYmxlT3ZlcmZsb3dDb250ZXh0TWVudSwgdGhpcy5jb250ZXh0TWVudUl0ZW1zKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9maXRUb1Jvd0NvbnRlbnRDb2x1bW4obW9EYXRhTGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdLCBjb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW10pOiB2b2lkIHtcbiAgICAgICAgY2FsY3VsYXRlQ29sdW1uQ29udGVudChjb2x1bW5zLCBtb0RhdGFMaXN0KTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9maXRUb0NvbnRhaW5lcihtb0RhdGFMaXN0LCBjb2x1bW5zKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVsRG9tID0gdGhpcy5fZWwubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjYWxjdWxhdGVDb2x1bW5XaWR0aEZpdFRvQ29udGFpbmVyKFxuICAgICAgICAgICAgZWxEb20sXG4gICAgICAgICAgICB0aGlzLmNhblZpZXcsXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVIZWFkZXJDb250ZXh0TWVudSxcbiAgICAgICAgICAgIHRoaXMuY29udGV4dE1lbnVJdGVtcyxcbiAgICAgICAgICAgIHRoaXMuY29sdW1uc1xuICAgICAgICApO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2ZyZWVDb2x1bW5TaXplKG1vRGF0YUxpc3QsIGNvbHVtbnMpOiB2b2lkIHtcbiAgICAgICAgY2FsY3VsYXRlRnJlZUNvbHVtblNpemUodGhpcy5jb2x1bW5zKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9zZXRIZWlnaHQocGFyZW50SGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaW5EaWFsb2cpIHtcbiAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gcGFyZW50SGVpZ2h0O1xuICAgICAgICB9XG4gICAgfVxuICAgIHByb3RlY3RlZCBfc2V0SGFzU3VtbWVyeShjYXJ0YWJsZVRlbXBsYXRlcyk6IHZvaWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmRldGFpbHNDb2x1bW5zPy5sZW5ndGggPiAwIHx8XG4gICAgICAgICAgICB0aGlzLmRldGFpbHNDb21wb25lbnQ/LlNlbGVjdG9yIHx8XG4gICAgICAgICAgICAoY2FydGFibGVUZW1wbGF0ZXMgJiYgT2JqZWN0LmtleXMoY2FydGFibGVUZW1wbGF0ZXMpLmxlbmd0aCA+IDApXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5zaG93RGV0YWlsc0luUm93ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaGFzRGV0YWlsc0luUm93LmVtaXQodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhhc0RldGFpbHNJblJvdy5lbWl0KGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2NvbnRhaW5lcldpZHRoQ2hhbmdlZCh2YWw6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodmFsID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9ICcxMDAlJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsID8gdmFsICsgJ3B4JyA6ICcxMDAlJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yZW5kZXJlcjIuc2V0U3R5bGUodGhpcy5fZWwubmF0aXZlRWxlbWVudCwgJ3dpZHRoJywgdGhpcy5fd2lkdGgpO1xuICAgIH1cbn1cbiIsIjx0YWJsZVxuICAgIGZkLXRhYmxlXG4gICAgI3RhYmxlVHBsXG4gICAgI2hlYWRlckJvdHRvbU9ic2VydmVyXG4gICAgaW50ZXJzZWN0aW9uT2JzZXJ2ZXJcbiAgICBbaW50ZXJzZWN0aW9uVGhyZXNob2xkXT1cIjAuMVwiXG4gICAgKHZpc2liaWxpdHlDaGFuZ2UpPVwib25UYWJsZVZpc2liaWxpdHlDaGFuZ2UoJGV2ZW50LCBoZWFkZXJCb3R0b21PYnNlcnZlcilcIlxuICAgIFtwb3BJbl09XCJwb3BpblwiXG4gICAgW2NsYXNzLnRhYmxlLWZpeGVkXT1cIlxuICAgICAgICAhY29udGV4dFZpZXc/LkdyaWRfSGlkZUhlYWRlciAmJiAoIXBvcGluIHx8IHNlY29uZGFyeUNvbHVtbnMubGVuZ3RoID09PSAwKSAmJiAhZGlzYWJsZUZpeGVkVGFibGVMYXlvdXRcbiAgICBcIlxuICAgIFtub0JvcmRlclhdPVwidmlld1NldHRpbmc/Lk5vSG9yaXp0b25hbEJvcmRlcnMgPT09IHRydWVcIlxuICAgIFtub0JvcmRlclldPVwidmlld1NldHRpbmc/Lk5vVmVydGljYWxCb3JkZXJzID09PSB0cnVlIHx8IChwb3BpbiAmJiBzZWNvbmRhcnlDb2x1bW5zLmxlbmd0aCA+IDApXCJcbj5cbiAgICBAaWYgKGNvbHVtbnMgfCBtZXJnZUZpZWxkc1RvQ29sdW1uczogdmlld1NldHRpbmc/Lk1lcmdlRmllbGRzVG9Db2x1bW5zPy5Nb0RhdGFMaXN0OyBhcyBtZXJnZUZpZWxkc1RvQ29sdW1ucykge1xuICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIGhlYWRlclRlbXBsYXRlO1xuICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IG1lcmdlRmllbGRzVG9Db2x1bW5zLCBtb0RhdGFMaXN0Q291bnQ6IG1vRGF0YUxpc3Q/Lmxlbmd0aCB9XG4gICAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIEBpZiAobW9EYXRhTGlzdD8ubGVuZ3RoKSB7XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgYm9keVRlbXBsYXRlO1xuICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IG1lcmdlRmllbGRzVG9Db2x1bW5zLCBwcmV2aWV3Q29sdW1uOiBhbGxDb2x1bW5zIHwgZmluZFByZXZpZXdDb2x1bW4gfVxuICAgICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9vdGVyVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBtZXJnZUZpZWxkc1RvQ29sdW1ucyB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgfSB9XG48L3RhYmxlPlxuPCEtLXJlbmRlckNvbHVtbi0tPlxuXG5AaWYgKCFtb0RhdGFMaXN0Py5sZW5ndGgpIHtcbjxic3Utbm8tZGF0YVxuICAgIFtjbGFzcy5uby10b3Bib3JkZXJdPVwiIWhpZGVUb29sYmFyXCJcbiAgICBbY2xhc3Mubm9ib3JkZXJdPVwiY29udGV4dFZpZXcuR3JpZF9IaWRlSGVhZGVyICYmIGhpZGVUb29sYmFyXCJcbiAgICBbc2ltcGxlXT1cInRydWVcIlxuPlxuPC9ic3Utbm8tZGF0YT5cbn1cblxuPG5nLXRlbXBsYXRlICNoZWFkZXJUZW1wbGF0ZSBsZXQtY29sdW1ucyBsZXQtbW9EYXRhTGlzdENvdW50PlxuICAgIDxic3UtYmFyc2EtdGFibGUtaGVhZGVyXG4gICAgICAgIFtzdGlja3ldPVwic3RpY2t5RW5hYmxlKClcIlxuICAgICAgICBbaGFzU2Vjb25kYXJ5Q29sdW1uc109XCJzZWNvbmRhcnlDb2x1bW5zLmxlbmd0aCA+IDBcIlxuICAgICAgICBbY2xhc3MuaGFzLXRvb2xiYXJdPVwiIWhpZGVUb29sYmFyXCJcbiAgICAgICAgW3N0eWxlLnBvaW50ZXItZXZlbnRzXT1cIm1vRGF0YUxpc3RDb3VudCA/ICdhdXRvJyA6ICdub25lJ1wiXG4gICAgICAgIFt0YWJsZVdpZHRoXT1cImVsV2lkdGhcIlxuICAgICAgICBbc2hvd0RldGFpbHNJblJvd109XCJzaG93RGV0YWlsc0luUm93XCJcbiAgICAgICAgW2hpZGVPcGVuSWNvbl09XCJoaWRlT3Blbkljb25cIlxuICAgICAgICBbcmVzaXplZEJ5VXNlcl09XCJyZXNpemVkQnlVc2VyXCJcbiAgICAgICAgW3RhYmxlSGVhZGVyTW9kZV09XCJ0YWJsZUhlYWRlck1vZGVcIlxuICAgICAgICBbc2hvd1Jvd051bWJlcl09XCJjb250ZXh0Vmlldz8uR3JpZF9TaG93Um93TnVtYmVyXCJcbiAgICAgICAgW2FsbENoZWNrZWRdPVwiYWxsQ2hlY2tlZFwiXG4gICAgICAgIFtydGxdPVwicnRsXCJcbiAgICAgICAgW2FjdGlvbkxpc3RdPVwiYWN0aW9uTGlzdFwiXG4gICAgICAgIFtkaXNhYmxlUmVzcG9uc2l2ZV09XCJkaXNhYmxlUmVzcG9uc2l2ZVwiXG4gICAgICAgIFtpc0NoZWNrTGlzdF09XCJpc0NoZWNrTGlzdFwiXG4gICAgICAgIFtjb2x1bW5zXT1cIlxuICAgICAgICAgICAgY29sdW1uc1xuICAgICAgICAgICAgICAgIHwgZmlsdGVyQ29sdW1uc0J5RGV0YWlsczogZGV0YWlsc0NvbHVtbnM6cm93SW5kaWNhdG9yXG4gICAgICAgICAgICAgICAgfCBmaWx0ZXI6IHsgSXNQcmV2aWV3OiBmYWxzZSB9XG4gICAgICAgICAgICAgICAgfCBoaWRlQ29sdW1uc0lubW9iaWxlOiB2aWV3U2V0dGluZz8uSGlkZUNvbHVtbnNJbk1vYmlsZVxuICAgICAgICBcIlxuICAgICAgICBbZml0V2lkdGhdPVwiZml0V2lkdGhcIlxuICAgICAgICBbZGlzYWJsZU92ZXJmbG93Q29udGV4dE1lbnVdPVwiZGlzYWJsZU92ZXJmbG93Q29udGV4dE1lbnVcIlxuICAgICAgICBbaW5saW5lRWRpdE1vZGVdPVwiaW5saW5lRWRpdE1vZGVcIlxuICAgICAgICBbY29udGV4dE1lbnVJdGVtc109XCJjb250ZXh0TWVudUl0ZW1zXCJcbiAgICAgICAgW2NvbnRleHRNZW51V2lkdGhdPVwiY29udGV4dE1lbnVXaWR0aFwiXG4gICAgICAgIFtzaG93Vmlld0J1dHRvbl09XCJzaG93Vmlld0J1dHRvblwiXG4gICAgICAgIFtkZXZpY2VTaXplXT1cImRldmljZVNpemVcIlxuICAgICAgICBbdmlld1NldHRpbmddPVwidmlld1NldHRpbmdcIlxuICAgICAgICBbaGlkZUhlYWRlcl09XCJjb250ZXh0Vmlldy5HcmlkX0hpZGVIZWFkZXJcIlxuICAgICAgICBbcm93SW5kaWNhdG9yXT1cInJvd0luZGljYXRvclwiXG4gICAgICAgIFtkaXNhYmxlUmVzaXplXT1cImRpc2FibGVSZXNpemVcIlxuICAgICAgICBbZGlzYWJsZUhlYWRlckNvbnRleHRNZW51XT1cImRpc2FibGVIZWFkZXJDb250ZXh0TWVudVwiXG4gICAgICAgIChoZWFkZXJSZW5kZXIpPVwib25TZXRUYWJsZUhlYWRlckRvbSgkZXZlbnQpXCJcbiAgICAgICAgKGNvbHVtblJlc2l6ZSk9XCJvbkNvbHVtblJlc2l6ZWQoJGV2ZW50KVwiXG4gICAgICAgIChjb2x1bW5SZXNpemluZyk9XCJvbkNvbHVtblJlc2l6aW5nKCRldmVudClcIlxuICAgICAgICAoZml0VG9Db250ZW50KT1cIm9uRml0VG9Db250ZW50KCRldmVudClcIlxuICAgICAgICAoZml0VG9Db250YWluZXIpPVwib25GaXRUb0NvbnRhaW5lcigpXCJcbiAgICAgICAgKGZyZWVDb2x1bW5TaXplKT1cIm9uRnJlZUNvbHVtblNpemluZygpXCJcbiAgICAgICAgKGFsbENoZWNrYm94KT1cIm9uQWxsQ2hlY2tib3goJGV2ZW50KVwiXG4gICAgICAgIChzb3J0QXNjZW5kaW5nKT1cIm9uU29ydEFzY2VuZGluZygkZXZlbnQpXCJcbiAgICAgICAgKHNvcnREZXNjZW5kaW5nKT1cIm9uU29ydERlc2NlbmRpbmcoJGV2ZW50KVwiXG4gICAgICAgIChmaWx0ZXIpPVwib25GaWx0ZXIoJGV2ZW50KVwiXG4gICAgICAgIChyZXNldEdyaWRTZXR0aW5ncyk9XCJyZXNldEdyaWRTZXR0aW5ncy5lbWl0KClcIlxuICAgID48L2JzdS1iYXJzYS10YWJsZS1oZWFkZXI+XG4gICAgPCEtLSA8ZGl2XG4gICAgICAgICNoZWFkZXJCb3R0b21PYnNlcnZlclxuICAgICAgICBpbnRlcnNlY3Rpb25PYnNlcnZlclxuICAgICAgICBbaW50ZXJzZWN0aW9uVGhyZXNob2xkXT1cIjAuMVwiXG4gICAgICAgICh2aXNpYmlsaXR5Q2hhbmdlKT1cIm9uSGVhZGVyVmlzaWJpbGl0eUNoYW5nZSgkZXZlbnQsIGhlYWRlckJvdHRvbU9ic2VydmVyKVwiXG4gICAgPjwvZGl2PiAtLT5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2JvZHlUZW1wbGF0ZSBsZXQtY29sdW1ucyBsZXQtcHJldmlld0NvbHVtbj1cInByZXZpZXdDb2x1bW5cIj5cbiAgICA8dGJvZHlcbiAgICAgICAgI2JvZHlcbiAgICAgICAgZmQtdGFibGUtYm9keVxuICAgICAgICBbY2xhc3Mubm9ib3JkZXJdPVwidmlld1NldHRpbmc/Lk5vQm9keUJvcmRlcnMgPT09IHRydWVcIlxuICAgICAgICBbbm9Cb3JkZXJYXT1cInZpZXdTZXR0aW5nPy5Ob0hvcml6dG9uYWxCb3JkZXJzID09PSB0cnVlIHx8IHByZXZpZXdDb2x1bW5cIlxuICAgICAgICBbbm9Cb3JkZXJZXT1cIihwb3BpbiAmJiBzZWNvbmRhcnlDb2x1bW5zLmxlbmd0aCA+IDApIHx8IHByZXZpZXdDb2x1bW5cIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIEBmb3IgKG1vIG9mIG1vRGF0YUxpc3QgfCBtdWx0aXBsZUdyb3VwQnk6IGdyb3VwYnk7IHRyYWNrIF90cmFja0J5Um93KGluZGV4LCBtbyk7IGxldCBpbmRleCA9ICRpbmRleCkge1xuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgIGhhc1Jvd09sZ28gPyByb3dPbGdvVGVtcGxhdGUgOiByb3dUZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBtbyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd051bWJlcjogbW8uSWQgfCByb3dOdW1iZXI6IHBhZ2luZ1NldHRpbmc6bW9EYXRhTGlzdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd0luZGljYXRvckNvbG9yOiAhY29sdW1ucy5sZW5ndGggPyAnJyA6IChjb2x1bW5zWzBdLkNhcHRpb24gfCBydmFsOiBtbzpjb2x1bW5zKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnM6IGNvbHVtbnMgfCBjb2x1bW5DdXN0b21Db21wb25lbnQ6IHZpZXdTZXR0aW5nPy5Db2x1bW5Db21wb25lbnRzPy5Nb0RhdGFMaXN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kYXJ5Q29sdW1uczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRhcnlDb2x1bW5zIHwgY29sdW1uQ3VzdG9tQ29tcG9uZW50OiB2aWV3U2V0dGluZz8uQ29sdW1uQ29tcG9uZW50cz8uTW9EYXRhTGlzdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vRGF0YUxpc3Q6IG1vRGF0YUxpc3QsXG4gICAgICAgICAgICAgICAgICAgICAgICBtb0RhdGFMaXN0Q291bnQ6IG1vRGF0YUxpc3QubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FydGFibGVUZW1wbGF0ZTogY2FydGFibGVUZW1wbGF0ZXNbbW8uUmVsYXRlZE1vPy4kVHlwZURlZklkICsgJ0AnICsgbW8uQ2FydGFibGVTZXR0aW5ncz8uSWRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlld0NvbHVtbjogcHJldmlld0NvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHNDb2xsYXBzZWQ6IHZpZXdTZXR0aW5nPy5EZXRhaWxzU2V0dGluZz8uRGV0YWlsc0NvbGxhcHNlZCA9PT0gdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVEZXRhaWxzVGV4dDogdmlld1NldHRpbmc/LkRldGFpbHNTZXR0aW5nPy5IaWRlRGV0YWlsc1RleHQgPT09IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvdGJvZHk+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNmb290ZXJUZW1wbGF0ZSBsZXQtY29sdW1ucz5cbiAgICBAaWYgKGhhc1N1bW1hcnkpIHtcbiAgICA8dGZvb3QgZmQtdGFibGUtZm9vdGVyPlxuICAgICAgICA8dHIgZmQtdGFibGUtcm93IGNsYXNzPVwicm93LXN1bW1hcnlcIj5cbiAgICAgICAgICAgIEBpZiAoaXNDaGVja0xpc3QpIHtcbiAgICAgICAgICAgIDx0ZCBmZC10YWJsZS1jZWxsIGNvbHVtblJlc2l6ZXI+XG4gICAgICAgICAgICAgICAgPHN0cm9uZyBjbGFzcz1cImNvbC10b3RhbC10ZXh0XCI+e3sgJ1RvdGFsJyB8IGJiYlRyYW5zbGF0ZSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIH0gQGlmICghaXNDaGVja0xpc3QpIHtcbiAgICAgICAgICAgIDx0ZCBmZC10YWJsZS1jZWxsIGNsYXNzPVwic2luZ2xlLXNlbGVjdFwiPlxuICAgICAgICAgICAgICAgIDxzdHJvbmcgY2xhc3M9XCJjb2wtdG90YWwtdGV4dFwiPnt7ICdUb3RhbCcgfCBiYmJUcmFuc2xhdGUgfX08L3N0cm9uZz5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICB9IEBmb3IgKGNvbHVtbiBvZiBjb2x1bW5zOyB0cmFjayBjb2x1bW47IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgQGlmIChjb2x1bW4uSGFzU3VtbWFyeSkge1xuICAgICAgICAgICAgICAgIDxzdHJvbmcgc3R5bGU9XCJkaXJlY3Rpb246IGx0cjsgZGlzcGxheTogYmxvY2tcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgbW9EYXRhTGlzdCB8IHRvdGFsU3VtbWFyeTogY29sdW1uLk5hbWUgfCBudW1iZXIgfX08L3N0cm9uZ1xuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgfSBAaWYgKGNvbnRleHRNZW51SXRlbXMgJiYgY29udGV4dE1lbnVJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICA8dGQgZmQtdGFibGUtY2VsbCBzdHlsZT1cIndpZHRoOiAxMDBweFwiPjwvdGQ+XG4gICAgICAgICAgICB9IEBpZiAoIWhpZGVPcGVuSWNvbiAmJiBjYW5WaWV3ICYmICghaW5saW5lRWRpdE1vZGUgfHwgIWFsbG93SW5saW5lRWRpdCkpIHtcbiAgICAgICAgICAgIDx0ZCBmZC10YWJsZS1jZWxsPjwvdGQ+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvdHI+XG4gICAgPC90Zm9vdD5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlXG4gICAgI3Jvd09sZ29UZW1wbGF0ZVxuICAgIGxldC1tb1xuICAgIGxldC1pbmRleD1cImluZGV4XCJcbiAgICBsZXQtY29sdW1ucz1cImNvbHVtbnNcIlxuICAgIGxldC1tb0RhdGFMaXN0Q291bnQ9XCJtb0RhdGFMaXN0Q291bnRcIlxuICAgIGxldC1tb0RhdGFMaXN0PVwibW9EYXRhTGlzdFwiXG4gICAgbGV0LWNhcnRhYmxlVGVtcGxhdGU9XCJjYXJ0YWJsZVRlbXBsYXRlXCJcbiAgICBsZXQtc2Vjb25kYXJ5Q29sdW1ucz1cInNlY29uZGFyeUNvbHVtbnNcIlxuICAgIGxldC1yb3dJbmRpY2F0b3JDb2xvcj1cInJvd0luZGljYXRvckNvbG9yXCJcbiAgICBsZXQtcm93TnVtYmVyPVwicm93TnVtYmVyXCJcbiAgICBsZXQtcHJldmlld0NvbHVtbj1cInByZXZpZXdDb2x1bW5cIlxuICAgIGxldC1kZXRhaWxzQ29sbGFwc2VkPVwiZGV0YWlsc0NvbGxhcHNlZFwiXG4gICAgbGV0LWhpZGVEZXRhaWxzVGV4dD1cImhpZGVEZXRhaWxzVGV4dFwiXG4+XG4gICAgPGJucmMtZHluYW1pYy1pdGVtLWNvbXBvbmVudFxuICAgICAgICBbY29tcG9uZW50XT1cInZpZXdTZXR0aW5nLlJvd09sZ29cIlxuICAgICAgICBbbW9dPVwibW9cIlxuICAgICAgICBbZGV0YWlsc0NvbGxhcHNlZF09XCJkZXRhaWxzQ29sbGFwc2VkXCJcbiAgICAgICAgW2hpZGVEZXRhaWxzVGV4dF09XCJoaWRlRGV0YWlsc1RleHRcIlxuICAgICAgICBbaXNMYXN0Q2hpbGRHcm91cF09XCJtby4kSXNMYXN0Q2hpbGRHcm91cFwiXG4gICAgICAgIFtncm91cFN1bW1hcnldPVwiZ3JvdXBTdW1tYXJ5XCJcbiAgICAgICAgW3Nob3dWaWV3QnV0dG9uXT1cInNob3dWaWV3QnV0dG9uXCJcbiAgICAgICAgW1Vsdk1haW5DdHJscl09XCJVbHZNYWluQ3RybHJcIlxuICAgICAgICBbbW9EYXRhTGlzdF09XCJtb0RhdGFMaXN0XCJcbiAgICAgICAgW3Nob3dEZXRhaWxzSW5Sb3ddPVwic2hvd0RldGFpbHNJblJvd1wiXG4gICAgICAgIFtoaWRlT3Blbkljb25dPVwiaGlkZU9wZW5JY29uXCJcbiAgICAgICAgW2RldGFpbHNDb2x1bW5zXT1cImRldGFpbHNDb2x1bW5zXCJcbiAgICAgICAgW3Nob3dSb3dOdW1iZXJdPVwiY29udGV4dFZpZXc/LkdyaWRfU2hvd1Jvd051bWJlclwiXG4gICAgICAgIFtyb3dOdW1iZXJdPVwicm93TnVtYmVyXCJcbiAgICAgICAgW2NvbHVtbkNvbXBvbmVudHNdPVwidmlld1NldHRpbmc/LkNvbHVtbkNvbXBvbmVudHMgfHwgbnVsbFwiXG4gICAgICAgIFtjYXJ0YWJsZVRlbXBsYXRlXT1cImNhcnRhYmxlVGVtcGxhdGVcIlxuICAgICAgICBbY2FydGFibGVNb109XCJtby5SZWxhdGVkTW9cIlxuICAgICAgICBbZGlydHlDb2x1bW5zXT1cIm1vLiREaXJ0eUNvbHVtbnNcIlxuICAgICAgICBbY2FydGFibGVXb3JrZmxvd0RhdGFdPVwibW8uU2VyaWFsaXplZFdvcmtmbG93RGF0YVwiXG4gICAgICAgIFtzZXJpYWxpemVkUmVsYXRlZE1vXT1cIm1vLlNlcmlhbGl6ZWRSZWxhdGVkTW9cIlxuICAgICAgICBbZGV0YWlsc1RleHRdPVwidmlld1NldHRpbmc/LkRldGFpbHNTZXR0aW5nPy5CdXR0b25UZXh0XCJcbiAgICAgICAgW2RldGFpbHNUZXh0RnVuY3Rpb25dPVwidmlld1NldHRpbmc/LkRldGFpbHNTZXR0aW5nPy5CdXR0b25UZXh0RnVuY3Rpb25cIlxuICAgICAgICBbZGV0YWlsc0NvbXBvbmVudF09XCJkZXRhaWxzQ29tcG9uZW50XCJcbiAgICAgICAgW2NvbG9yaW5nUm93XT1cInZpZXdTZXR0aW5nPy5Db2xvcmluZ1Jvd1wiXG4gICAgICAgIFtpc0NoZWNrZWRdPVwibW8uJElzQ2hlY2tlZFwiXG4gICAgICAgIFt2aXNpYmlsaXR5XT1cIm1vLiRWaXNpYmlsaXR5XCJcbiAgICAgICAgW2V4cGFuZGVkXT1cIm1vLiRFeHBhbmRlZFwiXG4gICAgICAgIFtzdHlsZUluZGV4XT1cIm1vLiRTdHlsZUluZGV4XCJcbiAgICAgICAgW2xldmVsXT1cIm1vLiRMZXZlbFwiXG4gICAgICAgIFtwYXJlbnRFeHBhbmRlZF09XCJtby4kUGFyZW50Py4kRXhwYW5kZWRcIlxuICAgICAgICBbbW9EYXRhTGlzdENvdW50XT1cIm1vRGF0YUxpc3RDb3VudFwiXG4gICAgICAgIFtjb2x1bW5zQ291bnRdPVwiY29sdW1uc0NvdW50IC0gZGV0YWlsc0NvbHVtbnMubGVuZ3RoXCJcbiAgICAgICAgW3R5cGVEZWZJZF09XCJ0eXBlRGVmSWRcIlxuICAgICAgICBbZXh0cmFSZWxhdGlvbl09XCJleHRyYVJlbGF0aW9uXCJcbiAgICAgICAgW2Zvcm1TZXR0aW5nXT1cImZvcm1TZXR0aW5nXCJcbiAgICAgICAgW2luZGV4XT1cImluZGV4XCJcbiAgICAgICAgW3NldHRpbmddPVwidmlld1NldHRpbmdcIlxuICAgICAgICBbc2Vjb25kYXJ5Q29sdW1uc109XCJzZWNvbmRhcnlDb2x1bW5zIHwgZmlsdGVyQ29sdW1uc0J5RGV0YWlsczogZGV0YWlsc0NvbHVtbnM6cm93SW5kaWNhdG9yXCJcbiAgICAgICAgW2NvbHVtbnNdPVwiY29sdW1ucyB8IGZpbHRlckNvbHVtbnNCeURldGFpbHM6IGRldGFpbHNDb2x1bW5zOnJvd0luZGljYXRvclwiXG4gICAgICAgIFtpc05ld0lubGluZU1vXT1cIm1vLiROZXdJbmxpbmVNb1wiXG4gICAgICAgIFthY2Nlc3NdPVwiYWNjZXNzXCJcbiAgICAgICAgW2lubGluZUVkaXRNb2RlXT1cImlubGluZUVkaXRNb2RlXCJcbiAgICAgICAgW2FsbG93SW5saW5lRWRpdF09XCJhbGxvd0lubGluZUVkaXRcIlxuICAgICAgICBbcnRsXT1cInJ0bFwiXG4gICAgICAgIFtkZXZpY2VOYW1lXT1cImRldmljZU5hbWVcIlxuICAgICAgICBbZGV2aWNlU2l6ZV09XCJkZXZpY2VTaXplXCJcbiAgICAgICAgW2FsbENvbHVtbnNdPVwiYWxsQ29sdW1uc1wiXG4gICAgICAgIFtjb250ZXh0TWVudUl0ZW1zXT1cImNvbnRleHRNZW51SXRlbXNcIlxuICAgICAgICBbY2FuVmlld109XCJjYW5WaWV3XCJcbiAgICAgICAgW2NvbmRpdGlvbmFsRm9ybWF0c109XCJjb25kaXRpb25hbEZvcm1hdHNcIlxuICAgICAgICBbZGlzYWJsZU92ZXJmbG93Q29udGV4dE1lbnVdPVwiZGlzYWJsZU92ZXJmbG93Q29udGV4dE1lbnVcIlxuICAgICAgICBbbmF2aWdhdGlvbkFycm93XT1cIm5hdmlnYXRpb25BcnJvd1wiXG4gICAgICAgIFtpc0NoZWNrTGlzdF09XCJpc0NoZWNrTGlzdFwiXG4gICAgICAgIFtyb3dJbmRpY2F0b3JdPVwicm93SW5kaWNhdG9yXCJcbiAgICAgICAgW3Jvd0luZGljYXRvckNvbG9yXT1cInJvd0luZGljYXRvckNvbG9yXCJcbiAgICAgICAgKGV2ZW50cyk9XCJvbk9sZ29FdmVudHMoJGV2ZW50KVwiXG4gICAgPlxuICAgIDwvYm5yYy1keW5hbWljLWl0ZW0tY29tcG9uZW50PlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZVxuICAgICNyb3dUZW1wbGF0ZVxuICAgIGxldC1tb1xuICAgIGxldC1pbmRleD1cImluZGV4XCJcbiAgICBsZXQtcm93TnVtYmVyPVwicm93TnVtYmVyXCJcbiAgICBsZXQtY29sdW1ucz1cImNvbHVtbnNcIlxuICAgIGxldC1tb0RhdGFMaXN0Q291bnQ9XCJtb0RhdGFMaXN0Q291bnRcIlxuICAgIGxldC1tb0RhdGFMaXN0PVwibW9EYXRhTGlzdFwiXG4gICAgbGV0LWNhcnRhYmxlVGVtcGxhdGU9XCJjYXJ0YWJsZVRlbXBsYXRlXCJcbiAgICBsZXQtc2Vjb25kYXJ5Q29sdW1ucz1cInNlY29uZGFyeUNvbHVtbnNcIlxuICAgIGxldC1yb3dJbmRpY2F0b3JDb2xvcj1cInJvd0luZGljYXRvckNvbG9yXCJcbiAgICBsZXQtcHJldmlld0NvbHVtbj1cInByZXZpZXdDb2x1bW5cIlxuICAgIGxldC1kZXRhaWxzQ29sbGFwc2VkPVwiZGV0YWlsc0NvbGxhcHNlZFwiXG4gICAgbGV0LWhpZGVEZXRhaWxzVGV4dD1cImhpZGVEZXRhaWxzVGV4dFwiXG4+XG4gICAgPGJzdS1iYXJzYS10YWJsZS1yb3dcbiAgICAgICAgW21vXT1cIm1vXCJcbiAgICAgICAgW2RpcnR5Q29sdW1uc109XCJtby4kRGlydHlDb2x1bW5zXCJcbiAgICAgICAgW2lzTGFzdENoaWxkR3JvdXBdPVwibW8uJElzTGFzdENoaWxkR3JvdXBcIlxuICAgICAgICBbbW9EYXRhTGlzdF09XCJtb0RhdGFMaXN0XCJcbiAgICAgICAgW2hpZGVEZXRhaWxzVGV4dF09XCJoaWRlRGV0YWlsc1RleHRcIlxuICAgICAgICBbZGV0YWlsc0NvbGxhcHNlZF09XCJkZXRhaWxzQ29sbGFwc2VkXCJcbiAgICAgICAgW2dyb3VwU3VtbWFyeV09XCJncm91cFN1bW1hcnlcIlxuICAgICAgICBbVWx2TWFpbkN0cmxyXT1cIlVsdk1haW5DdHJsclwiXG4gICAgICAgIFtpc01vYmlsZV09XCJpc01vYmlsZVwiXG4gICAgICAgIFtzaG93RGV0YWlsc0luUm93XT1cInNob3dEZXRhaWxzSW5Sb3dcIlxuICAgICAgICBbaGlkZU9wZW5JY29uXT1cImhpZGVPcGVuSWNvblwiXG4gICAgICAgIFtzaG93Um93TnVtYmVyXT1cImNvbnRleHRWaWV3Py5HcmlkX1Nob3dSb3dOdW1iZXJcIlxuICAgICAgICBbcm93TnVtYmVyXT1cInJvd051bWJlclwiXG4gICAgICAgIFtjb2xvcmluZ1Jvd109XCJ2aWV3U2V0dGluZz8uQ29sb3JpbmdSb3dcIlxuICAgICAgICBbZGlzYWJsZUVsbGFwc2lzXT1cInZpZXdTZXR0aW5nPy5EaXNhYmxlRWxsYXBzaXNcIlxuICAgICAgICBbc2hvd1ZpZXdCdXR0b25dPVwic2hvd1ZpZXdCdXR0b25cIlxuICAgICAgICBbZGV0YWlsc0NvbHVtbnNdPVwiZGV0YWlsc0NvbHVtbnNcIlxuICAgICAgICBbY29sdW1uQ29tcG9uZW50c109XCJ2aWV3U2V0dGluZz8uQ29sdW1uQ29tcG9uZW50cyB8fCBudWxsXCJcbiAgICAgICAgW2NhcnRhYmxlVGVtcGxhdGVdPVwiY2FydGFibGVUZW1wbGF0ZVwiXG4gICAgICAgIFtjYXJ0YWJsZU1vXT1cIm1vLlJlbGF0ZWRNb1wiXG4gICAgICAgIFtjYXJ0YWJsZVdvcmtmbG93RGF0YV09XCJtby5TZXJpYWxpemVkV29ya2Zsb3dEYXRhXCJcbiAgICAgICAgW3NlcmlhbGl6ZWRSZWxhdGVkTW9dPVwibW8uU2VyaWFsaXplZFJlbGF0ZWRNb1wiXG4gICAgICAgIFtkZXRhaWxzVGV4dF09XCJ2aWV3U2V0dGluZz8uRGV0YWlsc1NldHRpbmc/LkJ1dHRvblRleHRcIlxuICAgICAgICBbZGV0YWlsc0NvbXBvbmVudF09XCJkZXRhaWxzQ29tcG9uZW50XCJcbiAgICAgICAgW2lzQ2hlY2tlZF09XCJtby4kSXNDaGVja2VkXCJcbiAgICAgICAgW3Zpc2liaWxpdHldPVwibW8uJFZpc2liaWxpdHlcIlxuICAgICAgICBbZXhwYW5kZWRdPVwibW8uJEV4cGFuZGVkXCJcbiAgICAgICAgW3N0eWxlSW5kZXhdPVwibW8uJFN0eWxlSW5kZXhcIlxuICAgICAgICBbbGV2ZWxdPVwibW8uJExldmVsXCJcbiAgICAgICAgW3BhcmVudEV4cGFuZGVkXT1cIm1vLiRQYXJlbnQ/LiRFeHBhbmRlZFwiXG4gICAgICAgIFttb0RhdGFMaXN0Q291bnRdPVwibW9EYXRhTGlzdENvdW50XCJcbiAgICAgICAgW2NvbHVtbnNDb3VudF09XCJjb2x1bW5zQ291bnQgLSBkZXRhaWxzQ29sdW1ucy5sZW5ndGhcIlxuICAgICAgICBbdHlwZURlZklkXT1cInR5cGVEZWZJZFwiXG4gICAgICAgIFtleHRyYVJlbGF0aW9uXT1cImV4dHJhUmVsYXRpb25cIlxuICAgICAgICBbZm9ybVNldHRpbmddPVwiZm9ybVNldHRpbmdcIlxuICAgICAgICBbaW5kZXhdPVwiaW5kZXhcIlxuICAgICAgICBbc2V0dGluZ109XCJ2aWV3U2V0dGluZ1wiXG4gICAgICAgIFtjaGVja2JveENvbXBvbmVudF09XCJ2aWV3U2V0dGluZz8uQ2hlY2tib3hDb21wb25lbnRcIlxuICAgICAgICBbc2Vjb25kYXJ5Q29sdW1uc109XCJcbiAgICAgICAgICAgIHNlY29uZGFyeUNvbHVtbnNcbiAgICAgICAgICAgICAgICB8IGZpbHRlckNvbHVtbnNCeURldGFpbHM6IGRldGFpbHNDb2x1bW5zOmZhbHNlXG4gICAgICAgICAgICAgICAgfCBmaWx0ZXI6IHsgSXNQcmV2aWV3OiBmYWxzZSB9XG4gICAgICAgICAgICAgICAgfCBoaWRlQ29sdW1uc0lubW9iaWxlOiB2aWV3U2V0dGluZz8uSGlkZUNvbHVtbnNJbk1vYmlsZVxuICAgICAgICBcIlxuICAgICAgICBbY29sdW1uc109XCJcbiAgICAgICAgICAgIGNvbHVtbnNcbiAgICAgICAgICAgICAgICB8IGZpbHRlckNvbHVtbnNCeURldGFpbHM6IGRldGFpbHNDb2x1bW5zOnJvd0luZGljYXRvclxuICAgICAgICAgICAgICAgIHwgZmlsdGVyOiB7IElzUHJldmlldzogZmFsc2UgfVxuICAgICAgICAgICAgICAgIHwgaGlkZUNvbHVtbnNJbm1vYmlsZTogdmlld1NldHRpbmc/LkhpZGVDb2x1bW5zSW5Nb2JpbGVcbiAgICAgICAgXCJcbiAgICAgICAgW2lzTmV3SW5saW5lTW9dPVwibW8uJE5ld0lubGluZU1vXCJcbiAgICAgICAgW2FjY2Vzc109XCJhY2Nlc3NcIlxuICAgICAgICBbc2ltcGxlSW5saW5lRWRpdF09XCJzaW1wbGVJbmxpbmVFZGl0XCJcbiAgICAgICAgW25vU2F2ZUlubGluZUVkaXRJblNlcnZlcl09XCJzaW1wbGVJbmxpbmVFZGl0XCJcbiAgICAgICAgW2FjdGlvbkxpc3RdPVwiYWN0aW9uTGlzdFwiXG4gICAgICAgIFtpbmxpbmVFZGl0TW9kZV09XCJpbmxpbmVFZGl0TW9kZVwiXG4gICAgICAgIFthbGxvd0lubGluZUVkaXRdPVwiYWxsb3dJbmxpbmVFZGl0XCJcbiAgICAgICAgW3J0bF09XCJydGxcIlxuICAgICAgICBbZGV2aWNlTmFtZV09XCJkZXZpY2VOYW1lXCJcbiAgICAgICAgW2RldmljZVNpemVdPVwiZGV2aWNlU2l6ZVwiXG4gICAgICAgIFthbGxDb2x1bW5zXT1cImFsbENvbHVtbnNcIlxuICAgICAgICBbY29udGV4dE1lbnVJdGVtc109XCJjb250ZXh0TWVudUl0ZW1zXCJcbiAgICAgICAgW2NhblZpZXddPVwiY2FuVmlld1wiXG4gICAgICAgIFtjb25kaXRpb25hbEZvcm1hdHNdPVwiY29uZGl0aW9uYWxGb3JtYXRzXCJcbiAgICAgICAgW2Rpc2FibGVPdmVyZmxvd0NvbnRleHRNZW51XT1cImRpc2FibGVPdmVyZmxvd0NvbnRleHRNZW51XCJcbiAgICAgICAgW25hdmlnYXRpb25BcnJvd109XCJuYXZpZ2F0aW9uQXJyb3dcIlxuICAgICAgICBbaXNDaGVja0xpc3RdPVwiaXNDaGVja0xpc3RcIlxuICAgICAgICBbcm93SW5kaWNhdG9yXT1cInJvd0luZGljYXRvclwiXG4gICAgICAgIFtyb3dJbmRpY2F0b3JDb2xvcl09XCJyb3dJbmRpY2F0b3JDb2xvclwiXG4gICAgICAgIFtwcmV2aWV3Q29sdW1uXT1cInByZXZpZXdDb2x1bW5cIlxuICAgICAgICAoY29sdW1uU3VtbWFyeSk9XCJjb2x1bW5TdW1tYXJ5LmVtaXQoJGV2ZW50KVwiXG4gICAgICAgIChyZXNldFdvcmtmbG93U3RhdGUpPVwicmVzZXRXb3JrZmxvd1N0YXRlLmVtaXQobW8pXCJcbiAgICAgICAgKGVzY2FwZUtleSk9XCJvbkVzY2FwZUtleSgkZXZlbnQpXCJcbiAgICAgICAgKGV4cGFuZENsaWNrKT1cIm9uRXhwYW5kQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgIChyb3dDaGVjayk9XCJvblJvd0NoZWNrKCRldmVudClcIlxuICAgICAgICAod29ya2Zsb3dTaGFyZUJ1dHRvbnMpPVwib25Xb3JrZmxvd1NoYXJlQnV0dG9ucygkZXZlbnQpXCJcbiAgICAgICAgKGRlc2VsZWN0QWxsKT1cIm9uRGVzZWxlY3RBbGwoKVwiXG4gICAgICAgIChyb3dDbGljayk9XCJvblJvd0NsaWNrKCRldmVudClcIlxuICAgICAgICAodWx2Q29tbWFuZCk9XCJvblVsdkNvbW1hbmQoJGV2ZW50KVwiXG4gICAgICAgIChhY3Rpb25MaXN0Q2xpY2spPVwib25BY3Rpb25MaXN0Q2xpY2sobW8sIGluZGV4LCAkZXZlbnQpXCJcbiAgICAgICAgKHNlbGVjdE5leHRJbmxpbmVSZWNvcmQpPVwib25TZWxlY3ROZXh0SW5saW5lUmVjb3JkKCRldmVudClcIlxuICAgICAgICAoZWRpdEZvcm1QYW5lbFNhdmUpPVwib25FZGl0Rm9ybVBhbmVsU2F2ZSgkZXZlbnQpXCJcbiAgICAgICAgKGVkaXRGb3JtUGFuZWxDYW5jZWwpPVwib25FZGl0Rm9ybVBhbmVsQ2FuY2VsKCRldmVudClcIlxuICAgICAgICAoZWRpdEZvcm1QYW5lbFZhbHVlQ2hhbmdlKT1cIm9uRWRpdEZvcm1QYW5lbFZhbHVlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAoY2FydGFibGVGb3JtQ2xvc2VkKT1cIm9uQ2FydGFibGVGb3JtQ2xvc2VkKCRldmVudClcIlxuICAgID5cbiAgICA8L2JzdS1iYXJzYS10YWJsZS1yb3c+XG4gICAgPCEtLSA8ZGl2XG4gICAgICAgICNyb3dCb3R0b21cbiAgICAgICAgaW50ZXJzZWN0aW9uT2JzZXJ2ZXJcbiAgICAgICAgW2ludGVyc2VjdGlvblRocmVzaG9sZF09XCIwLjFcIlxuICAgICAgICAodmlzaWJpbGl0eUNoYW5nZSk9XCJvblJvd1Zpc2liaWxpdHlDaGFuZ2UoJGV2ZW50LCBpbmRleCwgcm93Qm90dG9tKVwiXG4gICAgPjwvZGl2PiAtLT5cbjwvbmctdGVtcGxhdGU+XG48ZGl2ICN0YWJsZUJvdHRvbU9ic2VydmU+PC9kaXY+XG4iXX0=
|