@c8y/ngx-components 1021.55.1 → 1021.55.2

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.
@@ -109,9 +109,7 @@ export class ChartsComponent {
109
109
  return;
110
110
  }
111
111
  originalFormatter = originalFormatter ?? options['tooltip'][0].formatter;
112
- const updatedOptions = {
113
- tooltip: options['tooltip'][0]
114
- };
112
+ const updatedOptions = { tooltip: options['tooltip'][0] };
115
113
  if (!updatedOptions.tooltip) {
116
114
  return;
117
115
  }
@@ -133,16 +131,7 @@ export class ChartsComponent {
133
131
  if (!this.isAlarmClick(params)) {
134
132
  this.echartsInstance.setOption({
135
133
  tooltip: { triggerOn: 'mousemove' },
136
- series: [
137
- {
138
- markArea: {
139
- data: []
140
- },
141
- markLine: {
142
- data: []
143
- }
144
- }
145
- ]
134
+ series: [{ markArea: { data: [] }, markLine: { data: [] } }]
146
135
  });
147
136
  return;
148
137
  }
@@ -150,18 +139,10 @@ export class ChartsComponent {
150
139
  this.isMarkedAreaEnabled.emit(this.hasMarkArea(options));
151
140
  const updatedOptions = !this.hasMarkArea(options)
152
141
  ? {
153
- tooltip: {
154
- enterable: true,
155
- triggerOn: 'click'
156
- },
142
+ tooltip: { enterable: true, triggerOn: 'click' },
157
143
  series: [
158
144
  {
159
- markArea: {
160
- label: {
161
- show: false
162
- },
163
- data: this.getMarkedAreaData(clickedAlarms)
164
- },
145
+ markArea: { label: { show: false }, data: this.getMarkedAreaData(clickedAlarms) },
165
146
  markLine: {
166
147
  showSymbol: true,
167
148
  symbol: ['none', 'none'],
@@ -173,16 +154,7 @@ export class ChartsComponent {
173
154
  : // if markArea already exists, remove it and remove lastUpdated from markLine
174
155
  {
175
156
  tooltip: { triggerOn: 'mousemove' },
176
- series: [
177
- {
178
- markArea: {
179
- data: []
180
- },
181
- markLine: {
182
- data: []
183
- }
184
- }
185
- ]
157
+ series: [{ markArea: { data: [] }, markLine: { data: [] } }]
186
158
  };
187
159
  this.echartsInstance.setOption(updatedOptions);
188
160
  }
@@ -193,11 +165,7 @@ export class ChartsComponent {
193
165
  return options?.series?.[0]?.markArea?.data?.length > 0;
194
166
  }
195
167
  saveAsImage() {
196
- this.echartsInstance.setOption({
197
- legend: {
198
- show: true
199
- }
200
- });
168
+ this.echartsInstance.setOption({ legend: { show: true } });
201
169
  const url = this.echartsInstance.getDataURL({
202
170
  pixelRatio: 2,
203
171
  backgroundColor: '#fff',
@@ -209,11 +177,7 @@ export class ChartsComponent {
209
177
  document.body.appendChild(link);
210
178
  link.click();
211
179
  document.body.removeChild(link);
212
- this.echartsInstance.setOption({
213
- legend: {
214
- show: false
215
- }
216
- });
180
+ this.echartsInstance.setOption({ legend: { show: false } });
217
181
  }
218
182
  loadMoreData() {
219
183
  const currentTimeRangeInMs = this.echartsOptionsService.calculateExtendedIntervalInMs(this.config.interval || 'custom', {
@@ -245,16 +209,14 @@ export class ChartsComponent {
245
209
  getDefaultChartOptions() {
246
210
  return {
247
211
  title: {
248
- text: gettext('No data available')
212
+ text: gettext('No data available.'),
213
+ left: 'center',
214
+ top: 'center',
215
+ textStyle: { fontSize: 30 }
249
216
  },
250
217
  empty: true,
251
- xAxis: {
252
- type: 'category',
253
- data: []
254
- },
255
- yAxis: {
256
- type: 'value'
257
- },
218
+ xAxis: { type: 'category', data: [] },
219
+ yAxis: { type: 'value' },
258
220
  series: []
259
221
  };
260
222
  }
@@ -288,19 +250,13 @@ export class ChartsComponent {
288
250
  {
289
251
  xAxis: alarm.creationTime,
290
252
  itemType: alarm.type,
291
- label: {
292
- show: false,
293
- formatter: () => alarm.type
294
- },
253
+ label: { show: false, formatter: () => alarm.type },
295
254
  itemStyle: { color: alarm['color'] }
296
255
  },
297
256
  {
298
257
  xAxis: alarm['lastUpdated'],
299
258
  itemType: alarm.type,
300
- label: {
301
- show: false,
302
- formatter: () => alarm.type
303
- },
259
+ label: { show: false, formatter: () => alarm.type },
304
260
  itemStyle: { color: alarm['color'] }
305
261
  }
306
262
  ]);
@@ -309,10 +265,7 @@ export class ChartsComponent {
309
265
  {
310
266
  xAxis: alarm.creationTime,
311
267
  itemType: alarm.type,
312
- label: {
313
- show: false,
314
- formatter: () => alarm.type
315
- },
268
+ label: { show: false, formatter: () => alarm.type },
316
269
  itemStyle: { color: alarm['color'] }
317
270
  }
318
271
  ]);
@@ -374,10 +327,7 @@ export class ChartsComponent {
374
327
  this.widgetTimeContextDateRangeService.updateInitialTimeRange(timeRange);
375
328
  const aggregatedDatapoints = await lastValueFrom(this.fetchSeriesForDatapoints$({
376
329
  dateFrom: new Date(new Date(timeRange.dateFrom).valueOf() -
377
- this.echartsOptionsService.calculateExtendedIntervalInMs(this.config.interval || 'custom', {
378
- dateFrom: timeRange.dateFrom,
379
- dateTo: timeRange.dateTo
380
- })).toISOString(),
330
+ this.echartsOptionsService.calculateExtendedIntervalInMs(this.config.interval || 'custom', { dateFrom: timeRange.dateFrom, dateTo: timeRange.dateTo })).toISOString(),
381
331
  dateTo: timeRange.dateTo
382
332
  }));
383
333
  return this.echartsOptionsService.getChartOptions(datapointsWithValues, timeRange, {
@@ -481,26 +431,17 @@ export class ChartsComponent {
481
431
  new Date(this.config.dateFrom).valueOf();
482
432
  }
483
433
  const now = new Date();
484
- timeRange = {
485
- dateFrom: new Date(now.valueOf() - timeRangeInMs),
486
- dateTo: now
487
- };
434
+ timeRange = { dateFrom: new Date(now.valueOf() - timeRangeInMs), dateTo: now };
488
435
  }
489
436
  if (additionalPadding) {
490
437
  timeRange.dateFrom = new Date(timeRange.dateFrom.valueOf() - additionalPadding);
491
438
  timeRange.dateTo = new Date(timeRange.dateTo.valueOf() + additionalPadding);
492
439
  }
493
- return {
494
- dateFrom: timeRange.dateFrom.toISOString(),
495
- dateTo: timeRange.dateTo.toISOString()
496
- };
440
+ return { dateFrom: timeRange.dateFrom.toISOString(), dateTo: timeRange.dateTo.toISOString() };
497
441
  }
498
442
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChartsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
499
443
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ChartsComponent, isStandalone: true, selector: "c8y-charts", inputs: { config: "config", alerts: "alerts" }, outputs: { configChangeOnZoomOut: "configChangeOnZoomOut", timeRangeChangeOnRealtime: "timeRangeChangeOnRealtime", datapointOutOfSync: "datapointOutOfSync", updateAlarmsAndEvents: "updateAlarmsAndEvents", isMarkedAreaEnabled: "isMarkedAreaEnabled" }, providers: [
500
- {
501
- provide: NGX_ECHARTS_CONFIG,
502
- useFactory: () => ({ echarts: () => import('echarts') })
503
- },
444
+ { provide: NGX_ECHARTS_CONFIG, useFactory: () => ({ echarts: () => import('echarts') }) },
504
445
  ChartRealtimeService,
505
446
  MeasurementRealtimeService,
506
447
  AlarmRealtimeService,
@@ -516,10 +457,7 @@ export class ChartsComponent {
516
457
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChartsComponent, decorators: [{
517
458
  type: Component,
518
459
  args: [{ selector: 'c8y-charts', providers: [
519
- {
520
- provide: NGX_ECHARTS_CONFIG,
521
- useFactory: () => ({ echarts: () => import('echarts') })
522
- },
460
+ { provide: NGX_ECHARTS_CONFIG, useFactory: () => ({ echarts: () => import('echarts') }) },
523
461
  ChartRealtimeService,
524
462
  MeasurementRealtimeService,
525
463
  AlarmRealtimeService,
@@ -557,4 +495,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
557
495
  type: ViewChild,
558
496
  args: ['chart']
559
497
  }] } });
560
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2VjaGFydC9jaGFydHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZWNoYXJ0L2NoYXJ0cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBSUwsTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQVd2QixPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ2xGLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsVUFBVSxFQUNWLG9CQUFvQixFQUNwQixxQkFBcUIsRUFDckIsK0JBQStCLEVBQy9CLG9CQUFvQixFQUNwQixPQUFPLEVBQ1AsMEJBQTBCLEVBQzFCLGlDQUFpQyxFQUNsQyxNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBTXpFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxh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LDJDRDZESSxZQUFZLHVMQUNaLFVBQVUseUxBQ1YsZ0JBQWdCLGtqQ0FDaEIsYUFBYSw4QkFDYixhQUFhLCtCQUNiLG9CQUFvQixnRkFDcEIsWUFBWTs7NEZBR0gsZUFBZTtrQkE5QjNCLFNBQVM7K0JBQ0UsWUFBWSxhQUVYO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxrQkFBa0I7NEJBQzNCLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO3lCQUN6RDt3QkFDRCxvQkFBb0I7d0JBQ3BCLDBCQUEwQjt3QkFDMUIsb0JBQW9CO3dCQUNwQixvQkFBb0I7d0JBQ3BCLGlCQUFpQjt3QkFDakIscUJBQXFCO3dCQUNyQix3QkFBd0I7d0JBQ3hCLFlBQVk7d0JBQ1osdUJBQXVCO3dCQUN2Qix3QkFBd0I7cUJBQ3pCLGNBQ1csSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osVUFBVTt3QkFDVixnQkFBZ0I7d0JBQ2hCLGFBQWE7d0JBQ2IsYUFBYTt3QkFDYixvQkFBb0I7d0JBQ3BCLFlBQVk7cUJBQ2I7d0RBU1EsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDSSxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBS0cseUJBQXlCO3NCQUFsQyxNQUFNO2dCQUdHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNhLEtBQUs7c0JBQXhCLFNBQVM7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgRUNoYXJ0cywgRUNoYXJ0c09wdGlvbiwgU2VyaWVzT3B0aW9uIH0gZnJvbSAnZWNoYXJ0cyc7XG5pbXBvcnQge1xuICBBbGFybURldGFpbHNFeHRlbmRlZCxcbiAgQWxhcm1PckV2ZW50RXh0ZW5kZWQsXG4gIERhdGFwb2ludHNHcmFwaEtQSURldGFpbHMsXG4gIERhdGFwb2ludHNHcmFwaFdpZGdldENvbmZpZyxcbiAgRHBXaXRoVmFsdWVzLFxuICBFdmVudERldGFpbHNFeHRlbmRlZCxcbiAgTWFya0xpbmVEYXRhXG59IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZm9ya0pvaW4sIGxhc3RWYWx1ZUZyb20sIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ3VzdG9tTWVhc3VyZW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9jdXN0b20tbWVhc3VyZW1lbnRzLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQWxhcm1SZWFsdGltZVNlcnZpY2UsXG4gIENvcmVNb2R1bGUsXG4gIERpc21pc3NBbGVydFN0cmF0ZWd5LFxuICBEeW5hbWljQ29tcG9uZW50QWxlcnQsXG4gIER5bmFtaWNDb21wb25lbnRBbGVydEFnZ3JlZ2F0b3IsXG4gIEV2ZW50UmVhbHRpbWVTZXJ2aWNlLFxuICBnZXR0ZXh0LFxuICBNZWFzdXJlbWVudFJlYWx0aW1lU2VydmljZSxcbiAgV2lkZ2V0VGltZUNvbnRleHREYXRlUmFuZ2VTZXJ2aWNlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgRWNoYXJ0c09wdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9lY2hhcnRzLW9wdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBDaGFydFJlYWx0aW1lU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvY2hhcnQtcmVhbHRpbWUuc2VydmljZSc7XG5pbXBvcnQgdHlwZSB7XG4gIENhbGxiYWNrRGF0YVBhcmFtcyxcbiAgRUNBY3Rpb25FdmVudCxcbiAgVG9vbHRpcEZvcm1hdHRlckNhbGxiYWNrXG59IGZyb20gJ2VjaGFydHMvdHlwZXMvc3JjL3V0aWwvdHlwZXMnO1xuaW1wb3J0IHsgQ2hhcnRUeXBlc1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2NoYXJ0LXR5cGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5HWF9FQ0hBUlRTX0NPTkZJRywgTmd4RWNoYXJ0c01vZHVsZSB9IGZyb20gJ25neC1lY2hhcnRzJztcbmltcG9ydCB7IFRvb2x0aXBNb2R1bGUgfSBmcm9tICduZ3gtYm9vdHN0cmFwL3Rvb2x0aXAnO1xuaW1wb3J0IHsgUG9wb3Zlck1vZHVsZSB9IGZyb20gJ25neC1ib290c3RyYXAvcG9wb3Zlcic7XG5pbXBvcnQgeyBZQXhpc1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3ktYXhpcy5zZXJ2aWNlJztcbmltcG9ydCB7IENoYXJ0QWxlcnRzQ29tcG9uZW50IH0gZnJvbSAnLi9jaGFydC1hbGVydHMvY2hhcnQtYWxlcnRzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBhZ2dyZWdhdGlvblR5cGUsIEFsYXJtU3RhdHVzLCBJQWxhcm0sIElFdmVudCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IENoYXJ0RXZlbnRzU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvY2hhcnQtZXZlbnRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhcnRBbGFybXNTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9jaGFydC1hbGFybXMuc2VydmljZSc7XG5pbXBvcnQgeyBFY2hhcnRzQ3VzdG9tT3B0aW9ucyB9IGZyb20gJy4vbW9kZWxzL2NoYXJ0Lm1vZGVsJztcbmltcG9ydCB7IFRvcExldmVsRm9ybWF0dGVyUGFyYW1zIH0gZnJvbSAnZWNoYXJ0cy90eXBlcy9zcmMvY29tcG9uZW50L3Rvb2x0aXAvVG9vbHRpcE1vZGVsJztcbmltcG9ydCB7XG4gIEFsYXJtU2V2ZXJpdHlUb0ljb25QaXBlLFxuICBBbGFybVNldmVyaXR5VG9MYWJlbFBpcGUsXG4gIEFsYXJtc01vZHVsZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2FsYXJtcyc7XG5pbXBvcnQgeyBJbnRlcnZhbCwgSU5URVJWQUxTIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9pbnRlcnZhbC1waWNrZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktY2hhcnRzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoYXJ0cy5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HWF9FQ0hBUlRTX0NPTkZJRyxcbiAgICAgIHVzZUZhY3Rvcnk6ICgpID0+ICh7IGVjaGFydHM6ICgpID0+IGltcG9ydCgnZWNoYXJ0cycpIH0pXG4gICAgfSxcbiAgICBDaGFydFJlYWx0aW1lU2VydmljZSxcbiAgICBNZWFzdXJlbWVudFJlYWx0aW1lU2VydmljZSxcbiAgICBBbGFybVJlYWx0aW1lU2VydmljZSxcbiAgICBFdmVudFJlYWx0aW1lU2VydmljZSxcbiAgICBDaGFydFR5cGVzU2VydmljZSxcbiAgICBFY2hhcnRzT3B0aW9uc1NlcnZpY2UsXG4gICAgQ3VzdG9tTWVhc3VyZW1lbnRTZXJ2aWNlLFxuICAgIFlBeGlzU2VydmljZSxcbiAgICBBbGFybVNldmVyaXR5VG9JY29uUGlwZSxcbiAgICBBbGFybVNldmVyaXR5VG9MYWJlbFBpcGVcbiAgXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBDb3JlTW9kdWxlLFxuICAgIE5neEVjaGFydHNNb2R1bGUsXG4gICAgVG9vbHRpcE1vZHVsZSxcbiAgICBQb3BvdmVyTW9kdWxlLFxuICAgIENoYXJ0QWxlcnRzQ29tcG9uZW50LFxuICAgIEFsYXJtc01vZHVsZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIENoYXJ0c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBjaGFydE9wdGlvbiQ6IE9ic2VydmFibGU8RUNoYXJ0c09wdGlvbj47XG4gIGVjaGFydHNJbnN0YW5jZSE6IEVDaGFydHM7XG4gIHNob3dMb2FkTW9yZSA9IGZhbHNlO1xuICBhbGFybXM6IElBbGFybVtdID0gW107XG4gIGV2ZW50czogSUV2ZW50W10gPSBbXTtcbiAgc2xpZGVyWm9vbVVzZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgY29uZmlnITogRGF0YXBvaW50c0dyYXBoV2lkZ2V0Q29uZmlnO1xuICBASW5wdXQoKSBhbGVydHMhOiBEeW5hbWljQ29tcG9uZW50QWxlcnRBZ2dyZWdhdG9yO1xuICBAT3V0cHV0KCkgY29uZmlnQ2hhbmdlT25ab29tT3V0ID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgZGF0ZUZyb206IERhdGU7XG4gICAgZGF0ZVRvOiBEYXRlO1xuICAgIGludGVydmFsPzogSW50ZXJ2YWxbJ2lkJ107XG4gIH0+KCk7XG4gIEBPdXRwdXQoKSB0aW1lUmFuZ2VDaGFuZ2VPblJlYWx0aW1lID0gbmV3IEV2ZW50RW1pdHRlcjxcbiAgICBQaWNrPERhdGFwb2ludHNHcmFwaFdpZGdldENvbmZpZywgJ2RhdGVGcm9tJyB8ICdkYXRlVG8nPlxuICA+KCk7XG4gIEBPdXRwdXQoKSBkYXRhcG9pbnRPdXRPZlN5bmMgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGFwb2ludHNHcmFwaEtQSURldGFpbHM+KCk7XG4gIEBPdXRwdXQoKSB1cGRhdGVBbGFybXNBbmRFdmVudHMgPSBuZXcgRXZlbnRFbWl0dGVyPEFsYXJtT3JFdmVudEV4dGVuZGVkW10+KCk7XG4gIEBPdXRwdXQoKSBpc01hcmtlZEFyZWFFbmFibGVkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAVmlld0NoaWxkKCdjaGFydCcpIGNoYXJ0OiBFbGVtZW50UmVmO1xuICBwcml2YXRlIGNvbmZpZ0NoYW5nZWRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDx2b2lkIHwgbnVsbD4obnVsbCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBtZWFzdXJlbWVudFNlcnZpY2UgPSBpbmplY3QoQ3VzdG9tTWVhc3VyZW1lbnRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBlY2hhcnRzT3B0aW9uc1NlcnZpY2UgPSBpbmplY3QoRWNoYXJ0c09wdGlvbnNTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjaGFydFJlYWx0aW1lU2VydmljZSA9IGluamVjdChDaGFydFJlYWx0aW1lU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2hhcnRFdmVudHNTZXJ2aWNlID0gaW5qZWN0KENoYXJ0RXZlbnRzU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2hhcnRBbGFybXNTZXJ2aWNlID0gaW5qZWN0KENoYXJ0QWxhcm1zU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgd2lkZ2V0VGltZUNvbnRleHREYXRlUmFuZ2VTZXJ2aWNlID0gaW5qZWN0KFdpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jaGFydE9wdGlvbiQgPSB0aGlzLmNvbmZpZ0NoYW5nZWRTdWJqZWN0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5sb2FkQWxhcm1zQW5kRXZlbnRzKCkpLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuZmV0Y2hTZXJpZXNGb3JEYXRhcG9pbnRzJCgpKSxcbiAgICAgIHN3aXRjaE1hcCgoZGF0YXBvaW50c1dpdGhWYWx1ZXM6IERwV2l0aFZhbHVlc1tdKSA9PiB7XG4gICAgICAgIGlmIChkYXRhcG9pbnRzV2l0aFZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLmVjaGFydHNJbnN0YW5jZT8uY2xlYXIoKTtcbiAgICAgICAgICB0aGlzLnNob3dMb2FkTW9yZSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBvZih0aGlzLmdldERlZmF1bHRDaGFydE9wdGlvbnMoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2hhcnRPcHRpb25zKGRhdGFwb2ludHNXaXRoVmFsdWVzKTtcbiAgICAgIH0pLFxuICAgICAgdGFwKHYgPT4ge1xuICAgICAgICBpZiAodlsnZW1wdHknXSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoYXJ0UmVhbHRpbWVTZXJ2aWNlLnN0b3BSZWFsdGltZSgpO1xuICAgICAgICB0aGlzLnN0YXJ0UmVhbHRpbWVJZlBvc3NpYmxlKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuZWNoYXJ0c0luc3RhbmNlKSB7XG4gICAgICAgICAgdGhpcy5lY2hhcnRzSW5zdGFuY2Uuc2V0T3B0aW9uKHYsIHRydWUpO1xuICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmVjaGFydHNJbnN0YW5jZS5nZXRPcHRpb24oKTtcbiAgICAgICAgICBjb25zdCBkYXRhWm9vbSA9IG9wdGlvbnNbJ2RhdGFab29tJ11bMF07XG4gICAgICAgICAgaWYgKGRhdGFab29tLnN0YXJ0ICE9PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dMb2FkTW9yZSA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNsaWRlclpvb21Vc2VkID0gZmFsc2U7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICB0aGlzLmNvbmZpZ0NoYW5nZWRTdWJqZWN0Lm5leHQoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmFsZXJ0cykge1xuICAgICAgdGhpcy5hbGVydHMuc2V0QWxlcnRHcm91cERpc21pc3NTdHJhdGVneShcbiAgICAgICAgJ3dhcm5pbmcnLFxuICAgICAgICBEaXNtaXNzQWxlcnRTdHJhdGVneS5URU1QT1JBUllfT1JfUEVSTUFORU5UXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuY2hhcnRSZWFsdGltZVNlcnZpY2Uuc3RvcFJlYWx0aW1lKCk7XG4gIH1cblxuICBvbkNoYXJ0SW5pdChlYzogRUNoYXJ0cykge1xuICAgIHRoaXMuZWNoYXJ0c0luc3RhbmNlID0gZWM7XG4gICAgdGhpcy5lY2hhcnRzT3B0aW9uc1NlcnZpY2UuZWNoYXJ0c0luc3RhbmNlID0gdGhpcy5lY2hhcnRzSW5zdGFuY2U7XG4gICAgdGhpcy5zdGFydFJlYWx0aW1lSWZQb3NzaWJsZSgpO1xuXG4gICAgY29uc3QgZGF0YVpvb21IYW5kbGVyID0gKGV2dDogRUNBY3Rpb25FdmVudCkgPT4ge1xuICAgICAgaWYgKGV2dC5iYXRjaD8uWzBdPy5zdGFydCA9PT0gMCB8fCBldnRbJ3N0YXJ0J10gPT09IDApIHtcbiAgICAgICAgdGhpcy5zaG93TG9hZE1vcmUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5lY2hhcnRzSW5zdGFuY2UuZ2V0T3B0aW9uKCk7XG4gICAgICBjb25zdCBkYXRhWm9vbSA9IG9wdGlvbnNbJ2RhdGFab29tJ11bMF07XG4gICAgICB0aGlzLnNsaWRlclpvb21Vc2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMuY29uZmlnQ2hhbmdlT25ab29tT3V0LmVtaXQoe1xuICAgICAgICBkYXRlRnJvbTogbmV3IERhdGUoZGF0YVpvb21bJ3N0YXJ0VmFsdWUnXSksXG4gICAgICAgIGRhdGVUbzogbmV3IERhdGUoZGF0YVpvb21bJ2VuZFZhbHVlJ10pLFxuICAgICAgICBpbnRlcnZhbDogJ2N1c3RvbSdcbiAgICAgIH0pO1xuICAgICAgdGhpcy5lY2hhcnRzSW5zdGFuY2Uuc2V0T3B0aW9uKG9wdGlvbnMpO1xuICAgICAgdGhpcy5jaGFydFJlYWx0aW1lU2VydmljZS5zdG9wUmVhbHRpbWUoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZGVib3VuY2VkRGF0YVpvb21IYW5kbGVyID0gdGhpcy5jb25maWcucmVhbHRpbWVcbiAgICAgID8gZGF0YVpvb21IYW5kbGVyXG4gICAgICA6IHRoaXMuZGVib3VuY2UoZGF0YVpvb21IYW5kbGVyLCAxMDAwKTtcblxuICAgIHRoaXMuZWNoYXJ0c0luc3RhbmNlLm9uKCdkYXRhWm9vbScsIGRlYm91bmNlZERhdGFab29tSGFuZGxlcik7XG4gICAgdGhpcy5lY2hhcnRzSW5zdGFuY2Uub24oJ2NsaWNrJywgdGhpcy5vbkNoYXJ0Q2xpY2suYmluZCh0aGlzKSk7XG5cbiAgICBsZXQgb3JpZ2luYWxGb3JtYXR0ZXI6XG4gICAgICB8IFRvb2x0aXBGb3JtYXR0ZXJDYWxsYmFjazxUb3BMZXZlbEZvcm1hdHRlclBhcmFtcz5cbiAgICAgIHwgc3RyaW5nXG4gICAgICB8IG51bGxcbiAgICAgIHwgdW5kZWZpbmVkID0gbnVsbDtcblxuICAgIHRoaXMuZWNoYXJ0c0luc3RhbmNlLm9uKCdtb3VzZW92ZXInLCAocGFyYW1zOiBhbnkpID0+IHtcbiAgICAgIGlmIChwYXJhbXM/LmNvbXBvbmVudFR5cGUgIT09ICdtYXJrTGluZScgJiYgcGFyYW1zPy5jb21wb25lbnRUeXBlICE9PSAnbWFya1BvaW50Jykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmVjaGFydHNJbnN0YW5jZS5nZXRPcHRpb24oKSBhcyBFQ2hhcnRzT3B0aW9uO1xuICAgICAgaWYgKCFvcHRpb25zLnRvb2x0aXAgfHwgIUFycmF5LmlzQXJyYXkob3B0aW9ucy50b29sdGlwKSB8fCAhb3B0aW9ucy50b29sdGlwWzBdKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG9yaWdpbmFsRm9ybWF0dGVyID0gb3JpZ2luYWxGb3JtYXR0ZXIgPz8gb3B0aW9uc1sndG9vbHRpcCddWzBdLmZvcm1hdHRlcjtcblxuICAgICAgY29uc3QgdXBkYXRlZE9wdGlvbnM6IFBhcnRpYWw8U2VyaWVzT3B0aW9uPiA9IHtcbiAgICAgICAgdG9vbHRpcDogb3B0aW9uc1sndG9vbHRpcCddWzBdXG4gICAgICB9O1xuXG4gICAgICBpZiAoIXVwZGF0ZWRPcHRpb25zLnRvb2x0aXApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdXBkYXRlZE9wdGlvbnMudG9vbHRpcC5mb3JtYXR0ZXIgPSAodG9vbHRpcFBhcmFtczogQ2FsbGJhY2tEYXRhUGFyYW1zKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVjaGFydHNPcHRpb25zU2VydmljZS5nZXRUb29sdGlwRm9ybWF0dGVyRm9yQWxhcm1BbmRFdmVudHMoXG4gICAgICAgICAgdG9vbHRpcFBhcmFtcyxcbiAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgdGhpcy5ldmVudHMsXG4gICAgICAgICAgdGhpcy5hbGFybXNcbiAgICAgICAgKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuZWNoYXJ0c0luc3RhbmNlLnNldE9wdGlvbih1cGRhdGVkT3B0aW9ucyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmVjaGFydHNJbnN0YW5jZS5vbignbW91c2VvdXQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5lY2hhcnRzSW5zdGFuY2UuZ2V0T3B0aW9uKCkgYXMgRWNoYXJ0c0N1c3RvbU9wdGlvbnM7XG4gICAgICBpZiAob3JpZ2luYWxGb3JtYXR0ZXIpIHtcbiAgICAgICAgb3B0aW9uc1sndG9vbHRpcCddWzBdLmZvcm1hdHRlciA9IG9yaWdpbmFsRm9ybWF0dGVyO1xuICAgICAgICB0aGlzLmVjaGFydHNJbnN0YW5jZS5zZXRPcHRpb24ob3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvbkNoYXJ0Q2xpY2socGFyYW1zOiB7IGRhdGE6IHsgaXRlbVR5cGU6IHN0cmluZyB9IH0pOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5lY2hhcnRzSW5zdGFuY2UuZ2V0T3B0aW9uKCk7XG4gICAgaWYgKCF0aGlzLmlzQWxhcm1DbGljayhwYXJhbXMpKSB7XG4gICAgICB0aGlzLmVjaGFydHNJbnN0YW5jZS5zZXRPcHRpb24oe1xuICAgICAgICB0b29sdGlwOiB7IHRyaWdnZXJPbjogJ21vdXNlbW92ZScgfSxcbiAgICAgICAgc2VyaWVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbWFya0FyZWE6IHtcbiAgICAgICAgICAgICAgZGF0YTogW11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtYXJrTGluZToge1xuICAgICAgICAgICAgICBkYXRhOiBbXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY2xpY2tlZEFsYXJtcyA9IHRoaXMuYWxhcm1zLmZpbHRlcihhbGFybSA9PiBhbGFybS50eXBlID09PSBwYXJhbXMuZGF0YS5pdGVtVHlwZSk7XG5cbiAgICB0aGlzLmlzTWFya2VkQXJlYUVuYWJsZWQuZW1pdCh0aGlzLmhhc01hcmtBcmVhKG9wdGlvbnMpKTtcbiAgICBjb25zdCB1cGRhdGVkT3B0aW9ucyA9ICF0aGlzLmhhc01hcmtBcmVhKG9wdGlvbnMpXG4gICAgICA/IHtcbiAgICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgICBlbnRlcmFibGU6IHRydWUsXG4gICAgICAgICAgICB0cmlnZ2VyT246ICdjbGljaydcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlcmllczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBtYXJrQXJlYToge1xuICAgICAgICAgICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgICAgICAgICBzaG93OiBmYWxzZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5nZXRNYXJrZWRBcmVhRGF0YShjbGlja2VkQWxhcm1zKVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBtYXJrTGluZToge1xuICAgICAgICAgICAgICAgIHNob3dTeW1ib2w6IHRydWUsXG4gICAgICAgICAgICAgICAgc3ltYm9sOiBbJ25vbmUnLCAnbm9uZSddLFxuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuZ2V0TWFya2VkTGluZURhdGEoY2xpY2tlZEFsYXJtcylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgOiAvLyBpZiBtYXJrQXJlYSBhbHJlYWR5IGV4aXN0cywgcmVtb3ZlIGl0IGFuZCByZW1vdmUgbGFzdFVwZGF0ZWQgZnJvbSBtYXJrTGluZVxuICAgICAgICB7XG4gICAgICAgICAgdG9vbHRpcDogeyB0cmlnZ2VyT246ICdtb3VzZW1vdmUnIH0sXG4gICAgICAgICAgc2VyaWVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG1hcmtBcmVhOiB7XG4gICAgICAgICAgICAgICAgZGF0YTogW11cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbWFya0xpbmU6IHtcbiAgICAgICAgICAgICAgICBkYXRhOiBbXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuXG4gICAgdGhpcy5lY2hhcnRzSW5zdGFuY2Uuc2V0T3B0aW9uKHVwZGF0ZWRPcHRpb25zKTtcbiAgfVxuXG4gIGlzQWxhcm1DbGljayhwYXJhbXM6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFsYXJtcy5zb21lKGFsYXJtID0+IGFsYXJtLnR5cGUgPT09IHBhcmFtcy5kYXRhLml0ZW1UeXBlKTtcbiAgfVxuXG4gIGhhc01hcmtBcmVhKG9wdGlvbnM6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBvcHRpb25zPy5zZXJpZXM/LlswXT8ubWFya0FyZWE/LmRhdGE/Lmxlbmd0aCA+IDA7XG4gIH1cblxuICBzYXZlQXNJbWFnZSgpOiB2b2lkIHtcbiAgICB0aGlzLmVjaGFydHNJbnN0YW5jZS5zZXRPcHRpb24oe1xuICAgICAgbGVnZW5kOiB7XG4gICAgICAgIHNob3c6IHRydWVcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmVjaGFydHNJbnN0YW5jZS5nZXREYXRhVVJMKHtcbiAgICAgIHBpeGVsUmF0aW86IDIsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmJyxcbiAgICAgIHR5cGU6ICdwbmcnXG4gICAgfSk7XG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBsaW5rLmhyZWYgPSB1cmw7XG4gICAgbGluay5kb3dubG9hZCA9ICdkYXRhcG9pbnRzLWdyYXBoLXNjcmVlbnNob3QnO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgbGluay5jbGljaygpO1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XG4gICAgdGhpcy5lY2hhcnRzSW5zdGFuY2Uuc2V0T3B0aW9uKHtcbiAgICAgIGxlZ2VuZDoge1xuICAgICAgICBzaG93OiBmYWxzZVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbG9hZE1vcmVEYXRhKCk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRUaW1lUmFuZ2VJbk1zID0gdGhpcy5lY2hhcnRzT3B0aW9uc1NlcnZpY2UuY2FsY3VsYXRlRXh0ZW5kZWRJbnRlcnZhbEluTXMoXG4gICAgICB0aGlzLmNvbmZpZy5pbnRlcnZhbCB8fCAnY3VzdG9tJyxcbiAgICAgIHtcbiAgICAgICAgZGF0ZVRvOiB0aGlzLndpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZS5pbml0aWFsVGltZVJhbmdlKCkuZGF0ZVRvLFxuICAgICAgICBkYXRlRnJvbTogdGhpcy53aWRnZXRUaW1lQ29udGV4dERhdGVSYW5nZVNlcnZpY2UuaW5pdGlhbFRpbWVSYW5nZSgpLmRhdGVGcm9tXG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLndpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZS51cGRhdGVJbml0aWFsVGltZVJhbmdlKHtcbiAgICAgIGRhdGVGcm9tOiBuZXcgRGF0ZShcbiAgICAgICAgbmV3IERhdGUodGhpcy53aWRnZXRUaW1lQ29udGV4dERhdGVSYW5nZVNlcnZpY2UuaW5pdGlhbFRpbWVSYW5nZSgpLmRhdGVGcm9tKS52YWx1ZU9mKCkgLVxuICAgICAgICAgIGN1cnJlbnRUaW1lUmFuZ2VJbk1zIC8gNFxuICAgICAgKS50b0lTT1N0cmluZygpLFxuICAgICAgZGF0ZVRvOiB0aGlzLndpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZS5pbml0aWFsVGltZVJhbmdlKCkuZGF0ZVRvLFxuICAgICAgaW50ZXJ2YWw6ICdjdXN0b20nXG4gICAgfSk7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZWNoYXJ0c0luc3RhbmNlLmdldE9wdGlvbigpO1xuICAgIGNvbnN0IGRhdGFab29tID0gb3B0aW9uc1snZGF0YVpvb20nXVswXTtcbiAgICB0aGlzLmNvbmZpZ0NoYW5nZU9uWm9vbU91dC5lbWl0KHtcbiAgICAgIGRhdGVGcm9tOiBuZXcgRGF0ZShkYXRhWm9vbVsnc3RhcnRWYWx1ZSddKSxcbiAgICAgIGRhdGVUbzogbmV3IERhdGUoZGF0YVpvb21bJ2VuZFZhbHVlJ10pLFxuICAgICAgaW50ZXJ2YWw6ICdjdXN0b20nXG4gICAgfSk7XG4gICAgdGhpcy5zaG93TG9hZE1vcmUgPSBmYWxzZTtcbiAgfVxuXG4gIGRlYm91bmNlPFQgZXh0ZW5kcyAoLi4uYXJnczogYW55W10pID0+IHZvaWQ+KFxuICAgIGZ1bmM6IFQsXG4gICAgd2FpdDogbnVtYmVyXG4gICk6ICguLi5hcmdzOiBQYXJhbWV0ZXJzPFQ+KSA9PiB2b2lkIHtcbiAgICBsZXQgdGltZW91dDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG4gICAgcmV0dXJuICguLi5hcmdzOiBQYXJhbWV0ZXJzPFQ+KSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiBmdW5jKC4uLmFyZ3MpLCB3YWl0KTtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0Q2hhcnRPcHRpb25zKCk6IEVDaGFydHNPcHRpb24ge1xuICAgIHJldHVybiB7XG4gICAgICB0aXRsZToge1xuICAgICAgICB0ZXh0OiBnZXR0ZXh0KCdObyBkYXRhIGF2YWlsYWJsZScpXG4gICAgICB9LFxuICAgICAgZW1wdHk6IHRydWUsXG4gICAgICB4QXhpczoge1xuICAgICAgICB0eXBlOiAnY2F0ZWdvcnknLFxuICAgICAgICBkYXRhOiBbXVxuICAgICAgfSxcbiAgICAgIHlBeGlzOiB7XG4gICAgICAgIHR5cGU6ICd2YWx1ZSdcbiAgICAgIH0sXG4gICAgICBzZXJpZXM6IFtdXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWFya2VkQXJlYURhdGEoY2xpY2tlZEFsYXJtczogSUFsYXJtW10pIHtcbiAgICBjb25zdCB0aW1lUmFuZ2UgPSB0aGlzLmdldFRpbWVSYW5nZSgpO1xuICAgIGNvbnN0IGNsZWFyZWRBbGFybUNvbG9yID0gJ3JnYmEoMjIxLDI1NSwyMjEsMS4wMCknO1xuICAgIGNvbnN0IGFjdGl2ZUFsYXJtQ29sb3IgPSAncmdiYSgyNTUsIDE3MywgMTc3LCAwLjQpJztcblxuICAgIHJldHVybiBjbGlja2VkQWxhcm1zLm1hcChjbGlja2VkQWxhcm0gPT4ge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IGNsaWNrZWRBbGFybS50eXBlLFxuICAgICAgICAgIHhBeGlzOiBjbGlja2VkQWxhcm0uY3JlYXRpb25UaW1lLFxuICAgICAgICAgIGl0ZW1TdHlsZToge1xuICAgICAgICAgICAgY29sb3I6XG4gICAgICAgICAgICAgIGNsaWNrZWRBbGFybS5zdGF0dXMgPT09IEFsYXJtU3RhdHVzLkNMRUFSRUQgPyBjbGVhcmVkQWxhcm1Db2xvciA6IGFjdGl2ZUFsYXJtQ29sb3JcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB4QXhpczpcbiAgICAgICAgICAgIGNsaWNrZWRBbGFybVsnbGFzdFVwZGF0ZWQnXSA9PT0gY2xpY2tlZEFsYXJtLmNyZWF0aW9uVGltZSB8fFxuICAgICAgICAgICAgY2xpY2tlZEFsYXJtLnN0YXR1cyAhPT0gQWxhcm1TdGF0dXMuQ0xFQVJFRFxuICAgICAgICAgICAgICA/IHRpbWVSYW5nZS5kYXRlVG9cbiAgICAgICAgICAgICAgOiBjbGlja2VkQWxhcm1bJ2xhc3RVcGRhdGVkJ11cbiAgICAgICAgfVxuICAgICAgXTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWFya2VkTGluZURhdGEoY2xpY2tlZEFsYXJtczogSUFsYXJtW10pIHtcbiAgICByZXR1cm4gY2xpY2tlZEFsYXJtcy5yZWR1Y2U8TWFya0xpbmVEYXRhW10+KChhY2MsIGFsYXJtKSA9PiB7XG4gICAgICBjb25zdCBpc0NsaWNrZWRBbGFybUNsZWFyZWQgPSBhbGFybS5zdGF0dXMgPT09IEFsYXJtU3RhdHVzLkNMRUFSRUQ7XG4gICAgICBpZiAoaXNDbGlja2VkQWxhcm1DbGVhcmVkKSB7XG4gICAgICAgIHJldHVybiBhY2MuY29uY2F0KFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4QXhpczogYWxhcm0uY3JlYXRpb25UaW1lLFxuICAgICAgICAgICAgaXRlbVR5cGU6IGFsYXJtLnR5cGUsXG4gICAgICAgICAgICBsYWJlbDoge1xuICAgICAgICAgICAgICBzaG93OiBmYWxzZSxcbiAgICAgICAgICAgICAgZm9ybWF0dGVyOiAoKSA9PiBhbGFybS50eXBlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXRlbVN0eWxlOiB7IGNvbG9yOiBhbGFybVsnY29sb3InXSB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4QXhpczogYWxhcm1bJ2xhc3RVcGRhdGVkJ10sXG4gICAgICAgICAgICBpdGVtVHlwZTogYWxhcm0udHlwZSxcbiAgICAgICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgICAgIHNob3c6IGZhbHNlLFxuICAgICAgICAgICAgICBmb3JtYXR0ZXI6ICgpID0+IGFsYXJtLnR5cGVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpdGVtU3R5bGU6IHsgY29sb3I6IGFsYXJtWydjb2xvciddIH1cbiAgICAgICAgICB9XG4gICAgICAgIF0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYy5jb25jYXQoW1xuICAgICAgICB7XG4gICAgICAgICAgeEF4aXM6IGFsYXJtLmNyZWF0aW9uVGltZSxcbiAgICAgICAgICBpdGVtVHlwZTogYWxhcm0udHlwZSxcbiAgICAgICAgICBsYWJlbDoge1xuICAgICAgICAgICAgc2hvdzogZmFsc2UsXG4gICAgICAgICAgICBmb3JtYXR0ZXI6ICgpID0+IGFsYXJtLnR5cGVcbiAgICAgICAgICB9LFxuICAgICAgICAgIGl0ZW1TdHlsZTogeyBjb2xvcjogYWxhcm1bJ2NvbG9yJ10gfVxuICAgICAgICB9XG4gICAgICBdKTtcbiAgICB9LCBbXSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRBbGFybXNBbmRFdmVudHMoY3VzdG9tVGltZVJhbmdlPzogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZVJhbmdlID0gdGhpcy5nZXRUaW1lUmFuZ2UoKTtcbiAgICBjb25zdCB1cGRhdGVkVGltZVJhbmdlID0ge1xuICAgICAgbGFzdFVwZGF0ZWRGcm9tOiBjdXN0b21UaW1lUmFuZ2UgPyBjdXN0b21UaW1lUmFuZ2UuZGF0ZUZyb20gOiB0aW1lUmFuZ2UuZGF0ZUZyb20sXG4gICAgICBjcmVhdGVkVG86IGN1c3RvbVRpbWVSYW5nZSA/IGN1c3RvbVRpbWVSYW5nZS5kYXRlVG8gOiB0aW1lUmFuZ2UuZGF0ZVRvXG4gICAgfTtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmFsYXJtc0V2ZW50c0NvbmZpZ3MpIHJldHVybjtcbiAgICBjb25zdCB2aXNpYmxlQWxhcm1zT3JFdmVudHMgPSB0aGlzLmNvbmZpZy5hbGFybXNFdmVudHNDb25maWdzPy5maWx0ZXIoXG4gICAgICBhbGFybU9yRXZlbnQgPT4gIWFsYXJtT3JFdmVudC5fX2hpZGRlbiAmJiBhbGFybU9yRXZlbnQuX19hY3RpdmVcbiAgICApO1xuICAgIGNvbnN0IGFsYXJtcyA9IHZpc2libGVBbGFybXNPckV2ZW50cz8uZmlsdGVyKFxuICAgICAgYWxhcm1PckV2ZW50ID0+IGFsYXJtT3JFdmVudC50aW1lbGluZVR5cGUgPT09ICdBTEFSTSdcbiAgICApIGFzIEFsYXJtRGV0YWlsc0V4dGVuZGVkW107XG4gICAgY29uc3QgZXZlbnRzID0gdmlzaWJsZUFsYXJtc09yRXZlbnRzPy5maWx0ZXIoXG4gICAgICBhbGFybU9yRXZlbnQgPT4gYWxhcm1PckV2ZW50LnRpbWVsaW5lVHlwZSA9PT0gJ0VWRU5UJ1xuICAgICkgYXMgRXZlbnREZXRhaWxzRXh0ZW5kZWRbXTtcblxuICAgIGNvbnN0IFtsaXN0ZWRFdmVudHMsIGxpc3RlZEFsYXJtc10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICB0aGlzLmNoYXJ0RXZlbnRzU2VydmljZS5saXN0RXZlbnRzKHVwZGF0ZWRUaW1lUmFuZ2UsIGV2ZW50cyksXG4gICAgICB0aGlzLmNoYXJ0QWxhcm1zU2VydmljZS5saXN0QWxhcm1zKHVwZGF0ZWRUaW1lUmFuZ2UsIGFsYXJtcylcbiAgICBdKTtcblxuICAgIHRoaXMuZXZlbnRzID0gbGlzdGVkRXZlbnRzO1xuICAgIHRoaXMuYWxhcm1zID0gbGlzdGVkQWxhcm1zO1xuICAgIGF3YWl0IHRoaXMuYWRkQWN0aXZlQWxhcm1zKGFsYXJtcyk7XG5cbiAgICB0aGlzLnVwZGF0ZUFsYXJtc0FuZEV2ZW50cy5lbWl0KHRoaXMuY29uZmlnLmFsYXJtc0V2ZW50c0NvbmZpZ3MpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydFJlYWx0aW1lSWZQb3NzaWJsZSgpOiB2b2lkIHtcbiAgICBjb25zdCBhY3RpdmVEYXRhcG9pbnRzID0gdGhpcy5jb25maWc/LmRhdGFwb2ludHM/LmZpbHRlcihkcCA9PiBkcC5fX2FjdGl2ZSk7XG4gICAgaWYgKGFjdGl2ZURhdGFwb2ludHMgJiYgdGhpcy5jb25maWcucmVhbHRpbWUgJiYgdGhpcy5lY2hhcnRzSW5zdGFuY2UpIHtcbiAgICAgIHRoaXMuY2hhcnRSZWFsdGltZVNlcnZpY2Uuc3RhcnRSZWFsdGltZShcbiAgICAgICAgdGhpcy5lY2hhcnRzSW5zdGFuY2UsXG4gICAgICAgIGFjdGl2ZURhdGFwb2ludHMsXG4gICAgICAgIHRoaXMuZ2V0VGltZVJhbmdlKCksXG4gICAgICAgIGRwID0+IHRoaXMuZGF0YXBvaW50T3V0T2ZTeW5jLmVtaXQoZHApLFxuICAgICAgICB0aW1lUmFuZ2UgPT4gdGhpcy50aW1lUmFuZ2VDaGFuZ2VPblJlYWx0aW1lLmVtaXQodGltZVJhbmdlKSxcbiAgICAgICAgdGhpcy5jb25maWcuYWxhcm1zRXZlbnRzQ29uZmlncyxcbiAgICAgICAge1xuICAgICAgICAgIGRpc3BsYXlNYXJrZWRMaW5lOiB0aGlzLmNvbmZpZy5kaXNwbGF5TWFya2VkTGluZSB8fCBmYWxzZSxcbiAgICAgICAgICBkaXNwbGF5TWFya2VkUG9pbnQ6IHRoaXMuY29uZmlnLmRpc3BsYXlNYXJrZWRQb2ludCB8fCBmYWxzZVxuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qXG4gIFRoaXMgbWV0aG9kIHNob3VsZCBjaGVjayBhbmQgYWRkIGFjdGl2ZSBhbGFybXMgZnJvbSB0aGUgYmVnaW5pbmcgb2YgdGltZSB0byB0aGUgYWxhcm0gYXJyYXlcbiAgKi9cbiAgcHJpdmF0ZSBhc3luYyBhZGRBY3RpdmVBbGFybXMoYWxhcm1zOiBBbGFybURldGFpbHNFeHRlbmRlZFtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZVJhbmdlID0gdGhpcy5nZXRUaW1lUmFuZ2UoKTtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBkYXRlRnJvbTogJzE5NzAtMDEtMDFUMDE6MDA6MDArMDE6MDAnLFxuICAgICAgZGF0ZVRvOiB0aW1lUmFuZ2UuZGF0ZVRvLFxuICAgICAgc3RhdHVzOiBBbGFybVN0YXR1cy5BQ1RJVkVcbiAgICB9O1xuXG4gICAgY29uc3QgYWN0aXZlQWxhcm1zID0gYXdhaXQgdGhpcy5jaGFydEFsYXJtc1NlcnZpY2UubGlzdEFsYXJtcyhwYXJhbXMsIGFsYXJtcyk7XG4gICAgdGhpcy5jb25maWcuYWN0aXZlQWxhcm1UeXBlc091dE9mUmFuZ2UgPSBbXTtcbiAgICAvLyBpdGVyYXRlIHRocm91Z2ggdGhlIGFjdGl2ZUFsYXJtcyBhbmQgY2hlY2sgaWYgdGhlIGFsYXJtIGlzIGluIHRoZSBhbGFybXMgYXJyYXksIGlmIG5vdCB1cGRhdGUgdGhlIGNvbmZpZy5hY3RpdmVBbGFybVR5cGVzT3V0T2ZSYW5nZSBwcm9wXG4gICAgYWN0aXZlQWxhcm1zLmZvckVhY2goYWN0aXZlQWxhcm0gPT4ge1xuICAgICAgY29uc3QgYWxhcm1UeXBlID0gYWN0aXZlQWxhcm0udHlwZTtcbiAgICAgIGNvbnN0IGFsYXJtID0gdGhpcy5hbGFybXMuZmluZChhbGFybSA9PiBhbGFybS50eXBlID09PSBhbGFybVR5cGUpO1xuICAgICAgaWYgKCFhbGFybSAmJiB0aGlzLmNvbmZpZy5hY3RpdmVBbGFybVR5cGVzT3V0T2ZSYW5nZSkge1xuICAgICAgICB0aGlzLmNvbmZpZy5hY3RpdmVBbGFybVR5cGVzT3V0T2ZSYW5nZS5wdXNoKGFsYXJtVHlwZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldENoYXJ0T3B0aW9ucyhkYXRhcG9pbnRzV2l0aFZhbHVlczogRHBXaXRoVmFsdWVzW10pOiBQcm9taXNlPEVDaGFydHNPcHRpb24+IHtcbiAgICBjb25zdCB0aW1lUmFuZ2UgPSB7IC4uLnRoaXMuZ2V0VGltZVJhbmdlKCksIGludGVydmFsOiB0aGlzLmNvbmZpZy5pbnRlcnZhbCB9O1xuICAgIGlmICghdGhpcy53aWRnZXRUaW1lQ29udGV4dERhdGVSYW5nZVNlcnZpY2UuaW5pdGlhbFRpbWVSYW5nZSgpKSB7XG4gICAgICB0aGlzLndpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZS51cGRhdGVJbml0aWFsVGltZVJhbmdlKHRpbWVSYW5nZSk7XG4gICAgICBjb25zdCBhZ2dyZWdhdGVkRGF0YXBvaW50cyA9IGF3YWl0IGxhc3RWYWx1ZUZyb20oXG4gICAgICAgIHRoaXMuZmV0Y2hTZXJpZXNGb3JEYXRhcG9pbnRzJCh7XG4gICAgICAgICAgZGF0ZUZyb206IG5ldyBEYXRlKFxuICAgICAgICAgICAgbmV3IERhdGUodGltZVJhbmdlLmRhdGVGcm9tKS52YWx1ZU9mKCkgLVxuICAgICAgICAgICAgICB0aGlzLmVjaGFydHNPcHRpb25zU2VydmljZS5jYWxjdWxhdGVFeHRlbmRlZEludGVydmFsSW5NcyhcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5pbnRlcnZhbCB8fCAnY3VzdG9tJyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBkYXRlRnJvbTogdGltZVJhbmdlLmRhdGVGcm9tLFxuICAgICAgICAgICAgICAgICAgZGF0ZVRvOiB0aW1lUmFuZ2UuZGF0ZVRvXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIGRhdGVUbzogdGltZVJhbmdlLmRhdGVUb1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIHJldHVybiB0aGlzLmVjaGFydHNPcHRpb25zU2VydmljZS5nZXRDaGFydE9wdGlvbnMoXG4gICAgICAgIGRhdGFwb2ludHNXaXRoVmFsdWVzLFxuICAgICAgICB0aW1lUmFuZ2UsXG4gICAgICAgIHtcbiAgICAgICAgICBZQXhpczogdGhpcy5jb25maWcueUF4aXNTcGxpdExpbmVzIHx8IGZhbHNlLFxuICAgICAgICAgIFhBeGlzOiB0aGlzLmNvbmZpZy54QXhpc1NwbGl0TGluZXMgfHwgZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy5ldmVudHMsXG4gICAgICAgIHRoaXMuYWxhcm1zLFxuICAgICAgICB7XG4gICAgICAgICAgZGlzcGxheU1hcmtlZExpbmU6IHRoaXMuY29uZmlnLmRpc3BsYXlNYXJrZWRMaW5lIHx8IGZhbHNlLFxuICAgICAgICAgIGRpc3BsYXlNYXJrZWRQb2ludDogdGhpcy5jb25maWcuZGlzcGxheU1hcmtlZFBvaW50IHx8IGZhbHNlLFxuICAgICAgICAgIG1lcmdlTWF0Y2hpbmdEYXRhcG9pbnRzOiB0aGlzLmNvbmZpZy5tZXJnZU1hdGNoaW5nRGF0YXBvaW50cyB8fCBmYWxzZSxcbiAgICAgICAgICBzaG93TGFiZWxBbmRVbml0OiB0aGlzLmNvbmZpZy5zaG93TGFiZWxBbmRVbml0IHx8IGZhbHNlLFxuICAgICAgICAgIHNob3dTbGlkZXI6IHRoaXMuY29uZmlnLnNob3dTbGlkZXIgfHwgZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBhZ2dyZWdhdGVkRGF0YXBvaW50c1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYWdncmVnYXRlZERhdGFwb2ludHMgPSBhd2FpdCBsYXN0VmFsdWVGcm9tKFxuICAgICAgICB0aGlzLmZldGNoU2VyaWVzRm9yRGF0YXBvaW50cyQoe1xuICAgICAgICAgIGRhdGVGcm9tOiBuZXcgRGF0ZShcbiAgICAgICAgICAgIG5ldyBEYXRlKHRoaXMud2lkZ2V0VGltZUNvbnRleHREYXRlUmFuZ2VTZXJ2aWNlLmluaXRpYWxUaW1lUmFuZ2UoKS5kYXRlRnJvbSkudmFsdWVPZigpIC1cbiAgICAgICAgICAgICAgdGhpcy5lY2hhcnRzT3B0aW9uc1NlcnZpY2UuY2FsY3VsYXRlRXh0ZW5kZWRJbnRlcnZhbEluTXMoXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcuaW50ZXJ2YWwgfHwgJ2N1c3RvbScsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZGF0ZUZyb206IHRoaXMud2lkZ2V0VGltZUNvbnRleHREYXRlUmFuZ2VTZXJ2aWNlLmluaXRpYWxUaW1lUmFuZ2UoKS5kYXRlRnJvbSxcbiAgICAgICAgICAgICAgICAgIGRhdGVUbzogdGhpcy53aWRnZXRUaW1lQ29udGV4dERhdGVSYW5nZVNlcnZpY2UuaW5pdGlhbFRpbWVSYW5nZSgpLmRhdGVUb1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICBkYXRlVG86IG5ldyBEYXRlKFxuICAgICAgICAgICAgdGhpcy53aWRnZXRUaW1lQ29udGV4dERhdGVSYW5nZVNlcnZpY2UuaW5pdGlhbFRpbWVSYW5nZSgpLmRhdGVUb1xuICAgICAgICAgICkudG9JU09TdHJpbmcoKVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIHJldHVybiB0aGlzLmVjaGFydHNPcHRpb25zU2VydmljZS5nZXRDaGFydE9wdGlvbnMoXG4gICAgICAgIGRhdGFwb2ludHNXaXRoVmFsdWVzLFxuICAgICAgICB0aGlzLndpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZS5pbml0aWFsVGltZVJhbmdlKCksXG4gICAgICAgIHtcbiAgICAgICAgICBZQXhpczogdGhpcy5jb25maWcueUF4aXNTcGxpdExpbmVzIHx8IGZhbHNlLFxuICAgICAgICAgIFhBeGlzOiB0aGlzLmNvbmZpZy54QXhpc1NwbGl0TGluZXMgfHwgZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy5ldmVudHMsXG4gICAgICAgIHRoaXMuYWxhcm1zLFxuICAgICAgICB7XG4gICAgICAgICAgZGlzcGxheU1hcmtlZExpbmU6IHRoaXMuY29uZmlnLmRpc3BsYXlNYXJrZWRMaW5lIHx8IGZhbHNlLFxuICAgICAgICAgIGRpc3BsYXlNYXJrZWRQb2ludDogdGhpcy5jb25maWcuZGlzcGxheU1hcmtlZFBvaW50IHx8IGZhbHNlLFxuICAgICAgICAgIG1lcmdlTWF0Y2hpbmdEYXRhcG9pbnRzOiB0aGlzLmNvbmZpZy5tZXJnZU1hdGNoaW5nRGF0YXBvaW50cyB8fCBmYWxzZSxcbiAgICAgICAgICBzaG93TGFiZWxBbmRVbml0OiB0aGlzLmNvbmZpZy5zaG93TGFiZWxBbmRVbml0IHx8IGZhbHNlLFxuICAgICAgICAgIHNob3dTbGlkZXI6IHRoaXMuY29uZmlnLnNob3dTbGlkZXIgfHwgZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgdGltZVJhbmdlLFxuICAgICAgICBhZ2dyZWdhdGVkRGF0YXBvaW50cyxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZldGNoU2VyaWVzRm9yRGF0YXBvaW50cyQoY3VzdG9tVGltZVJhbmdlPzogYW55KTogT2JzZXJ2YWJsZTxEcFdpdGhWYWx1ZXNbXT4ge1xuICAgIGNvbnN0IGFjdGl2ZURhdGFwb2ludHMgPSB0aGlzLmNvbmZpZz8uZGF0YXBvaW50cz8uZmlsdGVyKGRwID0+IGRwLl9fYWN0aXZlKTtcbiAgICBpZiAoIWFjdGl2ZURhdGFwb2ludHMgfHwgYWN0aXZlRGF0YXBvaW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBvZihbXSk7XG4gICAgfVxuICAgIGNvbnN0IGRhdGFwb2ludHNXaXRoVmFsdWVzUmVxdWVzdHM6IE9ic2VydmFibGU8RHBXaXRoVmFsdWVzPltdID0gW107XG4gICAgY29uc3QgdGltZVJhbmdlID0gdGhpcy5nZXRUaW1lUmFuZ2UoNjBfMDAwKTtcbiAgICBmb3IgKGNvbnN0IGRwIG9mIGFjdGl2ZURhdGFwb2ludHMpIHtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLm1lYXN1cmVtZW50U2VydmljZVxuICAgICAgICAubGlzdFNlcmllcyQoe1xuICAgICAgICAgIC4uLihjdXN0b21UaW1lUmFuZ2UgPyBjdXN0b21UaW1lUmFuZ2UgOiB0aW1lUmFuZ2UpLFxuICAgICAgICAgIHNvdXJjZTogZHAuX190YXJnZXQ/LmlkIHx8ICcnLFxuICAgICAgICAgIHNlcmllczogW2Ake2RwLmZyYWdtZW50fS4ke2RwLnNlcmllc31gXSxcbiAgICAgICAgICAuLi4odGhpcy5jb25maWcuYWdncmVnYXRpb24gfHwgY3VzdG9tVGltZVJhbmdlXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBhZ2dyZWdhdGlvblR5cGU6IGN1c3RvbVRpbWVSYW5nZSA/IGFnZ3JlZ2F0aW9uVHlwZS5IT1VSTFkgOiB0aGlzLmNvbmZpZy5hZ2dyZWdhdGlvblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHt9KVxuICAgICAgICB9KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAocmVzID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IHJlcy5kYXRhLnZhbHVlcztcbiAgICAgICAgICAgIGlmIChyZXMuZGF0YS50cnVuY2F0ZWQgJiYgdGhpcy5jb25maWcuZGF0ZUZyb20pIHtcbiAgICAgICAgICAgICAgdmFsdWVzW25ldyBEYXRlKHRoaXMuY29uZmlnLmRhdGVGcm9tKS50b0lTT1N0cmluZygpXSA9IFt7IG1pbjogbnVsbCwgbWF4OiBudWxsIH1dO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuYWxlcnRzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hbGVydHMuY2xlYXIoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgLi4uZHAsIHZhbHVlcywgdHJ1bmNhdGVkOiByZXMuZGF0YS50cnVuY2F0ZWQgfTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICBkYXRhcG9pbnRzV2l0aFZhbHVlc1JlcXVlc3RzLnB1c2gocmVxdWVzdCk7XG4gICAgfVxuICAgIHJldHVybiBmb3JrSm9pbihkYXRhcG9pbnRzV2l0aFZhbHVlc1JlcXVlc3RzKS5waXBlKFxuICAgICAgdGFwKChkcHNXaXRoVmFsdWVzOiBEcFdpdGhWYWx1ZXNbXSkgPT4ge1xuICAgICAgICBpZiAoZHBzV2l0aFZhbHVlcy5zb21lKGRwID0+IGRwWyd0cnVuY2F0ZWQnXSkpIHtcbiAgICAgICAgICB0aGlzLmFkZFRydW5jYXRlZERhdGFBbGVydCgpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFkZFRydW5jYXRlZERhdGFBbGVydCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hbGVydHM/LmFsZXJ0R3JvdXBzLmZpbmQoYSA9PiBhLnR5cGUgPT09ICd3YXJuaW5nJyk/LnZhbHVlPy5hbGVydHM/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhbGVydCA9IG5ldyBEeW5hbWljQ29tcG9uZW50QWxlcnQoe1xuICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgICAgdGV4dDogZ2V0dGV4dCgnVHJ1bmNhdGVkIGRhdGEuIENoYW5nZSBhZ2dyZWdhdGlvbiBvciBzZWxlY3Qgc2hvcnRlciBkYXRlIHJhbmdlLicpXG4gICAgfSk7XG5cbiAgICB0aGlzLmFsZXJ0cz8uYWRkQWxlcnRzKGFsZXJ0KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGltZVJhbmdlKGFkZGl0aW9uYWxQYWRkaW5nPzogbnVtYmVyKToge1xuICAgIGRhdGVGcm9tOiBzdHJpbmc7XG4gICAgZGF0ZVRvOiBzdHJpbmc7XG4gIH0ge1xuICAgIGxldCB0aW1lUmFuZ2U6IHsgZGF0ZUZyb206IERhdGU7IGRhdGVUbzogRGF0ZSB9O1xuICAgIGlmIChcbiAgICAgIHRoaXMuY29uZmlnLndpZGdldEluc3RhbmNlR2xvYmFsVGltZUNvbnRleHQgfHxcbiAgICAgICh0aGlzLmNvbmZpZy5pbnRlcnZhbCA9PT0gJ2N1c3RvbScgJiYgIXRoaXMuY29uZmlnLnJlYWx0aW1lKVxuICAgICkge1xuICAgICAgdGltZVJhbmdlID0ge1xuICAgICAgICBkYXRlRnJvbTogbmV3IERhdGUodGhpcy5jb25maWcuZGF0ZUZyb20gYXMgRGF0ZSksXG4gICAgICAgIGRhdGVUbzogbmV3IERhdGUodGhpcy5jb25maWcuZGF0ZVRvIGFzIERhdGUpXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgdGltZVJhbmdlSW5NcyA9IDA7XG4gICAgICBpZiAodGhpcy5jb25maWcuaW50ZXJ2YWwgJiYgdGhpcy5jb25maWcuaW50ZXJ2YWwgIT09ICdjdXN0b20nKSB7XG4gICAgICAgIHRpbWVSYW5nZUluTXMgPSBJTlRFUlZBTFMuZmluZChpID0+IGkuaWQgPT09IHRoaXMuY29uZmlnLmludGVydmFsKT8udGltZXNwYW5Jbk1zIHx8IDA7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlnLnJlYWx0aW1lKSB7XG4gICAgICAgIHRpbWVSYW5nZUluTXMgPVxuICAgICAgICAgIG5ldyBEYXRlKHRoaXMuY29uZmlnLmRhdGVUbyBhcyBEYXRlKS52YWx1ZU9mKCkgLVxuICAgICAgICAgIG5ldyBEYXRlKHRoaXMuY29uZmlnLmRhdGVGcm9tIGFzIERhdGUpLnZhbHVlT2YoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgICB0aW1lUmFuZ2UgPSB7XG4gICAgICAgIGRhdGVGcm9tOiBuZXcgRGF0ZShub3cudmFsdWVPZigpIC0gdGltZVJhbmdlSW5NcyksXG4gICAgICAgIGRhdGVUbzogbm93XG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoYWRkaXRpb25hbFBhZGRpbmcpIHtcbiAgICAgIHRpbWVSYW5nZS5kYXRlRnJvbSA9IG5ldyBEYXRlKHRpbWVSYW5nZS5kYXRlRnJvbS52YWx1ZU9mKCkgLSBhZGRpdGlvbmFsUGFkZGluZyk7XG4gICAgICB0aW1lUmFuZ2UuZGF0ZVRvID0gbmV3IERhdGUodGltZVJhbmdlLmRhdGVUby52YWx1ZU9mKCkgKyBhZGRpdGlvbmFsUGFkZGluZyk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBkYXRlRnJvbTogdGltZVJhbmdlLmRhdGVGcm9tLnRvSVNPU3RyaW5nKCksXG4gICAgICBkYXRlVG86IHRpbWVSYW5nZS5kYXRlVG8udG9JU09TdHJpbmcoKVxuICAgIH07XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJwLXJlbGF0aXZlIGZpdC1oIGNoYXJ0LWNvbnRhaW5lclwiXG4+XG4gIDxkaXZcbiAgICBjbGFzcz1cImZpdC13IGZpdC1oXCJcbiAgICAjY2hhcnRcbiAgICBlY2hhcnRzXG4gICAgW29wdGlvbnNdPVwiY2hhcnRPcHRpb24kIHwgYXN5bmNcIlxuICAgIChjaGFydEluaXQpPVwib25DaGFydEluaXQoJGV2ZW50KVwiXG4gID48L2Rpdj5cblxuICA8Yzh5LWNoYXJ0LWFsZXJ0cyBbYWxlcnRzXT1cImFsZXJ0c1wiPjwvYzh5LWNoYXJ0LWFsZXJ0cz5cblxuICA8ZGl2ICpuZ0lmPVwic2hvd0xvYWRNb3JlXCIgY2xhc3M9XCJjaGFydC1sb2FkLW1vcmVcIj5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc20gYnRuLWJsb2NrXCJcbiAgICAgIChjbGljayk9XCJsb2FkTW9yZURhdGEoKVwiXG4gICAgPlxuICAgICAgPGkgYzh5SWNvbj1cInJlc3RvcmVcIj48L2k+XG4gICAgICB7eyAnTG9hZCBtb3JlJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
498
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2VjaGFydC9jaGFydHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZWNoYXJ0L2NoYXJ0cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBSUwsTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQVd2QixPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ2xGLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsVUFBVSxFQUNWLG9CQUFvQixFQUNwQixxQkFBcUIsRUFDckIsK0JBQStCLEVBQy9CLG9CQUFvQixFQUNwQixPQUFPLEVBQ1AsMEJBQTBCLEVBQzFCLGlDQUFpQyxFQUNsQyxNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBTXpFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxh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QjtZQUN2Qix3QkFBd0I7U0FDekIsK0lDOUVILDZoQkF1QkEsMkNEMERJLFlBQVksdUxBQ1osVUFBVSx5TEFDVixnQkFBZ0Isa2pDQUNoQixhQUFhLDhCQUNiLGFBQWEsK0JBQ2Isb0JBQW9CLGdGQUNwQixZQUFZOzs0RkFHSCxlQUFlO2tCQTNCM0IsU0FBUzsrQkFDRSxZQUFZLGFBRVg7d0JBQ1QsRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTt3QkFDekYsb0JBQW9CO3dCQUNwQiwwQkFBMEI7d0JBQzFCLG9CQUFvQjt3QkFDcEIsb0JBQW9CO3dCQUNwQixpQkFBaUI7d0JBQ2pCLHFCQUFxQjt3QkFDckIsd0JBQXdCO3dCQUN4QixZQUFZO3dCQUNaLHVCQUF1Qjt3QkFDdkIsd0JBQXdCO3FCQUN6QixjQUNXLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLFVBQVU7d0JBQ1YsZ0JBQWdCO3dCQUNoQixhQUFhO3dCQUNiLGFBQWE7d0JBQ2Isb0JBQW9CO3dCQUNwQixZQUFZO3FCQUNiO3dEQVNRLE1BQU07c0JBQWQsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0kscUJBQXFCO3NCQUE5QixNQUFNO2dCQUtHLHlCQUF5QjtzQkFBbEMsTUFBTTtnQkFHRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0cscUJBQXFCO3NCQUE5QixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDYSxLQUFLO3NCQUF4QixTQUFTO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7IEVDaGFydHMsIEVDaGFydHNPcHRpb24sIFNlcmllc09wdGlvbiB9IGZyb20gJ2VjaGFydHMnO1xuaW1wb3J0IHtcbiAgQWxhcm1EZXRhaWxzRXh0ZW5kZWQsXG4gIEFsYXJtT3JFdmVudEV4dGVuZGVkLFxuICBEYXRhcG9pbnRzR3JhcGhLUElEZXRhaWxzLFxuICBEYXRhcG9pbnRzR3JhcGhXaWRnZXRDb25maWcsXG4gIERwV2l0aFZhbHVlcyxcbiAgRXZlbnREZXRhaWxzRXh0ZW5kZWQsXG4gIE1hcmtMaW5lRGF0YVxufSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZvcmtKb2luLCBsYXN0VmFsdWVGcm9tLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEN1c3RvbU1lYXN1cmVtZW50U2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvY3VzdG9tLW1lYXN1cmVtZW50cy5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEFsYXJtUmVhbHRpbWVTZXJ2aWNlLFxuICBDb3JlTW9kdWxlLFxuICBEaXNtaXNzQWxlcnRTdHJhdGVneSxcbiAgRHluYW1pY0NvbXBvbmVudEFsZXJ0LFxuICBEeW5hbWljQ29tcG9uZW50QWxlcnRBZ2dyZWdhdG9yLFxuICBFdmVudFJlYWx0aW1lU2VydmljZSxcbiAgZ2V0dGV4dCxcbiAgTWVhc3VyZW1lbnRSZWFsdGltZVNlcnZpY2UsXG4gIFdpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEVjaGFydHNPcHRpb25zU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZWNoYXJ0cy1vcHRpb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhcnRSZWFsdGltZVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2NoYXJ0LXJlYWx0aW1lLnNlcnZpY2UnO1xuaW1wb3J0IHR5cGUge1xuICBDYWxsYmFja0RhdGFQYXJhbXMsXG4gIEVDQWN0aW9uRXZlbnQsXG4gIFRvb2x0aXBGb3JtYXR0ZXJDYWxsYmFja1xufSBmcm9tICdlY2hhcnRzL3R5cGVzL3NyYy91dGlsL3R5cGVzJztcbmltcG9ydCB7IENoYXJ0VHlwZXNTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9jaGFydC10eXBlcy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOR1hfRUNIQVJUU19DT05GSUcsIE5neEVjaGFydHNNb2R1bGUgfSBmcm9tICduZ3gtZWNoYXJ0cyc7XG5pbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC90b29sdGlwJztcbmltcG9ydCB7IFBvcG92ZXJNb2R1bGUgfSBmcm9tICduZ3gtYm9vdHN0cmFwL3BvcG92ZXInO1xuaW1wb3J0IHsgWUF4aXNTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy95LWF4aXMuc2VydmljZSc7XG5pbXBvcnQgeyBDaGFydEFsZXJ0c0NvbXBvbmVudCB9IGZyb20gJy4vY2hhcnQtYWxlcnRzL2NoYXJ0LWFsZXJ0cy5jb21wb25lbnQnO1xuaW1wb3J0IHsgYWdncmVnYXRpb25UeXBlLCBBbGFybVN0YXR1cywgSUFsYXJtLCBJRXZlbnQgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBDaGFydEV2ZW50c1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2NoYXJ0LWV2ZW50cy5zZXJ2aWNlJztcbmltcG9ydCB7IENoYXJ0QWxhcm1zU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvY2hhcnQtYWxhcm1zLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWNoYXJ0c0N1c3RvbU9wdGlvbnMgfSBmcm9tICcuL21vZGVscy9jaGFydC5tb2RlbCc7XG5pbXBvcnQgeyBUb3BMZXZlbEZvcm1hdHRlclBhcmFtcyB9IGZyb20gJ2VjaGFydHMvdHlwZXMvc3JjL2NvbXBvbmVudC90b29sdGlwL1Rvb2x0aXBNb2RlbCc7XG5pbXBvcnQge1xuICBBbGFybVNldmVyaXR5VG9JY29uUGlwZSxcbiAgQWxhcm1TZXZlcml0eVRvTGFiZWxQaXBlLFxuICBBbGFybXNNb2R1bGVcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9hbGFybXMnO1xuaW1wb3J0IHsgSW50ZXJ2YWwsIElOVEVSVkFMUyB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvaW50ZXJ2YWwtcGlja2VyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWNoYXJ0cycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGFydHMuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICB7IHByb3ZpZGU6IE5HWF9FQ0hBUlRTX0NPTkZJRywgdXNlRmFjdG9yeTogKCkgPT4gKHsgZWNoYXJ0czogKCkgPT4gaW1wb3J0KCdlY2hhcnRzJykgfSkgfSxcbiAgICBDaGFydFJlYWx0aW1lU2VydmljZSxcbiAgICBNZWFzdXJlbWVudFJlYWx0aW1lU2VydmljZSxcbiAgICBBbGFybVJlYWx0aW1lU2VydmljZSxcbiAgICBFdmVudFJlYWx0aW1lU2VydmljZSxcbiAgICBDaGFydFR5cGVzU2VydmljZSxcbiAgICBFY2hhcnRzT3B0aW9uc1NlcnZpY2UsXG4gICAgQ3VzdG9tTWVhc3VyZW1lbnRTZXJ2aWNlLFxuICAgIFlBeGlzU2VydmljZSxcbiAgICBBbGFybVNldmVyaXR5VG9JY29uUGlwZSxcbiAgICBBbGFybVNldmVyaXR5VG9MYWJlbFBpcGVcbiAgXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBDb3JlTW9kdWxlLFxuICAgIE5neEVjaGFydHNNb2R1bGUsXG4gICAgVG9vbHRpcE1vZHVsZSxcbiAgICBQb3BvdmVyTW9kdWxlLFxuICAgIENoYXJ0QWxlcnRzQ29tcG9uZW50LFxuICAgIEFsYXJtc01vZHVsZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIENoYXJ0c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBjaGFydE9wdGlvbiQ6IE9ic2VydmFibGU8RUNoYXJ0c09wdGlvbj47XG4gIGVjaGFydHNJbnN0YW5jZSE6IEVDaGFydHM7XG4gIHNob3dMb2FkTW9yZSA9IGZhbHNlO1xuICBhbGFybXM6IElBbGFybVtdID0gW107XG4gIGV2ZW50czogSUV2ZW50W10gPSBbXTtcbiAgc2xpZGVyWm9vbVVzZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgY29uZmlnITogRGF0YXBvaW50c0dyYXBoV2lkZ2V0Q29uZmlnO1xuICBASW5wdXQoKSBhbGVydHMhOiBEeW5hbWljQ29tcG9uZW50QWxlcnRBZ2dyZWdhdG9yO1xuICBAT3V0cHV0KCkgY29uZmlnQ2hhbmdlT25ab29tT3V0ID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgZGF0ZUZyb206IERhdGU7XG4gICAgZGF0ZVRvOiBEYXRlO1xuICAgIGludGVydmFsPzogSW50ZXJ2YWxbJ2lkJ107XG4gIH0+KCk7XG4gIEBPdXRwdXQoKSB0aW1lUmFuZ2VDaGFuZ2VPblJlYWx0aW1lID0gbmV3IEV2ZW50RW1pdHRlcjxcbiAgICBQaWNrPERhdGFwb2ludHNHcmFwaFdpZGdldENvbmZpZywgJ2RhdGVGcm9tJyB8ICdkYXRlVG8nPlxuICA+KCk7XG4gIEBPdXRwdXQoKSBkYXRhcG9pbnRPdXRPZlN5bmMgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGFwb2ludHNHcmFwaEtQSURldGFpbHM+KCk7XG4gIEBPdXRwdXQoKSB1cGRhdGVBbGFybXNBbmRFdmVudHMgPSBuZXcgRXZlbnRFbWl0dGVyPEFsYXJtT3JFdmVudEV4dGVuZGVkW10+KCk7XG4gIEBPdXRwdXQoKSBpc01hcmtlZEFyZWFFbmFibGVkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAVmlld0NoaWxkKCdjaGFydCcpIGNoYXJ0OiBFbGVtZW50UmVmO1xuICBwcml2YXRlIGNvbmZpZ0NoYW5nZWRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDx2b2lkIHwgbnVsbD4obnVsbCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBtZWFzdXJlbWVudFNlcnZpY2UgPSBpbmplY3QoQ3VzdG9tTWVhc3VyZW1lbnRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBlY2hhcnRzT3B0aW9uc1NlcnZpY2UgPSBpbmplY3QoRWNoYXJ0c09wdGlvbnNTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjaGFydFJlYWx0aW1lU2VydmljZSA9IGluamVjdChDaGFydFJlYWx0aW1lU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2hhcnRFdmVudHNTZXJ2aWNlID0gaW5qZWN0KENoYXJ0RXZlbnRzU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2hhcnRBbGFybXNTZXJ2aWNlID0gaW5qZWN0KENoYXJ0QWxhcm1zU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgd2lkZ2V0VGltZUNvbnRleHREYXRlUmFuZ2VTZXJ2aWNlID0gaW5qZWN0KFdpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jaGFydE9wdGlvbiQgPSB0aGlzLmNvbmZpZ0NoYW5nZWRTdWJqZWN0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5sb2FkQWxhcm1zQW5kRXZlbnRzKCkpLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuZmV0Y2hTZXJpZXNGb3JEYXRhcG9pbnRzJCgpKSxcbiAgICAgIHN3aXRjaE1hcCgoZGF0YXBvaW50c1dpdGhWYWx1ZXM6IERwV2l0aFZhbHVlc1tdKSA9PiB7XG4gICAgICAgIGlmIChkYXRhcG9pbnRzV2l0aFZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLmVjaGFydHNJbnN0YW5jZT8uY2xlYXIoKTtcbiAgICAgICAgICB0aGlzLnNob3dMb2FkTW9yZSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBvZih0aGlzLmdldERlZmF1bHRDaGFydE9wdGlvbnMoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2hhcnRPcHRpb25zKGRhdGFwb2ludHNXaXRoVmFsdWVzKTtcbiAgICAgIH0pLFxuICAgICAgdGFwKHYgPT4ge1xuICAgICAgICBpZiAodlsnZW1wdHknXSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoYXJ0UmVhbHRpbWVTZXJ2aWNlLnN0b3BSZWFsdGltZSgpO1xuICAgICAgICB0aGlzLnN0YXJ0UmVhbHRpbWVJZlBvc3NpYmxlKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuZWNoYXJ0c0luc3RhbmNlKSB7XG4gICAgICAgICAgdGhpcy5lY2hhcnRzSW5zdGFuY2Uuc2V0T3B0aW9uKHYsIHRydWUpO1xuICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmVjaGFydHNJbnN0YW5jZS5nZXRPcHRpb24oKTtcbiAgICAgICAgICBjb25zdCBkYXRhWm9vbSA9IG9wdGlvbnNbJ2RhdGFab29tJ11bMF07XG4gICAgICAgICAgaWYgKGRhdGFab29tLnN0YXJ0ICE9PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dMb2FkTW9yZSA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNsaWRlclpvb21Vc2VkID0gZmFsc2U7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICB0aGlzLmNvbmZpZ0NoYW5nZWRTdWJqZWN0Lm5leHQoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmFsZXJ0cykge1xuICAgICAgdGhpcy5hbGVydHMuc2V0QWxlcnRHcm91cERpc21pc3NTdHJhdGVneShcbiAgICAgICAgJ3dhcm5pbmcnLFxuICAgICAgICBEaXNtaXNzQWxlcnRTdHJhdGVneS5URU1QT1JBUllfT1JfUEVSTUFORU5UXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuY2hhcnRSZWFsdGltZVNlcnZpY2Uuc3RvcFJlYWx0aW1lKCk7XG4gIH1cblxuICBvbkNoYXJ0SW5pdChlYzogRUNoYXJ0cykge1xuICAgIHRoaXMuZWNoYXJ0c0luc3RhbmNlID0gZWM7XG4gICAgdGhpcy5lY2hhcnRzT3B0aW9uc1NlcnZpY2UuZWNoYXJ0c0luc3RhbmNlID0gdGhpcy5lY2hhcnRzSW5zdGFuY2U7XG4gICAgdGhpcy5zdGFydFJlYWx0aW1lSWZQb3NzaWJsZSgpO1xuXG4gICAgY29uc3QgZGF0YVpvb21IYW5kbGVyID0gKGV2dDogRUNBY3Rpb25FdmVudCkgPT4ge1xuICAgICAgaWYgKGV2dC5iYXRjaD8uWzBdPy5zdGFydCA9PT0gMCB8fCBldnRbJ3N0YXJ0J10gPT09IDApIHtcbiAgICAgICAgdGhpcy5zaG93TG9hZE1vcmUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5lY2hhcnRzSW5zdGFuY2UuZ2V0T3B0aW9uKCk7XG4gICAgICBjb25zdCBkYXRhWm9vbSA9IG9wdGlvbnNbJ2RhdGFab29tJ11bMF07XG4gICAgICB0aGlzLnNsaWRlclpvb21Vc2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMuY29uZmlnQ2hhbmdlT25ab29tT3V0LmVtaXQoe1xuICAgICAgICBkYXRlRnJvbTogbmV3IERhdGUoZGF0YVpvb21bJ3N0YXJ0VmFsdWUnXSksXG4gICAgICAgIGRhdGVUbzogbmV3IERhdGUoZGF0YVpvb21bJ2VuZFZhbHVlJ10pLFxuICAgICAgICBpbnRlcnZhbDogJ2N1c3RvbSdcbiAgICAgIH0pO1xuICAgICAgdGhpcy5lY2hhcnRzSW5zdGFuY2Uuc2V0T3B0aW9uKG9wdGlvbnMpO1xuICAgICAgdGhpcy5jaGFydFJlYWx0aW1lU2VydmljZS5zdG9wUmVhbHRpbWUoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZGVib3VuY2VkRGF0YVpvb21IYW5kbGVyID0gdGhpcy5jb25maWcucmVhbHRpbWVcbiAgICAgID8gZGF0YVpvb21IYW5kbGVyXG4gICAgICA6IHRoaXMuZGVib3VuY2UoZGF0YVpvb21IYW5kbGVyLCAxMDAwKTtcblxuICAgIHRoaXMuZWNoYXJ0c0luc3RhbmNlLm9uKCdkYXRhWm9vbScsIGRlYm91bmNlZERhdGFab29tSGFuZGxlcik7XG4gICAgdGhpcy5lY2hhcnRzSW5zdGFuY2Uub24oJ2NsaWNrJywgdGhpcy5vbkNoYXJ0Q2xpY2suYmluZCh0aGlzKSk7XG5cbiAgICBsZXQgb3JpZ2luYWxGb3JtYXR0ZXI6XG4gICAgICB8IFRvb2x0aXBGb3JtYXR0ZXJDYWxsYmFjazxUb3BMZXZlbEZvcm1hdHRlclBhcmFtcz5cbiAgICAgIHwgc3RyaW5nXG4gICAgICB8IG51bGxcbiAgICAgIHwgdW5kZWZpbmVkID0gbnVsbDtcblxuICAgIHRoaXMuZWNoYXJ0c0luc3RhbmNlLm9uKCdtb3VzZW92ZXInLCAocGFyYW1zOiBhbnkpID0+IHtcbiAgICAgIGlmIChwYXJhbXM/LmNvbXBvbmVudFR5cGUgIT09ICdtYXJrTGluZScgJiYgcGFyYW1zPy5jb21wb25lbnRUeXBlICE9PSAnbWFya1BvaW50Jykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmVjaGFydHNJbnN0YW5jZS5nZXRPcHRpb24oKSBhcyBFQ2hhcnRzT3B0aW9uO1xuICAgICAgaWYgKCFvcHRpb25zLnRvb2x0aXAgfHwgIUFycmF5LmlzQXJyYXkob3B0aW9ucy50b29sdGlwKSB8fCAhb3B0aW9ucy50b29sdGlwWzBdKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG9yaWdpbmFsRm9ybWF0dGVyID0gb3JpZ2luYWxGb3JtYXR0ZXIgPz8gb3B0aW9uc1sndG9vbHRpcCddWzBdLmZvcm1hdHRlcjtcblxuICAgICAgY29uc3QgdXBkYXRlZE9wdGlvbnM6IFBhcnRpYWw8U2VyaWVzT3B0aW9uPiA9IHsgdG9vbHRpcDogb3B0aW9uc1sndG9vbHRpcCddWzBdIH07XG5cbiAgICAgIGlmICghdXBkYXRlZE9wdGlvbnMudG9vbHRpcCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB1cGRhdGVkT3B0aW9ucy50b29sdGlwLmZvcm1hdHRlciA9ICh0b29sdGlwUGFyYW1zOiBDYWxsYmFja0RhdGFQYXJhbXMpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWNoYXJ0c09wdGlvbnNTZXJ2aWNlLmdldFRvb2x0aXBGb3JtYXR0ZXJGb3JBbGFybUFuZEV2ZW50cyhcbiAgICAgICAgICB0b29sdGlwUGFyYW1zLFxuICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICB0aGlzLmV2ZW50cyxcbiAgICAgICAgICB0aGlzLmFsYXJtc1xuICAgICAgICApO1xuICAgICAgfTtcblxuICAgICAgdGhpcy5lY2hhcnRzSW5zdGFuY2Uuc2V0T3B0aW9uKHVwZGF0ZWRPcHRpb25zKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZWNoYXJ0c0luc3RhbmNlLm9uKCdtb3VzZW91dCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmVjaGFydHNJbnN0YW5jZS5nZXRPcHRpb24oKSBhcyBFY2hhcnRzQ3VzdG9tT3B0aW9ucztcbiAgICAgIGlmIChvcmlnaW5hbEZvcm1hdHRlcikge1xuICAgICAgICBvcHRpb25zWyd0b29sdGlwJ11bMF0uZm9ybWF0dGVyID0gb3JpZ2luYWxGb3JtYXR0ZXI7XG4gICAgICAgIHRoaXMuZWNoYXJ0c0luc3RhbmNlLnNldE9wdGlvbihvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9uQ2hhcnRDbGljayhwYXJhbXM6IHsgZGF0YTogeyBpdGVtVHlwZTogc3RyaW5nIH0gfSk6IHZvaWQge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmVjaGFydHNJbnN0YW5jZS5nZXRPcHRpb24oKTtcbiAgICBpZiAoIXRoaXMuaXNBbGFybUNsaWNrKHBhcmFtcykpIHtcbiAgICAgIHRoaXMuZWNoYXJ0c0luc3RhbmNlLnNldE9wdGlvbih7XG4gICAgICAgIHRvb2x0aXA6IHsgdHJpZ2dlck9uOiAnbW91c2Vtb3ZlJyB9LFxuICAgICAgICBzZXJpZXM6IFt7IG1hcmtBcmVhOiB7IGRhdGE6IFtdIH0sIG1hcmtMaW5lOiB7IGRhdGE6IFtdIH0gfV1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNsaWNrZWRBbGFybXMgPSB0aGlzLmFsYXJtcy5maWx0ZXIoYWxhcm0gPT4gYWxhcm0udHlwZSA9PT0gcGFyYW1zLmRhdGEuaXRlbVR5cGUpO1xuXG4gICAgdGhpcy5pc01hcmtlZEFyZWFFbmFibGVkLmVtaXQodGhpcy5oYXNNYXJrQXJlYShvcHRpb25zKSk7XG4gICAgY29uc3QgdXBkYXRlZE9wdGlvbnMgPSAhdGhpcy5oYXNNYXJrQXJlYShvcHRpb25zKVxuICAgICAgPyB7XG4gICAgICAgICAgdG9vbHRpcDogeyBlbnRlcmFibGU6IHRydWUsIHRyaWdnZXJPbjogJ2NsaWNrJyB9LFxuICAgICAgICAgIHNlcmllczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBtYXJrQXJlYTogeyBsYWJlbDogeyBzaG93OiBmYWxzZSB9LCBkYXRhOiB0aGlzLmdldE1hcmtlZEFyZWFEYXRhKGNsaWNrZWRBbGFybXMpIH0sXG4gICAgICAgICAgICAgIG1hcmtMaW5lOiB7XG4gICAgICAgICAgICAgICAgc2hvd1N5bWJvbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzeW1ib2w6IFsnbm9uZScsICdub25lJ10sXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5nZXRNYXJrZWRMaW5lRGF0YShjbGlja2VkQWxhcm1zKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICA6IC8vIGlmIG1hcmtBcmVhIGFscmVhZHkgZXhpc3RzLCByZW1vdmUgaXQgYW5kIHJlbW92ZSBsYXN0VXBkYXRlZCBmcm9tIG1hcmtMaW5lXG4gICAgICAgIHtcbiAgICAgICAgICB0b29sdGlwOiB7IHRyaWdnZXJPbjogJ21vdXNlbW92ZScgfSxcbiAgICAgICAgICBzZXJpZXM6IFt7IG1hcmtBcmVhOiB7IGRhdGE6IFtdIH0sIG1hcmtMaW5lOiB7IGRhdGE6IFtdIH0gfV1cbiAgICAgICAgfTtcblxuICAgIHRoaXMuZWNoYXJ0c0luc3RhbmNlLnNldE9wdGlvbih1cGRhdGVkT3B0aW9ucyk7XG4gIH1cblxuICBpc0FsYXJtQ2xpY2socGFyYW1zOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hbGFybXMuc29tZShhbGFybSA9PiBhbGFybS50eXBlID09PSBwYXJhbXMuZGF0YS5pdGVtVHlwZSk7XG4gIH1cblxuICBoYXNNYXJrQXJlYShvcHRpb25zOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gb3B0aW9ucz8uc2VyaWVzPy5bMF0/Lm1hcmtBcmVhPy5kYXRhPy5sZW5ndGggPiAwO1xuICB9XG5cbiAgc2F2ZUFzSW1hZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5lY2hhcnRzSW5zdGFuY2Uuc2V0T3B0aW9uKHsgbGVnZW5kOiB7IHNob3c6IHRydWUgfSB9KTtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmVjaGFydHNJbnN0YW5jZS5nZXREYXRhVVJMKHtcbiAgICAgIHBpeGVsUmF0aW86IDIsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmJyxcbiAgICAgIHR5cGU6ICdwbmcnXG4gICAgfSk7XG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBsaW5rLmhyZWYgPSB1cmw7XG4gICAgbGluay5kb3dubG9hZCA9ICdkYXRhcG9pbnRzLWdyYXBoLXNjcmVlbnNob3QnO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgbGluay5jbGljaygpO1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XG4gICAgdGhpcy5lY2hhcnRzSW5zdGFuY2Uuc2V0T3B0aW9uKHsgbGVnZW5kOiB7IHNob3c6IGZhbHNlIH0gfSk7XG4gIH1cblxuICBsb2FkTW9yZURhdGEoKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudFRpbWVSYW5nZUluTXMgPSB0aGlzLmVjaGFydHNPcHRpb25zU2VydmljZS5jYWxjdWxhdGVFeHRlbmRlZEludGVydmFsSW5NcyhcbiAgICAgIHRoaXMuY29uZmlnLmludGVydmFsIHx8ICdjdXN0b20nLFxuICAgICAge1xuICAgICAgICBkYXRlVG86IHRoaXMud2lkZ2V0VGltZUNvbnRleHREYXRlUmFuZ2VTZXJ2aWNlLmluaXRpYWxUaW1lUmFuZ2UoKS5kYXRlVG8sXG4gICAgICAgIGRhdGVGcm9tOiB0aGlzLndpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZS5pbml0aWFsVGltZVJhbmdlKCkuZGF0ZUZyb21cbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMud2lkZ2V0VGltZUNvbnRleHREYXRlUmFuZ2VTZXJ2aWNlLnVwZGF0ZUluaXRpYWxUaW1lUmFuZ2Uoe1xuICAgICAgZGF0ZUZyb206IG5ldyBEYXRlKFxuICAgICAgICBuZXcgRGF0ZSh0aGlzLndpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZS5pbml0aWFsVGltZVJhbmdlKCkuZGF0ZUZyb20pLnZhbHVlT2YoKSAtXG4gICAgICAgICAgY3VycmVudFRpbWVSYW5nZUluTXMgLyA0XG4gICAgICApLnRvSVNPU3RyaW5nKCksXG4gICAgICBkYXRlVG86IHRoaXMud2lkZ2V0VGltZUNvbnRleHREYXRlUmFuZ2VTZXJ2aWNlLmluaXRpYWxUaW1lUmFuZ2UoKS5kYXRlVG8sXG4gICAgICBpbnRlcnZhbDogJ2N1c3RvbSdcbiAgICB9KTtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5lY2hhcnRzSW5zdGFuY2UuZ2V0T3B0aW9uKCk7XG4gICAgY29uc3QgZGF0YVpvb20gPSBvcHRpb25zWydkYXRhWm9vbSddWzBdO1xuICAgIHRoaXMuY29uZmlnQ2hhbmdlT25ab29tT3V0LmVtaXQoe1xuICAgICAgZGF0ZUZyb206IG5ldyBEYXRlKGRhdGFab29tWydzdGFydFZhbHVlJ10pLFxuICAgICAgZGF0ZVRvOiBuZXcgRGF0ZShkYXRhWm9vbVsnZW5kVmFsdWUnXSksXG4gICAgICBpbnRlcnZhbDogJ2N1c3RvbSdcbiAgICB9KTtcbiAgICB0aGlzLnNob3dMb2FkTW9yZSA9IGZhbHNlO1xuICB9XG5cbiAgZGVib3VuY2U8VCBleHRlbmRzICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZD4oXG4gICAgZnVuYzogVCxcbiAgICB3YWl0OiBudW1iZXJcbiAgKTogKC4uLmFyZ3M6IFBhcmFtZXRlcnM8VD4pID0+IHZvaWQge1xuICAgIGxldCB0aW1lb3V0OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcbiAgICByZXR1cm4gKC4uLmFyZ3M6IFBhcmFtZXRlcnM8VD4pID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGZ1bmMoLi4uYXJncyksIHdhaXQpO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldERlZmF1bHRDaGFydE9wdGlvbnMoKTogRUNoYXJ0c09wdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRpdGxlOiB7XG4gICAgICAgIHRleHQ6IGdldHRleHQoJ05vIGRhdGEgYXZhaWxhYmxlLicpLFxuICAgICAgICBsZWZ0OiAnY2VudGVyJyxcbiAgICAgICAgdG9wOiAnY2VudGVyJyxcbiAgICAgICAgdGV4dFN0eWxlOiB7IGZvbnRTaXplOiAzMCB9XG4gICAgICB9LFxuICAgICAgZW1wdHk6IHRydWUsXG4gICAgICB4QXhpczogeyB0eXBlOiAnY2F0ZWdvcnknLCBkYXRhOiBbXSB9LFxuICAgICAgeUF4aXM6IHsgdHlwZTogJ3ZhbHVlJyB9LFxuICAgICAgc2VyaWVzOiBbXVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldE1hcmtlZEFyZWFEYXRhKGNsaWNrZWRBbGFybXM6IElBbGFybVtdKSB7XG4gICAgY29uc3QgdGltZVJhbmdlID0gdGhpcy5nZXRUaW1lUmFuZ2UoKTtcbiAgICBjb25zdCBjbGVhcmVkQWxhcm1Db2xvciA9ICdyZ2JhKDIyMSwyNTUsMjIxLDEuMDApJztcbiAgICBjb25zdCBhY3RpdmVBbGFybUNvbG9yID0gJ3JnYmEoMjU1LCAxNzMsIDE3NywgMC40KSc7XG5cbiAgICByZXR1cm4gY2xpY2tlZEFsYXJtcy5tYXAoY2xpY2tlZEFsYXJtID0+IHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBjbGlja2VkQWxhcm0udHlwZSxcbiAgICAgICAgICB4QXhpczogY2xpY2tlZEFsYXJtLmNyZWF0aW9uVGltZSxcbiAgICAgICAgICBpdGVtU3R5bGU6IHtcbiAgICAgICAgICAgIGNvbG9yOlxuICAgICAgICAgICAgICBjbGlja2VkQWxhcm0uc3RhdHVzID09PSBBbGFybVN0YXR1cy5DTEVBUkVEID8gY2xlYXJlZEFsYXJtQ29sb3IgOiBhY3RpdmVBbGFybUNvbG9yXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgeEF4aXM6XG4gICAgICAgICAgICBjbGlja2VkQWxhcm1bJ2xhc3RVcGRhdGVkJ10gPT09IGNsaWNrZWRBbGFybS5jcmVhdGlvblRpbWUgfHxcbiAgICAgICAgICAgIGNsaWNrZWRBbGFybS5zdGF0dXMgIT09IEFsYXJtU3RhdHVzLkNMRUFSRURcbiAgICAgICAgICAgICAgPyB0aW1lUmFuZ2UuZGF0ZVRvXG4gICAgICAgICAgICAgIDogY2xpY2tlZEFsYXJtWydsYXN0VXBkYXRlZCddXG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldE1hcmtlZExpbmVEYXRhKGNsaWNrZWRBbGFybXM6IElBbGFybVtdKSB7XG4gICAgcmV0dXJuIGNsaWNrZWRBbGFybXMucmVkdWNlPE1hcmtMaW5lRGF0YVtdPigoYWNjLCBhbGFybSkgPT4ge1xuICAgICAgY29uc3QgaXNDbGlja2VkQWxhcm1DbGVhcmVkID0gYWxhcm0uc3RhdHVzID09PSBBbGFybVN0YXR1cy5DTEVBUkVEO1xuICAgICAgaWYgKGlzQ2xpY2tlZEFsYXJtQ2xlYXJlZCkge1xuICAgICAgICByZXR1cm4gYWNjLmNvbmNhdChbXG4gICAgICAgICAge1xuICAgICAgICAgICAgeEF4aXM6IGFsYXJtLmNyZWF0aW9uVGltZSxcbiAgICAgICAgICAgIGl0ZW1UeXBlOiBhbGFybS50eXBlLFxuICAgICAgICAgICAgbGFiZWw6IHsgc2hvdzogZmFsc2UsIGZvcm1hdHRlcjogKCkgPT4gYWxhcm0udHlwZSB9LFxuICAgICAgICAgICAgaXRlbVN0eWxlOiB7IGNvbG9yOiBhbGFybVsnY29sb3InXSB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4QXhpczogYWxhcm1bJ2xhc3RVcGRhdGVkJ10sXG4gICAgICAgICAgICBpdGVtVHlwZTogYWxhcm0udHlwZSxcbiAgICAgICAgICAgIGxhYmVsOiB7IHNob3c6IGZhbHNlLCBmb3JtYXR0ZXI6ICgpID0+IGFsYXJtLnR5cGUgfSxcbiAgICAgICAgICAgIGl0ZW1TdHlsZTogeyBjb2xvcjogYWxhcm1bJ2NvbG9yJ10gfVxuICAgICAgICAgIH1cbiAgICAgICAgXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjLmNvbmNhdChbXG4gICAgICAgIHtcbiAgICAgICAgICB4QXhpczogYWxhcm0uY3JlYXRpb25UaW1lLFxuICAgICAgICAgIGl0ZW1UeXBlOiBhbGFybS50eXBlLFxuICAgICAgICAgIGxhYmVsOiB7IHNob3c6IGZhbHNlLCBmb3JtYXR0ZXI6ICgpID0+IGFsYXJtLnR5cGUgfSxcbiAgICAgICAgICBpdGVtU3R5bGU6IHsgY29sb3I6IGFsYXJtWydjb2xvciddIH1cbiAgICAgICAgfVxuICAgICAgXSk7XG4gICAgfSwgW10pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkQWxhcm1zQW5kRXZlbnRzKGN1c3RvbVRpbWVSYW5nZT86IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRpbWVSYW5nZSA9IHRoaXMuZ2V0VGltZVJhbmdlKCk7XG4gICAgY29uc3QgdXBkYXRlZFRpbWVSYW5nZSA9IHtcbiAgICAgIGxhc3RVcGRhdGVkRnJvbTogY3VzdG9tVGltZVJhbmdlID8gY3VzdG9tVGltZVJhbmdlLmRhdGVGcm9tIDogdGltZVJhbmdlLmRhdGVGcm9tLFxuICAgICAgY3JlYXRlZFRvOiBjdXN0b21UaW1lUmFuZ2UgPyBjdXN0b21UaW1lUmFuZ2UuZGF0ZVRvIDogdGltZVJhbmdlLmRhdGVUb1xuICAgIH07XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5hbGFybXNFdmVudHNDb25maWdzKSByZXR1cm47XG4gICAgY29uc3QgdmlzaWJsZUFsYXJtc09yRXZlbnRzID0gdGhpcy5jb25maWcuYWxhcm1zRXZlbnRzQ29uZmlncz8uZmlsdGVyKFxuICAgICAgYWxhcm1PckV2ZW50ID0+ICFhbGFybU9yRXZlbnQuX19oaWRkZW4gJiYgYWxhcm1PckV2ZW50Ll9fYWN0aXZlXG4gICAgKTtcbiAgICBjb25zdCBhbGFybXMgPSB2aXNpYmxlQWxhcm1zT3JFdmVudHM/LmZpbHRlcihcbiAgICAgIGFsYXJtT3JFdmVudCA9PiBhbGFybU9yRXZlbnQudGltZWxpbmVUeXBlID09PSAnQUxBUk0nXG4gICAgKSBhcyBBbGFybURldGFpbHNFeHRlbmRlZFtdO1xuICAgIGNvbnN0IGV2ZW50cyA9IHZpc2libGVBbGFybXNPckV2ZW50cz8uZmlsdGVyKFxuICAgICAgYWxhcm1PckV2ZW50ID0+IGFsYXJtT3JFdmVudC50aW1lbGluZVR5cGUgPT09ICdFVkVOVCdcbiAgICApIGFzIEV2ZW50RGV0YWlsc0V4dGVuZGVkW107XG5cbiAgICBjb25zdCBbbGlzdGVkRXZlbnRzLCBsaXN0ZWRBbGFybXNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgdGhpcy5jaGFydEV2ZW50c1NlcnZpY2UubGlzdEV2ZW50cyh1cGRhdGVkVGltZVJhbmdlLCBldmVudHMpLFxuICAgICAgdGhpcy5jaGFydEFsYXJtc1NlcnZpY2UubGlzdEFsYXJtcyh1cGRhdGVkVGltZVJhbmdlLCBhbGFybXMpXG4gICAgXSk7XG5cbiAgICB0aGlzLmV2ZW50cyA9IGxpc3RlZEV2ZW50cztcbiAgICB0aGlzLmFsYXJtcyA9IGxpc3RlZEFsYXJtcztcbiAgICBhd2FpdCB0aGlzLmFkZEFjdGl2ZUFsYXJtcyhhbGFybXMpO1xuXG4gICAgdGhpcy51cGRhdGVBbGFybXNBbmRFdmVudHMuZW1pdCh0aGlzLmNvbmZpZy5hbGFybXNFdmVudHNDb25maWdzKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRSZWFsdGltZUlmUG9zc2libGUoKTogdm9pZCB7XG4gICAgY29uc3QgYWN0aXZlRGF0YXBvaW50cyA9IHRoaXMuY29uZmlnPy5kYXRhcG9pbnRzPy5maWx0ZXIoZHAgPT4gZHAuX19hY3RpdmUpO1xuICAgIGlmIChhY3RpdmVEYXRhcG9pbnRzICYmIHRoaXMuY29uZmlnLnJlYWx0aW1lICYmIHRoaXMuZWNoYXJ0c0luc3RhbmNlKSB7XG4gICAgICB0aGlzLmNoYXJ0UmVhbHRpbWVTZXJ2aWNlLnN0YXJ0UmVhbHRpbWUoXG4gICAgICAgIHRoaXMuZWNoYXJ0c0luc3RhbmNlLFxuICAgICAgICBhY3RpdmVEYXRhcG9pbnRzLFxuICAgICAgICB0aGlzLmdldFRpbWVSYW5nZSgpLFxuICAgICAgICBkcCA9PiB0aGlzLmRhdGFwb2ludE91dE9mU3luYy5lbWl0KGRwKSxcbiAgICAgICAgdGltZVJhbmdlID0+IHRoaXMudGltZVJhbmdlQ2hhbmdlT25SZWFsdGltZS5lbWl0KHRpbWVSYW5nZSksXG4gICAgICAgIHRoaXMuY29uZmlnLmFsYXJtc0V2ZW50c0NvbmZpZ3MsXG4gICAgICAgIHtcbiAgICAgICAgICBkaXNwbGF5TWFya2VkTGluZTogdGhpcy5jb25maWcuZGlzcGxheU1hcmtlZExpbmUgfHwgZmFsc2UsXG4gICAgICAgICAgZGlzcGxheU1hcmtlZFBvaW50OiB0aGlzLmNvbmZpZy5kaXNwbGF5TWFya2VkUG9pbnQgfHwgZmFsc2VcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKlxuICBUaGlzIG1ldGhvZCBzaG91bGQgY2hlY2sgYW5kIGFkZCBhY3RpdmUgYWxhcm1zIGZyb20gdGhlIGJlZ2luaW5nIG9mIHRpbWUgdG8gdGhlIGFsYXJtIGFycmF5XG4gICovXG4gIHByaXZhdGUgYXN5bmMgYWRkQWN0aXZlQWxhcm1zKGFsYXJtczogQWxhcm1EZXRhaWxzRXh0ZW5kZWRbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRpbWVSYW5nZSA9IHRoaXMuZ2V0VGltZVJhbmdlKCk7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgZGF0ZUZyb206ICcxOTcwLTAxLTAxVDAxOjAwOjAwKzAxOjAwJyxcbiAgICAgIGRhdGVUbzogdGltZVJhbmdlLmRhdGVUbyxcbiAgICAgIHN0YXR1czogQWxhcm1TdGF0dXMuQUNUSVZFXG4gICAgfTtcblxuICAgIGNvbnN0IGFjdGl2ZUFsYXJtcyA9IGF3YWl0IHRoaXMuY2hhcnRBbGFybXNTZXJ2aWNlLmxpc3RBbGFybXMocGFyYW1zLCBhbGFybXMpO1xuICAgIHRoaXMuY29uZmlnLmFjdGl2ZUFsYXJtVHlwZXNPdXRPZlJhbmdlID0gW107XG4gICAgLy8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBhY3RpdmVBbGFybXMgYW5kIGNoZWNrIGlmIHRoZSBhbGFybSBpcyBpbiB0aGUgYWxhcm1zIGFycmF5LCBpZiBub3QgdXBkYXRlIHRoZSBjb25maWcuYWN0aXZlQWxhcm1UeXBlc091dE9mUmFuZ2UgcHJvcFxuICAgIGFjdGl2ZUFsYXJtcy5mb3JFYWNoKGFjdGl2ZUFsYXJtID0+IHtcbiAgICAgIGNvbnN0IGFsYXJtVHlwZSA9IGFjdGl2ZUFsYXJtLnR5cGU7XG4gICAgICBjb25zdCBhbGFybSA9IHRoaXMuYWxhcm1zLmZpbmQoYWxhcm0gPT4gYWxhcm0udHlwZSA9PT0gYWxhcm1UeXBlKTtcbiAgICAgIGlmICghYWxhcm0gJiYgdGhpcy5jb25maWcuYWN0aXZlQWxhcm1UeXBlc091dE9mUmFuZ2UpIHtcbiAgICAgICAgdGhpcy5jb25maWcuYWN0aXZlQWxhcm1UeXBlc091dE9mUmFuZ2UucHVzaChhbGFybVR5cGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRDaGFydE9wdGlvbnMoZGF0YXBvaW50c1dpdGhWYWx1ZXM6IERwV2l0aFZhbHVlc1tdKTogUHJvbWlzZTxFQ2hhcnRzT3B0aW9uPiB7XG4gICAgY29uc3QgdGltZVJhbmdlID0geyAuLi50aGlzLmdldFRpbWVSYW5nZSgpLCBpbnRlcnZhbDogdGhpcy5jb25maWcuaW50ZXJ2YWwgfTtcbiAgICBpZiAoIXRoaXMud2lkZ2V0VGltZUNvbnRleHREYXRlUmFuZ2VTZXJ2aWNlLmluaXRpYWxUaW1lUmFuZ2UoKSkge1xuICAgICAgdGhpcy53aWRnZXRUaW1lQ29udGV4dERhdGVSYW5nZVNlcnZpY2UudXBkYXRlSW5pdGlhbFRpbWVSYW5nZSh0aW1lUmFuZ2UpO1xuICAgICAgY29uc3QgYWdncmVnYXRlZERhdGFwb2ludHMgPSBhd2FpdCBsYXN0VmFsdWVGcm9tKFxuICAgICAgICB0aGlzLmZldGNoU2VyaWVzRm9yRGF0YXBvaW50cyQoe1xuICAgICAgICAgIGRhdGVGcm9tOiBuZXcgRGF0ZShcbiAgICAgICAgICAgIG5ldyBEYXRlKHRpbWVSYW5nZS5kYXRlRnJvbSkudmFsdWVPZigpIC1cbiAgICAgICAgICAgICAgdGhpcy5lY2hhcnRzT3B0aW9uc1NlcnZpY2UuY2FsY3VsYXRlRXh0ZW5kZWRJbnRlcnZhbEluTXMoXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcuaW50ZXJ2YWwgfHwgJ2N1c3RvbScsXG4gICAgICAgICAgICAgICAgeyBkYXRlRnJvbTogdGltZVJhbmdlLmRhdGVGcm9tLCBkYXRlVG86IHRpbWVSYW5nZS5kYXRlVG8gfVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIGRhdGVUbzogdGltZVJhbmdlLmRhdGVUb1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIHJldHVybiB0aGlzLmVjaGFydHNPcHRpb25zU2VydmljZS5nZXRDaGFydE9wdGlvbnMoXG4gICAgICAgIGRhdGFwb2ludHNXaXRoVmFsdWVzLFxuICAgICAgICB0aW1lUmFuZ2UsXG4gICAgICAgIHtcbiAgICAgICAgICBZQXhpczogdGhpcy5jb25maWcueUF4aXNTcGxpdExpbmVzIHx8IGZhbHNlLFxuICAgICAgICAgIFhBeGlzOiB0aGlzLmNvbmZpZy54QXhpc1NwbGl0TGluZXMgfHwgZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy5ldmVudHMsXG4gICAgICAgIHRoaXMuYWxhcm1zLFxuICAgICAgICB7XG4gICAgICAgICAgZGlzcGxheU1hcmtlZExpbmU6IHRoaXMuY29uZmlnLmRpc3BsYXlNYXJrZWRMaW5lIHx8IGZhbHNlLFxuICAgICAgICAgIGRpc3BsYXlNYXJrZWRQb2ludDogdGhpcy5jb25maWcuZGlzcGxheU1hcmtlZFBvaW50IHx8IGZhbHNlLFxuICAgICAgICAgIG1lcmdlTWF0Y2hpbmdEYXRhcG9pbnRzOiB0aGlzLmNvbmZpZy5tZXJnZU1hdGNoaW5nRGF0YXBvaW50cyB8fCBmYWxzZSxcbiAgICAgICAgICBzaG93TGFiZWxBbmRVbml0OiB0aGlzLmNvbmZpZy5zaG93TGFiZWxBbmRVbml0IHx8IGZhbHNlLFxuICAgICAgICAgIHNob3dTbGlkZXI6IHRoaXMuY29uZmlnLnNob3dTbGlkZXIgfHwgZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBhZ2dyZWdhdGVkRGF0YXBvaW50c1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYWdncmVnYXRlZERhdGFwb2ludHMgPSBhd2FpdCBsYXN0VmFsdWVGcm9tKFxuICAgICAgICB0aGlzLmZldGNoU2VyaWVzRm9yRGF0YXBvaW50cyQoe1xuICAgICAgICAgIGRhdGVGcm9tOiBuZXcgRGF0ZShcbiAgICAgICAgICAgIG5ldyBEYXRlKHRoaXMud2lkZ2V0VGltZUNvbnRleHREYXRlUmFuZ2VTZXJ2aWNlLmluaXRpYWxUaW1lUmFuZ2UoKS5kYXRlRnJvbSkudmFsdWVPZigpIC1cbiAgICAgICAgICAgICAgdGhpcy5lY2hhcnRzT3B0aW9uc1NlcnZpY2UuY2FsY3VsYXRlRXh0ZW5kZWRJbnRlcnZhbEluTXMoXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcuaW50ZXJ2YWwgfHwgJ2N1c3RvbScsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZGF0ZUZyb206IHRoaXMud2lkZ2V0VGltZUNvbnRleHREYXRlUmFuZ2VTZXJ2aWNlLmluaXRpYWxUaW1lUmFuZ2UoKS5kYXRlRnJvbSxcbiAgICAgICAgICAgICAgICAgIGRhdGVUbzogdGhpcy53aWRnZXRUaW1lQ29udGV4dERhdGVSYW5nZVNlcnZpY2UuaW5pdGlhbFRpbWVSYW5nZSgpLmRhdGVUb1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICBkYXRlVG86IG5ldyBEYXRlKFxuICAgICAgICAgICAgdGhpcy53aWRnZXRUaW1lQ29udGV4dERhdGVSYW5nZVNlcnZpY2UuaW5pdGlhbFRpbWVSYW5nZSgpLmRhdGVUb1xuICAgICAgICAgICkudG9JU09TdHJpbmcoKVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIHJldHVybiB0aGlzLmVjaGFydHNPcHRpb25zU2VydmljZS5nZXRDaGFydE9wdGlvbnMoXG4gICAgICAgIGRhdGFwb2ludHNXaXRoVmFsdWVzLFxuICAgICAgICB0aGlzLndpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZS5pbml0aWFsVGltZVJhbmdlKCksXG4gICAgICAgIHtcbiAgICAgICAgICBZQXhpczogdGhpcy5jb25maWcueUF4aXNTcGxpdExpbmVzIHx8IGZhbHNlLFxuICAgICAgICAgIFhBeGlzOiB0aGlzLmNvbmZpZy54QXhpc1NwbGl0TGluZXMgfHwgZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy5ldmVudHMsXG4gICAgICAgIHRoaXMuYWxhcm1zLFxuICAgICAgICB7XG4gICAgICAgICAgZGlzcGxheU1hcmtlZExpbmU6IHRoaXMuY29uZmlnLmRpc3BsYXlNYXJrZWRMaW5lIHx8IGZhbHNlLFxuICAgICAgICAgIGRpc3BsYXlNYXJrZWRQb2ludDogdGhpcy5jb25maWcuZGlzcGxheU1hcmtlZFBvaW50IHx8IGZhbHNlLFxuICAgICAgICAgIG1lcmdlTWF0Y2hpbmdEYXRhcG9pbnRzOiB0aGlzLmNvbmZpZy5tZXJnZU1hdGNoaW5nRGF0YXBvaW50cyB8fCBmYWxzZSxcbiAgICAgICAgICBzaG93TGFiZWxBbmRVbml0OiB0aGlzLmNvbmZpZy5zaG93TGFiZWxBbmRVbml0IHx8IGZhbHNlLFxuICAgICAgICAgIHNob3dTbGlkZXI6IHRoaXMuY29uZmlnLnNob3dTbGlkZXIgfHwgZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgdGltZVJhbmdlLFxuICAgICAgICBhZ2dyZWdhdGVkRGF0YXBvaW50cyxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZldGNoU2VyaWVzRm9yRGF0YXBvaW50cyQoY3VzdG9tVGltZVJhbmdlPzogYW55KTogT2JzZXJ2YWJsZTxEcFdpdGhWYWx1ZXNbXT4ge1xuICAgIGNvbnN0IGFjdGl2ZURhdGFwb2ludHMgPSB0aGlzLmNvbmZpZz8uZGF0YXBvaW50cz8uZmlsdGVyKGRwID0+IGRwLl9fYWN0aXZlKTtcbiAgICBpZiAoIWFjdGl2ZURhdGFwb2ludHMgfHwgYWN0aXZlRGF0YXBvaW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBvZihbXSk7XG4gICAgfVxuICAgIGNvbnN0IGRhdGFwb2ludHNXaXRoVmFsdWVzUmVxdWVzdHM6IE9ic2VydmFibGU8RHBXaXRoVmFsdWVzPltdID0gW107XG4gICAgY29uc3QgdGltZVJhbmdlID0gdGhpcy5nZXRUaW1lUmFuZ2UoNjBfMDAwKTtcbiAgICBmb3IgKGNvbnN0IGRwIG9mIGFjdGl2ZURhdGFwb2ludHMpIHtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLm1lYXN1cmVtZW50U2VydmljZVxuICAgICAgICAubGlzdFNlcmllcyQoe1xuICAgICAgICAgIC4uLihjdXN0b21UaW1lUmFuZ2UgPyBjdXN0b21UaW1lUmFuZ2UgOiB0aW1lUmFuZ2UpLFxuICAgICAgICAgIHNvdXJjZTogZHAuX190YXJnZXQ/LmlkIHx8ICcnLFxuICAgICAgICAgIHNlcmllczogW2Ake2RwLmZyYWdtZW50fS4ke2RwLnNlcmllc31gXSxcbiAgICAgICAgICAuLi4odGhpcy5jb25maWcuYWdncmVnYXRpb24gfHwgY3VzdG9tVGltZVJhbmdlXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBhZ2dyZWdhdGlvblR5cGU6IGN1c3RvbVRpbWVSYW5nZSA/IGFnZ3JlZ2F0aW9uVHlwZS5IT1VSTFkgOiB0aGlzLmNvbmZpZy5hZ2dyZWdhdGlvblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHt9KVxuICAgICAgICB9KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAocmVzID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IHJlcy5kYXRhLnZhbHVlcztcbiAgICAgICAgICAgIGlmIChyZXMuZGF0YS50cnVuY2F0ZWQgJiYgdGhpcy5jb25maWcuZGF0ZUZyb20pIHtcbiAgICAgICAgICAgICAgdmFsdWVzW25ldyBEYXRlKHRoaXMuY29uZmlnLmRhdGVGcm9tKS50b0lTT1N0cmluZygpXSA9IFt7IG1pbjogbnVsbCwgbWF4OiBudWxsIH1dO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuYWxlcnRzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hbGVydHMuY2xlYXIoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgLi4uZHAsIHZhbHVlcywgdHJ1bmNhdGVkOiByZXMuZGF0YS50cnVuY2F0ZWQgfTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICBkYXRhcG9pbnRzV2l0aFZhbHVlc1JlcXVlc3RzLnB1c2gocmVxdWVzdCk7XG4gICAgfVxuICAgIHJldHVybiBmb3JrSm9pbihkYXRhcG9pbnRzV2l0aFZhbHVlc1JlcXVlc3RzKS5waXBlKFxuICAgICAgdGFwKChkcHNXaXRoVmFsdWVzOiBEcFdpdGhWYWx1ZXNbXSkgPT4ge1xuICAgICAgICBpZiAoZHBzV2l0aFZhbHVlcy5zb21lKGRwID0+IGRwWyd0cnVuY2F0ZWQnXSkpIHtcbiAgICAgICAgICB0aGlzLmFkZFRydW5jYXRlZERhdGFBbGVydCgpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFkZFRydW5jYXRlZERhdGFBbGVydCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hbGVydHM/LmFsZXJ0R3JvdXBzLmZpbmQoYSA9PiBhLnR5cGUgPT09ICd3YXJuaW5nJyk/LnZhbHVlPy5hbGVydHM/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhbGVydCA9IG5ldyBEeW5hbWljQ29tcG9uZW50QWxlcnQoe1xuICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgICAgdGV4dDogZ2V0dGV4dCgnVHJ1bmNhdGVkIGRhdGEuIENoYW5nZSBhZ2dyZWdhdGlvbiBvciBzZWxlY3Qgc2hvcnRlciBkYXRlIHJhbmdlLicpXG4gICAgfSk7XG5cbiAgICB0aGlzLmFsZXJ0cz8uYWRkQWxlcnRzKGFsZXJ0KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGltZVJhbmdlKGFkZGl0aW9uYWxQYWRkaW5nPzogbnVtYmVyKTogeyBkYXRlRnJvbTogc3RyaW5nOyBkYXRlVG86IHN0cmluZyB9IHtcbiAgICBsZXQgdGltZVJhbmdlOiB7IGRhdGVGcm9tOiBEYXRlOyBkYXRlVG86IERhdGUgfTtcbiAgICBpZiAoXG4gICAgICB0aGlzLmNvbmZpZy53aWRnZXRJbnN0YW5jZUdsb2JhbFRpbWVDb250ZXh0IHx8XG4gICAgICAodGhpcy5jb25maWcuaW50ZXJ2YWwgPT09ICdjdXN0b20nICYmICF0aGlzLmNvbmZpZy5yZWFsdGltZSlcbiAgICApIHtcbiAgICAgIHRpbWVSYW5nZSA9IHtcbiAgICAgICAgZGF0ZUZyb206IG5ldyBEYXRlKHRoaXMuY29uZmlnLmRhdGVGcm9tIGFzIERhdGUpLFxuICAgICAgICBkYXRlVG86IG5ldyBEYXRlKHRoaXMuY29uZmlnLmRhdGVUbyBhcyBEYXRlKVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHRpbWVSYW5nZUluTXMgPSAwO1xuICAgICAgaWYgKHRoaXMuY29uZmlnLmludGVydmFsICYmIHRoaXMuY29uZmlnLmludGVydmFsICE9PSAnY3VzdG9tJykge1xuICAgICAgICB0aW1lUmFuZ2VJbk1zID0gSU5URVJWQUxTLmZpbmQoaSA9PiBpLmlkID09PSB0aGlzLmNvbmZpZy5pbnRlcnZhbCk/LnRpbWVzcGFuSW5NcyB8fCAwO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZy5yZWFsdGltZSkge1xuICAgICAgICB0aW1lUmFuZ2VJbk1zID1cbiAgICAgICAgICBuZXcgRGF0ZSh0aGlzLmNvbmZpZy5kYXRlVG8gYXMgRGF0ZSkudmFsdWVPZigpIC1cbiAgICAgICAgICBuZXcgRGF0ZSh0aGlzLmNvbmZpZy5kYXRlRnJvbSBhcyBEYXRlKS52YWx1ZU9mKCk7XG4gICAgICB9XG4gICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgICAgdGltZVJhbmdlID0geyBkYXRlRnJvbTogbmV3IERhdGUobm93LnZhbHVlT2YoKSAtIHRpbWVSYW5nZUluTXMpLCBkYXRlVG86IG5vdyB9O1xuICAgIH1cbiAgICBpZiAoYWRkaXRpb25hbFBhZGRpbmcpIHtcbiAgICAgIHRpbWVSYW5nZS5kYXRlRnJvbSA9IG5ldyBEYXRlKHRpbWVSYW5nZS5kYXRlRnJvbS52YWx1ZU9mKCkgLSBhZGRpdGlvbmFsUGFkZGluZyk7XG4gICAgICB0aW1lUmFuZ2UuZGF0ZVRvID0gbmV3IERhdGUodGltZVJhbmdlLmRhdGVUby52YWx1ZU9mKCkgKyBhZGRpdGlvbmFsUGFkZGluZyk7XG4gICAgfVxuICAgIHJldHVybiB7IGRhdGVGcm9tOiB0aW1lUmFuZ2UuZGF0ZUZyb20udG9JU09TdHJpbmcoKSwgZGF0ZVRvOiB0aW1lUmFuZ2UuZGF0ZVRvLnRvSVNPU3RyaW5nKCkgfTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cInAtcmVsYXRpdmUgZml0LWggY2hhcnQtY29udGFpbmVyXCJcbj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZml0LXcgZml0LWhcIlxuICAgICNjaGFydFxuICAgIGVjaGFydHNcbiAgICBbb3B0aW9uc109XCJjaGFydE9wdGlvbiQgfCBhc3luY1wiXG4gICAgKGNoYXJ0SW5pdCk9XCJvbkNoYXJ0SW5pdCgkZXZlbnQpXCJcbiAgPjwvZGl2PlxuXG4gIDxjOHktY2hhcnQtYWxlcnRzIFthbGVydHNdPVwiYWxlcnRzXCI+PC9jOHktY2hhcnQtYWxlcnRzPlxuXG4gIDxkaXYgKm5nSWY9XCJzaG93TG9hZE1vcmVcIiBjbGFzcz1cImNoYXJ0LWxvYWQtbW9yZVwiPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbSBidG4tYmxvY2tcIlxuICAgICAgKGNsaWNrKT1cImxvYWRNb3JlRGF0YSgpXCJcbiAgICA+XG4gICAgICA8aSBjOHlJY29uPVwicmVzdG9yZVwiPjwvaT5cbiAgICAgIHt7ICdMb2FkIG1vcmUnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -270,9 +270,7 @@ class WorkspaceConfigComponent {
270
270
  }
271
271
  }
272
272
  addConfig(duplicatedConfig) {
273
- const name = uniqueNamesGenerator({
274
- dictionaries: [adjectives, nouns]
275
- });
273
+ const name = uniqueNamesGenerator({ dictionaries: [adjectives, nouns] });
276
274
  const workspace = {
277
275
  id: new Date().toISOString(),
278
276
  label: name,
@@ -281,11 +279,9 @@ class WorkspaceConfigComponent {
281
279
  if (duplicatedConfig) {
282
280
  workspace.config = duplicatedConfig;
283
281
  }
284
- this.currentConfiguration = { ...workspace };
285
- this.configurations.unshift(workspace);
282
+ this.configurations = [workspace, ...this.configurations];
286
283
  this.initWorkspaceForm();
287
- this.workspaceConfigurationService.saveConfigurations(this.configurations, this.currentConfiguration.id);
288
- this.onConfigurationChange.emit(this.currentConfiguration.config);
284
+ this.changeConfiguration(true, workspace);
289
285
  }
290
286
  changeConfiguration(selected, configuration) {
291
287
  if (!selected) {
@@ -328,6 +324,15 @@ class WorkspaceConfigComponent {
328
324
  config: JSON.stringify(this.updatedConfig)
329
325
  };
330
326
  this.workspaceConfigurationService.saveConfigurations(this.configurations, this.currentConfiguration.id);
327
+ const control = this.configurationsFormGroup.controls['configurations'];
328
+ const index = this.configurations.findIndex(c => c.id === this.currentConfiguration.id);
329
+ if (index !== -1) {
330
+ control.at(index).patchValue({
331
+ label: this.currentConfiguration.label,
332
+ config: this.currentConfiguration.config,
333
+ id: this.currentConfiguration.id
334
+ });
335
+ }
331
336
  this.router.navigate([], { queryParams });
332
337
  }
333
338
  initializeConfigurations() {