@firestitch/report 18.10.1 → 18.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/app/reports/components/component-text/component-text.component.d.ts +1 -0
  2. package/app/reports/components/component-text/value-embed.plugin.d.ts +25 -1
  3. package/app/reports/components/report-canvas/report-canvas.component.d.ts +12 -0
  4. package/app/reports/components/report-component/report-component.component.d.ts +1 -0
  5. package/app/reports/data/report.data.d.ts +2 -2
  6. package/app/reports/dialogs/component-settings/component-settings.component.d.ts +13 -1
  7. package/app/reports/export/report-export-collector.service.d.ts +13 -5
  8. package/app/reports/export/report-filter-lines.d.ts +3 -0
  9. package/app/reports/filter-text.d.ts +8 -0
  10. package/app/reports/format.d.ts +1 -0
  11. package/app/reports/interfaces/report-export-lines-input.interface.d.ts +1 -0
  12. package/app/reports/report-filter-items.d.ts +9 -0
  13. package/app/reports/text.d.ts +16 -0
  14. package/esm2022/app/reports/components/component-text/component-text.component.mjs +34 -22
  15. package/esm2022/app/reports/components/component-text/value-embed.plugin.mjs +254 -42
  16. package/esm2022/app/reports/components/report-canvas/report-canvas.component.mjs +118 -13
  17. package/esm2022/app/reports/components/report-component/report-component.component.mjs +30 -11
  18. package/esm2022/app/reports/data/report.data.mjs +12 -7
  19. package/esm2022/app/reports/dialogs/component-settings/component-settings.component.mjs +57 -14
  20. package/esm2022/app/reports/export/report-export-collector.service.mjs +84 -33
  21. package/esm2022/app/reports/export/report-filter-lines.mjs +25 -8
  22. package/esm2022/app/reports/export/report-pdf.service.mjs +31 -21
  23. package/esm2022/app/reports/export/report-pptx.service.mjs +21 -11
  24. package/esm2022/app/reports/filter-text.mjs +154 -0
  25. package/esm2022/app/reports/format.mjs +3 -2
  26. package/esm2022/app/reports/interfaces/report-export-lines-input.interface.mjs +1 -1
  27. package/esm2022/app/reports/report-filter-items.mjs +24 -2
  28. package/esm2022/app/reports/text.mjs +59 -13
  29. package/esm2022/app/reports/views/report/fs-ai-report.component.mjs +14 -11
  30. package/esm2022/app/reports/views/report/report.component.mjs +15 -12
  31. package/fesm2022/{firestitch-report-echarts-DHEH_K_q.mjs → firestitch-report-echarts-CyHkFToO.mjs} +2 -2
  32. package/fesm2022/{firestitch-report-echarts-DHEH_K_q.mjs.map → firestitch-report-echarts-CyHkFToO.mjs.map} +1 -1
  33. package/fesm2022/{firestitch-report-firestitch-report-ZcHTnNKq.mjs → firestitch-report-firestitch-report-DftB7M1o.mjs} +2653 -1955
  34. package/fesm2022/firestitch-report-firestitch-report-DftB7M1o.mjs.map +1 -0
  35. package/fesm2022/firestitch-report.mjs +1 -1
  36. package/package.json +1 -1
  37. package/fesm2022/firestitch-report-firestitch-report-ZcHTnNKq.mjs.map +0 -1
@@ -47,6 +47,28 @@ export function filterLineText(group, value, context, form) {
47
47
  const name = pageOnly ? `${label} (page "${context.pageName}" only)` : label;
48
48
  return `${excludes(value) ? 'Exclude ' : ''}${name}: ${text}`;
49
49
  }
50
+ // The words of one filter's value as its chip reads them after the label
51
+ // ('West, East', '0 to 10', '0 or more', '50 or less'), or null when the
52
+ // value holds nothing. Values left out read as their names: filterLineText
53
+ // puts 'Exclude' before the label, and a {{filter.<id>}} token reads them as
54
+ // 'All except West'. The one source of these words, so the chip, a file's
55
+ // cover and a token never word a value two ways.
56
+ export function filterChipValueText(value, context) {
57
+ return value ? valueText('', value, context, 'chip') : null;
58
+ }
59
+ // Whether a value is worded as values left out: the same order valueText
60
+ // reads a value in, so a value with days or kept picks is never one.
61
+ export function excludes(value) {
62
+ return !!value && !value.start && !value.end && !value.values?.length && !!value.excludeValues?.length;
63
+ }
64
+ // The picks a value names, kept or left out, in pick order: what a select's
65
+ // names are read for. None for a date range.
66
+ export function valuePicks(value) {
67
+ if (!value || value.start || value.end) {
68
+ return [];
69
+ }
70
+ return value.values?.length ? value.values : value.excludeValues ?? [];
71
+ }
50
72
  // The match as text while it is 'any', else null; the chip also words 'all'.
51
73
  export function matchLineText(match, form) {
52
74
  if (match !== 'any') {
@@ -128,11 +150,6 @@ function dateText(value, context, form) {
128
150
  }
129
151
  return `${dateBoundLabel(value.start, context.locale) ?? '…'} – ${dateBoundLabel(value.end, context.locale) ?? '…'}`;
130
152
  }
131
- // Whether a value is worded as values left out: the same order valueText
132
- // reads a value in, so a value with days or kept picks is never one.
133
- function excludes(value) {
134
- return !value.start && !value.end && !value.values?.length && !!value.excludeValues?.length;
135
- }
136
153
  // The values a select leaves out. A line says what happens to the rows with
137
154
  // no value: they stay, unless the group's blank label is one of the values
138
155
  // left out. While the blank label is unknown (undefined) the line says
@@ -175,7 +192,7 @@ function groupLine(group, input) {
175
192
  if (!value) {
176
193
  return of(null);
177
194
  }
178
- const picks = value.start || value.end ? [] : (value.values?.length ? value.values : value.excludeValues ?? []);
195
+ const picks = valuePicks(value);
179
196
  const names$ = picks.length
180
197
  ? input.names(group, picks).pipe(catchError(() => of(null)))
181
198
  : of(null);
@@ -213,7 +230,7 @@ function drillLines(input) {
213
230
  .filter((component) => component.type === 'chart' && !!snapshot.view.tiles?.[component.id]?.drill?.length)
214
231
  .map((component) => ({
215
232
  kind: 'drill',
216
- text: drillLineText(component, snapshot.view.tiles[component.id].drill, snapshot.formatContext),
233
+ text: drillLineText({ title: input.titles?.[component.id] ?? component.title }, snapshot.view.tiles[component.id].drill, snapshot.formatContext),
217
234
  componentId: component.id,
218
235
  }));
219
236
  }
@@ -232,4 +249,4 @@ function pageName(report, pageId) {
232
249
  }
233
250
  return report.pages[index].name || `Page ${index + 1}`;
234
251
  }
235
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWZpbHRlci1saW5lcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9leHBvcnQvcmVwb3J0LWZpbHRlci1saW5lcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpELE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBUTlELE9BQU8sRUFFTCxtQkFBbUIsR0FLcEIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBR3JELDJFQUEyRTtBQUMzRSwyRUFBMkU7QUFDM0UsNEVBQTRFO0FBQzVFLHlFQUF5RTtBQUN6RSw0RUFBNEU7QUFHNUUsMEVBQTBFO0FBQzFFLHNFQUFzRTtBQUN0RSxvQkFBb0I7QUFDcEIsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLG1CQUFtQixDQUFDO0FBQ2xELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxzQ0FBc0MsQ0FBQztBQUVyRSwyRUFBMkU7QUFDM0UseUJBQXlCO0FBQ3pCLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxvQkFBb0IsQ0FBQztBQUVuRCxvQ0FBb0M7QUFDcEMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBRWpDLG1FQUFtRTtBQUNuRSxNQUFNLGNBQWMsR0FB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LElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksSUFBSSxRQUFRLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUN6RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZm9ya0pvaW4sIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IGNydW1iZWRUaXRsZSwgZHJpbGxDcnVtYkxhYmVscyB9IGZyb20gJy4uL2RyaWxsLWNydW1icyc7XG5pbXBvcnQgeyBmb3JtYXREYXlSYW5nZSwgZm9ybWF0UGxhaW5OdW1iZXIgfSBmcm9tICcuLi9mb3JtYXQnO1xuaW1wb3J0IHsgUmVwb3J0RHJpbGxTdGVwIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBvcnQtZHJpbGwtc3RlcC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVwb3J0RXhwb3J0TGluZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVwb3J0LWV4cG9ydC1saW5lLmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZXBvcnRFeHBvcnRMaW5lc0lucHV0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBvcnQtZXhwb3J0LWxpbmVzLWlucHV0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZXBvcnRGaWx0ZXJMaW5lQ29udGV4dCB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVwb3J0LWZpbHRlci1saW5lLWNvbnRleHQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFJlcG9ydEZpbHRlckxpbmVGb3JtIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBvcnQtZmlsdGVyLWxpbmUtZm9ybS50eXBlJztcbmltcG9ydCB7IFJlcG9ydEZpbHRlck1hdGNoIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBvcnQtZmlsdGVyLW1hdGNoLnR5cGUnO1xuaW1wb3J0IHsgUmVwb3J0Vmlld1N1bW1hcnkgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlcG9ydC12aWV3LXN1bW1hcnkuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIEZpbHRlckdyb3VwVmFsdWUsXG4gIEdSQU5VTEFSSVRZX09QVElPTlMsXG4gIFJlcG9ydCxcbiAgUmVwb3J0Q29tcG9uZW50LFxuICBSZXBvcnRGaWx0ZXJHcm91cCxcbiAgUmVwb3J0Rm9ybWF0Q29udGV4dCxcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IGRhdGVCb3VuZExhYmVsLCBkYXRlQm91bmRTdHJpbmcsIHJlbGF0aXZlTGFiZWwgfSBmcm9tICcuLi9yZXBvcnQtZmlsdGVyLWl0ZW1zJztcbmltcG9ydCB7IGlzVGlsZSB9IGZyb20gJy4uL3JlcG9ydC10aWxlJztcbmltcG9ydCB7IGZpbml0ZU51bWJlciB9IGZyb20gJy4uL3JlcG9ydC12aWV3LWNvbmZpZyc7XG5cblxuLy8gVGhlIHdvcmRzIGEgZmlsZSB1c2VzIGZvciB3aGF0IHRoZSBzY3JlZW4gaGVsZDogZWFjaCBmaWx0ZXIncyB2YWx1ZSwgdGhlXG4vLyBncm91cC1ieSBncmFpbiwgYSBkcmlsbGVkIHRpbGUsIHRoZSBtYXRjaCBhbmQgdGhlIG9wZW4gdmlldy4gVGhlIFBERiBhbmRcbi8vIFBvd2VyUG9pbnQgY292ZXJzIHByaW50IHRoZXNlIGxpbmVzLCBhbmQgdGhlIHppcCBzZW5kcyB0aGVtIChmaWx0ZXJMaW5lcyxcbi8vIHdpdGggZmlsdGVyU3VtbWFyeSBhcyB0aGVpciB0ZXh0IGZvciBhbiBvbGRlciBzZXJ2ZXIpLCBzbyBldmVyeSBleHBvcnRcbi8vIHdvcmRzIG9uZSBmaWx0ZXIgb25lIHdheS4gUHVyZSwgc28gdGhlIG5vZGUgaGFybmVzcyBjaGVja3MgZXZlcnkgd29yZGluZy5cblxuXG4vLyBUaGUgbWF0Y2ggd2hpbGUgdGhlIHJlcG9ydCBiYXIncyBmaWx0ZXJzIGNvbWJpbmUgd2l0aCAnYW55JzogdGhlIGNoaXAnc1xuLy8gd29yZHMsIGFuZCB0aGUgY292ZXIncyBsaW5lLiBUaGUgemlwJ3Mgbm90ZXMgY2FycnkgdGhlIHNlcnZlcidzIG93blxuLy8gc2VudGVuY2UgaW5zdGVhZC5cbmV4cG9ydCBjb25zdCBNQVRDSF9BTllfQ0hJUCA9ICdNYXRjaDogYW55IGZpbHRlcic7XG5leHBvcnQgY29uc3QgTUFUQ0hfQU5ZX0xJTkUgPSAnRmlsdGVycyBpbiB0aGUgcmVwb3J0IGJhcjogbWF0Y2ggYW55JztcblxuLy8gVGhlIHJlcG9ydCBiYXIncyBNYXRjaCBjaGlwIHdoaWxlIHRoZSBmaWx0ZXJzIGNvbWJpbmUgd2l0aCAnYWxsJy4gQSBmaWxlXG4vLyBwcmludHMgbm8gbGluZSBmb3IgaXQuXG5leHBvcnQgY29uc3QgTUFUQ0hfQUxMX0NISVAgPSAnTWF0Y2g6IGFsbCBmaWx0ZXJzJztcblxuLy8gQSBncm91cCdzIGxhYmVsIHdoZW4gaXQgaGFzIG5vbmUuXG5jb25zdCBVTkxBQkVMRURfR1JPVVAgPSAnRmlsdGVyJztcblxuLy8gVGhlIGxhYmVsIG9mIHRoZSBncm91cC1ieSBsaW5lIHdoZW4gdGhlIHJlcG9ydCBuYW1lcyBubyBjb250cm9sLlxuY29uc3QgR1JPVVBfQllfTEFCRUwgPSAnR3JvdXAgQnknO1xuXG5cbi8vIE9uZSBmaWx0ZXIgZ3JvdXAncyB2YWx1ZSBhcyB0ZXh0ICgnUmVnaW9uOiBXZXN0LCBFYXN0JyksIG9yIG51bGwgd2hlbiB0aGVcbi8vIHZhbHVlIGhvbGRzIG5vdGhpbmcuIFZhbHVlcyBsZWZ0IG91dCBzYXkgc28gYmVmb3JlIHRoZSBsYWJlbDogJ0V4Y2x1ZGVcbi8vIFJlZ2lvbjogV2VzdCwgRWFzdCcuICdjaGlwJyBpcyB0aGUgc2hvcnQgZm9ybTsgJ2xpbmUnIGFkZHMgd2hhdCBhIGZpbGVcbi8vIHJlYWRlciBjYW5ub3Qgc2VlIG9uIHNjcmVlbjpcbi8vIC0gZXhjbHVkZTogJ0V4Y2x1ZGUgUmVnaW9uOiBXZXN0LCBFYXN0IChyb3dzIHdpdGggbm8gUmVnaW9uIGFyZSBrZXB0KScsIG9yXG4vLyAgICcuLi4gYXJlIGxlZnQgb3V0JyB3aGVuIHRoZSBibGFuayBsYWJlbCAoY29udGV4dC5ibGFua0xhYmVsKSBpcyBvbmUgb2Zcbi8vICAgdGhlIHZhbHVlcyBsZWZ0IG91dC4gV2l0aG91dCBhIGtub3duIGJsYW5rIGxhYmVsIHRoZSBsaW5lIHNheXMgbm90aGluZ1xuLy8gICBhYm91dCB0aGUgYmxhbmsgcm93cztcbi8vIC0gcmFuZ2U6ICdBbW91bnQ6IDEwIHRvIDUwIChib3RoIGluY2x1ZGVkKSc7IGFuIG9wZW4gZW5kIHJlYWRzICcxMCBvclxuLy8gICBtb3JlJyBvciAnNTAgb3IgbGVzcycgaW4gYm90aCBmb3Jtcztcbi8vIC0gYSBsaXZlIHByZXNldDogJ1JlcG9ydCBQZXJpb2Q6IExhc3QgMzAgZGF5cyAoU2VwIDMg4oCTIE9jdCAyLCAyMDI2KSc7XG4vLyAtIGEgcGFnZSBncm91cDogJ0NvaG9ydCAocGFnZSBcIlJldGVudGlvblwiIG9ubHkpOiAyMDI1Jy5cbi8vIE51bWJlcnMgYW5kIGRhdGVzIGFyZSB3cml0dGVuIGluIHRoZSByZXBvcnQncyBsb2NhbGUsIGFuZCAwIGlzIGEgbnVtYmVyXG4vLyBsaWtlIGFueSBvdGhlci5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJMaW5lVGV4dChcbiAgZ3JvdXA6IFBpY2s8UmVwb3J0RmlsdGVyR3JvdXAsICdsYWJlbCcgfCAnbGV2ZWwnPixcbiAgdmFsdWU6IEZpbHRlckdyb3VwVmFsdWUgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBjb250ZXh0OiBSZXBvcnRGaWx0ZXJMaW5lQ29udGV4dCxcbiAgZm9ybTogUmVwb3J0RmlsdGVyTGluZUZvcm0sXG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgbGFiZWwgPSBncm91cC5sYWJlbCB8fCBVTkxBQkVMRURfR1JPVVA7XG4gIGNvbnN0IHRleHQgPSB2YWx1ZSA/IHZhbHVlVGV4dChsYWJlbCwgdmFsdWUsIGNvbnRleHQsIGZvcm0pIDogbnVsbDtcblxuICBpZiAodGV4dCA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgcGFnZU9ubHkgPSBmb3JtID09PSAnbGluZScgJiYgZ3JvdXAubGV2ZWwgPT09ICdwYWdlJyAmJiBjb250ZXh0LnBhZ2VOYW1lO1xuICBjb25zdCBuYW1lID0gcGFnZU9ubHkgPyBgJHtsYWJlbH0gKHBhZ2UgXCIke2NvbnRleHQucGFnZU5hbWV9XCIgb25seSlgIDogbGFiZWw7XG5cbiAgcmV0dXJuIGAke2V4Y2x1ZGVzKHZhbHVlKSA/ICdFeGNsdWRlICcgOiAnJ30ke25hbWV9OiAke3RleHR9YDtcbn1cblxuLy8gVGhlIG1hdGNoIGFzIHRleHQgd2hpbGUgaXQgaXMgJ2FueScsIGVsc2UgbnVsbDsgdGhlIGNoaXAgYWxzbyB3b3JkcyAnYWxsJy5cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaExpbmVUZXh0KG1hdGNoOiBSZXBvcnRGaWx0ZXJNYXRjaCB8IG51bGwgfCB1bmRlZmluZWQsIGZvcm06IFJlcG9ydEZpbHRlckxpbmVGb3JtKTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmIChtYXRjaCAhPT0gJ2FueScpIHtcbiAgICByZXR1cm4gZm9ybSA9PT0gJ2NoaXAnICYmIG1hdGNoID09PSAnYWxsJyA/IE1BVENIX0FMTF9DSElQIDogbnVsbDtcbiAgfVxuXG4gIHJldHVybiBmb3JtID09PSAnY2hpcCcgPyBNQVRDSF9BTllfQ0hJUCA6IE1BVENIX0FOWV9MSU5FO1xufVxuXG4vLyBBIGRyaWxsZWQgdGlsZSdzIGxpbmU6IGl0cyB0aXRsZSBhbmQgdGhlIGJyZWFkY3J1bWIgb2YgaXRzIHBhdGgsIGluIHRoZVxuLy8gcmVwb3J0J3MgbG9jYWxlICgnUmV2ZW51ZSBieSBQZXJpb2Qg4oC6IDIwMjYg4oC6IFEzJykuXG5leHBvcnQgZnVuY3Rpb24gZHJpbGxMaW5lVGV4dChcbiAgY29tcG9uZW50OiBQaWNrPFJlcG9ydENvbXBvbmVudCwgJ3RpdGxlJz4sXG4gIHBhdGg6IHJlYWRvbmx5IFJlcG9ydERyaWxsU3RlcFtdLFxuICBmb3JtYXRDb250ZXh0OiBQaWNrPFJlcG9ydEZvcm1hdENvbnRleHQsICdsb2NhbGUnPixcbik6IHN0cmluZyB7XG4gIHJldHVybiBjcnVtYmVkVGl0bGUoY29tcG9uZW50LnRpdGxlLCBkcmlsbENydW1iTGFiZWxzKHBhdGgsIGZvcm1hdENvbnRleHQpKTtcbn1cblxuLy8gVGhlIGNvdmVyJ3MgbGluZSBmb3IgdGhlIG9wZW4gc2F2ZWQgdmlldzogJ1ZpZXc6IFwiUTMgTm9ydGhcIiAoc2hhcmVkKScsXG4vLyB3aXRoICcsIGNoYW5nZWQgc2luY2UgaXQgd2FzIG9wZW5lZCcgd2hpbGUgdGhlIHNjcmVlbiBkaWZmZXJzIGZyb20gaXQuXG4vLyBOdWxsIHdoZW4gbm8gdmlldyBpcyBvcGVuLlxuZXhwb3J0IGZ1bmN0aW9uIHZpZXdMaW5lVGV4dChcbiAgdmlldzogUGljazxSZXBvcnRWaWV3U3VtbWFyeSwgJ25hbWUnIHwgJ3NoYXJlZCc+IHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgY2hhbmdlZDogYm9vbGVhbixcbik6IHN0cmluZyB8IG51bGwge1xuICBpZiAoIXZpZXcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGxpbmUgPSBgVmlldzogXCIkeyh2aWV3Lm5hbWUgPz8gJycpLnRyaW0oKX1cIiAoJHt2aWV3LnNoYXJlZCA/ICdzaGFyZWQnIDogJ3BlcnNvbmFsJ30pYDtcblxuICByZXR1cm4gY2hhbmdlZCA/IGAke2xpbmV9LCBjaGFuZ2VkIHNpbmNlIGl0IHdhcyBvcGVuZWRgIDogbGluZTtcbn1cblxuLy8gVGhlIGZpbHRlciBsaW5lcyBvZiBhbiBleHBvcnQsIGluIG9yZGVyOiBvbmUgcGVyIGZpbHRlciBncm91cCB3aXRoIGFcbi8vIHZhbHVlICh0aGUgcmVwb3J0J3MgZ3JvdXAgb3JkZXIpLCB0aGUgZ3JvdXAtYnkgbGluZSwgdGhlbiBvbmUgcGVyIGRyaWxsZWRcbi8vIGNoYXJ0IChwYWdlIG9yZGVyKS4gQSBUaGlzIFBhZ2UgZXhwb3J0IChpbnB1dC5wYWdlSWQpIGxpc3RzIG9ubHkgdGhlXG4vLyBncm91cHMgdGhhdCByZWFjaCBhIHRpbGUgb2YgdGhhdCBwYWdlLCBhbmQgb25seSB0aGF0IHBhZ2UncyBkcmlsbGVkXG4vLyBjaGFydHMuIEEgc2VsZWN0J3MgbmFtZXMgYXJlIGEgcmVxdWVzdCwgc28gdGhlIGxpbmVzIGFycml2ZSB0b2dldGhlciBvbmNlXG4vLyBldmVyeSBuYW1lIGlzIGtub3duOyBhIGZhaWxlZCBuYW1lIHJlYWQgd3JpdGVzIHRoZSBwaWNrcyBhcyB0aGV5IGFyZVxuLy8gc3RvcmVkLlxuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydExpbmVzKGlucHV0OiBSZXBvcnRFeHBvcnRMaW5lc0lucHV0KTogT2JzZXJ2YWJsZTxSZXBvcnRFeHBvcnRMaW5lW10+IHtcbiAgY29uc3QgZ3JvdXBzJCA9IGV4cG9ydEdyb3VwcyhpbnB1dC5yZXBvcnQsIGlucHV0LnBhZ2VJZClcbiAgICAubWFwKChncm91cCkgPT4gZ3JvdXBMaW5lKGdyb3VwLCBpbnB1dCkpO1xuICBjb25zdCByZXN0ID0gW2dyb3VwQnlMaW5lKGlucHV0KSwgLi4uZHJpbGxMaW5lcyhpbnB1dCldXG4gICAgLmZpbHRlcigobGluZSk6IGxpbmUgaXMgUmVwb3J0RXhwb3J0TGluZSA9PiBsaW5lICE9PSBudWxsKTtcblxuICByZXR1cm4gKGdyb3VwcyQubGVuZ3RoID8gZm9ya0pvaW4oZ3JvdXBzJCkgOiBvZihbXSkpXG4gICAgLnBpcGUoXG4gICAgICBtYXAoKGxpbmVzKSA9PiBbXG4gICAgICAgIC4uLmxpbmVzLmZpbHRlcigobGluZSk6IGxpbmUgaXMgUmVwb3J0RXhwb3J0TGluZSA9PiBsaW5lICE9PSBudWxsKSxcbiAgICAgICAgLi4ucmVzdCxcbiAgICAgIF0pLFxuICAgICk7XG59XG5cbi8vIFRoZSBncm91cHMgYW4gZXhwb3J0J3MgbGluZXMgbWF5IG5hbWU6IGV2ZXJ5IGdyb3VwLCBvciBmb3IgYSBUaGlzIFBhZ2Vcbi8vIGV4cG9ydCB0aGUgZ3JvdXBzIHdpdGggYSBtZW1iZXIgdGlsZSBvbiB0aGF0IHBhZ2UuIEEgcGFnZSBncm91cCByZWFjaGVzXG4vLyBvbmx5IGl0cyBvd24gcGFnZS5cbmV4cG9ydCBmdW5jdGlvbiBleHBvcnRHcm91cHMocmVwb3J0OiBSZXBvcnQsIHBhZ2VJZDogbnVtYmVyIHwgbnVsbCk6IFJlcG9ydEZpbHRlckdyb3VwW10ge1xuICBjb25zdCBncm91cHMgPSByZXBvcnQuZmlsdGVyR3JvdXBzID8/IFtdO1xuXG4gIGlmICghcGFnZUlkKSB7XG4gICAgcmV0dXJuIGdyb3VwcztcbiAgfVxuXG4gIGNvbnN0IHBhZ2UgPSAocmVwb3J0LnBhZ2VzID8/IFtdKS5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5pZCA9PT0gcGFnZUlkKTtcbiAgY29uc3QgdGlsZUlkcyA9IChwYWdlPy5jb21wb25lbnRzID8/IFtdKVxuICAgIC5maWx0ZXIoKGNvbXBvbmVudCkgPT4gaXNUaWxlKGNvbXBvbmVudCkpXG4gICAgLm1hcCgoY29tcG9uZW50KSA9PiBjb21wb25lbnQuaWQpO1xuXG4gIHJldHVybiBncm91cHMuZmlsdGVyKChncm91cCkgPT4gKGdyb3VwLmxldmVsICE9PSAncGFnZScgfHwgZ3JvdXAucGFnZUlkID09PSBwYWdlSWQpXG4gICAgJiYgZ3JvdXBNZW1iZXJJZHMoZ3JvdXApLnNvbWUoKGNvbXBvbmVudElkKSA9PiB0aWxlSWRzLmluY2x1ZGVzKGNvbXBvbmVudElkKSkpO1xufVxuXG4vLyBUaGUgdGV4dCBhZnRlciB0aGUgbGFiZWwsIG9yIG51bGwgd2hlbiB0aGUgdmFsdWUgaG9sZHMgbm90aGluZy5cbmZ1bmN0aW9uIHZhbHVlVGV4dChcbiAgbGFiZWw6IHN0cmluZyxcbiAgdmFsdWU6IEZpbHRlckdyb3VwVmFsdWUsXG4gIGNvbnRleHQ6IFJlcG9ydEZpbHRlckxpbmVDb250ZXh0LFxuICBmb3JtOiBSZXBvcnRGaWx0ZXJMaW5lRm9ybSxcbik6IHN0cmluZyB8IG51bGwge1xuICBpZiAodmFsdWUuc3RhcnQgfHwgdmFsdWUuZW5kKSB7XG4gICAgcmV0dXJuIGRhdGVUZXh0KHZhbHVlLCBjb250ZXh0LCBmb3JtKTtcbiAgfVxuXG4gIGlmICh2YWx1ZS52YWx1ZXM/Lmxlbmd0aCkge1xuICAgIHJldHVybiBwaWNrTmFtZXModmFsdWUudmFsdWVzLCBjb250ZXh0KS5qb2luKCcsICcpO1xuICB9XG5cbiAgaWYgKHZhbHVlLmV4Y2x1ZGVWYWx1ZXM/Lmxlbmd0aCkge1xuICAgIHJldHVybiBleGNsdWRlVGV4dChsYWJlbCwgdmFsdWUuZXhjbHVkZVZhbHVlcywgY29udGV4dCwgZm9ybSk7XG4gIH1cblxuICBjb25zdCBrZXl3b3JkID0gdHlwZW9mIHZhbHVlLnZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlLnZhbHVlLnRyaW0oKSA6ICcnO1xuXG4gIHJldHVybiByYW5nZVRleHQodmFsdWUsIGNvbnRleHQsIGZvcm0pID8/IChrZXl3b3JkID8gYFwiJHtrZXl3b3JkfVwiYCA6IG51bGwpO1xufVxuXG4vLyBBIGRhdGUgcmFuZ2U6IGEgbGl2ZSBwcmVzZXQgYnkgaXRzIG5hbWUgKHdpdGggaXRzIGRheXMgaW4gYSBsaW5lKSwgZWxzZVxuLy8gaXRzIHR3byBkYXlzICgn4oCmJyBmb3IgYW4gb3BlbiBlbmQpLlxuZnVuY3Rpb24gZGF0ZVRleHQodmFsdWU6IEZpbHRlckdyb3VwVmFsdWUsIGNvbnRleHQ6IFJlcG9ydEZpbHRlckxpbmVDb250ZXh0LCBmb3JtOiBSZXBvcnRGaWx0ZXJMaW5lRm9ybSk6IHN0cmluZyB7XG4gIGlmIChjb250ZXh0LnByZXNldCkge1xuICAgIGNvbnN0IG5hbWUgPSByZWxhdGl2ZUxhYmVsKGNvbnRleHQucHJlc2V0KTtcbiAgICBjb25zdCBkYXlzID0gZm9ybSA9PT0gJ2xpbmUnXG4gICAgICA/IGZvcm1hdERheVJhbmdlKGRhdGVCb3VuZFN0cmluZyh2YWx1ZS5zdGFydCksIGRhdGVCb3VuZFN0cmluZyh2YWx1ZS5lbmQpLCBjb250ZXh0LmxvY2FsZSlcbiAgICAgIDogJyc7XG5cbiAgICByZXR1cm4gZGF5cyA/IGAke25hbWV9ICgke2RheXN9KWAgOiBuYW1lO1xuICB9XG5cbiAgcmV0dXJuIGAke2RhdGVCb3VuZExhYmVsKHZhbHVlLnN0YXJ0LCBjb250ZXh0LmxvY2FsZSkgPz8gJ+KApid9IOKAkyAke2RhdGVCb3VuZExhYmVsKHZhbHVlLmVuZCwgY29udGV4dC5sb2NhbGUpID8/ICfigKYnfWA7XG59XG5cbi8vIFdoZXRoZXIgYSB2YWx1ZSBpcyB3b3JkZWQgYXMgdmFsdWVzIGxlZnQgb3V0OiB0aGUgc2FtZSBvcmRlciB2YWx1ZVRleHRcbi8vIHJlYWRzIGEgdmFsdWUgaW4sIHNvIGEgdmFsdWUgd2l0aCBkYXlzIG9yIGtlcHQgcGlja3MgaXMgbmV2ZXIgb25lLlxuZnVuY3Rpb24gZXhjbHVkZXModmFsdWU6IEZpbHRlckdyb3VwVmFsdWUpOiBib29sZWFuIHtcbiAgcmV0dXJuICF2YWx1ZS5zdGFydCAmJiAhdmFsdWUuZW5kICYmICF2YWx1ZS52YWx1ZXM/Lmxlbmd0aCAmJiAhIXZhbHVlLmV4Y2x1ZGVWYWx1ZXM/Lmxlbmd0aDtcbn1cblxuLy8gVGhlIHZhbHVlcyBhIHNlbGVjdCBsZWF2ZXMgb3V0LiBBIGxpbmUgc2F5cyB3aGF0IGhhcHBlbnMgdG8gdGhlIHJvd3Mgd2l0aFxuLy8gbm8gdmFsdWU6IHRoZXkgc3RheSwgdW5sZXNzIHRoZSBncm91cCdzIGJsYW5rIGxhYmVsIGlzIG9uZSBvZiB0aGUgdmFsdWVzXG4vLyBsZWZ0IG91dC4gV2hpbGUgdGhlIGJsYW5rIGxhYmVsIGlzIHVua25vd24gKHVuZGVmaW5lZCkgdGhlIGxpbmUgc2F5c1xuLy8gbm90aGluZyBhYm91dCB0aGVtOiBhIGJsYW5rIGxhYmVsIGFtb25nIHRoZSBwaWNrcyB3b3VsZCBtYWtlICdhcmUga2VwdCdcbi8vIGZhbHNlLlxuZnVuY3Rpb24gZXhjbHVkZVRleHQoXG4gIGxhYmVsOiBzdHJpbmcsXG4gIHZhbHVlczogdW5rbm93bltdLFxuICBjb250ZXh0OiBSZXBvcnRGaWx0ZXJMaW5lQ29udGV4dCxcbiAgZm9ybTogUmVwb3J0RmlsdGVyTGluZUZvcm0sXG4pOiBzdHJpbmcge1xuICBjb25zdCB0ZXh0ID0gcGlja05hbWVzKHZhbHVlcywgY29udGV4dCkuam9pbignLCAnKTtcbiAgY29uc3QgYmxhbmtMYWJlbCA9IGNvbnRleHQuYmxhbmtMYWJlbDtcblxuICBpZiAoZm9ybSA9PT0gJ2NoaXAnIHx8IGJsYW5rTGFiZWwgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0ZXh0O1xuICB9XG5cbiAgY29uc3QgYmxhbmsgPSBibGFua0xhYmVsICE9PSBudWxsICYmIHZhbHVlcy5zb21lKCh2YWx1ZSkgPT4gU3RyaW5nKHZhbHVlKSA9PT0gYmxhbmtMYWJlbCk7XG5cbiAgcmV0dXJuIGAke3RleHR9IChyb3dzIHdpdGggbm8gJHtsYWJlbH0gJHtibGFuayA/ICdhcmUgbGVmdCBvdXQnIDogJ2FyZSBrZXB0J30pYDtcbn1cblxuLy8gQSBudW1iZXIgcmFuZ2UncyBlbmRzIGluIHRoZSByZXBvcnQncyBsb2NhbGUsIG9yIG51bGwgd2l0aCBuZWl0aGVyLlxuZnVuY3Rpb24gcmFuZ2VUZXh0KHZhbHVlOiBGaWx0ZXJHcm91cFZhbHVlLCBjb250ZXh0OiBSZXBvcnRGaWx0ZXJMaW5lQ29udGV4dCwgZm9ybTogUmVwb3J0RmlsdGVyTGluZUZvcm0pOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgbWluID0gZmluaXRlTnVtYmVyKHZhbHVlLm1pbik7XG4gIGNvbnN0IG1heCA9IGZpbml0ZU51bWJlcih2YWx1ZS5tYXgpO1xuICBjb25zdCB3cml0ZSA9IChlbmQ6IG51bWJlcikgPT4gZm9ybWF0UGxhaW5OdW1iZXIoZW5kLCBjb250ZXh0LmxvY2FsZSk7XG5cbiAgaWYgKG1pbiAhPT0gdW5kZWZpbmVkICYmIG1heCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGAke3dyaXRlKG1pbil9IHRvICR7d3JpdGUobWF4KX0ke2Zvcm0gPT09ICdsaW5lJyA/ICcgKGJvdGggaW5jbHVkZWQpJyA6ICcnfWA7XG4gIH1cblxuICBpZiAobWluICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYCR7d3JpdGUobWluKX0gb3IgbW9yZWA7XG4gIH1cblxuICByZXR1cm4gbWF4ICE9PSB1bmRlZmluZWQgPyBgJHt3cml0ZShtYXgpfSBvciBsZXNzYCA6IG51bGw7XG59XG5cbi8vIFRoZSBwaWNrcycgbmFtZXM6IHRoZSBvbmVzIHRoZSBjYWxsZXIgcmVzb2x2ZWQsIGVsc2UgZWFjaCBwaWNrIGFzIHN0b3JlZC5cbmZ1bmN0aW9uIHBpY2tOYW1lcyh2YWx1ZXM6IHVua25vd25bXSwgY29udGV4dDogUmVwb3J0RmlsdGVyTGluZUNvbnRleHQpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IG5hbWVzID0gY29udGV4dC5uYW1lcztcblxuICByZXR1cm4gdmFsdWVzLm1hcCgodmFsdWUsIGluZGV4KSA9PiBuYW1lcz8uW2luZGV4XSA/PyBTdHJpbmcodmFsdWUpKTtcbn1cblxuLy8gT25lIGdyb3VwJ3MgbGluZSwgb25jZSBpdHMgcGlja3MgYXJlIG5hbWVkLiBBbiBleGNsdWRlIGxpbmUgc2F5cyB3aGF0XG4vLyBoYXBwZW5zIHRvIHRoZSBibGFuayByb3dzIGZyb20gdGhlIGdyb3VwJ3MgYmxhbmsgbGFiZWwsIHdoaWNoIHRoZSBzZXJ2ZXJcbi8vIHNlbmRzIG9uIGEgc2VsZWN0IGdyb3VwIChudWxsOiBibGFuayByb3dzIGhhdmUgbm9uZSkuIEFuIG9sZGVyIHNlcnZlclxuLy8gc2VuZHMgbm9uZSwgYW5kIHRoZSBsaW5lIHRoZW4gc2F5cyBub3RoaW5nIGFib3V0IHRoZW0uXG5mdW5jdGlvbiBncm91cExpbmUoZ3JvdXA6IFJlcG9ydEZpbHRlckdyb3VwLCBpbnB1dDogUmVwb3J0RXhwb3J0TGluZXNJbnB1dCk6IE9ic2VydmFibGU8UmVwb3J0RXhwb3J0TGluZSB8IG51bGw+IHtcbiAgY29uc3Qgc25hcHNob3QgPSBpbnB1dC5zbmFwc2hvdDtcbiAgY29uc3QgdmFsdWUgPSBzbmFwc2hvdC52YWx1ZXNbZ3JvdXAuaWRdO1xuXG4gIGlmICghdmFsdWUpIHtcbiAgICByZXR1cm4gb2YobnVsbCk7XG4gIH1cblxuICBjb25zdCBwaWNrcyA9IHZhbHVlLnN0YXJ0IHx8IHZhbHVlLmVuZCA/IFtdIDogKHZhbHVlLnZhbHVlcz8ubGVuZ3RoID8gdmFsdWUudmFsdWVzIDogdmFsdWUuZXhjbHVkZVZhbHVlcyA/PyBbXSk7XG4gIGNvbnN0IG5hbWVzJCA9IHBpY2tzLmxlbmd0aFxuICAgID8gaW5wdXQubmFtZXMoZ3JvdXAsIHBpY2tzKS5waXBlKGNhdGNoRXJyb3IoKCkgPT4gb2YobnVsbCkpKVxuICAgIDogb2YobnVsbCk7XG5cbiAgcmV0dXJuIG5hbWVzJC5waXBlKFxuICAgIG1hcCgobmFtZXMpOiBSZXBvcnRFeHBvcnRMaW5lIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCB0ZXh0ID0gZmlsdGVyTGluZVRleHQoZ3JvdXAsIHZhbHVlLCB7XG4gICAgICAgIGxvY2FsZTogc25hcHNob3QuZm9ybWF0Q29udGV4dC5sb2NhbGUsXG4gICAgICAgIG5hbWVzLFxuICAgICAgICBwcmVzZXQ6IHNuYXBzaG90LnByZXNldHNbZ3JvdXAuaWRdID8/IG51bGwsXG4gICAgICAgIHBhZ2VOYW1lOiBwYWdlTmFtZShpbnB1dC5yZXBvcnQsIGdyb3VwLnBhZ2VJZCksXG4gICAgICAgIGJsYW5rTGFiZWw6IGdyb3VwLmJsYW5rTGFiZWwsXG4gICAgICB9LCAnbGluZScpO1xuXG4gICAgICByZXR1cm4gdGV4dCA/IHsga2luZDogJ2dyb3VwJywgdGV4dCwgZ3JvdXBJZDogZ3JvdXAuaWQgfSA6IG51bGw7XG4gICAgfSksXG4gICk7XG59XG5cbi8vIFRoZSBncm91cC1ieSBncmFpbiB1bmRlciB0aGUgcmVwb3J0J3Mgb3duIG5hbWUgZm9yIHRoZSBjb250cm9sLCBvciBudWxsXG4vLyB3aGlsZSBubyBncmFpbiBpcyBwaWNrZWQuXG5mdW5jdGlvbiBncm91cEJ5TGluZShpbnB1dDogUmVwb3J0RXhwb3J0TGluZXNJbnB1dCk6IFJlcG9ydEV4cG9ydExpbmUgfCBudWxsIHtcbiAgY29uc3QgZnJlcXVlbmN5ID0gaW5wdXQuc25hcHNob3QuZnJlcXVlbmN5O1xuXG4gIGlmICghZnJlcXVlbmN5KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBvcHRpb24gPSBHUkFOVUxBUklUWV9PUFRJT05TLmZpbmQoKGl0ZW0pID0+IGl0ZW0udmFsdWUgPT09IGZyZXF1ZW5jeSk7XG4gIGNvbnN0IGxhYmVsID0gaW5wdXQucmVwb3J0LmNvbmZpZz8uZ3JvdXBCeT8ubGFiZWwgfHwgR1JPVVBfQllfTEFCRUw7XG5cbiAgcmV0dXJuIHsga2luZDogJ2dyb3VwQnknLCB0ZXh0OiBgJHtsYWJlbH06ICR7b3B0aW9uPy5uYW1lID8/IGZyZXF1ZW5jeX1gIH07XG59XG5cbi8vIE9uZSBsaW5lIHBlciBkcmlsbGVkIGNoYXJ0IG9mIHRoZSBleHBvcnQncyBwYWdlcywgd2hpbGUgdGhlIHNlcnZlciBkcmlsbHMuXG5mdW5jdGlvbiBkcmlsbExpbmVzKGlucHV0OiBSZXBvcnRFeHBvcnRMaW5lc0lucHV0KTogUmVwb3J0RXhwb3J0TGluZVtdIHtcbiAgY29uc3QgeyByZXBvcnQsIHNuYXBzaG90LCBwYWdlSWQgfSA9IGlucHV0O1xuXG4gIGlmICghc25hcHNob3QuZmVhdHVyZXMuaW5jbHVkZXMoJ2RyaWxsJykpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gKHJlcG9ydC5wYWdlcyA/PyBbXSlcbiAgICAuZmlsdGVyKChwYWdlKSA9PiAhcGFnZUlkIHx8IHBhZ2UuaWQgPT09IHBhZ2VJZClcbiAgICAuZmxhdE1hcCgocGFnZSkgPT4gcGFnZS5jb21wb25lbnRzID8/IFtdKVxuICAgIC5maWx0ZXIoKGNvbXBvbmVudCkgPT4gY29tcG9uZW50LnR5cGUgPT09ICdjaGFydCcgJiYgISFzbmFwc2hvdC52aWV3LnRpbGVzPy5bY29tcG9uZW50LmlkXT8uZHJpbGw/Lmxlbmd0aClcbiAgICAubWFwKChjb21wb25lbnQpOiBSZXBvcnRFeHBvcnRMaW5lID0+ICh7XG4gICAgICBraW5kOiAnZHJpbGwnLFxuICAgICAgdGV4dDogZHJpbGxMaW5lVGV4dChjb21wb25lbnQsIHNuYXBzaG90LnZpZXcudGlsZXNbY29tcG9uZW50LmlkXS5kcmlsbCwgc25hcHNob3QuZm9ybWF0Q29udGV4dCksXG4gICAgICBjb21wb25lbnRJZDogY29tcG9uZW50LmlkLFxuICAgIH0pKTtcbn1cblxuLy8gVGhlIHRpbGVzIGEgZ3JvdXAncyBtZW1iZXJzIHNpdCBvbjogdGhlIHNlcnZlcidzIGxpc3QsIGVsc2UgdGhlIHRpbGVzIG9mXG4vLyBpdHMgZW5hYmxlZCBtZW1iZXJzIChhbiBvbGRlciBzZXJ2ZXIpLlxuZnVuY3Rpb24gZ3JvdXBNZW1iZXJJZHMoZ3JvdXA6IFJlcG9ydEZpbHRlckdyb3VwKTogbnVtYmVyW10ge1xuICByZXR1cm4gZ3JvdXAuY29tcG9uZW50SWRzXG4gICAgPz8gKGdyb3VwLmZpbHRlcnMgPz8gW10pLmZpbHRlcigobWVtYmVyKSA9PiBtZW1iZXIuZW5hYmxlZCkubWFwKChtZW1iZXIpID0+IG1lbWJlci5jb21wb25lbnRJZCk7XG59XG5cbi8vIEEgcGFnZSdzIG5hbWUgYXMgdGhlIGV4cG9ydCBuYW1lcyBpdCAoJ1BhZ2UgMicgd2hlbiBpdCBoYXMgbm9uZSksIG9yIG51bGxcbi8vIGZvciBubyBwYWdlLlxuZnVuY3Rpb24gcGFnZU5hbWUocmVwb3J0OiBSZXBvcnQsIHBhZ2VJZDogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBpbmRleCA9IHBhZ2VJZCA/IChyZXBvcnQucGFnZXMgPz8gW10pLmZpbmRJbmRleCgocGFnZSkgPT4gcGFnZS5pZCA9PT0gcGFnZUlkKSA6IC0xO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiByZXBvcnQucGFnZXNbaW5kZXhdLm5hbWUgfHwgYFBhZ2UgJHtpbmRleCArIDF9YDtcbn1cbiJdfQ==
252
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWZpbHRlci1saW5lcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9leHBvcnQvcmVwb3J0LWZpbHRlci1saW5lcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpELE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBUTlELE9BQU8sRUFFTCxtQkFBbUIsR0FLcEIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBR3JELDJFQUEyRTtBQUMzRSwyRUFBMkU7QUFDM0UsNEVBQTRFO0FBQzVFLHlFQUF5RTtBQUN6RSw0RUFBNEU7QUFHNUUsMEVBQTBFO0FBQzFFLHNFQUFzRTtBQUN0RSxvQkFBb0I7QUFDcEIsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLG1CQUFtQixDQUFDO0FBQ2xELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxzQ0FBc0MsQ0FBQztBQUVyRSwyRUFBMkU7QUFDM0UseUJBQXlCO0FBQ3pCLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxvQkFBb0IsQ0FBQztBQUVuRCxvQ0FBb0M7QUFDcEMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBRWpDLG1FQUFtRTtBQUNuRSxNQUFNLGNBQWMsR0FB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QXlDO0FBQ3pDLFNBQVMsY0FBYyxDQUFDLEtBQXdCO0lBQzlDLE9BQU8sS0FBSyxDQUFDLFlBQVk7V0FDcEIsQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3BHLENBQUM7QUFFRCw0RUFBNEU7QUFDNUUsZUFBZTtBQUNmLFNBQVMsUUFBUSxDQUFDLE1BQWMsRUFBRSxNQUFpQztJQUNqRSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXpGLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksSUFBSSxRQUFRLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUN6RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZm9ya0pvaW4sIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IGNydW1iZWRUaXRsZSwgZHJpbGxDcnVtYkxhYmVscyB9IGZyb20gJy4uL2RyaWxsLWNydW1icyc7XG5pbXBvcnQgeyBmb3JtYXREYXlSYW5nZSwgZm9ybWF0UGxhaW5OdW1iZXIgfSBmcm9tICcuLi9mb3JtYXQnO1xuaW1wb3J0IHsgUmVwb3J0RHJpbGxTdGVwIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBvcnQtZHJpbGwtc3RlcC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVwb3J0RXhwb3J0TGluZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVwb3J0LWV4cG9ydC1saW5lLmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZXBvcnRFeHBvcnRMaW5lc0lucHV0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBvcnQtZXhwb3J0LWxpbmVzLWlucHV0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZXBvcnRGaWx0ZXJMaW5lQ29udGV4dCB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVwb3J0LWZpbHRlci1saW5lLWNvbnRleHQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFJlcG9ydEZpbHRlckxpbmVGb3JtIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBvcnQtZmlsdGVyLWxpbmUtZm9ybS50eXBlJztcbmltcG9ydCB7IFJlcG9ydEZpbHRlck1hdGNoIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBvcnQtZmlsdGVyLW1hdGNoLnR5cGUnO1xuaW1wb3J0IHsgUmVwb3J0Vmlld1N1bW1hcnkgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlcG9ydC12aWV3LXN1bW1hcnkuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIEZpbHRlckdyb3VwVmFsdWUsXG4gIEdSQU5VTEFSSVRZX09QVElPTlMsXG4gIFJlcG9ydCxcbiAgUmVwb3J0Q29tcG9uZW50LFxuICBSZXBvcnRGaWx0ZXJHcm91cCxcbiAgUmVwb3J0Rm9ybWF0Q29udGV4dCxcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IGRhdGVCb3VuZExhYmVsLCBkYXRlQm91bmRTdHJpbmcsIHJlbGF0aXZlTGFiZWwgfSBmcm9tICcuLi9yZXBvcnQtZmlsdGVyLWl0ZW1zJztcbmltcG9ydCB7IGlzVGlsZSB9IGZyb20gJy4uL3JlcG9ydC10aWxlJztcbmltcG9ydCB7IGZpbml0ZU51bWJlciB9IGZyb20gJy4uL3JlcG9ydC12aWV3LWNvbmZpZyc7XG5cblxuLy8gVGhlIHdvcmRzIGEgZmlsZSB1c2VzIGZvciB3aGF0IHRoZSBzY3JlZW4gaGVsZDogZWFjaCBmaWx0ZXIncyB2YWx1ZSwgdGhlXG4vLyBncm91cC1ieSBncmFpbiwgYSBkcmlsbGVkIHRpbGUsIHRoZSBtYXRjaCBhbmQgdGhlIG9wZW4gdmlldy4gVGhlIFBERiBhbmRcbi8vIFBvd2VyUG9pbnQgY292ZXJzIHByaW50IHRoZXNlIGxpbmVzLCBhbmQgdGhlIHppcCBzZW5kcyB0aGVtIChmaWx0ZXJMaW5lcyxcbi8vIHdpdGggZmlsdGVyU3VtbWFyeSBhcyB0aGVpciB0ZXh0IGZvciBhbiBvbGRlciBzZXJ2ZXIpLCBzbyBldmVyeSBleHBvcnRcbi8vIHdvcmRzIG9uZSBmaWx0ZXIgb25lIHdheS4gUHVyZSwgc28gdGhlIG5vZGUgaGFybmVzcyBjaGVja3MgZXZlcnkgd29yZGluZy5cblxuXG4vLyBUaGUgbWF0Y2ggd2hpbGUgdGhlIHJlcG9ydCBiYXIncyBmaWx0ZXJzIGNvbWJpbmUgd2l0aCAnYW55JzogdGhlIGNoaXAnc1xuLy8gd29yZHMsIGFuZCB0aGUgY292ZXIncyBsaW5lLiBUaGUgemlwJ3Mgbm90ZXMgY2FycnkgdGhlIHNlcnZlcidzIG93blxuLy8gc2VudGVuY2UgaW5zdGVhZC5cbmV4cG9ydCBjb25zdCBNQVRDSF9BTllfQ0hJUCA9ICdNYXRjaDogYW55IGZpbHRlcic7XG5leHBvcnQgY29uc3QgTUFUQ0hfQU5ZX0xJTkUgPSAnRmlsdGVycyBpbiB0aGUgcmVwb3J0IGJhcjogbWF0Y2ggYW55JztcblxuLy8gVGhlIHJlcG9ydCBiYXIncyBNYXRjaCBjaGlwIHdoaWxlIHRoZSBmaWx0ZXJzIGNvbWJpbmUgd2l0aCAnYWxsJy4gQSBmaWxlXG4vLyBwcmludHMgbm8gbGluZSBmb3IgaXQuXG5leHBvcnQgY29uc3QgTUFUQ0hfQUxMX0NISVAgPSAnTWF0Y2g6IGFsbCBmaWx0ZXJzJztcblxuLy8gQSBncm91cCdzIGxhYmVsIHdoZW4gaXQgaGFzIG5vbmUuXG5jb25zdCBVTkxBQkVMRURfR1JPVVAgPSAnRmlsdGVyJztcblxuLy8gVGhlIGxhYmVsIG9mIHRoZSBncm91cC1ieSBsaW5lIHdoZW4gdGhlIHJlcG9ydCBuYW1lcyBubyBjb250cm9sLlxuY29uc3QgR1JPVVBfQllfTEFCRUwgPSAnR3JvdXAgQnknO1xuXG5cbi8vIE9uZSBmaWx0ZXIgZ3JvdXAncyB2YWx1ZSBhcyB0ZXh0ICgnUmVnaW9uOiBXZXN0LCBFYXN0JyksIG9yIG51bGwgd2hlbiB0aGVcbi8vIHZhbHVlIGhvbGRzIG5vdGhpbmcuIFZhbHVlcyBsZWZ0IG91dCBzYXkgc28gYmVmb3JlIHRoZSBsYWJlbDogJ0V4Y2x1ZGVcbi8vIFJlZ2lvbjogV2VzdCwgRWFzdCcuICdjaGlwJyBpcyB0aGUgc2hvcnQgZm9ybTsgJ2xpbmUnIGFkZHMgd2hhdCBhIGZpbGVcbi8vIHJlYWRlciBjYW5ub3Qgc2VlIG9uIHNjcmVlbjpcbi8vIC0gZXhjbHVkZTogJ0V4Y2x1ZGUgUmVnaW9uOiBXZXN0LCBFYXN0IChyb3dzIHdpdGggbm8gUmVnaW9uIGFyZSBrZXB0KScsIG9yXG4vLyAgICcuLi4gYXJlIGxlZnQgb3V0JyB3aGVuIHRoZSBibGFuayBsYWJlbCAoY29udGV4dC5ibGFua0xhYmVsKSBpcyBvbmUgb2Zcbi8vICAgdGhlIHZhbHVlcyBsZWZ0IG91dC4gV2l0aG91dCBhIGtub3duIGJsYW5rIGxhYmVsIHRoZSBsaW5lIHNheXMgbm90aGluZ1xuLy8gICBhYm91dCB0aGUgYmxhbmsgcm93cztcbi8vIC0gcmFuZ2U6ICdBbW91bnQ6IDEwIHRvIDUwIChib3RoIGluY2x1ZGVkKSc7IGFuIG9wZW4gZW5kIHJlYWRzICcxMCBvclxuLy8gICBtb3JlJyBvciAnNTAgb3IgbGVzcycgaW4gYm90aCBmb3Jtcztcbi8vIC0gYSBsaXZlIHByZXNldDogJ1JlcG9ydCBQZXJpb2Q6IExhc3QgMzAgZGF5cyAoU2VwIDMg4oCTIE9jdCAyLCAyMDI2KSc7XG4vLyAtIGEgcGFnZSBncm91cDogJ0NvaG9ydCAocGFnZSBcIlJldGVudGlvblwiIG9ubHkpOiAyMDI1Jy5cbi8vIE51bWJlcnMgYW5kIGRhdGVzIGFyZSB3cml0dGVuIGluIHRoZSByZXBvcnQncyBsb2NhbGUsIGFuZCAwIGlzIGEgbnVtYmVyXG4vLyBsaWtlIGFueSBvdGhlci5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJMaW5lVGV4dChcbiAgZ3JvdXA6IFBpY2s8UmVwb3J0RmlsdGVyR3JvdXAsICdsYWJlbCcgfCAnbGV2ZWwnPixcbiAgdmFsdWU6IEZpbHRlckdyb3VwVmFsdWUgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBjb250ZXh0OiBSZXBvcnRGaWx0ZXJMaW5lQ29udGV4dCxcbiAgZm9ybTogUmVwb3J0RmlsdGVyTGluZUZvcm0sXG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgbGFiZWwgPSBncm91cC5sYWJlbCB8fCBVTkxBQkVMRURfR1JPVVA7XG4gIGNvbnN0IHRleHQgPSB2YWx1ZSA/IHZhbHVlVGV4dChsYWJlbCwgdmFsdWUsIGNvbnRleHQsIGZvcm0pIDogbnVsbDtcblxuICBpZiAodGV4dCA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgcGFnZU9ubHkgPSBmb3JtID09PSAnbGluZScgJiYgZ3JvdXAubGV2ZWwgPT09ICdwYWdlJyAmJiBjb250ZXh0LnBhZ2VOYW1lO1xuICBjb25zdCBuYW1lID0gcGFnZU9ubHkgPyBgJHtsYWJlbH0gKHBhZ2UgXCIke2NvbnRleHQucGFnZU5hbWV9XCIgb25seSlgIDogbGFiZWw7XG5cbiAgcmV0dXJuIGAke2V4Y2x1ZGVzKHZhbHVlKSA/ICdFeGNsdWRlICcgOiAnJ30ke25hbWV9OiAke3RleHR9YDtcbn1cblxuLy8gVGhlIHdvcmRzIG9mIG9uZSBmaWx0ZXIncyB2YWx1ZSBhcyBpdHMgY2hpcCByZWFkcyB0aGVtIGFmdGVyIHRoZSBsYWJlbFxuLy8gKCdXZXN0LCBFYXN0JywgJzAgdG8gMTAnLCAnMCBvciBtb3JlJywgJzUwIG9yIGxlc3MnKSwgb3IgbnVsbCB3aGVuIHRoZVxuLy8gdmFsdWUgaG9sZHMgbm90aGluZy4gVmFsdWVzIGxlZnQgb3V0IHJlYWQgYXMgdGhlaXIgbmFtZXM6IGZpbHRlckxpbmVUZXh0XG4vLyBwdXRzICdFeGNsdWRlJyBiZWZvcmUgdGhlIGxhYmVsLCBhbmQgYSB7e2ZpbHRlci48aWQ+fX0gdG9rZW4gcmVhZHMgdGhlbSBhc1xuLy8gJ0FsbCBleGNlcHQgV2VzdCcuIFRoZSBvbmUgc291cmNlIG9mIHRoZXNlIHdvcmRzLCBzbyB0aGUgY2hpcCwgYSBmaWxlJ3Ncbi8vIGNvdmVyIGFuZCBhIHRva2VuIG5ldmVyIHdvcmQgYSB2YWx1ZSB0d28gd2F5cy5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJDaGlwVmFsdWVUZXh0KFxuICB2YWx1ZTogRmlsdGVyR3JvdXBWYWx1ZSB8IG51bGwgfCB1bmRlZmluZWQsXG4gIGNvbnRleHQ6IFJlcG9ydEZpbHRlckxpbmVDb250ZXh0LFxuKTogc3RyaW5nIHwgbnVsbCB7XG4gIHJldHVybiB2YWx1ZSA/IHZhbHVlVGV4dCgnJywgdmFsdWUsIGNvbnRleHQsICdjaGlwJykgOiBudWxsO1xufVxuXG4vLyBXaGV0aGVyIGEgdmFsdWUgaXMgd29yZGVkIGFzIHZhbHVlcyBsZWZ0IG91dDogdGhlIHNhbWUgb3JkZXIgdmFsdWVUZXh0XG4vLyByZWFkcyBhIHZhbHVlIGluLCBzbyBhIHZhbHVlIHdpdGggZGF5cyBvciBrZXB0IHBpY2tzIGlzIG5ldmVyIG9uZS5cbmV4cG9ydCBmdW5jdGlvbiBleGNsdWRlcyh2YWx1ZTogRmlsdGVyR3JvdXBWYWx1ZSB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuICEhdmFsdWUgJiYgIXZhbHVlLnN0YXJ0ICYmICF2YWx1ZS5lbmQgJiYgIXZhbHVlLnZhbHVlcz8ubGVuZ3RoICYmICEhdmFsdWUuZXhjbHVkZVZhbHVlcz8ubGVuZ3RoO1xufVxuXG4vLyBUaGUgcGlja3MgYSB2YWx1ZSBuYW1lcywga2VwdCBvciBsZWZ0IG91dCwgaW4gcGljayBvcmRlcjogd2hhdCBhIHNlbGVjdCdzXG4vLyBuYW1lcyBhcmUgcmVhZCBmb3IuIE5vbmUgZm9yIGEgZGF0ZSByYW5nZS5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZVBpY2tzKHZhbHVlOiBGaWx0ZXJHcm91cFZhbHVlIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHVua25vd25bXSB7XG4gIGlmICghdmFsdWUgfHwgdmFsdWUuc3RhcnQgfHwgdmFsdWUuZW5kKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlLnZhbHVlcz8ubGVuZ3RoID8gdmFsdWUudmFsdWVzIDogdmFsdWUuZXhjbHVkZVZhbHVlcyA/PyBbXTtcbn1cblxuLy8gVGhlIG1hdGNoIGFzIHRleHQgd2hpbGUgaXQgaXMgJ2FueScsIGVsc2UgbnVsbDsgdGhlIGNoaXAgYWxzbyB3b3JkcyAnYWxsJy5cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaExpbmVUZXh0KG1hdGNoOiBSZXBvcnRGaWx0ZXJNYXRjaCB8IG51bGwgfCB1bmRlZmluZWQsIGZvcm06IFJlcG9ydEZpbHRlckxpbmVGb3JtKTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmIChtYXRjaCAhPT0gJ2FueScpIHtcbiAgICByZXR1cm4gZm9ybSA9PT0gJ2NoaXAnICYmIG1hdGNoID09PSAnYWxsJyA/IE1BVENIX0FMTF9DSElQIDogbnVsbDtcbiAgfVxuXG4gIHJldHVybiBmb3JtID09PSAnY2hpcCcgPyBNQVRDSF9BTllfQ0hJUCA6IE1BVENIX0FOWV9MSU5FO1xufVxuXG4vLyBBIGRyaWxsZWQgdGlsZSdzIGxpbmU6IGl0cyB0aXRsZSBhbmQgdGhlIGJyZWFkY3J1bWIgb2YgaXRzIHBhdGgsIGluIHRoZVxuLy8gcmVwb3J0J3MgbG9jYWxlICgnUmV2ZW51ZSBieSBQZXJpb2Qg4oC6IDIwMjYg4oC6IFEzJykuXG5leHBvcnQgZnVuY3Rpb24gZHJpbGxMaW5lVGV4dChcbiAgY29tcG9uZW50OiBQaWNrPFJlcG9ydENvbXBvbmVudCwgJ3RpdGxlJz4sXG4gIHBhdGg6IHJlYWRvbmx5IFJlcG9ydERyaWxsU3RlcFtdLFxuICBmb3JtYXRDb250ZXh0OiBQaWNrPFJlcG9ydEZvcm1hdENvbnRleHQsICdsb2NhbGUnPixcbik6IHN0cmluZyB7XG4gIHJldHVybiBjcnVtYmVkVGl0bGUoY29tcG9uZW50LnRpdGxlLCBkcmlsbENydW1iTGFiZWxzKHBhdGgsIGZvcm1hdENvbnRleHQpKTtcbn1cblxuLy8gVGhlIGNvdmVyJ3MgbGluZSBmb3IgdGhlIG9wZW4gc2F2ZWQgdmlldzogJ1ZpZXc6IFwiUTMgTm9ydGhcIiAoc2hhcmVkKScsXG4vLyB3aXRoICcsIGNoYW5nZWQgc2luY2UgaXQgd2FzIG9wZW5lZCcgd2hpbGUgdGhlIHNjcmVlbiBkaWZmZXJzIGZyb20gaXQuXG4vLyBOdWxsIHdoZW4gbm8gdmlldyBpcyBvcGVuLlxuZXhwb3J0IGZ1bmN0aW9uIHZpZXdMaW5lVGV4dChcbiAgdmlldzogUGljazxSZXBvcnRWaWV3U3VtbWFyeSwgJ25hbWUnIHwgJ3NoYXJlZCc+IHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgY2hhbmdlZDogYm9vbGVhbixcbik6IHN0cmluZyB8IG51bGwge1xuICBpZiAoIXZpZXcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGxpbmUgPSBgVmlldzogXCIkeyh2aWV3Lm5hbWUgPz8gJycpLnRyaW0oKX1cIiAoJHt2aWV3LnNoYXJlZCA/ICdzaGFyZWQnIDogJ3BlcnNvbmFsJ30pYDtcblxuICByZXR1cm4gY2hhbmdlZCA/IGAke2xpbmV9LCBjaGFuZ2VkIHNpbmNlIGl0IHdhcyBvcGVuZWRgIDogbGluZTtcbn1cblxuLy8gVGhlIGZpbHRlciBsaW5lcyBvZiBhbiBleHBvcnQsIGluIG9yZGVyOiBvbmUgcGVyIGZpbHRlciBncm91cCB3aXRoIGFcbi8vIHZhbHVlICh0aGUgcmVwb3J0J3MgZ3JvdXAgb3JkZXIpLCB0aGUgZ3JvdXAtYnkgbGluZSwgdGhlbiBvbmUgcGVyIGRyaWxsZWRcbi8vIGNoYXJ0IChwYWdlIG9yZGVyKS4gQSBUaGlzIFBhZ2UgZXhwb3J0IChpbnB1dC5wYWdlSWQpIGxpc3RzIG9ubHkgdGhlXG4vLyBncm91cHMgdGhhdCByZWFjaCBhIHRpbGUgb2YgdGhhdCBwYWdlLCBhbmQgb25seSB0aGF0IHBhZ2UncyBkcmlsbGVkXG4vLyBjaGFydHMuIEEgc2VsZWN0J3MgbmFtZXMgYXJlIGEgcmVxdWVzdCwgc28gdGhlIGxpbmVzIGFycml2ZSB0b2dldGhlciBvbmNlXG4vLyBldmVyeSBuYW1lIGlzIGtub3duOyBhIGZhaWxlZCBuYW1lIHJlYWQgd3JpdGVzIHRoZSBwaWNrcyBhcyB0aGV5IGFyZVxuLy8gc3RvcmVkLlxuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydExpbmVzKGlucHV0OiBSZXBvcnRFeHBvcnRMaW5lc0lucHV0KTogT2JzZXJ2YWJsZTxSZXBvcnRFeHBvcnRMaW5lW10+IHtcbiAgY29uc3QgZ3JvdXBzJCA9IGV4cG9ydEdyb3VwcyhpbnB1dC5yZXBvcnQsIGlucHV0LnBhZ2VJZClcbiAgICAubWFwKChncm91cCkgPT4gZ3JvdXBMaW5lKGdyb3VwLCBpbnB1dCkpO1xuICBjb25zdCByZXN0ID0gW2dyb3VwQnlMaW5lKGlucHV0KSwgLi4uZHJpbGxMaW5lcyhpbnB1dCldXG4gICAgLmZpbHRlcigobGluZSk6IGxpbmUgaXMgUmVwb3J0RXhwb3J0TGluZSA9PiBsaW5lICE9PSBudWxsKTtcblxuICByZXR1cm4gKGdyb3VwcyQubGVuZ3RoID8gZm9ya0pvaW4oZ3JvdXBzJCkgOiBvZihbXSkpXG4gICAgLnBpcGUoXG4gICAgICBtYXAoKGxpbmVzKSA9PiBbXG4gICAgICAgIC4uLmxpbmVzLmZpbHRlcigobGluZSk6IGxpbmUgaXMgUmVwb3J0RXhwb3J0TGluZSA9PiBsaW5lICE9PSBudWxsKSxcbiAgICAgICAgLi4ucmVzdCxcbiAgICAgIF0pLFxuICAgICk7XG59XG5cbi8vIFRoZSBncm91cHMgYW4gZXhwb3J0J3MgbGluZXMgbWF5IG5hbWU6IGV2ZXJ5IGdyb3VwLCBvciBmb3IgYSBUaGlzIFBhZ2Vcbi8vIGV4cG9ydCB0aGUgZ3JvdXBzIHdpdGggYSBtZW1iZXIgdGlsZSBvbiB0aGF0IHBhZ2UuIEEgcGFnZSBncm91cCByZWFjaGVzXG4vLyBvbmx5IGl0cyBvd24gcGFnZS5cbmV4cG9ydCBmdW5jdGlvbiBleHBvcnRHcm91cHMocmVwb3J0OiBSZXBvcnQsIHBhZ2VJZDogbnVtYmVyIHwgbnVsbCk6IFJlcG9ydEZpbHRlckdyb3VwW10ge1xuICBjb25zdCBncm91cHMgPSByZXBvcnQuZmlsdGVyR3JvdXBzID8/IFtdO1xuXG4gIGlmICghcGFnZUlkKSB7XG4gICAgcmV0dXJuIGdyb3VwcztcbiAgfVxuXG4gIGNvbnN0IHBhZ2UgPSAocmVwb3J0LnBhZ2VzID8/IFtdKS5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5pZCA9PT0gcGFnZUlkKTtcbiAgY29uc3QgdGlsZUlkcyA9IChwYWdlPy5jb21wb25lbnRzID8/IFtdKVxuICAgIC5maWx0ZXIoKGNvbXBvbmVudCkgPT4gaXNUaWxlKGNvbXBvbmVudCkpXG4gICAgLm1hcCgoY29tcG9uZW50KSA9PiBjb21wb25lbnQuaWQpO1xuXG4gIHJldHVybiBncm91cHMuZmlsdGVyKChncm91cCkgPT4gKGdyb3VwLmxldmVsICE9PSAncGFnZScgfHwgZ3JvdXAucGFnZUlkID09PSBwYWdlSWQpXG4gICAgJiYgZ3JvdXBNZW1iZXJJZHMoZ3JvdXApLnNvbWUoKGNvbXBvbmVudElkKSA9PiB0aWxlSWRzLmluY2x1ZGVzKGNvbXBvbmVudElkKSkpO1xufVxuXG4vLyBUaGUgdGV4dCBhZnRlciB0aGUgbGFiZWwsIG9yIG51bGwgd2hlbiB0aGUgdmFsdWUgaG9sZHMgbm90aGluZy5cbmZ1bmN0aW9uIHZhbHVlVGV4dChcbiAgbGFiZWw6IHN0cmluZyxcbiAgdmFsdWU6IEZpbHRlckdyb3VwVmFsdWUsXG4gIGNvbnRleHQ6IFJlcG9ydEZpbHRlckxpbmVDb250ZXh0LFxuICBmb3JtOiBSZXBvcnRGaWx0ZXJMaW5lRm9ybSxcbik6IHN0cmluZyB8IG51bGwge1xuICBpZiAodmFsdWUuc3RhcnQgfHwgdmFsdWUuZW5kKSB7XG4gICAgcmV0dXJuIGRhdGVUZXh0KHZhbHVlLCBjb250ZXh0LCBmb3JtKTtcbiAgfVxuXG4gIGlmICh2YWx1ZS52YWx1ZXM/Lmxlbmd0aCkge1xuICAgIHJldHVybiBwaWNrTmFtZXModmFsdWUudmFsdWVzLCBjb250ZXh0KS5qb2luKCcsICcpO1xuICB9XG5cbiAgaWYgKHZhbHVlLmV4Y2x1ZGVWYWx1ZXM/Lmxlbmd0aCkge1xuICAgIHJldHVybiBleGNsdWRlVGV4dChsYWJlbCwgdmFsdWUuZXhjbHVkZVZhbHVlcywgY29udGV4dCwgZm9ybSk7XG4gIH1cblxuICBjb25zdCBrZXl3b3JkID0gdHlwZW9mIHZhbHVlLnZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlLnZhbHVlLnRyaW0oKSA6ICcnO1xuXG4gIHJldHVybiByYW5nZVRleHQodmFsdWUsIGNvbnRleHQsIGZvcm0pID8/IChrZXl3b3JkID8gYFwiJHtrZXl3b3JkfVwiYCA6IG51bGwpO1xufVxuXG4vLyBBIGRhdGUgcmFuZ2U6IGEgbGl2ZSBwcmVzZXQgYnkgaXRzIG5hbWUgKHdpdGggaXRzIGRheXMgaW4gYSBsaW5lKSwgZWxzZVxuLy8gaXRzIHR3byBkYXlzICgn4oCmJyBmb3IgYW4gb3BlbiBlbmQpLlxuZnVuY3Rpb24gZGF0ZVRleHQodmFsdWU6IEZpbHRlckdyb3VwVmFsdWUsIGNvbnRleHQ6IFJlcG9ydEZpbHRlckxpbmVDb250ZXh0LCBmb3JtOiBSZXBvcnRGaWx0ZXJMaW5lRm9ybSk6IHN0cmluZyB7XG4gIGlmIChjb250ZXh0LnByZXNldCkge1xuICAgIGNvbnN0IG5hbWUgPSByZWxhdGl2ZUxhYmVsKGNvbnRleHQucHJlc2V0KTtcbiAgICBjb25zdCBkYXlzID0gZm9ybSA9PT0gJ2xpbmUnXG4gICAgICA/IGZvcm1hdERheVJhbmdlKGRhdGVCb3VuZFN0cmluZyh2YWx1ZS5zdGFydCksIGRhdGVCb3VuZFN0cmluZyh2YWx1ZS5lbmQpLCBjb250ZXh0LmxvY2FsZSlcbiAgICAgIDogJyc7XG5cbiAgICByZXR1cm4gZGF5cyA/IGAke25hbWV9ICgke2RheXN9KWAgOiBuYW1lO1xuICB9XG5cbiAgcmV0dXJuIGAke2RhdGVCb3VuZExhYmVsKHZhbHVlLnN0YXJ0LCBjb250ZXh0LmxvY2FsZSkgPz8gJ+KApid9IOKAkyAke2RhdGVCb3VuZExhYmVsKHZhbHVlLmVuZCwgY29udGV4dC5sb2NhbGUpID8/ICfigKYnfWA7XG59XG5cbi8vIFRoZSB2YWx1ZXMgYSBzZWxlY3QgbGVhdmVzIG91dC4gQSBsaW5lIHNheXMgd2hhdCBoYXBwZW5zIHRvIHRoZSByb3dzIHdpdGhcbi8vIG5vIHZhbHVlOiB0aGV5IHN0YXksIHVubGVzcyB0aGUgZ3JvdXAncyBibGFuayBsYWJlbCBpcyBvbmUgb2YgdGhlIHZhbHVlc1xuLy8gbGVmdCBvdXQuIFdoaWxlIHRoZSBibGFuayBsYWJlbCBpcyB1bmtub3duICh1bmRlZmluZWQpIHRoZSBsaW5lIHNheXNcbi8vIG5vdGhpbmcgYWJvdXQgdGhlbTogYSBibGFuayBsYWJlbCBhbW9uZyB0aGUgcGlja3Mgd291bGQgbWFrZSAnYXJlIGtlcHQnXG4vLyBmYWxzZS5cbmZ1bmN0aW9uIGV4Y2x1ZGVUZXh0KFxuICBsYWJlbDogc3RyaW5nLFxuICB2YWx1ZXM6IHVua25vd25bXSxcbiAgY29udGV4dDogUmVwb3J0RmlsdGVyTGluZUNvbnRleHQsXG4gIGZvcm06IFJlcG9ydEZpbHRlckxpbmVGb3JtLFxuKTogc3RyaW5nIHtcbiAgY29uc3QgdGV4dCA9IHBpY2tOYW1lcyh2YWx1ZXMsIGNvbnRleHQpLmpvaW4oJywgJyk7XG4gIGNvbnN0IGJsYW5rTGFiZWwgPSBjb250ZXh0LmJsYW5rTGFiZWw7XG5cbiAgaWYgKGZvcm0gPT09ICdjaGlwJyB8fCBibGFua0xhYmVsID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIGNvbnN0IGJsYW5rID0gYmxhbmtMYWJlbCAhPT0gbnVsbCAmJiB2YWx1ZXMuc29tZSgodmFsdWUpID0+IFN0cmluZyh2YWx1ZSkgPT09IGJsYW5rTGFiZWwpO1xuXG4gIHJldHVybiBgJHt0ZXh0fSAocm93cyB3aXRoIG5vICR7bGFiZWx9ICR7YmxhbmsgPyAnYXJlIGxlZnQgb3V0JyA6ICdhcmUga2VwdCd9KWA7XG59XG5cbi8vIEEgbnVtYmVyIHJhbmdlJ3MgZW5kcyBpbiB0aGUgcmVwb3J0J3MgbG9jYWxlLCBvciBudWxsIHdpdGggbmVpdGhlci5cbmZ1bmN0aW9uIHJhbmdlVGV4dCh2YWx1ZTogRmlsdGVyR3JvdXBWYWx1ZSwgY29udGV4dDogUmVwb3J0RmlsdGVyTGluZUNvbnRleHQsIGZvcm06IFJlcG9ydEZpbHRlckxpbmVGb3JtKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IG1pbiA9IGZpbml0ZU51bWJlcih2YWx1ZS5taW4pO1xuICBjb25zdCBtYXggPSBmaW5pdGVOdW1iZXIodmFsdWUubWF4KTtcbiAgY29uc3Qgd3JpdGUgPSAoZW5kOiBudW1iZXIpID0+IGZvcm1hdFBsYWluTnVtYmVyKGVuZCwgY29udGV4dC5sb2NhbGUpO1xuXG4gIGlmIChtaW4gIT09IHVuZGVmaW5lZCAmJiBtYXggIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBgJHt3cml0ZShtaW4pfSB0byAke3dyaXRlKG1heCl9JHtmb3JtID09PSAnbGluZScgPyAnIChib3RoIGluY2x1ZGVkKScgOiAnJ31gO1xuICB9XG5cbiAgaWYgKG1pbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGAke3dyaXRlKG1pbil9IG9yIG1vcmVgO1xuICB9XG5cbiAgcmV0dXJuIG1heCAhPT0gdW5kZWZpbmVkID8gYCR7d3JpdGUobWF4KX0gb3IgbGVzc2AgOiBudWxsO1xufVxuXG4vLyBUaGUgcGlja3MnIG5hbWVzOiB0aGUgb25lcyB0aGUgY2FsbGVyIHJlc29sdmVkLCBlbHNlIGVhY2ggcGljayBhcyBzdG9yZWQuXG5mdW5jdGlvbiBwaWNrTmFtZXModmFsdWVzOiB1bmtub3duW10sIGNvbnRleHQ6IFJlcG9ydEZpbHRlckxpbmVDb250ZXh0KTogc3RyaW5nW10ge1xuICBjb25zdCBuYW1lcyA9IGNvbnRleHQubmFtZXM7XG5cbiAgcmV0dXJuIHZhbHVlcy5tYXAoKHZhbHVlLCBpbmRleCkgPT4gbmFtZXM/LltpbmRleF0gPz8gU3RyaW5nKHZhbHVlKSk7XG59XG5cbi8vIE9uZSBncm91cCdzIGxpbmUsIG9uY2UgaXRzIHBpY2tzIGFyZSBuYW1lZC4gQW4gZXhjbHVkZSBsaW5lIHNheXMgd2hhdFxuLy8gaGFwcGVucyB0byB0aGUgYmxhbmsgcm93cyBmcm9tIHRoZSBncm91cCdzIGJsYW5rIGxhYmVsLCB3aGljaCB0aGUgc2VydmVyXG4vLyBzZW5kcyBvbiBhIHNlbGVjdCBncm91cCAobnVsbDogYmxhbmsgcm93cyBoYXZlIG5vbmUpLiBBbiBvbGRlciBzZXJ2ZXJcbi8vIHNlbmRzIG5vbmUsIGFuZCB0aGUgbGluZSB0aGVuIHNheXMgbm90aGluZyBhYm91dCB0aGVtLlxuZnVuY3Rpb24gZ3JvdXBMaW5lKGdyb3VwOiBSZXBvcnRGaWx0ZXJHcm91cCwgaW5wdXQ6IFJlcG9ydEV4cG9ydExpbmVzSW5wdXQpOiBPYnNlcnZhYmxlPFJlcG9ydEV4cG9ydExpbmUgfCBudWxsPiB7XG4gIGNvbnN0IHNuYXBzaG90ID0gaW5wdXQuc25hcHNob3Q7XG4gIGNvbnN0IHZhbHVlID0gc25hcHNob3QudmFsdWVzW2dyb3VwLmlkXTtcblxuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIG9mKG51bGwpO1xuICB9XG5cbiAgY29uc3QgcGlja3MgPSB2YWx1ZVBpY2tzKHZhbHVlKTtcbiAgY29uc3QgbmFtZXMkID0gcGlja3MubGVuZ3RoXG4gICAgPyBpbnB1dC5uYW1lcyhncm91cCwgcGlja3MpLnBpcGUoY2F0Y2hFcnJvcigoKSA9PiBvZihudWxsKSkpXG4gICAgOiBvZihudWxsKTtcblxuICByZXR1cm4gbmFtZXMkLnBpcGUoXG4gICAgbWFwKChuYW1lcyk6IFJlcG9ydEV4cG9ydExpbmUgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IHRleHQgPSBmaWx0ZXJMaW5lVGV4dChncm91cCwgdmFsdWUsIHtcbiAgICAgICAgbG9jYWxlOiBzbmFwc2hvdC5mb3JtYXRDb250ZXh0LmxvY2FsZSxcbiAgICAgICAgbmFtZXMsXG4gICAgICAgIHByZXNldDogc25hcHNob3QucHJlc2V0c1tncm91cC5pZF0gPz8gbnVsbCxcbiAgICAgICAgcGFnZU5hbWU6IHBhZ2VOYW1lKGlucHV0LnJlcG9ydCwgZ3JvdXAucGFnZUlkKSxcbiAgICAgICAgYmxhbmtMYWJlbDogZ3JvdXAuYmxhbmtMYWJlbCxcbiAgICAgIH0sICdsaW5lJyk7XG5cbiAgICAgIHJldHVybiB0ZXh0ID8geyBraW5kOiAnZ3JvdXAnLCB0ZXh0LCBncm91cElkOiBncm91cC5pZCB9IDogbnVsbDtcbiAgICB9KSxcbiAgKTtcbn1cblxuLy8gVGhlIGdyb3VwLWJ5IGdyYWluIHVuZGVyIHRoZSByZXBvcnQncyBvd24gbmFtZSBmb3IgdGhlIGNvbnRyb2wsIG9yIG51bGxcbi8vIHdoaWxlIG5vIGdyYWluIGlzIHBpY2tlZC5cbmZ1bmN0aW9uIGdyb3VwQnlMaW5lKGlucHV0OiBSZXBvcnRFeHBvcnRMaW5lc0lucHV0KTogUmVwb3J0RXhwb3J0TGluZSB8IG51bGwge1xuICBjb25zdCBmcmVxdWVuY3kgPSBpbnB1dC5zbmFwc2hvdC5mcmVxdWVuY3k7XG5cbiAgaWYgKCFmcmVxdWVuY3kpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG9wdGlvbiA9IEdSQU5VTEFSSVRZX09QVElPTlMuZmluZCgoaXRlbSkgPT4gaXRlbS52YWx1ZSA9PT0gZnJlcXVlbmN5KTtcbiAgY29uc3QgbGFiZWwgPSBpbnB1dC5yZXBvcnQuY29uZmlnPy5ncm91cEJ5Py5sYWJlbCB8fCBHUk9VUF9CWV9MQUJFTDtcblxuICByZXR1cm4geyBraW5kOiAnZ3JvdXBCeScsIHRleHQ6IGAke2xhYmVsfTogJHtvcHRpb24/Lm5hbWUgPz8gZnJlcXVlbmN5fWAgfTtcbn1cblxuLy8gT25lIGxpbmUgcGVyIGRyaWxsZWQgY2hhcnQgb2YgdGhlIGV4cG9ydCdzIHBhZ2VzLCB3aGlsZSB0aGUgc2VydmVyIGRyaWxscy5cbmZ1bmN0aW9uIGRyaWxsTGluZXMoaW5wdXQ6IFJlcG9ydEV4cG9ydExpbmVzSW5wdXQpOiBSZXBvcnRFeHBvcnRMaW5lW10ge1xuICBjb25zdCB7IHJlcG9ydCwgc25hcHNob3QsIHBhZ2VJZCB9ID0gaW5wdXQ7XG5cbiAgaWYgKCFzbmFwc2hvdC5mZWF0dXJlcy5pbmNsdWRlcygnZHJpbGwnKSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJldHVybiAocmVwb3J0LnBhZ2VzID8/IFtdKVxuICAgIC5maWx0ZXIoKHBhZ2UpID0+ICFwYWdlSWQgfHwgcGFnZS5pZCA9PT0gcGFnZUlkKVxuICAgIC5mbGF0TWFwKChwYWdlKSA9PiBwYWdlLmNvbXBvbmVudHMgPz8gW10pXG4gICAgLmZpbHRlcigoY29tcG9uZW50KSA9PiBjb21wb25lbnQudHlwZSA9PT0gJ2NoYXJ0JyAmJiAhIXNuYXBzaG90LnZpZXcudGlsZXM/Lltjb21wb25lbnQuaWRdPy5kcmlsbD8ubGVuZ3RoKVxuICAgIC5tYXAoKGNvbXBvbmVudCk6IFJlcG9ydEV4cG9ydExpbmUgPT4gKHtcbiAgICAgIGtpbmQ6ICdkcmlsbCcsXG4gICAgICB0ZXh0OiBkcmlsbExpbmVUZXh0KFxuICAgICAgICB7IHRpdGxlOiBpbnB1dC50aXRsZXM/Lltjb21wb25lbnQuaWRdID8/IGNvbXBvbmVudC50aXRsZSB9LFxuICAgICAgICBzbmFwc2hvdC52aWV3LnRpbGVzW2NvbXBvbmVudC5pZF0uZHJpbGwsXG4gICAgICAgIHNuYXBzaG90LmZvcm1hdENvbnRleHQsXG4gICAgICApLFxuICAgICAgY29tcG9uZW50SWQ6IGNvbXBvbmVudC5pZCxcbiAgICB9KSk7XG59XG5cbi8vIFRoZSB0aWxlcyBhIGdyb3VwJ3MgbWVtYmVycyBzaXQgb246IHRoZSBzZXJ2ZXIncyBsaXN0LCBlbHNlIHRoZSB0aWxlcyBvZlxuLy8gaXRzIGVuYWJsZWQgbWVtYmVycyAoYW4gb2xkZXIgc2VydmVyKS5cbmZ1bmN0aW9uIGdyb3VwTWVtYmVySWRzKGdyb3VwOiBSZXBvcnRGaWx0ZXJHcm91cCk6IG51bWJlcltdIHtcbiAgcmV0dXJuIGdyb3VwLmNvbXBvbmVudElkc1xuICAgID8/IChncm91cC5maWx0ZXJzID8/IFtdKS5maWx0ZXIoKG1lbWJlcikgPT4gbWVtYmVyLmVuYWJsZWQpLm1hcCgobWVtYmVyKSA9PiBtZW1iZXIuY29tcG9uZW50SWQpO1xufVxuXG4vLyBBIHBhZ2UncyBuYW1lIGFzIHRoZSBleHBvcnQgbmFtZXMgaXQgKCdQYWdlIDInIHdoZW4gaXQgaGFzIG5vbmUpLCBvciBudWxsXG4vLyBmb3Igbm8gcGFnZS5cbmZ1bmN0aW9uIHBhZ2VOYW1lKHJlcG9ydDogUmVwb3J0LCBwYWdlSWQ6IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgaW5kZXggPSBwYWdlSWQgPyAocmVwb3J0LnBhZ2VzID8/IFtdKS5maW5kSW5kZXgoKHBhZ2UpID0+IHBhZ2UuaWQgPT09IHBhZ2VJZCkgOiAtMTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gcmVwb3J0LnBhZ2VzW2luZGV4XS5uYW1lIHx8IGBQYWdlICR7aW5kZXggKyAxfWA7XG59XG4iXX0=