@c8y/ngx-components 1021.67.0 → 1021.70.1
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.
- package/core/common/bytes.pipe.d.ts +26 -10
- package/core/common/bytes.pipe.d.ts.map +1 -1
- package/echart/charts.component.d.ts +14 -3
- package/echart/charts.component.d.ts.map +1 -1
- package/esm2022/core/common/bytes.pipe.mjs +47 -18
- package/esm2022/core/data-grid/data-grid.component.mjs +3 -3
- package/esm2022/echart/charts.component.mjs +50 -3
- package/esm2022/messaging-management/api/model/backlogQuota.mjs +2 -0
- package/esm2022/messaging-management/api/model/namespace.mjs +2 -0
- package/esm2022/messaging-management/api/model/namespaceDetails.mjs +2 -0
- package/esm2022/messaging-management/api/model/namespaceList.mjs +2 -0
- package/esm2022/messaging-management/api/model/namespacePolicies.mjs +2 -0
- package/esm2022/messaging-management/api/model/namespacePublishers.mjs +2 -0
- package/esm2022/messaging-management/api/model/namespaceSubscribers.mjs +2 -0
- package/esm2022/messaging-management/api/model/namespaceTopics.mjs +2 -0
- package/esm2022/messaging-management/api/model/pageStatistics.mjs +2 -0
- package/esm2022/messaging-management/api/model/pageable.mjs +2 -0
- package/esm2022/messaging-management/api/model/sortable.mjs +2 -0
- package/esm2022/messaging-management/api/model/subscriber.mjs +2 -0
- package/esm2022/messaging-management/api/model/subscriberFilters.mjs +2 -0
- package/esm2022/messaging-management/api/model/subscriberList.mjs +2 -0
- package/esm2022/messaging-management/api/model/subscriberToDelete.mjs +2 -0
- package/esm2022/messaging-management/api/model/topic.mjs +2 -0
- package/esm2022/messaging-management/api/model/topicDetailFilters.mjs +2 -0
- package/esm2022/messaging-management/api/model/topicList.mjs +2 -0
- package/esm2022/messaging-management/api/model/topicListFilters.mjs +2 -0
- package/esm2022/messaging-management/api/model/topicType.mjs +9 -0
- package/esm2022/messaging-management/api/services/messaging-namespaces.service.mjs +83 -0
- package/esm2022/messaging-management/api/services/messaging-subscribers.service.mjs +55 -0
- package/esm2022/messaging-management/api/services/messaging-topics.service.mjs +48 -0
- package/esm2022/messaging-management/c8y-ngx-components-messaging-management.mjs +5 -0
- package/esm2022/messaging-management/constants.mjs +4 -0
- package/esm2022/messaging-management/index.mjs +2 -0
- package/esm2022/messaging-management/messaging/namespace-list/namespace-item/namespace-item-card/namespace-item-card.component.mjs +43 -0
- package/esm2022/messaging-management/messaging/namespace-list/namespace-item/namespace-item.component.mjs +36 -0
- package/esm2022/messaging-management/messaging/namespace-list/namespace-list.component.mjs +51 -0
- package/esm2022/messaging-management/messaging/shared/usage/usage.component.mjs +68 -0
- package/esm2022/messaging-management/messaging/topic/topic-list-view.component.mjs +81 -0
- package/esm2022/messaging-management/messaging/topic/topic-subscribers-view/topic-subscribers-data-grid.service.mjs +220 -0
- package/esm2022/messaging-management/messaging/topic/topic-subscribers-view/topic-subscribers-view.component.mjs +137 -0
- package/esm2022/messaging-management/messaging/topic/topics-data-grid.service.mjs +113 -0
- package/esm2022/messaging-management/messaging-management.guard.mjs +40 -0
- package/esm2022/messaging-management/messaging-management.module.mjs +72 -0
- package/esm2022/messaging-management/navigator/messaging-navigator-factory.mjs +55 -0
- package/esm2022/messaging-management/navigator/topic-details-tab.factory.mjs +33 -0
- package/esm2022/messaging-management/utils/backlog-quota-limit.pipe.mjs +32 -0
- package/esm2022/messaging-management/utils/namespace-props.mjs +23 -0
- package/esm2022/messaging-management/utils/time-to-live.pipe.mjs +122 -0
- package/esm2022/operations/device-selector/device-selector.component.mjs +5 -1
- package/esm2022/widgets/implementations/datapoints-graph/datapoints-graph-view/datapoints-graph-widget-view.component.mjs +18 -3
- package/fesm2022/c8y-ngx-components-echart.mjs +49 -2
- package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-messaging-management.mjs +1225 -0
- package/fesm2022/c8y-ngx-components-messaging-management.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-operations-device-selector.mjs +4 -0
- package/fesm2022/c8y-ngx-components-operations-device-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs +17 -2
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +49 -22
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/locales/de.po +272 -5
- package/locales/es.po +271 -4
- package/locales/fr.po +272 -5
- package/locales/ja_JP.po +272 -5
- package/locales/ko.po +271 -4
- package/locales/locales.pot +240 -0
- package/locales/nl.po +271 -4
- package/locales/pl.po +271 -4
- package/locales/pt_BR.po +272 -5
- package/locales/zh_CN.po +271 -4
- package/locales/zh_TW.po +272 -5
- package/messaging-management/api/model/backlogQuota.d.ts +14 -0
- package/messaging-management/api/model/backlogQuota.d.ts.map +1 -0
- package/messaging-management/api/model/namespace.d.ts +13 -0
- package/messaging-management/api/model/namespace.d.ts.map +1 -0
- package/messaging-management/api/model/namespaceDetails.d.ts +8 -0
- package/messaging-management/api/model/namespaceDetails.d.ts.map +1 -0
- package/messaging-management/api/model/namespaceList.d.ts +5 -0
- package/messaging-management/api/model/namespaceList.d.ts.map +1 -0
- package/messaging-management/api/model/namespacePolicies.d.ts +10 -0
- package/messaging-management/api/model/namespacePolicies.d.ts.map +1 -0
- package/messaging-management/api/model/namespacePublishers.d.ts +4 -0
- package/messaging-management/api/model/namespacePublishers.d.ts.map +1 -0
- package/messaging-management/api/model/namespaceSubscribers.d.ts +4 -0
- package/messaging-management/api/model/namespaceSubscribers.d.ts.map +1 -0
- package/messaging-management/api/model/namespaceTopics.d.ts +5 -0
- package/messaging-management/api/model/namespaceTopics.d.ts.map +1 -0
- package/messaging-management/api/model/pageStatistics.d.ts +12 -0
- package/messaging-management/api/model/pageStatistics.d.ts.map +1 -0
- package/messaging-management/api/model/pageable.d.ts +8 -0
- package/messaging-management/api/model/pageable.d.ts.map +1 -0
- package/messaging-management/api/model/sortable.d.ts +6 -0
- package/messaging-management/api/model/sortable.d.ts.map +1 -0
- package/messaging-management/api/model/subscriber.d.ts +28 -0
- package/messaging-management/api/model/subscriber.d.ts.map +1 -0
- package/messaging-management/api/model/subscriberFilters.d.ts +13 -0
- package/messaging-management/api/model/subscriberFilters.d.ts.map +1 -0
- package/messaging-management/api/model/subscriberList.d.ts +7 -0
- package/messaging-management/api/model/subscriberList.d.ts.map +1 -0
- package/messaging-management/api/model/subscriberToDelete.d.ts +12 -0
- package/messaging-management/api/model/subscriberToDelete.d.ts.map +1 -0
- package/messaging-management/api/model/topic.d.ts +52 -0
- package/messaging-management/api/model/topic.d.ts.map +1 -0
- package/messaging-management/api/model/topicDetailFilters.d.ts +9 -0
- package/messaging-management/api/model/topicDetailFilters.d.ts.map +1 -0
- package/messaging-management/api/model/topicList.d.ts +7 -0
- package/messaging-management/api/model/topicList.d.ts.map +1 -0
- package/messaging-management/api/model/topicListFilters.d.ts +12 -0
- package/messaging-management/api/model/topicListFilters.d.ts.map +1 -0
- package/messaging-management/api/model/topicType.d.ts +8 -0
- package/messaging-management/api/model/topicType.d.ts.map +1 -0
- package/messaging-management/api/services/messaging-namespaces.service.d.ts +52 -0
- package/messaging-management/api/services/messaging-namespaces.service.d.ts.map +1 -0
- package/messaging-management/api/services/messaging-subscribers.service.d.ts +30 -0
- package/messaging-management/api/services/messaging-subscribers.service.d.ts.map +1 -0
- package/messaging-management/api/services/messaging-topics.service.d.ts +21 -0
- package/messaging-management/api/services/messaging-topics.service.d.ts.map +1 -0
- package/messaging-management/c8y-ngx-components-messaging-management.d.ts.map +1 -0
- package/messaging-management/constants.d.ts +4 -0
- package/messaging-management/constants.d.ts.map +1 -0
- package/messaging-management/index.d.ts +2 -0
- package/messaging-management/index.d.ts.map +1 -0
- package/messaging-management/messaging/namespace-list/namespace-item/namespace-item-card/namespace-item-card.component.d.ts +29 -0
- package/messaging-management/messaging/namespace-list/namespace-item/namespace-item-card/namespace-item-card.component.d.ts.map +1 -0
- package/messaging-management/messaging/namespace-list/namespace-item/namespace-item.component.d.ts +15 -0
- package/messaging-management/messaging/namespace-list/namespace-item/namespace-item.component.d.ts.map +1 -0
- package/messaging-management/messaging/namespace-list/namespace-list.component.d.ts +17 -0
- package/messaging-management/messaging/namespace-list/namespace-list.component.d.ts.map +1 -0
- package/messaging-management/messaging/shared/usage/usage.component.d.ts +40 -0
- package/messaging-management/messaging/shared/usage/usage.component.d.ts.map +1 -0
- package/messaging-management/messaging/topic/topic-list-view.component.d.ts +38 -0
- package/messaging-management/messaging/topic/topic-list-view.component.d.ts.map +1 -0
- package/messaging-management/messaging/topic/topic-subscribers-view/topic-subscribers-data-grid.service.d.ts +21 -0
- package/messaging-management/messaging/topic/topic-subscribers-view/topic-subscribers-data-grid.service.d.ts.map +1 -0
- package/messaging-management/messaging/topic/topic-subscribers-view/topic-subscribers-view.component.d.ts +52 -0
- package/messaging-management/messaging/topic/topic-subscribers-view/topic-subscribers-view.component.d.ts.map +1 -0
- package/messaging-management/messaging/topic/topics-data-grid.service.d.ts +13 -0
- package/messaging-management/messaging/topic/topics-data-grid.service.d.ts.map +1 -0
- package/messaging-management/messaging-management.guard.d.ts +12 -0
- package/messaging-management/messaging-management.guard.d.ts.map +1 -0
- package/messaging-management/messaging-management.module.d.ts +7 -0
- package/messaging-management/messaging-management.module.d.ts.map +1 -0
- package/messaging-management/navigator/messaging-navigator-factory.d.ts +18 -0
- package/messaging-management/navigator/messaging-navigator-factory.d.ts.map +1 -0
- package/messaging-management/navigator/topic-details-tab.factory.d.ts +15 -0
- package/messaging-management/navigator/topic-details-tab.factory.d.ts.map +1 -0
- package/messaging-management/utils/backlog-quota-limit.pipe.d.ts +13 -0
- package/messaging-management/utils/backlog-quota-limit.pipe.d.ts.map +1 -0
- package/messaging-management/utils/namespace-props.d.ts +10 -0
- package/messaging-management/utils/namespace-props.d.ts.map +1 -0
- package/messaging-management/utils/time-to-live.pipe.d.ts +16 -0
- package/messaging-management/utils/time-to-live.pipe.d.ts.map +1 -0
- package/operations/device-selector/device-selector.component.d.ts.map +1 -1
- package/package.json +1 -1
- package/widgets/implementations/datapoints-graph/datapoints-graph-view/datapoints-graph-widget-view.component.d.ts +2 -0
- package/widgets/implementations/datapoints-graph/datapoints-graph-view/datapoints-graph-widget-view.component.d.ts.map +1 -1
|
@@ -40,12 +40,14 @@ export class ChartsComponent {
|
|
|
40
40
|
this.chartEventsService = inject(ChartEventsService);
|
|
41
41
|
this.chartAlarmsService = inject(ChartAlarmsService);
|
|
42
42
|
this.widgetTimeContextDateRangeService = inject(WidgetTimeContextDateRangeService);
|
|
43
|
+
this.loadedTimeRange = null;
|
|
43
44
|
this.chartOption$ = this.configChangedSubject.pipe(switchMap(() => this.loadAlarmsAndEvents()), switchMap(() => this.fetchSeriesForDatapoints$()), switchMap((datapointsWithValues) => {
|
|
44
45
|
if (datapointsWithValues.length === 0) {
|
|
45
46
|
this.echartsInstance?.clear();
|
|
46
47
|
this.showLoadMore = false;
|
|
47
48
|
return of(this.getDefaultChartOptions());
|
|
48
49
|
}
|
|
50
|
+
this.loadedTimeRange = { ...this.getTimeRange() };
|
|
49
51
|
return this.getChartOptions(datapointsWithValues);
|
|
50
52
|
}), tap(v => {
|
|
51
53
|
if (v['empty']) {
|
|
@@ -54,7 +56,13 @@ export class ChartsComponent {
|
|
|
54
56
|
this.chartRealtimeService.stopRealtime();
|
|
55
57
|
this.startRealtimeIfPossible();
|
|
56
58
|
if (this.echartsInstance) {
|
|
57
|
-
|
|
59
|
+
/**
|
|
60
|
+
* * Set the chart options
|
|
61
|
+
* First parameter is the options to set
|
|
62
|
+
* Second parameter is a boolean to indicate that the chart should be re-rendered as we do not want to merge.
|
|
63
|
+
* Third parameter is a boolean to indicate that we want to lazy load the chart.
|
|
64
|
+
*/
|
|
65
|
+
this.echartsInstance.setOption(v, true, true);
|
|
58
66
|
const options = this.echartsInstance.getOption();
|
|
59
67
|
const dataZoom = options['dataZoom'][0];
|
|
60
68
|
if (dataZoom.start !== 0) {
|
|
@@ -64,7 +72,16 @@ export class ChartsComponent {
|
|
|
64
72
|
this.sliderZoomUsed = false;
|
|
65
73
|
}));
|
|
66
74
|
}
|
|
67
|
-
ngOnChanges() {
|
|
75
|
+
ngOnChanges(changes) {
|
|
76
|
+
const currentTimeRange = this.getTimeRange();
|
|
77
|
+
// Check if the current time range is within the loaded time range to avoid unnecessary updates
|
|
78
|
+
if (this.loadedTimeRange &&
|
|
79
|
+
new Date(currentTimeRange.dateFrom) >= new Date(this.loadedTimeRange.dateFrom) &&
|
|
80
|
+
new Date(currentTimeRange.dateTo) <= new Date(this.loadedTimeRange.dateTo) &&
|
|
81
|
+
changes.config.previousValue?.dateFrom !== changes.config.currentValue.dateFrom &&
|
|
82
|
+
changes.config.previousValue?.dateTo !== changes.config.currentValue.dateTo) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
68
85
|
this.configChangedSubject.next();
|
|
69
86
|
}
|
|
70
87
|
ngOnInit() {
|
|
@@ -206,6 +223,36 @@ export class ChartsComponent {
|
|
|
206
223
|
timeout = setTimeout(() => func(...args), wait);
|
|
207
224
|
};
|
|
208
225
|
}
|
|
226
|
+
/**
|
|
227
|
+
* Toggles the visibility of a series in the chart based on the provided datapoint.
|
|
228
|
+
* @param datapoint - The datapoint to toggle visibility for.
|
|
229
|
+
*/
|
|
230
|
+
toggleDatapointSeriesVisibility(datapoint) {
|
|
231
|
+
const series = this.echartsInstance.getOption().series;
|
|
232
|
+
const seriesToUpdate = series.find(s => s.datapointLabel === datapoint.label);
|
|
233
|
+
if (seriesToUpdate) {
|
|
234
|
+
this.echartsInstance.dispatchAction({
|
|
235
|
+
type: 'legendToggleSelect',
|
|
236
|
+
name: seriesToUpdate.name
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Toggles the visibility of a series in the chart based on the provided alarm or event.
|
|
242
|
+
* @param alarmOrEvent - The alarm or event to toggle visibility for.
|
|
243
|
+
*/
|
|
244
|
+
toggleAlarmEventSeriesVisibility(alarmOrEvent) {
|
|
245
|
+
const series = this.echartsInstance.getOption().series;
|
|
246
|
+
const seriesToUpdate = series.filter(s => s.name === `${alarmOrEvent.label}-markPoint` || s.name === `${alarmOrEvent.label}-markLine`);
|
|
247
|
+
if (seriesToUpdate) {
|
|
248
|
+
seriesToUpdate.forEach(s => {
|
|
249
|
+
this.echartsInstance.dispatchAction({
|
|
250
|
+
type: 'legendToggleSelect',
|
|
251
|
+
name: s.name
|
|
252
|
+
});
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
}
|
|
209
256
|
getDefaultChartOptions() {
|
|
210
257
|
return {
|
|
211
258
|
title: {
|
|
@@ -495,4 +542,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
495
542
|
type: ViewChild,
|
|
496
543
|
args: ['chart']
|
|
497
544
|
}] } });
|
|
498
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2VjaGFydC9jaGFydHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZWNoYXJ0L2NoYXJ0cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBSUwsTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQVd2QixPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ2xGLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsVUFBVSxFQUNWLG9CQUFvQixFQUNwQixxQkFBcUIsRUFDckIsK0JBQStCLEVBQy9CLG9CQUFvQixFQUNwQixPQUFPLEVBQ1AsMEJBQTBCLEVBQzFCLGlDQUFpQyxFQUNsQyxNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBTXpFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxh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QjtZQUN2Qix3QkFBd0I7U0FDekIsK0lDOUVILDZoQkF1QkEsMkNEMERJLFlBQVksdUxBQ1osVUFBVSx5TEFDVixnQkFBZ0Isa2pDQUNoQixhQUFhLDhCQUNiLGFBQWEsK0JBQ2Isb0JBQW9CLGdGQUNwQixZQUFZOzs0RkFHSCxlQUFlO2tCQTNCM0IsU0FBUzsrQkFDRSxZQUFZLGFBRVg7d0JBQ1QsRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTt3QkFDekYsb0JBQW9CO3dCQUNwQiwwQkFBMEI7d0JBQzFCLG9CQUFvQjt3QkFDcEIsb0JBQW9CO3dCQUNwQixpQkFBaUI7d0JBQ2pCLHFCQUFxQjt3QkFDckIsd0JBQXdCO3dCQUN4QixZQUFZO3dCQUNaLHVCQUF1Qjt3QkFDdkIsd0JBQXdCO3FCQUN6QixjQUNXLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLFVBQVU7d0JBQ1YsZ0JBQWdCO3dCQUNoQixhQUFhO3dCQUNiLGFBQWE7d0JBQ2Isb0JBQW9CO3dCQUNwQixZQUFZO3FCQUNiO3dEQVNRLE1BQU07c0JBQWQsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0kscUJBQXFCO3NCQUE5QixNQUFNO2dCQUtHLHlCQUF5QjtzQkFBbEMsTUFBTTtnQkFHRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0cscUJBQXFCO3NCQUE5QixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDYSxLQUFLO3NCQUF4QixTQUFTO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7IEVDaGFydHMsIEVDaGFydHNPcHRpb24sIFNlcmllc09wdGlvbiB9IGZyb20gJ2VjaGFydHMnO1xuaW1wb3J0IHtcbiAgQWxhcm1EZXRhaWxzRXh0ZW5kZWQsXG4gIEFsYXJtT3JFdmVudEV4dGVuZGVkLFxuICBEYXRhcG9pbnRzR3JhcGhLUElEZXRhaWxzLFxuICBEYXRhcG9pbnRzR3JhcGhXaWRnZXRDb25maWcsXG4gIERwV2l0aFZhbHVlcyxcbiAgRXZlbnREZXRhaWxzRXh0ZW5kZWQsXG4gIE1hcmtMaW5lRGF0YVxufSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZvcmtKb2luLCBsYXN0VmFsdWVGcm9tLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEN1c3RvbU1lYXN1cmVtZW50U2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvY3VzdG9tLW1lYXN1cmVtZW50cy5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEFsYXJtUmVhbHRpbWVTZXJ2aWNlLFxuICBDb3JlTW9kdWxlLFxuICBEaXNtaXNzQWxlcnRTdHJhdGVneSxcbiAgRHluYW1pY0NvbXBvbmVudEFsZXJ0LFxuICBEeW5hbWljQ29tcG9uZW50QWxlcnRBZ2dyZWdhdG9yLFxuICBFdmVudFJlYWx0aW1lU2VydmljZSxcbiAgZ2V0dGV4dCxcbiAgTWVhc3VyZW1lbnRSZWFsdGltZVNlcnZpY2UsXG4gIFdpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEVjaGFydHNPcHRpb25zU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZWNoYXJ0cy1vcHRpb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhcnRSZWFsdGltZVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2NoYXJ0LXJlYWx0aW1lLnNlcnZpY2UnO1xuaW1wb3J0IHR5cGUge1xuICBDYWxsYmFja0RhdGFQYXJhbXMsXG4gIEVDQWN0aW9uRXZlbnQsXG4gIFRvb2x0aXBGb3JtYXR0ZXJDYWxsYmFja1xufSBmcm9tICdlY2hhcnRzL3R5cGVzL3NyYy91dGlsL3R5cGVzJztcbmltcG9ydCB7IENoYXJ0VHlwZXNTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9jaGFydC10eXBlcy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOR1hfRUNIQVJUU19DT05GSUcsIE5neEVjaGFydHNNb2R1bGUgfSBmcm9tICduZ3gtZWNoYXJ0cyc7XG5pbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC90b29sdGlwJztcbmltcG9ydCB7IFBvcG92ZXJNb2R1bGUgfSBmcm9tICduZ3gtYm9vdHN0cmFwL3BvcG92ZXInO1xuaW1wb3J0IHsgWUF4aXNTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy95LWF4aXMuc2VydmljZSc7XG5pbXBvcnQgeyBDaGFydEFsZXJ0c0NvbXBvbmVudCB9IGZyb20gJy4vY2hhcnQtYWxlcnRzL2NoYXJ0LWFsZXJ0cy5jb21wb25lbnQnO1xuaW1wb3J0IHsgYWdncmVnYXRpb25UeXBlLCBBbGFybVN0YXR1cywgSUFsYXJtLCBJRXZlbnQgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBDaGFydEV2ZW50c1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2NoYXJ0LWV2ZW50cy5zZXJ2aWNlJztcbmltcG9ydCB7IENoYXJ0QWxhcm1zU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvY2hhcnQtYWxhcm1zLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWNoYXJ0c0N1c3RvbU9wdGlvbnMgfSBmcm9tICcuL21vZGVscy9jaGFydC5tb2RlbCc7XG5pbXBvcnQgeyBUb3BMZXZlbEZvcm1hdHRlclBhcmFtcyB9IGZyb20gJ2VjaGFydHMvdHlwZXMvc3JjL2NvbXBvbmVudC90b29sdGlwL1Rvb2x0aXBNb2RlbCc7XG5pbXBvcnQge1xuICBBbGFybVNldmVyaXR5VG9JY29uUGlwZSxcbiAgQWxhcm1TZXZlcml0eVRvTGFiZWxQaXBlLFxuICBBbGFybXNNb2R1bGVcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9hbGFybXMnO1xuaW1wb3J0IHsgSW50ZXJ2YWwsIElOVEVSVkFMUyB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvaW50ZXJ2YWwtcGlja2VyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWNoYXJ0cycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGFydHMuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICB7IHByb3ZpZGU6IE5HWF9FQ0hBUlRTX0NPTkZJRywgdXNlRmFjdG9yeTogKCkgPT4gKHsgZWNoYXJ0czogKCkgPT4gaW1wb3J0KCdlY2hhcnRzJykgfSkgfSxcbiAgICBDaGFydFJlYWx0aW1lU2VydmljZSxcbiAgICBNZWFzdXJlbWVudFJlYWx0aW1lU2VydmljZSxcbiAgICBBbGFybVJlYWx0aW1lU2VydmljZSxcbiAgICBFdmVudFJlYWx0aW1lU2VydmljZSxcbiAgICBDaGFydFR5cGVzU2VydmljZSxcbiAgICBFY2hhcnRzT3B0aW9uc1NlcnZpY2UsXG4gICAgQ3VzdG9tTWVhc3VyZW1lbnRTZXJ2aWNlLFxuICAgIFlBeGlzU2VydmljZSxcbiAgICBBbGFybVNldmVyaXR5VG9JY29uUGlwZSxcbiAgICBBbGFybVNldmVyaXR5VG9MYWJlbFBpcGVcbiAgXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBDb3JlTW9kdWxlLFxuICAgIE5neEVjaGFydHNNb2R1bGUsXG4gICAgVG9vbHRpcE1vZHVsZSxcbiAgICBQb3BvdmVyTW9kdWxlLFxuICAgIENoYXJ0QWxlcnRzQ29tcG9uZW50LFxuICAgIEFsYXJtc01vZHVsZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIENoYXJ0c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBjaGFydE9wdGlvbiQ6IE9ic2VydmFibGU8RUNoYXJ0c09wdGlvbj47XG4gIGVjaGFydHNJbnN0YW5jZSE6IEVDaGFydHM7XG4gIHNob3dMb2FkTW9yZSA9IGZhbHNlO1xuICBhbGFybXM6IElBbGFybVtdID0gW107XG4gIGV2ZW50czogSUV2ZW50W10gPSBbXTtcbiAgc2xpZGVyWm9vbVVzZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgY29uZmlnITogRGF0YXBvaW50c0dyYXBoV2lkZ2V0Q29uZmlnO1xuICBASW5wdXQoKSBhbGVydHMhOiBEeW5hbWljQ29tcG9uZW50QWxlcnRBZ2dyZWdhdG9yO1xuICBAT3V0cHV0KCkgY29uZmlnQ2hhbmdlT25ab29tT3V0ID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgZGF0ZUZyb206IERhdGU7XG4gICAgZGF0ZVRvOiBEYXRlO1xuICAgIGludGVydmFsPzogSW50ZXJ2YWxbJ2lkJ107XG4gIH0+KCk7XG4gIEBPdXRwdXQoKSB0aW1lUmFuZ2VDaGFuZ2VPblJlYWx0aW1lID0gbmV3IEV2ZW50RW1pdHRlcjxcbiAgICBQaWNrPERhdGFwb2ludHNHcmFwaFdpZGdldENvbmZpZywgJ2RhdGVGcm9tJyB8ICdkYXRlVG8nPlxuICA+KCk7XG4gIEBPdXRwdXQoKSBkYXRhcG9pbnRPdXRPZlN5bmMgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGFwb2ludHNHcmFwaEtQSURldGFpbHM+KCk7XG4gIEBPdXRwdXQoKSB1cGRhdGVBbGFybXNBbmRFdmVudHMgPSBuZXcgRXZlbnRFbWl0dGVyPEFsYXJtT3JFdmVudEV4dGVuZGVkW10+KCk7XG4gIEBPdXRwdXQoKSBpc01hcmtlZEFyZWFFbmFibGVkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAVmlld0NoaWxkKCdjaGFydCcpIGNoYXJ0OiBFbGVtZW50UmVmO1xuICBwcml2YXRlIGNvbmZpZ0NoYW5nZWRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDx2b2lkIHwgbnVsbD4obnVsbCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBtZWFzdXJlbWVudFNlcnZpY2UgPSBpbmplY3QoQ3VzdG9tTWVhc3VyZW1lbnRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBlY2hhcnRzT3B0aW9uc1NlcnZpY2UgPSBpbmplY3QoRWNoYXJ0c09wdGlvbnNTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjaGFydFJlYWx0aW1lU2VydmljZSA9IGluamVjdChDaGFydFJlYWx0aW1lU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2hhcnRFdmVudHNTZXJ2aWNlID0gaW5qZWN0KENoYXJ0RXZlbnRzU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2hhcnRBbGFybXNTZXJ2aWNlID0gaW5qZWN0KENoYXJ0QWxhcm1zU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgd2lkZ2V0VGltZUNvbnRleHREYXRlUmFuZ2VTZXJ2aWNlID0gaW5qZWN0KFdpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jaGFydE9wdGlvbiQgPSB0aGlzLmNvbmZpZ0NoYW5nZWRTdWJqZWN0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5sb2FkQWxhcm1zQW5kRXZlbnRzKCkpLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuZmV0Y2hTZXJpZXNGb3JEYXRhcG9pbnRzJCgpKSxcbiAgICAgIHN3aXRjaE1hcCgoZGF0YXBvaW50c1dpdGhWYWx1ZXM6IERwV2l0aFZhbHVlc1tdKSA9PiB7XG4gICAgICAgIGlmIChkYXRhcG9pbnRzV2l0aFZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLmVjaGFydHNJbnN0YW5jZT8uY2xlYXIoKTtcbiAgICAgICAgICB0aGlzLnNob3dMb2FkTW9yZSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBvZih0aGlzLmdldERlZmF1bHRDaGFydE9wdGlvbnMoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2hhcnRPcHRpb25zKGRhdGFwb2ludHNXaXRoVmFsdWVzKTtcbiAgICAgIH0pLFxuICAgICAgdGFwKHYgPT4ge1xuICAgICAgICBpZiAodlsnZW1wdHknXSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoYXJ0UmVhbHRpbWVTZXJ2aWNlLnN0b3BSZWFsdGltZSgpO1xuICAgICAgICB0aGlzLnN0YXJ0UmVhbHRpbWVJZlBvc3NpYmxlKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuZWNoYXJ0c0luc3RhbmNlKSB7XG4gICAgICAgICAgdGhpcy5lY2hhcnRzSW5zdGFuY2Uuc2V0T3B0aW9uKHYsIHRydWUpO1xuICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmVjaGFydHNJbnN0YW5jZS5nZXRPcHRpb24oKTtcbiAgICAgICAgICBjb25zdCBkYXRhWm9vbSA9IG9wdGlvbnNbJ2RhdGFab29tJ11bMF07XG4gICAgICAgICAgaWYgKGRhdGFab29tLnN0YXJ0ICE9PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dMb2FkTW9yZSA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNsaWRlclpvb21Vc2VkID0gZmFsc2U7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICB0aGlzLmNvbmZpZ0NoYW5nZWRTdWJqZWN0Lm5leHQoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmFsZXJ0cykge1xuICAgICAgdGhpcy5hbGVydHMuc2V0QWxlcnRHcm91cERpc21pc3NTdHJhdGVneShcbiAgICAgICAgJ3dhcm5pbmcnLFxuICAgICAgICBEaXNtaXNzQWxlcnRTdHJhdGVneS5URU1QT1JBUllfT1JfUEVSTUFORU5UXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuY2hhcnRSZWFsdGltZVNlcnZpY2Uuc3RvcFJlYWx0aW1lKCk7XG4gIH1cblxuICBvbkNoYXJ0SW5pdChlYzogRUNoYXJ0cykge1xuICAgIHRoaXMuZWNoYXJ0c0luc3RhbmNlID0gZWM7XG4gICAgdGhpcy5lY2hhcnRzT3B0aW9uc1NlcnZpY2UuZWNoYXJ0c0luc3RhbmNlID0gdGhpcy5lY2hhcnRzSW5zdGFuY2U7XG4gICAgdGhpcy5zdGFydFJlYWx0aW1lSWZQb3NzaWJsZSgpO1xuXG4gICAgY29uc3QgZGF0YVpvb21IYW5kbGVyID0gKGV2dDogRUNBY3Rpb25FdmVudCkgPT4ge1xuICAgICAgaWYgKGV2dC5iYXRjaD8uWzBdPy5zdGFydCA9PT0gMCB8fCBldnRbJ3N0YXJ0J10gPT09IDApIHtcbiAgICAgICAgdGhpcy5zaG93TG9hZE1vcmUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5lY2hhcnRzSW5zdGFuY2UuZ2V0T3B0aW9uKCk7XG4gICAgICBjb25zdCBkYXRhWm9vbSA9IG9wdGlvbnNbJ2RhdGFab29tJ11bMF07XG4gICAgICB0aGlzLnNsaWRlclpvb21Vc2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMuY29uZmlnQ2hhbmdlT25ab29tT3V0LmVtaXQoe1xuICAgICAgICBkYXRlRnJvbTogbmV3IERhdGUoZGF0YVpvb21bJ3N0YXJ0VmFsdWUnXSksXG4gICAgICAgIGRhdGVUbzogbmV3IERhdGUoZGF0YVpvb21bJ2VuZFZhbHVlJ10pLFxuICAgICAgICBpbnRlcnZhbDogJ2N1c3RvbSdcbiAgICAgIH0pO1xuICAgICAgdGhpcy5lY2hhcnRzSW5zdGFuY2Uuc2V0T3B0aW9uKG9wdGlvbnMpO1xuICAgICAgdGhpcy5jaGFydFJlYWx0aW1lU2VydmljZS5zdG9wUmVhbHRpbWUoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZGVib3VuY2VkRGF0YVpvb21IYW5kbGVyID0gdGhpcy5jb25maWcucmVhbHRpbWVcbiAgICAgID8gZGF0YVpvb21IYW5kbGVyXG4gICAgICA6IHRoaXMuZGVib3VuY2UoZGF0YVpvb21IYW5kbGVyLCAxMDAwKTtcblxuICAgIHRoaXMuZWNoYXJ0c0luc3RhbmNlLm9uKCdkYXRhWm9vbScsIGRlYm91bmNlZERhdGFab29tSGFuZGxlcik7XG4gICAgdGhpcy5lY2hhcnRzSW5zdGFuY2Uub24oJ2NsaWNrJywgdGhpcy5vbkNoYXJ0Q2xpY2suYmluZCh0aGlzKSk7XG5cbiAgICBsZXQgb3JpZ2luYWxGb3JtYXR0ZXI6XG4gICAgICB8IFRvb2x0aXBGb3JtYXR0ZXJDYWxsYmFjazxUb3BMZXZlbEZvcm1hdHRlclBhcmFtcz5cbiAgICAgIHwgc3RyaW5nXG4gICAgICB8IG51bGxcbiAgICAgIHwgdW5kZWZpbmVkID0gbnVsbDtcblxuICAgIHRoaXMuZWNoYXJ0c0luc3RhbmNlLm9uKCdtb3VzZW92ZXInLCAocGFyYW1zOiBhbnkpID0+IHtcbiAgICAgIGlmIChwYXJhbXM/LmNvbXBvbmVudFR5cGUgIT09ICdtYXJrTGluZScgJiYgcGFyYW1zPy5jb21wb25lbnRUeXBlICE9PSAnbWFya1BvaW50Jykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmVjaGFydHNJbnN0YW5jZS5nZXRPcHRpb24oKSBhcyBFQ2hhcnRzT3B0aW9uO1xuICAgICAgaWYgKCFvcHRpb25zLnRvb2x0aXAgfHwgIUFycmF5LmlzQXJyYXkob3B0aW9ucy50b29sdGlwKSB8fCAhb3B0aW9ucy50b29sdGlwWzBdKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG9yaWdpbmFsRm9ybWF0dGVyID0gb3JpZ2luYWxGb3JtYXR0ZXIgPz8gb3B0aW9uc1sndG9vbHRpcCddWzBdLmZvcm1hdHRlcjtcblxuICAgICAgY29uc3QgdXBkYXRlZE9wdGlvbnM6IFBhcnRpYWw8U2VyaWVzT3B0aW9uPiA9IHsgdG9vbHRpcDogb3B0aW9uc1sndG9vbHRpcCddWzBdIH07XG5cbiAgICAgIGlmICghdXBkYXRlZE9wdGlvbnMudG9vbHRpcCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB1cGRhdGVkT3B0aW9ucy50b29sdGlwLmZvcm1hdHRlciA9ICh0b29sdGlwUGFyYW1zOiBDYWxsYmFja0RhdGFQYXJhbXMpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWNoYXJ0c09wdGlvbnNTZXJ2aWNlLmdldFRvb2x0aXBGb3JtYXR0ZXJGb3JBbGFybUFuZEV2ZW50cyhcbiAgICAgICAgICB0b29sdGlwUGFyYW1zLFxuICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICB0aGlzLmV2ZW50cyxcbiAgICAgICAgICB0aGlzLmFsYXJtc1xuICAgICAgICApO1xuICAgICAgfTtcblxuICAgICAgdGhpcy5lY2hhcnRzSW5zdGFuY2Uuc2V0T3B0aW9uKHVwZGF0ZWRPcHRpb25zKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZWNoYXJ0c0luc3RhbmNlLm9uKCdtb3VzZW91dCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmVjaGFydHNJbnN0YW5jZS5nZXRPcHRpb24oKSBhcyBFY2hhcnRzQ3VzdG9tT3B0aW9ucztcbiAgICAgIGlmIChvcmlnaW5hbEZvcm1hdHRlcikge1xuICAgICAgICBvcHRpb25zWyd0b29sdGlwJ11bMF0uZm9ybWF0dGVyID0gb3JpZ2luYWxGb3JtYXR0ZXI7XG4gICAgICAgIHRoaXMuZWNoYXJ0c0luc3RhbmNlLnNldE9wdGlvbihvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9uQ2hhcnRDbGljayhwYXJhbXM6IHsgZGF0YTogeyBpdGVtVHlwZTogc3RyaW5nIH0gfSk6IHZvaWQge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmVjaGFydHNJbnN0YW5jZS5nZXRPcHRpb24oKTtcbiAgICBpZiAoIXRoaXMuaXNBbGFybUNsaWNrKHBhcmFtcykpIHtcbiAgICAgIHRoaXMuZWNoYXJ0c0luc3RhbmNlLnNldE9wdGlvbih7XG4gICAgICAgIHRvb2x0aXA6IHsgdHJpZ2dlck9uOiAnbW91c2Vtb3ZlJyB9LFxuICAgICAgICBzZXJpZXM6IFt7IG1hcmtBcmVhOiB7IGRhdGE6IFtdIH0sIG1hcmtMaW5lOiB7IGRhdGE6IFtdIH0gfV1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNsaWNrZWRBbGFybXMgPSB0aGlzLmFsYXJtcy5maWx0ZXIoYWxhcm0gPT4gYWxhcm0udHlwZSA9PT0gcGFyYW1zLmRhdGEuaXRlbVR5cGUpO1xuXG4gICAgdGhpcy5pc01hcmtlZEFyZWFFbmFibGVkLmVtaXQodGhpcy5oYXNNYXJrQXJlYShvcHRpb25zKSk7XG4gICAgY29uc3QgdXBkYXRlZE9wdGlvbnMgPSAhdGhpcy5oYXNNYXJrQXJlYShvcHRpb25zKVxuICAgICAgPyB7XG4gICAgICAgICAgdG9vbHRpcDogeyBlbnRlcmFibGU6IHRydWUsIHRyaWdnZXJPbjogJ2NsaWNrJyB9LFxuICAgICAgICAgIHNlcmllczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBtYXJrQXJlYTogeyBsYWJlbDogeyBzaG93OiBmYWxzZSB9LCBkYXRhOiB0aGlzLmdldE1hcmtlZEFyZWFEYXRhKGNsaWNrZWRBbGFybXMpIH0sXG4gICAgICAgICAgICAgIG1hcmtMaW5lOiB7XG4gICAgICAgICAgICAgICAgc2hvd1N5bWJvbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzeW1ib2w6IFsnbm9uZScsICdub25lJ10sXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5nZXRNYXJrZWRMaW5lRGF0YShjbGlja2VkQWxhcm1zKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICA6IC8vIGlmIG1hcmtBcmVhIGFscmVhZHkgZXhpc3RzLCByZW1vdmUgaXQgYW5kIHJlbW92ZSBsYXN0VXBkYXRlZCBmcm9tIG1hcmtMaW5lXG4gICAgICAgIHtcbiAgICAgICAgICB0b29sdGlwOiB7IHRyaWdnZXJPbjogJ21vdXNlbW92ZScgfSxcbiAgICAgICAgICBzZXJpZXM6IFt7IG1hcmtBcmVhOiB7IGRhdGE6IFtdIH0sIG1hcmtMaW5lOiB7IGRhdGE6IFtdIH0gfV1cbiAgICAgICAgfTtcblxuICAgIHRoaXMuZWNoYXJ0c0luc3RhbmNlLnNldE9wdGlvbih1cGRhdGVkT3B0aW9ucyk7XG4gIH1cblxuICBpc0FsYXJtQ2xpY2socGFyYW1zOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hbGFybXMuc29tZShhbGFybSA9PiBhbGFybS50eXBlID09PSBwYXJhbXMuZGF0YS5pdGVtVHlwZSk7XG4gIH1cblxuICBoYXNNYXJrQXJlYShvcHRpb25zOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gb3B0aW9ucz8uc2VyaWVzPy5bMF0/Lm1hcmtBcmVhPy5kYXRhPy5sZW5ndGggPiAwO1xuICB9XG5cbiAgc2F2ZUFzSW1hZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5lY2hhcnRzSW5zdGFuY2Uuc2V0T3B0aW9uKHsgbGVnZW5kOiB7IHNob3c6IHRydWUgfSB9KTtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmVjaGFydHNJbnN0YW5jZS5nZXREYXRhVVJMKHtcbiAgICAgIHBpeGVsUmF0aW86IDIsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmJyxcbiAgICAgIHR5cGU6ICdwbmcnXG4gICAgfSk7XG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBsaW5rLmhyZWYgPSB1cmw7XG4gICAgbGluay5kb3dubG9hZCA9ICdkYXRhcG9pbnRzLWdyYXBoLXNjcmVlbnNob3QnO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgbGluay5jbGljaygpO1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XG4gICAgdGhpcy5lY2hhcnRzSW5zdGFuY2Uuc2V0T3B0aW9uKHsgbGVnZW5kOiB7IHNob3c6IGZhbHNlIH0gfSk7XG4gIH1cblxuICBsb2FkTW9yZURhdGEoKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudFRpbWVSYW5nZUluTXMgPSB0aGlzLmVjaGFydHNPcHRpb25zU2VydmljZS5jYWxjdWxhdGVFeHRlbmRlZEludGVydmFsSW5NcyhcbiAgICAgIHRoaXMuY29uZmlnLmludGVydmFsIHx8ICdjdXN0b20nLFxuICAgICAge1xuICAgICAgICBkYXRlVG86IHRoaXMud2lkZ2V0VGltZUNvbnRleHREYXRlUmFuZ2VTZXJ2aWNlLmluaXRpYWxUaW1lUmFuZ2UoKS5kYXRlVG8sXG4gICAgICAgIGRhdGVGcm9tOiB0aGlzLndpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZS5pbml0aWFsVGltZVJhbmdlKCkuZGF0ZUZyb21cbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMud2lkZ2V0VGltZUNvbnRleHREYXRlUmFuZ2VTZXJ2aWNlLnVwZGF0ZUluaXRpYWxUaW1lUmFuZ2Uoe1xuICAgICAgZGF0ZUZyb206IG5ldyBEYXRlKFxuICAgICAgICBuZXcgRGF0ZSh0aGlzLndpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZS5pbml0aWFsVGltZVJhbmdlKCkuZGF0ZUZyb20pLnZhbHVlT2YoKSAtXG4gICAgICAgICAgY3VycmVudFRpbWVSYW5nZUluTXMgLyA0XG4gICAgICApLnRvSVNPU3RyaW5nKCksXG4gICAgICBkYXRlVG86IHRoaXMud2lkZ2V0VGltZUNvbnRleHREYXRlUmFuZ2VTZXJ2aWNlLmluaXRpYWxUaW1lUmFuZ2UoKS5kYXRlVG8sXG4gICAgICBpbnRlcnZhbDogJ2N1c3RvbSdcbiAgICB9KTtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5lY2hhcnRzSW5zdGFuY2UuZ2V0T3B0aW9uKCk7XG4gICAgY29uc3QgZGF0YVpvb20gPSBvcHRpb25zWydkYXRhWm9vbSddWzBdO1xuICAgIHRoaXMuY29uZmlnQ2hhbmdlT25ab29tT3V0LmVtaXQoe1xuICAgICAgZGF0ZUZyb206IG5ldyBEYXRlKGRhdGFab29tWydzdGFydFZhbHVlJ10pLFxuICAgICAgZGF0ZVRvOiBuZXcgRGF0ZShkYXRhWm9vbVsnZW5kVmFsdWUnXSksXG4gICAgICBpbnRlcnZhbDogJ2N1c3RvbSdcbiAgICB9KTtcbiAgICB0aGlzLnNob3dMb2FkTW9yZSA9IGZhbHNlO1xuICB9XG5cbiAgZGVib3VuY2U8VCBleHRlbmRzICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZD4oXG4gICAgZnVuYzogVCxcbiAgICB3YWl0OiBudW1iZXJcbiAgKTogKC4uLmFyZ3M6IFBhcmFtZXRlcnM8VD4pID0+IHZvaWQge1xuICAgIGxldCB0aW1lb3V0OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcbiAgICByZXR1cm4gKC4uLmFyZ3M6IFBhcmFtZXRlcnM8VD4pID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGZ1bmMoLi4uYXJncyksIHdhaXQpO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldERlZmF1bHRDaGFydE9wdGlvbnMoKTogRUNoYXJ0c09wdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRpdGxlOiB7XG4gICAgICAgIHRleHQ6IGdldHRleHQoJ05vIGRhdGEgYXZhaWxhYmxlLicpLFxuICAgICAgICBsZWZ0OiAnY2VudGVyJyxcbiAgICAgICAgdG9wOiAnY2VudGVyJyxcbiAgICAgICAgdGV4dFN0eWxlOiB7IGZvbnRTaXplOiAzMCB9XG4gICAgICB9LFxuICAgICAgZW1wdHk6IHRydWUsXG4gICAgICB4QXhpczogeyB0eXBlOiAnY2F0ZWdvcnknLCBkYXRhOiBbXSB9LFxuICAgICAgeUF4aXM6IHsgdHlwZTogJ3ZhbHVlJyB9LFxuICAgICAgc2VyaWVzOiBbXVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldE1hcmtlZEFyZWFEYXRhKGNsaWNrZWRBbGFybXM6IElBbGFybVtdKSB7XG4gICAgY29uc3QgdGltZVJhbmdlID0gdGhpcy5nZXRUaW1lUmFuZ2UoKTtcbiAgICBjb25zdCBjbGVhcmVkQWxhcm1Db2xvciA9ICdyZ2JhKDIyMSwyNTUsMjIxLDEuMDApJztcbiAgICBjb25zdCBhY3RpdmVBbGFybUNvbG9yID0gJ3JnYmEoMjU1LCAxNzMsIDE3NywgMC40KSc7XG5cbiAgICByZXR1cm4gY2xpY2tlZEFsYXJtcy5tYXAoY2xpY2tlZEFsYXJtID0+IHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBjbGlja2VkQWxhcm0udHlwZSxcbiAgICAgICAgICB4QXhpczogY2xpY2tlZEFsYXJtLmNyZWF0aW9uVGltZSxcbiAgICAgICAgICBpdGVtU3R5bGU6IHtcbiAgICAgICAgICAgIGNvbG9yOlxuICAgICAgICAgICAgICBjbGlja2VkQWxhcm0uc3RhdHVzID09PSBBbGFybVN0YXR1cy5DTEVBUkVEID8gY2xlYXJlZEFsYXJtQ29sb3IgOiBhY3RpdmVBbGFybUNvbG9yXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgeEF4aXM6XG4gICAgICAgICAgICBjbGlja2VkQWxhcm1bJ2xhc3RVcGRhdGVkJ10gPT09IGNsaWNrZWRBbGFybS5jcmVhdGlvblRpbWUgfHxcbiAgICAgICAgICAgIGNsaWNrZWRBbGFybS5zdGF0dXMgIT09IEFsYXJtU3RhdHVzLkNMRUFSRURcbiAgICAgICAgICAgICAgPyB0aW1lUmFuZ2UuZGF0ZVRvXG4gICAgICAgICAgICAgIDogY2xpY2tlZEFsYXJtWydsYXN0VXBkYXRlZCddXG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldE1hcmtlZExpbmVEYXRhKGNsaWNrZWRBbGFybXM6IElBbGFybVtdKSB7XG4gICAgcmV0dXJuIGNsaWNrZWRBbGFybXMucmVkdWNlPE1hcmtMaW5lRGF0YVtdPigoYWNjLCBhbGFybSkgPT4ge1xuICAgICAgY29uc3QgaXNDbGlja2VkQWxhcm1DbGVhcmVkID0gYWxhcm0uc3RhdHVzID09PSBBbGFybVN0YXR1cy5DTEVBUkVEO1xuICAgICAgaWYgKGlzQ2xpY2tlZEFsYXJtQ2xlYXJlZCkge1xuICAgICAgICByZXR1cm4gYWNjLmNvbmNhdChbXG4gICAgICAgICAge1xuICAgICAgICAgICAgeEF4aXM6IGFsYXJtLmNyZWF0aW9uVGltZSxcbiAgICAgICAgICAgIGl0ZW1UeXBlOiBhbGFybS50eXBlLFxuICAgICAgICAgICAgbGFiZWw6IHsgc2hvdzogZmFsc2UsIGZvcm1hdHRlcjogKCkgPT4gYWxhcm0udHlwZSB9LFxuICAgICAgICAgICAgaXRlbVN0eWxlOiB7IGNvbG9yOiBhbGFybVsnY29sb3InXSB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4QXhpczogYWxhcm1bJ2xhc3RVcGRhdGVkJ10sXG4gICAgICAgICAgICBpdGVtVHlwZTogYWxhcm0udHlwZSxcbiAgICAgICAgICAgIGxhYmVsOiB7IHNob3c6IGZhbHNlLCBmb3JtYXR0ZXI6ICgpID0+IGFsYXJtLnR5cGUgfSxcbiAgICAgICAgICAgIGl0ZW1TdHlsZTogeyBjb2xvcjogYWxhcm1bJ2NvbG9yJ10gfVxuICAgICAgICAgIH1cbiAgICAgICAgXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjLmNvbmNhdChbXG4gICAgICAgIHtcbiAgICAgICAgICB4QXhpczogYWxhcm0uY3JlYXRpb25UaW1lLFxuICAgICAgICAgIGl0ZW1UeXBlOiBhbGFybS50eXBlLFxuICAgICAgICAgIGxhYmVsOiB7IHNob3c6IGZhbHNlLCBmb3JtYXR0ZXI6ICgpID0+IGFsYXJtLnR5cGUgfSxcbiAgICAgICAgICBpdGVtU3R5bGU6IHsgY29sb3I6IGFsYXJtWydjb2xvciddIH1cbiAgICAgICAgfVxuICAgICAgXSk7XG4gICAgfSwgW10pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkQWxhcm1zQW5kRXZlbnRzKGN1c3RvbVRpbWVSYW5nZT86IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRpbWVSYW5nZSA9IHRoaXMuZ2V0VGltZVJhbmdlKCk7XG4gICAgY29uc3QgdXBkYXRlZFRpbWVSYW5nZSA9IHtcbiAgICAgIGxhc3RVcGRhdGVkRnJvbTogY3VzdG9tVGltZVJhbmdlID8gY3VzdG9tVGltZVJhbmdlLmRhdGVGcm9tIDogdGltZVJhbmdlLmRhdGVGcm9tLFxuICAgICAgY3JlYXRlZFRvOiBjdXN0b21UaW1lUmFuZ2UgPyBjdXN0b21UaW1lUmFuZ2UuZGF0ZVRvIDogdGltZVJhbmdlLmRhdGVUb1xuICAgIH07XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5hbGFybXNFdmVudHNDb25maWdzKSByZXR1cm47XG4gICAgY29uc3QgdmlzaWJsZUFsYXJtc09yRXZlbnRzID0gdGhpcy5jb25maWcuYWxhcm1zRXZlbnRzQ29uZmlncz8uZmlsdGVyKFxuICAgICAgYWxhcm1PckV2ZW50ID0+ICFhbGFybU9yRXZlbnQuX19oaWRkZW4gJiYgYWxhcm1PckV2ZW50Ll9fYWN0aXZlXG4gICAgKTtcbiAgICBjb25zdCBhbGFybXMgPSB2aXNpYmxlQWxhcm1zT3JFdmVudHM/LmZpbHRlcihcbiAgICAgIGFsYXJtT3JFdmVudCA9PiBhbGFybU9yRXZlbnQudGltZWxpbmVUeXBlID09PSAnQUxBUk0nXG4gICAgKSBhcyBBbGFybURldGFpbHNFeHRlbmRlZFtdO1xuICAgIGNvbnN0IGV2ZW50cyA9IHZpc2libGVBbGFybXNPckV2ZW50cz8uZmlsdGVyKFxuICAgICAgYWxhcm1PckV2ZW50ID0+IGFsYXJtT3JFdmVudC50aW1lbGluZVR5cGUgPT09ICdFVkVOVCdcbiAgICApIGFzIEV2ZW50RGV0YWlsc0V4dGVuZGVkW107XG5cbiAgICBjb25zdCBbbGlzdGVkRXZlbnRzLCBsaXN0ZWRBbGFybXNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgdGhpcy5jaGFydEV2ZW50c1NlcnZpY2UubGlzdEV2ZW50cyh1cGRhdGVkVGltZVJhbmdlLCBldmVudHMpLFxuICAgICAgdGhpcy5jaGFydEFsYXJtc1NlcnZpY2UubGlzdEFsYXJtcyh1cGRhdGVkVGltZVJhbmdlLCBhbGFybXMpXG4gICAgXSk7XG5cbiAgICB0aGlzLmV2ZW50cyA9IGxpc3RlZEV2ZW50cztcbiAgICB0aGlzLmFsYXJtcyA9IGxpc3RlZEFsYXJtcztcbiAgICBhd2FpdCB0aGlzLmFkZEFjdGl2ZUFsYXJtcyhhbGFybXMpO1xuXG4gICAgdGhpcy51cGRhdGVBbGFybXNBbmRFdmVudHMuZW1pdCh0aGlzLmNvbmZpZy5hbGFybXNFdmVudHNDb25maWdzKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRSZWFsdGltZUlmUG9zc2libGUoKTogdm9pZCB7XG4gICAgY29uc3QgYWN0aXZlRGF0YXBvaW50cyA9IHRoaXMuY29uZmlnPy5kYXRhcG9pbnRzPy5maWx0ZXIoZHAgPT4gZHAuX19hY3RpdmUpO1xuICAgIGlmIChhY3RpdmVEYXRhcG9pbnRzICYmIHRoaXMuY29uZmlnLnJlYWx0aW1lICYmIHRoaXMuZWNoYXJ0c0luc3RhbmNlKSB7XG4gICAgICB0aGlzLmNoYXJ0UmVhbHRpbWVTZXJ2aWNlLnN0YXJ0UmVhbHRpbWUoXG4gICAgICAgIHRoaXMuZWNoYXJ0c0luc3RhbmNlLFxuICAgICAgICBhY3RpdmVEYXRhcG9pbnRzLFxuICAgICAgICB0aGlzLmdldFRpbWVSYW5nZSgpLFxuICAgICAgICBkcCA9PiB0aGlzLmRhdGFwb2ludE91dE9mU3luYy5lbWl0KGRwKSxcbiAgICAgICAgdGltZVJhbmdlID0+IHRoaXMudGltZVJhbmdlQ2hhbmdlT25SZWFsdGltZS5lbWl0KHRpbWVSYW5nZSksXG4gICAgICAgIHRoaXMuY29uZmlnLmFsYXJtc0V2ZW50c0NvbmZpZ3MsXG4gICAgICAgIHtcbiAgICAgICAgICBkaXNwbGF5TWFya2VkTGluZTogdGhpcy5jb25maWcuZGlzcGxheU1hcmtlZExpbmUgfHwgZmFsc2UsXG4gICAgICAgICAgZGlzcGxheU1hcmtlZFBvaW50OiB0aGlzLmNvbmZpZy5kaXNwbGF5TWFya2VkUG9pbnQgfHwgZmFsc2VcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKlxuICBUaGlzIG1ldGhvZCBzaG91bGQgY2hlY2sgYW5kIGFkZCBhY3RpdmUgYWxhcm1zIGZyb20gdGhlIGJlZ2luaW5nIG9mIHRpbWUgdG8gdGhlIGFsYXJtIGFycmF5XG4gICovXG4gIHByaXZhdGUgYXN5bmMgYWRkQWN0aXZlQWxhcm1zKGFsYXJtczogQWxhcm1EZXRhaWxzRXh0ZW5kZWRbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRpbWVSYW5nZSA9IHRoaXMuZ2V0VGltZVJhbmdlKCk7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgZGF0ZUZyb206ICcxOTcwLTAxLTAxVDAxOjAwOjAwKzAxOjAwJyxcbiAgICAgIGRhdGVUbzogdGltZVJhbmdlLmRhdGVUbyxcbiAgICAgIHN0YXR1czogQWxhcm1TdGF0dXMuQUNUSVZFXG4gICAgfTtcblxuICAgIGNvbnN0IGFjdGl2ZUFsYXJtcyA9IGF3YWl0IHRoaXMuY2hhcnRBbGFybXNTZXJ2aWNlLmxpc3RBbGFybXMocGFyYW1zLCBhbGFybXMpO1xuICAgIHRoaXMuY29uZmlnLmFjdGl2ZUFsYXJtVHlwZXNPdXRPZlJhbmdlID0gW107XG4gICAgLy8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBhY3RpdmVBbGFybXMgYW5kIGNoZWNrIGlmIHRoZSBhbGFybSBpcyBpbiB0aGUgYWxhcm1zIGFycmF5LCBpZiBub3QgdXBkYXRlIHRoZSBjb25maWcuYWN0aXZlQWxhcm1UeXBlc091dE9mUmFuZ2UgcHJvcFxuICAgIGFjdGl2ZUFsYXJtcy5mb3JFYWNoKGFjdGl2ZUFsYXJtID0+IHtcbiAgICAgIGNvbnN0IGFsYXJtVHlwZSA9IGFjdGl2ZUFsYXJtLnR5cGU7XG4gICAgICBjb25zdCBhbGFybSA9IHRoaXMuYWxhcm1zLmZpbmQoYWxhcm0gPT4gYWxhcm0udHlwZSA9PT0gYWxhcm1UeXBlKTtcbiAgICAgIGlmICghYWxhcm0gJiYgdGhpcy5jb25maWcuYWN0aXZlQWxhcm1UeXBlc091dE9mUmFuZ2UpIHtcbiAgICAgICAgdGhpcy5jb25maWcuYWN0aXZlQWxhcm1UeXBlc091dE9mUmFuZ2UucHVzaChhbGFybVR5cGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRDaGFydE9wdGlvbnMoZGF0YXBvaW50c1dpdGhWYWx1ZXM6IERwV2l0aFZhbHVlc1tdKTogUHJvbWlzZTxFQ2hhcnRzT3B0aW9uPiB7XG4gICAgY29uc3QgdGltZVJhbmdlID0geyAuLi50aGlzLmdldFRpbWVSYW5nZSgpLCBpbnRlcnZhbDogdGhpcy5jb25maWcuaW50ZXJ2YWwgfTtcbiAgICBpZiAoIXRoaXMud2lkZ2V0VGltZUNvbnRleHREYXRlUmFuZ2VTZXJ2aWNlLmluaXRpYWxUaW1lUmFuZ2UoKSkge1xuICAgICAgdGhpcy53aWRnZXRUaW1lQ29udGV4dERhdGVSYW5nZVNlcnZpY2UudXBkYXRlSW5pdGlhbFRpbWVSYW5nZSh0aW1lUmFuZ2UpO1xuICAgICAgY29uc3QgYWdncmVnYXRlZERhdGFwb2ludHMgPSBhd2FpdCBsYXN0VmFsdWVGcm9tKFxuICAgICAgICB0aGlzLmZldGNoU2VyaWVzRm9yRGF0YXBvaW50cyQoe1xuICAgICAgICAgIGRhdGVGcm9tOiBuZXcgRGF0ZShcbiAgICAgICAgICAgIG5ldyBEYXRlKHRpbWVSYW5nZS5kYXRlRnJvbSkudmFsdWVPZigpIC1cbiAgICAgICAgICAgICAgdGhpcy5lY2hhcnRzT3B0aW9uc1NlcnZpY2UuY2FsY3VsYXRlRXh0ZW5kZWRJbnRlcnZhbEluTXMoXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcuaW50ZXJ2YWwgfHwgJ2N1c3RvbScsXG4gICAgICAgICAgICAgICAgeyBkYXRlRnJvbTogdGltZVJhbmdlLmRhdGVGcm9tLCBkYXRlVG86IHRpbWVSYW5nZS5kYXRlVG8gfVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIGRhdGVUbzogdGltZVJhbmdlLmRhdGVUb1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIHJldHVybiB0aGlzLmVjaGFydHNPcHRpb25zU2VydmljZS5nZXRDaGFydE9wdGlvbnMoXG4gICAgICAgIGRhdGFwb2ludHNXaXRoVmFsdWVzLFxuICAgICAgICB0aW1lUmFuZ2UsXG4gICAgICAgIHtcbiAgICAgICAgICBZQXhpczogdGhpcy5jb25maWcueUF4aXNTcGxpdExpbmVzIHx8IGZhbHNlLFxuICAgICAgICAgIFhBeGlzOiB0aGlzLmNvbmZpZy54QXhpc1NwbGl0TGluZXMgfHwgZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy5ldmVudHMsXG4gICAgICAgIHRoaXMuYWxhcm1zLFxuICAgICAgICB7XG4gICAgICAgICAgZGlzcGxheU1hcmtlZExpbmU6IHRoaXMuY29uZmlnLmRpc3BsYXlNYXJrZWRMaW5lIHx8IGZhbHNlLFxuICAgICAgICAgIGRpc3BsYXlNYXJrZWRQb2ludDogdGhpcy5jb25maWcuZGlzcGxheU1hcmtlZFBvaW50IHx8IGZhbHNlLFxuICAgICAgICAgIG1lcmdlTWF0Y2hpbmdEYXRhcG9pbnRzOiB0aGlzLmNvbmZpZy5tZXJnZU1hdGNoaW5nRGF0YXBvaW50cyB8fCBmYWxzZSxcbiAgICAgICAgICBzaG93TGFiZWxBbmRVbml0OiB0aGlzLmNvbmZpZy5zaG93TGFiZWxBbmRVbml0IHx8IGZhbHNlLFxuICAgICAgICAgIHNob3dTbGlkZXI6IHRoaXMuY29uZmlnLnNob3dTbGlkZXIgfHwgZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBhZ2dyZWdhdGVkRGF0YXBvaW50c1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYWdncmVnYXRlZERhdGFwb2ludHMgPSBhd2FpdCBsYXN0VmFsdWVGcm9tKFxuICAgICAgICB0aGlzLmZldGNoU2VyaWVzRm9yRGF0YXBvaW50cyQoe1xuICAgICAgICAgIGRhdGVGcm9tOiBuZXcgRGF0ZShcbiAgICAgICAgICAgIG5ldyBEYXRlKHRoaXMud2lkZ2V0VGltZUNvbnRleHREYXRlUmFuZ2VTZXJ2aWNlLmluaXRpYWxUaW1lUmFuZ2UoKS5kYXRlRnJvbSkudmFsdWVPZigpIC1cbiAgICAgICAgICAgICAgdGhpcy5lY2hhcnRzT3B0aW9uc1NlcnZpY2UuY2FsY3VsYXRlRXh0ZW5kZWRJbnRlcnZhbEluTXMoXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcuaW50ZXJ2YWwgfHwgJ2N1c3RvbScsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZGF0ZUZyb206IHRoaXMud2lkZ2V0VGltZUNvbnRleHREYXRlUmFuZ2VTZXJ2aWNlLmluaXRpYWxUaW1lUmFuZ2UoKS5kYXRlRnJvbSxcbiAgICAgICAgICAgICAgICAgIGRhdGVUbzogdGhpcy53aWRnZXRUaW1lQ29udGV4dERhdGVSYW5nZVNlcnZpY2UuaW5pdGlhbFRpbWVSYW5nZSgpLmRhdGVUb1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICBkYXRlVG86IG5ldyBEYXRlKFxuICAgICAgICAgICAgdGhpcy53aWRnZXRUaW1lQ29udGV4dERhdGVSYW5nZVNlcnZpY2UuaW5pdGlhbFRpbWVSYW5nZSgpLmRhdGVUb1xuICAgICAgICAgICkudG9JU09TdHJpbmcoKVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIHJldHVybiB0aGlzLmVjaGFydHNPcHRpb25zU2VydmljZS5nZXRDaGFydE9wdGlvbnMoXG4gICAgICAgIGRhdGFwb2ludHNXaXRoVmFsdWVzLFxuICAgICAgICB0aGlzLndpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZS5pbml0aWFsVGltZVJhbmdlKCksXG4gICAgICAgIHtcbiAgICAgICAgICBZQXhpczogdGhpcy5jb25maWcueUF4aXNTcGxpdExpbmVzIHx8IGZhbHNlLFxuICAgICAgICAgIFhBeGlzOiB0aGlzLmNvbmZpZy54QXhpc1NwbGl0TGluZXMgfHwgZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy5ldmVudHMsXG4gICAgICAgIHRoaXMuYWxhcm1zLFxuICAgICAgICB7XG4gICAgICAgICAgZGlzcGxheU1hcmtlZExpbmU6IHRoaXMuY29uZmlnLmRpc3BsYXlNYXJrZWRMaW5lIHx8IGZhbHNlLFxuICAgICAgICAgIGRpc3BsYXlNYXJrZWRQb2ludDogdGhpcy5jb25maWcuZGlzcGxheU1hcmtlZFBvaW50IHx8IGZhbHNlLFxuICAgICAgICAgIG1lcmdlTWF0Y2hpbmdEYXRhcG9pbnRzOiB0aGlzLmNvbmZpZy5tZXJnZU1hdGNoaW5nRGF0YXBvaW50cyB8fCBmYWxzZSxcbiAgICAgICAgICBzaG93TGFiZWxBbmRVbml0OiB0aGlzLmNvbmZpZy5zaG93TGFiZWxBbmRVbml0IHx8IGZhbHNlLFxuICAgICAgICAgIHNob3dTbGlkZXI6IHRoaXMuY29uZmlnLnNob3dTbGlkZXIgfHwgZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgdGltZVJhbmdlLFxuICAgICAgICBhZ2dyZWdhdGVkRGF0YXBvaW50cyxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZldGNoU2VyaWVzRm9yRGF0YXBvaW50cyQoY3VzdG9tVGltZVJhbmdlPzogYW55KTogT2JzZXJ2YWJsZTxEcFdpdGhWYWx1ZXNbXT4ge1xuICAgIGNvbnN0IGFjdGl2ZURhdGFwb2ludHMgPSB0aGlzLmNvbmZpZz8uZGF0YXBvaW50cz8uZmlsdGVyKGRwID0+IGRwLl9fYWN0aXZlKTtcbiAgICBpZiAoIWFjdGl2ZURhdGFwb2ludHMgfHwgYWN0aXZlRGF0YXBvaW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBvZihbXSk7XG4gICAgfVxuICAgIGNvbnN0IGRhdGFwb2ludHNXaXRoVmFsdWVzUmVxdWVzdHM6IE9ic2VydmFibGU8RHBXaXRoVmFsdWVzPltdID0gW107XG4gICAgY29uc3QgdGltZVJhbmdlID0gdGhpcy5nZXRUaW1lUmFuZ2UoNjBfMDAwKTtcbiAgICBmb3IgKGNvbnN0IGRwIG9mIGFjdGl2ZURhdGFwb2ludHMpIHtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLm1lYXN1cmVtZW50U2VydmljZVxuICAgICAgICAubGlzdFNlcmllcyQoe1xuICAgICAgICAgIC4uLihjdXN0b21UaW1lUmFuZ2UgPyBjdXN0b21UaW1lUmFuZ2UgOiB0aW1lUmFuZ2UpLFxuICAgICAgICAgIHNvdXJjZTogZHAuX190YXJnZXQ/LmlkIHx8ICcnLFxuICAgICAgICAgIHNlcmllczogW2Ake2RwLmZyYWdtZW50fS4ke2RwLnNlcmllc31gXSxcbiAgICAgICAgICAuLi4odGhpcy5jb25maWcuYWdncmVnYXRpb24gfHwgY3VzdG9tVGltZVJhbmdlXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBhZ2dyZWdhdGlvblR5cGU6IGN1c3RvbVRpbWVSYW5nZSA/IGFnZ3JlZ2F0aW9uVHlwZS5IT1VSTFkgOiB0aGlzLmNvbmZpZy5hZ2dyZWdhdGlvblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHt9KVxuICAgICAgICB9KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAocmVzID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IHJlcy5kYXRhLnZhbHVlcztcbiAgICAgICAgICAgIGlmIChyZXMuZGF0YS50cnVuY2F0ZWQgJiYgdGhpcy5jb25maWcuZGF0ZUZyb20pIHtcbiAgICAgICAgICAgICAgdmFsdWVzW25ldyBEYXRlKHRoaXMuY29uZmlnLmRhdGVGcm9tKS50b0lTT1N0cmluZygpXSA9IFt7IG1pbjogbnVsbCwgbWF4OiBudWxsIH1dO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuYWxlcnRzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hbGVydHMuY2xlYXIoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgLi4uZHAsIHZhbHVlcywgdHJ1bmNhdGVkOiByZXMuZGF0YS50cnVuY2F0ZWQgfTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICBkYXRhcG9pbnRzV2l0aFZhbHVlc1JlcXVlc3RzLnB1c2gocmVxdWVzdCk7XG4gICAgfVxuICAgIHJldHVybiBmb3JrSm9pbihkYXRhcG9pbnRzV2l0aFZhbHVlc1JlcXVlc3RzKS5waXBlKFxuICAgICAgdGFwKChkcHNXaXRoVmFsdWVzOiBEcFdpdGhWYWx1ZXNbXSkgPT4ge1xuICAgICAgICBpZiAoZHBzV2l0aFZhbHVlcy5zb21lKGRwID0+IGRwWyd0cnVuY2F0ZWQnXSkpIHtcbiAgICAgICAgICB0aGlzLmFkZFRydW5jYXRlZERhdGFBbGVydCgpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFkZFRydW5jYXRlZERhdGFBbGVydCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hbGVydHM/LmFsZXJ0R3JvdXBzLmZpbmQoYSA9PiBhLnR5cGUgPT09ICd3YXJuaW5nJyk/LnZhbHVlPy5hbGVydHM/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhbGVydCA9IG5ldyBEeW5hbWljQ29tcG9uZW50QWxlcnQoe1xuICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgICAgdGV4dDogZ2V0dGV4dCgnVHJ1bmNhdGVkIGRhdGEuIENoYW5nZSBhZ2dyZWdhdGlvbiBvciBzZWxlY3Qgc2hvcnRlciBkYXRlIHJhbmdlLicpXG4gICAgfSk7XG5cbiAgICB0aGlzLmFsZXJ0cz8uYWRkQWxlcnRzKGFsZXJ0KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGltZVJhbmdlKGFkZGl0aW9uYWxQYWRkaW5nPzogbnVtYmVyKTogeyBkYXRlRnJvbTogc3RyaW5nOyBkYXRlVG86IHN0cmluZyB9IHtcbiAgICBsZXQgdGltZVJhbmdlOiB7IGRhdGVGcm9tOiBEYXRlOyBkYXRlVG86IERhdGUgfTtcbiAgICBpZiAoXG4gICAgICB0aGlzLmNvbmZpZy53aWRnZXRJbnN0YW5jZUdsb2JhbFRpbWVDb250ZXh0IHx8XG4gICAgICAodGhpcy5jb25maWcuaW50ZXJ2YWwgPT09ICdjdXN0b20nICYmICF0aGlzLmNvbmZpZy5yZWFsdGltZSlcbiAgICApIHtcbiAgICAgIHRpbWVSYW5nZSA9IHtcbiAgICAgICAgZGF0ZUZyb206IG5ldyBEYXRlKHRoaXMuY29uZmlnLmRhdGVGcm9tIGFzIERhdGUpLFxuICAgICAgICBkYXRlVG86IG5ldyBEYXRlKHRoaXMuY29uZmlnLmRhdGVUbyBhcyBEYXRlKVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHRpbWVSYW5nZUluTXMgPSAwO1xuICAgICAgaWYgKHRoaXMuY29uZmlnLmludGVydmFsICYmIHRoaXMuY29uZmlnLmludGVydmFsICE9PSAnY3VzdG9tJykge1xuICAgICAgICB0aW1lUmFuZ2VJbk1zID0gSU5URVJWQUxTLmZpbmQoaSA9PiBpLmlkID09PSB0aGlzLmNvbmZpZy5pbnRlcnZhbCk/LnRpbWVzcGFuSW5NcyB8fCAwO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZy5yZWFsdGltZSkge1xuICAgICAgICB0aW1lUmFuZ2VJbk1zID1cbiAgICAgICAgICBuZXcgRGF0ZSh0aGlzLmNvbmZpZy5kYXRlVG8gYXMgRGF0ZSkudmFsdWVPZigpIC1cbiAgICAgICAgICBuZXcgRGF0ZSh0aGlzLmNvbmZpZy5kYXRlRnJvbSBhcyBEYXRlKS52YWx1ZU9mKCk7XG4gICAgICB9XG4gICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgICAgdGltZVJhbmdlID0geyBkYXRlRnJvbTogbmV3IERhdGUobm93LnZhbHVlT2YoKSAtIHRpbWVSYW5nZUluTXMpLCBkYXRlVG86IG5vdyB9O1xuICAgIH1cbiAgICBpZiAoYWRkaXRpb25hbFBhZGRpbmcpIHtcbiAgICAgIHRpbWVSYW5nZS5kYXRlRnJvbSA9IG5ldyBEYXRlKHRpbWVSYW5nZS5kYXRlRnJvbS52YWx1ZU9mKCkgLSBhZGRpdGlvbmFsUGFkZGluZyk7XG4gICAgICB0aW1lUmFuZ2UuZGF0ZVRvID0gbmV3IERhdGUodGltZVJhbmdlLmRhdGVUby52YWx1ZU9mKCkgKyBhZGRpdGlvbmFsUGFkZGluZyk7XG4gICAgfVxuICAgIHJldHVybiB7IGRhdGVGcm9tOiB0aW1lUmFuZ2UuZGF0ZUZyb20udG9JU09TdHJpbmcoKSwgZGF0ZVRvOiB0aW1lUmFuZ2UuZGF0ZVRvLnRvSVNPU3RyaW5nKCkgfTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cInAtcmVsYXRpdmUgZml0LWggY2hhcnQtY29udGFpbmVyXCJcbj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZml0LXcgZml0LWhcIlxuICAgICNjaGFydFxuICAgIGVjaGFydHNcbiAgICBbb3B0aW9uc109XCJjaGFydE9wdGlvbiQgfCBhc3luY1wiXG4gICAgKGNoYXJ0SW5pdCk9XCJvbkNoYXJ0SW5pdCgkZXZlbnQpXCJcbiAgPjwvZGl2PlxuXG4gIDxjOHktY2hhcnQtYWxlcnRzIFthbGVydHNdPVwiYWxlcnRzXCI+PC9jOHktY2hhcnQtYWxlcnRzPlxuXG4gIDxkaXYgKm5nSWY9XCJzaG93TG9hZE1vcmVcIiBjbGFzcz1cImNoYXJ0LWxvYWQtbW9yZVwiPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbSBidG4tYmxvY2tcIlxuICAgICAgKGNsaWNrKT1cImxvYWRNb3JlRGF0YSgpXCJcbiAgICA+XG4gICAgICA8aSBjOHlJY29uPVwicmVzdG9yZVwiPjwvaT5cbiAgICAgIHt7ICdMb2FkIG1vcmUnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
545
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2VjaGFydC9jaGFydHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZWNoYXJ0L2NoYXJ0cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBSUwsTUFBTSxFQUVOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQVl2QixPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ2xGLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsVUFBVSxFQUNWLG9CQUFvQixFQUNwQixxQkFBcUIsRUFDckIsK0JBQStCLEVBQy9CLG9CQUFvQixFQUNwQixPQUFPLEVBQ1AsMEJBQTBCLEVBQzFCLGlDQUFpQyxFQUNsQyxNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBTXpFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxh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QUFpQjt3QkFDakIscUJBQXFCO3dCQUNyQix3QkFBd0I7d0JBQ3hCLFlBQVk7d0JBQ1osdUJBQXVCO3dCQUN2Qix3QkFBd0I7cUJBQ3pCLGNBQ1csSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osVUFBVTt3QkFDVixnQkFBZ0I7d0JBQ2hCLGFBQWE7d0JBQ2IsYUFBYTt3QkFDYixvQkFBb0I7d0JBQ3BCLFlBQVk7cUJBQ2I7d0RBU1EsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDSSxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBS0cseUJBQXlCO3NCQUFsQyxNQUFNO2dCQUdHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNhLEtBQUs7c0JBQXhCLFNBQVM7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgRUNoYXJ0cywgRUNoYXJ0c09wdGlvbiwgU2VyaWVzT3B0aW9uIH0gZnJvbSAnZWNoYXJ0cyc7XG5pbXBvcnQge1xuICBBbGFybURldGFpbHNFeHRlbmRlZCxcbiAgQWxhcm1PckV2ZW50RXh0ZW5kZWQsXG4gIERhdGFwb2ludHNHcmFwaEtQSURldGFpbHMsXG4gIERhdGFwb2ludHNHcmFwaFdpZGdldENvbmZpZyxcbiAgRHBXaXRoVmFsdWVzLFxuICBFdmVudERldGFpbHNFeHRlbmRlZCxcbiAgTWFya0xpbmVEYXRhLFxuICBTZXJpZXNEYXRhcG9pbnRJbmZvXG59IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZm9ya0pvaW4sIGxhc3RWYWx1ZUZyb20sIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ3VzdG9tTWVhc3VyZW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9jdXN0b20tbWVhc3VyZW1lbnRzLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQWxhcm1SZWFsdGltZVNlcnZpY2UsXG4gIENvcmVNb2R1bGUsXG4gIERpc21pc3NBbGVydFN0cmF0ZWd5LFxuICBEeW5hbWljQ29tcG9uZW50QWxlcnQsXG4gIER5bmFtaWNDb21wb25lbnRBbGVydEFnZ3JlZ2F0b3IsXG4gIEV2ZW50UmVhbHRpbWVTZXJ2aWNlLFxuICBnZXR0ZXh0LFxuICBNZWFzdXJlbWVudFJlYWx0aW1lU2VydmljZSxcbiAgV2lkZ2V0VGltZUNvbnRleHREYXRlUmFuZ2VTZXJ2aWNlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgRWNoYXJ0c09wdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9lY2hhcnRzLW9wdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBDaGFydFJlYWx0aW1lU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvY2hhcnQtcmVhbHRpbWUuc2VydmljZSc7XG5pbXBvcnQgdHlwZSB7XG4gIENhbGxiYWNrRGF0YVBhcmFtcyxcbiAgRUNBY3Rpb25FdmVudCxcbiAgVG9vbHRpcEZvcm1hdHRlckNhbGxiYWNrXG59IGZyb20gJ2VjaGFydHMvdHlwZXMvc3JjL3V0aWwvdHlwZXMnO1xuaW1wb3J0IHsgQ2hhcnRUeXBlc1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2NoYXJ0LXR5cGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5HWF9FQ0hBUlRTX0NPTkZJRywgTmd4RWNoYXJ0c01vZHVsZSB9IGZyb20gJ25neC1lY2hhcnRzJztcbmltcG9ydCB7IFRvb2x0aXBNb2R1bGUgfSBmcm9tICduZ3gtYm9vdHN0cmFwL3Rvb2x0aXAnO1xuaW1wb3J0IHsgUG9wb3Zlck1vZHVsZSB9IGZyb20gJ25neC1ib290c3RyYXAvcG9wb3Zlcic7XG5pbXBvcnQgeyBZQXhpc1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3ktYXhpcy5zZXJ2aWNlJztcbmltcG9ydCB7IENoYXJ0QWxlcnRzQ29tcG9uZW50IH0gZnJvbSAnLi9jaGFydC1hbGVydHMvY2hhcnQtYWxlcnRzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBhZ2dyZWdhdGlvblR5cGUsIEFsYXJtU3RhdHVzLCBJQWxhcm0sIElFdmVudCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IENoYXJ0RXZlbnRzU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvY2hhcnQtZXZlbnRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhcnRBbGFybXNTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9jaGFydC1hbGFybXMuc2VydmljZSc7XG5pbXBvcnQgeyBFY2hhcnRzQ3VzdG9tT3B0aW9ucyB9IGZyb20gJy4vbW9kZWxzL2NoYXJ0Lm1vZGVsJztcbmltcG9ydCB7IFRvcExldmVsRm9ybWF0dGVyUGFyYW1zIH0gZnJvbSAnZWNoYXJ0cy90eXBlcy9zcmMvY29tcG9uZW50L3Rvb2x0aXAvVG9vbHRpcE1vZGVsJztcbmltcG9ydCB7XG4gIEFsYXJtU2V2ZXJpdHlUb0ljb25QaXBlLFxuICBBbGFybVNldmVyaXR5VG9MYWJlbFBpcGUsXG4gIEFsYXJtc01vZHVsZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2FsYXJtcyc7XG5pbXBvcnQgeyBJbnRlcnZhbCwgSU5URVJWQUxTIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9pbnRlcnZhbC1waWNrZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktY2hhcnRzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoYXJ0cy5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHsgcHJvdmlkZTogTkdYX0VDSEFSVFNfQ09ORklHLCB1c2VGYWN0b3J5OiAoKSA9PiAoeyBlY2hhcnRzOiAoKSA9PiBpbXBvcnQoJ2VjaGFydHMnKSB9KSB9LFxuICAgIENoYXJ0UmVhbHRpbWVTZXJ2aWNlLFxuICAgIE1lYXN1cmVtZW50UmVhbHRpbWVTZXJ2aWNlLFxuICAgIEFsYXJtUmVhbHRpbWVTZXJ2aWNlLFxuICAgIEV2ZW50UmVhbHRpbWVTZXJ2aWNlLFxuICAgIENoYXJ0VHlwZXNTZXJ2aWNlLFxuICAgIEVjaGFydHNPcHRpb25zU2VydmljZSxcbiAgICBDdXN0b21NZWFzdXJlbWVudFNlcnZpY2UsXG4gICAgWUF4aXNTZXJ2aWNlLFxuICAgIEFsYXJtU2V2ZXJpdHlUb0ljb25QaXBlLFxuICAgIEFsYXJtU2V2ZXJpdHlUb0xhYmVsUGlwZVxuICBdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIENvcmVNb2R1bGUsXG4gICAgTmd4RWNoYXJ0c01vZHVsZSxcbiAgICBUb29sdGlwTW9kdWxlLFxuICAgIFBvcG92ZXJNb2R1bGUsXG4gICAgQ2hhcnRBbGVydHNDb21wb25lbnQsXG4gICAgQWxhcm1zTW9kdWxlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQ2hhcnRzQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQsIE9uRGVzdHJveSB7XG4gIGNoYXJ0T3B0aW9uJDogT2JzZXJ2YWJsZTxFQ2hhcnRzT3B0aW9uPjtcbiAgZWNoYXJ0c0luc3RhbmNlITogRUNoYXJ0cztcbiAgc2hvd0xvYWRNb3JlID0gZmFsc2U7XG4gIGFsYXJtczogSUFsYXJtW10gPSBbXTtcbiAgZXZlbnRzOiBJRXZlbnRbXSA9IFtdO1xuICBzbGlkZXJab29tVXNlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBjb25maWchOiBEYXRhcG9pbnRzR3JhcGhXaWRnZXRDb25maWc7XG4gIEBJbnB1dCgpIGFsZXJ0cyE6IER5bmFtaWNDb21wb25lbnRBbGVydEFnZ3JlZ2F0b3I7XG4gIEBPdXRwdXQoKSBjb25maWdDaGFuZ2VPblpvb21PdXQgPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICBkYXRlRnJvbTogRGF0ZTtcbiAgICBkYXRlVG86IERhdGU7XG4gICAgaW50ZXJ2YWw/OiBJbnRlcnZhbFsnaWQnXTtcbiAgfT4oKTtcbiAgQE91dHB1dCgpIHRpbWVSYW5nZUNoYW5nZU9uUmVhbHRpbWUgPSBuZXcgRXZlbnRFbWl0dGVyPFxuICAgIFBpY2s8RGF0YXBvaW50c0dyYXBoV2lkZ2V0Q29uZmlnLCAnZGF0ZUZyb20nIHwgJ2RhdGVUbyc+XG4gID4oKTtcbiAgQE91dHB1dCgpIGRhdGFwb2ludE91dE9mU3luYyA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YXBvaW50c0dyYXBoS1BJRGV0YWlscz4oKTtcbiAgQE91dHB1dCgpIHVwZGF0ZUFsYXJtc0FuZEV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXI8QWxhcm1PckV2ZW50RXh0ZW5kZWRbXT4oKTtcbiAgQE91dHB1dCgpIGlzTWFya2VkQXJlYUVuYWJsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBWaWV3Q2hpbGQoJ2NoYXJ0JykgY2hhcnQ6IEVsZW1lbnRSZWY7XG4gIHByaXZhdGUgY29uZmlnQ2hhbmdlZFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHZvaWQgfCBudWxsPihudWxsKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IG1lYXN1cmVtZW50U2VydmljZSA9IGluamVjdChDdXN0b21NZWFzdXJlbWVudFNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGVjaGFydHNPcHRpb25zU2VydmljZSA9IGluamVjdChFY2hhcnRzT3B0aW9uc1NlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGNoYXJ0UmVhbHRpbWVTZXJ2aWNlID0gaW5qZWN0KENoYXJ0UmVhbHRpbWVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjaGFydEV2ZW50c1NlcnZpY2UgPSBpbmplY3QoQ2hhcnRFdmVudHNTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjaGFydEFsYXJtc1NlcnZpY2UgPSBpbmplY3QoQ2hhcnRBbGFybXNTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSB3aWRnZXRUaW1lQ29udGV4dERhdGVSYW5nZVNlcnZpY2UgPSBpbmplY3QoV2lkZ2V0VGltZUNvbnRleHREYXRlUmFuZ2VTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBsb2FkZWRUaW1lUmFuZ2U6IHsgZGF0ZUZyb206IHN0cmluZzsgZGF0ZVRvOiBzdHJpbmcgfSB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY2hhcnRPcHRpb24kID0gdGhpcy5jb25maWdDaGFuZ2VkU3ViamVjdC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMubG9hZEFsYXJtc0FuZEV2ZW50cygpKSxcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmZldGNoU2VyaWVzRm9yRGF0YXBvaW50cyQoKSksXG4gICAgICBzd2l0Y2hNYXAoKGRhdGFwb2ludHNXaXRoVmFsdWVzOiBEcFdpdGhWYWx1ZXNbXSkgPT4ge1xuICAgICAgICBpZiAoZGF0YXBvaW50c1dpdGhWYWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5lY2hhcnRzSW5zdGFuY2U/LmNsZWFyKCk7XG4gICAgICAgICAgdGhpcy5zaG93TG9hZE1vcmUgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gb2YodGhpcy5nZXREZWZhdWx0Q2hhcnRPcHRpb25zKCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9hZGVkVGltZVJhbmdlID0geyAuLi50aGlzLmdldFRpbWVSYW5nZSgpIH07XG4gICAgICAgIHJldHVybiB0aGlzLmdldENoYXJ0T3B0aW9ucyhkYXRhcG9pbnRzV2l0aFZhbHVlcyk7XG4gICAgICB9KSxcbiAgICAgIHRhcCh2ID0+IHtcbiAgICAgICAgaWYgKHZbJ2VtcHR5J10pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGFydFJlYWx0aW1lU2VydmljZS5zdG9wUmVhbHRpbWUoKTtcbiAgICAgICAgdGhpcy5zdGFydFJlYWx0aW1lSWZQb3NzaWJsZSgpO1xuXG4gICAgICAgIGlmICh0aGlzLmVjaGFydHNJbnN0YW5jZSkge1xuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqICogU2V0IHRoZSBjaGFydCBvcHRpb25zXG4gICAgICAgICAgICogRmlyc3QgcGFyYW1ldGVyIGlzIHRoZSBvcHRpb25zIHRvIHNldFxuICAgICAgICAgICAqIFNlY29uZCBwYXJhbWV0ZXIgaXMgYSBib29sZWFuIHRvIGluZGljYXRlIHRoYXQgdGhlIGNoYXJ0IHNob3VsZCBiZSByZS1yZW5kZXJlZCBhcyB3ZSBkbyBub3Qgd2FudCB0byBtZXJnZS5cbiAgICAgICAgICAgKiBUaGlyZCBwYXJhbWV0ZXIgaXMgYSBib29sZWFuIHRvIGluZGljYXRlIHRoYXQgd2Ugd2FudCB0byBsYXp5IGxvYWQgdGhlIGNoYXJ0LlxuICAgICAgICAgICAqL1xuICAgICAgICAgIHRoaXMuZWNoYXJ0c0luc3RhbmNlLnNldE9wdGlvbih2LCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5lY2hhcnRzSW5zdGFuY2UuZ2V0T3B0aW9uKCk7XG4gICAgICAgICAgY29uc3QgZGF0YVpvb20gPSBvcHRpb25zWydkYXRhWm9vbSddWzBdO1xuICAgICAgICAgIGlmIChkYXRhWm9vbS5zdGFydCAhPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5zaG93TG9hZE1vcmUgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zbGlkZXJab29tVXNlZCA9IGZhbHNlO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRUaW1lUmFuZ2UgPSB0aGlzLmdldFRpbWVSYW5nZSgpO1xuICAgIC8vIENoZWNrIGlmIHRoZSBjdXJyZW50IHRpbWUgcmFuZ2UgaXMgd2l0aGluIHRoZSBsb2FkZWQgdGltZSByYW5nZSB0byBhdm9pZCB1bm5lY2Vzc2FyeSB1cGRhdGVzXG4gICAgaWYgKFxuICAgICAgdGhpcy5sb2FkZWRUaW1lUmFuZ2UgJiZcbiAgICAgIG5ldyBEYXRlKGN1cnJlbnRUaW1lUmFuZ2UuZGF0ZUZyb20pID49IG5ldyBEYXRlKHRoaXMubG9hZGVkVGltZVJhbmdlLmRhdGVGcm9tKSAmJlxuICAgICAgbmV3IERhdGUoY3VycmVudFRpbWVSYW5nZS5kYXRlVG8pIDw9IG5ldyBEYXRlKHRoaXMubG9hZGVkVGltZVJhbmdlLmRhdGVUbykgJiZcbiAgICAgIGNoYW5nZXMuY29uZmlnLnByZXZpb3VzVmFsdWU/LmRhdGVGcm9tICE9PSBjaGFuZ2VzLmNvbmZpZy5jdXJyZW50VmFsdWUuZGF0ZUZyb20gJiZcbiAgICAgIGNoYW5nZXMuY29uZmlnLnByZXZpb3VzVmFsdWU/LmRhdGVUbyAhPT0gY2hhbmdlcy5jb25maWcuY3VycmVudFZhbHVlLmRhdGVUb1xuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNvbmZpZ0NoYW5nZWRTdWJqZWN0Lm5leHQoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmFsZXJ0cykge1xuICAgICAgdGhpcy5hbGVydHMuc2V0QWxlcnRHcm91cERpc21pc3NTdHJhdGVneShcbiAgICAgICAgJ3dhcm5pbmcnLFxuICAgICAgICBEaXNtaXNzQWxlcnRTdHJhdGVneS5URU1QT1JBUllfT1JfUEVSTUFORU5UXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuY2hhcnRSZWFsdGltZVNlcnZpY2Uuc3RvcFJlYWx0aW1lKCk7XG4gIH1cblxuICBvbkNoYXJ0SW5pdChlYzogRUNoYXJ0cykge1xuICAgIHRoaXMuZWNoYXJ0c0luc3RhbmNlID0gZWM7XG4gICAgdGhpcy5lY2hhcnRzT3B0aW9uc1NlcnZpY2UuZWNoYXJ0c0luc3RhbmNlID0gdGhpcy5lY2hhcnRzSW5zdGFuY2U7XG4gICAgdGhpcy5zdGFydFJlYWx0aW1lSWZQb3NzaWJsZSgpO1xuXG4gICAgY29uc3QgZGF0YVpvb21IYW5kbGVyID0gKGV2dDogRUNBY3Rpb25FdmVudCkgPT4ge1xuICAgICAgaWYgKGV2dC5iYXRjaD8uWzBdPy5zdGFydCA9PT0gMCB8fCBldnRbJ3N0YXJ0J10gPT09IDApIHtcbiAgICAgICAgdGhpcy5zaG93TG9hZE1vcmUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5lY2hhcnRzSW5zdGFuY2UuZ2V0T3B0aW9uKCk7XG4gICAgICBjb25zdCBkYXRhWm9vbSA9IG9wdGlvbnNbJ2RhdGFab29tJ11bMF07XG4gICAgICB0aGlzLnNsaWRlclpvb21Vc2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMuY29uZmlnQ2hhbmdlT25ab29tT3V0LmVtaXQoe1xuICAgICAgICBkYXRlRnJvbTogbmV3IERhdGUoZGF0YVpvb21bJ3N0YXJ0VmFsdWUnXSksXG4gICAgICAgIGRhdGVUbzogbmV3IERhdGUoZGF0YVpvb21bJ2VuZFZhbHVlJ10pLFxuICAgICAgICBpbnRlcnZhbDogJ2N1c3RvbSdcbiAgICAgIH0pO1xuICAgICAgdGhpcy5lY2hhcnRzSW5zdGFuY2Uuc2V0T3B0aW9uKG9wdGlvbnMpO1xuICAgICAgdGhpcy5jaGFydFJlYWx0aW1lU2VydmljZS5zdG9wUmVhbHRpbWUoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZGVib3VuY2VkRGF0YVpvb21IYW5kbGVyID0gdGhpcy5jb25maWcucmVhbHRpbWVcbiAgICAgID8gZGF0YVpvb21IYW5kbGVyXG4gICAgICA6IHRoaXMuZGVib3VuY2UoZGF0YVpvb21IYW5kbGVyLCAxMDAwKTtcblxuICAgIHRoaXMuZWNoYXJ0c0luc3RhbmNlLm9uKCdkYXRhWm9vbScsIGRlYm91bmNlZERhdGFab29tSGFuZGxlcik7XG4gICAgdGhpcy5lY2hhcnRzSW5zdGFuY2Uub24oJ2NsaWNrJywgdGhpcy5vbkNoYXJ0Q2xpY2suYmluZCh0aGlzKSk7XG5cbiAgICBsZXQgb3JpZ2luYWxGb3JtYXR0ZXI6XG4gICAgICB8IFRvb2x0aXBGb3JtYXR0ZXJDYWxsYmFjazxUb3BMZXZlbEZvcm1hdHRlclBhcmFtcz5cbiAgICAgIHwgc3RyaW5nXG4gICAgICB8IG51bGxcbiAgICAgIHwgdW5kZWZpbmVkID0gbnVsbDtcblxuICAgIHRoaXMuZWNoYXJ0c0luc3RhbmNlLm9uKCdtb3VzZW92ZXInLCAocGFyYW1zOiBhbnkpID0+IHtcbiAgICAgIGlmIChwYXJhbXM/LmNvbXBvbmVudFR5cGUgIT09ICdtYXJrTGluZScgJiYgcGFyYW1zPy5jb21wb25lbnRUeXBlICE9PSAnbWFya1BvaW50Jykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmVjaGFydHNJbnN0YW5jZS5nZXRPcHRpb24oKSBhcyBFQ2hhcnRzT3B0aW9uO1xuICAgICAgaWYgKCFvcHRpb25zLnRvb2x0aXAgfHwgIUFycmF5LmlzQXJyYXkob3B0aW9ucy50b29sdGlwKSB8fCAhb3B0aW9ucy50b29sdGlwWzBdKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG9yaWdpbmFsRm9ybWF0dGVyID0gb3JpZ2luYWxGb3JtYXR0ZXIgPz8gb3B0aW9uc1sndG9vbHRpcCddWzBdLmZvcm1hdHRlcjtcblxuICAgICAgY29uc3QgdXBkYXRlZE9wdGlvbnM6IFBhcnRpYWw8U2VyaWVzT3B0aW9uPiA9IHsgdG9vbHRpcDogb3B0aW9uc1sndG9vbHRpcCddWzBdIH07XG5cbiAgICAgIGlmICghdXBkYXRlZE9wdGlvbnMudG9vbHRpcCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB1cGRhdGVkT3B0aW9ucy50b29sdGlwLmZvcm1hdHRlciA9ICh0b29sdGlwUGFyYW1zOiBDYWxsYmFja0RhdGFQYXJhbXMpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWNoYXJ0c09wdGlvbnNTZXJ2aWNlLmdldFRvb2x0aXBGb3JtYXR0ZXJGb3JBbGFybUFuZEV2ZW50cyhcbiAgICAgICAgICB0b29sdGlwUGFyYW1zLFxuICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICB0aGlzLmV2ZW50cyxcbiAgICAgICAgICB0aGlzLmFsYXJtc1xuICAgICAgICApO1xuICAgICAgfTtcblxuICAgICAgdGhpcy5lY2hhcnRzSW5zdGFuY2Uuc2V0T3B0aW9uKHVwZGF0ZWRPcHRpb25zKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZWNoYXJ0c0luc3RhbmNlLm9uKCdtb3VzZW91dCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmVjaGFydHNJbnN0YW5jZS5nZXRPcHRpb24oKSBhcyBFY2hhcnRzQ3VzdG9tT3B0aW9ucztcbiAgICAgIGlmIChvcmlnaW5hbEZvcm1hdHRlcikge1xuICAgICAgICBvcHRpb25zWyd0b29sdGlwJ11bMF0uZm9ybWF0dGVyID0gb3JpZ2luYWxGb3JtYXR0ZXI7XG4gICAgICAgIHRoaXMuZWNoYXJ0c0luc3RhbmNlLnNldE9wdGlvbihvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9uQ2hhcnRDbGljayhwYXJhbXM6IHsgZGF0YTogeyBpdGVtVHlwZTogc3RyaW5nIH0gfSk6IHZvaWQge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmVjaGFydHNJbnN0YW5jZS5nZXRPcHRpb24oKTtcbiAgICBpZiAoIXRoaXMuaXNBbGFybUNsaWNrKHBhcmFtcykpIHtcbiAgICAgIHRoaXMuZWNoYXJ0c0luc3RhbmNlLnNldE9wdGlvbih7XG4gICAgICAgIHRvb2x0aXA6IHsgdHJpZ2dlck9uOiAnbW91c2Vtb3ZlJyB9LFxuICAgICAgICBzZXJpZXM6IFt7IG1hcmtBcmVhOiB7IGRhdGE6IFtdIH0sIG1hcmtMaW5lOiB7IGRhdGE6IFtdIH0gfV1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNsaWNrZWRBbGFybXMgPSB0aGlzLmFsYXJtcy5maWx0ZXIoYWxhcm0gPT4gYWxhcm0udHlwZSA9PT0gcGFyYW1zLmRhdGEuaXRlbVR5cGUpO1xuXG4gICAgdGhpcy5pc01hcmtlZEFyZWFFbmFibGVkLmVtaXQodGhpcy5oYXNNYXJrQXJlYShvcHRpb25zKSk7XG4gICAgY29uc3QgdXBkYXRlZE9wdGlvbnMgPSAhdGhpcy5oYXNNYXJrQXJlYShvcHRpb25zKVxuICAgICAgPyB7XG4gICAgICAgICAgdG9vbHRpcDogeyBlbnRlcmFibGU6IHRydWUsIHRyaWdnZXJPbjogJ2NsaWNrJyB9LFxuICAgICAgICAgIHNlcmllczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBtYXJrQXJlYTogeyBsYWJlbDogeyBzaG93OiBmYWxzZSB9LCBkYXRhOiB0aGlzLmdldE1hcmtlZEFyZWFEYXRhKGNsaWNrZWRBbGFybXMpIH0sXG4gICAgICAgICAgICAgIG1hcmtMaW5lOiB7XG4gICAgICAgICAgICAgICAgc2hvd1N5bWJvbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzeW1ib2w6IFsnbm9uZScsICdub25lJ10sXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5nZXRNYXJrZWRMaW5lRGF0YShjbGlja2VkQWxhcm1zKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICA6IC8vIGlmIG1hcmtBcmVhIGFscmVhZHkgZXhpc3RzLCByZW1vdmUgaXQgYW5kIHJlbW92ZSBsYXN0VXBkYXRlZCBmcm9tIG1hcmtMaW5lXG4gICAgICAgIHtcbiAgICAgICAgICB0b29sdGlwOiB7IHRyaWdnZXJPbjogJ21vdXNlbW92ZScgfSxcbiAgICAgICAgICBzZXJpZXM6IFt7IG1hcmtBcmVhOiB7IGRhdGE6IFtdIH0sIG1hcmtMaW5lOiB7IGRhdGE6IFtdIH0gfV1cbiAgICAgICAgfTtcblxuICAgIHRoaXMuZWNoYXJ0c0luc3RhbmNlLnNldE9wdGlvbih1cGRhdGVkT3B0aW9ucyk7XG4gIH1cblxuICBpc0FsYXJtQ2xpY2socGFyYW1zOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hbGFybXMuc29tZShhbGFybSA9PiBhbGFybS50eXBlID09PSBwYXJhbXMuZGF0YS5pdGVtVHlwZSk7XG4gIH1cblxuICBoYXNNYXJrQXJlYShvcHRpb25zOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gb3B0aW9ucz8uc2VyaWVzPy5bMF0/Lm1hcmtBcmVhPy5kYXRhPy5sZW5ndGggPiAwO1xuICB9XG5cbiAgc2F2ZUFzSW1hZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5lY2hhcnRzSW5zdGFuY2Uuc2V0T3B0aW9uKHsgbGVnZW5kOiB7IHNob3c6IHRydWUgfSB9KTtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmVjaGFydHNJbnN0YW5jZS5nZXREYXRhVVJMKHtcbiAgICAgIHBpeGVsUmF0aW86IDIsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmJyxcbiAgICAgIHR5cGU6ICdwbmcnXG4gICAgfSk7XG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBsaW5rLmhyZWYgPSB1cmw7XG4gICAgbGluay5kb3dubG9hZCA9ICdkYXRhcG9pbnRzLWdyYXBoLXNjcmVlbnNob3QnO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgbGluay5jbGljaygpO1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XG4gICAgdGhpcy5lY2hhcnRzSW5zdGFuY2Uuc2V0T3B0aW9uKHsgbGVnZW5kOiB7IHNob3c6IGZhbHNlIH0gfSk7XG4gIH1cblxuICBsb2FkTW9yZURhdGEoKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudFRpbWVSYW5nZUluTXMgPSB0aGlzLmVjaGFydHNPcHRpb25zU2VydmljZS5jYWxjdWxhdGVFeHRlbmRlZEludGVydmFsSW5NcyhcbiAgICAgIHRoaXMuY29uZmlnLmludGVydmFsIHx8ICdjdXN0b20nLFxuICAgICAge1xuICAgICAgICBkYXRlVG86IHRoaXMud2lkZ2V0VGltZUNvbnRleHREYXRlUmFuZ2VTZXJ2aWNlLmluaXRpYWxUaW1lUmFuZ2UoKS5kYXRlVG8sXG4gICAgICAgIGRhdGVGcm9tOiB0aGlzLndpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZS5pbml0aWFsVGltZVJhbmdlKCkuZGF0ZUZyb21cbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMud2lkZ2V0VGltZUNvbnRleHREYXRlUmFuZ2VTZXJ2aWNlLnVwZGF0ZUluaXRpYWxUaW1lUmFuZ2Uoe1xuICAgICAgZGF0ZUZyb206IG5ldyBEYXRlKFxuICAgICAgICBuZXcgRGF0ZSh0aGlzLndpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZS5pbml0aWFsVGltZVJhbmdlKCkuZGF0ZUZyb20pLnZhbHVlT2YoKSAtXG4gICAgICAgICAgY3VycmVudFRpbWVSYW5nZUluTXMgLyA0XG4gICAgICApLnRvSVNPU3RyaW5nKCksXG4gICAgICBkYXRlVG86IHRoaXMud2lkZ2V0VGltZUNvbnRleHREYXRlUmFuZ2VTZXJ2aWNlLmluaXRpYWxUaW1lUmFuZ2UoKS5kYXRlVG8sXG4gICAgICBpbnRlcnZhbDogJ2N1c3RvbSdcbiAgICB9KTtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5lY2hhcnRzSW5zdGFuY2UuZ2V0T3B0aW9uKCk7XG4gICAgY29uc3QgZGF0YVpvb20gPSBvcHRpb25zWydkYXRhWm9vbSddWzBdO1xuICAgIHRoaXMuY29uZmlnQ2hhbmdlT25ab29tT3V0LmVtaXQoe1xuICAgICAgZGF0ZUZyb206IG5ldyBEYXRlKGRhdGFab29tWydzdGFydFZhbHVlJ10pLFxuICAgICAgZGF0ZVRvOiBuZXcgRGF0ZShkYXRhWm9vbVsnZW5kVmFsdWUnXSksXG4gICAgICBpbnRlcnZhbDogJ2N1c3RvbSdcbiAgICB9KTtcbiAgICB0aGlzLnNob3dMb2FkTW9yZSA9IGZhbHNlO1xuICB9XG5cbiAgZGVib3VuY2U8VCBleHRlbmRzICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZD4oXG4gICAgZnVuYzogVCxcbiAgICB3YWl0OiBudW1iZXJcbiAgKTogKC4uLmFyZ3M6IFBhcmFtZXRlcnM8VD4pID0+IHZvaWQge1xuICAgIGxldCB0aW1lb3V0OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcbiAgICByZXR1cm4gKC4uLmFyZ3M6IFBhcmFtZXRlcnM8VD4pID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGZ1bmMoLi4uYXJncyksIHdhaXQpO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyB0aGUgdmlzaWJpbGl0eSBvZiBhIHNlcmllcyBpbiB0aGUgY2hhcnQgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGRhdGFwb2ludC5cbiAgICogQHBhcmFtIGRhdGFwb2ludCAtIFRoZSBkYXRhcG9pbnQgdG8gdG9nZ2xlIHZpc2liaWxpdHkgZm9yLlxuICAgKi9cbiAgdG9nZ2xlRGF0YXBvaW50U2VyaWVzVmlzaWJpbGl0eShkYXRhcG9pbnQ6IERhdGFwb2ludHNHcmFwaEtQSURldGFpbHMpOiB2b2lkIHtcbiAgICBjb25zdCBzZXJpZXMgPSB0aGlzLmVjaGFydHNJbnN0YW5jZS5nZXRPcHRpb24oKS5zZXJpZXMgYXMgKFNlcmllc09wdGlvbiAmXG4gICAgICBTZXJpZXNEYXRhcG9pbnRJbmZvKVtdO1xuICAgIGNvbnN0IHNlcmllc1RvVXBkYXRlID0gc2VyaWVzLmZpbmQocyA9PiBzLmRhdGFwb2ludExhYmVsID09PSBkYXRhcG9pbnQubGFiZWwpO1xuICAgIGlmIChzZXJpZXNUb1VwZGF0ZSkge1xuICAgICAgdGhpcy5lY2hhcnRzSW5zdGFuY2UuZGlzcGF0Y2hBY3Rpb24oe1xuICAgICAgICB0eXBlOiAnbGVnZW5kVG9nZ2xlU2VsZWN0JyxcbiAgICAgICAgbmFtZTogc2VyaWVzVG9VcGRhdGUubmFtZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgdGhlIHZpc2liaWxpdHkgb2YgYSBzZXJpZXMgaW4gdGhlIGNoYXJ0IGJhc2VkIG9uIHRoZSBwcm92aWRlZCBhbGFybSBvciBldmVudC5cbiAgICogQHBhcmFtIGFsYXJtT3JFdmVudCAtIFRoZSBhbGFybSBvciBldmVudCB0byB0b2dnbGUgdmlzaWJpbGl0eSBmb3IuXG4gICAqL1xuICB0b2dnbGVBbGFybUV2ZW50U2VyaWVzVmlzaWJpbGl0eShcbiAgICBhbGFybU9yRXZlbnQ6IEFsYXJtRGV0YWlsc0V4dGVuZGVkIHwgRXZlbnREZXRhaWxzRXh0ZW5kZWRcbiAgKTogdm9pZCB7XG4gICAgY29uc3Qgc2VyaWVzID0gdGhpcy5lY2hhcnRzSW5zdGFuY2UuZ2V0T3B0aW9uKCkuc2VyaWVzIGFzIChTZXJpZXNPcHRpb24gJlxuICAgICAgU2VyaWVzRGF0YXBvaW50SW5mbylbXTtcbiAgICBjb25zdCBzZXJpZXNUb1VwZGF0ZSA9IHNlcmllcy5maWx0ZXIoXG4gICAgICBzID0+XG4gICAgICAgIHMubmFtZSA9PT0gYCR7YWxhcm1PckV2ZW50LmxhYmVsfS1tYXJrUG9pbnRgIHx8IHMubmFtZSA9PT0gYCR7YWxhcm1PckV2ZW50LmxhYmVsfS1tYXJrTGluZWBcbiAgICApO1xuICAgIGlmIChzZXJpZXNUb1VwZGF0ZSkge1xuICAgICAgc2VyaWVzVG9VcGRhdGUuZm9yRWFjaChzID0+IHtcbiAgICAgICAgdGhpcy5lY2hhcnRzSW5zdGFuY2UuZGlzcGF0Y2hBY3Rpb24oe1xuICAgICAgICAgIHR5cGU6ICdsZWdlbmRUb2dnbGVTZWxlY3QnLFxuICAgICAgICAgIG5hbWU6IHMubmFtZVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVmYXVsdENoYXJ0T3B0aW9ucygpOiBFQ2hhcnRzT3B0aW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGl0bGU6IHtcbiAgICAgICAgdGV4dDogZ2V0dGV4dCgnTm8gZGF0YSBhdmFpbGFibGUuJyksXG4gICAgICAgIGxlZnQ6ICdjZW50ZXInLFxuICAgICAgICB0b3A6ICdjZW50ZXInLFxuICAgICAgICB0ZXh0U3R5bGU6IHsgZm9udFNpemU6IDMwIH1cbiAgICAgIH0sXG4gICAgICBlbXB0eTogdHJ1ZSxcbiAgICAgIHhBeGlzOiB7IHR5cGU6ICdjYXRlZ29yeScsIGRhdGE6IFtdIH0sXG4gICAgICB5QXhpczogeyB0eXBlOiAndmFsdWUnIH0sXG4gICAgICBzZXJpZXM6IFtdXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWFya2VkQXJlYURhdGEoY2xpY2tlZEFsYXJtczogSUFsYXJtW10pIHtcbiAgICBjb25zdCB0aW1lUmFuZ2UgPSB0aGlzLmdldFRpbWVSYW5nZSgpO1xuICAgIGNvbnN0IGNsZWFyZWRBbGFybUNvbG9yID0gJ3JnYmEoMjIxLDI1NSwyMjEsMS4wMCknO1xuICAgIGNvbnN0IGFjdGl2ZUFsYXJtQ29sb3IgPSAncmdiYSgyNTUsIDE3MywgMTc3LCAwLjQpJztcblxuICAgIHJldHVybiBjbGlja2VkQWxhcm1zLm1hcChjbGlja2VkQWxhcm0gPT4ge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IGNsaWNrZWRBbGFybS50eXBlLFxuICAgICAgICAgIHhBeGlzOiBjbGlja2VkQWxhcm0uY3JlYXRpb25UaW1lLFxuICAgICAgICAgIGl0ZW1TdHlsZToge1xuICAgICAgICAgICAgY29sb3I6XG4gICAgICAgICAgICAgIGNsaWNrZWRBbGFybS5zdGF0dXMgPT09IEFsYXJtU3RhdHVzLkNMRUFSRUQgPyBjbGVhcmVkQWxhcm1Db2xvciA6IGFjdGl2ZUFsYXJtQ29sb3JcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB4QXhpczpcbiAgICAgICAgICAgIGNsaWNrZWRBbGFybVsnbGFzdFVwZGF0ZWQnXSA9PT0gY2xpY2tlZEFsYXJtLmNyZWF0aW9uVGltZSB8fFxuICAgICAgICAgICAgY2xpY2tlZEFsYXJtLnN0YXR1cyAhPT0gQWxhcm1TdGF0dXMuQ0xFQVJFRFxuICAgICAgICAgICAgICA/IHRpbWVSYW5nZS5kYXRlVG9cbiAgICAgICAgICAgICAgOiBjbGlja2VkQWxhcm1bJ2xhc3RVcGRhdGVkJ11cbiAgICAgICAgfVxuICAgICAgXTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWFya2VkTGluZURhdGEoY2xpY2tlZEFsYXJtczogSUFsYXJtW10pIHtcbiAgICByZXR1cm4gY2xpY2tlZEFsYXJtcy5yZWR1Y2U8TWFya0xpbmVEYXRhW10+KChhY2MsIGFsYXJtKSA9PiB7XG4gICAgICBjb25zdCBpc0NsaWNrZWRBbGFybUNsZWFyZWQgPSBhbGFybS5zdGF0dXMgPT09IEFsYXJtU3RhdHVzLkNMRUFSRUQ7XG4gICAgICBpZiAoaXNDbGlja2VkQWxhcm1DbGVhcmVkKSB7XG4gICAgICAgIHJldHVybiBhY2MuY29uY2F0KFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4QXhpczogYWxhcm0uY3JlYXRpb25UaW1lLFxuICAgICAgICAgICAgaXRlbVR5cGU6IGFsYXJtLnR5cGUsXG4gICAgICAgICAgICBsYWJlbDogeyBzaG93OiBmYWxzZSwgZm9ybWF0dGVyOiAoKSA9PiBhbGFybS50eXBlIH0sXG4gICAgICAgICAgICBpdGVtU3R5bGU6IHsgY29sb3I6IGFsYXJtWydjb2xvciddIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHhBeGlzOiBhbGFybVsnbGFzdFVwZGF0ZWQnXSxcbiAgICAgICAgICAgIGl0ZW1UeXBlOiBhbGFybS50eXBlLFxuICAgICAgICAgICAgbGFiZWw6IHsgc2hvdzogZmFsc2UsIGZvcm1hdHRlcjogKCkgPT4gYWxhcm0udHlwZSB9LFxuICAgICAgICAgICAgaXRlbVN0eWxlOiB7IGNvbG9yOiBhbGFybVsnY29sb3InXSB9XG4gICAgICAgICAgfVxuICAgICAgICBdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2MuY29uY2F0KFtcbiAgICAgICAge1xuICAgICAgICAgIHhBeGlzOiBhbGFybS5jcmVhdGlvblRpbWUsXG4gICAgICAgICAgaXRlbVR5cGU6IGFsYXJtLnR5cGUsXG4gICAgICAgICAgbGFiZWw6IHsgc2hvdzogZmFsc2UsIGZvcm1hdHRlcjogKCkgPT4gYWxhcm0udHlwZSB9LFxuICAgICAgICAgIGl0ZW1TdHlsZTogeyBjb2xvcjogYWxhcm1bJ2NvbG9yJ10gfVxuICAgICAgICB9XG4gICAgICBdKTtcbiAgICB9LCBbXSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRBbGFybXNBbmRFdmVudHMoY3VzdG9tVGltZVJhbmdlPzogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZVJhbmdlID0gdGhpcy5nZXRUaW1lUmFuZ2UoKTtcbiAgICBjb25zdCB1cGRhdGVkVGltZVJhbmdlID0ge1xuICAgICAgbGFzdFVwZGF0ZWRGcm9tOiBjdXN0b21UaW1lUmFuZ2UgPyBjdXN0b21UaW1lUmFuZ2UuZGF0ZUZyb20gOiB0aW1lUmFuZ2UuZGF0ZUZyb20sXG4gICAgICBjcmVhdGVkVG86IGN1c3RvbVRpbWVSYW5nZSA/IGN1c3RvbVRpbWVSYW5nZS5kYXRlVG8gOiB0aW1lUmFuZ2UuZGF0ZVRvXG4gICAgfTtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmFsYXJtc0V2ZW50c0NvbmZpZ3MpIHJldHVybjtcbiAgICBjb25zdCB2aXNpYmxlQWxhcm1zT3JFdmVudHMgPSB0aGlzLmNvbmZpZy5hbGFybXNFdmVudHNDb25maWdzPy5maWx0ZXIoXG4gICAgICBhbGFybU9yRXZlbnQgPT4gIWFsYXJtT3JFdmVudC5fX2hpZGRlbiAmJiBhbGFybU9yRXZlbnQuX19hY3RpdmVcbiAgICApO1xuICAgIGNvbnN0IGFsYXJtcyA9IHZpc2libGVBbGFybXNPckV2ZW50cz8uZmlsdGVyKFxuICAgICAgYWxhcm1PckV2ZW50ID0+IGFsYXJtT3JFdmVudC50aW1lbGluZVR5cGUgPT09ICdBTEFSTSdcbiAgICApIGFzIEFsYXJtRGV0YWlsc0V4dGVuZGVkW107XG4gICAgY29uc3QgZXZlbnRzID0gdmlzaWJsZUFsYXJtc09yRXZlbnRzPy5maWx0ZXIoXG4gICAgICBhbGFybU9yRXZlbnQgPT4gYWxhcm1PckV2ZW50LnRpbWVsaW5lVHlwZSA9PT0gJ0VWRU5UJ1xuICAgICkgYXMgRXZlbnREZXRhaWxzRXh0ZW5kZWRbXTtcblxuICAgIGNvbnN0IFtsaXN0ZWRFdmVudHMsIGxpc3RlZEFsYXJtc10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICB0aGlzLmNoYXJ0RXZlbnRzU2VydmljZS5saXN0RXZlbnRzKHVwZGF0ZWRUaW1lUmFuZ2UsIGV2ZW50cyksXG4gICAgICB0aGlzLmNoYXJ0QWxhcm1zU2VydmljZS5saXN0QWxhcm1zKHVwZGF0ZWRUaW1lUmFuZ2UsIGFsYXJtcylcbiAgICBdKTtcblxuICAgIHRoaXMuZXZlbnRzID0gbGlzdGVkRXZlbnRzO1xuICAgIHRoaXMuYWxhcm1zID0gbGlzdGVkQWxhcm1zO1xuICAgIGF3YWl0IHRoaXMuYWRkQWN0aXZlQWxhcm1zKGFsYXJtcyk7XG5cbiAgICB0aGlzLnVwZGF0ZUFsYXJtc0FuZEV2ZW50cy5lbWl0KHRoaXMuY29uZmlnLmFsYXJtc0V2ZW50c0NvbmZpZ3MpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydFJlYWx0aW1lSWZQb3NzaWJsZSgpOiB2b2lkIHtcbiAgICBjb25zdCBhY3RpdmVEYXRhcG9pbnRzID0gdGhpcy5jb25maWc/LmRhdGFwb2ludHM/LmZpbHRlcihkcCA9PiBkcC5fX2FjdGl2ZSk7XG4gICAgaWYgKGFjdGl2ZURhdGFwb2ludHMgJiYgdGhpcy5jb25maWcucmVhbHRpbWUgJiYgdGhpcy5lY2hhcnRzSW5zdGFuY2UpIHtcbiAgICAgIHRoaXMuY2hhcnRSZWFsdGltZVNlcnZpY2Uuc3RhcnRSZWFsdGltZShcbiAgICAgICAgdGhpcy5lY2hhcnRzSW5zdGFuY2UsXG4gICAgICAgIGFjdGl2ZURhdGFwb2ludHMsXG4gICAgICAgIHRoaXMuZ2V0VGltZVJhbmdlKCksXG4gICAgICAgIGRwID0+IHRoaXMuZGF0YXBvaW50T3V0T2ZTeW5jLmVtaXQoZHApLFxuICAgICAgICB0aW1lUmFuZ2UgPT4gdGhpcy50aW1lUmFuZ2VDaGFuZ2VPblJlYWx0aW1lLmVtaXQodGltZVJhbmdlKSxcbiAgICAgICAgdGhpcy5jb25maWcuYWxhcm1zRXZlbnRzQ29uZmlncyxcbiAgICAgICAge1xuICAgICAgICAgIGRpc3BsYXlNYXJrZWRMaW5lOiB0aGlzLmNvbmZpZy5kaXNwbGF5TWFya2VkTGluZSB8fCBmYWxzZSxcbiAgICAgICAgICBkaXNwbGF5TWFya2VkUG9pbnQ6IHRoaXMuY29uZmlnLmRpc3BsYXlNYXJrZWRQb2ludCB8fCBmYWxzZVxuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qXG4gIFRoaXMgbWV0aG9kIHNob3VsZCBjaGVjayBhbmQgYWRkIGFjdGl2ZSBhbGFybXMgZnJvbSB0aGUgYmVnaW5pbmcgb2YgdGltZSB0byB0aGUgYWxhcm0gYXJyYXlcbiAgKi9cbiAgcHJpdmF0ZSBhc3luYyBhZGRBY3RpdmVBbGFybXMoYWxhcm1zOiBBbGFybURldGFpbHNFeHRlbmRlZFtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZVJhbmdlID0gdGhpcy5nZXRUaW1lUmFuZ2UoKTtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBkYXRlRnJvbTogJzE5NzAtMDEtMDFUMDE6MDA6MDArMDE6MDAnLFxuICAgICAgZGF0ZVRvOiB0aW1lUmFuZ2UuZGF0ZVRvLFxuICAgICAgc3RhdHVzOiBBbGFybVN0YXR1cy5BQ1RJVkVcbiAgICB9O1xuXG4gICAgY29uc3QgYWN0aXZlQWxhcm1zID0gYXdhaXQgdGhpcy5jaGFydEFsYXJtc1NlcnZpY2UubGlzdEFsYXJtcyhwYXJhbXMsIGFsYXJtcyk7XG4gICAgdGhpcy5jb25maWcuYWN0aXZlQWxhcm1UeXBlc091dE9mUmFuZ2UgPSBbXTtcbiAgICAvLyBpdGVyYXRlIHRocm91Z2ggdGhlIGFjdGl2ZUFsYXJtcyBhbmQgY2hlY2sgaWYgdGhlIGFsYXJtIGlzIGluIHRoZSBhbGFybXMgYXJyYXksIGlmIG5vdCB1cGRhdGUgdGhlIGNvbmZpZy5hY3RpdmVBbGFybVR5cGVzT3V0T2ZSYW5nZSBwcm9wXG4gICAgYWN0aXZlQWxhcm1zLmZvckVhY2goYWN0aXZlQWxhcm0gPT4ge1xuICAgICAgY29uc3QgYWxhcm1UeXBlID0gYWN0aXZlQWxhcm0udHlwZTtcbiAgICAgIGNvbnN0IGFsYXJtID0gdGhpcy5hbGFybXMuZmluZChhbGFybSA9PiBhbGFybS50eXBlID09PSBhbGFybVR5cGUpO1xuICAgICAgaWYgKCFhbGFybSAmJiB0aGlzLmNvbmZpZy5hY3RpdmVBbGFybVR5cGVzT3V0T2ZSYW5nZSkge1xuICAgICAgICB0aGlzLmNvbmZpZy5hY3RpdmVBbGFybVR5cGVzT3V0T2ZSYW5nZS5wdXNoKGFsYXJtVHlwZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldENoYXJ0T3B0aW9ucyhkYXRhcG9pbnRzV2l0aFZhbHVlczogRHBXaXRoVmFsdWVzW10pOiBQcm9taXNlPEVDaGFydHNPcHRpb24+IHtcbiAgICBjb25zdCB0aW1lUmFuZ2UgPSB7IC4uLnRoaXMuZ2V0VGltZVJhbmdlKCksIGludGVydmFsOiB0aGlzLmNvbmZpZy5pbnRlcnZhbCB9O1xuICAgIGlmICghdGhpcy53aWRnZXRUaW1lQ29udGV4dERhdGVSYW5nZVNlcnZpY2UuaW5pdGlhbFRpbWVSYW5nZSgpKSB7XG4gICAgICB0aGlzLndpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZS51cGRhdGVJbml0aWFsVGltZVJhbmdlKHRpbWVSYW5nZSk7XG4gICAgICBjb25zdCBhZ2dyZWdhdGVkRGF0YXBvaW50cyA9IGF3YWl0IGxhc3RWYWx1ZUZyb20oXG4gICAgICAgIHRoaXMuZmV0Y2hTZXJpZXNGb3JEYXRhcG9pbnRzJCh7XG4gICAgICAgICAgZGF0ZUZyb206IG5ldyBEYXRlKFxuICAgICAgICAgICAgbmV3IERhdGUodGltZVJhbmdlLmRhdGVGcm9tKS52YWx1ZU9mKCkgLVxuICAgICAgICAgICAgICB0aGlzLmVjaGFydHNPcHRpb25zU2VydmljZS5jYWxjdWxhdGVFeHRlbmRlZEludGVydmFsSW5NcyhcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5pbnRlcnZhbCB8fCAnY3VzdG9tJyxcbiAgICAgICAgICAgICAgICB7IGRhdGVGcm9tOiB0aW1lUmFuZ2UuZGF0ZUZyb20sIGRhdGVUbzogdGltZVJhbmdlLmRhdGVUbyB9XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICApLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgZGF0ZVRvOiB0aW1lUmFuZ2UuZGF0ZVRvXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgcmV0dXJuIHRoaXMuZWNoYXJ0c09wdGlvbnNTZXJ2aWNlLmdldENoYXJ0T3B0aW9ucyhcbiAgICAgICAgZGF0YXBvaW50c1dpdGhWYWx1ZXMsXG4gICAgICAgIHRpbWVSYW5nZSxcbiAgICAgICAge1xuICAgICAgICAgIFlBeGlzOiB0aGlzLmNvbmZpZy55QXhpc1NwbGl0TGluZXMgfHwgZmFsc2UsXG4gICAgICAgICAgWEF4aXM6IHRoaXMuY29uZmlnLnhBeGlzU3BsaXRMaW5lcyB8fCBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICB0aGlzLmV2ZW50cyxcbiAgICAgICAgdGhpcy5hbGFybXMsXG4gICAgICAgIHtcbiAgICAgICAgICBkaXNwbGF5TWFya2VkTGluZTogdGhpcy5jb25maWcuZGlzcGxheU1hcmtlZExpbmUgfHwgZmFsc2UsXG4gICAgICAgICAgZGlzcGxheU1hcmtlZFBvaW50OiB0aGlzLmNvbmZpZy5kaXNwbGF5TWFya2VkUG9pbnQgfHwgZmFsc2UsXG4gICAgICAgICAgbWVyZ2VNYXRjaGluZ0RhdGFwb2ludHM6IHRoaXMuY29uZmlnLm1lcmdlTWF0Y2hpbmdEYXRhcG9pbnRzIHx8IGZhbHNlLFxuICAgICAgICAgIHNob3dMYWJlbEFuZFVuaXQ6IHRoaXMuY29uZmlnLnNob3dMYWJlbEFuZFVuaXQgfHwgZmFsc2UsXG4gICAgICAgICAgc2hvd1NsaWRlcjogdGhpcy5jb25maWcuc2hvd1NsaWRlciB8fCBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIGFnZ3JlZ2F0ZWREYXRhcG9pbnRzXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBhZ2dyZWdhdGVkRGF0YXBvaW50cyA9IGF3YWl0IGxhc3RWYWx1ZUZyb20oXG4gICAgICAgIHRoaXMuZmV0Y2hTZXJpZXNGb3JEYXRhcG9pbnRzJCh7XG4gICAgICAgICAgZGF0ZUZyb206IG5ldyBEYXRlKFxuICAgICAgICAgICAgbmV3IERhdGUodGhpcy53aWRnZXRUaW1lQ29udGV4dERhdGVSYW5nZVNlcnZpY2UuaW5pdGlhbFRpbWVSYW5nZSgpLmRhdGVGcm9tKS52YWx1ZU9mKCkgLVxuICAgICAgICAgICAgICB0aGlzLmVjaGFydHNPcHRpb25zU2VydmljZS5jYWxjdWxhdGVFeHRlbmRlZEludGVydmFsSW5NcyhcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5pbnRlcnZhbCB8fCAnY3VzdG9tJyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBkYXRlRnJvbTogdGhpcy53aWRnZXRUaW1lQ29udGV4dERhdGVSYW5nZVNlcnZpY2UuaW5pdGlhbFRpbWVSYW5nZSgpLmRhdGVGcm9tLFxuICAgICAgICAgICAgICAgICAgZGF0ZVRvOiB0aGlzLndpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZS5pbml0aWFsVGltZVJhbmdlKCkuZGF0ZVRvXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIGRhdGVUbzogbmV3IERhdGUoXG4gICAgICAgICAgICB0aGlzLndpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZS5pbml0aWFsVGltZVJhbmdlKCkuZGF0ZVRvXG4gICAgICAgICAgKS50b0lTT1N0cmluZygpXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgcmV0dXJuIHRoaXMuZWNoYXJ0c09wdGlvbnNTZXJ2aWNlLmdldENoYXJ0T3B0aW9ucyhcbiAgICAgICAgZGF0YXBvaW50c1dpdGhWYWx1ZXMsXG4gICAgICAgIHRoaXMud2lkZ2V0VGltZUNvbnRleHREYXRlUmFuZ2VTZXJ2aWNlLmluaXRpYWxUaW1lUmFuZ2UoKSxcbiAgICAgICAge1xuICAgICAgICAgIFlBeGlzOiB0aGlzLmNvbmZpZy55QXhpc1NwbGl0TGluZXMgfHwgZmFsc2UsXG4gICAgICAgICAgWEF4aXM6IHRoaXMuY29uZmlnLnhBeGlzU3BsaXRMaW5lcyB8fCBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICB0aGlzLmV2ZW50cyxcbiAgICAgICAgdGhpcy5hbGFybXMsXG4gICAgICAgIHtcbiAgICAgICAgICBkaXNwbGF5TWFya2VkTGluZTogdGhpcy5jb25maWcuZGlzcGxheU1hcmtlZExpbmUgfHwgZmFsc2UsXG4gICAgICAgICAgZGlzcGxheU1hcmtlZFBvaW50OiB0aGlzLmNvbmZpZy5kaXNwbGF5TWFya2VkUG9pbnQgfHwgZmFsc2UsXG4gICAgICAgICAgbWVyZ2VNYXRjaGluZ0RhdGFwb2ludHM6IHRoaXMuY29uZmlnLm1lcmdlTWF0Y2hpbmdEYXRhcG9pbnRzIHx8IGZhbHNlLFxuICAgICAgICAgIHNob3dMYWJlbEFuZFVuaXQ6IHRoaXMuY29uZmlnLnNob3dMYWJlbEFuZFVuaXQgfHwgZmFsc2UsXG4gICAgICAgICAgc2hvd1NsaWRlcjogdGhpcy5jb25maWcuc2hvd1NsaWRlciB8fCBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICB0aW1lUmFuZ2UsXG4gICAgICAgIGFnZ3JlZ2F0ZWREYXRhcG9pbnRzLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmV0Y2hTZXJpZXNGb3JEYXRhcG9pbnRzJChjdXN0b21UaW1lUmFuZ2U/OiBhbnkpOiBPYnNlcnZhYmxlPERwV2l0aFZhbHVlc1tdPiB7XG4gICAgY29uc3QgYWN0aXZlRGF0YXBvaW50cyA9IHRoaXMuY29uZmlnPy5kYXRhcG9pbnRzPy5maWx0ZXIoZHAgPT4gZHAuX19hY3RpdmUpO1xuICAgIGlmICghYWN0aXZlRGF0YXBvaW50cyB8fCBhY3RpdmVEYXRhcG9pbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICB9XG4gICAgY29uc3QgZGF0YXBvaW50c1dpdGhWYWx1ZXNSZXF1ZXN0czogT2JzZXJ2YWJsZTxEcFdpdGhWYWx1ZXM+W10gPSBbXTtcbiAgICBjb25zdCB0aW1lUmFuZ2UgPSB0aGlzLmdldFRpbWVSYW5nZSg2MF8wMDApO1xuICAgIGZvciAoY29uc3QgZHAgb2YgYWN0aXZlRGF0YXBvaW50cykge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IHRoaXMubWVhc3VyZW1lbnRTZXJ2aWNlXG4gICAgICAgIC5saXN0U2VyaWVzJCh7XG4gICAgICAgICAgLi4uKGN1c3RvbVRpbWVSYW5nZSA/IGN1c3RvbVRpbWVSYW5nZSA6IHRpbWVSYW5nZSksXG4gICAgICAgICAgc291cmNlOiBkcC5fX3RhcmdldD8uaWQgfHwgJycsXG4gICAgICAgICAgc2VyaWVzOiBbYCR7ZHAuZnJhZ21lbnR9LiR7ZHAuc2VyaWVzfWBdLFxuICAgICAgICAgIC4uLih0aGlzLmNvbmZpZy5hZ2dyZWdhdGlvbiB8fCBjdXN0b21UaW1lUmFuZ2VcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIGFnZ3JlZ2F0aW9uVHlwZTogY3VzdG9tVGltZVJhbmdlID8gYWdncmVnYXRpb25UeXBlLkhPVVJMWSA6IHRoaXMuY29uZmlnLmFnZ3JlZ2F0aW9uXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge30pXG4gICAgICAgIH0pXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcChyZXMgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gcmVzLmRhdGEudmFsdWVzO1xuICAgICAgICAgICAgaWYgKHJlcy5kYXRhLnRydW5jYXRlZCAmJiB0aGlzLmNvbmZpZy5kYXRlRnJvbSkge1xuICAgICAgICAgICAgICB2YWx1ZXNbbmV3IERhdGUodGhpcy5jb25maWcuZGF0ZUZyb20pLnRvSVNPU3RyaW5nKCldID0gW3sgbWluOiBudWxsLCBtYXg6IG51bGwgfV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAodGhpcy5hbGVydHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0cy5jbGVhcigpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyAuLi5kcCwgdmFsdWVzLCB0cnVuY2F0ZWQ6IHJlcy5kYXRhLnRydW5jYXRlZCB9O1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgIGRhdGFwb2ludHNXaXRoVmFsdWVzUmVxdWVzdHMucHVzaChyZXF1ZXN0KTtcbiAgICB9XG4gICAgcmV0dXJuIGZvcmtKb2luKGRhdGFwb2ludHNXaXRoVmFsdWVzUmVxdWVzdHMpLnBpcGUoXG4gICAgICB0YXAoKGRwc1dpdGhWYWx1ZXM6IERwV2l0aFZhbHVlc1tdKSA9PiB7XG4gICAgICAgIGlmIChkcHNXaXRoVmFsdWVzLnNvbWUoZHAgPT4gZHBbJ3RydW5jYXRlZCddKSkge1xuICAgICAgICAgIHRoaXMuYWRkVHJ1bmNhdGVkRGF0YUFsZXJ0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkVHJ1bmNhdGVkRGF0YUFsZXJ0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFsZXJ0cz8uYWxlcnRHcm91cHMuZmluZChhID0+IGEudHlwZSA9PT0gJ3dhcm5pbmcnKT8udmFsdWU/LmFsZXJ0cz8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGFsZXJ0ID0gbmV3IER5bmFtaWNDb21wb25lbnRBbGVydCh7XG4gICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgICB0ZXh0OiBnZXR0ZXh0KCdUcnVuY2F0ZWQgZGF0YS4gQ2hhbmdlIGFnZ3JlZ2F0aW9uIG9yIHNlbGVjdCBzaG9ydGVyIGRhdGUgcmFuZ2UuJylcbiAgICB9KTtcblxuICAgIHRoaXMuYWxlcnRzPy5hZGRBbGVydHMoYWxlcnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUaW1lUmFuZ2UoYWRkaXRpb25hbFBhZGRpbmc/OiBudW1iZXIpOiB7IGRhdGVGcm9tOiBzdHJpbmc7IGRhdGVUbzogc3RyaW5nIH0ge1xuICAgIGxldCB0aW1lUmFuZ2U6IHsgZGF0ZUZyb206IERhdGU7IGRhdGVUbzogRGF0ZSB9O1xuICAgIGlmIChcbiAgICAgIHRoaXMuY29uZmlnLndpZGdldEluc3RhbmNlR2xvYmFsVGltZUNvbnRleHQgfHxcbiAgICAgICh0aGlzLmNvbmZpZy5pbnRlcnZhbCA9PT0gJ2N1c3RvbScgJiYgIXRoaXMuY29uZmlnLnJlYWx0aW1lKVxuICAgICkge1xuICAgICAgdGltZVJhbmdlID0ge1xuICAgICAgICBkYXRlRnJvbTogbmV3IERhdGUodGhpcy5jb25maWcuZGF0ZUZyb20gYXMgRGF0ZSksXG4gICAgICAgIGRhdGVUbzogbmV3IERhdGUodGhpcy5jb25maWcuZGF0ZVRvIGFzIERhdGUpXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgdGltZVJhbmdlSW5NcyA9IDA7XG4gICAgICBpZiAodGhpcy5jb25maWcuaW50ZXJ2YWwgJiYgdGhpcy5jb25maWcuaW50ZXJ2YWwgIT09ICdjdXN0b20nKSB7XG4gICAgICAgIHRpbWVSYW5nZUluTXMgPSBJTlRFUlZBTFMuZmluZChpID0+IGkuaWQgPT09IHRoaXMuY29uZmlnLmludGVydmFsKT8udGltZXNwYW5Jbk1zIHx8IDA7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlnLnJlYWx0aW1lKSB7XG4gICAgICAgIHRpbWVSYW5nZUluTXMgPVxuICAgICAgICAgIG5ldyBEYXRlKHRoaXMuY29uZmlnLmRhdGVUbyBhcyBEYXRlKS52YWx1ZU9mKCkgLVxuICAgICAgICAgIG5ldyBEYXRlKHRoaXMuY29uZmlnLmRhdGVGcm9tIGFzIERhdGUpLnZhbHVlT2YoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgICB0aW1lUmFuZ2UgPSB7IGRhdGVGcm9tOiBuZXcgRGF0ZShub3cudmFsdWVPZigpIC0gdGltZVJhbmdlSW5NcyksIGRhdGVUbzogbm93IH07XG4gICAgfVxuICAgIGlmIChhZGRpdGlvbmFsUGFkZGluZykge1xuICAgICAgdGltZVJhbmdlLmRhdGVGcm9tID0gbmV3IERhdGUodGltZVJhbmdlLmRhdGVGcm9tLnZhbHVlT2YoKSAtIGFkZGl0aW9uYWxQYWRkaW5nKTtcbiAgICAgIHRpbWVSYW5nZS5kYXRlVG8gPSBuZXcgRGF0ZSh0aW1lUmFuZ2UuZGF0ZVRvLnZhbHVlT2YoKSArIGFkZGl0aW9uYWxQYWRkaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgZGF0ZUZyb206IHRpbWVSYW5nZS5kYXRlRnJvbS50b0lTT1N0cmluZygpLCBkYXRlVG86IHRpbWVSYW5nZS5kYXRlVG8udG9JU09TdHJpbmcoKSB9O1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwicC1yZWxhdGl2ZSBmaXQtaCBjaGFydC1jb250YWluZXJcIlxuPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJmaXQtdyBmaXQtaFwiXG4gICAgI2NoYXJ0XG4gICAgZWNoYXJ0c1xuICAgIFtvcHRpb25zXT1cImNoYXJ0T3B0aW9uJCB8IGFzeW5jXCJcbiAgICAoY2hhcnRJbml0KT1cIm9uQ2hhcnRJbml0KCRldmVudClcIlxuICA+PC9kaXY+XG5cbiAgPGM4eS1jaGFydC1hbGVydHMgW2FsZXJ0c109XCJhbGVydHNcIj48L2M4eS1jaGFydC1hbGVydHM+XG5cbiAgPGRpdiAqbmdJZj1cInNob3dMb2FkTW9yZVwiIGNsYXNzPVwiY2hhcnQtbG9hZC1tb3JlXCI+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtIGJ0bi1ibG9ja1wiXG4gICAgICAoY2xpY2spPVwibG9hZE1vcmVEYXRhKClcIlxuICAgID5cbiAgICAgIDxpIGM4eUljb249XCJyZXN0b3JlXCI+PC9pPlxuICAgICAge3sgJ0xvYWQgbW9yZScgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2xvZ1F1b3RhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbWVzc2FnaW5nLW1hbmFnZW1lbnQvYXBpL21vZGVsL2JhY2tsb2dRdW90YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBCYWNrbG9nIHF1b3RhIGZvciBuYW1lc3BhY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnaW5nTmFtZXNwYWNlQmFja2xvZ1F1b3RhIHtcbiAgLyoqXG4gICAqIExpbWl0IHNpemUgaW4gYnl0ZXMuIElmIHRoZXJlIGlzIG5vIGxpbWl0LCB2YWx1ZSBpcyAtMS5cbiAgICovXG4gIGxpbWl0PzogbnVtYmVyO1xuICAvKipcbiAgICogUHVsc2FyIHJldGVudGlvbiBwb2xpY3kuIEZvciBkZXRhaWxzIHNlZSBodHRwczovL3B1bHNhci5hcGFjaGUub3JnL2RvY3MvbmV4dC9jb29rYm9va3MtcmV0ZW50aW9uLWV4cGlyeS8jZ2V0LXJldGVudGlvbi1wb2xpY3lcbiAgICovXG4gIHBvbGljeT86ICdwcm9kdWNlcl9yZXF1ZXN0X2hvbGQnIHwgJ3Byb2R1Y2VyX2V4Y2VwdGlvbicgfCAnY29uc3VtZXJfYmFja2xvZ19ldmljdGlvbic7XG59XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZXNwYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbWVzc2FnaW5nLW1hbmFnZW1lbnQvYXBpL21vZGVsL25hbWVzcGFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWVzc2FnaW5nTmFtZXNwYWNlUHVibGlzaGVycyB9IGZyb20gJy4vbmFtZXNwYWNlUHVibGlzaGVycyc7XG5pbXBvcnQgeyBNZXNzYWdpbmdOYW1lc3BhY2VTdWJzY3JpYmVycyB9IGZyb20gJy4vbmFtZXNwYWNlU3Vic2NyaWJlcnMnO1xuaW1wb3J0IHsgTWVzc2FnaW5nTmFtZXNwYWNlVG9waWNzIH0gZnJvbSAnLi9uYW1lc3BhY2VUb3BpY3MnO1xuXG4vKipcbiAqIFNlcnZpY2UgdG8gYmUgbW9uaXRvcmVkIGFuZCBtYW5hZ2VkLCBlLmcuIE5vdGlmaWNhdGlvbnMgMi4wIG9yIE1RVFRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdpbmdOYW1lc3BhY2Uge1xuICBuYW1lPzogc3RyaW5nO1xuICB0b3BpY3M/OiBNZXNzYWdpbmdOYW1lc3BhY2VUb3BpY3M7XG4gIHN1YnNjcmliZXJzPzogTWVzc2FnaW5nTmFtZXNwYWNlU3Vic2NyaWJlcnM7XG4gIHB1Ymxpc2hlcnM/OiBNZXNzYWdpbmdOYW1lc3BhY2VQdWJsaXNoZXJzO1xufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZXNwYWNlRGV0YWlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL21lc3NhZ2luZy1tYW5hZ2VtZW50L2FwaS9tb2RlbC9uYW1lc3BhY2VEZXRhaWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNZXNzYWdpbmdOYW1lc3BhY2VQb2xpY2llcyBhcyBNZXNzYWdpbmdOYW1lc3BhY2VQb2xpY2llcyB9IGZyb20gJy4vbmFtZXNwYWNlUG9saWNpZXMnO1xuaW1wb3J0IHsgTWVzc2FnaW5nTmFtZXNwYWNlIH0gZnJvbSAnLi9uYW1lc3BhY2UnO1xuXG5leHBvcnQgdHlwZSBNZXNzYWdpbmdOYW1lc3BhY2VEZXRhaWxzID0ge1xuICBpZDogc3RyaW5nO1xuICBuYW1lc3BhY2U/OiBNZXNzYWdpbmdOYW1lc3BhY2U7XG4gIHBvbGljaWVzPzogTWVzc2FnaW5nTmFtZXNwYWNlUG9saWNpZXM7XG59O1xuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZXNwYWNlTGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL21lc3NhZ2luZy1tYW5hZ2VtZW50L2FwaS9tb2RlbC9uYW1lc3BhY2VMaXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNZXNzYWdpbmdOYW1lc3BhY2UgfSBmcm9tICcuL25hbWVzcGFjZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnaW5nTmFtZXNwYWNlTGlzdCB7XG4gIG5hbWVzcGFjZXM/OiBNZXNzYWdpbmdOYW1lc3BhY2VbXTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZXNwYWNlUG9saWNpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9tZXNzYWdpbmctbWFuYWdlbWVudC9hcGkvbW9kZWwvbmFtZXNwYWNlUG9saWNpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1lc3NhZ2luZ05hbWVzcGFjZUJhY2tsb2dRdW90YSB9IGZyb20gJy4vYmFja2xvZ1F1b3RhJztcblxuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdpbmdOYW1lc3BhY2VQb2xpY2llcyB7XG4gIGJhY2tsb2dRdW90YT86IE1lc3NhZ2luZ05hbWVzcGFjZUJhY2tsb2dRdW90YTtcbiAgLyoqXG4gICAqIE1lc3NhZ2UgdGltZS10by1saXZlIHZhbHVlIGluIHNlY29uZHMuIERlZmluZXMgdGhlIGFtb3VudCBvZiB0aW1lIGEgbWVzc2FnZSBpcyBhbGxvd2VkIHRvIHN0YXkgdW5hY2tub3dsZWRnZWQuXG4gICAqIEZvciBtb3JlLCBzZWUgaHR0cHM6Ly9wdWxzYXIuYXBhY2hlLm9yZy9kb2NzL25leHQvY29va2Jvb2tzLXJldGVudGlvbi1leHBpcnkvI3RpbWUtdG8tbGl2ZS10dGxcbiAgICovXG4gIG1lc3NhZ2VUVEw/OiBudW1iZXI7XG59XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZXNwYWNlUHVibGlzaGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL21lc3NhZ2luZy1tYW5hZ2VtZW50L2FwaS9tb2RlbC9uYW1lc3BhY2VQdWJsaXNoZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2luZ05hbWVzcGFjZVB1Ymxpc2hlcnMge1xuICBjb3VudD86IG51bWJlcjtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZXNwYWNlU3Vic2NyaWJlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9tZXNzYWdpbmctbWFuYWdlbWVudC9hcGkvbW9kZWwvbmFtZXNwYWNlU3Vic2NyaWJlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnaW5nTmFtZXNwYWNlU3Vic2NyaWJlcnMge1xuICBjb3VudD86IG51bWJlcjtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZXNwYWNlVG9waWNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbWVzc2FnaW5nLW1hbmFnZW1lbnQvYXBpL21vZGVsL25hbWVzcGFjZVRvcGljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBNZXNzYWdpbmdOYW1lc3BhY2VUb3BpY3Mge1xuICBjb3VudD86IG51bWJlcjtcbiAgbGltaXQ/OiBudW1iZXI7XG59XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZVN0YXRpc3RpY3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9tZXNzYWdpbmctbWFuYWdlbWVudC9hcGkvbW9kZWwvcGFnZVN0YXRpc3RpY3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBQYWdpbmF0aW9uIHN0YXRpc3RpY3MuICovXG5leHBvcnQgdHlwZSBQYWdlU3RhdGlzdGljcyA9IHtcbiAgLyoqIFRoZSBjdXJyZW50IHBhZ2UgbnVtYmVyLiAqL1xuICBjdXJyZW50UGFnZT86IG51bWJlcjtcbiAgLyoqIFRoZSBudW1iZXIgb2YgaXRlbXMgcGVyIHBhZ2UuICovXG4gIHBhZ2VTaXplPzogbnVtYmVyO1xuICAvKiogVGhlIHRvdGFsIG51bWJlciBvZiBwYWdlcy4gKi9cbiAgdG90YWxQYWdlcz86IG51bWJlcjtcbiAgLyoqIFRoZSB0b3RhbCBudW1iZXIgb2YgZWxlbWVudHMuICovXG4gIHRvdGFsRWxlbWVudHM/OiBudW1iZXI7XG59O1xuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZWFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9tZXNzYWdpbmctbWFuYWdlbWVudC9hcGkvbW9kZWwvcGFnZWFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBQYWdpbmcgcXVlcnkgcGFyYW1ldGVycy4gKi9cbmV4cG9ydCB0eXBlIFBhZ2VhYmxlID0ge1xuICAvKiogTWF4aW11bSBudW1iZXIgb2YgaXRlbXMgcmV0dXJuZWQgaW4gcmVzcG9uc2UuICovXG4gIHBhZ2VTaXplPzogbnVtYmVyO1xuICAvKiogQ3VycmVudCBwYWdlIG51bWJlci4gKi9cbiAgY3VycmVudFBhZ2U/OiBudW1iZXI7XG59O1xuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9tZXNzYWdpbmctbWFuYWdlbWVudC9hcGkvbW9kZWwvc29ydGFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBTb3J0aW5nIHF1ZXJ5IHBhcmFtZXRlcnMuICovXG5leHBvcnQgdHlwZSBTb3J0YWJsZSA9IHtcbiAgLyoqIFNvcnQgZGVzY3JpcHRpb24gaW4gZm9ybWF0IGBmaWVsZCxkaXJlY3Rpb25gLiBEaXJlY3Rpb24gY2FuIGJlIGBhc2NgIG9yIGBkZXNjYC4gKi9cbiAgc29ydD86IHN0cmluZztcbn07XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaWJlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL21lc3NhZ2luZy1tYW5hZ2VtZW50L2FwaS9tb2RlbC9zdWJzY3JpYmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2luZ1N1YnNjcmliZXIge1xuICAvLyBUT0RPOiBpdCB3aWxsICBiZSBjaGFuZ2VkIHRvIFwiU3Vic2NyaXB0aW9uXCJcbiAgLyoqXG4gICAqIE5hbWUgb2Ygc3Vic2NyaXB0aW9uXG4gICAqL1xuICBuYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogTnVtYmVyIG9mIGFjdGl2ZSBjbGllbnRzIHN1YnNjcmliZSB1c2luZyB0aGlzIHN1YnNjcmlwdGlvblxuICAgKi9cbiAgYWN0aXZlQ2xpZW50cz86IG51bWJlcjtcbiAgLyoqXG4gICAqIE51bWJlciBvZiBtZXNzYWdlcyBjb25zdW1lZCBhbmQgYWNrbm93bGVkZ2VkIHBlciBzZWNvbmRcbiAgICovXG4gIG1lc3NhZ2VBY2tSYXRlPzogbnVtYmVyO1xuICAvKipcbiAgICogTnVtYmVyIG9mIG1lc3NhZ2VzIGluIHRoZSBzdWJzY3JpcHRpb24gdG8gYmUgY29uc3VtZWRcbiAgICovXG4gIG1zZ0JhY2tsb2c/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaW1lc3RhbXAgb2YgdGhlIGxhc3QgYWNrbm93bGVkZ2VkIG1lc3NhZ2VcbiAgICovXG4gIGxhc3RBY2tub3dsZWRnZVRpbWVzdGFtcD86IHN0cmluZztcbiAgLyoqXG4gICAqIFBlcmNlbnRhZ2Ugb2YgdGhlIGJhY2tsb2cgdXNlZC4gVmFsdWUgcmFuZ2UgaXMgZnJvbSAwIHRvIDEwMC5cbiAgICogRS5nLiBpZiAxMCUgb2YgdGhlIGJhY2tsb2cgaXMgdXNlZCwgdGhpcyB2YWx1ZSB3aWxsIGJlIDEwIChub3QgMC4xKS5cbiAgICovXG4gIGJhY2tsb2dVc2FnZVBlcmNlbnRhZ2U/OiBudW1iZXI7XG59XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaWJlckZpbHRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9tZXNzYWdpbmctbWFuYWdlbWVudC9hcGkvbW9kZWwvc3Vic2NyaWJlckZpbHRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBhZ2VhYmxlIH0gZnJvbSAnLi9wYWdlYWJsZSc7XG5pbXBvcnQgeyBTb3J0YWJsZSB9IGZyb20gJy4vc29ydGFibGUnO1xuaW1wb3J0IHsgTWVzc2FnaW5nVG9waWNUeXBlIH0gZnJvbSAnLi90b3BpY1R5cGUnO1xuXG4vKiogRmlsdGVycyBmb3Igc3Vic2NyaWJlcnMgbGlzdC4gKi9cbmV4cG9ydCB0eXBlIE1lc3NhZ2luZ1N1YnNjcmliZXJGaWx0ZXJzID0ge1xuICB0ZW5hbnQ6IHN0cmluZztcbiAgbmFtZXNwYWNlOiBzdHJpbmc7XG4gIHRvcGljOiBzdHJpbmc7XG4gIHR5cGU6IE1lc3NhZ2luZ1RvcGljVHlwZTtcbiAgLyoqIFN1YnNjcmliZXIgbmFtZSBvciBhIHBhcnQgb2YgdGhlIG5hbWUuIFNlYXJjaCB3aWxsIGJlIGRvbmUgYnkgYXBwbHlpbmcgdGhlIHJlZ2V4IGxpa2UgYC4qZ2l2ZW5OYW1lLipgLiAqL1xuICBuYW1lPzogc3RyaW5nO1xufSAmIFBhZ2VhYmxlICZcbiAgU29ydGFibGU7XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaWJlckxpc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9tZXNzYWdpbmctbWFuYWdlbWVudC9hcGkvbW9kZWwvc3Vic2NyaWJlckxpc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBhZ2VTdGF0aXN0aWNzIH0gZnJvbSAnLi9wYWdlU3RhdGlzdGljcyc7XG5pbXBvcnQgeyBNZXNzYWdpbmdTdWJzY3JpYmVyIH0gZnJvbSAnLi9zdWJzY3JpYmVyJztcblxuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdpbmdTdWJzY3JpYmVyTGlzdCB7XG4gIHN1YnNjcmliZXJzPzogTWVzc2FnaW5nU3Vic2NyaWJlcltdOyAvLyBUT0RPOiB3aWxsIGJlIGNoYW5nZWQgdG8gJ3N1YnNjcmlwdGlvbnMnXG4gIHBhZ2VTdGF0aXN0aWNzPzogUGFnZVN0YXRpc3RpY3M7XG59XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaWJlclRvRGVsZXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbWVzc2FnaW5nLW1hbmFnZW1lbnQvYXBpL21vZGVsL3N1YnNjcmliZXJUb0RlbGV0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWVzc2FnaW5nU3Vic2NyaWJlciB9IGZyb20gJy4vc3Vic2NyaWJlcic7XG5pbXBvcnQgeyBNZXNzYWdpbmdUb3BpY1R5cGUgfSBmcm9tICcuL3RvcGljVHlwZSc7XG5cbi8qKlxuICogRGF0YSBuZWNlc3NhcnkgZm9yIGRlbGV0aW5nIGEgc3Vic2NyaWJlci5cbiAqL1xuZXhwb3J0IHR5cGUgTWVzc2FnaW5nU3Vic2NyaWJlclRvRGVsZXRlID0gTWVzc2FnaW5nU3Vic2NyaWJlciAmIHtcbiAgdGVuYW50OiBzdHJpbmc7XG4gIG5hbWVzcGFjZTogc3RyaW5nO1xuICB0b3BpYzogc3RyaW5nO1xuICB0eXBlOiBNZXNzYWdpbmdUb3BpY1R5cGU7XG59O1xuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9waWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9tZXNzYWdpbmctbWFuYWdlbWVudC9hcGkvbW9kZWwvdG9waWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnaW5nVG9waWMge1xuICAvKipcbiAgICogVW5pcXVlIHRvcGljIGlkZW50aWZpZXIuXG4gICAqL1xuICBpZD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRlbmFudCBJRC5cbiAgICovXG4gIHRlbmFudD86IHN0cmluZztcbiAgLyoqXG4gICAqIFVzZXItZnJpZW5kbHkgdG9waWMgbmFtZS5cbiAgICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBOYW1lc3BhY2UgbmFtZSB0aGF0IHRoZSB0b3BpYyBiZWxvbmdzIHRvLlxuICAgKi9cbiAgbmFtZXNwYWNlPzogc3RyaW5nO1xuICAvKipcbiAgICogSWYgdGhlIHRvcGljIGlzIHBlcnNpc3RlbnQgb3Igbm90LiBJZiBmYWxzZSwgdGhlIHRvcGljIGlzIG5vdCBzYXZlZCBhbmQgd2lsbCBiZSBkZWxldGVkIGlmIHRoZXJlIGFyZSBubyBjbGllbnRzLlxuICAgKi9cbiAgcGVyc2lzdGVudD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUb3RhbCByYXRlIG9mIG1lc3NhZ2VzIHB1Ymxpc2hlZCBvbiB0aGUgdG9waWMgKG1zZy9zKS5cbiAgICovXG4gIG1zZ1JhdGVJbj86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRvdGFsIHJhdGUgb2YgbWVzc2FnZXMgZGlzcGF0Y2hlZCBmb3IgdGhlIHRvcGljIChtc2cvcykuXG4gICAqL1xuICBtc2dSYXRlT3V0PzogbnVtYmVyO1xuICAvKipcbiAgICogTnVtYmVyIG9mIGFsbCBzdWJzY3JpYmVycyBmb3IgdGhlIHRvcGljLlxuICAgKi9cbiAgc3Vic2NyaWJlcnM/OiBudW1iZXI7IC8vIFRPRE86IHdpbGwgYmUgY2hhbmdlZCB0byAnc3Vic2NyaXB0aW9ucydcbiAgLyoqXG4gICAqIE51bWJlciBvZiBjdXJyZW50bHkgYWN0aXZlIHN1YnNjcmliZXJzLCBtZWFuaW5nIHRoZSBvbmVzIHdpdGggYXQgbGVhc3Qgb25lIGNsaWVudCBjb25uZWN0ZWQuXG4gICAqL1xuICBhY3RpdmVTdWJzY3JpYmVycz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFNpemUgb2YgdGhlIG1lc3NhZ2VzIGJhY2tsb2cgaW4gYnl0ZXMuXG4gICAqL1xuICBiYWNrbG9nU2l6ZT86IG51bWJlcjtcbiAgLyoqXG4gICAqIFBlcmNlbnRhZ2Ugb2YgdGhlIGJhY2tsb2cgdXNlZC4gVmFsdWUgcmFuZ2UgaXMgZnJvbSBvIHRvIDEwMC5cbiAgICogRS5nLiBpZiAxMCUgb2YgdGhlIGJhY2tsb2cgaXMgdXNlZCwgdGhpcyB2YWx1ZSB3aWxsIGJlIDEwIChub3QgMC4xKS5cbiAgICovXG4gIGJhY2tsb2dVc2FnZVBlcmNlbnRhZ2U/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgdW5hY2tub3dsZWRnZWQgbWVzc2FnZXMgaW4gdGhlIGJhY2tsb2cgZm9yIHRvcGljIGZvciBhbGwgc3Vic2NyaWJlcnMuXG4gICAqL1xuICB1bmFja01zZ0JhY2tsb2c/OiBudW1iZXI7XG59XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9waWNEZXRhaWxGaWx0ZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbWVzc2FnaW5nLW1hbmFnZW1lbnQvYXBpL21vZGVsL3RvcGljRGV0YWlsRmlsdGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWVzc2FnaW5nVG9waWNUeXBlIH0gZnJvbSAnLi90b3BpY1R5cGUnO1xuXG4vKiogRmlsdGVycyBmb3IgdG9waWNzIGxpc3QuICovXG5leHBvcnQgdHlwZSBNZXNzYWdpbmdUb3BpY0RldGFpbEZpbHRlcnMgPSB7XG4gIHRlbmFudDogc3RyaW5nO1xuICBuYW1lc3BhY2U6IHN0cmluZztcbiAgdG9waWM6IHN0cmluZztcbiAgdHlwZTogTWVzc2FnaW5nVG9waWNUeXBlO1xufTtcbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9waWNMaXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbWVzc2FnaW5nLW1hbmFnZW1lbnQvYXBpL21vZGVsL3RvcGljTGlzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGFnZVN0YXRpc3RpY3MgfSBmcm9tICcuL3BhZ2VTdGF0aXN0aWNzJztcbmltcG9ydCB7IE1lc3NhZ2luZ1RvcGljIH0gZnJvbSAnLi90b3BpYyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnaW5nVG9waWNMaXN0IHtcbiAgdG9waWNzPzogTWVzc2FnaW5nVG9waWNbXTtcbiAgcGFnZVN0YXRpc3RpY3M/OiBQYWdlU3RhdGlzdGljcztcbn1cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9waWNMaXN0RmlsdGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL21lc3NhZ2luZy1tYW5hZ2VtZW50L2FwaS9tb2RlbC90b3BpY0xpc3RGaWx0ZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQYWdlYWJsZSB9IGZyb20gJy4vcGFnZWFibGUnO1xuaW1wb3J0IHsgU29ydGFibGUgfSBmcm9tICcuL3NvcnRhYmxlJztcblxuLyoqIEZpbHRlcnMgZm9yIHRvcGljcyBsaXN0LiAqL1xuZXhwb3J0IHR5cGUgTWVzc2FnaW5nVG9waWNMaXN0RmlsdGVycyA9IHtcbiAgdGVuYW50OiBzdHJpbmc7XG4gIG5hbWVzcGFjZTogc3RyaW5nO1xuICAvKiogVG9waWMgbmFtZSBvciBhIHBhcnQgb2YgdGhlIG5hbWUuIFNlYXJjaCB3aWxsIGJlIGRvbmUgYnkgYXBwbHlpbmcgdGhlIHJlZ2V4IGxpa2UgYC4qZ2l2ZW5OYW1lLipgLiAqL1xuICBuYW1lPzogc3RyaW5nO1xuICAvKiogVmFsdWUgZm9yIHR5cGUgcXVlcnkgcGFyYW0gd2hpY2ggY291bGQgYmUgXCJwZXJzaXN0ZW50XCIsIFwibm9uLXBlcnNpc3RlbnRcIiBvciBcImFsbFwiLiAqL1xuICB0eXBlPzogJ3BlcnNpc3RlbnQnIHwgJ25vbi1wZXJzaXN0ZW50JyB8ICdhbGwnO1xufSAmIFBhZ2VhYmxlICZcbiAgU29ydGFibGU7XG4iXX0=
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* If the topic is persistent or not. If false, the topic is not saved and will be deleted if there are no clients.
|
|
3
|
+
*/
|
|
4
|
+
export var MessagingTopicType;
|
|
5
|
+
(function (MessagingTopicType) {
|
|
6
|
+
MessagingTopicType["Persistent"] = "persistent";
|
|
7
|
+
MessagingTopicType["NonPersistent"] = "non-persistent";
|
|
8
|
+
})(MessagingTopicType || (MessagingTopicType = {}));
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9waWNUeXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbWVzc2FnaW5nLW1hbmFnZW1lbnQvYXBpL21vZGVsL3RvcGljVHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLGtCQUdYO0FBSEQsV0FBWSxrQkFBa0I7SUFDNUIsK0NBQXlCLENBQUE7SUFDekIsc0RBQWdDLENBQUE7QUFDbEMsQ0FBQyxFQUhXLGtCQUFrQixLQUFsQixrQkFBa0IsUUFHN0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIElmIHRoZSB0b3BpYyBpcyBwZXJzaXN0ZW50IG9yIG5vdC4gSWYgZmFsc2UsIHRoZSB0b3BpYyBpcyBub3Qgc2F2ZWQgYW5kIHdpbGwgYmUgZGVsZXRlZCBpZiB0aGVyZSBhcmUgbm8gY2xpZW50cy5cbiAqL1xuZXhwb3J0IGVudW0gTWVzc2FnaW5nVG9waWNUeXBlIHtcbiAgUGVyc2lzdGVudCA9ICdwZXJzaXN0ZW50JyxcbiAgTm9uUGVyc2lzdGVudCA9ICdub24tcGVyc2lzdGVudCdcbn1cbiJdfQ==
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { inject, Injectable } from '@angular/core';
|
|
2
|
+
import { FetchClient, Service } from '@c8y/client';
|
|
3
|
+
import { AlertService } from '@c8y/ngx-components';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@c8y/client";
|
|
6
|
+
export class MessagingNamespacesService extends Service {
|
|
7
|
+
constructor(client) {
|
|
8
|
+
super(client);
|
|
9
|
+
this.baseUrl = '/service/messaging-management';
|
|
10
|
+
this.listUrl = 'tenants';
|
|
11
|
+
this.alertService = inject(AlertService);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Get namespace list for a tenant
|
|
15
|
+
*
|
|
16
|
+
* @param tenant Tenant id
|
|
17
|
+
* @return Namespaces list
|
|
18
|
+
*/
|
|
19
|
+
async getNamespaces(tenant) {
|
|
20
|
+
const namespacesUrl = `/${this.listUrl}/${tenant}/namespaces`;
|
|
21
|
+
return this.fetch(namespacesUrl).then(res => res.json());
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Get namespace.
|
|
25
|
+
*
|
|
26
|
+
* @param tenant Tenant ID.
|
|
27
|
+
* @param namespace Name of namespace.
|
|
28
|
+
* @return Namespace.
|
|
29
|
+
*/
|
|
30
|
+
async getNamespace(tenant, namespace) {
|
|
31
|
+
const namespaceUrl = `/${this.listUrl}/${tenant}/namespaces/${namespace}`;
|
|
32
|
+
return this.fetch(namespaceUrl).then(res => res.json());
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Get namespace policies
|
|
36
|
+
*
|
|
37
|
+
* @param tenant Tenant id
|
|
38
|
+
* @param namespace Name of namespace
|
|
39
|
+
* @return Namespaces policies
|
|
40
|
+
*/
|
|
41
|
+
async getNamespacePolicies(tenant, namespace) {
|
|
42
|
+
const policiesUrl = `/${this.listUrl}/${tenant}/namespaces/${namespace}/policies`;
|
|
43
|
+
return this.fetch(policiesUrl).then(res => res.json());
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Get single namespace details
|
|
47
|
+
* @param tenant Tenant ID
|
|
48
|
+
* @param namespaceName Namespace name
|
|
49
|
+
* @return Namespace with details
|
|
50
|
+
*/
|
|
51
|
+
async getNamespaceDetails(tenant, namespaceName) {
|
|
52
|
+
const namespace = await this.getNamespace(tenant, namespaceName);
|
|
53
|
+
const policies = await this.getNamespacePolicies(tenant, namespaceName);
|
|
54
|
+
return {
|
|
55
|
+
id: namespaceName,
|
|
56
|
+
namespace,
|
|
57
|
+
policies
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Get namespaces with details
|
|
62
|
+
*
|
|
63
|
+
* @param tenant Tenant ID
|
|
64
|
+
* @return Namespaces with details
|
|
65
|
+
*/
|
|
66
|
+
async getNamespacesDetails(tenant) {
|
|
67
|
+
try {
|
|
68
|
+
const { namespaces } = await this.getNamespaces(tenant);
|
|
69
|
+
return Promise.all(namespaces.map(async (namespace) => this.getNamespaceDetails(tenant, namespace.name)));
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
this.alertService.addServerFailure(error);
|
|
73
|
+
return [];
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MessagingNamespacesService, deps: [{ token: i1.FetchClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
77
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MessagingNamespacesService, providedIn: 'root' }); }
|
|
78
|
+
}
|
|
79
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MessagingNamespacesService, decorators: [{
|
|
80
|
+
type: Injectable,
|
|
81
|
+
args: [{ providedIn: 'root' }]
|
|
82
|
+
}], ctorParameters: () => [{ type: i1.FetchClient }] });
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnaW5nLW5hbWVzcGFjZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL21lc3NhZ2luZy1tYW5hZ2VtZW50L2FwaS9zZXJ2aWNlcy9tZXNzYWdpbmctbmFtZXNwYWNlcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSW5ELE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7O0FBR25ELE1BQU0sT0FBTywwQkFBMkIsU0FBUSxPQUFZO0lBTTFELFlBQVksTUFBbUI7UUFDN0IsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBTk4sWUFBTyxHQUFHLCtCQUErQixDQUFDO1FBQzFDLFlBQU8sR0FBRyxTQUFTLENBQUM7UUFFdEIsaUJBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7SUFJNUMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFjO1FBQ2hDLE1BQU0sYUFBYSxHQUFHLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQztRQUM5RCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBYyxFQUFFLFNBQWlCO1FBQ2xELE1BQU0sWUFBWSxHQUFHLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxNQUFNLGVBQWUsU0FBUyxFQUFFLENBQUM7UUFDMUUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsb0JBQW9CLENBQ3hCLE1BQWMsRUFDZCxTQUFpQjtRQUVqQixNQUFNLFdBQVcsR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksTUFBTSxlQUFlLFNBQVMsV0FBVyxDQUFDO1FBQ2xGLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsbUJBQW1CLENBQ3ZCLE1BQWMsRUFDZCxhQUFxQjtRQUVyQixNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztRQUN4RSxPQUFPO1lBQ0wsRUFBRSxFQUFFLGFBQWE7WUFDakIsU0FBUztZQUNULFFBQVE7U0FDVCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLG9CQUFvQixDQUFDLE1BQWM7UUFDdkMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN4RCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQ2hCLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFDLFNBQVMsRUFBQyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDcEYsQ0FBQztRQUNKLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxQyxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7SUFDSCxDQUFDOytHQW5GVSwwQkFBMEI7bUhBQTFCLDBCQUEwQixjQURiLE1BQU07OzRGQUNuQiwwQkFBMEI7a0JBRHRDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNZXNzYWdpbmdOYW1lc3BhY2VMaXN0IH0gZnJvbSAnLi4vbW9kZWwvbmFtZXNwYWNlTGlzdCc7XG5pbXBvcnQgeyBNZXNzYWdpbmdOYW1lc3BhY2VQb2xpY2llcyB9IGZyb20gJy4uL21vZGVsL25hbWVzcGFjZVBvbGljaWVzJztcbmltcG9ydCB7IE1lc3NhZ2luZ05hbWVzcGFjZSB9IGZyb20gJy4uL21vZGVsL25hbWVzcGFjZSc7XG5pbXBvcnQgeyBGZXRjaENsaWVudCwgU2VydmljZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IE1lc3NhZ2luZ05hbWVzcGFjZURldGFpbHMgfSBmcm9tICcuLi9tb2RlbC9uYW1lc3BhY2VEZXRhaWxzJztcbmltcG9ydCB7IEFsZXJ0U2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIE1lc3NhZ2luZ05hbWVzcGFjZXNTZXJ2aWNlIGV4dGVuZHMgU2VydmljZTxhbnk+IHtcbiAgcHJvdGVjdGVkIGJhc2VVcmwgPSAnL3NlcnZpY2UvbWVzc2FnaW5nLW1hbmFnZW1lbnQnO1xuICBwcm90ZWN0ZWQgbGlzdFVybCA9ICd0ZW5hbnRzJztcblxuICBwcml2YXRlIGFsZXJ0U2VydmljZSA9IGluamVjdChBbGVydFNlcnZpY2UpO1xuXG4gIGNvbnN0cnVjdG9yKGNsaWVudDogRmV0Y2hDbGllbnQpIHtcbiAgICBzdXBlcihjbGllbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBuYW1lc3BhY2UgbGlzdCBmb3IgYSB0ZW5hbnRcbiAgICpcbiAgICogQHBhcmFtIHRlbmFudCBUZW5hbnQgaWRcbiAgICogQHJldHVybiBOYW1lc3BhY2VzIGxpc3RcbiAgICovXG4gIGFzeW5jIGdldE5hbWVzcGFjZXModGVuYW50OiBzdHJpbmcpOiBQcm9taXNlPE1lc3NhZ2luZ05hbWVzcGFjZUxpc3Q+IHtcbiAgICBjb25zdCBuYW1lc3BhY2VzVXJsID0gYC8ke3RoaXMubGlzdFVybH0vJHt0ZW5hbnR9L25hbWVzcGFjZXNgO1xuICAgIHJldHVybiB0aGlzLmZldGNoKG5hbWVzcGFjZXNVcmwpLnRoZW4ocmVzID0+IHJlcy5qc29uKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBuYW1lc3BhY2UuXG4gICAqXG4gICAqIEBwYXJhbSB0ZW5hbnQgVGVuYW50IElELlxuICAgKiBAcGFyYW0gbmFtZXNwYWNlIE5hbWUgb2YgbmFtZXNwYWNlLlxuICAgKiBAcmV0dXJuIE5hbWVzcGFjZS5cbiAgICovXG4gIGFzeW5jIGdldE5hbWVzcGFjZSh0ZW5hbnQ6IHN0cmluZywgbmFtZXNwYWNlOiBzdHJpbmcpOiBQcm9taXNlPE1lc3NhZ2luZ05hbWVzcGFjZT4ge1xuICAgIGNvbnN0IG5hbWVzcGFjZVVybCA9IGAvJHt0aGlzLmxpc3RVcmx9LyR7dGVuYW50fS9uYW1lc3BhY2VzLyR7bmFtZXNwYWNlfWA7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2gobmFtZXNwYWNlVXJsKS50aGVuKHJlcyA9PiByZXMuanNvbigpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbmFtZXNwYWNlIHBvbGljaWVzXG4gICAqXG4gICAqIEBwYXJhbSB0ZW5hbnQgVGVuYW50IGlkXG4gICAqIEBwYXJhbSBuYW1lc3BhY2UgTmFtZSBvZiBuYW1lc3BhY2VcbiAgICogQHJldHVybiBOYW1lc3BhY2VzIHBvbGljaWVzXG4gICAqL1xuICBhc3luYyBnZXROYW1lc3BhY2VQb2xpY2llcyhcbiAgICB0ZW5hbnQ6IHN0cmluZyxcbiAgICBuYW1lc3BhY2U6IHN0cmluZ1xuICApOiBQcm9taXNlPE1lc3NhZ2luZ05hbWVzcGFjZVBvbGljaWVzPiB7XG4gICAgY29uc3QgcG9saWNpZXNVcmwgPSBgLyR7dGhpcy5saXN0VXJsfS8ke3RlbmFudH0vbmFtZXNwYWNlcy8ke25hbWVzcGFjZX0vcG9saWNpZXNgO1xuICAgIHJldHVybiB0aGlzLmZldGNoKHBvbGljaWVzVXJsKS50aGVuKHJlcyA9PiByZXMuanNvbigpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc2luZ2xlIG5hbWVzcGFjZSBkZXRhaWxzXG4gICAqIEBwYXJhbSB0ZW5hbnQgVGVuYW50IElEXG4gICAqIEBwYXJhbSBuYW1lc3BhY2VOYW1lIE5hbWVzcGFjZSBuYW1lXG4gICAqIEByZXR1cm4gTmFtZXNwYWNlIHdpdGggZGV0YWlsc1xuICAgKi9cbiAgYXN5bmMgZ2V0TmFtZXNwYWNlRGV0YWlscyhcbiAgICB0ZW5hbnQ6IHN0cmluZyxcbiAgICBuYW1lc3BhY2VOYW1lOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxNZXNzYWdpbmdOYW1lc3BhY2VEZXRhaWxzPiB7XG4gICAgY29uc3QgbmFtZXNwYWNlID0gYXdhaXQgdGhpcy5nZXROYW1lc3BhY2UodGVuYW50LCBuYW1lc3BhY2VOYW1lKTtcbiAgICBjb25zdCBwb2xpY2llcyA9IGF3YWl0IHRoaXMuZ2V0TmFtZXNwYWNlUG9saWNpZXModGVuYW50LCBuYW1lc3BhY2VOYW1lKTtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IG5hbWVzcGFjZU5hbWUsXG4gICAgICBuYW1lc3BhY2UsXG4gICAgICBwb2xpY2llc1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IG5hbWVzcGFjZXMgd2l0aCBkZXRhaWxzXG4gICAqXG4gICAqIEBwYXJhbSB0ZW5hbnQgVGVuYW50IElEXG4gICAqIEByZXR1cm4gTmFtZXNwYWNlcyB3aXRoIGRldGFpbHNcbiAgICovXG4gIGFzeW5jIGdldE5hbWVzcGFjZXNEZXRhaWxzKHRlbmFudDogc3RyaW5nKTogUHJvbWlzZTxNZXNzYWdpbmdOYW1lc3BhY2VEZXRhaWxzW10+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBuYW1lc3BhY2VzIH0gPSBhd2FpdCB0aGlzLmdldE5hbWVzcGFjZXModGVuYW50KTtcbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgICAgbmFtZXNwYWNlcy5tYXAoYXN5bmMgbmFtZXNwYWNlID0+IHRoaXMuZ2V0TmFtZXNwYWNlRGV0YWlscyh0ZW5hbnQsIG5hbWVzcGFjZS5uYW1lKSlcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZXJyb3IpO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxufVxuIl19
|