@ng-nest/ui 16.0.11 → 16.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/checkbox/checkbox.component.d.ts +0 -1
  2. package/checkbox/checkbox.property.d.ts +16 -1
  3. package/esm2022/checkbox/checkbox.component.mjs +3 -5
  4. package/esm2022/checkbox/checkbox.property.mjs +28 -2
  5. package/esm2022/color-picker/color-picker-portal.component.mjs +3 -3
  6. package/esm2022/dialog/dialog-container.component.mjs +2 -2
  7. package/esm2022/drawer/drawer-container.component.mjs +2 -2
  8. package/esm2022/examples/examples.component.mjs +2 -2
  9. package/esm2022/image/image.component.mjs +2 -2
  10. package/esm2022/radio/radio.component.mjs +3 -3
  11. package/esm2022/radio/radio.property.mjs +12 -2
  12. package/esm2022/table/table-body.component.mjs +3 -3
  13. package/esm2022/table/table-head.component.mjs +3 -3
  14. package/esm2022/transfer/transfer.component.mjs +3 -3
  15. package/esm2022/tree/tree-node.component.mjs +3 -3
  16. package/esm2022/tree/tree.component.mjs +29 -8
  17. package/esm2022/upload/upload-portal.component.mjs +2 -2
  18. package/fesm2022/ng-nest-ui-checkbox.mjs +29 -5
  19. package/fesm2022/ng-nest-ui-checkbox.mjs.map +1 -1
  20. package/fesm2022/ng-nest-ui-color-picker.mjs +2 -2
  21. package/fesm2022/ng-nest-ui-color-picker.mjs.map +1 -1
  22. package/fesm2022/ng-nest-ui-dialog.mjs +2 -2
  23. package/fesm2022/ng-nest-ui-dialog.mjs.map +1 -1
  24. package/fesm2022/ng-nest-ui-drawer.mjs +2 -2
  25. package/fesm2022/ng-nest-ui-drawer.mjs.map +1 -1
  26. package/fesm2022/ng-nest-ui-examples.mjs +2 -2
  27. package/fesm2022/ng-nest-ui-examples.mjs.map +1 -1
  28. package/fesm2022/ng-nest-ui-image.mjs +2 -2
  29. package/fesm2022/ng-nest-ui-image.mjs.map +1 -1
  30. package/fesm2022/ng-nest-ui-radio.mjs +13 -3
  31. package/fesm2022/ng-nest-ui-radio.mjs.map +1 -1
  32. package/fesm2022/ng-nest-ui-table.mjs +4 -4
  33. package/fesm2022/ng-nest-ui-table.mjs.map +1 -1
  34. package/fesm2022/ng-nest-ui-transfer.mjs +2 -2
  35. package/fesm2022/ng-nest-ui-transfer.mjs.map +1 -1
  36. package/fesm2022/ng-nest-ui-tree.mjs +30 -9
  37. package/fesm2022/ng-nest-ui-tree.mjs.map +1 -1
  38. package/fesm2022/ng-nest-ui-upload.mjs +2 -2
  39. package/fesm2022/ng-nest-ui-upload.mjs.map +1 -1
  40. package/package.json +91 -91
  41. package/radio/radio.property.d.ts +6 -1
  42. package/tree/tree.component.d.ts +1 -0
@@ -171,16 +171,16 @@ class XTableHeadComponent extends XTableHeadProperty {
171
171
  return item.id;
172
172
  }
173
173
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: XTableHeadComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.XConfigService }], target: i0.ɵɵFactoryTarget.Component }); }
174
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: XTableHeadComponent, selector: "x-table-head", inputs: { table: "table" }, viewQueries: [{ propertyName: "thead", first: true, predicate: ["thead"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<thead\r\n #thead\r\n [ngStyle]=\"theadStyle\"\r\n [class.x-table-head-top]=\"position === 'top'\"\r\n [class.x-table-head-bottom]=\"position === 'bottom'\"\r\n>\r\n <ng-container *ngIf=\"cellConfig; else columnsTpl\">\r\n <tr\r\n [style.gridTemplateColumns]=\"cellConfig.gridTemplateColumns\"\r\n [style.min-height.px]=\"getRowHeight\"\r\n >\r\n <th\r\n *ngFor=\"let column of cellConfig.cells\"\r\n [class.x-table-sticky]=\"table.getStickyLeft(column) || table.getStickyRight(column)\"\r\n [class.x-table-sticky-left]=\"table.getStickyLeft(column)\"\r\n [class.x-table-sticky-right]=\"table.getStickyRight(column)\"\r\n [class.x-table-sticky-left-last]=\"table.getStickyLeftLast(column)\"\r\n [class.x-table-sticky-right-first]=\"table.getStickyRightFirst(column)\"\r\n [class.x-table-width-drag]=\"column.dragWidth\"\r\n [style.grid-area]=\"column.gridArea\"\r\n [style.left.px]=\"column.left\"\r\n [style.right.px]=\"column.right\"\r\n [style.min-height.px]=\"getRowHeight\"\r\n [title]=\"column?.label\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"columnBaseTpl; context: { column: column }\"></ng-container>\r\n <div\r\n *ngIf=\"column.dragWidth\"\r\n class=\"x-table-drag-width\"\r\n x-drag\r\n (dragMoved)=\"dragWidthMoved($event, column)\"\r\n (dragStarted)=\"dragWidthStarted($event, column)\"\r\n (dragEnded)=\"dragWidthEnded($event, column)\"\r\n ></div>\r\n </th>\r\n </tr>\r\n </ng-container>\r\n <ng-container *ngIf=\"table.headSearchTpl\">\r\n <ng-container *ngTemplateOutlet=\"columnsTpl; context: { case: 'search' }\"></ng-container>\r\n </ng-container>\r\n</thead>\r\n\r\n<ng-template #columnsTpl let-case=\"case\">\r\n <tr\r\n cdkDropList\r\n cdkDropListOrientation=\"horizontal\"\r\n (cdkDropListSorted)=\"dropListSorted($event)\"\r\n (cdkDropListDropped)=\"dropListDropped($event)\"\r\n [style.height.px]=\"getRowHeight\"\r\n [style.min-height.px]=\"getRowHeight\"\r\n [style.padding-right.px]=\"scrollYWidth\"\r\n [style.width.px]=\"scrollXWidth\"\r\n [class.x-table-search]=\"case === 'search'\"\r\n >\r\n <th\r\n *ngFor=\"let column of columns; trackBy: trackByItem\"\r\n cdkDrag\r\n [cdkDragDisabled]=\"column.draggingWidth || !column.dragColumn\"\r\n (cdkDragStarted)=\"dragStarted($event, column)\"\r\n (cdkDragEnded)=\"dragEnded(column)\"\r\n [ngClass]=\"thClassMap\"\r\n [class.x-table-th]=\"true\"\r\n [class.x-table-sticky]=\"table.getSticky(column)\"\r\n [class.x-table-sticky-left]=\"table.getStickyLeft(column)\"\r\n [class.x-table-sticky-right]=\"table.getStickyRight(column)\"\r\n [class.x-table-sticky-left-last]=\"table.getStickyLeftLast(column)\"\r\n [class.x-table-sticky-right-first]=\"table.getStickyRightFirst(column)\"\r\n [style.min-height.px]=\"getRowHeight\"\r\n [style.width.px]=\"getColumnWidth(column)\"\r\n [style.left.px]=\"column.left\"\r\n [style.right.px]=\"getColumnRight(column.right)\"\r\n [style.flex]=\"getFlex(column)\"\r\n >\r\n <ng-container [ngSwitch]=\"case\">\r\n <ng-container *ngSwitchCase=\"'search'\">\r\n <ng-container\r\n *ngTemplateOutlet=\"table.headSearchTpl; context: { $column: column }\"\r\n ></ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <ng-container\r\n *ngTemplateOutlet=\"columnBaseTpl; context: { column: column }\"\r\n ></ng-container>\r\n <div\r\n *ngIf=\"column.dragWidth\"\r\n class=\"x-table-drag-width\"\r\n x-drag\r\n (dragMoved)=\"dragWidthMoved($event, column)\"\r\n (dragStarted)=\"dragWidthStarted($event, column)\"\r\n (dragEnded)=\"dragWidthEnded($event, column)\"\r\n ></div>\r\n </ng-container>\r\n </ng-container>\r\n </th>\r\n </tr>\r\n</ng-template>\r\n\r\n<ng-template #columnBaseTpl let-column=\"column\">\r\n <ng-container [ngSwitch]=\"column.type\">\r\n <ng-container *ngSwitchCase=\"'checkbox'\">\r\n <x-checkbox\r\n *ngIf=\"column.headChecked\"\r\n [data]=\"[{ id: true, label: column.label }]\"\r\n [(ngModel)]=\"table.checkedValues[column.id]\"\r\n (ngModelChange)=\"table.headChecked($event, column)\"\r\n [indeterminate]=\"table.checkedValues[column.id + table.indeterminate]\"\r\n ></x-checkbox>\r\n <ng-container *ngIf=\"!column.headChecked\">\r\n <ng-container\r\n *ngTemplateOutlet=\"cloumnDefaultTpl; context: { column: column }\"\r\n ></ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'index'\">\r\n <a>{{ column.label }}</a>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <ng-container\r\n *ngTemplateOutlet=\"cloumnDefaultTpl; context: { column: column }\"\r\n ></ng-container>\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #cloumnDefaultTpl let-column=\"column\">\r\n <a\r\n [class.x-table-sort]=\"column.sort\"\r\n (click)=\"onSort(column)\"\r\n [style.text-align]=\"column.textAlign\"\r\n >\r\n <ng-container *xOutlet=\"columnTpl[column.id]; context: { $column: column }\">\r\n {{ column.label }}\r\n </ng-container>\r\n <x-icon\r\n *ngIf=\"column.sort\"\r\n type=\"fto-bar-chart\"\r\n class=\"x-table-sort-icon\"\r\n [class.x-table-icon-up]=\"sortStr === column.id + ' desc'\"\r\n [class.x-table-icon-down]=\"sortStr === column.id + ' asc'\"\r\n ></x-icon>\r\n </a>\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.XOutletDirective, selector: "[xOutlet]", inputs: ["xOutletContext", "xOutlet"] }, { kind: "component", type: i5.XCheckboxComponent, selector: "x-checkbox" }, { kind: "component", type: i6.XIconComponent, selector: "x-icon" }, { kind: "directive", type: i7.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i7.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i8.XDragDirective, selector: "[x-drag]" }], encapsulation: i0.ViewEncapsulation.None }); }
174
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: XTableHeadComponent, selector: "x-table-head", inputs: { table: "table" }, viewQueries: [{ propertyName: "thead", first: true, predicate: ["thead"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<thead\r\n #thead\r\n [ngStyle]=\"theadStyle\"\r\n [class.x-table-head-top]=\"position === 'top'\"\r\n [class.x-table-head-bottom]=\"position === 'bottom'\"\r\n>\r\n <ng-container *ngIf=\"cellConfig; else columnsTpl\">\r\n <tr\r\n [style.gridTemplateColumns]=\"cellConfig.gridTemplateColumns\"\r\n [style.min-height.px]=\"getRowHeight\"\r\n >\r\n <th\r\n *ngFor=\"let column of cellConfig.cells\"\r\n [class.x-table-sticky]=\"table.getStickyLeft(column) || table.getStickyRight(column)\"\r\n [class.x-table-sticky-left]=\"table.getStickyLeft(column)\"\r\n [class.x-table-sticky-right]=\"table.getStickyRight(column)\"\r\n [class.x-table-sticky-left-last]=\"table.getStickyLeftLast(column)\"\r\n [class.x-table-sticky-right-first]=\"table.getStickyRightFirst(column)\"\r\n [class.x-table-width-drag]=\"column.dragWidth\"\r\n [style.grid-area]=\"column.gridArea\"\r\n [style.left.px]=\"column.left\"\r\n [style.right.px]=\"column.right\"\r\n [style.min-height.px]=\"getRowHeight\"\r\n [title]=\"column?.label\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"columnBaseTpl; context: { column: column }\"></ng-container>\r\n <div\r\n *ngIf=\"column.dragWidth\"\r\n class=\"x-table-drag-width\"\r\n x-drag\r\n (dragMoved)=\"dragWidthMoved($event, column)\"\r\n (dragStarted)=\"dragWidthStarted($event, column)\"\r\n (dragEnded)=\"dragWidthEnded($event, column)\"\r\n ></div>\r\n </th>\r\n </tr>\r\n </ng-container>\r\n <ng-container *ngIf=\"table.headSearchTpl\">\r\n <ng-container *ngTemplateOutlet=\"columnsTpl; context: { case: 'search' }\"></ng-container>\r\n </ng-container>\r\n</thead>\r\n\r\n<ng-template #columnsTpl let-case=\"case\">\r\n <tr\r\n cdkDropList\r\n cdkDropListOrientation=\"horizontal\"\r\n (cdkDropListSorted)=\"dropListSorted($event)\"\r\n (cdkDropListDropped)=\"dropListDropped($event)\"\r\n [style.height.px]=\"getRowHeight\"\r\n [style.min-height.px]=\"getRowHeight\"\r\n [style.padding-right.px]=\"scrollYWidth\"\r\n [style.width.px]=\"scrollXWidth\"\r\n [class.x-table-search]=\"case === 'search'\"\r\n >\r\n <th\r\n *ngFor=\"let column of columns; trackBy: trackByItem\"\r\n cdkDrag\r\n [cdkDragDisabled]=\"column.draggingWidth || !column.dragColumn\"\r\n (cdkDragStarted)=\"dragStarted($event, column)\"\r\n (cdkDragEnded)=\"dragEnded(column)\"\r\n [ngClass]=\"thClassMap\"\r\n [class.x-table-th]=\"true\"\r\n [class.x-table-sticky]=\"table.getSticky(column)\"\r\n [class.x-table-sticky-left]=\"table.getStickyLeft(column)\"\r\n [class.x-table-sticky-right]=\"table.getStickyRight(column)\"\r\n [class.x-table-sticky-left-last]=\"table.getStickyLeftLast(column)\"\r\n [class.x-table-sticky-right-first]=\"table.getStickyRightFirst(column)\"\r\n [style.min-height.px]=\"getRowHeight\"\r\n [style.width.px]=\"getColumnWidth(column)\"\r\n [style.left.px]=\"column.left\"\r\n [style.right.px]=\"getColumnRight(column.right)\"\r\n [style.flex]=\"getFlex(column)\"\r\n >\r\n <ng-container [ngSwitch]=\"case\">\r\n <ng-container *ngSwitchCase=\"'search'\">\r\n <ng-container\r\n *ngTemplateOutlet=\"table.headSearchTpl; context: { $column: column }\"\r\n ></ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <ng-container\r\n *ngTemplateOutlet=\"columnBaseTpl; context: { column: column }\"\r\n ></ng-container>\r\n <div\r\n *ngIf=\"column.dragWidth\"\r\n class=\"x-table-drag-width\"\r\n x-drag\r\n (dragMoved)=\"dragWidthMoved($event, column)\"\r\n (dragStarted)=\"dragWidthStarted($event, column)\"\r\n (dragEnded)=\"dragWidthEnded($event, column)\"\r\n ></div>\r\n </ng-container>\r\n </ng-container>\r\n </th>\r\n </tr>\r\n</ng-template>\r\n\r\n<ng-template #columnBaseTpl let-column=\"column\">\r\n <ng-container [ngSwitch]=\"column.type\">\r\n <ng-container *ngSwitchCase=\"'checkbox'\">\r\n <x-checkbox\r\n *ngIf=\"column.headChecked\"\r\n [data]=\"[{ id: true, label: column.label }]\"\r\n [(ngModel)]=\"table.checkedValues[column.id]\"\r\n (ngModelChange)=\"table.headChecked($event, column)\"\r\n single\r\n [indeterminate]=\"table.checkedValues[column.id + table.indeterminate]\"\r\n ></x-checkbox>\r\n <ng-container *ngIf=\"!column.headChecked\">\r\n <ng-container\r\n *ngTemplateOutlet=\"cloumnDefaultTpl; context: { column: column }\"\r\n ></ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'index'\">\r\n <a>{{ column.label }}</a>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <ng-container\r\n *ngTemplateOutlet=\"cloumnDefaultTpl; context: { column: column }\"\r\n ></ng-container>\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #cloumnDefaultTpl let-column=\"column\">\r\n <a\r\n [class.x-table-sort]=\"column.sort\"\r\n (click)=\"onSort(column)\"\r\n [style.text-align]=\"column.textAlign\"\r\n >\r\n <ng-container *xOutlet=\"columnTpl[column.id]; context: { $column: column }\">\r\n {{ column.label }}\r\n </ng-container>\r\n <x-icon\r\n *ngIf=\"column.sort\"\r\n type=\"fto-bar-chart\"\r\n class=\"x-table-sort-icon\"\r\n [class.x-table-icon-up]=\"sortStr === column.id + ' desc'\"\r\n [class.x-table-icon-down]=\"sortStr === column.id + ' asc'\"\r\n ></x-icon>\r\n </a>\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.XOutletDirective, selector: "[xOutlet]", inputs: ["xOutletContext", "xOutlet"] }, { kind: "component", type: i5.XCheckboxComponent, selector: "x-checkbox" }, { kind: "component", type: i6.XIconComponent, selector: "x-icon" }, { kind: "directive", type: i7.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i7.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i8.XDragDirective, selector: "[x-drag]" }], encapsulation: i0.ViewEncapsulation.None }); }
175
175
  }
176
176
  export { XTableHeadComponent };
177
177
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: XTableHeadComponent, decorators: [{
178
178
  type: Component,
179
- args: [{ selector: `${XTableHeadPrefix}`, encapsulation: ViewEncapsulation.None, template: "<thead\r\n #thead\r\n [ngStyle]=\"theadStyle\"\r\n [class.x-table-head-top]=\"position === 'top'\"\r\n [class.x-table-head-bottom]=\"position === 'bottom'\"\r\n>\r\n <ng-container *ngIf=\"cellConfig; else columnsTpl\">\r\n <tr\r\n [style.gridTemplateColumns]=\"cellConfig.gridTemplateColumns\"\r\n [style.min-height.px]=\"getRowHeight\"\r\n >\r\n <th\r\n *ngFor=\"let column of cellConfig.cells\"\r\n [class.x-table-sticky]=\"table.getStickyLeft(column) || table.getStickyRight(column)\"\r\n [class.x-table-sticky-left]=\"table.getStickyLeft(column)\"\r\n [class.x-table-sticky-right]=\"table.getStickyRight(column)\"\r\n [class.x-table-sticky-left-last]=\"table.getStickyLeftLast(column)\"\r\n [class.x-table-sticky-right-first]=\"table.getStickyRightFirst(column)\"\r\n [class.x-table-width-drag]=\"column.dragWidth\"\r\n [style.grid-area]=\"column.gridArea\"\r\n [style.left.px]=\"column.left\"\r\n [style.right.px]=\"column.right\"\r\n [style.min-height.px]=\"getRowHeight\"\r\n [title]=\"column?.label\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"columnBaseTpl; context: { column: column }\"></ng-container>\r\n <div\r\n *ngIf=\"column.dragWidth\"\r\n class=\"x-table-drag-width\"\r\n x-drag\r\n (dragMoved)=\"dragWidthMoved($event, column)\"\r\n (dragStarted)=\"dragWidthStarted($event, column)\"\r\n (dragEnded)=\"dragWidthEnded($event, column)\"\r\n ></div>\r\n </th>\r\n </tr>\r\n </ng-container>\r\n <ng-container *ngIf=\"table.headSearchTpl\">\r\n <ng-container *ngTemplateOutlet=\"columnsTpl; context: { case: 'search' }\"></ng-container>\r\n </ng-container>\r\n</thead>\r\n\r\n<ng-template #columnsTpl let-case=\"case\">\r\n <tr\r\n cdkDropList\r\n cdkDropListOrientation=\"horizontal\"\r\n (cdkDropListSorted)=\"dropListSorted($event)\"\r\n (cdkDropListDropped)=\"dropListDropped($event)\"\r\n [style.height.px]=\"getRowHeight\"\r\n [style.min-height.px]=\"getRowHeight\"\r\n [style.padding-right.px]=\"scrollYWidth\"\r\n [style.width.px]=\"scrollXWidth\"\r\n [class.x-table-search]=\"case === 'search'\"\r\n >\r\n <th\r\n *ngFor=\"let column of columns; trackBy: trackByItem\"\r\n cdkDrag\r\n [cdkDragDisabled]=\"column.draggingWidth || !column.dragColumn\"\r\n (cdkDragStarted)=\"dragStarted($event, column)\"\r\n (cdkDragEnded)=\"dragEnded(column)\"\r\n [ngClass]=\"thClassMap\"\r\n [class.x-table-th]=\"true\"\r\n [class.x-table-sticky]=\"table.getSticky(column)\"\r\n [class.x-table-sticky-left]=\"table.getStickyLeft(column)\"\r\n [class.x-table-sticky-right]=\"table.getStickyRight(column)\"\r\n [class.x-table-sticky-left-last]=\"table.getStickyLeftLast(column)\"\r\n [class.x-table-sticky-right-first]=\"table.getStickyRightFirst(column)\"\r\n [style.min-height.px]=\"getRowHeight\"\r\n [style.width.px]=\"getColumnWidth(column)\"\r\n [style.left.px]=\"column.left\"\r\n [style.right.px]=\"getColumnRight(column.right)\"\r\n [style.flex]=\"getFlex(column)\"\r\n >\r\n <ng-container [ngSwitch]=\"case\">\r\n <ng-container *ngSwitchCase=\"'search'\">\r\n <ng-container\r\n *ngTemplateOutlet=\"table.headSearchTpl; context: { $column: column }\"\r\n ></ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <ng-container\r\n *ngTemplateOutlet=\"columnBaseTpl; context: { column: column }\"\r\n ></ng-container>\r\n <div\r\n *ngIf=\"column.dragWidth\"\r\n class=\"x-table-drag-width\"\r\n x-drag\r\n (dragMoved)=\"dragWidthMoved($event, column)\"\r\n (dragStarted)=\"dragWidthStarted($event, column)\"\r\n (dragEnded)=\"dragWidthEnded($event, column)\"\r\n ></div>\r\n </ng-container>\r\n </ng-container>\r\n </th>\r\n </tr>\r\n</ng-template>\r\n\r\n<ng-template #columnBaseTpl let-column=\"column\">\r\n <ng-container [ngSwitch]=\"column.type\">\r\n <ng-container *ngSwitchCase=\"'checkbox'\">\r\n <x-checkbox\r\n *ngIf=\"column.headChecked\"\r\n [data]=\"[{ id: true, label: column.label }]\"\r\n [(ngModel)]=\"table.checkedValues[column.id]\"\r\n (ngModelChange)=\"table.headChecked($event, column)\"\r\n [indeterminate]=\"table.checkedValues[column.id + table.indeterminate]\"\r\n ></x-checkbox>\r\n <ng-container *ngIf=\"!column.headChecked\">\r\n <ng-container\r\n *ngTemplateOutlet=\"cloumnDefaultTpl; context: { column: column }\"\r\n ></ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'index'\">\r\n <a>{{ column.label }}</a>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <ng-container\r\n *ngTemplateOutlet=\"cloumnDefaultTpl; context: { column: column }\"\r\n ></ng-container>\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #cloumnDefaultTpl let-column=\"column\">\r\n <a\r\n [class.x-table-sort]=\"column.sort\"\r\n (click)=\"onSort(column)\"\r\n [style.text-align]=\"column.textAlign\"\r\n >\r\n <ng-container *xOutlet=\"columnTpl[column.id]; context: { $column: column }\">\r\n {{ column.label }}\r\n </ng-container>\r\n <x-icon\r\n *ngIf=\"column.sort\"\r\n type=\"fto-bar-chart\"\r\n class=\"x-table-sort-icon\"\r\n [class.x-table-icon-up]=\"sortStr === column.id + ' desc'\"\r\n [class.x-table-icon-down]=\"sortStr === column.id + ' asc'\"\r\n ></x-icon>\r\n </a>\r\n</ng-template>\r\n" }]
179
+ args: [{ selector: `${XTableHeadPrefix}`, encapsulation: ViewEncapsulation.None, template: "<thead\r\n #thead\r\n [ngStyle]=\"theadStyle\"\r\n [class.x-table-head-top]=\"position === 'top'\"\r\n [class.x-table-head-bottom]=\"position === 'bottom'\"\r\n>\r\n <ng-container *ngIf=\"cellConfig; else columnsTpl\">\r\n <tr\r\n [style.gridTemplateColumns]=\"cellConfig.gridTemplateColumns\"\r\n [style.min-height.px]=\"getRowHeight\"\r\n >\r\n <th\r\n *ngFor=\"let column of cellConfig.cells\"\r\n [class.x-table-sticky]=\"table.getStickyLeft(column) || table.getStickyRight(column)\"\r\n [class.x-table-sticky-left]=\"table.getStickyLeft(column)\"\r\n [class.x-table-sticky-right]=\"table.getStickyRight(column)\"\r\n [class.x-table-sticky-left-last]=\"table.getStickyLeftLast(column)\"\r\n [class.x-table-sticky-right-first]=\"table.getStickyRightFirst(column)\"\r\n [class.x-table-width-drag]=\"column.dragWidth\"\r\n [style.grid-area]=\"column.gridArea\"\r\n [style.left.px]=\"column.left\"\r\n [style.right.px]=\"column.right\"\r\n [style.min-height.px]=\"getRowHeight\"\r\n [title]=\"column?.label\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"columnBaseTpl; context: { column: column }\"></ng-container>\r\n <div\r\n *ngIf=\"column.dragWidth\"\r\n class=\"x-table-drag-width\"\r\n x-drag\r\n (dragMoved)=\"dragWidthMoved($event, column)\"\r\n (dragStarted)=\"dragWidthStarted($event, column)\"\r\n (dragEnded)=\"dragWidthEnded($event, column)\"\r\n ></div>\r\n </th>\r\n </tr>\r\n </ng-container>\r\n <ng-container *ngIf=\"table.headSearchTpl\">\r\n <ng-container *ngTemplateOutlet=\"columnsTpl; context: { case: 'search' }\"></ng-container>\r\n </ng-container>\r\n</thead>\r\n\r\n<ng-template #columnsTpl let-case=\"case\">\r\n <tr\r\n cdkDropList\r\n cdkDropListOrientation=\"horizontal\"\r\n (cdkDropListSorted)=\"dropListSorted($event)\"\r\n (cdkDropListDropped)=\"dropListDropped($event)\"\r\n [style.height.px]=\"getRowHeight\"\r\n [style.min-height.px]=\"getRowHeight\"\r\n [style.padding-right.px]=\"scrollYWidth\"\r\n [style.width.px]=\"scrollXWidth\"\r\n [class.x-table-search]=\"case === 'search'\"\r\n >\r\n <th\r\n *ngFor=\"let column of columns; trackBy: trackByItem\"\r\n cdkDrag\r\n [cdkDragDisabled]=\"column.draggingWidth || !column.dragColumn\"\r\n (cdkDragStarted)=\"dragStarted($event, column)\"\r\n (cdkDragEnded)=\"dragEnded(column)\"\r\n [ngClass]=\"thClassMap\"\r\n [class.x-table-th]=\"true\"\r\n [class.x-table-sticky]=\"table.getSticky(column)\"\r\n [class.x-table-sticky-left]=\"table.getStickyLeft(column)\"\r\n [class.x-table-sticky-right]=\"table.getStickyRight(column)\"\r\n [class.x-table-sticky-left-last]=\"table.getStickyLeftLast(column)\"\r\n [class.x-table-sticky-right-first]=\"table.getStickyRightFirst(column)\"\r\n [style.min-height.px]=\"getRowHeight\"\r\n [style.width.px]=\"getColumnWidth(column)\"\r\n [style.left.px]=\"column.left\"\r\n [style.right.px]=\"getColumnRight(column.right)\"\r\n [style.flex]=\"getFlex(column)\"\r\n >\r\n <ng-container [ngSwitch]=\"case\">\r\n <ng-container *ngSwitchCase=\"'search'\">\r\n <ng-container\r\n *ngTemplateOutlet=\"table.headSearchTpl; context: { $column: column }\"\r\n ></ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <ng-container\r\n *ngTemplateOutlet=\"columnBaseTpl; context: { column: column }\"\r\n ></ng-container>\r\n <div\r\n *ngIf=\"column.dragWidth\"\r\n class=\"x-table-drag-width\"\r\n x-drag\r\n (dragMoved)=\"dragWidthMoved($event, column)\"\r\n (dragStarted)=\"dragWidthStarted($event, column)\"\r\n (dragEnded)=\"dragWidthEnded($event, column)\"\r\n ></div>\r\n </ng-container>\r\n </ng-container>\r\n </th>\r\n </tr>\r\n</ng-template>\r\n\r\n<ng-template #columnBaseTpl let-column=\"column\">\r\n <ng-container [ngSwitch]=\"column.type\">\r\n <ng-container *ngSwitchCase=\"'checkbox'\">\r\n <x-checkbox\r\n *ngIf=\"column.headChecked\"\r\n [data]=\"[{ id: true, label: column.label }]\"\r\n [(ngModel)]=\"table.checkedValues[column.id]\"\r\n (ngModelChange)=\"table.headChecked($event, column)\"\r\n single\r\n [indeterminate]=\"table.checkedValues[column.id + table.indeterminate]\"\r\n ></x-checkbox>\r\n <ng-container *ngIf=\"!column.headChecked\">\r\n <ng-container\r\n *ngTemplateOutlet=\"cloumnDefaultTpl; context: { column: column }\"\r\n ></ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'index'\">\r\n <a>{{ column.label }}</a>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <ng-container\r\n *ngTemplateOutlet=\"cloumnDefaultTpl; context: { column: column }\"\r\n ></ng-container>\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #cloumnDefaultTpl let-column=\"column\">\r\n <a\r\n [class.x-table-sort]=\"column.sort\"\r\n (click)=\"onSort(column)\"\r\n [style.text-align]=\"column.textAlign\"\r\n >\r\n <ng-container *xOutlet=\"columnTpl[column.id]; context: { $column: column }\">\r\n {{ column.label }}\r\n </ng-container>\r\n <x-icon\r\n *ngIf=\"column.sort\"\r\n type=\"fto-bar-chart\"\r\n class=\"x-table-sort-icon\"\r\n [class.x-table-icon-up]=\"sortStr === column.id + ' desc'\"\r\n [class.x-table-icon-down]=\"sortStr === column.id + ' asc'\"\r\n ></x-icon>\r\n </a>\r\n</ng-template>\r\n" }]
180
180
  }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.XConfigService }]; }, propDecorators: { thead: [{
181
181
  type: ViewChild,
182
182
  args: ['thead']
183
183
  }], table: [{
184
184
  type: Input
185
185
  }] } });
186
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtaGVhZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvbmctbmVzdC91aS90YWJsZS90YWJsZS1oZWFkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYi9uZy1uZXN0L3VpL3RhYmxlL3RhYmxlLWhlYWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxpQkFBaUIsRUFLakIsU0FBUyxFQUNULEtBQUssRUFDTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQTRCLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hILE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFTLFNBQVMsRUFBc0MsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDNUgsT0FBTyxFQUErQyxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7OztBQUV0RyxNQUthLG1CQUFvQixTQUFRLGtCQUFrQjtJQU96RCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDbkQsQ0FBQztJQUNEO0lBQ0UscURBQXFEO0lBQzlDLFFBQW1CLEVBQ25CLFVBQW1DLEVBQ25DLEdBQXNCLEVBQ3RCLGFBQTZCO1FBRXBDLEtBQUssRUFBRSxDQUFDO1FBTEQsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixlQUFVLEdBQVYsVUFBVSxDQUF5QjtRQUNuQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixrQkFBYSxHQUFiLGFBQWEsQ0FBZ0I7UUFkdEMsU0FBSSxHQUFZLEVBQUUsQ0FBQztRQUNuQixZQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsZUFBVSxHQUFnQyxF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QUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgUmVuZGVyZXIyLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGQsXHJcbiAgSW5wdXRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgWFRhYmxlSGVhZFByZWZpeCwgWFRhYmxlSGVhZFByb3BlcnR5LCBYVGFibGVDb2x1bW4sIFhUYWJsZUNlbGwsIFhUYWJsZVByZWZpeCB9IGZyb20gJy4vdGFibGUucHJvcGVydHknO1xyXG5pbXBvcnQgeyByZW1vdmVOZ1RhZywgWElzRW1wdHksIFhTb3J0LCBYSXNDaGFuZ2UsIFhDb25maWdTZXJ2aWNlLCBYTnVtYmVyLCBYQ2xhc3NNYXAsIFhJc0Z1bmN0aW9uIH0gZnJvbSAnQG5nLW5lc3QvdWkvY29yZSc7XHJcbmltcG9ydCB7IENka0RyYWdEcm9wLCBDZGtEcmFnU29ydEV2ZW50LCBDZGtEcmFnU3RhcnQsIG1vdmVJdGVtSW5BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IGAke1hUYWJsZUhlYWRQcmVmaXh9YCxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtaGVhZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgWFRhYmxlSGVhZENvbXBvbmVudCBleHRlbmRzIFhUYWJsZUhlYWRQcm9wZXJ0eSBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgc29ydDogWFNvcnRbXSA9IFtdO1xyXG4gIHNvcnRTdHIgPSAnJztcclxuICB0aGVhZFN0eWxlOiB7IFtwcm9wZXJ0eTogc3RyaW5nXTogYW55IH0gPSB7fTtcclxuICB0aENsYXNzTWFwOiBYQ2xhc3NNYXAgPSB7fTtcclxuICBAVmlld0NoaWxkKCd0aGVhZCcpIHRoZWFkITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcbiAgQElucHV0KCkgdGFibGU6IGFueTtcclxuICBnZXQgZ2V0Um93SGVpZ2h0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMucm93SGVpZ2h0ID09IDAgPyAnJyA6IHRoaXMucm93SGVpZ2h0O1xyXG4gIH1cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIEBPcHRpb25hbCgpIEBIb3N0KCkgcHVibGljIHRhYmxlOiBYVGFibGVDb21wb25lbnQsXHJcbiAgICBwdWJsaWMgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcclxuICAgIHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHVibGljIGNvbmZpZ1NlcnZpY2U6IFhDb25maWdTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoc2ltcGxlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgY29uc3QgeyBjb2x1bW5zLCBzY3JvbGxZV2lkdGgsIHNjcm9sbFhXaWR0aCwgY2VsbENvbmZpZyB9ID0gc2ltcGxlcztcclxuICAgIFhJc0NoYW5nZShjb2x1bW5zLCBzY3JvbGxZV2lkdGgsIHNjcm9sbFhXaWR0aCwgY2VsbENvbmZpZykgJiYgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICByZW1vdmVOZ1RhZyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XHJcbiAgICB0aGlzLnNldFN0eWxlKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLnRhYmxlLnRoZWFkcy5wdXNoKHRoaXMudGhlYWQpO1xyXG4gICAgdGhpcy50YWJsZS50aGVhZHNDaGFuZ2UucHVzaCgoKSA9PiB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCkpO1xyXG4gICAgdGhpcy5zZXRUaENsYXNzTWFwKCk7XHJcbiAgfVxyXG5cclxuICBzZXRUaENsYXNzTWFwKCkge1xyXG4gICAgdGhpcy50aENsYXNzTWFwID0ge1xyXG4gICAgICBbYCR7WFRhYmxlUHJlZml4fS10aC0ke3RoaXMudGFibGUucm93U2l6ZX1gXTogIVhJc0VtcHR5KHRoaXMudGFibGUucm93U2l6ZSlcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXRGbGV4KGNvbHVtbjogWFRhYmxlQ29sdW1uKSB7XHJcbiAgICBpZiAoY29sdW1uLndpZHRoKSByZXR1cm4gJ25vbmUnO1xyXG4gICAgaWYgKCFjb2x1bW4uZmxleCkgcmV0dXJuIDE7XHJcbiAgICByZXR1cm4gY29sdW1uLmZsZXg7XHJcbiAgfVxyXG5cclxuICBnZXRDb2x1bW5SaWdodChyaWdodD86IG51bWJlcikge1xyXG4gICAgaWYgKE51bWJlcihyaWdodCkgPj0gMCkge1xyXG4gICAgICBpZiAoTnVtYmVyKHRoaXMuc2Nyb2xsWVdpZHRoKSA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIE51bWJlcihyaWdodCkgKyBOdW1iZXIodGhpcy5zY3JvbGxZV2lkdGgpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBOdW1iZXIocmlnaHQpO1xyXG4gICAgfVxyXG4gICAgLy8gcmV0dXJuIHJpZ2h0O1xyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29sdW1uV2lkdGgoY29sdW1uOiBYVGFibGVDb2x1bW4pIHtcclxuICAgIC8vIGlmIChOdW1iZXIoY29sdW1uLnJpZ2h0KSA9PT0gMCkge1xyXG4gICAgLy8gICBpZiAoTnVtYmVyKHRoaXMuc2Nyb2xsWVdpZHRoKSA+PSAwKSB7XHJcbiAgICAvLyAgICAgcmV0dXJuIE51bWJlcihjb2x1bW4ud2lkdGgpICsgTnVtYmVyKHRoaXMuc2Nyb2xsWVdpZHRoKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gICByZXR1cm4gY29sdW1uLndpZHRoO1xyXG4gICAgLy8gfVxyXG4gICAgcmV0dXJuIGNvbHVtbi53aWR0aDtcclxuICB9XHJcblxyXG4gIHNldFN0eWxlKCkge1xyXG4gICAgbGV0IGhlaWdodCA9IHRoaXMucm93SGVpZ2h0ID09IDAgPyAnJyA6IHRoaXMucm93SGVpZ2h0O1xyXG4gICAgaWYgKHRoaXMuY2VsbENvbmZpZyAmJiB0aGlzLmNlbGxDb25maWcuY2VsbHMpIHtcclxuICAgICAgY29uc3Qgc3B0ID0gdGhpcy5jZWxsQ29uZmlnLmNlbGxzLm1hcCgoeCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGdyaWRBcmVhU3B0ID0geC5ncmlkQXJlYT8uc3BsaXQoJy8nKTtcclxuICAgICAgICByZXR1cm4gZ3JpZEFyZWFTcHQgJiYgZ3JpZEFyZWFTcHQubGVuZ3RoID4gMyA/IE51bWJlcihncmlkQXJlYVNwdFsyXSkgOiAyO1xyXG4gICAgICB9KTtcclxuICAgICAgaGVpZ2h0ID0gKChNYXRoLm1heCguLi5zcHQpIC0gMSkgKiAoaGVpZ2h0IGFzIG51bWJlcikpIGFzIFhOdW1iZXI7XHJcbiAgICB9XHJcbiAgICB0aGlzLnRoZWFkU3R5bGUgPSB7XHJcbiAgICAgIC8vIGhlaWdodDogYCR7aGVpZ2h0fXB4YCxcclxuICAgICAgWydtaW4taGVpZ2h0J106IGAke3RoaXMuZ2V0Um93SGVpZ2h0fXB4YFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIG9uU29ydChjb2x1bW46IFhUYWJsZUNvbHVtbikge1xyXG4gICAgaWYgKCFjb2x1bW4uc29ydCkgcmV0dXJuO1xyXG4gICAgaWYgKFhJc0VtcHR5KHRoaXMuc29ydCkpIHRoaXMuc29ydCA9IFtdO1xyXG4gICAgbGV0IHNvcnQgPSB0aGlzLnNvcnQ/LmZpbmQoKHkpID0+IHkuZmllbGQgPT09IGNvbHVtbi5pZCk7XHJcbiAgICBpZiAoc29ydCkge1xyXG4gICAgICBpZiAoc29ydC52YWx1ZSA9PT0gJ2FzYycpIHtcclxuICAgICAgICB0aGlzLnNvcnQgPSBbXTtcclxuICAgICAgICB0aGlzLnNvcnRTdHIgPSAnJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzb3J0LnZhbHVlID0gJ2FzYyc7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNvcnQgPSB7IGZpZWxkOiBjb2x1bW4uaWQsIHZhbHVlOiAnZGVzYycgfTtcclxuICAgICAgdGhpcy5zb3J0ID0gW3NvcnRdO1xyXG4gICAgfVxyXG4gICAgaWYgKCFYSXNFbXB0eSh0aGlzLnNvcnQpKSB0aGlzLnNvcnRTdHIgPSBgJHtzb3J0LmZpZWxkfSAke3NvcnQudmFsdWV9YDtcclxuICAgIHRoaXMudGFibGUuY2hlY2tTb3J0KHRoaXMuc29ydCk7XHJcbiAgICB0aGlzLnRhYmxlLnNvcnRDaGFuZ2UuZW1pdCh0aGlzLnNvcnQpO1xyXG4gICAgdGhpcy50YWJsZS5yZXNldFNjcm9sbChmYWxzZSwgdHJ1ZSk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBkcmFnV2lkdGhNb3ZlZChwb3NpdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgb2Zmc2V0WDogbnVtYmVyOyBvZmZzZXRZOiBudW1iZXIgfSwgY29sdW1uOiBYVGFibGVDb2x1bW4gfCBYVGFibGVDZWxsKSB7XHJcbiAgICBpZiAoY29sdW1uLndpZHRoKSB7XHJcbiAgICAgIChjb2x1bW4ud2lkdGggYXMgbnVtYmVyKSArPSBwb3NpdGlvbi5vZmZzZXRYO1xyXG4gICAgICBpZiAoY29sdW1uLndpZHRoIDwgNjApIGNvbHVtbi53aWR0aCA9IDYwO1xyXG4gICAgICBYSXNGdW5jdGlvbihjb2x1bW4uZHJhZ1dpZHRoTW92ZWQpICYmIGNvbHVtbi5kcmFnV2lkdGhNb3ZlZCh7IHBvc2l0aW9uLCBjb2x1bW4gfSk7XHJcbiAgICAgIHRoaXMudGFibGUuY29sdW1uRHJhZ1dpZHRoTW92ZWQuZW1pdCh7IHBvc2l0aW9uLCBjb2x1bW4gfSk7XHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy50YWJsZS5ib2R5Q2hhbmdlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkcmFnV2lkdGhTdGFydGVkKHBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0sIGNvbHVtbjogWFRhYmxlQ29sdW1uIHwgWFRhYmxlQ2VsbCkge1xyXG4gICAgY29sdW1uLmRyYWdnaW5nV2lkdGggPSB0cnVlO1xyXG4gICAgaWYgKGNvbHVtbi53aWR0aCAmJiBYSXNGdW5jdGlvbihjb2x1bW4uZHJhZ1dpZHRoU3RhcnRlZCkpIHtcclxuICAgICAgY29sdW1uLmRyYWdXaWR0aFN0YXJ0ZWQoeyBwb3NpdGlvbiwgY29sdW1uIH0pO1xyXG4gICAgICB0aGlzLnRhYmxlLmNvbHVtbkRyYWdXaWR0aFN0YXJ0ZWQuZW1pdCh7IHBvc2l0aW9uLCBjb2x1bW4gfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkcmFnV2lkdGhFbmRlZChwb3NpdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9LCBjb2x1bW46IFhUYWJsZUNvbHVtbiB8IFhUYWJsZUNlbGwpIHtcclxuICAgIGNvbHVtbi5kcmFnZ2luZ1dpZHRoID0gZmFsc2U7XHJcbiAgICBpZiAoY29sdW1uLndpZHRoICYmIFhJc0Z1bmN0aW9uKGNvbHVtbi5kcmFnV2lkdGhFbmRlZCkpIHtcclxuICAgICAgY29sdW1uLmRyYWdXaWR0aEVuZGVkKHsgcG9zaXRpb24sIGNvbHVtbiB9KTtcclxuICAgICAgdGhpcy50YWJsZS5jb2x1bW5EcmFnV2lkdGhFbmRlZC5lbWl0KHsgcG9zaXRpb24sIGNvbHVtbiB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRyb3BMaXN0RHJvcHBlZChfZXZlbnQ6IENka0RyYWdEcm9wPFhUYWJsZUNvbHVtbltdPikge1xyXG4gICAgdGhpcy5kcmFnQ2hhbmdlKCk7XHJcbiAgICB0aGlzLnRhYmxlLmNvbHVtbkRyb3BMaXN0RHJvcHBlZC5lbWl0KHRoaXMuY29sdW1ucyk7XHJcbiAgfVxyXG5cclxuICBkcm9wTGlzdFNvcnRlZChldmVudDogQ2RrRHJhZ1NvcnRFdmVudDxYVGFibGVDb2x1bW5bXT4pIHtcclxuICAgIGNvbnN0IHByZXZpb3VzID0gdGhpcy5jb2x1bW5zW2V2ZW50LnByZXZpb3VzSW5kZXhdO1xyXG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuY29sdW1uc1tldmVudC5jdXJyZW50SW5kZXhdO1xyXG4gICAgY29uc3QgbWlkZGxlID0geyBsZWZ0OiBwcmV2aW91cy5sZWZ0LCByaWdodDogcHJldmlvdXMucmlnaHQgfTtcclxuICAgIHByZXZpb3VzLmxlZnQgPSBjdXJyZW50LmxlZnQ7XHJcbiAgICBwcmV2aW91cy5yaWdodCA9IGN1cnJlbnQucmlnaHQ7XHJcbiAgICBjdXJyZW50LmxlZnQgPSBtaWRkbGUubGVmdDtcclxuICAgIGN1cnJlbnQucmlnaHQgPSBtaWRkbGUucmlnaHQ7XHJcbiAgICBtb3ZlSXRlbUluQXJyYXkodGhpcy5jb2x1bW5zLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xyXG4gICAgdGhpcy5kcmFnQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICBkcmFnU3RhcnRlZChfZXZlbnQ6IENka0RyYWdTdGFydCwgY29sdW1uOiBYVGFibGVDb2x1bW4pIHtcclxuICAgIGNvbHVtbi5kcmFnZ2luZyA9IHRydWU7XHJcbiAgICB0aGlzLmRyYWdDaGFuZ2UoKTtcclxuICAgIHRoaXMudGFibGUudGhlYWRzQ2hhbmdlcygpO1xyXG4gICAgdGhpcy50YWJsZS5jb2x1bW5EcmFnU3RhcnRlZC5lbWl0KGNvbHVtbik7XHJcbiAgfVxyXG5cclxuICBkcmFnRW5kZWQoY29sdW1uOiBYVGFibGVDb2x1bW4pIHtcclxuICAgIGNvbHVtbi5kcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5kcmFnQ2hhbmdlKCk7XHJcbiAgICB0aGlzLnRhYmxlLnRoZWFkc0NoYW5nZXMoKTtcclxuICAgIHRoaXMudGFibGUuY29sdW1uRHJhZ0VuZGVkLmVtaXQoY29sdW1uKTtcclxuICB9XHJcblxyXG4gIGRyYWdDaGFuZ2UoKSB7XHJcbiAgICB0aGlzLnRhYmxlLmJvZHlDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIHRyYWNrQnlJdGVtKF9pbmRleDogbnVtYmVyLCBpdGVtOiBYVGFibGVDb2x1bW4pIHtcclxuICAgIHJldHVybiBpdGVtLmlkO1xyXG4gIH1cclxufVxyXG4iLCI8dGhlYWRcclxuICAjdGhlYWRcclxuICBbbmdTdHlsZV09XCJ0aGVhZFN0eWxlXCJcclxuICBbY2xhc3MueC10YWJsZS1oZWFkLXRvcF09XCJwb3NpdGlvbiA9PT0gJ3RvcCdcIlxyXG4gIFtjbGFzcy54LXRhYmxlLWhlYWQtYm90dG9tXT1cInBvc2l0aW9uID09PSAnYm90dG9tJ1wiXHJcbj5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2VsbENvbmZpZzsgZWxzZSBjb2x1bW5zVHBsXCI+XHJcbiAgICA8dHJcclxuICAgICAgW3N0eWxlLmdyaWRUZW1wbGF0ZUNvbHVtbnNdPVwiY2VsbENvbmZpZy5ncmlkVGVtcGxhdGVDb2x1bW5zXCJcclxuICAgICAgW3N0eWxlLm1pbi1oZWlnaHQucHhdPVwiZ2V0Um93SGVpZ2h0XCJcclxuICAgID5cclxuICAgICAgPHRoXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjZWxsQ29uZmlnLmNlbGxzXCJcclxuICAgICAgICBbY2xhc3MueC10YWJsZS1zdGlja3ldPVwidGFibGUuZ2V0U3RpY2t5TGVmdChjb2x1bW4pIHx8IHRhYmxlLmdldFN0aWNreVJpZ2h0KGNvbHVtbilcIlxyXG4gICAgICAgIFtjbGFzcy54LXRhYmxlLXN0aWNreS1sZWZ0XT1cInRhYmxlLmdldFN0aWNreUxlZnQoY29sdW1uKVwiXHJcbiAgICAgICAgW2NsYXNzLngtdGFibGUtc3RpY2t5LXJpZ2h0XT1cInRhYmxlLmdldFN0aWNreVJpZ2h0KGNvbHVtbilcIlxyXG4gICAgICAgIFtjbGFzcy54LXRhYmxlLXN0aWNreS1sZWZ0LWxhc3RdPVwidGFibGUuZ2V0U3RpY2t5TGVmdExhc3QoY29sdW1uKVwiXHJcbiAgICAgICAgW2NsYXNzLngtdGFibGUtc3RpY2t5LXJpZ2h0LWZpcnN0XT1cInRhYmxlLmdldFN0aWNreVJpZ2h0Rmlyc3QoY29sdW1uKVwiXHJcbiAgICAgICAgW2NsYXNzLngtdGFibGUtd2lkdGgtZHJhZ109XCJjb2x1bW4uZHJhZ1dpZHRoXCJcclxuICAgICAgICBbc3R5bGUuZ3JpZC1hcmVhXT1cImNvbHVtbi5ncmlkQXJlYVwiXHJcbiAgICAgICAgW3N0eWxlLmxlZnQucHhdPVwiY29sdW1uLmxlZnRcIlxyXG4gICAgICAgIFtzdHlsZS5yaWdodC5weF09XCJjb2x1bW4ucmlnaHRcIlxyXG4gICAgICAgIFtzdHlsZS5taW4taGVpZ2h0LnB4XT1cImdldFJvd0hlaWdodFwiXHJcbiAgICAgICAgW3RpdGxlXT1cImNvbHVtbj8ubGFiZWxcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbHVtbkJhc2VUcGw7IGNvbnRleHQ6IHsgY29sdW1uOiBjb2x1bW4gfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgICpuZ0lmPVwiY29sdW1uLmRyYWdXaWR0aFwiXHJcbiAgICAgICAgICBjbGFzcz1cIngtdGFibGUtZHJhZy13aWR0aFwiXHJcbiAgICAgICAgICB4LWRyYWdcclxuICAgICAgICAgIChkcmFnTW92ZWQpPVwiZHJhZ1dpZHRoTW92ZWQoJGV2ZW50LCBjb2x1bW4pXCJcclxuICAgICAgICAgIChkcmFnU3RhcnRlZCk9XCJkcmFnV2lkdGhTdGFydGVkKCRldmVudCwgY29sdW1uKVwiXHJcbiAgICAgICAgICAoZHJhZ0VuZGVkKT1cImRyYWdXaWR0aEVuZGVkKCRldmVudCwgY29sdW1uKVwiXHJcbiAgICAgICAgPjwvZGl2PlxyXG4gICAgICA8L3RoPlxyXG4gICAgPC90cj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFibGUuaGVhZFNlYXJjaFRwbFwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbHVtbnNUcGw7IGNvbnRleHQ6IHsgY2FzZTogJ3NlYXJjaCcgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L3RoZWFkPlxyXG5cclxuPG5nLXRlbXBsYXRlICNjb2x1bW5zVHBsIGxldC1jYXNlPVwiY2FzZVwiPlxyXG4gIDx0clxyXG4gICAgY2RrRHJvcExpc3RcclxuICAgIGNka0Ryb3BMaXN0T3JpZW50YXRpb249XCJob3Jpem9udGFsXCJcclxuICAgIChjZGtEcm9wTGlzdFNvcnRlZCk9XCJkcm9wTGlzdFNvcnRlZCgkZXZlbnQpXCJcclxuICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcExpc3REcm9wcGVkKCRldmVudClcIlxyXG4gICAgW3N0eWxlLmhlaWdodC5weF09XCJnZXRSb3dIZWlnaHRcIlxyXG4gICAgW3N0eWxlLm1pbi1oZWlnaHQucHhdPVwiZ2V0Um93SGVpZ2h0XCJcclxuICAgIFtzdHlsZS5wYWRkaW5nLXJpZ2h0LnB4XT1cInNjcm9sbFlXaWR0aFwiXHJcbiAgICBbc3R5bGUud2lkdGgucHhdPVwic2Nyb2xsWFdpZHRoXCJcclxuICAgIFtjbGFzcy54LXRhYmxlLXNlYXJjaF09XCJjYXNlID09PSAnc2VhcmNoJ1wiXHJcbiAgPlxyXG4gICAgPHRoXHJcbiAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uczsgdHJhY2tCeTogdHJhY2tCeUl0ZW1cIlxyXG4gICAgICBjZGtEcmFnXHJcbiAgICAgIFtjZGtEcmFnRGlzYWJsZWRdPVwiY29sdW1uLmRyYWdnaW5nV2lkdGggfHwgIWNvbHVtbi5kcmFnQ29sdW1uXCJcclxuICAgICAgKGNka0RyYWdTdGFydGVkKT1cImRyYWdTdGFydGVkKCRldmVudCwgY29sdW1uKVwiXHJcbiAgICAgIChjZGtEcmFnRW5kZWQpPVwiZHJhZ0VuZGVkKGNvbHVtbilcIlxyXG4gICAgICBbbmdDbGFzc109XCJ0aENsYXNzTWFwXCJcclxuICAgICAgW2NsYXNzLngtdGFibGUtdGhdPVwidHJ1ZVwiXHJcbiAgICAgIFtjbGFzcy54LXRhYmxlLXN0aWNreV09XCJ0YWJsZS5nZXRTdGlja3koY29sdW1uKVwiXHJcbiAgICAgIFtjbGFzcy54LXRhYmxlLXN0aWNreS1sZWZ0XT1cInRhYmxlLmdldFN0aWNreUxlZnQoY29sdW1uKVwiXHJcbiAgICAgIFtjbGFzcy54LXRhYmxlLXN0aWNreS1yaWdodF09XCJ0YWJsZS5nZXRTdGlja3lSaWdodChjb2x1bW4pXCJcclxuICAgICAgW2NsYXNzLngtdGFibGUtc3RpY2t5LWxlZnQtbGFzdF09XCJ0YWJsZS5nZXRTdGlja3lMZWZ0TGFzdChjb2x1bW4pXCJcclxuICAgICAgW2NsYXNzLngtdGFibGUtc3RpY2t5LXJpZ2h0LWZpcnN0XT1cInRhYmxlLmdldFN0aWNreVJpZ2h0Rmlyc3QoY29sdW1uKVwiXHJcbiAgICAgIFtzdHlsZS5taW4taGVpZ2h0LnB4XT1cImdldFJvd0hlaWdodFwiXHJcbiAgICAgIFtzdHlsZS53aWR0aC5weF09XCJnZXRDb2x1bW5XaWR0aChjb2x1bW4pXCJcclxuICAgICAgW3N0eWxlLmxlZnQucHhdPVwiY29sdW1uLmxlZnRcIlxyXG4gICAgICBbc3R5bGUucmlnaHQucHhdPVwiZ2V0Q29sdW1uUmlnaHQoY29sdW1uLnJpZ2h0KVwiXHJcbiAgICAgIFtzdHlsZS5mbGV4XT1cImdldEZsZXgoY29sdW1uKVwiXHJcbiAgICA+XHJcbiAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNhc2VcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc2VhcmNoJ1wiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInRhYmxlLmhlYWRTZWFyY2hUcGw7IGNvbnRleHQ6IHsgJGNvbHVtbjogY29sdW1uIH1cIlxyXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb2x1bW5CYXNlVHBsOyBjb250ZXh0OiB7IGNvbHVtbjogY29sdW1uIH1cIlxyXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAqbmdJZj1cImNvbHVtbi5kcmFnV2lkdGhcIlxyXG4gICAgICAgICAgICBjbGFzcz1cIngtdGFibGUtZHJhZy13aWR0aFwiXHJcbiAgICAgICAgICAgIHgtZHJhZ1xyXG4gICAgICAgICAgICAoZHJhZ01vdmVkKT1cImRyYWdXaWR0aE1vdmVkKCRldmVudCwgY29sdW1uKVwiXHJcbiAgICAgICAgICAgIChkcmFnU3RhcnRlZCk9XCJkcmFnV2lkdGhTdGFydGVkKCRldmVudCwgY29sdW1uKVwiXHJcbiAgICAgICAgICAgIChkcmFnRW5kZWQpPVwiZHJhZ1dpZHRoRW5kZWQoJGV2ZW50LCBjb2x1bW4pXCJcclxuICAgICAgICAgID48L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L3RoPlxyXG4gIDwvdHI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2NvbHVtbkJhc2VUcGwgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxyXG4gIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbHVtbi50eXBlXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY2hlY2tib3gnXCI+XHJcbiAgICAgIDx4LWNoZWNrYm94XHJcbiAgICAgICAgKm5nSWY9XCJjb2x1bW4uaGVhZENoZWNrZWRcIlxyXG4gICAgICAgIFtkYXRhXT1cIlt7IGlkOiB0cnVlLCBsYWJlbDogY29sdW1uLmxhYmVsIH1dXCJcclxuICAgICAgICBbKG5nTW9kZWwpXT1cInRhYmxlLmNoZWNrZWRWYWx1ZXNbY29sdW1uLmlkXVwiXHJcbiAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidGFibGUuaGVhZENoZWNrZWQoJGV2ZW50LCBjb2x1bW4pXCJcclxuICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJ0YWJsZS5jaGVja2VkVmFsdWVzW2NvbHVtbi5pZCArIHRhYmxlLmluZGV0ZXJtaW5hdGVdXCJcclxuICAgICAgPjwveC1jaGVja2JveD5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb2x1bW4uaGVhZENoZWNrZWRcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImNsb3VtbkRlZmF1bHRUcGw7IGNvbnRleHQ6IHsgY29sdW1uOiBjb2x1bW4gfVwiXHJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2luZGV4J1wiPlxyXG4gICAgICA8YT57eyBjb2x1bW4ubGFiZWwgfX08L2E+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2xvdW1uRGVmYXVsdFRwbDsgY29udGV4dDogeyBjb2x1bW46IGNvbHVtbiB9XCJcclxuICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2Nsb3VtbkRlZmF1bHRUcGwgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxyXG4gIDxhXHJcbiAgICBbY2xhc3MueC10YWJsZS1zb3J0XT1cImNvbHVtbi5zb3J0XCJcclxuICAgIChjbGljayk9XCJvblNvcnQoY29sdW1uKVwiXHJcbiAgICBbc3R5bGUudGV4dC1hbGlnbl09XCJjb2x1bW4udGV4dEFsaWduXCJcclxuICA+XHJcbiAgICA8bmctY29udGFpbmVyICp4T3V0bGV0PVwiY29sdW1uVHBsW2NvbHVtbi5pZF07IGNvbnRleHQ6IHsgJGNvbHVtbjogY29sdW1uIH1cIj5cclxuICAgICAge3sgY29sdW1uLmxhYmVsIH19XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDx4LWljb25cclxuICAgICAgKm5nSWY9XCJjb2x1bW4uc29ydFwiXHJcbiAgICAgIHR5cGU9XCJmdG8tYmFyLWNoYXJ0XCJcclxuICAgICAgY2xhc3M9XCJ4LXRhYmxlLXNvcnQtaWNvblwiXHJcbiAgICAgIFtjbGFzcy54LXRhYmxlLWljb24tdXBdPVwic29ydFN0ciA9PT0gY29sdW1uLmlkICsgJyBkZXNjJ1wiXHJcbiAgICAgIFtjbGFzcy54LXRhYmxlLWljb24tZG93bl09XCJzb3J0U3RyID09PSBjb2x1bW4uaWQgKyAnIGFzYydcIlxyXG4gICAgPjwveC1pY29uPlxyXG4gIDwvYT5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
186
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtaGVhZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvbmctbmVzdC91aS90YWJsZS90YWJsZS1oZWFkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYi9uZy1uZXN0L3VpL3RhYmxlL3RhYmxlLWhlYWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxpQkFBaUIsRUFLakIsU0FBUyxFQUNULEtBQUssRUFDTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQTRCLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hILE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFTLFNBQVMsRUFBc0MsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDNUgsT0FBTyxFQUErQyxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7OztBQUV0RyxNQUthLG1CQUFvQixTQUFRLGtCQUFrQjtJQU96RCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDbkQsQ0FBQztJQUNEO0lBQ0UscURBQXFEO0lBQzlDLFFBQW1CLEVBQ25CLFVBQW1DLEVBQ25DLEdBQXNCLEVBQ3RCLGFBQTZCO1FBRXBDLEtBQUssRUFBRSxDQUFDO1FBTEQsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixlQUFVLEdBQVYsVUFBVSxDQUF5QjtRQUNuQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixrQkFBYSxHQUFiLGFBQWEsQ0FBZ0I7UUFkdEMsU0FBSSxHQUFZLEVBQUUsQ0FBQztRQUNuQixZQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsZUFBVSxHQUFnQyxF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QUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgUmVuZGVyZXIyLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGQsXHJcbiAgSW5wdXRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgWFRhYmxlSGVhZFByZWZpeCwgWFRhYmxlSGVhZFByb3BlcnR5LCBYVGFibGVDb2x1bW4sIFhUYWJsZUNlbGwsIFhUYWJsZVByZWZpeCB9IGZyb20gJy4vdGFibGUucHJvcGVydHknO1xyXG5pbXBvcnQgeyByZW1vdmVOZ1RhZywgWElzRW1wdHksIFhTb3J0LCBYSXNDaGFuZ2UsIFhDb25maWdTZXJ2aWNlLCBYTnVtYmVyLCBYQ2xhc3NNYXAsIFhJc0Z1bmN0aW9uIH0gZnJvbSAnQG5nLW5lc3QvdWkvY29yZSc7XHJcbmltcG9ydCB7IENka0RyYWdEcm9wLCBDZGtEcmFnU29ydEV2ZW50LCBDZGtEcmFnU3RhcnQsIG1vdmVJdGVtSW5BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IGAke1hUYWJsZUhlYWRQcmVmaXh9YCxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtaGVhZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgWFRhYmxlSGVhZENvbXBvbmVudCBleHRlbmRzIFhUYWJsZUhlYWRQcm9wZXJ0eSBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgc29ydDogWFNvcnRbXSA9IFtdO1xyXG4gIHNvcnRTdHIgPSAnJztcclxuICB0aGVhZFN0eWxlOiB7IFtwcm9wZXJ0eTogc3RyaW5nXTogYW55IH0gPSB7fTtcclxuICB0aENsYXNzTWFwOiBYQ2xhc3NNYXAgPSB7fTtcclxuICBAVmlld0NoaWxkKCd0aGVhZCcpIHRoZWFkITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcbiAgQElucHV0KCkgdGFibGU6IGFueTtcclxuICBnZXQgZ2V0Um93SGVpZ2h0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMucm93SGVpZ2h0ID09IDAgPyAnJyA6IHRoaXMucm93SGVpZ2h0O1xyXG4gIH1cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIEBPcHRpb25hbCgpIEBIb3N0KCkgcHVibGljIHRhYmxlOiBYVGFibGVDb21wb25lbnQsXHJcbiAgICBwdWJsaWMgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcclxuICAgIHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHVibGljIGNvbmZpZ1NlcnZpY2U6IFhDb25maWdTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoc2ltcGxlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgY29uc3QgeyBjb2x1bW5zLCBzY3JvbGxZV2lkdGgsIHNjcm9sbFhXaWR0aCwgY2VsbENvbmZpZyB9ID0gc2ltcGxlcztcclxuICAgIFhJc0NoYW5nZShjb2x1bW5zLCBzY3JvbGxZV2lkdGgsIHNjcm9sbFhXaWR0aCwgY2VsbENvbmZpZykgJiYgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICByZW1vdmVOZ1RhZyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XHJcbiAgICB0aGlzLnNldFN0eWxlKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLnRhYmxlLnRoZWFkcy5wdXNoKHRoaXMudGhlYWQpO1xyXG4gICAgdGhpcy50YWJsZS50aGVhZHNDaGFuZ2UucHVzaCgoKSA9PiB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCkpO1xyXG4gICAgdGhpcy5zZXRUaENsYXNzTWFwKCk7XHJcbiAgfVxyXG5cclxuICBzZXRUaENsYXNzTWFwKCkge1xyXG4gICAgdGhpcy50aENsYXNzTWFwID0ge1xyXG4gICAgICBbYCR7WFRhYmxlUHJlZml4fS10aC0ke3RoaXMudGFibGUucm93U2l6ZX1gXTogIVhJc0VtcHR5KHRoaXMudGFibGUucm93U2l6ZSlcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXRGbGV4KGNvbHVtbjogWFRhYmxlQ29sdW1uKSB7XHJcbiAgICBpZiAoY29sdW1uLndpZHRoKSByZXR1cm4gJ25vbmUnO1xyXG4gICAgaWYgKCFjb2x1bW4uZmxleCkgcmV0dXJuIDE7XHJcbiAgICByZXR1cm4gY29sdW1uLmZsZXg7XHJcbiAgfVxyXG5cclxuICBnZXRDb2x1bW5SaWdodChyaWdodD86IG51bWJlcikge1xyXG4gICAgaWYgKE51bWJlcihyaWdodCkgPj0gMCkge1xyXG4gICAgICBpZiAoTnVtYmVyKHRoaXMuc2Nyb2xsWVdpZHRoKSA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIE51bWJlcihyaWdodCkgKyBOdW1iZXIodGhpcy5zY3JvbGxZV2lkdGgpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBOdW1iZXIocmlnaHQpO1xyXG4gICAgfVxyXG4gICAgLy8gcmV0dXJuIHJpZ2h0O1xyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29sdW1uV2lkdGgoY29sdW1uOiBYVGFibGVDb2x1bW4pIHtcclxuICAgIC8vIGlmIChOdW1iZXIoY29sdW1uLnJpZ2h0KSA9PT0gMCkge1xyXG4gICAgLy8gICBpZiAoTnVtYmVyKHRoaXMuc2Nyb2xsWVdpZHRoKSA+PSAwKSB7XHJcbiAgICAvLyAgICAgcmV0dXJuIE51bWJlcihjb2x1bW4ud2lkdGgpICsgTnVtYmVyKHRoaXMuc2Nyb2xsWVdpZHRoKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gICByZXR1cm4gY29sdW1uLndpZHRoO1xyXG4gICAgLy8gfVxyXG4gICAgcmV0dXJuIGNvbHVtbi53aWR0aDtcclxuICB9XHJcblxyXG4gIHNldFN0eWxlKCkge1xyXG4gICAgbGV0IGhlaWdodCA9IHRoaXMucm93SGVpZ2h0ID09IDAgPyAnJyA6IHRoaXMucm93SGVpZ2h0O1xyXG4gICAgaWYgKHRoaXMuY2VsbENvbmZpZyAmJiB0aGlzLmNlbGxDb25maWcuY2VsbHMpIHtcclxuICAgICAgY29uc3Qgc3B0ID0gdGhpcy5jZWxsQ29uZmlnLmNlbGxzLm1hcCgoeCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGdyaWRBcmVhU3B0ID0geC5ncmlkQXJlYT8uc3BsaXQoJy8nKTtcclxuICAgICAgICByZXR1cm4gZ3JpZEFyZWFTcHQgJiYgZ3JpZEFyZWFTcHQubGVuZ3RoID4gMyA/IE51bWJlcihncmlkQXJlYVNwdFsyXSkgOiAyO1xyXG4gICAgICB9KTtcclxuICAgICAgaGVpZ2h0ID0gKChNYXRoLm1heCguLi5zcHQpIC0gMSkgKiAoaGVpZ2h0IGFzIG51bWJlcikpIGFzIFhOdW1iZXI7XHJcbiAgICB9XHJcbiAgICB0aGlzLnRoZWFkU3R5bGUgPSB7XHJcbiAgICAgIC8vIGhlaWdodDogYCR7aGVpZ2h0fXB4YCxcclxuICAgICAgWydtaW4taGVpZ2h0J106IGAke3RoaXMuZ2V0Um93SGVpZ2h0fXB4YFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIG9uU29ydChjb2x1bW46IFhUYWJsZUNvbHVtbikge1xyXG4gICAgaWYgKCFjb2x1bW4uc29ydCkgcmV0dXJuO1xyXG4gICAgaWYgKFhJc0VtcHR5KHRoaXMuc29ydCkpIHRoaXMuc29ydCA9IFtdO1xyXG4gICAgbGV0IHNvcnQgPSB0aGlzLnNvcnQ/LmZpbmQoKHkpID0+IHkuZmllbGQgPT09IGNvbHVtbi5pZCk7XHJcbiAgICBpZiAoc29ydCkge1xyXG4gICAgICBpZiAoc29ydC52YWx1ZSA9PT0gJ2FzYycpIHtcclxuICAgICAgICB0aGlzLnNvcnQgPSBbXTtcclxuICAgICAgICB0aGlzLnNvcnRTdHIgPSAnJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzb3J0LnZhbHVlID0gJ2FzYyc7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNvcnQgPSB7IGZpZWxkOiBjb2x1bW4uaWQsIHZhbHVlOiAnZGVzYycgfTtcclxuICAgICAgdGhpcy5zb3J0ID0gW3NvcnRdO1xyXG4gICAgfVxyXG4gICAgaWYgKCFYSXNFbXB0eSh0aGlzLnNvcnQpKSB0aGlzLnNvcnRTdHIgPSBgJHtzb3J0LmZpZWxkfSAke3NvcnQudmFsdWV9YDtcclxuICAgIHRoaXMudGFibGUuY2hlY2tTb3J0KHRoaXMuc29ydCk7XHJcbiAgICB0aGlzLnRhYmxlLnNvcnRDaGFuZ2UuZW1pdCh0aGlzLnNvcnQpO1xyXG4gICAgdGhpcy50YWJsZS5yZXNldFNjcm9sbChmYWxzZSwgdHJ1ZSk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBkcmFnV2lkdGhNb3ZlZChwb3NpdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgb2Zmc2V0WDogbnVtYmVyOyBvZmZzZXRZOiBudW1iZXIgfSwgY29sdW1uOiBYVGFibGVDb2x1bW4gfCBYVGFibGVDZWxsKSB7XHJcbiAgICBpZiAoY29sdW1uLndpZHRoKSB7XHJcbiAgICAgIChjb2x1bW4ud2lkdGggYXMgbnVtYmVyKSArPSBwb3NpdGlvbi5vZmZzZXRYO1xyXG4gICAgICBpZiAoY29sdW1uLndpZHRoIDwgNjApIGNvbHVtbi53aWR0aCA9IDYwO1xyXG4gICAgICBYSXNGdW5jdGlvbihjb2x1bW4uZHJhZ1dpZHRoTW92ZWQpICYmIGNvbHVtbi5kcmFnV2lkdGhNb3ZlZCh7IHBvc2l0aW9uLCBjb2x1bW4gfSk7XHJcbiAgICAgIHRoaXMudGFibGUuY29sdW1uRHJhZ1dpZHRoTW92ZWQuZW1pdCh7IHBvc2l0aW9uLCBjb2x1bW4gfSk7XHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy50YWJsZS5ib2R5Q2hhbmdlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkcmFnV2lkdGhTdGFydGVkKHBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0sIGNvbHVtbjogWFRhYmxlQ29sdW1uIHwgWFRhYmxlQ2VsbCkge1xyXG4gICAgY29sdW1uLmRyYWdnaW5nV2lkdGggPSB0cnVlO1xyXG4gICAgaWYgKGNvbHVtbi53aWR0aCAmJiBYSXNGdW5jdGlvbihjb2x1bW4uZHJhZ1dpZHRoU3RhcnRlZCkpIHtcclxuICAgICAgY29sdW1uLmRyYWdXaWR0aFN0YXJ0ZWQoeyBwb3NpdGlvbiwgY29sdW1uIH0pO1xyXG4gICAgICB0aGlzLnRhYmxlLmNvbHVtbkRyYWdXaWR0aFN0YXJ0ZWQuZW1pdCh7IHBvc2l0aW9uLCBjb2x1bW4gfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkcmFnV2lkdGhFbmRlZChwb3NpdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9LCBjb2x1bW46IFhUYWJsZUNvbHVtbiB8IFhUYWJsZUNlbGwpIHtcclxuICAgIGNvbHVtbi5kcmFnZ2luZ1dpZHRoID0gZmFsc2U7XHJcbiAgICBpZiAoY29sdW1uLndpZHRoICYmIFhJc0Z1bmN0aW9uKGNvbHVtbi5kcmFnV2lkdGhFbmRlZCkpIHtcclxuICAgICAgY29sdW1uLmRyYWdXaWR0aEVuZGVkKHsgcG9zaXRpb24sIGNvbHVtbiB9KTtcclxuICAgICAgdGhpcy50YWJsZS5jb2x1bW5EcmFnV2lkdGhFbmRlZC5lbWl0KHsgcG9zaXRpb24sIGNvbHVtbiB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRyb3BMaXN0RHJvcHBlZChfZXZlbnQ6IENka0RyYWdEcm9wPFhUYWJsZUNvbHVtbltdPikge1xyXG4gICAgdGhpcy5kcmFnQ2hhbmdlKCk7XHJcbiAgICB0aGlzLnRhYmxlLmNvbHVtbkRyb3BMaXN0RHJvcHBlZC5lbWl0KHRoaXMuY29sdW1ucyk7XHJcbiAgfVxyXG5cclxuICBkcm9wTGlzdFNvcnRlZChldmVudDogQ2RrRHJhZ1NvcnRFdmVudDxYVGFibGVDb2x1bW5bXT4pIHtcclxuICAgIGNvbnN0IHByZXZpb3VzID0gdGhpcy5jb2x1bW5zW2V2ZW50LnByZXZpb3VzSW5kZXhdO1xyXG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuY29sdW1uc1tldmVudC5jdXJyZW50SW5kZXhdO1xyXG4gICAgY29uc3QgbWlkZGxlID0geyBsZWZ0OiBwcmV2aW91cy5sZWZ0LCByaWdodDogcHJldmlvdXMucmlnaHQgfTtcclxuICAgIHByZXZpb3VzLmxlZnQgPSBjdXJyZW50LmxlZnQ7XHJcbiAgICBwcmV2aW91cy5yaWdodCA9IGN1cnJlbnQucmlnaHQ7XHJcbiAgICBjdXJyZW50LmxlZnQgPSBtaWRkbGUubGVmdDtcclxuICAgIGN1cnJlbnQucmlnaHQgPSBtaWRkbGUucmlnaHQ7XHJcbiAgICBtb3ZlSXRlbUluQXJyYXkodGhpcy5jb2x1bW5zLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xyXG4gICAgdGhpcy5kcmFnQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICBkcmFnU3RhcnRlZChfZXZlbnQ6IENka0RyYWdTdGFydCwgY29sdW1uOiBYVGFibGVDb2x1bW4pIHtcclxuICAgIGNvbHVtbi5kcmFnZ2luZyA9IHRydWU7XHJcbiAgICB0aGlzLmRyYWdDaGFuZ2UoKTtcclxuICAgIHRoaXMudGFibGUudGhlYWRzQ2hhbmdlcygpO1xyXG4gICAgdGhpcy50YWJsZS5jb2x1bW5EcmFnU3RhcnRlZC5lbWl0KGNvbHVtbik7XHJcbiAgfVxyXG5cclxuICBkcmFnRW5kZWQoY29sdW1uOiBYVGFibGVDb2x1bW4pIHtcclxuICAgIGNvbHVtbi5kcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5kcmFnQ2hhbmdlKCk7XHJcbiAgICB0aGlzLnRhYmxlLnRoZWFkc0NoYW5nZXMoKTtcclxuICAgIHRoaXMudGFibGUuY29sdW1uRHJhZ0VuZGVkLmVtaXQoY29sdW1uKTtcclxuICB9XHJcblxyXG4gIGRyYWdDaGFuZ2UoKSB7XHJcbiAgICB0aGlzLnRhYmxlLmJvZHlDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIHRyYWNrQnlJdGVtKF9pbmRleDogbnVtYmVyLCBpdGVtOiBYVGFibGVDb2x1bW4pIHtcclxuICAgIHJldHVybiBpdGVtLmlkO1xyXG4gIH1cclxufVxyXG4iLCI8dGhlYWRcclxuICAjdGhlYWRcclxuICBbbmdTdHlsZV09XCJ0aGVhZFN0eWxlXCJcclxuICBbY2xhc3MueC10YWJsZS1oZWFkLXRvcF09XCJwb3NpdGlvbiA9PT0gJ3RvcCdcIlxyXG4gIFtjbGFzcy54LXRhYmxlLWhlYWQtYm90dG9tXT1cInBvc2l0aW9uID09PSAnYm90dG9tJ1wiXHJcbj5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2VsbENvbmZpZzsgZWxzZSBjb2x1bW5zVHBsXCI+XHJcbiAgICA8dHJcclxuICAgICAgW3N0eWxlLmdyaWRUZW1wbGF0ZUNvbHVtbnNdPVwiY2VsbENvbmZpZy5ncmlkVGVtcGxhdGVDb2x1bW5zXCJcclxuICAgICAgW3N0eWxlLm1pbi1oZWlnaHQucHhdPVwiZ2V0Um93SGVpZ2h0XCJcclxuICAgID5cclxuICAgICAgPHRoXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjZWxsQ29uZmlnLmNlbGxzXCJcclxuICAgICAgICBbY2xhc3MueC10YWJsZS1zdGlja3ldPVwidGFibGUuZ2V0U3RpY2t5TGVmdChjb2x1bW4pIHx8IHRhYmxlLmdldFN0aWNreVJpZ2h0KGNvbHVtbilcIlxyXG4gICAgICAgIFtjbGFzcy54LXRhYmxlLXN0aWNreS1sZWZ0XT1cInRhYmxlLmdldFN0aWNreUxlZnQoY29sdW1uKVwiXHJcbiAgICAgICAgW2NsYXNzLngtdGFibGUtc3RpY2t5LXJpZ2h0XT1cInRhYmxlLmdldFN0aWNreVJpZ2h0KGNvbHVtbilcIlxyXG4gICAgICAgIFtjbGFzcy54LXRhYmxlLXN0aWNreS1sZWZ0LWxhc3RdPVwidGFibGUuZ2V0U3RpY2t5TGVmdExhc3QoY29sdW1uKVwiXHJcbiAgICAgICAgW2NsYXNzLngtdGFibGUtc3RpY2t5LXJpZ2h0LWZpcnN0XT1cInRhYmxlLmdldFN0aWNreVJpZ2h0Rmlyc3QoY29sdW1uKVwiXHJcbiAgICAgICAgW2NsYXNzLngtdGFibGUtd2lkdGgtZHJhZ109XCJjb2x1bW4uZHJhZ1dpZHRoXCJcclxuICAgICAgICBbc3R5bGUuZ3JpZC1hcmVhXT1cImNvbHVtbi5ncmlkQXJlYVwiXHJcbiAgICAgICAgW3N0eWxlLmxlZnQucHhdPVwiY29sdW1uLmxlZnRcIlxyXG4gICAgICAgIFtzdHlsZS5yaWdodC5weF09XCJjb2x1bW4ucmlnaHRcIlxyXG4gICAgICAgIFtzdHlsZS5taW4taGVpZ2h0LnB4XT1cImdldFJvd0hlaWdodFwiXHJcbiAgICAgICAgW3RpdGxlXT1cImNvbHVtbj8ubGFiZWxcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbHVtbkJhc2VUcGw7IGNvbnRleHQ6IHsgY29sdW1uOiBjb2x1bW4gfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgICpuZ0lmPVwiY29sdW1uLmRyYWdXaWR0aFwiXHJcbiAgICAgICAgICBjbGFzcz1cIngtdGFibGUtZHJhZy13aWR0aFwiXHJcbiAgICAgICAgICB4LWRyYWdcclxuICAgICAgICAgIChkcmFnTW92ZWQpPVwiZHJhZ1dpZHRoTW92ZWQoJGV2ZW50LCBjb2x1bW4pXCJcclxuICAgICAgICAgIChkcmFnU3RhcnRlZCk9XCJkcmFnV2lkdGhTdGFydGVkKCRldmVudCwgY29sdW1uKVwiXHJcbiAgICAgICAgICAoZHJhZ0VuZGVkKT1cImRyYWdXaWR0aEVuZGVkKCRldmVudCwgY29sdW1uKVwiXHJcbiAgICAgICAgPjwvZGl2PlxyXG4gICAgICA8L3RoPlxyXG4gICAgPC90cj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFibGUuaGVhZFNlYXJjaFRwbFwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbHVtbnNUcGw7IGNvbnRleHQ6IHsgY2FzZTogJ3NlYXJjaCcgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L3RoZWFkPlxyXG5cclxuPG5nLXRlbXBsYXRlICNjb2x1bW5zVHBsIGxldC1jYXNlPVwiY2FzZVwiPlxyXG4gIDx0clxyXG4gICAgY2RrRHJvcExpc3RcclxuICAgIGNka0Ryb3BMaXN0T3JpZW50YXRpb249XCJob3Jpem9udGFsXCJcclxuICAgIChjZGtEcm9wTGlzdFNvcnRlZCk9XCJkcm9wTGlzdFNvcnRlZCgkZXZlbnQpXCJcclxuICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcExpc3REcm9wcGVkKCRldmVudClcIlxyXG4gICAgW3N0eWxlLmhlaWdodC5weF09XCJnZXRSb3dIZWlnaHRcIlxyXG4gICAgW3N0eWxlLm1pbi1oZWlnaHQucHhdPVwiZ2V0Um93SGVpZ2h0XCJcclxuICAgIFtzdHlsZS5wYWRkaW5nLXJpZ2h0LnB4XT1cInNjcm9sbFlXaWR0aFwiXHJcbiAgICBbc3R5bGUud2lkdGgucHhdPVwic2Nyb2xsWFdpZHRoXCJcclxuICAgIFtjbGFzcy54LXRhYmxlLXNlYXJjaF09XCJjYXNlID09PSAnc2VhcmNoJ1wiXHJcbiAgPlxyXG4gICAgPHRoXHJcbiAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uczsgdHJhY2tCeTogdHJhY2tCeUl0ZW1cIlxyXG4gICAgICBjZGtEcmFnXHJcbiAgICAgIFtjZGtEcmFnRGlzYWJsZWRdPVwiY29sdW1uLmRyYWdnaW5nV2lkdGggfHwgIWNvbHVtbi5kcmFnQ29sdW1uXCJcclxuICAgICAgKGNka0RyYWdTdGFydGVkKT1cImRyYWdTdGFydGVkKCRldmVudCwgY29sdW1uKVwiXHJcbiAgICAgIChjZGtEcmFnRW5kZWQpPVwiZHJhZ0VuZGVkKGNvbHVtbilcIlxyXG4gICAgICBbbmdDbGFzc109XCJ0aENsYXNzTWFwXCJcclxuICAgICAgW2NsYXNzLngtdGFibGUtdGhdPVwidHJ1ZVwiXHJcbiAgICAgIFtjbGFzcy54LXRhYmxlLXN0aWNreV09XCJ0YWJsZS5nZXRTdGlja3koY29sdW1uKVwiXHJcbiAgICAgIFtjbGFzcy54LXRhYmxlLXN0aWNreS1sZWZ0XT1cInRhYmxlLmdldFN0aWNreUxlZnQoY29sdW1uKVwiXHJcbiAgICAgIFtjbGFzcy54LXRhYmxlLXN0aWNreS1yaWdodF09XCJ0YWJsZS5nZXRTdGlja3lSaWdodChjb2x1bW4pXCJcclxuICAgICAgW2NsYXNzLngtdGFibGUtc3RpY2t5LWxlZnQtbGFzdF09XCJ0YWJsZS5nZXRTdGlja3lMZWZ0TGFzdChjb2x1bW4pXCJcclxuICAgICAgW2NsYXNzLngtdGFibGUtc3RpY2t5LXJpZ2h0LWZpcnN0XT1cInRhYmxlLmdldFN0aWNreVJpZ2h0Rmlyc3QoY29sdW1uKVwiXHJcbiAgICAgIFtzdHlsZS5taW4taGVpZ2h0LnB4XT1cImdldFJvd0hlaWdodFwiXHJcbiAgICAgIFtzdHlsZS53aWR0aC5weF09XCJnZXRDb2x1bW5XaWR0aChjb2x1bW4pXCJcclxuICAgICAgW3N0eWxlLmxlZnQucHhdPVwiY29sdW1uLmxlZnRcIlxyXG4gICAgICBbc3R5bGUucmlnaHQucHhdPVwiZ2V0Q29sdW1uUmlnaHQoY29sdW1uLnJpZ2h0KVwiXHJcbiAgICAgIFtzdHlsZS5mbGV4XT1cImdldEZsZXgoY29sdW1uKVwiXHJcbiAgICA+XHJcbiAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNhc2VcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc2VhcmNoJ1wiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInRhYmxlLmhlYWRTZWFyY2hUcGw7IGNvbnRleHQ6IHsgJGNvbHVtbjogY29sdW1uIH1cIlxyXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb2x1bW5CYXNlVHBsOyBjb250ZXh0OiB7IGNvbHVtbjogY29sdW1uIH1cIlxyXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAqbmdJZj1cImNvbHVtbi5kcmFnV2lkdGhcIlxyXG4gICAgICAgICAgICBjbGFzcz1cIngtdGFibGUtZHJhZy13aWR0aFwiXHJcbiAgICAgICAgICAgIHgtZHJhZ1xyXG4gICAgICAgICAgICAoZHJhZ01vdmVkKT1cImRyYWdXaWR0aE1vdmVkKCRldmVudCwgY29sdW1uKVwiXHJcbiAgICAgICAgICAgIChkcmFnU3RhcnRlZCk9XCJkcmFnV2lkdGhTdGFydGVkKCRldmVudCwgY29sdW1uKVwiXHJcbiAgICAgICAgICAgIChkcmFnRW5kZWQpPVwiZHJhZ1dpZHRoRW5kZWQoJGV2ZW50LCBjb2x1bW4pXCJcclxuICAgICAgICAgID48L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L3RoPlxyXG4gIDwvdHI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2NvbHVtbkJhc2VUcGwgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxyXG4gIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbHVtbi50eXBlXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY2hlY2tib3gnXCI+XHJcbiAgICAgIDx4LWNoZWNrYm94XHJcbiAgICAgICAgKm5nSWY9XCJjb2x1bW4uaGVhZENoZWNrZWRcIlxyXG4gICAgICAgIFtkYXRhXT1cIlt7IGlkOiB0cnVlLCBsYWJlbDogY29sdW1uLmxhYmVsIH1dXCJcclxuICAgICAgICBbKG5nTW9kZWwpXT1cInRhYmxlLmNoZWNrZWRWYWx1ZXNbY29sdW1uLmlkXVwiXHJcbiAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidGFibGUuaGVhZENoZWNrZWQoJGV2ZW50LCBjb2x1bW4pXCJcclxuICAgICAgICBzaW5nbGVcclxuICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJ0YWJsZS5jaGVja2VkVmFsdWVzW2NvbHVtbi5pZCArIHRhYmxlLmluZGV0ZXJtaW5hdGVdXCJcclxuICAgICAgPjwveC1jaGVja2JveD5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb2x1bW4uaGVhZENoZWNrZWRcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImNsb3VtbkRlZmF1bHRUcGw7IGNvbnRleHQ6IHsgY29sdW1uOiBjb2x1bW4gfVwiXHJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2luZGV4J1wiPlxyXG4gICAgICA8YT57eyBjb2x1bW4ubGFiZWwgfX08L2E+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2xvdW1uRGVmYXVsdFRwbDsgY29udGV4dDogeyBjb2x1bW46IGNvbHVtbiB9XCJcclxuICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2Nsb3VtbkRlZmF1bHRUcGwgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxyXG4gIDxhXHJcbiAgICBbY2xhc3MueC10YWJsZS1zb3J0XT1cImNvbHVtbi5zb3J0XCJcclxuICAgIChjbGljayk9XCJvblNvcnQoY29sdW1uKVwiXHJcbiAgICBbc3R5bGUudGV4dC1hbGlnbl09XCJjb2x1bW4udGV4dEFsaWduXCJcclxuICA+XHJcbiAgICA8bmctY29udGFpbmVyICp4T3V0bGV0PVwiY29sdW1uVHBsW2NvbHVtbi5pZF07IGNvbnRleHQ6IHsgJGNvbHVtbjogY29sdW1uIH1cIj5cclxuICAgICAge3sgY29sdW1uLmxhYmVsIH19XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDx4LWljb25cclxuICAgICAgKm5nSWY9XCJjb2x1bW4uc29ydFwiXHJcbiAgICAgIHR5cGU9XCJmdG8tYmFyLWNoYXJ0XCJcclxuICAgICAgY2xhc3M9XCJ4LXRhYmxlLXNvcnQtaWNvblwiXHJcbiAgICAgIFtjbGFzcy54LXRhYmxlLWljb24tdXBdPVwic29ydFN0ciA9PT0gY29sdW1uLmlkICsgJyBkZXNjJ1wiXHJcbiAgICAgIFtjbGFzcy54LXRhYmxlLWljb24tZG93bl09XCJzb3J0U3RyID09PSBjb2x1bW4uaWQgKyAnIGFzYydcIlxyXG4gICAgPjwveC1pY29uPlxyXG4gIDwvYT5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19