@worktile/gantt 15.1.0-next.4 → 15.1.0-next.6

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.
@@ -1,4 +1,4 @@
1
- import { debounceTime, filter, startWith, Subject, takeUntil } from 'rxjs';
1
+ import { auditTime, filter, startWith, Subject, takeUntil } from 'rxjs';
2
2
  import { Component, HostBinding, Input, Inject, Output, EventEmitter, ViewChildren } from '@angular/core';
3
3
  import { coerceCssPixelValue } from '@angular/cdk/coercion';
4
4
  import { GANTT_ABSTRACT_TOKEN } from '../../../gantt-abstract';
@@ -37,7 +37,7 @@ export class GanttTableBodyComponent {
37
37
  this.ganttTableDragging = false;
38
38
  this.hasExpandIcon = false;
39
39
  // 缓存 Element 和 DragRef 的关系,方便在 Item 拖动时查找
40
- this.itemDragRefMap = new Map();
40
+ this.itemDragsMap = new Map();
41
41
  this.itemDragMoved = new Subject();
42
42
  this.destroy$ = new Subject();
43
43
  }
@@ -45,7 +45,6 @@ export class GanttTableBodyComponent {
45
45
  this.columns.changes.pipe(startWith(this.columns), takeUntil(this.destroy$)).subscribe(() => {
46
46
  this.hasExpandIcon = false;
47
47
  this.columns.forEach((column) => {
48
- // column.classList.add('gantt-table-column');
49
48
  if (!column.columnWidth) {
50
49
  column.columnWidth = coerceCssPixelValue(defaultColumnWidth);
51
50
  }
@@ -60,17 +59,17 @@ export class GanttTableBodyComponent {
60
59
  this.cdkDrags.changes
61
60
  .pipe(startWith(this.cdkDrags), takeUntil(this.destroy$))
62
61
  .subscribe((drags) => {
63
- this.itemDragRefMap.clear();
62
+ this.itemDragsMap.clear();
64
63
  drags.forEach((drag) => {
65
64
  if (drag.data) {
66
65
  // cdkDrag 变化时,缓存 Element 与 DragRef 的关系,方便 Drag Move 时查找
67
- this.itemDragRefMap.set(drag.element.nativeElement, drag);
66
+ this.itemDragsMap.set(drag.element.nativeElement, drag);
68
67
  }
69
68
  });
70
69
  });
71
70
  this.itemDragMoved
72
- .pipe(debounceTime(30),
73
- // debounce 可能会导致拖动结束后仍然执行 moved ,所以通过判断 dragging 状态来过滤无效 moved
71
+ .pipe(auditTime(30),
72
+ // auditTime 可能会导致拖动结束后仍然执行 moved ,所以通过判断 dragging 状态来过滤无效 moved
74
73
  filter((event) => event.source._dragRef.isDragging()), takeUntil(this.destroy$))
75
74
  .subscribe((event) => {
76
75
  this.onItemDragMoved(event);
@@ -110,12 +109,12 @@ export class GanttTableBodyComponent {
110
109
  }
111
110
  // 缓存放置目标Id 并计算鼠标相对应的位置
112
111
  this.itemDropTarget = {
113
- id: this.itemDragRefMap.get(targetElement)?.data.id,
112
+ id: this.itemDragsMap.get(targetElement)?.data.id,
114
113
  position: this.getTargetPosition(targetElement, event)
115
114
  };
116
115
  // 执行外部传入的 dropEnterPredicate 判断是否允许拖入目标项
117
116
  if (this.dropEnterPredicate) {
118
- const targetDragRef = this.itemDragRefMap.get(targetElement);
117
+ const targetDragRef = this.itemDragsMap.get(targetElement);
119
118
  if (this.dropEnterPredicate({
120
119
  source: event.source.data.origin,
121
120
  target: targetDragRef.data.origin,
@@ -138,26 +137,29 @@ export class GanttTableBodyComponent {
138
137
  if (!this.itemDropTarget) {
139
138
  return;
140
139
  }
141
- const targetDragRef = this.cdkDrags.find((item) => item.data?.id === this.itemDropTarget.id);
142
140
  const sourceItem = event.item.data;
141
+ const sourceParent = this.getParentByItem(sourceItem);
142
+ const sourceChildren = this.getExpandChildrenByDrag(event.item);
143
+ const targetDragRef = this.cdkDrags.find((item) => item.data?.id === this.itemDropTarget.id);
143
144
  const targetItem = targetDragRef?.data;
144
- this.removeItem(sourceItem);
145
+ const targetParent = this.getParentByItem(targetItem);
146
+ this.removeItem(sourceItem, sourceChildren);
145
147
  switch (this.itemDropTarget.position) {
146
148
  case 'before':
147
149
  case 'after':
148
- this.insertItem(targetItem, sourceItem, this.itemDropTarget.position);
150
+ this.insertItem(targetItem, sourceItem, sourceChildren, this.itemDropTarget.position);
149
151
  sourceItem.updateLevel(targetItem.level);
150
152
  break;
151
153
  case 'inside':
152
- this.insertChildrenItem(targetItem, sourceItem);
154
+ this.insertChildrenItem(targetItem, sourceItem, sourceChildren);
153
155
  sourceItem.updateLevel(targetItem.level + 1);
154
156
  break;
155
157
  }
156
158
  this.dragDropped.emit({
157
159
  source: sourceItem.origin,
158
- sourceParent: this.getParentByItem(sourceItem)?.origin,
160
+ sourceParent: sourceParent?.origin,
159
161
  target: targetItem.origin,
160
- targetParent: this.getParentByItem(targetItem)?.origin,
162
+ targetParent: targetParent?.origin,
161
163
  dropPosition: this.itemDropTarget.position
162
164
  });
163
165
  this.cleanupDragArtifacts(true);
@@ -169,14 +171,14 @@ export class GanttTableBodyComponent {
169
171
  this.destroy$.next();
170
172
  this.destroy$.complete();
171
173
  }
172
- removeItem(item) {
173
- this.renderData.splice(this.renderData.indexOf(item), 1);
174
- this.flatData.splice(this.flatData.indexOf(item), 1);
174
+ removeItem(item, children) {
175
+ this.renderData.splice(this.renderData.indexOf(item), 1 + children.length);
176
+ this.flatData.splice(this.flatData.indexOf(item), 1 + children.length);
175
177
  }
176
- insertItem(target, inserted, position) {
178
+ insertItem(target, inserted, children, position) {
177
179
  if (position === 'before') {
178
- this.renderData.splice(this.renderData.indexOf(target), 0, inserted);
179
- this.flatData.splice(this.flatData.indexOf(target), 0, inserted);
180
+ this.renderData.splice(this.renderData.indexOf(target), 0, inserted, ...children);
181
+ this.flatData.splice(this.flatData.indexOf(target), 0, inserted, ...children);
180
182
  }
181
183
  else {
182
184
  const dragRef = this.cdkDrags.find((drag) => drag.data === target);
@@ -185,14 +187,14 @@ export class GanttTableBodyComponent {
185
187
  if (target.expanded) {
186
188
  childrenCount = this.getChildrenElementsByElement(dragRef.element.nativeElement)?.length || 0;
187
189
  }
188
- this.renderData.splice(this.renderData.indexOf(target) + 1 + childrenCount, 0, inserted);
189
- this.flatData.splice(this.flatData.indexOf(target) + 1 + childrenCount, 0, inserted);
190
+ this.renderData.splice(this.renderData.indexOf(target) + 1 + childrenCount, 0, inserted, ...children);
191
+ this.flatData.splice(this.flatData.indexOf(target) + 1 + childrenCount, 0, inserted, ...children);
190
192
  }
191
193
  }
192
- insertChildrenItem(target, inserted) {
194
+ insertChildrenItem(target, inserted, children) {
193
195
  if (target.expanded) {
194
- this.renderData.splice(this.renderData.indexOf(target) + target.children.length + 1, 0, inserted);
195
- this.flatData.splice(this.flatData.indexOf(target) + target.children.length + 1, 0, inserted);
196
+ this.renderData.splice(this.renderData.indexOf(target) + target.children.length + 1, 0, inserted, ...children);
197
+ this.flatData.splice(this.flatData.indexOf(target) + target.children.length + 1, 0, inserted, ...children);
196
198
  }
197
199
  target.children.push(inserted);
198
200
  }
@@ -201,17 +203,26 @@ export class GanttTableBodyComponent {
201
203
  return n.children?.includes(item);
202
204
  });
203
205
  }
206
+ getExpandChildrenByDrag(dragRef) {
207
+ if (!dragRef.data.expanded) {
208
+ return [];
209
+ }
210
+ else {
211
+ const childrenElements = this.getChildrenElementsByElement(dragRef.element.nativeElement);
212
+ return childrenElements.map((element) => this.itemDragsMap.get(element).data);
213
+ }
214
+ }
204
215
  getChildrenElementsByElement(dragElement) {
205
216
  // 通过循环持续查找 next element,如果 element 的 level 小于当前 item 的 level,则为它的 children
206
217
  const children = [];
207
- const dragRef = this.itemDragRefMap.get(dragElement);
218
+ const dragRef = this.itemDragsMap.get(dragElement);
208
219
  // 如果当前的 Drag 正在拖拽,会创建 PlaceholderElement 占位,所以以 PlaceholderElement 向下查找
209
220
  let nextElement = (dragRef.getPlaceholderElement() || dragElement).nextElementSibling;
210
- let nextDragRef = this.itemDragRefMap.get(nextElement);
221
+ let nextDragRef = this.itemDragsMap.get(nextElement);
211
222
  while (nextDragRef && nextDragRef.data.level > dragRef.data.level) {
212
223
  children.push(nextElement);
213
224
  nextElement = nextElement.nextElementSibling;
214
- nextDragRef = this.itemDragRefMap.get(nextElement);
225
+ nextDragRef = this.itemDragsMap.get(nextElement);
215
226
  }
216
227
  return children;
217
228
  }
@@ -238,18 +249,18 @@ export class GanttTableBodyComponent {
238
249
  cleanupDragArtifacts(dropped = false) {
239
250
  if (dropped) {
240
251
  this.itemDropTarget = null;
252
+ this.document.querySelectorAll('.drag-item-hide').forEach((element) => element.classList.remove('drag-item-hide'));
241
253
  }
242
254
  this.document.querySelectorAll('.drop-position-before').forEach((element) => element.classList.remove('drop-position-before'));
243
255
  this.document.querySelectorAll('.drop-position-after').forEach((element) => element.classList.remove('drop-position-after'));
244
256
  this.document.querySelectorAll('.drop-position-inside').forEach((element) => element.classList.remove('drop-position-inside'));
245
- this.document.querySelectorAll('.drag-item-hide').forEach((element) => element.classList.remove('drop-item-hide'));
246
257
  }
247
258
  }
248
259
  GanttTableBodyComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: GanttTableBodyComponent, deps: [{ token: GANTT_ABSTRACT_TOKEN }, { token: GANTT_UPPER_TOKEN }, { token: i0.ChangeDetectorRef }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
249
- GanttTableBodyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", type: GanttTableBodyComponent, selector: "gantt-table-body", inputs: { renderData: "renderData", flatData: "flatData", columns: "columns", groupTemplate: "groupTemplate", emptyTemplate: "emptyTemplate", rowBeforeTemplate: "rowBeforeTemplate", rowAfterTemplate: "rowAfterTemplate", draggable: "draggable", dropEnterPredicate: "dropEnterPredicate" }, outputs: { dragDropped: "dragDropped", itemClick: "itemClick" }, host: { properties: { "class.gantt-table-draggable": "this.draggable", "class.gantt-table-body": "this.ganttTableClass", "class.gantt-table-empty": "this.ganttTableEmptyClass", "class.gantt-table-dragging": "this.ganttTableDragging" } }, viewQueries: [{ propertyName: "cdkDrags", predicate: (CdkDrag), descendants: true }], ngImport: i0, template: "<div\n class=\"gantt-table-body-container\"\n cdkDropList\n [cdkDropListAutoScrollStep]=\"6\"\n [cdkDropListData]=\"renderData\"\n [cdkDropListSortingDisabled]=\"true\"\n (cdkDropListDropped)=\"onListDropped($event)\"\n>\n <ng-container *ngIf=\"!renderData?.length\">\n <ng-container *ngIf=\"!emptyTemplate\">\n <gantt-icon class=\"empty-icon\" iconName=\"empty\"></gantt-icon>\n <div class=\"empty-text\">\u6CA1\u6709\u6570\u636E</div>\n </ng-container>\n <ng-template [ngTemplateOutlet]=\"emptyTemplate\"></ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"renderData && renderData.length > 0\">\n <ng-container *ngFor=\"let item of renderData; trackBy: trackBy\">\n <div class=\"gantt-table-group\" [ngClass]=\"item.class\" *ngIf=\"item.items\">\n <div class=\"gantt-table-group-title\" [class.expanded]=\"item.expanded\" (click)=\"expandGroup(item)\">\n <gantt-icon class=\"expand-icon\" [iconName]=\"item.expanded ? 'angle-down' : 'angle-right'\"></gantt-icon>\n <ng-container *ngIf=\"groupTemplate; else default\">\n <ng-template\n [ngTemplateOutlet]=\"groupTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item.origin, group: item.origin }\"\n ></ng-template>\n </ng-container>\n <ng-template #default>\n <span class=\"group-title\">{{ item.title }}</span>\n </ng-template>\n </div>\n </div>\n\n <div\n *ngIf=\"!item.items\"\n (click)=\"itemClick.emit({ event: $event, selectedValue: item.origin })\"\n cdkDrag\n [cdkDragData]=\"item\"\n [cdkDragDisabled]=\"(draggable && item.itemDraggable === false) || !draggable\"\n (cdkDragStarted)=\"onItemDragStarted($event)\"\n (cdkDragEnded)=\"onItemDragEnded($event)\"\n (cdkDragMoved)=\"emitItemDragMoved($event)\"\n class=\"gantt-table-item\"\n [class.gantt-table-item-with-group]=\"hasGroup\"\n [class.gantt-table-item-first-level-group]=\"item.level === 0 && (item.type | isGanttRangeItem)\"\n [style.height.px]=\"gantt.styles.lineHeight\"\n [style.lineHeight.px]=\"gantt.styles.lineHeight\"\n [class.gantt-table-item-active]=\"ganttUpper.isSelected(item.id)\"\n >\n <ng-template\n [ngTemplateOutlet]=\"rowBeforeTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item.origin, item: item.origin }\"\n ></ng-template>\n\n <div class=\"gantt-table-column\" *ngFor=\"let column of columns; let first = first\" [style.width]=\"column.columnWidth\">\n <!-- drag icon -->\n <gantt-icon\n *ngIf=\"first && draggable\"\n class=\"gantt-drag-handle\"\n iconName=\"drag\"\n cdkDragHandle\n [cdkDragHandleDisabled]=\"(draggable && item.itemDraggable === false) || !draggable\"\n ></gantt-icon>\n <!-- expand icon -->\n <div\n *ngIf=\"column?.showExpandIcon || (!hasExpandIcon && first)\"\n class=\"gantt-expand-icon\"\n [style.marginLeft.px]=\"item.level * 20\"\n >\n <ng-container *ngIf=\"item.level < gantt.maxLevel - 1 && item.expandable\">\n <gantt-icon\n *ngIf=\"!item.loading\"\n class=\"expand-icon\"\n [iconName]=\"item.expanded ? 'angle-down' : 'angle-right'\"\n (click)=\"expandChildren($event, item)\"\n >\n </gantt-icon>\n <gantt-icon *ngIf=\"item.loading\" [iconName]=\"'loading'\"></gantt-icon>\n </ng-container>\n </div>\n <!-- column content -->\n <div class=\"gantt-table-column-content\">\n <ng-template\n [ngTemplateOutlet]=\"column.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: item.origin, item: item.origin }\"\n ></ng-template>\n </div>\n </div>\n <ng-template\n [ngTemplateOutlet]=\"rowAfterTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item.origin, item: item.origin }\"\n ></ng-template>\n </div>\n </ng-container>\n </ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.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: i2.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: i2.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i3.GanttIconComponent, selector: "gantt-icon", inputs: ["iconName"] }, { kind: "pipe", type: i4.IsGanttRangeItemPipe, name: "isGanttRangeItem" }] });
260
+ GanttTableBodyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", type: GanttTableBodyComponent, selector: "gantt-table-body", inputs: { renderData: "renderData", flatData: "flatData", columns: "columns", groupTemplate: "groupTemplate", emptyTemplate: "emptyTemplate", rowBeforeTemplate: "rowBeforeTemplate", rowAfterTemplate: "rowAfterTemplate", draggable: "draggable", dropEnterPredicate: "dropEnterPredicate" }, outputs: { dragDropped: "dragDropped", itemClick: "itemClick" }, host: { properties: { "class.gantt-table-draggable": "this.draggable", "class.gantt-table-body": "this.ganttTableClass", "class.gantt-table-empty": "this.ganttTableEmptyClass", "class.gantt-table-dragging": "this.ganttTableDragging" } }, viewQueries: [{ propertyName: "cdkDrags", predicate: (CdkDrag), descendants: true }], ngImport: i0, template: "<div\n class=\"gantt-table-body-container\"\n cdkDropList\n [cdkDropListAutoScrollStep]=\"6\"\n [cdkDropListData]=\"renderData\"\n [cdkDropListSortingDisabled]=\"true\"\n (cdkDropListDropped)=\"onListDropped($event)\"\n>\n <ng-container *ngIf=\"!renderData?.length\">\n <ng-container *ngIf=\"!emptyTemplate\">\n <gantt-icon class=\"empty-icon\" iconName=\"empty\"></gantt-icon>\n <div class=\"empty-text\">\u6CA1\u6709\u6570\u636E</div>\n </ng-container>\n <ng-template [ngTemplateOutlet]=\"emptyTemplate\"></ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"renderData && renderData.length > 0\">\n <ng-container *ngFor=\"let item of renderData; trackBy: trackBy\">\n <div class=\"gantt-table-group\" [ngClass]=\"item.class\" *ngIf=\"item.items\">\n <div class=\"gantt-table-group-title\" [class.expanded]=\"item.expanded\" (click)=\"expandGroup(item)\">\n <gantt-icon class=\"expand-icon\" [iconName]=\"item.expanded ? 'angle-down' : 'angle-right'\"></gantt-icon>\n <ng-container *ngIf=\"groupTemplate; else default\">\n <ng-template\n [ngTemplateOutlet]=\"groupTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item.origin, group: item.origin }\"\n ></ng-template>\n </ng-container>\n <ng-template #default>\n <span class=\"group-title\">{{ item.title }}</span>\n </ng-template>\n </div>\n </div>\n\n <div\n *ngIf=\"!item.items\"\n (click)=\"itemClick.emit({ event: $event, selectedValue: item.origin })\"\n cdkDrag\n [cdkDragData]=\"item\"\n [cdkDragDisabled]=\"(draggable && item.itemDraggable === false) || !draggable\"\n (cdkDragStarted)=\"onItemDragStarted($event)\"\n (cdkDragEnded)=\"onItemDragEnded($event)\"\n (cdkDragMoved)=\"emitItemDragMoved($event)\"\n class=\"gantt-table-item\"\n [class.gantt-table-item-with-group]=\"hasGroup\"\n [class.gantt-table-item-first-level-group]=\"item.level === 0 && (item.type | isGanttRangeItem)\"\n [style.height.px]=\"gantt.styles.lineHeight\"\n [style.lineHeight.px]=\"gantt.styles.lineHeight\"\n [class.gantt-table-item-active]=\"ganttUpper.isSelected(item.id)\"\n >\n <ng-template\n [ngTemplateOutlet]=\"rowBeforeTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item.origin, item: item.origin }\"\n ></ng-template>\n\n <div [classList]=\"column.classList\" *ngFor=\"let column of columns; let first = first\" [style.width]=\"column.columnWidth\">\n <!-- drag icon -->\n <gantt-icon\n *ngIf=\"first && draggable\"\n class=\"gantt-drag-handle\"\n iconName=\"drag\"\n cdkDragHandle\n [cdkDragHandleDisabled]=\"(draggable && item.itemDraggable === false) || !draggable\"\n ></gantt-icon>\n <!-- expand icon -->\n <div\n *ngIf=\"column?.showExpandIcon || (!hasExpandIcon && first)\"\n class=\"gantt-expand-icon\"\n [style.marginLeft.px]=\"item.level * 20\"\n >\n <ng-container *ngIf=\"item.level < gantt.maxLevel - 1 && ((gantt.async && item.expandable) || item.children?.length > 0)\">\n <gantt-icon\n *ngIf=\"!item.loading\"\n class=\"expand-icon\"\n [iconName]=\"item.expanded ? 'angle-down' : 'angle-right'\"\n (click)=\"expandChildren($event, item)\"\n >\n </gantt-icon>\n <gantt-icon *ngIf=\"item.loading\" [iconName]=\"'loading'\"></gantt-icon>\n </ng-container>\n </div>\n <!-- column content -->\n <div class=\"gantt-table-column-content\">\n <ng-template\n [ngTemplateOutlet]=\"column.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: item.origin, item: item.origin }\"\n ></ng-template>\n </div>\n </div>\n <ng-template\n [ngTemplateOutlet]=\"rowAfterTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item.origin, item: item.origin }\"\n ></ng-template>\n </div>\n </ng-container>\n </ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.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: i2.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: i2.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i3.GanttIconComponent, selector: "gantt-icon", inputs: ["iconName"] }, { kind: "pipe", type: i4.IsGanttRangeItemPipe, name: "isGanttRangeItem" }] });
250
261
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: GanttTableBodyComponent, decorators: [{
251
262
  type: Component,
252
- args: [{ selector: 'gantt-table-body', template: "<div\n class=\"gantt-table-body-container\"\n cdkDropList\n [cdkDropListAutoScrollStep]=\"6\"\n [cdkDropListData]=\"renderData\"\n [cdkDropListSortingDisabled]=\"true\"\n (cdkDropListDropped)=\"onListDropped($event)\"\n>\n <ng-container *ngIf=\"!renderData?.length\">\n <ng-container *ngIf=\"!emptyTemplate\">\n <gantt-icon class=\"empty-icon\" iconName=\"empty\"></gantt-icon>\n <div class=\"empty-text\">\u6CA1\u6709\u6570\u636E</div>\n </ng-container>\n <ng-template [ngTemplateOutlet]=\"emptyTemplate\"></ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"renderData && renderData.length > 0\">\n <ng-container *ngFor=\"let item of renderData; trackBy: trackBy\">\n <div class=\"gantt-table-group\" [ngClass]=\"item.class\" *ngIf=\"item.items\">\n <div class=\"gantt-table-group-title\" [class.expanded]=\"item.expanded\" (click)=\"expandGroup(item)\">\n <gantt-icon class=\"expand-icon\" [iconName]=\"item.expanded ? 'angle-down' : 'angle-right'\"></gantt-icon>\n <ng-container *ngIf=\"groupTemplate; else default\">\n <ng-template\n [ngTemplateOutlet]=\"groupTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item.origin, group: item.origin }\"\n ></ng-template>\n </ng-container>\n <ng-template #default>\n <span class=\"group-title\">{{ item.title }}</span>\n </ng-template>\n </div>\n </div>\n\n <div\n *ngIf=\"!item.items\"\n (click)=\"itemClick.emit({ event: $event, selectedValue: item.origin })\"\n cdkDrag\n [cdkDragData]=\"item\"\n [cdkDragDisabled]=\"(draggable && item.itemDraggable === false) || !draggable\"\n (cdkDragStarted)=\"onItemDragStarted($event)\"\n (cdkDragEnded)=\"onItemDragEnded($event)\"\n (cdkDragMoved)=\"emitItemDragMoved($event)\"\n class=\"gantt-table-item\"\n [class.gantt-table-item-with-group]=\"hasGroup\"\n [class.gantt-table-item-first-level-group]=\"item.level === 0 && (item.type | isGanttRangeItem)\"\n [style.height.px]=\"gantt.styles.lineHeight\"\n [style.lineHeight.px]=\"gantt.styles.lineHeight\"\n [class.gantt-table-item-active]=\"ganttUpper.isSelected(item.id)\"\n >\n <ng-template\n [ngTemplateOutlet]=\"rowBeforeTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item.origin, item: item.origin }\"\n ></ng-template>\n\n <div class=\"gantt-table-column\" *ngFor=\"let column of columns; let first = first\" [style.width]=\"column.columnWidth\">\n <!-- drag icon -->\n <gantt-icon\n *ngIf=\"first && draggable\"\n class=\"gantt-drag-handle\"\n iconName=\"drag\"\n cdkDragHandle\n [cdkDragHandleDisabled]=\"(draggable && item.itemDraggable === false) || !draggable\"\n ></gantt-icon>\n <!-- expand icon -->\n <div\n *ngIf=\"column?.showExpandIcon || (!hasExpandIcon && first)\"\n class=\"gantt-expand-icon\"\n [style.marginLeft.px]=\"item.level * 20\"\n >\n <ng-container *ngIf=\"item.level < gantt.maxLevel - 1 && item.expandable\">\n <gantt-icon\n *ngIf=\"!item.loading\"\n class=\"expand-icon\"\n [iconName]=\"item.expanded ? 'angle-down' : 'angle-right'\"\n (click)=\"expandChildren($event, item)\"\n >\n </gantt-icon>\n <gantt-icon *ngIf=\"item.loading\" [iconName]=\"'loading'\"></gantt-icon>\n </ng-container>\n </div>\n <!-- column content -->\n <div class=\"gantt-table-column-content\">\n <ng-template\n [ngTemplateOutlet]=\"column.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: item.origin, item: item.origin }\"\n ></ng-template>\n </div>\n </div>\n <ng-template\n [ngTemplateOutlet]=\"rowAfterTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item.origin, item: item.origin }\"\n ></ng-template>\n </div>\n </ng-container>\n </ng-container>\n</div>\n" }]
263
+ args: [{ selector: 'gantt-table-body', template: "<div\n class=\"gantt-table-body-container\"\n cdkDropList\n [cdkDropListAutoScrollStep]=\"6\"\n [cdkDropListData]=\"renderData\"\n [cdkDropListSortingDisabled]=\"true\"\n (cdkDropListDropped)=\"onListDropped($event)\"\n>\n <ng-container *ngIf=\"!renderData?.length\">\n <ng-container *ngIf=\"!emptyTemplate\">\n <gantt-icon class=\"empty-icon\" iconName=\"empty\"></gantt-icon>\n <div class=\"empty-text\">\u6CA1\u6709\u6570\u636E</div>\n </ng-container>\n <ng-template [ngTemplateOutlet]=\"emptyTemplate\"></ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"renderData && renderData.length > 0\">\n <ng-container *ngFor=\"let item of renderData; trackBy: trackBy\">\n <div class=\"gantt-table-group\" [ngClass]=\"item.class\" *ngIf=\"item.items\">\n <div class=\"gantt-table-group-title\" [class.expanded]=\"item.expanded\" (click)=\"expandGroup(item)\">\n <gantt-icon class=\"expand-icon\" [iconName]=\"item.expanded ? 'angle-down' : 'angle-right'\"></gantt-icon>\n <ng-container *ngIf=\"groupTemplate; else default\">\n <ng-template\n [ngTemplateOutlet]=\"groupTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item.origin, group: item.origin }\"\n ></ng-template>\n </ng-container>\n <ng-template #default>\n <span class=\"group-title\">{{ item.title }}</span>\n </ng-template>\n </div>\n </div>\n\n <div\n *ngIf=\"!item.items\"\n (click)=\"itemClick.emit({ event: $event, selectedValue: item.origin })\"\n cdkDrag\n [cdkDragData]=\"item\"\n [cdkDragDisabled]=\"(draggable && item.itemDraggable === false) || !draggable\"\n (cdkDragStarted)=\"onItemDragStarted($event)\"\n (cdkDragEnded)=\"onItemDragEnded($event)\"\n (cdkDragMoved)=\"emitItemDragMoved($event)\"\n class=\"gantt-table-item\"\n [class.gantt-table-item-with-group]=\"hasGroup\"\n [class.gantt-table-item-first-level-group]=\"item.level === 0 && (item.type | isGanttRangeItem)\"\n [style.height.px]=\"gantt.styles.lineHeight\"\n [style.lineHeight.px]=\"gantt.styles.lineHeight\"\n [class.gantt-table-item-active]=\"ganttUpper.isSelected(item.id)\"\n >\n <ng-template\n [ngTemplateOutlet]=\"rowBeforeTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item.origin, item: item.origin }\"\n ></ng-template>\n\n <div [classList]=\"column.classList\" *ngFor=\"let column of columns; let first = first\" [style.width]=\"column.columnWidth\">\n <!-- drag icon -->\n <gantt-icon\n *ngIf=\"first && draggable\"\n class=\"gantt-drag-handle\"\n iconName=\"drag\"\n cdkDragHandle\n [cdkDragHandleDisabled]=\"(draggable && item.itemDraggable === false) || !draggable\"\n ></gantt-icon>\n <!-- expand icon -->\n <div\n *ngIf=\"column?.showExpandIcon || (!hasExpandIcon && first)\"\n class=\"gantt-expand-icon\"\n [style.marginLeft.px]=\"item.level * 20\"\n >\n <ng-container *ngIf=\"item.level < gantt.maxLevel - 1 && ((gantt.async && item.expandable) || item.children?.length > 0)\">\n <gantt-icon\n *ngIf=\"!item.loading\"\n class=\"expand-icon\"\n [iconName]=\"item.expanded ? 'angle-down' : 'angle-right'\"\n (click)=\"expandChildren($event, item)\"\n >\n </gantt-icon>\n <gantt-icon *ngIf=\"item.loading\" [iconName]=\"'loading'\"></gantt-icon>\n </ng-container>\n </div>\n <!-- column content -->\n <div class=\"gantt-table-column-content\">\n <ng-template\n [ngTemplateOutlet]=\"column.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: item.origin, item: item.origin }\"\n ></ng-template>\n </div>\n </div>\n <ng-template\n [ngTemplateOutlet]=\"rowAfterTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item.origin, item: item.origin }\"\n ></ng-template>\n </div>\n </ng-container>\n </ng-container>\n</div>\n" }]
253
264
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
254
265
  type: Inject,
255
266
  args: [GANTT_ABSTRACT_TOKEN]
@@ -297,4 +308,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImpor
297
308
  type: ViewChildren,
298
309
  args: [(CdkDrag)]
299
310
  }] } });
300
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQtdGFibGUtYm9keS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nYW50dC9zcmMvY29tcG9uZW50cy90YWJsZS9ib2R5L2dhbnR0LXRhYmxlLWJvZHkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2FudHQvc3JjL2NvbXBvbmVudHMvdGFibGUvYm9keS9nYW50dC10YWJsZS1ib2R5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNFLE9BQU8sRUFDSCxTQUFTLEVBQ1QsV0FBVyxFQUdYLEtBQUssRUFFTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFlBQVksRUFHWixZQUFZLEVBRWYsTUFBTSxlQUFlLENBQUM7QUFVdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUQsT0FBTyxFQUEwQixvQkFBb0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzVFLE9BQU8sRUFBYyxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxPQUFPLEVBQXNELE1BQU0sd0JBQXdCLENBQUM7QUFDckcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7O0FBSzNDLE1BQU0sT0FBTyx1QkFBdUI7SUFFaEMsSUFBYSxVQUFVLENBQUMsSUFBZ0Q7UUFDcEUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFCLElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDaEQs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QTNELFdBQVc7dUJBQUMseUJBQXlCO2dCQUVLLGtCQUFrQjtzQkFBNUQsV0FBVzt1QkFBQyw0QkFBNEI7Z0JBRVYsUUFBUTtzQkFBdEMsWUFBWTt1QkFBQyxDQUFBLE9BQWUsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBzdGFydFdpdGgsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgUXVlcnlMaXN0LFxuICAgIElucHV0LFxuICAgIE9uSW5pdCxcbiAgICBJbmplY3QsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBPbkRlc3Ryb3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIEFmdGVyVmlld0luaXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIEdhbnR0SXRlbUludGVybmFsLFxuICAgIEdhbnR0R3JvdXBJbnRlcm5hbCxcbiAgICBHYW50dFNlbGVjdGVkRXZlbnQsXG4gICAgR2FudHRUYWJsZURyb3BQb3NpdGlvbixcbiAgICBHYW50dFRhYmxlRHJhZ0VudGVyUHJlZGljYXRlQ29udGV4dCxcbiAgICBHYW50dFRhYmxlRHJhZ0Ryb3BwZWRFdmVudFxufSBmcm9tICcuLi8uLi8uLi9jbGFzcyc7XG5pbXBvcnQgeyBOZ3hHYW50dFRhYmxlQ29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdGFibGUvZ2FudHQtY29sdW1uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBjb2VyY2VDc3NQaXhlbFZhbHVlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IEdhbnR0QWJzdHJhY3RDb21wb25lbnQsIEdBTlRUX0FCU1RSQUNUX1RPS0VOIH0gZnJvbSAnLi4vLi4vLi4vZ2FudHQtYWJzdHJhY3QnO1xuaW1wb3J0IHsgZGVmYXVsdENvbHVtbldpZHRoIH0gZnJvbSAnLi4vaGVhZGVyL2dhbnR0LXRhYmxlLWhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgR2FudHRVcHBlciwgR0FOVFRfVVBQRVJfVE9LRU4gfSBmcm9tICcuLi8uLi8uLi9nYW50dC11cHBlcic7XG5pbXBvcnQgeyBDZGtEcmFnLCBDZGtEcmFnRHJvcCwgQ2RrRHJhZ0VuZCwgQ2RrRHJhZ01vdmUsIENka0RyYWdTdGFydCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdnYW50dC10YWJsZS1ib2R5JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZ2FudHQtdGFibGUtYm9keS5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgR2FudHRUYWJsZUJvZHlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgcHJpdmF0ZSBfcmVuZGVyRGF0YTogKEdhbnR0R3JvdXBJbnRlcm5hbCB8IEdhbnR0SXRlbUludGVybmFsKVtdO1xuICAgIEBJbnB1dCgpIHNldCByZW5kZXJEYXRhKGRhdGE6IChHYW50dEdyb3VwSW50ZXJuYWwgfCBHYW50dEl0ZW1JbnRlcm5hbClbXSkge1xuICAgICAgICBjb25zdCBmaXJzdERhdGEgPSBkYXRhWzBdO1xuICAgICAgICBpZiAoZmlyc3REYXRhICYmIGZpcnN0RGF0YS5oYXNPd25Qcm9wZXJ0eSgnaXRlbXMnKSkge1xuICAgICAgICAgICAgdGhpcy5oYXNHcm91cCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nYW50dFRhYmxlRW1wdHlDbGFzcyA9IGRhdGE/Lmxlbmd0aCA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgICAgdGhpcy5fcmVuZGVyRGF0YSA9IGRhdGE7XG4gICAgfVxuXG4gICAgZ2V0IHJlbmRlckRhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJEYXRhO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIGZsYXREYXRhOiAoR2FudHRHcm91cEludGVybmFsIHwgR2FudHRJdGVtSW50ZXJuYWwpW107XG5cbiAgICBASW5wdXQoKSBjb2x1bW5zOiBRdWVyeUxpc3Q8Tmd4R2FudHRUYWJsZUNvbHVtbkNvbXBvbmVudD47XG5cbiAgICBASW5wdXQoKSBncm91cFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQElucHV0KCkgZW1wdHlUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBJbnB1dCgpIHJvd0JlZm9yZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQElucHV0KCkgcm93QWZ0ZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZ2FudHQtdGFibGUtZHJhZ2dhYmxlJylcbiAgICBASW5wdXQoKVxuICAgIGRyYWdnYWJsZSA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgZHJvcEVudGVyUHJlZGljYXRlPzogKGNvbnRleHQ6IEdhbnR0VGFibGVEcmFnRW50ZXJQcmVkaWNhdGVDb250ZXh0KSA9PiBib29sZWFuO1xuXG4gICAgQE91dHB1dCgpIGRyYWdEcm9wcGVkID0gbmV3IEV2ZW50RW1pdHRlcjxHYW50dFRhYmxlRHJhZ0Ryb3BwZWRFdmVudD4oKTtcblxuICAgIEBPdXRwdXQoKSBpdGVtQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEdhbnR0U2VsZWN0ZWRFdmVudD4oKTtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZ2FudHQtdGFibGUtYm9keScpIGdhbnR0VGFibGVDbGFzcyA9IHRydWU7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmdhbnR0LXRhYmxlLWVtcHR5JykgZ2FudHRUYWJsZUVtcHR5Q2xhc3MgPSBmYWxzZTtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZ2FudHQtdGFibGUtZHJhZ2dpbmcnKSBnYW50dFRhYmxlRHJhZ2dpbmcgPSBmYWxzZTtcblxuICAgIEBWaWV3Q2hpbGRyZW4oQ2RrRHJhZzxzdHJpbmc+KSBjZGtEcmFnczogUXVlcnlMaXN0PENka0RyYWc8R2FudHRJdGVtSW50ZXJuYWw+PjtcblxuICAgIHB1YmxpYyBoYXNHcm91cDogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBoYXNFeHBhbmRJY29uID0gZmFsc2U7XG5cbiAgICAvLyDnvJPlrZggRWxlbWVudCDlkowgRHJhZ1JlZiDnmoTlhbPns7vvvIzmlrnkvr/lnKggSXRlbSDmi5bliqjml7bmn6Xmib5cbiAgICBwcml2YXRlIGl0ZW1EcmFnUmVmTWFwID0gbmV3IE1hcDxIVE1MRWxlbWVudCwgQ2RrRHJhZzxHYW50dEl0ZW1JbnRlcm5hbD4+KCk7XG5cbiAgICBwcml2YXRlIGl0ZW1EcmFnTW92ZWQgPSBuZXcgU3ViamVjdDxDZGtEcmFnTW92ZT4oKTtcblxuICAgIC8vIEl0ZW0g5ouW5Yqo57uP6L+H55uu5qCH5pe25Li05pe26K6w5b2V55uu5qCHaWTku6Xlj4rnm7jlr7nlupTnm67moIfnmoTkvY3nva5cbiAgICBwcml2YXRlIGl0ZW1Ecm9wVGFyZ2V0OiB7XG4gICAgICAgIHBvc2l0aW9uPzogR2FudHRUYWJsZURyb3BQb3NpdGlvbjtcbiAgICAgICAgaWQ/OiBzdHJpbmc7XG4gICAgfTtcblxuICAgIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoR0FOVFRfQUJTVFJBQ1RfVE9LRU4pIHB1YmxpYyBnYW50dDogR2FudHRBYnN0cmFjdENvbXBvbmVudCxcbiAgICAgICAgQEluamVjdChHQU5UVF9VUFBFUl9UT0tFTikgcHVibGljIGdhbnR0VXBwZXI6IEdhbnR0VXBwZXIsXG4gICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnRcbiAgICApIHt9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zLmNoYW5nZXMucGlwZShzdGFydFdpdGgodGhpcy5jb2x1bW5zKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYXNFeHBhbmRJY29uID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gY29sdW1uLmNsYXNzTGlzdC5hZGQoJ2dhbnR0LXRhYmxlLWNvbHVtbicpO1xuICAgICAgICAgICAgICAgIGlmICghY29sdW1uLmNvbHVtbldpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5jb2x1bW5XaWR0aCA9IGNvZXJjZUNzc1BpeGVsVmFsdWUoZGVmYXVsdENvbHVtbldpZHRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbi5zaG93RXhwYW5kSWNvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc0V4cGFuZEljb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2RrRHJhZ3MuY2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoc3RhcnRXaXRoKHRoaXMuY2RrRHJhZ3MpLCB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkcmFnczogUXVlcnlMaXN0PENka0RyYWc8R2FudHRJdGVtSW50ZXJuYWw+PikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXRlbURyYWdSZWZNYXAuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICBkcmFncy5mb3JFYWNoKChkcmFnKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkcmFnLmRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNka0RyYWcg5Y+Y5YyW5pe277yM57yT5a2YIEVsZW1lbnQg5LiOIERyYWdSZWYg55qE5YWz57O777yM5pa55L6/IERyYWcgTW92ZSDml7bmn6Xmib5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbURyYWdSZWZNYXAuc2V0KGRyYWcuZWxlbWVudC5uYXRpdmVFbGVtZW50LCBkcmFnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5pdGVtRHJhZ01vdmVkXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoMzApLFxuICAgICAgICAgICAgICAgIC8vICBkZWJvdW5jZSDlj6/og73kvJrlr7zoh7Tmi5bliqjnu5PmnZ/lkI7ku43nhLbmiafooYwgbW92ZWQg77yM5omA5Lul6YCa6L+H5Yik5patIGRyYWdnaW5nIOeKtuaAgeadpei/h+a7pOaXoOaViCBtb3ZlZFxuICAgICAgICAgICAgICAgIGZpbHRlcigoZXZlbnQ6IENka0RyYWdNb3ZlKSA9PiBldmVudC5zb3VyY2UuX2RyYWdSZWYuaXNEcmFnZ2luZygpKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkl0ZW1EcmFnTW92ZWQoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZXhwYW5kR3JvdXAoZ3JvdXA6IEdhbnR0R3JvdXBJbnRlcm5hbCkge1xuICAgICAgICB0aGlzLmdhbnR0LmV4cGFuZEdyb3VwKGdyb3VwKTtcbiAgICB9XG5cbiAgICBleHBhbmRDaGlsZHJlbihldmVudDogTW91c2VFdmVudCwgaXRlbTogR2FudHRJdGVtSW50ZXJuYWwpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMuZ2FudHQuZXhwYW5kQ2hpbGRyZW4oaXRlbSk7XG4gICAgfVxuXG4gICAgb25JdGVtRHJhZ1N0YXJ0ZWQoZXZlbnQ6IENka0RyYWdTdGFydDxHYW50dEl0ZW1JbnRlcm5hbD4pIHtcbiAgICAgICAgdGhpcy5nYW50dFRhYmxlRHJhZ2dpbmcgPSB0cnVlO1xuICAgICAgICAvLyDmi5bliqjlvIDlp4vml7bpmpDol4/miYDmnInnmoTlrZDpoblcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmdldENoaWxkcmVuRWxlbWVudHNCeUVsZW1lbnQoZXZlbnQuc291cmNlLmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIGNoaWxkcmVuLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZHJhZy1pdGVtLWhpZGUnKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZW1pdEl0ZW1EcmFnTW92ZWQoZXZlbnQ6IENka0RyYWdNb3ZlKSB7XG4gICAgICAgIHRoaXMuaXRlbURyYWdNb3ZlZC5uZXh0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBvbkl0ZW1EcmFnTW92ZWQoZXZlbnQ6IENka0RyYWdNb3ZlPEdhbnR0SXRlbUludGVybmFsPikge1xuICAgICAgICAvLyDpgJrov4fpvKDmoIfkvY3nva7mn6Xmib7lr7nlupTnmoTnm67moIcgSXRlbSDlhYPntKBcbiAgICAgICAgbGV0IGN1cnJlbnRQb2ludEVsZW1lbnQgPSB0aGlzLmRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoZXZlbnQucG9pbnRlclBvc2l0aW9uLngsIGV2ZW50LnBvaW50ZXJQb3NpdGlvbi55KSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgaWYgKCFjdXJyZW50UG9pbnRFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFudXBEcmFnQXJ0aWZhY3RzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRhcmdldEVsZW1lbnQgPSBjdXJyZW50UG9pbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnZ2FudHQtdGFibGUtaXRlbScpXG4gICAgICAgICAgICA/IGN1cnJlbnRQb2ludEVsZW1lbnRcbiAgICAgICAgICAgIDogKGN1cnJlbnRQb2ludEVsZW1lbnQuY2xvc2VzdCgnLmdhbnR0LXRhYmxlLWl0ZW0nKSBhcyBIVE1MRWxlbWVudCk7XG4gICAgICAgIGlmICghdGFyZ2V0RWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5jbGVhbnVwRHJhZ0FydGlmYWN0cygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g57yT5a2Y5pS+572u55uu5qCHSWQg5bm26K6h566X6byg5qCH55u45a+55bqU55qE5L2N572uXG4gICAgICAgIHRoaXMuaXRlbURyb3BUYXJnZXQgPSB7XG4gICAgICAgICAgICBpZDogdGhpcy5pdGVtRHJhZ1JlZk1hcC5nZXQodGFyZ2V0RWxlbWVudCk/LmRhdGEuaWQsXG4gICAgICAgICAgICBwb3NpdGlvbjogdGhpcy5nZXRUYXJnZXRQb3NpdGlvbih0YXJnZXRFbGVtZW50LCBldmVudClcbiAgICAgICAgfTtcblxuICAgICAgICAvLyDmiafooYzlpJbpg6jkvKDlhaXnmoQgZHJvcEVudGVyUHJlZGljYXRlIOWIpOaWreaYr+WQpuWFgeiuuOaLluWFpeebruagh+mhuVxuICAgICAgICBpZiAodGhpcy5kcm9wRW50ZXJQcmVkaWNhdGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldERyYWdSZWYgPSB0aGlzLml0ZW1EcmFnUmVmTWFwLmdldCh0YXJnZXRFbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLmRyb3BFbnRlclByZWRpY2F0ZSh7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogZXZlbnQuc291cmNlLmRhdGEub3JpZ2luLFxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IHRhcmdldERyYWdSZWYuZGF0YS5vcmlnaW4sXG4gICAgICAgICAgICAgICAgICAgIGRyb3BQb3NpdGlvbjogdGhpcy5pdGVtRHJvcFRhcmdldC5wb3NpdGlvblxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dEcm9wUG9zaXRpb25QbGFjZWhvbGRlcih0YXJnZXRFbGVtZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtRHJvcFRhcmdldCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNob3dEcm9wUG9zaXRpb25QbGFjZWhvbGRlcih0YXJnZXRFbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uSXRlbURyYWdFbmRlZChldmVudDogQ2RrRHJhZ0VuZDxHYW50dEl0ZW1JbnRlcm5hbD4pIHtcbiAgICAgICAgdGhpcy5nYW50dFRhYmxlRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBvbkxpc3REcm9wcGVkKGV2ZW50OiBDZGtEcmFnRHJvcDxHYW50dEl0ZW1JbnRlcm5hbFtdLCBHYW50dEl0ZW1JbnRlcm5hbFtdLCBHYW50dEl0ZW1JbnRlcm5hbD4pIHtcbiAgICAgICAgaWYgKCF0aGlzLml0ZW1Ecm9wVGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFyZ2V0RHJhZ1JlZiA9IHRoaXMuY2RrRHJhZ3MuZmluZCgoaXRlbSkgPT4gaXRlbS5kYXRhPy5pZCA9PT0gdGhpcy5pdGVtRHJvcFRhcmdldC5pZCk7XG4gICAgICAgIGNvbnN0IHNvdXJjZUl0ZW0gPSBldmVudC5pdGVtLmRhdGE7XG4gICAgICAgIGNvbnN0IHRhcmdldEl0ZW0gPSB0YXJnZXREcmFnUmVmPy5kYXRhO1xuXG4gICAgICAgIHRoaXMucmVtb3ZlSXRlbShzb3VyY2VJdGVtKTtcblxuICAgICAgICBzd2l0Y2ggKHRoaXMuaXRlbURyb3BUYXJnZXQucG9zaXRpb24pIHtcbiAgICAgICAgICAgIGNhc2UgJ2JlZm9yZSc6XG4gICAgICAgICAgICBjYXNlICdhZnRlcic6XG4gICAgICAgICAgICAgICAgdGhpcy5pbnNlcnRJdGVtKHRhcmdldEl0ZW0sIHNvdXJjZUl0ZW0sIHRoaXMuaXRlbURyb3BUYXJnZXQucG9zaXRpb24pO1xuICAgICAgICAgICAgICAgIHNvdXJjZUl0ZW0udXBkYXRlTGV2ZWwodGFyZ2V0SXRlbS5sZXZlbCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdpbnNpZGUnOlxuICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0Q2hpbGRyZW5JdGVtKHRhcmdldEl0ZW0sIHNvdXJjZUl0ZW0pO1xuICAgICAgICAgICAgICAgIHNvdXJjZUl0ZW0udXBkYXRlTGV2ZWwodGFyZ2V0SXRlbS5sZXZlbCArIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kcmFnRHJvcHBlZC5lbWl0KHtcbiAgICAgICAgICAgIHNvdXJjZTogc291cmNlSXRlbS5vcmlnaW4sXG4gICAgICAgICAgICBzb3VyY2VQYXJlbnQ6IHRoaXMuZ2V0UGFyZW50QnlJdGVtKHNvdXJjZUl0ZW0pPy5vcmlnaW4sXG4gICAgICAgICAgICB0YXJnZXQ6IHRhcmdldEl0ZW0ub3JpZ2luLFxuICAgICAgICAgICAgdGFyZ2V0UGFyZW50OiB0aGlzLmdldFBhcmVudEJ5SXRlbSh0YXJnZXRJdGVtKT8ub3JpZ2luLFxuICAgICAgICAgICAgZHJvcFBvc2l0aW9uOiB0aGlzLml0ZW1Ecm9wVGFyZ2V0LnBvc2l0aW9uXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuY2xlYW51cERyYWdBcnRpZmFjdHModHJ1ZSk7XG4gICAgfVxuXG4gICAgdHJhY2tCeShpbmRleDogbnVtYmVyLCBpdGVtOiBHYW50dEdyb3VwSW50ZXJuYWwgfCBHYW50dEl0ZW1JbnRlcm5hbCkge1xuICAgICAgICByZXR1cm4gaXRlbS5pZCB8fCBpbmRleDtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZUl0ZW0oaXRlbTogR2FudHRJdGVtSW50ZXJuYWwpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJEYXRhLnNwbGljZSh0aGlzLnJlbmRlckRhdGEuaW5kZXhPZihpdGVtKSwgMSk7XG4gICAgICAgIHRoaXMuZmxhdERhdGEuc3BsaWNlKHRoaXMuZmxhdERhdGEuaW5kZXhPZihpdGVtKSwgMSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbnNlcnRJdGVtKHRhcmdldDogR2FudHRJdGVtSW50ZXJuYWwsIGluc2VydGVkOiBHYW50dEl0ZW1JbnRlcm5hbCwgcG9zaXRpb246ICdiZWZvcmUnIHwgJ2FmdGVyJykge1xuICAgICAgICBpZiAocG9zaXRpb24gPT09ICdiZWZvcmUnKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckRhdGEuc3BsaWNlKHRoaXMucmVuZGVyRGF0YS5pbmRleE9mKHRhcmdldCksIDAsIGluc2VydGVkKTtcbiAgICAgICAgICAgIHRoaXMuZmxhdERhdGEuc3BsaWNlKHRoaXMuZmxhdERhdGEuaW5kZXhPZih0YXJnZXQpLCAwLCBpbnNlcnRlZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBkcmFnUmVmID0gdGhpcy5jZGtEcmFncy5maW5kKChkcmFnKSA9PiBkcmFnLmRhdGEgPT09IHRhcmdldCk7XG4gICAgICAgICAgICAvLyDlpoLmnpznm67moIfpobnmmK/lsZXlvIDnmoTvvIzmj5LlhaXnmoQgaW5kZXgg5L2N572u6ZyA6KaB6ICD6JmR5a2Q6aG555qE5pWw6YePXG4gICAgICAgICAgICBsZXQgY2hpbGRyZW5Db3VudCA9IDA7XG4gICAgICAgICAgICBpZiAodGFyZ2V0LmV4cGFuZGVkKSB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW5Db3VudCA9IHRoaXMuZ2V0Q2hpbGRyZW5FbGVtZW50c0J5RWxlbWVudChkcmFnUmVmLmVsZW1lbnQubmF0aXZlRWxlbWVudCk/Lmxlbmd0aCB8fCAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZW5kZXJEYXRhLnNwbGljZSh0aGlzLnJlbmRlckRhdGEuaW5kZXhPZih0YXJnZXQpICsgMSArIGNoaWxkcmVuQ291bnQsIDAsIGluc2VydGVkKTtcbiAgICAgICAgICAgIHRoaXMuZmxhdERhdGEuc3BsaWNlKHRoaXMuZmxhdERhdGEuaW5kZXhPZih0YXJnZXQpICsgMSArIGNoaWxkcmVuQ291bnQsIDAsIGluc2VydGVkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5zZXJ0Q2hpbGRyZW5JdGVtKHRhcmdldDogR2FudHRJdGVtSW50ZXJuYWwsIGluc2VydGVkOiBHYW50dEl0ZW1JbnRlcm5hbCkge1xuICAgICAgICBpZiAodGFyZ2V0LmV4cGFuZGVkKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckRhdGEuc3BsaWNlKHRoaXMucmVuZGVyRGF0YS5pbmRleE9mKHRhcmdldCkgKyB0YXJnZXQuY2hpbGRyZW4ubGVuZ3RoICsgMSwgMCwgaW5zZXJ0ZWQpO1xuICAgICAgICAgICAgdGhpcy5mbGF0RGF0YS5zcGxpY2UodGhpcy5mbGF0RGF0YS5pbmRleE9mKHRhcmdldCkgKyB0YXJnZXQuY2hpbGRyZW4ubGVuZ3RoICsgMSwgMCwgaW5zZXJ0ZWQpO1xuICAgICAgICB9XG4gICAgICAgIHRhcmdldC5jaGlsZHJlbi5wdXNoKGluc2VydGVkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFBhcmVudEJ5SXRlbShpdGVtOiBHYW50dEl0ZW1JbnRlcm5hbCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuZmxhdERhdGEgfHwgW10pLmZpbmQoKG46IEdhbnR0SXRlbUludGVybmFsKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbi5jaGlsZHJlbj8uaW5jbHVkZXMoaXRlbSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q2hpbGRyZW5FbGVtZW50c0J5RWxlbWVudChkcmFnRWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgLy8g6YCa6L+H5b6q546v5oyB57ut5p+l5om+IG5leHQgZWxlbWVudO+8jOWmguaenCBlbGVtZW50IOeahCBsZXZlbCDlsI/kuo7lvZPliY0gaXRlbSDnmoQgbGV2ZWzvvIzliJnkuLrlroPnmoQgY2hpbGRyZW5cbiAgICAgICAgY29uc3QgY2hpbGRyZW46IEhUTUxFbGVtZW50W10gPSBbXTtcbiAgICAgICAgY29uc3QgZHJhZ1JlZiA9IHRoaXMuaXRlbURyYWdSZWZNYXAuZ2V0KGRyYWdFbGVtZW50KTtcblxuICAgICAgICAvLyDlpoLmnpzlvZPliY3nmoQgRHJhZyDmraPlnKjmi5bmi73vvIzkvJrliJvlu7ogUGxhY2Vob2xkZXJFbGVtZW50IOWNoOS9je+8jOaJgOS7peS7pSBQbGFjZWhvbGRlckVsZW1lbnQg5ZCR5LiL5p+l5om+XG4gICAgICAgIGxldCBuZXh0RWxlbWVudCA9IChkcmFnUmVmLmdldFBsYWNlaG9sZGVyRWxlbWVudCgpIHx8IGRyYWdFbGVtZW50KS5uZXh0RWxlbWVudFNpYmxpbmcgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGxldCBuZXh0RHJhZ1JlZiA9IHRoaXMuaXRlbURyYWdSZWZNYXAuZ2V0KG5leHRFbGVtZW50KTtcblxuICAgICAgICB3aGlsZSAobmV4dERyYWdSZWYgJiYgbmV4dERyYWdSZWYuZGF0YS5sZXZlbCA+IGRyYWdSZWYuZGF0YS5sZXZlbCkge1xuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChuZXh0RWxlbWVudCk7XG4gICAgICAgICAgICBuZXh0RWxlbWVudCA9IG5leHRFbGVtZW50Lm5leHRFbGVtZW50U2libGluZyBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgIG5leHREcmFnUmVmID0gdGhpcy5pdGVtRHJhZ1JlZk1hcC5nZXQobmV4dEVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VGFyZ2V0UG9zaXRpb24odGFyZ2V0OiBIVE1MRWxlbWVudCwgZXZlbnQ6IENka0RyYWdNb3ZlKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldFJlY3QgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IGJlZm9yZU9yQWZ0ZXJHYXAgPSB0YXJnZXRSZWN0LmhlaWdodCAqIDAuMztcbiAgICAgICAgLy8g5bCGIEl0ZW0g6auY5bqm5YiG5Li65LiK5Lit5LiL5LiJ5q6177yM5YW25Lit5LiK5LiL55qEIEdhcCDkuLogaGVpZ2h0IOeahCAzMCXvvIzpgJrov4fliKTmlq3pvKDmoIfkvY3nva7lnKjlk6rkuIDmrrUgZ2FwIOadpeiuoeeul+WvueW6lOeahOS9jee9rlxuICAgICAgICBpZiAoZXZlbnQucG9pbnRlclBvc2l0aW9uLnkgLSB0YXJnZXRSZWN0LnRvcCA8IGJlZm9yZU9yQWZ0ZXJHYXApIHtcbiAgICAgICAgICAgIHJldHVybiAnYmVmb3JlJztcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC5wb2ludGVyUG9zaXRpb24ueSA+PSB0YXJnZXRSZWN0LmJvdHRvbSAtIGJlZm9yZU9yQWZ0ZXJHYXApIHtcbiAgICAgICAgICAgIHJldHVybiAnYWZ0ZXInO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICdpbnNpZGUnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG93RHJvcFBvc2l0aW9uUGxhY2Vob2xkZXIodGFyZ2V0RWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5jbGVhbnVwRHJhZ0FydGlmYWN0cygpO1xuICAgICAgICBpZiAodGhpcy5pdGVtRHJvcFRhcmdldCAmJiB0YXJnZXRFbGVtZW50KSB7XG4gICAgICAgICAgICB0YXJnZXRFbGVtZW50LmNsYXNzTGlzdC5hZGQoYGRyb3AtcG9zaXRpb24tJHt0aGlzLml0ZW1Ecm9wVGFyZ2V0LnBvc2l0aW9ufWApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhbnVwRHJhZ0FydGlmYWN0cyhkcm9wcGVkID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGRyb3BwZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbURyb3BUYXJnZXQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmRyb3AtcG9zaXRpb24tYmVmb3JlJykuZm9yRWFjaCgoZWxlbWVudCkgPT4gZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdkcm9wLXBvc2l0aW9uLWJlZm9yZScpKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZHJvcC1wb3NpdGlvbi1hZnRlcicpLmZvckVhY2goKGVsZW1lbnQpID0+IGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnZHJvcC1wb3NpdGlvbi1hZnRlcicpKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZHJvcC1wb3NpdGlvbi1pbnNpZGUnKS5mb3JFYWNoKChlbGVtZW50KSA9PiBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2Ryb3AtcG9zaXRpb24taW5zaWRlJykpO1xuICAgICAgICB0aGlzLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5kcmFnLWl0ZW0taGlkZScpLmZvckVhY2goKGVsZW1lbnQpID0+IGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnZHJvcC1pdGVtLWhpZGUnKSk7XG4gICAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImdhbnR0LXRhYmxlLWJvZHktY29udGFpbmVyXCJcbiAgY2RrRHJvcExpc3RcbiAgW2Nka0Ryb3BMaXN0QXV0b1Njcm9sbFN0ZXBdPVwiNlwiXG4gIFtjZGtEcm9wTGlzdERhdGFdPVwicmVuZGVyRGF0YVwiXG4gIFtjZGtEcm9wTGlzdFNvcnRpbmdEaXNhYmxlZF09XCJ0cnVlXCJcbiAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJvbkxpc3REcm9wcGVkKCRldmVudClcIlxuPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXJlbmRlckRhdGE/Lmxlbmd0aFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZW1wdHlUZW1wbGF0ZVwiPlxuICAgICAgPGdhbnR0LWljb24gY2xhc3M9XCJlbXB0eS1pY29uXCIgaWNvbk5hbWU9XCJlbXB0eVwiPjwvZ2FudHQtaWNvbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJlbXB0eS10ZXh0XCI+5rKh5pyJ5pWw5o2uPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImVtcHR5VGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwicmVuZGVyRGF0YSAmJiByZW5kZXJEYXRhLmxlbmd0aCA+IDBcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHJlbmRlckRhdGE7IHRyYWNrQnk6IHRyYWNrQnlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnYW50dC10YWJsZS1ncm91cFwiIFtuZ0NsYXNzXT1cIml0ZW0uY2xhc3NcIiAqbmdJZj1cIml0ZW0uaXRlbXNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdhbnR0LXRhYmxlLWdyb3VwLXRpdGxlXCIgW2NsYXNzLmV4cGFuZGVkXT1cIml0ZW0uZXhwYW5kZWRcIiAoY2xpY2spPVwiZXhwYW5kR3JvdXAoaXRlbSlcIj5cbiAgICAgICAgICA8Z2FudHQtaWNvbiBjbGFzcz1cImV4cGFuZC1pY29uXCIgW2ljb25OYW1lXT1cIml0ZW0uZXhwYW5kZWQgPyAnYW5nbGUtZG93bicgOiAnYW5nbGUtcmlnaHQnXCI+PC9nYW50dC1pY29uPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJncm91cFRlbXBsYXRlOyBlbHNlIGRlZmF1bHRcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJncm91cFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBpdGVtLm9yaWdpbiwgZ3JvdXA6IGl0ZW0ub3JpZ2luIH1cIlxuICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJncm91cC10aXRsZVwiPnt7IGl0ZW0udGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cIiFpdGVtLml0ZW1zXCJcbiAgICAgICAgKGNsaWNrKT1cIml0ZW1DbGljay5lbWl0KHsgZXZlbnQ6ICRldmVudCwgc2VsZWN0ZWRWYWx1ZTogaXRlbS5vcmlnaW4gfSlcIlxuICAgICAgICBjZGtEcmFnXG4gICAgICAgIFtjZGtEcmFnRGF0YV09XCJpdGVtXCJcbiAgICAgICAgW2Nka0RyYWdEaXNhYmxlZF09XCIoZHJhZ2dhYmxlICYmIGl0ZW0uaXRlbURyYWdnYWJsZSA9PT0gZmFsc2UpIHx8ICFkcmFnZ2FibGVcIlxuICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwib25JdGVtRHJhZ1N0YXJ0ZWQoJGV2ZW50KVwiXG4gICAgICAgIChjZGtEcmFnRW5kZWQpPVwib25JdGVtRHJhZ0VuZGVkKCRldmVudClcIlxuICAgICAgICAoY2RrRHJhZ01vdmVkKT1cImVtaXRJdGVtRHJhZ01vdmVkKCRldmVudClcIlxuICAgICAgICBjbGFzcz1cImdhbnR0LXRhYmxlLWl0ZW1cIlxuICAgICAgICBbY2xhc3MuZ2FudHQtdGFibGUtaXRlbS13aXRoLWdyb3VwXT1cImhhc0dyb3VwXCJcbiAgICAgICAgW2NsYXNzLmdhbnR0LXRhYmxlLWl0ZW0tZmlyc3QtbGV2ZWwtZ3JvdXBdPVwiaXRlbS5sZXZlbCA9PT0gMCAmJiAoaXRlbS50eXBlIHwgaXNHYW50dFJhbmdlSXRlbSlcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImdhbnR0LnN0eWxlcy5saW5lSGVpZ2h0XCJcbiAgICAgICAgW3N0eWxlLmxpbmVIZWlnaHQucHhdPVwiZ2FudHQuc3R5bGVzLmxpbmVIZWlnaHRcIlxuICAgICAgICBbY2xhc3MuZ2FudHQtdGFibGUtaXRlbS1hY3RpdmVdPVwiZ2FudHRVcHBlci5pc1NlbGVjdGVkKGl0ZW0uaWQpXCJcbiAgICAgID5cbiAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwicm93QmVmb3JlVGVtcGxhdGVcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogaXRlbS5vcmlnaW4sIGl0ZW06IGl0ZW0ub3JpZ2luIH1cIlxuICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ2FudHQtdGFibGUtY29sdW1uXCIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zOyBsZXQgZmlyc3QgPSBmaXJzdFwiIFtzdHlsZS53aWR0aF09XCJjb2x1bW4uY29sdW1uV2lkdGhcIj5cbiAgICAgICAgICA8IS0tIGRyYWcgaWNvbiAtLT5cbiAgICAgICAgICA8Z2FudHQtaWNvblxuICAgICAgICAgICAgKm5nSWY9XCJmaXJzdCAmJiBkcmFnZ2FibGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJnYW50dC1kcmFnLWhhbmRsZVwiXG4gICAgICAgICAgICBpY29uTmFtZT1cImRyYWdcIlxuICAgICAgICAgICAgY2RrRHJhZ0hhbmRsZVxuICAgICAgICAgICAgW2Nka0RyYWdIYW5kbGVEaXNhYmxlZF09XCIoZHJhZ2dhYmxlICYmIGl0ZW0uaXRlbURyYWdnYWJsZSA9PT0gZmFsc2UpIHx8ICFkcmFnZ2FibGVcIlxuICAgICAgICAgID48L2dhbnR0LWljb24+XG4gICAgICAgICAgPCEtLSBleHBhbmQgaWNvbiAtLT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cImNvbHVtbj8uc2hvd0V4cGFuZEljb24gfHwgKCFoYXNFeHBhbmRJY29uICYmIGZpcnN0KVwiXG4gICAgICAgICAgICBjbGFzcz1cImdhbnR0LWV4cGFuZC1pY29uXCJcbiAgICAgICAgICAgIFtzdHlsZS5tYXJnaW5MZWZ0LnB4XT1cIml0ZW0ubGV2ZWwgKiAyMFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0ubGV2ZWwgPCBnYW50dC5tYXhMZXZlbCAtIDEgJiYgaXRlbS5leHBhbmRhYmxlXCI+XG4gICAgICAgICAgICAgIDxnYW50dC1pY29uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhaXRlbS5sb2FkaW5nXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImV4cGFuZC1pY29uXCJcbiAgICAgICAgICAgICAgICBbaWNvbk5hbWVdPVwiaXRlbS5leHBhbmRlZCA/ICdhbmdsZS1kb3duJyA6ICdhbmdsZS1yaWdodCdcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJleHBhbmRDaGlsZHJlbigkZXZlbnQsIGl0ZW0pXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L2dhbnR0LWljb24+XG4gICAgICAgICAgICAgIDxnYW50dC1pY29uICpuZ0lmPVwiaXRlbS5sb2FkaW5nXCIgW2ljb25OYW1lXT1cIidsb2FkaW5nJ1wiPjwvZ2FudHQtaWNvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gY29sdW1uIGNvbnRlbnQgLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImdhbnR0LXRhYmxlLWNvbHVtbi1jb250ZW50XCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBpdGVtLm9yaWdpbiwgaXRlbTogaXRlbS5vcmlnaW4gfVwiXG4gICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInJvd0FmdGVyVGVtcGxhdGVcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogaXRlbS5vcmlnaW4sIGl0ZW06IGl0ZW0ub3JpZ2luIH1cIlxuICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuIl19
311
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQtdGFibGUtYm9keS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nYW50dC9zcmMvY29tcG9uZW50cy90YWJsZS9ib2R5L2dhbnR0LXRhYmxlLWJvZHkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2FudHQvc3JjL2NvbXBvbmVudHMvdGFibGUvYm9keS9nYW50dC10YWJsZS1ib2R5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWdCLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RixPQUFPLEVBQ0gsU0FBUyxFQUNULFdBQVcsRUFHWCxLQUFLLEVBRUwsTUFBTSxFQUNOLE1BQU0sRUFDTixZQUFZLEVBR1osWUFBWSxFQUVmLE1BQU0sZUFBZSxDQUFDO0FBVXZCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBMEIsb0JBQW9CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM1RSxPQUFPLEVBQWMsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsT0FBTyxFQUErRCxNQUFNLHdCQUF3QixDQUFDO0FBQzlHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7OztBQUszQyxNQUFNLE9BQU8sdUJBQXVCO0lBRWhDLElBQWEsVUFBVSxDQUFDLElBQWdEO1FBQ3BFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQixJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ2hE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T0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO0lBQ25JLENBQUM7O29IQTdUUSx1QkFBdUIsa0JBK0RwQixvQkFBb0IsYUFDcEIsaUJBQWlCLDhDQUVqQixRQUFRO3dHQWxFWCx1QkFBdUIsb3FCQTJDbEIsQ0FBQSxPQUFlLENBQUEsZ0RDOUVqQyx1dElBZ0dBOzJGRDdEYSx1QkFBdUI7a0JBSm5DLFNBQVM7K0JBQ0ksa0JBQWtCOzswQkFrRXZCLE1BQU07MkJBQUMsb0JBQW9COzswQkFDM0IsTUFBTTsyQkFBQyxpQkFBaUI7OzBCQUV4QixNQUFNOzJCQUFDLFFBQVE7NENBaEVQLFVBQVU7c0JBQXRCLEtBQUs7Z0JBYUcsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFFRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBSU4sU0FBUztzQkFGUixXQUFXO3VCQUFDLDZCQUE2Qjs7c0JBQ3pDLEtBQUs7Z0JBR0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBRUcsU0FBUztzQkFBbEIsTUFBTTtnQkFFZ0MsZUFBZTtzQkFBckQsV0FBVzt1QkFBQyx3QkFBd0I7Z0JBRUcsb0JBQW9CO3NCQUEzRCxXQUFXO3VCQUFDLHlCQUF5QjtnQkFFSyxrQkFBa0I7c0JBQTVELFdBQVc7dUJBQUMsNEJBQTRCO2dCQUVWLFFBQVE7c0JBQXRDLFlBQVk7dUJBQUMsQ0FBQSxPQUFlLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhdWRpdFRpbWUsIGRlYm91bmNlVGltZSwgZmlsdGVyLCBzdGFydFdpdGgsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgUXVlcnlMaXN0LFxuICAgIElucHV0LFxuICAgIE9uSW5pdCxcbiAgICBJbmplY3QsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBPbkRlc3Ryb3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIEFmdGVyVmlld0luaXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIEdhbnR0SXRlbUludGVybmFsLFxuICAgIEdhbnR0R3JvdXBJbnRlcm5hbCxcbiAgICBHYW50dFNlbGVjdGVkRXZlbnQsXG4gICAgR2FudHRUYWJsZURyb3BQb3NpdGlvbixcbiAgICBHYW50dFRhYmxlRHJhZ0VudGVyUHJlZGljYXRlQ29udGV4dCxcbiAgICBHYW50dFRhYmxlRHJhZ0Ryb3BwZWRFdmVudFxufSBmcm9tICcuLi8uLi8uLi9jbGFzcyc7XG5pbXBvcnQgeyBOZ3hHYW50dFRhYmxlQ29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdGFibGUvZ2FudHQtY29sdW1uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBjb2VyY2VDc3NQaXhlbFZhbHVlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IEdhbnR0QWJzdHJhY3RDb21wb25lbnQsIEdBTlRUX0FCU1RSQUNUX1RPS0VOIH0gZnJvbSAnLi4vLi4vLi4vZ2FudHQtYWJzdHJhY3QnO1xuaW1wb3J0IHsgZGVmYXVsdENvbHVtbldpZHRoIH0gZnJvbSAnLi4vaGVhZGVyL2dhbnR0LXRhYmxlLWhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgR2FudHRVcHBlciwgR0FOVFRfVVBQRVJfVE9LRU4gfSBmcm9tICcuLi8uLi8uLi9nYW50dC11cHBlcic7XG5pbXBvcnQgeyBDZGtEcmFnLCBDZGtEcmFnRHJvcCwgQ2RrRHJhZ0VuZCwgQ2RrRHJhZ01vdmUsIENka0RyYWdTdGFydCwgRHJhZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdnYW50dC10YWJsZS1ib2R5JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZ2FudHQtdGFibGUtYm9keS5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgR2FudHRUYWJsZUJvZHlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgcHJpdmF0ZSBfcmVuZGVyRGF0YTogKEdhbnR0R3JvdXBJbnRlcm5hbCB8IEdhbnR0SXRlbUludGVybmFsKVtdO1xuICAgIEBJbnB1dCgpIHNldCByZW5kZXJEYXRhKGRhdGE6IChHYW50dEdyb3VwSW50ZXJuYWwgfCBHYW50dEl0ZW1JbnRlcm5hbClbXSkge1xuICAgICAgICBjb25zdCBmaXJzdERhdGEgPSBkYXRhWzBdO1xuICAgICAgICBpZiAoZmlyc3REYXRhICYmIGZpcnN0RGF0YS5oYXNPd25Qcm9wZXJ0eSgnaXRlbXMnKSkge1xuICAgICAgICAgICAgdGhpcy5oYXNHcm91cCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nYW50dFRhYmxlRW1wdHlDbGFzcyA9IGRhdGE/Lmxlbmd0aCA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgICAgdGhpcy5fcmVuZGVyRGF0YSA9IGRhdGE7XG4gICAgfVxuXG4gICAgZ2V0IHJlbmRlckRhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJEYXRhO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIGZsYXREYXRhOiAoR2FudHRHcm91cEludGVybmFsIHwgR2FudHRJdGVtSW50ZXJuYWwpW107XG5cbiAgICBASW5wdXQoKSBjb2x1bW5zOiBRdWVyeUxpc3Q8Tmd4R2FudHRUYWJsZUNvbHVtbkNvbXBvbmVudD47XG5cbiAgICBASW5wdXQoKSBncm91cFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQElucHV0KCkgZW1wdHlUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBJbnB1dCgpIHJvd0JlZm9yZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQElucHV0KCkgcm93QWZ0ZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZ2FudHQtdGFibGUtZHJhZ2dhYmxlJylcbiAgICBASW5wdXQoKVxuICAgIGRyYWdnYWJsZSA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgZHJvcEVudGVyUHJlZGljYXRlPzogKGNvbnRleHQ6IEdhbnR0VGFibGVEcmFnRW50ZXJQcmVkaWNhdGVDb250ZXh0KSA9PiBib29sZWFuO1xuXG4gICAgQE91dHB1dCgpIGRyYWdEcm9wcGVkID0gbmV3IEV2ZW50RW1pdHRlcjxHYW50dFRhYmxlRHJhZ0Ryb3BwZWRFdmVudD4oKTtcblxuICAgIEBPdXRwdXQoKSBpdGVtQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEdhbnR0U2VsZWN0ZWRFdmVudD4oKTtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZ2FudHQtdGFibGUtYm9keScpIGdhbnR0VGFibGVDbGFzcyA9IHRydWU7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmdhbnR0LXRhYmxlLWVtcHR5JykgZ2FudHRUYWJsZUVtcHR5Q2xhc3MgPSBmYWxzZTtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZ2FudHQtdGFibGUtZHJhZ2dpbmcnKSBnYW50dFRhYmxlRHJhZ2dpbmcgPSBmYWxzZTtcblxuICAgIEBWaWV3Q2hpbGRyZW4oQ2RrRHJhZzxzdHJpbmc+KSBjZGtEcmFnczogUXVlcnlMaXN0PENka0RyYWc8R2FudHRJdGVtSW50ZXJuYWw+PjtcblxuICAgIHB1YmxpYyBoYXNHcm91cDogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBoYXNFeHBhbmRJY29uID0gZmFsc2U7XG5cbiAgICAvLyDnvJPlrZggRWxlbWVudCDlkowgRHJhZ1JlZiDnmoTlhbPns7vvvIzmlrnkvr/lnKggSXRlbSDmi5bliqjml7bmn6Xmib5cbiAgICBwcml2YXRlIGl0ZW1EcmFnc01hcCA9IG5ldyBNYXA8SFRNTEVsZW1lbnQsIENka0RyYWc8R2FudHRJdGVtSW50ZXJuYWw+PigpO1xuXG4gICAgcHJpdmF0ZSBpdGVtRHJhZ01vdmVkID0gbmV3IFN1YmplY3Q8Q2RrRHJhZ01vdmU+KCk7XG5cbiAgICAvLyBJdGVtIOaLluWKqOe7j+i/h+ebruagh+aXtuS4tOaXtuiusOW9leebruagh2lk5Lul5Y+K55u45a+55bqU55uu5qCH55qE5L2N572uXG4gICAgcHJpdmF0ZSBpdGVtRHJvcFRhcmdldDoge1xuICAgICAgICBwb3NpdGlvbj86IEdhbnR0VGFibGVEcm9wUG9zaXRpb247XG4gICAgICAgIGlkPzogc3RyaW5nO1xuICAgIH07XG5cbiAgICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KEdBTlRUX0FCU1RSQUNUX1RPS0VOKSBwdWJsaWMgZ2FudHQ6IEdhbnR0QWJzdHJhY3RDb21wb25lbnQsXG4gICAgICAgIEBJbmplY3QoR0FOVFRfVVBQRVJfVE9LRU4pIHB1YmxpYyBnYW50dFVwcGVyOiBHYW50dFVwcGVyLFxuICAgICAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IERvY3VtZW50XG4gICAgKSB7fVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuY29sdW1ucy5jaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKHRoaXMuY29sdW1ucyksIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGFzRXhwYW5kSWNvbiA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghY29sdW1uLmNvbHVtbldpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5jb2x1bW5XaWR0aCA9IGNvZXJjZUNzc1BpeGVsVmFsdWUoZGVmYXVsdENvbHVtbldpZHRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbi5zaG93RXhwYW5kSWNvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc0V4cGFuZEljb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2RrRHJhZ3MuY2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoc3RhcnRXaXRoKHRoaXMuY2RrRHJhZ3MpLCB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkcmFnczogUXVlcnlMaXN0PENka0RyYWc8R2FudHRJdGVtSW50ZXJuYWw+PikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXRlbURyYWdzTWFwLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgZHJhZ3MuZm9yRWFjaCgoZHJhZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZHJhZy5kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjZGtEcmFnIOWPmOWMluaXtu+8jOe8k+WtmCBFbGVtZW50IOS4jiBEcmFnUmVmIOeahOWFs+ezu++8jOaWueS+vyBEcmFnIE1vdmUg5pe25p+l5om+XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1EcmFnc01hcC5zZXQoZHJhZy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIGRyYWcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLml0ZW1EcmFnTW92ZWRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGF1ZGl0VGltZSgzMCksXG4gICAgICAgICAgICAgICAgLy8gIGF1ZGl0VGltZSDlj6/og73kvJrlr7zoh7Tmi5bliqjnu5PmnZ/lkI7ku43nhLbmiafooYwgbW92ZWQg77yM5omA5Lul6YCa6L+H5Yik5patIGRyYWdnaW5nIOeKtuaAgeadpei/h+a7pOaXoOaViCBtb3ZlZFxuICAgICAgICAgICAgICAgIGZpbHRlcigoZXZlbnQ6IENka0RyYWdNb3ZlKSA9PiBldmVudC5zb3VyY2UuX2RyYWdSZWYuaXNEcmFnZ2luZygpKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkl0ZW1EcmFnTW92ZWQoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZXhwYW5kR3JvdXAoZ3JvdXA6IEdhbnR0R3JvdXBJbnRlcm5hbCkge1xuICAgICAgICB0aGlzLmdhbnR0LmV4cGFuZEdyb3VwKGdyb3VwKTtcbiAgICB9XG5cbiAgICBleHBhbmRDaGlsZHJlbihldmVudDogTW91c2VFdmVudCwgaXRlbTogR2FudHRJdGVtSW50ZXJuYWwpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMuZ2FudHQuZXhwYW5kQ2hpbGRyZW4oaXRlbSk7XG4gICAgfVxuXG4gICAgb25JdGVtRHJhZ1N0YXJ0ZWQoZXZlbnQ6IENka0RyYWdTdGFydDxHYW50dEl0ZW1JbnRlcm5hbD4pIHtcbiAgICAgICAgdGhpcy5nYW50dFRhYmxlRHJhZ2dpbmcgPSB0cnVlO1xuICAgICAgICAvLyDmi5bliqjlvIDlp4vml7bpmpDol4/miYDmnInnmoTlrZDpoblcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmdldENoaWxkcmVuRWxlbWVudHNCeUVsZW1lbnQoZXZlbnQuc291cmNlLmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIGNoaWxkcmVuLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZHJhZy1pdGVtLWhpZGUnKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZW1pdEl0ZW1EcmFnTW92ZWQoZXZlbnQ6IENka0RyYWdNb3ZlKSB7XG4gICAgICAgIHRoaXMuaXRlbURyYWdNb3ZlZC5uZXh0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBvbkl0ZW1EcmFnTW92ZWQoZXZlbnQ6IENka0RyYWdNb3ZlPEdhbnR0SXRlbUludGVybmFsPikge1xuICAgICAgICAvLyDpgJrov4fpvKDmoIfkvY3nva7mn6Xmib7lr7nlupTnmoTnm67moIcgSXRlbSDlhYPntKBcbiAgICAgICAgbGV0IGN1cnJlbnRQb2ludEVsZW1lbnQgPSB0aGlzLmRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoZXZlbnQucG9pbnRlclBvc2l0aW9uLngsIGV2ZW50LnBvaW50ZXJQb3NpdGlvbi55KSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgaWYgKCFjdXJyZW50UG9pbnRFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFudXBEcmFnQXJ0aWZhY3RzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRhcmdldEVsZW1lbnQgPSBjdXJyZW50UG9pbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnZ2FudHQtdGFibGUtaXRlbScpXG4gICAgICAgICAgICA/IGN1cnJlbnRQb2ludEVsZW1lbnRcbiAgICAgICAgICAgIDogKGN1cnJlbnRQb2ludEVsZW1lbnQuY2xvc2VzdCgnLmdhbnR0LXRhYmxlLWl0ZW0nKSBhcyBIVE1MRWxlbWVudCk7XG4gICAgICAgIGlmICghdGFyZ2V0RWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5jbGVhbnVwRHJhZ0FydGlmYWN0cygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g57yT5a2Y5pS+572u55uu5qCHSWQg5bm26K6h566X6byg5qCH55u45a+55bqU55qE5L2N572uXG4gICAgICAgIHRoaXMuaXRlbURyb3BUYXJnZXQgPSB7XG4gICAgICAgICAgICBpZDogdGhpcy5pdGVtRHJhZ3NNYXAuZ2V0KHRhcmdldEVsZW1lbnQpPy5kYXRhLmlkLFxuICAgICAgICAgICAgcG9zaXRpb246IHRoaXMuZ2V0VGFyZ2V0UG9zaXRpb24odGFyZ2V0RWxlbWVudCwgZXZlbnQpXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8g5omn6KGM5aSW6YOo5Lyg5YWl55qEIGRyb3BFbnRlclByZWRpY2F0ZSDliKTmlq3mmK/lkKblhYHorrjmi5blhaXnm67moIfpoblcbiAgICAgICAgaWYgKHRoaXMuZHJvcEVudGVyUHJlZGljYXRlKSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXREcmFnUmVmID0gdGhpcy5pdGVtRHJhZ3NNYXAuZ2V0KHRhcmdldEVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMuZHJvcEVudGVyUHJlZGljYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlOiBldmVudC5zb3VyY2UuZGF0YS5vcmlnaW4sXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0RHJhZ1JlZi5kYXRhLm9yaWdpbixcbiAgICAgICAgICAgICAgICAgICAgZHJvcFBvc2l0aW9uOiB0aGlzLml0ZW1Ecm9wVGFyZ2V0LnBvc2l0aW9uXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Ryb3BQb3NpdGlvblBsYWNlaG9sZGVyKHRhcmdldEVsZW1lbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1Ecm9wVGFyZ2V0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0Ryb3BQb3NpdGlvblBsYWNlaG9sZGVyKHRhcmdldEVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25JdGVtRHJhZ0VuZGVkKGV2ZW50OiBDZGtEcmFnRW5kPEdhbnR0SXRlbUludGVybmFsPikge1xuICAgICAgICB0aGlzLmdhbnR0VGFibGVEcmFnZ2luZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIG9uTGlzdERyb3BwZWQoZXZlbnQ6IENka0RyYWdEcm9wPEdhbnR0SXRlbUludGVybmFsW10sIEdhbnR0SXRlbUludGVybmFsW10sIEdhbnR0SXRlbUludGVybmFsPikge1xuICAgICAgICBpZiAoIXRoaXMuaXRlbURyb3BUYXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNvdXJjZUl0ZW0gPSBldmVudC5pdGVtLmRhdGE7XG4gICAgICAgIGNvbnN0IHNvdXJjZVBhcmVudCA9IHRoaXMuZ2V0UGFyZW50QnlJdGVtKHNvdXJjZUl0ZW0pO1xuICAgICAgICBjb25zdCBzb3VyY2VDaGlsZHJlbiA9IHRoaXMuZ2V0RXhwYW5kQ2hpbGRyZW5CeURyYWcoZXZlbnQuaXRlbSk7XG5cbiAgICAgICAgY29uc3QgdGFyZ2V0RHJhZ1JlZiA9IHRoaXMuY2RrRHJhZ3MuZmluZCgoaXRlbSkgPT4gaXRlbS5kYXRhPy5pZCA9PT0gdGhpcy5pdGVtRHJvcFRhcmdldC5pZCk7XG4gICAgICAgIGNvbnN0IHRhcmdldEl0ZW0gPSB0YXJnZXREcmFnUmVmPy5kYXRhO1xuICAgICAgICBjb25zdCB0YXJnZXRQYXJlbnQgPSB0aGlzLmdldFBhcmVudEJ5SXRlbSh0YXJnZXRJdGVtKTtcblxuICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oc291cmNlSXRlbSwgc291cmNlQ2hpbGRyZW4pO1xuXG4gICAgICAgIHN3aXRjaCAodGhpcy5pdGVtRHJvcFRhcmdldC5wb3NpdGlvbikge1xuICAgICAgICAgICAgY2FzZSAnYmVmb3JlJzpcbiAgICAgICAgICAgIGNhc2UgJ2FmdGVyJzpcbiAgICAgICAgICAgICAgICB0aGlzLmluc2VydEl0ZW0odGFyZ2V0SXRlbSwgc291cmNlSXRlbSwgc291cmNlQ2hpbGRyZW4sIHRoaXMuaXRlbURyb3BUYXJnZXQucG9zaXRpb24pO1xuICAgICAgICAgICAgICAgIHNvdXJjZUl0ZW0udXBkYXRlTGV2ZWwodGFyZ2V0SXRlbS5sZXZlbCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdpbnNpZGUnOlxuICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0Q2hpbGRyZW5JdGVtKHRhcmdldEl0ZW0sIHNvdXJjZUl0ZW0sIHNvdXJjZUNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICBzb3VyY2VJdGVtLnVwZGF0ZUxldmVsKHRhcmdldEl0ZW0ubGV2ZWwgKyAxKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZHJhZ0Ryb3BwZWQuZW1pdCh7XG4gICAgICAgICAgICBzb3VyY2U6IHNvdXJjZUl0ZW0ub3JpZ2luLFxuICAgICAgICAgICAgc291cmNlUGFyZW50OiBzb3VyY2VQYXJlbnQ/Lm9yaWdpbixcbiAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0SXRlbS5vcmlnaW4sXG4gICAgICAgICAgICB0YXJnZXRQYXJlbnQ6IHRhcmdldFBhcmVudD8ub3JpZ2luLFxuICAgICAgICAgICAgZHJvcFBvc2l0aW9uOiB0aGlzLml0ZW1Ecm9wVGFyZ2V0LnBvc2l0aW9uXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuY2xlYW51cERyYWdBcnRpZmFjdHModHJ1ZSk7XG4gICAgfVxuXG4gICAgdHJhY2tCeShpbmRleDogbnVtYmVyLCBpdGVtOiBHYW50dEdyb3VwSW50ZXJuYWwgfCBHYW50dEl0ZW1JbnRlcm5hbCkge1xuICAgICAgICByZXR1cm4gaXRlbS5pZCB8fCBpbmRleDtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZUl0ZW0oaXRlbTogR2FudHRJdGVtSW50ZXJuYWwsIGNoaWxkcmVuOiBHYW50dEl0ZW1JbnRlcm5hbFtdKSB7XG4gICAgICAgIHRoaXMucmVuZGVyRGF0YS5zcGxpY2UodGhpcy5yZW5kZXJEYXRhLmluZGV4T2YoaXRlbSksIDEgKyBjaGlsZHJlbi5sZW5ndGgpO1xuICAgICAgICB0aGlzLmZsYXREYXRhLnNwbGljZSh0aGlzLmZsYXREYXRhLmluZGV4T2YoaXRlbSksIDEgKyBjaGlsZHJlbi5sZW5ndGgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5zZXJ0SXRlbShcbiAgICAgICAgdGFyZ2V0OiBHYW50dEl0ZW1JbnRlcm5hbCxcbiAgICAgICAgaW5zZXJ0ZWQ6IEdhbnR0SXRlbUludGVybmFsLFxuICAgICAgICBjaGlsZHJlbjogR2FudHRJdGVtSW50ZXJuYWxbXSxcbiAgICAgICAgcG9zaXRpb246ICdiZWZvcmUnIHwgJ2FmdGVyJ1xuICAgICkge1xuICAgICAgICBpZiAocG9zaXRpb24gPT09ICdiZWZvcmUnKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckRhdGEuc3BsaWNlKHRoaXMucmVuZGVyRGF0YS5pbmRleE9mKHRhcmdldCksIDAsIGluc2VydGVkLCAuLi5jaGlsZHJlbik7XG4gICAgICAgICAgICB0aGlzLmZsYXREYXRhLnNwbGljZSh0aGlzLmZsYXREYXRhLmluZGV4T2YodGFyZ2V0KSwgMCwgaW5zZXJ0ZWQsIC4uLmNoaWxkcmVuKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGRyYWdSZWYgPSB0aGlzLmNka0RyYWdzLmZpbmQoKGRyYWcpID0+IGRyYWcuZGF0YSA9PT0gdGFyZ2V0KTtcbiAgICAgICAgICAgIC8vIOWmguaenOebruagh+mhueaYr+WxleW8gOeahO+8jOaPkuWFpeeahCBpbmRleCDkvY3nva7pnIDopoHogIPomZHlrZDpobnnmoTmlbDph49cbiAgICAgICAgICAgIGxldCBjaGlsZHJlbkNvdW50ID0gMDtcbiAgICAgICAgICAgIGlmICh0YXJnZXQuZXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbkNvdW50ID0gdGhpcy5nZXRDaGlsZHJlbkVsZW1lbnRzQnlFbGVtZW50KGRyYWdSZWYuZWxlbWVudC5uYXRpdmVFbGVtZW50KT8ubGVuZ3RoIHx8IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJlbmRlckRhdGEuc3BsaWNlKHRoaXMucmVuZGVyRGF0YS5pbmRleE9mKHRhcmdldCkgKyAxICsgY2hpbGRyZW5Db3VudCwgMCwgaW5zZXJ0ZWQsIC4uLmNoaWxkcmVuKTtcbiAgICAgICAgICAgIHRoaXMuZmxhdERhdGEuc3BsaWNlKHRoaXMuZmxhdERhdGEuaW5kZXhPZih0YXJnZXQpICsgMSArIGNoaWxkcmVuQ291bnQsIDAsIGluc2VydGVkLCAuLi5jaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGluc2VydENoaWxkcmVuSXRlbSh0YXJnZXQ6IEdhbnR0SXRlbUludGVybmFsLCBpbnNlcnRlZDogR2FudHRJdGVtSW50ZXJuYWwsIGNoaWxkcmVuOiBHYW50dEl0ZW1JbnRlcm5hbFtdKSB7XG4gICAgICAgIGlmICh0YXJnZXQuZXhwYW5kZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyRGF0YS5zcGxpY2UodGhpcy5yZW5kZXJEYXRhLmluZGV4T2YodGFyZ2V0KSArIHRhcmdldC5jaGlsZHJlbi5sZW5ndGggKyAxLCAwLCBpbnNlcnRlZCwgLi4uY2hpbGRyZW4pO1xuICAgICAgICAgICAgdGhpcy5mbGF0RGF0YS5zcGxpY2UodGhpcy5mbGF0RGF0YS5pbmRleE9mKHRhcmdldCkgKyB0YXJnZXQuY2hpbGRyZW4ubGVuZ3RoICsgMSwgMCwgaW5zZXJ0ZWQsIC4uLmNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgICB0YXJnZXQuY2hpbGRyZW4ucHVzaChpbnNlcnRlZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQYXJlbnRCeUl0ZW0oaXRlbTogR2FudHRJdGVtSW50ZXJuYWwpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmZsYXREYXRhIHx8IFtdKS5maW5kKChuOiBHYW50dEl0ZW1JbnRlcm5hbCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG4uY2hpbGRyZW4/LmluY2x1ZGVzKGl0ZW0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEV4cGFuZENoaWxkcmVuQnlEcmFnKGRyYWdSZWY6IENka0RyYWc8R2FudHRJdGVtSW50ZXJuYWw+KSB7XG4gICAgICAgIGlmICghZHJhZ1JlZi5kYXRhLmV4cGFuZGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbkVsZW1lbnRzID0gdGhpcy5nZXRDaGlsZHJlbkVsZW1lbnRzQnlFbGVtZW50KGRyYWdSZWYuZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbkVsZW1lbnRzLm1hcCgoZWxlbWVudCkgPT4gdGhpcy5pdGVtRHJhZ3NNYXAuZ2V0KGVsZW1lbnQpLmRhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDaGlsZHJlbkVsZW1lbnRzQnlFbGVtZW50KGRyYWdFbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgICAgICAvLyDpgJrov4flvqrnjq/mjIHnu63mn6Xmib4gbmV4dCBlbGVtZW5077yM5aaC5p6cIGVsZW1lbnQg55qEIGxldmVsIOWwj+S6juW9k+WJjSBpdGVtIOeahCBsZXZlbO+8jOWImeS4uuWug+eahCBjaGlsZHJlblxuICAgICAgICBjb25zdCBjaGlsZHJlbjogSFRNTEVsZW1lbnRbXSA9IFtdO1xuICAgICAgICBjb25zdCBkcmFnUmVmID0gdGhpcy5pdGVtRHJhZ3NNYXAuZ2V0KGRyYWdFbGVtZW50KTtcblxuICAgICAgICAvLyDlpoLmnpzlvZPliY3nmoQgRHJhZyDmraPlnKjmi5bmi73vvIzkvJrliJvlu7ogUGxhY2Vob2xkZXJFbGVtZW50IOWNoOS9je+8jOaJgOS7peS7pSBQbGFjZWhvbGRlckVsZW1lbnQg5ZCR5LiL5p+l5om+XG4gICAgICAgIGxldCBuZXh0RWxlbWVudCA9IChkcmFnUmVmLmdldFBsYWNlaG9sZGVyRWxlbWVudCgpIHx8IGRyYWdFbGVtZW50KS5uZXh0RWxlbWVudFNpYmxpbmcgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGxldCBuZXh0RHJhZ1JlZiA9IHRoaXMuaXRlbURyYWdzTWFwLmdldChuZXh0RWxlbWVudCk7XG5cbiAgICAgICAgd2hpbGUgKG5leHREcmFnUmVmICYmIG5leHREcmFnUmVmLmRhdGEubGV2ZWwgPiBkcmFnUmVmLmRhdGEubGV2ZWwpIHtcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2gobmV4dEVsZW1lbnQpO1xuICAgICAgICAgICAgbmV4dEVsZW1lbnQgPSBuZXh0RWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICBuZXh0RHJhZ1JlZiA9IHRoaXMuaXRlbURyYWdzTWFwLmdldChuZXh0RWxlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUYXJnZXRQb3NpdGlvbih0YXJnZXQ6IEhUTUxFbGVtZW50LCBldmVudDogQ2RrRHJhZ01vdmUpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0UmVjdCA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgYmVmb3JlT3JBZnRlckdhcCA9IHRhcmdldFJlY3QuaGVpZ2h0ICogMC4zO1xuICAgICAgICAvLyDlsIYgSXRlbSDpq5jluqbliIbkuLrkuIrkuK3kuIvkuInmrrXvvIzlhbbkuK3kuIrkuIvnmoQgR2FwIOS4uiBoZWlnaHQg55qEIDMwJe+8jOmAmui/h+WIpOaWrem8oOagh+S9jee9ruWcqOWTquS4gOautSBnYXAg5p2l6K6h566X5a+55bqU55qE5L2N572uXG4gICAgICAgIGlmIChldmVudC5wb2ludGVyUG9zaXRpb24ueSAtIHRhcmdldFJlY3QudG9wIDwgYmVmb3JlT3JBZnRlckdhcCkge1xuICAgICAgICAgICAgcmV0dXJuICdiZWZvcmUnO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnBvaW50ZXJQb3NpdGlvbi55ID49IHRhcmdldFJlY3QuYm90dG9tIC0gYmVmb3JlT3JBZnRlckdhcCkge1xuICAgICAgICAgICAgcmV0dXJuICdhZnRlcic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJ2luc2lkZSc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNob3dEcm9wUG9zaXRpb25QbGFjZWhvbGRlcih0YXJnZXRFbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgICAgICB0aGlzLmNsZWFudXBEcmFnQXJ0aWZhY3RzKCk7XG4gICAgICAgIGlmICh0aGlzLml0ZW1Ecm9wVGFyZ2V0ICYmIHRhcmdldEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRhcmdldEVsZW1lbnQuY2xhc3NMaXN0LmFkZChgZHJvcC1wb3NpdGlvbi0ke3RoaXMuaXRlbURyb3BUYXJnZXQucG9zaXRpb259YCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFudXBEcmFnQXJ0aWZhY3RzKGRyb3BwZWQgPSBmYWxzZSkge1xuICAgICAgICBpZiAoZHJvcHBlZCkge1xuICAgICAgICAgICAgdGhpcy5pdGVtRHJvcFRhcmdldCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5kcmFnLWl0ZW0taGlkZScpLmZvckVhY2goKGVsZW1lbnQpID0+IGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnZHJhZy1pdGVtLWhpZGUnKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZHJvcC1wb3NpdGlvbi1iZWZvcmUnKS5mb3JFYWNoKChlbGVtZW50KSA9PiBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2Ryb3AtcG9zaXRpb24tYmVmb3JlJykpO1xuICAgICAgICB0aGlzLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5kcm9wLXBvc2l0aW9uLWFmdGVyJykuZm9yRWFjaCgoZWxlbWVudCkgPT4gZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdkcm9wLXBvc2l0aW9uLWFmdGVyJykpO1xuICAgICAgICB0aGlzLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5kcm9wLXBvc2l0aW9uLWluc2lkZScpLmZvckVhY2goKGVsZW1lbnQpID0+IGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnZHJvcC1wb3NpdGlvbi1pbnNpZGUnKSk7XG4gICAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImdhbnR0LXRhYmxlLWJvZHktY29udGFpbmVyXCJcbiAgY2RrRHJvcExpc3RcbiAgW2Nka0Ryb3BMaXN0QXV0b1Njcm9sbFN0ZXBdPVwiNlwiXG4gIFtjZGtEcm9wTGlzdERhdGFdPVwicmVuZGVyRGF0YVwiXG4gIFtjZGtEcm9wTGlzdFNvcnRpbmdEaXNhYmxlZF09XCJ0cnVlXCJcbiAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJvbkxpc3REcm9wcGVkKCRldmVudClcIlxuPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXJlbmRlckRhdGE/Lmxlbmd0aFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZW1wdHlUZW1wbGF0ZVwiPlxuICAgICAgPGdhbnR0LWljb24gY2xhc3M9XCJlbXB0eS1pY29uXCIgaWNvbk5hbWU9XCJlbXB0eVwiPjwvZ2FudHQtaWNvbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJlbXB0eS10ZXh0XCI+5rKh5pyJ5pWw5o2uPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImVtcHR5VGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwicmVuZGVyRGF0YSAmJiByZW5kZXJEYXRhLmxlbmd0aCA+IDBcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHJlbmRlckRhdGE7IHRyYWNrQnk6IHRyYWNrQnlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnYW50dC10YWJsZS1ncm91cFwiIFtuZ0NsYXNzXT1cIml0ZW0uY2xhc3NcIiAqbmdJZj1cIml0ZW0uaXRlbXNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdhbnR0LXRhYmxlLWdyb3VwLXRpdGxlXCIgW2NsYXNzLmV4cGFuZGVkXT1cIml0ZW0uZXhwYW5kZWRcIiAoY2xpY2spPVwiZXhwYW5kR3JvdXAoaXRlbSlcIj5cbiAgICAgICAgICA8Z2FudHQtaWNvbiBjbGFzcz1cImV4cGFuZC1pY29uXCIgW2ljb25OYW1lXT1cIml0ZW0uZXhwYW5kZWQgPyAnYW5nbGUtZG93bicgOiAnYW5nbGUtcmlnaHQnXCI+PC9nYW50dC1pY29uPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJncm91cFRlbXBsYXRlOyBlbHNlIGRlZmF1bHRcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJncm91cFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBpdGVtLm9yaWdpbiwgZ3JvdXA6IGl0ZW0ub3JpZ2luIH1cIlxuICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJncm91cC10aXRsZVwiPnt7IGl0ZW0udGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cIiFpdGVtLml0ZW1zXCJcbiAgICAgICAgKGNsaWNrKT1cIml0ZW1DbGljay5lbWl0KHsgZXZlbnQ6ICRldmVudCwgc2VsZWN0ZWRWYWx1ZTogaXRlbS5vcmlnaW4gfSlcIlxuICAgICAgICBjZGtEcmFnXG4gICAgICAgIFtjZGtEcmFnRGF0YV09XCJpdGVtXCJcbiAgICAgICAgW2Nka0RyYWdEaXNhYmxlZF09XCIoZHJhZ2dhYmxlICYmIGl0ZW0uaXRlbURyYWdnYWJsZSA9PT0gZmFsc2UpIHx8ICFkcmFnZ2FibGVcIlxuICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwib25JdGVtRHJhZ1N0YXJ0ZWQoJGV2ZW50KVwiXG4gICAgICAgIChjZGtEcmFnRW5kZWQpPVwib25JdGVtRHJhZ0VuZGVkKCRldmVudClcIlxuICAgICAgICAoY2RrRHJhZ01vdmVkKT1cImVtaXRJdGVtRHJhZ01vdmVkKCRldmVudClcIlxuICAgICAgICBjbGFzcz1cImdhbnR0LXRhYmxlLWl0ZW1cIlxuICAgICAgICBbY2xhc3MuZ2FudHQtdGFibGUtaXRlbS13aXRoLWdyb3VwXT1cImhhc0dyb3VwXCJcbiAgICAgICAgW2NsYXNzLmdhbnR0LXRhYmxlLWl0ZW0tZmlyc3QtbGV2ZWwtZ3JvdXBdPVwiaXRlbS5sZXZlbCA9PT0gMCAmJiAoaXRlbS50eXBlIHwgaXNHYW50dFJhbmdlSXRlbSlcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImdhbnR0LnN0eWxlcy5saW5lSGVpZ2h0XCJcbiAgICAgICAgW3N0eWxlLmxpbmVIZWlnaHQucHhdPVwiZ2FudHQuc3R5bGVzLmxpbmVIZWlnaHRcIlxuICAgICAgICBbY2xhc3MuZ2FudHQtdGFibGUtaXRlbS1hY3RpdmVdPVwiZ2FudHRVcHBlci5pc1NlbGVjdGVkKGl0ZW0uaWQpXCJcbiAgICAgID5cbiAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwicm93QmVmb3JlVGVtcGxhdGVcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogaXRlbS5vcmlnaW4sIGl0ZW06IGl0ZW0ub3JpZ2luIH1cIlxuICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8ZGl2IFtjbGFzc0xpc3RdPVwiY29sdW1uLmNsYXNzTGlzdFwiICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uczsgbGV0IGZpcnN0ID0gZmlyc3RcIiBbc3R5bGUud2lkdGhdPVwiY29sdW1uLmNvbHVtbldpZHRoXCI+XG4gICAgICAgICAgPCEtLSBkcmFnIGljb24gLS0+XG4gICAgICAgICAgPGdhbnR0LWljb25cbiAgICAgICAgICAgICpuZ0lmPVwiZmlyc3QgJiYgZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZ2FudHQtZHJhZy1oYW5kbGVcIlxuICAgICAgICAgICAgaWNvbk5hbWU9XCJkcmFnXCJcbiAgICAgICAgICAgIGNka0RyYWdIYW5kbGVcbiAgICAgICAgICAgIFtjZGtEcmFnSGFuZGxlRGlzYWJsZWRdPVwiKGRyYWdnYWJsZSAmJiBpdGVtLml0ZW1EcmFnZ2FibGUgPT09IGZhbHNlKSB8fCAhZHJhZ2dhYmxlXCJcbiAgICAgICAgICA+PC9nYW50dC1pY29uPlxuICAgICAgICAgIDwhLS0gZXhwYW5kIGljb24gLS0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW4/LnNob3dFeHBhbmRJY29uIHx8ICghaGFzRXhwYW5kSWNvbiAmJiBmaXJzdClcIlxuICAgICAgICAgICAgY2xhc3M9XCJnYW50dC1leHBhbmQtaWNvblwiXG4gICAgICAgICAgICBbc3R5bGUubWFyZ2luTGVmdC5weF09XCJpdGVtLmxldmVsICogMjBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLmxldmVsIDwgZ2FudHQubWF4TGV2ZWwgLSAxICYmICgoZ2FudHQuYXN5bmMgJiYgaXRlbS5leHBhbmRhYmxlKSB8fCBpdGVtLmNoaWxkcmVuPy5sZW5ndGggPiAwKVwiPlxuICAgICAgICAgICAgICA8Z2FudHQtaWNvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWl0ZW0ubG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJleHBhbmQtaWNvblwiXG4gICAgICAgICAgICAgICAgW2ljb25OYW1lXT1cIml0ZW0uZXhwYW5kZWQgPyAnYW5nbGUtZG93bicgOiAnYW5nbGUtcmlnaHQnXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZXhwYW5kQ2hpbGRyZW4oJGV2ZW50LCBpdGVtKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9nYW50dC1pY29uPlxuICAgICAgICAgICAgICA8Z2FudHQtaWNvbiAqbmdJZj1cIml0ZW0ubG9hZGluZ1wiIFtpY29uTmFtZV09XCInbG9hZGluZydcIj48L2dhbnR0LWljb24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIGNvbHVtbiBjb250ZW50IC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJnYW50dC10YWJsZS1jb2x1bW4tY29udGVudFwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbHVtbi50ZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogaXRlbS5vcmlnaW4sIGl0ZW06IGl0ZW0ub3JpZ2luIH1cIlxuICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJyb3dBZnRlclRlbXBsYXRlXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGl0ZW0ub3JpZ2luLCBpdGVtOiBpdGVtLm9yaWdpbiB9XCJcbiAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cbiJdfQ==
@@ -1,3 +1,3 @@
1
1
  import { InjectionToken } from '@angular/core';
2
2
  export const GANTT_ABSTRACT_TOKEN = new InjectionToken('gantt-abstract-token');
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQtYWJzdHJhY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWNrYWdlcy9nYW50dC9zcmMvZ2FudHQtYWJzdHJhY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFjbEUsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxjQUFjLENBQXlCLHNCQUFzQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEdhbnR0R3JvdXBJbnRlcm5hbCwgR2FudHRJdGVtSW50ZXJuYWwgfSBmcm9tICcuL2NsYXNzJztcbmltcG9ydCB7IEdhbnR0U3R5bGVzIH0gZnJvbSAnLi9nYW50dC5zdHlsZXMnO1xuaW1wb3J0IHsgTmd4R2FudHRUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4vdGFibGUvZ2FudHQtdGFibGUuY29tcG9uZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBHYW50dEFic3RyYWN0Q29tcG9uZW50IHtcbiAgICB0YWJsZTogTmd4R2FudHRUYWJsZUNvbXBvbmVudDtcbiAgICBzdHlsZXM6IEdhbnR0U3R5bGVzO1xuICAgIG1heExldmVsOiBudW1iZXI7XG4gICAgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZjtcbiAgICBleHBhbmRHcm91cChncm91cDogR2FudHRHcm91cEludGVybmFsKTogdm9pZDtcbiAgICBleHBhbmRDaGlsZHJlbihpdGVtOiBHYW50dEl0ZW1JbnRlcm5hbCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBHQU5UVF9BQlNUUkFDVF9UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxHYW50dEFic3RyYWN0Q29tcG9uZW50PignZ2FudHQtYWJzdHJhY3QtdG9rZW4nKTtcbiJdfQ==
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQtYWJzdHJhY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWNrYWdlcy9nYW50dC9zcmMvZ2FudHQtYWJzdHJhY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFlbEUsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxjQUFjLENBQXlCLHNCQUFzQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEdhbnR0R3JvdXBJbnRlcm5hbCwgR2FudHRJdGVtSW50ZXJuYWwgfSBmcm9tICcuL2NsYXNzJztcbmltcG9ydCB7IEdhbnR0U3R5bGVzIH0gZnJvbSAnLi9nYW50dC5zdHlsZXMnO1xuaW1wb3J0IHsgTmd4R2FudHRUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4vdGFibGUvZ2FudHQtdGFibGUuY29tcG9uZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBHYW50dEFic3RyYWN0Q29tcG9uZW50IHtcbiAgICB0YWJsZTogTmd4R2FudHRUYWJsZUNvbXBvbmVudDtcbiAgICBzdHlsZXM6IEdhbnR0U3R5bGVzO1xuICAgIG1heExldmVsOiBudW1iZXI7XG4gICAgYXN5bmM6IGJvb2xlYW47XG4gICAgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZjtcbiAgICBleHBhbmRHcm91cChncm91cDogR2FudHRHcm91cEludGVybmFsKTogdm9pZDtcbiAgICBleHBhbmRDaGlsZHJlbihpdGVtOiBHYW50dEl0ZW1JbnRlcm5hbCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBHQU5UVF9BQlNUUkFDVF9UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxHYW50dEFic3RyYWN0Q29tcG9uZW50PignZ2FudHQtYWJzdHJhY3QtdG9rZW4nKTtcbiJdfQ==
@@ -29,7 +29,6 @@ export class GanttItemUpper {
29
29
  this.refsUnsubscribe$.next();
30
30
  this.refsUnsubscribe$.complete();
31
31
  this.item = item;
32
- this.setPositions();
33
32
  this.item.refs$.pipe(takeUntil(this.refsUnsubscribe$)).subscribe(() => {
34
33
  this.setPositions();
35
34
  });
@@ -65,4 +64,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImpor
65
64
  }], item: [{
66
65
  type: Input
67
66
  }] } });
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQtaXRlbS11cHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL2dhbnR0L3NyYy9nYW50dC1pdGVtLXVwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQWMsTUFBTSxFQUFlLFNBQVMsRUFBK0MsTUFBTSxlQUFlLENBQUM7QUFDL0gsT0FBTyxFQUFxQixhQUFhLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDM0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxpQkFBaUIsRUFBYyxNQUFNLGVBQWUsQ0FBQzs7O0FBRzlELE1BQU0sT0FBZ0IsY0FBYztJQVdoQyxZQUFzQixVQUFtQyxFQUF1QyxVQUFzQjtRQUFoRyxlQUFVLEdBQVYsVUFBVSxDQUF5QjtRQUF1QyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBTi9HLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBRW5CLGlCQUFZLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUVuQyxxQkFBZ0IsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBRTJFLENBQUM7SUFFMUgsUUFBUTtRQUNKLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2xFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQzlDO0lBQ0wsQ0FBQztJQUVPLFVBQVUsQ0FBQyxJQUF1QjtRQUN0QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNsRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sWUFBWTtRQUNoQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztRQUNsRCxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ2xELFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDakQsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQztRQUN2RCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxHQUFHLEVBQUU7WUFDdEMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztTQUN0RTthQUFNLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDLEtBQUssRUFBRTtZQUMvQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDO1NBQ2pEO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNyQyxDQUFDOzsyR0FyRGlCLGNBQWMsNENBV21DLGlCQUFpQjsrRkFYbEUsY0FBYzsyRkFBZCxjQUFjO2tCQURuQyxTQUFTOzswQkFZc0QsTUFBTTsyQkFBQyxpQkFBaUI7NENBVjNFLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5wdXQsIEVsZW1lbnRSZWYsIEluamVjdCwgVGVtcGxhdGVSZWYsIERpcmVjdGl2ZSwgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgR2FudHRJdGVtSW50ZXJuYWwsIEdhbnR0SXRlbVR5cGUgfSBmcm9tICcuL2NsYXNzJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IHJhbmdlSGVpZ2h0IH0gZnJvbSAnLi9nYW50dC5zdHlsZXMnO1xuaW1wb3J0IHsgR0FOVFRfVVBQRVJfVE9LRU4sIEdhbnR0VXBwZXIgfSBmcm9tICcuL2dhbnR0LXVwcGVyJztcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgR2FudHRJdGVtVXBwZXIgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBASW5wdXQoKSB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBJbnB1dCgpIGl0ZW06IEdhbnR0SXRlbUludGVybmFsO1xuXG4gICAgcHVibGljIGZpcnN0Q2hhbmdlID0gdHJ1ZTtcblxuICAgIHB1YmxpYyB1bnN1YnNjcmliZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgcHVibGljIHJlZnNVbnN1YnNjcmliZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LCBASW5qZWN0KEdBTlRUX1VQUEVSX1RPS0VOKSBwcm90ZWN0ZWQgZ2FudHRVcHBlcjogR2FudHRVcHBlcikge31cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmZpcnN0Q2hhbmdlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXRlbS5yZWZzJC5waXBlKHRha2VVbnRpbCh0aGlzLnJlZnNVbnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbnMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbUNoYW5nZShjaGFuZ2VzLml0ZW0uY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaXRlbUNoYW5nZShpdGVtOiBHYW50dEl0ZW1JbnRlcm5hbCkge1xuICAgICAgICB0aGlzLnJlZnNVbnN1YnNjcmliZSQubmV4dCgpO1xuICAgICAgICB0aGlzLnJlZnNVbnN1YnNjcmliZSQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5pdGVtID0gaXRlbTtcbiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbnMoKTtcbiAgICAgICAgdGhpcy5pdGVtLnJlZnMkLnBpcGUodGFrZVVudGlsKHRoaXMucmVmc1Vuc3Vic2NyaWJlJCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9ucygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFBvc2l0aW9ucygpIHtcbiAgICAgICAgY29uc3QgaXRlbUVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaXRlbUVsZW1lbnQuc3R5bGUubGVmdCA9IHRoaXMuaXRlbS5yZWZzPy54ICsgJ3B4JztcbiAgICAgICAgaXRlbUVsZW1lbnQuc3R5bGUudG9wID0gdGhpcy5pdGVtLnJlZnM/LnkgKyAncHgnO1xuICAgICAgICBpdGVtRWxlbWVudC5zdHlsZS53aWR0aCA9IHRoaXMuaXRlbS5yZWZzPy53aWR0aCArICdweCc7XG4gICAgICAgIGlmICh0aGlzLml0ZW0udHlwZSA9PT0gR2FudHRJdGVtVHlwZS5iYXIpIHtcbiAgICAgICAgICAgIGl0ZW1FbGVtZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuZ2FudHRVcHBlci5zdHlsZXMuYmFySGVpZ2h0ICsgJ3B4JztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLml0ZW0udHlwZSA9PT0gR2FudHRJdGVtVHlwZS5yYW5nZSkge1xuICAgICAgICAgICAgaXRlbUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gcmFuZ2VIZWlnaHQgKyAncHgnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUkLm5leHQoKTtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5yZWZzVW5zdWJzY3JpYmUkLm5leHQoKTtcbiAgICAgICAgdGhpcy5yZWZzVW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gICAgfVxufVxuIl19
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQtaXRlbS11cHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL2dhbnR0L3NyYy9nYW50dC1pdGVtLXVwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQWMsTUFBTSxFQUFlLFNBQVMsRUFBK0MsTUFBTSxlQUFlLENBQUM7QUFDL0gsT0FBTyxFQUFxQixhQUFhLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDM0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxpQkFBaUIsRUFBYyxNQUFNLGVBQWUsQ0FBQzs7O0FBRzlELE1BQU0sT0FBZ0IsY0FBYztJQVdoQyxZQUFzQixVQUFtQyxFQUF1QyxVQUFzQjtRQUFoRyxlQUFVLEdBQVYsVUFBVSxDQUF5QjtRQUF1QyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBTi9HLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBRW5CLGlCQUFZLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUVuQyxxQkFBZ0IsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBRTJFLENBQUM7SUFFMUgsUUFBUTtRQUNKLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2xFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQzlDO0lBQ0wsQ0FBQztJQUVPLFVBQVUsQ0FBQyxJQUF1QjtRQUN0QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2xFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxZQUFZO1FBQ2hCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO1FBQ2xELFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDbEQsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUNqRCxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ3ZELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDLEdBQUcsRUFBRTtZQUN0QyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1NBQ3RFO2FBQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxhQUFhLENBQUMsS0FBSyxFQUFFO1lBQy9DLFdBQVcsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFdBQVcsR0FBRyxJQUFJLENBQUM7U0FDakQ7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3JDLENBQUM7OzJHQXBEaUIsY0FBYyw0Q0FXbUMsaUJBQWlCOytGQVhsRSxjQUFjOzJGQUFkLGNBQWM7a0JBRG5DLFNBQVM7OzBCQVlzRCxNQUFNOzJCQUFDLGlCQUFpQjs0Q0FWM0UsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbnB1dCwgRWxlbWVudFJlZiwgSW5qZWN0LCBUZW1wbGF0ZVJlZiwgRGlyZWN0aXZlLCBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBHYW50dEl0ZW1JbnRlcm5hbCwgR2FudHRJdGVtVHlwZSB9IGZyb20gJy4vY2xhc3MnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgcmFuZ2VIZWlnaHQgfSBmcm9tICcuL2dhbnR0LnN0eWxlcyc7XG5pbXBvcnQgeyBHQU5UVF9VUFBFUl9UT0tFTiwgR2FudHRVcHBlciB9IGZyb20gJy4vZ2FudHQtdXBwZXInO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBHYW50dEl0ZW1VcHBlciBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIEBJbnB1dCgpIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQElucHV0KCkgaXRlbTogR2FudHRJdGVtSW50ZXJuYWw7XG5cbiAgICBwdWJsaWMgZmlyc3RDaGFuZ2UgPSB0cnVlO1xuXG4gICAgcHVibGljIHVuc3Vic2NyaWJlJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBwdWJsaWMgcmVmc1Vuc3Vic2NyaWJlJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sIEBJbmplY3QoR0FOVFRfVVBQRVJfVE9LRU4pIHByb3RlY3RlZCBnYW50dFVwcGVyOiBHYW50dFVwcGVyKSB7fVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuZmlyc3RDaGFuZ2UgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pdGVtLnJlZnMkLnBpcGUodGFrZVVudGlsKHRoaXMucmVmc1Vuc3Vic2NyaWJlJCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9ucygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5maXJzdENoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5pdGVtQ2hhbmdlKGNoYW5nZXMuaXRlbS5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpdGVtQ2hhbmdlKGl0ZW06IEdhbnR0SXRlbUludGVybmFsKSB7XG4gICAgICAgIHRoaXMucmVmc1Vuc3Vic2NyaWJlJC5uZXh0KCk7XG4gICAgICAgIHRoaXMucmVmc1Vuc3Vic2NyaWJlJC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLml0ZW0gPSBpdGVtO1xuICAgICAgICB0aGlzLml0ZW0ucmVmcyQucGlwZSh0YWtlVW50aWwodGhpcy5yZWZzVW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb25zKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0UG9zaXRpb25zKCkge1xuICAgICAgICBjb25zdCBpdGVtRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpdGVtRWxlbWVudC5zdHlsZS5sZWZ0ID0gdGhpcy5pdGVtLnJlZnM/LnggKyAncHgnO1xuICAgICAgICBpdGVtRWxlbWVudC5zdHlsZS50b3AgPSB0aGlzLml0ZW0ucmVmcz8ueSArICdweCc7XG4gICAgICAgIGl0ZW1FbGVtZW50LnN0eWxlLndpZHRoID0gdGhpcy5pdGVtLnJlZnM/LndpZHRoICsgJ3B4JztcbiAgICAgICAgaWYgKHRoaXMuaXRlbS50eXBlID09PSBHYW50dEl0ZW1UeXBlLmJhcikge1xuICAgICAgICAgICAgaXRlbUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy5nYW50dFVwcGVyLnN0eWxlcy5iYXJIZWlnaHQgKyAncHgnO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbS50eXBlID09PSBHYW50dEl0ZW1UeXBlLnJhbmdlKSB7XG4gICAgICAgICAgICBpdGVtRWxlbWVudC5zdHlsZS5oZWlnaHQgPSByYW5nZUhlaWdodCArICdweCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSQubmV4dCgpO1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlJC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLnJlZnNVbnN1YnNjcmliZSQubmV4dCgpO1xuICAgICAgICB0aGlzLnJlZnNVbnN1YnNjcmliZSQuY29tcGxldGUoKTtcbiAgICB9XG59XG4iXX0=