@oneteme/jquery-organizer 0.0.2 → 0.0.4

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/README.md CHANGED
@@ -137,6 +137,17 @@ export interface OrganizerConfig {
137
137
  onPreferencesSave?: () => void;
138
138
  onPreferencesClear?: () => void;
139
139
 
140
+ // Actions du visuel
141
+ showActions?: boolean;
142
+ actions?: {
143
+ label?: string; // Défaut: Action ou Actions selon les entrées visibles
144
+ showCopy?: boolean; // Défaut: true si onCopyVisual est fourni
145
+ showFullscreen?: boolean; // Défaut: true si onToggleFullscreen est fourni
146
+ icon?: string; // Icône Material optionnelle, aucune par défaut
147
+ };
148
+ onCopyVisual?: () => void;
149
+ onToggleFullscreen?: () => void;
150
+
140
151
  // UI
141
152
  showReset?: boolean; // Défaut: true
142
153
  buttonLabel?: string;
@@ -1,14 +1,24 @@
1
1
  import { buildYFields, normalizeOrganizerState, resolveYKey } from './organizer-utils';
2
+ import { getGroupItems, getIndicatorItems, getFilterItems, getStackItems } from './organizer-chart-config';
3
+ export { getGroupItems, getIndicatorItems, getFilterItems, getStackItems } from './organizer-chart-config';
2
4
  export function chartConfigToOrganizer(chartConfig, options = {}) {
3
- if (!chartConfig)
5
+ if (!chartConfig) {
6
+ console.debug('[OrganizerChartAdapter] Empty chart config, returning empty organizer config');
4
7
  return {};
8
+ }
9
+ console.debug('[OrganizerChartAdapter] Converting chart config to organizer', {
10
+ hasGroups: !!chartConfig.groups,
11
+ indicatorCount: chartConfig.indicators?.items?.length ?? 0,
12
+ filterCount: chartConfig.filters?.items?.length ?? 0
13
+ });
5
14
  const { onFetchSliceData, onExportVisual, onExportData, switchView } = options;
6
- const activeIndicator = chartConfig.indicators?.items?.find(i => i.selected);
7
- const baseXFields = (chartConfig.groups?.items || [])
15
+ const indicators = getIndicatorItems(chartConfig);
16
+ const activeIndicator = indicators.find(i => i.selected);
17
+ const baseXFields = getGroupItems(chartConfig)
8
18
  .filter(g => !_isSynthetic(g))
9
19
  .map(g => ({ id: g.key, label: g.menu.label || g.key }));
10
- const yFields = buildYFields((chartConfig.indicators?.items || []).map(i => ({ id: i.key, label: i.menu.label || i.key, group: i.group })));
11
- const stackFields = (activeIndicator?.extra?.stacks?.items || [])
20
+ const yFields = buildYFields(indicators.map(i => ({ id: i.key, label: i.menu.label || i.key, group: i.group })));
21
+ const stackFields = getStackItems(activeIndicator)
12
22
  .filter((s) => !_isSynthetic(s))
13
23
  .map((s) => ({ id: s.key, label: s.menu.label || s.key }));
14
24
  const seenKeys = new Set();
@@ -22,7 +32,7 @@ export function chartConfigToOrganizer(chartConfig, options = {}) {
22
32
  xFields: mergedGroupFields,
23
33
  yFields,
24
34
  groups: mergedGroupFields,
25
- slices: (chartConfig.filters?.items || []).map(f => ({ id: f.key, label: f.menu.label || f.key })),
35
+ slices: getFilterItems(chartConfig).map(f => ({ id: f.key, label: f.menu.label || f.key })),
26
36
  templates: chartConfig.templates,
27
37
  showReset: false,
28
38
  onFetchSliceData,
@@ -33,13 +43,22 @@ export function chartConfigToOrganizer(chartConfig, options = {}) {
33
43
  };
34
44
  }
35
45
  export function chartConfigToState(chartConfig) {
36
- if (!chartConfig)
46
+ if (!chartConfig) {
47
+ console.debug('[OrganizerChartAdapter] Empty chart config for state conversion');
37
48
  return {};
38
- const activeIndicator = chartConfig.indicators?.items?.find(i => i.selected);
39
- const activeStack = (activeIndicator?.extra?.stacks?.items || []).find((s) => s.selected);
40
- const activeGroup = chartConfig.groups?.items?.find(g => g.selected);
41
- const activeSlices = (chartConfig.filters?.items || []).filter(f => f.selected);
49
+ }
50
+ const indicators = getIndicatorItems(chartConfig);
51
+ const activeIndicator = indicators.find(i => i.selected);
52
+ const activeStack = getStackItems(activeIndicator).find((s) => s.selected);
53
+ const activeGroup = getGroupItems(chartConfig).find(g => g.selected);
54
+ const activeSlices = getFilterItems(chartConfig).filter(f => f.selected);
42
55
  const indicatorGroup = activeIndicator?.group;
56
+ console.debug('[OrganizerChartAdapter] Current chart state', {
57
+ activeGroup: activeGroup?.key,
58
+ activeIndicator: activeIndicator?.key,
59
+ activeStack: activeStack?.key,
60
+ sliceCount: activeSlices.length
61
+ });
43
62
  const state = {
44
63
  selectedX: activeGroup?.key,
45
64
  selectedY: indicatorGroup ?? activeIndicator?.key,
@@ -68,8 +87,11 @@ export function chartConfigToUnifiedState(chartConfig, viewMode = 'chart') {
68
87
  };
69
88
  }
70
89
  export function applyOrganizerEventToChart(event, chartConfig) {
71
- if (!chartConfig)
90
+ if (!chartConfig) {
91
+ console.debug('[OrganizerChartAdapter] Cannot apply event to empty chart config');
72
92
  return;
93
+ }
94
+ console.debug('[OrganizerChartAdapter] Applying organizer event', { eventType: event.type, state: event.state });
73
95
  const state = event.state;
74
96
  _cleanSynthetics(chartConfig);
75
97
  if (state.selectedX !== undefined)
@@ -83,6 +105,7 @@ export function applyOrganizerEventToChart(event, chartConfig) {
83
105
  event.resolvedYUnit = resolveYUnit(chartConfig, event.state.selectedY, event.state.selectedYAggregate);
84
106
  }
85
107
  export function handleOrganizerChartEvent(event, chartConfig, currentBinding, options = {}) {
108
+ console.debug('[OrganizerChartAdapter] Handling organizer event', { eventType: event.type });
86
109
  if (event.type === 'viewSwitched') {
87
110
  return {
88
111
  binding: {
@@ -111,7 +134,7 @@ export function resolveYUnit(chartConfig, selectedY, selectedYAggregate) {
111
134
  if (!chartConfig || !selectedY)
112
135
  return undefined;
113
136
  const actualKey = resolveYKey(selectedY, selectedYAggregate);
114
- return chartConfig.indicators?.items?.find(i => i.key === actualKey)?.unit;
137
+ return getIndicatorItems(chartConfig).find(i => i.key === actualKey)?.unit;
115
138
  }
116
139
  const _syntheticItems = new WeakSet();
117
140
  function _makeSynthetic(item) {
@@ -122,24 +145,30 @@ function _isSynthetic(item) {
122
145
  return _syntheticItems.has(item);
123
146
  }
124
147
  function _cleanSynthetics(chartConfig) {
125
- chartConfig.groups.items = chartConfig.groups.items.filter(g => !_isSynthetic(g));
126
- chartConfig.indicators.items.forEach(ind => {
127
- if (ind.extra?.stacks?.items) {
128
- ind.extra.stacks.items = ind.extra.stacks.items.filter((s) => !_isSynthetic(s));
129
- }
130
- });
148
+ if (chartConfig.groups?.items) {
149
+ chartConfig.groups.items = chartConfig.groups.items.filter(g => !_isSynthetic(g));
150
+ }
151
+ if (chartConfig.indicators?.items) {
152
+ chartConfig.indicators.items.forEach(ind => {
153
+ if (ind.extra?.stacks?.items) {
154
+ ind.extra.stacks.items = ind.extra.stacks.items.filter((s) => !_isSynthetic(s));
155
+ }
156
+ });
157
+ }
131
158
  }
132
159
  function _applyXSelection(selectedX, chartConfig) {
133
- const isGroupItem = chartConfig.groups.items.some(g => g.key === selectedX);
160
+ const groupItems = getGroupItems(chartConfig);
161
+ const isGroupItem = groupItems.some(g => g.key === selectedX);
134
162
  if (isGroupItem) {
135
- chartConfig.groups.items.forEach(g => { g.selected = g.key === selectedX; });
163
+ groupItems.forEach(g => { g.selected = g.key === selectedX; });
136
164
  return;
137
165
  }
138
- const allStacks = chartConfig.indicators.items.flatMap(i => i.extra?.stacks?.items ?? []);
166
+ const indicators = getIndicatorItems(chartConfig);
167
+ const allStacks = indicators.flatMap(i => getStackItems(i));
139
168
  const stackItem = allStacks.find(s => s.key === selectedX);
140
169
  if (stackItem) {
141
- chartConfig.groups.items.forEach(g => { g.selected = false; });
142
- chartConfig.groups.items.push(_makeSynthetic({
170
+ groupItems.forEach(g => { g.selected = false; });
171
+ groupItems.push(_makeSynthetic({
143
172
  key: stackItem.key,
144
173
  selected: true,
145
174
  menu: stackItem.menu,
@@ -151,14 +180,15 @@ function _applyXSelection(selectedX, chartConfig) {
151
180
  }
152
181
  function _applyYSelection(selectedY, selectedYAggregate, chartConfig) {
153
182
  const actualKey = resolveYKey(selectedY, selectedYAggregate);
154
- chartConfig.indicators.items.forEach(i => { i.selected = i.key === actualKey; });
155
- chartConfig.indicators.items.forEach(i => {
156
- i.extra?.stacks?.items?.forEach((s) => { s.selected = false; });
183
+ const indicators = getIndicatorItems(chartConfig);
184
+ indicators.forEach(i => { i.selected = i.key === actualKey; });
185
+ indicators.forEach(i => {
186
+ getStackItems(i).forEach((s) => { s.selected = false; });
157
187
  });
158
188
  }
159
189
  function _applyGroupBySelection(effectiveGroupBy, chartConfig) {
160
- const activeIndicator = chartConfig.indicators.items.find(i => i.selected);
161
- const stackItems = activeIndicator?.extra?.stacks?.items ?? [];
190
+ const activeIndicator = getIndicatorItems(chartConfig).find(i => i.selected);
191
+ const stackItems = getStackItems(activeIndicator);
162
192
  if (effectiveGroupBy === undefined) {
163
193
  stackItems.forEach(s => { s.selected = false; });
164
194
  return;
@@ -168,7 +198,7 @@ function _applyGroupBySelection(effectiveGroupBy, chartConfig) {
168
198
  stackItems.forEach(s => { s.selected = s.key === effectiveGroupBy; });
169
199
  return;
170
200
  }
171
- const groupItem = chartConfig.groups.items.find(g => g.key === effectiveGroupBy);
201
+ const groupItem = getGroupItems(chartConfig).find(g => g.key === effectiveGroupBy);
172
202
  if (groupItem && activeIndicator) {
173
203
  stackItems.forEach(s => { s.selected = false; });
174
204
  if (!activeIndicator.extra) {
@@ -193,6 +223,6 @@ function _applyGroupBySelection(effectiveGroupBy, chartConfig) {
193
223
  }
194
224
  }
195
225
  function _applySliceSelection(selectedSlices, chartConfig) {
196
- chartConfig.filters?.items?.forEach(f => { f.selected = selectedSlices.includes(f.key); });
226
+ getFilterItems(chartConfig).forEach(f => { f.selected = selectedSlices.includes(f.key); });
197
227
  }
198
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemVyLWNoYXJ0LWFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbmV0ZW1lL2pxdWVyeS1vcmdhbml6ZXIvc3JjL2xpYi9tb2RlbHMvb3JnYW5pemVyLWNoYXJ0LWFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSx1QkFBdUIsRUFBNkIsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFpRGxILE1BQU0sVUFBVSxzQkFBc0IsQ0FDcEMsV0FBZ0IsRUFDaEIsVUFBdUMsRUFBRTtJQUV6QyxJQUFJLENBQUMsV0FBVztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzVCLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUMvRSxNQUFNLGVBQWUsR0FBRyxXQUFXLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFN0UsTUFBTSxXQUFXLEdBQXNCLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1NBQ3JFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUUzRCxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQzFCLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUM5RyxDQUFDO0lBRUYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxlQUFlLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1NBQzlELE1BQU0sQ0FBQyxDQUFDLENBQXFCLEVBQUUsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQXFCLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUVqRixNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBQ25DLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxHQUFHLFdBQVcsRUFBRSxHQUFHLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNwRSxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3JDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPO1FBQ0wsT0FBTyxFQUFFLGlCQUFpQjtRQUMxQixPQUFPO1FBQ1AsTUFBTSxFQUFFLGlCQUFpQjtRQUN6QixNQUFNLEVBQUUsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBdUIsQ0FBQztRQUN4SCxTQUFTLEVBQUUsV0FBVyxDQUFDLFNBQVM7UUFDaEMsU0FBUyxFQUFFLEtBQUs7UUFDaEIsZ0JBQWdCO1FBQ2hCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLElBQUksWUFBWSxDQUFDO1FBQzlDLGNBQWM7UUFDZCxZQUFZO1FBQ1osVUFBVTtLQUNYLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLFdBQWdCO0lBQ2pELElBQUksQ0FBQyxXQUFXO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDNUIsTUFBTSxlQUFlLEdBQUcsV0FBVyxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzdFLE1BQU0sV0FBVyxHQUFHLENBQUMsZUFBZSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQXFCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM5RyxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDckUsTUFBTSxZQUFZLEdBQUcsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEYsTUFBTSxjQUFjLEdBQUcsZUFBZSxFQUFFLEtBQUssQ0FBQztJQUM5QyxNQUFNLEtBQUssR0FBRztRQUNaLFNBQVMsRUFBRSxXQUFXLEVBQUUsR0FBRztRQUMzQixTQUFTLEVBQUUsY0FBYyxJQUFJLGVBQWUsRUFBRSxHQUFHO1FBQ2pELGtCQUFrQixFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUNyRSxlQUFlLEVBQUUsV0FBVyxFQUFFLEdBQUc7UUFDakMsY0FBYyxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0tBQzdDLENBQUM7SUFDRixNQUFNLGVBQWUsR0FBRyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM1RCxPQUFPLHVCQUF1QixDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsQ0FBQztBQUN6RCxDQUFDO0FBRUQsTUFBTSxVQUFVLDBCQUEwQixDQUN4QyxXQUFnQixFQUNoQixVQUF1QyxFQUFFO0lBRXpDLE9BQU87UUFDTCxNQUFNLEVBQUUsc0JBQXNCLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQztRQUNwRCxLQUFLLEVBQUUsa0JBQWtCLENBQUMsV0FBVyxDQUFDO0tBQ3ZDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLHlCQUF5QixDQUN2QyxXQUFnQixFQUNoQixXQUE4QixPQUFPO0lBRXJDLE1BQU0sS0FBSyxHQUFHLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzlDLE9BQU87UUFDTCxRQUFRO1FBQ1IsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1FBQzFCLE1BQU0sRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsa0JBQWtCLENBQUM7UUFDOUQsZUFBZSxFQUFFLEtBQUssQ0FBQyxrQkFBa0I7UUFDekMsU0FBUyxFQUFFLEtBQUssQ0FBQyxlQUFlO1FBQ2hDLE9BQU8sRUFBRSxLQUFLLENBQUMsY0FBYztLQUM5QixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSwwQkFBMEIsQ0FDeEMsS0FBMkIsRUFDM0IsV0FBZ0I7SUFFaEIsSUFBSSxDQUFDLFdBQVc7UUFBRSxPQUFPO0lBQ3pCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDMUIsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDOUIsSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLFNBQVM7UUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ2xGLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxTQUFTO1FBQUUsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsa0JBQWtCLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDNUcsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsZUFBZSxLQUFLLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUN2RyxzQkFBc0IsQ0FBQyxnQkFBZ0IsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN0RCxJQUFJLEtBQUssQ0FBQyxjQUFjLEtBQUssU0FBUztRQUFFLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDaEcsS0FBSyxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUN6RyxDQUFDO0FBRUQsTUFBTSxVQUFVLHlCQUF5QixDQUN2QyxLQUEyQixFQUMzQixXQUFnQixFQUNoQixjQUFpRCxFQUNqRCxVQUF1QyxFQUFFO0lBRXpDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxjQUFjLEVBQUU7UUFDakMsT0FBTztZQUNMLE9BQU8sRUFBRTtnQkFDUCxNQUFNLEVBQUUsc0JBQXNCLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQztnQkFDcEQsS0FBSyxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFO2FBQzFCO1lBQ0QsYUFBYSxFQUFFLEtBQUs7U0FDckIsQ0FBQztLQUNIO0lBRUQsMEJBQTBCLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBRS9DLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxXQUFXLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxrQkFBa0IsRUFBRTtRQUNuRSxPQUFPO1lBQ0wsT0FBTyxFQUFFLDBCQUEwQixDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUM7WUFDekQsYUFBYSxFQUFFLElBQUk7U0FDcEIsQ0FBQztLQUNIO0lBRUQsT0FBTztRQUNMLE9BQU8sRUFBRTtZQUNQLE1BQU0sRUFBRSxjQUFjLEVBQUUsTUFBTSxJQUFJLHNCQUFzQixDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUM7WUFDOUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO1NBQ25CO1FBQ0QsYUFBYSxFQUFFLEtBQUssQ0FBQyxJQUFJLEtBQUssZUFBZTtLQUM5QyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQzFCLFdBQWdCLEVBQ2hCLFNBQTZCLEVBQzdCLGtCQUFzQztJQUV0QyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsU0FBUztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ2pELE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxTQUFTLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUM3RCxPQUFPLFdBQVcsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzdFLENBQUM7QUFFRCxNQUFNLGVBQWUsR0FBRyxJQUFJLE9BQU8sRUFBc0IsQ0FBQztBQUUxRCxTQUFTLGNBQWMsQ0FBQyxJQUF3QjtJQUM5QyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFCLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLElBQXdCO0lBQzVDLE9BQU8sZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuQyxDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxXQUFpQztJQUN6RCxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xGLFdBQVcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN6QyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtZQUM1QixHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQXFCLEVBQUUsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDckc7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLFNBQWlCLEVBQUUsV0FBaUM7SUFDNUUsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLENBQUMsQ0FBQztJQUM1RSxJQUFJLFdBQVcsRUFBRTtRQUNmLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3RSxPQUFPO0tBQ1I7SUFDRCxNQUFNLFNBQVMsR0FBeUIsV0FBVyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2hILE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLFNBQVMsQ0FBQyxDQUFDO0lBQzNELElBQUksU0FBUyxFQUFFO1FBQ2IsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvRCxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO1lBQzNDLEdBQUcsRUFBRSxTQUFTLENBQUMsR0FBRztZQUNsQixRQUFRLEVBQUUsSUFBSTtZQUNkLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSTtZQUNwQixNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU07Z0JBQ3RCLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTyxDQUFDLEtBQUssRUFBRSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTyxDQUFDLFVBQVUsRUFBRSxFQUFFO2dCQUM5RixDQUFDLENBQUMsU0FBUztTQUNkLENBQUMsQ0FBQyxDQUFDO0tBQ0w7QUFDSCxDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxTQUFpQixFQUFFLGtCQUFzQyxFQUFFLFdBQWlDO0lBQ3BILE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxTQUFTLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUM3RCxXQUFXLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakYsV0FBVyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3ZDLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFxQixFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RGLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsc0JBQXNCLENBQUMsZ0JBQW9DLEVBQUUsV0FBaUM7SUFDckcsTUFBTSxlQUFlLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzNFLE1BQU0sVUFBVSxHQUF5QixlQUFlLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO0lBQ3JGLElBQUksZ0JBQWdCLEtBQUssU0FBUyxFQUFFO1FBQ2xDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pELE9BQU87S0FDUjtJQUNELE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLGdCQUFnQixDQUFDLENBQUM7SUFDckUsSUFBSSxXQUFXLEVBQUU7UUFDZixVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEUsT0FBTztLQUNSO0lBQ0QsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2pGLElBQUksU0FBUyxJQUFJLGVBQWUsRUFBRTtRQUNoQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRTtZQUMxQixlQUFlLENBQUMsS0FBSyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztTQUNuRTthQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUN4QyxlQUFlLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDO1NBQzlEO1FBQ0QsZUFBZSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDckQsR0FBRyxFQUFFLFNBQVMsQ0FBQyxHQUFHO1lBQ2xCLFFBQVEsRUFBRSxJQUFJO1lBQ2QsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJO1lBQ3BCLE1BQU0sRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDekIsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFPLENBQUMsS0FBSyxFQUFFO2dCQUN0QyxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU8sQ0FBQyxVQUFVLEVBQUU7Z0JBQ2hELFNBQVMsRUFBRSxDQUFDLEtBQVUsRUFBRSxLQUFhLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7YUFDeEQsQ0FBQyxDQUFDLENBQUMsU0FBUztTQUNkLENBQUMsQ0FBQyxDQUFDO0tBQ0w7U0FBTTtRQUNMLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2xEO0FBQ0gsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQUMsY0FBd0IsRUFBRSxXQUFpQztJQUN2RixXQUFXLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9yZ2FuaXplckJ1dHRvbkV2ZW50LCBPcmdhbml6ZXJDb25maWcsIE9yZ2FuaXplclN0YXRlLCBPcmdhbml6ZXJVbmlmaWVkU3RhdGUsIE9yZ2FuaXplclZpZXdTbGljZSwgT3JnYW5pemVyWEZpZWxkIH0gZnJvbSAnLi9vcmdhbml6ZXItY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBidWlsZFlGaWVsZHMsIG5vcm1hbGl6ZU9yZ2FuaXplclN0YXRlLCByZXNvbHZlTWF0Y2hpbmdUZW1wbGF0ZUlkLCByZXNvbHZlWUtleSB9IGZyb20gJy4vb3JnYW5pemVyLXV0aWxzJztcbmltcG9ydCB7IFVuaXRDb25maWcgfSBmcm9tICdAb25ldGVtZS9qcXVlcnktY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyQ2hhcnRJdGVtIHtcbiAga2V5OiBzdHJpbmc7XG4gIHNlbGVjdGVkOiBib29sZWFuO1xuICBtZW51OiB7IGxhYmVsOiBzdHJpbmcgfTtcbiAgdW5pdD86IHN0cmluZyB8IFVuaXRDb25maWc7XG4gIGpxdWVyeT86IHtcbiAgICB2YWx1ZTogKHM/OiBzdHJpbmcpID0+IHN0cmluZztcbiAgICBidWlsZEFsaWFzOiAocz86IHN0cmluZykgPT4gc3RyaW5nO1xuICAgIGJ1aWxkTmFtZT86IChpdGVtOiBhbnksIHZhbHVlPzogc3RyaW5nKSA9PiBzdHJpbmc7XG4gICAgYnVpbGRDb2xvcj86ICh2YWx1ZT86IHN0cmluZykgPT4gc3RyaW5nO1xuICB9O1xuICBncm91cD86IHN0cmluZztcbiAgZXh0cmE/OiB7XG4gICAgc3RhY2tzPzogeyBvcHRpb25hbDogYm9vbGVhbjsgaXRlbXM6IE9yZ2FuaXplckNoYXJ0SXRlbVtdIH07XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplckNoYXJ0U2VjdGlvbiB7XG4gIG9wdGlvbmFsOiBib29sZWFuO1xuICBpdGVtczogT3JnYW5pemVyQ2hhcnRJdGVtW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyQ2hhcnRDb25maWcge1xuICBncm91cHM6IE9yZ2FuaXplckNoYXJ0U2VjdGlvbjtcbiAgaW5kaWNhdG9yczogT3JnYW5pemVyQ2hhcnRTZWN0aW9uO1xuICBmaWx0ZXJzPzogT3JnYW5pemVyQ2hhcnRTZWN0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplckNoYXJ0QnJpZGdlT3B0aW9ucyB7XG4gIG9uRmV0Y2hTbGljZURhdGE/OiBPcmdhbml6ZXJDb25maWdbJ29uRmV0Y2hTbGljZURhdGEnXTtcbiAgb25FeHBvcnRWaXN1YWw/OiAoKSA9PiB2b2lkO1xuICBvbkV4cG9ydERhdGE/OiAoKSA9PiB2b2lkO1xuICBzd2l0Y2hWaWV3PzogT3JnYW5pemVyQ29uZmlnWydzd2l0Y2hWaWV3J107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyQ2hhcnRCaW5kaW5nIHtcbiAgY29uZmlnOiBPcmdhbml6ZXJDb25maWc7XG4gIHN0YXRlOiBPcmdhbml6ZXJTdGF0ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6ZXJDaGFydEV2ZW50UmVzdWx0IHtcbiAgYmluZGluZzogT3JnYW5pemVyQ2hhcnRCaW5kaW5nO1xuICBzaG91bGRSZWZldGNoOiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hhcnRDb25maWdUb09yZ2FuaXplcihcbiAgY2hhcnRDb25maWc6IGFueSxcbiAgb3B0aW9uczogT3JnYW5pemVyQ2hhcnRCcmlkZ2VPcHRpb25zID0ge31cbik6IE9yZ2FuaXplckNvbmZpZyB7XG4gIGlmICghY2hhcnRDb25maWcpIHJldHVybiB7fTtcbiAgY29uc3QgeyBvbkZldGNoU2xpY2VEYXRhLCBvbkV4cG9ydFZpc3VhbCwgb25FeHBvcnREYXRhLCBzd2l0Y2hWaWV3IH0gPSBvcHRpb25zO1xuICBjb25zdCBhY3RpdmVJbmRpY2F0b3IgPSBjaGFydENvbmZpZy5pbmRpY2F0b3JzPy5pdGVtcz8uZmluZChpID0+IGkuc2VsZWN0ZWQpO1xuXG4gIGNvbnN0IGJhc2VYRmllbGRzOiBPcmdhbml6ZXJYRmllbGRbXSA9IChjaGFydENvbmZpZy5ncm91cHM/Lml0ZW1zIHx8IFtdKVxuICAgIC5maWx0ZXIoZyA9PiAhX2lzU3ludGhldGljKGcpKVxuICAgIC5tYXAoZyA9PiAoeyBpZDogZy5rZXksIGxhYmVsOiBnLm1lbnUubGFiZWwgfHwgZy5rZXkgfSkpO1xuXG4gIGNvbnN0IHlGaWVsZHMgPSBidWlsZFlGaWVsZHMoXG4gICAgKGNoYXJ0Q29uZmlnLmluZGljYXRvcnM/Lml0ZW1zIHx8IFtdKS5tYXAoaSA9PiAoeyBpZDogaS5rZXksIGxhYmVsOiBpLm1lbnUubGFiZWwgfHwgaS5rZXksIGdyb3VwOiBpLmdyb3VwIH0pKVxuICApO1xuXG4gIGNvbnN0IHN0YWNrRmllbGRzID0gKGFjdGl2ZUluZGljYXRvcj8uZXh0cmE/LnN0YWNrcz8uaXRlbXMgfHwgW10pXG4gICAgLmZpbHRlcigoczogT3JnYW5pemVyQ2hhcnRJdGVtKSA9PiAhX2lzU3ludGhldGljKHMpKVxuICAgIC5tYXAoKHM6IE9yZ2FuaXplckNoYXJ0SXRlbSkgPT4gKHsgaWQ6IHMua2V5LCBsYWJlbDogcy5tZW51LmxhYmVsIHx8IHMua2V5IH0pKTtcblxuICBjb25zdCBzZWVuS2V5cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBtZXJnZWRHcm91cEZpZWxkcyA9IFsuLi5iYXNlWEZpZWxkcywgLi4uc3RhY2tGaWVsZHNdLmZpbHRlcihmID0+IHtcbiAgICBpZiAoc2VlbktleXMuaGFzKGYuaWQpKSByZXR1cm4gZmFsc2U7XG4gICAgc2VlbktleXMuYWRkKGYuaWQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9KTtcblxuICByZXR1cm4ge1xuICAgIHhGaWVsZHM6IG1lcmdlZEdyb3VwRmllbGRzLFxuICAgIHlGaWVsZHMsXG4gICAgZ3JvdXBzOiBtZXJnZWRHcm91cEZpZWxkcyxcbiAgICBzbGljZXM6IChjaGFydENvbmZpZy5maWx0ZXJzPy5pdGVtcyB8fCBbXSkubWFwKGYgPT4gKHsgaWQ6IGYua2V5LCBsYWJlbDogZi5tZW51LmxhYmVsIHx8IGYua2V5IH0pIGFzIE9yZ2FuaXplclZpZXdTbGljZSksXG4gICAgdGVtcGxhdGVzOiBjaGFydENvbmZpZy50ZW1wbGF0ZXMsXG4gICAgc2hvd1Jlc2V0OiBmYWxzZSxcbiAgICBvbkZldGNoU2xpY2VEYXRhLFxuICAgIHNob3dFeHBvcnQ6ICEhKG9uRXhwb3J0VmlzdWFsIHx8IG9uRXhwb3J0RGF0YSksXG4gICAgb25FeHBvcnRWaXN1YWwsXG4gICAgb25FeHBvcnREYXRhLFxuICAgIHN3aXRjaFZpZXcsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGFydENvbmZpZ1RvU3RhdGUoY2hhcnRDb25maWc6IGFueSk6IE9yZ2FuaXplclN0YXRlIHtcbiAgaWYgKCFjaGFydENvbmZpZykgcmV0dXJuIHt9O1xuICBjb25zdCBhY3RpdmVJbmRpY2F0b3IgPSBjaGFydENvbmZpZy5pbmRpY2F0b3JzPy5pdGVtcz8uZmluZChpID0+IGkuc2VsZWN0ZWQpO1xuICBjb25zdCBhY3RpdmVTdGFjayA9IChhY3RpdmVJbmRpY2F0b3I/LmV4dHJhPy5zdGFja3M/Lml0ZW1zIHx8IFtdKS5maW5kKChzOiBPcmdhbml6ZXJDaGFydEl0ZW0pID0+IHMuc2VsZWN0ZWQpO1xuICBjb25zdCBhY3RpdmVHcm91cCA9IGNoYXJ0Q29uZmlnLmdyb3Vwcz8uaXRlbXM/LmZpbmQoZyA9PiBnLnNlbGVjdGVkKTtcbiAgY29uc3QgYWN0aXZlU2xpY2VzID0gKGNoYXJ0Q29uZmlnLmZpbHRlcnM/Lml0ZW1zIHx8IFtdKS5maWx0ZXIoZiA9PiBmLnNlbGVjdGVkKTtcbiAgY29uc3QgaW5kaWNhdG9yR3JvdXAgPSBhY3RpdmVJbmRpY2F0b3I/Lmdyb3VwO1xuICBjb25zdCBzdGF0ZSA9IHtcbiAgICBzZWxlY3RlZFg6IGFjdGl2ZUdyb3VwPy5rZXksXG4gICAgc2VsZWN0ZWRZOiBpbmRpY2F0b3JHcm91cCA/PyBhY3RpdmVJbmRpY2F0b3I/LmtleSxcbiAgICBzZWxlY3RlZFlBZ2dyZWdhdGU6IGluZGljYXRvckdyb3VwID8gYWN0aXZlSW5kaWNhdG9yPy5rZXkgOiB1bmRlZmluZWQsXG4gICAgc2VsZWN0ZWRHcm91cEJ5OiBhY3RpdmVTdGFjaz8ua2V5LFxuICAgIHNlbGVjdGVkU2xpY2VzOiBhY3RpdmVTbGljZXMubWFwKGYgPT4gZi5rZXkpLFxuICB9O1xuICBjb25zdCBvcmdhbml6ZXJDb25maWcgPSBjaGFydENvbmZpZ1RvT3JnYW5pemVyKGNoYXJ0Q29uZmlnKTtcbiAgcmV0dXJuIG5vcm1hbGl6ZU9yZ2FuaXplclN0YXRlKHN0YXRlLCBvcmdhbml6ZXJDb25maWcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRPcmdhbml6ZXJDaGFydEJpbmRpbmcoXG4gIGNoYXJ0Q29uZmlnOiBhbnksXG4gIG9wdGlvbnM6IE9yZ2FuaXplckNoYXJ0QnJpZGdlT3B0aW9ucyA9IHt9XG4pOiBPcmdhbml6ZXJDaGFydEJpbmRpbmcge1xuICByZXR1cm4ge1xuICAgIGNvbmZpZzogY2hhcnRDb25maWdUb09yZ2FuaXplcihjaGFydENvbmZpZywgb3B0aW9ucyksXG4gICAgc3RhdGU6IGNoYXJ0Q29uZmlnVG9TdGF0ZShjaGFydENvbmZpZylcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoYXJ0Q29uZmlnVG9VbmlmaWVkU3RhdGUoXG4gIGNoYXJ0Q29uZmlnOiBhbnksXG4gIHZpZXdNb2RlOiAnY2hhcnQnIHwgJ3RhYmxlJyA9ICdjaGFydCdcbik6IE9yZ2FuaXplclVuaWZpZWRTdGF0ZSB7XG4gIGNvbnN0IHN0YXRlID0gY2hhcnRDb25maWdUb1N0YXRlKGNoYXJ0Q29uZmlnKTtcbiAgcmV0dXJuIHtcbiAgICB2aWV3TW9kZSxcbiAgICBkaW1lbnNpb246IHN0YXRlLnNlbGVjdGVkWCxcbiAgICBtZXRyaWM6IHJlc29sdmVZS2V5KHN0YXRlLnNlbGVjdGVkWSwgc3RhdGUuc2VsZWN0ZWRZQWdncmVnYXRlKSxcbiAgICBtZXRyaWNBZ2dyZWdhdGU6IHN0YXRlLnNlbGVjdGVkWUFnZ3JlZ2F0ZSxcbiAgICBicmVha2Rvd246IHN0YXRlLnNlbGVjdGVkR3JvdXBCeSxcbiAgICBmaWx0ZXJzOiBzdGF0ZS5zZWxlY3RlZFNsaWNlcyxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5T3JnYW5pemVyRXZlbnRUb0NoYXJ0KFxuICBldmVudDogT3JnYW5pemVyQnV0dG9uRXZlbnQsXG4gIGNoYXJ0Q29uZmlnOiBhbnlcbik6IHZvaWQge1xuICBpZiAoIWNoYXJ0Q29uZmlnKSByZXR1cm47XG4gIGNvbnN0IHN0YXRlID0gZXZlbnQuc3RhdGU7XG4gIF9jbGVhblN5bnRoZXRpY3MoY2hhcnRDb25maWcpO1xuICBpZiAoc3RhdGUuc2VsZWN0ZWRYICE9PSB1bmRlZmluZWQpIF9hcHBseVhTZWxlY3Rpb24oc3RhdGUuc2VsZWN0ZWRYLCBjaGFydENvbmZpZyk7XG4gIGlmIChzdGF0ZS5zZWxlY3RlZFkgIT09IHVuZGVmaW5lZCkgX2FwcGx5WVNlbGVjdGlvbihzdGF0ZS5zZWxlY3RlZFksIHN0YXRlLnNlbGVjdGVkWUFnZ3JlZ2F0ZSwgY2hhcnRDb25maWcpO1xuICBjb25zdCBlZmZlY3RpdmVHcm91cEJ5ID0gc3RhdGUuc2VsZWN0ZWRHcm91cEJ5ICE9PSBzdGF0ZS5zZWxlY3RlZFggPyBzdGF0ZS5zZWxlY3RlZEdyb3VwQnkgOiB1bmRlZmluZWQ7XG4gIF9hcHBseUdyb3VwQnlTZWxlY3Rpb24oZWZmZWN0aXZlR3JvdXBCeSwgY2hhcnRDb25maWcpO1xuICBpZiAoc3RhdGUuc2VsZWN0ZWRTbGljZXMgIT09IHVuZGVmaW5lZCkgX2FwcGx5U2xpY2VTZWxlY3Rpb24oc3RhdGUuc2VsZWN0ZWRTbGljZXMsIGNoYXJ0Q29uZmlnKTtcbiAgZXZlbnQucmVzb2x2ZWRZVW5pdCA9IHJlc29sdmVZVW5pdChjaGFydENvbmZpZywgZXZlbnQuc3RhdGUuc2VsZWN0ZWRZLCBldmVudC5zdGF0ZS5zZWxlY3RlZFlBZ2dyZWdhdGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlT3JnYW5pemVyQ2hhcnRFdmVudChcbiAgZXZlbnQ6IE9yZ2FuaXplckJ1dHRvbkV2ZW50LFxuICBjaGFydENvbmZpZzogYW55LFxuICBjdXJyZW50QmluZGluZzogT3JnYW5pemVyQ2hhcnRCaW5kaW5nIHwgdW5kZWZpbmVkLFxuICBvcHRpb25zOiBPcmdhbml6ZXJDaGFydEJyaWRnZU9wdGlvbnMgPSB7fVxuKTogT3JnYW5pemVyQ2hhcnRFdmVudFJlc3VsdCB7XG4gIGlmIChldmVudC50eXBlID09PSAndmlld1N3aXRjaGVkJykge1xuICAgIHJldHVybiB7XG4gICAgICBiaW5kaW5nOiB7XG4gICAgICAgIGNvbmZpZzogY2hhcnRDb25maWdUb09yZ2FuaXplcihjaGFydENvbmZpZywgb3B0aW9ucyksXG4gICAgICAgIHN0YXRlOiB7IC4uLmV2ZW50LnN0YXRlIH1cbiAgICAgIH0sXG4gICAgICBzaG91bGRSZWZldGNoOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBhcHBseU9yZ2FuaXplckV2ZW50VG9DaGFydChldmVudCwgY2hhcnRDb25maWcpO1xuXG4gIGlmIChldmVudC50eXBlID09PSAneVNlbGVjdGVkJyB8fCBldmVudC50eXBlID09PSAndGVtcGxhdGVTZWxlY3RlZCcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYmluZGluZzogYnVpbGRPcmdhbml6ZXJDaGFydEJpbmRpbmcoY2hhcnRDb25maWcsIG9wdGlvbnMpLFxuICAgICAgc2hvdWxkUmVmZXRjaDogdHJ1ZVxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGJpbmRpbmc6IHtcbiAgICAgIGNvbmZpZzogY3VycmVudEJpbmRpbmc/LmNvbmZpZyA/PyBjaGFydENvbmZpZ1RvT3JnYW5pemVyKGNoYXJ0Q29uZmlnLCBvcHRpb25zKSxcbiAgICAgIHN0YXRlOiBldmVudC5zdGF0ZVxuICAgIH0sXG4gICAgc2hvdWxkUmVmZXRjaDogZXZlbnQudHlwZSAhPT0gJ3NsaWNlU2VsZWN0ZWQnXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlWVVuaXQoXG4gIGNoYXJ0Q29uZmlnOiBhbnksXG4gIHNlbGVjdGVkWTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBzZWxlY3RlZFlBZ2dyZWdhdGU6IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogc3RyaW5nIHwgVW5pdENvbmZpZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghY2hhcnRDb25maWcgfHwgIXNlbGVjdGVkWSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgYWN0dWFsS2V5ID0gcmVzb2x2ZVlLZXkoc2VsZWN0ZWRZLCBzZWxlY3RlZFlBZ2dyZWdhdGUpO1xuICByZXR1cm4gY2hhcnRDb25maWcuaW5kaWNhdG9ycz8uaXRlbXM/LmZpbmQoaSA9PiBpLmtleSA9PT0gYWN0dWFsS2V5KT8udW5pdDtcbn1cblxuY29uc3QgX3N5bnRoZXRpY0l0ZW1zID0gbmV3IFdlYWtTZXQ8T3JnYW5pemVyQ2hhcnRJdGVtPigpO1xuXG5mdW5jdGlvbiBfbWFrZVN5bnRoZXRpYyhpdGVtOiBPcmdhbml6ZXJDaGFydEl0ZW0pOiBPcmdhbml6ZXJDaGFydEl0ZW0ge1xuICBfc3ludGhldGljSXRlbXMuYWRkKGl0ZW0pO1xuICByZXR1cm4gaXRlbTtcbn1cblxuZnVuY3Rpb24gX2lzU3ludGhldGljKGl0ZW06IE9yZ2FuaXplckNoYXJ0SXRlbSk6IGJvb2xlYW4ge1xuICByZXR1cm4gX3N5bnRoZXRpY0l0ZW1zLmhhcyhpdGVtKTtcbn1cblxuZnVuY3Rpb24gX2NsZWFuU3ludGhldGljcyhjaGFydENvbmZpZzogT3JnYW5pemVyQ2hhcnRDb25maWcpOiB2b2lkIHtcbiAgY2hhcnRDb25maWcuZ3JvdXBzLml0ZW1zID0gY2hhcnRDb25maWcuZ3JvdXBzLml0ZW1zLmZpbHRlcihnID0+ICFfaXNTeW50aGV0aWMoZykpO1xuICBjaGFydENvbmZpZy5pbmRpY2F0b3JzLml0ZW1zLmZvckVhY2goaW5kID0+IHtcbiAgICBpZiAoaW5kLmV4dHJhPy5zdGFja3M/Lml0ZW1zKSB7XG4gICAgICBpbmQuZXh0cmEuc3RhY2tzLml0ZW1zID0gaW5kLmV4dHJhLnN0YWNrcy5pdGVtcy5maWx0ZXIoKHM6IE9yZ2FuaXplckNoYXJ0SXRlbSkgPT4gIV9pc1N5bnRoZXRpYyhzKSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gX2FwcGx5WFNlbGVjdGlvbihzZWxlY3RlZFg6IHN0cmluZywgY2hhcnRDb25maWc6IE9yZ2FuaXplckNoYXJ0Q29uZmlnKTogdm9pZCB7XG4gIGNvbnN0IGlzR3JvdXBJdGVtID0gY2hhcnRDb25maWcuZ3JvdXBzLml0ZW1zLnNvbWUoZyA9PiBnLmtleSA9PT0gc2VsZWN0ZWRYKTtcbiAgaWYgKGlzR3JvdXBJdGVtKSB7XG4gICAgY2hhcnRDb25maWcuZ3JvdXBzLml0ZW1zLmZvckVhY2goZyA9PiB7IGcuc2VsZWN0ZWQgPSBnLmtleSA9PT0gc2VsZWN0ZWRYOyB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgYWxsU3RhY2tzOiBPcmdhbml6ZXJDaGFydEl0ZW1bXSA9IGNoYXJ0Q29uZmlnLmluZGljYXRvcnMuaXRlbXMuZmxhdE1hcChpID0+IGkuZXh0cmE/LnN0YWNrcz8uaXRlbXMgPz8gW10pO1xuICBjb25zdCBzdGFja0l0ZW0gPSBhbGxTdGFja3MuZmluZChzID0+IHMua2V5ID09PSBzZWxlY3RlZFgpO1xuICBpZiAoc3RhY2tJdGVtKSB7XG4gICAgY2hhcnRDb25maWcuZ3JvdXBzLml0ZW1zLmZvckVhY2goZyA9PiB7IGcuc2VsZWN0ZWQgPSBmYWxzZTsgfSk7XG4gICAgY2hhcnRDb25maWcuZ3JvdXBzLml0ZW1zLnB1c2goX21ha2VTeW50aGV0aWMoe1xuICAgICAga2V5OiBzdGFja0l0ZW0ua2V5LFxuICAgICAgc2VsZWN0ZWQ6IHRydWUsXG4gICAgICBtZW51OiBzdGFja0l0ZW0ubWVudSxcbiAgICAgIGpxdWVyeTogc3RhY2tJdGVtLmpxdWVyeVxuICAgICAgICA/IHsgdmFsdWU6ICgpID0+IHN0YWNrSXRlbS5qcXVlcnkhLnZhbHVlKCksIGJ1aWxkQWxpYXM6ICgpID0+IHN0YWNrSXRlbS5qcXVlcnkhLmJ1aWxkQWxpYXMoKSB9XG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH0pKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfYXBwbHlZU2VsZWN0aW9uKHNlbGVjdGVkWTogc3RyaW5nLCBzZWxlY3RlZFlBZ2dyZWdhdGU6IHN0cmluZyB8IHVuZGVmaW5lZCwgY2hhcnRDb25maWc6IE9yZ2FuaXplckNoYXJ0Q29uZmlnKTogdm9pZCB7XG4gIGNvbnN0IGFjdHVhbEtleSA9IHJlc29sdmVZS2V5KHNlbGVjdGVkWSwgc2VsZWN0ZWRZQWdncmVnYXRlKTtcbiAgY2hhcnRDb25maWcuaW5kaWNhdG9ycy5pdGVtcy5mb3JFYWNoKGkgPT4geyBpLnNlbGVjdGVkID0gaS5rZXkgPT09IGFjdHVhbEtleTsgfSk7XG4gIGNoYXJ0Q29uZmlnLmluZGljYXRvcnMuaXRlbXMuZm9yRWFjaChpID0+IHtcbiAgICBpLmV4dHJhPy5zdGFja3M/Lml0ZW1zPy5mb3JFYWNoKChzOiBPcmdhbml6ZXJDaGFydEl0ZW0pID0+IHsgcy5zZWxlY3RlZCA9IGZhbHNlOyB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIF9hcHBseUdyb3VwQnlTZWxlY3Rpb24oZWZmZWN0aXZlR3JvdXBCeTogc3RyaW5nIHwgdW5kZWZpbmVkLCBjaGFydENvbmZpZzogT3JnYW5pemVyQ2hhcnRDb25maWcpOiB2b2lkIHtcbiAgY29uc3QgYWN0aXZlSW5kaWNhdG9yID0gY2hhcnRDb25maWcuaW5kaWNhdG9ycy5pdGVtcy5maW5kKGkgPT4gaS5zZWxlY3RlZCk7XG4gIGNvbnN0IHN0YWNrSXRlbXM6IE9yZ2FuaXplckNoYXJ0SXRlbVtdID0gYWN0aXZlSW5kaWNhdG9yPy5leHRyYT8uc3RhY2tzPy5pdGVtcyA/PyBbXTtcbiAgaWYgKGVmZmVjdGl2ZUdyb3VwQnkgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0YWNrSXRlbXMuZm9yRWFjaChzID0+IHsgcy5zZWxlY3RlZCA9IGZhbHNlOyB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgaXNTdGFja0l0ZW0gPSBzdGFja0l0ZW1zLnNvbWUocyA9PiBzLmtleSA9PT0gZWZmZWN0aXZlR3JvdXBCeSk7XG4gIGlmIChpc1N0YWNrSXRlbSkge1xuICAgIHN0YWNrSXRlbXMuZm9yRWFjaChzID0+IHsgcy5zZWxlY3RlZCA9IHMua2V5ID09PSBlZmZlY3RpdmVHcm91cEJ5OyB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZ3JvdXBJdGVtID0gY2hhcnRDb25maWcuZ3JvdXBzLml0ZW1zLmZpbmQoZyA9PiBnLmtleSA9PT0gZWZmZWN0aXZlR3JvdXBCeSk7XG4gIGlmIChncm91cEl0ZW0gJiYgYWN0aXZlSW5kaWNhdG9yKSB7XG4gICAgc3RhY2tJdGVtcy5mb3JFYWNoKHMgPT4geyBzLnNlbGVjdGVkID0gZmFsc2U7IH0pO1xuICAgIGlmICghYWN0aXZlSW5kaWNhdG9yLmV4dHJhKSB7XG4gICAgICBhY3RpdmVJbmRpY2F0b3IuZXh0cmEgPSB7IHN0YWNrczogeyBvcHRpb25hbDogdHJ1ZSwgaXRlbXM6IFtdIH0gfTtcbiAgICB9IGVsc2UgaWYgKCFhY3RpdmVJbmRpY2F0b3IuZXh0cmEuc3RhY2tzKSB7XG4gICAgICBhY3RpdmVJbmRpY2F0b3IuZXh0cmEuc3RhY2tzID0geyBvcHRpb25hbDogdHJ1ZSwgaXRlbXM6IFtdIH07XG4gICAgfVxuICAgIGFjdGl2ZUluZGljYXRvci5leHRyYS5zdGFja3MuaXRlbXMucHVzaChfbWFrZVN5bnRoZXRpYyh7XG4gICAgICBrZXk6IGdyb3VwSXRlbS5rZXksXG4gICAgICBzZWxlY3RlZDogdHJ1ZSxcbiAgICAgIG1lbnU6IGdyb3VwSXRlbS5tZW51LFxuICAgICAganF1ZXJ5OiBncm91cEl0ZW0uanF1ZXJ5ID8ge1xuICAgICAgICB2YWx1ZTogKCkgPT4gZ3JvdXBJdGVtLmpxdWVyeSEudmFsdWUoKSxcbiAgICAgICAgYnVpbGRBbGlhczogKCkgPT4gZ3JvdXBJdGVtLmpxdWVyeSEuYnVpbGRBbGlhcygpLFxuICAgICAgICBidWlsZE5hbWU6IChfaXRlbTogYW55LCB2YWx1ZTogc3RyaW5nKSA9PiBTdHJpbmcodmFsdWUpLFxuICAgICAgfSA6IHVuZGVmaW5lZCxcbiAgICB9KSk7XG4gIH0gZWxzZSB7XG4gICAgc3RhY2tJdGVtcy5mb3JFYWNoKHMgPT4geyBzLnNlbGVjdGVkID0gZmFsc2U7IH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9hcHBseVNsaWNlU2VsZWN0aW9uKHNlbGVjdGVkU2xpY2VzOiBzdHJpbmdbXSwgY2hhcnRDb25maWc6IE9yZ2FuaXplckNoYXJ0Q29uZmlnKTogdm9pZCB7XG4gIGNoYXJ0Q29uZmlnLmZpbHRlcnM/Lml0ZW1zPy5mb3JFYWNoKGYgPT4geyBmLnNlbGVjdGVkID0gc2VsZWN0ZWRTbGljZXMuaW5jbHVkZXMoZi5rZXkpOyB9KTtcbn1cblxuIl19
228
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemVyLWNoYXJ0LWFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbmV0ZW1lL2pxdWVyeS1vcmdhbml6ZXIvc3JjL2xpYi9tb2RlbHMvb3JnYW5pemVyLWNoYXJ0LWFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSx1QkFBdUIsRUFBNkIsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbEgsT0FBTyxFQUF3QixhQUFhLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRWpJLE9BQU8sRUFBd0IsYUFBYSxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQTBDakksTUFBTSxVQUFVLHNCQUFzQixDQUNwQyxXQUFvRCxFQUNwRCxVQUF1QyxFQUFFO0lBRXpDLElBQUksQ0FBQyxXQUFXLEVBQUU7UUFDaEIsT0FBTyxDQUFDLEtBQUssQ0FBQyw4RUFBOEUsQ0FBQyxDQUFDO1FBQzlGLE9BQU8sRUFBRSxDQUFDO0tBQ1g7SUFFRCxPQUFPLENBQUMsS0FBSyxDQUFDLDhEQUE4RCxFQUFFO1FBQzVFLFNBQVMsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU07UUFDL0IsY0FBYyxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO1FBQzFELFdBQVcsRUFBRSxXQUFXLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztLQUNyRCxDQUFDLENBQUM7SUFFSCxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFDL0UsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbEQsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUV6RCxNQUFNLFdBQVcsR0FBc0IsYUFBYSxDQUFDLFdBQVcsQ0FBQztTQUM5RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFM0QsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUMxQixVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUNuRixDQUFDO0lBRUYsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLGVBQWUsQ0FBQztTQUMvQyxNQUFNLENBQUMsQ0FBQyxDQUFxQixFQUFFLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFxQixFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFakYsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUNuQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsR0FBRyxXQUFXLEVBQUUsR0FBRyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDcEUsSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNyQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTztRQUNMLE9BQU8sRUFBRSxpQkFBaUI7UUFDMUIsT0FBTztRQUNQLE1BQU0sRUFBRSxpQkFBaUI7UUFDekIsTUFBTSxFQUFFLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBdUIsQ0FBQztRQUNqSCxTQUFTLEVBQUUsV0FBVyxDQUFDLFNBQVM7UUFDaEMsU0FBUyxFQUFFLEtBQUs7UUFDaEIsZ0JBQWdCO1FBQ2hCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLElBQUksWUFBWSxDQUFDO1FBQzlDLGNBQWM7UUFDZCxZQUFZO1FBQ1osVUFBVTtLQUNYLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLFdBQW9EO0lBQ3JGLElBQUksQ0FBQyxXQUFXLEVBQUU7UUFDaEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxpRUFBaUUsQ0FBQyxDQUFDO1FBQ2pGLE9BQU8sRUFBRSxDQUFDO0tBQ1g7SUFFRCxNQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRCxNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pELE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFxQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0YsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNyRSxNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sY0FBYyxHQUFHLGVBQWUsRUFBRSxLQUFLLENBQUM7SUFFOUMsT0FBTyxDQUFDLEtBQUssQ0FBQyw2Q0FBNkMsRUFBRTtRQUMzRCxXQUFXLEVBQUUsV0FBVyxFQUFFLEdBQUc7UUFDN0IsZUFBZSxFQUFFLGVBQWUsRUFBRSxHQUFHO1FBQ3JDLFdBQVcsRUFBRSxXQUFXLEVBQUUsR0FBRztRQUM3QixVQUFVLEVBQUUsWUFBWSxDQUFDLE1BQU07S0FDaEMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxLQUFLLEdBQUc7UUFDWixTQUFTLEVBQUUsV0FBVyxFQUFFLEdBQUc7UUFDM0IsU0FBUyxFQUFFLGNBQWMsSUFBSSxlQUFlLEVBQUUsR0FBRztRQUNqRCxrQkFBa0IsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFDckUsZUFBZSxFQUFFLFdBQVcsRUFBRSxHQUFHO1FBQ2pDLGNBQWMsRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztLQUM3QyxDQUFDO0lBQ0YsTUFBTSxlQUFlLEdBQUcsc0JBQXNCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDNUQsT0FBTyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDekQsQ0FBQztBQUVELE1BQU0sVUFBVSwwQkFBMEIsQ0FDeEMsV0FBb0QsRUFDcEQsVUFBdUMsRUFBRTtJQUV6QyxPQUFPO1FBQ0wsTUFBTSxFQUFFLHNCQUFzQixDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUM7UUFDcEQsS0FBSyxFQUFFLGtCQUFrQixDQUFDLFdBQVcsQ0FBQztLQUN2QyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSx5QkFBeUIsQ0FDdkMsV0FBb0QsRUFDcEQsV0FBOEIsT0FBTztJQUVyQyxNQUFNLEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM5QyxPQUFPO1FBQ0wsUUFBUTtRQUNSLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztRQUMxQixNQUFNLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLGtCQUFrQixDQUFDO1FBQzlELGVBQWUsRUFBRSxLQUFLLENBQUMsa0JBQWtCO1FBQ3pDLFNBQVMsRUFBRSxLQUFLLENBQUMsZUFBZTtRQUNoQyxPQUFPLEVBQUUsS0FBSyxDQUFDLGNBQWM7S0FDOUIsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsMEJBQTBCLENBQ3hDLEtBQTJCLEVBQzNCLFdBQW9EO0lBRXBELElBQUksQ0FBQyxXQUFXLEVBQUU7UUFDaEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxrRUFBa0UsQ0FBQyxDQUFDO1FBQ2xGLE9BQU87S0FDUjtJQUVELE9BQU8sQ0FBQyxLQUFLLENBQUMsa0RBQWtELEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFFakgsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUMxQixnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM5QixJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssU0FBUztRQUFFLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDbEYsSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLFNBQVM7UUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUM1RyxNQUFNLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxlQUFlLEtBQUssS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3ZHLHNCQUFzQixDQUFDLGdCQUFnQixFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3RELElBQUksS0FBSyxDQUFDLGNBQWMsS0FBSyxTQUFTO1FBQUUsb0JBQW9CLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNoRyxLQUFLLENBQUMsYUFBYSxHQUFHLFlBQVksQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQ3pHLENBQUM7QUFFRCxNQUFNLFVBQVUseUJBQXlCLENBQ3ZDLEtBQTJCLEVBQzNCLFdBQW9ELEVBQ3BELGNBQWlELEVBQ2pELFVBQXVDLEVBQUU7SUFFekMsT0FBTyxDQUFDLEtBQUssQ0FBQyxrREFBa0QsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUU3RixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssY0FBYyxFQUFFO1FBQ2pDLE9BQU87WUFDTCxPQUFPLEVBQUU7Z0JBQ1AsTUFBTSxFQUFFLHNCQUFzQixDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUM7Z0JBQ3BELEtBQUssRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRTthQUMxQjtZQUNELGFBQWEsRUFBRSxLQUFLO1NBQ3JCLENBQUM7S0FDSDtJQUVELDBCQUEwQixDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUUvQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssa0JBQWtCLEVBQUU7UUFDbkUsT0FBTztZQUNMLE9BQU8sRUFBRSwwQkFBMEIsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDO1lBQ3pELGFBQWEsRUFBRSxJQUFJO1NBQ3BCLENBQUM7S0FDSDtJQUVELE9BQU87UUFDTCxPQUFPLEVBQUU7WUFDUCxNQUFNLEVBQUUsY0FBYyxFQUFFLE1BQU0sSUFBSSxzQkFBc0IsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDO1lBQzlFLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztTQUNuQjtRQUNELGFBQWEsRUFBRSxLQUFLLENBQUMsSUFBSSxLQUFLLGVBQWU7S0FDOUMsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUMxQixXQUFvRCxFQUNwRCxTQUE2QixFQUM3QixrQkFBc0M7SUFFdEMsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLFNBQVM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUNqRCxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsU0FBUyxFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDN0QsT0FBTyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLFNBQVMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUM3RSxDQUFDO0FBRUQsTUFBTSxlQUFlLEdBQUcsSUFBSSxPQUFPLEVBQXNCLENBQUM7QUFFMUQsU0FBUyxjQUFjLENBQUMsSUFBd0I7SUFDOUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxJQUF3QjtJQUM1QyxPQUFPLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsV0FBaUM7SUFDekQsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRTtRQUM3QixXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ25GO0lBQ0QsSUFBSSxXQUFXLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRTtRQUNqQyxXQUFXLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDekMsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQzVCLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBcUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNyRztRQUNILENBQUMsQ0FBQyxDQUFDO0tBQ0o7QUFDSCxDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxTQUFpQixFQUFFLFdBQWlDO0lBQzVFLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM5QyxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLENBQUMsQ0FBQztJQUM5RCxJQUFJLFdBQVcsRUFBRTtRQUNmLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0QsT0FBTztLQUNSO0lBQ0QsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbEQsTUFBTSxTQUFTLEdBQXlCLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRixNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLENBQUMsQ0FBQztJQUMzRCxJQUFJLFNBQVMsRUFBRTtRQUNiLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pELFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO1lBQzdCLEdBQUcsRUFBRSxTQUFTLENBQUMsR0FBRztZQUNsQixRQUFRLEVBQUUsSUFBSTtZQUNkLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSTtZQUNwQixNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU07Z0JBQ3RCLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTyxDQUFDLEtBQUssRUFBRSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTyxDQUFDLFVBQVUsRUFBRSxFQUFFO2dCQUM5RixDQUFDLENBQUMsU0FBUztTQUNkLENBQUMsQ0FBQyxDQUFDO0tBQ0w7QUFDSCxDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxTQUFpQixFQUFFLGtCQUFzQyxFQUFFLFdBQWlDO0lBQ3BILE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxTQUFTLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUM3RCxNQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRCxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9ELFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDckIsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQXFCLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0UsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxzQkFBc0IsQ0FBQyxnQkFBb0MsRUFBRSxXQUFpQztJQUNyRyxNQUFNLGVBQWUsR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDN0UsTUFBTSxVQUFVLEdBQXlCLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN4RSxJQUFJLGdCQUFnQixLQUFLLFNBQVMsRUFBRTtRQUNsQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqRCxPQUFPO0tBQ1I7SUFDRCxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3JFLElBQUksV0FBVyxFQUFFO1FBQ2YsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLE9BQU87S0FDUjtJQUNELE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLGdCQUFnQixDQUFDLENBQUM7SUFDbkYsSUFBSSxTQUFTLElBQUksZUFBZSxFQUFFO1FBQ2hDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFO1lBQzFCLGVBQWUsQ0FBQyxLQUFLLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO1NBQ25FO2FBQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ3hDLGVBQWUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7U0FDOUQ7UUFDRCxlQUFlLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUNyRCxHQUFHLEVBQUUsU0FBUyxDQUFDLEdBQUc7WUFDbEIsUUFBUSxFQUFFLElBQUk7WUFDZCxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUk7WUFDcEIsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU8sQ0FBQyxLQUFLLEVBQUU7Z0JBQ3RDLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTyxDQUFDLFVBQVUsRUFBRTtnQkFDaEQsU0FBUyxFQUFFLENBQUMsS0FBVSxFQUFFLEtBQWEsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQzthQUN4RCxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQ2QsQ0FBQyxDQUFDLENBQUM7S0FDTDtTQUFNO1FBQ0wsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDbEQ7QUFDSCxDQUFDO0FBRUQsU0FBUyxvQkFBb0IsQ0FBQyxjQUF3QixFQUFFLFdBQWlDO0lBQ3ZGLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9yZ2FuaXplckJ1dHRvbkV2ZW50LCBPcmdhbml6ZXJDb25maWcsIE9yZ2FuaXplclN0YXRlLCBPcmdhbml6ZXJVbmlmaWVkU3RhdGUsIE9yZ2FuaXplclZpZXdTbGljZSwgT3JnYW5pemVyWEZpZWxkIH0gZnJvbSAnLi9vcmdhbml6ZXItY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBidWlsZFlGaWVsZHMsIG5vcm1hbGl6ZU9yZ2FuaXplclN0YXRlLCByZXNvbHZlTWF0Y2hpbmdUZW1wbGF0ZUlkLCByZXNvbHZlWUtleSB9IGZyb20gJy4vb3JnYW5pemVyLXV0aWxzJztcbmltcG9ydCB7IFVuaXRDb25maWcgfSBmcm9tICdAb25ldGVtZS9qcXVlcnktY29yZSc7XG5pbXBvcnQgeyBPcmdhbml6ZXJDaGFydENvbmZpZywgZ2V0R3JvdXBJdGVtcywgZ2V0SW5kaWNhdG9ySXRlbXMsIGdldEZpbHRlckl0ZW1zLCBnZXRTdGFja0l0ZW1zIH0gZnJvbSAnLi9vcmdhbml6ZXItY2hhcnQtY29uZmlnJztcblxuZXhwb3J0IHsgT3JnYW5pemVyQ2hhcnRDb25maWcsIGdldEdyb3VwSXRlbXMsIGdldEluZGljYXRvckl0ZW1zLCBnZXRGaWx0ZXJJdGVtcywgZ2V0U3RhY2tJdGVtcyB9IGZyb20gJy4vb3JnYW5pemVyLWNoYXJ0LWNvbmZpZyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyQ2hhcnRJdGVtIHtcbiAga2V5OiBzdHJpbmc7XG4gIHNlbGVjdGVkOiBib29sZWFuO1xuICBtZW51OiB7IGxhYmVsOiBzdHJpbmcgfTtcbiAgdW5pdD86IHN0cmluZyB8IFVuaXRDb25maWc7XG4gIGpxdWVyeT86IHtcbiAgICB2YWx1ZTogKHM/OiBzdHJpbmcpID0+IHN0cmluZztcbiAgICBidWlsZEFsaWFzOiAocz86IHN0cmluZykgPT4gc3RyaW5nO1xuICAgIGJ1aWxkTmFtZT86IChpdGVtOiBhbnksIHZhbHVlPzogc3RyaW5nKSA9PiBzdHJpbmc7XG4gICAgYnVpbGRDb2xvcj86ICh2YWx1ZT86IHN0cmluZykgPT4gc3RyaW5nO1xuICB9O1xuICBncm91cD86IHN0cmluZztcbiAgZXh0cmE/OiB7XG4gICAgc3RhY2tzPzogeyBvcHRpb25hbDogYm9vbGVhbjsgaXRlbXM6IE9yZ2FuaXplckNoYXJ0SXRlbVtdIH07XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplckNoYXJ0U2VjdGlvbiB7XG4gIG9wdGlvbmFsOiBib29sZWFuO1xuICBpdGVtczogT3JnYW5pemVyQ2hhcnRJdGVtW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyQ2hhcnRCcmlkZ2VPcHRpb25zIHtcbiAgb25GZXRjaFNsaWNlRGF0YT86IE9yZ2FuaXplckNvbmZpZ1snb25GZXRjaFNsaWNlRGF0YSddO1xuICBvbkV4cG9ydFZpc3VhbD86ICgpID0+IHZvaWQ7XG4gIG9uRXhwb3J0RGF0YT86ICgpID0+IHZvaWQ7XG4gIHN3aXRjaFZpZXc/OiBPcmdhbml6ZXJDb25maWdbJ3N3aXRjaFZpZXcnXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6ZXJDaGFydEJpbmRpbmcge1xuICBjb25maWc6IE9yZ2FuaXplckNvbmZpZztcbiAgc3RhdGU6IE9yZ2FuaXplclN0YXRlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplckNoYXJ0RXZlbnRSZXN1bHQge1xuICBiaW5kaW5nOiBPcmdhbml6ZXJDaGFydEJpbmRpbmc7XG4gIHNob3VsZFJlZmV0Y2g6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGFydENvbmZpZ1RvT3JnYW5pemVyKFxuICBjaGFydENvbmZpZzogT3JnYW5pemVyQ2hhcnRDb25maWcgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBvcHRpb25zOiBPcmdhbml6ZXJDaGFydEJyaWRnZU9wdGlvbnMgPSB7fVxuKTogT3JnYW5pemVyQ29uZmlnIHtcbiAgaWYgKCFjaGFydENvbmZpZykge1xuICAgIGNvbnNvbGUuZGVidWcoJ1tPcmdhbml6ZXJDaGFydEFkYXB0ZXJdIEVtcHR5IGNoYXJ0IGNvbmZpZywgcmV0dXJuaW5nIGVtcHR5IG9yZ2FuaXplciBjb25maWcnKTtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zb2xlLmRlYnVnKCdbT3JnYW5pemVyQ2hhcnRBZGFwdGVyXSBDb252ZXJ0aW5nIGNoYXJ0IGNvbmZpZyB0byBvcmdhbml6ZXInLCB7XG4gICAgaGFzR3JvdXBzOiAhIWNoYXJ0Q29uZmlnLmdyb3VwcyxcbiAgICBpbmRpY2F0b3JDb3VudDogY2hhcnRDb25maWcuaW5kaWNhdG9ycz8uaXRlbXM/Lmxlbmd0aCA/PyAwLFxuICAgIGZpbHRlckNvdW50OiBjaGFydENvbmZpZy5maWx0ZXJzPy5pdGVtcz8ubGVuZ3RoID8/IDBcbiAgfSk7XG5cbiAgY29uc3QgeyBvbkZldGNoU2xpY2VEYXRhLCBvbkV4cG9ydFZpc3VhbCwgb25FeHBvcnREYXRhLCBzd2l0Y2hWaWV3IH0gPSBvcHRpb25zO1xuICBjb25zdCBpbmRpY2F0b3JzID0gZ2V0SW5kaWNhdG9ySXRlbXMoY2hhcnRDb25maWcpO1xuICBjb25zdCBhY3RpdmVJbmRpY2F0b3IgPSBpbmRpY2F0b3JzLmZpbmQoaSA9PiBpLnNlbGVjdGVkKTtcblxuICBjb25zdCBiYXNlWEZpZWxkczogT3JnYW5pemVyWEZpZWxkW10gPSBnZXRHcm91cEl0ZW1zKGNoYXJ0Q29uZmlnKVxuICAgIC5maWx0ZXIoZyA9PiAhX2lzU3ludGhldGljKGcpKVxuICAgIC5tYXAoZyA9PiAoeyBpZDogZy5rZXksIGxhYmVsOiBnLm1lbnUubGFiZWwgfHwgZy5rZXkgfSkpO1xuXG4gIGNvbnN0IHlGaWVsZHMgPSBidWlsZFlGaWVsZHMoXG4gICAgaW5kaWNhdG9ycy5tYXAoaSA9PiAoeyBpZDogaS5rZXksIGxhYmVsOiBpLm1lbnUubGFiZWwgfHwgaS5rZXksIGdyb3VwOiBpLmdyb3VwIH0pKVxuICApO1xuXG4gIGNvbnN0IHN0YWNrRmllbGRzID0gZ2V0U3RhY2tJdGVtcyhhY3RpdmVJbmRpY2F0b3IpXG4gICAgLmZpbHRlcigoczogT3JnYW5pemVyQ2hhcnRJdGVtKSA9PiAhX2lzU3ludGhldGljKHMpKVxuICAgIC5tYXAoKHM6IE9yZ2FuaXplckNoYXJ0SXRlbSkgPT4gKHsgaWQ6IHMua2V5LCBsYWJlbDogcy5tZW51LmxhYmVsIHx8IHMua2V5IH0pKTtcblxuICBjb25zdCBzZWVuS2V5cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBtZXJnZWRHcm91cEZpZWxkcyA9IFsuLi5iYXNlWEZpZWxkcywgLi4uc3RhY2tGaWVsZHNdLmZpbHRlcihmID0+IHtcbiAgICBpZiAoc2VlbktleXMuaGFzKGYuaWQpKSByZXR1cm4gZmFsc2U7XG4gICAgc2VlbktleXMuYWRkKGYuaWQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9KTtcblxuICByZXR1cm4ge1xuICAgIHhGaWVsZHM6IG1lcmdlZEdyb3VwRmllbGRzLFxuICAgIHlGaWVsZHMsXG4gICAgZ3JvdXBzOiBtZXJnZWRHcm91cEZpZWxkcyxcbiAgICBzbGljZXM6IGdldEZpbHRlckl0ZW1zKGNoYXJ0Q29uZmlnKS5tYXAoZiA9PiAoeyBpZDogZi5rZXksIGxhYmVsOiBmLm1lbnUubGFiZWwgfHwgZi5rZXkgfSkgYXMgT3JnYW5pemVyVmlld1NsaWNlKSxcbiAgICB0ZW1wbGF0ZXM6IGNoYXJ0Q29uZmlnLnRlbXBsYXRlcyxcbiAgICBzaG93UmVzZXQ6IGZhbHNlLFxuICAgIG9uRmV0Y2hTbGljZURhdGEsXG4gICAgc2hvd0V4cG9ydDogISEob25FeHBvcnRWaXN1YWwgfHwgb25FeHBvcnREYXRhKSxcbiAgICBvbkV4cG9ydFZpc3VhbCxcbiAgICBvbkV4cG9ydERhdGEsXG4gICAgc3dpdGNoVmlldyxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoYXJ0Q29uZmlnVG9TdGF0ZShjaGFydENvbmZpZzogT3JnYW5pemVyQ2hhcnRDb25maWcgfCBudWxsIHwgdW5kZWZpbmVkKTogT3JnYW5pemVyU3RhdGUge1xuICBpZiAoIWNoYXJ0Q29uZmlnKSB7XG4gICAgY29uc29sZS5kZWJ1ZygnW09yZ2FuaXplckNoYXJ0QWRhcHRlcl0gRW1wdHkgY2hhcnQgY29uZmlnIGZvciBzdGF0ZSBjb252ZXJzaW9uJyk7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3QgaW5kaWNhdG9ycyA9IGdldEluZGljYXRvckl0ZW1zKGNoYXJ0Q29uZmlnKTtcbiAgY29uc3QgYWN0aXZlSW5kaWNhdG9yID0gaW5kaWNhdG9ycy5maW5kKGkgPT4gaS5zZWxlY3RlZCk7XG4gIGNvbnN0IGFjdGl2ZVN0YWNrID0gZ2V0U3RhY2tJdGVtcyhhY3RpdmVJbmRpY2F0b3IpLmZpbmQoKHM6IE9yZ2FuaXplckNoYXJ0SXRlbSkgPT4gcy5zZWxlY3RlZCk7XG4gIGNvbnN0IGFjdGl2ZUdyb3VwID0gZ2V0R3JvdXBJdGVtcyhjaGFydENvbmZpZykuZmluZChnID0+IGcuc2VsZWN0ZWQpO1xuICBjb25zdCBhY3RpdmVTbGljZXMgPSBnZXRGaWx0ZXJJdGVtcyhjaGFydENvbmZpZykuZmlsdGVyKGYgPT4gZi5zZWxlY3RlZCk7XG4gIGNvbnN0IGluZGljYXRvckdyb3VwID0gYWN0aXZlSW5kaWNhdG9yPy5ncm91cDtcblxuICBjb25zb2xlLmRlYnVnKCdbT3JnYW5pemVyQ2hhcnRBZGFwdGVyXSBDdXJyZW50IGNoYXJ0IHN0YXRlJywge1xuICAgIGFjdGl2ZUdyb3VwOiBhY3RpdmVHcm91cD8ua2V5LFxuICAgIGFjdGl2ZUluZGljYXRvcjogYWN0aXZlSW5kaWNhdG9yPy5rZXksXG4gICAgYWN0aXZlU3RhY2s6IGFjdGl2ZVN0YWNrPy5rZXksXG4gICAgc2xpY2VDb3VudDogYWN0aXZlU2xpY2VzLmxlbmd0aFxuICB9KTtcblxuICBjb25zdCBzdGF0ZSA9IHtcbiAgICBzZWxlY3RlZFg6IGFjdGl2ZUdyb3VwPy5rZXksXG4gICAgc2VsZWN0ZWRZOiBpbmRpY2F0b3JHcm91cCA/PyBhY3RpdmVJbmRpY2F0b3I/LmtleSxcbiAgICBzZWxlY3RlZFlBZ2dyZWdhdGU6IGluZGljYXRvckdyb3VwID8gYWN0aXZlSW5kaWNhdG9yPy5rZXkgOiB1bmRlZmluZWQsXG4gICAgc2VsZWN0ZWRHcm91cEJ5OiBhY3RpdmVTdGFjaz8ua2V5LFxuICAgIHNlbGVjdGVkU2xpY2VzOiBhY3RpdmVTbGljZXMubWFwKGYgPT4gZi5rZXkpLFxuICB9O1xuICBjb25zdCBvcmdhbml6ZXJDb25maWcgPSBjaGFydENvbmZpZ1RvT3JnYW5pemVyKGNoYXJ0Q29uZmlnKTtcbiAgcmV0dXJuIG5vcm1hbGl6ZU9yZ2FuaXplclN0YXRlKHN0YXRlLCBvcmdhbml6ZXJDb25maWcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRPcmdhbml6ZXJDaGFydEJpbmRpbmcoXG4gIGNoYXJ0Q29uZmlnOiBPcmdhbml6ZXJDaGFydENvbmZpZyB8IG51bGwgfCB1bmRlZmluZWQsXG4gIG9wdGlvbnM6IE9yZ2FuaXplckNoYXJ0QnJpZGdlT3B0aW9ucyA9IHt9XG4pOiBPcmdhbml6ZXJDaGFydEJpbmRpbmcge1xuICByZXR1cm4ge1xuICAgIGNvbmZpZzogY2hhcnRDb25maWdUb09yZ2FuaXplcihjaGFydENvbmZpZywgb3B0aW9ucyksXG4gICAgc3RhdGU6IGNoYXJ0Q29uZmlnVG9TdGF0ZShjaGFydENvbmZpZylcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoYXJ0Q29uZmlnVG9VbmlmaWVkU3RhdGUoXG4gIGNoYXJ0Q29uZmlnOiBPcmdhbml6ZXJDaGFydENvbmZpZyB8IG51bGwgfCB1bmRlZmluZWQsXG4gIHZpZXdNb2RlOiAnY2hhcnQnIHwgJ3RhYmxlJyA9ICdjaGFydCdcbik6IE9yZ2FuaXplclVuaWZpZWRTdGF0ZSB7XG4gIGNvbnN0IHN0YXRlID0gY2hhcnRDb25maWdUb1N0YXRlKGNoYXJ0Q29uZmlnKTtcbiAgcmV0dXJuIHtcbiAgICB2aWV3TW9kZSxcbiAgICBkaW1lbnNpb246IHN0YXRlLnNlbGVjdGVkWCxcbiAgICBtZXRyaWM6IHJlc29sdmVZS2V5KHN0YXRlLnNlbGVjdGVkWSwgc3RhdGUuc2VsZWN0ZWRZQWdncmVnYXRlKSxcbiAgICBtZXRyaWNBZ2dyZWdhdGU6IHN0YXRlLnNlbGVjdGVkWUFnZ3JlZ2F0ZSxcbiAgICBicmVha2Rvd246IHN0YXRlLnNlbGVjdGVkR3JvdXBCeSxcbiAgICBmaWx0ZXJzOiBzdGF0ZS5zZWxlY3RlZFNsaWNlcyxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5T3JnYW5pemVyRXZlbnRUb0NoYXJ0KFxuICBldmVudDogT3JnYW5pemVyQnV0dG9uRXZlbnQsXG4gIGNoYXJ0Q29uZmlnOiBPcmdhbml6ZXJDaGFydENvbmZpZyB8IG51bGwgfCB1bmRlZmluZWRcbik6IHZvaWQge1xuICBpZiAoIWNoYXJ0Q29uZmlnKSB7XG4gICAgY29uc29sZS5kZWJ1ZygnW09yZ2FuaXplckNoYXJ0QWRhcHRlcl0gQ2Fubm90IGFwcGx5IGV2ZW50IHRvIGVtcHR5IGNoYXJ0IGNvbmZpZycpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnNvbGUuZGVidWcoJ1tPcmdhbml6ZXJDaGFydEFkYXB0ZXJdIEFwcGx5aW5nIG9yZ2FuaXplciBldmVudCcsIHsgZXZlbnRUeXBlOiBldmVudC50eXBlLCBzdGF0ZTogZXZlbnQuc3RhdGUgfSk7XG5cbiAgY29uc3Qgc3RhdGUgPSBldmVudC5zdGF0ZTtcbiAgX2NsZWFuU3ludGhldGljcyhjaGFydENvbmZpZyk7XG4gIGlmIChzdGF0ZS5zZWxlY3RlZFggIT09IHVuZGVmaW5lZCkgX2FwcGx5WFNlbGVjdGlvbihzdGF0ZS5zZWxlY3RlZFgsIGNoYXJ0Q29uZmlnKTtcbiAgaWYgKHN0YXRlLnNlbGVjdGVkWSAhPT0gdW5kZWZpbmVkKSBfYXBwbHlZU2VsZWN0aW9uKHN0YXRlLnNlbGVjdGVkWSwgc3RhdGUuc2VsZWN0ZWRZQWdncmVnYXRlLCBjaGFydENvbmZpZyk7XG4gIGNvbnN0IGVmZmVjdGl2ZUdyb3VwQnkgPSBzdGF0ZS5zZWxlY3RlZEdyb3VwQnkgIT09IHN0YXRlLnNlbGVjdGVkWCA/IHN0YXRlLnNlbGVjdGVkR3JvdXBCeSA6IHVuZGVmaW5lZDtcbiAgX2FwcGx5R3JvdXBCeVNlbGVjdGlvbihlZmZlY3RpdmVHcm91cEJ5LCBjaGFydENvbmZpZyk7XG4gIGlmIChzdGF0ZS5zZWxlY3RlZFNsaWNlcyAhPT0gdW5kZWZpbmVkKSBfYXBwbHlTbGljZVNlbGVjdGlvbihzdGF0ZS5zZWxlY3RlZFNsaWNlcywgY2hhcnRDb25maWcpO1xuICBldmVudC5yZXNvbHZlZFlVbml0ID0gcmVzb2x2ZVlVbml0KGNoYXJ0Q29uZmlnLCBldmVudC5zdGF0ZS5zZWxlY3RlZFksIGV2ZW50LnN0YXRlLnNlbGVjdGVkWUFnZ3JlZ2F0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVPcmdhbml6ZXJDaGFydEV2ZW50KFxuICBldmVudDogT3JnYW5pemVyQnV0dG9uRXZlbnQsXG4gIGNoYXJ0Q29uZmlnOiBPcmdhbml6ZXJDaGFydENvbmZpZyB8IG51bGwgfCB1bmRlZmluZWQsXG4gIGN1cnJlbnRCaW5kaW5nOiBPcmdhbml6ZXJDaGFydEJpbmRpbmcgfCB1bmRlZmluZWQsXG4gIG9wdGlvbnM6IE9yZ2FuaXplckNoYXJ0QnJpZGdlT3B0aW9ucyA9IHt9XG4pOiBPcmdhbml6ZXJDaGFydEV2ZW50UmVzdWx0IHtcbiAgY29uc29sZS5kZWJ1ZygnW09yZ2FuaXplckNoYXJ0QWRhcHRlcl0gSGFuZGxpbmcgb3JnYW5pemVyIGV2ZW50JywgeyBldmVudFR5cGU6IGV2ZW50LnR5cGUgfSk7XG5cbiAgaWYgKGV2ZW50LnR5cGUgPT09ICd2aWV3U3dpdGNoZWQnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJpbmRpbmc6IHtcbiAgICAgICAgY29uZmlnOiBjaGFydENvbmZpZ1RvT3JnYW5pemVyKGNoYXJ0Q29uZmlnLCBvcHRpb25zKSxcbiAgICAgICAgc3RhdGU6IHsgLi4uZXZlbnQuc3RhdGUgfVxuICAgICAgfSxcbiAgICAgIHNob3VsZFJlZmV0Y2g6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGFwcGx5T3JnYW5pemVyRXZlbnRUb0NoYXJ0KGV2ZW50LCBjaGFydENvbmZpZyk7XG5cbiAgaWYgKGV2ZW50LnR5cGUgPT09ICd5U2VsZWN0ZWQnIHx8IGV2ZW50LnR5cGUgPT09ICd0ZW1wbGF0ZVNlbGVjdGVkJykge1xuICAgIHJldHVybiB7XG4gICAgICBiaW5kaW5nOiBidWlsZE9yZ2FuaXplckNoYXJ0QmluZGluZyhjaGFydENvbmZpZywgb3B0aW9ucyksXG4gICAgICBzaG91bGRSZWZldGNoOiB0cnVlXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYmluZGluZzoge1xuICAgICAgY29uZmlnOiBjdXJyZW50QmluZGluZz8uY29uZmlnID8/IGNoYXJ0Q29uZmlnVG9Pcmdhbml6ZXIoY2hhcnRDb25maWcsIG9wdGlvbnMpLFxuICAgICAgc3RhdGU6IGV2ZW50LnN0YXRlXG4gICAgfSxcbiAgICBzaG91bGRSZWZldGNoOiBldmVudC50eXBlICE9PSAnc2xpY2VTZWxlY3RlZCdcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVZVW5pdChcbiAgY2hhcnRDb25maWc6IE9yZ2FuaXplckNoYXJ0Q29uZmlnIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgc2VsZWN0ZWRZOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHNlbGVjdGVkWUFnZ3JlZ2F0ZTogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiBzdHJpbmcgfCBVbml0Q29uZmlnIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFjaGFydENvbmZpZyB8fCAhc2VsZWN0ZWRZKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBhY3R1YWxLZXkgPSByZXNvbHZlWUtleShzZWxlY3RlZFksIHNlbGVjdGVkWUFnZ3JlZ2F0ZSk7XG4gIHJldHVybiBnZXRJbmRpY2F0b3JJdGVtcyhjaGFydENvbmZpZykuZmluZChpID0+IGkua2V5ID09PSBhY3R1YWxLZXkpPy51bml0O1xufVxuXG5jb25zdCBfc3ludGhldGljSXRlbXMgPSBuZXcgV2Vha1NldDxPcmdhbml6ZXJDaGFydEl0ZW0+KCk7XG5cbmZ1bmN0aW9uIF9tYWtlU3ludGhldGljKGl0ZW06IE9yZ2FuaXplckNoYXJ0SXRlbSk6IE9yZ2FuaXplckNoYXJ0SXRlbSB7XG4gIF9zeW50aGV0aWNJdGVtcy5hZGQoaXRlbSk7XG4gIHJldHVybiBpdGVtO1xufVxuXG5mdW5jdGlvbiBfaXNTeW50aGV0aWMoaXRlbTogT3JnYW5pemVyQ2hhcnRJdGVtKTogYm9vbGVhbiB7XG4gIHJldHVybiBfc3ludGhldGljSXRlbXMuaGFzKGl0ZW0pO1xufVxuXG5mdW5jdGlvbiBfY2xlYW5TeW50aGV0aWNzKGNoYXJ0Q29uZmlnOiBPcmdhbml6ZXJDaGFydENvbmZpZyk6IHZvaWQge1xuICBpZiAoY2hhcnRDb25maWcuZ3JvdXBzPy5pdGVtcykge1xuICAgIGNoYXJ0Q29uZmlnLmdyb3Vwcy5pdGVtcyA9IGNoYXJ0Q29uZmlnLmdyb3Vwcy5pdGVtcy5maWx0ZXIoZyA9PiAhX2lzU3ludGhldGljKGcpKTtcbiAgfVxuICBpZiAoY2hhcnRDb25maWcuaW5kaWNhdG9ycz8uaXRlbXMpIHtcbiAgICBjaGFydENvbmZpZy5pbmRpY2F0b3JzLml0ZW1zLmZvckVhY2goaW5kID0+IHtcbiAgICAgIGlmIChpbmQuZXh0cmE/LnN0YWNrcz8uaXRlbXMpIHtcbiAgICAgICAgaW5kLmV4dHJhLnN0YWNrcy5pdGVtcyA9IGluZC5leHRyYS5zdGFja3MuaXRlbXMuZmlsdGVyKChzOiBPcmdhbml6ZXJDaGFydEl0ZW0pID0+ICFfaXNTeW50aGV0aWMocykpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9hcHBseVhTZWxlY3Rpb24oc2VsZWN0ZWRYOiBzdHJpbmcsIGNoYXJ0Q29uZmlnOiBPcmdhbml6ZXJDaGFydENvbmZpZyk6IHZvaWQge1xuICBjb25zdCBncm91cEl0ZW1zID0gZ2V0R3JvdXBJdGVtcyhjaGFydENvbmZpZyk7XG4gIGNvbnN0IGlzR3JvdXBJdGVtID0gZ3JvdXBJdGVtcy5zb21lKGcgPT4gZy5rZXkgPT09IHNlbGVjdGVkWCk7XG4gIGlmIChpc0dyb3VwSXRlbSkge1xuICAgIGdyb3VwSXRlbXMuZm9yRWFjaChnID0+IHsgZy5zZWxlY3RlZCA9IGcua2V5ID09PSBzZWxlY3RlZFg7IH0pO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBpbmRpY2F0b3JzID0gZ2V0SW5kaWNhdG9ySXRlbXMoY2hhcnRDb25maWcpO1xuICBjb25zdCBhbGxTdGFja3M6IE9yZ2FuaXplckNoYXJ0SXRlbVtdID0gaW5kaWNhdG9ycy5mbGF0TWFwKGkgPT4gZ2V0U3RhY2tJdGVtcyhpKSk7XG4gIGNvbnN0IHN0YWNrSXRlbSA9IGFsbFN0YWNrcy5maW5kKHMgPT4gcy5rZXkgPT09IHNlbGVjdGVkWCk7XG4gIGlmIChzdGFja0l0ZW0pIHtcbiAgICBncm91cEl0ZW1zLmZvckVhY2goZyA9PiB7IGcuc2VsZWN0ZWQgPSBmYWxzZTsgfSk7XG4gICAgZ3JvdXBJdGVtcy5wdXNoKF9tYWtlU3ludGhldGljKHtcbiAgICAgIGtleTogc3RhY2tJdGVtLmtleSxcbiAgICAgIHNlbGVjdGVkOiB0cnVlLFxuICAgICAgbWVudTogc3RhY2tJdGVtLm1lbnUsXG4gICAgICBqcXVlcnk6IHN0YWNrSXRlbS5qcXVlcnlcbiAgICAgICAgPyB7IHZhbHVlOiAoKSA9PiBzdGFja0l0ZW0uanF1ZXJ5IS52YWx1ZSgpLCBidWlsZEFsaWFzOiAoKSA9PiBzdGFja0l0ZW0uanF1ZXJ5IS5idWlsZEFsaWFzKCkgfVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9KSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2FwcGx5WVNlbGVjdGlvbihzZWxlY3RlZFk6IHN0cmluZywgc2VsZWN0ZWRZQWdncmVnYXRlOiBzdHJpbmcgfCB1bmRlZmluZWQsIGNoYXJ0Q29uZmlnOiBPcmdhbml6ZXJDaGFydENvbmZpZyk6IHZvaWQge1xuICBjb25zdCBhY3R1YWxLZXkgPSByZXNvbHZlWUtleShzZWxlY3RlZFksIHNlbGVjdGVkWUFnZ3JlZ2F0ZSk7XG4gIGNvbnN0IGluZGljYXRvcnMgPSBnZXRJbmRpY2F0b3JJdGVtcyhjaGFydENvbmZpZyk7XG4gIGluZGljYXRvcnMuZm9yRWFjaChpID0+IHsgaS5zZWxlY3RlZCA9IGkua2V5ID09PSBhY3R1YWxLZXk7IH0pO1xuICBpbmRpY2F0b3JzLmZvckVhY2goaSA9PiB7XG4gICAgZ2V0U3RhY2tJdGVtcyhpKS5mb3JFYWNoKChzOiBPcmdhbml6ZXJDaGFydEl0ZW0pID0+IHsgcy5zZWxlY3RlZCA9IGZhbHNlOyB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIF9hcHBseUdyb3VwQnlTZWxlY3Rpb24oZWZmZWN0aXZlR3JvdXBCeTogc3RyaW5nIHwgdW5kZWZpbmVkLCBjaGFydENvbmZpZzogT3JnYW5pemVyQ2hhcnRDb25maWcpOiB2b2lkIHtcbiAgY29uc3QgYWN0aXZlSW5kaWNhdG9yID0gZ2V0SW5kaWNhdG9ySXRlbXMoY2hhcnRDb25maWcpLmZpbmQoaSA9PiBpLnNlbGVjdGVkKTtcbiAgY29uc3Qgc3RhY2tJdGVtczogT3JnYW5pemVyQ2hhcnRJdGVtW10gPSBnZXRTdGFja0l0ZW1zKGFjdGl2ZUluZGljYXRvcik7XG4gIGlmIChlZmZlY3RpdmVHcm91cEJ5ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdGFja0l0ZW1zLmZvckVhY2gocyA9PiB7IHMuc2VsZWN0ZWQgPSBmYWxzZTsgfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGlzU3RhY2tJdGVtID0gc3RhY2tJdGVtcy5zb21lKHMgPT4gcy5rZXkgPT09IGVmZmVjdGl2ZUdyb3VwQnkpO1xuICBpZiAoaXNTdGFja0l0ZW0pIHtcbiAgICBzdGFja0l0ZW1zLmZvckVhY2gocyA9PiB7IHMuc2VsZWN0ZWQgPSBzLmtleSA9PT0gZWZmZWN0aXZlR3JvdXBCeTsgfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGdyb3VwSXRlbSA9IGdldEdyb3VwSXRlbXMoY2hhcnRDb25maWcpLmZpbmQoZyA9PiBnLmtleSA9PT0gZWZmZWN0aXZlR3JvdXBCeSk7XG4gIGlmIChncm91cEl0ZW0gJiYgYWN0aXZlSW5kaWNhdG9yKSB7XG4gICAgc3RhY2tJdGVtcy5mb3JFYWNoKHMgPT4geyBzLnNlbGVjdGVkID0gZmFsc2U7IH0pO1xuICAgIGlmICghYWN0aXZlSW5kaWNhdG9yLmV4dHJhKSB7XG4gICAgICBhY3RpdmVJbmRpY2F0b3IuZXh0cmEgPSB7IHN0YWNrczogeyBvcHRpb25hbDogdHJ1ZSwgaXRlbXM6IFtdIH0gfTtcbiAgICB9IGVsc2UgaWYgKCFhY3RpdmVJbmRpY2F0b3IuZXh0cmEuc3RhY2tzKSB7XG4gICAgICBhY3RpdmVJbmRpY2F0b3IuZXh0cmEuc3RhY2tzID0geyBvcHRpb25hbDogdHJ1ZSwgaXRlbXM6IFtdIH07XG4gICAgfVxuICAgIGFjdGl2ZUluZGljYXRvci5leHRyYS5zdGFja3MuaXRlbXMucHVzaChfbWFrZVN5bnRoZXRpYyh7XG4gICAgICBrZXk6IGdyb3VwSXRlbS5rZXksXG4gICAgICBzZWxlY3RlZDogdHJ1ZSxcbiAgICAgIG1lbnU6IGdyb3VwSXRlbS5tZW51LFxuICAgICAganF1ZXJ5OiBncm91cEl0ZW0uanF1ZXJ5ID8ge1xuICAgICAgICB2YWx1ZTogKCkgPT4gZ3JvdXBJdGVtLmpxdWVyeSEudmFsdWUoKSxcbiAgICAgICAgYnVpbGRBbGlhczogKCkgPT4gZ3JvdXBJdGVtLmpxdWVyeSEuYnVpbGRBbGlhcygpLFxuICAgICAgICBidWlsZE5hbWU6IChfaXRlbTogYW55LCB2YWx1ZTogc3RyaW5nKSA9PiBTdHJpbmcodmFsdWUpLFxuICAgICAgfSA6IHVuZGVmaW5lZCxcbiAgICB9KSk7XG4gIH0gZWxzZSB7XG4gICAgc3RhY2tJdGVtcy5mb3JFYWNoKHMgPT4geyBzLnNlbGVjdGVkID0gZmFsc2U7IH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9hcHBseVNsaWNlU2VsZWN0aW9uKHNlbGVjdGVkU2xpY2VzOiBzdHJpbmdbXSwgY2hhcnRDb25maWc6IE9yZ2FuaXplckNoYXJ0Q29uZmlnKTogdm9pZCB7XG4gIGdldEZpbHRlckl0ZW1zKGNoYXJ0Q29uZmlnKS5mb3JFYWNoKGYgPT4geyBmLnNlbGVjdGVkID0gc2VsZWN0ZWRTbGljZXMuaW5jbHVkZXMoZi5rZXkpOyB9KTtcbn1cblxuIl19
@@ -0,0 +1,37 @@
1
+ export var SyntheticItemKeys;
2
+ (function (SyntheticItemKeys) {
3
+ SyntheticItemKeys["EMPTY"] = "__empty__";
4
+ SyntheticItemKeys["SYNTHETIC_MARKER"] = "__synthetic__";
5
+ })(SyntheticItemKeys || (SyntheticItemKeys = {}));
6
+ export var SlicePanelI18nKeys;
7
+ (function (SlicePanelI18nKeys) {
8
+ SlicePanelI18nKeys["EXPAND_FILTER"] = "expandFilterTitle";
9
+ SlicePanelI18nKeys["COLLAPSE_FILTER"] = "collapseFilterTitle";
10
+ SlicePanelI18nKeys["FILTER_PANEL_TITLE_SINGLE"] = "filterPanelTitleSingle";
11
+ SlicePanelI18nKeys["FILTER_PANEL_TITLE_PLURAL"] = "filterPanelTitlePlural";
12
+ SlicePanelI18nKeys["FILTER_BLOCK_DEFAULT_TITLE"] = "filterBlockDefaultTitle";
13
+ SlicePanelI18nKeys["FILTER_EMPTY_STATE"] = "filterEmptyState";
14
+ })(SlicePanelI18nKeys || (SlicePanelI18nKeys = {}));
15
+ export var OrganizerButtonEventType;
16
+ (function (OrganizerButtonEventType) {
17
+ OrganizerButtonEventType["FIELD_TOGGLED"] = "fieldToggled";
18
+ OrganizerButtonEventType["X_SELECTED"] = "xSelected";
19
+ OrganizerButtonEventType["Y_SELECTED"] = "ySelected";
20
+ OrganizerButtonEventType["GROUP_BY_SELECTED"] = "groupBySelected";
21
+ OrganizerButtonEventType["TEMPLATE_SELECTED"] = "templateSelected";
22
+ OrganizerButtonEventType["SLICE_SELECTED"] = "sliceSelected";
23
+ OrganizerButtonEventType["VIEW_SWITCHED"] = "viewSwitched";
24
+ })(OrganizerButtonEventType || (OrganizerButtonEventType = {}));
25
+ export function getGroupItems(config) {
26
+ return config?.groups?.items ?? [];
27
+ }
28
+ export function getIndicatorItems(config) {
29
+ return config?.indicators?.items ?? [];
30
+ }
31
+ export function getFilterItems(config) {
32
+ return config?.filters?.items ?? [];
33
+ }
34
+ export function getStackItems(indicator) {
35
+ return indicator?.extra?.stacks?.items ?? [];
36
+ }
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemVyLWNoYXJ0LWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29uZXRlbWUvanF1ZXJ5LW9yZ2FuaXplci9zcmMvbGliL21vZGVscy9vcmdhbml6ZXItY2hhcnQtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNBLE1BQU0sQ0FBTixJQUFZLGlCQUdYO0FBSEQsV0FBWSxpQkFBaUI7SUFDM0Isd0NBQW1CLENBQUE7SUFDbkIsdURBQWtDLENBQUE7QUFDcEMsQ0FBQyxFQUhXLGlCQUFpQixLQUFqQixpQkFBaUIsUUFHNUI7QUFFRCxNQUFNLENBQU4sSUFBWSxrQkFPWDtBQVBELFdBQVksa0JBQWtCO0lBQzVCLHlEQUFtQyxDQUFBO0lBQ25DLDZEQUF1QyxDQUFBO0lBQ3ZDLDBFQUFvRCxDQUFBO0lBQ3BELDBFQUFvRCxDQUFBO0lBQ3BELDRFQUFzRCxDQUFBO0lBQ3RELDZEQUF1QyxDQUFBO0FBQ3pDLENBQUMsRUFQVyxrQkFBa0IsS0FBbEIsa0JBQWtCLFFBTzdCO0FBRUQsTUFBTSxDQUFOLElBQVksd0JBUVg7QUFSRCxXQUFZLHdCQUF3QjtJQUNsQywwREFBOEIsQ0FBQTtJQUM5QixvREFBd0IsQ0FBQTtJQUN4QixvREFBd0IsQ0FBQTtJQUN4QixpRUFBcUMsQ0FBQTtJQUNyQyxrRUFBc0MsQ0FBQTtJQUN0Qyw0REFBZ0MsQ0FBQTtJQUNoQywwREFBOEIsQ0FBQTtBQUNoQyxDQUFDLEVBUlcsd0JBQXdCLEtBQXhCLHdCQUF3QixRQVFuQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsTUFBK0M7SUFDM0UsT0FBTyxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7QUFDckMsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxNQUErQztJQUMvRSxPQUFPLE1BQU0sRUFBRSxVQUFVLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQztBQUN6QyxDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWMsQ0FBQyxNQUErQztJQUM1RSxPQUFPLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQztBQUN0QyxDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxTQUF5QztJQUNyRSxPQUFPLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7QUFDL0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9yZ2FuaXplckNoYXJ0SXRlbSwgT3JnYW5pemVyQ2hhcnRTZWN0aW9uIH0gZnJvbSAnLi9vcmdhbml6ZXItY2hhcnQtYWRhcHRlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyQ2hhcnRDb25maWcge1xuICBncm91cHM/OiBPcmdhbml6ZXJDaGFydFNlY3Rpb247XG4gIGluZGljYXRvcnM/OiBPcmdhbml6ZXJDaGFydFNlY3Rpb247XG4gIGZpbHRlcnM/OiBPcmdhbml6ZXJDaGFydFNlY3Rpb247XG4gIHRlbXBsYXRlcz86IGFueVtdOyAvLyBUT0RPOiB0eXBlciBjb3JyZWN0ZW1lbnQgbGVzIHRlbXBsYXRlc1xufVxuXG5leHBvcnQgZW51bSBTeW50aGV0aWNJdGVtS2V5cyB7XG4gIEVNUFRZID0gJ19fZW1wdHlfXycsXG4gIFNZTlRIRVRJQ19NQVJLRVIgPSAnX19zeW50aGV0aWNfXydcbn1cblxuZXhwb3J0IGVudW0gU2xpY2VQYW5lbEkxOG5LZXlzIHtcbiAgRVhQQU5EX0ZJTFRFUiA9ICdleHBhbmRGaWx0ZXJUaXRsZScsXG4gIENPTExBUFNFX0ZJTFRFUiA9ICdjb2xsYXBzZUZpbHRlclRpdGxlJyxcbiAgRklMVEVSX1BBTkVMX1RJVExFX1NJTkdMRSA9ICdmaWx0ZXJQYW5lbFRpdGxlU2luZ2xlJyxcbiAgRklMVEVSX1BBTkVMX1RJVExFX1BMVVJBTCA9ICdmaWx0ZXJQYW5lbFRpdGxlUGx1cmFsJyxcbiAgRklMVEVSX0JMT0NLX0RFRkFVTFRfVElUTEUgPSAnZmlsdGVyQmxvY2tEZWZhdWx0VGl0bGUnLFxuICBGSUxURVJfRU1QVFlfU1RBVEUgPSAnZmlsdGVyRW1wdHlTdGF0ZSdcbn1cblxuZXhwb3J0IGVudW0gT3JnYW5pemVyQnV0dG9uRXZlbnRUeXBlIHtcbiAgRklFTERfVE9HR0xFRCA9ICdmaWVsZFRvZ2dsZWQnLFxuICBYX1NFTEVDVEVEID0gJ3hTZWxlY3RlZCcsXG4gIFlfU0VMRUNURUQgPSAneVNlbGVjdGVkJyxcbiAgR1JPVVBfQllfU0VMRUNURUQgPSAnZ3JvdXBCeVNlbGVjdGVkJyxcbiAgVEVNUExBVEVfU0VMRUNURUQgPSAndGVtcGxhdGVTZWxlY3RlZCcsXG4gIFNMSUNFX1NFTEVDVEVEID0gJ3NsaWNlU2VsZWN0ZWQnLFxuICBWSUVXX1NXSVRDSEVEID0gJ3ZpZXdTd2l0Y2hlZCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEdyb3VwSXRlbXMoY29uZmlnOiBPcmdhbml6ZXJDaGFydENvbmZpZyB8IG51bGwgfCB1bmRlZmluZWQpOiBPcmdhbml6ZXJDaGFydEl0ZW1bXSB7XG4gIHJldHVybiBjb25maWc/Lmdyb3Vwcz8uaXRlbXMgPz8gW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbmRpY2F0b3JJdGVtcyhjb25maWc6IE9yZ2FuaXplckNoYXJ0Q29uZmlnIHwgbnVsbCB8IHVuZGVmaW5lZCk6IE9yZ2FuaXplckNoYXJ0SXRlbVtdIHtcbiAgcmV0dXJuIGNvbmZpZz8uaW5kaWNhdG9ycz8uaXRlbXMgPz8gW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWx0ZXJJdGVtcyhjb25maWc6IE9yZ2FuaXplckNoYXJ0Q29uZmlnIHwgbnVsbCB8IHVuZGVmaW5lZCk6IE9yZ2FuaXplckNoYXJ0SXRlbVtdIHtcbiAgcmV0dXJuIGNvbmZpZz8uZmlsdGVycz8uaXRlbXMgPz8gW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFja0l0ZW1zKGluZGljYXRvcjogT3JnYW5pemVyQ2hhcnRJdGVtIHwgdW5kZWZpbmVkKTogT3JnYW5pemVyQ2hhcnRJdGVtW10ge1xuICByZXR1cm4gaW5kaWNhdG9yPy5leHRyYT8uc3RhY2tzPy5pdGVtcyA/PyBbXTtcbn1cbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemVyLWNvbmZpZy5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbmV0ZW1lL2pxdWVyeS1vcmdhbml6ZXIvc3JjL2xpYi9tb2RlbHMvb3JnYW5pemVyLWNvbmZpZy5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNsaWNlQ29uZmlnIH0gZnJvbSAnLi4vc2xpY2UtcGFuZWwvc2xpY2UtcGFuZWwubW9kZWwnO1xuaW1wb3J0IHsgVW5pdENvbmZpZyB9IGZyb20gJ0BvbmV0ZW1lL2pxdWVyeS1jb3JlJztcblxuZXhwb3J0IHR5cGUgRmllbGRTdGF0ZSA9ICdyZWFkeScgfCAnbG9hZGluZycgfCAnZXJyb3InO1xuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6ZXJWaWV3RmllbGQge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICB2aXNpYmxlPzogYm9vbGVhbjtcbiAgc3RhdGU/OiBGaWVsZFN0YXRlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplclhGaWVsZCB7XG4gIGlkOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6ZXJZQWdncmVnYXRlIHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6ZXJZRmllbGQge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBhZ2dyZWdhdGVzPzogT3JnYW5pemVyWUFnZ3JlZ2F0ZVtdO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyVmlld0dyb3VwIHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgaWNvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6ZXJWaWV3U2xpY2Uge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplclRlbXBsYXRlIHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgaWNvbj86IHN0cmluZztcbiAgeEZpZWxkPzogc3RyaW5nO1xuICB5RmllbGQ/OiBzdHJpbmc7XG4gIHlBZ2dyZWdhdGU/OiBzdHJpbmc7XG4gIGdyb3VwQnk/OiBzdHJpbmc7XG4gIHNlbGVjdGVkU2xpY2VzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyQ29uZmlnIHtcbiAgZmllbGRzPzogT3JnYW5pemVyVmlld0ZpZWxkW107XG4gIHhGaWVsZHM/OiBPcmdhbml6ZXJYRmllbGRbXTtcbiAgeUZpZWxkcz86IE9yZ2FuaXplcllGaWVsZFtdO1xuICBncm91cHM/OiBPcmdhbml6ZXJWaWV3R3JvdXBbXTtcbiAgc2xpY2VzPzogT3JnYW5pemVyVmlld1NsaWNlW107XG4gIHRlbXBsYXRlcz86IE9yZ2FuaXplclRlbXBsYXRlW107XG5cbiAgb25GZXRjaEZpZWxkRGF0YT86IChmaWVsZElkOiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBhbnk+W10+O1xuICBvbkZldGNoU2xpY2VEYXRhPzogKGZpbHRlcktleTogc3RyaW5nKSA9PiBPYnNlcnZhYmxlPGFueVtdPiB8IFByb21pc2U8YW55W10+O1xuICBvblNsaWNlQ2xpY2s/OiAoKSA9PiB2b2lkO1xuXG4gIHNob3dFeHBvcnQ/OiBib29sZWFuO1xuICBvbkV4cG9ydD86ICgpID0+IHZvaWQ7XG4gIG9uRXhwb3J0VmlzdWFsPzogKCkgPT4gdm9pZDtcbiAgb25FeHBvcnREYXRhPzogKCkgPT4gdm9pZDtcblxuICBzaG93UHJlZmVyZW5jZXM/OiBib29sZWFuO1xuICBoYXNTYXZlZFByZWZlcmVuY2VzPzogYm9vbGVhbjtcbiAgb25QcmVmZXJlbmNlc0VkaXQ/OiAoKSA9PiB2b2lkO1xuICBvblByZWZlcmVuY2VzU2F2ZT86ICgpID0+IHZvaWQ7XG4gIG9uUHJlZmVyZW5jZXNDbGVhcj86ICgpID0+IHZvaWQ7XG5cbiAgc2hvd1Jlc2V0PzogYm9vbGVhbjtcbiAgbWVudVBvc2l0aW9uPzogJ2Fib3ZlJyB8ICdiZWxvdyc7XG4gIG1lbnVDbGFzcz86IHN0cmluZztcbiAgYnV0dG9uTGFiZWw/OiBzdHJpbmc7XG4gIGJ1dHRvbkljb24/OiBzdHJpbmc7XG4gIHNob3dCdXR0b25JY29uPzogYm9vbGVhbjtcblxuICBzd2l0Y2hWaWV3Pzoge1xuICAgIGN1cnJlbnRWaWV3OiAnY2hhcnQnIHwgJ3RhYmxlJztcbiAgICBvblN3aXRjaDogKG5ld1ZpZXc6ICdjaGFydCcgfCAndGFibGUnKSA9PiB2b2lkO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplclNsaWNlU3RhdGUge1xuICBzbGljZUNvbmZpZ3M6IFNsaWNlQ29uZmlnPGFueT5bXTtcbiAgdGFza3M6IGFueVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplclN0YXRlIHtcbiAgdmlld01vZGU/OiAnY2hhcnQnIHwgJ3RhYmxlJztcblxuICB2aXNpYmxlRmllbGRzPzogc3RyaW5nW107XG5cbiAgc2VsZWN0ZWRYPzogc3RyaW5nO1xuICBzZWxlY3RlZFk/OiBzdHJpbmc7XG4gIHNlbGVjdGVkWUFnZ3JlZ2F0ZT86IHN0cmluZztcblxuICBzZWxlY3RlZEdyb3VwQnk/OiBzdHJpbmc7XG4gIHNlbGVjdGVkU2xpY2VzPzogc3RyaW5nW107XG4gIHNlbGVjdGVkVGVtcGxhdGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyQnV0dG9uRXZlbnQge1xuICB0eXBlOiAnZmllbGRUb2dnbGVkJyB8ICd4U2VsZWN0ZWQnIHwgJ3lTZWxlY3RlZCcgfCAnZ3JvdXBCeVNlbGVjdGVkJyB8ICd0ZW1wbGF0ZVNlbGVjdGVkJyB8ICdzbGljZVNlbGVjdGVkJyB8ICdyZXNldCcgfCAndmlld1N3aXRjaGVkJztcbiAgc3RhdGU6IE9yZ2FuaXplclN0YXRlO1xuICBzb3VyY2U/OiAndXNlcicgfCAnYXBpJztcbiAgcmVzb2x2ZWRZVW5pdD86IHN0cmluZyB8IFVuaXRDb25maWc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyVW5pZmllZFN0YXRlIHtcbiAgdmlld01vZGU6ICdjaGFydCcgfCAndGFibGUnO1xuICBkaW1lbnNpb24/OiBzdHJpbmc7XG4gIG1ldHJpYz86IHN0cmluZztcbiAgbWV0cmljQWdncmVnYXRlPzogc3RyaW5nO1xuICBicmVha2Rvd24/OiBzdHJpbmc7XG4gIGZpbHRlcnM/OiBzdHJpbmdbXTtcbn1cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemVyLWNvbmZpZy5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbmV0ZW1lL2pxdWVyeS1vcmdhbml6ZXIvc3JjL2xpYi9tb2RlbHMvb3JnYW5pemVyLWNvbmZpZy5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNsaWNlQ29uZmlnIH0gZnJvbSAnLi4vc2xpY2UtcGFuZWwvc2xpY2UtcGFuZWwubW9kZWwnO1xuaW1wb3J0IHsgVW5pdENvbmZpZyB9IGZyb20gJ0BvbmV0ZW1lL2pxdWVyeS1jb3JlJztcblxuZXhwb3J0IHR5cGUgRmllbGRTdGF0ZSA9ICdyZWFkeScgfCAnbG9hZGluZycgfCAnZXJyb3InO1xuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6ZXJWaWV3RmllbGQge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICB2aXNpYmxlPzogYm9vbGVhbjtcbiAgc3RhdGU/OiBGaWVsZFN0YXRlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplclhGaWVsZCB7XG4gIGlkOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6ZXJZQWdncmVnYXRlIHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6ZXJZRmllbGQge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBhZ2dyZWdhdGVzPzogT3JnYW5pemVyWUFnZ3JlZ2F0ZVtdO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyVmlld0dyb3VwIHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgaWNvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6ZXJWaWV3U2xpY2Uge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplclRlbXBsYXRlIHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgaWNvbj86IHN0cmluZztcbiAgeEZpZWxkPzogc3RyaW5nO1xuICB5RmllbGQ/OiBzdHJpbmc7XG4gIHlBZ2dyZWdhdGU/OiBzdHJpbmc7XG4gIGdyb3VwQnk/OiBzdHJpbmc7XG4gIHNlbGVjdGVkU2xpY2VzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyQWN0aW9uc0NvbmZpZyB7XG4gIC8qKiBMaWJlbGzDqSBkdSBzb3VzLW1lbnUuIFBhciBkw6lmYXV0IDogQWN0aW9uIG91IEFjdGlvbnMgc2Vsb24gbGUgbm9tYnJlIGQnYWN0aW9ucyB2aXNpYmxlcy4gKi9cbiAgbGFiZWw/OiBzdHJpbmc7XG4gIC8qKiBBZmZpY2hlIGwnYWN0aW9uIGRlIGNvcGllIGxvcnNxdWUgb25Db3B5VmlzdWFsIGVzdCBmb3VybmkuIExlIGNhbGxiYWNrIHBldXQgb3V2cmlyIHVuZSBtb2RhbGUgb3UgdW5lIFVJIHBlcnNvbm5hbGlzw6llLiAqL1xuICBzaG93Q29weT86IGJvb2xlYW47XG4gIC8qKiBBZmZpY2hlIGwnYWN0aW9uIGRlIHBsZWluIMOpY3JhbiBsb3JzcXVlIG9uVG9nZ2xlRnVsbHNjcmVlbiBlc3QgZm91cm5pLiAqL1xuICBzaG93RnVsbHNjcmVlbj86IGJvb2xlYW47XG4gIC8qKiBJY8O0bmUgb3B0aW9ubmVsbGUgYWZmaWNow6llIGRldmFudCBsZSBsaWJlbGzDqSBkdSBzb3VzLW1lbnUuICovXG4gIGljb24/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyQ29uZmlnIHtcbiAgZmllbGRzPzogT3JnYW5pemVyVmlld0ZpZWxkW107XG4gIHhGaWVsZHM/OiBPcmdhbml6ZXJYRmllbGRbXTtcbiAgeUZpZWxkcz86IE9yZ2FuaXplcllGaWVsZFtdO1xuICBncm91cHM/OiBPcmdhbml6ZXJWaWV3R3JvdXBbXTtcbiAgc2xpY2VzPzogT3JnYW5pemVyVmlld1NsaWNlW107XG4gIHRlbXBsYXRlcz86IE9yZ2FuaXplclRlbXBsYXRlW107XG5cbiAgb25GZXRjaEZpZWxkRGF0YT86IChmaWVsZElkOiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBhbnk+W10+O1xuICBvbkZldGNoU2xpY2VEYXRhPzogKGZpbHRlcktleTogc3RyaW5nKSA9PiBPYnNlcnZhYmxlPGFueVtdPiB8IFByb21pc2U8YW55W10+O1xuICBvblNsaWNlQ2xpY2s/OiAoKSA9PiB2b2lkO1xuXG4gIHNob3dFeHBvcnQ/OiBib29sZWFuO1xuICBvbkV4cG9ydD86ICgpID0+IHZvaWQ7XG4gIG9uRXhwb3J0VmlzdWFsPzogKCkgPT4gdm9pZDtcbiAgb25FeHBvcnREYXRhPzogKCkgPT4gdm9pZDtcblxuICAvKiogQWZmaWNoZSBsZXMgY29tbWFuZGVzIGxpw6llcyBhdSB2aXN1ZWwgY291cmFudCBkYW5zIGxlIHNvdXMtbWVudSBBY3Rpb25zLiAqL1xuICBzaG93QWN0aW9ucz86IGJvb2xlYW47XG4gIGFjdGlvbnM/OiBPcmdhbml6ZXJBY3Rpb25zQ29uZmlnO1xuICBvbkNvcHlWaXN1YWw/OiAoKSA9PiB2b2lkO1xuICBvblRvZ2dsZUZ1bGxzY3JlZW4/OiAoKSA9PiB2b2lkO1xuICBpc0Z1bGxzY3JlZW4/OiBib29sZWFuO1xuXG4gIHNob3dQcmVmZXJlbmNlcz86IGJvb2xlYW47XG4gIGhhc1NhdmVkUHJlZmVyZW5jZXM/OiBib29sZWFuO1xuICBvblByZWZlcmVuY2VzRWRpdD86ICgpID0+IHZvaWQ7XG4gIG9uUHJlZmVyZW5jZXNTYXZlPzogKCkgPT4gdm9pZDtcbiAgb25QcmVmZXJlbmNlc0NsZWFyPzogKCkgPT4gdm9pZDtcblxuICBzaG93UmVzZXQ/OiBib29sZWFuO1xuICBtZW51UG9zaXRpb24/OiAnYWJvdmUnIHwgJ2JlbG93JztcbiAgbWVudUNsYXNzPzogc3RyaW5nO1xuICBidXR0b25MYWJlbD86IHN0cmluZztcbiAgYnV0dG9uSWNvbj86IHN0cmluZztcbiAgc2hvd0J1dHRvbkljb24/OiBib29sZWFuO1xuXG4gIHN3aXRjaFZpZXc/OiB7XG4gICAgY3VycmVudFZpZXc6ICdjaGFydCcgfCAndGFibGUnO1xuICAgIG9uU3dpdGNoOiAobmV3VmlldzogJ2NoYXJ0JyB8ICd0YWJsZScpID0+IHZvaWQ7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyU2xpY2VTdGF0ZSB7XG4gIHNsaWNlQ29uZmlnczogU2xpY2VDb25maWc8YW55PltdO1xuICB0YXNrczogYW55W107XG4gIGZpbHRlckFwcGxpZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplclN0YXRlIHtcbiAgdmlld01vZGU/OiAnY2hhcnQnIHwgJ3RhYmxlJztcblxuICB2aXNpYmxlRmllbGRzPzogc3RyaW5nW107XG5cbiAgc2VsZWN0ZWRYPzogc3RyaW5nO1xuICBzZWxlY3RlZFk/OiBzdHJpbmc7XG4gIHNlbGVjdGVkWUFnZ3JlZ2F0ZT86IHN0cmluZztcblxuICBzZWxlY3RlZEdyb3VwQnk/OiBzdHJpbmc7XG4gIHNlbGVjdGVkU2xpY2VzPzogc3RyaW5nW107XG4gIHNlbGVjdGVkVGVtcGxhdGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyQnV0dG9uRXZlbnQge1xuICB0eXBlOiAnZmllbGRUb2dnbGVkJyB8ICd4U2VsZWN0ZWQnIHwgJ3lTZWxlY3RlZCcgfCAnZ3JvdXBCeVNlbGVjdGVkJyB8ICd0ZW1wbGF0ZVNlbGVjdGVkJyB8ICdzbGljZVNlbGVjdGVkJyB8ICdyZXNldCcgfCAndmlld1N3aXRjaGVkJztcbiAgc3RhdGU6IE9yZ2FuaXplclN0YXRlO1xuICBzb3VyY2U/OiAndXNlcicgfCAnYXBpJztcbiAgcmVzb2x2ZWRZVW5pdD86IHN0cmluZyB8IFVuaXRDb25maWc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyVW5pZmllZFN0YXRlIHtcbiAgdmlld01vZGU6ICdjaGFydCcgfCAndGFibGUnO1xuICBkaW1lbnNpb24/OiBzdHJpbmc7XG4gIG1ldHJpYz86IHN0cmluZztcbiAgbWV0cmljQWdncmVnYXRlPzogc3RyaW5nO1xuICBicmVha2Rvd24/OiBzdHJpbmc7XG4gIGZpbHRlcnM/OiBzdHJpbmdbXTtcbn1cbiJdfQ==
@@ -69,32 +69,22 @@ export function resolveMatchingTemplateId(templates, state, config) {
69
69
  return sameOrganizerState(templateState, normalizedState);
70
70
  })?.id;
71
71
  }
72
- function normalizeTemplateToComparableState(template, baseState, config) {
73
- const normalizedY = normalizeYSelection(template.yField, template.yAggregate, config.yFields, baseState);
72
+ function normalizeStateCore(selectedX, selectedY, selectedYAggregate, selectedGroupBy, selectedSlices, config, originalState) {
73
+ const normalizedY = normalizeYSelection(selectedY, selectedYAggregate, config.yFields, originalState);
74
74
  return {
75
- ...baseState,
76
- selectedX: hasOption(config.xFields, template.xField) ? template.xField : baseState.selectedX,
75
+ selectedX: hasOption(config.xFields, selectedX) ? selectedX : undefined,
77
76
  selectedY: normalizedY.selectedY,
78
77
  selectedYAggregate: normalizedY.selectedYAggregate,
79
- selectedGroupBy: hasOption(config.groups, template.groupBy) ? template.groupBy : baseState.selectedGroupBy,
80
- selectedSlices: template.selectedSlices
81
- ? template.selectedSlices.filter(sliceId => hasOption(config.slices, sliceId))
82
- : (baseState.selectedSlices || []),
83
- selectedTemplate: undefined,
78
+ selectedGroupBy: hasOption(config.groups, selectedGroupBy) ? selectedGroupBy : undefined,
79
+ selectedSlices: (selectedSlices || []).filter(sliceId => hasOption(config.slices, sliceId)),
84
80
  };
85
81
  }
82
+ function normalizeTemplateToComparableState(template, baseState, config) {
83
+ return normalizeStateCore(template.xField, template.yField, template.yAggregate, template.groupBy, template.selectedSlices, config, baseState);
84
+ }
86
85
  function normalizeStateWithoutTemplate(state, config) {
87
86
  const base = state || {};
88
- const normalizedY = normalizeYSelection(base.selectedY, base.selectedYAggregate, config.yFields);
89
- return {
90
- ...base,
91
- selectedX: hasOption(config.xFields, base.selectedX) ? base.selectedX : undefined,
92
- selectedY: normalizedY.selectedY,
93
- selectedYAggregate: normalizedY.selectedYAggregate,
94
- selectedGroupBy: hasOption(config.groups, base.selectedGroupBy) ? base.selectedGroupBy : undefined,
95
- selectedSlices: (base.selectedSlices || []).filter(sliceId => hasOption(config.slices, sliceId)),
96
- selectedTemplate: undefined,
97
- };
87
+ return normalizeStateCore(base.selectedX, base.selectedY, base.selectedYAggregate, base.selectedGroupBy, base.selectedSlices, config, base);
98
88
  }
99
89
  function normalizeYSelection(selectedY, selectedYAggregate, yFields, fallbackState) {
100
90
  if (!selectedY) {
@@ -149,4 +139,4 @@ function sameSlices(left, right) {
149
139
  function hasOption(items, id) {
150
140
  return !!id && !!items?.some(item => item.id === id);
151
141
  }
152
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemVyLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb25ldGVtZS9qcXVlcnktb3JnYW5pemVyL3NyYy9saWIvbW9kZWxzL29yZ2FuaXplci11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQSxNQUFNLFVBQVUsWUFBWSxDQUFDLFVBQWlDO0lBQzVELE1BQU0sT0FBTyxHQUFhLEVBQUUsQ0FBQztJQUM3QixNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBMkIsQ0FBQztJQUUvQyxLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRTtRQUNsQyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO1FBQ2pDLElBQUksUUFBUSxFQUFFO1lBQ1osSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ3RCLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3ZCLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBQ3RFO1lBQ0QsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNqQyxJQUFJLE1BQU0sRUFBRSxVQUFVLEVBQUU7Z0JBQ3RCLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2FBQ3RFO1NBQ0Y7YUFBTTtZQUNMLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzNCLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFB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QUFJLENBQUMsZUFBZSxLQUFLLEtBQUssQ0FBQyxlQUFlO1dBQzlDLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLEVBQUUsRUFBRSxLQUFLLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3pFLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxJQUFjLEVBQUUsS0FBZTtJQUNqRCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLE1BQU07UUFBRSxPQUFPLEtBQUssQ0FBQztJQUMvQyxNQUFNLFVBQVUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEUsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzFFLENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBQyxLQUF3QyxFQUFFLEVBQXNCO0lBQ2pGLE9BQU8sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDdkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9yZ2FuaXplckNvbmZpZywgT3JnYW5pemVyU3RhdGUsIE9yZ2FuaXplclRlbXBsYXRlLCBPcmdhbml6ZXJZRmllbGQgfSBmcm9tICcuL29yZ2FuaXplci1jb25maWcuaW50ZXJmYWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6ZXJZSW5kaWNhdG9yIHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgZ3JvdXA/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFlGaWVsZHMoaW5kaWNhdG9yczogT3JnYW5pemVyWUluZGljYXRvcltdKTogT3JnYW5pemVyWUZpZWxkW10ge1xuICBjb25zdCBvcmRlcmVkOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBtYXAgPSBuZXcgTWFwPHN0cmluZywgT3JnYW5pemVyWUZpZWxkPigpO1xuXG4gIGZvciAoY29uc3QgaW5kaWNhdG9yIG9mIGluZGljYXRvcnMpIHtcbiAgICBjb25zdCBncm91cEtleSA9IGluZGljYXRvci5ncm91cDtcbiAgICBpZiAoZ3JvdXBLZXkpIHtcbiAgICAgIGlmICghbWFwLmhhcyhncm91cEtleSkpIHtcbiAgICAgICAgb3JkZXJlZC5wdXNoKGdyb3VwS2V5KTtcbiAgICAgICAgbWFwLnNldChncm91cEtleSwgeyBpZDogZ3JvdXBLZXksIGxhYmVsOiBncm91cEtleSwgYWdncmVnYXRlczogW10gfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBwYXJlbnQgPSBtYXAuZ2V0KGdyb3VwS2V5KTtcbiAgICAgIGlmIChwYXJlbnQ/LmFnZ3JlZ2F0ZXMpIHtcbiAgICAgICAgcGFyZW50LmFnZ3JlZ2F0ZXMucHVzaCh7IGlkOiBpbmRpY2F0b3IuaWQsIGxhYmVsOiBpbmRpY2F0b3IubGFiZWwgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9yZGVyZWQucHVzaChpbmRpY2F0b3IuaWQpO1xuICAgICAgbWFwLnNldChpbmRpY2F0b3IuaWQsIHsgaWQ6IGluZGljYXRvci5pZCwgbGFiZWw6IGluZGljYXRvci5sYWJlbCB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb3JkZXJlZC5tYXAoayA9PiBtYXAuZ2V0KGspKS5maWx0ZXIoKGYpOiBmIGlzIE9yZ2FuaXplcllGaWVsZCA9PiAhIWYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVlLZXkoXG4gIHNlbGVjdGVkWTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBzZWxlY3RlZFlBZ2dyZWdhdGU6IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHNlbGVjdGVkWUFnZ3JlZ2F0ZSA/PyBzZWxlY3RlZFk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVPcmdhbml6ZXJTdGF0ZShcbiAgc3RhdGU6IE9yZ2FuaXplclN0YXRlIHwgdW5kZWZpbmVkLFxuICBjb25maWc6IFBpY2s8T3JnYW5pemVyQ29uZmlnLCAneEZpZWxkcycgfCAneUZpZWxkcycgfCAnZ3JvdXBzJyB8ICdzbGljZXMnIHwgJ3RlbXBsYXRlcyc+XG4pOiBPcmdhbml6ZXJTdGF0ZSB7XG4gIGNvbnN0IGJhc2UgPSBzdGF0ZSB8fCB7fTtcbiAgY29uc3Qgbm9ybWFsaXplZFkgPSBub3JtYWxpemVZU2VsZWN0aW9uKGJhc2Uuc2VsZWN0ZWRZLCBiYXNlLnNlbGVjdGVkWUFnZ3JlZ2F0ZSwgY29uZmlnLnlGaWVsZHMpO1xuICBjb25zdCBzZWxlY3RlZFggPSBoYXNPcHRpb24oY29uZmlnLnhGaWVsZHMsIGJhc2Uuc2VsZWN0ZWRYKSA/IGJhc2Uuc2VsZWN0ZWRYIDogdW5kZWZpbmVkO1xuICBjb25zdCBzZWxlY3RlZEdyb3VwQnkgPSBoYXNPcHRpb24oY29uZmlnLmdyb3VwcywgYmFzZS5zZWxlY3RlZEdyb3VwQnkpID8gYmFzZS5zZWxlY3RlZEdyb3VwQnkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHNlbGVjdGVkU2xpY2VzID0gKGJhc2Uuc2VsZWN0ZWRTbGljZXMgfHwgW10pLmZpbHRlcihzbGljZUlkID0+IGhhc09wdGlvbihjb25maWcuc2xpY2VzLCBzbGljZUlkKSk7XG5cbiAgY29uc3Qgbm9ybWFsaXplZDogT3JnYW5pemVyU3RhdGUgPSB7XG4gICAgLi4uYmFzZSxcbiAgICBzZWxlY3RlZFgsXG4gICAgc2VsZWN0ZWRZOiBub3JtYWxpemVkWS5zZWxlY3RlZFksXG4gICAgc2VsZWN0ZWRZQWdncmVnYXRlOiBub3JtYWxpemVkWS5zZWxlY3RlZFlBZ2dyZWdhdGUsXG4gICAgc2VsZWN0ZWRHcm91cEJ5LFxuICAgIHNlbGVjdGVkU2xpY2VzLFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgLi4ubm9ybWFsaXplZCxcbiAgICBzZWxlY3RlZFRlbXBsYXRlOiByZXNvbHZlTWF0Y2hpbmdUZW1wbGF0ZUlkKGNvbmZpZy50ZW1wbGF0ZXMsIG5vcm1hbGl6ZWQsIGNvbmZpZylcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVRlbXBsYXRlVG9TdGF0ZShcbiAgdGVtcGxhdGU6IE9yZ2FuaXplclRlbXBsYXRlLFxuICBjdXJyZW50U3RhdGU6IE9yZ2FuaXplclN0YXRlIHwgdW5kZWZpbmVkLFxuICBjb25maWc6IFBpY2s8T3JnYW5pemVyQ29uZmlnLCAneEZpZWxkcycgfCAneUZpZWxkcycgfCAnZ3JvdXBzJyB8ICdzbGljZXMnIHwgJ3RlbXBsYXRlcyc+XG4pOiBPcmdhbml6ZXJTdGF0ZSB7XG4gIGNvbnN0IGJhc2UgPSBub3JtYWxpemVPcmdhbml6ZXJTdGF0ZShjdXJyZW50U3RhdGUsIGNvbmZpZyk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRZID0gbm9ybWFsaXplWVNlbGVjdGlvbih0ZW1wbGF0ZS55RmllbGQsIHRlbXBsYXRlLnlBZ2dyZWdhdGUsIGNvbmZpZy55RmllbGRzLCBiYXNlKTtcblxuICBjb25zdCBuZXh0U3RhdGU6IE9yZ2FuaXplclN0YXRlID0ge1xuICAgIHZpZXdNb2RlOiBiYXNlLnZpZXdNb2RlLFxuICAgIHZpc2libGVGaWVsZHM6IGJhc2UudmlzaWJsZUZpZWxkcyxcbiAgICBzZWxlY3RlZFg6IGhhc09wdGlvbihjb25maWcueEZpZWxkcywgdGVtcGxhdGUueEZpZWxkKSA/IHRlbXBsYXRlLnhGaWVsZCA6IGJhc2Uuc2VsZWN0ZWRYLFxuICAgIHNlbGVjdGVkWTogbm9ybWFsaXplZFkuc2VsZWN0ZWRZLFxuICAgIHNlbGVjdGVkWUFnZ3JlZ2F0ZTogbm9ybWFsaXplZFkuc2VsZWN0ZWRZQWdncmVnYXRlLFxuICAgIHNlbGVjdGVkR3JvdXBCeTogaGFzT3B0aW9uKGNvbmZpZy5ncm91cHMsIHRlbXBsYXRlLmdyb3VwQnkpID8gdGVtcGxhdGUuZ3JvdXBCeSA6IGJhc2Uuc2VsZWN0ZWRHcm91cEJ5LFxuICAgIHNlbGVjdGVkU2xpY2VzOiAodGVtcGxhdGUuc2VsZWN0ZWRTbGljZXMgfHwgW10pLmZpbHRlcihzbGljZUlkID0+IGhhc09wdGlvbihjb25maWcuc2xpY2VzLCBzbGljZUlkKSksXG4gIH07XG5cbiAgY29uc3QgcmVzb2x2ZWRUZW1wbGF0ZUlkID0gcmVzb2x2ZU1hdGNoaW5nVGVtcGxhdGVJZChjb25maWcudGVtcGxhdGVzLCBuZXh0U3RhdGUsIGNvbmZpZyk7XG4gIHJldHVybiB7XG4gICAgLi4ubmV4dFN0YXRlLFxuICAgIHNlbGVjdGVkVGVtcGxhdGU6IHJlc29sdmVkVGVtcGxhdGVJZCA/PyB0ZW1wbGF0ZS5pZFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZU1hdGNoaW5nVGVtcGxhdGVJZChcbiAgdGVtcGxhdGVzOiBPcmdhbml6ZXJUZW1wbGF0ZVtdIHwgdW5kZWZpbmVkLFxuICBzdGF0ZTogT3JnYW5pemVyU3RhdGUgfCB1bmRlZmluZWQsXG4gIGNvbmZpZzogUGljazxPcmdhbml6ZXJDb25maWcsICd4RmllbGRzJyB8ICd5RmllbGRzJyB8ICdncm91cHMnIHwgJ3NsaWNlcycgfCAndGVtcGxhdGVzJz5cbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghdGVtcGxhdGVzPy5sZW5ndGgpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgY29uc3Qgbm9ybWFsaXplZFN0YXRlID0gbm9ybWFsaXplU3RhdGVXaXRob3V0VGVtcGxhdGUoc3RhdGUsIGNvbmZpZyk7XG4gIHJldHVybiB0ZW1wbGF0ZXMuZmluZCh0ZW1wbGF0ZSA9PiB7XG4gICAgY29uc3QgdGVtcGxhdGVTdGF0ZSA9IG5vcm1hbGl6ZVN0YXRlV2l0aG91dFRlbXBsYXRlKFxuICAgICAgbm9ybWFsaXplVGVtcGxhdGVUb0NvbXBhcmFibGVTdGF0ZSh0ZW1wbGF0ZSwgbm9ybWFsaXplZFN0YXRlLCBjb25maWcpLFxuICAgICAgY29uZmlnXG4gICAgKTtcbiAgICByZXR1cm4gc2FtZU9yZ2FuaXplclN0YXRlKHRlbXBsYXRlU3RhdGUsIG5vcm1hbGl6ZWRTdGF0ZSk7XG4gIH0pPy5pZDtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplVGVtcGxhdGVUb0NvbXBhcmFibGVTdGF0ZShcbiAgdGVtcGxhdGU6IE9yZ2FuaXplclRlbXBsYXRlLFxuICBiYXNlU3RhdGU6IE9yZ2FuaXplclN0YXRlLFxuICBjb25maWc6IFBpY2s8T3JnYW5pemVyQ29uZmlnLCAneEZpZWxkcycgfCAneUZpZWxkcycgfCAnZ3JvdXBzJyB8ICdzbGljZXMnIHwgJ3RlbXBsYXRlcyc+XG4pOiBPcmdhbml6ZXJTdGF0ZSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRZID0gbm9ybWFsaXplWVNlbGVjdGlvbih0ZW1wbGF0ZS55RmllbGQsIHRlbXBsYXRlLnlBZ2dyZWdhdGUsIGNvbmZpZy55RmllbGRzLCBiYXNlU3RhdGUpO1xuICByZXR1cm4ge1xuICAgIC4uLmJhc2VTdGF0ZSxcbiAgICBzZWxlY3RlZFg6IGhhc09wdGlvbihjb25maWcueEZpZWxkcywgdGVtcGxhdGUueEZpZWxkKSA/IHRlbXBsYXRlLnhGaWVsZCA6IGJhc2VTdGF0ZS5zZWxlY3RlZFgsXG4gICAgc2VsZWN0ZWRZOiBub3JtYWxpemVkWS5zZWxlY3RlZFksXG4gICAgc2VsZWN0ZWRZQWdncmVnYXRlOiBub3JtYWxpemVkWS5zZWxlY3RlZFlBZ2dyZWdhdGUsXG4gICAgc2VsZWN0ZWRHcm91cEJ5OiBoYXNPcHRpb24oY29uZmlnLmdyb3VwcywgdGVtcGxhdGUuZ3JvdXBCeSkgPyB0ZW1wbGF0ZS5ncm91cEJ5IDogYmFzZVN0YXRlLnNlbGVjdGVkR3JvdXBCeSxcbiAgICBzZWxlY3RlZFNsaWNlczogdGVtcGxhdGUuc2VsZWN0ZWRTbGljZXNcbiAgICAgID8gdGVtcGxhdGUuc2VsZWN0ZWRTbGljZXMuZmlsdGVyKHNsaWNlSWQgPT4gaGFzT3B0aW9uKGNvbmZpZy5zbGljZXMsIHNsaWNlSWQpKVxuICAgICAgOiAoYmFzZVN0YXRlLnNlbGVjdGVkU2xpY2VzIHx8IFtdKSxcbiAgICBzZWxlY3RlZFRlbXBsYXRlOiB1bmRlZmluZWQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVN0YXRlV2l0aG91dFRlbXBsYXRlKFxuICBzdGF0ZTogT3JnYW5pemVyU3RhdGUgfCB1bmRlZmluZWQsXG4gIGNvbmZpZzogUGljazxPcmdhbml6ZXJDb25maWcsICd4RmllbGRzJyB8ICd5RmllbGRzJyB8ICdncm91cHMnIHwgJ3NsaWNlcycgfCAndGVtcGxhdGVzJz5cbik6IE9yZ2FuaXplclN0YXRlIHtcbiAgY29uc3QgYmFzZSA9IHN0YXRlIHx8IHt9O1xuICBjb25zdCBub3JtYWxpemVkWSA9IG5vcm1hbGl6ZVlTZWxlY3Rpb24oYmFzZS5zZWxlY3RlZFksIGJhc2Uuc2VsZWN0ZWRZQWdncmVnYXRlLCBjb25maWcueUZpZWxkcyk7XG4gIHJldHVybiB7XG4gICAgLi4uYmFzZSxcbiAgICBzZWxlY3RlZFg6IGhhc09wdGlvbihjb25maWcueEZpZWxkcywgYmFzZS5zZWxlY3RlZFgpID8gYmFzZS5zZWxlY3RlZFggOiB1bmRlZmluZWQsXG4gICAgc2VsZWN0ZWRZOiBub3JtYWxpemVkWS5zZWxlY3RlZFksXG4gICAgc2VsZWN0ZWRZQWdncmVnYXRlOiBub3JtYWxpemVkWS5zZWxlY3RlZFlBZ2dyZWdhdGUsXG4gICAgc2VsZWN0ZWRHcm91cEJ5OiBoYXNPcHRpb24oY29uZmlnLmdyb3VwcywgYmFzZS5zZWxlY3RlZEdyb3VwQnkpID8gYmFzZS5zZWxlY3RlZEdyb3VwQnkgOiB1bmRlZmluZWQsXG4gICAgc2VsZWN0ZWRTbGljZXM6IChiYXNlLnNlbGVjdGVkU2xpY2VzIHx8IFtdKS5maWx0ZXIoc2xpY2VJZCA9PiBoYXNPcHRpb24oY29uZmlnLnNsaWNlcywgc2xpY2VJZCkpLFxuICAgIHNlbGVjdGVkVGVtcGxhdGU6IHVuZGVmaW5lZCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplWVNlbGVjdGlvbihcbiAgc2VsZWN0ZWRZOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHNlbGVjdGVkWUFnZ3JlZ2F0ZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICB5RmllbGRzOiBPcmdhbml6ZXJZRmllbGRbXSB8IHVuZGVmaW5lZCxcbiAgZmFsbGJhY2tTdGF0ZT86IE9yZ2FuaXplclN0YXRlXG4pOiBQaWNrPE9yZ2FuaXplclN0YXRlLCAnc2VsZWN0ZWRZJyB8ICdzZWxlY3RlZFlBZ2dyZWdhdGUnPiB7XG4gIGlmICghc2VsZWN0ZWRZKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlbGVjdGVkWTogZmFsbGJhY2tTdGF0ZT8uc2VsZWN0ZWRZLFxuICAgICAgc2VsZWN0ZWRZQWdncmVnYXRlOiBmYWxsYmFja1N0YXRlPy5zZWxlY3RlZFlBZ2dyZWdhdGUsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGRpcmVjdEZpZWxkID0geUZpZWxkcz8uZmluZChmaWVsZCA9PiBmaWVsZC5pZCA9PT0gc2VsZWN0ZWRZKTtcbiAgaWYgKGRpcmVjdEZpZWxkKSB7XG4gICAgaWYgKCFkaXJlY3RGaWVsZC5hZ2dyZWdhdGVzPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB7IHNlbGVjdGVkWTogZGlyZWN0RmllbGQuaWQsIHNlbGVjdGVkWUFnZ3JlZ2F0ZTogdW5kZWZpbmVkIH07XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2hlZEFnZ3JlZ2F0ZSA9IHNlbGVjdGVkWUFnZ3JlZ2F0ZVxuICAgICAgPyBkaXJlY3RGaWVsZC5hZ2dyZWdhdGVzLmZpbmQoYWdncmVnYXRlID0+IGFnZ3JlZ2F0ZS5pZCA9PT0gc2VsZWN0ZWRZQWdncmVnYXRlKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgZmFsbGJhY2tBZ2dyZWdhdGUgPSBmYWxsYmFja1N0YXRlPy5zZWxlY3RlZFkgPT09IGRpcmVjdEZpZWxkLmlkXG4gICAgICA/IGRpcmVjdEZpZWxkLmFnZ3JlZ2F0ZXMuZmluZChhZ2dyZWdhdGUgPT4gYWdncmVnYXRlLmlkID09PSBmYWxsYmFja1N0YXRlLnNlbGVjdGVkWUFnZ3JlZ2F0ZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHJlc29sdmVkQWdncmVnYXRlID0gbWF0Y2hlZEFnZ3JlZ2F0ZSA/PyBmYWxsYmFja0FnZ3JlZ2F0ZSA/PyBkaXJlY3RGaWVsZC5hZ2dyZWdhdGVzWzBdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNlbGVjdGVkWTogZGlyZWN0RmllbGQuaWQsXG4gICAgICBzZWxlY3RlZFlBZ2dyZWdhdGU6IHJlc29sdmVkQWdncmVnYXRlPy5pZCxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgYWdncmVnYXRlUGFyZW50ID0geUZpZWxkcz8uZmluZChmaWVsZCA9PiBmaWVsZC5hZ2dyZWdhdGVzPy5zb21lKGFnZ3JlZ2F0ZSA9PiBhZ2dyZWdhdGUuaWQgPT09IHNlbGVjdGVkWSkpO1xuICBpZiAoYWdncmVnYXRlUGFyZW50KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlbGVjdGVkWTogYWdncmVnYXRlUGFyZW50LmlkLFxuICAgICAgc2VsZWN0ZWRZQWdncmVnYXRlOiBzZWxlY3RlZFksXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc2VsZWN0ZWRZOiBmYWxsYmFja1N0YXRlPy5zZWxlY3RlZFksXG4gICAgc2VsZWN0ZWRZQWdncmVnYXRlOiBmYWxsYmFja1N0YXRlPy5zZWxlY3RlZFlBZ2dyZWdhdGUsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHNhbWVPcmdhbml6ZXJTdGF0ZShsZWZ0OiBPcmdhbml6ZXJTdGF0ZSwgcmlnaHQ6IE9yZ2FuaXplclN0YXRlKTogYm9vbGVhbiB7XG4gIHJldHVybiBsZWZ0LnNlbGVjdGVkWCA9PT0gcmlnaHQuc2VsZWN0ZWRYXG4gICAgJiYgbGVmdC5zZWxlY3RlZFkgPT09IHJpZ2h0LnNlbGVjdGVkWVxuICAgICYmIGxlZnQuc2VsZWN0ZWRZQWdncmVnYXRlID09PSByaWdodC5zZWxlY3RlZFlBZ2dyZWdhdGVcbiAgICAmJiBsZWZ0LnNlbGVjdGVkR3JvdXBCeSA9PT0gcmlnaHQuc2VsZWN0ZWRHcm91cEJ5XG4gICAgJiYgc2FtZVNsaWNlcyhsZWZ0LnNlbGVjdGVkU2xpY2VzIHx8IFtdLCByaWdodC5zZWxlY3RlZFNsaWNlcyB8fCBbXSk7XG59XG5cbmZ1bmN0aW9uIHNhbWVTbGljZXMobGVmdDogc3RyaW5nW10sIHJpZ2h0OiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICBpZiAobGVmdC5sZW5ndGggIT09IHJpZ2h0Lmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBzb3J0ZWRMZWZ0ID0gWy4uLmxlZnRdLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSk7XG4gIGNvbnN0IHNvcnRlZFJpZ2h0ID0gWy4uLnJpZ2h0XS5zb3J0KChhLCBiKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpO1xuICByZXR1cm4gc29ydGVkTGVmdC5ldmVyeSgodmFsdWUsIGluZGV4KSA9PiB2YWx1ZSA9PT0gc29ydGVkUmlnaHRbaW5kZXhdKTtcbn1cblxuZnVuY3Rpb24gaGFzT3B0aW9uKGl0ZW1zOiBBcnJheTx7IGlkOiBzdHJpbmcgfT4gfCB1bmRlZmluZWQsIGlkOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuICEhaWQgJiYgISFpdGVtcz8uc29tZShpdGVtID0+IGl0ZW0uaWQgPT09IGlkKTtcbn1cbiJdfQ==
142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemVyLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb25ldGVtZS9qcXVlcnktb3JnYW5pemVyL3NyYy9saWIvbW9kZWxzL29yZ2FuaXplci11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQSxNQUFNLFVBQVUsWUFBWSxDQUFDLFVBQWlDO0lBQzVELE1BQU0sT0FBTyxHQUFhLEVBQUUsQ0FBQztJQUM3QixNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBMkIsQ0FBQztJQUUvQyxLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRTtRQUNsQyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO1FBQ2pDLElBQUksUUFBUSxFQUFFO1lBQ1osSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ3RCLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3ZCLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBQ3RFO1lBQ0QsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNqQyxJQUFJLE1BQU0sRUFBRSxVQUFVLEVBQUU7Z0JBQ3RCLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2FBQ3RFO1NBQ0Y7YUFBTTtZQUNMLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzNCLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFB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SUFDaEUsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRSxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDMUUsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLEtBQXdDLEVBQUUsRUFBc0I7SUFDakYsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUN2RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3JnYW5pemVyQ29uZmlnLCBPcmdhbml6ZXJTdGF0ZSwgT3JnYW5pemVyVGVtcGxhdGUsIE9yZ2FuaXplcllGaWVsZCB9IGZyb20gJy4vb3JnYW5pemVyLWNvbmZpZy5pbnRlcmZhY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplcllJbmRpY2F0b3Ige1xuICBpZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBncm91cD86IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkWUZpZWxkcyhpbmRpY2F0b3JzOiBPcmdhbml6ZXJZSW5kaWNhdG9yW10pOiBPcmdhbml6ZXJZRmllbGRbXSB7XG4gIGNvbnN0IG9yZGVyZWQ6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IG1hcCA9IG5ldyBNYXA8c3RyaW5nLCBPcmdhbml6ZXJZRmllbGQ+KCk7XG5cbiAgZm9yIChjb25zdCBpbmRpY2F0b3Igb2YgaW5kaWNhdG9ycykge1xuICAgIGNvbnN0IGdyb3VwS2V5ID0gaW5kaWNhdG9yLmdyb3VwO1xuICAgIGlmIChncm91cEtleSkge1xuICAgICAgaWYgKCFtYXAuaGFzKGdyb3VwS2V5KSkge1xuICAgICAgICBvcmRlcmVkLnB1c2goZ3JvdXBLZXkpO1xuICAgICAgICBtYXAuc2V0KGdyb3VwS2V5LCB7IGlkOiBncm91cEtleSwgbGFiZWw6IGdyb3VwS2V5LCBhZ2dyZWdhdGVzOiBbXSB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhcmVudCA9IG1hcC5nZXQoZ3JvdXBLZXkpO1xuICAgICAgaWYgKHBhcmVudD8uYWdncmVnYXRlcykge1xuICAgICAgICBwYXJlbnQuYWdncmVnYXRlcy5wdXNoKHsgaWQ6IGluZGljYXRvci5pZCwgbGFiZWw6IGluZGljYXRvci5sYWJlbCB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb3JkZXJlZC5wdXNoKGluZGljYXRvci5pZCk7XG4gICAgICBtYXAuc2V0KGluZGljYXRvci5pZCwgeyBpZDogaW5kaWNhdG9yLmlkLCBsYWJlbDogaW5kaWNhdG9yLmxhYmVsIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvcmRlcmVkLm1hcChrID0+IG1hcC5nZXQoaykpLmZpbHRlcigoZik6IGYgaXMgT3JnYW5pemVyWUZpZWxkID0+ICEhZik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlWUtleShcbiAgc2VsZWN0ZWRZOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHNlbGVjdGVkWUFnZ3JlZ2F0ZTogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gc2VsZWN0ZWRZQWdncmVnYXRlID8/IHNlbGVjdGVkWTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZU9yZ2FuaXplclN0YXRlKFxuICBzdGF0ZTogT3JnYW5pemVyU3RhdGUgfCB1bmRlZmluZWQsXG4gIGNvbmZpZzogUGljazxPcmdhbml6ZXJDb25maWcsICd4RmllbGRzJyB8ICd5RmllbGRzJyB8ICdncm91cHMnIHwgJ3NsaWNlcycgfCAndGVtcGxhdGVzJz5cbik6IE9yZ2FuaXplclN0YXRlIHtcbiAgY29uc3QgYmFzZSA9IHN0YXRlIHx8IHt9O1xuICBjb25zdCBub3JtYWxpemVkWSA9IG5vcm1hbGl6ZVlTZWxlY3Rpb24oYmFzZS5zZWxlY3RlZFksIGJhc2Uuc2VsZWN0ZWRZQWdncmVnYXRlLCBjb25maWcueUZpZWxkcyk7XG4gIGNvbnN0IHNlbGVjdGVkWCA9IGhhc09wdGlvbihjb25maWcueEZpZWxkcywgYmFzZS5zZWxlY3RlZFgpID8gYmFzZS5zZWxlY3RlZFggOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHNlbGVjdGVkR3JvdXBCeSA9IGhhc09wdGlvbihjb25maWcuZ3JvdXBzLCBiYXNlLnNlbGVjdGVkR3JvdXBCeSkgPyBiYXNlLnNlbGVjdGVkR3JvdXBCeSA6IHVuZGVmaW5lZDtcbiAgY29uc3Qgc2VsZWN0ZWRTbGljZXMgPSAoYmFzZS5zZWxlY3RlZFNsaWNlcyB8fCBbXSkuZmlsdGVyKHNsaWNlSWQgPT4gaGFzT3B0aW9uKGNvbmZpZy5zbGljZXMsIHNsaWNlSWQpKTtcblxuICBjb25zdCBub3JtYWxpemVkOiBPcmdhbml6ZXJTdGF0ZSA9IHtcbiAgICAuLi5iYXNlLFxuICAgIHNlbGVjdGVkWCxcbiAgICBzZWxlY3RlZFk6IG5vcm1hbGl6ZWRZLnNlbGVjdGVkWSxcbiAgICBzZWxlY3RlZFlBZ2dyZWdhdGU6IG5vcm1hbGl6ZWRZLnNlbGVjdGVkWUFnZ3JlZ2F0ZSxcbiAgICBzZWxlY3RlZEdyb3VwQnksXG4gICAgc2VsZWN0ZWRTbGljZXMsXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5ub3JtYWxpemVkLFxuICAgIHNlbGVjdGVkVGVtcGxhdGU6IHJlc29sdmVNYXRjaGluZ1RlbXBsYXRlSWQoY29uZmlnLnRlbXBsYXRlcywgbm9ybWFsaXplZCwgY29uZmlnKVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplVGVtcGxhdGVUb1N0YXRlKFxuICB0ZW1wbGF0ZTogT3JnYW5pemVyVGVtcGxhdGUsXG4gIGN1cnJlbnRTdGF0ZTogT3JnYW5pemVyU3RhdGUgfCB1bmRlZmluZWQsXG4gIGNvbmZpZzogUGljazxPcmdhbml6ZXJDb25maWcsICd4RmllbGRzJyB8ICd5RmllbGRzJyB8ICdncm91cHMnIHwgJ3NsaWNlcycgfCAndGVtcGxhdGVzJz5cbik6IE9yZ2FuaXplclN0YXRlIHtcbiAgY29uc3QgYmFzZSA9IG5vcm1hbGl6ZU9yZ2FuaXplclN0YXRlKGN1cnJlbnRTdGF0ZSwgY29uZmlnKTtcbiAgY29uc3Qgbm9ybWFsaXplZFkgPSBub3JtYWxpemVZU2VsZWN0aW9uKHRlbXBsYXRlLnlGaWVsZCwgdGVtcGxhdGUueUFnZ3JlZ2F0ZSwgY29uZmlnLnlGaWVsZHMsIGJhc2UpO1xuXG4gIGNvbnN0IG5leHRTdGF0ZTogT3JnYW5pemVyU3RhdGUgPSB7XG4gICAgdmlld01vZGU6IGJhc2Uudmlld01vZGUsXG4gICAgdmlzaWJsZUZpZWxkczogYmFzZS52aXNpYmxlRmllbGRzLFxuICAgIHNlbGVjdGVkWDogaGFzT3B0aW9uKGNvbmZpZy54RmllbGRzLCB0ZW1wbGF0ZS54RmllbGQpID8gdGVtcGxhdGUueEZpZWxkIDogYmFzZS5zZWxlY3RlZFgsXG4gICAgc2VsZWN0ZWRZOiBub3JtYWxpemVkWS5zZWxlY3RlZFksXG4gICAgc2VsZWN0ZWRZQWdncmVnYXRlOiBub3JtYWxpemVkWS5zZWxlY3RlZFlBZ2dyZWdhdGUsXG4gICAgc2VsZWN0ZWRHcm91cEJ5OiBoYXNPcHRpb24oY29uZmlnLmdyb3VwcywgdGVtcGxhdGUuZ3JvdXBCeSkgPyB0ZW1wbGF0ZS5ncm91cEJ5IDogYmFzZS5zZWxlY3RlZEdyb3VwQnksXG4gICAgc2VsZWN0ZWRTbGljZXM6ICh0ZW1wbGF0ZS5zZWxlY3RlZFNsaWNlcyB8fCBbXSkuZmlsdGVyKHNsaWNlSWQgPT4gaGFzT3B0aW9uKGNvbmZpZy5zbGljZXMsIHNsaWNlSWQpKSxcbiAgfTtcblxuICBjb25zdCByZXNvbHZlZFRlbXBsYXRlSWQgPSByZXNvbHZlTWF0Y2hpbmdUZW1wbGF0ZUlkKGNvbmZpZy50ZW1wbGF0ZXMsIG5leHRTdGF0ZSwgY29uZmlnKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5uZXh0U3RhdGUsXG4gICAgc2VsZWN0ZWRUZW1wbGF0ZTogcmVzb2x2ZWRUZW1wbGF0ZUlkID8/IHRlbXBsYXRlLmlkXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTWF0Y2hpbmdUZW1wbGF0ZUlkKFxuICB0ZW1wbGF0ZXM6IE9yZ2FuaXplclRlbXBsYXRlW10gfCB1bmRlZmluZWQsXG4gIHN0YXRlOiBPcmdhbml6ZXJTdGF0ZSB8IHVuZGVmaW5lZCxcbiAgY29uZmlnOiBQaWNrPE9yZ2FuaXplckNvbmZpZywgJ3hGaWVsZHMnIHwgJ3lGaWVsZHMnIHwgJ2dyb3VwcycgfCAnc2xpY2VzJyB8ICd0ZW1wbGF0ZXMnPlxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCF0ZW1wbGF0ZXM/Lmxlbmd0aCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICBjb25zdCBub3JtYWxpemVkU3RhdGUgPSBub3JtYWxpemVTdGF0ZVdpdGhvdXRUZW1wbGF0ZShzdGF0ZSwgY29uZmlnKTtcbiAgcmV0dXJuIHRlbXBsYXRlcy5maW5kKHRlbXBsYXRlID0+IHtcbiAgICBjb25zdCB0ZW1wbGF0ZVN0YXRlID0gbm9ybWFsaXplU3RhdGVXaXRob3V0VGVtcGxhdGUoXG4gICAgICBub3JtYWxpemVUZW1wbGF0ZVRvQ29tcGFyYWJsZVN0YXRlKHRlbXBsYXRlLCBub3JtYWxpemVkU3RhdGUsIGNvbmZpZyksXG4gICAgICBjb25maWdcbiAgICApO1xuICAgIHJldHVybiBzYW1lT3JnYW5pemVyU3RhdGUodGVtcGxhdGVTdGF0ZSwgbm9ybWFsaXplZFN0YXRlKTtcbiAgfSk/LmlkO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVTdGF0ZUNvcmUoXG4gIHNlbGVjdGVkWDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBzZWxlY3RlZFk6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgc2VsZWN0ZWRZQWdncmVnYXRlOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHNlbGVjdGVkR3JvdXBCeTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBzZWxlY3RlZFNsaWNlczogc3RyaW5nW10gfCB1bmRlZmluZWQsXG4gIGNvbmZpZzogUGljazxPcmdhbml6ZXJDb25maWcsICd4RmllbGRzJyB8ICd5RmllbGRzJyB8ICdncm91cHMnIHwgJ3NsaWNlcyc+LFxuICBvcmlnaW5hbFN0YXRlPzogT3JnYW5pemVyU3RhdGVcbik6IE9yZ2FuaXplclN0YXRlIHtcbiAgY29uc3Qgbm9ybWFsaXplZFkgPSBub3JtYWxpemVZU2VsZWN0aW9uKHNlbGVjdGVkWSwgc2VsZWN0ZWRZQWdncmVnYXRlLCBjb25maWcueUZpZWxkcywgb3JpZ2luYWxTdGF0ZSk7XG4gIHJldHVybiB7XG4gICAgc2VsZWN0ZWRYOiBoYXNPcHRpb24oY29uZmlnLnhGaWVsZHMsIHNlbGVjdGVkWCkgPyBzZWxlY3RlZFggOiB1bmRlZmluZWQsXG4gICAgc2VsZWN0ZWRZOiBub3JtYWxpemVkWS5zZWxlY3RlZFksXG4gICAgc2VsZWN0ZWRZQWdncmVnYXRlOiBub3JtYWxpemVkWS5zZWxlY3RlZFlBZ2dyZWdhdGUsXG4gICAgc2VsZWN0ZWRHcm91cEJ5OiBoYXNPcHRpb24oY29uZmlnLmdyb3Vwcywgc2VsZWN0ZWRHcm91cEJ5KSA/IHNlbGVjdGVkR3JvdXBCeSA6IHVuZGVmaW5lZCxcbiAgICBzZWxlY3RlZFNsaWNlczogKHNlbGVjdGVkU2xpY2VzIHx8IFtdKS5maWx0ZXIoc2xpY2VJZCA9PiBoYXNPcHRpb24oY29uZmlnLnNsaWNlcywgc2xpY2VJZCkpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVUZW1wbGF0ZVRvQ29tcGFyYWJsZVN0YXRlKFxuICB0ZW1wbGF0ZTogT3JnYW5pemVyVGVtcGxhdGUsXG4gIGJhc2VTdGF0ZTogT3JnYW5pemVyU3RhdGUsXG4gIGNvbmZpZzogUGljazxPcmdhbml6ZXJDb25maWcsICd4RmllbGRzJyB8ICd5RmllbGRzJyB8ICdncm91cHMnIHwgJ3NsaWNlcycgfCAndGVtcGxhdGVzJz5cbik6IE9yZ2FuaXplclN0YXRlIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZVN0YXRlQ29yZShcbiAgICB0ZW1wbGF0ZS54RmllbGQsXG4gICAgdGVtcGxhdGUueUZpZWxkLFxuICAgIHRlbXBsYXRlLnlBZ2dyZWdhdGUsXG4gICAgdGVtcGxhdGUuZ3JvdXBCeSxcbiAgICB0ZW1wbGF0ZS5zZWxlY3RlZFNsaWNlcyxcbiAgICBjb25maWcsXG4gICAgYmFzZVN0YXRlXG4gICk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVN0YXRlV2l0aG91dFRlbXBsYXRlKFxuICBzdGF0ZTogT3JnYW5pemVyU3RhdGUgfCB1bmRlZmluZWQsXG4gIGNvbmZpZzogUGljazxPcmdhbml6ZXJDb25maWcsICd4RmllbGRzJyB8ICd5RmllbGRzJyB8ICdncm91cHMnIHwgJ3NsaWNlcycgfCAndGVtcGxhdGVzJz5cbik6IE9yZ2FuaXplclN0YXRlIHtcbiAgY29uc3QgYmFzZSA9IHN0YXRlIHx8IHt9O1xuICByZXR1cm4gbm9ybWFsaXplU3RhdGVDb3JlKFxuICAgIGJhc2Uuc2VsZWN0ZWRYLFxuICAgIGJhc2Uuc2VsZWN0ZWRZLFxuICAgIGJhc2Uuc2VsZWN0ZWRZQWdncmVnYXRlLFxuICAgIGJhc2Uuc2VsZWN0ZWRHcm91cEJ5LFxuICAgIGJhc2Uuc2VsZWN0ZWRTbGljZXMsXG4gICAgY29uZmlnLFxuICAgIGJhc2VcbiAgKTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplWVNlbGVjdGlvbihcbiAgc2VsZWN0ZWRZOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHNlbGVjdGVkWUFnZ3JlZ2F0ZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICB5RmllbGRzOiBPcmdhbml6ZXJZRmllbGRbXSB8IHVuZGVmaW5lZCxcbiAgZmFsbGJhY2tTdGF0ZT86IE9yZ2FuaXplclN0YXRlXG4pOiBQaWNrPE9yZ2FuaXplclN0YXRlLCAnc2VsZWN0ZWRZJyB8ICdzZWxlY3RlZFlBZ2dyZWdhdGUnPiB7XG4gIGlmICghc2VsZWN0ZWRZKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlbGVjdGVkWTogZmFsbGJhY2tTdGF0ZT8uc2VsZWN0ZWRZLFxuICAgICAgc2VsZWN0ZWRZQWdncmVnYXRlOiBmYWxsYmFja1N0YXRlPy5zZWxlY3RlZFlBZ2dyZWdhdGUsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGRpcmVjdEZpZWxkID0geUZpZWxkcz8uZmluZChmaWVsZCA9PiBmaWVsZC5pZCA9PT0gc2VsZWN0ZWRZKTtcbiAgaWYgKGRpcmVjdEZpZWxkKSB7XG4gICAgaWYgKCFkaXJlY3RGaWVsZC5hZ2dyZWdhdGVzPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB7IHNlbGVjdGVkWTogZGlyZWN0RmllbGQuaWQsIHNlbGVjdGVkWUFnZ3JlZ2F0ZTogdW5kZWZpbmVkIH07XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2hlZEFnZ3JlZ2F0ZSA9IHNlbGVjdGVkWUFnZ3JlZ2F0ZVxuICAgICAgPyBkaXJlY3RGaWVsZC5hZ2dyZWdhdGVzLmZpbmQoYWdncmVnYXRlID0+IGFnZ3JlZ2F0ZS5pZCA9PT0gc2VsZWN0ZWRZQWdncmVnYXRlKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgZmFsbGJhY2tBZ2dyZWdhdGUgPSBmYWxsYmFja1N0YXRlPy5zZWxlY3RlZFkgPT09IGRpcmVjdEZpZWxkLmlkXG4gICAgICA/IGRpcmVjdEZpZWxkLmFnZ3JlZ2F0ZXMuZmluZChhZ2dyZWdhdGUgPT4gYWdncmVnYXRlLmlkID09PSBmYWxsYmFja1N0YXRlLnNlbGVjdGVkWUFnZ3JlZ2F0ZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHJlc29sdmVkQWdncmVnYXRlID0gbWF0Y2hlZEFnZ3JlZ2F0ZSA/PyBmYWxsYmFja0FnZ3JlZ2F0ZSA/PyBkaXJlY3RGaWVsZC5hZ2dyZWdhdGVzWzBdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNlbGVjdGVkWTogZGlyZWN0RmllbGQuaWQsXG4gICAgICBzZWxlY3RlZFlBZ2dyZWdhdGU6IHJlc29sdmVkQWdncmVnYXRlPy5pZCxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgYWdncmVnYXRlUGFyZW50ID0geUZpZWxkcz8uZmluZChmaWVsZCA9PiBmaWVsZC5hZ2dyZWdhdGVzPy5zb21lKGFnZ3JlZ2F0ZSA9PiBhZ2dyZWdhdGUuaWQgPT09IHNlbGVjdGVkWSkpO1xuICBpZiAoYWdncmVnYXRlUGFyZW50KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlbGVjdGVkWTogYWdncmVnYXRlUGFyZW50LmlkLFxuICAgICAgc2VsZWN0ZWRZQWdncmVnYXRlOiBzZWxlY3RlZFksXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc2VsZWN0ZWRZOiBmYWxsYmFja1N0YXRlPy5zZWxlY3RlZFksXG4gICAgc2VsZWN0ZWRZQWdncmVnYXRlOiBmYWxsYmFja1N0YXRlPy5zZWxlY3RlZFlBZ2dyZWdhdGUsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHNhbWVPcmdhbml6ZXJTdGF0ZShsZWZ0OiBPcmdhbml6ZXJTdGF0ZSwgcmlnaHQ6IE9yZ2FuaXplclN0YXRlKTogYm9vbGVhbiB7XG4gIHJldHVybiBsZWZ0LnNlbGVjdGVkWCA9PT0gcmlnaHQuc2VsZWN0ZWRYXG4gICAgJiYgbGVmdC5zZWxlY3RlZFkgPT09IHJpZ2h0LnNlbGVjdGVkWVxuICAgICYmIGxlZnQuc2VsZWN0ZWRZQWdncmVnYXRlID09PSByaWdodC5zZWxlY3RlZFlBZ2dyZWdhdGVcbiAgICAmJiBsZWZ0LnNlbGVjdGVkR3JvdXBCeSA9PT0gcmlnaHQuc2VsZWN0ZWRHcm91cEJ5XG4gICAgJiYgc2FtZVNsaWNlcyhsZWZ0LnNlbGVjdGVkU2xpY2VzIHx8IFtdLCByaWdodC5zZWxlY3RlZFNsaWNlcyB8fCBbXSk7XG59XG5cbmZ1bmN0aW9uIHNhbWVTbGljZXMobGVmdDogc3RyaW5nW10sIHJpZ2h0OiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICBpZiAobGVmdC5sZW5ndGggIT09IHJpZ2h0Lmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBzb3J0ZWRMZWZ0ID0gWy4uLmxlZnRdLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSk7XG4gIGNvbnN0IHNvcnRlZFJpZ2h0ID0gWy4uLnJpZ2h0XS5zb3J0KChhLCBiKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpO1xuICByZXR1cm4gc29ydGVkTGVmdC5ldmVyeSgodmFsdWUsIGluZGV4KSA9PiB2YWx1ZSA9PT0gc29ydGVkUmlnaHRbaW5kZXhdKTtcbn1cblxuZnVuY3Rpb24gaGFzT3B0aW9uKGl0ZW1zOiBBcnJheTx7IGlkOiBzdHJpbmcgfT4gfCB1bmRlZmluZWQsIGlkOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuICEhaWQgJiYgISFpdGVtcz8uc29tZShpdGVtID0+IGl0ZW0uaWQgPT09IGlkKTtcbn1cbiJdfQ==