@c8y/ngx-components 1021.62.8 → 1021.63.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.
Files changed (41) hide show
  1. package/echart/services/echarts-options.service.d.ts +3 -1
  2. package/echart/services/echarts-options.service.d.ts.map +1 -1
  3. package/esm2022/alarms/alarm-details.component.mjs +3 -3
  4. package/esm2022/alarms/alarms-filter.component.mjs +3 -3
  5. package/esm2022/alarms/alarms-icon.component.mjs +3 -3
  6. package/esm2022/alarms/alarms-interval-refresh.component.mjs +3 -3
  7. package/esm2022/alarms/alarms-list.component.mjs +3 -3
  8. package/esm2022/alarms/alarms.component.mjs +3 -3
  9. package/esm2022/auth-configuration/sso-configuration/sso-configuration.component.mjs +3 -3
  10. package/esm2022/core/countdown-interval/countdown-interval.component.mjs +3 -3
  11. package/esm2022/echart/services/echarts-options.service.mjs +28 -12
  12. package/esm2022/register-device/device-registration-view.component.mjs +39 -9
  13. package/esm2022/register-device/general/general-device-registration-button.component.mjs +13 -14
  14. package/esm2022/register-device/general/general-device-registration.component.mjs +19 -5
  15. package/esm2022/register-device/general/general-device-registration.service.mjs +30 -0
  16. package/esm2022/register-device/index.mjs +2 -1
  17. package/esm2022/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.mjs +3 -3
  18. package/fesm2022/c8y-ngx-components-alarms.mjs +12 -12
  19. package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
  20. package/fesm2022/c8y-ngx-components-auth-configuration.mjs +2 -2
  21. package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
  22. package/fesm2022/c8y-ngx-components-echart.mjs +26 -11
  23. package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
  24. package/fesm2022/c8y-ngx-components-register-device.mjs +86 -19
  25. package/fesm2022/c8y-ngx-components-register-device.mjs.map +1 -1
  26. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +2 -2
  27. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
  28. package/fesm2022/c8y-ngx-components.mjs +2 -2
  29. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  30. package/locales/locales.pot +3 -0
  31. package/package.json +1 -1
  32. package/register-device/device-registration-view.component.d.ts +6 -1
  33. package/register-device/device-registration-view.component.d.ts.map +1 -1
  34. package/register-device/general/general-device-registration-button.component.d.ts +3 -3
  35. package/register-device/general/general-device-registration-button.component.d.ts.map +1 -1
  36. package/register-device/general/general-device-registration.component.d.ts +5 -0
  37. package/register-device/general/general-device-registration.component.d.ts.map +1 -1
  38. package/register-device/general/general-device-registration.service.d.ts +9 -0
  39. package/register-device/general/general-device-registration.service.d.ts.map +1 -0
  40. package/register-device/index.d.ts +1 -0
  41. package/register-device/index.d.ts.map +1 -1
@@ -1,6 +1,6 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
  import { Injectable } from '@angular/core';
3
- import { DatePipe } from '@c8y/ngx-components';
3
+ import { DatePipe, gettext } from '@c8y/ngx-components';
4
4
  import { YAxisService } from './y-axis.service';
5
5
  import { ChartTypesService } from './chart-types.service';
6
6
  import { AlarmStatus } from '@c8y/client';
@@ -8,20 +8,23 @@ import { ICONS_MAP } from '../models/svg-icons.model';
8
8
  import { Router } from '@angular/router';
9
9
  import { AlarmSeverityToIconPipe, AlarmSeverityToLabelPipe } from '@c8y/ngx-components/alarms';
10
10
  import { INTERVALS } from '@c8y/ngx-components/interval-picker';
11
+ import { TranslateService } from '@ngx-translate/core';
11
12
  import * as i0 from "@angular/core";
12
13
  import * as i1 from "@c8y/ngx-components";
13
14
  import * as i2 from "./y-axis.service";
14
15
  import * as i3 from "./chart-types.service";
15
16
  import * as i4 from "@c8y/ngx-components/alarms";
16
- import * as i5 from "@angular/router";
17
+ import * as i5 from "@ngx-translate/core";
18
+ import * as i6 from "@angular/router";
17
19
  const INDEX_HTML = '/index.html';
18
20
  export class EchartsOptionsService {
19
- constructor(datePipe, yAxisService, chartTypesService, severityIconPipe, severityLabelPipe, router) {
21
+ constructor(datePipe, yAxisService, chartTypesService, severityIconPipe, severityLabelPipe, translate, router) {
20
22
  this.datePipe = datePipe;
21
23
  this.yAxisService = yAxisService;
22
24
  this.chartTypesService = chartTypesService;
23
25
  this.severityIconPipe = severityIconPipe;
24
26
  this.severityLabelPipe = severityLabelPipe;
27
+ this.translate = translate;
25
28
  this.router = router;
26
29
  this.TOOLTIP_WIDTH = 300;
27
30
  }
@@ -248,7 +251,7 @@ export class EchartsOptionsService {
248
251
  yAxisIndex: idx,
249
252
  ...this.chartTypesService.getSeriesOptions(dp, isMinMaxChart, renderType)
250
253
  };
251
- const markLineData = this.createMarkLine(itemsOfType);
254
+ const markLineData = this.createMarkLine(itemsOfType, itemType);
252
255
  // Construct series with markLine
253
256
  const seriesWithMarkLine = {
254
257
  id: `${type}/${dp.__target?.id}+${id ? id : ''}-markLine`,
@@ -301,7 +304,7 @@ export class EchartsOptionsService {
301
304
  const alarm = allAlarms.find(a => a.type === params.data.itemType);
302
305
  let value = '';
303
306
  if (event) {
304
- value = this.processEvent(event);
307
+ value = this.processEvent(event, XAxisValue);
305
308
  }
306
309
  if (alarm) {
307
310
  this.processAlarm(alarm).then(alarmVal => {
@@ -382,6 +385,9 @@ export class EchartsOptionsService {
382
385
  */
383
386
  processSeries(allDataPointSeries, XAxisValue, YAxisReadings) {
384
387
  allDataPointSeries.forEach((series) => {
388
+ if (series.datapointId === 'aggregated') {
389
+ return;
390
+ }
385
391
  let value = '';
386
392
  if (series.id.endsWith('/min')) {
387
393
  value = this.processMinSeries(series, allDataPointSeries, XAxisValue);
@@ -438,11 +444,11 @@ export class EchartsOptionsService {
438
444
  * @param event - The event object.
439
445
  * @returns The processed value.
440
446
  */
441
- processEvent(event) {
447
+ processEvent(event, XAxisValue) {
442
448
  let value = `<ul class="list-unstyled small separator-top">`;
443
449
  value += `<li class="p-t-4 p-b-4 d-flex separator-bottom text-no-wrap"><label class="small m-b-0 m-r-8">Event type</label><code class="m-l-auto">${event.type}</code></li>`;
444
450
  value += `<li class="p-t-4 p-b-4 d-flex separator-bottom text-no-wrap"><label class="small m-b-0 m-r-8">Event text</label><span class="m-l-auto">${event.text}<span></li>`;
445
- value += `<li class="p-t-4 p-b-4 d-flex separator-bottom text-no-wrap"><label class="small m-b-0 m-r-8">Last update</label><span class="m-l-auto">${this.datePipe.transform(event['lastUpdated'])}<span></li>`;
451
+ value += `<li class="p-t-4 p-b-4 d-flex separator-bottom text-no-wrap"><label class="small m-b-0 m-r-8">Event time</label><span class="m-l-auto">${this.datePipe.transform(XAxisValue)}<span></li>`;
446
452
  value += `</ul>`;
447
453
  return value;
448
454
  }
@@ -463,7 +469,7 @@ export class EchartsOptionsService {
463
469
  const currentUrl = window.location.href;
464
470
  const baseUrlIndex = currentUrl.indexOf(INDEX_HTML);
465
471
  const baseUrl = currentUrl.substring(0, baseUrlIndex + INDEX_HTML.length);
466
- value += `<li class="p-t-4 p-b-4 d-flex separator-bottom text-no-wrap"><label class="text-label-small m-b-0 m-r-8">Link</label><span class="small m-l-auto"><a href="${baseUrl}#/alarms/${alarm.id}">Alarm Details</a></span></li>`;
472
+ value += `<li class="p-t-4 p-b-4 d-flex separator-bottom text-no-wrap"><label class="text-label-small m-b-0 m-r-8">Link</label><span class="small m-l-auto"><a href="${baseUrl}#/alarms/${alarm.id}/details?showCleared=true">${this.translate.instant(gettext('Alarm details'))}</a></span></li>`;
467
473
  }
468
474
  value += `<li class="p-t-4 p-b-4 d-flex text-no-wrap"><label class="text-label-small m-b-0 m-r-8">Alarm count</label><span class="small m-l-auto"><span class="badge badge-info">${alarm.count}</span></span></li>`;
469
475
  value += `</ul>`;
@@ -719,11 +725,21 @@ export class EchartsOptionsService {
719
725
  * @param items Array of alarms or events
720
726
  * @returns MarkLineDataItemOptionBase[]
721
727
  */
722
- createMarkLine(items) {
728
+ createMarkLine(items, itemType) {
723
729
  return items.reduce((acc, item) => {
724
730
  if (!item.creationTime) {
725
731
  return acc;
726
732
  }
733
+ if (itemType === 'event') {
734
+ return acc.concat([
735
+ {
736
+ xAxis: item.time,
737
+ itemType: item.type,
738
+ label: { show: false, formatter: () => item.type },
739
+ itemStyle: { color: item['color'] }
740
+ }
741
+ ]);
742
+ }
727
743
  if (item.creationTime === item['lastUpdated']) {
728
744
  return acc.concat([
729
745
  {
@@ -848,10 +864,10 @@ export class EchartsOptionsService {
848
864
  return acc;
849
865
  }, null);
850
866
  }
851
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EchartsOptionsService, deps: [{ token: i1.DatePipe }, { token: i2.YAxisService }, { token: i3.ChartTypesService }, { token: i4.AlarmSeverityToIconPipe }, { token: i4.AlarmSeverityToLabelPipe }, { token: i5.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
867
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EchartsOptionsService, deps: [{ token: i1.DatePipe }, { token: i2.YAxisService }, { token: i3.ChartTypesService }, { token: i4.AlarmSeverityToIconPipe }, { token: i4.AlarmSeverityToLabelPipe }, { token: i5.TranslateService }, { token: i6.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
852
868
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EchartsOptionsService }); }
853
869
  }
854
870
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EchartsOptionsService, decorators: [{
855
871
  type: Injectable
856
- }], ctorParameters: () => [{ type: i1.DatePipe }, { type: i2.YAxisService }, { type: i3.ChartTypesService }, { type: i4.AlarmSeverityToIconPipe }, { type: i4.AlarmSeverityToLabelPipe }, { type: i5.Router }] });
857
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNoYXJ0cy1vcHRpb25zLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9lY2hhcnQvc2VydmljZXMvZWNoYXJ0cy1vcHRpb25zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBYS9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUcxRCxPQUFPLEVBQUUsV0FBVyxFQUFnQyxNQUFNLGFBQWEsQ0FBQztBQUN4RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9GLE9BQU8sRUFBWSxTQUFTLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7OztBQWExRSxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUM7QUFHakMsTUFBTSxPQUFPLHFCQUFxQjtJQUtoQyxZQUNVLFFBQWtCLEVBQ2xCLFlBQTBCLEVBQzFCLGlCQUFvQyxFQUNwQyxnQkFBeUMsRUFDekMsaUJBQTJDLEVBQzNDLE1BQWM7UUFMZCxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUF5QjtRQUN6QyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQTBCO1FBQzNDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFUaEIsa0JBQWEsR0FBRyxH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akMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgdHlwZSB7IEVDaGFydHNPcHRpb24sIFNlcmllc09wdGlvbiB9IGZyb20gJ2VjaGFydHMnO1xuaW1wb3J0IHsgRUNoYXJ0cyB9IGZyb20gJ2VjaGFydHMnO1xuaW1wb3J0IHtcbiAgRGF0YXBvaW50Q2hhcnRSZW5kZXJUeXBlLFxuICBEcFdpdGhWYWx1ZXMsXG4gIERhdGVTdHJpbmcsXG4gIERwVmFsdWVzSXRlbSxcbiAgTWFya0xpbmVEYXRhLFxuICBNYXJrUG9pbnREYXRhLFxuICBTZXJpZXNEYXRhcG9pbnRJbmZvLFxuICBTZXJpZXNWYWx1ZVxufSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgWUF4aXNTZXJ2aWNlIH0gZnJvbSAnLi95LWF4aXMuc2VydmljZSc7XG5pbXBvcnQgeyBDaGFydFR5cGVzU2VydmljZSB9IGZyb20gJy4vY2hhcnQtdHlwZXMuc2VydmljZSc7XG5pbXBvcnQgdHlwZSB7IENhbGxiYWNrRGF0YVBhcmFtcywgVG9vbHRpcEZvcm1hdHRlckNhbGxiYWNrIH0gZnJvbSAnZWNoYXJ0cy90eXBlcy9zcmMvdXRpbC90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IFRvcExldmVsRm9ybWF0dGVyUGFyYW1zIH0gZnJvbSAnZWNoYXJ0cy90eXBlcy9zcmMvY29tcG9uZW50L3Rvb2x0aXAvVG9vbHRpcE1vZGVsJztcbmltcG9ydCB7IEFsYXJtU3RhdHVzLCBJQWxhcm0sIElFdmVudCwgU2V2ZXJpdHlUeXBlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgSUNPTlNfTUFQIH0gZnJvbSAnLi4vbW9kZWxzL3N2Zy1pY29ucy5tb2RlbCc7XG5pbXBvcnQgeyBDdXN0b21TZXJpZXNPcHRpb25zIH0gZnJvbSAnLi4vbW9kZWxzL2NoYXJ0Lm1vZGVsJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBBbGFybVNldmVyaXR5VG9JY29uUGlwZSwgQWxhcm1TZXZlcml0eVRvTGFiZWxQaXBlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9hbGFybXMnO1xuaW1wb3J0IHsgSW50ZXJ2YWwsIElOVEVSVkFMUyB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvaW50ZXJ2YWwtcGlja2VyJztcblxudHlwZSBUb29sdGlwUG9zaXRpb25DYWxsYmFjayA9IChcbiAgcG9pbnQ6IFtudW1iZXIsIG51bWJlcl0sIC8vIHBvc2l0aW9uIG9mIG1vdXNlIGluIGNoYXJ0IFtYLCBZXTsgMCwwIGlzIHRvcCBsZWZ0IGNvcm5lclxuICBfOiBhbnksIC8vIHRvb2x0aXAgZGF0YVxuICBkb206IEhUTUxFbGVtZW50IHwgdW5rbm93biwgLy8gdG9vbHRpcCBlbGVtZW50XG4gIF9fOiBhbnksIC8vIHZhbGlkIG9ubHkgd2hlbiBtb3VzZSBpcyBvbiBncmFwaGljIGVsZW1lbnRzOyBub3QgcmVsZXZhbnQgaW4gb3VyIGNhc2VcbiAgc2l6ZToge1xuICAgIGNvbnRlbnRTaXplOiBbbnVtYmVyLCBudW1iZXJdOyAvLyBzaXplIG9mIHRvb2x0aXBcbiAgICB2aWV3U2l6ZTogW251bWJlciwgbnVtYmVyXTsgLy8gc2l6ZSBvZiB0aGUgY2hhcnRcbiAgfSB8IG51bGwgLy8gc2l6ZSBvZiBjaGFydFxuKSA9PiBQYXJ0aWFsPFJlY29yZDwndG9wJyB8ICdib3R0b20nIHwgJ2xlZnQnIHwgJ3JpZ2h0JywgbnVtYmVyPj47XG5cbmNvbnN0IElOREVYX0hUTUwgPSAnL2luZGV4Lmh0bWwnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRWNoYXJ0c09wdGlvbnNTZXJ2aWNlIHtcbiAgZWNoYXJ0c0luc3RhbmNlOiBFQ2hhcnRzIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIFRPT0xUSVBfV0lEVEggPSAzMDA7XG4gIHByaXZhdGUgdG9vbHRpcFBvc2l0aW9uQ2FsbGJhY2s6IFRvb2x0aXBQb3NpdGlvbkNhbGxiYWNrIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxuICAgIHByaXZhdGUgeUF4aXNTZXJ2aWNlOiBZQXhpc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjaGFydFR5cGVzU2VydmljZTogQ2hhcnRUeXBlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZXZlcml0eUljb25QaXBlOiBBbGFybVNldmVyaXR5VG9JY29uUGlwZSxcbiAgICBwcml2YXRlIHNldmVyaXR5TGFiZWxQaXBlOiBBbGFybVNldmVyaXR5VG9MYWJlbFBpcGUsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxuICApIHt9XG5cbiAgZ2V0Q2hhcnRPcHRpb25zKFxuICAgIGRhdGFwb2ludHNXaXRoVmFsdWVzOiBEcFdpdGhWYWx1ZXNbXSxcbiAgICB0aW1lUmFuZ2U6IHsgZGF0ZUZyb206IHN0cmluZzsgZGF0ZVRvOiBzdHJpbmc7IGludGVydmFsOiBJbnRlcnZhbFsnaWQnXSB9LFxuICAgIHNob3dTcGxpdExpbmVzOiB7IFlBeGlzOiBib29sZWFuOyBYQXhpczogYm9vbGVhbiB9LFxuICAgIGV2ZW50czogSUV2ZW50W10sXG4gICAgYWxhcm1zOiBJQWxhcm1bXSxcbiAgICBkaXNwbGF5T3B0aW9uczoge1xuICAgICAgZGlzcGxheU1hcmtlZExpbmU6IGJvb2xlYW47XG4gICAgICBkaXNwbGF5TWFya2VkUG9pbnQ6IGJvb2xlYW47XG4gICAgICBtZXJnZU1hdGNoaW5nRGF0YXBvaW50czogYm9vbGVhbjtcbiAgICAgIHNob3dMYWJlbEFuZFVuaXQ6IGJvb2xlYW47XG4gICAgICBzaG93U2xpZGVyOiBib29sZWFuO1xuICAgIH0sXG4gICAgc2VsZWN0ZWRUaW1lUmFuZ2U/OiB7IGRhdGVGcm9tOiBzdHJpbmc7IGRhdGVUbzogc3RyaW5nOyBpbnRlcnZhbDogSW50ZXJ2YWxbJ2lkJ10gfSB8IG51bGwsXG4gICAgYWdncmVnYXRlZERhdGFwb2ludHM/OiBEcFdpdGhWYWx1ZXNbXSxcbiAgICBzbGlkZXJab29tVXNlZCA9IGZhbHNlXG4gICk6IEVDaGFydHNPcHRpb24ge1xuICAgIGNvbnN0IHlBeGlzID0gdGhpcy55QXhpc1NlcnZpY2UuZ2V0WUF4aXMoZGF0YXBvaW50c1dpdGhWYWx1ZXMsIHtcbiAgICAgIHNob3dTcGxpdExpbmVzOiBzaG93U3BsaXRMaW5lcy5ZQXhpcyxcbiAgICAgIG1lcmdlTWF0Y2hpbmdEYXRhcG9pbnRzOiBkaXNwbGF5T3B0aW9ucy5tZXJnZU1hdGNoaW5nRGF0YXBvaW50cyxcbiAgICAgIHNob3dMYWJlbEFuZFVuaXQ6IGRpc3BsYXlPcHRpb25zLnNob3dMYWJlbEFuZFVuaXRcbiAgICB9KTtcbiAgICBjb25zdCBsZWZ0QXhpcyA9IHlBeGlzLmZpbHRlcih5eCA9PiB5eC5wb3NpdGlvbiA9PT0gJ2xlZnQnKTtcbiAgICBjb25zdCBncmlkTGVmdCA9IGxlZnRBeGlzLmxlbmd0aCA/IGxlZnRBeGlzLmxlbmd0aCAqIHRoaXMueUF4aXNTZXJ2aWNlLllfQVhJU19PRkZTRVQgOiAxNjtcbiAgICBjb25zdCByaWdodEF4aXMgPSB5QXhpcy5maWx0ZXIoeXggPT4geXgucG9zaXRpb24gPT09ICdyaWdodCcpO1xuICAgIGNvbnN0IGdyaWRSaWdodCA9IHJpZ2h0QXhpcy5sZW5ndGggPyByaWdodEF4aXMubGVuZ3RoICogdGhpcy55QXhpc1NlcnZpY2UuWV9BWElTX09GRlNFVCA6IDE2O1xuICAgIGxldCBpbnRlcnZhbEluTXMgPSB0aGlzLmNhbGN1bGF0ZUV4dGVuZGVkSW50ZXJ2YWxJbk1zKFxuICAgICAgc2VsZWN0ZWRUaW1lUmFuZ2U/LmludGVydmFsIHx8IHRpbWVSYW5nZS5pbnRlcnZhbCB8fCAnaG91cnMnLFxuICAgICAgc2VsZWN0ZWRUaW1lUmFuZ2UgfHwgdGltZVJhbmdlXG4gICAgKTtcbiAgICBpZiAoc2xpZGVyWm9vbVVzZWQpIHtcbiAgICAgIGludGVydmFsSW5NcyA9IHRoaXMuY2FsY3VsYXRlRXh0ZW5kZWRJbnRlcnZhbEluTXModGltZVJhbmdlLmludGVydmFsIHx8ICdob3VycycsIHRpbWVSYW5nZSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBncmlkOiB7XG4gICAgICAgIGNvbnRhaW5MYWJlbDogZmFsc2UsIC8vIGF4aXMgbGFiZWxzIGFyZSBub3QgdGFrZW4gaW50byBhY2NvdW50IHRvIGNhbGN1bGF0ZSBncmFwaCBncmlkXG4gICAgICAgIGxlZnQ6IGdyaWRMZWZ0LFxuICAgICAgICB0b3A6IDE2LFxuICAgICAgICByaWdodDogZ3JpZFJpZ2h0LFxuICAgICAgICBib3R0b206IDY4XG4gICAgICB9LFxuICAgICAgZGF0YVpvb206IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdpbnNpZGUnLFxuICAgICAgICAgIC8vIFRPRE86IHVzZSAnbm9uZScgb25seSB3aGVuIHRoaXMgYnVnIGlzIGZpeGVkIGh0dHBzOi8vZ2l0aHViLmNvbS9hcGFjaGUvZWNoYXJ0cy9pc3N1ZXMvMTc4NThcbiAgICAgICAgICBmaWx0ZXJNb2RlOiBkYXRhcG9pbnRzV2l0aFZhbHVlcy5zb21lKGRwID0+IGRwLmxpbmVUeXBlID09PSAnYmFycycpID8gJ2ZpbHRlcicgOiAnbm9uZScsXG4gICAgICAgICAgem9vbU9uTW91c2VXaGVlbDogdHJ1ZSxcbiAgICAgICAgICBzdGFydFZhbHVlOiBzZWxlY3RlZFRpbWVSYW5nZVxuICAgICAgICAgICAgPyBzZWxlY3RlZFRpbWVSYW5nZS5kYXRlRnJvbS52YWx1ZU9mKClcbiAgICAgICAgICAgIDogdGltZVJhbmdlLmRhdGVGcm9tLnZhbHVlT2YoKSxcbiAgICAgICAgICBlbmRWYWx1ZTogc2VsZWN0ZWRUaW1lUmFuZ2VcbiAgICAgICAgICAgID8gc2VsZWN0ZWRUaW1lUmFuZ2UuZGF0ZVRvLnZhbHVlT2YoKVxuICAgICAgICAgICAgOiB0aW1lUmFuZ2UuZGF0ZVRvLnZhbHVlT2YoKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ3NsaWRlcicsXG4gICAgICAgICAgc2hvdzogZGlzcGxheU9wdGlvbnMuc2hvd1NsaWRlcixcbiAgICAgICAgICBib3R0b206IDgsXG4gICAgICAgICAgcmVhbHRpbWU6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIF0sIC8vIG9uIHJlYWx0aW1lLCAnbm9uZScgd2lsbCBjYXVzZSBleHRlbmRpbmcgY2hhcnQgbGluZSB0byBsZWZ0IGVkZ2Ugb2YgdGhlIGNoYXJ0XG4gICAgICBhbmltYXRpb246IGZhbHNlLFxuICAgICAgdG9vbGJveDoge1xuICAgICAgICBzaG93OiB0cnVlLFxuICAgICAgICBpdGVtU2l6ZTogMCwgLy8gdG9vbGJveCBpcyBuZWVkZWQgZm9yIHpvb21pbmcgaW4gYWN0aW9uLCBidXQgd2UgcHJvdmlkZSBvdXIgb3duIGJ1dHRvbnNcbiAgICAgICAgZmVhdHVyZToge1xuICAgICAgICAgIGRhdGFab29tOiB7XG4gICAgICAgICAgICB5QXhpc0luZGV4OiAnbm9uZSdcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB0b29sdGlwOiB7XG4gICAgICAgIHRyaWdnZXI6ICdheGlzJyxcbiAgICAgICAgYXhpc1BvaW50ZXI6IHtcbiAgICAgICAgICB0eXBlOiAnY3Jvc3MnLFxuICAgICAgICAgIHNuYXA6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpJyxcbiAgICAgICAgZm9ybWF0dGVyOiB0aGlzLmdldFRvb2x0aXBGb3JtYXR0ZXIoKSxcbiAgICAgICAgYXBwZW5kVG9Cb2R5OiB0cnVlLFxuICAgICAgICBwb3NpdGlvbjogdGhpcy50b29sdGlwUG9zaXRpb24oKSxcbiAgICAgICAgdHJhbnNpdGlvbkR1cmF0aW9uOiAwXG4gICAgICB9LFxuICAgICAgbGVnZW5kOiB7XG4gICAgICAgIHNob3c6IGZhbHNlXG4gICAgICB9LFxuICAgICAgeEF4aXM6IHtcbiAgICAgICAgbWluOiBuZXcgRGF0ZSh0aW1lUmFuZ2UuZGF0ZUZyb20pLnZhbHVlT2YoKSAtIGludGVydmFsSW5NcyxcbiAgICAgICAgbWF4OiB0aW1lUmFuZ2UuZGF0ZVRvLFxuICAgICAgICB0eXBlOiAndGltZScsXG4gICAgICAgIGFuaW1hdGlvbjogZmFsc2UsXG4gICAgICAgIGF4aXNQb2ludGVyOiB7XG4gICAgICAgICAgbGFiZWw6IHtcbiAgICAgICAgICAgIHNob3c6IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBheGlzTGluZToge1xuICAgICAgICAgIC8vIGFsaWduIFggYXhpcyB0byAwIG9mIFkgYXhpcyBvZiBkYXRhcG9pbnQgd2l0aCBsaW5lVHlwZSAnYmFycydcbiAgICAgICAgICBvblplcm9BeGlzSW5kZXg6IGRhdGFwb2ludHNXaXRoVmFsdWVzLmZpbmRJbmRleChkcCA9PiBkcC5saW5lVHlwZSA9PT0gJ2JhcnMnKVxuICAgICAgICB9LFxuICAgICAgICBheGlzTGFiZWw6IHtcbiAgICAgICAgICBoaWRlT3ZlcmxhcDogdHJ1ZSxcbiAgICAgICAgICBib3JkZXJXaWR0aDogMiwgLy8gYXMgdGhlcmUgaXMgbm8gbWFyZ2luIGZvciBsYWJlbHMgc3BhY2luZywgdHJhbnNwYXJlbnQgYm9yZGVyIGlzIGEgd29ya2Fyb3VuZFxuICAgICAgICAgIGJvcmRlckNvbG9yOiAndHJhbnNwYXJlbnQnXG4gICAgICAgIH0sXG4gICAgICAgIHNwbGl0TGluZToge1xuICAgICAgICAgIHNob3c6IHNob3dTcGxpdExpbmVzLlhBeGlzLFxuICAgICAgICAgIGxpbmVTdHlsZTogeyBvcGFjaXR5OiAwLjgsIHR5cGU6ICdkYXNoZWQnLCB3aWR0aDogMiB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB5QXhpcyxcbiAgICAgIHNlcmllczogW1xuICAgICAgICAuLi50aGlzLmdldEFnZ3JlZ2F0ZWRTZXJpZXMoYWdncmVnYXRlZERhdGFwb2ludHMgfHwgW10pLmZpbHRlcihcbiAgICAgICAgICBzZXJpZXMgPT4gc2VyaWVzICE9PSB1bmRlZmluZWRcbiAgICAgICAgKSxcbiAgICAgICAgLi4udGhpcy5nZXRDaGFydFNlcmllcyhkYXRhcG9pbnRzV2l0aFZhbHVlcywgZXZlbnRzLCBhbGFybXMsIGRpc3BsYXlPcHRpb25zKVxuICAgICAgXVxuICAgIH07XG4gIH1cblxuICBjYWxjdWxhdGVFeHRlbmRlZEludGVydmFsSW5NcyhpbnRlcnZhbDogSW50ZXJ2YWxbJ2lkJ10sIHNlbGVjdGVkVGltZVJhbmdlKTogbnVtYmVyIHtcbiAgICBsZXQgaW50ZXJ2YWxJbk1zID0gSU5URVJWQUxTLmZpbmQoaSA9PiBpLmlkID09PSBpbnRlcnZhbCkudGltZXNwYW5Jbk1zO1xuICAgIHN3aXRjaCAoaW50ZXJ2YWwpIHtcbiAgICAgIGNhc2UgJ21pbnV0ZXMnOlxuICAgICAgICBpbnRlcnZhbEluTXMgPSBJTlRFUlZBTFMuZmluZChpID0+IGkuaWQgPT09IGludGVydmFsKS50aW1lc3BhbkluTXMgKiA2MDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdob3Vycyc6XG4gICAgICAgIGludGVydmFsSW5NcyA9IElOVEVSVkFMUy5maW5kKGkgPT4gaS5pZCA9PT0gaW50ZXJ2YWwpLnRpbWVzcGFuSW5NcyAqIDI0O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2RheXMnOlxuICAgICAgICBpbnRlcnZhbEluTXMgPSBJTlRFUlZBTFMuZmluZChpID0+IGkuaWQgPT09IGludGVydmFsKS50aW1lc3BhbkluTXMgKiAyODtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd3ZWVrcyc6XG4gICAgICAgIGludGVydmFsSW5NcyA9IElOVEVSVkFMUy5maW5kKGkgPT4gaS5pZCA9PT0gaW50ZXJ2YWwpLnRpbWVzcGFuSW5NcyAqIDEyO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ21vbnRocyc6XG4gICAgICAgIGludGVydmFsSW5NcyA9IElOVEVSVkFMUy5maW5kKGkgPT4gaS5pZCA9PT0gaW50ZXJ2YWwpLnRpbWVzcGFuSW5NcyAqIDEyO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2N1c3RvbSc6XG4gICAgICAgIGludGVydmFsSW5NcyA9XG4gICAgICAgICAgKG5ldyBEYXRlKHNlbGVjdGVkVGltZVJhbmdlLmRhdGVUbykudmFsdWVPZigpIC1cbiAgICAgICAgICAgIG5ldyBEYXRlKHNlbGVjdGVkVGltZVJhbmdlLmRhdGVGcm9tKS52YWx1ZU9mKCkpICpcbiAgICAgICAgICAxMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpbnRlcnZhbEluTXMgPSBJTlRFUlZBTFMuZmluZChpID0+IGkuaWQgPT09IGludGVydmFsKS50aW1lc3BhbkluTXM7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gaW50ZXJ2YWxJbk1zO1xuICB9XG5cbiAgZ2V0QWdncmVnYXRlZFNlcmllcyhhZ2dyZWdhdGVkRGF0YXBvaW50czogRHBXaXRoVmFsdWVzW10pOiBTZXJpZXNPcHRpb25bXSB7XG4gICAgY29uc3Qgc2VyaWVzOiBTZXJpZXNPcHRpb25bXSA9IFtdO1xuICAgIGFnZ3JlZ2F0ZWREYXRhcG9pbnRzLmZvckVhY2goKGRwLCBpZHgpID0+IHtcbiAgICAgIGNvbnN0IHJlbmRlclR5cGU6IERhdGFwb2ludENoYXJ0UmVuZGVyVHlwZSA9IGRwLnJlbmRlclR5cGUgfHwgJ21pbic7XG4gICAgICBpZiAocmVuZGVyVHlwZSA9PT0gJ2FyZWEnKSB7XG4gICAgICAgIHNlcmllcy5wdXNoKHRoaXMuZ2V0U2luZ2xlU2VyaWVzKGRwLCAnbWluJywgaWR4LCB0cnVlLCAnYWdncicpKTtcbiAgICAgICAgc2VyaWVzLnB1c2godGhpcy5nZXRTaW5nbGVTZXJpZXMoZHAsICdtYXgnLCBpZHgsIHRydWUsICdhZ2dyJykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VyaWVzLnB1c2godGhpcy5nZXRTaW5nbGVTZXJpZXMoZHAsIHJlbmRlclR5cGUsIGlkeCwgZmFsc2UsICdhZ2dyJykpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc2VyaWVzLmZvckVhY2goKHM6IGFueSkgPT4ge1xuICAgICAgcy5kYXRhcG9pbnRJZCA9ICdhZ2dyZWdhdGVkJztcbiAgICAgIHMudHlwZU9mU2VyaWVzID0gJ2Zha2UnO1xuICAgICAgcy5pdGVtU3R5bGUgPSB7XG4gICAgICAgIC4uLnMuaXRlbVN0eWxlLFxuICAgICAgICBvcGFjaXR5OiAwXG4gICAgICB9O1xuICAgICAgcy5saW5lU3R5bGUgPSB7XG4gICAgICAgIC4uLnMubGluZVN0eWxlLFxuICAgICAgICBvcGFjaXR5OiAwXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIFtzZXJpZXNbMF1dO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZ2V0IHRoZSBzZXJpZXMgZm9yIGFsYXJtcyBhbmQgZXZlbnRzLlxuICAgKiBAcGFyYW0gZHAgLSBUaGUgZGF0YSBwb2ludC5cbiAgICogQHBhcmFtIHJlbmRlclR5cGUgLSBUaGUgcmVuZGVyIHR5cGUuXG4gICAqIEBwYXJhbSBpc01pbk1heENoYXJ0IC0gSWYgdGhlIGNoYXJ0IGlzIG1pbiBtYXggY2hhcnQuXG4gICAqIEBwYXJhbSBpdGVtcyAtIEFsbCBhbGFybXMgb3IgZXZlbnRzIHdoaWNoIHNob3VsZCBiZSBkaXNwbGF5ZWQgb24gdGhlIGNoYXJ0LlxuICAgKiBAcGFyYW0gaXRlbVR5cGUgLSBUaGUgaXRlbSB0eXBlLlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgaWQgb2YgdGhlIGRldmljZVxuICAgKi9cbiAgZ2V0QWxhcm1PckV2ZW50U2VyaWVzKFxuICAgIGRwOiBEcFdpdGhWYWx1ZXMsXG4gICAgcmVuZGVyVHlwZTogRGF0YXBvaW50Q2hhcnRSZW5kZXJUeXBlLFxuICAgIGlzTWluTWF4Q2hhcnQgPSBmYWxzZSxcbiAgICBpdGVtczogSUFsYXJtW10gfCBJRXZlbnRbXSA9IFtdLFxuICAgIGl0ZW1UeXBlOiAnYWxhcm0nIHwgJ2V2ZW50JyA9ICdhbGFybScsXG4gICAgZGlzcGxheU9wdGlvbnMgPSB7IGRpc3BsYXlNYXJrZWRMaW5lOiB0cnVlLCBkaXNwbGF5TWFya2VkUG9pbnQ6IHRydWUgfSxcbiAgICBpZD86IHN0cmluZyB8IG51bWJlcixcbiAgICBpZHg/OiBudW1iZXIsXG4gICAgcmVhbHRpbWU/OiBib29sZWFuXG4gICk6IEN1c3RvbVNlcmllc09wdGlvbnNbXSB7XG4gICAgaWYgKCFpdGVtcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBpZiAoIWRpc3BsYXlPcHRpb25zLmRpc3BsYXlNYXJrZWRMaW5lICYmICFkaXNwbGF5T3B0aW9ucy5kaXNwbGF5TWFya2VkUG9pbnQpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICAvL2ZpbHRlciBpdGVtcyB0aGF0IGFyZSBub3QgX19oaWRkZW5cbiAgICBjb25zdCBmaWx0ZXJlZEl0ZW1zOiBJQWxhcm1bXSB8IElFdmVudFtdID0gaXRlbXMuZmlsdGVyKGl0ZW0gPT4gIWl0ZW1bJ19faGlkZGVuJ10pO1xuICAgIGNvbnN0IGl0ZW1zQnlUeXBlID0gdGhpcy5ncm91cEJ5VHlwZShmaWx0ZXJlZEl0ZW1zLCAndHlwZScpO1xuICAgIGNvbnN0IGlzQWxhcm0gPSBpdGVtVHlwZSA9PT0gJ2FsYXJtJztcblxuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhpdGVtc0J5VHlwZSkuZmxhdE1hcChcbiAgICAgIChbdHlwZSwgaXRlbXNPZlR5cGVdOiBbc3RyaW5nLCAoSUFsYXJtIHwgSUV2ZW50KVtdXSkgPT4ge1xuICAgICAgICAvLyBNYWluIHNlcmllcyBkYXRhXG4gICAgICAgIGNvbnN0IG1haW5EYXRhID0gaXRlbXNPZlR5cGUubWFwKGl0ZW0gPT4gW2l0ZW0uY3JlYXRpb25UaW1lLCBudWxsLCAnbWFya0xpbmVGbGFnJ10pO1xuICAgICAgICAvLyBJcyBhIHNwZWNpZmljIGRhdGFwb2ludCB0ZW1wbGF0ZSBzZWxlY3RlZCBmb3IgdGhpcyBhbGFybS9ldmVudCB0eXBlP1xuICAgICAgICBsZXQgaXNEcFRlbXBsYXRlU2VsZWN0ZWQgPSBmYWxzZTtcblxuICAgICAgICAvLyBNYXJrUG9pbnQgZGF0YVxuICAgICAgICBjb25zdCBtYXJrUG9pbnREYXRhID0gaXRlbXNPZlR5cGUucmVkdWNlPE1hcmtQb2ludERhdGFbXT4oKGFjYywgaXRlbSkgPT4ge1xuICAgICAgICAgIGlzRHBUZW1wbGF0ZVNlbGVjdGVkID1cbiAgICAgICAgICAgIGl0ZW1bJ3NlbGVjdGVkRGF0YXBvaW50J10gJiZcbiAgICAgICAgICAgIGRwWydfX3RhcmdldCddICYmXG4gICAgICAgICAgICBpdGVtWydzZWxlY3RlZERhdGFwb2ludCddWydmcmFnbWVudCddID09PSBkcFsnZnJhZ21lbnQnXSAmJlxuICAgICAgICAgICAgaXRlbVsnc2VsZWN0ZWREYXRhcG9pbnQnXVsnc2VyaWVzJ10gPT09IGRwWydzZXJpZXMnXSAmJlxuICAgICAgICAgICAgaXRlbVsnc2VsZWN0ZWREYXRhcG9pbnQnXVsndGFyZ2V0J10gPT09IGRwWydfX3RhcmdldCddWydpZCddO1xuICAgICAgICAgIGlmIChkcC5fX3RhcmdldD8uaWQgPT09IGl0ZW0uc291cmNlLmlkKSB7XG4gICAgICAgICAgICBjb25zdCBpc0NsZWFyZWQgPSBpc0FsYXJtICYmIGl0ZW0uc3RhdHVzID09PSBBbGFybVN0YXR1cy5DTEVBUkVEO1xuICAgICAgICAgICAgY29uc3QgaXNFdmVudCA9ICFpc0FsYXJtO1xuICAgICAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQodGhpcy5jcmVhdGVNYXJrUG9pbnQoaXRlbSwgZHAsIGlzQ2xlYXJlZCwgaXNFdmVudCwgcmVhbHRpbWUpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFpdGVtLmNyZWF0aW9uVGltZSkge1xuICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYWNjLmNvbmNhdChbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb29yZDogW2l0ZW0uY3JlYXRpb25UaW1lLCBudWxsXSxcbiAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICAgICAgaXRlbVR5cGU6IGl0ZW0udHlwZSxcbiAgICAgICAgICAgICAgICBpdGVtU3R5bGU6IHsgY29sb3I6IGl0ZW1bJ2NvbG9yJ10gfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIFtdKTtcblxuICAgICAgICAvLyBDb25zdHJ1Y3Qgc2VyaWVzIHdpdGggbWFya1BvaW50XG4gICAgICAgIGNvbnN0IHNlcmllc1dpdGhNYXJrUG9pbnQgPSB7XG4gICAgICAgICAgaWQ6IGAke3R5cGV9LyR7ZHAuX190YXJnZXQ/LmlkfSske2lkID8gaWQgOiAnJ30tbWFya1BvaW50YCxcbiAgICAgICAgICBuYW1lOiBgJHt0eXBlfS1tYXJrUG9pbnRgLFxuICAgICAgICAgIHR5cGVPZlNlcmllczogaXRlbVR5cGUsXG4gICAgICAgICAgZGF0YTogbWFpbkRhdGEsXG4gICAgICAgICAgaXNEcFRlbXBsYXRlU2VsZWN0ZWQsXG4gICAgICAgICAgcG9zaXRpb246ICdib3R0b20nLFxuICAgICAgICAgIHNpbGVudDogdHJ1ZSxcbiAgICAgICAgICBtYXJrUG9pbnQ6IHtcbiAgICAgICAgICAgIHNob3dTeW1ib2w6IHRydWUsXG4gICAgICAgICAgICBzeW1ib2xLZWVwQXNwZWN0OiB0cnVlLFxuICAgICAgICAgICAgZGF0YTogbWFya1BvaW50RGF0YVxuICAgICAgICAgIH0sXG4gICAgICAgICAgeUF4aXNJbmRleDogaWR4LFxuICAgICAgICAgIC4uLnRoaXMuY2hhcnRUeXBlc1NlcnZpY2UuZ2V0U2VyaWVzT3B0aW9ucyhkcCwgaXNNaW5NYXhDaGFydCwgcmVuZGVyVHlwZSlcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBtYXJrTGluZURhdGEgPSB0aGlzLmNyZWF0ZU1hcmtMaW5lKGl0ZW1zT2ZUeXBlKTtcblxuICAgICAgICAvLyBDb25zdHJ1Y3Qgc2VyaWVzIHdpdGggbWFya0xpbmVcbiAgICAgICAgY29uc3Qgc2VyaWVzV2l0aE1hcmtMaW5lID0ge1xuICAgICAgICAgIGlkOiBgJHt0eXBlfS8ke2RwLl9fdGFyZ2V0Py5pZH0rJHtpZCA/IGlkIDogJyd9LW1hcmtMaW5lYCxcbiAgICAgICAgICBuYW1lOiBgJHt0eXBlfS1tYXJrTGluZWAsXG4gICAgICAgICAgdHlwZU9mU2VyaWVzOiBpdGVtVHlwZSxcbiAgICAgICAgICBpc0RwVGVtcGxhdGVTZWxlY3RlZCxcbiAgICAgICAgICBkYXRhOiBtYWluRGF0YSxcbiAgICAgICAgICBtYXJrTGluZToge1xuICAgICAgICAgICAgc2hvd1N5bWJvbDogZmFsc2UsXG4gICAgICAgICAgICBzeW1ib2w6IFsnbm9uZScsICdub25lJ10sIC8vIG5vIHN5bWJvbCBhdCB0aGUgc3RhcnQvZW5kIG9mIHRoZSBsaW5lXG4gICAgICAgICAgICBkYXRhOiBtYXJrTGluZURhdGFcbiAgICAgICAgICB9LFxuICAgICAgICAgIC4uLnRoaXMuY2hhcnRUeXBlc1NlcnZpY2UuZ2V0U2VyaWVzT3B0aW9ucyhkcCwgaXNNaW5NYXhDaGFydCwgcmVuZGVyVHlwZSlcbiAgICAgICAgfTtcblxuICAgICAgICAvL2RlcGVuZGluZyBvbiB0aGUgb3B0aW9ucyByZXR1cm4gb25seSB0aGUgcmVxdWlyZWQgc2VyaWVzXG4gICAgICAgIGlmIChkaXNwbGF5T3B0aW9ucy5kaXNwbGF5TWFya2VkTGluZSAmJiBkaXNwbGF5T3B0aW9ucy5kaXNwbGF5TWFya2VkUG9pbnQpIHtcbiAgICAgICAgICByZXR1cm4gW3Nlcmllc1dpdGhNYXJrTGluZSwgc2VyaWVzV2l0aE1hcmtQb2ludF07XG4gICAgICAgIH0gZWxzZSBpZiAoZGlzcGxheU9wdGlvbnMuZGlzcGxheU1hcmtlZExpbmUpIHtcbiAgICAgICAgICByZXR1cm4gW3Nlcmllc1dpdGhNYXJrTGluZV07XG4gICAgICAgIH0gZWxzZSBpZiAoZGlzcGxheU9wdGlvbnMuZGlzcGxheU1hcmtlZFBvaW50KSB7XG4gICAgICAgICAgcmV0dXJuIFtzZXJpZXNXaXRoTWFya1BvaW50XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICkgYXMgQ3VzdG9tU2VyaWVzT3B0aW9uc1tdO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZ2V0IHRvb2x0aXAgZm9ybWF0dGVyIGZvciBhbGFybXMgYW5kIGV2ZW50cy5cbiAgICogQHBhcmFtIHRvb2x0aXBQYXJhbXMgLSBUaGUgdG9vbHRpcCBwYXJhbWV0ZXJzLlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZGF0YS5cbiAgICogQHBhcmFtIGFsbEV2ZW50cyAtIEFsbCBldmVudHMuXG4gICAqIEBwYXJhbSBhbGxBbGFybXMgLSBBbGwgYWxhcm1zLlxuICAgKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIHN0cmluZyBmb3IgdGhlIHRvb2x0aXAuXG4gICAqL1xuICBnZXRUb29sdGlwRm9ybWF0dGVyRm9yQWxhcm1BbmRFdmVudHMoXG4gICAgdG9vbHRpcFBhcmFtczogQ2FsbGJhY2tEYXRhUGFyYW1zLFxuICAgIHBhcmFtczogeyBkYXRhOiB7IGl0ZW1UeXBlOiBzdHJpbmcgfSB9LFxuICAgIGFsbEV2ZW50czogSUV2ZW50W10sXG4gICAgYWxsQWxhcm1zOiBJQWxhcm1bXVxuICApOiBzdHJpbmcge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh0b29sdGlwUGFyYW1zKSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBjb25zdCBYQXhpc1ZhbHVlOiBzdHJpbmcgPSB0b29sdGlwUGFyYW1zWzBdLmRhdGFbMF07XG4gICAgY29uc3QgWUF4aXNSZWFkaW5nczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBhbGxTZXJpZXMgPSB0aGlzLmVjaGFydHNJbnN0YW5jZT8uZ2V0T3B0aW9uKClbJ3NlcmllcyddIGFzIEN1c3RvbVNlcmllc09wdGlvbnNbXTtcblxuICAgIC8vIGZpbHRlciBvdXQgYWxhcm0gYW5kIGV2ZW50IHNlcmllc1xuICAgIGNvbnN0IGFsbERhdGFQb2ludFNlcmllcyA9IGFsbFNlcmllcy5maWx0ZXIoXG4gICAgICBzZXJpZXMgPT4gc2VyaWVzWyd0eXBlT2ZTZXJpZXMnXSAhPT0gJ2FsYXJtJyAmJiBzZXJpZXNbJ3R5cGVPZlNlcmllcyddICE9PSAnZXZlbnQnXG4gICAgKTtcblxuICAgIHRoaXMucHJvY2Vzc1NlcmllcyhhbGxEYXRhUG9pbnRTZXJpZXMsIFhBeGlzVmFsdWUsIFlBeGlzUmVhZGluZ3MpO1xuXG4gICAgLy8gZmluZCBldmVudCBhbmQgYWxhcm0gb2YgdGhlIHNhbWUgdHlwZSBhcyB0aGUgaG92ZXJlZCBtYXJrZWRMaW5lIG9yIG1hcmtlZFBvaW50XG4gICAgY29uc3QgZXZlbnQgPSBhbGxFdmVudHMuZmluZChlID0+IGUudHlwZSA9PT0gcGFyYW1zLmRhdGEuaXRlbVR5cGUpO1xuICAgIGNvbnN0IGFsYXJtID0gYWxsQWxhcm1zLmZpbmQoYSA9PiBhLnR5cGUgPT09IHBhcmFtcy5kYXRhLml0ZW1UeXBlKTtcblxuICAgIGxldCB2YWx1ZSA9ICcnO1xuICAgIGlmIChldmVudCkge1xuICAgICAgdmFsdWUgPSB0aGlzLnByb2Nlc3NFdmVudChldmVudCk7XG4gICAgfVxuXG4gICAgaWYgKGFsYXJtKSB7XG4gICAgICB0aGlzLnByb2Nlc3NBbGFybShhbGFybSkudGhlbihhbGFybVZhbCA9PiB7XG4gICAgICAgIHZhbHVlID0gYWxhcm1WYWw7XG4gICAgICAgIFlBeGlzUmVhZGluZ3MucHVzaCh2YWx1ZSk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmVjaGFydHNJbnN0YW5jZT8uZ2V0T3B0aW9uKCkgYXMgRUNoYXJ0c09wdGlvbjtcbiAgICAgICAgaWYgKCFvcHRpb25zLnRvb2x0aXAgfHwgIUFycmF5LmlzQXJyYXkob3B0aW9ucy50b29sdGlwKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cGRhdGVkT3B0aW9uczogUGFydGlhbDxTZXJpZXNPcHRpb24+ID0ge1xuICAgICAgICAgIHRvb2x0aXA6IG9wdGlvbnNbJ3Rvb2x0aXAnXVswXVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICghdXBkYXRlZE9wdGlvbnMudG9vbHRpcCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVkT3B0aW9ucy50b29sdGlwLmZvcm1hdHRlciA9IGA8ZGl2IHN0eWxlPVwid2lkdGg6ICR7dGhpcy5UT09MVElQX1dJRFRIfXB4XCI+JHtZQXhpc1JlYWRpbmdzLmpvaW4oJycpfTwvZGl2PmA7XG4gICAgICAgIHVwZGF0ZWRPcHRpb25zLnRvb2x0aXAudHJhbnNpdGlvbkR1cmF0aW9uID0gMDtcbiAgICAgICAgdXBkYXRlZE9wdGlvbnMudG9vbHRpcC5wb3NpdGlvbiA9IHRoaXMudG9vbHRpcFBvc2l0aW9uKCk7XG4gICAgICAgIHRoaXMuZWNoYXJ0c0luc3RhbmNlPy5zZXRPcHRpb24odXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9KTtcbiAgICB9XG4gICAgWUF4aXNSZWFkaW5ncy5wdXNoKHZhbHVlKTtcblxuICAgIHJldHVybiBgPGRpdiBzdHlsZT1cIndpZHRoOiAzMDBweFwiPiR7WUF4aXNSZWFkaW5ncy5qb2luKCcnKX08L2Rpdj5gO1xuICB9XG5cbiAgcHJpdmF0ZSB0b29sdGlwUG9zaXRpb24oKTogVG9vbHRpcFBvc2l0aW9uQ2FsbGJhY2sge1xuICAgIGxldCBsYXN0UG9zaXRpb25PZlRvb2x0aXA6IFBhcnRpYWw8UmVjb3JkPCd0b3AnIHwgJ2JvdHRvbScgfCAnbGVmdCcgfCAncmlnaHQnLCBudW1iZXI+PiA9IHt9O1xuICAgIGlmICh0aGlzLnRvb2x0aXBQb3NpdGlvbkNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy50b29sdGlwUG9zaXRpb25DYWxsYmFjaztcbiAgICB9XG5cbiAgICB0aGlzLnRvb2x0aXBQb3NpdGlvbkNhbGxiYWNrID0gKFxuICAgICAgcG9pbnQ6IFtudW1iZXIsIG51bWJlcl0sIC8vIHBvc2l0aW9uIG9mIG1vdXNlIGluIGNoYXJ0IFtYLCBZXTsgMCwwIGlzIHRvcCBsZWZ0IGNvcm5lclxuICAgICAgXzogYW55LCAvLyB0b29sdGlwIGRhdGFcbiAgICAgIGRvbTogSFRNTEVsZW1lbnQgfCB1bmtub3duLCAvLyB0b29sdGlwIGVsZW1lbnRcbiAgICAgIF9fOiBhbnksXG4gICAgICBzaXplOiB7XG4gICAgICAgIGNvbnRlbnRTaXplOiBbbnVtYmVyLCBudW1iZXJdOyAvLyBzaXplIG9mIHRvb2x0aXBcbiAgICAgICAgdmlld1NpemU6IFtudW1iZXIsIG51bWJlcl07XG4gICAgICB9IHwgbnVsbCAvLyBzaXplIG9mIGNoYXJ0XG4gICAgKSA9PiB7XG4gICAgICBjb25zdCBvZmZzZXQgPSAxMDtcbiAgICAgIGNvbnN0IFttb3VzZVgsIG1vdXNlWV0gPSBwb2ludDtcbiAgICAgIGNvbnN0IGNoYXJ0V2lkdGggPSBzaXplPy52aWV3U2l6ZVswXSB8fCAwO1xuICAgICAgY29uc3QgY2hhcnRIZWlnaHQgPSBzaXplPy52aWV3U2l6ZVsxXSB8fCAwO1xuICAgICAgY29uc3QgdG9vbHRpcFdpZHRoID0gc2l6ZT8uY29udGVudFNpemVbMF0gfHwgMDtcbiAgICAgIGNvbnN0IHRvb2x0aXBIZWlnaHQgPSBzaXplPy5jb250ZW50U2l6ZVsxXSB8fCAwO1xuICAgICAgY29uc3QgdG9vbHRpcFJlY3QgPSAoZG9tIGFzIEhUTUxFbGVtZW50KT8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCB0b29sdGlwT3ZlcmZsb3dzQm90dG9tRWRnZSA9IHRvb2x0aXBSZWN0LmJvdHRvbSA+IHdpbmRvdy5pbm5lckhlaWdodDtcblxuICAgICAgY29uc3QgdG9vbHRpcE92ZXJmbG93c1JpZ2h0RWRnZSA9IHRvb2x0aXBSZWN0LnJpZ2h0ID4gd2luZG93LmlubmVyV2lkdGg7XG5cbiAgICAgIGNvbnN0IHRvb2x0aXBXb3VsZE92ZXJmbG93Qm90dG9tRWRnZU9uUG9zaXRpb25DaGFuZ2UgPVxuICAgICAgICAhbGFzdFBvc2l0aW9uT2ZUb29sdGlwLnRvcCAmJlxuICAgICAgICB0b29sdGlwUmVjdC5ib3R0b20gKyAyICogb2Zmc2V0ICsgdG9vbHRpcEhlaWdodCA+IHdpbmRvdy5pbm5lckhlaWdodDtcblxuICAgICAgY29uc3QgdG9vbHRpcFdvdWxkT3ZlcmZsb3dSaWdodEVkZ2VPblBvc2l0aW9uQ2hhbmdlID1cbiAgICAgICAgIWxhc3RQb3NpdGlvbk9mVG9vbHRpcC5sZWZ0ICYmXG4gICAgICAgIHRvb2x0aXBSZWN0LnJpZ2h0ICsgMiAqIG9mZnNldCArIHRvb2x0aXBXaWR0aCA+IHdpbmRvdy5pbm5lcldpZHRoO1xuXG4gICAgICBsZXQgdmVydGljYWxQb3NpdGlvbjogeyB0b3A6IG51bWJlciB9IHwgeyBib3R0b206IG51bWJlciB9ID0ge1xuICAgICAgICB0b3A6IG1vdXNlWSArIG9mZnNldFxuICAgICAgfTtcbiAgICAgIGxldCBob3Jpem9udGFsUG9zaXRpb246IHsgbGVmdDogbnVtYmVyIH0gfCB7IHJpZ2h0OiBudW1iZXIgfSA9IHtcbiAgICAgICAgbGVmdDogbW91c2VYICsgb2Zmc2V0XG4gICAgICB9O1xuXG4gICAgICBpZiAodG9vbHRpcE92ZXJmbG93c0JvdHRvbUVkZ2UgfHwgdG9vbHRpcFdvdWxkT3ZlcmZsb3dCb3R0b21FZGdlT25Qb3NpdGlvbkNoYW5nZSkge1xuICAgICAgICB2ZXJ0aWNhbFBvc2l0aW9uID0ge1xuICAgICAgICAgIGJvdHRvbTogY2hhcnRIZWlnaHQgLSBtb3VzZVkgKyBvZmZzZXRcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmICh0b29sdGlwT3ZlcmZsb3dzUmlnaHRFZGdlIHx8IHRvb2x0aXBXb3VsZE92ZXJmbG93UmlnaHRFZGdlT25Qb3NpdGlvbkNoYW5nZSkge1xuICAgICAgICBob3Jpem9udGFsUG9zaXRpb24gPSB7XG4gICAgICAgICAgcmlnaHQ6IGNoYXJ0V2lkdGggLSBtb3VzZVggKyBvZmZzZXRcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgbGFzdFBvc2l0aW9uT2ZUb29sdGlwID0ge1xuICAgICAgICAuLi52ZXJ0aWNhbFBvc2l0aW9uLFxuICAgICAgICAuLi5ob3Jpem9udGFsUG9zaXRpb25cbiAgICAgIH07XG4gICAgICByZXR1cm4gbGFzdFBvc2l0aW9uT2ZUb29sdGlwO1xuICAgIH07XG4gICAgcmV0dXJuIHRoaXMudG9vbHRpcFBvc2l0aW9uQ2FsbGJhY2s7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBhZGQgdGhlIGRhdGEgcG9pbnQgaW5mbyB0byB0aGUgdG9vbHRpcC5cbiAgICogQHBhcmFtIGFsbERhdGFQb2ludFNlcmllcyAtIEFsbCB0aGUgZGF0YSBwb2ludCBzZXJpZXMuXG4gICAqIEBwYXJhbSBYQXhpc1ZhbHVlIC0gVGhlIFggQXhpcyB2YWx1ZS5cbiAgICogQHBhcmFtIFlBeGlzUmVhZGluZ3MgLSBUaGUgWSBBeGlzIHJlYWRpbmdzLlxuICAgKi9cbiAgcHJpdmF0ZSBwcm9jZXNzU2VyaWVzKFxuICAgIGFsbERhdGFQb2ludFNlcmllczogQ3VzdG9tU2VyaWVzT3B0aW9uc1tdLFxuICAgIFhBeGlzVmFsdWU6IHN0cmluZyxcbiAgICBZQXhpc1JlYWRpbmdzOiBzdHJpbmdbXVxuICApOiB2b2lkIHtcbiAgICBhbGxEYXRhUG9pbnRTZXJpZXMuZm9yRWFjaCgoc2VyaWVzOiBhbnkpID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9ICcnO1xuICAgICAgaWYgKHNlcmllcy5pZC5lbmRzV2l0aCgnL21pbicpKSB7XG4gICAgICAgIHZhbHVlID0gdGhpcy5wcm9jZXNzTWluU2VyaWVzKHNlcmllcywgYWxsRGF0YVBvaW50U2VyaWVzLCBYQXhpc1ZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoIXNlcmllcy5pZC5lbmRzV2l0aCgnL21heCcpKSB7XG4gICAgICAgIHZhbHVlID0gdGhpcy5wcm9jZXNzUmVndWxhclNlcmllcyhzZXJpZXMsIFhBeGlzVmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgWUF4aXNSZWFkaW5ncy5wdXNoKFxuICAgICAgICAgIGA8ZGl2IGNsYXNzPVwiZC1mbGV4IGEtaS1jZW50ZXIgcC1iLThcIj48c3BhbiBjbGFzcz0nZGx0LWM4eS1pY29uLWNpcmNsZSBtLXItNCcgc3R5bGU9J2NvbG9yOiAke3Nlcmllcy5pdGVtU3R5bGUuY29sb3J9Oyc+PC9zcGFuPmAgKyAvLyBjb2xvciBjaXJjbGVcbiAgICAgICAgICAgIGA8c3Ryb25nPiR7c2VyaWVzLmRhdGFwb2ludExhYmVsfTwvc3Ryb25nPjwvZGl2PmAgKyAvLyBuYW1lXG4gICAgICAgICAgICBgJHt2YWx1ZX1gIC8vIHNpbmdsZSB2YWx1ZSBvciBtaW4tbWF4IHJhbmdlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBwcm9jZXNzIHRoZSBtaW4gc2VyaWVzLlxuICAgKiBAcGFyYW0gc2VyaWVzIC0gVGhlIHNlcmllcy5cbiAgICogQHBhcmFtIGFsbERhdGFQb2ludFNlcmllcyAtIEFsbCB0aGUgZGF0YSBwb2ludCBzZXJpZXMuXG4gICAqIEBwYXJhbSBYQXhpc1ZhbHVlIC0gVGhlIFggQXhpcyB2YWx1ZS5cbiAgICogQHJldHVybnMgVGhlIHByb2Nlc3NlZCB2YWx1ZS5cbiAgICovXG4gIHByaXZhdGUgcHJvY2Vzc01pblNlcmllcyhcbiAgICBzZXJpZXM6IGFueSxcbiAgICBhbGxEYXRhUG9pbnRTZXJpZXM6IEN1c3RvbVNlcmllc09wdGlvbnNbXSxcbiAgICBYQXhpc1ZhbHVlOiBzdHJpbmdcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBtaW5WYWx1ZSA9IHRoaXMuZmluZFZhbHVlRm9yRXhhY3RPckVhcmxpZXJUaW1lc3RhbXAoc2VyaWVzLmRhdGEsIFhBeGlzVmFsdWUpO1xuICAgIGlmICghbWluVmFsdWUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgY29uc3QgbWF4U2VyaWVzID0gYWxsRGF0YVBvaW50U2VyaWVzLmZpbmQocyA9PiBzWydpZCddID09PSBzZXJpZXMuaWQucmVwbGFjZSgnL21pbicsICcvbWF4JykpO1xuICAgIGNvbnN0IG1heFZhbHVlID0gdGhpcy5maW5kVmFsdWVGb3JFeGFjdE9yRWFybGllclRpbWVzdGFtcChcbiAgICAgIG1heFNlcmllcz8uWydkYXRhJ10gYXMgU2VyaWVzVmFsdWVbXSxcbiAgICAgIFhBeGlzVmFsdWVcbiAgICApO1xuICAgIHJldHVybiAoXG4gICAgICBgPGRpdiBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyIHNlcGFyYXRvci10b3AgcC10LTggcC1iLThcIj48bGFiZWwgY2xhc3M9XCJ0ZXh0LTEyIG0tci04IG0tYi0wXCI+JHt0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShtaW5WYWx1ZVswXSl9PC9sYWJlbD5gICtcbiAgICAgIGA8c3BhbiBjbGFzcz1cIm0tbC1hdXRvIHRleHQtMTJcIj4ke21pblZhbHVlWzFdfSDigJQgJHttYXhWYWx1ZT8uWzFdfWAgK1xuICAgICAgKHNlcmllcy5kYXRhcG9pbnRVbml0ID8gYCAke3Nlcmllcy5kYXRhcG9pbnRVbml0fWAgOiAnJykgK1xuICAgICAgYDwvc3Bhbj48L2Rpdj5gXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHByb2Nlc3MgdGhlIHJlZ3VsYXIgc2VyaWVzLlxuICAgKiBAcGFyYW0gc2VyaWVzIC0gVGhlIHNlcmllcy5cbiAgICogQHBhcmFtIFhBeGlzVmFsdWUgLSBUaGUgWCBBeGlzIHZhbHVlLlxuICAgKiBAcmV0dXJucyBUaGUgcHJvY2Vzc2VkIHZhbHVlLlxuICAgKi9cbiAgcHJpdmF0ZSBwcm9jZXNzUmVndWxhclNlcmllcyhzZXJpZXM6IGFueSwgWEF4aXNWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBzZXJpZXNWYWx1ZSA9IHRoaXMuZmluZFZhbHVlRm9yRXhhY3RPckVhcmxpZXJUaW1lc3RhbXAoc2VyaWVzLmRhdGEsIFhBeGlzVmFsdWUpO1xuICAgIGlmICghc2VyaWVzVmFsdWUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIGA8ZGl2IGNsYXNzPVwiZC1mbGV4IGEtaS1jZW50ZXIgcC10LTggcC1iLTggc2VwYXJhdG9yLXRvcFwiPmAgK1xuICAgICAgYDxsYWJlbCBjbGFzcz1cIm0tYi0wIG0tci04IHRleHQtMTJcIj4ke3RoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKFxuICAgICAgICBzZXJpZXNWYWx1ZVswXVxuICAgICAgKX08L2xhYmVsPjxzcGFuIGNsYXNzPVwibS1sLWF1dG8gdGV4dC0xMlwiPmAgK1xuICAgICAgc2VyaWVzVmFsdWVbMV0/LnRvU3RyaW5nKCkgK1xuICAgICAgKHNlcmllcy5kYXRhcG9pbnRVbml0ID8gYCAke3Nlcmllcy5kYXRhcG9pbnRVbml0fWAgOiAnJykgK1xuICAgICAgYDwvc3Bhbj48L2Rpdj5gXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHByb2Nlc3MgdGhlIGV2ZW50IHRvb2x0aXAuXG4gICAqIEBwYXJhbSBldmVudCAtIFRoZSBldmVudCBvYmplY3QuXG4gICAqIEByZXR1cm5zIFRoZSBwcm9jZXNzZWQgdmFsdWUuXG4gICAqL1xuICBwcml2YXRlIHByb2Nlc3NFdmVudChldmVudDogSUV2ZW50KTogc3RyaW5nIHtcbiAgICBsZXQgdmFsdWUgPSBgPHVsIGNsYXNzPVwibGlzdC11bnN0eWxlZCBzbWFsbCBzZXBhcmF0b3ItdG9wXCI+YDtcbiAgICB2YWx1ZSArPSBgPGxpIGNsYXNzPVwicC10LTQgcC1iLTQgZC1mbGV4IHNlcGFyYXRvci1ib3R0b20gdGV4dC1uby13cmFwXCI+PGxhYmVsIGNsYXNzPVwic21hbGwgbS1iLTAgbS1yLThcIj5FdmVudCB0eXBlPC9sYWJlbD48Y29kZSBjbGFzcz1cIm0tbC1hdXRvXCI+JHtldmVudC50eXBlfTwvY29kZT48L2xpPmA7XG4gICAgdmFsdWUgKz0gYDxsaSBjbGFzcz1cInAtdC00IHAtYi00IGQtZmxleCBzZXBhcmF0b3ItYm90dG9tIHRleHQtbm8td3JhcFwiPjxsYWJlbCBjbGFzcz1cInNtYWxsIG0tYi0wIG0tci04XCI+RXZlbnQgdGV4dDwvbGFiZWw+PHNwYW4gY2xhc3M9XCJtLWwtYXV0b1wiPiR7ZXZlbnQudGV4dH08c3Bhbj48L2xpPmA7XG4gICAgdmFsdWUgKz0gYDxsaSBjbGFzcz1cInAtdC00IHAtYi00IGQtZmxleCBzZXBhcmF0b3ItYm90dG9tIHRleHQtbm8td3JhcFwiPjxsYWJlbCBjbGFzcz1cInNtYWxsIG0tYi0wIG0tci04XCI+TGFzdCB1cGRhdGU8L2xhYmVsPjxzcGFuIGNsYXNzPVwibS1sLWF1dG9cIj4ke3RoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGV2ZW50WydsYXN0VXBkYXRlZCddKX08c3Bhbj48L2xpPmA7XG4gICAgdmFsdWUgKz0gYDwvdWw+YDtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBwcm9jZXNzIHRoZSBhbGFybSB0b29sdGlwLlxuICAgKiBAcGFyYW0gYWxhcm0gLSBUaGUgYWxhcm0gb2JqZWN0LlxuICAgKiBAcmV0dXJucyBUaGUgcHJvY2Vzc2VkIHZhbHVlLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzQWxhcm0oYWxhcm06IElBbGFybSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgbGV0IHZhbHVlID0gYDx1bCBjbGFzcz1cImxpc3QtdW5zdHlsZWQgc21hbGwgc2VwYXJhdG9yLXRvcCBtLTBcIj5gO1xuICAgIHZhbHVlICs9IGA8bGkgY2xhc3M9XCJwLXQtNCBwLWItNCBkLWZsZXggYS1pLWNlbnRlciBzZXBhcmF0b3ItYm90dG9tIHRleHQtbm8td3JhcFwiPjxsYWJlbCBjbGFzcz1cInRleHQtbGFiZWwtc21hbGwgbS1iLTAgbS1yLThcIj5BbGFybSBTZXZlcml0eTwvbGFiZWw+YDtcbiAgICB2YWx1ZSArPSBgPHNwYW4gY2xhc3M9XCJzbWFsbCBkLWlubGluZS1mbGV4IGEtaS1jZW50ZXIgZ2FwLTQgbS1sLWF1dG9cIj48aSBjbGFzcz1cInN0cm9rZWQtaWNvbiBpY29uLTE0IHN0YXR1cyBkbHQtYzh5LWljb24tJHt0aGlzLnNldmVyaXR5SWNvblBpcGUudHJhbnNmb3JtKGFsYXJtLnNldmVyaXR5KX0gJHthbGFybS5zZXZlcml0eS50b0xvd2VyQ2FzZSgpfVwiID4gPC9pPiAke3RoaXMuc2V2ZXJpdHlMYWJlbFBpcGUudHJhbnNmb3JtKGFsYXJtLnNldmVyaXR5KX0gPC9zcGFuPjwvbGk+YDtcbiAgICB2YWx1ZSArPSBgPGxpIGNsYXNzPVwicC10LTQgcC1iLTQgZC1mbGV4IHNlcGFyYXRvci1ib3R0b20gdGV4dC1uby13cmFwXCI+PGxhYmVsIGNsYXNzPVwidGV4dC1sYWJlbC1zbWFsbCBtLWItMCBtLXItOFwiPkFsYXJtIFR5cGU8L2xhYmVsPjxzcGFuIGNsYXNzPVwic21hbGwgbS1sLWF1dG9cIj48Y29kZT4ke2FsYXJtLnR5cGV9PC9jb2RlPjwvc3Bhbj48L2xpPmA7XG4gICAgdmFsdWUgKz0gYDxsaSBjbGFzcz1cInAtdC00IHAtYi00IGQtZmxleCBzZXBhcmF0b3ItYm90dG9tIHRleHQtbm8td3JhcFwiPjxsYWJlbCBjbGFzcz1cInRleHQtbGFiZWwtc21hbGwgbS1iLTAgbS1yLThcIj5NZXNzYWdlPC9sYWJlbD48c3BhbiBjbGFzcz1cInNtYWxsIG0tbC1hdXRvXCIgc3R5bGU9XCJvdmVyZmxvdzogaGlkZGVuOyB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcIiB0aXRsZT1cIiR7YWxhcm0udGV4dH1cIj4ke2FsYXJtLnRleHR9PC9zcGFuPjwvbGk+YDtcbiAgICB2YWx1ZSArPSBgPGxpIGNsYXNzPVwicC10LTQgcC1iLTQgZC1mbGV4IHNlcGFyYXRvci1ib3R0b20gdGV4dC1uby13cmFwXCI+PGxhYmVsIGNsYXNzPVwidGV4dC1sYWJlbC1zbWFsbCBtLWItMCBtLXItOFwiPkxhc3QgVXBkYXRlZDwvbGFiZWw+PHNwYW4gY2xhc3M9XCJzbWFsbCBtLWwtYXV0b1wiPiR7dGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oYWxhcm1bJ2xhc3RVcGRhdGVkJ10pfTwvc3Bhbj48L2xpPmA7XG4gICAgY29uc3QgZXhpc3RzID0gYXdhaXQgdGhpcy5hbGFybVJvdXRlRXhpc3RzKCk7XG4gICAgaWYgKGV4aXN0cykge1xuICAgICAgY29uc3QgY3VycmVudFVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgICAgY29uc3QgYmFzZVVybEluZGV4ID0gY3VycmVudFVybC5pbmRleE9mKElOREVYX0hUTUwpO1xuICAgICAgY29uc3QgYmFzZVVybCA9IGN1cnJlbnRVcmwuc3Vic3RyaW5nKDAsIGJhc2VVcmxJbmRleCArIElOREVYX0hUTUwubGVuZ3RoKTtcbiAgICAgIHZhbHVlICs9IGA8bGkgY2xhc3M9XCJwLXQtNCBwLWItNCBkLWZsZXggc2VwYXJhdG9yLWJvdHRvbSB0ZXh0LW5vLXdyYXBcIj48bGFiZWwgY2xhc3M9XCJ0ZXh0LWxhYmVsLXNtYWxsIG0tYi0wIG0tci04XCI+TGluazwvbGFiZWw+PHNwYW4gY2xhc3M9XCJzbWFsbCBtLWwtYXV0b1wiPjxhIGhyZWY9XCIke2Jhc2VVcmx9Iy9hbGFybXMvJHthbGFybS5pZH1cIj5BbGFybSBEZXRhaWxzPC9hPjwvc3Bhbj48L2xpPmA7XG4gICAgfVxuICAgIHZhbHVlICs9IGA8bGkgY2xhc3M9XCJwLXQtNCBwLWItNCBkLWZsZXggdGV4dC1uby13cmFwXCI+PGxhYmVsIGNsYXNzPVwidGV4dC1sYWJlbC1zbWFsbCBtLWItMCBtLXItOFwiPkFsYXJtIGNvdW50PC9sYWJlbD48c3BhbiBjbGFzcz1cInNtYWxsIG0tbC1hdXRvXCI+PHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1pbmZvXCI+JHthbGFybS5jb3VudH08L3NwYW4+PC9zcGFuPjwvbGk+YDtcbiAgICB2YWx1ZSArPSBgPC91bD5gO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYWxhcm1Sb3V0ZUV4aXN0cygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBleGlzdHMgPSB0aGlzLnJvdXRlci5jb25maWcuc29tZShyb3V0ZSA9PiB7XG4gICAgICByZXR1cm4gYCR7cm91dGUucGF0aH1gID09PSAnYWxhcm1zJztcbiAgICB9KTtcbiAgICByZXR1cm4gZXhpc3RzO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDaGFydFNlcmllcyhcbiAgICBkYXRhcG9pbnRzV2l0aFZhbHVlczogRHBXaXRoVmFsdWVzW10sXG4gICAgZXZlbnRzOiBJRXZlbnRbXSxcbiAgICBhbGFybXM6IElBbGFybVtdLFxuICAgIGRpc3BsYXlPcHRpb25zOiB7IGRpc3BsYXlNYXJrZWRMaW5lOiBib29sZWFuOyBkaXNwbGF5TWFya2VkUG9pbnQ6IGJvb2xlYW4gfVxuICApOiBDdXN0b21TZXJpZXNPcHRpb25zW10gfCBTZXJpZXNPcHRpb25bXSB7XG4gICAgY29uc3Qgc2VyaWVzOiBTZXJpZXNPcHRpb25bXSA9IFtdO1xuICAgIGxldCBldmVudFNlcmllczogQ3VzdG9tU2VyaWVzT3B0aW9uc1tdID0gW107XG4gICAgbGV0IGFsYXJtU2VyaWVzOiBDdXN0b21TZXJpZXNPcHRpb25zW10gPSBbXTtcbiAgICBkYXRhcG9pbnRzV2l0aFZhbHVlcy5mb3JFYWNoKChkcCwgaWR4KSA9PiB7XG4gICAgICBjb25zdCByZW5kZXJUeXBlOiBEYXRhcG9pbnRDaGFydFJlbmRlclR5cGUgPSBkcC5yZW5kZXJUeXBlIHx8ICdtaW4nO1xuICAgICAgaWYgKHJlbmRlclR5cGUgPT09ICdhcmVhJykge1xuICAgICAgICBzZXJpZXMucHVzaCh0aGlzLmdldFNpbmdsZVNlcmllcyhkcCwgJ21pbicsIGlkeCwgdHJ1ZSkpO1xuICAgICAgICBzZXJpZXMucHVzaCh0aGlzLmdldFNpbmdsZVNlcmllcyhkcCwgJ21heCcsIGlkeCwgdHJ1ZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VyaWVzLnB1c2godGhpcy5nZXRTaW5nbGVTZXJpZXMoZHAsIHJlbmRlclR5cGUsIGlkeCwgZmFsc2UpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3RXZlbnRTZXJpZXMgPSB0aGlzLmdldEFsYXJtT3JFdmVudFNlcmllcyhcbiAgICAgICAgZHAsXG4gICAgICAgIHJlbmRlclR5cGUsXG4gICAgICAgIGZhbHNlLFxuICAgICAgICBldmVudHMsXG4gICAgICAgICdldmVudCcsXG4gICAgICAgIGRpc3BsYXlPcHRpb25zLFxuICAgICAgICBudWxsLFxuICAgICAgICBpZHhcbiAgICAgICk7XG4gICAgICBjb25zdCBuZXdBbGFybVNlcmllcyA9IHRoaXMuZ2V0QWxhcm1PckV2ZW50U2VyaWVzKFxuICAgICAgICBkcCxcbiAgICAgICAgcmVuZGVyVHlwZSxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIGFsYXJtcyxcbiAgICAgICAgJ2FsYXJtJyxcbiAgICAgICAgZGlzcGxheU9wdGlvbnMsXG4gICAgICAgIG51bGwsXG4gICAgICAgIGlkeFxuICAgICAgKTtcbiAgICAgIGV2ZW50U2VyaWVzID0gWy4uLmV2ZW50U2VyaWVzLCAuLi5uZXdFdmVudFNlcmllc107XG4gICAgICBhbGFybVNlcmllcyA9IFsuLi5hbGFybVNlcmllcywgLi4ubmV3QWxhcm1TZXJpZXNdO1xuICAgIH0pO1xuICAgIGNvbnN0IGRlZHVwbGljYXRlRmlsdGVyQ2FsbGJhY2sgPSAoXG4gICAgICBvYmoxOiBDdXN0b21TZXJpZXNPcHRpb25zLFxuICAgICAgaTogbnVtYmVyLFxuICAgICAgYXJyOiBTZXJpZXNPcHRpb25bXVxuICAgICk6IG9iajEgaXMgQ3VzdG9tU2VyaWVzT3B0aW9ucyA9PiB7XG4gICAgICBjb25zdCBkdXBsaWNhdGVzID0gYXJyLmZpbHRlcihvYmoyID0+IG9iajFbJ2lkJ10gPT09IG9iajJbJ2lkJ10gJiYgaSAhPT0gYXJyLmluZGV4T2Yob2JqMikpO1xuXG4gICAgICBpZiAoZHVwbGljYXRlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBvYmoxWydpc0RwVGVtcGxhdGVTZWxlY3RlZCddIGFzIGJvb2xlYW47XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICBjb25zdCBkZWR1cGxpY2F0ZUZpbHRlckNhbGxiYWNrRmFsbGJhY2sgPSAoXG4gICAgICBvYmoxOiBTZXJpZXNPcHRpb24sXG4gICAgICBpOiBudW1iZXIsXG4gICAgICBhcnI6IFNlcmllc09wdGlvbltdXG4gICAgKTogb2JqMSBpcyBTZXJpZXNPcHRpb24gPT4gYXJyLmZpbmRJbmRleChvYmoyID0+IG9iajJbJ2lkJ10gPT09IG9iajFbJ2lkJ10pID09PSBpO1xuXG4gICAgbGV0IGRlZHVwbGljYXRlZEV2ZW50cyA9IGV2ZW50U2VyaWVzLmZpbHRlcihkZWR1cGxpY2F0ZUZpbHRlckNhbGxiYWNrKTtcbiAgICBsZXQgZGVkdXBsaWNhdGVkQWxhcm1zID0gYWxhcm1TZXJpZXMuZmlsdGVyKGRlZHVwbGljYXRlRmlsdGVyQ2FsbGJhY2spO1xuICAgIGlmIChkZWR1cGxpY2F0ZWRBbGFybXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBkZWR1cGxpY2F0ZWRBbGFybXMgPSBhbGFybVNlcmllcy5maWx0ZXIoZGVkdXBsaWNhdGVGaWx0ZXJDYWxsYmFja0ZhbGxiYWNrKTtcbiAgICB9XG4gICAgaWYgKGRlZHVwbGljYXRlZEV2ZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIGRlZHVwbGljYXRlZEV2ZW50cyA9IGV2ZW50U2VyaWVzLmZpbHRlcihkZWR1cGxpY2F0ZUZpbHRlckNhbGxiYWNrRmFsbGJhY2spO1xuICAgIH1cbiAgICByZXR1cm4gWy4uLnNlcmllcywgLi4uZGVkdXBsaWNhdGVkRXZlbnRzLCAuLi5kZWR1cGxpY2F0ZWRBbGFybXNdO1xuICB9XG5cbiAgcHJpdmF0ZSBncm91cEJ5VHlwZShcbiAgICBpdGVtczogSUFsYXJtW10gfCBJRXZlbnRbXSxcbiAgICB0eXBlRmllbGQ6IHN0cmluZ1xuICApOiBSZWNvcmQ8c3RyaW5nLCBJQWxhcm1bXSB8IElFdmVudFtdPiB7XG4gICAgcmV0dXJuIGl0ZW1zLnJlZHVjZSgoZ3JvdXBlZCwgaXRlbSkgPT4ge1xuICAgICAgKGdyb3VwZWRbaXRlbVt0eXBlRmllbGRdXSA9IGdyb3VwZWRbaXRlbVt0eXBlRmllbGRdXSB8fCBbXSkucHVzaChpdGVtKTtcbiAgICAgIHJldHVybiBncm91cGVkO1xuICAgIH0sIHt9IGFzIGFueSk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgaW50ZXJwb2xhdGVzIGJldHdlZW4gdHdvIGRhdGEgcG9pbnRzLiBUaGUgZ29hbCBpcyB0byBwbGFjZSB0aGUgbWFya1BvaW50IG9uIHRoZSBjaGFydCBpbiB0aGUgcmlnaHQgcGxhY2UuXG4gICAqIEBwYXJhbSBkcFZhbHVlc0FycmF5IGFycmF5IG9mIGRhdGEgcG9pbnRzXG4gICAqIEBwYXJhbSB0YXJnZXRUaW1lIHRpbWUgb2YgdGhlIGFsYXJtIG9yIGV2ZW50XG4gICAqIEByZXR1cm5zIGludGVycG9sYXRlZCBkYXRhIHBvaW50XG4gICAqL1xuICBwcml2YXRlIGludGVycG9sYXRlQmV0d2VlblR3b0RwcyhcbiAgICBkcFZhbHVlc0FycmF5OiBEcFZhbHVlc0l0ZW1bXSxcbiAgICB0YXJnZXRUaW1lOiBudW1iZXJcbiAgKTogRHBWYWx1ZXNJdGVtIHtcbiAgICBsZXQgbWF4VmFsdWU6IG51bWJlcjtcbiAgICBsZXQgbWluVmFsdWU6IG51bWJlcjtcbiAgICByZXR1cm4gZHBWYWx1ZXNBcnJheS5yZWR1Y2UoKGFjYywgY3VyciwgaWR4LCBhcnIpID0+IHtcbiAgICAgIGlmIChuZXcgRGF0ZShjdXJyLnRpbWUpLmdldFRpbWUoKSA8PSB0YXJnZXRUaW1lKSB7XG4gICAgICAgIGlmIChpZHggPT09IGFyci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRpbWU6IHRhcmdldFRpbWUsXG4gICAgICAgICAgICB2YWx1ZXM6IFt7IG1pbjogbWluVmFsdWUsIG1heDogbWF4VmFsdWUgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5leHREcCA9IGFycltpZHggKyAxXTtcbiAgICAgICAgaWYgKG5ldyBEYXRlKG5leHREcC50aW1lKS5nZXRUaW1lKCkgPj0gdGFyZ2V0VGltZSkge1xuICAgICAgICAgIGNvbnN0IHRpbWVEaWZmID0gbmV3IERhdGUobmV4dERwLnRpbWUpLmdldFRpbWUoKSAtIG5ldyBEYXRlKGN1cnIudGltZSkuZ2V0VGltZSgpO1xuICAgICAgICAgIGNvbnN0IHRhcmdldFRpbWVEaWZmID0gdGFyZ2V0VGltZSAtIG5ldyBEYXRlKGN1cnIudGltZSkuZ2V0VGltZSgpO1xuICAgICAgICAgIGNvbnN0IG1pblZhbHVlRGlmZiA9IG5leHREcC52YWx1ZXNbMF0/Lm1pbiAtIGN1cnIudmFsdWVzWzBdPy5taW47XG4gICAgICAgICAgY29uc3QgbWF4VmFsdWVEaWZmID0gbmV4dERwLnZhbHVlc1swXT8ubWF4IC0gY3Vyci52YWx1ZXNbMF0/Lm1heDtcbiAgICAgICAgICBtaW5WYWx1ZSA9IGN1cnIudmFsdWVzWzBdPy5taW4gKyAobWluVmFsdWVEaWZmICogdGFyZ2V0VGltZURpZmYpIC8gdGltZURpZmY7XG4gICAgICAgICAgbWF4VmFsdWUgPSBjdXJyLnZhbHVlc1swXT8ubWF4ICsgKG1heFZhbHVlRGlmZiAqIHRhcmdldFRpbWVEaWZmKSAvIHRpbWVEaWZmO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0aW1lOiB0YXJnZXRUaW1lLFxuICAgICAgICAgICAgdmFsdWVzOiBbeyBtaW46IG1pblZhbHVlLCBtYXg6IG1heFZhbHVlIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2xvc2VzdERwVmFsdWVUb1RhcmdldFRpbWUoXG4gICAgZHBWYWx1ZXNBcnJheTogRHBWYWx1ZXNJdGVtW10sXG4gICAgdGFyZ2V0VGltZTogbnVtYmVyXG4gICk6IERwVmFsdWVzSXRlbSB7XG4gICAgcmV0dXJuIGRwVmFsdWVzQXJyYXkucmVkdWNlKChwcmV2LCBjdXJyKSA9PlxuICAgICAgLy9zaG91bGQgdGFrZSB0aGUgdmFsdWUgY2xvc2VzdCB0byB0aGUgdGFyZ2V0IHRpbWUsIGZvciByZWFsdGltZSB0aGUgY3VycmVudCB0aW1lIHdvdWxkIGFsd2F5cyBjaGFuZ2VcbiAgICAgIE1hdGguYWJzKG5ldyBEYXRlKGN1cnIudGltZSkuZ2V0VGltZSgpIC0gdGFyZ2V0VGltZSkgPFxuICAgICAgTWF0aC5hYnMobmV3IERhdGUocHJldi50aW1lKS5nZXRUaW1lKCkgLSB0YXJnZXRUaW1lKVxuICAgICAgICA/IGN1cnJcbiAgICAgICAgOiBwcmV2XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBjcmVhdGVzIGEgbWFya1BvaW50IG9uIHRoZSBjaGFydCB3aGljaCByZXByZXNlbnRzIHRoZSBpY29uIG9mIHRoZSBhbGFybSBvciBldmVudC5cbiAgICogQHBhcmFtIGl0ZW0gU2luZ2xlIGFsYXJtIG9yIGV2ZW50XG4gICAqIEBwYXJhbSBkcCBEYXRhIHBvaW50XG4gICAqIEBwYXJhbSBpc0NsZWFyZWQgSWYgdGhlIGFsYXJtIGlzIGNsZWFyZWQgaW4gY2FzZSBvZiBhbGFybVxuICAgKiBAcGFyYW0gaXNFdmVudCBJZiB0aGUgaXRlbSBpcyBhbiBldmVudFxuICAgKiBAcGFyYW0gcmVhbHRpbWUgSWYgdGhlIGNoYXJ0IGlzIGluIHJlYWx0aW1lIG1vZGVcbiAgICogQHJldHVybnMgTWFya1BvaW50RGF0YUl0ZW1PcHRpb25bXVxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVNYXJrUG9pbnQoXG4gICAgaXRlbTogSUFsYXJtIHwgSUV2ZW50LFxuICAgIGRwOiBEcFdpdGhWYWx1ZXMsXG4gICAgaXNDbGVhcmVkOiBib29sZWFuLFxuICAgIGlzRXZlbnQ6IGJvb2xlYW4sXG4gICAgcmVhbHRpbWU6IGJvb2xlYW5cbiAgKTogTWFya1BvaW50RGF0YVtdIHtcbiAgICAvLyBjaGVjayBpZiBkcC52YWx1ZXMgb2JqZWN0IGlzIGVtcHR5XG4gICAgaWYgKCFpdGVtLmNyZWF0aW9uVGltZSB8fCBPYmplY3Qua2V5cyhkcC52YWx1ZXMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGRwVmFsdWVzQXJyYXk6IERwVmFsdWVzSXRlbVtdID0gT2JqZWN0LmVudHJpZXMoZHAudmFsdWVzKS5tYXAoKFt0aW1lLCB2YWx1ZXNdKSA9PiAoe1xuICAgICAgdGltZTogbmV3IERhdGUodGltZSkuZ2V0VGltZSgpLFxuICAgICAgdmFsdWVzXG4gICAgfSkpO1xuICAgIGNvbnN0IGNyZWF0aW9uVGltZSA9IG5ldyBEYXRlKGl0ZW0uY3JlYXRpb25UaW1lKS5nZXRUaW1lKCk7XG4gICAgY29uc3QgbGFzdFVwZGF0ZWRUaW1lID0gbmV3IERhdGUoaXRlbVsnbGFzdFVwZGF0ZWQnXSkuZ2V0VGltZSgpO1xuXG4gICAgbGV0IGNvb3JkQ3JlYXRpb25UaW1lOiBhbnk7XG4gICAgbGV0IGNvb3JkTGFzdFVwZGF0ZWRUaW1lOiBhbnk7XG5cbiAgICBpZiAocmVhbHRpbWUpIHtcbiAgICAgIGNvbnN0IGxhc3RWYWx1ZSA9IGRwVmFsdWVzQXJyYXlbZHBWYWx1ZXNBcnJheS5sZW5ndGggLSAxXTtcbiAgICAgIGNvb3JkQ3JlYXRpb25UaW1lID0gW1xuICAgICAgICBpdGVtLmNyZWF0aW9uVGltZSxcbiAgICAgICAgbGFzdFZhbHVlPy52YWx1ZXNbMF0/Lm1pbiA/PyBsYXN0VmFsdWU/LnZhbHVlc1sxXSA/PyBudWxsXG4gICAgICBdO1xuICAgICAgY29vcmRMYXN0VXBkYXRlZFRpbWUgPSBbXG4gICAgICAgIGl0ZW1bJ2xhc3RVcGRhdGVkJ10sXG4gICAgICAgIGxhc3RWYWx1ZT8udmFsdWVzWzBdPy5taW4gPz8gbGFzdFZhbHVlPy52YWx1ZXNbMV0gPz8gbnVsbFxuICAgICAgXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY2xvc2VzdERwVmFsdWUgPSB0aGlzLmludGVycG9sYXRlQmV0d2VlblR3b0RwcyhkcFZhbHVlc0FycmF5LCBjcmVhdGlvblRpbWUpO1xuICAgICAgY29uc3QgZHBWYWx1ZXNGb3JOZXdBbGFybXMgPSB0aGlzLmdldENsb3Nlc3REcFZhbHVlVG9UYXJnZXRUaW1lKGRwVmFsdWVzQXJyYXksIGNyZWF0aW9uVGltZSk7XG4gICAgICBjb25zdCBjbG9zZXN0RHBWYWx1ZUxhc3RVcGRhdGVkID0gdGhpcy5pbnRlcnBvbGF0ZUJldHdlZW5Ud29EcHMoXG4gICAgICAgIGRwVmFsdWVzQXJyYXksXG4gICAgICAgIGxhc3RVcGRhdGVkVGltZVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGRwVmFsdWVzRm9yTmV3QWxhcm1zTGFzdFVwZGF0ZWQgPSB0aGlzLmdldENsb3Nlc3REcFZhbHVlVG9UYXJnZXRUaW1lKFxuICAgICAgICBkcFZhbHVlc0FycmF5LFxuICAgICAgICBsYXN0VXBkYXRlZFRpbWVcbiAgICAgICk7XG5cbiAgICAgIGNvb3JkQ3JlYXRpb25UaW1lID0gW1xuICAgICAgICBpdGVtLmNyZWF0aW9uVGltZSxcbiAgICAgICAgY2xvc2VzdERwVmFsdWU/LnZhbHVlc1swXT8ubWluID8/XG4gICAgICAgICAgY2xvc2VzdERwVmFsdWU/LnZhbHVlc1sxXSA/P1xuICAgICAgICAgIGRwVmFsdWVzRm9yTmV3QWxhcm1zPy52YWx1ZXNbMF0/Lm1pbiA/P1xuICAgICAgICAgIGRwVmFsdWVzRm9yTmV3QWxhcm1zPy52YWx1ZXNbMV0gPz9cbiAgICAgICAgICBudWxsXG4gICAgICBdO1xuICAgICAgY29vcmRMYXN0VXBkYXRlZFRpbWUgPSBbXG4gICAgICAgIGl0ZW1bJ2xhc3RVcGRhdGVkJ10sXG4gICAgICAgIGNsb3Nlc3REcFZhbHVlTGFzdFVwZGF0ZWQ/LnZhbHVlc1swXT8ubWluID8/XG4gICAgICAgICAgY2xvc2VzdERwVmFsdWVMYXN0VXBkYXRlZD8udmFsdWVzWzFdID8/XG4gICAgICAgICAgZHBWYWx1ZXNGb3JOZXdBbGFybXNMYXN0VXBkYXRlZD8udmFsdWVzWzBdPy5taW4gPz9cbiAgICAgICAgICBkcFZhbHVlc0Zvck5ld0FsYXJtc0xhc3RVcGRhdGVkPy52YWx1ZXNbMV0gPz9cbiAgICAgICAgICBudWxsXG4gICAgICBdO1xuICAgIH1cblxuICAgIGlmIChpc0V2ZW50KSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgY29vcmQ6IGNvb3JkQ3JlYXRpb25UaW1lLFxuICAgICAgICAgIG5hbWU6IGl0ZW0udHlwZSxcbiAgICAgICAgICBpdGVtVHlwZTogaXRlbS50eXBlLFxuICAgICAgICAgIGl0ZW1TdHlsZToge1xuICAgICAgICAgICAgY29sb3I6IGl0ZW1bJ2NvbG9yJ11cbiAgICAgICAgICB9LFxuICAgICAgICAgIHN5bWJvbDogJ2NpcmNsZScsXG4gICAgICAgICAgc3ltYm9sU2l6ZTogMjRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNvb3JkOiBjb29yZENyZWF0aW9uVGltZSxcbiAgICAgICAgICBuYW1lOiBpdGVtLnR5cGUsXG4gICAgICAgICAgaXRlbVR5cGU6IGl0ZW0udHlwZSxcbiAgICAgICAgICBpdGVtU3R5bGU6IHsgY29sb3I6ICd3aGl0ZScgfSxcbiAgICAgICAgICBzeW1ib2w6IElDT05TX01BUC5FVkVOVCxcbiAgICAgICAgICBzeW1ib2xTaXplOiAxNlxuICAgICAgICB9XG4gICAgICBdO1xuICAgIH1cblxuICAgIHJldHVybiBpc0NsZWFyZWRcbiAgICAgID8gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvb3JkOiBjb29yZENyZWF0aW9uVGltZSxcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0udHlwZSxcbiAgICAgICAgICAgIGl0ZW1UeXBlOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICBpdGVtU3R5bGU6IHtcbiAgICAgICAgICAgICAgY29sb3I6IGl0ZW1bJ2NvbG9yJ11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzeW1ib2w6ICdjaXJjbGUnLFxuICAgICAgICAgICAgc3ltYm9sU2l6ZTogMjRcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvb3JkOiBjb29yZENyZWF0aW9uVGltZSxcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0udHlwZSxcbiAgICAgICAgICAgIGl0ZW1UeXBlOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICBpdGVtU3R5bGU6IHsgY29sb3I6ICd3aGl0ZScgfSxcbiAgICAgICAgICAgIHN5bWJvbDogSUNPTlNfTUFQW2l0ZW0uc2V2ZXJpdHkgYXMgU2V2ZXJpdHlUeXBlXSxcbiAgICAgICAgICAgIHN5bWJvbFNpemU6IDE2XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb29yZDogY29vcmRMYXN0VXBkYXRlZFRpbWUsXG4gICAgICAgICAgICBuYW1lOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICBpdGVtVHlwZTogaXRlbS50eXBlLFxuICAgICAgICAgICAgaXRlbVN0eWxlOiB7XG4gICAgICAgICAgICAgIGNvbG9yOiBpdGVtWydjb2xvciddXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3ltYm9sOiAnY2lyY2xlJyxcbiAgICAgICAgICAgIHN5bWJvbFNpemU6IDI0XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb29yZDogY29vcmRMYXN0VXBkYXRlZFRpbWUsXG4gICAgICAgICAgICBuYW1lOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICBpdGVtVHlwZTogaXRlbS50eXBlLFxuICAgICAgICAgICAgaXRlbVN0eWxlOiB7IGNvbG9yOiAnd2hpdGUnIH0sXG4gICAgICAgICAgICBzeW1ib2w6IElDT05TX01BUC5DTEVBUkVELFxuICAgICAgICAgICAgc3ltYm9sU2l6ZTogMTZcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvb3JkOiBjb29yZENyZWF0aW9uVGltZSxcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0udHlwZSxcbiAgICAgICAgICAgIGl0ZW1UeXBlOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICBpdGVtU3R5bGU6IHtcbiAgICAgICAgICAgICAgY29sb3I6IGl0ZW1bJ2NvbG9yJ11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzeW1ib2w6ICdjaXJjbGUnLFxuICAgICAgICAgICAgc3ltYm9sU2l6ZTogMjRcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvb3JkOiBjb29yZENyZWF0aW9uVGltZSxcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0udHlwZSxcbiAgICAgICAgICAgIGl0ZW1UeXBlOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICBpdGVtU3R5bGU6IHsgY29sb3I6ICd3aGl0ZScgfSxcbiAgICAgICAgICAgIHN5bWJvbDogSUNPTlNfTUFQW2l0ZW0uc2V2ZXJpdHkgYXMgU2V2ZXJpdHlUeXBlXSxcbiAgICAgICAgICAgIHN5bWJvbFNpemU6IDE2XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb29yZDogY29vcmRMYXN0VXBkYXRlZFRpbWUsXG4gICAgICAgICAgICBuYW1lOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICBpdGVtVHlwZTogaXRlbS50eXBlLFxuICAgICAgICAgICAgaXRlbVN0eWxlOiB7XG4gICAgICAgICAgICAgIGNvbG9yOiBpdGVtWydjb2xvciddXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3ltYm9sOiAnY2lyY2xlJyxcbiAgICAgICAgICAgIHN5bWJvbFNpemU6IDI0XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb29yZDogY29vcmRMYXN0VXBkYXRlZFRpbWUsXG4gICAgICAgICAgICBuYW1lOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICBpdGVtVHlwZTogaXRlbS50eXBlLFxuICAgICAgICAgICAgaXRlbVN0eWxlOiB7IGNvbG9yOiAnd2hpdGUnIH0sXG4gICAgICAgICAgICBzeW1ib2w6IElDT05TX01BUFtpdGVtLnNldmVyaXR5IGFzIFNldmVyaXR5VHlwZV0sXG4gICAgICAgICAgICBzeW1ib2xTaXplOiAxNlxuICAgICAgICAgIH1cbiAgICAgICAgXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBjcmVhdGVzIGEgbWFya0xpbmUgb24gdGhlIGNoYXJ0IHdoaWNoIHJlcHJlc2VudHMgdGhlIGxpbmUgYmV0d2VlbiBldmVyeSBhbGFybSBvciBldmVudCBvbiB0aGUgY2hhcnQuXG4gICAqIEBwYXJhbSBpdGVtcyBBcnJheSBvZiBhbGFybXMgb3IgZXZlbnRzXG4gICAqIEByZXR1cm5zIE1hcmtMaW5lRGF0YUl0ZW1PcHRpb25CYXNlW11cbiAgICovXG4gIHByaXZhdGUgY3JlYXRlTWFya0xpbmU8VCBleHRlbmRzIElBbGFybSB8IElFdmVudD4oaXRlbXM6IFRbXSk6IE1hcmtMaW5lRGF0YVtdIHtcbiAgICByZXR1cm4gaXRlbXMucmVkdWNlPE1hcmtMaW5lRGF0YVtdPigoYWNjLCBpdGVtKSA9PiB7XG4gICAgICBpZiAoIWl0ZW0uY3JlYXRpb25UaW1lKSB7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbS5jcmVhdGlvblRpbWUgPT09IGl0ZW1bJ2xhc3RVcGRhdGVkJ10pIHtcbiAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHhBeGlzOiBpdGVtLmNyZWF0aW9uVGltZSxcbiAgICAgICAgICAgIGl0ZW1UeXBlOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICBsYWJlbDogeyBzaG93OiBmYWxzZSwgZm9ybWF0dGVyOiAoKSA9PiBpdGVtLnR5cGUgfSxcbiAgICAgICAgICAgIGl0ZW1TdHlsZTogeyBjb2xvcjogaXRlbVsnY29sb3InXSB9XG4gICAgICAgICAgfVxuICAgICAgICBdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhY2MuY29uY2F0KFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4QXhpczogaXRlbS5jcmVhdGlvblRpbWUsXG4gICAgICAgICAgICBpdGVtVHlwZTogaXRlbS50eXBlLFxuICAgICAgICAgICAgbGFiZWw6IHsgc2hvdzogZmFsc2UsIGZvcm1hdHRlcjogKCkgPT4gaXRlbS50eXBlIH0sXG4gICAgICAgICAgICBpdGVtU3R5bGU6IHsgY29sb3I6IGl0ZW1bJ2NvbG9yJ10gfVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgeEF4aXM6IGl0ZW1bJ2xhc3RVcGRhdGVkJ10sXG4gICAgICAgICAgICBpdGVtVHlwZTogaXRlbS50eXBlLFxuICAgICAgICAgICAgbGFiZWw6IHsgc2hvdzogZmFsc2UsIGZvcm1hdHRlcjogKCkgPT4gaXRlbS50eXBlIH0sXG4gICAgICAgICAgICBpdGVtU3R5bGU6IHsgY29sb3I6IGl0ZW1bJ2NvbG9yJ10gfVxuICAgICAgICAgIH1cbiAgICAgICAgXSk7XG4gICAgICB9XG4gICAgfSwgW10pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTaW5nbGVTZXJpZXMoXG4gICAgZHA6IERwV2l0aFZhbHVlcyxcbiAgICByZW5kZXJUeXBlOiBFeGNsdWRlPERhdGFwb2ludENoYXJ0UmVuZGVyVHlwZSwgJ2FyZWEnPixcbiAgICBpZHg6IG51bWJlcixcbiAgICBpc01pbk1heENoYXJ0ID0gZmFsc2UsXG4gICAgc2VyaWVzVHlwZSA9ICcnXG4gICk6IFNlcmllc09wdGlvbiAmIFNlcmllc0RhdGFwb2ludEluZm8ge1xuICAgIGNvbnN0IGRhdGFwb2ludElkID0gZHAuX190YXJnZXQ/LmlkICsgZHAuZnJhZ21lbnQgKyBkcC5zZXJpZXM7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGFwb2ludElkLFxuICAgICAgZGF0YXBvaW50VW5pdDogZHAudW5pdCB8fCAnJyxcbiAgICAgIC8vICdpZCcgcHJvcGVydHkgaXMgbmVlZGVkIGFzICdzZXJpZXNJZCcgaW4gdG9vbHRpcCBmb3JtYXR0ZXJcbiAgICAgIGlkOiBpc01pbk1heENoYXJ0XG4gICAgICAgID8gYCR7ZGF0YXBvaW50SWR9LyR7cmVuZGVyVHlwZX0ke3Nlcmllc1R5cGV9YFxuICAgICAgICA6IGAke2RhdGFwb2ludElkfSR7c2VyaWVzVHlwZX1gLFxuICAgICAgbmFtZTogYCR7ZHAubGFiZWx9ICgke2RwLl9fdGFyZ2V0Py5bJ25hbWUnXX0pYCxcbiAgICAgIC8vIGRhdGFwb2ludExhYmVsIHVzZWQgdG8gcHJvcGVyIGRpc3BsYXkgb2YgdG9vbHRpcFxuICAgICAgZGF0YXBvaW50TGFiZWw6IGRwLmxhYmVsIHx8ICcnLFxuICAgICAgZGF0YTogT2JqZWN0LmVudHJpZXMoZHAudmFsdWVzKS5tYXAoKFtkYXRlU3RyaW5nLCB2YWx1ZXNdKSA9PiB7XG4gICAgICAgIHJldHVybiBbZGF0ZVN0cmluZywgdmFsdWVzWzBdW3JlbmRlclR5cGVdXTtcbiAgICAgIH0pLFxuICAgICAgeUF4aXNJbmRleDogaWR4LFxuICAgICAgLi4udGhpcy5jaGFydFR5cGVzU2VydmljZS5nZXRTZXJpZXNPcHRpb25zKGRwLCBpc01pbk1heENoYXJ0LCByZW5kZXJUeXBlKVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgY3JlYXRlcyBhIGdlbmVyYWwgdG9vbHRpcCBmb3JtYXR0ZXIgZm9yIHRoZSBjaGFydC5cbiAgICogQHJldHVybnMgVG9vbHRpcEZvcm1hdHRlckNhbGxiYWNrPFRvcExldmVsRm9ybWF0dGVyUGFyYW1zPlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRUb29sdGlwRm9ybWF0dGVyKCk6IFRvb2x0aXBGb3JtYXR0ZXJDYWxsYmFjazxUb3BMZXZlbEZvcm1hdHRlclBhcmFtcz4ge1xuICAgIHJldHVybiBwYXJhbXMgPT4ge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHBhcmFtcykgfHwgIXBhcmFtc1swXT8uZGF0YSkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhID0gcGFyYW1zWzBdLmRhdGEgYXMgW3N0cmluZywgLi4uYW55W11dO1xuICAgICAgY29uc3QgWEF4aXNWYWx1ZTogc3RyaW5nID0gZGF0YVswXTtcbiAgICAgIGNvbnN0IFlBeGlzUmVhZGluZ3M6IHN0cmluZ1tdID0gW107XG4gICAgICBjb25zdCBhbGxTZXJpZXMgPSB0aGlzLmVjaGFydHNJbnN0YW5jZT8uZ2V0T3B0aW9uKClbJ3NlcmllcyddIGFzIEN1c3RvbVNlcmllc09wdGlvbnNbXTtcblxuICAgICAgY29uc3QgYWxsRGF0YVBvaW50U2VyaWVzID0gYWxsU2VyaWVzLmZpbHRlcihcbiAgICAgICAgc2VyaWVzID0+XG4gICAgICAgICAgc2VyaWVzWyd0eXBlT2ZTZXJpZXMnXSAhPT0gJ2FsYXJtJyAmJlxuICAgICAgICAgIHNlcmllc1sndHlwZU9mU2VyaWVzJ10gIT09ICdldmVudCcgJiZcbiAgICAgICAgICBzZXJpZXNbJ3R5cGVPZlNlcmllcyddICE9PSAnZmFrZSdcbiAgICAgICk7XG5cbiAgICAgIGFsbERhdGFQb2ludFNlcmllcy5mb3JFYWNoKChzZXJpZXM6IEN1c3RvbVNlcmllc09wdGlvbnMpID0+IHtcbiAgICAgICAgbGV0IHZhbHVlOiBzdHJpbmc7XG4gICAgICAgIGNvbnN0IGlkID0gc2VyaWVzWydpZCddIGFzIHN0cmluZztcbiAgICAgICAgaWYgKGlkLmVuZHNXaXRoKCcvbWluJykpIHtcbiAgICAgICAgICBjb25zdCBtaW5WYWx1ZSA9IHRoaXMuZmluZFZhbHVlRm9yRXhhY3RPckVhcmxpZXJUaW1lc3RhbXAoXG4gICAgICAgICAgICBzZXJpZXNbJ2RhdGEnXSBhcyBTZXJpZXNWYWx1ZVtdLFxuICAgICAgICAgICAgWEF4aXNWYWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKCFtaW5WYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBtYXhTZXJpZXMgPSBhbGxEYXRhUG9pbnRTZXJpZXMuZmluZChzID0+IHNbJ2lkJ10gPT09IGlkLnJlcGxhY2UoJy9taW4nLCAnL21heCcpKTtcbiAgICAgICAgICBpZiAoIW1heFNlcmllcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBtYXhWYWx1ZSA9IHRoaXMuZmluZFZhbHVlRm9yRXhhY3RPckVhcmxpZXJUaW1lc3RhbXAoXG4gICAgICAgICAgICBtYXhTZXJpZXNbJ2RhdGEnXSBhcyBTZXJpZXNWYWx1ZVtdLFxuICAgICAgICAgICAgWEF4aXNWYWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKG1heFZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhbHVlID1cbiAgICAgICAgICAgIGA8ZGl2IGNsYXNzPVwiZC1mbGV4IGEtaS1jZW50ZXIgc2VwYXJhdG9yLXRvcCBwLXQtOCBwLWItOFwiPmAgK1xuICAgICAgICAgICAgYDxsYWJlbCBjbGFzcz1cInRleHQtMTIgbS1yLTggbS1iLTBcIj4ke3RoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKG1pblZhbHVlWzBdKX08L2xhYmVsPmAgK1xuICAgICAgICAgICAgYDxkaXYgY2xhc3M9XCJtLWwtYXV0byB0ZXh0LTEyXCIgPiR7bWluVmFsdWVbMV19IOKAlCAke21heFZhbHVlWzFdfWAgK1xuICAgICAgICAgICAgKHNlcmllc1snZGF0YXBvaW50VW5pdCddID8gYCAke3Nlcmllc1snZGF0YXBvaW50VW5pdCddfWAgOiAnJykgK1xuICAgICAgICAgICAgYDwvZGl2PjwvZGl2PmA7XG4gICAgICAgIH0gZWxzZSBpZiAoaWQuZW5kc1dpdGgoJy9tYXgnKSkge1xuICAgICAgICAgIC8vIGRvIG5vdGhpbmcsIHZhbHVlIGlzIGhhbmRsZWQgIGluICdtaW4nIGNhc2VcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc2VyaWVzVmFsdWUgPSB0aGlzLmZpbmRWYWx1ZUZvckV4YWN0T3JFYXJsaWVyVGltZXN0YW1wKFxuICAgICAgICAgICAgc2VyaWVzWydkYXRhJ10gYXMgU2VyaWVzVmFsdWVbXSxcbiAgICAgICAgICAgIFhBeGlzVmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICghc2VyaWVzVmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFsdWUgPVxuICAgICAgICAgICAgYDxkaXYgY2xhc3M9XCJkLWZsZXggYS1pLWNlbnRlciBzZXBhcmF0b3ItdG9wIHAtdC04IHAtYi04XCI+YCArXG4gICAgICAgICAgICBgPGxhYmVsIGNsYXNzPVwidGV4dC0xMiBtLXItOCBtLWItMFwiPiR7dGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oc2VyaWVzVmFsdWVbMF0pfTwvbGFiZWw+YCArXG4gICAgICAgICAgICBgPGRpdiBjbGFzcz1cIm0tbC1hdXRvIHRleHQtMTJcIiA+JHtzZXJpZXNWYWx1ZVsxXT8udG9TdHJpbmcoKX1gICtcbiAgICAgICAgICAgIChzZXJpZXNbJ2RhdGFwb2ludFVuaXQnXSA/IGAgJHtzZXJpZXNbJ2RhdGFwb2ludFVuaXQnXX1gIDogJycpICtcbiAgICAgICAgICAgIGA8L2Rpdj48L2Rpdj5gO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXRlbVN0eWxlID0gc2VyaWVzWydpdGVtU3R5bGUnXSBhcyB7IGNvbG9yOiBzdHJpbmcgfTtcblxuICAgICAgICBZQXhpc1JlYWRpbmdzLnB1c2goXG4gICAgICAgICAgYDxkaXYgY2xhc3M9XCJkLWZsZXggYS1pLWNlbnRlciBwLWItOFwiPjxzcGFuIGNsYXNzPSdkbHQtYzh5LWljb24tY2lyY2xlIG0tci00JyBzdHlsZT0nY29sb3I6ICR7aXRlbVN0eWxlLmNvbG9yfSc+PC9zcGFuPmAgKyAvLyBjb2xvciBjaXJjbGVcbiAgICAgICAgICAgIGA8c3Ryb25nPiR7c2VyaWVzWydkYXRhcG9pbnRMYWJlbCddfSA8L3N0cm9uZz48L2Rpdj5gICsgLy8gbmFtZVxuICAgICAgICAgICAgYCR7dmFsdWV9YCAvLyBzaW5nbGUgdmFsdWUgb3IgbWluLW1heCByYW5nZVxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBgPGRpdiBzdHlsZT1cIndpZHRoOiAke3RoaXMuVE9PTFRJUF9XSURUSH1weFwiPiR7WUF4aXNSZWFkaW5ncy5qb2luKCcnKX08L2Rpdj5gO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGZpbmRWYWx1ZUZvckV4YWN0T3JFYXJsaWVyVGltZXN0YW1wKFxuICAgIHZhbHVlczogU2VyaWVzVmFsdWVbXSxcbiAgICB0aW1lc3RhbXBTdHJpbmc6IERhdGVTdHJpbmdcbiAgKTogU2VyaWVzVmFsdWUgfCBudWxsIHtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBuZXcgRGF0ZSh0aW1lc3RhbXBTdHJpbmcpLnZhbHVlT2YoKTtcbiAgICByZXR1cm4gdmFsdWVzLnJlZHVjZSgoYWNjOiBTZXJpZXNWYWx1ZSB8IG51bGwsIGN1cnI6IFNlcmllc1ZhbHVlKSA9PiB7XG4gICAgICBpZiAobmV3IERhdGUoY3VyclswXSkudmFsdWVPZigpIDw9IHRpbWVzdGFtcCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgYWNjID09PSBudWxsIHx8XG4gICAgICAgICAgTWF0aC5hYnMobmV3IERhdGUoY3VyclswXSkudmFsdWVPZigpIC0gdGltZXN0YW1wKSA8XG4gICAgICAgICAgICBNYXRoLmFicyhuZXcgRGF0ZShhY2NbMF0pLnZhbHVlT2YoKSAtIHRpbWVzdGFtcClcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIGN1cnI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgbnVsbCk7XG4gIH1cbn1cbiJdfQ==
872
+ }], ctorParameters: () => [{ type: i1.DatePipe }, { type: i2.YAxisService }, { type: i3.ChartTypesService }, { type: i4.AlarmSeverityToIconPipe }, { type: i4.AlarmSeverityToLabelPipe }, { type: i5.TranslateService }, { type: i6.Router }] });
873
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNoYXJ0cy1vcHRpb25zLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9lY2hhcnQvc2VydmljZXMvZWNoYXJ0cy1vcHRpb25zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQWF4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHMUQsT0FBTyxFQUFFLFdBQVcsRUFBZ0MsTUFBTSxhQUFhLENBQUM7QUFDeEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXRELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRixPQUFPLEVBQVksU0FBUyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDMUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7O0FBYXZELE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQztBQUdqQyxNQUFNLE9BQU8scUJBQXFCO0lBS2hDLFlBQ1UsUUFBa0IsRUFDbEIsWUFBMEIsRUFDMUIsaUJBQW9DLEVBQ3BDLGdCQUF5QyxFQUN6QyxpQkFBMkMsRUFDM0MsU0FBMkIsRUFDM0IsTUFBYztRQU5kLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXlCO1FBQ3pDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBMEI7UUFDM0MsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQVZoQixrQkFBYSxHQUFHLEdBQUcsQ0FBQztJQVd6QixDQUFDO0lBRUosZUFBZSxDQUNiLG9CQUFvQyxFQUNwQyxTQUF5RSxFQUN6RSxjQUFrRCxFQUNsRCxNQUFnQixFQUNoQixNQUFnQixFQUNoQixjQU1DLEVBQ0QsaUJBQXlGLEVBQ3pGLG9CQUFxQyxFQUNyQyxjQUFjLEdBQUcsS0FBSztRQUV0QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRTtZQUM3RCxjQUFjLEVBQUUsY0FBYyxDQUFDLEtBQUs7WUFDcEMsdUJBQXVCLEVBQUUsY0FBYyxDQUFDLHVCQUF1QjtZQUMvRCxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsZ0JBQWdCO1NBQ2xELENBQUMsQ0FBQztRQUNILE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxLQUFLLE1BQU0sQ0FBQyxDQUFDO1FBQzVELE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMxRixNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFFBQVEsS0FBSyxPQUFPLENBQUMsQ0FBQztRQUM5RCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDN0YsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixDQUNuRCxpQkFBaUIsRUFBRSxRQUFRLElBQUksU0FBUyxDQUFDLFFBQVEsSUFBSSxPQUFPLEVBQzVELGlCQUFpQixJQUFJLFNBQVMsQ0FDL0IsQ0FBQztRQUNGLElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsWUFBWSxHQUFHLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxTQUFTLENBQUMsUUFBUSxJQUFJLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM5RixDQUFDO1FBQ0QsT0FBTztZQUNMLElBQUksRUFBRTtnQkFDSixZQUFZLEVBQUUsS0FBSyxFQUFFLGlFQUFpRTtnQkFDdEYsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsR0FBRyxFQUFFLEVBQUU7Z0JBQ1AsS0FBSyxFQUFFLFNBQVM7Z0JBQ2hCLE1BQU0sRUFBRSxFQUFFO2FBQ1g7WUFDRCxRQUFRLEVBQUU7Z0JBQ1I7b0JBQ0UsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsOEZBQThGO29CQUM5RixVQUFVLEVBQUUsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFFBQVEsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNO29CQUN2RixnQkFBZ0IsRUFBRSxJQUFJO29CQUN0QixVQUFVLEVBQUUsaUJBQWlCO3dCQUMzQixDQUFDLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRTt3QkFDdEMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFO29CQUNoQyxRQUFRLEVBQUUsaUJBQWlCO3dCQUN6QixDQUFDLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTt3QkFDcEMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO2lCQUMvQjtnQkFDRDtvQkFDRSxJQUFJLEVBQUUsUUFBUTtvQkFDZCxJQUFJLEVBQUUsY0FBYyxDQUFDLFVBQVU7b0JBQy9CLE1BQU0sRUFBRSxDQUFDO29CQUNULFFBQVEsRUFBRSxLQUFLO2lCQUNoQjthQUNGLEVBQUUsZ0ZBQWdGO1lBQ25GLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLE9BQU8sRUFBRTtnQkFDUCxJQUFJLEVBQUUsSUFBSTtnQkFDVixRQUFRLEVBQUUsQ0FBQyxFQUFFLDBFQUEwRTtnQkFDdkYsT0FBTyxFQUFFO29CQUNQLFFBQVEsRUFBRTt3QkFDUixVQUFVLEVBQUUsTUFBTTtxQkFDbkI7aUJBQ0Y7YUFDRjtZQUNELE9BQU8sRUFBRTtnQkFDUCxPQUFPLEVBQUUsTUFBTTtnQkFDZixXQUFXLEVBQUU7b0JBQ1gsSUFBSSxFQUFFLE9BQU87b0JBQ2IsSUFBSSxFQUFFLElBQUk7aUJBQ1g7Z0JBQ0QsZUFBZSxFQUFFLDBCQUEwQjtnQkFDM0MsU0FBUyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtnQkFDckMsWUFBWSxFQUFFLElBQUk7Z0JBQ2xCLFFBQVEsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUNoQyxrQkFBa0IsRUFBRSxDQUFDO2FBQ3RCO1lBQ0QsTUFBTSxFQUFFO2dCQUNOLElBQUksRUFBRSxLQUFLO2FBQ1o7WUFDRCxLQUFLLEVBQUU7Z0JBQ0wsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxZQUFZO2dCQUMxRCxHQUFHLEVBQUUsU0FBUyxDQUFDLE1BQU07Z0JBQ3JCLElBQUksRUFBRSxNQUFNO2dCQUNaLFNBQVMsRUFBRSxLQUFLO2dCQUNoQixXQUFXLEVBQUU7b0JBQ1gsS0FBSyxFQUFFO3dCQUNMLElBQUksRUFBRSxLQUFLO3FCQUNaO2lCQUNGO2dCQUNELFFBQVEsRUFBRTtvQkFDUixnRUFBZ0U7b0JBQ2hFLGVBQWUsRUFBRSxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxLQUFLLE1BQU0sQ0FBQztpQkFDOUU7Z0JBQ0QsU0FBUyxFQUFFO29CQUNULFdBQVcsRUFBRSxJQUFJO29CQUNqQixXQUFXLEVBQUUsQ0FBQyxFQUFFLCtFQUErRTtvQkFDL0YsV0FBVyxFQUFFLGFBQWE7aUJBQzNCO2dCQUNELFNBQVMsRUFBRTtvQkFDVCxJQUFJLEVBQUUsY0FBYyxDQUFDLEtBQUs7b0JBQzFCLFNBQVMsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO2lCQUN0RDthQUNGO1lBQ0QsS0FBSztZQUNMLE1BQU0sRUFBRTtnQkFDTixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxvQkFBb0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQzVELE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FDL0I7Z0JBQ0QsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsY0FBYyxDQUFDO2FBQzdFO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCw2QkFBNkIsQ0FBQyxRQUF3QixFQUFFLGlCQUFpQjtRQUN2RSxJQUFJLFlBQVksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsQ0FBQyxZQUFZLENBQUM7UUFDdkUsUUFBUSxRQUFRLEVBQUUsQ0FBQztZQUNqQixLQUFLLFNBQVM7Z0JBQ1osWUFBWSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7Z0JBQ3hFLE1BQU07WUFDUixLQUFLLE9BQU87Z0JBQ1YsWUFBWSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7Z0JBQ3hFLE1BQU07WUFDUixLQUFLLE1BQU07Z0JBQ1QsWUFBWSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7Z0JBQ3hFLE1BQU07WUFDUixLQUFLLE9BQU87Z0JBQ1YsWUFBWSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7Z0JBQ3hFLE1BQU07WUFDUixLQUFLLFFBQVE7Z0JBQ1gsWUFBWSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7Z0JBQ3hFLE1BQU07WUFDUixLQUFLLFFBQVE7Z0JBQ1gsWUFBWTtvQkFDVixDQUFDLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRTt3QkFDM0MsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7d0JBQ2pELEVBQUUsQ0FBQztnQkFDTCxNQUFNO1lBQ1I7Z0JBQ0UsWUFBWSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxDQUFDLFlBQVksQ0FBQztnQkFDbkUsTUFBTTtRQUNWLENBQUM7UUFDRCxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRUQsbUJBQW1CLENBQUMsb0JBQW9DO1FBQ3RELE1BQU0sTUFBTSxHQUFtQixFQUFFLENBQUM7UUFDbEMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ3ZDLE1BQU0sVUFBVSxHQUE2QixFQUFFLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQztZQUNwRSxJQUFJLFVBQVUsS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDMUIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNoRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDbEUsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUN4RSxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7WUFDeEIsQ0FBQyxDQUFDLFdBQVcsR0FBRyxZQUFZLENBQUM7WUFDN0IsQ0FBQyxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUM7WUFDeEIsQ0FBQyxDQUFDLFNBQVMsR0FBRztnQkFDWixHQUFHLENBQUMsQ0FBQyxTQUFTO2dCQUNkLE9BQU8sRUFBRSxDQUFDO2FBQ1gsQ0FBQztZQUNGLENBQUMsQ0FBQyxTQUFTLEdBQUc7Z0JBQ1osR0FBRyxDQUFDLENBQUMsU0FBUztnQkFDZCxPQUFPLEVBQUUsQ0FBQzthQUNYLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxxQkFBcUIsQ0FDbkIsRUFBZ0IsRUFDaEIsVUFBb0MsRUFDcEMsYUFBYSxHQUFHLEtBQUssRUFDckIsUUFBNkIsRUFBRSxFQUMvQixXQUE4QixPQUFPLEVBQ3JDLGNBQWMsR0FBRyxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsRUFDdEUsRUFBb0IsRUFDcEIsR0FBWSxFQUNaLFFBQWtCO1FBRWxCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEIsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzVFLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELG9DQUFvQztRQUNwQyxNQUFNLGFBQWEsR0FBd0IsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDbkYsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDNUQsTUFBTSxPQUFPLEdBQUcsUUFBUSxLQUFLLE9BQU8sQ0FBQztRQUVyQyxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUN4QyxDQUFDLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBZ0MsRUFBRSxFQUFFO1lBQ3JELG1CQUFtQjtZQUNuQixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO1lBQ3BGLHVFQUF1RTtZQUN2RSxJQUFJLG9CQUFvQixHQUFHLEtBQUssQ0FBQztZQUVqQyxpQkFBaUI7WUFDakIsTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBa0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUU7Z0JBQ3RFLG9CQUFvQjtvQkFDbEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDO3dCQUN6QixFQUFFLENBQUMsVUFBVSxDQUFDO3dCQUNkLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUM7d0JBQ3hELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLENBQUM7d0JBQ3BELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0QsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUN2QyxNQUFNLFNBQVMsR0FBRyxPQUFPLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxXQUFXLENBQUMsT0FBTyxDQUFDO29CQUNqRSxNQUFNLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQztvQkFDekIsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xGLENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO3dCQUN2QixPQUFPLEVBQUUsQ0FBQztvQkFDWixDQUFDO29CQUNELE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQzt3QkFDaEI7NEJBQ0UsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUM7NEJBQ2hDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTs0QkFDZixRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUk7NEJBQ25CLFNBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7eUJBQ3BDO3FCQUNGLENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRVAsa0NBQWtDO1lBQ2xDLE1BQU0sbUJBQW1CLEdBQUc7Z0JBQzFCLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZO2dCQUMxRCxJQUFJLEVBQUUsR0FBRyxJQUFJLFlBQVk7Z0JBQ3pCLFlBQVksRUFBRSxRQUFRO2dCQUN0QixJQUFJLEVBQUUsUUFBUTtnQkFDZCxvQkFBb0I7Z0JBQ3BCLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixNQUFNLEVBQUUsSUFBSTtnQkFDWixTQUFTLEVBQUU7b0JBQ1QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLGdCQUFnQixFQUFFLElBQUk7b0JBQ3RCLElBQUksRUFBRSxhQUFhO2lCQUNwQjtnQkFDRCxVQUFVLEVBQUUsR0FBRztnQkFDZixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsYUFBYSxFQUFFLFVBQVUsQ0FBQzthQUMxRSxDQUFDO1lBRUYsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFFaEUsaUNBQWlDO1lBQ2pDLE1BQU0sa0JBQWtCLEdBQUc7Z0JBQ3pCLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXO2dCQUN6RCxJQUFJLEVBQUUsR0FBRyxJQUFJLFdBQVc7Z0JBQ3hCLFlBQVksRUFBRSxRQUFRO2dCQUN0QixvQkFBb0I7Z0JBQ3BCLElBQUksRUFBRSxRQUFRO2dCQUNkLFFBQVEsRUFBRTtvQkFDUixVQUFVLEVBQUUsS0FBSztvQkFDakIsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLHlDQUF5QztvQkFDbkUsSUFBSSxFQUFFLFlBQVk7aUJBQ25CO2dCQUNELEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxhQUFhLEVBQUUsVUFBVSxDQUFDO2FBQzFFLENBQUM7WUFFRiwwREFBMEQ7WUFDMUQsSUFBSSxjQUFjLENBQUMsaUJBQWlCLElBQUksY0FBYyxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQzFFLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1lBQ25ELENBQUM7aUJBQU0sSUFBSSxjQUFjLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDNUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDOUIsQ0FBQztpQkFBTSxJQUFJLGNBQWMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUM3QyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUMvQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQyxDQUN1QixDQUFDO0lBQzdCLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsb0NBQW9DLENBQ2xDLGFBQWlDLEVBQ2pDLE1BQXNDLEVBQ3RDLFNBQW1CLEVBQ25CLFNBQW1CO1FBRW5CLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDbEMsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBQ0QsTUFBTSxVQUFVLEdBQVcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwRCxNQUFNLGFBQWEsR0FBYSxFQUFFLENBQUM7UUFDbkMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQTBCLENBQUM7UUFFdkYsb0NBQW9DO1FBQ3BDLE1BQU0sa0JBQWtCLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FDekMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssT0FBTyxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxPQUFPLENBQ25GLENBQUM7UUFFRixJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUVsRSxpRkFBaUY7UUFDakYsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuRSxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRW5FLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNmLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUVELElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDdkMsS0FBSyxHQUFHLFFBQVEsQ0FBQztnQkFDakIsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDMUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxTQUFTLEVBQW1CLENBQUM7Z0JBQ25FLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDeEQsT0FBTztnQkFDVCxDQUFDO2dCQUNELE1BQU0sY0FBYyxHQUEwQjtvQkFDNUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQy9CLENBQUM7Z0JBRUYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDNUIsT0FBTztnQkFDVCxDQUFDO2dCQUNELGNBQWMsQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLHNCQUFzQixJQUFJLENBQUMsYUFBYSxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFDakgsY0FBYyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUM7Z0JBQzlDLGNBQWMsQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDekQsSUFBSSxDQUFDLGVBQWUsRUFBRSxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ2hELE9BQU87WUFDVCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTFCLE9BQU8sNkJBQTZCLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQztJQUNyRSxDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLHFCQUFxQixHQUFpRSxFQUFFLENBQUM7UUFDN0YsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUNqQyxPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztRQUN0QyxDQUFDO1FBRUQsSUFBSSxDQUFDLHVCQUF1QixHQUFHLENBQzdCLEtBQXVCLEVBQUUsNERBQTREO1FBQ3JGLENBQU0sRUFBRSxlQUFlO1FBQ3ZCLEdBQTBCLEVBQUUsa0JBQWtCO1FBQzlDLEVBQU8sRUFDUCxJQUdRLENBQUMsZ0JBQWdCO1VBQ3pCLEVBQUU7WUFDRixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDbEIsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDL0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0MsTUFBTSxZQUFZLEdBQUcsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0MsTUFBTSxhQUFhLEdBQUcsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEQsTUFBTSxXQUFXLEdBQUksR0FBbUIsRUFBRSxxQkFBcUIsRUFBRSxDQUFDO1lBQ2xFLE1BQU0sMEJBQTBCLEdBQUcsV0FBVyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDO1lBRTNFLE1BQU0seUJBQXlCLEdBQUcsV0FBVyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO1lBRXhFLE1BQU0sOENBQThDLEdBQ2xELENBQUMscUJBQXFCLENBQUMsR0FBRztnQkFDMUIsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsTUFBTSxHQUFHLGFBQWEsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDO1lBRXZFLE1BQU0sNkNBQTZDLEdBQ2pELENBQUMscUJBQXFCLENBQUMsSUFBSTtnQkFDM0IsV0FBVyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsTUFBTSxHQUFHLFlBQVksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO1lBRXBFLElBQUksZ0JBQWdCLEdBQXlDO2dCQUMzRCxHQUFHLEVBQUUsTUFBTSxHQUFHLE1BQU07YUFDckIsQ0FBQztZQUNGLElBQUksa0JBQWtCLEdBQXlDO2dCQUM3RCxJQUFJLEVBQUUsTUFBTSxHQUFHLE1BQU07YUFDdEIsQ0FBQztZQUVGLElBQUksMEJBQTBCLElBQUksOENBQThDLEVBQUUsQ0FBQztnQkFDakYsZ0JBQWdCLEdBQUc7b0JBQ2pCLE1BQU0sRUFBRSxXQUFXLEdBQUcsTUFBTSxHQUFHLE1BQU07aUJBQ3RDLENBQUM7WUFDSixDQUFDO1lBQ0QsSUFBSSx5QkFBeUIsSUFBSSw2Q0FBNkMsRUFBRSxDQUFDO2dCQUMvRSxrQkFBa0IsR0FBRztvQkFDbkIsS0FBSyxFQUFFLFVBQVUsR0FBRyxNQUFNLEdBQUcsTUFBTTtpQkFDcEMsQ0FBQztZQUNKLENBQUM7WUFFRCxxQkFBcUIsR0FBRztnQkFDdEIsR0FBRyxnQkFBZ0I7Z0JBQ25CLEdBQUcsa0JBQWtCO2FBQ3RCLENBQUM7WUFDRixPQUFPLHFCQUFxQixDQUFDO1FBQy9CLENBQUMsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDO0lBQ3RDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLGFBQWEsQ0FDbkIsa0JBQXlDLEVBQ3pDLFVBQWtCLEVBQ2xCLGFBQXVCO1FBRXZCLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFO1lBQ3pDLElBQUksTUFBTSxDQUFDLFdBQVcsS0FBSyxZQUFZLEVBQUUsQ0FBQztnQkFDeEMsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDZixJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQy9CLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLGtCQUFrQixFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ3hFLENBQUM7aUJBQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZDLEtBQUssR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ3hELENBQUM7WUFFRCxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLGFBQWEsQ0FBQyxJQUFJLENBQ2hCLDhGQUE4RixNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssWUFBWSxHQUFHLGVBQWU7b0JBQ2hKLFdBQVcsTUFBTSxDQUFDLGNBQWMsaUJBQWlCLEdBQUcsT0FBTztvQkFDM0QsR0FBRyxLQUFLLEVBQUUsQ0FBQyxnQ0FBZ0M7aUJBQzlDLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssZ0JBQWdCLENBQ3RCLE1BQVcsRUFDWCxrQkFBeUMsRUFDekMsVUFBa0I7UUFFbEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLG1DQUFtQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDbkYsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBQ0QsTUFBTSxTQUFTLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzlGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxtQ0FBbUMsQ0FDdkQsU0FBUyxFQUFFLENBQUMsTUFBTSxDQUFrQixFQUNwQyxVQUFVLENBQ1gsQ0FBQztRQUNGLE9BQU8sQ0FDTCwrRkFBK0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVU7WUFDN0ksa0NBQWtDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNsRSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDeEQsZUFBZSxDQUNoQixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssb0JBQW9CLENBQUMsTUFBVyxFQUFFLFVBQWtCO1FBQzFELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3RGLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNqQixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFDRCxPQUFPLENBQ0wsMkRBQTJEO1lBQzNELHNDQUFzQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FDM0QsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLHlDQUF5QztZQUMxQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFO1lBQzFCLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN4RCxlQUFlLENBQ2hCLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLFlBQVksQ0FBQyxLQUFhLEVBQUUsVUFBa0I7UUFDcEQsSUFBSSxLQUFLLEdBQUcsZ0RBQWdELENBQUM7UUFDN0QsS0FBSyxJQUFJLDBJQUEwSSxLQUFLLENBQUMsSUFBSSxjQUFjLENBQUM7UUFDNUssS0FBSyxJQUFJLDBJQUEwSSxLQUFLLENBQUMsSUFBSSxhQUFhLENBQUM7UUFDM0ssS0FBSyxJQUFJLDBJQUEwSSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO1FBQ3BNLEtBQUssSUFBSSxPQUFPLENBQUM7UUFDakIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBYTtRQUN0QyxJQUFJLEtBQUssR0FBRyxvREFBb0QsQ0FBQztRQUNqRSxLQUFLLElBQUksNElBQTRJLENBQUM7UUFDdEosS0FBSyxJQUFJLGtIQUFrSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxZQUFZLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUM7UUFDdFIsS0FBSyxJQUFJLGlLQUFpSyxLQUFLLENBQUMsSUFBSSxxQkFBcUIsQ0FBQztRQUMxTSxLQUFLLElBQUksa05BQWtOLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLElBQUksY0FBYyxDQUFDO1FBQ25RLEtBQUssSUFBSSw2SkFBNkosSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLGNBQWMsQ0FBQztRQUNsTyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzdDLElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztZQUN4QyxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3BELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFlBQVksR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDMUUsS0FBSyxJQUFJLDhKQUE4SixPQUFPLFlBQVksS0FBSyxDQUFDLEVBQUUsOEJBQThCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQztRQUNyUyxDQUFDO1FBQ0QsS0FBSyxJQUFJLDBLQUEwSyxLQUFLLENBQUMsS0FBSyxxQkFBcUIsQ0FBQztRQUNwTixLQUFLLElBQUksT0FBTyxDQUFDO1FBQ2pCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLEtBQUssQ0FBQyxnQkFBZ0I7UUFDNUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzdDLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssUUFBUSxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVPLGNBQWMsQ0FDcEIsb0JBQW9DLEVBQ3BDLE1BQWdCLEVBQ2hCLE1BQWdCLEVBQ2hCLGNBQTJFO1FBRTNFLE1BQU0sTUFBTSxHQUFtQixFQUFFLENBQUM7UUFDbEMsSUFBSSxXQUFXLEdBQTBCLEVBQUUsQ0FBQztRQUM1QyxJQUFJLFdBQVcsR0FBMEIsRUFBRSxDQUFDO1FBQzVDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUN2QyxNQUFNLFVBQVUsR0FBNkIsRUFBRSxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUM7WUFDcEUsSUFBSSxVQUFVLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQzFCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUN4RCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUMxRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDaEUsQ0FBQztZQUVELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FDL0MsRUFBRSxFQUNGLFVBQVUsRUFDVixLQUFLLEVBQ0wsTUFBTSxFQUNOLE9BQU8sRUFDUCxjQUFjLEVBQ2QsSUFBSSxFQUNKLEdBQUcsQ0FDSixDQUFDO1lBQ0YsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUMvQyxFQUFFLEVBQ0YsVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBQ04sT0FBTyxFQUNQLGNBQWMsRUFDZCxJQUFJLEVBQ0osR0FBRyxDQUNKLENBQUM7WUFDRixXQUFXLEdBQUcsQ0FBQyxHQUFHLFdBQVcsRUFBRSxHQUFHLGNBQWMsQ0FBQyxDQUFDO1lBQ2xELFdBQVcsR0FBRyxDQUFDLEdBQUcsV0FBVyxFQUFFLEdBQUcsY0FBYyxDQUFDLENBQUM7UUFDcEQsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLHlCQUF5QixHQUFHLENBQ2hDLElBQXlCLEVBQ3pCLENBQVMsRUFDVCxHQUFtQixFQUNVLEVBQUU7WUFDL0IsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUU1RixJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFZLENBQUM7WUFDakQsQ0FBQztZQUVELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDO1FBRUYsTUFBTSxpQ0FBaUMsR0FBRyxDQUN4QyxJQUFrQixFQUNsQixDQUFTLEVBQ1QsR0FBbUIsRUFDRyxFQUFFLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbEYsSUFBSSxrQkFBa0IsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDdkUsSUFBSSxrQkFBa0IsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDdkUsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDcEMsa0JBQWtCLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1FBQzdFLENBQUM7UUFDRCxJQUFJLGtCQUFrQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxrQkFBa0IsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLGlDQUFpQyxDQUFDLENBQUM7UUFDN0UsQ0FBQztRQUNELE9BQU8sQ0FBQyxHQUFHLE1BQU0sRUFBRSxHQUFHLGtCQUFrQixFQUFFLEdBQUcsa0JBQWtCLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRU8sV0FBVyxDQUNqQixLQUEwQixFQUMxQixTQUFpQjtRQUVqQixPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDcEMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2RSxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDLEVBQUUsRUFBUyxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssd0JBQXdCLENBQzlCLGFBQTZCLEVBQzdCLFVBQWtCO1FBRWxCLElBQUksUUFBZ0IsQ0FBQztRQUNyQixJQUFJLFFBQWdCLENBQUM7UUFDckIsT0FBTyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDbEQsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2hELElBQUksR0FBRyxLQUFLLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQzNCLE9BQU87d0JBQ0wsSUFBSSxFQUFFLFVBQVU7d0JBQ2hCLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLENBQUM7cUJBQzNDLENBQUM7Z0JBQ0osQ0FBQztnQkFDRCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUM1QixJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxVQUFVLEVBQUUsQ0FBQztvQkFDbEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDakYsTUFBTSxjQUFjLEdBQUcsVUFBVSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDbEUsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUM7b0JBQ2pFLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDO29CQUNqRSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxZQUFZLEdBQUcsY0FBYyxDQUFDLEdBQUcsUUFBUSxDQUFDO29CQUM1RSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxZQUFZLEdBQUcsY0FBYyxDQUFDLEdBQUcsUUFBUSxDQUFDO29CQUM1RSxPQUFPO3dCQUNMLElBQUksRUFBRSxVQUFVO3dCQUNoQixNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDO3FCQUMzQyxDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyw2QkFBNkIsQ0FDbkMsYUFBNkIsRUFDN0IsVUFBa0I7UUFFbEIsT0FBTyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFO1FBQ3pDLHFHQUFxRztRQUNyRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxVQUFVLENBQUM7WUFDcEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEdBQUcsVUFBVSxDQUFDO1lBQ2xELENBQUMsQ0FBQyxJQUFJO1lBQ04sQ0FBQyxDQUFDLElBQUksQ0FDVCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0ssZUFBZSxDQUNyQixJQUFxQixFQUNyQixFQUFnQixFQUNoQixTQUFrQixFQUNsQixPQUFnQixFQUNoQixRQUFpQjtRQUVqQixxQ0FBcUM7UUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzlELE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELE1BQU0sYUFBYSxHQUFtQixNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN2RixJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFO1lBQzlCLE1BQU07U0FDUCxDQUFDLENBQUMsQ0FBQztRQUNKLE1BQU0sWUFBWSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMzRCxNQUFNLGVBQWUsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUVoRSxJQUFJLGlCQUFzQixDQUFDO1FBQzNCLElBQUksb0JBQXlCLENBQUM7UUFFOUIsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzFELGlCQUFpQixHQUFHO2dCQUNsQixJQUFJLENBQUMsWUFBWTtnQkFDakIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJO2FBQzFELENBQUM7WUFDRixvQkFBb0IsR0FBRztnQkFDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQztnQkFDbkIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJO2FBQzFELENBQUM7UUFDSixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDbEYsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsNkJBQTZCLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzdGLE1BQU0seUJBQXlCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUM3RCxhQUFhLEVBQ2IsZUFBZSxDQUNoQixDQUFDO1lBQ0YsTUFBTSwrQkFBK0IsR0FBRyxJQUFJLENBQUMsNkJBQTZCLENBQ3hFLGFBQWEsRUFDYixlQUFlLENBQ2hCLENBQUM7WUFFRixpQkFBaUIsR0FBRztnQkFDbEIsSUFBSSxDQUFDLFlBQVk7Z0JBQ2pCLGNBQWMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRztvQkFDNUIsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7b0JBQ3pCLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHO29CQUNwQyxvQkFBb0IsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO29CQUMvQixJQUFJO2FBQ1AsQ0FBQztZQUNGLG9CQUFvQixHQUFHO2dCQUNyQixJQUFJLENBQUMsYUFBYSxDQUFDO2dCQUNuQix5QkFBeUIsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRztvQkFDdkMseUJBQXlCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztvQkFDcEMsK0JBQStCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUc7b0JBQy9DLCtCQUErQixFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7b0JBQzFDLElBQUk7YUFDUCxDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixPQUFPO2dCQUNMO29CQUNFLEtBQUssRUFBRSxpQkFBaUI7b0JBQ3hCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtvQkFDZixRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUk7b0JBQ25CLFNBQVMsRUFBRTt3QkFDVCxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQztxQkFDckI7b0JBQ0QsTUFBTSxFQUFFLFFBQVE7b0JBQ2hCLFVBQVUsRUFBRSxFQUFFO2lCQUNmO2dCQUNEO29CQUNFLEtBQUssRUFBRSxpQkFBaUI7b0JBQ3hCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtvQkFDZixRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUk7b0JBQ25CLFNBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7b0JBQzdCLE1BQU0sRUFBRSxTQUFTLENBQUMsS0FBSztvQkFDdkIsVUFBVSxFQUFFLEVBQUU7aUJBQ2Y7YUFDRixDQUFDO1FBQ0osQ0FBQztRQUVELE9BQU8sU0FBUztZQUNkLENBQUMsQ0FBQztnQkFDRTtvQkFDRSxLQUFLLEVBQUUsaUJBQWlCO29CQUN4QixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7b0JBQ2YsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJO29CQUNuQixTQUFTLEVBQUU7d0JBQ1QsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUM7cUJBQ3JCO29CQUNELE1BQU0sRUFBRSxRQUFRO29CQUNoQixVQUFVLEVBQUUsRUFBRTtpQkFDZjtnQkFDRDtvQkFDRSxLQUFLLEVBQUUsaUJBQWlCO29CQUN4QixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7b0JBQ2YsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJO29CQUNuQixTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO29CQUM3QixNQUFNLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUF3QixDQUFDO29CQUNoRCxVQUFVLEVBQUUsRUFBRTtpQkFDZjtnQkFDRDtvQkFDRSxLQUFLLEVBQUUsb0JBQW9CO29CQUMzQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7b0JBQ2YsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJO29CQUNuQixTQUFTLEVBQUU7d0JBQ1QsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUM7cUJBQ3JCO29CQUNELE1BQU0sRUFBRSxRQUFRO29CQUNoQixVQUFVLEVBQUUsRUFBRTtpQkFDZjtnQkFDRDtvQkFDRSxLQUFLLEVBQUUsb0JBQW9CO29CQUMzQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7b0JBQ2YsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJO29CQUNuQixTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO29CQUM3QixNQUFNLEVBQUUsU0FBUyxDQUFDLE9BQU87b0JBQ3pCLFVBQVUsRUFBRSxFQUFFO2lCQUNmO2FBQ0Y7WUFDSCxDQUFDLENBQUM7Z0JBQ0U7b0JBQ0UsS0FBSyxFQUFFLGlCQUFpQjtvQkFDeEIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO29CQUNmLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSTtvQkFDbkIsU0FBUyxFQUFFO3dCQUNULEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDO3FCQUNyQjtvQkFDRCxNQUFNLEVBQUUsUUFBUTtvQkFDaEIsVUFBVSxFQUFFLEVBQUU7aUJBQ2Y7Z0JBQ0Q7b0JBQ0UsS0FBSyxFQUFFLGlCQUFpQjtvQkFDeEIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO29CQUNmLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSTtvQkFDbkIsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtvQkFDN0IsTUFBTSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBd0IsQ0FBQztvQkFDaEQsVUFBVSxFQUFFLEVBQUU7aUJBQ2Y7Z0JBQ0Q7b0JBQ0UsS0FBSyxFQUFFLG9CQUFvQjtvQkFDM0IsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO29CQUNmLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSTtvQkFDbkIsU0FBUyxFQUFFO3dCQUNULEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDO3FCQUNyQjtvQkFDRCxNQUFNLEVBQUUsUUFBUTtvQkFDaEIsVUFBVSxFQUFFLEVBQUU7aUJBQ2Y7Z0JBQ0Q7b0JBQ0UsS0FBSyxFQUFFLG9CQUFvQjtvQkFDM0IsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO29CQUNmLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSTtvQkFDbkIsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtvQkFDN0IsTUFBTSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBd0IsQ0FBQztvQkFDaEQsVUFBVSxFQUFFLEVBQUU7aUJBQ2Y7YUFDRixDQUFDO0lBQ1IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxjQUFjLENBQ3BCLEtBQVUsRUFDVixRQUEyQjtRQUUzQixPQUFPLEtBQUssQ0FBQyxNQUFNLENBQWlCLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ2hELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3ZCLE9BQU8sR0FBRyxDQUFDO1lBQ2IsQ0FBQztZQUNELElBQUksUUFBUSxLQUFLLE9BQU8sRUFBRSxDQUFDO2dCQUN6QixPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUM7b0JBQ2hCO3dCQUNFLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSTt3QkFDaEIsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJO3dCQUNuQixLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO3dCQUNsRCxTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO3FCQUNwQztpQkFDRixDQUFDLENBQUM7WUFDTCxDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO2dCQUM5QyxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUM7b0JBQ2hCO3dCQUNFLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWTt3QkFDeEIsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJO3dCQUNuQixLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO3dCQUNsRCxTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO3FCQUNwQztpQkFDRixDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDO29CQUNoQjt3QkFDRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVk7d0JBQ3hCLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSTt3QkFDbkIsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTt3QkFDbEQsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtxQkFDcEM7b0JBQ0Q7d0JBQ0UsS0FBSyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUM7d0JBQzFCLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSTt3QkFDbkIsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTt3QkFDbEQsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtxQkFDcEM7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNULENBQUM7SUFFTyxlQUFlLENBQ3JCLEVBQWdCLEVBQ2hCLFVBQXFELEVBQ3JELEdBQVcsRUFDWCxhQUFhLEdBQUcsS0FBSyxFQUNyQixVQUFVLEdBQUcsRUFBRTtRQUVmLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUM5RCxPQUFPO1lBQ0wsV0FBVztZQUNYLGFBQWEsRUFBRSxFQUFFLENBQUMsSUFBSSxJQUFJLEVBQUU7WUFDNUIsNkRBQTZEO1lBQzdELEVBQUUsRUFBRSxhQUFhO2dCQUNmLENBQUMsQ0FBQyxHQUFHLFdBQVcsSUFBSSxVQUFVLEdBQUcsVUFBVSxFQUFFO2dCQUM3QyxDQUFDLENBQUMsR0FBRyxXQUFXLEdBQUcsVUFBVSxFQUFFO1lBQ2pDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHO1lBQzlDLG1EQUFtRDtZQUNuRCxjQUFjLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQzlCLElBQUksRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFO2dCQUMzRCxPQUFPLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQzdDLENBQUMsQ0FBQztZQUNGLFVBQVUsRUFBRSxHQUFHO1lBQ2YsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLGFBQWEsRUFBRSxVQUFVLENBQUM7U0FDMUUsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSyxtQkFBbUI7UUFDekIsT0FBTyxNQUFNLENBQUMsRUFBRTtZQUNkLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDO2dCQUMvQyxPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUM7WUFDRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBMEIsQ0FBQztZQUNsRCxNQUFNLFVBQVUsR0FBVyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkMsTUFBTSxhQUFhLEdBQWEsRUFBRSxDQUFDO1lBQ25DLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUEwQixDQUFDO1lBRXZGLE1BQU0sa0JBQWtCLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FDekMsTUFBTSxDQUFDLEVBQUUsQ0FDUCxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssT0FBTztnQkFDbEMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLE9BQU87Z0JBQ2xDLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxNQUFNLENBQ3BDLENBQUM7WUFFRixrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUEyQixFQUFFLEVBQUU7Z0JBQ3pELElBQUksS0FBYSxDQUFDO2dCQUNsQixNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFXLENBQUM7Z0JBQ2xDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO29CQUN4QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsbUNBQW1DLENBQ3ZELE1BQU0sQ0FBQyxNQUFNLENBQWtCLEVBQy9CLFVBQVUsQ0FDWCxDQUFDO29CQUNGLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDZCxPQUFPO29CQUNULENBQUM7b0JBQ0QsTUFBTSxTQUFTLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7b0JBQ3ZGLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQzt3QkFDZixPQUFPO29CQUNULENBQUM7b0JBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLG1DQUFtQyxDQUN2RCxTQUFTLENBQUMsTUFBTSxDQUFrQixFQUNsQyxVQUFVLENBQ1gsQ0FBQztvQkFDRixJQUFJLFFBQVEsS0FBSyxJQUFJLEVBQUUsQ0FBQzt3QkFDdEIsT0FBTztvQkFDVCxDQUFDO29CQUNELEtBQUs7d0JBQ0gsMkRBQTJEOzRCQUMzRCxzQ0FBc0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVU7NEJBQ3BGLGtDQUFrQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFOzRCQUNoRSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDOzRCQUM5RCxjQUFjLENBQUM7Z0JBQ25CLENBQUM7cUJBQU0sSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7b0JBQy9CLDhDQUE4QztvQkFDOUMsT0FBTztnQkFDVCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLG1DQUFtQyxDQUMxRCxNQUFNLENBQUMsTUFBTSxDQUFrQixFQUMvQixVQUFVLENBQ1gsQ0FBQztvQkFDRixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7d0JBQ2pCLE9BQU87b0JBQ1QsQ0FBQztvQkFDRCxLQUFLO3dCQUNILDJEQUEyRDs0QkFDM0Qsc0NBQXNDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVOzRCQUN2RixrQ0FBa0MsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFOzRCQUM5RCxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDOzRCQUM5RCxjQUFjLENBQUM7Z0JBQ25CLENBQUM7Z0JBRUQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBc0IsQ0FBQztnQkFFM0QsYUFBYSxDQUFDLElBQUksQ0FDaEIsOEZBQThGLFNBQVMsQ0FBQyxLQUFLLFdBQVcsR0FBRyxlQUFlO29CQUN4SSxXQUFXLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsR0FBRyxPQUFPO29CQUMvRCxHQUFHLEtBQUssRUFBRSxDQUFDLGdDQUFnQztpQkFDOUMsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1lBRUgsT0FBTyxzQkFBc0IsSUFBSSxDQUFDLGFBQWEsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUM7UUFDdkYsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVPLG1DQUFtQyxDQUN6QyxNQUFxQixFQUNyQixlQUEyQjtRQUUzQixNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN0RCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUF1QixFQUFFLElBQWlCLEVBQUUsRUFBRTtZQUNsRSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUM3QyxJQUNFLEdBQUcsS0FBSyxJQUFJO29CQUNaLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLEdBQUcsU0FBUyxDQUFDO3dCQUMvQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxHQUFHLFNBQVMsQ0FBQyxFQUNsRCxDQUFDO29CQUNELE9BQU8sSUFBSSxDQUFDO2dCQUNkLENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDWCxDQUFDOytHQXJoQ1UscUJBQXFCO21IQUFyQixxQkFBcUI7OzRGQUFyQixxQkFBcUI7a0JBRGpDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXRlUGlwZSwgZ2V0dGV4dCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHR5cGUgeyBFQ2hhcnRzT3B0aW9uLCBTZXJpZXNPcHRpb24gfSBmcm9tICdlY2hhcnRzJztcbmltcG9ydCB7IEVDaGFydHMgfSBmcm9tICdlY2hhcnRzJztcbmltcG9ydCB7XG4gIERhdGFwb2ludENoYXJ0UmVuZGVyVHlwZSxcbiAgRHBXaXRoVmFsdWVzLFxuICBEYXRlU3RyaW5nLFxuICBEcFZhbHVlc0l0ZW0sXG4gIE1hcmtMaW5lRGF0YSxcbiAgTWFya1BvaW50RGF0YSxcbiAgU2VyaWVzRGF0YXBvaW50SW5mbyxcbiAgU2VyaWVzVmFsdWVcbn0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IFlBeGlzU2VydmljZSB9IGZyb20gJy4veS1heGlzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhcnRUeXBlc1NlcnZpY2UgfSBmcm9tICcuL2NoYXJ0LXR5cGVzLnNlcnZpY2UnO1xuaW1wb3J0IHR5cGUgeyBDYWxsYmFja0RhdGFQYXJhbXMsIFRvb2x0aXBGb3JtYXR0ZXJDYWxsYmFjayB9IGZyb20gJ2VjaGFydHMvdHlwZXMvc3JjL3V0aWwvdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBUb3BMZXZlbEZvcm1hdHRlclBhcmFtcyB9IGZyb20gJ2VjaGFydHMvdHlwZXMvc3JjL2NvbXBvbmVudC90b29sdGlwL1Rvb2x0aXBNb2RlbCc7XG5pbXBvcnQgeyBBbGFybVN0YXR1cywgSUFsYXJtLCBJRXZlbnQsIFNldmVyaXR5VHlwZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IElDT05TX01BUCB9IGZyb20gJy4uL21vZGVscy9zdmctaWNvbnMubW9kZWwnO1xuaW1wb3J0IHsgQ3VzdG9tU2VyaWVzT3B0aW9ucyB9IGZyb20gJy4uL21vZGVscy9jaGFydC5tb2RlbCc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQWxhcm1TZXZlcml0eVRvSWNvblBpcGUsIEFsYXJtU2V2ZXJpdHlUb0xhYmVsUGlwZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYWxhcm1zJztcbmltcG9ydCB7IEludGVydmFsLCBJTlRFUlZBTFMgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2ludGVydmFsLXBpY2tlcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbnR5cGUgVG9vbHRpcFBvc2l0aW9uQ2FsbGJhY2sgPSAoXG4gIHBvaW50OiBbbnVtYmVyLCBudW1iZXJdLCAvLyBwb3NpdGlvbiBvZiBtb3VzZSBpbiBjaGFydCBbWCwgWV07IDAsMCBpcyB0b3AgbGVmdCBjb3JuZXJcbiAgXzogYW55LCAvLyB0b29sdGlwIGRhdGFcbiAgZG9tOiBIVE1MRWxlbWVudCB8IHVua25vd24sIC8vIHRvb2x0aXAgZWxlbWVudFxuICBfXzogYW55LCAvLyB2YWxpZCBvbmx5IHdoZW4gbW91c2UgaXMgb24gZ3JhcGhpYyBlbGVtZW50czsgbm90IHJlbGV2YW50IGluIG91ciBjYXNlXG4gIHNpemU6IHtcbiAgICBjb250ZW50U2l6ZTogW251bWJlciwgbnVtYmVyXTsgLy8gc2l6ZSBvZiB0b29sdGlwXG4gICAgdmlld1NpemU6IFtudW1iZXIsIG51bWJlcl07IC8vIHNpemUgb2YgdGhlIGNoYXJ0XG4gIH0gfCBudWxsIC8vIHNpemUgb2YgY2hhcnRcbikgPT4gUGFydGlhbDxSZWNvcmQ8J3RvcCcgfCAnYm90dG9tJyB8ICdsZWZ0JyB8ICdyaWdodCcsIG51bWJlcj4+O1xuXG5jb25zdCBJTkRFWF9IVE1MID0gJy9pbmRleC5odG1sJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEVjaGFydHNPcHRpb25zU2VydmljZSB7XG4gIGVjaGFydHNJbnN0YW5jZTogRUNoYXJ0cyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBUT09MVElQX1dJRFRIID0gMzAwO1xuICBwcml2YXRlIHRvb2x0aXBQb3NpdGlvbkNhbGxiYWNrOiBUb29sdGlwUG9zaXRpb25DYWxsYmFjayB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSxcbiAgICBwcml2YXRlIHlBeGlzU2VydmljZTogWUF4aXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhcnRUeXBlc1NlcnZpY2U6IENoYXJ0VHlwZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2V2ZXJpdHlJY29uUGlwZTogQWxhcm1TZXZlcml0eVRvSWNvblBpcGUsXG4gICAgcHJpdmF0ZSBzZXZlcml0eUxhYmVsUGlwZTogQWxhcm1TZXZlcml0eVRvTGFiZWxQaXBlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXJcbiAgKSB7fVxuXG4gIGdldENoYXJ0T3B0aW9ucyhcbiAgICBkYXRhcG9pbnRzV2l0aFZhbHVlczogRHBXaXRoVmFsdWVzW10sXG4gICAgdGltZVJhbmdlOiB7IGRhdGVGcm9tOiBzdHJpbmc7IGRhdGVUbzogc3RyaW5nOyBpbnRlcnZhbDogSW50ZXJ2YWxbJ2lkJ10gfSxcbiAgICBzaG93U3BsaXRMaW5lczogeyBZQXhpczogYm9vbGVhbjsgWEF4aXM6IGJvb2xlYW4gfSxcbiAgICBldmVudHM6IElFdmVudFtdLFxuICAgIGFsYXJtczogSUFsYXJtW10sXG4gICAgZGlzcGxheU9wdGlvbnM6IHtcbiAgICAgIGRpc3BsYXlNYXJrZWRMaW5lOiBib29sZWFuO1xuICAgICAgZGlzcGxheU1hcmtlZFBvaW50OiBib29sZWFuO1xuICAgICAgbWVyZ2VNYXRjaGluZ0RhdGFwb2ludHM6IGJvb2xlYW47XG4gICAgICBzaG93TGFiZWxBbmRVbml0OiBib29sZWFuO1xuICAgICAgc2hvd1NsaWRlcjogYm9vbGVhbjtcbiAgICB9LFxuICAgIHNlbGVjdGVkVGltZVJhbmdlPzogeyBkYXRlRnJvbTogc3RyaW5nOyBkYXRlVG86IHN0cmluZzsgaW50ZXJ2YWw6IEludGVydmFsWydpZCddIH0gfCBudWxsLFxuICAgIGFnZ3JlZ2F0ZWREYXRhcG9pbnRzPzogRHBXaXRoVmFsdWVzW10sXG4gICAgc2xpZGVyWm9vbVVzZWQgPSBmYWxzZVxuICApOiBFQ2hhcnRzT3B0aW9uIHtcbiAgICBjb25zdCB5QXhpcyA9IHRoaXMueUF4aXNTZXJ2aWNlLmdldFlBeGlzKGRhdGFwb2ludHNXaXRoVmFsdWVzLCB7XG4gICAgICBzaG93U3BsaXRMaW5lczogc2hvd1NwbGl0TGluZXMuWUF4aXMsXG4gICAgICBtZXJnZU1hdGNoaW5nRGF0YXBvaW50czogZGlzcGxheU9wdGlvbnMubWVyZ2VNYXRjaGluZ0RhdGFwb2ludHMsXG4gICAgICBzaG93TGFiZWxBbmRVbml0OiBkaXNwbGF5T3B0aW9ucy5zaG93TGFiZWxBbmRVbml0XG4gICAgfSk7XG4gICAgY29uc3QgbGVmdEF4aXMgPSB5QXhpcy5maWx0ZXIoeXggPT4geXgucG9zaXRpb24gPT09ICdsZWZ0Jyk7XG4gICAgY29uc3QgZ3JpZExlZnQgPSBsZWZ0QXhpcy5sZW5ndGggPyBsZWZ0QXhpcy5sZW5ndGggKiB0aGlzLnlBeGlzU2VydmljZS5ZX0FYSVNfT0ZGU0VUIDogMTY7XG4gICAgY29uc3QgcmlnaHRBeGlzID0geUF4aXMuZmlsdGVyKHl4ID0+IHl4LnBvc2l0aW9uID09PSAncmlnaHQnKTtcbiAgICBjb25zdCBncmlkUmlnaHQgPSByaWdodEF4aXMubGVuZ3RoID8gcmlnaHRBeGlzLmxlbmd0aCAqIHRoaXMueUF4aXNTZXJ2aWNlLllfQVhJU19PRkZTRVQgOiAxNjtcbiAgICBsZXQgaW50ZXJ2YWxJbk1zID0gdGhpcy5jYWxjdWxhdGVFeHRlbmRlZEludGVydmFsSW5NcyhcbiAgICAgIHNlbGVjdGVkVGltZVJhbmdlPy5pbnRlcnZhbCB8fCB0aW1lUmFuZ2UuaW50ZXJ2YWwgfHwgJ2hvdXJzJyxcbiAgICAgIHNlbGVjdGVkVGltZVJhbmdlIHx8IHRpbWVSYW5nZVxuICAgICk7XG4gICAgaWYgKHNsaWRlclpvb21Vc2VkKSB7XG4gICAgICBpbnRlcnZhbEluTXMgPSB0aGlzLmNhbGN1bGF0ZUV4dGVuZGVkSW50ZXJ2YWxJbk1zKHRpbWVSYW5nZS5pbnRlcnZhbCB8fCAnaG91cnMnLCB0aW1lUmFuZ2UpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZ3JpZDoge1xuICAgICAgICBjb250YWluTGFiZWw6IGZhbHNlLCAvLyBheGlzIGxhYmVscyBhcmUgbm90IHRha2VuIGludG8gYWNjb3VudCB0byBjYWxjdWxhdGUgZ3JhcGggZ3JpZFxuICAgICAgICBsZWZ0OiBncmlkTGVmdCxcbiAgICAgICAgdG9wOiAxNixcbiAgICAgICAgcmlnaHQ6IGdyaWRSaWdodCxcbiAgICAgICAgYm90dG9tOiA2OFxuICAgICAgfSxcbiAgICAgIGRhdGFab29tOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAnaW5zaWRlJyxcbiAgICAgICAgICAvLyBUT0RPOiB1c2UgJ25vbmUnIG9ubHkgd2hlbiB0aGlzIGJ1ZyBpcyBmaXhlZCBodHRwczovL2dpdGh1Yi5jb20vYXBhY2hlL2VjaGFydHMvaXNzdWVzLzE3ODU4XG4gICAgICAgICAgZmlsdGVyTW9kZTogZGF0YXBvaW50c1dpdGhWYWx1ZXMuc29tZShkcCA9PiBkcC5saW5lVHlwZSA9PT0gJ2JhcnMnKSA/ICdmaWx0ZXInIDogJ25vbmUnLFxuICAgICAgICAgIHpvb21Pbk1vdXNlV2hlZWw6IHRydWUsXG4gICAgICAgICAgc3RhcnRWYWx1ZTogc2VsZWN0ZWRUaW1lUmFuZ2VcbiAgICAgICAgICAgID8gc2VsZWN0ZWRUaW1lUmFuZ2UuZGF0ZUZyb20udmFsdWVPZigpXG4gICAgICAgICAgICA6IHRpbWVSYW5nZS5kYXRlRnJvbS52YWx1ZU9mKCksXG4gICAgICAgICAgZW5kVmFsdWU6IHNlbGVjdGVkVGltZVJhbmdlXG4gICAgICAgICAgICA/IHNlbGVjdGVkVGltZVJhbmdlLmRhdGVUby52YWx1ZU9mKClcbiAgICAgICAgICAgIDogdGltZVJhbmdlLmRhdGVUby52YWx1ZU9mKClcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdzbGlkZXInLFxuICAgICAgICAgIHNob3c6IGRpc3BsYXlPcHRpb25zLnNob3dTbGlkZXIsXG4gICAgICAgICAgYm90dG9tOiA4LFxuICAgICAgICAgIHJlYWx0aW1lOiBmYWxzZVxuICAgICAgICB9XG4gICAgICBdLCAvLyBvbiByZWFsdGltZSwgJ25vbmUnIHdpbGwgY2F1c2UgZXh0ZW5kaW5nIGNoYXJ0IGxpbmUgdG8gbGVmdCBlZGdlIG9mIHRoZSBjaGFydFxuICAgICAgYW5pbWF0aW9uOiBmYWxzZSxcbiAgICAgIHRvb2xib3g6IHtcbiAgICAgICAgc2hvdzogdHJ1ZSxcbiAgICAgICAgaXRlbVNpemU6IDAsIC8vIHRvb2xib3ggaXMgbmVlZGVkIGZvciB6b29taW5nIGluIGFjdGlvbiwgYnV0IHdlIHByb3ZpZGUgb3VyIG93biBidXR0b25zXG4gICAgICAgIGZlYXR1cmU6IHtcbiAgICAgICAgICBkYXRhWm9vbToge1xuICAgICAgICAgICAgeUF4aXNJbmRleDogJ25vbmUnXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdG9vbHRpcDoge1xuICAgICAgICB0cmlnZ2VyOiAnYXhpcycsXG4gICAgICAgIGF4aXNQb2ludGVyOiB7XG4gICAgICAgICAgdHlwZTogJ2Nyb3NzJyxcbiAgICAgICAgICBzbmFwOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC45KScsXG4gICAgICAgIGZvcm1hdHRlcjogdGhpcy5nZXRUb29sdGlwRm9ybWF0dGVyKCksXG4gICAgICAgIGFwcGVuZFRvQm9keTogdHJ1ZSxcbiAgICAgICAgcG9zaXRpb246IHRoaXMudG9vbHRpcFBvc2l0aW9uKCksXG4gICAgICAgIHRyYW5zaXRpb25EdXJhdGlvbjogMFxuICAgICAgfSxcbiAgICAgIGxlZ2VuZDoge1xuICAgICAgICBzaG93OiBmYWxzZVxuICAgICAgfSxcbiAgICAgIHhBeGlzOiB7XG4gICAgICAgIG1pbjogbmV3IERhdGUodGltZVJhbmdlLmRhdGVGcm9tKS52YWx1ZU9mKCkgLSBpbnRlcnZhbEluTXMsXG4gICAgICAgIG1heDogdGltZVJhbmdlLmRhdGVUbyxcbiAgICAgICAgdHlwZTogJ3RpbWUnLFxuICAgICAgICBhbmltYXRpb246IGZhbHNlLFxuICAgICAgICBheGlzUG9pbnRlcjoge1xuICAgICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgICBzaG93OiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgYXhpc0xpbmU6IHtcbiAgICAgICAgICAvLyBhbGlnbiBYIGF4aXMgdG8gMCBvZiBZIGF4aXMgb2YgZGF0YXBvaW50IHdpdGggbGluZVR5cGUgJ2JhcnMnXG4gICAgICAgICAgb25aZXJvQXhpc0luZGV4OiBkYXRhcG9pbnRzV2l0aFZhbHVlcy5maW5kSW5kZXgoZHAgPT4gZHAubGluZVR5cGUgPT09ICdiYXJzJylcbiAgICAgICAgfSxcbiAgICAgICAgYXhpc0xhYmVsOiB7XG4gICAgICAgICAgaGlkZU92ZXJsYXA6IHRydWUsXG4gICAgICAgICAgYm9yZGVyV2lkdGg6IDIsIC8vIGFzIHRoZXJlIGlzIG5vIG1hcmdpbiBmb3IgbGFiZWxzIHNwYWNpbmcsIHRyYW5zcGFyZW50IGJvcmRlciBpcyBhIHdvcmthcm91bmRcbiAgICAgICAgICBib3JkZXJDb2xvcjogJ3RyYW5zcGFyZW50J1xuICAgICAgICB9LFxuICAgICAgICBzcGxpdExpbmU6IHtcbiAgICAgICAgICBzaG93OiBzaG93U3BsaXRMaW5lcy5YQXhpcyxcbiAgICAgICAgICBsaW5lU3R5bGU6IHsgb3BhY2l0eTogMC44LCB0eXBlOiAnZGFzaGVkJywgd2lkdGg6IDIgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeUF4aXMsXG4gICAgICBzZXJpZXM6IFtcbiAgICAgICAgLi4udGhpcy5nZXRBZ2dyZWdhdGVkU2VyaWVzKGFnZ3JlZ2F0ZWREYXRhcG9pbnRzIHx8IFtdKS5maWx0ZXIoXG4gICAgICAgICAgc2VyaWVzID0+IHNlcmllcyAhPT0gdW5kZWZpbmVkXG4gICAgICAgICksXG4gICAgICAgIC4uLnRoaXMuZ2V0Q2hhcnRTZXJpZXMoZGF0YXBvaW50c1dpdGhWYWx1ZXMsIGV2ZW50cywgYWxhcm1zLCBkaXNwbGF5T3B0aW9ucylcbiAgICAgIF1cbiAgICB9O1xuICB9XG5cbiAgY2FsY3VsYXRlRXh0ZW5kZWRJbnRlcnZhbEluTXMoaW50ZXJ2YWw6IEludGVydmFsWydpZCddLCBzZWxlY3RlZFRpbWVSYW5nZSk6IG51bWJlciB7XG4gICAgbGV0IGludGVydmFsSW5NcyA9IElOVEVSVkFMUy5maW5kKGkgPT4gaS5pZCA9PT0gaW50ZXJ2YWwpLnRpbWVzcGFuSW5NcztcbiAgICBzd2l0Y2ggKGludGVydmFsKSB7XG4gICAgICBjYXNlICdtaW51dGVzJzpcbiAgICAgICAgaW50ZXJ2YWxJbk1zID0gSU5URVJWQUxTLmZpbmQoaSA9PiBpLmlkID09PSBpbnRlcnZhbCkudGltZXNwYW5Jbk1zICogNjA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaG91cnMnOlxuICAgICAgICBpbnRlcnZhbEluTXMgPSBJTlRFUlZBTFMuZmluZChpID0+IGkuaWQgPT09IGludGVydmFsKS50aW1lc3BhbkluTXMgKiAyNDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkYXlzJzpcbiAgICAgICAgaW50ZXJ2YWxJbk1zID0gSU5URVJWQUxTLmZpbmQoaSA9PiBpLmlkID09PSBpbnRlcnZhbCkudGltZXNwYW5Jbk1zICogMjg7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnd2Vla3MnOlxuICAgICAgICBpbnRlcnZhbEluTXMgPSBJTlRFUlZBTFMuZmluZChpID0+IGkuaWQgPT09IGludGVydmFsKS50aW1lc3BhbkluTXMgKiAxMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdtb250aHMnOlxuICAgICAgICBpbnRlcnZhbEluTXMgPSBJTlRFUlZBTFMuZmluZChpID0+IGkuaWQgPT09IGludGVydmFsKS50aW1lc3BhbkluTXMgKiAxMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjdXN0b20nOlxuICAgICAgICBpbnRlcnZhbEluTXMgPVxuICAgICAgICAgIChuZXcgRGF0ZShzZWxlY3RlZFRpbWVSYW5nZS5kYXRlVG8pLnZhbHVlT2YoKSAtXG4gICAgICAgICAgICBuZXcgRGF0ZShzZWxlY3RlZFRpbWVSYW5nZS5kYXRlRnJvbSkudmFsdWVPZigpKSAqXG4gICAgICAgICAgMTI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaW50ZXJ2YWxJbk1zID0gSU5URVJWQUxTLmZpbmQoaSA9PiBpLmlkID09PSBpbnRlcnZhbCkudGltZXNwYW5Jbk1zO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIGludGVydmFsSW5NcztcbiAgfVxuXG4gIGdldEFnZ3JlZ2F0ZWRTZXJpZXMoYWdncmVnYXRlZERhdGFwb2ludHM6IERwV2l0aFZhbHVlc1tdKTogU2VyaWVzT3B0aW9uW10ge1xuICAgIGNvbnN0IHNlcmllczogU2VyaWVzT3B0aW9uW10gPSBbXTtcbiAgICBhZ2dyZWdhdGVkRGF0YXBvaW50cy5mb3JFYWNoKChkcCwgaWR4KSA9PiB7XG4gICAgICBjb25zdCByZW5kZXJUeXBlOiBEYXRhcG9pbnRDaGFydFJlbmRlclR5cGUgPSBkcC5yZW5kZXJUeXBlIHx8ICdtaW4nO1xuICAgICAgaWYgKHJlbmRlclR5cGUgPT09ICdhcmVhJykge1xuICAgICAgICBzZXJpZXMucHVzaCh0aGlzLmdldFNpbmdsZVNlcmllcyhkcCwgJ21pbicsIGlkeCwgdHJ1ZSwgJ2FnZ3InKSk7XG4gICAgICAgIHNlcmllcy5wdXNoKHRoaXMuZ2V0U2luZ2xlU2VyaWVzKGRwLCAnbWF4JywgaWR4LCB0cnVlLCAnYWdncicpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlcmllcy5wdXNoKHRoaXMuZ2V0U2luZ2xlU2VyaWVzKGRwLCByZW5kZXJUeXBlLCBpZHgsIGZhbHNlLCAnYWdncicpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHNlcmllcy5mb3JFYWNoKChzOiBhbnkpID0+IHtcbiAgICAgIHMuZGF0YXBvaW50SWQgPSAnYWdncmVnYXRlZCc7XG4gICAgICBzLnR5cGVPZlNlcmllcyA9ICdmYWtlJztcbiAgICAgIHMuaXRlbVN0eWxlID0ge1xuICAgICAgICAuLi5zLml0ZW1TdHlsZSxcbiAgICAgICAgb3BhY2l0eTogMFxuICAgICAgfTtcbiAgICAgIHMubGluZVN0eWxlID0ge1xuICAgICAgICAuLi5zLmxpbmVTdHlsZSxcbiAgICAgICAgb3BhY2l0eTogMFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHJldHVybiBbc2VyaWVzWzBdXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGdldCB0aGUgc2VyaWVzIGZvciBhbGFybXMgYW5kIGV2ZW50cy5cbiAgICogQHBhcmFtIGRwIC0gVGhlIGRhdGEgcG9pbnQuXG4gICAqIEBwYXJhbSByZW5kZXJUeXBlIC0gVGhlIHJlbmRlciB0eXBlLlxuICAgKiBAcGFyYW0gaXNNaW5NYXhDaGFydCAtIElmIHRoZSBjaGFydCBpcyBtaW4gbWF4IGNoYXJ0LlxuICAgKiBAcGFyYW0gaXRlbXMgLSBBbGwgYWxhcm1zIG9yIGV2ZW50cyB3aGljaCBzaG91bGQgYmUgZGlzcGxheWVkIG9uIHRoZSBjaGFydC5cbiAgICogQHBhcmFtIGl0ZW1UeXBlIC0gVGhlIGl0ZW0gdHlwZS5cbiAgICogQHBhcmFtIGlkIC0gVGhlIGlkIG9mIHRoZSBkZXZpY2VcbiAgICovXG4gIGdldEFsYXJtT3JFdmVudFNlcmllcyhcbiAgICBkcDogRHBXaXRoVmFsdWVzLFxuICAgIHJlbmRlclR5cGU6IERhdGFwb2ludENoYXJ0UmVuZGVyVHlwZSxcbiAgICBpc01pbk1heENoYXJ0ID0gZmFsc2UsXG4gICAgaXRlbXM6IElBbGFybVtdIHwgSUV2ZW50W10gPSBbXSxcbiAgICBpdGVtVHlwZTogJ2FsYXJtJyB8ICdldmVudCcgPSAnYWxhcm0nLFxuICAgIGRpc3BsYXlPcHRpb25zID0geyBkaXNwbGF5TWFya2VkTGluZTogdHJ1ZSwgZGlzcGxheU1hcmtlZFBvaW50OiB0cnVlIH0sXG4gICAgaWQ/OiBzdHJpbmcgfCBudW1iZXIsXG4gICAgaWR4PzogbnVtYmVyLFxuICAgIHJlYWx0aW1lPzogYm9vbGVhblxuICApOiBDdXN0b21TZXJpZXNPcHRpb25zW10ge1xuICAgIGlmICghaXRlbXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgaWYgKCFkaXNwbGF5T3B0aW9ucy5kaXNwbGF5TWFya2VkTGluZSAmJiAhZGlzcGxheU9wdGlvbnMuZGlzcGxheU1hcmtlZFBvaW50KSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLy9maWx0ZXIgaXRlbXMgdGhhdCBhcmUgbm90IF9faGlkZGVuXG4gICAgY29uc3QgZmlsdGVyZWRJdGVtczogSUFsYXJtW10gfCBJRXZlbnRbXSA9IGl0ZW1zLmZpbHRlcihpdGVtID0+ICFpdGVtWydfX2hpZGRlbiddKTtcbiAgICBjb25zdCBpdGVtc0J5VHlwZSA9IHRoaXMuZ3JvdXBCeVR5cGUoZmlsdGVyZWRJdGVtcywgJ3R5cGUnKTtcbiAgICBjb25zdCBpc0FsYXJtID0gaXRlbVR5cGUgPT09ICdhbGFybSc7XG5cbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoaXRlbXNCeVR5cGUpLmZsYXRNYXAoXG4gICAgICAoW3R5cGUsIGl0ZW1zT2ZUeXBlXTogW3N0cmluZywgKElBbGFybSB8IElFdmVudClbXV0pID0+IHtcbiAgICAgICAgLy8gTWFpbiBzZXJpZXMgZGF0YVxuICAgICAgICBjb25zdCBtYWluRGF0YSA9IGl0ZW1zT2ZUeXBlLm1hcChpdGVtID0+IFtpdGVtLmNyZWF0aW9uVGltZSwgbnVsbCwgJ21hcmtMaW5lRmxhZyddKTtcbiAgICAgICAgLy8gSXMgYSBzcGVjaWZpYyBkYXRhcG9pbnQgdGVtcGxhdGUgc2VsZWN0ZWQgZm9yIHRoaXMgYWxhcm0vZXZlbnQgdHlwZT9cbiAgICAgICAgbGV0IGlzRHBUZW1wbGF0ZVNlbGVjdGVkID0gZmFsc2U7XG5cbiAgICAgICAgLy8gTWFya1BvaW50IGRhdGFcbiAgICAgICAgY29uc3QgbWFya1BvaW50RGF0YSA9IGl0ZW1zT2ZUeXBlLnJlZHVjZTxNYXJrUG9pbnREYXRhW10+KChhY2MsIGl0ZW0pID0+IHtcbiAgICAgICAgICBpc0RwVGVtcGxhdGVTZWxlY3RlZCA9XG4gICAgICAgICAgICBpdGVtWydzZWxlY3RlZERhdGFwb2ludCddICYmXG4gICAgICAgICAgICBkcFsnX190YXJnZXQnXSAmJlxuICAgICAgICAgICAgaXRlbVsnc2VsZWN0ZWREYXRhcG9pbnQnXVsnZnJhZ21lbnQnXSA9PT0gZHBbJ2ZyYWdtZW50J10gJiZcbiAgICAgICAgICAgIGl0ZW1bJ3NlbGVjdGVkRGF0YXBvaW50J11bJ3NlcmllcyddID09PSBkcFsnc2VyaWVzJ10gJiZcbiAgICAgICAgICAgIGl0ZW1bJ3NlbGVjdGVkRGF0YXBvaW50J11bJ3RhcmdldCddID09PSBkcFsnX190YXJnZXQnXVsnaWQnXTtcbiAgICAgICAgICBpZiAoZHAuX190YXJnZXQ/LmlkID09PSBpdGVtLnNvdXJjZS5pZCkge1xuICAgICAgICAgICAgY29uc3QgaXNDbGVhcmVkID0gaXNBbGFybSAmJiBpdGVtLnN0YXR1cyA9PT0gQWxhcm1TdGF0dXMuQ0xFQVJFRDtcbiAgICAgICAgICAgIGNvbnN0IGlzRXZlbnQgPSAhaXNBbGFybTtcbiAgICAgICAgICAgIHJldHVybiBhY2MuY29uY2F0KHRoaXMuY3JlYXRlTWFya1BvaW50KGl0ZW0sIGRwLCBpc0NsZWFyZWQsIGlzRXZlbnQsIHJlYWx0aW1lKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaXRlbS5jcmVhdGlvblRpbWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQoW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29vcmQ6IFtpdGVtLmNyZWF0aW9uVGltZSwgbnVsbF0sXG4gICAgICAgICAgICAgICAgbmFtZTogaXRlbS50eXBlLFxuICAgICAgICAgICAgICAgIGl0ZW1UeXBlOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICAgICAgaXRlbVN0eWxlOiB7IGNvbG9yOiBpdGVtWydjb2xvciddIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBbXSk7XG5cbiAgICAgICAgLy8gQ29uc3RydWN0IHNlcmllcyB3aXRoIG1hcmtQb2ludFxuICAgICAgICBjb25zdCBzZXJpZXNXaXRoTWFya1BvaW50ID0ge1xuICAgICAgICAgIGlkOiBgJHt0eXBlfS8ke2RwLl9fdGFyZ2V0Py5pZH0rJHtpZCA/IGlkIDogJyd9LW1hcmtQb2ludGAsXG4gICAgICAgICAgbmFtZTogYCR7dHlwZX0tbWFya1BvaW50YCxcbiAgICAgICAgICB0eXBlT2ZTZXJpZXM6IGl0ZW1UeXBlLFxuICAgICAgICAgIGRhdGE6IG1haW5EYXRhLFxuICAgICAgICAgIGlzRHBUZW1wbGF0ZVNlbGVjdGVkLFxuICAgICAgICAgIHBvc2l0aW9uOiAnYm90dG9tJyxcbiAgICAgICAgICBzaWxlbnQ6IHRydWUsXG4gICAgICAgICAgbWFya1BvaW50OiB7XG4gICAgICAgICAgICBzaG93U3ltYm9sOiB0cnVlLFxuICAgICAgICAgICAgc3ltYm9sS2VlcEFzcGVjdDogdHJ1ZSxcbiAgICAgICAgICAgIGRhdGE6IG1hcmtQb2ludERhdGFcbiAgICAgICAgICB9LFxuICAgICAgICAgIHlBeGlzSW5kZXg6IGlkeCxcbiAgICAgICAgICAuLi50aGlzLmNoYXJ0VHlwZXNTZXJ2aWNlLmdldFNlcmllc09wdGlvbnMoZHAsIGlzTWluTWF4Q2hhcnQsIHJlbmRlclR5cGUpXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgbWFya0xpbmVEYXRhID0gdGhpcy5jcmVhdGVNYXJrTGluZShpdGVtc09mVHlwZSwgaXRlbVR5cGUpO1xuXG4gICAgICAgIC8vIENvbnN0cnVjdCBzZXJpZXMgd2l0aCBtYXJrTGluZVxuICAgICAgICBjb25zdCBzZXJpZXNXaXRoTWFya0xpbmUgPSB7XG4gICAgICAgICAgaWQ6IGAke3R5cGV9LyR7ZHAuX190YXJnZXQ/LmlkfSske2lkID8gaWQgOiAnJ30tbWFya0xpbmVgLFxuICAgICAgICAgIG5hbWU6IGAke3R5cGV9LW1hcmtMaW5lYCxcbiAgICAgICAgICB0eXBlT2ZTZXJpZXM6IGl0ZW1UeXBlLFxuICAgICAgICAgIGlzRHBUZW1wbGF0ZVNlbGVjdGVkLFxuICAgICAgICAgIGRhdGE6IG1haW5EYXRhLFxuICAgICAgICAgIG1hcmtMaW5lOiB7XG4gICAgICAgICAgICBzaG93U3ltYm9sOiBmYWxzZSxcbiAgICAgICAgICAgIHN5bWJvbDogWydub25lJywgJ25vbmUnXSwgLy8gbm8gc3ltYm9sIGF0IHRoZSBzdGFydC9lbmQgb2YgdGhlIGxpbmVcbiAgICAgICAgICAgIGRhdGE6IG1hcmtMaW5lRGF0YVxuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4udGhpcy5jaGFydFR5cGVzU2VydmljZS5nZXRTZXJpZXNPcHRpb25zKGRwLCBpc01pbk1heENoYXJ0LCByZW5kZXJUeXBlKVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vZGVwZW5kaW5nIG9uIHRoZSBvcHRpb25zIHJldHVybiBvbmx5IHRoZSByZXF1aXJlZCBzZXJpZXNcbiAgICAgICAgaWYgKGRpc3BsYXlPcHRpb25zLmRpc3BsYXlNYXJrZWRMaW5lICYmIGRpc3BsYXlPcHRpb25zLmRpc3BsYXlNYXJrZWRQb2ludCkge1xuICAgICAgICAgIHJldHVybiBbc2VyaWVzV2l0aE1hcmtMaW5lLCBzZXJpZXNXaXRoTWFya1BvaW50XTtcbiAgICAgICAgfSBlbHNlIGlmIChkaXNwbGF5T3B0aW9ucy5kaXNwbGF5TWFya2VkTGluZSkge1xuICAgICAgICAgIHJldHVybiBbc2VyaWVzV2l0aE1hcmtMaW5lXTtcbiAgICAgICAgfSBlbHNlIGlmIChkaXNwbGF5T3B0aW9ucy5kaXNwbGF5TWFya2VkUG9pbnQpIHtcbiAgICAgICAgICByZXR1cm4gW3Nlcmllc1dpdGhNYXJrUG9pbnRdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKSBhcyBDdXN0b21TZXJpZXNPcHRpb25zW107XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBnZXQgdG9vbHRpcCBmb3JtYXR0ZXIgZm9yIGFsYXJtcyBhbmQgZXZlbnRzLlxuICAgKiBAcGFyYW0gdG9vbHRpcFBhcmFtcyAtIFRoZSB0b29sdGlwIHBhcmFtZXRlcnMuXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBkYXRhLlxuICAgKiBAcGFyYW0gYWxsRXZlbnRzIC0gQWxsIGV2ZW50cy5cbiAgICogQHBhcmFtIGFsbEFsYXJtcyAtIEFsbCBhbGFybXMuXG4gICAqIEByZXR1cm5zIFRoZSBmb3JtYXR0ZWQgc3RyaW5nIGZvciB0aGUgdG9vbHRpcC5cbiAgICovXG4gIGdldFRvb2x0aXBGb3JtYXR0ZXJGb3JBbGFybUFuZEV2ZW50cyhcbiAgICB0b29sdGlwUGFyYW1zOiBDYWxsYmFja0RhdGFQYXJhbXMsXG4gICAgcGFyYW1zOiB7IGRhdGE6IHsgaXRlbVR5cGU6IHN0cmluZyB9IH0sXG4gICAgYWxsRXZlbnRzOiBJRXZlbnRbXSxcbiAgICBhbGxBbGFybXM6IElBbGFybVtdXG4gICk6IHN0cmluZyB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHRvb2x0aXBQYXJhbXMpKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGNvbnN0IFhBeGlzVmFsdWU6IHN0cmluZyA9IHRvb2x0aXBQYXJhbXNbMF0uZGF0YVswXTtcbiAgICBjb25zdCBZQXhpc1JlYWRpbmdzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGFsbFNlcmllcyA9IHRoaXMuZWNoYXJ0c0luc3RhbmNlPy5nZXRPcHRpb24oKVsnc2VyaWVzJ10gYXMgQ3VzdG9tU2VyaWVzT3B0aW9uc1tdO1xuXG4gICAgLy8gZmlsdGVyIG91dCBhbGFybSBhbmQgZXZlbnQgc2VyaWVzXG4gICAgY29uc3QgYWxsRGF0YVBvaW50U2VyaWVzID0gYWxsU2VyaWVzLmZpbHRlcihcbiAgICAgIHNlcmllcyA9PiBzZXJpZXNbJ3R5cGVPZlNlcmllcyddICE9PSAnYWxhcm0nICYmIHNlcmllc1sndHlwZU9mU2VyaWVzJ10gIT09ICdldmVudCdcbiAgICApO1xuXG4gICAgdGhpcy5wcm9jZXNzU2VyaWVzKGFsbERhdGFQb2ludFNlcmllcywgWEF4aXNWYWx1ZSwgWUF4aXNSZWFkaW5ncyk7XG5cbiAgICAvLyBmaW5kIGV2ZW50IGFuZCBhbGFybSBvZiB0aGUgc2FtZSB0eXBlIGFzIHRoZSBob3ZlcmVkIG1hcmtlZExpbmUgb3IgbWFya2VkUG9pbnRcbiAgICBjb25zdCBldmVudCA9IGFsbEV2ZW50cy5maW5kKGUgPT4gZS50eXBlID09PSBwYXJhbXMuZGF0YS5pdGVtVHlwZSk7XG4gICAgY29uc3QgYWxhcm0gPSBhbGxBbGFybXMuZmluZChhID0+IGEudHlwZSA9PT0gcGFyYW1zLmRhdGEuaXRlbVR5cGUpO1xuXG4gICAgbGV0IHZhbHVlID0gJyc7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICB2YWx1ZSA9IHRoaXMucHJvY2Vzc0V2ZW50KGV2ZW50LCBYQXhpc1ZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoYWxhcm0pIHtcbiAgICAgIHRoaXMucHJvY2Vzc0FsYXJtKGFsYXJtKS50aGVuKGFsYXJtVmFsID0+IHtcbiAgICAgICAgdmFsdWUgPSBhbGFybVZhbDtcbiAgICAgICAgWUF4aXNSZWFkaW5ncy5wdXNoKHZhbHVlKTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZWNoYXJ0c0luc3RhbmNlPy5nZXRPcHRpb24oKSBhcyBFQ2hhcnRzT3B0aW9uO1xuICAgICAgICBpZiAoIW9wdGlvbnMudG9vbHRpcCB8fCAhQXJyYXkuaXNBcnJheShvcHRpb25zLnRvb2x0aXApKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRPcHRpb25zOiBQYXJ0aWFsPFNlcmllc09wdGlvbj4gPSB7XG4gICAgICAgICAgdG9vbHRpcDogb3B0aW9uc1sndG9vbHRpcCddWzBdXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKCF1cGRhdGVkT3B0aW9ucy50b29sdGlwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZWRPcHRpb25zLnRvb2x0aXAuZm9ybWF0dGVyID0gYDxkaXYgc3R5bGU9XCJ3aWR0aDogJHt0aGlzLlRPT0xUSVBfV0lEVEh9cHhcIj4ke1lBeGlzUmVhZGluZ3Muam9pbignJyl9PC9kaXY+YDtcbiAgICAgICAgdXBkYXRlZE9wdGlvbnMudG9vbHRpcC50cmFuc2l0aW9uRHVyYXRpb24gPSAwO1xuICAgICAgICB1cGRhdGVkT3B0aW9ucy50b29sdGlwLnBvc2l0aW9uID0gdGhpcy50b29sdGlwUG9zaXRpb24oKTtcbiAgICAgICAgdGhpcy5lY2hhcnRzSW5zdGFuY2U/LnNldE9wdGlvbih1cGRhdGVkT3B0aW9ucyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBZQXhpc1JlYWRpbmdzLnB1c2godmFsdWUpO1xuXG4gICAgcmV0dXJuIGA8ZGl2IHN0eWxlPVwid2lkdGg6IDMwMHB4XCI+JHtZQXhpc1JlYWRpbmdzLmpvaW4oJycpfTwvZGl2PmA7XG4gIH1cblxuICBwcml2YXRlIHRvb2x0aXBQb3NpdGlvbigpOiBUb29sdGlwUG9zaXRpb25DYWxsYmFjayB7XG4gICAgbGV0IGxhc3RQb3NpdGlvbk9mVG9vbHRpcDogUGFydGlhbDxSZWNvcmQ8J3RvcCcgfCAnYm90dG9tJyB8ICdsZWZ0JyB8ICdyaWdodCcsIG51bWJlcj4+ID0ge307XG4gICAgaWYgKHRoaXMudG9vbHRpcFBvc2l0aW9uQ2FsbGJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLnRvb2x0aXBQb3NpdGlvbkNhbGxiYWNrO1xuICAgIH1cblxuICAgIHRoaXMudG9vbHRpcFBvc2l0aW9uQ2FsbGJhY2sgPSAoXG4gICAgICBwb2ludDogW251bWJlciwgbnVtYmVyXSwgLy8gcG9zaXRpb24gb2YgbW91c2UgaW4gY2hhcnQgW1gsIFldOyAwLDAgaXMgdG9wIGxlZnQgY29ybmVyXG4gICAgICBfOiBhbnksIC8vIHRvb2x0aXAgZGF0YVxuICAgICAgZG9tOiBIVE1MRWxlbWVudCB8IHVua25vd24sIC8vIHRvb2x0aXAgZWxlbWVudFxuICAgICAgX186IGFueSxcbiAgICAgIHNpemU6IHtcbiAgICAgICAgY29udGVudFNpemU6IFtudW1iZXIsIG51bWJlcl07IC8vIHNpemUgb2YgdG9vbHRpcFxuICAgICAgICB2aWV3U2l6ZTogW251bWJlciwgbnVtYmVyXTtcbiAgICAgIH0gfCBudWxsIC8vIHNpemUgb2YgY2hhcnRcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IG9mZnNldCA9IDEwO1xuICAgICAgY29uc3QgW21vdXNlWCwgbW91c2VZXSA9IHBvaW50O1xuICAgICAgY29uc3QgY2hhcnRXaWR0aCA9IHNpemU/LnZpZXdTaXplWzBdIHx8IDA7XG4gICAgICBjb25zdCBjaGFydEhlaWdodCA9IHNpemU/LnZpZXdTaXplWzFdIHx8IDA7XG4gICAgICBjb25zdCB0b29sdGlwV2lkdGggPSBzaXplPy5jb250ZW50U2l6ZVswXSB8fCAwO1xuICAgICAgY29uc3QgdG9vbHRpcEhlaWdodCA9IHNpemU/LmNvbnRlbnRTaXplWzFdIHx8IDA7XG4gICAgICBjb25zdCB0b29sdGlwUmVjdCA9IChkb20gYXMgSFRNTEVsZW1lbnQpPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IHRvb2x0aXBPdmVyZmxvd3NCb3R0b21FZGdlID0gdG9vbHRpcFJlY3QuYm90dG9tID4gd2luZG93LmlubmVySGVpZ2h0O1xuXG4gICAgICBjb25zdCB0b29sdGlwT3ZlcmZsb3dzUmlnaHRFZGdlID0gdG9vbHRpcFJlY3QucmlnaHQgPiB3aW5kb3cuaW5uZXJXaWR0aDtcblxuICAgICAgY29uc3QgdG9vbHRpcFdvdWxkT3ZlcmZsb3dCb3R0b21FZGdlT25Qb3NpdGlvbkNoYW5nZSA9XG4gICAgICAgICFsYXN0UG9zaXRpb25PZlRvb2x0aXAudG9wICYmXG4gICAgICAgIHRvb2x0aXBSZWN0LmJvdHRvbSArIDIgKiBvZmZzZXQgKyB0b29sdGlwSGVpZ2h0ID4gd2luZG93LmlubmVySGVpZ2h0O1xuXG4gICAgICBjb25zdCB0b29sdGlwV291bGRPdmVyZmxvd1JpZ2h0RWRnZU9uUG9zaXRpb25DaGFuZ2UgPVxuICAgICAgICAhbGFzdFBvc2l0aW9uT2ZUb29sdGlwLmxlZnQgJiZcbiAgICAgICAgdG9vbHRpcFJlY3QucmlnaHQgKyAyICogb2Zmc2V0ICsgdG9vbHRpcFdpZHRoID4gd2luZG93LmlubmVyV2lkdGg7XG5cbiAgICAgIGxldCB2ZXJ0aWNhbFBvc2l0aW9uOiB7IHRvcDogbnVtYmVyIH0gfCB7IGJvdHRvbTogbnVtYmVyIH0gPSB7XG4gICAgICAgIHRvcDogbW91c2VZICsgb2Zmc2V0XG4gICAgICB9O1xuICAgICAgbGV0IGhvcml6b250YWxQb3NpdGlvbjogeyBsZWZ0OiBudW1iZXIgfSB8IHsgcmlnaHQ6IG51bWJlciB9ID0ge1xuICAgICAgICBsZWZ0OiBtb3VzZVggKyBvZmZzZXRcbiAgICAgIH07XG5cbiAgICAgIGlmICh0b29sdGlwT3ZlcmZsb3dzQm90dG9tRWRnZSB8fCB0b29sdGlwV291bGRPdmVyZmxvd0JvdHRvbUVkZ2VPblBvc2l0aW9uQ2hhbmdlKSB7XG4gICAgICAgIHZlcnRpY2FsUG9zaXRpb24gPSB7XG4gICAgICAgICAgYm90dG9tOiBjaGFydEhlaWdodCAtIG1vdXNlWSArIG9mZnNldFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKHRvb2x0aXBPdmVyZmxvd3NSaWdodEVkZ2UgfHwgdG9vbHRpcFdvdWxkT3ZlcmZsb3dSaWdodEVkZ2VPblBvc2l0aW9uQ2hhbmdlKSB7XG4gICAgICAgIGhvcml6b250YWxQb3NpdGlvbiA9IHtcbiAgICAgICAgICByaWdodDogY2hhcnRXaWR0aCAtIG1vdXNlWCArIG9mZnNldFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBsYXN0UG9zaXRpb25PZlRvb2x0aXAgPSB7XG4gICAgICAgIC4uLnZlcnRpY2FsUG9zaXRpb24sXG4gICAgICAgIC4uLmhvcml6b250YWxQb3NpdGlvblxuICAgICAgfTtcbiAgICAgIHJldHVybiBsYXN0UG9zaXRpb25PZlRvb2x0aXA7XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy50b29sdGlwUG9zaXRpb25DYWxsYmFjaztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGFkZCB0aGUgZGF0YSBwb2ludCBpbmZvIHRvIHRoZSB0b29sdGlwLlxuICAgKiBAcGFyYW0gYWxsRGF0YVBvaW50U2VyaWVzIC0gQWxsIHRoZSBkYXRhIHBvaW50IHNlcmllcy5cbiAgICogQHBhcmFtIFhBeGlzVmFsdWUgLSBUaGUgWCBBeGlzIHZhbHVlLlxuICAgKiBAcGFyYW0gWUF4aXNSZWFkaW5ncyAtIFRoZSBZIEF4aXMgcmVhZGluZ3MuXG4gICAqL1xuICBwcml2YXRlIHByb2Nlc3NTZXJpZXMoXG4gICAgYWxsRGF0YVBvaW50U2VyaWVzOiBDdXN0b21TZXJpZXNPcHRpb25zW10sXG4gICAgWEF4aXNWYWx1ZTogc3RyaW5nLFxuICAgIFlBeGlzUmVhZGluZ3M6IHN0cmluZ1tdXG4gICk6IHZvaWQge1xuICAgIGFsbERhdGFQb2ludFNlcmllcy5mb3JFYWNoKChzZXJpZXM6IGFueSkgPT4ge1xuICAgICAgaWYgKHNlcmllcy5kYXRhcG9pbnRJZCA9PT0gJ2FnZ3JlZ2F0ZWQnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxldCB2YWx1ZSA9ICcnO1xuICAgICAgaWYgKHNlcmllcy5pZC5lbmRzV2l0aCgnL21pbicpKSB7XG4gICAgICAgIHZhbHVlID0gdGhpcy5wcm9jZXNzTWluU2VyaWVzKHNlcmllcywgYWxsRGF0YVBvaW50U2VyaWVzLCBYQXhpc1ZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoIXNlcmllcy5pZC5lbmRzV2l0aCgnL21heCcpKSB7XG4gICAgICAgIHZhbHVlID0gdGhpcy5wcm9jZXNzUmVndWxhclNlcmllcyhzZXJpZXMsIFhBeGlzVmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgWUF4aXNSZWFkaW5ncy5wdXNoKFxuICAgICAgICAgIGA8ZGl2IGNsYXNzPVwiZC1mbGV4IGEtaS1jZW50ZXIgcC1iLThcIj48c3BhbiBjbGFzcz0nZGx0LWM4eS1pY29uLWNpcmNsZSBtLXItNCcgc3R5bGU9J2NvbG9yOiAke3Nlcmllcy5pdGVtU3R5bGUuY29sb3J9Oyc+PC9zcGFuPmAgKyAvLyBjb2xvciBjaXJjbGVcbiAgICAgICAgICAgIGA8c3Ryb25nPiR7c2VyaWVzLmRhdGFwb2ludExhYmVsfTwvc3Ryb25nPjwvZGl2PmAgKyAvLyBuYW1lXG4gICAgICAgICAgICBgJHt2YWx1ZX1gIC8vIHNpbmdsZSB2YWx1ZSBvciBtaW4tbWF4IHJhbmdlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBwcm9jZXNzIHRoZSBtaW4gc2VyaWVzLlxuICAgKiBAcGFyYW0gc2VyaWVzIC0gVGhlIHNlcmllcy5cbiAgICogQHBhcmFtIGFsbERhdGFQb2ludFNlcmllcyAtIEFsbCB0aGUgZGF0YSBwb2ludCBzZXJpZXMuXG4gICAqIEBwYXJhbSBYQXhpc1ZhbHVlIC0gVGhlIFggQXhpcyB2YWx1ZS5cbiAgICogQHJldHVybnMgVGhlIHByb2Nlc3NlZCB2YWx1ZS5cbiAgICovXG4gIHByaXZhdGUgcHJvY2Vzc01pblNlcmllcyhcbiAgICBzZXJpZXM6IGFueSxcbiAgICBhbGxEYXRhUG9pbnRTZXJpZXM6IEN1c3RvbVNlcmllc09wdGlvbnNbXSxcbiAgICBYQXhpc1ZhbHVlOiBzdHJpbmdcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBtaW5WYWx1ZSA9IHRoaXMuZmluZFZhbHVlRm9yRXhhY3RPckVhcmxpZXJUaW1lc3RhbXAoc2VyaWVzLmRhdGEsIFhBeGlzVmFsdWUpO1xuICAgIGlmICghbWluVmFsdWUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgY29uc3QgbWF4U2VyaWVzID0gYWxsRGF0YVBvaW50U2VyaWVzLmZpbmQocyA9PiBzWydpZCddID09PSBzZXJpZXMuaWQucmVwbGFjZSgnL21pbicsICcvbWF4JykpO1xuICAgIGNvbnN0IG1heFZhbHVlID0gdGhpcy5maW5kVmFsdWVGb3JFeGFjdE9yRWFybGllclRpbWVzdGFtcChcbiAgICAgIG1heFNlcmllcz8uWydkYXRhJ10gYXMgU2VyaWVzVmFsdWVbXSxcbiAgICAgIFhBeGlzVmFsdWVcbiAgICApO1xuICAgIHJldHVybiAoXG4gICAgICBgPGRpdiBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyIHNlcGFyYXRvci10b3AgcC10LTggcC1iLThcIj48bGFiZWwgY2xhc3M9XCJ0ZXh0LTEyIG0tci04IG0tYi0wXCI+JHt0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShtaW5WYWx1ZVswXSl9PC9sYWJlbD5gICtcbiAgICAgIGA8c3BhbiBjbGFzcz1cIm0tbC1hdXRvIHRleHQtMTJcIj4ke21pblZhbHVlWzFdfSDigJQgJHttYXhWYWx1ZT8uWzFdfWAgK1xuICAgICAgKHNlcmllcy5kYXRhcG9pbnRVbml0ID8gYCAke3Nlcmllcy5kYXRhcG9pbnRVbml0fWAgOiAnJykgK1xuICAgICAgYDwvc3Bhbj48L2Rpdj5gXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHByb2Nlc3MgdGhlIHJlZ3VsYXIgc2VyaWVzLlxuICAgKiBAcGFyYW0gc2VyaWVzIC0gVGhlIHNlcmllcy5cbiAgICogQHBhcmFtIFhBeGlzVmFsdWUgLSBUaGUgWCBBeGlzIHZhbHVlLlxuICAgKiBAcmV0dXJucyBUaGUgcHJvY2Vzc2VkIHZhbHVlLlxuICAgKi9cbiAgcHJpdmF0ZSBwcm9jZXNzUmVndWxhclNlcmllcyhzZXJpZXM6IGFueSwgWEF4aXNWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBzZXJpZXNWYWx1ZSA9IHRoaXMuZmluZFZhbHVlRm9yRXhhY3RPckVhcmxpZXJUaW1lc3RhbXAoc2VyaWVzLmRhdGEsIFhBeGlzVmFsdWUpO1xuICAgIGlmICghc2VyaWVzVmFsdWUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIGA8ZGl2IGNsYXNzPVwiZC1mbGV4IGEtaS1jZW50ZXIgcC10LTggcC1iLTggc2VwYXJhdG9yLXRvcFwiPmAgK1xuICAgICAgYDxsYWJlbCBjbGFzcz1cIm0tYi0wIG0tci04IHRleHQtMTJcIj4ke3RoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKFxuICAgICAgICBzZXJpZXNWYWx1ZVswXVxuICAgICAgKX08L2xhYmVsPjxzcGFuIGNsYXNzPVwibS1sLWF1dG8gdGV4dC0xMlwiPmAgK1xuICAgICAgc2VyaWVzVmFsdWVbMV0/LnRvU3RyaW5nKCkgK1xuICAgICAgKHNlcmllcy5kYXRhcG9pbnRVbml0ID8gYCAke3Nlcmllcy5kYXRhcG9pbnRVbml0fWAgOiAnJykgK1xuICAgICAgYDwvc3Bhbj48L2Rpdj5gXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHByb2Nlc3MgdGhlIGV2ZW50IHRvb2x0aXAuXG4gICAqIEBwYXJhbSBldmVudCAtIFRoZSBldmVudCBvYmplY3QuXG4gICAqIEByZXR1cm5zIFRoZSBwcm9jZXNzZWQgdmFsdWUuXG4gICAqL1xuICBwcml2YXRlIHByb2Nlc3NFdmVudChldmVudDogSUV2ZW50LCBYQXhpc1ZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCB2YWx1ZSA9IGA8dWwgY2xhc3M9XCJsaXN0LXVuc3R5bGVkIHNtYWxsIHNlcGFyYXRvci10b3BcIj5gO1xuICAgIHZhbHVlICs9IGA8bGkgY2xhc3M9XCJwLXQtNCBwLWItNCBkLWZsZXggc2VwYXJhdG9yLWJvdHRvbSB0ZXh0LW5vLXdyYXBcIj48bGFiZWwgY2xhc3M9XCJzbWFsbCBtLWItMCBtLXItOFwiPkV2ZW50IHR5cGU8L2xhYmVsPjxjb2RlIGNsYXNzPVwibS1sLWF1dG9cIj4ke2V2ZW50LnR5cGV9PC9jb2RlPjwvbGk+YDtcbiAgICB2YWx1ZSArPSBgPGxpIGNsYXNzPVwicC10LTQgcC1iLTQgZC1mbGV4IHNlcGFyYXRvci1ib3R0b20gdGV4dC1uby13cmFwXCI+PGxhYmVsIGNsYXNzPVwic21hbGwgbS1iLTAgbS1yLThcIj5FdmVudCB0ZXh0PC9sYWJlbD48c3BhbiBjbGFzcz1cIm0tbC1hdXRvXCI+JHtldmVudC50ZXh0fTxzcGFuPjwvbGk+YDtcbiAgICB2YWx1ZSArPSBgPGxpIGNsYXNzPVwicC10LTQgcC1iLTQgZC1mbGV4IHNlcGFyYXRvci1ib3R0b20gdGV4dC1uby13cmFwXCI+PGxhYmVsIGNsYXNzPVwic21hbGwgbS1iLTAgbS1yLThcIj5FdmVudCB0aW1lPC9sYWJlbD48c3BhbiBjbGFzcz1cIm0tbC1hdXRvXCI+JHt0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShYQXhpc1ZhbHVlKX08c3Bhbj48L2xpPmA7XG4gICAgdmFsdWUgKz0gYDwvdWw+YDtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBwcm9jZXNzIHRoZSBhbGFybSB0b29sdGlwLlxuICAgKiBAcGFyYW0gYWxhcm0gLSBUaGUgYWxhcm0gb2JqZWN0LlxuICAgKiBAcmV0dXJucyBUaGUgcHJvY2Vzc2VkIHZhbHVlLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzQWxhcm0oYWxhcm06IElBbGFybSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgbGV0IHZhbHVlID0gYDx1bCBjbGFzcz1cImxpc3QtdW5zdHlsZWQgc21hbGwgc2VwYXJhdG9yLXRvcCBtLTBcIj5gO1xuICAgIHZhbHVlICs9IGA8bGkgY2xhc3M9XCJwLXQtNCBwLWItNCBkLWZsZXggYS1pLWNlbnRlciBzZXBhcmF0b3ItYm90dG9tIHRleHQtbm8td3JhcFwiPjxsYWJlbCBjbGFzcz1cInRleHQtbGFiZWwtc21hbGwgbS1iLTAgbS1yLThcIj5BbGFybSBTZXZlcml0eTwvbGFiZWw+YDtcbiAgICB2YWx1ZSArPSBgPHNwYW4gY2xhc3M9XCJzbWFsbCBkLWlubGluZS1mbGV4IGEtaS1jZW50ZXIgZ2FwLTQgbS1sLWF1dG9cIj48aSBjbGFzcz1cInN0cm9rZWQtaWNvbiBpY29uLTE0IHN0YXR1cyBkbHQtYzh5LWljb24tJHt0aGlzLnNldmVyaXR5SWNvblBpcGUudHJhbnNmb3JtKGFsYXJtLnNldmVyaXR5KX0gJHthbGFybS5zZXZlcml0eS50b0xvd2VyQ2FzZSgpfVwiID4gPC9pPiAke3RoaXMuc2V2ZXJpdHlMYWJlbFBpcGUudHJhbnNmb3JtKGFsYXJtLnNldmVyaXR5KX0gPC9zcGFuPjwvbGk+YDtcbiAgICB2YWx1ZSArPSBgPGxpIGNsYXNzPVwicC10LTQgcC1iLTQgZC1mbGV4IHNlcGFyYXRvci1ib3R0b20gdGV4dC1uby13cmFwXCI+PGxhYmVsIGNsYXNzPVwidGV4dC1sYWJlbC1zbWFsbCBtLWItMCBtLXItOFwiPkFsYXJtIFR5cGU8L2xhYmVsPjxzcGFuIGNsYXNzPVwic21hbGwgbS1sLWF1dG9cIj48Y29kZT4ke2FsYXJtLnR5cGV9PC9jb2RlPjwvc3Bhbj48L2xpPmA7XG4gICAgdmFsdWUgKz0gYDxsaSBjbGFzcz1cInAtdC00IHAtYi00IGQtZmxleCBzZXBhcmF0b3ItYm90dG9tIHRleHQtbm8td3JhcFwiPjxsYWJlbCBjbGFzcz1cInRleHQtbGFiZWwtc21hbGwgbS1iLTAgbS1yLThcIj5NZXNzYWdlPC9sYWJlbD48c3BhbiBjbGFzcz1cInNtYWxsIG0tbC1hdXRvXCIgc3R5bGU9XCJvdmVyZmxvdzogaGlkZGVuOyB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcIiB0aXRsZT1cIiR7YWxhcm0udGV4dH1cIj4ke2FsYXJtLnRleHR9PC9zcGFuPjwvbGk+YDtcbiAgICB2YWx1ZSArPSBgPGxpIGNsYXNzPVwicC10LTQgcC1iLTQgZC1mbGV4IHNlcGFyYXRvci1ib3R0b20gdGV4dC1uby13cmFwXCI+PGxhYmVsIGNsYXNzPVwidGV4dC1sYWJlbC1zbWFsbCBtLWItMCBtLXItOFwiPkxhc3QgVXBkYXRlZDwvbGFiZWw+PHNwYW4gY2xhc3M9XCJzbWFsbCBtLWwtYXV0b1wiPiR7dGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oYWxhcm1bJ2xhc3RVcGRhdGVkJ10pfTwvc3Bhbj48L2xpPmA7XG4gICAgY29uc3QgZXhpc3RzID0gYXdhaXQgdGhpcy5hbGFybVJvdXRlRXhpc3RzKCk7XG4gICAgaWYgKGV4aXN0cykge1xuICAgICAgY29uc3QgY3VycmVudFVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgICAgY29uc3QgYmFzZVVybEluZGV4ID0gY3VycmVudFVybC5pbmRleE9mKElOREVYX0hUTUwpO1xuICAgICAgY29uc3QgYmFzZVVybCA9IGN1cnJlbnRVcmwuc3Vic3RyaW5nKDAsIGJhc2VVcmxJbmRleCArIElOREVYX0hUTUwubGVuZ3RoKTtcbiAgICAgIHZhbHVlICs9IGA8bGkgY2xhc3M9XCJwLXQtNCBwLWItNCBkLWZsZXggc2VwYXJhdG9yLWJvdHRvbSB0ZXh0LW5vLXdyYXBcIj48bGFiZWwgY2xhc3M9XCJ0ZXh0LWxhYmVsLXNtYWxsIG0tYi0wIG0tci04XCI+TGluazwvbGFiZWw+PHNwYW4gY2xhc3M9XCJzbWFsbCBtLWwtYXV0b1wiPjxhIGhyZWY9XCIke2Jhc2VVcmx9Iy9hbGFybXMvJHthbGFybS5pZH0vZGV0YWlscz9zaG93Q2xlYXJlZD10cnVlXCI+JHt0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGdldHRleHQoJ0FsYXJtIGRldGFpbHMnKSl9PC9hPjwvc3Bhbj48L2xpPmA7XG4gICAgfVxuICAgIHZhbHVlICs9IGA8bGkgY2xhc3M9XCJwLXQtNCBwLWItNCBkLWZsZXggdGV4dC1uby13cmFwXCI+PGxhYmVsIGNsYXNzPVwidGV4dC1sYWJlbC1zbWFsbCBtLWItMCBtLXItOFwiPkFsYXJtIGNvdW50PC9sYWJlbD48c3BhbiBjbGFzcz1cInNtYWxsIG0tbC1hdXRvXCI+PHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1pbmZvXCI+JHthbGFybS5jb3VudH08L3NwYW4+PC9zcGFuPjwvbGk+YDtcbiAgICB2YWx1ZSArPSBgPC91bD5gO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYWxhcm1Sb3V0ZUV4aXN0cygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBleGlzdHMgPSB0aGlzLnJvdXRlci5jb25maWcuc29tZShyb3V0ZSA9PiB7XG4gICAgICByZXR1cm4gYCR7cm91dGUucGF0aH1gID09PSAnYWxhcm1zJztcbiAgICB9KTtcbiAgICByZXR1cm4gZXhpc3RzO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDaGFydFNlcmllcyhcbiAgICBkYXRhcG9pbnRzV2l0aFZhbHVlczogRHBXaXRoVmFsdWVzW10sXG4gICAgZXZlbnRzOiBJRXZlbnRbXSxcbiAgICBhbGFybXM6IElBbGFybVtdLFxuICAgIGRpc3BsYXlPcHRpb25zOiB7IGRpc3BsYXlNYXJrZWRMaW5lOiBib29sZWFuOyBkaXNwbGF5TWFya2VkUG9pbnQ6IGJvb2xlYW4gfVxuICApOiBDdXN0b21TZXJpZXNPcHRpb25zW10gfCBTZXJpZXNPcHRpb25bXSB7XG4gICAgY29uc3Qgc2VyaWVzOiBTZXJpZXNPcHRpb25bXSA9IFtdO1xuICAgIGxldCBldmVudFNlcmllczogQ3VzdG9tU2VyaWVzT3B0aW9uc1tdID0gW107XG4gICAgbGV0IGFsYXJtU2VyaWVzOiBDdXN0b21TZXJpZXNPcHRpb25zW10gPSBbXTtcbiAgICBkYXRhcG9pbnRzV2l0aFZhbHVlcy5mb3JFYWNoKChkcCwgaWR4KSA9PiB7XG4gICAgICBjb25zdCByZW5kZXJUeXBlOiBEYXRhcG9pbnRDaGFydFJlbmRlclR5cGUgPSBkcC5yZW5kZXJUeXBlIHx8ICdtaW4nO1xuICAgICAgaWYgKHJlbmRlclR5cGUgPT09ICdhcmVhJykge1xuICAgICAgICBzZXJpZXMucHVzaCh0aGlzLmdldFNpbmdsZVNlcmllcyhkcCwgJ21pbicsIGlkeCwgdHJ1ZSkpO1xuICAgICAgICBzZXJpZXMucHVzaCh0aGlzLmdldFNpbmdsZVNlcmllcyhkcCwgJ21heCcsIGlkeCwgdHJ1ZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VyaWVzLnB1c2godGhpcy5nZXRTaW5nbGVTZXJpZXMoZHAsIHJlbmRlclR5cGUsIGlkeCwgZmFsc2UpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3RXZlbnRTZXJpZXMgPSB0aGlzLmdldEFsYXJtT3JFdmVudFNlcmllcyhcbiAgICAgICAgZHAsXG4gICAgICAgIHJlbmRlclR5cGUsXG4gICAgICAgIGZhbHNlLFxuICAgICAgICBldmVudHMsXG4gICAgICAgICdldmVudCcsXG4gICAgICAgIGRpc3BsYXlPcHRpb25zLFxuICAgICAgICBudWxsLFxuICAgICAgICBpZHhcbiAgICAgICk7XG4gICAgICBjb25zdCBuZXdBbGFybVNlcmllcyA9IHRoaXMuZ2V0QWxhcm1PckV2ZW50U2VyaWVzKFxuICAgICAgICBkcCxcbiAgICAgICAgcmVuZGVyVHlwZSxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIGFsYXJtcyxcbiAgICAgICAgJ2FsYXJtJyxcbiAgICAgICAgZGlzcGxheU9wdGlvbnMsXG4gICAgICAgIG51bGwsXG4gICAgICAgIGlkeFxuICAgICAgKTtcbiAgICAgIGV2ZW50U2VyaWVzID0gWy4uLmV2ZW50U2VyaWVzLCAuLi5uZXdFdmVudFNlcmllc107XG4gICAgICBhbGFybVNlcmllcyA9IFsuLi5hbGFybVNlcmllcywgLi4ubmV3QWxhcm1TZXJpZXNdO1xuICAgIH0pO1xuICAgIGNvbnN0IGRlZHVwbGljYXRlRmlsdGVyQ2FsbGJhY2sgPSAoXG4gICAgICBvYmoxOiBDdXN0b21TZXJpZXNPcHRpb25zLFxuICAgICAgaTogbnVtYmVyLFxuICAgICAgYXJyOiBTZXJpZXNPcHRpb25bXVxuICAgICk6IG9iajEgaXMgQ3VzdG9tU2VyaWVzT3B0aW9ucyA9PiB7XG4gICAgICBjb25zdCBkdXBsaWNhdGVzID0gYXJyLmZpbHRlcihvYmoyID0+IG9iajFbJ2lkJ10gPT09IG9iajJbJ2lkJ10gJiYgaSAhPT0gYXJyLmluZGV4T2Yob2JqMikpO1xuXG4gICAgICBpZiAoZHVwbGljYXRlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBvYmoxWydpc0RwVGVtcGxhdGVTZWxlY3RlZCddIGFzIGJvb2xlYW47XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICBjb25zdCBkZWR1cGxpY2F0ZUZpbHRlckNhbGxiYWNrRmFsbGJhY2sgPSAoXG4gICAgICBvYmoxOiBTZXJpZXNPcHRpb24sXG4gICAgICBpOiBudW1iZXIsXG4gICAgICBhcnI6IFNlcmllc09wdGlvbltdXG4gICAgKTogb2JqMSBpcyBTZXJpZXNPcHRpb24gPT4gYXJyLmZpbmRJbmRleChvYmoyID0+IG9iajJbJ2lkJ10gPT09IG9iajFbJ2lkJ10pID09PSBpO1xuXG4gICAgbGV0IGRlZHVwbGljYXRlZEV2ZW50cyA9IGV2ZW50U2VyaWVzLmZpbHRlcihkZWR1cGxpY2F0ZUZpbHRlckNhbGxiYWNrKTtcbiAgICBsZXQgZGVkdXBsaWNhdGVkQWxhcm1zID0gYWxhcm1TZXJpZXMuZmlsdGVyKGRlZHVwbGljYXRlRmlsdGVyQ2FsbGJhY2spO1xuICAgIGlmIChkZWR1cGxpY2F0ZWRBbGFybXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBkZWR1cGxpY2F0ZWRBbGFybXMgPSBhbGFybVNlcmllcy5maWx0ZXIoZGVkdXBsaWNhdGVGaWx0ZXJDYWxsYmFja0ZhbGxiYWNrKTtcbiAgICB9XG4gICAgaWYgKGRlZHVwbGljYXRlZEV2ZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIGRlZHVwbGljYXRlZEV2ZW50cyA9IGV2ZW50U2VyaWVzLmZpbHRlcihkZWR1cGxpY2F0ZUZpbHRlckNhbGxiYWNrRmFsbGJhY2spO1xuICAgIH1cbiAgICByZXR1cm4gWy4uLnNlcmllcywgLi4uZGVkdXBsaWNhdGVkRXZlbnRzLCAuLi5kZWR1cGxpY2F0ZWRBbGFybXNdO1xuICB9XG5cbiAgcHJpdmF0ZSBncm91cEJ5VHlwZShcbiAgICBpdGVtczogSUFsYXJtW10gfCBJRXZlbnRbXSxcbiAgICB0eXBlRmllbGQ6IHN0cmluZ1xuICApOiBSZWNvcmQ8c3RyaW5nLCBJQWxhcm1bXSB8IElFdmVudFtdPiB7XG4gICAgcmV0dXJuIGl0ZW1zLnJlZHVjZSgoZ3JvdXBlZCwgaXRlbSkgPT4ge1xuICAgICAgKGdyb3VwZWRbaXRlbVt0eXBlRmllbGRdXSA9IGdyb3VwZWRbaXRlbVt0eXBlRmllbGRdXSB8fCBbXSkucHVzaChpdGVtKTtcbiAgICAgIHJldHVybiBncm91cGVkO1xuICAgIH0sIHt9IGFzIGFueSk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgaW50ZXJwb2xhdGVzIGJldHdlZW4gdHdvIGRhdGEgcG9pbnRzLiBUaGUgZ29hbCBpcyB0byBwbGFjZSB0aGUgbWFya1BvaW50IG9uIHRoZSBjaGFydCBpbiB0aGUgcmlnaHQgcGxhY2UuXG4gICAqIEBwYXJhbSBkcFZhbHVlc0FycmF5IGFycmF5IG9mIGRhdGEgcG9pbnRzXG4gICAqIEBwYXJhbSB0YXJnZXRUaW1lIHRpbWUgb2YgdGhlIGFsYXJtIG9yIGV2ZW50XG4gICAqIEByZXR1cm5zIGludGVycG9sYXRlZCBkYXRhIHBvaW50XG4gICAqL1xuICBwcml2YXRlIGludGVycG9sYXRlQmV0d2VlblR3b0RwcyhcbiAgICBkcFZhbHVlc0FycmF5OiBEcFZhbHVlc0l0ZW1bXSxcbiAgICB0YXJnZXRUaW1lOiBudW1iZXJcbiAgKTogRHBWYWx1ZXNJdGVtIHtcbiAgICBsZXQgbWF4VmFsdWU6IG51bWJlcjtcbiAgICBsZXQgbWluVmFsdWU6IG51bWJlcjtcbiAgICByZXR1cm4gZHBWYWx1ZXNBcnJheS5yZWR1Y2UoKGFjYywgY3VyciwgaWR4LCBhcnIpID0+IHtcbiAgICAgIGlmIChuZXcgRGF0ZShjdXJyLnRpbWUpLmdldFRpbWUoKSA8PSB0YXJnZXRUaW1lKSB7XG4gICAgICAgIGlmIChpZHggPT09IGFyci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRpbWU6IHRhcmdldFRpbWUsXG4gICAgICAgICAgICB2YWx1ZXM6IFt7IG1pbjogbWluVmFsdWUsIG1heDogbWF4VmFsdWUgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5leHREcCA9IGFycltpZHggKyAxXTtcbiAgICAgICAgaWYgKG5ldyBEYXRlKG5leHREcC50aW1lKS5nZXRUaW1lKCkgPj0gdGFyZ2V0VGltZSkge1xuICAgICAgICAgIGNvbnN0IHRpbWVEaWZmID0gbmV3IERhdGUobmV4dERwLnRpbWUpLmdldFRpbWUoKSAtIG5ldyBEYXRlKGN1cnIudGltZSkuZ2V0VGltZSgpO1xuICAgICAgICAgIGNvbnN0IHRhcmdldFRpbWVEaWZmID0gdGFyZ2V0VGltZSAtIG5ldyBEYXRlKGN1cnIudGltZSkuZ2V0VGltZSgpO1xuICAgICAgICAgIGNvbnN0IG1pblZhbHVlRGlmZiA9IG5leHREcC52YWx1ZXNbMF0/Lm1pbiAtIGN1cnIudmFsdWVzWzBdPy5taW47XG4gICAgICAgICAgY29uc3QgbWF4VmFsdWVEaWZmID0gbmV4dERwLnZhbHVlc1swXT8ubWF4IC0gY3Vyci52YWx1ZXNbMF0/Lm1heDtcbiAgICAgICAgICBtaW5WYWx1ZSA9IGN1cnIudmFsdWVzWzBdPy5taW4gKyAobWluVmFsdWVEaWZmICogdGFyZ2V0VGltZURpZmYpIC8gdGltZURpZmY7XG4gICAgICAgICAgbWF4VmFsdWUgPSBjdXJyLnZhbHVlc1swXT8ubWF4ICsgKG1heFZhbHVlRGlmZiAqIHRhcmdldFRpbWVEaWZmKSAvIHRpbWVEaWZmO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0aW1lOiB0YXJnZXRUaW1lLFxuICAgICAgICAgICAgdmFsdWVzOiBbeyBtaW46IG1pblZhbHVlLCBtYXg6IG1heFZhbHVlIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2xvc2VzdERwVmFsdWVUb1RhcmdldFRpbWUoXG4gICAgZHBWYWx1ZXNBcnJheTogRHBWYWx1ZXNJdGVtW10sXG4gICAgdGFyZ2V0VGltZTogbnVtYmVyXG4gICk6IERwVmFsdWVzSXRlbSB7XG4gICAgcmV0dXJuIGRwVmFsdWVzQXJyYXkucmVkdWNlKChwcmV2LCBjdXJyKSA9PlxuICAgICAgLy9zaG91bGQgdGFrZSB0aGUgdmFsdWUgY2xvc2VzdCB0byB0aGUgdGFyZ2V0IHRpbWUsIGZvciByZWFsdGltZSB0aGUgY3VycmVudCB0aW1lIHdvdWxkIGFsd2F5cyBjaGFuZ2VcbiAgICAgIE1hdGguYWJzKG5ldyBEYXRlKGN1cnIudGltZSkuZ2V0VGltZSgpIC0gdGFyZ2V0VGltZSkgPFxuICAgICAgTWF0aC5hYnMobmV3IERhdGUocHJldi50aW1lKS5nZXRUaW1lKCkgLSB0YXJnZXRUaW1lKVxuICAgICAgICA/IGN1cnJcbiAgICAgICAgOiBwcmV2XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBjcmVhdGVzIGEgbWFya1BvaW50IG9uIHRoZSBjaGFydCB3aGljaCByZXByZXNlbnRzIHRoZSBpY29uIG9mIHRoZSBhbGFybSBvciBldmVudC5cbiAgICogQHBhcmFtIGl0ZW0gU2luZ2xlIGFsYXJtIG9yIGV2ZW50XG4gICAqIEBwYXJhbSBkcCBEYXRhIHBvaW50XG4gICAqIEBwYXJhbSBpc0NsZWFyZWQgSWYgdGhlIGFsYXJtIGlzIGNsZWFyZWQgaW4gY2FzZSBvZiBhbGFybVxuICAgKiBAcGFyYW0gaXNFdmVudCBJZiB0aGUgaXRlbSBpcyBhbiBldmVudFxuICAgKiBAcGFyYW0gcmVhbHRpbWUgSWYgdGhlIGNoYXJ0IGlzIGluIHJlYWx0aW1lIG1vZGVcbiAgICogQHJldHVybnMgTWFya1BvaW50RGF0YUl0ZW1PcHRpb25bXVxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVNYXJrUG9pbnQoXG4gICAgaXRlbTogSUFsYXJtIHwgSUV2ZW50LFxuICAgIGRwOiBEcFdpdGhWYWx1ZXMsXG4gICAgaXNDbGVhcmVkOiBib29sZWFuLFxuICAgIGlzRXZlbnQ6IGJvb2xlYW4sXG4gICAgcmVhbHRpbWU6IGJvb2xlYW5cbiAgKTogTWFya1BvaW50RGF0YVtdIHtcbiAgICAvLyBjaGVjayBpZiBkcC52YWx1ZXMgb2JqZWN0IGlzIGVtcHR5XG4gICAgaWYgKCFpdGVtLmNyZWF0aW9uVGltZSB8fCBPYmplY3Qua2V5cyhkcC52YWx1ZXMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGRwVmFsdWVzQXJyYXk6IERwVmFsdWVzSXRlbVtdID0gT2JqZWN0LmVudHJpZXMoZHAudmFsdWVzKS5tYXAoKFt0aW1lLCB2YWx1ZXNdKSA9PiAoe1xuICAgICAgdGltZTogbmV3IERhdGUodGltZSkuZ2V0VGltZSgpLFxuICAgICAgdmFsdWVzXG4gICAgfSkpO1xuICAgIGNvbnN0IGNyZWF0aW9uVGltZSA9IG5ldyBEYXRlKGl0ZW0uY3JlYXRpb25UaW1lKS5nZXRUaW1lKCk7XG4gICAgY29uc3QgbGFzdFVwZGF0ZWRUaW1lID0gbmV3IERhdGUoaXRlbVsnbGFzdFVwZGF0ZWQnXSkuZ2V0VGltZSgpO1xuXG4gICAgbGV0IGNvb3JkQ3JlYXRpb25UaW1lOiBhbnk7XG4gICAgbGV0IGNvb3JkTGFzdFVwZGF0ZWRUaW1lOiBhbnk7XG5cbiAgICBpZiAocmVhbHRpbWUpIHtcbiAgICAgIGNvbnN0IGxhc3RWYWx1ZSA9IGRwVmFsdWVzQXJyYXlbZHBWYWx1ZXNBcnJheS5sZW5ndGggLSAxXTtcbiAgICAgIGNvb3JkQ3JlYXRpb25UaW1lID0gW1xuICAgICAgICBpdGVtLmNyZWF0aW9uVGltZSxcbiAgICAgICAgbGFzdFZhbHVlPy52YWx1ZXNbMF0/Lm1pbiA/PyBsYXN0VmFsdWU/LnZhbHVlc1sxXSA/PyBudWxsXG4gICAgICBdO1xuICAgICAgY29vcmRMYXN0VXBkYXRlZFRpbWUgPSBbXG4gICAgICAgIGl0ZW1bJ2xhc3RVcGRhdGVkJ10sXG4gICAgICAgIGxhc3RWYWx1ZT8udmFsdWVzWzBdPy5taW4gPz8gbGFzdFZhbHVlPy52YWx1ZXNbMV0gPz8gbnVsbFxuICAgICAgXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY2xvc2VzdERwVmFsdWUgPSB0aGlzLmludGVycG9sYXRlQmV0d2VlblR3b0RwcyhkcFZhbHVlc0FycmF5LCBjcmVhdGlvblRpbWUpO1xuICAgICAgY29uc3QgZHBWYWx1ZXNGb3JOZXdBbGFybXMgPSB0aGlzLmdldENsb3Nlc3REcFZhbHVlVG9UYXJnZXRUaW1lKGRwVmFsdWVzQXJyYXksIGNyZWF0aW9uVGltZSk7XG4gICAgICBjb25zdCBjbG9zZXN0RHBWYWx1ZUxhc3RVcGRhdGVkID0gdGhpcy5pbnRlcnBvbGF0ZUJldHdlZW5Ud29EcHMoXG4gICAgICAgIGRwVmFsdWVzQXJyYXksXG4gICAgICAgIGxhc3RVcGRhdGVkVGltZVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGRwVmFsdWVzRm9yTmV3QWxhcm1zTGFzdFVwZGF0ZWQgPSB0aGlzLmdldENsb3Nlc3REcFZhbHVlVG9UYXJnZXRUaW1lKFxuICAgICAgICBkcFZhbHVlc0FycmF5LFxuICAgICAgICBsYXN0VXBkYXRlZFRpbWVcbiAgICAgICk7XG5cbiAgICAgIGNvb3JkQ3JlYXRpb25UaW1lID0gW1xuICAgICAgICBpdGVtLmNyZWF0aW9uVGltZSxcbiAgICAgICAgY2xvc2VzdERwVmFsdWU/LnZhbHVlc1swXT8ubWluID8/XG4gICAgICAgICAgY2xvc2VzdERwVmFsdWU/LnZhbHVlc1sxXSA/P1xuICAgICAgICAgIGRwVmFsdWVzRm9yTmV3QWxhcm1zPy52YWx1ZXNbMF0/Lm1pbiA/P1xuICAgICAgICAgIGRwVmFsdWVzRm9yTmV3QWxhcm1zPy52YWx1ZXNbMV0gPz9cbiAgICAgICAgICBudWxsXG4gICAgICBdO1xuICAgICAgY29vcmRMYXN0VXBkYXRlZFRpbWUgPSBbXG4gICAgICAgIGl0ZW1bJ2xhc3RVcGRhdGVkJ10sXG4gICAgICAgIGNsb3Nlc3REcFZhbHVlTGFzdFVwZGF0ZWQ/LnZhbHVlc1swXT8ubWluID8/XG4gICAgICAgICAgY2xvc2VzdERwVmFsdWVMYXN0VXBkYXRlZD8udmFsdWVzWzFdID8/XG4gICAgICAgICAgZHBWYWx1ZXNGb3JOZXdBbGFybXNMYXN0VXBkYXRlZD8udmFsdWVzWzBdPy5taW4gPz9cbiAgICAgICAgICBkcFZhbHVlc0Zvck5ld0FsYXJtc0xhc3RVcGRhdGVkPy52YWx1ZXNbMV0gPz9cbiAgICAgICAgICBudWxsXG4gICAgICBdO1xuICAgIH1cblxuICAgIGlmIChpc0V2ZW50KSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgY29vcmQ6IGNvb3JkQ3JlYXRpb25UaW1lLFxuICAgICAgICAgIG5hbWU6IGl0ZW0udHlwZSxcbiAgICAgICAgICBpdGVtVHlwZTogaXRlbS50eXBlLFxuICAgICAgICAgIGl0ZW1TdHlsZToge1xuICAgICAgICAgICAgY29sb3I6IGl0ZW1bJ2NvbG9yJ11cbiAgICAgICAgICB9LFxuICAgICAgICAgIHN5bWJvbDogJ2NpcmNsZScsXG4gICAgICAgICAgc3ltYm9sU2l6ZTogMjRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNvb3JkOiBjb29yZENyZWF0aW9uVGltZSxcbiAgICAgICAgICBuYW1lOiBpdGVtLnR5cGUsXG4gICAgICAgICAgaXRlbVR5cGU6IGl0ZW0udHlwZSxcbiAgICAgICAgICBpdGVtU3R5bGU6IHsgY29sb3I6ICd3aGl0ZScgfSxcbiAgICAgICAgICBzeW1ib2w6IElDT05TX01BUC5FVkVOVCxcbiAgICAgICAgICBzeW1ib2xTaXplOiAxNlxuICAgICAgICB9XG4gICAgICBdO1xuICAgIH1cblxuICAgIHJldHVybiBpc0NsZWFyZWRcbiAgICAgID8gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvb3JkOiBjb29yZENyZWF0aW9uVGltZSxcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0udHlwZSxcbiAgICAgICAgICAgIGl0ZW1UeXBlOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICBpdGVtU3R5bGU6IHtcbiAgICAgICAgICAgICAgY29sb3I6IGl0ZW1bJ2NvbG9yJ11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzeW1ib2w6ICdjaXJjbGUnLFxuICAgICAgICAgICAgc3ltYm9sU2l6ZTogMjRcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvb3JkOiBjb29yZENyZWF0aW9uVGltZSxcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0udHlwZSxcbiAgICAgICAgICAgIGl0ZW1UeXBlOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICBpdGVtU3R5bGU6IHsgY29sb3I6ICd3aGl0ZScgfSxcbiAgICAgICAgICAgIHN5bWJvbDogSUNPTlNfTUFQW2l0ZW0uc2V2ZXJpdHkgYXMgU2V2ZXJpdHlUeXBlXSxcbiAgICAgICAgICAgIHN5bWJvbFNpemU6IDE2XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb29yZDogY29vcmRMYXN0VXBkYXRlZFRpbWUsXG4gICAgICAgICAgICBuYW1lOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICBpdGVtVHlwZTogaXRlbS50eXBlLFxuICAgICAgICAgICAgaXRlbVN0eWxlOiB7XG4gICAgICAgICAgICAgIGNvbG9yOiBpdGVtWydjb2xvciddXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3ltYm9sOiAnY2lyY2xlJyxcbiAgICAgICAgICAgIHN5bWJvbFNpemU6IDI0XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb29yZDogY29vcmRMYXN0VXBkYXRlZFRpbWUsXG4gICAgICAgICAgICBuYW1lOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICBpdGVtVHlwZTogaXRlbS50eXBlLFxuICAgICAgICAgICAgaXRlbVN0eWxlOiB7IGNvbG9yOiAnd2hpdGUnIH0sXG4gICAgICAgICAgICBzeW1ib2w6IElDT05TX01BUC5DTEVBUkVELFxuICAgICAgICAgICAgc3ltYm9sU2l6ZTogMTZcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvb3JkOiBjb29yZENyZWF0aW9uVGltZSxcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0udHlwZSxcbiAgICAgICAgICAgIGl0ZW1UeXBlOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICBpdGVtU3R5bGU6IHtcbiAgICAgICAgICAgICAgY29sb3I6IGl0ZW1bJ2NvbG9yJ11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzeW1ib2w6ICdjaXJjbGUnLFxuICAgICAgICAgICAgc3ltYm9sU2l6ZTogMjRcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvb3JkOiBjb29yZENyZWF0aW9uVGltZSxcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0udHlwZSxcbiAgICAgICAgICAgIGl0ZW1UeXBlOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICBpdGVtU3R5bGU6IHsgY29sb3I6ICd3aGl0ZScgfSxcbiAgICAgICAgICAgIHN5bWJvbDogSUNPTlNfTUFQW2l0ZW0uc2V2ZXJpdHkgYXMgU2V2ZXJpdHlUeXBlXSxcbiAgICAgICAgICAgIHN5bWJvbFNpemU6IDE2XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb29yZDogY29vcmRMYXN0VXBkYXRlZFRpbWUsXG4gICAgICAgICAgICBuYW1lOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICBpdGVtVHlwZTogaXRlbS50eXBlLFxuICAgICAgICAgICAgaXRlbVN0eWxlOiB7XG4gICAgICAgICAgICAgIGNvbG9yOiBpdGVtWydjb2xvciddXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3ltYm9sOiAnY2lyY2xlJyxcbiAgICAgICAgICAgIHN5bWJvbFNpemU6IDI0XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb29yZDogY29vcmRMYXN0VXBkYXRlZFRpbWUsXG4gICAgICAgICAgICBuYW1lOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICBpdGVtVHlwZTogaXRlbS50eXBlLFxuICAgICAgICAgICAgaXRlbVN0eWxlOiB7IGNvbG9yOiAnd2hpdGUnIH0sXG4gICAgICAgICAgICBzeW1ib2w6IElDT05TX01BUFtpdGVtLnNldmVyaXR5IGFzIFNldmVyaXR5VHlwZV0sXG4gICAgICAgICAgICBzeW1ib2xTaXplOiAxNlxuICAgICAgICAgIH1cbiAgICAgICAgXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBjcmVhdGVzIGEgbWFya0xpbmUgb24gdGhlIGNoYXJ0IHdoaWNoIHJlcHJlc2VudHMgdGhlIGxpbmUgYmV0d2VlbiBldmVyeSBhbGFybSBvciBldmVudCBvbiB0aGUgY2hhcnQuXG4gICAqIEBwYXJhbSBpdGVtcyBBcnJheSBvZiBhbGFybXMgb3IgZXZlbnRzXG4gICAqIEByZXR1cm5zIE1hcmtMaW5lRGF0YUl0ZW1PcHRpb25CYXNlW11cbiAgICovXG4gIHByaXZhdGUgY3JlYXRlTWFya0xpbmU8VCBleHRlbmRzIElBbGFybSB8IElFdmVudD4oXG4gICAgaXRlbXM6IFRbXSxcbiAgICBpdGVtVHlwZTogJ2FsYXJtJyB8ICdldmVudCdcbiAgKTogTWFya0xpbmVEYXRhW10ge1xuICAgIHJldHVybiBpdGVtcy5yZWR1Y2U8TWFya0xpbmVEYXRhW10+KChhY2MsIGl0ZW0pID0+IHtcbiAgICAgIGlmICghaXRlbS5jcmVhdGlvblRpbWUpIHtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtVHlwZSA9PT0gJ2V2ZW50Jykge1xuICAgICAgICByZXR1cm4gYWNjLmNvbmNhdChbXG4gICAgICAgICAge1xuICAgICAgICAgICAgeEF4aXM6IGl0ZW0udGltZSxcbiAgICAgICAgICAgIGl0ZW1UeXBlOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICBsYWJlbDogeyBzaG93OiBmYWxzZSwgZm9ybWF0dGVyOiAoKSA9PiBpdGVtLnR5cGUgfSxcbiAgICAgICAgICAgIGl0ZW1TdHlsZTogeyBjb2xvcjogaXRlbVsnY29sb3InXSB9XG4gICAgICAgICAgfVxuICAgICAgICBdKTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtLmNyZWF0aW9uVGltZSA9PT0gaXRlbVsnbGFzdFVwZGF0ZWQnXSkge1xuICAgICAgICByZXR1cm4gYWNjLmNvbmNhdChbXG4gICAgICAgICAge1xuICAgICAgICAgICAgeEF4aXM6IGl0ZW0uY3JlYXRpb25UaW1lLFxuICAgICAgICAgICAgaXRlbVR5cGU6IGl0ZW0udHlwZSxcbiAgICAgICAgICAgIGxhYmVsOiB7IHNob3c6IGZhbHNlLCBmb3JtYXR0ZXI6ICgpID0+IGl0ZW0udHlwZSB9LFxuICAgICAgICAgICAgaXRlbVN0eWxlOiB7IGNvbG9yOiBpdGVtWydjb2xvciddIH1cbiAgICAgICAgICB9XG4gICAgICAgIF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHhBeGlzOiBpdGVtLmNyZWF0aW9uVGltZSxcbiAgICAgICAgICAgIGl0ZW1UeXBlOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICBsYWJlbDogeyBzaG93OiBmYWxzZSwgZm9ybWF0dGVyOiAoKSA9PiBpdGVtLnR5cGUgfSxcbiAgICAgICAgICAgIGl0ZW1TdHlsZTogeyBjb2xvcjogaXRlbVsnY29sb3InXSB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4QXhpczogaXRlbVsnbGFzdFVwZGF0ZWQnXSxcbiAgICAgICAgICAgIGl0ZW1UeXBlOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICBsYWJlbDogeyBzaG93OiBmYWxzZSwgZm9ybWF0dGVyOiAoKSA9PiBpdGVtLnR5cGUgfSxcbiAgICAgICAgICAgIGl0ZW1TdHlsZTogeyBjb2xvcjogaXRlbVsnY29sb3InXSB9XG4gICAgICAgICAgfVxuICAgICAgICBdKTtcbiAgICAgIH1cbiAgICB9LCBbXSk7XG4gIH1cblxuICBwcml2YXRlIGdldFNpbmdsZVNlcmllcyhcbiAgICBkcDogRHBXaXRoVmFsdWVzLFxuICAgIHJlbmRlclR5cGU6IEV4Y2x1ZGU8RGF0YXBvaW50Q2hhcnRSZW5kZXJUeXBlLCAnYXJlYSc+LFxuICAgIGlkeDogbnVtYmVyLFxuICAgIGlzTWluTWF4Q2hhcnQgPSBmYWxzZSxcbiAgICBzZXJpZXNUeXBlID0gJydcbiAgKTogU2VyaWVzT3B0aW9uICYgU2VyaWVzRGF0YXBvaW50SW5mbyB7XG4gICAgY29uc3QgZGF0YXBvaW50SWQgPSBkcC5fX3RhcmdldD8uaWQgKyBkcC5mcmFnbWVudCArIGRwLnNlcmllcztcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YXBvaW50SWQsXG4gICAgICBkYXRhcG9pbnRVbml0OiBkcC51bml0IHx8ICcnLFxuICAgICAgLy8gJ2lkJyBwcm9wZXJ0eSBpcyBuZWVkZWQgYXMgJ3Nlcmllc0lkJyBpbiB0b29sdGlwIGZvcm1hdHRlclxuICAgICAgaWQ6IGlzTWluTWF4Q2hhcnRcbiAgICAgICAgPyBgJHtkYXRhcG9pbnRJZH0vJHtyZW5kZXJUeXBlfSR7c2VyaWVzVHlwZX1gXG4gICAgICAgIDogYCR7ZGF0YXBvaW50SWR9JHtzZXJpZXNUeXBlfWAsXG4gICAgICBuYW1lOiBgJHtkcC5sYWJlbH0gKCR7ZHAuX190YXJnZXQ/LlsnbmFtZSddfSlgLFxuICAgICAgLy8gZGF0YXBvaW50TGFiZWwgdXNlZCB0byBwcm9wZXIgZGlzcGxheSBvZiB0b29sdGlwXG4gICAgICBkYXRhcG9pbnRMYWJlbDogZHAubGFiZWwgfHwgJycsXG4gICAgICBkYXRhOiBPYmplY3QuZW50cmllcyhkcC52YWx1ZXMpLm1hcCgoW2RhdGVTdHJpbmcsIHZhbHVlc10pID0+IHtcbiAgICAgICAgcmV0dXJuIFtkYXRlU3RyaW5nLCB2YWx1ZXNbMF1bcmVuZGVyVHlwZV1dO1xuICAgICAgfSksXG4gICAgICB5QXhpc0luZGV4OiBpZHgsXG4gICAgICAuLi50aGlzLmNoYXJ0VHlwZXNTZXJ2aWNlLmdldFNlcmllc09wdGlvbnMoZHAsIGlzTWluTWF4Q2hhcnQsIHJlbmRlclR5cGUpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBjcmVhdGVzIGEgZ2VuZXJhbCB0b29sdGlwIGZvcm1hdHRlciBmb3IgdGhlIGNoYXJ0LlxuICAgKiBAcmV0dXJucyBUb29sdGlwRm9ybWF0dGVyQ2FsbGJhY2s8VG9wTGV2ZWxGb3JtYXR0ZXJQYXJhbXM+XG4gICAqL1xuICBwcml2YXRlIGdldFRvb2x0aXBGb3JtYXR0ZXIoKTogVG9vbHRpcEZvcm1hdHRlckNhbGxiYWNrPFRvcExldmVsRm9ybWF0dGVyUGFyYW1zPiB7XG4gICAgcmV0dXJuIHBhcmFtcyA9PiB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocGFyYW1zKSB8fCAhcGFyYW1zWzBdPy5kYXRhKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGEgPSBwYXJhbXNbMF0uZGF0YSBhcyBbc3RyaW5nLCAuLi5hbnlbXV07XG4gICAgICBjb25zdCBYQXhpc1ZhbHVlOiBzdHJpbmcgPSBkYXRhWzBdO1xuICAgICAgY29uc3QgWUF4aXNSZWFkaW5nczogc3RyaW5nW10gPSBbXTtcbiAgICAgIGNvbnN0IGFsbFNlcmllcyA9IHRoaXMuZWNoYXJ0c0luc3RhbmNlPy5nZXRPcHRpb24oKVsnc2VyaWVzJ10gYXMgQ3VzdG9tU2VyaWVzT3B0aW9uc1tdO1xuXG4gICAgICBjb25zdCBhbGxEYXRhUG9pbnRTZXJpZXMgPSBhbGxTZXJpZXMuZmlsdGVyKFxuICAgICAgICBzZXJpZXMgPT5cbiAgICAgICAgICBzZXJpZXNbJ3R5cGVPZlNlcmllcyddICE9PSAnYWxhcm0nICYmXG4gICAgICAgICAgc2VyaWVzWyd0eXBlT2ZTZXJpZXMnXSAhPT0gJ2V2ZW50JyAmJlxuICAgICAgICAgIHNlcmllc1sndHlwZU9mU2VyaWVzJ10gIT09ICdmYWtlJ1xuICAgICAgKTtcblxuICAgICAgYWxsRGF0YVBvaW50U2VyaWVzLmZvckVhY2goKHNlcmllczogQ3VzdG9tU2VyaWVzT3B0aW9ucykgPT4ge1xuICAgICAgICBsZXQgdmFsdWU6IHN0cmluZztcbiAgICAgICAgY29uc3QgaWQgPSBzZXJpZXNbJ2lkJ10gYXMgc3RyaW5nO1xuICAgICAgICBpZiAoaWQuZW5kc1dpdGgoJy9taW4nKSkge1xuICAgICAgICAgIGNvbnN0IG1pblZhbHVlID0gdGhpcy5maW5kVmFsdWVGb3JFeGFjdE9yRWFybGllclRpbWVzdGFtcChcbiAgICAgICAgICAgIHNlcmllc1snZGF0YSddIGFzIFNlcmllc1ZhbHVlW10sXG4gICAgICAgICAgICBYQXhpc1ZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIW1pblZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IG1heFNlcmllcyA9IGFsbERhdGFQb2ludFNlcmllcy5maW5kKHMgPT4gc1snaWQnXSA9PT0gaWQucmVwbGFjZSgnL21pbicsICcvbWF4JykpO1xuICAgICAgICAgIGlmICghbWF4U2VyaWVzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IG1heFZhbHVlID0gdGhpcy5maW5kVmFsdWVGb3JFeGFjdE9yRWFybGllclRpbWVzdGFtcChcbiAgICAgICAgICAgIG1heFNlcmllc1snZGF0YSddIGFzIFNlcmllc1ZhbHVlW10sXG4gICAgICAgICAgICBYQXhpc1ZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAobWF4VmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFsdWUgPVxuICAgICAgICAgICAgYDxkaXYgY2xhc3M9XCJkLWZsZXggYS1pLWNlbnRlciBzZXBhcmF0b3ItdG9wIHAtdC04IHAtYi04XCI+YCArXG4gICAgICAgICAgICBgPGxhYmVsIGNsYXNzPVwidGV4dC0xMiBtLXItOCBtLWItMFwiPiR7dGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0obWluVmFsdWVbMF0pfTwvbGFiZWw+YCArXG4gICAgICAgICAgICBgPGRpdiBjbGFzcz1cIm0tbC1hdXRvIHRleHQtMTJcIiA+JHttaW5WYWx1ZVsxXX0g4oCUICR7bWF4VmFsdWVbMV19YCArXG4gICAgICAgICAgICAoc2VyaWVzWydkYXRhcG9pbnRVbml0J10gPyBgICR7c2VyaWVzWydkYXRhcG9pbnRVbml0J119YCA6ICcnKSArXG4gICAgICAgICAgICBgPC9kaXY+PC9kaXY+YDtcbiAgICAgICAgfSBlbHNlIGlmIChpZC5lbmRzV2l0aCgnL21heCcpKSB7XG4gICAgICAgICAgLy8gZG8gbm90aGluZywgdmFsdWUgaXMgaGFuZGxlZCAgaW4gJ21pbicgY2FzZVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzZXJpZXNWYWx1ZSA9IHRoaXMuZmluZFZhbHVlRm9yRXhhY3RPckVhcmxpZXJUaW1lc3RhbXAoXG4gICAgICAgICAgICBzZXJpZXNbJ2RhdGEnXSBhcyBTZXJpZXNWYWx1ZVtdLFxuICAgICAgICAgICAgWEF4aXNWYWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKCFzZXJpZXNWYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YWx1ZSA9XG4gICAgICAgICAgICBgPGRpdiBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyIHNlcGFyYXRvci10b3AgcC10LTggcC1iLThcIj5gICtcbiAgICAgICAgICAgIGA8bGFiZWwgY2xhc3M9XCJ0ZXh0LTEyIG0tci04IG0tYi0wXCI+JHt0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShzZXJpZXNWYWx1ZVswXSl9PC9sYWJlbD5gICtcbiAgICAgICAgICAgIGA8ZGl2IGNsYXNzPVwibS1sLWF1dG8gdGV4dC0xMlwiID4ke3Nlcmllc1ZhbHVlWzFdPy50b1N0cmluZygpfWAgK1xuICAgICAgICAgICAgKHNlcmllc1snZGF0YXBvaW50VW5pdCddID8gYCAke3Nlcmllc1snZGF0YXBvaW50VW5pdCddfWAgOiAnJykgK1xuICAgICAgICAgICAgYDwvZGl2PjwvZGl2PmA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpdGVtU3R5bGUgPSBzZXJpZXNbJ2l0ZW1TdHlsZSddIGFzIHsgY29sb3I6IHN0cmluZyB9O1xuXG4gICAgICAgIFlBeGlzUmVhZGluZ3MucHVzaChcbiAgICAgICAgICBgPGRpdiBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyIHAtYi04XCI+PHNwYW4gY2xhc3M9J2RsdC1jOHktaWNvbi1jaXJjbGUgbS1yLTQnIHN0eWxlPSdjb2xvcjogJHtpdGVtU3R5bGUuY29sb3J9Jz48L3NwYW4+YCArIC8vIGNvbG9yIGNpcmNsZVxuICAgICAgICAgICAgYDxzdHJvbmc+JHtzZXJpZXNbJ2RhdGFwb2ludExhYmVsJ119IDwvc3Ryb25nPjwvZGl2PmAgKyAvLyBuYW1lXG4gICAgICAgICAgICBgJHt2YWx1ZX1gIC8vIHNpbmdsZSB2YWx1ZSBvciBtaW4tbWF4IHJhbmdlXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGA8ZGl2IHN0eWxlPVwid2lkdGg6ICR7dGhpcy5UT09MVElQX1dJRFRIfXB4XCI+JHtZQXhpc1JlYWRpbmdzLmpvaW4oJycpfTwvZGl2PmA7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZFZhbHVlRm9yRXhhY3RPckVhcmxpZXJUaW1lc3RhbXAoXG4gICAgdmFsdWVzOiBTZXJpZXNWYWx1ZVtdLFxuICAgIHRpbWVzdGFtcFN0cmluZzogRGF0ZVN0cmluZ1xuICApOiBTZXJpZXNWYWx1ZSB8IG51bGwge1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IG5ldyBEYXRlKHRpbWVzdGFtcFN0cmluZykudmFsdWVPZigpO1xuICAgIHJldHVybiB2YWx1ZXMucmVkdWNlKChhY2M6IFNlcmllc1ZhbHVlIHwgbnVsbCwgY3VycjogU2VyaWVzVmFsdWUpID0+IHtcbiAgICAgIGlmIChuZXcgRGF0ZShjdXJyWzBdKS52YWx1ZU9mKCkgPD0gdGltZXN0YW1wKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBhY2MgPT09IG51bGwgfHxcbiAgICAgICAgICBNYXRoLmFicyhuZXcgRGF0ZShjdXJyWzBdKS52YWx1ZU9mKCkgLSB0aW1lc3RhbXApIDxcbiAgICAgICAgICAgIE1hdGguYWJzKG5ldyBEYXRlKGFjY1swXSkudmFsdWVPZigpIC0gdGltZXN0YW1wKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gY3VycjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBudWxsKTtcbiAgfVxufVxuIl19