ca-components 1.0.94 → 1.0.96

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.
@@ -27,34 +27,10 @@ export class CaChartComponent {
27
27
  set chartConfig(value) {
28
28
  this._chartConfig = value;
29
29
  this.isChartDataAvailable = false;
30
- this._chartConfig?.
31
- chartData?.
32
- datasets?.
33
- forEach((item) => {
34
- item.data.forEach((value) => {
35
- if (Array.isArray(value)) {
36
- if (value[0] !== 0 || value[1] !== 0)
37
- this.isChartDataAvailable = true;
38
- }
39
- else if (value !== 0)
40
- this.isChartDataAvailable = true;
41
- });
42
- });
30
+ this.isChartDataAvailable = this._chartConfig?.chartData?.datasets?.some((item) => item.data.some((value) => Array.isArray(value) ? (value[0] !== 0 || value[1] !== 0) : value !== 0)) ?? false;
43
31
  this.changeDetector.detectChanges();
44
32
  if (this.isChartDataAvailable)
45
33
  this.updateChart();
46
- this._chartConfig.chartData.datasets.forEach((item) => {
47
- item.data.forEach((value) => {
48
- if (Array.isArray(value)) {
49
- if (value[0] !== 0 || value[1] !== 0)
50
- this.isChartDataAvailable = true;
51
- }
52
- else {
53
- if (value !== 0)
54
- this.isChartDataAvailable = true;
55
- }
56
- });
57
- });
58
34
  }
59
35
  set selectedIndex(value) {
60
36
  if (!this.chart || !this.isChartDataAvailable)
@@ -425,7 +401,7 @@ export class CaChartComponent {
425
401
  mouseHorizontalCoordinate < boundary.rightBoundary);
426
402
  if (newHoveredIndex !== this._hoveredIndex) {
427
403
  this._hoveredIndex = newHoveredIndex === -1 ? null : newHoveredIndex;
428
- this.chartManagerService?.setHoverState(this._hoveredIndex, this.chartId);
404
+ this.chartManagerService?.setHoverState(this._hoveredIndex, this.chartId, segmentBoundaries[this._hoveredIndex]);
429
405
  this.chart.draw();
430
406
  }
431
407
  },
@@ -662,4 +638,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
662
638
  }], hoveredIndex: [{
663
639
  type: Output
664
640
  }] } });
665
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtY2hhcnQvY2EtY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtY2hhcnQvY2EtY2hhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFFBQVEsRUFDUixTQUFTLEVBQ1QsWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUxQyxTQUFTO0FBQ1QsT0FBTyxFQUVMLEtBQUssR0FJTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLGdCQUFnQixNQUFNLDJCQUEyQixDQUFDO0FBR3pELFFBQVE7QUFDUixPQUFPLEVBRUwscUJBQXFCLEVBQ3JCLHdCQUF3QixFQUV4Qiw0QkFBNEIsRUFDNUIseUJBQXlCLEVBQ3pCLDZCQUE2QixFQUU3QixnQkFBZ0IsR0FDakIsTUFBTSxTQUFTLENBQUM7QUFFakIsVUFBVTtBQUNWLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU5QyxTQUFTO0FBQ1QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBa0JoRCxZQUFZO0FBQ1osT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBR25ELFFBQVE7QUFDUixPQUFPLEVB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QUFlLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFTSxnQ0FBZ0M7UUFDckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLDJCQUEyQjtZQUMvQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDOytHQWh6QlUsZ0JBQWdCO21HQUFoQixnQkFBZ0IsNlhDcEY3QixzaEZBNEVBLHdzQkRFSSxZQUFZLHdYQUNaLG9CQUFvQiw0TkFDcEIsZ0JBQWdCLGdEQUNoQixxQkFBcUI7OzRGQUdaLGdCQUFnQjtrQkFaNUIsU0FBUzsrQkFDRSxjQUFjLGNBR1osSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osb0JBQW9CO3dCQUNwQixnQkFBZ0I7d0JBQ2hCLHFCQUFxQjtxQkFDdEI7OzBCQW9FRSxRQUFRO3lDQWpFa0MsV0FBVztzQkFBdkQsU0FBUzt1QkFBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUVsQyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFFRixpQkFBaUI7c0JBRHBCLEtBQUs7Z0JBSU8sV0FBVztzQkFBdkIsS0FBSztnQkFpQ08sYUFBYTtzQkFBekIsS0FBSztnQkFTSSxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgT3B0aW9uYWwsXG4gIFZpZXdDaGlsZCxcbiAgRXZlbnRFbWl0dGVyLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBbnlPYmplY3QgfSBmcm9tICdjaGFydC5qcy9kaXN0L3R5cGVzL2Jhc2ljJztcbmltcG9ydCB7IEFuZ3VsYXJTdmdJY29uTW9kdWxlIH0gZnJvbSAnYW5ndWxhci1zdmctaWNvbic7XG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcblxuLy8gQ2hhcnRzXG5pbXBvcnQge1xuICBDYXRlZ29yeVNjYWxlLFxuICBDaGFydCxcbiAgQ2hhcnRFdmVudCxcbiAgTGluZWFyU2NhbGUsXG4gIFBsdWdpbixcbn0gZnJvbSAnY2hhcnQuanMvYXV0byc7XG5pbXBvcnQgYW5ub3RhdGlvblBsdWdpbiBmcm9tICdjaGFydGpzLXBsdWdpbi1hbm5vdGF0aW9uJztcbmltcG9ydCB7IENoYXJ0VHlwZSB9IGZyb20gJ2NoYXJ0LmpzJztcblxuLy8gRW51bXNcbmltcG9ydCB7XG4gIENoYXJ0Q29sb3JzU3RyaW5nRW51bSxcbiAgRUNoYXJ0RXZlbnRQcm9wZXJ0aWVzLFxuICBDaGFydFBsdWdpbklkc1N0cmluZ0VudW0sXG4gIENoYXJ0VHlwZXNTdHJpbmdFbnVtLFxuICBDdWJpY0ludGVycG9sYXRpb25TdHJpbmdFbnVtLFxuICBDaGFydEV2ZW50VHlwZXNTdHJpbmdFbnVtLFxuICBDaGFydEZvbnRQcm9wZXJ0aWVzU3RyaW5nRW51bSxcbiAgRUNoYXJ0QW5ub3RhdGlvblR5cGUsXG4gIEVDaGFydEFubm90YXRpb24sXG59IGZyb20gJy4vZW51bXMnO1xuXG4vLyBIZWxwZXJzXG5pbXBvcnQgeyBDaGFydEhlbHBlciB9IGZyb20gJy4vdXRpbHMvaGVscGVycyc7XG5cbi8vIEd1YXJkc1xuaW1wb3J0IHsgQ2hhcnRUeXBlR3VhcmQgfSBmcm9tICcuL3V0aWxzL2d1YXJkcyc7XG5cbi8vTW9kZWxzXG5pbXBvcnQge1xuICBJQ2hhcnREYXRhLFxuICBJTGluZURhdGFzZXQsXG4gIElDaGFydENvbmZpZ3VyYXRpb24sXG4gIElCYXNlRGF0YXNldCxcbiAgSUNoYXJ0QW5ub3RhdGlvbixcbiAgSUNoYXJ0RGF0YXNldEhvdmVyLFxuICBJQ2hhcnRDZW50ZXJMYWJlbCxcbiAgSUNoYXJ0TGVnZW5kQ29uZmlnXG59IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7IEFjdGl2ZUVsZW1lbnQgfSBmcm9tICdjaGFydC5qcy9kaXN0L3BsdWdpbnMvcGx1Z2luLnRvb2x0aXAnO1xuXG4vL1NlcnZpY2VzXG5pbXBvcnQgeyBDaGFydE1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vY2EtY2hhcnQtbWFuYWdlci9zZXJ2aWNlcyc7XG5cbi8vIENvbnN0YW50c1xuaW1wb3J0IHsgQ2hhcnRDb25zdGFudHMgfSBmcm9tICcuL3V0aWxzL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBfRGVlcFBhcnRpYWxBcnJheSwgX0RlZXBQYXJ0aWFsT2JqZWN0IH0gZnJvbSAnY2hhcnQuanMvZGlzdC90eXBlcy91dGlscyc7XG5cbi8vIFBpcGVzXG5pbXBvcnQge1xuICBUaG91c2FuZFNlcGFyYXRvclBpcGUsXG4gIFVuaXRQb3NpdGlvblBpcGVcbn0gZnJvbSAnLi4vLi4vcGlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtY2EtY2hhcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2EtY2hhcnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jYS1jaGFydC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEFuZ3VsYXJTdmdJY29uTW9kdWxlLFxuICAgIFVuaXRQb3NpdGlvblBpcGUsXG4gICAgVGhvdXNhbmRTZXBhcmF0b3JQaXBlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDYUNoYXJ0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBWaWV3Q2hpbGQoJ2NoYXJ0Q2FudmFzJywgeyBzdGF0aWM6IGZhbHNlIH0pIGNoYXJ0Q2FudmFzITogRWxlbWVudFJlZjtcblxuICBASW5wdXQoKSBsZWdlbmREYXRhITogSUNoYXJ0TGVnZW5kQ29uZmlnO1xuICBASW5wdXQoKSBjaGFydElkITogc3RyaW5nO1xuICBASW5wdXQoKVxuICBzZXQgY2hhcnREYXRhc2V0SG92ZXIodmFsdWU6IElDaGFydERhdGFzZXRIb3ZlciB8IG51bGwpIHtcbiAgICBpZiAodmFsdWUpIHRoaXMudXBkYXRlRGF0YXNldEJhY2tncm91bmRPbkhvdmVyKHZhbHVlKTtcbiAgfVxuICBASW5wdXQoKSBzZXQgY2hhcnRDb25maWcodmFsdWU6IElDaGFydENvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl9jaGFydENvbmZpZyA9IHZhbHVlO1xuICAgIHRoaXMuaXNDaGFydERhdGFBdmFpbGFibGUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFydENvbmZpZz8uXG4gICAgICBjaGFydERhdGE/LlxuICAgICAgZGF0YXNldHM/LlxuICAgICAgZm9yRWFjaCgoaXRlbTogSUJhc2VEYXRhc2V0KSA9PiB7XG4gICAgICAgIGl0ZW0uZGF0YS5mb3JFYWNoKCh2YWx1ZTogbnVtYmVyIHwgbnVtYmVyW10pID0+IHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZVswXSAhPT0gMCB8fCB2YWx1ZVsxXSAhPT0gMClcbiAgICAgICAgICAgICAgdGhpcy5pc0NoYXJ0RGF0YUF2YWlsYWJsZSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gMClcbiAgICAgICAgICAgICAgdGhpcy5pc0NoYXJ0RGF0YUF2YWlsYWJsZSA9IHRydWU7XG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcblxuICAgIGlmICh0aGlzLmlzQ2hhcnREYXRhQXZhaWxhYmxlKVxuICAgICAgdGhpcy51cGRhdGVDaGFydCgpO1xuXG4gICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnREYXRhLmRhdGFzZXRzLmZvckVhY2goKGl0ZW06IElCYXNlRGF0YXNldCkgPT4ge1xuICAgICAgaXRlbS5kYXRhLmZvckVhY2goKHZhbHVlOiBudW1iZXIgfCBudW1iZXJbXSkgPT4ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICBpZiAodmFsdWVbMF0gIT09IDAgfHwgdmFsdWVbMV0gIT09IDApXG4gICAgICAgICAgICB0aGlzLmlzQ2hhcnREYXRhQXZhaWxhYmxlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodmFsdWUgIT09IDApIHRoaXMuaXNDaGFydERhdGFBdmFpbGFibGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBASW5wdXQoKSBzZXQgc2VsZWN0ZWRJbmRleCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKCF0aGlzLmNoYXJ0IHx8ICF0aGlzLmlzQ2hhcnREYXRhQXZhaWxhYmxlKSByZXR1cm47XG5cbiAgICBpZiAodmFsdWUgIT09IG51bGwpIHRoaXMuZm9jdXNEb3VnaG51dEFyYyh2YWx1ZSk7XG4gICAgZWxzZSB0aGlzLnNldE9yaWdpbmFsRG91Z2hudXRBcmNzQ29sb3IoKTtcblxuICAgIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gIH1cblxuICBAT3V0cHV0KCkgaG92ZXJlZEluZGV4OiBFdmVudEVtaXR0ZXI8bnVtYmVyIHwgbnVsbD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSBjaGFydCE6IENoYXJ0O1xuICBwcml2YXRlIGNoYXJ0Q29udGV4dCE6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcbiAgcHJpdmF0ZSBwbHVnaW5zPzogUGx1Z2luPENoYXJ0VHlwZSwgQW55T2JqZWN0PltdO1xuICBwcml2YXRlIGFyZUFuaW1hdGlvbnNDb21wbGVhdGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2hvdmVyZWRJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgcHVibGljIF9jaGFydENvbmZpZyE6IElDaGFydENvbmZpZ3VyYXRpb247XG4gIHB1YmxpYyBpc0NoYXJ0RGF0YUF2YWlsYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgY2hhcnRNYW5hZ2VyU2VydmljZT86IENoYXJ0TWFuYWdlclNlcnZpY2VcbiAgKSB7IH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNDaGFydERhdGFBdmFpbGFibGUpIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUFubm90YXRpb25QbHVnaW4oKTtcbiAgICAgIHRoaXMuY3JlYXRlQ2hhcnQoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxpemVDaGFydE1hbmFnZXJTZXJ2aWNlKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVDaGFydE1hbmFnZXJTZXJ2aWNlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jaGFydE1hbmFnZXJTZXJ2aWNlKSByZXR1cm47XG5cbiAgICB0aGlzLmNoYXJ0TWFuYWdlclNlcnZpY2UuXG4gICAgICBob3ZlclN0YXRlJC5cbiAgICAgIHBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgKHsgaW5kZXgsIGNoYXJ0SWQgfSkgPT4ge1xuICAgICAgICAgIGlmIChjaGFydElkICE9PSB0aGlzLmNoYXJ0SWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2hvdmVyZWRJbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgaWYgKHRoaXMuY2hhcnQpIHRoaXMuY2hhcnQuZHJhdygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUFubm90YXRpb25QbHVnaW4oKTogdm9pZCB7XG4gICAgQ2hhcnQucmVnaXN0ZXIoYW5ub3RhdGlvblBsdWdpbik7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlRGF0YXNldEJhY2tncm91bmRPbkhvdmVyKFxuICAgIGNoYXJ0RGF0YXNldEhvdmVyOiBJQ2hhcnREYXRhc2V0SG92ZXJcbiAgKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNoYXJ0IHx8ICF0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHMpIHJldHVybjtcblxuICAgIGlmIChjaGFydERhdGFzZXRIb3Zlci5pc0hvdmVyZCkge1xuICAgICAgY29uc3QgZ3JhZGllbnQgPSBDaGFydEhlbHBlci5jcmVhdGVHcmFkaWVudChcbiAgICAgICAgdGhpcy5jaGFydENvbnRleHQsXG4gICAgICAgIHRoaXMuY2hhcnRDYW52YXMsXG4gICAgICAgIGNoYXJ0RGF0YXNldEhvdmVyLmNvbG9yLFxuICAgICAgICBjaGFydERhdGFzZXRIb3Zlci5jb2xvcixcbiAgICAgICAgMC42LFxuICAgICAgICAwLjEsXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgICB0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHMgPVxuICAgICAgICB0aGlzLmNoYXJ0Py5cbiAgICAgICAgICBkYXRhPy5cbiAgICAgICAgICBkYXRhc2V0cz8uXG4gICAgICAgICAgbWFwKChkYXRhc2V0KSA9PiB7XG4gICAgICAgICAgICBpZiAoZGF0YXNldC5oaWRkZW4pIHJldHVybiBkYXRhc2V0O1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGRhdGFzZXQ/LmxhYmVsPy50b1VwcGVyQ2FzZSgpID09PVxuICAgICAgICAgICAgICBjaGFydERhdGFzZXRIb3Zlcj8ubGFiZWw/LnRvVXBwZXJDYXNlKClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBjb25zdCBob3ZlcmREYXRhU2V0ID0ge1xuICAgICAgICAgICAgICAgIC4uLmRhdGFzZXQsXG4gICAgICAgICAgICAgICAgZmlsbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGdyYWRpZW50LFxuICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBjaGFydERhdGFzZXRIb3Zlci5jb2xvcixcbiAgICAgICAgICAgICAgICBvcmRlcjogMSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgcmV0dXJuIGhvdmVyZERhdGFTZXQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBib3JkZXJDb2xvcldpdGhPcGFjaXR5ID0gQ2hhcnRIZWxwZXIuY2hhbmdlT3BhY2l0eU9mUmdiT3JSZ2JhKFxuICAgICAgICAgICAgICAgIGRhdGFzZXQuYm9yZGVyQ29sb3IgYXMgc3RyaW5nLFxuICAgICAgICAgICAgICAgIDAuMlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLmRhdGFzZXQsXG4gICAgICAgICAgICAgICAgZmlsbDogZmFsc2UsXG4gICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6IGJvcmRlckNvbG9yV2l0aE9wYWNpdHksXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2hhcnQuZGF0YS5kYXRhc2V0cyA9XG4gICAgICAgIHRoaXMuY2hhcnRcbiAgICAgICAgICAuZGF0YVxuICAgICAgICAgIC5kYXRhc2V0c1xuICAgICAgICAgIC5tYXAoKGRhdGFzZXQpID0+IHtcbiAgICAgICAgICAgIGlmICghZGF0YXNldC5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxDb2xvciA9IGRhdGFzZXQuYm9yZGVyQ29sb3JcbiAgICAgICAgICAgICAgICA/IENoYXJ0SGVscGVyLmNoYW5nZU9wYWNpdHlPZlJnYk9yUmdiYShcbiAgICAgICAgICAgICAgICAgIGRhdGFzZXQuYm9yZGVyQ29sb3IgYXMgc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IENoYXJ0Q29uc3RhbnRzLlNUUklOR19FTVBUWTtcblxuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLmRhdGFzZXQsXG4gICAgICAgICAgICAgICAgZmlsbDogZmFsc2UsXG4gICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6IG9yaWdpbmFsQ29sb3IsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBDaGFydENvbnN0YW50cy5TVFJJTkdfRU1QVFksXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2UgcmV0dXJuIGRhdGFzZXQ7XG4gICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5jaGFydC51cGRhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ2hhcnQoKTogdm9pZCB7XG4gICAgdGhpcy5jaGFydENvbnRleHQgPSB0aGlzLmNoYXJ0Q2FudmFzPy5cbiAgICAgIG5hdGl2ZUVsZW1lbnQ/LlxuICAgICAgZ2V0Q29udGV4dCgnMmQnKTtcblxuICAgIHRoaXMuc2V0Q2hhcnRPcHRpb25zUHJvcGVydGllcygpO1xuICAgIHRoaXMuc2V0Q2hhcnREYXRhUHJvcGVydGllcygpO1xuICAgIHRoaXMuc2V0Q2hhcnRQbHVnaW5zUHJvcGVydGllcygpO1xuXG4gICAgaWYgKHRoaXMuY2hhcnQpIHRoaXMuY2hhcnQuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5pbml0aWFsaXplQW5ub3RhdGlvblBsdWdpbigpO1xuICAgIGlmICh0aGlzLl9jaGFydENvbmZpZy5jaGFydFR5cGUgPT09IENoYXJ0VHlwZXNTdHJpbmdFbnVtLkRPVUdITlVUKVxuICAgICAgQ2hhcnQub3ZlcnJpZGVzLmRvdWdobnV0LmN1dG91dCA9ICc4OCUnO1xuXG4gICAgdGhpcy5jaGFydCA9IG5ldyBDaGFydCh0aGlzLmNoYXJ0Q29udGV4dCwge1xuICAgICAgdHlwZTogdGhpcy5fY2hhcnRDb25maWcuY2hhcnRUeXBlLFxuICAgICAgZGF0YTogdGhpcy5fY2hhcnRDb25maWcuY2hhcnREYXRhLFxuICAgICAgb3B0aW9uczogdGhpcy5fY2hhcnRDb25maWcuY2hhcnRPcHRpb25zLFxuICAgICAgcGx1Z2luczogdGhpcy5wbHVnaW5zLFxuICAgIH0pO1xuXG4gICAgaWYgKCF0aGlzLl9jaGFydENvbmZpZy5pc0Rhc2hib2FyZENoYXJ0KVxuICAgICAgdGhpcy5jaGFydC5jb25maWcuZGF0YS5kYXRhc2V0cyA9IFtcbiAgICAgICAgLi4udGhpcy5fY2hhcnRDb25maWc/LlxuICAgICAgICAgIGNoYXJ0RGF0YT8uXG4gICAgICAgICAgZGF0YXNldHM/LlxuICAgICAgICAgIG1hcCgoaXRlbTogSUJhc2VEYXRhc2V0LCBpbmR4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBvaW50Q29uZmlnID0ge1xuICAgICAgICAgICAgICBwb2ludEJhY2tncm91bmRDb2xvcjogQ2hhcnRDb2xvcnNTdHJpbmdFbnVtLldISVRFLFxuICAgICAgICAgICAgICBwb2ludEJvcmRlcldpZHRoOiAyLFxuICAgICAgICAgICAgICBwb2ludFJhZGl1czogMyxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2hhcnRBbm5vdGF0aW9ucyhpdGVtLCBpbmR4KTtcblxuICAgICAgICAgICAgY29uc3QgeVNjYWxlID0gdGhpcy5jaGFydC5zY2FsZXNbRUNoYXJ0RXZlbnRQcm9wZXJ0aWVzLllfQVhJU18wXSBhc1xuICAgICAgICAgICAgICB8IENhdGVnb3J5U2NhbGVcbiAgICAgICAgICAgICAgfCBMaW5lYXJTY2FsZTtcblxuICAgICAgICAgICAgY29uc3QgYmFja2dyb3VuZENvbG9yID1cbiAgICAgICAgICAgICAgKGl0ZW0/LmNvbG9yICYmXG4gICAgICAgICAgICAgICAgaXRlbT8uY29sb3IyKSA/XG4gICAgICAgICAgICAgICAgQ2hhcnRIZWxwZXIuY3JlYXRlR3JhZGllbnQoXG4gICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0Q29udGV4dCxcbiAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRDYW52YXMsXG4gICAgICAgICAgICAgICAgICBpdGVtPy5jb2xvcixcbiAgICAgICAgICAgICAgICAgIGl0ZW0/LmNvbG9yMixcbiAgICAgICAgICAgICAgICApIDogaXRlbT8uY29sb3I7XG5cbiAgICAgICAgICAgIGNvbnN0IGRhdGFzZXRDb25maWcgPSB7XG4gICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgIHBvaW50Qm9yZGVyQ29sb3I6IGl0ZW0uY29sb3IsXG4gICAgICAgICAgICAgIC4uLnBvaW50Q29uZmlnLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgICAgICAgICAgIGZpbGw6IGl0ZW0/LmZpbGxcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PT0gQ2hhcnRUeXBlc1N0cmluZ0VudW0uRE9VR0hOVVQpXG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uZGF0YXNldENvbmZpZyxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGl0ZW0uYmFja2dyb3VuZENvbG9yXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFpdGVtLnNoaWZ0VmFsdWUpXG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uZGF0YXNldENvbmZpZyxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6XG4gICAgICAgICAgICAgICAgICBpdGVtPy5jb2xvciAmJlxuICAgICAgICAgICAgICAgICAgICBpdGVtPy5jb2xvcjIgJiZcbiAgICAgICAgICAgICAgICAgICAgaXRlbT8uY29sb3IgIT09IGl0ZW0/LmNvbG9yMiA/XG4gICAgICAgICAgICAgICAgICAgIENoYXJ0SGVscGVyLmNyZWF0ZUdyYWRpZW50KFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRDb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRDYW52YXMsXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbT8uY29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbT8uY29sb3IyICxcbiAgICAgICAgICAgICAgICAgICAgKSA6IGl0ZW0/LmNvbG9yLFxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNoaWZ0VmFsdWVQeDogbnVtYmVyID0geVNjYWxlLmdldFBpeGVsRm9yVmFsdWUoaXRlbS5zaGlmdFZhbHVlIHx8IDApO1xuICAgICAgICAgICAgY29uc3Qgc2hpZnRWYWx1ZUFkanVzdGVkOiBudW1iZXIgPVxuICAgICAgICAgICAgICBzaGlmdFZhbHVlUHggLyB5U2NhbGUubWF4SGVpZ2h0O1xuXG4gICAgICAgICAgICBjb25zdCBjb2xvcjE6IHN0cmluZyA9IGl0ZW0uY29sb3IgfHwgQ2hhcnRDb25zdGFudHMuU1RSSU5HX0VNUFRZO1xuICAgICAgICAgICAgY29uc3QgY29sb3IyOiBzdHJpbmcgPSBpdGVtLmNvbG9yMiB8fCBDaGFydENvbnN0YW50cy5TVFJJTkdfRU1QVFk7XG5cbiAgICAgICAgICAgIGNvbnN0IGJvcmRlckNvbG9yOiBDYW52YXNHcmFkaWVudCA9IENoYXJ0SGVscGVyLmNyZWF0ZUdyYWRpZW50V2l0aFNoaWZ0VmFsdWUoXG4gICAgICAgICAgICAgIHRoaXMuY2hhcnRDb250ZXh0LFxuICAgICAgICAgICAgICB5U2NhbGUubWF4SGVpZ2h0LFxuICAgICAgICAgICAgICBjb2xvcjEsXG4gICAgICAgICAgICAgIGNvbG9yMixcbiAgICAgICAgICAgICAgc2hpZnRWYWx1ZUFkanVzdGVkLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgLi4ucG9pbnRDb25maWcsXG4gICAgICAgICAgICAgIHBvaW50Qm9yZGVyQ29sb3I6IGJvcmRlckNvbG9yLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IENoYXJ0SGVscGVyLmNyZWF0ZUdyYWRpZW50V2l0aFNoaWZ0VmFsdWUoXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFydENvbnRleHQsXG4gICAgICAgICAgICAgICAgeVNjYWxlLm1heEhlaWdodCxcbiAgICAgICAgICAgICAgICBjb2xvcjEsXG4gICAgICAgICAgICAgICAgY29sb3IyLFxuICAgICAgICAgICAgICAgIHNoaWZ0VmFsdWVBZGp1c3RlZCxcbiAgICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIGJvcmRlckNvbG9yLFxuICAgICAgICAgICAgICBmaWxsOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgIF07XG5cbiAgICB0aGlzLmNoYXJ0LnVwZGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDaGFydCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jaGFydClcbiAgICAgIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gICAgdGhpcy5jcmVhdGVDaGFydCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDaGFydE9wdGlvbnNQcm9wZXJ0aWVzKCk6IHZvaWQge1xuICAgIGNvbnN0IGxhYmVscyA9IHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0RGF0YS5sYWJlbHM7XG5cbiAgICB0aGlzLl9jaGFydENvbmZpZy5jaGFydE9wdGlvbnMgPSB7XG4gICAgICByZXNwb25zaXZlOiB0cnVlLFxuICAgICAgbWFpbnRhaW5Bc3BlY3RSYXRpbzogZmFsc2UsXG4gICAgICBjbGlwOiBmYWxzZSxcbiAgICAgIGFuaW1hdGlvbjoge1xuICAgICAgICBvbkNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5hcmVBbmltYXRpb25zQ29tcGxlYXRlZCA9IHRydWU7XG4gICAgICAgICAgdGhpcy5jaGFydC5kcmF3KCk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUHJvZ3Jlc3M6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmFyZUFuaW1hdGlvbnNDb21wbGVhdGVkID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5jaGFydC5kcmF3KCk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgbGF5b3V0OiB7XG4gICAgICAgIHBhZGRpbmc6IHtcbiAgICAgICAgICB0b3A6IHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PT1cbiAgICAgICAgICAgIENoYXJ0VHlwZXNTdHJpbmdFbnVtLkRPVUdITlVUID9cbiAgICAgICAgICAgIDggOlxuICAgICAgICAgICAgMCxcbiAgICAgICAgICBib3R0b206IHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PT1cbiAgICAgICAgICAgIENoYXJ0VHlwZXNTdHJpbmdFbnVtLkRPVUdITlVUID9cbiAgICAgICAgICAgIDggOlxuICAgICAgICAgICAgMCxcbiAgICAgICAgICBsZWZ0OlxuICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSBDaGFydFR5cGVzU3RyaW5nRW51bS5CQVIgJiZcbiAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcudmVydGljYWx5QWxpZ25CYXJDaGFydFdpdGhMaW5lQ2FydFxuICAgICAgICAgICAgICA/IDZcbiAgICAgICAgICAgICAgOiAwLFxuICAgICAgICAgIHJpZ2h0OlxuICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSBDaGFydFR5cGVzU3RyaW5nRW51bS5CQVIgJiZcbiAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcudmVydGljYWx5QWxpZ25CYXJDaGFydFdpdGhMaW5lQ2FydFxuICAgICAgICAgICAgICA/IDZcbiAgICAgICAgICAgICAgOiAwLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHBsdWdpbnM6IHtcbiAgICAgICAgbGVnZW5kOiB7XG4gICAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBzY2FsZXM6IHtcbiAgICAgICAgeDoge1xuICAgICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgICBkaXNwbGF5OiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcG9zaXRpb246ICdib3R0b20nLFxuICAgICAgICAgIGdyaWQ6IHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGZhbHNlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGlja3M6IHtcbiAgICAgICAgICAgIGRpc3BsYXk6IHRydWUsXG4gICAgICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICAgICAgY29sb3I6IENoYXJ0Q29sb3JzU3RyaW5nRW51bS5YX0FYSVNfTEFCRUxfQ09MT1IsXG4gICAgICAgICAgICBmb250OiB7XG4gICAgICAgICAgICAgIHNpemU6IDExLFxuICAgICAgICAgICAgICBmYW1pbHk6IENoYXJ0Rm9udFByb3BlcnRpZXNTdHJpbmdFbnVtLkZPTlRfRkFNSUxZX01PTlRTRVJSQVQsXG4gICAgICAgICAgICAgIHdlaWdodDogQ2hhcnRGb250UHJvcGVydGllc1N0cmluZ0VudW0uRk9OVF9XRUlHSFRfQk9MREVSLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGF1dG9Ta2lwOiB0cnVlLFxuICAgICAgICAgICAgYXV0b1NraXBQYWRkaW5nOiAxMixcbiAgICAgICAgICAgIG1heFJvdGF0aW9uOiAwLFxuICAgICAgICAgICAgbWluUm90YXRpb246IDAsXG4gICAgICAgICAgICAvL0xhYmVsIHdyaXR0ZW4gaW4gMiBsaW5lcywgd2lsbCBiZSBhZGp1c3RlZCB3aXRoIG5ldyBkZXNpZ25cbiAgICAgICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbiAoXG4gICAgICAgICAgICAgIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgICAgICAgICAgIGluZGV4OiBudW1iZXJcbiAgICAgICAgICAgICk6IHN0cmluZyB8IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBsYWJlbHNbaW5kZXhdO1xuICAgICAgICAgICAgICBjb25zdCBtdWx0aUxpbmVMYWJlbCA9IGxhYmVsID8gbGFiZWwuc3BsaXQoJyAnKSA6IFtdO1xuICAgICAgICAgICAgICByZXR1cm4gbXVsdGlMaW5lTGFiZWw7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZGlzcGxheTogdGhpcy5fY2hhcnRDb25maWcuc2hvd1hBeGlzTGFiZWxzLFxuICAgICAgICAgIGJlZ2luQXRaZXJvOiB0cnVlLFxuICAgICAgICAgIG9mZnNldDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgeToge1xuICAgICAgICAgIGRpc3BsYXk6IGZhbHNlLFxuICAgICAgICAgIGJlZ2luQXRaZXJvOiB0cnVlLFxuICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICBtYXg6IDEsXG4gICAgICAgICAgb2Zmc2V0OiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBvbkhvdmVyOiAoZXZlbnQ6IENoYXJ0RXZlbnQsIGl0ZW06IEFjdGl2ZUVsZW1lbnRbXSkgPT4ge1xuXG4gICAgICAgIGlmICh0aGlzLl9jaGFydENvbmZpZy5oYXNWZXJ0aWNhbERhc2hlZEFubm90YXRpb24pIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZVZlcnRpY2FsRGFzaGVkTGluZSgpO1xuICAgICAgICAgIHRoaXMuc2V0VmVydGljYWxEYXNoZWRBbm5vdGF0aW9uTGluZShldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldE9yaWdpbmFsRG91Z2hudXRBcmNzQ29sb3IoKTtcblxuICAgICAgICBpZiAodGhpcy5fY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSBDaGFydFR5cGVzU3RyaW5nRW51bS5ET1VHSE5VVCkge1xuICAgICAgICAgIHRoaXMuaG92ZXJlZEluZGV4LmVtaXQoaXRlbVswXT8uaW5kZXggfHwgbnVsbCk7XG5cbiAgICAgICAgICBpdGVtWzBdPy5pbmRleCA+PSAwID9cbiAgICAgICAgICAgIHRoaXMuZm9jdXNEb3VnaG51dEFyYyhpdGVtWzBdPy5pbmRleCkgOlxuICAgICAgICAgICAgdGhpcy5zZXRPcmlnaW5hbERvdWdobnV0QXJjc0NvbG9yKCk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGZvY3VzRG91Z2hudXRBcmMoaW5kZXg6IG51bWJlciB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY2hhcnRDb25maWcuY2hhcnRUeXBlICE9PSBDaGFydFR5cGVzU3RyaW5nRW51bS5ET1VHSE5VVCB8fFxuICAgICAgaW5kZXggPT09IHRoaXMuY2hhcnQuZGF0YS5kYXRhc2V0c1swXS5kYXRhLmxlbmd0aCAtIDEpIHJldHVybjtcbiAgICBjb25zdCBjb2xvcnM6IHN0cmluZ1tdID0gdGhpcy5jaGFydD8uXG4gICAgICBkYXRhPy5cbiAgICAgIGRhdGFzZXRzWzBdPy5iYWNrZ3JvdW5kQ29sb3IgYXMgc3RyaW5nW107XG4gICAgY29uc3QgdXBkYXRlZENvbG9yczogc3RyaW5nW10gPSBjb2xvcnMubWFwKFxuICAgICAgKGNvbG9yOiBzdHJpbmcsIGluZHg6IG51bWJlcikgPT4ge1xuICAgICAgICBpZiAoaW5keCA9PT0gaW5kZXgpIHJldHVybiBjb2xvcjtcbiAgICAgICAgY29uc3QgY29udmVydGVkVmFsdWUgPSBDaGFydEhlbHBlci5jb252ZXJ0UmdiVG9SZ2JhKGNvbG9yLCAwLjIpO1xuICAgICAgICByZXR1cm4gY29udmVydGVkVmFsdWU7XG4gICAgICB9KTtcblxuICAgIHRoaXMuY2hhcnQuZGF0YS5kYXRhc2V0c1swXS5iYWNrZ3JvdW5kQ29sb3IgPSB1cGRhdGVkQ29sb3JzO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRPcmlnaW5hbERvdWdobnV0QXJjc0NvbG9yKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jaGFydENvbmZpZy5jaGFydFR5cGUgIT09IENoYXJ0VHlwZXNTdHJpbmdFbnVtLkRPVUdITlVUKSByZXR1cm47XG5cbiAgICBjb25zdCBjb2xvcnM6IHN0cmluZ1tdID1cbiAgICAgIHRoaXMuY2hhcnQuZGF0YS5kYXRhc2V0c1swXS5iYWNrZ3JvdW5kQ29sb3IgYXMgc3RyaW5nW107XG5cbiAgICB0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHNbMF0uYmFja2dyb3VuZENvbG9yID1cbiAgICAgIFsuLi5jb2xvcnMubWFwKChjb2xvcjogc3RyaW5nKSA9PiB7XG4gICAgICAgIHJldHVybiBDaGFydEhlbHBlci5yZ2JUb1JnYmEoY29sb3IsIDEpO1xuICAgICAgfSldO1xuXG4gICAgdGhpcy5jaGFydC51cGRhdGUoKTtcblxuICB9XG4gIHByaXZhdGUgc2V0Q2hhcnREYXRhUHJvcGVydGllcygpOiB2b2lkIHtcbiAgICBpZiAoKHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PT0gQ2hhcnRUeXBlc1N0cmluZ0VudW0uTElORSkpIHtcbiAgICAgIHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0RGF0YS5kYXRhc2V0cy5mb3JFYWNoKChkYXRhc2V0KSA9PiB7XG4gICAgICAgIGRhdGFzZXQub3JkZXIgPSBkYXRhc2V0Lm9yZGVyO1xuICAgICAgICBpZiAoQ2hhcnRUeXBlR3VhcmQuaXNMaW5lRGF0YXNldChkYXRhc2V0KSkge1xuICAgICAgICAgIGRhdGFzZXQudGVuc2lvbiA9IGRhdGFzZXQudGVuc2lvbiA/PyAwLjU7XG4gICAgICAgICAgZGF0YXNldC5jdWJpY0ludGVycG9sYXRpb25Nb2RlID1cbiAgICAgICAgICAgIGRhdGFzZXQuY3ViaWNJbnRlcnBvbGF0aW9uTW9kZSA/P1xuICAgICAgICAgICAgQ3ViaWNJbnRlcnBvbGF0aW9uU3RyaW5nRW51bS5NT05PVE9ORTtcbiAgICAgICAgICBkYXRhc2V0LnBvaW50Qm9yZGVyQ29sb3IgPVxuICAgICAgICAgICAgZGF0YXNldC5wb2ludEJvcmRlckNvbG9yID8/IENoYXJ0Q29sb3JzU3RyaW5nRW51bS5UUkFOU1BBUkVOVDtcbiAgICAgICAgICBkYXRhc2V0LnBvaW50QmFja2dyb3VuZENvbG9yID1cbiAgICAgICAgICAgIGRhdGFzZXQucG9pbnRCYWNrZ3JvdW5kQ29sb3IgPz8gQ2hhcnRDb2xvcnNTdHJpbmdFbnVtLlRSQU5TUEFSRU5UO1xuICAgICAgICAgIGRhdGFzZXQucG9pbnRCb3JkZXJXaWR0aCA9IGRhdGFzZXQucG9pbnRCb3JkZXJXaWR0aCA/PyAyO1xuICAgICAgICAgIGRhdGFzZXQuc3BhbkdhcHMgPSBkYXRhc2V0LnNwYW5HYXBzID8/IGZhbHNlO1xuICAgICAgICAgIGRhdGFzZXQuc2hvd0xpbmUgPSBkYXRhc2V0LnNob3dMaW5lID8/IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5zZXRNdWx0aXBsZVlBeGlzKHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0RGF0YSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRDaGFydFBsdWdpbnNQcm9wZXJ0aWVzKCk6IHZvaWQge1xuICAgIHRoaXMucGx1Z2lucyA9IFtcbiAgICAgIHtcbiAgICAgICAgaWQ6IENoYXJ0UGx1Z2luSWRzU3RyaW5nRW51bS5ISUdITElHSFRfU0VHTUVOVF9PTl9IT1ZFUixcbiAgICAgICAgYWZ0ZXJFdmVudDogKGNoYXJ0LCBldmVudCkgPT4ge1xuXG4gICAgICAgICAgY29uc3QgbmF0aXZlRXZlbnQgPSBldmVudC5ldmVudC5uYXRpdmUgYXMgTW91c2VFdmVudDtcblxuICAgICAgICAgIGlmIChldmVudC5ldmVudC50eXBlID09PSBDaGFydEV2ZW50VHlwZXNTdHJpbmdFbnVtLk1PVVNFX09VVCkge1xuICAgICAgICAgICAgY29uc3QgYm91bmRpbmdSZWN0ID0gdGhpcy5jaGFydC5jYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICBjb25zdCBpc01vdXNlT3V0c2lkZUNoYXJ0ID1cbiAgICAgICAgICAgICAgbmF0aXZlRXZlbnQuY2xpZW50WCA8IGJvdW5kaW5nUmVjdC5sZWZ0IHx8XG4gICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LmNsaWVudFggPiBib3VuZGluZ1JlY3QucmlnaHQgfHxcbiAgICAgICAgICAgICAgbmF0aXZlRXZlbnQuY2xpZW50WSA8IGJvdW5kaW5nUmVjdC50b3AgfHxcbiAgICAgICAgICAgICAgbmF0aXZlRXZlbnQuY2xpZW50WSA+IGJvdW5kaW5nUmVjdC5ib3R0b207XG5cbiAgICAgICAgICAgIGlmIChpc01vdXNlT3V0c2lkZUNoYXJ0KSB7XG4gICAgICAgICAgICAgIHRoaXMuX2hvdmVyZWRJbmRleCA9IG51bGw7XG4gICAgICAgICAgICAgIHRoaXMuY2hhcnRNYW5hZ2VyU2VydmljZT8uc2V0SG92ZXJTdGF0ZShudWxsLCB0aGlzLmNoYXJ0SWQpO1xuICAgICAgICAgICAgICB0aGlzLnJlbW92ZVZlcnRpY2FsRGFzaGVkTGluZUFuZEZvY3VzKCk7XG4gICAgICAgICAgICAgIHRoaXMuY2hhcnQuZHJhdygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghdGhpcy5fY2hhcnRDb25maWcuc2hvd1Rvb2x0aXBCYWNrZ3JvdW5kKSByZXR1cm47XG5cbiAgICAgICAgICBjb25zdCBib3VuZGluZ1JlY3QgPSB0aGlzLmNoYXJ0LmNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICBjb25zdCBtb3VzZUhvcml6b250YWxDb29yZGluYXRlID1cbiAgICAgICAgICAgIG5hdGl2ZUV2ZW50LmNsaWVudFggLSBib3VuZGluZ1JlY3QubGVmdDtcblxuICAgICAgICAgIGNvbnN0IHsgbGVmdCwgcmlnaHQgfSA9IHRoaXMuY2hhcnQuY2hhcnRBcmVhO1xuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgbW91c2VIb3Jpem9udGFsQ29vcmRpbmF0ZSA8IGxlZnQgfHxcbiAgICAgICAgICAgIG1vdXNlSG9yaXpvbnRhbENvb3JkaW5hdGUgPiByaWdodFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5faG92ZXJlZEluZGV4ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuY2hhcnRNYW5hZ2VyU2VydmljZT8uc2V0SG92ZXJTdGF0ZShudWxsLCB0aGlzLmNoYXJ0SWQpO1xuICAgICAgICAgICAgdGhpcy5jaGFydC5kcmF3KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgeFNjYWxlID0gdGhpcy5jaGFydC5zY2FsZXNbRUNoYXJ0RXZlbnRQcm9wZXJ0aWVzLlhdIGFzXG4gICAgICAgICAgICB8IENhdGVnb3J5U2NhbGVcbiAgICAgICAgICAgIHwgTGluZWFyU2NhbGU7XG5cbiAgICAgICAgICBjb25zdCB0aWNrUG9zaXRpb25zID0geFNjYWxlLnRpY2tzLm1hcCgodGljaykgPT5cbiAgICAgICAgICAgIHhTY2FsZS5nZXRQaXhlbEZvclZhbHVlKHRpY2sudmFsdWUpXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IHNlZ21lbnRCb3VuZGFyaWVzID0gdGlja1Bvc2l0aW9ucy5tYXAoKHRpY2tQb3MsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsZWZ0Qm91bmRhcnkgPVxuICAgICAgICAgICAgICBpbmRleCA9PT0gMCA/IGxlZnQgOiAodGlja1BvcyArIHRpY2tQb3NpdGlvbnNbaW5kZXggLSAxXSkgLyAyO1xuICAgICAgICAgICAgY29uc3QgcmlnaHRCb3VuZGFyeSA9XG4gICAgICAgICAgICAgIGluZGV4ID09PSB0aWNrUG9zaXRpb25zLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICA/IHJpZ2h0XG4gICAgICAgICAgICAgICAgOiAodGlja1BvcyArIHRpY2tQb3NpdGlvbnNbaW5kZXggKyAxXSkgLyAyO1xuXG4gICAgICAgICAgICByZXR1cm4geyBsZWZ0Qm91bmRhcnksIHJpZ2h0Qm91bmRhcnkgfTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IG5ld0hvdmVyZWRJbmRleCA9IHNlZ21lbnRCb3VuZGFyaWVzLmZpbmRJbmRleChcbiAgICAgICAgICAgIChib3VuZGFyeSkgPT5cbiAgICAgICAgICAgICAgbW91c2VIb3Jpem9udGFsQ29vcmRpbmF0ZSA+PSBib3VuZGFyeS5sZWZ0Qm91bmRhcnkgJiZcbiAgICAgICAgICAgICAgbW91c2VIb3Jpem9udGFsQ29vcmRpbmF0ZSA8IGJvdW5kYXJ5LnJpZ2h0Qm91bmRhcnlcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKG5ld0hvdmVyZWRJbmRleCAhPT0gdGhpcy5faG92ZXJlZEluZGV4KSB7XG4gICAgICAgICAgICB0aGlzLl9ob3ZlcmVkSW5kZXggPSBuZXdIb3ZlcmVkSW5kZXggPT09IC0xID8gbnVsbCA6IG5ld0hvdmVyZWRJbmRleDtcbiAgICAgICAgICAgIHRoaXMuY2hhcnRNYW5hZ2VyU2VydmljZT8uc2V0SG92ZXJTdGF0ZShcbiAgICAgICAgICAgICAgdGhpcy5faG92ZXJlZEluZGV4LFxuICAgICAgICAgICAgICB0aGlzLmNoYXJ0SWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmNoYXJ0LmRyYXcoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgYmVmb3JlRHJhdzogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9ob3ZlcmVkSW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgY2hhcnRBcmVhLFxuICAgICAgICAgICAgICBzY2FsZXM6IHsgeDogeFNjYWxlIH0sXG4gICAgICAgICAgICB9ID0gdGhpcy5jaGFydDtcblxuICAgICAgICAgICAgQ2hhcnRIZWxwZXIuaGlnaGxpZ2h0U2VnbWVudChcbiAgICAgICAgICAgICAgdGhpcy5jaGFydENvbnRleHQsXG4gICAgICAgICAgICAgIHhTY2FsZSBhcyBDYXRlZ29yeVNjYWxlIHwgTGluZWFyU2NhbGUsXG4gICAgICAgICAgICAgIGNoYXJ0QXJlYSxcbiAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuaGVpZ2h0LFxuICAgICAgICAgICAgICB0aGlzLl9ob3ZlcmVkSW5kZXhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6IENoYXJ0UGx1Z2luSWRzU3RyaW5nRW51bS5ISUdITElHSFRfUE9JTlRfT05fSE9WRVIsXG4gICAgICAgIGFmdGVyRHJhdzogKCkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuX2hvdmVyZWRJbmRleCAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuc2hvd0hpZ2hsaWdodFBvaW50T25Ib3ZlciAmJlxuICAgICAgICAgICAgdGhpcy5hcmVBbmltYXRpb25zQ29tcGxlYXRlZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgdmlzaWJsZURhdGFzZXRzID0gdGhpcy5fY2hhcnRDb25maWcuY2hhcnREYXRhLmRhdGFzZXRzLmZpbHRlcihcbiAgICAgICAgICAgICAgKGRhdGFzZXQpID0+ICFkYXRhc2V0LmhpZGRlblxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIENoYXJ0SGVscGVyLmhpZ2hsaWdodFBvaW50KFxuICAgICAgICAgICAgICB0aGlzLmNoYXJ0Q29udGV4dCxcbiAgICAgICAgICAgICAgdGhpcy5jaGFydCxcbiAgICAgICAgICAgICAgdGhpcy5faG92ZXJlZEluZGV4LFxuICAgICAgICAgICAgICB7IC4uLnRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0RGF0YSwgZGF0YXNldHM6IHZpc2libGVEYXRhc2V0cyB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiBDaGFydFBsdWdpbklkc1N0cmluZ0VudW0uQk9SREVSX0JPVFRPTV9MSU5FX0NIQVJULFxuICAgICAgICBiZWZvcmVEcmF3OiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2NoYXJ0Q29uZmlnPy5zaG93Qm90dG9tTGluZU9uTGluZUNoYXJ0KSB7XG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgIGN0eCxcbiAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgY2hhcnRBcmVhLFxuICAgICAgICAgICAgICBzY2FsZXM6IHsgeDogeFNjYWxlIH0sXG4gICAgICAgICAgICB9ID0gdGhpcy5jaGFydDtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFzZXQgPSBkYXRhLmRhdGFzZXRzWzBdO1xuXG4gICAgICAgICAgICBjb25zdCBmaXJzdEluZGV4ID0gMDtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RJbmRleCA9IGRhdGFzZXQuZGF0YS5sZW5ndGggLSAxO1xuXG4gICAgICAgICAgICBjb25zdCBmaXJzdFZhbHVlID0gZGF0YXNldC5kYXRhW2ZpcnN0SW5kZXhdO1xuICAgICAgICAgICAgY29uc3QgbGFzdFZhbHVlID0gZGF0YXNldC5kYXRhW2xhc3RJbmRleF07XG5cbiAgICAgICAgICAgIGlmIChmaXJzdFZhbHVlICE9PSB1bmRlZmluZWQgJiYgbGFzdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgY29uc3QgeFN0YXJ0ID0geFNjYWxlLmdldFBpeGVsRm9yVmFsdWUoZmlyc3RJbmRleCk7XG5cbiAgICAgICAgICAgICAgY29uc3QgeEVuZCA9IHhTY2FsZS5nZXRQaXhlbEZvclZhbHVlKGxhc3RJbmRleCk7XG4gICAgICAgICAgICAgIGNvbnN0IHlCb3R0b20gPSBjaGFydEFyZWEuYm90dG9tO1xuXG4gICAgICAgICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9XG4gICAgICAgICAgICAgICAgQ2hhcnRDb2xvcnNTdHJpbmdFbnVtLkJPUkRFUl9CT1RUT01fTElORV9DSEFSVF9DT0xPUjtcbiAgICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IDE7XG4gICAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgICAgY3R4Lm1vdmVUbyh4U3RhcnQsIHlCb3R0b20pO1xuICAgICAgICAgICAgICBjdHgubGluZVRvKHhFbmQsIHlCb3R0b20pO1xuICAgICAgICAgICAgICBjdHguc3Ryb2tlKCk7XG4gICAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgaWYgKHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PT0gQ2hhcnRUeXBlc1N0cmluZ0VudW0uRE9VR0hOVVQpXG4gICAgICB0aGlzLnBsdWdpbnMgPSBbXG4gICAgICAgIC4uLnRoaXMucGx1Z2lucyxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnZG91Z2hudXQtbGFiZWwnLFxuICAgICAgICAgIGJlZm9yZURhdGFzZXREcmF3OiAoY2hhcnQ6IENoYXJ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9jaGFydENvbmZpZy5jZW50ZXJMYWJlbHM/Lm1hcChcbiAgICAgICAgICAgICAgKGxhYmVsOiBJQ2hhcnRDZW50ZXJMYWJlbCwgaW5keDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgQ2hhcnRIZWxwZXIuZHJhd0RvdWdobnV0TGVnZW5kKFxuICAgICAgICAgICAgICAgICAgY2hhcnQsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGluZHgsXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldFRvcDogbGFiZWwucG9zaXRpb24/LnRvcCB8fCAwXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgbGFiZWwudmFsdWUsXG4gICAgICAgICAgICAgICAgICBsYWJlbC5mb250U2l6ZSxcbiAgICAgICAgICAgICAgICAgIGxhYmVsLmNvbG9yKVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDaGFydEFubm90YXRpb25zKGl0ZW06IElCYXNlRGF0YXNldCwgaW5keDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9jaGFydENvbmZpZy5hbm5vdGF0aW9ucz8ubGVuZ3RoKSByZXR1cm47XG5cbiAgICB0aGlzLl9jaGFydENvbmZpZy5cbiAgICAgIGFubm90YXRpb25zPy5cbiAgICAgIGZvckVhY2goKGFubm90YXRpb246IElDaGFydEFubm90YXRpb24sIGtleTogbnVtYmVyKSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0T3B0aW9ucy5wbHVnaW5zID0ge1xuICAgICAgICAgIC4uLnRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0T3B0aW9ucy5wbHVnaW5zLFxuICAgICAgICAgIGFubm90YXRpb246IHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0T3B0aW9ucz8ucGx1Z2lucz8uYW5ub3RhdGlvbixcbiAgICAgICAgICAgIGFubm90YXRpb25zOiB7XG4gICAgICAgICAgICAgIC4uLnRoaXMuX2NoYXJ0Q29uZmlnLlxuICAgICAgICAgICAgICAgIGNoYXJ0T3B0aW9ucz8uXG4gICAgICAgICAgICAgICAgcGx1Z2lucz8uXG4gICAgICAgICAgICAgICAgYW5ub3RhdGlvbj8uXG4gICAgICAgICAgICAgICAgYW5ub3RhdGlvbnMsXG4gICAgICAgICAgICAgIFtgJHtpdGVtLmxhYmVsfS0ke2luZHh9LSR7a2V5fWBdOiB7XG4gICAgICAgICAgICAgICAgaWQ6IGFubm90YXRpb24uaWQgfHwgYGFubm90YXRpb24tJHtpbmR4fS0ke2tleX1gLFxuICAgICAgICAgICAgICAgIHR5cGU6IGFubm90YXRpb24udHlwZSxcbiAgICAgICAgICAgICAgICBzY2FsZUlEOiBhbm5vdGF0aW9uLmF4aXMgfHwgaXRlbS55QXhpc0lELFxuICAgICAgICAgICAgICAgIHZhbHVlOiBhbm5vdGF0aW9uLnZhbHVlIHx8IGl0ZW0uc2hpZnRWYWx1ZSxcbiAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjogYW5ub3RhdGlvbi5jb2xvciB8fFxuICAgICAgICAgICAgICAgICAgQ2hhcnRDb2xvcnNTdHJpbmdFbnVtLlxuICAgICAgICAgICAgICAgICAgICBCT1JERVJfQk9UVE9NX0xJTkVfQ0hBUlRfQ09MT1IsXG4gICAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6IGFubm90YXRpb24uYm9yZGVyV2lkdGggfHwgMixcbiAgICAgICAgICAgICAgICBib3JkZXJEYXNoOiBhbm5vdGF0aW9uLmJvcmRlckRhc2ggfHwgWzAsIDBdLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgdGhpcy5jaGFydC51cGRhdGUoKTtcblxuICB9XG5cbiAgcHJpdmF0ZSBzZXRNdWx0aXBsZVlBeGlzKGNoYXJ0RGF0YTogSUNoYXJ0RGF0YTxJTGluZURhdGFzZXQ+KTogdm9pZCB7XG4gICAgY2hhcnREYXRhLmRhdGFzZXRzLmZvckVhY2goKGRhdGFzZXQsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGRhdGFzZXQudHlwZSA9PT0gQ2hhcnRUeXBlc1N0cmluZ0VudW0uTElORSB8fFxuICAgICAgICBkYXRhc2V0LnR5cGUgPT09IENoYXJ0VHlwZXNTdHJpbmdFbnVtLkJBUlxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHlBeGlzSUQgPSB0aGlzLl9jaGFydENvbmZpZy5pc011bHRpWUF4aXNcbiAgICAgICAgICA/IGB5LWF4aXMtJHtpbmRleH1gXG4gICAgICAgICAgOiBkYXRhc2V0LnlBeGlzSUQgfHwgJ3ktYXhpcy0wJztcblxuICAgICAgICAvLyBEZXRlY3QgaWYgdGhlIGRhdGFzZXQgaXMgYWxsIDBcbiAgICAgICAgY29uc3QgaXNBbGxaZXJvRGF0YXNldCA9IChkYXRhc2V0LmRhdGEgYXMgbnVtYmVyW10pLmV2ZXJ5KFxuICAgICAgICAgICh2YWw6IG51bWJlcikgPT4gdmFsID09PSAwXG4gICAgICAgICk7XG5cbiAgICAgICAgbGV0IG1pblZhbHVlID0gQ2hhcnRIZWxwZXIuY2FsY3VsYXRlTWluVmFsdWUoZGF0YXNldC5kYXRhIGFzIG51bWJlcltdKTtcbiAgICAgICAgbGV0IG1heFZhbHVlID0gQ2hhcnRIZWxwZXIuY2FsY3VsYXRlTWF4VmFsdWUoZGF0YXNldC5kYXRhIGFzIG51bWJlcltdKTtcbiAgICAgICAgY29uc3QgcGFkZGluZyA9IG1heFZhbHVlICogMC4wMztcblxuICAgICAgICAvLyBBZGp1c3Qgc2NhbGluZyBmb3IgYWxsIDAgZGF0YXNldHNcbiAgICAgICAgaWYgKGlzQWxsWmVyb0RhdGFzZXQpIHtcbiAgICAgICAgICBtaW5WYWx1ZSA9IDA7XG4gICAgICAgICAgbWF4VmFsdWUgPSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1pblZhbHVlID0gbWF4VmFsdWUgPT09IG1pblZhbHVlID8gbWluVmFsdWUgLSAwLjEgOiBtaW5WYWx1ZTtcbiAgICAgICAgICBtYXhWYWx1ZSA9XG4gICAgICAgICAgICBtYXhWYWx1ZSA9PT0gbWluVmFsdWUgPyBtYXhWYWx1ZSArIDAuMSA6IG1heFZhbHVlICsgcGFkZGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0T3B0aW9ucy5zY2FsZXMgPSB7XG4gICAgICAgICAgLi4udGhpcy5fY2hhcnRDb25maWcuY2hhcnRPcHRpb25zLnNjYWxlcyxcbiAgICAgICAgICBbeUF4aXNJRF06IHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGZhbHNlLFxuICAgICAgICAgICAgYmVnaW5BdFplcm86IHRydWUsXG4gICAgICAgICAgICBtaW46IG1pblZhbHVlLFxuICAgICAgICAgICAgbWF4OiBtYXhWYWx1ZSxcbiAgICAgICAgICAgIHN0YWNrZWQ6IHRoaXMuX2NoYXJ0Q29uZmlnLmlzU3RhY2tlZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIGNoYXJ0RGF0YS5kYXRhc2V0c1tpbmRleF0gPSB7XG4gICAgICAgICAgLi4uZGF0YXNldCxcbiAgICAgICAgICB5QXhpc0lELFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVWZXJ0aWNhbERhc2hlZExpbmUoKTogdm9pZCB7XG4gICAgY29uc3QgYW5ub3RhdGlvbnMgPVxuICAgICAgdGhpcy5fY2hhcnRDb25maWc/LlxuICAgICAgICBjaGFydE9wdGlvbnM/LlxuICAgICAgICBwbHVnaW5zPy5cbiAgICAgICAgYW5ub3RhdGlvbj8uXG4gICAgICAgIGFubm90YXRpb25zO1xuXG4gICAgY29uc3Qga2V5OiBzdHJpbmcgPSBDaGFydFBsdWdpbklkc1N0cmluZ0VudW0uWF9EQVNIRUQ7XG5cbiAgICBpZiAoYW5ub3RhdGlvbnMpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLl9jaGFydENvbmZpZz8uXG4gICAgICAgIGNoYXJ0T3B0aW9ucz8uXG4gICAgICAgIHBsdWdpbnM/LlxuICAgICAgICBhbm5vdGF0aW9uPy5cbiAgICAgICAgYW5ub3RhdGlvbnM/LlxuICAgICAgW2tleSBhcyBrZXlvZiB0eXBlb2YgYW5ub3RhdGlvbnNdO1xuICAgIH1cblxuICAgIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gIH1cblxuICBwcml2YXRlIHNldFZlcnRpY2FsRGFzaGVkQW5ub3RhdGlvbkxpbmUoZXZlbnQ6IENoYXJ0RXZlbnQsIGNvbG9yPzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgeyBsZWZ0LCByaWdodCB9ID0gdGhpcy5jaGFydC5jaGFydEFyZWE7XG5cbiAgICBjb25zdCB4U2NhbGUgPSB0aGlzLmNoYXJ0LnNjYWxlc1tFQ2hhcnRFdmVudFByb3BlcnRpZXMuWF0gYXNcbiAgICAgIHwgQ2F0ZWdvcnlTY2FsZVxuICAgICAgfCBMaW5lYXJTY2FsZTtcblxuICAgIGNvbnN0IHRpY2tQb3NpdGlvbnMgPVxuICAgICAgdGhpcy5fY2hhcnRDb25maWc/LlxuICAgICAgICBjaGFydERhdGE/LmxhYmVscz8uXG4gICAgICAgIG1hcChcbiAgICAgICAgICAoXG4gICAgICAgICAgICBsYWJlbDogc3RyaW5nLFxuICAgICAgICAgICAgaW5kZXg6IG51bWJlclxuICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHhTY2FsZS5nZXRQaXhlbEZvclZhbHVlKGluZGV4KVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICBjb25zdCBzZWdtZW50Qm91bmRhcmllcyA9IHRpY2tQb3NpdGlvbnMubWFwKCh0aWNrUG9zLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgbGVmdEJvdW5kYXJ5ID1cbiAgICAgICAgaW5kZXggPT09IDAgPyBsZWZ0IDogKHRpY2tQb3MgKyB0aWNrUG9zaXRpb25zW2luZGV4IC0gMV0pIC8gMjtcbiAgICAgIGNvbnN0IHJpZ2h0Qm91bmRhcnkgPVxuICAgICAgICBpbmRleCA9PT0gdGlja1Bvc2l0aW9ucy5sZW5ndGggLSAxXG4gICAgICAgICAgPyByaWdodFxuICAgICAgICAgIDogKHRpY2tQb3MgKyB0aWNrUG9zaXRpb25zW2luZGV4ICsgMV0pIC8gMjtcblxuICAgICAgcmV0dXJuIHsgbGVmdEJvdW5kYXJ5LCByaWdodEJvdW5kYXJ5IH07XG4gICAgfSk7XG5cbiAgICBjb25zdCBuYXRpdmVFdmVudCA9IGV2ZW50Lm5hdGl2ZSBhcyBNb3VzZUV2ZW50O1xuXG4gICAgY29uc3QgYm91bmRpbmdSZWN0ID0gdGhpcy5jaGFydC5jYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgbW91c2VIb3Jpem9udGFsQ29vcmRpbmF0ZSA9XG4gICAgICBuYXRpdmVFdmVudC5jbGllbnRYIC0gYm91bmRpbmdSZWN0LmxlZnQ7XG5cbiAgICBjb25zdCBuZXdIb3ZlcmVkSW5kZXggPSBzZWdtZW50Qm91bmRhcmllcy5maW5kSW5kZXgoXG4gICAgICAoYm91bmRhcnkpID0+XG4gICAgICAgIG1vdXNlSG9yaXpvbnRhbENvb3JkaW5hdGUgPj0gYm91bmRhcnkubGVmdEJvdW5kYXJ5ICYmXG4gICAgICAgIG1vdXNlSG9yaXpvbnRhbENvb3JkaW5hdGUgPCBib3VuZGFyeS5yaWdodEJvdW5kYXJ5XG4gICAgKTtcblxuICAgIGlmIChuZXdIb3ZlcmVkSW5kZXggPj0gMCkge1xuICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnRPcHRpb25zLnBsdWdpbnMgPSB7XG4gICAgICAgIC4uLnRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0T3B0aW9ucy5wbHVnaW5zLFxuICAgICAgICBhbm5vdGF0aW9uOiB7XG4gICAgICAgICAgLi4udGhpcy5fY2hhcnRDb25maWcuY2hhcnRPcHRpb25zPy5wbHVnaW5zPy5hbm5vdGF0aW9uLFxuICAgICAgICAgIGFubm90YXRpb25zOiB7XG4gICAgICAgICAgICAuLi50aGlzLl9jaGFydENvbmZpZy5cbiAgICAgICAgICAgICAgY2hhcnRPcHRpb25zPy5cbiAgICAgICAgICAgICAgcGx1Z2lucz8uXG4gICAgICAgICAgICAgIGFubm90YXRpb24/LlxuICAgICAgICAgICAgICBhbm5vdGF0aW9ucyxcbiAgICAgICAgICAgIFtDaGFydFBsdWdpbklkc1N0cmluZ0VudW0uWF9EQVNIRURdOiB7XG4gICAgICAgICAgICAgIC4uLkVDaGFydEFubm90YXRpb24uWF9EQVNIRUQsXG4gICAgICAgICAgICAgIHZhbHVlOiBuZXdIb3ZlcmVkSW5kZXgsXG4gICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBjb2xvciB8fCBDaGFydENvbG9yc1N0cmluZ0VudW0uXG4gICAgICAgICAgICAgICAgQk9SREVSX0JPVFRPTV9MSU5FX0NIQVJUX0NPTE9SLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgdGhpcy5ob3ZlcmVkSW5kZXguZW1pdChuZXdIb3ZlcmVkSW5kZXgpO1xuICAgIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlVmVydGljYWxEYXNoZWRMaW5lQW5kRm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5ob3ZlcmVkSW5kZXguZW1pdChudWxsKTtcbiAgICBpZiAodGhpcy5fY2hhcnRDb25maWcuaGFzVmVydGljYWxEYXNoZWRBbm5vdGF0aW9uKVxuICAgICAgdGhpcy5yZW1vdmVWZXJ0aWNhbERhc2hlZExpbmUoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxufVxuIiwiQGlmIChpc0NoYXJ0RGF0YUF2YWlsYWJsZSkge1xuICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIGxlZ2VuZDtcbiAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICBjb25maWc6IGxlZ2VuZERhdGEsXG4gICAgICAgICAgICB9XG4gICAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDxkaXZcbiAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgaGVpZ2h0OiBfY2hhcnRDb25maWcuaGVpZ2h0ICsgJ3B4JyxcbiAgICAgICAgICAgIHdpZHRoOiBfY2hhcnRDb25maWcud2lkdGggKyAnJScsXG4gICAgICAgIH1cIlxuICAgID5cbiAgICAgICAgPGNhbnZhcyAjY2hhcnRDYW52YXM+PC9jYW52YXM+XG4gICAgPC9kaXY+XG59IEBlbHNlIHtcbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgaGVpZ2h0OiBfY2hhcnRDb25maWcuaGVpZ2h0ICsgJ3B4JyxcbiAgICAgICAgICAgIHdpZHRoOiBfY2hhcnRDb25maWcud2lkdGggKyAnJScsXG4gICAgICAgIH1cIlxuICAgID5cbiAgICAgICAgPHN2Zy1pY29uXG4gICAgICAgICAgICBbc3JjXT1cIl9jaGFydENvbmZpZy5ub0RhdGFJbWFnZVwiXG4gICAgICAgICAgICBhbHQ9XCJObyBkYXRhIGF2YWlsYWJsZVwiXG4gICAgICAgICAgICBjbGFzcz1cIm5vLWRhdGEtc3ZnXCJcbiAgICAgICAgPjwvc3ZnLWljb24+XG4gICAgPC9kaXY+XG59XG48bmctdGVtcGxhdGUgI2xlZ2VuZCBsZXQtY29uZmlnPVwiY29uZmlnXCI+XG4gICAgQGlmIChjb25maWc/LmRhdGEpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29uZmlnLmhhc0hpZ2hsaWdodGVkQmFja2dyb3VuZCAmJiAnY29sb3JlZC1iYWNrZ3JvdW5kJ1wiXG4gICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoY29uZmlnLnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC10aXRsZSBmb250LXNpemUtMTQgdGEtZm9udC1leHRyYS1ib2xkXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGNvbmZpZy50aXRsZSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC13cmFwcGVyIGQtZmxleFwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKFxuICAgICAgICAgICAgICAgICAgICBpdGVtIG9mIGNvbmZpZy5kYXRhO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSAkaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIHRyYWNrIGl0ZW0ubmFtZVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1jb250ZW50LWNlbnRlciB0ZXh0LXNpemUtMTEgdGEtZm9udC1ib2xkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBpdGVtPy5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8uaXNMaW5lSW5kaWNhdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbGluZS1pbmRpY2F0b3InXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnY2lyY2xlLWluZGljYXRvcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBiYWNrZ3JvdW5kOiBpdGVtPy5jb2xvciB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zaXplLTE4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGl0ZW0/LnZhbHVlICE9PSAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IChpdGVtPy52YWx1ZSB8IHRob3VzYW5kU2VwYXJhdG9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfCB1bml0UG9zaXRpb246IGl0ZW0/LnVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuIl19
641
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtY2hhcnQvY2EtY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtY2hhcnQvY2EtY2hhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFFBQVEsRUFDUixTQUFTLEVBQ1QsWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUxQyxTQUFTO0FBQ1QsT0FBTyxFQUVMLEtBQUssR0FJTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLGdCQUFnQixNQUFNLDJCQUEyQixDQUFDO0FBR3pELFFBQVE7QUFDUixPQUFPLEVBRUwscUJBQXFCLEVBQ3JCLHdCQUF3QixFQUV4Qiw0QkFBNEIsRUFDNUIseUJBQXlCLEVBQ3pCLDZCQUE2QixFQUU3QixnQkFBZ0IsR0FDakIsTUFBTSxTQUFTLENBQUM7QUFFakIsVUFBVTtBQUNWLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU5QyxTQUFTO0FBQ1QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBa0JoRCxZQUFZO0FBQ1osT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBR25ELFFBQVE7QUFDUixPQUFPLEVB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Z0I7d0JBQ2hCLHFCQUFxQjtxQkFDdEI7OzBCQWlERSxRQUFRO3lDQTlDa0MsV0FBVztzQkFBdkQsU0FBUzt1QkFBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUVsQyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFFRixpQkFBaUI7c0JBRHBCLEtBQUs7Z0JBSU8sV0FBVztzQkFBdkIsS0FBSztnQkFjTyxhQUFhO3NCQUF6QixLQUFLO2dCQVNJLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBPcHRpb25hbCxcbiAgVmlld0NoaWxkLFxuICBFdmVudEVtaXR0ZXIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFueU9iamVjdCB9IGZyb20gJ2NoYXJ0LmpzL2Rpc3QvdHlwZXMvYmFzaWMnO1xuaW1wb3J0IHsgQW5ndWxhclN2Z0ljb25Nb2R1bGUgfSBmcm9tICdhbmd1bGFyLXN2Zy1pY29uJztcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuXG4vLyBDaGFydHNcbmltcG9ydCB7XG4gIENhdGVnb3J5U2NhbGUsXG4gIENoYXJ0LFxuICBDaGFydEV2ZW50LFxuICBMaW5lYXJTY2FsZSxcbiAgUGx1Z2luLFxufSBmcm9tICdjaGFydC5qcy9hdXRvJztcbmltcG9ydCBhbm5vdGF0aW9uUGx1Z2luIGZyb20gJ2NoYXJ0anMtcGx1Z2luLWFubm90YXRpb24nO1xuaW1wb3J0IHsgQ2hhcnRUeXBlIH0gZnJvbSAnY2hhcnQuanMnO1xuXG4vLyBFbnVtc1xuaW1wb3J0IHtcbiAgQ2hhcnRDb2xvcnNTdHJpbmdFbnVtLFxuICBFQ2hhcnRFdmVudFByb3BlcnRpZXMsXG4gIENoYXJ0UGx1Z2luSWRzU3RyaW5nRW51bSxcbiAgQ2hhcnRUeXBlc1N0cmluZ0VudW0sXG4gIEN1YmljSW50ZXJwb2xhdGlvblN0cmluZ0VudW0sXG4gIENoYXJ0RXZlbnRUeXBlc1N0cmluZ0VudW0sXG4gIENoYXJ0Rm9udFByb3BlcnRpZXNTdHJpbmdFbnVtLFxuICBFQ2hhcnRBbm5vdGF0aW9uVHlwZSxcbiAgRUNoYXJ0QW5ub3RhdGlvbixcbn0gZnJvbSAnLi9lbnVtcyc7XG5cbi8vIEhlbHBlcnNcbmltcG9ydCB7IENoYXJ0SGVscGVyIH0gZnJvbSAnLi91dGlscy9oZWxwZXJzJztcblxuLy8gR3VhcmRzXG5pbXBvcnQgeyBDaGFydFR5cGVHdWFyZCB9IGZyb20gJy4vdXRpbHMvZ3VhcmRzJztcblxuLy9Nb2RlbHNcbmltcG9ydCB7XG4gIElDaGFydERhdGEsXG4gIElMaW5lRGF0YXNldCxcbiAgSUNoYXJ0Q29uZmlndXJhdGlvbixcbiAgSUJhc2VEYXRhc2V0LFxuICBJQ2hhcnRBbm5vdGF0aW9uLFxuICBJQ2hhcnREYXRhc2V0SG92ZXIsXG4gIElDaGFydENlbnRlckxhYmVsLFxuICBJQ2hhcnRMZWdlbmRDb25maWdcbn0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHsgQWN0aXZlRWxlbWVudCB9IGZyb20gJ2NoYXJ0LmpzL2Rpc3QvcGx1Z2lucy9wbHVnaW4udG9vbHRpcCc7XG5cbi8vU2VydmljZXNcbmltcG9ydCB7IENoYXJ0TWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi9jYS1jaGFydC1tYW5hZ2VyL3NlcnZpY2VzJztcblxuLy8gQ29uc3RhbnRzXG5pbXBvcnQgeyBDaGFydENvbnN0YW50cyB9IGZyb20gJy4vdXRpbHMvY29uc3RhbnRzJztcbmltcG9ydCB7IF9EZWVwUGFydGlhbEFycmF5LCBfRGVlcFBhcnRpYWxPYmplY3QgfSBmcm9tICdjaGFydC5qcy9kaXN0L3R5cGVzL3V0aWxzJztcblxuLy8gUGlwZXNcbmltcG9ydCB7XG4gIFRob3VzYW5kU2VwYXJhdG9yUGlwZSxcbiAgVW5pdFBvc2l0aW9uUGlwZVxufSBmcm9tICcuLi8uLi9waXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1jYS1jaGFydCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYS1jaGFydC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NhLWNoYXJ0LmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgQW5ndWxhclN2Z0ljb25Nb2R1bGUsXG4gICAgVW5pdFBvc2l0aW9uUGlwZSxcbiAgICBUaG91c2FuZFNlcGFyYXRvclBpcGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIENhQ2hhcnRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgQFZpZXdDaGlsZCgnY2hhcnRDYW52YXMnLCB7IHN0YXRpYzogZmFsc2UgfSkgY2hhcnRDYW52YXMhOiBFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgpIGxlZ2VuZERhdGEhOiBJQ2hhcnRMZWdlbmRDb25maWc7XG4gIEBJbnB1dCgpIGNoYXJ0SWQhOiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIHNldCBjaGFydERhdGFzZXRIb3Zlcih2YWx1ZTogSUNoYXJ0RGF0YXNldEhvdmVyIHwgbnVsbCkge1xuICAgIGlmICh2YWx1ZSkgdGhpcy51cGRhdGVEYXRhc2V0QmFja2dyb3VuZE9uSG92ZXIodmFsdWUpO1xuICB9XG4gIEBJbnB1dCgpIHNldCBjaGFydENvbmZpZyh2YWx1ZTogSUNoYXJ0Q29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuX2NoYXJ0Q29uZmlnID0gdmFsdWU7XG4gICAgdGhpcy5pc0NoYXJ0RGF0YUF2YWlsYWJsZSA9IGZhbHNlO1xuICAgIFxuICAgIHRoaXMuaXNDaGFydERhdGFBdmFpbGFibGUgPSB0aGlzLl9jaGFydENvbmZpZz8uY2hhcnREYXRhPy5kYXRhc2V0cz8uc29tZSgoaXRlbTogSUJhc2VEYXRhc2V0KSA9PlxuICAgICAgaXRlbS5kYXRhLnNvbWUoKHZhbHVlOiBudW1iZXIgfCBudW1iZXJbXSkgPT5cbiAgICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyAodmFsdWVbMF0gIT09IDAgfHwgdmFsdWVbMV0gIT09IDApIDogdmFsdWUgIT09IDBcbiAgICAgIClcbiAgICApID8/IGZhbHNlO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgaWYgKHRoaXMuaXNDaGFydERhdGFBdmFpbGFibGUpXG4gICAgICB0aGlzLnVwZGF0ZUNoYXJ0KCk7XG4gIH1cbiAgQElucHV0KCkgc2V0IHNlbGVjdGVkSW5kZXgodmFsdWU6IG51bWJlcikge1xuICAgIGlmICghdGhpcy5jaGFydCB8fCAhdGhpcy5pc0NoYXJ0RGF0YUF2YWlsYWJsZSkgcmV0dXJuO1xuXG4gICAgaWYgKHZhbHVlICE9PSBudWxsKSB0aGlzLmZvY3VzRG91Z2hudXRBcmModmFsdWUpO1xuICAgIGVsc2UgdGhpcy5zZXRPcmlnaW5hbERvdWdobnV0QXJjc0NvbG9yKCk7XG5cbiAgICB0aGlzLmNoYXJ0LnVwZGF0ZSgpO1xuICB9XG5cbiAgQE91dHB1dCgpIGhvdmVyZWRJbmRleDogRXZlbnRFbWl0dGVyPG51bWJlciB8IG51bGw+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHByaXZhdGUgY2hhcnQhOiBDaGFydDtcbiAgcHJpdmF0ZSBjaGFydENvbnRleHQhOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XG4gIHByaXZhdGUgcGx1Z2lucz86IFBsdWdpbjxDaGFydFR5cGUsIEFueU9iamVjdD5bXTtcbiAgcHJpdmF0ZSBhcmVBbmltYXRpb25zQ29tcGxlYXRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9ob3ZlcmVkSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIHB1YmxpYyBfY2hhcnRDb25maWchOiBJQ2hhcnRDb25maWd1cmF0aW9uO1xuICBwdWJsaWMgaXNDaGFydERhdGFBdmFpbGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGNoYXJ0TWFuYWdlclNlcnZpY2U/OiBDaGFydE1hbmFnZXJTZXJ2aWNlXG4gICkgeyB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzQ2hhcnREYXRhQXZhaWxhYmxlKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVBbm5vdGF0aW9uUGx1Z2luKCk7XG4gICAgICB0aGlzLmNyZWF0ZUNoYXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0aWFsaXplQ2hhcnRNYW5hZ2VyU2VydmljZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplQ2hhcnRNYW5hZ2VyU2VydmljZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2hhcnRNYW5hZ2VyU2VydmljZSkgcmV0dXJuO1xuXG4gICAgdGhpcy5jaGFydE1hbmFnZXJTZXJ2aWNlLlxuICAgICAgaG92ZXJTdGF0ZSQuXG4gICAgICBwaXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICh7IGluZGV4LCBjaGFydElkIH0pID0+IHtcbiAgICAgICAgICBpZiAoY2hhcnRJZCAhPT0gdGhpcy5jaGFydElkKSB7XG4gICAgICAgICAgICB0aGlzLl9ob3ZlcmVkSW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgIGlmICh0aGlzLmNoYXJ0KSB0aGlzLmNoYXJ0LmRyYXcoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVBbm5vdGF0aW9uUGx1Z2luKCk6IHZvaWQge1xuICAgIENoYXJ0LnJlZ2lzdGVyKGFubm90YXRpb25QbHVnaW4pO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZURhdGFzZXRCYWNrZ3JvdW5kT25Ib3ZlcihcbiAgICBjaGFydERhdGFzZXRIb3ZlcjogSUNoYXJ0RGF0YXNldEhvdmVyXG4gICk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jaGFydCB8fCAhdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzKSByZXR1cm47XG5cbiAgICBpZiAoY2hhcnREYXRhc2V0SG92ZXIuaXNIb3ZlcmQpIHtcbiAgICAgIGNvbnN0IGdyYWRpZW50ID0gQ2hhcnRIZWxwZXIuY3JlYXRlR3JhZGllbnQoXG4gICAgICAgIHRoaXMuY2hhcnRDb250ZXh0LFxuICAgICAgICB0aGlzLmNoYXJ0Q2FudmFzLFxuICAgICAgICBjaGFydERhdGFzZXRIb3Zlci5jb2xvcixcbiAgICAgICAgY2hhcnREYXRhc2V0SG92ZXIuY29sb3IsXG4gICAgICAgIDAuNixcbiAgICAgICAgMC4xLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgICAgdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzID1cbiAgICAgICAgdGhpcy5jaGFydD8uXG4gICAgICAgICAgZGF0YT8uXG4gICAgICAgICAgZGF0YXNldHM/LlxuICAgICAgICAgIG1hcCgoZGF0YXNldCkgPT4ge1xuICAgICAgICAgICAgaWYgKGRhdGFzZXQuaGlkZGVuKSByZXR1cm4gZGF0YXNldDtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBkYXRhc2V0Py5sYWJlbD8udG9VcHBlckNhc2UoKSA9PT1cbiAgICAgICAgICAgICAgY2hhcnREYXRhc2V0SG92ZXI/LmxhYmVsPy50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY29uc3QgaG92ZXJkRGF0YVNldCA9IHtcbiAgICAgICAgICAgICAgICAuLi5kYXRhc2V0LFxuICAgICAgICAgICAgICAgIGZpbGw6IHRydWUsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBncmFkaWVudCxcbiAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjogY2hhcnREYXRhc2V0SG92ZXIuY29sb3IsXG4gICAgICAgICAgICAgICAgb3JkZXI6IDEsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHJldHVybiBob3ZlcmREYXRhU2V0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3QgYm9yZGVyQ29sb3JXaXRoT3BhY2l0eSA9IENoYXJ0SGVscGVyLmNoYW5nZU9wYWNpdHlPZlJnYk9yUmdiYShcbiAgICAgICAgICAgICAgICBkYXRhc2V0LmJvcmRlckNvbG9yIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgICAwLjJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5kYXRhc2V0LFxuICAgICAgICAgICAgICAgIGZpbGw6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBib3JkZXJDb2xvcldpdGhPcGFjaXR5LFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHMgPVxuICAgICAgICB0aGlzLmNoYXJ0XG4gICAgICAgICAgLmRhdGFcbiAgICAgICAgICAuZGF0YXNldHNcbiAgICAgICAgICAubWFwKChkYXRhc2V0KSA9PiB7XG4gICAgICAgICAgICBpZiAoIWRhdGFzZXQuaGlkZGVuKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsQ29sb3IgPSBkYXRhc2V0LmJvcmRlckNvbG9yXG4gICAgICAgICAgICAgICAgPyBDaGFydEhlbHBlci5jaGFuZ2VPcGFjaXR5T2ZSZ2JPclJnYmEoXG4gICAgICAgICAgICAgICAgICBkYXRhc2V0LmJvcmRlckNvbG9yIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBDaGFydENvbnN0YW50cy5TVFJJTkdfRU1QVFk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5kYXRhc2V0LFxuICAgICAgICAgICAgICAgIGZpbGw6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBvcmlnaW5hbENvbG9yLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogQ2hhcnRDb25zdGFudHMuU1RSSU5HX0VNUFRZLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHJldHVybiBkYXRhc2V0O1xuICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNoYXJ0KCk6IHZvaWQge1xuICAgIHRoaXMuY2hhcnRDb250ZXh0ID0gdGhpcy5jaGFydENhbnZhcz8uXG4gICAgICBuYXRpdmVFbGVtZW50Py5cbiAgICAgIGdldENvbnRleHQoJzJkJyk7XG5cbiAgICB0aGlzLnNldENoYXJ0T3B0aW9uc1Byb3BlcnRpZXMoKTtcbiAgICB0aGlzLnNldENoYXJ0RGF0YVByb3BlcnRpZXMoKTtcbiAgICB0aGlzLnNldENoYXJ0UGx1Z2luc1Byb3BlcnRpZXMoKTtcblxuICAgIGlmICh0aGlzLmNoYXJ0KSB0aGlzLmNoYXJ0LmRlc3Ryb3koKTtcblxuICAgIHRoaXMuaW5pdGlhbGl6ZUFubm90YXRpb25QbHVnaW4oKTtcbiAgICBpZiAodGhpcy5fY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSBDaGFydFR5cGVzU3RyaW5nRW51bS5ET1VHSE5VVClcbiAgICAgIENoYXJ0Lm92ZXJyaWRlcy5kb3VnaG51dC5jdXRvdXQgPSAnODglJztcblxuICAgIHRoaXMuY2hhcnQgPSBuZXcgQ2hhcnQodGhpcy5jaGFydENvbnRleHQsIHtcbiAgICAgIHR5cGU6IHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0VHlwZSxcbiAgICAgIGRhdGE6IHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0RGF0YSxcbiAgICAgIG9wdGlvbnM6IHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0T3B0aW9ucyxcbiAgICAgIHBsdWdpbnM6IHRoaXMucGx1Z2lucyxcbiAgICB9KTtcblxuICAgIGlmICghdGhpcy5fY2hhcnRDb25maWcuaXNEYXNoYm9hcmRDaGFydClcbiAgICAgIHRoaXMuY2hhcnQuY29uZmlnLmRhdGEuZGF0YXNldHMgPSBbXG4gICAgICAgIC4uLnRoaXMuX2NoYXJ0Q29uZmlnPy5cbiAgICAgICAgICBjaGFydERhdGE/LlxuICAgICAgICAgIGRhdGFzZXRzPy5cbiAgICAgICAgICBtYXAoKGl0ZW06IElCYXNlRGF0YXNldCwgaW5keDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwb2ludENvbmZpZyA9IHtcbiAgICAgICAgICAgICAgcG9pbnRCYWNrZ3JvdW5kQ29sb3I6IENoYXJ0Q29sb3JzU3RyaW5nRW51bS5XSElURSxcbiAgICAgICAgICAgICAgcG9pbnRCb3JkZXJXaWR0aDogMixcbiAgICAgICAgICAgICAgcG9pbnRSYWRpdXM6IDMsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNoYXJ0QW5ub3RhdGlvbnMoaXRlbSwgaW5keCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHlTY2FsZSA9IHRoaXMuY2hhcnQuc2NhbGVzW0VDaGFydEV2ZW50UHJvcGVydGllcy5ZX0FYSVNfMF0gYXNcbiAgICAgICAgICAgICAgfCBDYXRlZ29yeVNjYWxlXG4gICAgICAgICAgICAgIHwgTGluZWFyU2NhbGU7XG5cbiAgICAgICAgICAgIGNvbnN0IGJhY2tncm91bmRDb2xvciA9XG4gICAgICAgICAgICAgIChpdGVtPy5jb2xvciAmJlxuICAgICAgICAgICAgICAgIGl0ZW0/LmNvbG9yMikgP1xuICAgICAgICAgICAgICAgIENoYXJ0SGVscGVyLmNyZWF0ZUdyYWRpZW50KFxuICAgICAgICAgICAgICAgICAgdGhpcy5jaGFydENvbnRleHQsXG4gICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0Q2FudmFzLFxuICAgICAgICAgICAgICAgICAgaXRlbT8uY29sb3IsXG4gICAgICAgICAgICAgICAgICBpdGVtPy5jb2xvcjIsXG4gICAgICAgICAgICAgICAgKSA6IGl0ZW0/LmNvbG9yO1xuXG4gICAgICAgICAgICBjb25zdCBkYXRhc2V0Q29uZmlnID0ge1xuICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICBwb2ludEJvcmRlckNvbG9yOiBpdGVtLmNvbG9yLFxuICAgICAgICAgICAgICAuLi5wb2ludENvbmZpZyxcbiAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yLFxuICAgICAgICAgICAgICBmaWxsOiBpdGVtPy5maWxsXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9jaGFydENvbmZpZy5jaGFydFR5cGUgPT09IENoYXJ0VHlwZXNTdHJpbmdFbnVtLkRPVUdITlVUKVxuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLmRhdGFzZXRDb25maWcsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBpdGVtLmJhY2tncm91bmRDb2xvclxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghaXRlbS5zaGlmdFZhbHVlKVxuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLmRhdGFzZXRDb25maWcsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOlxuICAgICAgICAgICAgICAgICAgaXRlbT8uY29sb3IgJiZcbiAgICAgICAgICAgICAgICAgICAgaXRlbT8uY29sb3IyICYmXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0/LmNvbG9yICE9PSBpdGVtPy5jb2xvcjIgP1xuICAgICAgICAgICAgICAgICAgICBDaGFydEhlbHBlci5jcmVhdGVHcmFkaWVudChcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0Q29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0Q2FudmFzLFxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LmNvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LmNvbG9yMiAsXG4gICAgICAgICAgICAgICAgICAgICkgOiBpdGVtPy5jb2xvcixcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzaGlmdFZhbHVlUHg6IG51bWJlciA9IHlTY2FsZS5nZXRQaXhlbEZvclZhbHVlKGl0ZW0uc2hpZnRWYWx1ZSB8fCAwKTtcbiAgICAgICAgICAgIGNvbnN0IHNoaWZ0VmFsdWVBZGp1c3RlZDogbnVtYmVyID1cbiAgICAgICAgICAgICAgc2hpZnRWYWx1ZVB4IC8geVNjYWxlLm1heEhlaWdodDtcblxuICAgICAgICAgICAgY29uc3QgY29sb3IxOiBzdHJpbmcgPSBpdGVtLmNvbG9yIHx8IENoYXJ0Q29uc3RhbnRzLlNUUklOR19FTVBUWTtcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yMjogc3RyaW5nID0gaXRlbS5jb2xvcjIgfHwgQ2hhcnRDb25zdGFudHMuU1RSSU5HX0VNUFRZO1xuXG4gICAgICAgICAgICBjb25zdCBib3JkZXJDb2xvcjogQ2FudmFzR3JhZGllbnQgPSBDaGFydEhlbHBlci5jcmVhdGVHcmFkaWVudFdpdGhTaGlmdFZhbHVlKFxuICAgICAgICAgICAgICB0aGlzLmNoYXJ0Q29udGV4dCxcbiAgICAgICAgICAgICAgeVNjYWxlLm1heEhlaWdodCxcbiAgICAgICAgICAgICAgY29sb3IxLFxuICAgICAgICAgICAgICBjb2xvcjIsXG4gICAgICAgICAgICAgIHNoaWZ0VmFsdWVBZGp1c3RlZCxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgIC4uLnBvaW50Q29uZmlnLFxuICAgICAgICAgICAgICBwb2ludEJvcmRlckNvbG9yOiBib3JkZXJDb2xvcixcbiAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBDaGFydEhlbHBlci5jcmVhdGVHcmFkaWVudFdpdGhTaGlmdFZhbHVlKFxuICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRDb250ZXh0LFxuICAgICAgICAgICAgICAgIHlTY2FsZS5tYXhIZWlnaHQsXG4gICAgICAgICAgICAgICAgY29sb3IxLFxuICAgICAgICAgICAgICAgIGNvbG9yMixcbiAgICAgICAgICAgICAgICBzaGlmdFZhbHVlQWRqdXN0ZWQsXG4gICAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBib3JkZXJDb2xvcixcbiAgICAgICAgICAgICAgZmlsbDogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICBdO1xuXG4gICAgdGhpcy5jaGFydC51cGRhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ2hhcnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2hhcnQpXG4gICAgICB0aGlzLmNoYXJ0LnVwZGF0ZSgpO1xuICAgIHRoaXMuY3JlYXRlQ2hhcnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q2hhcnRPcHRpb25zUHJvcGVydGllcygpOiB2b2lkIHtcbiAgICBjb25zdCBsYWJlbHMgPSB0aGlzLl9jaGFydENvbmZpZy5jaGFydERhdGEubGFiZWxzO1xuXG4gICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnRPcHRpb25zID0ge1xuICAgICAgcmVzcG9uc2l2ZTogdHJ1ZSxcbiAgICAgIG1haW50YWluQXNwZWN0UmF0aW86IGZhbHNlLFxuICAgICAgY2xpcDogZmFsc2UsXG4gICAgICBhbmltYXRpb246IHtcbiAgICAgICAgb25Db21wbGV0ZTogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuYXJlQW5pbWF0aW9uc0NvbXBsZWF0ZWQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuY2hhcnQuZHJhdygpO1xuICAgICAgICB9LFxuICAgICAgICBvblByb2dyZXNzOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5hcmVBbmltYXRpb25zQ29tcGxlYXRlZCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuY2hhcnQuZHJhdygpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGxheW91dDoge1xuICAgICAgICBwYWRkaW5nOiB7XG4gICAgICAgICAgdG9wOiB0aGlzLl9jaGFydENvbmZpZy5jaGFydFR5cGUgPT09XG4gICAgICAgICAgICBDaGFydFR5cGVzU3RyaW5nRW51bS5ET1VHSE5VVCA/XG4gICAgICAgICAgICA4IDpcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgYm90dG9tOiB0aGlzLl9jaGFydENvbmZpZy5jaGFydFR5cGUgPT09XG4gICAgICAgICAgICBDaGFydFR5cGVzU3RyaW5nRW51bS5ET1VHSE5VVCA/XG4gICAgICAgICAgICA4IDpcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgbGVmdDpcbiAgICAgICAgICAgIHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PT0gQ2hhcnRUeXBlc1N0cmluZ0VudW0uQkFSICYmXG4gICAgICAgICAgICAgIHRoaXMuX2NoYXJ0Q29uZmlnLnZlcnRpY2FseUFsaWduQmFyQ2hhcnRXaXRoTGluZUNhcnRcbiAgICAgICAgICAgICAgPyA2XG4gICAgICAgICAgICAgIDogMCxcbiAgICAgICAgICByaWdodDpcbiAgICAgICAgICAgIHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PT0gQ2hhcnRUeXBlc1N0cmluZ0VudW0uQkFSICYmXG4gICAgICAgICAgICAgIHRoaXMuX2NoYXJ0Q29uZmlnLnZlcnRpY2FseUFsaWduQmFyQ2hhcnRXaXRoTGluZUNhcnRcbiAgICAgICAgICAgICAgPyA2XG4gICAgICAgICAgICAgIDogMCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBwbHVnaW5zOiB7XG4gICAgICAgIGxlZ2VuZDoge1xuICAgICAgICAgIGRpc3BsYXk6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgc2NhbGVzOiB7XG4gICAgICAgIHg6IHtcbiAgICAgICAgICB0aXRsZToge1xuICAgICAgICAgICAgZGlzcGxheTogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBvc2l0aW9uOiAnYm90dG9tJyxcbiAgICAgICAgICBncmlkOiB7XG4gICAgICAgICAgICBkaXNwbGF5OiBmYWxzZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRpY2tzOiB7XG4gICAgICAgICAgICBkaXNwbGF5OiB0cnVlLFxuICAgICAgICAgICAgcGFkZGluZzogMCxcbiAgICAgICAgICAgIGNvbG9yOiBDaGFydENvbG9yc1N0cmluZ0VudW0uWF9BWElTX0xBQkVMX0NPTE9SLFxuICAgICAgICAgICAgZm9udDoge1xuICAgICAgICAgICAgICBzaXplOiAxMSxcbiAgICAgICAgICAgICAgZmFtaWx5OiBDaGFydEZvbnRQcm9wZXJ0aWVzU3RyaW5nRW51bS5GT05UX0ZBTUlMWV9NT05UU0VSUkFULFxuICAgICAgICAgICAgICB3ZWlnaHQ6IENoYXJ0Rm9udFByb3BlcnRpZXNTdHJpbmdFbnVtLkZPTlRfV0VJR0hUX0JPTERFUixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhdXRvU2tpcDogdHJ1ZSxcbiAgICAgICAgICAgIGF1dG9Ta2lwUGFkZGluZzogMTIsXG4gICAgICAgICAgICBtYXhSb3RhdGlvbjogMCxcbiAgICAgICAgICAgIG1pblJvdGF0aW9uOiAwLFxuICAgICAgICAgICAgLy9MYWJlbCB3cml0dGVuIGluIDIgbGluZXMsIHdpbGwgYmUgYWRqdXN0ZWQgd2l0aCBuZXcgZGVzaWduXG4gICAgICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24gKFxuICAgICAgICAgICAgICB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyLFxuICAgICAgICAgICAgICBpbmRleDogbnVtYmVyXG4gICAgICAgICAgICApOiBzdHJpbmcgfCBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gbGFiZWxzW2luZGV4XTtcbiAgICAgICAgICAgICAgY29uc3QgbXVsdGlMaW5lTGFiZWwgPSBsYWJlbCA/IGxhYmVsLnNwbGl0KCcgJykgOiBbXTtcbiAgICAgICAgICAgICAgcmV0dXJuIG11bHRpTGluZUxhYmVsO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRpc3BsYXk6IHRoaXMuX2NoYXJ0Q29uZmlnLnNob3dYQXhpc0xhYmVscyxcbiAgICAgICAgICBiZWdpbkF0WmVybzogdHJ1ZSxcbiAgICAgICAgICBvZmZzZXQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHk6IHtcbiAgICAgICAgICBkaXNwbGF5OiBmYWxzZSxcbiAgICAgICAgICBiZWdpbkF0WmVybzogdHJ1ZSxcbiAgICAgICAgICBtaW46IDAsXG4gICAgICAgICAgbWF4OiAxLFxuICAgICAgICAgIG9mZnNldDogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgb25Ib3ZlcjogKGV2ZW50OiBDaGFydEV2ZW50LCBpdGVtOiBBY3RpdmVFbGVtZW50W10pID0+IHtcblxuICAgICAgICBpZiAodGhpcy5fY2hhcnRDb25maWcuaGFzVmVydGljYWxEYXNoZWRBbm5vdGF0aW9uKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVWZXJ0aWNhbERhc2hlZExpbmUoKTtcbiAgICAgICAgICB0aGlzLnNldFZlcnRpY2FsRGFzaGVkQW5ub3RhdGlvbkxpbmUoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRPcmlnaW5hbERvdWdobnV0QXJjc0NvbG9yKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PT0gQ2hhcnRUeXBlc1N0cmluZ0VudW0uRE9VR0hOVVQpIHtcbiAgICAgICAgICB0aGlzLmhvdmVyZWRJbmRleC5lbWl0KGl0ZW1bMF0/LmluZGV4IHx8IG51bGwpO1xuXG4gICAgICAgICAgaXRlbVswXT8uaW5kZXggPj0gMCA/XG4gICAgICAgICAgICB0aGlzLmZvY3VzRG91Z2hudXRBcmMoaXRlbVswXT8uaW5kZXgpIDpcbiAgICAgICAgICAgIHRoaXMuc2V0T3JpZ2luYWxEb3VnaG51dEFyY3NDb2xvcigpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmNoYXJ0LnVwZGF0ZSgpO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c0RvdWdobnV0QXJjKGluZGV4OiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0VHlwZSAhPT0gQ2hhcnRUeXBlc1N0cmluZ0VudW0uRE9VR0hOVVQgfHxcbiAgICAgIGluZGV4ID09PSB0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHNbMF0uZGF0YS5sZW5ndGggLSAxKSByZXR1cm47XG4gICAgY29uc3QgY29sb3JzOiBzdHJpbmdbXSA9IHRoaXMuY2hhcnQ/LlxuICAgICAgZGF0YT8uXG4gICAgICBkYXRhc2V0c1swXT8uYmFja2dyb3VuZENvbG9yIGFzIHN0cmluZ1tdO1xuICAgIGNvbnN0IHVwZGF0ZWRDb2xvcnM6IHN0cmluZ1tdID0gY29sb3JzLm1hcChcbiAgICAgIChjb2xvcjogc3RyaW5nLCBpbmR4OiBudW1iZXIpID0+IHtcbiAgICAgICAgaWYgKGluZHggPT09IGluZGV4KSByZXR1cm4gY29sb3I7XG4gICAgICAgIGNvbnN0IGNvbnZlcnRlZFZhbHVlID0gQ2hhcnRIZWxwZXIuY29udmVydFJnYlRvUmdiYShjb2xvciwgMC4yKTtcbiAgICAgICAgcmV0dXJuIGNvbnZlcnRlZFZhbHVlO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHNbMF0uYmFja2dyb3VuZENvbG9yID0gdXBkYXRlZENvbG9ycztcbiAgfVxuXG4gIHByaXZhdGUgc2V0T3JpZ2luYWxEb3VnaG51dEFyY3NDb2xvcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY2hhcnRDb25maWcuY2hhcnRUeXBlICE9PSBDaGFydFR5cGVzU3RyaW5nRW51bS5ET1VHSE5VVCkgcmV0dXJuO1xuXG4gICAgY29uc3QgY29sb3JzOiBzdHJpbmdbXSA9XG4gICAgICB0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHNbMF0uYmFja2dyb3VuZENvbG9yIGFzIHN0cmluZ1tdO1xuXG4gICAgdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzWzBdLmJhY2tncm91bmRDb2xvciA9XG4gICAgICBbLi4uY29sb3JzLm1hcCgoY29sb3I6IHN0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4gQ2hhcnRIZWxwZXIucmdiVG9SZ2JhKGNvbG9yLCAxKTtcbiAgICAgIH0pXTtcblxuICAgIHRoaXMuY2hhcnQudXBkYXRlKCk7XG5cbiAgfVxuICBwcml2YXRlIHNldENoYXJ0RGF0YVByb3BlcnRpZXMoKTogdm9pZCB7XG4gICAgaWYgKCh0aGlzLl9jaGFydENvbmZpZy5jaGFydFR5cGUgPT09IENoYXJ0VHlwZXNTdHJpbmdFbnVtLkxJTkUpKSB7XG4gICAgICB0aGlzLl9jaGFydENvbmZpZy5jaGFydERhdGEuZGF0YXNldHMuZm9yRWFjaCgoZGF0YXNldCkgPT4ge1xuICAgICAgICBkYXRhc2V0Lm9yZGVyID0gZGF0YXNldC5vcmRlcjtcbiAgICAgICAgaWYgKENoYXJ0VHlwZUd1YXJkLmlzTGluZURhdGFzZXQoZGF0YXNldCkpIHtcbiAgICAgICAgICBkYXRhc2V0LnRlbnNpb24gPSBkYXRhc2V0LnRlbnNpb24gPz8gMC41O1xuICAgICAgICAgIGRhdGFzZXQuY3ViaWNJbnRlcnBvbGF0aW9uTW9kZSA9XG4gICAgICAgICAgICBkYXRhc2V0LmN1YmljSW50ZXJwb2xhdGlvbk1vZGUgPz9cbiAgICAgICAgICAgIEN1YmljSW50ZXJwb2xhdGlvblN0cmluZ0VudW0uTU9OT1RPTkU7XG4gICAgICAgICAgZGF0YXNldC5wb2ludEJvcmRlckNvbG9yID1cbiAgICAgICAgICAgIGRhdGFzZXQucG9pbnRCb3JkZXJDb2xvciA/PyBDaGFydENvbG9yc1N0cmluZ0VudW0uVFJBTlNQQVJFTlQ7XG4gICAgICAgICAgZGF0YXNldC5wb2ludEJhY2tncm91bmRDb2xvciA9XG4gICAgICAgICAgICBkYXRhc2V0LnBvaW50QmFja2dyb3VuZENvbG9yID8/IENoYXJ0Q29sb3JzU3RyaW5nRW51bS5UUkFOU1BBUkVOVDtcbiAgICAgICAgICBkYXRhc2V0LnBvaW50Qm9yZGVyV2lkdGggPSBkYXRhc2V0LnBvaW50Qm9yZGVyV2lkdGggPz8gMjtcbiAgICAgICAgICBkYXRhc2V0LnNwYW5HYXBzID0gZGF0YXNldC5zcGFuR2FwcyA/PyBmYWxzZTtcbiAgICAgICAgICBkYXRhc2V0LnNob3dMaW5lID0gZGF0YXNldC5zaG93TGluZSA/PyB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2V0TXVsdGlwbGVZQXhpcyh0aGlzLl9jaGFydENvbmZpZy5jaGFydERhdGEpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0Q2hhcnRQbHVnaW5zUHJvcGVydGllcygpOiB2b2lkIHtcbiAgICB0aGlzLnBsdWdpbnMgPSBbXG4gICAgICB7XG4gICAgICAgIGlkOiBDaGFydFBsdWdpbklkc1N0cmluZ0VudW0uSElHSExJR0hUX1NFR01FTlRfT05fSE9WRVIsXG4gICAgICAgIGFmdGVyRXZlbnQ6IChjaGFydCwgZXZlbnQpID0+IHtcblxuICAgICAgICAgIGNvbnN0IG5hdGl2ZUV2ZW50ID0gZXZlbnQuZXZlbnQubmF0aXZlIGFzIE1vdXNlRXZlbnQ7XG5cbiAgICAgICAgICBpZiAoZXZlbnQuZXZlbnQudHlwZSA9PT0gQ2hhcnRFdmVudFR5cGVzU3RyaW5nRW51bS5NT1VTRV9PVVQpIHtcbiAgICAgICAgICAgIGNvbnN0IGJvdW5kaW5nUmVjdCA9IHRoaXMuY2hhcnQuY2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgY29uc3QgaXNNb3VzZU91dHNpZGVDaGFydCA9XG4gICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LmNsaWVudFggPCBib3VuZGluZ1JlY3QubGVmdCB8fFxuICAgICAgICAgICAgICBuYXRpdmVFdmVudC5jbGllbnRYID4gYm91bmRpbmdSZWN0LnJpZ2h0IHx8XG4gICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LmNsaWVudFkgPCBib3VuZGluZ1JlY3QudG9wIHx8XG4gICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LmNsaWVudFkgPiBib3VuZGluZ1JlY3QuYm90dG9tO1xuXG4gICAgICAgICAgICBpZiAoaXNNb3VzZU91dHNpZGVDaGFydCkge1xuICAgICAgICAgICAgICB0aGlzLl9ob3ZlcmVkSW5kZXggPSBudWxsO1xuICAgICAgICAgICAgICB0aGlzLmNoYXJ0TWFuYWdlclNlcnZpY2U/LnNldEhvdmVyU3RhdGUobnVsbCwgdGhpcy5jaGFydElkKTtcbiAgICAgICAgICAgICAgdGhpcy5yZW1vdmVWZXJ0aWNhbERhc2hlZExpbmVBbmRGb2N1cygpO1xuICAgICAgICAgICAgICB0aGlzLmNoYXJ0LmRyYXcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXRoaXMuX2NoYXJ0Q29uZmlnLnNob3dUb29sdGlwQmFja2dyb3VuZCkgcmV0dXJuO1xuXG4gICAgICAgICAgY29uc3QgYm91bmRpbmdSZWN0ID0gdGhpcy5jaGFydC5jYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgY29uc3QgbW91c2VIb3Jpem9udGFsQ29vcmRpbmF0ZSA9XG4gICAgICAgICAgICBuYXRpdmVFdmVudC5jbGllbnRYIC0gYm91bmRpbmdSZWN0LmxlZnQ7XG5cbiAgICAgICAgICBjb25zdCB7IGxlZnQsIHJpZ2h0IH0gPSB0aGlzLmNoYXJ0LmNoYXJ0QXJlYTtcblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG1vdXNlSG9yaXpvbnRhbENvb3JkaW5hdGUgPCBsZWZ0IHx8XG4gICAgICAgICAgICBtb3VzZUhvcml6b250YWxDb29yZGluYXRlID4gcmlnaHRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuX2hvdmVyZWRJbmRleCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmNoYXJ0TWFuYWdlclNlcnZpY2U/LnNldEhvdmVyU3RhdGUobnVsbCwgdGhpcy5jaGFydElkKTtcbiAgICAgICAgICAgIHRoaXMuY2hhcnQuZHJhdygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHhTY2FsZSA9IHRoaXMuY2hhcnQuc2NhbGVzW0VDaGFydEV2ZW50UHJvcGVydGllcy5YXSBhc1xuICAgICAgICAgICAgfCBDYXRlZ29yeVNjYWxlXG4gICAgICAgICAgICB8IExpbmVhclNjYWxlO1xuXG4gICAgICAgICAgY29uc3QgdGlja1Bvc2l0aW9ucyA9IHhTY2FsZS50aWNrcy5tYXAoKHRpY2spID0+XG4gICAgICAgICAgICB4U2NhbGUuZ2V0UGl4ZWxGb3JWYWx1ZSh0aWNrLnZhbHVlKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCBzZWdtZW50Qm91bmRhcmllcyA9IHRpY2tQb3NpdGlvbnMubWFwKCh0aWNrUG9zLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGVmdEJvdW5kYXJ5ID1cbiAgICAgICAgICAgICAgaW5kZXggPT09IDAgPyBsZWZ0IDogKHRpY2tQb3MgKyB0aWNrUG9zaXRpb25zW2luZGV4IC0gMV0pIC8gMjtcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0Qm91bmRhcnkgPVxuICAgICAgICAgICAgICBpbmRleCA9PT0gdGlja1Bvc2l0aW9ucy5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgPyByaWdodFxuICAgICAgICAgICAgICAgIDogKHRpY2tQb3MgKyB0aWNrUG9zaXRpb25zW2luZGV4ICsgMV0pIC8gMjtcblxuICAgICAgICAgICAgcmV0dXJuIHsgbGVmdEJvdW5kYXJ5LCByaWdodEJvdW5kYXJ5IH07XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBuZXdIb3ZlcmVkSW5kZXggPSBzZWdtZW50Qm91bmRhcmllcy5maW5kSW5kZXgoXG4gICAgICAgICAgICAoYm91bmRhcnkpID0+IFxuICAgICAgICAgICAgICBtb3VzZUhvcml6b250YWxDb29yZGluYXRlID49IGJvdW5kYXJ5LmxlZnRCb3VuZGFyeSAmJlxuICAgICAgICAgICAgICBtb3VzZUhvcml6b250YWxDb29yZGluYXRlIDwgYm91bmRhcnkucmlnaHRCb3VuZGFyeVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAobmV3SG92ZXJlZEluZGV4ICE9PSB0aGlzLl9ob3ZlcmVkSW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMuX2hvdmVyZWRJbmRleCA9IG5ld0hvdmVyZWRJbmRleCA9PT0gLTEgPyBudWxsIDogbmV3SG92ZXJlZEluZGV4O1xuICAgICAgICAgICAgdGhpcy5jaGFydE1hbmFnZXJTZXJ2aWNlPy5zZXRIb3ZlclN0YXRlKFxuICAgICAgICAgICAgICB0aGlzLl9ob3ZlcmVkSW5kZXgsXG4gICAgICAgICAgICAgIHRoaXMuY2hhcnRJZCxcbiAgICAgICAgICAgICAgc2VnbWVudEJvdW5kYXJpZXNbdGhpcy5faG92ZXJlZEluZGV4IGFzIG51bWJlcl1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmNoYXJ0LmRyYXcoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgYmVmb3JlRHJhdzogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9ob3ZlcmVkSW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgY2hhcnRBcmVhLFxuICAgICAgICAgICAgICBzY2FsZXM6IHsgeDogeFNjYWxlIH0sXG4gICAgICAgICAgICB9ID0gdGhpcy5jaGFydDtcblxuICAgICAgICAgICAgQ2hhcnRIZWxwZXIuaGlnaGxpZ2h0U2VnbWVudChcbiAgICAgICAgICAgICAgdGhpcy5jaGFydENvbnRleHQsXG4gICAgICAgICAgICAgIHhTY2FsZSBhcyBDYXRlZ29yeVNjYWxlIHwgTGluZWFyU2NhbGUsXG4gICAgICAgICAgICAgIGNoYXJ0QXJlYSxcbiAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuaGVpZ2h0LFxuICAgICAgICAgICAgICB0aGlzLl9ob3ZlcmVkSW5kZXhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6IENoYXJ0UGx1Z2luSWRzU3RyaW5nRW51bS5ISUdITElHSFRfUE9JTlRfT05fSE9WRVIsXG4gICAgICAgIGFmdGVyRHJhdzogKCkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuX2hvdmVyZWRJbmRleCAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuc2hvd0hpZ2hsaWdodFBvaW50T25Ib3ZlciAmJlxuICAgICAgICAgICAgdGhpcy5hcmVBbmltYXRpb25zQ29tcGxlYXRlZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgdmlzaWJsZURhdGFzZXRzID0gdGhpcy5fY2hhcnRDb25maWcuY2hhcnREYXRhLmRhdGFzZXRzLmZpbHRlcihcbiAgICAgICAgICAgICAgKGRhdGFzZXQpID0+ICFkYXRhc2V0LmhpZGRlblxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIENoYXJ0SGVscGVyLmhpZ2hsaWdodFBvaW50KFxuICAgICAgICAgICAgICB0aGlzLmNoYXJ0Q29udGV4dCxcbiAgICAgICAgICAgICAgdGhpcy5jaGFydCxcbiAgICAgICAgICAgICAgdGhpcy5faG92ZXJlZEluZGV4LFxuICAgICAgICAgICAgICB7IC4uLnRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0RGF0YSwgZGF0YXNldHM6IHZpc2libGVEYXRhc2V0cyB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiBDaGFydFBsdWdpbklkc1N0cmluZ0VudW0uQk9SREVSX0JPVFRPTV9MSU5FX0NIQVJULFxuICAgICAgICBiZWZvcmVEcmF3OiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2NoYXJ0Q29uZmlnPy5zaG93Qm90dG9tTGluZU9uTGluZUNoYXJ0KSB7XG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgIGN0eCxcbiAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgY2hhcnRBcmVhLFxuICAgICAgICAgICAgICBzY2FsZXM6IHsgeDogeFNjYWxlIH0sXG4gICAgICAgICAgICB9ID0gdGhpcy5jaGFydDtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFzZXQgPSBkYXRhLmRhdGFzZXRzWzBdO1xuXG4gICAgICAgICAgICBjb25zdCBmaXJzdEluZGV4ID0gMDtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RJbmRleCA9IGRhdGFzZXQuZGF0YS5sZW5ndGggLSAxO1xuXG4gICAgICAgICAgICBjb25zdCBmaXJzdFZhbHVlID0gZGF0YXNldC5kYXRhW2ZpcnN0SW5kZXhdO1xuICAgICAgICAgICAgY29uc3QgbGFzdFZhbHVlID0gZGF0YXNldC5kYXRhW2xhc3RJbmRleF07XG5cbiAgICAgICAgICAgIGlmIChmaXJzdFZhbHVlICE9PSB1bmRlZmluZWQgJiYgbGFzdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgY29uc3QgeFN0YXJ0ID0geFNjYWxlLmdldFBpeGVsRm9yVmFsdWUoZmlyc3RJbmRleCk7XG5cbiAgICAgICAgICAgICAgY29uc3QgeEVuZCA9IHhTY2FsZS5nZXRQaXhlbEZvclZhbHVlKGxhc3RJbmRleCk7XG4gICAgICAgICAgICAgIGNvbnN0IHlCb3R0b20gPSBjaGFydEFyZWEuYm90dG9tO1xuXG4gICAgICAgICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9XG4gICAgICAgICAgICAgICAgQ2hhcnRDb2xvcnNTdHJpbmdFbnVtLkJPUkRFUl9CT1RUT01fTElORV9DSEFSVF9DT0xPUjtcbiAgICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IDE7XG4gICAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgICAgY3R4Lm1vdmVUbyh4U3RhcnQsIHlCb3R0b20pO1xuICAgICAgICAgICAgICBjdHgubGluZVRvKHhFbmQsIHlCb3R0b20pO1xuICAgICAgICAgICAgICBjdHguc3Ryb2tlKCk7XG4gICAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgaWYgKHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PT0gQ2hhcnRUeXBlc1N0cmluZ0VudW0uRE9VR0hOVVQpXG4gICAgICB0aGlzLnBsdWdpbnMgPSBbXG4gICAgICAgIC4uLnRoaXMucGx1Z2lucyxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnZG91Z2hudXQtbGFiZWwnLFxuICAgICAgICAgIGJlZm9yZURhdGFzZXREcmF3OiAoY2hhcnQ6IENoYXJ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9jaGFydENvbmZpZy5jZW50ZXJMYWJlbHM/Lm1hcChcbiAgICAgICAgICAgICAgKGxhYmVsOiBJQ2hhcnRDZW50ZXJMYWJlbCwgaW5keDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgQ2hhcnRIZWxwZXIuZHJhd0RvdWdobnV0TGVnZW5kKFxuICAgICAgICAgICAgICAgICAgY2hhcnQsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGluZHgsXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldFRvcDogbGFiZWwucG9zaXRpb24/LnRvcCB8fCAwXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgbGFiZWwudmFsdWUsXG4gICAgICAgICAgICAgICAgICBsYWJlbC5mb250U2l6ZSxcbiAgICAgICAgICAgICAgICAgIGxhYmVsLmNvbG9yKVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDaGFydEFubm90YXRpb25zKGl0ZW06IElCYXNlRGF0YXNldCwgaW5keDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9jaGFydENvbmZpZy5hbm5vdGF0aW9ucz8ubGVuZ3RoKSByZXR1cm47XG5cbiAgICB0aGlzLl9jaGFydENvbmZpZy5cbiAgICAgIGFubm90YXRpb25zPy5cbiAgICAgIGZvckVhY2goKGFubm90YXRpb246IElDaGFydEFubm90YXRpb24sIGtleTogbnVtYmVyKSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0T3B0aW9ucy5wbHVnaW5zID0ge1xuICAgICAgICAgIC4uLnRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0T3B0aW9ucy5wbHVnaW5zLFxuICAgICAgICAgIGFubm90YXRpb246IHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0T3B0aW9ucz8ucGx1Z2lucz8uYW5ub3RhdGlvbixcbiAgICAgICAgICAgIGFubm90YXRpb25zOiB7XG4gICAgICAgICAgICAgIC4uLnRoaXMuX2NoYXJ0Q29uZmlnLlxuICAgICAgICAgICAgICAgIGNoYXJ0T3B0aW9ucz8uXG4gICAgICAgICAgICAgICAgcGx1Z2lucz8uXG4gICAgICAgICAgICAgICAgYW5ub3RhdGlvbj8uXG4gICAgICAgICAgICAgICAgYW5ub3RhdGlvbnMsXG4gICAgICAgICAgICAgIFtgJHtpdGVtLmxhYmVsfS0ke2luZHh9LSR7a2V5fWBdOiB7XG4gICAgICAgICAgICAgICAgaWQ6IGFubm90YXRpb24uaWQgfHwgYGFubm90YXRpb24tJHtpbmR4fS0ke2tleX1gLFxuICAgICAgICAgICAgICAgIHR5cGU6IGFubm90YXRpb24udHlwZSxcbiAgICAgICAgICAgICAgICBzY2FsZUlEOiBhbm5vdGF0aW9uLmF4aXMgfHwgaXRlbS55QXhpc0lELFxuICAgICAgICAgICAgICAgIHZhbHVlOiBhbm5vdGF0aW9uLnZhbHVlIHx8IGl0ZW0uc2hpZnRWYWx1ZSxcbiAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjogYW5ub3RhdGlvbi5jb2xvciB8fFxuICAgICAgICAgICAgICAgICAgQ2hhcnRDb2xvcnNTdHJpbmdFbnVtLlxuICAgICAgICAgICAgICAgICAgICBCT1JERVJfQk9UVE9NX0xJTkVfQ0hBUlRfQ09MT1IsXG4gICAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6IGFubm90YXRpb24uYm9yZGVyV2lkdGggfHwgMixcbiAgICAgICAgICAgICAgICBib3JkZXJEYXNoOiBhbm5vdGF0aW9uLmJvcmRlckRhc2ggfHwgWzAsIDBdLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgdGhpcy5jaGFydC51cGRhdGUoKTtcblxuICB9XG5cbiAgcHJpdmF0ZSBzZXRNdWx0aXBsZVlBeGlzKGNoYXJ0RGF0YTogSUNoYXJ0RGF0YTxJTGluZURhdGFzZXQ+KTogdm9pZCB7XG4gICAgY2hhcnREYXRhLmRhdGFzZXRzLmZvckVhY2goKGRhdGFzZXQsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGRhdGFzZXQudHlwZSA9PT0gQ2hhcnRUeXBlc1N0cmluZ0VudW0uTElORSB8fFxuICAgICAgICBkYXRhc2V0LnR5cGUgPT09IENoYXJ0VHlwZXNTdHJpbmdFbnVtLkJBUlxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHlBeGlzSUQgPSB0aGlzLl9jaGFydENvbmZpZy5pc011bHRpWUF4aXNcbiAgICAgICAgICA/IGB5LWF4aXMtJHtpbmRleH1gXG4gICAgICAgICAgOiBkYXRhc2V0LnlBeGlzSUQgfHwgJ3ktYXhpcy0wJztcblxuICAgICAgICAvLyBEZXRlY3QgaWYgdGhlIGRhdGFzZXQgaXMgYWxsIDBcbiAgICAgICAgY29uc3QgaXNBbGxaZXJvRGF0YXNldCA9IChkYXRhc2V0LmRhdGEgYXMgbnVtYmVyW10pLmV2ZXJ5KFxuICAgICAgICAgICh2YWw6IG51bWJlcikgPT4gdmFsID09PSAwXG4gICAgICAgICk7XG5cbiAgICAgICAgbGV0IG1pblZhbHVlID0gQ2hhcnRIZWxwZXIuY2FsY3VsYXRlTWluVmFsdWUoZGF0YXNldC5kYXRhIGFzIG51bWJlcltdKTtcbiAgICAgICAgbGV0IG1heFZhbHVlID0gQ2hhcnRIZWxwZXIuY2FsY3VsYXRlTWF4VmFsdWUoZGF0YXNldC5kYXRhIGFzIG51bWJlcltdKTtcbiAgICAgICAgY29uc3QgcGFkZGluZyA9IG1heFZhbHVlICogMC4wMztcblxuICAgICAgICAvLyBBZGp1c3Qgc2NhbGluZyBmb3IgYWxsIDAgZGF0YXNldHNcbiAgICAgICAgaWYgKGlzQWxsWmVyb0RhdGFzZXQpIHtcbiAgICAgICAgICBtaW5WYWx1ZSA9IDA7XG4gICAgICAgICAgbWF4VmFsdWUgPSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1pblZhbHVlID0gbWF4VmFsdWUgPT09IG1pblZhbHVlID8gbWluVmFsdWUgLSAwLjEgOiBtaW5WYWx1ZTtcbiAgICAgICAgICBtYXhWYWx1ZSA9XG4gICAgICAgICAgICBtYXhWYWx1ZSA9PT0gbWluVmFsdWUgPyBtYXhWYWx1ZSArIDAuMSA6IG1heFZhbHVlICsgcGFkZGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0T3B0aW9ucy5zY2FsZXMgPSB7XG4gICAgICAgICAgLi4udGhpcy5fY2hhcnRDb25maWcuY2hhcnRPcHRpb25zLnNjYWxlcyxcbiAgICAgICAgICBbeUF4aXNJRF06IHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGZhbHNlLFxuICAgICAgICAgICAgYmVnaW5BdFplcm86IHRydWUsXG4gICAgICAgICAgICBtaW46IG1pblZhbHVlLFxuICAgICAgICAgICAgbWF4OiBtYXhWYWx1ZSxcbiAgICAgICAgICAgIHN0YWNrZWQ6IHRoaXMuX2NoYXJ0Q29uZmlnLmlzU3RhY2tlZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIGNoYXJ0RGF0YS5kYXRhc2V0c1tpbmRleF0gPSB7XG4gICAgICAgICAgLi4uZGF0YXNldCxcbiAgICAgICAgICB5QXhpc0lELFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVWZXJ0aWNhbERhc2hlZExpbmUoKTogdm9pZCB7XG4gICAgY29uc3QgYW5ub3RhdGlvbnMgPVxuICAgICAgdGhpcy5fY2hhcnRDb25maWc/LlxuICAgICAgICBjaGFydE9wdGlvbnM/LlxuICAgICAgICBwbHVnaW5zPy5cbiAgICAgICAgYW5ub3RhdGlvbj8uXG4gICAgICAgIGFubm90YXRpb25zO1xuXG4gICAgY29uc3Qga2V5OiBzdHJpbmcgPSBDaGFydFBsdWdpbklkc1N0cmluZ0VudW0uWF9EQVNIRUQ7XG5cbiAgICBpZiAoYW5ub3RhdGlvbnMpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLl9jaGFydENvbmZpZz8uXG4gICAgICAgIGNoYXJ0T3B0aW9ucz8uXG4gICAgICAgIHBsdWdpbnM/LlxuICAgICAgICBhbm5vdGF0aW9uPy5cbiAgICAgICAgYW5ub3RhdGlvbnM/LlxuICAgICAgW2tleSBhcyBrZXlvZiB0eXBlb2YgYW5ub3RhdGlvbnNdO1xuICAgIH1cblxuICAgIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gIH1cblxuICBwcml2YXRlIHNldFZlcnRpY2FsRGFzaGVkQW5ub3RhdGlvbkxpbmUoZXZlbnQ6IENoYXJ0RXZlbnQsIGNvbG9yPzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgeyBsZWZ0LCByaWdodCB9ID0gdGhpcy5jaGFydC5jaGFydEFyZWE7XG5cbiAgICBjb25zdCB4U2NhbGUgPSB0aGlzLmNoYXJ0LnNjYWxlc1tFQ2hhcnRFdmVudFByb3BlcnRpZXMuWF0gYXNcbiAgICAgIHwgQ2F0ZWdvcnlTY2FsZVxuICAgICAgfCBMaW5lYXJTY2FsZTtcblxuICAgIGNvbnN0IHRpY2tQb3NpdGlvbnMgPVxuICAgICAgdGhpcy5fY2hhcnRDb25maWc/LlxuICAgICAgICBjaGFydERhdGE/LmxhYmVscz8uXG4gICAgICAgIG1hcChcbiAgICAgICAgICAoXG4gICAgICAgICAgICBsYWJlbDogc3RyaW5nLFxuICAgICAgICAgICAgaW5kZXg6IG51bWJlclxuICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHhTY2FsZS5nZXRQaXhlbEZvclZhbHVlKGluZGV4KVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICBjb25zdCBzZWdtZW50Qm91bmRhcmllcyA9IHRpY2tQb3NpdGlvbnMubWFwKCh0aWNrUG9zLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgbGVmdEJvdW5kYXJ5ID1cbiAgICAgICAgaW5kZXggPT09IDAgPyBsZWZ0IDogKHRpY2tQb3MgKyB0aWNrUG9zaXRpb25zW2luZGV4IC0gMV0pIC8gMjtcbiAgICAgIGNvbnN0IHJpZ2h0Qm91bmRhcnkgPVxuICAgICAgICBpbmRleCA9PT0gdGlja1Bvc2l0aW9ucy5sZW5ndGggLSAxXG4gICAgICAgICAgPyByaWdodFxuICAgICAgICAgIDogKHRpY2tQb3MgKyB0aWNrUG9zaXRpb25zW2luZGV4ICsgMV0pIC8gMjtcblxuICAgICAgcmV0dXJuIHsgbGVmdEJvdW5kYXJ5LCByaWdodEJvdW5kYXJ5IH07XG4gICAgfSk7XG5cbiAgICBjb25zdCBuYXRpdmVFdmVudCA9IGV2ZW50Lm5hdGl2ZSBhcyBNb3VzZUV2ZW50O1xuXG4gICAgY29uc3QgYm91bmRpbmdSZWN0ID0gdGhpcy5jaGFydC5jYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgbW91c2VIb3Jpem9udGFsQ29vcmRpbmF0ZSA9XG4gICAgICBuYXRpdmVFdmVudC5jbGllbnRYIC0gYm91bmRpbmdSZWN0LmxlZnQ7XG5cbiAgICBjb25zdCBuZXdIb3ZlcmVkSW5kZXggPSBzZWdtZW50Qm91bmRhcmllcy5maW5kSW5kZXgoXG4gICAgICAoYm91bmRhcnkpID0+XG4gICAgICAgIG1vdXNlSG9yaXpvbnRhbENvb3JkaW5hdGUgPj0gYm91bmRhcnkubGVmdEJvdW5kYXJ5ICYmXG4gICAgICAgIG1vdXNlSG9yaXpvbnRhbENvb3JkaW5hdGUgPCBib3VuZGFyeS5yaWdodEJvdW5kYXJ5XG4gICAgKTtcblxuICAgIGlmIChuZXdIb3ZlcmVkSW5kZXggPj0gMCkge1xuICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnRPcHRpb25zLnBsdWdpbnMgPSB7XG4gICAgICAgIC4uLnRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0T3B0aW9ucy5wbHVnaW5zLFxuICAgICAgICBhbm5vdGF0aW9uOiB7XG4gICAgICAgICAgLi4udGhpcy5fY2hhcnRDb25maWcuY2hhcnRPcHRpb25zPy5wbHVnaW5zPy5hbm5vdGF0aW9uLFxuICAgICAgICAgIGFubm90YXRpb25zOiB7XG4gICAgICAgICAgICAuLi50aGlzLl9jaGFydENvbmZpZy5cbiAgICAgICAgICAgICAgY2hhcnRPcHRpb25zPy5cbiAgICAgICAgICAgICAgcGx1Z2lucz8uXG4gICAgICAgICAgICAgIGFubm90YXRpb24/LlxuICAgICAgICAgICAgICBhbm5vdGF0aW9ucyxcbiAgICAgICAgICAgIFtDaGFydFBsdWdpbklkc1N0cmluZ0VudW0uWF9EQVNIRURdOiB7XG4gICAgICAgICAgICAgIC4uLkVDaGFydEFubm90YXRpb24uWF9EQVNIRUQsXG4gICAgICAgICAgICAgIHZhbHVlOiBuZXdIb3ZlcmVkSW5kZXgsXG4gICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBjb2xvciB8fCBDaGFydENvbG9yc1N0cmluZ0VudW0uXG4gICAgICAgICAgICAgICAgQk9SREVSX0JPVFRPTV9MSU5FX0NIQVJUX0NPTE9SLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgdGhpcy5ob3ZlcmVkSW5kZXguZW1pdChuZXdIb3ZlcmVkSW5kZXgpO1xuICAgIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlVmVydGljYWxEYXNoZWRMaW5lQW5kRm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5ob3ZlcmVkSW5kZXguZW1pdChudWxsKTtcbiAgICBpZiAodGhpcy5fY2hhcnRDb25maWcuaGFzVmVydGljYWxEYXNoZWRBbm5vdGF0aW9uKVxuICAgICAgdGhpcy5yZW1vdmVWZXJ0aWNhbERhc2hlZExpbmUoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxufVxuIiwiQGlmIChpc0NoYXJ0RGF0YUF2YWlsYWJsZSkge1xuICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIGxlZ2VuZDtcbiAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICBjb25maWc6IGxlZ2VuZERhdGEsXG4gICAgICAgICAgICB9XG4gICAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDxkaXZcbiAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgaGVpZ2h0OiBfY2hhcnRDb25maWcuaGVpZ2h0ICsgJ3B4JyxcbiAgICAgICAgICAgIHdpZHRoOiBfY2hhcnRDb25maWcud2lkdGggKyAnJScsXG4gICAgICAgIH1cIlxuICAgID5cbiAgICAgICAgPGNhbnZhcyAjY2hhcnRDYW52YXM+PC9jYW52YXM+XG4gICAgPC9kaXY+XG59IEBlbHNlIHtcbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgaGVpZ2h0OiBfY2hhcnRDb25maWcuaGVpZ2h0ICsgJ3B4JyxcbiAgICAgICAgICAgIHdpZHRoOiBfY2hhcnRDb25maWcud2lkdGggKyAnJScsXG4gICAgICAgIH1cIlxuICAgID5cbiAgICAgICAgPHN2Zy1pY29uXG4gICAgICAgICAgICBbc3JjXT1cIl9jaGFydENvbmZpZy5ub0RhdGFJbWFnZVwiXG4gICAgICAgICAgICBhbHQ9XCJObyBkYXRhIGF2YWlsYWJsZVwiXG4gICAgICAgICAgICBjbGFzcz1cIm5vLWRhdGEtc3ZnXCJcbiAgICAgICAgPjwvc3ZnLWljb24+XG4gICAgPC9kaXY+XG59XG48bmctdGVtcGxhdGUgI2xlZ2VuZCBsZXQtY29uZmlnPVwiY29uZmlnXCI+XG4gICAgQGlmIChjb25maWc/LmRhdGEpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29uZmlnLmhhc0hpZ2hsaWdodGVkQmFja2dyb3VuZCAmJiAnY29sb3JlZC1iYWNrZ3JvdW5kJ1wiXG4gICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoY29uZmlnLnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC10aXRsZSBmb250LXNpemUtMTQgdGEtZm9udC1leHRyYS1ib2xkXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGNvbmZpZy50aXRsZSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC13cmFwcGVyIGQtZmxleFwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKFxuICAgICAgICAgICAgICAgICAgICBpdGVtIG9mIGNvbmZpZy5kYXRhO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSAkaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIHRyYWNrIGl0ZW0ubmFtZVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1jb250ZW50LWNlbnRlciB0ZXh0LXNpemUtMTEgdGEtZm9udC1ib2xkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBpdGVtPy5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8uaXNMaW5lSW5kaWNhdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbGluZS1pbmRpY2F0b3InXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnY2lyY2xlLWluZGljYXRvcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBiYWNrZ3JvdW5kOiBpdGVtPy5jb2xvciB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zaXplLTE4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGl0ZW0/LnZhbHVlICE9PSAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IChpdGVtPy52YWx1ZSB8IHRob3VzYW5kU2VwYXJhdG9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfCB1bml0UG9zaXRpb246IGl0ZW0/LnVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtYm91bmRhcmllcy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NhLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhLWNoYXJ0L21vZGVscy9jaGFydC1ib3VuZGFyaWVzLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIElDaGFydEJvdW5kYXJpZXMge1xuICAgIGxlZnRCb3VuZGFyeTogbnVtYmVyO1xuICAgIHJpZ2h0Qm91bmRhcnk6IG51bWJlcjtcbn1cbiJdfQ==
@@ -7,4 +7,5 @@ export * from './chart-dataset-hover.model';
7
7
  export * from './chart-center-label.model';
8
8
  export * from './chart-legend-property.model';
9
9
  export * from './chart-legend-config.model';
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jYS1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9jYS1jaGFydC9tb2RlbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsNkJBQTZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NoYXJ0LWRhdGEubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9jaGFydC1iYXNlLWRhdGFzZXQubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9jaGFydC1saW5lLWRhdGFzZXQubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9jaGFydC1jb25maWcubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9jaGFydC1hbm5vdGF0aW9uLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vY2hhcnQtZGF0YXNldC1ob3Zlci5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL2NoYXJ0LWNlbnRlci1sYWJlbC5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL2NoYXJ0LWxlZ2VuZC1wcm9wZXJ0eS5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL2NoYXJ0LWxlZ2VuZC1jb25maWcubW9kZWwnOyJdfQ==
10
+ export * from './chart-boundaries.model';
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jYS1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9jYS1jaGFydC9tb2RlbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYywwQkFBMEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY2hhcnQtZGF0YS5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL2NoYXJ0LWJhc2UtZGF0YXNldC5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL2NoYXJ0LWxpbmUtZGF0YXNldC5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL2NoYXJ0LWNvbmZpZy5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL2NoYXJ0LWFubm90YXRpb24ubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9jaGFydC1kYXRhc2V0LWhvdmVyLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vY2hhcnQtY2VudGVyLWxhYmVsLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vY2hhcnQtbGVnZW5kLXByb3BlcnR5Lm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vY2hhcnQtbGVnZW5kLWNvbmZpZy5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL2NoYXJ0LWJvdW5kYXJpZXMubW9kZWwnO1xuIl19
@@ -18,41 +18,33 @@ export class CaChartManagerComponent {
18
18
  this.hoveredChartId = null;
19
19
  this.tooltipList = null;
20
20
  this.tooltipPosition = { x: 0, y: 0 };
21
- this.chartManagerService.hoverState$.subscribe(({ index, chartId }) => {
21
+ this.chartManagerService.hoverState$.subscribe(({ index, chartId, boundaries }) => {
22
22
  this.hoveredIndex = index;
23
23
  this.hoveredChartId = chartId;
24
- this.updateTooltipList(this.hoveredIndex);
24
+ this.updateTooltipList(this.hoveredIndex, boundaries);
25
25
  this.cdr.markForCheck();
26
26
  });
27
27
  }
28
- trackByIndex(index) {
29
- return index;
30
- }
31
- onMouseMove(event) {
28
+ calculateTooltipPosition(boundaries) {
32
29
  const containerRect = this.chartManagerContainer.nativeElement.getBoundingClientRect();
33
- const padding = 100;
34
- let x = event.clientX - containerRect.left + padding;
35
- let y = event.clientY - containerRect.top + padding;
30
+ let x = boundaries.rightBoundary + 4;
31
+ let y = containerRect.top;
36
32
  if (this.tooltipContainer) {
37
33
  const tooltipWidth = this.tooltipContainer.nativeElement.offsetWidth;
38
34
  const tooltipHeight = this.tooltipContainer.nativeElement.offsetHeight;
39
- // Adjust Y position if the tooltip goes above the top of container
40
- if (y < tooltipHeight / 2)
41
- y = tooltipHeight / 2 + padding;
42
- // Adjust Y position if the tooltip goes below the container
43
- if (y + tooltipHeight / 2 > containerRect.height)
44
- y = containerRect.height - tooltipHeight / 2 - padding;
45
- // Adjust X position if it overflows the right edge
35
+ y = containerRect.height / 2 - tooltipHeight / 2;
46
36
  if (x + tooltipWidth > containerRect.width)
47
- x = event.clientX - containerRect.left - tooltipWidth - padding; // Move tooltip to the left
37
+ x = boundaries.leftBoundary - tooltipWidth - 4;
48
38
  }
49
39
  this.tooltipPosition = { x, y };
50
40
  }
51
- updateTooltipList(index) {
41
+ updateTooltipList(index, boundaries) {
52
42
  if (index === null || !this.chartConfigs.length) {
53
43
  this.tooltipList = null;
54
44
  return;
55
45
  }
46
+ if (boundaries)
47
+ this.calculateTooltipPosition(boundaries);
56
48
  const selectedItems = [];
57
49
  const otherItems = [];
58
50
  this.chartConfigs.forEach((config) => {
@@ -80,7 +72,7 @@ export class CaChartManagerComponent {
80
72
  };
81
73
  }
82
74
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CaChartManagerComponent, deps: [{ token: i1.ChartManagerService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
83
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CaChartManagerComponent, isStandalone: true, selector: "app-ca-chart-manager", inputs: { chartConfigs: "chartConfigs", tooltipLables: "tooltipLables", chartDatasetHover: "chartDatasetHover" }, providers: [ChartManagerService], viewQueries: [{ propertyName: "chartManagerContainer", first: true, predicate: ["chartManagerContainer"], descendants: true }, { propertyName: "tooltipContainer", first: true, predicate: ["tooltipContainer"], descendants: true }], ngImport: i0, template: "<div\n #chartManagerContainer\n class=\"chart-manager-container\"\n (mousemove)=\"onMouseMove($event)\"\n>\n @for (chartConfig of chartConfigs; let i = $index; track $index) {\n <app-ca-chart\n [chartConfig]=\"chartConfig\"\n [chartId]=\"'chart-' + i\"\n [chartDatasetHover]=\"\n chartConfig?.isDatasetHoverEnabled ? chartDatasetHover : null\n \"\n >\n </app-ca-chart>\n }\n\n @if (hoveredIndex !== null) {\n <div\n #tooltipContainer\n class=\"tooltip-container\"\n [style.top.px]=\"tooltipPosition.y\"\n [style.left.px]=\"tooltipPosition.x\"\n >\n <app-ca-tooltip-list [tooltipList]=\"tooltipList\">\n </app-ca-tooltip-list>\n </div>\n }\n</div>\n", styles: ["::ng-deep app-ca-chart-manager .chart-manager-container{position:relative;overflow:hidden}::ng-deep app-ca-chart-manager .tooltip-container{position:absolute;pointer-events:none;z-index:1000;transform:translateY(-50%);white-space:nowrap}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type:
75
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CaChartManagerComponent, isStandalone: true, selector: "app-ca-chart-manager", inputs: { chartConfigs: "chartConfigs", tooltipLables: "tooltipLables", chartDatasetHover: "chartDatasetHover" }, providers: [ChartManagerService], viewQueries: [{ propertyName: "chartManagerContainer", first: true, predicate: ["chartManagerContainer"], descendants: true }, { propertyName: "tooltipContainer", first: true, predicate: ["tooltipContainer"], descendants: true }], ngImport: i0, template: "<div\n #chartManagerContainer\n class=\"chart-manager-container\"\n>\n @for (chartConfig of chartConfigs; let i = $index; track $index) {\n <app-ca-chart\n [chartConfig]=\"chartConfig\"\n [chartId]=\"'chart-' + i\"\n [chartDatasetHover]=\"\n chartConfig?.isDatasetHoverEnabled ? chartDatasetHover : null\n \"\n >\n </app-ca-chart>\n }\n\n @if (hoveredIndex !== null) {\n <div\n #tooltipContainer\n class=\"tooltip-container\"\n [style.top.px]=\"tooltipPosition.y\"\n [style.left.px]=\"tooltipPosition.x\"\n >\n <app-ca-tooltip-list [tooltipList]=\"tooltipList\">\n </app-ca-tooltip-list>\n </div>\n }\n</div>\n", styles: ["::ng-deep app-ca-chart-manager .chart-manager-container{position:relative;overflow:hidden}::ng-deep app-ca-chart-manager .tooltip-container{position:absolute;pointer-events:none;z-index:1000;white-space:nowrap}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type:
84
76
  //Components
85
77
  CaChartComponent, selector: "app-ca-chart", inputs: ["legendData", "chartId", "chartDatasetHover", "chartConfig", "selectedIndex"], outputs: ["hoveredIndex"] }, { kind: "component", type: CaTooltipListComponent, selector: "app-ca-tooltip-list", inputs: ["tooltipList"] }] }); }
86
78
  }
@@ -91,7 +83,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
91
83
  //Components
92
84
  CaChartComponent,
93
85
  CaTooltipListComponent,
94
- ], providers: [ChartManagerService], template: "<div\n #chartManagerContainer\n class=\"chart-manager-container\"\n (mousemove)=\"onMouseMove($event)\"\n>\n @for (chartConfig of chartConfigs; let i = $index; track $index) {\n <app-ca-chart\n [chartConfig]=\"chartConfig\"\n [chartId]=\"'chart-' + i\"\n [chartDatasetHover]=\"\n chartConfig?.isDatasetHoverEnabled ? chartDatasetHover : null\n \"\n >\n </app-ca-chart>\n }\n\n @if (hoveredIndex !== null) {\n <div\n #tooltipContainer\n class=\"tooltip-container\"\n [style.top.px]=\"tooltipPosition.y\"\n [style.left.px]=\"tooltipPosition.x\"\n >\n <app-ca-tooltip-list [tooltipList]=\"tooltipList\">\n </app-ca-tooltip-list>\n </div>\n }\n</div>\n", styles: ["::ng-deep app-ca-chart-manager .chart-manager-container{position:relative;overflow:hidden}::ng-deep app-ca-chart-manager .tooltip-container{position:absolute;pointer-events:none;z-index:1000;transform:translateY(-50%);white-space:nowrap}\n"] }]
86
+ ], providers: [ChartManagerService], template: "<div\n #chartManagerContainer\n class=\"chart-manager-container\"\n>\n @for (chartConfig of chartConfigs; let i = $index; track $index) {\n <app-ca-chart\n [chartConfig]=\"chartConfig\"\n [chartId]=\"'chart-' + i\"\n [chartDatasetHover]=\"\n chartConfig?.isDatasetHoverEnabled ? chartDatasetHover : null\n \"\n >\n </app-ca-chart>\n }\n\n @if (hoveredIndex !== null) {\n <div\n #tooltipContainer\n class=\"tooltip-container\"\n [style.top.px]=\"tooltipPosition.y\"\n [style.left.px]=\"tooltipPosition.x\"\n >\n <app-ca-tooltip-list [tooltipList]=\"tooltipList\">\n </app-ca-tooltip-list>\n </div>\n }\n</div>\n", styles: ["::ng-deep app-ca-chart-manager .chart-manager-container{position:relative;overflow:hidden}::ng-deep app-ca-chart-manager .tooltip-container{position:absolute;pointer-events:none;z-index:1000;white-space:nowrap}\n"] }]
95
87
  }], ctorParameters: () => [{ type: i1.ChartManagerService }, { type: i0.ChangeDetectorRef }], propDecorators: { chartConfigs: [{
96
88
  type: Input
97
89
  }], tooltipLables: [{
@@ -105,4 +97,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
105
97
  type: ViewChild,
106
98
  args: ['tooltipContainer']
107
99
  }] } });
108
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtY2hhcnQtbWFuYWdlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jYS1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9jYS1jaGFydC1tYW5hZ2VyL2NhLWNoYXJ0LW1hbmFnZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtY2hhcnQtbWFuYWdlci9jYS1jaGFydC1tYW5hZ2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBRVQsS0FBSyxFQUNMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsVUFBVTtBQUNWLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBU3ZFLFlBQVk7QUFDWixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQzs7O0FBZXRGLE1BQU0sT0FBTyx1QkFBdUI7SUFhbEMsWUFDVSxtQkFBd0MsRUFDeEMsR0FBc0I7UUFEdEIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQWR2QixpQkFBWSxHQUEwQixFQUFFLENBQUM7UUFDekMsa0JBQWEsR0FBYSxFQUFFLENBQUM7UUFDN0Isc0JBQWlCLEdBQThCLElBQUksQ0FBQztRQUt0RCxpQkFBWSxHQUFrQixJQUFJLENBQUM7UUFDbkMsbUJBQWMsR0FBa0IsSUFBSSxDQUFDO1FBQ3JDLGdCQUFXLEdBQXdCLElBQUksQ0FBQztRQUN4QyxvQkFBZSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMs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QXVCO2dCQUNILGdCQUFnQjtzQkFBOUMsU0FBUzt1QkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbi8vU2VydmljZXNcbmltcG9ydCB7IENoYXJ0TWFuYWdlclNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2NoYXJ0LW1hbmFnZXIuc2VydmljZSc7XG5cbi8vTW9kZWxzXG5pbXBvcnQgeyBJQ2hhcnRDb25maWd1cmF0aW9uLCBJQ2hhcnREYXRhc2V0SG92ZXIgfSBmcm9tICcuLi9jYS1jaGFydC9tb2RlbHMnO1xuaW1wb3J0IHsgSVRvb2x0aXBMaXN0LCBJVG9vbHRpcExpc3RJdGVtIH0gZnJvbSAnLi4vY2EtdG9vbHRpcC1saXN0L21vZGVscyc7XG5cbi8vRW51bXNcbmltcG9ydCB7IENoYXJ0Q29sb3JzU3RyaW5nRW51bSB9IGZyb20gJy4uL2NhLWNoYXJ0L2VudW1zJztcblxuLy9Db21wb25lbnRzXG5pbXBvcnQgeyBDYUNoYXJ0Q29tcG9uZW50IH0gZnJvbSAnLi4vY2EtY2hhcnQvY2EtY2hhcnQuY29tcG9uZW50JztcbmltcG9ydCB7IENhVG9vbHRpcExpc3RDb21wb25lbnQgfSBmcm9tICcuLi9jYS10b29sdGlwLWxpc3QvY2EtdG9vbHRpcC1saXN0LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1jYS1jaGFydC1tYW5hZ2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NhLWNoYXJ0LW1hbmFnZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jYS1jaGFydC1tYW5hZ2VyLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgLy9Db21wb25lbnRzXG4gICAgQ2FDaGFydENvbXBvbmVudCxcbiAgICBDYVRvb2x0aXBMaXN0Q29tcG9uZW50LFxuICBdLFxuICBwcm92aWRlcnM6IFtDaGFydE1hbmFnZXJTZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2FDaGFydE1hbmFnZXJDb21wb25lbnQge1xuICBASW5wdXQoKSBjaGFydENvbmZpZ3M6IElDaGFydENvbmZpZ3VyYXRpb25bXSA9IFtdO1xuICBASW5wdXQoKSB0b29sdGlwTGFibGVzOiBzdHJpbmdbXSA9IFtdO1xuICBASW5wdXQoKSBjaGFydERhdGFzZXRIb3ZlcjogSUNoYXJ0RGF0YXNldEhvdmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgQFZpZXdDaGlsZCgnY2hhcnRNYW5hZ2VyQ29udGFpbmVyJykgY2hhcnRNYW5hZ2VyQ29udGFpbmVyITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgndG9vbHRpcENvbnRhaW5lcicpIHRvb2x0aXBDb250YWluZXIhOiBFbGVtZW50UmVmO1xuXG4gIHB1YmxpYyBob3ZlcmVkSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgaG92ZXJlZENoYXJ0SWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgdG9vbHRpcExpc3Q6IElUb29sdGlwTGlzdCB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgdG9vbHRpcFBvc2l0aW9uID0geyB4OiAwLCB5OiAwIH07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjaGFydE1hbmFnZXJTZXJ2aWNlOiBDaGFydE1hbmFnZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICB0aGlzLmNoYXJ0TWFuYWdlclNlcnZpY2UuaG92ZXJTdGF0ZSQuc3Vic2NyaWJlKCh7IGluZGV4LCBjaGFydElkIH0pID0+IHtcbiAgICAgIHRoaXMuaG92ZXJlZEluZGV4ID0gaW5kZXg7XG4gICAgICB0aGlzLmhvdmVyZWRDaGFydElkID0gY2hhcnRJZDtcbiAgICAgIHRoaXMudXBkYXRlVG9vbHRpcExpc3QodGhpcy5ob3ZlcmVkSW5kZXgpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgdHJhY2tCeUluZGV4KGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIHB1YmxpYyBvbk1vdXNlTW92ZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPVxuICAgICAgdGhpcy5jaGFydE1hbmFnZXJDb250YWluZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBwYWRkaW5nID0gMTAwO1xuXG4gICAgbGV0IHggPSBldmVudC5jbGllbnRYIC0gY29udGFpbmVyUmVjdC5sZWZ0ICsgcGFkZGluZztcbiAgICBsZXQgeSA9IGV2ZW50LmNsaWVudFkgLSBjb250YWluZXJSZWN0LnRvcCArIHBhZGRpbmc7XG5cbiAgICBpZiAodGhpcy50b29sdGlwQ29udGFpbmVyKSB7XG4gICAgICBjb25zdCB0b29sdGlwV2lkdGggPSB0aGlzLnRvb2x0aXBDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgIGNvbnN0IHRvb2x0aXBIZWlnaHQgPSB0aGlzLnRvb2x0aXBDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG5cbiAgICAgIC8vIEFkanVzdCBZIHBvc2l0aW9uIGlmIHRoZSB0b29sdGlwIGdvZXMgYWJvdmUgdGhlIHRvcCBvZiBjb250YWluZXJcbiAgICAgIGlmICh5IDwgdG9vbHRpcEhlaWdodCAvIDIpXG4gICAgICAgIHkgPSB0b29sdGlwSGVpZ2h0IC8gMiArIHBhZGRpbmc7XG5cblxuICAgICAgLy8gQWRqdXN0IFkgcG9zaXRpb24gaWYgdGhlIHRvb2x0aXAgZ29lcyBiZWxvdyB0aGUgY29udGFpbmVyXG4gICAgICBpZiAoeSArIHRvb2x0aXBIZWlnaHQgLyAyID4gY29udGFpbmVyUmVjdC5oZWlnaHQpXG4gICAgICAgIHkgPSBjb250YWluZXJSZWN0LmhlaWdodCAtIHRvb2x0aXBIZWlnaHQgLyAyIC0gcGFkZGluZztcblxuXG4gICAgICAvLyBBZGp1c3QgWCBwb3NpdGlvbiBpZiBpdCBvdmVyZmxvd3MgdGhlIHJpZ2h0IGVkZ2VcbiAgICAgIGlmICh4ICsgdG9vbHRpcFdpZHRoID4gY29udGFpbmVyUmVjdC53aWR0aClcbiAgICAgICAgeCA9IGV2ZW50LmNsaWVudFggLSBjb250YWluZXJSZWN0LmxlZnQgLSB0b29sdGlwV2lkdGggLSBwYWRkaW5nOyAvLyBNb3ZlIHRvb2x0aXAgdG8gdGhlIGxlZnRcblxuICAgIH1cblxuICAgIHRoaXMudG9vbHRpcFBvc2l0aW9uID0geyB4LCB5IH07XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVRvb2x0aXBMaXN0KGluZGV4OiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKGluZGV4ID09PSBudWxsIHx8ICF0aGlzLmNoYXJ0Q29uZmlncy5sZW5ndGgpIHtcbiAgICAgIHRoaXMudG9vbHRpcExpc3QgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNlbGVjdGVkSXRlbXM6IElUb29sdGlwTGlzdEl0ZW1bXSA9IFtdO1xuICAgIGNvbnN0IG90aGVySXRlbXM6IElUb29sdGlwTGlzdEl0ZW1bXSA9IFtdO1xuXG4gICAgdGhpcy5jaGFydENvbmZpZ3MuZm9yRWFjaCgoY29uZmlnKSA9PiB7XG4gICAgICBjb25zdCB2aXNpYmxlRGF0YXNldHMgPSBjb25maWcuY2hhcnREYXRhLmRhdGFzZXRzLmZpbHRlcihcbiAgICAgICAgKGRhdGFzZXQpID0+ICFkYXRhc2V0LmhpZGRlblxuICAgICAgKTtcblxuICAgICAgdmlzaWJsZURhdGFzZXRzLmZvckVhY2goKGRhdGFzZXQpID0+IHtcbiAgICAgICAgY29uc3QgcmF3RGF0YSA9IGRhdGFzZXQuZGF0YVtpbmRleF07XG4gICAgICAgIGNvbnN0IHZhbHVlID0gQXJyYXkuaXNBcnJheShyYXdEYXRhKSA/IHJhd0RhdGFbMF0gOiByYXdEYXRhO1xuXG4gICAgICAgIGNvbnN0IHRvb2x0aXBJdGVtOiBJVG9vbHRpcExpc3RJdGVtID0ge1xuICAgICAgICAgIGxhYmVsOiBkYXRhc2V0LmxhYmVsLFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSB8fCAwLFxuICAgICAgICAgIGlzQ3VycmVuY3k6IGRhdGFzZXQuaXNDdXJyZW5jeSB8fCBmYWxzZSxcbiAgICAgICAgICBjb2xvcjogZGF0YXNldC5ib3JkZXJDb2xvciB8fCBDaGFydENvbG9yc1N0cmluZ0VudW0uV0hJVEUsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGNvbmZpZy5pc1Rvb2x0aXBJdGVtSW5TZWxlY3RlZEl0ZW1zKVxuICAgICAgICAgIHNlbGVjdGVkSXRlbXMucHVzaCh0b29sdGlwSXRlbSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBvdGhlckl0ZW1zLnB1c2godG9vbHRpcEl0ZW0pO1xuXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMudG9vbHRpcExpc3QgPSB7XG4gICAgICBkYXRlOiB0aGlzLnRvb2x0aXBMYWJsZXNbaW5kZXhdLFxuICAgICAgc2VsZWN0ZWRJdGVtczogc2VsZWN0ZWRJdGVtcyxcbiAgICAgIG90aGVySXRlbXM6IG90aGVySXRlbXMsXG4gICAgICBzaG93UGVyY2VudGFnZTogZmFsc2UsXG4gICAgfTtcbiAgfVxufVxuIiwiPGRpdlxuICAgICNjaGFydE1hbmFnZXJDb250YWluZXJcbiAgICBjbGFzcz1cImNoYXJ0LW1hbmFnZXItY29udGFpbmVyXCJcbiAgICAobW91c2Vtb3ZlKT1cIm9uTW91c2VNb3ZlKCRldmVudClcIlxuPlxuICAgIEBmb3IgKGNoYXJ0Q29uZmlnIG9mIGNoYXJ0Q29uZmlnczsgbGV0IGkgPSAkaW5kZXg7IHRyYWNrICRpbmRleCkge1xuICAgICAgICA8YXBwLWNhLWNoYXJ0XG4gICAgICAgICAgICBbY2hhcnRDb25maWddPVwiY2hhcnRDb25maWdcIlxuICAgICAgICAgICAgW2NoYXJ0SWRdPVwiJ2NoYXJ0LScgKyBpXCJcbiAgICAgICAgICAgIFtjaGFydERhdGFzZXRIb3Zlcl09XCJcbiAgICAgICAgICAgICAgICBjaGFydENvbmZpZz8uaXNEYXRhc2V0SG92ZXJFbmFibGVkID8gY2hhcnREYXRhc2V0SG92ZXIgOiBudWxsXG4gICAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgIDwvYXBwLWNhLWNoYXJ0PlxuICAgIH1cblxuICAgIEBpZiAoaG92ZXJlZEluZGV4ICE9PSBudWxsKSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgICN0b29sdGlwQ29udGFpbmVyXG4gICAgICAgICAgICBjbGFzcz1cInRvb2x0aXAtY29udGFpbmVyXCJcbiAgICAgICAgICAgIFtzdHlsZS50b3AucHhdPVwidG9vbHRpcFBvc2l0aW9uLnlcIlxuICAgICAgICAgICAgW3N0eWxlLmxlZnQucHhdPVwidG9vbHRpcFBvc2l0aW9uLnhcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8YXBwLWNhLXRvb2x0aXAtbGlzdCBbdG9vbHRpcExpc3RdPVwidG9vbHRpcExpc3RcIj5cbiAgICAgICAgICAgIDwvYXBwLWNhLXRvb2x0aXAtbGlzdD5cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuPC9kaXY+XG4iXX0=
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtY2hhcnQtbWFuYWdlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jYS1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9jYS1jaGFydC1tYW5hZ2VyL2NhLWNoYXJ0LW1hbmFnZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtY2hhcnQtbWFuYWdlci9jYS1jaGFydC1tYW5hZ2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBRVQsS0FBSyxFQUNMLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsVUFBVTtBQUNWLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBYXZFLFlBQVk7QUFDWixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQzs7O0FBZXRGLE1BQU0sT0FBTyx1QkFBdUI7SUFhaEMsWUFDWSxtQkFBd0MsRUFDeEMsR0FBc0I7UUFEdEIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQWR6QixpQkFBWSxHQUEwQixFQUFFLENBQUM7UUFDekMsa0JBQWEsR0FBYSxFQUFFLENBQUM7UUFDN0Isc0JBQWlCLEdBQThCLElBQUksQ0FBQztRQUt0RCxpQkFBWSxHQUFrQixJQUFJLENBQUM7UUFDbkMsbUJBQWMsR0FBa0IsSUFBSSxDQUFDO1FBQ3JDLGdCQUFXLEdBQXdCLElBQUksQ0FBQztRQUN4QyxvQkFBZSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMs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Q0FBQyw0QkFBNEI7b0JBQ25DLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7O29CQUMvQixVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsV0FBVyxHQUFHO1lBQ2YsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO1lBQy9CLGFBQWEsRUFBRSxhQUFhO1lBQzVCLFVBQVUsRUFBRSxVQUFVO1lBQ3RCLGNBQWMsRUFBRSxLQUFLO1NBQ3hCLENBQUM7SUFDTixDQUFDOytHQTFGUSx1QkFBdUI7bUdBQXZCLHVCQUF1QixxTEFGckIsQ0FBQyxtQkFBbUIsQ0FBQyxpUUN0Q3BDLDZ4QkEyQkEsNlFETVEsWUFBWTtnQkFDWixZQUFZO2dCQUNaLGdCQUFnQiw0S0FDaEIsc0JBQXNCOzs0RkFJakIsdUJBQXVCO2tCQWJuQyxTQUFTOytCQUNJLHNCQUFzQixjQUdwQixJQUFJLFdBQ1A7d0JBQ0wsWUFBWTt3QkFDWixZQUFZO3dCQUNaLGdCQUFnQjt3QkFDaEIsc0JBQXNCO3FCQUN6QixhQUNVLENBQUMsbUJBQW1CLENBQUM7d0hBR3ZCLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBRThCLHFCQUFxQjtzQkFBeEQsU0FBUzt1QkFBQyx1QkFBdUI7Z0JBQ0gsZ0JBQWdCO3NCQUE5QyxTQUFTO3VCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5wdXQsXG4gICAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbi8vU2VydmljZXNcbmltcG9ydCB7IENoYXJ0TWFuYWdlclNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2NoYXJ0LW1hbmFnZXIuc2VydmljZSc7XG5cbi8vTW9kZWxzXG5pbXBvcnQge1xuICAgIElDaGFydEJvdW5kYXJpZXMsXG4gICAgSUNoYXJ0Q29uZmlndXJhdGlvbixcbiAgICBJQ2hhcnREYXRhc2V0SG92ZXIsXG59IGZyb20gJy4uL2NhLWNoYXJ0L21vZGVscyc7XG5pbXBvcnQgeyBJVG9vbHRpcExpc3QsIElUb29sdGlwTGlzdEl0ZW0gfSBmcm9tICcuLi9jYS10b29sdGlwLWxpc3QvbW9kZWxzJztcblxuLy9FbnVtc1xuaW1wb3J0IHsgQ2hhcnRDb2xvcnNTdHJpbmdFbnVtIH0gZnJvbSAnLi4vY2EtY2hhcnQvZW51bXMnO1xuXG4vL0NvbXBvbmVudHNcbmltcG9ydCB7IENhQ2hhcnRDb21wb25lbnQgfSBmcm9tICcuLi9jYS1jaGFydC9jYS1jaGFydC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FUb29sdGlwTGlzdENvbXBvbmVudCB9IGZyb20gJy4uL2NhLXRvb2x0aXAtbGlzdC9jYS10b29sdGlwLWxpc3QuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtY2EtY2hhcnQtbWFuYWdlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NhLWNoYXJ0LW1hbmFnZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NhLWNoYXJ0LW1hbmFnZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICAvL0NvbXBvbmVudHNcbiAgICAgICAgQ2FDaGFydENvbXBvbmVudCxcbiAgICAgICAgQ2FUb29sdGlwTGlzdENvbXBvbmVudCxcbiAgICBdLFxuICAgIHByb3ZpZGVyczogW0NoYXJ0TWFuYWdlclNlcnZpY2VdLFxufSlcbmV4cG9ydCBjbGFzcyBDYUNoYXJ0TWFuYWdlckNvbXBvbmVudCB7XG4gICAgQElucHV0KCkgY2hhcnRDb25maWdzOiBJQ2hhcnRDb25maWd1cmF0aW9uW10gPSBbXTtcbiAgICBASW5wdXQoKSB0b29sdGlwTGFibGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIEBJbnB1dCgpIGNoYXJ0RGF0YXNldEhvdmVyOiBJQ2hhcnREYXRhc2V0SG92ZXIgfCBudWxsID0gbnVsbDtcblxuICAgIEBWaWV3Q2hpbGQoJ2NoYXJ0TWFuYWdlckNvbnRhaW5lcicpIGNoYXJ0TWFuYWdlckNvbnRhaW5lciE6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgndG9vbHRpcENvbnRhaW5lcicpIHRvb2x0aXBDb250YWluZXIhOiBFbGVtZW50UmVmO1xuXG4gICAgcHVibGljIGhvdmVyZWRJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgcHVibGljIGhvdmVyZWRDaGFydElkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBwdWJsaWMgdG9vbHRpcExpc3Q6IElUb29sdGlwTGlzdCB8IG51bGwgPSBudWxsO1xuICAgIHB1YmxpYyB0b29sdGlwUG9zaXRpb24gPSB7IHg6IDAsIHk6IDAgfTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGNoYXJ0TWFuYWdlclNlcnZpY2U6IENoYXJ0TWFuYWdlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICAgICkge1xuICAgICAgICB0aGlzLmNoYXJ0TWFuYWdlclNlcnZpY2UuaG92ZXJTdGF0ZSQuc3Vic2NyaWJlKFxuICAgICAgICAgICAgKHsgaW5kZXgsIGNoYXJ0SWQsIGJvdW5kYXJpZXMgfSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaG92ZXJlZEluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgdGhpcy5ob3ZlcmVkQ2hhcnRJZCA9IGNoYXJ0SWQ7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUb29sdGlwTGlzdCh0aGlzLmhvdmVyZWRJbmRleCwgYm91bmRhcmllcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGNhbGN1bGF0ZVRvb2x0aXBQb3NpdGlvbihib3VuZGFyaWVzOiBJQ2hhcnRCb3VuZGFyaWVzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPVxuICAgICAgICAgICAgdGhpcy5jaGFydE1hbmFnZXJDb250YWluZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICBsZXQgeCA9IGJvdW5kYXJpZXMucmlnaHRCb3VuZGFyeSArIDQ7XG4gICAgICAgIGxldCB5ID0gY29udGFpbmVyUmVjdC50b3A7XG5cbiAgICAgICAgaWYgKHRoaXMudG9vbHRpcENvbnRhaW5lcikge1xuICAgICAgICAgICAgY29uc3QgdG9vbHRpcFdpZHRoID1cbiAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXBDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgICAgICAgIGNvbnN0IHRvb2x0aXBIZWlnaHQgPVxuICAgICAgICAgICAgICAgIHRoaXMudG9vbHRpcENvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICAgICAgICAgIHkgPSBjb250YWluZXJSZWN0LmhlaWdodCAvIDIgLSB0b29sdGlwSGVpZ2h0IC8gMjtcblxuICAgICAgICAgICAgaWYgKHggKyB0b29sdGlwV2lkdGggPiBjb250YWluZXJSZWN0LndpZHRoKVxuICAgICAgICAgICAgICAgIHggPSBib3VuZGFyaWVzLmxlZnRCb3VuZGFyeSAtIHRvb2x0aXBXaWR0aCAtIDQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRvb2x0aXBQb3NpdGlvbiA9IHsgeCwgeSB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlVG9vbHRpcExpc3QoXG4gICAgICAgIGluZGV4OiBudW1iZXIgfCBudWxsLFxuICAgICAgICBib3VuZGFyaWVzOiBJQ2hhcnRCb3VuZGFyaWVzIHwgdW5kZWZpbmVkXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGlmIChpbmRleCA9PT0gbnVsbCB8fCAhdGhpcy5jaGFydENvbmZpZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnRvb2x0aXBMaXN0ID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChib3VuZGFyaWVzKSB0aGlzLmNhbGN1bGF0ZVRvb2x0aXBQb3NpdGlvbihib3VuZGFyaWVzKTtcblxuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zOiBJVG9vbHRpcExpc3RJdGVtW10gPSBbXTtcbiAgICAgICAgY29uc3Qgb3RoZXJJdGVtczogSVRvb2x0aXBMaXN0SXRlbVtdID0gW107XG5cbiAgICAgICAgdGhpcy5jaGFydENvbmZpZ3MuZm9yRWFjaCgoY29uZmlnKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2aXNpYmxlRGF0YXNldHMgPSBjb25maWcuY2hhcnREYXRhLmRhdGFzZXRzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoZGF0YXNldCkgPT4gIWRhdGFzZXQuaGlkZGVuXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB2aXNpYmxlRGF0YXNldHMuZm9yRWFjaCgoZGF0YXNldCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhd0RhdGEgPSBkYXRhc2V0LmRhdGFbaW5kZXhdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gQXJyYXkuaXNBcnJheShyYXdEYXRhKSA/IHJhd0RhdGFbMF0gOiByYXdEYXRhO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdG9vbHRpcEl0ZW06IElUb29sdGlwTGlzdEl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBkYXRhc2V0LmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUgfHwgMCxcbiAgICAgICAgICAgICAgICAgICAgaXNDdXJyZW5jeTogZGF0YXNldC5pc0N1cnJlbmN5IHx8IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogZGF0YXNldC5ib3JkZXJDb2xvciB8fCBDaGFydENvbG9yc1N0cmluZ0VudW0uV0hJVEUsXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChjb25maWcuaXNUb29sdGlwSXRlbUluU2VsZWN0ZWRJdGVtcylcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcy5wdXNoKHRvb2x0aXBJdGVtKTtcbiAgICAgICAgICAgICAgICBlbHNlIG90aGVySXRlbXMucHVzaCh0b29sdGlwSXRlbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy50b29sdGlwTGlzdCA9IHtcbiAgICAgICAgICAgIGRhdGU6IHRoaXMudG9vbHRpcExhYmxlc1tpbmRleF0sXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1zOiBzZWxlY3RlZEl0ZW1zLFxuICAgICAgICAgICAgb3RoZXJJdGVtczogb3RoZXJJdGVtcyxcbiAgICAgICAgICAgIHNob3dQZXJjZW50YWdlOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCI8ZGl2XG4gICAgI2NoYXJ0TWFuYWdlckNvbnRhaW5lclxuICAgIGNsYXNzPVwiY2hhcnQtbWFuYWdlci1jb250YWluZXJcIlxuPlxuICAgIEBmb3IgKGNoYXJ0Q29uZmlnIG9mIGNoYXJ0Q29uZmlnczsgbGV0IGkgPSAkaW5kZXg7IHRyYWNrICRpbmRleCkge1xuICAgICAgICA8YXBwLWNhLWNoYXJ0XG4gICAgICAgICAgICBbY2hhcnRDb25maWddPVwiY2hhcnRDb25maWdcIlxuICAgICAgICAgICAgW2NoYXJ0SWRdPVwiJ2NoYXJ0LScgKyBpXCJcbiAgICAgICAgICAgIFtjaGFydERhdGFzZXRIb3Zlcl09XCJcbiAgICAgICAgICAgICAgICBjaGFydENvbmZpZz8uaXNEYXRhc2V0SG92ZXJFbmFibGVkID8gY2hhcnREYXRhc2V0SG92ZXIgOiBudWxsXG4gICAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgIDwvYXBwLWNhLWNoYXJ0PlxuICAgIH1cblxuICAgIEBpZiAoaG92ZXJlZEluZGV4ICE9PSBudWxsKSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgICN0b29sdGlwQ29udGFpbmVyXG4gICAgICAgICAgICBjbGFzcz1cInRvb2x0aXAtY29udGFpbmVyXCJcbiAgICAgICAgICAgIFtzdHlsZS50b3AucHhdPVwidG9vbHRpcFBvc2l0aW9uLnlcIlxuICAgICAgICAgICAgW3N0eWxlLmxlZnQucHhdPVwidG9vbHRpcFBvc2l0aW9uLnhcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8YXBwLWNhLXRvb2x0aXAtbGlzdCBbdG9vbHRpcExpc3RdPVwidG9vbHRpcExpc3RcIj5cbiAgICAgICAgICAgIDwvYXBwLWNhLXRvb2x0aXAtbGlzdD5cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuPC9kaXY+XG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG92ZXItc3RhdGUubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jYS1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9jYS1jaGFydC1tYW5hZ2VyL21vZGVscy9ob3Zlci1zdGF0ZS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBJSG92ZXJTdGF0ZSB7XG4gICAgaW5kZXg6IG51bWJlciB8IG51bGw7XG4gICAgY2hhcnRJZDogc3RyaW5nIHwgbnVsbDtcbn0iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG92ZXItc3RhdGUubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jYS1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9jYS1jaGFydC1tYW5hZ2VyL21vZGVscy9ob3Zlci1zdGF0ZS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUNoYXJ0Qm91bmRhcmllcyB9IGZyb20gJy4uLy4uL2NhLWNoYXJ0L21vZGVscyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUhvdmVyU3RhdGUge1xuICAgIGluZGV4OiBudW1iZXIgfCBudWxsO1xuICAgIGNoYXJ0SWQ6IHN0cmluZyB8IG51bGw7XG4gICAgYm91bmRhcmllczogSUNoYXJ0Qm91bmRhcmllcyB8IHVuZGVmaW5lZDtcbn1cbiJdfQ==
@@ -6,11 +6,12 @@ export class ChartManagerService {
6
6
  this.hoverStateSubject = new BehaviorSubject({
7
7
  index: null,
8
8
  chartId: null,
9
+ boundaries: undefined,
9
10
  });
10
11
  this.hoverState$ = this.hoverStateSubject.asObservable();
11
12
  }
12
- setHoverState(index, chartId) {
13
- this.hoverStateSubject.next({ index, chartId });
13
+ setHoverState(index, chartId, boundaries) {
14
+ this.hoverStateSubject.next({ index, chartId, boundaries });
14
15
  }
15
16
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChartManagerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
16
17
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChartManagerService }); }
@@ -18,4 +19,4 @@ export class ChartManagerService {
18
19
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChartManagerService, decorators: [{
19
20
  type: Injectable
20
21
  }] });
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtbWFuYWdlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtY2hhcnQtbWFuYWdlci9zZXJ2aWNlcy9jaGFydC1tYW5hZ2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQU12QyxNQUFNLE9BQU8sbUJBQW1CO0lBRGhDO1FBRVMsc0JBQWlCLEdBQUcsSUFBSSxlQUFlLENBQWM7WUFDMUQsS0FBSyxFQUFFLElBQUk7WUFDWCxPQUFPLEVBQUUsSUFBSTtTQUNkLENBQUMsQ0FBQztRQUVJLGdCQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO0tBSzVEO0lBSFEsYUFBYSxDQUFDLEtBQW9CLEVBQUUsT0FBc0I7UUFDL0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELENBQUM7K0dBVlUsbUJBQW1CO21IQUFuQixtQkFBbUI7OzRGQUFuQixtQkFBbUI7a0JBRC9CLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuLy9Nb2RlbHNcbmltcG9ydCB7IElIb3ZlclN0YXRlIH0gZnJvbSAnLi4vbW9kZWxzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENoYXJ0TWFuYWdlclNlcnZpY2Uge1xuICBwdWJsaWMgaG92ZXJTdGF0ZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElIb3ZlclN0YXRlPih7XG4gICAgaW5kZXg6IG51bGwsXG4gICAgY2hhcnRJZDogbnVsbCxcbiAgfSk7XG5cbiAgcHVibGljIGhvdmVyU3RhdGUkID0gdGhpcy5ob3ZlclN0YXRlU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwdWJsaWMgc2V0SG92ZXJTdGF0ZShpbmRleDogbnVtYmVyIHwgbnVsbCwgY2hhcnRJZDogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuaG92ZXJTdGF0ZVN1YmplY3QubmV4dCh7IGluZGV4LCBjaGFydElkIH0pO1xuICB9XG59XG4iXX0=
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtbWFuYWdlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtY2hhcnQtbWFuYWdlci9zZXJ2aWNlcy9jaGFydC1tYW5hZ2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQU92QyxNQUFNLE9BQU8sbUJBQW1CO0lBRGhDO1FBRVMsc0JBQWlCLEdBQUcsSUFBSSxlQUFlLENBQWM7WUFDMUQsS0FBSyxFQUFFLElBQUk7WUFDWCxPQUFPLEVBQUUsSUFBSTtZQUNiLFVBQVUsRUFBRSxTQUFTO1NBQ3RCLENBQUMsQ0FBQztRQUVJLGdCQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO0tBSzVEO0lBSFEsYUFBYSxDQUFDLEtBQW9CLEVBQUUsT0FBc0IsRUFBRSxVQUE2QjtRQUM5RixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7K0dBWFUsbUJBQW1CO21IQUFuQixtQkFBbUI7OzRGQUFuQixtQkFBbUI7a0JBRC9CLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuLy9Nb2RlbHNcbmltcG9ydCB7IElIb3ZlclN0YXRlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IElDaGFydEJvdW5kYXJpZXMgfSBmcm9tICcuLi8uLi9jYS1jaGFydC9tb2RlbHMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ2hhcnRNYW5hZ2VyU2VydmljZSB7XG4gIHB1YmxpYyBob3ZlclN0YXRlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SUhvdmVyU3RhdGU+KHtcbiAgICBpbmRleDogbnVsbCxcbiAgICBjaGFydElkOiBudWxsLFxuICAgIGJvdW5kYXJpZXM6IHVuZGVmaW5lZCxcbiAgfSk7XG5cbiAgcHVibGljIGhvdmVyU3RhdGUkID0gdGhpcy5ob3ZlclN0YXRlU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwdWJsaWMgc2V0SG92ZXJTdGF0ZShpbmRleDogbnVtYmVyIHwgbnVsbCwgY2hhcnRJZDogc3RyaW5nIHwgbnVsbCwgYm91bmRhcmllcz86IElDaGFydEJvdW5kYXJpZXMpOiB2b2lkIHtcbiAgICB0aGlzLmhvdmVyU3RhdGVTdWJqZWN0Lm5leHQoeyBpbmRleCwgY2hhcnRJZCwgYm91bmRhcmllcyB9KTtcbiAgfVxufVxuIl19