@worktile/gantt 15.1.0-next.8 → 15.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/class/event.d.ts +8 -0
  2. package/class/link.d.ts +1 -1
  3. package/components/bar/bar-drag.d.ts +11 -1
  4. package/components/bar/bar.component.scss +2 -2
  5. package/components/links/links.component.d.ts +2 -2
  6. package/components/main/gantt-main.component.d.ts +3 -3
  7. package/components/table/body/gantt-table-body.component.d.ts +8 -6
  8. package/esm2020/class/event.mjs +5 -1
  9. package/esm2020/class/link.mjs +2 -2
  10. package/esm2020/components/bar/bar-drag.mjs +110 -40
  11. package/esm2020/components/bar/bar.component.mjs +5 -2
  12. package/esm2020/components/links/links.component.mjs +5 -5
  13. package/esm2020/components/main/gantt-main.component.mjs +5 -5
  14. package/esm2020/components/table/body/gantt-table-body.component.mjs +32 -18
  15. package/esm2020/gantt.component.mjs +46 -28
  16. package/esm2020/gantt.module.mjs +1 -7
  17. package/esm2020/gantt.styles.mjs +2 -2
  18. package/esm2020/table/gantt-table.component.mjs +8 -2
  19. package/esm2020/utils/drag-scroll.mjs +20 -1
  20. package/fesm2015/worktile-gantt.mjs +232 -101
  21. package/fesm2015/worktile-gantt.mjs.map +1 -1
  22. package/fesm2020/worktile-gantt.mjs +229 -100
  23. package/fesm2020/worktile-gantt.mjs.map +1 -1
  24. package/gantt.component.d.ts +7 -6
  25. package/gantt.component.scss +13 -0
  26. package/gantt.styles.d.ts +1 -1
  27. package/package.json +1 -1
  28. package/styles/variables.scss +3 -2
  29. package/table/gantt-table.component.d.ts +4 -2
  30. package/utils/drag-scroll.d.ts +7 -0
  31. package/components/calendar/calendar.component.scss +0 -79
  32. package/components/table/gantt-table.component.scss +0 -237
@@ -17,7 +17,7 @@ export class GanttLinksComponent {
17
17
  this.ngZone = ngZone;
18
18
  // @Input() groups: GanttGroupInternal[] = [];
19
19
  // @Input() items: GanttItemInternal[] = [];
20
- this.flatData = [];
20
+ this.flatItems = [];
21
21
  this.lineClick = new EventEmitter();
22
22
  this.links = [];
23
23
  this.ganttLinkTypes = GanttLinkType;
@@ -94,7 +94,7 @@ export class GanttLinksComponent {
94
94
  // });
95
95
  // });
96
96
  // }
97
- this.flatData.forEach((item, itemIndex) => {
97
+ this.flatItems.forEach((item, itemIndex) => {
98
98
  if (!item.hasOwnProperty('items')) {
99
99
  const ganttItem = item;
100
100
  if (ganttItem.refs) {
@@ -178,14 +178,14 @@ export class GanttLinksComponent {
178
178
  }
179
179
  }
180
180
  GanttLinksComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: GanttLinksComponent, deps: [{ token: GANTT_UPPER_TOKEN }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.GanttDragContainer }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
181
- GanttLinksComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", type: GanttLinksComponent, selector: "gantt-links-overlay", inputs: { flatData: "flatData" }, outputs: { lineClick: "lineClick" }, host: { properties: { "class.gantt-links-overlay": "this.ganttLinksOverlay" } }, usesOnChanges: true, ngImport: i0, template: "<svg [attr.width]=\"ganttUpper.view.width\" class=\"gantt-links-overlay-main\">\n <ng-container *ngFor=\"let link of links; let i = index; trackBy: trackBy\">\n <path\n [attr.d]=\"link.path\"\n fill=\"transparent\"\n stroke-width=\"2\"\n [attr.stroke]=\"link.color\"\n pointer-events=\"none\"\n [attr.style]=\"link.type === ganttLinkTypes.sf ? 'marker-start: url(#triangle' + i + ')' : 'marker-end: url(#triangle' + i + ')'\"\n ></path>\n\n <g>\n <path\n class=\"link-line\"\n (click)=\"onLineClick($event, link)\"\n [attr.d]=\"link.path\"\n (mouseenter)=\"mouseEnterPath(link, i)\"\n (mouseleave)=\"mouseLeavePath(link)\"\n stroke=\"transparent\"\n stroke-width=\"9\"\n fill=\"none\"\n cursor=\"pointer\"\n ></path>\n </g>\n <defs *ngIf=\"showArrow\">\n <marker\n *ngIf=\"link.type === ganttLinkTypes.sf; else markerEnd\"\n [id]=\"'triangle' + i\"\n markerUnits=\"strokeWidth\"\n markerWidth=\"5\"\n markerHeight=\"4\"\n refX=\"5\"\n refY=\"2\"\n orient=\"180\"\n >\n <path [attr.fill]=\"link.color\" [attr.stroke]=\"link.color\" d=\"M 0 0 L 5 2 L 0 4 z\" />\n </marker>\n\n <ng-template #markerEnd>\n <marker [id]=\"'triangle' + i\" markerUnits=\"strokeWidth\" markerWidth=\"5\" markerHeight=\"4\" refX=\"5\" refY=\"2\" orient=\"auto\">\n <path [attr.fill]=\"link.color\" [attr.stroke]=\"link.color\" d=\"M 0 0 L 5 2 L 0 4 z\" />\n </marker>\n </ng-template>\n </defs>\n </ng-container>\n <line class=\"link-dragging-line\"></line>\n</svg>\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
181
+ GanttLinksComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", type: GanttLinksComponent, selector: "gantt-links-overlay", inputs: { flatItems: "flatItems" }, outputs: { lineClick: "lineClick" }, host: { properties: { "class.gantt-links-overlay": "this.ganttLinksOverlay" } }, usesOnChanges: true, ngImport: i0, template: "<svg [attr.width]=\"ganttUpper.view.width\" class=\"gantt-links-overlay-main\">\n <ng-container *ngFor=\"let link of links; let i = index; trackBy: trackBy\">\n <path\n [attr.d]=\"link.path\"\n fill=\"transparent\"\n stroke-width=\"2\"\n [attr.stroke]=\"link.color\"\n pointer-events=\"none\"\n [attr.style]=\"link.type === ganttLinkTypes.sf ? 'marker-start: url(#triangle' + i + ')' : 'marker-end: url(#triangle' + i + ')'\"\n ></path>\n\n <g>\n <path\n class=\"link-line\"\n (click)=\"onLineClick($event, link)\"\n [attr.d]=\"link.path\"\n (mouseenter)=\"mouseEnterPath(link, i)\"\n (mouseleave)=\"mouseLeavePath(link)\"\n stroke=\"transparent\"\n stroke-width=\"9\"\n fill=\"none\"\n cursor=\"pointer\"\n ></path>\n </g>\n <defs *ngIf=\"showArrow\">\n <marker\n *ngIf=\"link.type === ganttLinkTypes.sf; else markerEnd\"\n [id]=\"'triangle' + i\"\n markerUnits=\"strokeWidth\"\n markerWidth=\"5\"\n markerHeight=\"4\"\n refX=\"5\"\n refY=\"2\"\n orient=\"180\"\n >\n <path [attr.fill]=\"link.color\" [attr.stroke]=\"link.color\" d=\"M 0 0 L 5 2 L 0 4 z\" />\n </marker>\n\n <ng-template #markerEnd>\n <marker [id]=\"'triangle' + i\" markerUnits=\"strokeWidth\" markerWidth=\"5\" markerHeight=\"4\" refX=\"5\" refY=\"2\" orient=\"auto\">\n <path [attr.fill]=\"link.color\" [attr.stroke]=\"link.color\" d=\"M 0 0 L 5 2 L 0 4 z\" />\n </marker>\n </ng-template>\n </defs>\n </ng-container>\n <line class=\"link-dragging-line\"></line>\n</svg>\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
182
182
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: GanttLinksComponent, decorators: [{
183
183
  type: Component,
184
184
  args: [{ selector: 'gantt-links-overlay', template: "<svg [attr.width]=\"ganttUpper.view.width\" class=\"gantt-links-overlay-main\">\n <ng-container *ngFor=\"let link of links; let i = index; trackBy: trackBy\">\n <path\n [attr.d]=\"link.path\"\n fill=\"transparent\"\n stroke-width=\"2\"\n [attr.stroke]=\"link.color\"\n pointer-events=\"none\"\n [attr.style]=\"link.type === ganttLinkTypes.sf ? 'marker-start: url(#triangle' + i + ')' : 'marker-end: url(#triangle' + i + ')'\"\n ></path>\n\n <g>\n <path\n class=\"link-line\"\n (click)=\"onLineClick($event, link)\"\n [attr.d]=\"link.path\"\n (mouseenter)=\"mouseEnterPath(link, i)\"\n (mouseleave)=\"mouseLeavePath(link)\"\n stroke=\"transparent\"\n stroke-width=\"9\"\n fill=\"none\"\n cursor=\"pointer\"\n ></path>\n </g>\n <defs *ngIf=\"showArrow\">\n <marker\n *ngIf=\"link.type === ganttLinkTypes.sf; else markerEnd\"\n [id]=\"'triangle' + i\"\n markerUnits=\"strokeWidth\"\n markerWidth=\"5\"\n markerHeight=\"4\"\n refX=\"5\"\n refY=\"2\"\n orient=\"180\"\n >\n <path [attr.fill]=\"link.color\" [attr.stroke]=\"link.color\" d=\"M 0 0 L 5 2 L 0 4 z\" />\n </marker>\n\n <ng-template #markerEnd>\n <marker [id]=\"'triangle' + i\" markerUnits=\"strokeWidth\" markerWidth=\"5\" markerHeight=\"4\" refX=\"5\" refY=\"2\" orient=\"auto\">\n <path [attr.fill]=\"link.color\" [attr.stroke]=\"link.color\" d=\"M 0 0 L 5 2 L 0 4 z\" />\n </marker>\n </ng-template>\n </defs>\n </ng-container>\n <line class=\"link-dragging-line\"></line>\n</svg>\n" }]
185
185
  }], ctorParameters: function () { return [{ type: i3.GanttUpper, decorators: [{
186
186
  type: Inject,
187
187
  args: [GANTT_UPPER_TOKEN]
188
- }] }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1.GanttDragContainer }, { type: i0.NgZone }]; }, propDecorators: { flatData: [{
188
+ }] }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1.GanttDragContainer }, { type: i0.NgZone }]; }, propDecorators: { flatItems: [{
189
189
  type: Input
190
190
  }], lineClick: [{
191
191
  type: Output
@@ -193,4 +193,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImpor
193
193
  type: HostBinding,
194
194
  args: ['class.gantt-links-overlay']
195
195
  }] } });
196
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlua3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2FudHQvc3JjL2NvbXBvbmVudHMvbGlua3MvbGlua3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2FudHQvc3JjL2NvbXBvbmVudHMvbGlua3MvbGlua3MuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixXQUFXLEVBQ1gsTUFBTSxFQU1ULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBUyxLQUFLLEVBQUUsS0FBSyxFQUFhLE9BQU8sRUFBUyxNQUFNLE1BQU0sQ0FBQztBQUN0RSxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBS2hGLE9BQU8sRUFBRSxpQkFBaUIsRUFBYyxNQUFNLG1CQUFtQixDQUFDO0FBQ2xFLE9BQU8sRUFBK0IsVUFBVSxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTFGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7OztBQU10RCxNQUFNLE9BQU8sbUJBQW1CO0lBeUI1QixZQUNzQyxVQUFzQixFQUNoRCxHQUFzQixFQUN0QixVQUFzQixFQUN0QixrQkFBc0MsRUFDdEMsTUFBYztRQUpZLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDaEQsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0Qix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLFdBQU0sR0FBTixNQUFNLENBQVE7UUE3QjFCLDhDQUE4QztRQUU5Qyw0Q0FBNEM7UUFFbkMsYUFBUSxHQUErQyxFQUFFLENBQUM7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SSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDekI7SUFDTCxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQWtCO1FBQzdCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztJQUNuQyxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNqQyxDQUFDOztnSEExTVEsbUJBQW1CLGtCQTBCaEIsaUJBQWlCO29HQTFCcEIsbUJBQW1CLHdPQzdCaEMsZ3BEQStDQTsyRkRsQmEsbUJBQW1CO2tCQUovQixTQUFTOytCQUNJLHFCQUFxQjs7MEJBNkIxQixNQUFNOzJCQUFDLGlCQUFpQjsySkFyQnBCLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUksU0FBUztzQkFBbEIsTUFBTTtnQkFnQm1DLGlCQUFpQjtzQkFBMUQsV0FBVzt1QkFBQywyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBPbkluaXQsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbmplY3QsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25DaGFuZ2VzLFxuICAgIE5nWm9uZVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGVtcHR5LCBFTVBUWSwgbWVyZ2UsIE5FVkVSLCBvZiwgU3ViamVjdCwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCwgc2tpcCwgZGVib3VuY2VUaW1lLCBzd2l0Y2hNYXAsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBHYW50dEdyb3VwSW50ZXJuYWwgfSBmcm9tICcuLi8uLi9jbGFzcy9ncm91cCc7XG5pbXBvcnQgeyBHYW50dEl0ZW1JbnRlcm5hbCB9IGZyb20gJy4vLi4vLi4vY2xhc3MvaXRlbSc7XG5pbXBvcnQgeyBHYW50dExpbmVDbGlja0V2ZW50IH0gZnJvbSAnLi4vLi4vY2xhc3MvZXZlbnQnO1xuaW1wb3J0IHsgR2FudHREcmFnQ29udGFpbmVyIH0gZnJvbSAnLi4vLi4vZ2FudHQtZHJhZy1jb250YWluZXInO1xuaW1wb3J0IHsgR0FOVFRfVVBQRVJfVE9LRU4sIEdhbnR0VXBwZXIgfSBmcm9tICcuLi8uLi9nYW50dC11cHBlcic7XG5pbXBvcnQgeyBHYW50dExpbmtJdGVtLCBMaW5rSW50ZXJuYWwsIExpbmtDb2xvcnMsIEdhbnR0TGlua1R5cGUgfSBmcm9tICcuLi8uLi9jbGFzcy9saW5rJztcbmltcG9ydCB7IEdhbnR0TGlua0xpbmUgfSBmcm9tICcuL2xpbmVzL2xpbmUnO1xuaW1wb3J0IHsgY3JlYXRlTGluZUdlbmVyYXRvciB9IGZyb20gJy4vbGluZXMvZmFjdG9yeSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZ2FudHQtbGlua3Mtb3ZlcmxheScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2xpbmtzLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBHYW50dExpbmtzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gICAgLy8gQElucHV0KCkgZ3JvdXBzOiBHYW50dEdyb3VwSW50ZXJuYWxbXSA9IFtdO1xuXG4gICAgLy8gQElucHV0KCkgaXRlbXM6IEdhbnR0SXRlbUludGVybmFsW10gPSBbXTtcblxuICAgIEBJbnB1dCgpIGZsYXREYXRhOiAoR2FudHRHcm91cEludGVybmFsIHwgR2FudHRJdGVtSW50ZXJuYWwpW10gPSBbXTtcblxuICAgIEBPdXRwdXQoKSBsaW5lQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEdhbnR0TGluZUNsaWNrRXZlbnQ+KCk7XG5cbiAgICBwdWJsaWMgbGlua3M6IExpbmtJbnRlcm5hbFtdID0gW107XG5cbiAgICBwdWJsaWMgZ2FudHRMaW5rVHlwZXMgPSBHYW50dExpbmtUeXBlO1xuXG4gICAgcHVibGljIHNob3dBcnJvdyA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBsaW5rSXRlbXM6IEdhbnR0TGlua0l0ZW1bXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSBmaXJzdENoYW5nZSA9IHRydWU7XG5cbiAgICBwcml2YXRlIGxpbmtMaW5lOiBHYW50dExpbmtMaW5lO1xuXG4gICAgcHJpdmF0ZSB1bnN1YnNjcmliZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5nYW50dC1saW5rcy1vdmVybGF5JykgZ2FudHRMaW5rc092ZXJsYXkgPSB0cnVlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoR0FOVFRfVVBQRVJfVE9LRU4pIHB1YmxpYyBnYW50dFVwcGVyOiBHYW50dFVwcGVyLFxuICAgICAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBnYW50dERyYWdDb250YWluZXI6IEdhbnR0RHJhZ0NvbnRhaW5lcixcbiAgICAgICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZVxuICAgICkge31cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmxpbmtMaW5lID0gY3JlYXRlTGluZUdlbmVyYXRvcih0aGlzLmdhbnR0VXBwZXIubGlua09wdGlvbnMubGluZVR5cGUsIHRoaXMuZ2FudHRVcHBlcik7XG5cbiAgICAgICAgdGhpcy5zaG93QXJyb3cgPSB0aGlzLmdhbnR0VXBwZXIubGlua09wdGlvbnMuc2hvd0Fycm93O1xuICAgICAgICAvLyB0aGlzLmJ1aWxkTGlua3MoKTtcbiAgICAgICAgdGhpcy5maXJzdENoYW5nZSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuYnVpbGRMaW5rcygpO1xuXG4gICAgICAgIHRoaXMuZ2FudHREcmFnQ29udGFpbmVyLmRyYWdTdGFydGVkLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbWVyZ2UoXG4gICAgICAgICAgICB0aGlzLmdhbnR0VXBwZXIudmlld0NoYW5nZSxcbiAgICAgICAgICAgIHRoaXMuZ2FudHRVcHBlci5leHBhbmRDaGFuZ2UsXG4gICAgICAgICAgICB0aGlzLmdhbnR0VXBwZXIudmlldy5zdGFydCQsXG4gICAgICAgICAgICB0aGlzLmdhbnR0VXBwZXIuZHJhZ0VuZGVkLFxuICAgICAgICAgICAgdGhpcy5nYW50dFVwcGVyLmxpbmtEcmFnRW5kZWQsXG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZS5waXBlKHRha2UoMSkpLnBpcGUoc3dpdGNoTWFwKCgpID0+IHRoaXMuZ2FudHRVcHBlci50YWJsZT8uZHJhZ0Ryb3BwZWQgfHwgRU1QVFkpKVxuICAgICAgICApXG4gICAgICAgICAgICAucGlwZShza2lwKDEpLCBkZWJvdW5jZVRpbWUoMCksIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnO1xuICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRMaW5rcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKCkge1xuICAgICAgICBpZiAoIXRoaXMuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRMaW5rcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb21wdXRlSXRlbVBvc2l0aW9uKCkge1xuICAgICAgICBjb25zdCBsaW5lSGVpZ2h0ID0gdGhpcy5nYW50dFVwcGVyLnN0eWxlcy5saW5lSGVpZ2h0O1xuICAgICAgICBjb25zdCBiYXJIZWlnaHQgPSB0aGlzLmdhbnR0VXBwZXIuc3R5bGVzLmJhckhlaWdodDtcbiAgICAgICAgdGhpcy5saW5rSXRlbXMgPSBbXTtcbiAgICAgICAgLy8gaWYgKHRoaXMuZ3JvdXBzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gICAgIGxldCBpdGVtTnVtID0gMDtcbiAgICAgICAgLy8gICAgIGxldCBncm91cE51bSA9IDA7XG4gICAgICAgIC8vICAgICB0aGlzLmdyb3Vwcy5mb3JFYWNoKChncm91cCkgPT4ge1xuICAgICAgICAvLyAgICAgICAgIGdyb3VwTnVtKys7XG4gICAgICAgIC8vICAgICAgICAgaWYgKGdyb3VwLmV4cGFuZGVkKSB7XG4gICAgICAgIC8vICAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gcmVjdXJzaXZlSXRlbXMoZ3JvdXAuaXRlbXMpO1xuICAgICAgICAvLyAgICAgICAgICAgICBpdGVtcy5mb3JFYWNoKChpdGVtLCBpdGVtSW5kZXgpID0+IHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIGNvbnN0IHkgPSAoZ3JvdXBOdW0gKyBpdGVtTnVtICsgaXRlbUluZGV4KSAqIGxpbmVIZWlnaHQgKyBpdGVtLnJlZnMueSArIGJhckhlaWdodCAvIDI7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB0aGlzLmxpbmtJdGVtcy5wdXNoKHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIGJlZm9yZToge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB4OiBpdGVtLnJlZnMueCxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgeVxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgYWZ0ZXI6IHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgeDogaXRlbS5yZWZzLnggKyBpdGVtLnJlZnMud2lkdGgsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHlcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgLy8gICAgICAgICAgICAgfSk7XG4gICAgICAgIC8vICAgICAgICAgICAgIGl0ZW1OdW0gKz0gaXRlbXMubGVuZ3RoO1xuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgIH0pO1xuICAgICAgICAvLyB9IGVsc2Uge1xuICAgICAgICAvLyAgICAgY29uc3QgaXRlbXMgPSByZWN1cnNpdmVJdGVtcyh0aGlzLml0ZW1zKTtcbiAgICAgICAgLy8gICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0sIGl0ZW1JbmRleCkgPT4ge1xuICAgICAgICAvLyAgICAgICAgIGNvbnN0IHkgPSBpdGVtSW5kZXggKiBsaW5lSGVpZ2h0ICsgaXRlbS5yZWZzLnkgKyBiYXJIZWlnaHQgLyAyO1xuICAgICAgICAvLyAgICAgICAgIHRoaXMubGlua0l0ZW1zLnB1c2goe1xuICAgICAgICAvLyAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAvLyAgICAgICAgICAgICBiZWZvcmU6IHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIHg6IGl0ZW0ucmVmcy54LFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgeVxuICAgICAgICAvLyAgICAgICAgICAgICB9LFxuICAgICAgICAvLyAgICAgICAgICAgICBhZnRlcjoge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgeDogaXRlbS5yZWZzLnggKyBpdGVtLnJlZnMud2lkdGgsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB5XG4gICAgICAgIC8vICAgICAgICAgICAgIH1cbiAgICAgICAgLy8gICAgICAgICB9KTtcbiAgICAgICAgLy8gICAgIH0pO1xuICAgICAgICAvLyB9XG5cbiAgICAgICAgdGhpcy5mbGF0RGF0YS5mb3JFYWNoKChpdGVtLCBpdGVtSW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmICghaXRlbS5oYXNPd25Qcm9wZXJ0eSgnaXRlbXMnKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdhbnR0SXRlbSA9IGl0ZW0gYXMgR2FudHRJdGVtSW50ZXJuYWw7XG4gICAgICAgICAgICAgICAgaWYgKGdhbnR0SXRlbS5yZWZzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHkgPSBpdGVtSW5kZXggKiBsaW5lSGVpZ2h0ICsgZ2FudHRJdGVtLnJlZnMueSArIGJhckhlaWdodCAvIDI7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGlua0l0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uZ2FudHRJdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogZ2FudHRJdGVtLnJlZnMueCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiBnYW50dEl0ZW0ucmVmcy54ICsgZ2FudHRJdGVtLnJlZnMud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGJ1aWxkTGlua3MoKSB7XG4gICAgICAgIHRoaXMuY29tcHV0ZUl0ZW1Qb3NpdGlvbigpO1xuICAgICAgICB0aGlzLmxpbmtzID0gW107XG4gICAgICAgIHRoaXMubGlua0l0ZW1zLmZvckVhY2goKHNvdXJjZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHNvdXJjZS5vcmlnaW4uc3RhcnQgfHwgc291cmNlLm9yaWdpbi5lbmQpIHtcbiAgICAgICAgICAgICAgICBzb3VyY2UubGlua3MuZm9yRWFjaCgobGluaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmxpbmtJdGVtcy5maW5kKChpdGVtKSA9PiBpdGVtLmlkID09PSBsaW5rLmxpbmspO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ICYmICh0YXJnZXQub3JpZ2luLnN0YXJ0IHx8IHRhcmdldC5vcmlnaW4uZW5kKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRlZmF1bHRDb2xvcjogc3RyaW5nID0gTGlua0NvbG9ycy5kZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFjdGl2ZUNvbG9yOiBzdHJpbmcgPSBMaW5rQ29sb3JzLmFjdGl2ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmsudHlwZSA9PT0gR2FudHRMaW5rVHlwZS5mcyAmJiBzb3VyY2UuZW5kLmdldFRpbWUoKSA+IHRhcmdldC5zdGFydC5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sb3IgPSBMaW5rQ29sb3JzLmJsb2NrZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlQ29sb3IgPSBMaW5rQ29sb3JzLmJsb2NrZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGluay5jb2xvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbGluay5jb2xvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbG9yID0gbGluay5jb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlQ29sb3IgPSBsaW5rLmNvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDb2xvciA9IGxpbmsuY29sb3IuZGVmYXVsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlQ29sb3IgPSBsaW5rLmNvbG9yLmFjdGl2ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGlua3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogdGhpcy5saW5rTGluZS5nZW5lcmF0ZVBhdGgoc291cmNlLCB0YXJnZXQsIGxpbmsudHlwZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlOiBzb3VyY2Uub3JpZ2luLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0Lm9yaWdpbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBsaW5rLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGRlZmF1bHRDb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlQ29sb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRyYWNrQnkoaW5kZXg6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuXG4gICAgb25MaW5lQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQsIGxpbms6IExpbmtJbnRlcm5hbCkge1xuICAgICAgICB0aGlzLmxpbmVDbGljay5lbWl0KHtcbiAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgc291cmNlOiBsaW5rLnNvdXJjZSxcbiAgICAgICAgICAgIHRhcmdldDogbGluay50YXJnZXRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbW91c2VFbnRlclBhdGgobGluazogTGlua0ludGVybmFsLCBpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGxpbmsuY29sb3IgPSBsaW5rLmFjdGl2ZUNvbG9yIHx8IGxpbmsuZGVmYXVsdENvbG9yO1xuICAgICAgICBpZiAoaW5kZXggPCB0aGlzLmxpbmtzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIHRoaXMubGlua3Muc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIHRoaXMubGlua3MucHVzaChsaW5rKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG1vdXNlTGVhdmVQYXRoKGxpbms6IExpbmtJbnRlcm5hbCkge1xuICAgICAgICBsaW5rLmNvbG9yID0gbGluay5kZWZhdWx0Q29sb3I7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUkLm5leHQoKTtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSQuY29tcGxldGUoKTtcbiAgICB9XG59XG4iLCI8c3ZnIFthdHRyLndpZHRoXT1cImdhbnR0VXBwZXIudmlldy53aWR0aFwiIGNsYXNzPVwiZ2FudHQtbGlua3Mtb3ZlcmxheS1tYWluXCI+XG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGxpbmsgb2YgbGlua3M7IGxldCBpID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlcIj5cbiAgICA8cGF0aFxuICAgICAgW2F0dHIuZF09XCJsaW5rLnBhdGhcIlxuICAgICAgZmlsbD1cInRyYW5zcGFyZW50XCJcbiAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgW2F0dHIuc3Ryb2tlXT1cImxpbmsuY29sb3JcIlxuICAgICAgcG9pbnRlci1ldmVudHM9XCJub25lXCJcbiAgICAgIFthdHRyLnN0eWxlXT1cImxpbmsudHlwZSA9PT0gZ2FudHRMaW5rVHlwZXMuc2YgPyAnbWFya2VyLXN0YXJ0OiB1cmwoI3RyaWFuZ2xlJyArIGkgKyAnKScgOiAnbWFya2VyLWVuZDogdXJsKCN0cmlhbmdsZScgKyBpICsgJyknXCJcbiAgICA+PC9wYXRoPlxuXG4gICAgPGc+XG4gICAgICA8cGF0aFxuICAgICAgICBjbGFzcz1cImxpbmstbGluZVwiXG4gICAgICAgIChjbGljayk9XCJvbkxpbmVDbGljaygkZXZlbnQsIGxpbmspXCJcbiAgICAgICAgW2F0dHIuZF09XCJsaW5rLnBhdGhcIlxuICAgICAgICAobW91c2VlbnRlcik9XCJtb3VzZUVudGVyUGF0aChsaW5rLCBpKVwiXG4gICAgICAgIChtb3VzZWxlYXZlKT1cIm1vdXNlTGVhdmVQYXRoKGxpbmspXCJcbiAgICAgICAgc3Ryb2tlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICBzdHJva2Utd2lkdGg9XCI5XCJcbiAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICBjdXJzb3I9XCJwb2ludGVyXCJcbiAgICAgID48L3BhdGg+XG4gICAgPC9nPlxuICAgIDxkZWZzICpuZ0lmPVwic2hvd0Fycm93XCI+XG4gICAgICA8bWFya2VyXG4gICAgICAgICpuZ0lmPVwibGluay50eXBlID09PSBnYW50dExpbmtUeXBlcy5zZjsgZWxzZSBtYXJrZXJFbmRcIlxuICAgICAgICBbaWRdPVwiJ3RyaWFuZ2xlJyArIGlcIlxuICAgICAgICBtYXJrZXJVbml0cz1cInN0cm9rZVdpZHRoXCJcbiAgICAgICAgbWFya2VyV2lkdGg9XCI1XCJcbiAgICAgICAgbWFya2VySGVpZ2h0PVwiNFwiXG4gICAgICAgIHJlZlg9XCI1XCJcbiAgICAgICAgcmVmWT1cIjJcIlxuICAgICAgICBvcmllbnQ9XCIxODBcIlxuICAgICAgPlxuICAgICAgICA8cGF0aCBbYXR0ci5maWxsXT1cImxpbmsuY29sb3JcIiBbYXR0ci5zdHJva2VdPVwibGluay5jb2xvclwiIGQ9XCJNIDAgMCBMIDUgMiBMIDAgNCB6XCIgLz5cbiAgICAgIDwvbWFya2VyPlxuXG4gICAgICA8bmctdGVtcGxhdGUgI21hcmtlckVuZD5cbiAgICAgICAgPG1hcmtlciBbaWRdPVwiJ3RyaWFuZ2xlJyArIGlcIiBtYXJrZXJVbml0cz1cInN0cm9rZVdpZHRoXCIgbWFya2VyV2lkdGg9XCI1XCIgbWFya2VySGVpZ2h0PVwiNFwiIHJlZlg9XCI1XCIgcmVmWT1cIjJcIiBvcmllbnQ9XCJhdXRvXCI+XG4gICAgICAgICAgPHBhdGggW2F0dHIuZmlsbF09XCJsaW5rLmNvbG9yXCIgW2F0dHIuc3Ryb2tlXT1cImxpbmsuY29sb3JcIiBkPVwiTSAwIDAgTCA1IDIgTCAwIDQgelwiIC8+XG4gICAgICAgIDwvbWFya2VyPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2RlZnM+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bGluZSBjbGFzcz1cImxpbmstZHJhZ2dpbmctbGluZVwiPjwvbGluZT5cbjwvc3ZnPlxuIl19
196
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlua3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2FudHQvc3JjL2NvbXBvbmVudHMvbGlua3MvbGlua3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2FudHQvc3JjL2NvbXBvbmVudHMvbGlua3MvbGlua3MuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixXQUFXLEVBQ1gsTUFBTSxFQU1ULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBUyxLQUFLLEVBQUUsS0FBSyxFQUFhLE9BQU8sRUFBUyxNQUFNLE1BQU0sQ0FBQztBQUN0RSxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBS2hGLE9BQU8sRUFBRSxpQkFBaUIsRUFBYyxNQUFNLG1CQUFtQixDQUFDO0FBQ2xFLE9BQU8sRUFBK0IsVUFBVSxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTFGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7OztBQU10RCxNQUFNLE9BQU8sbUJBQW1CO0lBeUI1QixZQUNzQyxVQUFzQixFQUNoRCxHQUFzQixFQUN0QixVQUFzQixFQUN0QixrQkFBc0MsRUFDdEMsTUFBYztRQUpZLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDaEQsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0Qix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLFdBQU0sR0FBTixNQUFNLENBQVE7UUE3QjFCLDhDQUE4QztRQUU5Qyw0Q0FBNEM7UUFFbkMsY0FBUyxHQUErQyxFQUFFLENBQUM7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SSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDekI7SUFDTCxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQWtCO1FBQzdCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztJQUNuQyxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNqQyxDQUFDOztnSEExTVEsbUJBQW1CLGtCQTBCaEIsaUJBQWlCO29HQTFCcEIsbUJBQW1CLDBPQzdCaEMsZ3BEQStDQTsyRkRsQmEsbUJBQW1CO2tCQUovQixTQUFTOytCQUNJLHFCQUFxQjs7MEJBNkIxQixNQUFNOzJCQUFDLGlCQUFpQjsySkFyQnBCLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUksU0FBUztzQkFBbEIsTUFBTTtnQkFnQm1DLGlCQUFpQjtzQkFBMUQsV0FBVzt1QkFBQywyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBPbkluaXQsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbmplY3QsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25DaGFuZ2VzLFxuICAgIE5nWm9uZVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGVtcHR5LCBFTVBUWSwgbWVyZ2UsIE5FVkVSLCBvZiwgU3ViamVjdCwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCwgc2tpcCwgZGVib3VuY2VUaW1lLCBzd2l0Y2hNYXAsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBHYW50dEdyb3VwSW50ZXJuYWwgfSBmcm9tICcuLi8uLi9jbGFzcy9ncm91cCc7XG5pbXBvcnQgeyBHYW50dEl0ZW1JbnRlcm5hbCB9IGZyb20gJy4vLi4vLi4vY2xhc3MvaXRlbSc7XG5pbXBvcnQgeyBHYW50dExpbmVDbGlja0V2ZW50IH0gZnJvbSAnLi4vLi4vY2xhc3MvZXZlbnQnO1xuaW1wb3J0IHsgR2FudHREcmFnQ29udGFpbmVyIH0gZnJvbSAnLi4vLi4vZ2FudHQtZHJhZy1jb250YWluZXInO1xuaW1wb3J0IHsgR0FOVFRfVVBQRVJfVE9LRU4sIEdhbnR0VXBwZXIgfSBmcm9tICcuLi8uLi9nYW50dC11cHBlcic7XG5pbXBvcnQgeyBHYW50dExpbmtJdGVtLCBMaW5rSW50ZXJuYWwsIExpbmtDb2xvcnMsIEdhbnR0TGlua1R5cGUgfSBmcm9tICcuLi8uLi9jbGFzcy9saW5rJztcbmltcG9ydCB7IEdhbnR0TGlua0xpbmUgfSBmcm9tICcuL2xpbmVzL2xpbmUnO1xuaW1wb3J0IHsgY3JlYXRlTGluZUdlbmVyYXRvciB9IGZyb20gJy4vbGluZXMvZmFjdG9yeSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZ2FudHQtbGlua3Mtb3ZlcmxheScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2xpbmtzLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBHYW50dExpbmtzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gICAgLy8gQElucHV0KCkgZ3JvdXBzOiBHYW50dEdyb3VwSW50ZXJuYWxbXSA9IFtdO1xuXG4gICAgLy8gQElucHV0KCkgaXRlbXM6IEdhbnR0SXRlbUludGVybmFsW10gPSBbXTtcblxuICAgIEBJbnB1dCgpIGZsYXRJdGVtczogKEdhbnR0R3JvdXBJbnRlcm5hbCB8IEdhbnR0SXRlbUludGVybmFsKVtdID0gW107XG5cbiAgICBAT3V0cHV0KCkgbGluZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHYW50dExpbmVDbGlja0V2ZW50PigpO1xuXG4gICAgcHVibGljIGxpbmtzOiBMaW5rSW50ZXJuYWxbXSA9IFtdO1xuXG4gICAgcHVibGljIGdhbnR0TGlua1R5cGVzID0gR2FudHRMaW5rVHlwZTtcblxuICAgIHB1YmxpYyBzaG93QXJyb3cgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgbGlua0l0ZW1zOiBHYW50dExpbmtJdGVtW10gPSBbXTtcblxuICAgIHByaXZhdGUgZmlyc3RDaGFuZ2UgPSB0cnVlO1xuXG4gICAgcHJpdmF0ZSBsaW5rTGluZTogR2FudHRMaW5rTGluZTtcblxuICAgIHByaXZhdGUgdW5zdWJzY3JpYmUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZ2FudHQtbGlua3Mtb3ZlcmxheScpIGdhbnR0TGlua3NPdmVybGF5ID0gdHJ1ZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KEdBTlRUX1VQUEVSX1RPS0VOKSBwdWJsaWMgZ2FudHRVcHBlcjogR2FudHRVcHBlcixcbiAgICAgICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgZ2FudHREcmFnQ29udGFpbmVyOiBHYW50dERyYWdDb250YWluZXIsXG4gICAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmVcbiAgICApIHt9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5saW5rTGluZSA9IGNyZWF0ZUxpbmVHZW5lcmF0b3IodGhpcy5nYW50dFVwcGVyLmxpbmtPcHRpb25zLmxpbmVUeXBlLCB0aGlzLmdhbnR0VXBwZXIpO1xuXG4gICAgICAgIHRoaXMuc2hvd0Fycm93ID0gdGhpcy5nYW50dFVwcGVyLmxpbmtPcHRpb25zLnNob3dBcnJvdztcbiAgICAgICAgLy8gdGhpcy5idWlsZExpbmtzKCk7XG4gICAgICAgIHRoaXMuZmlyc3RDaGFuZ2UgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmJ1aWxkTGlua3MoKTtcblxuICAgICAgICB0aGlzLmdhbnR0RHJhZ0NvbnRhaW5lci5kcmFnU3RhcnRlZC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIG1lcmdlKFxuICAgICAgICAgICAgdGhpcy5nYW50dFVwcGVyLnZpZXdDaGFuZ2UsXG4gICAgICAgICAgICB0aGlzLmdhbnR0VXBwZXIuZXhwYW5kQ2hhbmdlLFxuICAgICAgICAgICAgdGhpcy5nYW50dFVwcGVyLnZpZXcuc3RhcnQkLFxuICAgICAgICAgICAgdGhpcy5nYW50dFVwcGVyLmRyYWdFbmRlZCxcbiAgICAgICAgICAgIHRoaXMuZ2FudHRVcHBlci5saW5rRHJhZ0VuZGVkLFxuICAgICAgICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGUucGlwZSh0YWtlKDEpKS5waXBlKHN3aXRjaE1hcCgoKSA9PiB0aGlzLmdhbnR0VXBwZXIudGFibGU/LmRyYWdEcm9wcGVkIHx8IEVNUFRZKSlcbiAgICAgICAgKVxuICAgICAgICAgICAgLnBpcGUoc2tpcCgxKSwgZGVib3VuY2VUaW1lKDApLCB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkTGlua3MoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkTGlua3MoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY29tcHV0ZUl0ZW1Qb3NpdGlvbigpIHtcbiAgICAgICAgY29uc3QgbGluZUhlaWdodCA9IHRoaXMuZ2FudHRVcHBlci5zdHlsZXMubGluZUhlaWdodDtcbiAgICAgICAgY29uc3QgYmFySGVpZ2h0ID0gdGhpcy5nYW50dFVwcGVyLnN0eWxlcy5iYXJIZWlnaHQ7XG4gICAgICAgIHRoaXMubGlua0l0ZW1zID0gW107XG4gICAgICAgIC8vIGlmICh0aGlzLmdyb3Vwcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vICAgICBsZXQgaXRlbU51bSA9IDA7XG4gICAgICAgIC8vICAgICBsZXQgZ3JvdXBOdW0gPSAwO1xuICAgICAgICAvLyAgICAgdGhpcy5ncm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IHtcbiAgICAgICAgLy8gICAgICAgICBncm91cE51bSsrO1xuICAgICAgICAvLyAgICAgICAgIGlmIChncm91cC5leHBhbmRlZCkge1xuICAgICAgICAvLyAgICAgICAgICAgICBjb25zdCBpdGVtcyA9IHJlY3Vyc2l2ZUl0ZW1zKGdyb3VwLml0ZW1zKTtcbiAgICAgICAgLy8gICAgICAgICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbSwgaXRlbUluZGV4KSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICBjb25zdCB5ID0gKGdyb3VwTnVtICsgaXRlbU51bSArIGl0ZW1JbmRleCkgKiBsaW5lSGVpZ2h0ICsgaXRlbS5yZWZzLnkgKyBiYXJIZWlnaHQgLyAyO1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5saW5rSXRlbXMucHVzaCh7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBiZWZvcmU6IHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgeDogaXRlbS5yZWZzLngsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHlcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIGFmdGVyOiB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHg6IGl0ZW0ucmVmcy54ICsgaXRlbS5yZWZzLndpZHRoLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB5XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIC8vICAgICAgICAgICAgIH0pO1xuICAgICAgICAvLyAgICAgICAgICAgICBpdGVtTnVtICs9IGl0ZW1zLmxlbmd0aDtcbiAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgIC8vICAgICB9KTtcbiAgICAgICAgLy8gfSBlbHNlIHtcbiAgICAgICAgLy8gICAgIGNvbnN0IGl0ZW1zID0gcmVjdXJzaXZlSXRlbXModGhpcy5pdGVtcyk7XG4gICAgICAgIC8vICAgICBpdGVtcy5mb3JFYWNoKChpdGVtLCBpdGVtSW5kZXgpID0+IHtcbiAgICAgICAgLy8gICAgICAgICBjb25zdCB5ID0gaXRlbUluZGV4ICogbGluZUhlaWdodCArIGl0ZW0ucmVmcy55ICsgYmFySGVpZ2h0IC8gMjtcbiAgICAgICAgLy8gICAgICAgICB0aGlzLmxpbmtJdGVtcy5wdXNoKHtcbiAgICAgICAgLy8gICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgLy8gICAgICAgICAgICAgYmVmb3JlOiB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB4OiBpdGVtLnJlZnMueCxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIHlcbiAgICAgICAgLy8gICAgICAgICAgICAgfSxcbiAgICAgICAgLy8gICAgICAgICAgICAgYWZ0ZXI6IHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIHg6IGl0ZW0ucmVmcy54ICsgaXRlbS5yZWZzLndpZHRoLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgeVxuICAgICAgICAvLyAgICAgICAgICAgICB9XG4gICAgICAgIC8vICAgICAgICAgfSk7XG4gICAgICAgIC8vICAgICB9KTtcbiAgICAgICAgLy8gfVxuXG4gICAgICAgIHRoaXMuZmxhdEl0ZW1zLmZvckVhY2goKGl0ZW0sIGl0ZW1JbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFpdGVtLmhhc093blByb3BlcnR5KCdpdGVtcycpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ2FudHRJdGVtID0gaXRlbSBhcyBHYW50dEl0ZW1JbnRlcm5hbDtcbiAgICAgICAgICAgICAgICBpZiAoZ2FudHRJdGVtLnJlZnMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeSA9IGl0ZW1JbmRleCAqIGxpbmVIZWlnaHQgKyBnYW50dEl0ZW0ucmVmcy55ICsgYmFySGVpZ2h0IC8gMjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5rSXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5nYW50dEl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiBnYW50dEl0ZW0ucmVmcy54LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhZnRlcjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IGdhbnR0SXRlbS5yZWZzLnggKyBnYW50dEl0ZW0ucmVmcy53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYnVpbGRMaW5rcygpIHtcbiAgICAgICAgdGhpcy5jb21wdXRlSXRlbVBvc2l0aW9uKCk7XG4gICAgICAgIHRoaXMubGlua3MgPSBbXTtcbiAgICAgICAgdGhpcy5saW5rSXRlbXMuZm9yRWFjaCgoc291cmNlKSA9PiB7XG4gICAgICAgICAgICBpZiAoc291cmNlLm9yaWdpbi5zdGFydCB8fCBzb3VyY2Uub3JpZ2luLmVuZCkge1xuICAgICAgICAgICAgICAgIHNvdXJjZS5saW5rcy5mb3JFYWNoKChsaW5rKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMubGlua0l0ZW1zLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IGxpbmsubGluayk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgJiYgKHRhcmdldC5vcmlnaW4uc3RhcnQgfHwgdGFyZ2V0Lm9yaWdpbi5lbmQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGVmYXVsdENvbG9yOiBzdHJpbmcgPSBMaW5rQ29sb3JzLmRlZmF1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYWN0aXZlQ29sb3I6IHN0cmluZyA9IExpbmtDb2xvcnMuYWN0aXZlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGluay50eXBlID09PSBHYW50dExpbmtUeXBlLmZzICYmIHNvdXJjZS5lbmQuZ2V0VGltZSgpID4gdGFyZ2V0LnN0YXJ0LmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDb2xvciA9IExpbmtDb2xvcnMuYmxvY2tlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVDb2xvciA9IExpbmtDb2xvcnMuYmxvY2tlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaW5rLmNvbG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBsaW5rLmNvbG9yID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sb3IgPSBsaW5rLmNvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVDb2xvciA9IGxpbmsuY29sb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbG9yID0gbGluay5jb2xvci5kZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVDb2xvciA9IGxpbmsuY29sb3IuYWN0aXZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5rcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiB0aGlzLmxpbmtMaW5lLmdlbmVyYXRlUGF0aChzb3VyY2UsIHRhcmdldCwgbGluay50eXBlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IHNvdXJjZS5vcmlnaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXQub3JpZ2luLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGxpbmsudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogZGVmYXVsdENvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVDb2xvclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdHJhY2tCeShpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG5cbiAgICBvbkxpbmVDbGljayhldmVudDogTW91c2VFdmVudCwgbGluazogTGlua0ludGVybmFsKSB7XG4gICAgICAgIHRoaXMubGluZUNsaWNrLmVtaXQoe1xuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICBzb3VyY2U6IGxpbmsuc291cmNlLFxuICAgICAgICAgICAgdGFyZ2V0OiBsaW5rLnRhcmdldFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBtb3VzZUVudGVyUGF0aChsaW5rOiBMaW5rSW50ZXJuYWwsIGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgbGluay5jb2xvciA9IGxpbmsuYWN0aXZlQ29sb3IgfHwgbGluay5kZWZhdWx0Q29sb3I7XG4gICAgICAgIGlmIChpbmRleCA8IHRoaXMubGlua3MubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgdGhpcy5saW5rcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgdGhpcy5saW5rcy5wdXNoKGxpbmspO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbW91c2VMZWF2ZVBhdGgobGluazogTGlua0ludGVybmFsKSB7XG4gICAgICAgIGxpbmsuY29sb3IgPSBsaW5rLmRlZmF1bHRDb2xvcjtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSQubmV4dCgpO1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlJC5jb21wbGV0ZSgpO1xuICAgIH1cbn1cbiIsIjxzdmcgW2F0dHIud2lkdGhdPVwiZ2FudHRVcHBlci52aWV3LndpZHRoXCIgY2xhc3M9XCJnYW50dC1saW5rcy1vdmVybGF5LW1haW5cIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbGluayBvZiBsaW5rczsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeVwiPlxuICAgIDxwYXRoXG4gICAgICBbYXR0ci5kXT1cImxpbmsucGF0aFwiXG4gICAgICBmaWxsPVwidHJhbnNwYXJlbnRcIlxuICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICBbYXR0ci5zdHJva2VdPVwibGluay5jb2xvclwiXG4gICAgICBwb2ludGVyLWV2ZW50cz1cIm5vbmVcIlxuICAgICAgW2F0dHIuc3R5bGVdPVwibGluay50eXBlID09PSBnYW50dExpbmtUeXBlcy5zZiA/ICdtYXJrZXItc3RhcnQ6IHVybCgjdHJpYW5nbGUnICsgaSArICcpJyA6ICdtYXJrZXItZW5kOiB1cmwoI3RyaWFuZ2xlJyArIGkgKyAnKSdcIlxuICAgID48L3BhdGg+XG5cbiAgICA8Zz5cbiAgICAgIDxwYXRoXG4gICAgICAgIGNsYXNzPVwibGluay1saW5lXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uTGluZUNsaWNrKCRldmVudCwgbGluaylcIlxuICAgICAgICBbYXR0ci5kXT1cImxpbmsucGF0aFwiXG4gICAgICAgIChtb3VzZWVudGVyKT1cIm1vdXNlRW50ZXJQYXRoKGxpbmssIGkpXCJcbiAgICAgICAgKG1vdXNlbGVhdmUpPVwibW91c2VMZWF2ZVBhdGgobGluaylcIlxuICAgICAgICBzdHJva2U9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgIHN0cm9rZS13aWR0aD1cIjlcIlxuICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgIGN1cnNvcj1cInBvaW50ZXJcIlxuICAgICAgPjwvcGF0aD5cbiAgICA8L2c+XG4gICAgPGRlZnMgKm5nSWY9XCJzaG93QXJyb3dcIj5cbiAgICAgIDxtYXJrZXJcbiAgICAgICAgKm5nSWY9XCJsaW5rLnR5cGUgPT09IGdhbnR0TGlua1R5cGVzLnNmOyBlbHNlIG1hcmtlckVuZFwiXG4gICAgICAgIFtpZF09XCIndHJpYW5nbGUnICsgaVwiXG4gICAgICAgIG1hcmtlclVuaXRzPVwic3Ryb2tlV2lkdGhcIlxuICAgICAgICBtYXJrZXJXaWR0aD1cIjVcIlxuICAgICAgICBtYXJrZXJIZWlnaHQ9XCI0XCJcbiAgICAgICAgcmVmWD1cIjVcIlxuICAgICAgICByZWZZPVwiMlwiXG4gICAgICAgIG9yaWVudD1cIjE4MFwiXG4gICAgICA+XG4gICAgICAgIDxwYXRoIFthdHRyLmZpbGxdPVwibGluay5jb2xvclwiIFthdHRyLnN0cm9rZV09XCJsaW5rLmNvbG9yXCIgZD1cIk0gMCAwIEwgNSAyIEwgMCA0IHpcIiAvPlxuICAgICAgPC9tYXJrZXI+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjbWFya2VyRW5kPlxuICAgICAgICA8bWFya2VyIFtpZF09XCIndHJpYW5nbGUnICsgaVwiIG1hcmtlclVuaXRzPVwic3Ryb2tlV2lkdGhcIiBtYXJrZXJXaWR0aD1cIjVcIiBtYXJrZXJIZWlnaHQ9XCI0XCIgcmVmWD1cIjVcIiByZWZZPVwiMlwiIG9yaWVudD1cImF1dG9cIj5cbiAgICAgICAgICA8cGF0aCBbYXR0ci5maWxsXT1cImxpbmsuY29sb3JcIiBbYXR0ci5zdHJva2VdPVwibGluay5jb2xvclwiIGQ9XCJNIDAgMCBMIDUgMiBMIDAgNCB6XCIgLz5cbiAgICAgICAgPC9tYXJrZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGVmcz5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxsaW5lIGNsYXNzPVwibGluay1kcmFnZ2luZy1saW5lXCI+PC9saW5lPlxuPC9zdmc+XG4iXX0=
@@ -20,16 +20,16 @@ export class GanttMainComponent {
20
20
  }
21
21
  }
22
22
  GanttMainComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: GanttMainComponent, deps: [{ token: GANTT_UPPER_TOKEN }], target: i0.ɵɵFactoryTarget.Component });
23
- GanttMainComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", type: GanttMainComponent, selector: "gantt-main", inputs: { renderData: "renderData", flatData: "flatData", groupHeaderTemplate: "groupHeaderTemplate", itemTemplate: "itemTemplate", barTemplate: "barTemplate", rangeTemplate: "rangeTemplate" }, outputs: { barClick: "barClick", lineClick: "lineClick" }, host: { properties: { "class.gantt-main-container": "this.ganttMainClass" } }, ngImport: i0, template: "<!-- <gantt-links-overlay [groups]=\"groups\" [items]=\"items\" (lineClick)=\"lineClick.emit($event)\"></gantt-links-overlay> -->\n<!-- groups -->\n<!-- <div class=\"gantt-main-groups\" *ngIf=\"groups && groups.length > 0; else itemsTemplate\" [style.width.px]=\"ganttUpper.view.width\">\n <ng-container *ngFor=\"let group of groups; trackBy: trackBy\">\n <div class=\"gantt-group\" [ngClass]=\"group.class\">\n <ng-template [ngTemplateOutlet]=\"groupHeaderTemplate\" [ngTemplateOutletContext]=\"{ group: group }\"></ng-template>\n </div>\n <div *ngIf=\"group.expanded\" class=\"gantt-items\">\n <ng-template [ngTemplateOutlet]=\"ganttItems\" [ngTemplateOutletContext]=\"{ items: group.items }\"></ng-template>\n </div>\n </ng-container>\n</div> -->\n\n<!-- items -->\n<!-- <ng-template #itemsTemplate>\n <div class=\"gantt-main-items\" [style.width.px]=\"ganttUpper.view.width\">\n <ng-template [ngTemplateOutlet]=\"ganttItems\" [ngTemplateOutletContext]=\"{ items: items }\"></ng-template>\n </div>\n</ng-template>\n\n<ng-template #ganttItems let-items=\"items\">\n <ng-container *ngFor=\"let item of items\">\n <div\n class=\"gantt-item\"\n [style.height.px]=\"ganttUpper.styles.lineHeight\"\n [class.gantt-main-item-active]=\"ganttUpper.isSelected(item.id)\"\n >\n <ng-container *ngIf=\"item.type | isGanttCustomItem\">\n <ng-template\n [ngTemplateOutlet]=\"itemTemplate\"\n [ngTemplateOutletContext]=\"{\n item: item.origin,\n refs: item.refs,\n baseline: ganttUpper.baselineItemsMap[item.id]?.origin,\n baselineRefs: ganttUpper.baselineItemsMap[item.id]?.refs\n }\"\n >\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"(item.type | isGanttRangeItem) || (item.type | isGanttBarItem)\">\n <gantt-range *ngIf=\"item.type | isGanttRangeItem\" [template]=\"rangeTemplate\" [item]=\"item\"></gantt-range>\n <gantt-bar *ngIf=\"item.type | isGanttBarItem\" [item]=\"item\" [template]=\"barTemplate\" (barClick)=\"barClick.emit($event)\"></gantt-bar>\n <gantt-baseline *ngIf=\"ganttUpper.baselineItemsMap[item.id]\" [baselineItem]=\"ganttUpper.baselineItemsMap[item.id]\"></gantt-baseline>\n </ng-container>\n </div>\n <ng-template\n *ngIf=\"item.children && item.expanded\"\n [ngTemplateOutlet]=\"ganttItems\"\n [ngTemplateOutletContext]=\"{ items: item.children }\"\n ></ng-template>\n </ng-container>\n</ng-template> -->\n\n<gantt-links-overlay [flatData]=\"flatData\" (lineClick)=\"lineClick.emit($event)\"></gantt-links-overlay>\n<div class=\"gantt-main-groups\" [style.width.px]=\"ganttUpper.view.width\">\n <ng-container *ngFor=\"let data of renderData; trackBy: trackBy\">\n <div class=\"gantt-group\" [ngClass]=\"data.class\" *ngIf=\"data.items\">\n <ng-template [ngTemplateOutlet]=\"groupHeaderTemplate\" [ngTemplateOutletContext]=\"{ group: data }\"></ng-template>\n </div>\n <div\n *ngIf=\"!data.items\"\n class=\"gantt-item\"\n [style.height.px]=\"ganttUpper.styles.lineHeight\"\n [class.gantt-main-item-active]=\"ganttUpper.isSelected(data.id)\"\n >\n <ng-container *ngIf=\"data.type | isGanttCustomItem\">\n <ng-template\n [ngTemplateOutlet]=\"itemTemplate\"\n [ngTemplateOutletContext]=\"{\n item: data.origin,\n refs: data.refs,\n baseline: ganttUpper.baselineItemsMap[data.id]?.origin,\n baselineRefs: ganttUpper.baselineItemsMap[data.id]?.refs\n }\"\n >\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"(data.type | isGanttRangeItem) || (data.type | isGanttBarItem)\">\n <gantt-range *ngIf=\"data.type | isGanttRangeItem\" [template]=\"rangeTemplate\" [item]=\"data\"></gantt-range>\n <gantt-bar *ngIf=\"data.type | isGanttBarItem\" [item]=\"data\" [template]=\"barTemplate\" (barClick)=\"barClick.emit($event)\"></gantt-bar>\n <gantt-baseline *ngIf=\"ganttUpper.baselineItemsMap[data.id]\" [baselineItem]=\"ganttUpper.baselineItemsMap[data.id]\"></gantt-baseline>\n </ng-container>\n </div>\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: "component", type: i2.GanttLinksComponent, selector: "gantt-links-overlay", inputs: ["flatData"], outputs: ["lineClick"] }, { kind: "component", type: i3.NgxGanttBarComponent, selector: "ngx-gantt-bar,gantt-bar", outputs: ["barClick"] }, { kind: "component", type: i4.NgxGanttRangeComponent, selector: "ngx-gantt-range,gantt-range" }, { kind: "component", type: i5.NgxGanttBaselineComponent, selector: "ngx-gantt-baseline,gantt-baseline", inputs: ["baselineItem"] }, { kind: "pipe", type: i6.IsGanttRangeItemPipe, name: "isGanttRangeItem" }, { kind: "pipe", type: i6.IsGanttBarItemPipe, name: "isGanttBarItem" }, { kind: "pipe", type: i6.IsGanttCustomItemPipe, name: "isGanttCustomItem" }] });
23
+ GanttMainComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", type: GanttMainComponent, selector: "gantt-main", inputs: { viewportItems: "viewportItems", flatItems: "flatItems", groupHeaderTemplate: "groupHeaderTemplate", itemTemplate: "itemTemplate", barTemplate: "barTemplate", rangeTemplate: "rangeTemplate" }, outputs: { barClick: "barClick", lineClick: "lineClick" }, host: { properties: { "class.gantt-main-container": "this.ganttMainClass" } }, ngImport: i0, template: "<gantt-links-overlay [flatItems]=\"flatItems\" (lineClick)=\"lineClick.emit($event)\"></gantt-links-overlay>\n<div class=\"gantt-main-groups\" [style.width.px]=\"ganttUpper.view.width\">\n <ng-container *ngFor=\"let data of viewportItems; trackBy: trackBy\">\n <div class=\"gantt-group\" [ngClass]=\"data.class\" *ngIf=\"data.items\">\n <ng-template [ngTemplateOutlet]=\"groupHeaderTemplate\" [ngTemplateOutletContext]=\"{ group: data }\"></ng-template>\n </div>\n <div\n *ngIf=\"!data.items\"\n class=\"gantt-item\"\n [style.height.px]=\"ganttUpper.styles.lineHeight\"\n [class.gantt-main-item-active]=\"ganttUpper.isSelected(data.id)\"\n >\n <ng-container *ngIf=\"data.type | isGanttCustomItem\">\n <ng-template\n [ngTemplateOutlet]=\"itemTemplate\"\n [ngTemplateOutletContext]=\"{\n item: data.origin,\n refs: data.refs,\n baseline: ganttUpper.baselineItemsMap[data.id]?.origin,\n baselineRefs: ganttUpper.baselineItemsMap[data.id]?.refs\n }\"\n >\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"(data.type | isGanttRangeItem) || (data.type | isGanttBarItem)\">\n <gantt-range *ngIf=\"data.type | isGanttRangeItem\" [template]=\"rangeTemplate\" [item]=\"data\"></gantt-range>\n <gantt-bar *ngIf=\"data.type | isGanttBarItem\" [item]=\"data\" [template]=\"barTemplate\" (barClick)=\"barClick.emit($event)\"></gantt-bar>\n <gantt-baseline *ngIf=\"ganttUpper.baselineItemsMap[data.id]\" [baselineItem]=\"ganttUpper.baselineItemsMap[data.id]\"></gantt-baseline>\n </ng-container>\n </div>\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: "component", type: i2.GanttLinksComponent, selector: "gantt-links-overlay", inputs: ["flatItems"], outputs: ["lineClick"] }, { kind: "component", type: i3.NgxGanttBarComponent, selector: "ngx-gantt-bar,gantt-bar", outputs: ["barClick"] }, { kind: "component", type: i4.NgxGanttRangeComponent, selector: "ngx-gantt-range,gantt-range" }, { kind: "component", type: i5.NgxGanttBaselineComponent, selector: "ngx-gantt-baseline,gantt-baseline", inputs: ["baselineItem"] }, { kind: "pipe", type: i6.IsGanttRangeItemPipe, name: "isGanttRangeItem" }, { kind: "pipe", type: i6.IsGanttBarItemPipe, name: "isGanttBarItem" }, { kind: "pipe", type: i6.IsGanttCustomItemPipe, name: "isGanttCustomItem" }] });
24
24
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: GanttMainComponent, decorators: [{
25
25
  type: Component,
26
- args: [{ selector: 'gantt-main', template: "<!-- <gantt-links-overlay [groups]=\"groups\" [items]=\"items\" (lineClick)=\"lineClick.emit($event)\"></gantt-links-overlay> -->\n<!-- groups -->\n<!-- <div class=\"gantt-main-groups\" *ngIf=\"groups && groups.length > 0; else itemsTemplate\" [style.width.px]=\"ganttUpper.view.width\">\n <ng-container *ngFor=\"let group of groups; trackBy: trackBy\">\n <div class=\"gantt-group\" [ngClass]=\"group.class\">\n <ng-template [ngTemplateOutlet]=\"groupHeaderTemplate\" [ngTemplateOutletContext]=\"{ group: group }\"></ng-template>\n </div>\n <div *ngIf=\"group.expanded\" class=\"gantt-items\">\n <ng-template [ngTemplateOutlet]=\"ganttItems\" [ngTemplateOutletContext]=\"{ items: group.items }\"></ng-template>\n </div>\n </ng-container>\n</div> -->\n\n<!-- items -->\n<!-- <ng-template #itemsTemplate>\n <div class=\"gantt-main-items\" [style.width.px]=\"ganttUpper.view.width\">\n <ng-template [ngTemplateOutlet]=\"ganttItems\" [ngTemplateOutletContext]=\"{ items: items }\"></ng-template>\n </div>\n</ng-template>\n\n<ng-template #ganttItems let-items=\"items\">\n <ng-container *ngFor=\"let item of items\">\n <div\n class=\"gantt-item\"\n [style.height.px]=\"ganttUpper.styles.lineHeight\"\n [class.gantt-main-item-active]=\"ganttUpper.isSelected(item.id)\"\n >\n <ng-container *ngIf=\"item.type | isGanttCustomItem\">\n <ng-template\n [ngTemplateOutlet]=\"itemTemplate\"\n [ngTemplateOutletContext]=\"{\n item: item.origin,\n refs: item.refs,\n baseline: ganttUpper.baselineItemsMap[item.id]?.origin,\n baselineRefs: ganttUpper.baselineItemsMap[item.id]?.refs\n }\"\n >\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"(item.type | isGanttRangeItem) || (item.type | isGanttBarItem)\">\n <gantt-range *ngIf=\"item.type | isGanttRangeItem\" [template]=\"rangeTemplate\" [item]=\"item\"></gantt-range>\n <gantt-bar *ngIf=\"item.type | isGanttBarItem\" [item]=\"item\" [template]=\"barTemplate\" (barClick)=\"barClick.emit($event)\"></gantt-bar>\n <gantt-baseline *ngIf=\"ganttUpper.baselineItemsMap[item.id]\" [baselineItem]=\"ganttUpper.baselineItemsMap[item.id]\"></gantt-baseline>\n </ng-container>\n </div>\n <ng-template\n *ngIf=\"item.children && item.expanded\"\n [ngTemplateOutlet]=\"ganttItems\"\n [ngTemplateOutletContext]=\"{ items: item.children }\"\n ></ng-template>\n </ng-container>\n</ng-template> -->\n\n<gantt-links-overlay [flatData]=\"flatData\" (lineClick)=\"lineClick.emit($event)\"></gantt-links-overlay>\n<div class=\"gantt-main-groups\" [style.width.px]=\"ganttUpper.view.width\">\n <ng-container *ngFor=\"let data of renderData; trackBy: trackBy\">\n <div class=\"gantt-group\" [ngClass]=\"data.class\" *ngIf=\"data.items\">\n <ng-template [ngTemplateOutlet]=\"groupHeaderTemplate\" [ngTemplateOutletContext]=\"{ group: data }\"></ng-template>\n </div>\n <div\n *ngIf=\"!data.items\"\n class=\"gantt-item\"\n [style.height.px]=\"ganttUpper.styles.lineHeight\"\n [class.gantt-main-item-active]=\"ganttUpper.isSelected(data.id)\"\n >\n <ng-container *ngIf=\"data.type | isGanttCustomItem\">\n <ng-template\n [ngTemplateOutlet]=\"itemTemplate\"\n [ngTemplateOutletContext]=\"{\n item: data.origin,\n refs: data.refs,\n baseline: ganttUpper.baselineItemsMap[data.id]?.origin,\n baselineRefs: ganttUpper.baselineItemsMap[data.id]?.refs\n }\"\n >\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"(data.type | isGanttRangeItem) || (data.type | isGanttBarItem)\">\n <gantt-range *ngIf=\"data.type | isGanttRangeItem\" [template]=\"rangeTemplate\" [item]=\"data\"></gantt-range>\n <gantt-bar *ngIf=\"data.type | isGanttBarItem\" [item]=\"data\" [template]=\"barTemplate\" (barClick)=\"barClick.emit($event)\"></gantt-bar>\n <gantt-baseline *ngIf=\"ganttUpper.baselineItemsMap[data.id]\" [baselineItem]=\"ganttUpper.baselineItemsMap[data.id]\"></gantt-baseline>\n </ng-container>\n </div>\n </ng-container>\n</div>\n" }]
26
+ args: [{ selector: 'gantt-main', template: "<gantt-links-overlay [flatItems]=\"flatItems\" (lineClick)=\"lineClick.emit($event)\"></gantt-links-overlay>\n<div class=\"gantt-main-groups\" [style.width.px]=\"ganttUpper.view.width\">\n <ng-container *ngFor=\"let data of viewportItems; trackBy: trackBy\">\n <div class=\"gantt-group\" [ngClass]=\"data.class\" *ngIf=\"data.items\">\n <ng-template [ngTemplateOutlet]=\"groupHeaderTemplate\" [ngTemplateOutletContext]=\"{ group: data }\"></ng-template>\n </div>\n <div\n *ngIf=\"!data.items\"\n class=\"gantt-item\"\n [style.height.px]=\"ganttUpper.styles.lineHeight\"\n [class.gantt-main-item-active]=\"ganttUpper.isSelected(data.id)\"\n >\n <ng-container *ngIf=\"data.type | isGanttCustomItem\">\n <ng-template\n [ngTemplateOutlet]=\"itemTemplate\"\n [ngTemplateOutletContext]=\"{\n item: data.origin,\n refs: data.refs,\n baseline: ganttUpper.baselineItemsMap[data.id]?.origin,\n baselineRefs: ganttUpper.baselineItemsMap[data.id]?.refs\n }\"\n >\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"(data.type | isGanttRangeItem) || (data.type | isGanttBarItem)\">\n <gantt-range *ngIf=\"data.type | isGanttRangeItem\" [template]=\"rangeTemplate\" [item]=\"data\"></gantt-range>\n <gantt-bar *ngIf=\"data.type | isGanttBarItem\" [item]=\"data\" [template]=\"barTemplate\" (barClick)=\"barClick.emit($event)\"></gantt-bar>\n <gantt-baseline *ngIf=\"ganttUpper.baselineItemsMap[data.id]\" [baselineItem]=\"ganttUpper.baselineItemsMap[data.id]\"></gantt-baseline>\n </ng-container>\n </div>\n </ng-container>\n</div>\n" }]
27
27
  }], ctorParameters: function () { return [{ type: i7.GanttUpper, decorators: [{
28
28
  type: Inject,
29
29
  args: [GANTT_UPPER_TOKEN]
30
- }] }]; }, propDecorators: { renderData: [{
30
+ }] }]; }, propDecorators: { viewportItems: [{
31
31
  type: Input
32
- }], flatData: [{
32
+ }], flatItems: [{
33
33
  type: Input
34
34
  }], groupHeaderTemplate: [{
35
35
  type: Input
@@ -47,4 +47,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImpor
47
47
  type: HostBinding,
48
48
  args: ['class.gantt-main-container']
49
49
  }] } });
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQtbWFpbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nYW50dC9zcmMvY29tcG9uZW50cy9tYWluL2dhbnR0LW1haW4uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2FudHQvc3JjL2NvbXBvbmVudHMvbWFpbi9nYW50dC1tYWluLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6RyxPQUFPLEVBQUUsaUJBQWlCLEVBQWMsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7Ozs7O0FBTWxFLE1BQU0sT0FBTyxrQkFBa0I7SUFzQjNCLFlBQThDLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFOMUQsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFzQixDQUFDO1FBRWxELGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBdUIsQ0FBQztRQUVuQixtQkFBYyxHQUFHLElBQUksQ0FBQztJQUVNLENBQUM7SUFFeEUsT0FBTyxDQUFDLEtBQWEsRUFBRSxJQUE0QztRQUMvRCxPQUFPLElBQUksQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDO0lBQzVCLENBQUM7OytHQTFCUSxrQkFBa0Isa0JBc0JQLGlCQUFpQjttR0F0QjVCLGtCQUFrQiw4WENSL0IscXBJQXVGQTsyRkQvRWEsa0JBQWtCO2tCQUo5QixTQUFTOytCQUNJLFlBQVk7OzBCQXlCVCxNQUFNOzJCQUFDLGlCQUFpQjs0Q0FsQjVCLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBRUcsWUFBWTtzQkFBcEIsS0FBSztnQkFFRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUksUUFBUTtzQkFBakIsTUFBTTtnQkFFRyxTQUFTO3NCQUFsQixNQUFNO2dCQUVvQyxjQUFjO3NCQUF4RCxXQUFXO3VCQUFDLDRCQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSG9zdEJpbmRpbmcsIEluamVjdCwgSW5wdXQsIFRlbXBsYXRlUmVmLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgR2FudHRHcm91cEludGVybmFsLCBHYW50dEl0ZW1JbnRlcm5hbCwgR2FudHRCYXJDbGlja0V2ZW50LCBHYW50dExpbmVDbGlja0V2ZW50IH0gZnJvbSAnLi4vLi4vY2xhc3MnO1xuaW1wb3J0IHsgR0FOVFRfVVBQRVJfVE9LRU4sIEdhbnR0VXBwZXIgfSBmcm9tICcuLi8uLi9nYW50dC11cHBlcic7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZ2FudHQtbWFpbicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2dhbnR0LW1haW4uY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEdhbnR0TWFpbkNvbXBvbmVudCB7XG4gICAgLy8gQElucHV0KCkgZ3JvdXBzOiBHYW50dEdyb3VwSW50ZXJuYWxbXTtcblxuICAgIC8vIEBJbnB1dCgpIGl0ZW1zOiBHYW50dEl0ZW1JbnRlcm5hbFtdO1xuICAgIEBJbnB1dCgpIHJlbmRlckRhdGE6IChHYW50dEdyb3VwSW50ZXJuYWwgfCBHYW50dEl0ZW1JbnRlcm5hbClbXTtcblxuICAgIEBJbnB1dCgpIGZsYXREYXRhOiAoR2FudHRHcm91cEludGVybmFsIHwgR2FudHRJdGVtSW50ZXJuYWwpW107XG5cbiAgICBASW5wdXQoKSBncm91cEhlYWRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQElucHV0KCkgaXRlbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQElucHV0KCkgYmFyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBASW5wdXQoKSByYW5nZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQE91dHB1dCgpIGJhckNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHYW50dEJhckNsaWNrRXZlbnQ+KCk7XG5cbiAgICBAT3V0cHV0KCkgbGluZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHYW50dExpbmVDbGlja0V2ZW50PigpO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5nYW50dC1tYWluLWNvbnRhaW5lcicpIGdhbnR0TWFpbkNsYXNzID0gdHJ1ZTtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoR0FOVFRfVVBQRVJfVE9LRU4pIHB1YmxpYyBnYW50dFVwcGVyOiBHYW50dFVwcGVyKSB7fVxuXG4gICAgdHJhY2tCeShpbmRleDogbnVtYmVyLCBpdGVtOiBHYW50dEdyb3VwSW50ZXJuYWwgfCBHYW50dEl0ZW1JbnRlcm5hbCkge1xuICAgICAgICByZXR1cm4gaXRlbS5pZCB8fCBpbmRleDtcbiAgICB9XG59XG4iLCI8IS0tIDxnYW50dC1saW5rcy1vdmVybGF5IFtncm91cHNdPVwiZ3JvdXBzXCIgW2l0ZW1zXT1cIml0ZW1zXCIgKGxpbmVDbGljayk9XCJsaW5lQ2xpY2suZW1pdCgkZXZlbnQpXCI+PC9nYW50dC1saW5rcy1vdmVybGF5PiAtLT5cbjwhLS0gZ3JvdXBzIC0tPlxuPCEtLSA8ZGl2IGNsYXNzPVwiZ2FudHQtbWFpbi1ncm91cHNcIiAqbmdJZj1cImdyb3VwcyAmJiBncm91cHMubGVuZ3RoID4gMDsgZWxzZSBpdGVtc1RlbXBsYXRlXCIgW3N0eWxlLndpZHRoLnB4XT1cImdhbnR0VXBwZXIudmlldy53aWR0aFwiPlxuICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBncm91cCBvZiBncm91cHM7IHRyYWNrQnk6IHRyYWNrQnlcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZ2FudHQtZ3JvdXBcIiBbbmdDbGFzc109XCJncm91cC5jbGFzc1wiPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImdyb3VwSGVhZGVyVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBncm91cDogZ3JvdXAgfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cImdyb3VwLmV4cGFuZGVkXCIgY2xhc3M9XCJnYW50dC1pdGVtc1wiPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImdhbnR0SXRlbXNcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBpdGVtczogZ3JvdXAuaXRlbXMgfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+IC0tPlxuXG48IS0tIGl0ZW1zIC0tPlxuPCEtLSA8bmctdGVtcGxhdGUgI2l0ZW1zVGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJnYW50dC1tYWluLWl0ZW1zXCIgW3N0eWxlLndpZHRoLnB4XT1cImdhbnR0VXBwZXIudmlldy53aWR0aFwiPlxuICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJnYW50dEl0ZW1zXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgaXRlbXM6IGl0ZW1zIH1cIj48L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZ2FudHRJdGVtcyBsZXQtaXRlbXM9XCJpdGVtc1wiPlxuICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJnYW50dC1pdGVtXCJcbiAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiZ2FudHRVcHBlci5zdHlsZXMubGluZUhlaWdodFwiXG4gICAgICBbY2xhc3MuZ2FudHQtbWFpbi1pdGVtLWFjdGl2ZV09XCJnYW50dFVwcGVyLmlzU2VsZWN0ZWQoaXRlbS5pZClcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLnR5cGUgfCBpc0dhbnR0Q3VzdG9tSXRlbVwiPlxuICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJpdGVtVGVtcGxhdGVcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICBpdGVtOiBpdGVtLm9yaWdpbixcbiAgICAgICAgICAgIHJlZnM6IGl0ZW0ucmVmcyxcbiAgICAgICAgICAgIGJhc2VsaW5lOiBnYW50dFVwcGVyLmJhc2VsaW5lSXRlbXNNYXBbaXRlbS5pZF0/Lm9yaWdpbixcbiAgICAgICAgICAgIGJhc2VsaW5lUmVmczogZ2FudHRVcHBlci5iYXNlbGluZUl0ZW1zTWFwW2l0ZW0uaWRdPy5yZWZzXG4gICAgICAgICAgfVwiXG4gICAgICAgID5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGl0ZW0udHlwZSB8IGlzR2FudHRSYW5nZUl0ZW0pIHx8IChpdGVtLnR5cGUgfCBpc0dhbnR0QmFySXRlbSlcIj5cbiAgICAgICAgPGdhbnR0LXJhbmdlICpuZ0lmPVwiaXRlbS50eXBlIHwgaXNHYW50dFJhbmdlSXRlbVwiIFt0ZW1wbGF0ZV09XCJyYW5nZVRlbXBsYXRlXCIgW2l0ZW1dPVwiaXRlbVwiPjwvZ2FudHQtcmFuZ2U+XG4gICAgICAgIDxnYW50dC1iYXIgKm5nSWY9XCJpdGVtLnR5cGUgfCBpc0dhbnR0QmFySXRlbVwiIFtpdGVtXT1cIml0ZW1cIiBbdGVtcGxhdGVdPVwiYmFyVGVtcGxhdGVcIiAoYmFyQ2xpY2spPVwiYmFyQ2xpY2suZW1pdCgkZXZlbnQpXCI+PC9nYW50dC1iYXI+XG4gICAgICAgIDxnYW50dC1iYXNlbGluZSAqbmdJZj1cImdhbnR0VXBwZXIuYmFzZWxpbmVJdGVtc01hcFtpdGVtLmlkXVwiIFtiYXNlbGluZUl0ZW1dPVwiZ2FudHRVcHBlci5iYXNlbGluZUl0ZW1zTWFwW2l0ZW0uaWRdXCI+PC9nYW50dC1iYXNlbGluZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgKm5nSWY9XCJpdGVtLmNoaWxkcmVuICYmIGl0ZW0uZXhwYW5kZWRcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZ2FudHRJdGVtc1wiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBpdGVtczogaXRlbS5jaGlsZHJlbiB9XCJcbiAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPiAtLT5cblxuPGdhbnR0LWxpbmtzLW92ZXJsYXkgW2ZsYXREYXRhXT1cImZsYXREYXRhXCIgKGxpbmVDbGljayk9XCJsaW5lQ2xpY2suZW1pdCgkZXZlbnQpXCI+PC9nYW50dC1saW5rcy1vdmVybGF5PlxuPGRpdiBjbGFzcz1cImdhbnR0LW1haW4tZ3JvdXBzXCIgW3N0eWxlLndpZHRoLnB4XT1cImdhbnR0VXBwZXIudmlldy53aWR0aFwiPlxuICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkYXRhIG9mIHJlbmRlckRhdGE7IHRyYWNrQnk6IHRyYWNrQnlcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZ2FudHQtZ3JvdXBcIiBbbmdDbGFzc109XCJkYXRhLmNsYXNzXCIgKm5nSWY9XCJkYXRhLml0ZW1zXCI+XG4gICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiZ3JvdXBIZWFkZXJUZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGdyb3VwOiBkYXRhIH1cIj48L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwiIWRhdGEuaXRlbXNcIlxuICAgICAgY2xhc3M9XCJnYW50dC1pdGVtXCJcbiAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiZ2FudHRVcHBlci5zdHlsZXMubGluZUhlaWdodFwiXG4gICAgICBbY2xhc3MuZ2FudHQtbWFpbi1pdGVtLWFjdGl2ZV09XCJnYW50dFVwcGVyLmlzU2VsZWN0ZWQoZGF0YS5pZClcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhLnR5cGUgfCBpc0dhbnR0Q3VzdG9tSXRlbVwiPlxuICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJpdGVtVGVtcGxhdGVcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICBpdGVtOiBkYXRhLm9yaWdpbixcbiAgICAgICAgICAgIHJlZnM6IGRhdGEucmVmcyxcbiAgICAgICAgICAgIGJhc2VsaW5lOiBnYW50dFVwcGVyLmJhc2VsaW5lSXRlbXNNYXBbZGF0YS5pZF0/Lm9yaWdpbixcbiAgICAgICAgICAgIGJhc2VsaW5lUmVmczogZ2FudHRVcHBlci5iYXNlbGluZUl0ZW1zTWFwW2RhdGEuaWRdPy5yZWZzXG4gICAgICAgICAgfVwiXG4gICAgICAgID5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGRhdGEudHlwZSB8IGlzR2FudHRSYW5nZUl0ZW0pIHx8IChkYXRhLnR5cGUgfCBpc0dhbnR0QmFySXRlbSlcIj5cbiAgICAgICAgPGdhbnR0LXJhbmdlICpuZ0lmPVwiZGF0YS50eXBlIHwgaXNHYW50dFJhbmdlSXRlbVwiIFt0ZW1wbGF0ZV09XCJyYW5nZVRlbXBsYXRlXCIgW2l0ZW1dPVwiZGF0YVwiPjwvZ2FudHQtcmFuZ2U+XG4gICAgICAgIDxnYW50dC1iYXIgKm5nSWY9XCJkYXRhLnR5cGUgfCBpc0dhbnR0QmFySXRlbVwiIFtpdGVtXT1cImRhdGFcIiBbdGVtcGxhdGVdPVwiYmFyVGVtcGxhdGVcIiAoYmFyQ2xpY2spPVwiYmFyQ2xpY2suZW1pdCgkZXZlbnQpXCI+PC9nYW50dC1iYXI+XG4gICAgICAgIDxnYW50dC1iYXNlbGluZSAqbmdJZj1cImdhbnR0VXBwZXIuYmFzZWxpbmVJdGVtc01hcFtkYXRhLmlkXVwiIFtiYXNlbGluZUl0ZW1dPVwiZ2FudHRVcHBlci5iYXNlbGluZUl0ZW1zTWFwW2RhdGEuaWRdXCI+PC9nYW50dC1iYXNlbGluZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuIl19
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQtbWFpbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nYW50dC9zcmMvY29tcG9uZW50cy9tYWluL2dhbnR0LW1haW4uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2FudHQvc3JjL2NvbXBvbmVudHMvbWFpbi9nYW50dC1tYWluLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6RyxPQUFPLEVBQUUsaUJBQWlCLEVBQWMsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7Ozs7O0FBTWxFLE1BQU0sT0FBTyxrQkFBa0I7SUFtQjNCLFlBQThDLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFOMUQsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFzQixDQUFDO1FBRWxELGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBdUIsQ0FBQztRQUVuQixtQkFBYyxHQUFHLElBQUksQ0FBQztJQUVNLENBQUM7SUFFeEUsT0FBTyxDQUFDLEtBQWEsRUFBRSxJQUE0QztRQUMvRCxPQUFPLElBQUksQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDO0lBQzVCLENBQUM7OytHQXZCUSxrQkFBa0Isa0JBbUJQLGlCQUFpQjttR0FuQjVCLGtCQUFrQixzWUNSL0IseXFEQWlDQTsyRkR6QmEsa0JBQWtCO2tCQUo5QixTQUFTOytCQUNJLFlBQVk7OzBCQXNCVCxNQUFNOzJCQUFDLGlCQUFpQjs0Q0FsQjVCLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFFRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBRUcsWUFBWTtzQkFBcEIsS0FBSztnQkFFRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUksUUFBUTtzQkFBakIsTUFBTTtnQkFFRyxTQUFTO3NCQUFsQixNQUFNO2dCQUVvQyxjQUFjO3NCQUF4RCxXQUFXO3VCQUFDLDRCQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSG9zdEJpbmRpbmcsIEluamVjdCwgSW5wdXQsIFRlbXBsYXRlUmVmLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgR2FudHRHcm91cEludGVybmFsLCBHYW50dEl0ZW1JbnRlcm5hbCwgR2FudHRCYXJDbGlja0V2ZW50LCBHYW50dExpbmVDbGlja0V2ZW50IH0gZnJvbSAnLi4vLi4vY2xhc3MnO1xuaW1wb3J0IHsgR0FOVFRfVVBQRVJfVE9LRU4sIEdhbnR0VXBwZXIgfSBmcm9tICcuLi8uLi9nYW50dC11cHBlcic7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZ2FudHQtbWFpbicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2dhbnR0LW1haW4uY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEdhbnR0TWFpbkNvbXBvbmVudCB7XG4gICAgQElucHV0KCkgdmlld3BvcnRJdGVtczogKEdhbnR0R3JvdXBJbnRlcm5hbCB8IEdhbnR0SXRlbUludGVybmFsKVtdO1xuXG4gICAgQElucHV0KCkgZmxhdEl0ZW1zOiAoR2FudHRHcm91cEludGVybmFsIHwgR2FudHRJdGVtSW50ZXJuYWwpW107XG5cbiAgICBASW5wdXQoKSBncm91cEhlYWRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQElucHV0KCkgaXRlbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQElucHV0KCkgYmFyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBASW5wdXQoKSByYW5nZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQE91dHB1dCgpIGJhckNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHYW50dEJhckNsaWNrRXZlbnQ+KCk7XG5cbiAgICBAT3V0cHV0KCkgbGluZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHYW50dExpbmVDbGlja0V2ZW50PigpO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5nYW50dC1tYWluLWNvbnRhaW5lcicpIGdhbnR0TWFpbkNsYXNzID0gdHJ1ZTtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoR0FOVFRfVVBQRVJfVE9LRU4pIHB1YmxpYyBnYW50dFVwcGVyOiBHYW50dFVwcGVyKSB7fVxuXG4gICAgdHJhY2tCeShpbmRleDogbnVtYmVyLCBpdGVtOiBHYW50dEdyb3VwSW50ZXJuYWwgfCBHYW50dEl0ZW1JbnRlcm5hbCkge1xuICAgICAgICByZXR1cm4gaXRlbS5pZCB8fCBpbmRleDtcbiAgICB9XG59XG4iLCI8Z2FudHQtbGlua3Mtb3ZlcmxheSBbZmxhdEl0ZW1zXT1cImZsYXRJdGVtc1wiIChsaW5lQ2xpY2spPVwibGluZUNsaWNrLmVtaXQoJGV2ZW50KVwiPjwvZ2FudHQtbGlua3Mtb3ZlcmxheT5cbjxkaXYgY2xhc3M9XCJnYW50dC1tYWluLWdyb3Vwc1wiIFtzdHlsZS53aWR0aC5weF09XCJnYW50dFVwcGVyLnZpZXcud2lkdGhcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZGF0YSBvZiB2aWV3cG9ydEl0ZW1zOyB0cmFja0J5OiB0cmFja0J5XCI+XG4gICAgPGRpdiBjbGFzcz1cImdhbnR0LWdyb3VwXCIgW25nQ2xhc3NdPVwiZGF0YS5jbGFzc1wiICpuZ0lmPVwiZGF0YS5pdGVtc1wiPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImdyb3VwSGVhZGVyVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBncm91cDogZGF0YSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cIiFkYXRhLml0ZW1zXCJcbiAgICAgIGNsYXNzPVwiZ2FudHQtaXRlbVwiXG4gICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImdhbnR0VXBwZXIuc3R5bGVzLmxpbmVIZWlnaHRcIlxuICAgICAgW2NsYXNzLmdhbnR0LW1haW4taXRlbS1hY3RpdmVdPVwiZ2FudHRVcHBlci5pc1NlbGVjdGVkKGRhdGEuaWQpXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YS50eXBlIHwgaXNHYW50dEN1c3RvbUl0ZW1cIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaXRlbVRlbXBsYXRlXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgaXRlbTogZGF0YS5vcmlnaW4sXG4gICAgICAgICAgICByZWZzOiBkYXRhLnJlZnMsXG4gICAgICAgICAgICBiYXNlbGluZTogZ2FudHRVcHBlci5iYXNlbGluZUl0ZW1zTWFwW2RhdGEuaWRdPy5vcmlnaW4sXG4gICAgICAgICAgICBiYXNlbGluZVJlZnM6IGdhbnR0VXBwZXIuYmFzZWxpbmVJdGVtc01hcFtkYXRhLmlkXT8ucmVmc1xuICAgICAgICAgIH1cIlxuICAgICAgICA+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihkYXRhLnR5cGUgfCBpc0dhbnR0UmFuZ2VJdGVtKSB8fCAoZGF0YS50eXBlIHwgaXNHYW50dEJhckl0ZW0pXCI+XG4gICAgICAgIDxnYW50dC1yYW5nZSAqbmdJZj1cImRhdGEudHlwZSB8IGlzR2FudHRSYW5nZUl0ZW1cIiBbdGVtcGxhdGVdPVwicmFuZ2VUZW1wbGF0ZVwiIFtpdGVtXT1cImRhdGFcIj48L2dhbnR0LXJhbmdlPlxuICAgICAgICA8Z2FudHQtYmFyICpuZ0lmPVwiZGF0YS50eXBlIHwgaXNHYW50dEJhckl0ZW1cIiBbaXRlbV09XCJkYXRhXCIgW3RlbXBsYXRlXT1cImJhclRlbXBsYXRlXCIgKGJhckNsaWNrKT1cImJhckNsaWNrLmVtaXQoJGV2ZW50KVwiPjwvZ2FudHQtYmFyPlxuICAgICAgICA8Z2FudHQtYmFzZWxpbmUgKm5nSWY9XCJnYW50dFVwcGVyLmJhc2VsaW5lSXRlbXNNYXBbZGF0YS5pZF1cIiBbYmFzZWxpbmVJdGVtXT1cImdhbnR0VXBwZXIuYmFzZWxpbmVJdGVtc01hcFtkYXRhLmlkXVwiPjwvZ2FudHQtYmFzZWxpbmU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cbiJdfQ==