@provoly/dashboard 1.3.8 → 1.3.9

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 (200) hide show
  1. package/admin/components/admin-classes/admin-classes-view/admin-attributes-form/admin-attributes-form.component.d.ts +5 -2
  2. package/admin/components/admin-fields/admin-fields-form/admin-fields-form.component.d.ts +47 -18
  3. package/admin/components/admin-fields/admin-fields-select/admin-fields-select.component.d.ts +6 -2
  4. package/admin/components/admin-fields/admin-fields.component.d.ts +4 -1
  5. package/admin/components/admin-fields/store/admin-fields.model.d.ts +1 -1
  6. package/admin/components/admin-fields/store/fields.actions.d.ts +19 -12
  7. package/admin/components/admin-fields/store/fields.effects.d.ts +16 -3
  8. package/admin/i18n/en.translations.d.ts +33 -14
  9. package/admin/i18n/fr.translations.d.ts +33 -14
  10. package/components/checkbox/checkbox.component.d.ts +4 -2
  11. package/components/data-format/data-format.pipe.d.ts +11 -1
  12. package/components/paginator/index.d.ts +5 -0
  13. package/components/paginator/paginator.component.d.ts +19 -0
  14. package/components/paginator/paginator.module.d.ts +10 -0
  15. package/components/paginator/public-api.d.ts +3 -0
  16. package/components/paginator/style/_o-pry-paginator.scss +11 -0
  17. package/components/paginator/style/css.component.d.ts +5 -0
  18. package/dataset/components/dataset-detail/dataset-detail.component.d.ts +5 -8
  19. package/dataset/dataset.module.d.ts +1 -1
  20. package/dataset/i18n/en.translations.d.ts +0 -12
  21. package/dataset/i18n/fr.translations.d.ts +0 -12
  22. package/esm2022/admin/components/admin-abac-rules/components/attribute-condition/attribute-condition.component.mjs +4 -6
  23. package/esm2022/admin/components/admin-classes/admin-classes-customize/symbol/admin-classes-customize-symbol.component.mjs +1 -1
  24. package/esm2022/admin/components/admin-classes/admin-classes-customize/tooltip/admin-classes-customize-tooltip.component.mjs +1 -1
  25. package/esm2022/admin/components/admin-classes/admin-classes-view/admin-attributes-form/admin-attributes-form.component.mjs +10 -12
  26. package/esm2022/admin/components/admin-classes/admin-classes-view/admin-classes-view.component.mjs +6 -5
  27. package/esm2022/admin/components/admin-dataset/admin-select-dataset/admin-select-dataset.component.mjs +2 -2
  28. package/esm2022/admin/components/admin-fields/admin-fields-form/admin-fields-form.component.mjs +142 -63
  29. package/esm2022/admin/components/admin-fields/admin-fields-select/admin-fields-select.component.mjs +7 -8
  30. package/esm2022/admin/components/admin-fields/admin-fields.component.mjs +15 -11
  31. package/esm2022/admin/components/admin-fields/store/admin-fields.model.mjs +1 -1
  32. package/esm2022/admin/components/admin-fields/store/fields.actions.mjs +6 -5
  33. package/esm2022/admin/components/admin-fields/store/fields.effects.mjs +12 -6
  34. package/esm2022/admin/i18n/en.translations.mjs +34 -15
  35. package/esm2022/admin/i18n/fr.translations.mjs +34 -15
  36. package/esm2022/components/checkbox/checkbox.component.mjs +15 -7
  37. package/esm2022/components/data-format/data-format.pipe.mjs +88 -7
  38. package/esm2022/components/paginator/paginator.component.mjs +51 -0
  39. package/esm2022/components/paginator/paginator.module.mjs +20 -0
  40. package/esm2022/components/paginator/provoly-dashboard-components-paginator.mjs +5 -0
  41. package/esm2022/components/paginator/public-api.mjs +4 -0
  42. package/esm2022/components/paginator/style/css.component.mjs +11 -0
  43. package/esm2022/dataset/components/dataset-detail/dataset-detail.component.mjs +16 -26
  44. package/esm2022/dataset/dataset.module.mjs +2 -5
  45. package/esm2022/dataset/i18n/en.translations.mjs +1 -13
  46. package/esm2022/dataset/i18n/fr.translations.mjs +2 -14
  47. package/esm2022/import/components/form/import-form.component.mjs +174 -0
  48. package/esm2022/import/components/list/import-list.component.mjs +73 -0
  49. package/esm2022/import/components/version-modal/version-modal.component.mjs +26 -0
  50. package/esm2022/import/i18n/en.translations.mjs +16 -2
  51. package/esm2022/import/i18n/fr.translations.mjs +16 -2
  52. package/esm2022/import/import-routing.module.mjs +3 -3
  53. package/esm2022/import/import.module.mjs +25 -10
  54. package/esm2022/import/public-api.mjs +4 -2
  55. package/esm2022/import/style/css.component.mjs +2 -2
  56. package/esm2022/lib/core/components/select/select.component.mjs +3 -3
  57. package/esm2022/lib/core/components/share/legacy-share/share.component.mjs +8 -8
  58. package/esm2022/lib/core/components/status-modal/status-modal.component.mjs +48 -0
  59. package/esm2022/lib/core/components/{modal-status/modal-status.module.mjs → status-modal/status-modal.module.mjs} +9 -9
  60. package/esm2022/lib/core/core.module.mjs +5 -5
  61. package/esm2022/lib/core/i18n/en.translations.mjs +35 -2
  62. package/esm2022/lib/core/i18n/fr.translations.mjs +37 -2
  63. package/esm2022/lib/core/model/admin-api.model.mjs +5 -69
  64. package/esm2022/lib/core/model/widget-analytic-manifest.interface.mjs +1 -1
  65. package/esm2022/lib/core/model/widget-table-manifest.interface.mjs +1 -1
  66. package/esm2022/lib/core/public-api.mjs +3 -3
  67. package/esm2022/lib/core/store/class/class.interface.mjs +1 -1
  68. package/esm2022/lib/core/store/class/class.selectors.mjs +2 -2
  69. package/esm2022/lib/core/store/data-source/data-source.actions.mjs +3 -3
  70. package/esm2022/lib/core/store/data-source/data-source.effects.mjs +7 -4
  71. package/esm2022/lib/core/store/data-source/data-source.model.mjs +1 -1
  72. package/esm2022/lib/core/store/data-source/data-source.reducer.mjs +5 -3
  73. package/esm2022/lib/core/store/data-source/data-source.selectors.mjs +3 -11
  74. package/esm2022/lib/core/store/data-source/data-source.service.mjs +23 -5
  75. package/esm2022/lib/core/store/field/field.interface.mjs +1 -3
  76. package/esm2022/lib/core/store/field/field.service.mjs +7 -2
  77. package/esm2022/lib/dashboard/components/context-menu/object-edition/object-edition.component.mjs +3 -3
  78. package/esm2022/lib/dashboard/components/widgets/datasource-selector/datasource-card/datasource-card.component.mjs +3 -11
  79. package/esm2022/lib/dashboard/components/widgets/datasource-selector/datasource-list/datasource-list.component.mjs +2 -2
  80. package/esm2022/lib/dashboard/item-utils.mjs +5 -5
  81. package/esm2022/lib/dashboard/store/dashboard.actions.mjs +1 -4
  82. package/esm2022/lib/dashboard/store/dashboard.effects.mjs +1 -19
  83. package/esm2022/lib/dashboard/store/dashboard.reducers.mjs +1 -26
  84. package/esm2022/lib/dashboard/tooltip/components/default/default.tooltip.component.mjs +3 -3
  85. package/esm2022/lib/dashboard/tooltip/tooltip-factory.service.mjs +3 -2
  86. package/esm2022/search/search-mono-class/components/search-condition/search-condition.component.mjs +4 -4
  87. package/esm2022/search/search-mono-class/components/search-order/search-order.component.mjs +3 -3
  88. package/esm2022/search/search-mono-class/components/search-select-attribute/search-select-attribute.component.mjs +4 -5
  89. package/esm2022/search/search-mono-class/store/search-mono-class.effects.mjs +2 -2
  90. package/esm2022/search/search-mono-class/store/search-mono-class.service.mjs +5 -6
  91. package/esm2022/search/search-multi-class/store/search-multi-class.service.mjs +4 -4
  92. package/esm2022/toolbox/components/filter-settings/filter-settings.component.mjs +3 -3
  93. package/esm2022/tooltips/attribute/attribute-tooltip.component.mjs +17 -19
  94. package/esm2022/tooltips/attribute/attribute-tooltip.module.mjs +5 -4
  95. package/esm2022/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.mjs +54 -37
  96. package/esm2022/widgets/widget-analytic/component/widget-analytic.component.mjs +4 -16
  97. package/esm2022/widgets/widget-chart/component/widget-chart.component.mjs +9 -9
  98. package/esm2022/widgets/widget-detail/component/widget-detail.component.mjs +5 -5
  99. package/esm2022/widgets/widget-map/component/widget-map.component.mjs +30 -32
  100. package/esm2022/widgets/widget-map/pipe/widget-map-geometry-fields-for.pipe.mjs +2 -5
  101. package/esm2022/widgets/widget-map/utils/cql-utils.class.mjs +2 -2
  102. package/esm2022/widgets/widget-map/utils/widget-map.utils.mjs +6 -10
  103. package/esm2022/widgets/widget-table/component/widget-table.component.mjs +18 -14
  104. package/esm2022/widgets/widget-table/expand-value/expand-value.component.mjs +9 -5
  105. package/esm2022/widgets/widget-table/get-value/get-value.pipe.mjs +2 -2
  106. package/esm2022/widgets/widget-table/public-api.mjs +1 -2
  107. package/esm2022/widgets/widget-table/widget-table.module.mjs +12 -7
  108. package/esm2022/widgets/widget-tile/component/widget-tile.component.mjs +10 -15
  109. package/esm2022/widgets/widget-tile/widget-tile.module.mjs +8 -4
  110. package/esm2022/widgets/widget-vega/component/widget-vega.component.mjs +2 -2
  111. package/fesm2022/provoly-dashboard-admin.mjs +249 -126
  112. package/fesm2022/provoly-dashboard-admin.mjs.map +1 -1
  113. package/fesm2022/provoly-dashboard-components-checkbox.mjs +14 -6
  114. package/fesm2022/provoly-dashboard-components-checkbox.mjs.map +1 -1
  115. package/fesm2022/provoly-dashboard-components-data-format.mjs +88 -7
  116. package/fesm2022/provoly-dashboard-components-data-format.mjs.map +1 -1
  117. package/fesm2022/provoly-dashboard-components-paginator.mjs +82 -0
  118. package/fesm2022/provoly-dashboard-components-paginator.mjs.map +1 -0
  119. package/fesm2022/provoly-dashboard-dataset.mjs +21 -58
  120. package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
  121. package/fesm2022/provoly-dashboard-import.mjs +249 -116
  122. package/fesm2022/provoly-dashboard-import.mjs.map +1 -1
  123. package/fesm2022/provoly-dashboard-search.mjs +15 -16
  124. package/fesm2022/provoly-dashboard-search.mjs.map +1 -1
  125. package/fesm2022/provoly-dashboard-toolbox.mjs +2 -2
  126. package/fesm2022/provoly-dashboard-toolbox.mjs.map +1 -1
  127. package/fesm2022/provoly-dashboard-tooltips-attribute.mjs +20 -21
  128. package/fesm2022/provoly-dashboard-tooltips-attribute.mjs.map +1 -1
  129. package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs +53 -36
  130. package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs.map +1 -1
  131. package/fesm2022/provoly-dashboard-widgets-widget-analytic.mjs +3 -15
  132. package/fesm2022/provoly-dashboard-widgets-widget-analytic.mjs.map +1 -1
  133. package/fesm2022/provoly-dashboard-widgets-widget-chart.mjs +9 -9
  134. package/fesm2022/provoly-dashboard-widgets-widget-chart.mjs.map +1 -1
  135. package/fesm2022/provoly-dashboard-widgets-widget-detail.mjs +4 -4
  136. package/fesm2022/provoly-dashboard-widgets-widget-detail.mjs.map +1 -1
  137. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +36 -45
  138. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
  139. package/fesm2022/provoly-dashboard-widgets-widget-table.mjs +32 -38
  140. package/fesm2022/provoly-dashboard-widgets-widget-table.mjs.map +1 -1
  141. package/fesm2022/provoly-dashboard-widgets-widget-tile.mjs +16 -17
  142. package/fesm2022/provoly-dashboard-widgets-widget-tile.mjs.map +1 -1
  143. package/fesm2022/provoly-dashboard-widgets-widget-vega.mjs +1 -1
  144. package/fesm2022/provoly-dashboard-widgets-widget-vega.mjs.map +1 -1
  145. package/fesm2022/provoly-dashboard.mjs +278 -330
  146. package/fesm2022/provoly-dashboard.mjs.map +1 -1
  147. package/import/components/{import.component.d.ts → form/import-form.component.d.ts} +8 -4
  148. package/import/components/list/import-list.component.d.ts +34 -0
  149. package/import/components/version-modal/version-modal.component.d.ts +13 -0
  150. package/import/i18n/en.translations.d.ts +14 -0
  151. package/import/i18n/fr.translations.d.ts +14 -0
  152. package/import/import.module.d.ts +13 -10
  153. package/import/public-api.d.ts +3 -1
  154. package/import/style/_o-import.scss +50 -6
  155. package/lib/core/components/share/legacy-share/share.component.d.ts +1 -1
  156. package/lib/core/components/{modal-status/modal-status.component.d.ts → status-modal/status-modal.component.d.ts} +10 -6
  157. package/lib/core/components/{modal-status/modal-status.module.d.ts → status-modal/status-modal.module.d.ts} +5 -5
  158. package/lib/core/core.module.d.ts +2 -2
  159. package/lib/core/i18n/en.translations.d.ts +33 -0
  160. package/lib/core/i18n/fr.translations.d.ts +35 -0
  161. package/lib/core/model/admin-api.model.d.ts +6 -8
  162. package/lib/core/model/widget-analytic-manifest.interface.d.ts +0 -3
  163. package/lib/core/model/widget-table-manifest.interface.d.ts +2 -0
  164. package/lib/core/public-api.d.ts +2 -2
  165. package/lib/core/store/class/class.interface.d.ts +2 -1
  166. package/lib/core/store/class/class.selectors.d.ts +10 -10
  167. package/lib/core/store/data-source/data-source.actions.d.ts +21 -1
  168. package/lib/core/store/data-source/data-source.effects.d.ts +11 -1
  169. package/lib/core/store/data-source/data-source.model.d.ts +3 -2
  170. package/lib/core/store/data-source/data-source.reducer.d.ts +1 -0
  171. package/lib/core/store/data-source/data-source.selectors.d.ts +3 -3
  172. package/lib/core/store/data-source/data-source.service.d.ts +11 -2
  173. package/lib/core/store/field/field.interface.d.ts +8 -4
  174. package/lib/core/store/field/field.service.d.ts +1 -0
  175. package/lib/dashboard/components/context-menu/object-edition/object-edition.component.d.ts +1 -1
  176. package/lib/dashboard/components/widgets/datasource-selector/datasource-card/datasource-card.component.d.ts +3 -7
  177. package/lib/dashboard/item-utils.d.ts +1 -1
  178. package/lib/dashboard/store/dashboard.actions.d.ts +0 -11
  179. package/lib/dashboard/store/dashboard.effects.d.ts +0 -3
  180. package/lib/dashboard/tooltip/tooltip-factory.service.d.ts +2 -1
  181. package/package.json +25 -19
  182. package/styles/base/_utils.scss +9 -1
  183. package/styles/components/_a-btn.scss +7 -0
  184. package/styles/components/_a-table.scss +2 -16
  185. package/styles/layout/_o-workspace.scss +1 -0
  186. package/tooltips/attribute/attribute-tooltip.component.d.ts +6 -6
  187. package/tooltips/attribute/attribute-tooltip.module.d.ts +2 -1
  188. package/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.d.ts +16 -3
  189. package/widgets/widget-analytic/component/widget-analytic.component.d.ts +2 -3
  190. package/widgets/widget-detail/component/widget-detail.component.d.ts +1 -4
  191. package/widgets/widget-table/component/widget-table.component.d.ts +1 -0
  192. package/widgets/widget-table/expand-value/expand-value.component.d.ts +4 -2
  193. package/widgets/widget-table/public-api.d.ts +0 -1
  194. package/widgets/widget-table/widget-table.module.d.ts +9 -8
  195. package/widgets/widget-tile/component/widget-tile.component.d.ts +1 -0
  196. package/widgets/widget-tile/widget-tile.module.d.ts +2 -1
  197. package/esm2022/import/components/import.component.mjs +0 -167
  198. package/esm2022/lib/core/components/modal-status/modal-status.component.mjs +0 -45
  199. package/esm2022/widgets/widget-table/expand-value/format-number.pipe.mjs +0 -24
  200. package/widgets/widget-table/expand-value/format-number.pipe.d.ts +0 -10
@@ -74,12 +74,12 @@ export class WidgetChartComponent extends DataWidgetComponent {
74
74
  this.variableAttributes$ = combineLatest([this.resultSet$, this.classes$, this.fields$]).pipe(map(([resultSet, classes, fields]) => ItemUtils.getAttributesFromRs(resultSet, classes, fields)), map((fields) => fields.sort((a, b) => a.name.localeCompare(b.name))), map((props) => WidgetChartComponent.uniqueAttributesByNames(props)), distinctUntilChanged((p, c) => equal(p, c)));
75
75
  this.subscriptions.add(this.variableAttributes$.subscribe((attrs) => (this.variableAttributes = attrs)));
76
76
  this.subscriptions.add(this.fields$.subscribe((attrs) => (this.fields = attrs)));
77
- this.variables$ = combineLatest([this.variableAttributes$, this.fields$]).pipe(map(([attributes, fields]) => {
77
+ this.variables$ = this.variableAttributes$.pipe(map((attributes) => {
78
78
  return attributes.map((attr) => ({
79
79
  name: attr.technicalName,
80
80
  label: attr.name,
81
- type: this.translateToVegaType(fields.find((field) => field.id === attr.field)?.type ?? FieldType.STRING, attr.name)
82
- } ?? []));
81
+ type: this.translateToVegaType(attr.field.type, attr.name)
82
+ }) ?? []);
83
83
  }));
84
84
  this.options$ = combineLatest([
85
85
  this.variables$,
@@ -114,7 +114,7 @@ export class WidgetChartComponent extends DataWidgetComponent {
114
114
  return true;
115
115
  }
116
116
  else {
117
- const field = fields.find((field) => field.id === attribute.field);
117
+ const field = fields.find((field) => field.id === attribute.field.id);
118
118
  return [FieldType.DECIMAL, FieldType.INSTANT, FieldType.LONG, FieldType.INTEGER].includes(field?.type ?? FieldType.STRING);
119
119
  }
120
120
  })
@@ -131,7 +131,7 @@ export class WidgetChartComponent extends DataWidgetComponent {
131
131
  ]).pipe(map(([variableFields, items, fields, _]) => {
132
132
  return variableFields
133
133
  .filter((attribute) => {
134
- const field = fields.find((field) => field.id === attribute.field);
134
+ const field = fields.find((field) => field.id === attribute.field.id);
135
135
  return [FieldType.DECIMAL, FieldType.INSTANT, FieldType.LONG, FieldType.INTEGER].includes(field?.type ?? FieldType.STRING);
136
136
  })
137
137
  .filter((attribute) => items.find((item) => Object.keys(item.attributes).includes(attribute.technicalName) &&
@@ -147,7 +147,7 @@ export class WidgetChartComponent extends DataWidgetComponent {
147
147
  ]).pipe(map(([variableFields, items, fields, _]) => {
148
148
  return variableFields
149
149
  .filter((attribute) => {
150
- const field = fields.find((field) => field.id === attribute.field);
150
+ const field = fields.find((field) => field.id === attribute.field.id);
151
151
  return [FieldType.STRING, FieldType.KEYWORD].includes(field?.type ?? FieldType.INTEGER);
152
152
  })
153
153
  .filter((attribute) => items.find((item) => Object.keys(item.attributes).includes(attribute.technicalName) &&
@@ -421,7 +421,7 @@ export class WidgetChartComponent extends DataWidgetComponent {
421
421
  if (!!attr) {
422
422
  this.optionsCopy.selectedVariables[index].name = attr.name;
423
423
  this.optionsCopy.selectedVariables[index].label = attr.name;
424
- const field = this.fields.find((field) => field.id === attr.field)?.type ?? FieldType.STRING;
424
+ const field = this.fields.find((field) => field.id === attr.field.id)?.type ?? FieldType.STRING;
425
425
  this.optionsCopy.selectedVariables[index].type = this.translateToVegaType(field, attr.name);
426
426
  this.optionsCopy.selectedVariables[index].axisOptions = this.minTick(field);
427
427
  this.optionsCopy.title =
@@ -639,7 +639,7 @@ export class WidgetChartComponent extends DataWidgetComponent {
639
639
  });
640
640
  }
641
641
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: WidgetChartComponent, deps: [{ token: i1.Store }, { token: i2.PryI18nService }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
642
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: WidgetChartComponent, selector: "pry-widget-chart", viewQueries: [{ propertyName: "vega", first: true, predicate: ["vega"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<pry-widget-chart-css></pry-widget-chart-css>\n<div class=\"o-widget o-widget--chart\">\n <pry-widget-header\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [isDisable]=\"(filterDataForOptionsCopy$ | async)?.length === 0 || hasNoType(optionsCopy)\"\n [widgetIndex]=\"widgetIndex\"\n [open$]=\"open$\"\n [header]=\"header\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__popup__content__fields -condensed\">\n <pry-edit-input\n label=\"@pry.widget.chart.title\"\n (ngModelChange)=\"changeChartTitle($event)\"\n [ngModel]=\"optionsCopy.customTitle ?? optionsCopy.title\"\n ></pry-edit-input>\n\n <div class=\"m-form-label-field\">\n <ng-container *ngIf=\"(filterDataForOptionsCopy$ | async)?.length === 0; else data\">\n <p class=\"a-label a-label--help -error\">{{ '@pry.widget.chart.params.noParams' | i18n }}</p>\n </ng-container>\n <ng-template #data>\n <div *ngIf=\"optionsCopy?.type !== MarkType.RADAR\">\n {{ '@pry.widget.chart.params.multipleParams' | i18n }}{{ (filterDataForOptionsCopy$ | async)?.length }}\n </div>\n </ng-template>\n </div>\n\n <div *ngIf=\"optionsCopy\" class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_type\">{{ '@pry.widget.chart.type' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeType($event)\"\n [items]=\"typeOptions\"\n [ngModel]=\"optionsCopy.type + '-' + optionsCopy.subType\"\n i18nPrefix=\"@pry.widget.chart.markType.\"\n bindLabel=\"label\"\n bindValue=\"id\"\n id=\"chart_type\"\n ></pry-select>\n </div>\n </div>\n\n <ng-container *ngIf=\"optionsCopy?.type !== MarkType.RADAR && optionsCopy?.type !== MarkType.CIRCLE_PACK\">\n <ng-container *ngIf=\"optionsCopy?.subType === MarkSubType.DONUT\">\n <pry-range\n [ngModel]=\"optionsCopy.innerRadius\"\n (ngModelChange)=\"changeInnerRadius($event)\"\n labelTranslate=\"@pry.widget.chart.innerRadius\"\n min=\"1\"\n max=\"500\"\n ></pry-range>\n </ng-container>\n\n <div\n *ngFor=\"let variableDef of optionsCopy?.selectedVariables; let i = index\"\n class=\"o-settings__popup__content__fields -condensed\"\n >\n <div class=\"m-form-label-field\" *ngIf=\"i === 1\">\n <label class=\"a-label\" for=\"aggregations\">{{ '@pry.widget.chart.encoding.group' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeAggregation($event)\"\n *ngIf=\"i === 1\"\n [items]=\"aggregations\"\n [ngModel]=\"optionsCopy.aggregation\"\n id=\"aggregations\"\n i18nPrefix=\"@pry.widget.chart.aggregation.\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\" *ngIf=\"i !== 1 || optionsCopy.aggregation !== 'count'\">\n <label class=\"a-label\" for=\"aggregation_property\">\n {{ axeLabel(i, optionsCopy) | i18n }}\n </label>\n <pry-select\n (ngModelChange)=\"changeProperty($event, i)\"\n [items]=\"(i !== 1 ? variableAttributes$ : possibleSecondaryAttributes$) | async\"\n [ngModel]=\"variableDef.name\"\n bindLabel=\"name\"\n bindValue=\"technicalName\"\n id=\"aggregation_property\"\n ></pry-select>\n </div>\n\n <pry-edit-input\n label=\"@pry.widget.chart.dataLabel\"\n (ngModelChange)=\"changeLabel($event, i)\"\n [ngModel]=\"variableDef.label\"\n ></pry-edit-input>\n\n <div *ngIf=\"variableDef.type === 'temporal'\" class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_timeUnit\">{{ '@pry.widget.chart.timeUnit' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeTimeUnit($event, variableDef)\"\n [items]=\"timeUnits\"\n [ngModel]=\"variableDef.timeUnit\"\n i18nPrefix=\"@pry.widget.chart.timeUnitList.\"\n id=\"chart_timeUnit\"\n ></pry-select>\n </div>\n\n <div *ngIf=\"variableDef.type === 'quantitative' && optionsCopy?.type !== 'arc'\" class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleOriginAtZero(variableDef, $event)\" [ngModel]=\"variableDef.origin0\"\n >{{ '@pry.widget.chart.origin' | i18n }}\n </pry-checkbox>\n </div>\n </div>\n\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <pry-checkbox\n (ngModelChange)=\"toggleSeries($event)\"\n [ngModel]=\"!!optionsCopy.series\"\n *ngIf=\"optionsCopy?.type !== MarkType.ARC && optionsCopy?.type !== MarkType.RADAR\"\n [disabled]=\"\n this.optionsCopy.subType === MarkSubType.AREASTACKED ||\n this.optionsCopy.subType === MarkSubType.HISTOSTACKED\n \"\n >{{ '@pry.widget.chart.series' | i18n }}\n </pry-checkbox>\n </div>\n\n <div\n class=\"m-form-label-field\"\n *ngIf=\"optionsCopy?.type !== MarkType.ARC && optionsCopy?.type !== MarkType.RADAR && !!optionsCopy.series\"\n >\n <label class=\"a-label\" for=\"chart_seriesAttr\">{{ '@pry.widget.chart.seriesAttr' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeSeries($event)\"\n [ngModel]=\"optionsCopy.series.groupBy!\"\n [items]=\"variableAttributes$ | async\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"chart_seriesAttr\"\n ></pry-select>\n </div>\n\n <div\n class=\"m-form-label-field\"\n *ngIf=\"\n (optionsCopy?.type === MarkType.ARC || optionsCopy?.type === MarkType.RADAR || !!optionsCopy.series) &&\n schemes\n \"\n >\n <label class=\"a-label\" for=\"chart_seriesScheme\" [title]=\"'@pry.widget.chart.seriesSchemeAlt' | i18n\">{{\n '@pry.widget.chart.seriesScheme' | i18n\n }}</label>\n <pry-select\n (ngModelChange)=\"changeSeriesScheme($event)\"\n [ngModel]=\"optionsCopy.series?.scheme!\"\n [items]=\"schemes\"\n id=\"chart_seriesScheme\"\n i18nPrefix=\"@pry.widget.chart.scheme.\"\n bindValue=\"id\"\n bindLabel=\"id\"\n ></pry-select>\n </div>\n\n <div class=\"o-widget--chart-color-thumb\">\n <div\n *ngFor=\"let schemeColor of scheme()\"\n class=\"o-widget--chart-color-thumb-item\"\n [title]=\"schemeColor\"\n [style.background-color]=\"schemeColor\"\n ></div>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox\n (ngModelChange)=\"toggleSeriesLegend($event)\"\n [ngModel]=\"!!optionsCopy.legend!\"\n *ngIf=\"optionsCopy?.type !== MarkType.RADAR || !!optionsCopy.series\"\n >{{ '@pry.widget.chart.seriesLegend' | i18n }}\n </pry-checkbox>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleTooltip($event)\" [ngModel]=\"!!optionsCopy.tooltip!\"\n >{{ '@pry.widget.chart.tooltip' | i18n }}\n </pry-checkbox>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"optionsCopy?.type === MarkType.RADAR && optionsCopy.radar !== undefined\">\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <pry-select\n (ngModelChange)=\"trigger(); proposeTitle()\"\n [(ngModel)]=\"optionsCopy.radar.compare\"\n [items]=\"comparisons\"\n bindLabel=\"name\"\n bindValue=\"id\"\n ></pry-select>\n </div>\n\n <ng-container *ngIf=\"optionsCopy.radar.compare === 'item'\">\n <div class=\"m-form-label-field\">\n <pry-select\n (ngModelChange)=\"trigger(); proposeTitle()\"\n [(ngModel)]=\"optionsCopy.radar.props\"\n [items]=\"numericProperties$ | async\"\n [multiple]=\"true\"\n [closeOnSelect]=\"false\"\n bindLabel=\"name\"\n bindValue=\"name\"\n ></pry-select>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"optionsCopy.radar.compare === 'value'\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"comparison_key\">{{ '@pry.widget.chart.comparison.key' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"trigger(); proposeTitle()\"\n [(ngModel)]=\"optionsCopy.radar.keyProp\"\n [items]=\"textProperties$ | async\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"comparison_key\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"comparison_values\">{{ '@pry.widget.chart.comparison.values' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"trigger(); proposeTitle()\"\n [(ngModel)]=\"optionsCopy.radar.valueProp\"\n [items]=\"numericProperties$ | async\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"comparison_values\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"comparison_category\">{{\n '@pry.widget.chart.comparison.category' | i18n\n }}</label>\n <pry-select\n (ngModelChange)=\"trigger(); proposeTitle()\"\n [(ngModel)]=\"optionsCopy.radar.categoryProp\"\n [items]=\"textProperties$ | async\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"comparison_category\"\n ></pry-select>\n </div>\n </ng-container>\n <ng-container *ngIf=\"schemes\">\n <label\n class=\"a-label\"\n for=\"chart_seriesScheme_radar\"\n [title]=\"'@pry.widget.chart.seriesSchemeAlt' | i18n\"\n >{{ '@pry.widget.chart.seriesScheme' | i18n }}</label\n >\n <pry-select\n (ngModelChange)=\"changeSeriesScheme($event)\"\n [ngModel]=\"optionsCopy.series?.scheme!\"\n [items]=\"schemes\"\n id=\"chart_seriesScheme_radar\"\n ></pry-select>\n </ng-container>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"optionsCopy?.type === MarkType.CIRCLE_PACK && optionsCopy.packing !== undefined\">\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_circle_id\">{{ '@pry.widget.chart.circle.id' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"trigger(); proposeTitle()\"\n [(ngModel)]=\"optionsCopy.packing.id\"\n [items]=\"variableAttributes$ | async\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"chart_circle_id\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_circle_pid\">{{ '@pry.widget.chart.circle.pid' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"trigger(); proposeTitle()\"\n [(ngModel)]=\"optionsCopy.packing.parentId\"\n [items]=\"variableAttributes$ | async\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"chart_circle_pid\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_circle_field\">{{ '@pry.widget.chart.circle.field' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"trigger(); proposeTitle()\"\n [(ngModel)]=\"optionsCopy.packing.packField\"\n [items]=\"numericProperties$ | async\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"chart_circle_field\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_circle_tooltip\">{{ '@pry.widget.chart.circle.tooltip' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"trigger(); proposeTitle()\"\n [(ngModel)]=\"optionsCopy.packing.tooltip\"\n [items]=\"variableAttributes$ | async\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"chart_circle_tooltip\"\n ></pry-select>\n </div>\n </div>\n </ng-container>\n\n <div class=\"o-settings__popup__content__fields -condensed\">\n <pry-checkbox (ngModelChange)=\"toggleSpecToMerge($event)\" [ngModel]=\"!!optionsCopy.specToMerge\"\n >{{ '@pry.widget.chart.moreOptions' | i18n }}\n </pry-checkbox>\n\n <ng-container *ngIf=\"!!optionsCopy.specToMerge\">\n <textarea\n [ngModel]=\"advancedEdit\"\n (focusout)=\"updateAdvancedEdit($event)\"\n class=\"o-settings__popup__content__area\"\n [class.-invalid]=\"invalidJson\"\n ></textarea>\n </ng-container>\n </div>\n </pry-settings>\n </pry-widget-header>\n <ng-container *ngIf=\"isChartValid$ | async\">\n <div\n #vega\n [style.height.px]=\"\n ((widgetSize$ | async)?.height ?? 0) - ((displayHeader$ | async) ? 1 : 0) * WIDGET_HEADER_HEIGHT\n \"\n [style.width.px]=\"(widgetSize$ | async)?.width\"\n ></div>\n </ng-container>\n\n <ng-container *ngIf=\"!(isChartValid$ | async)\">\n <div class=\"o-widget__choose-parameters\">\n <p class=\"a-p\">\n {{ '@pry.widget.chart.chooseParameters' | i18n }}\n </p>\n <button type=\"button\" (click)=\"openSettings()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.settings.title' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.SettingsComponent, selector: "pry-settings", inputs: ["widgetIndex", "isDisable", "headerPresent", "open$", "header"], outputs: ["triggerClick", "saveTriggered", "changeTitle"] }, { kind: "component", type: i2.PryWidgetHeaderComponent, selector: "pry-widget-header", inputs: ["manifest", "openData$", "additionalOptions", "headerOptions", "displayCount", "datasourceIds", "widgetIndex"], outputs: ["manifestModified"] }, { kind: "component", type: i2.PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked"] }, { kind: "component", type: i2.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i5.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle"] }, { kind: "component", type: i2.PryEditInputComponent, selector: "pry-edit-input", inputs: ["label", "editButtonTooltip", "confirmButtonTooltip"], outputs: ["validated"] }, { kind: "component", type: i2.PryRangeComponent, selector: "pry-range", inputs: ["min", "max", "step", "disabled", "labelTranslate"] }, { kind: "component", type: i6.PryWidgetChartCssComponent, selector: "pry-widget-chart-css" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.I18nPipe, name: "i18n" }] }); }
642
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: WidgetChartComponent, selector: "pry-widget-chart", viewQueries: [{ propertyName: "vega", first: true, predicate: ["vega"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<pry-widget-chart-css></pry-widget-chart-css>\n<div class=\"o-widget o-widget--chart\">\n <pry-widget-header\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [isDisable]=\"(filterDataForOptionsCopy$ | async)?.length === 0 || hasNoType(optionsCopy)\"\n [widgetIndex]=\"widgetIndex\"\n [open$]=\"open$\"\n [header]=\"header\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__popup__content__fields -condensed\">\n <pry-edit-input\n label=\"@pry.widget.chart.title\"\n (ngModelChange)=\"changeChartTitle($event)\"\n [ngModel]=\"optionsCopy.customTitle ?? optionsCopy.title\"\n ></pry-edit-input>\n\n <div class=\"m-form-label-field\">\n <ng-container *ngIf=\"(filterDataForOptionsCopy$ | async)?.length === 0; else data\">\n <p class=\"a-label a-label--help -error\">{{ '@pry.widget.chart.params.noParams' | i18n }}</p>\n </ng-container>\n <ng-template #data>\n <div *ngIf=\"optionsCopy?.type !== MarkType.RADAR\">\n {{ '@pry.widget.chart.params.multipleParams' | i18n }}{{ (filterDataForOptionsCopy$ | async)?.length }}\n </div>\n </ng-template>\n </div>\n\n <div *ngIf=\"optionsCopy\" class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_type\">{{ '@pry.widget.chart.type' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeType($event)\"\n [items]=\"typeOptions\"\n [ngModel]=\"optionsCopy.type + '-' + optionsCopy.subType\"\n i18nPrefix=\"@pry.widget.chart.markType.\"\n bindLabel=\"label\"\n bindValue=\"id\"\n id=\"chart_type\"\n ></pry-select>\n </div>\n </div>\n\n <ng-container *ngIf=\"optionsCopy?.type !== MarkType.RADAR && optionsCopy?.type !== MarkType.CIRCLE_PACK\">\n <ng-container *ngIf=\"optionsCopy?.subType === MarkSubType.DONUT\">\n <pry-range\n [ngModel]=\"optionsCopy.innerRadius\"\n (ngModelChange)=\"changeInnerRadius($event)\"\n labelTranslate=\"@pry.widget.chart.innerRadius\"\n min=\"1\"\n max=\"500\"\n ></pry-range>\n </ng-container>\n\n <div\n *ngFor=\"let variableDef of optionsCopy?.selectedVariables; let i = index\"\n class=\"o-settings__popup__content__fields -condensed\"\n >\n <div class=\"m-form-label-field\" *ngIf=\"i === 1\">\n <label class=\"a-label\" for=\"aggregations\">{{ '@pry.widget.chart.encoding.group' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeAggregation($event)\"\n *ngIf=\"i === 1\"\n [items]=\"aggregations\"\n [ngModel]=\"optionsCopy.aggregation\"\n id=\"aggregations\"\n i18nPrefix=\"@pry.widget.chart.aggregation.\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\" *ngIf=\"i !== 1 || optionsCopy.aggregation !== 'count'\">\n <label class=\"a-label\" for=\"aggregation_property\">\n {{ axeLabel(i, optionsCopy) | i18n }}\n </label>\n <pry-select\n (ngModelChange)=\"changeProperty($event, i)\"\n [items]=\"(i !== 1 ? variableAttributes$ : possibleSecondaryAttributes$) | async\"\n [ngModel]=\"variableDef.name\"\n bindLabel=\"name\"\n bindValue=\"technicalName\"\n id=\"aggregation_property\"\n ></pry-select>\n </div>\n\n <pry-edit-input\n label=\"@pry.widget.chart.dataLabel\"\n (ngModelChange)=\"changeLabel($event, i)\"\n [ngModel]=\"variableDef.label\"\n ></pry-edit-input>\n\n <div *ngIf=\"variableDef.type === 'temporal'\" class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_timeUnit\">{{ '@pry.widget.chart.timeUnit' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeTimeUnit($event, variableDef)\"\n [items]=\"timeUnits\"\n [ngModel]=\"variableDef.timeUnit\"\n i18nPrefix=\"@pry.widget.chart.timeUnitList.\"\n id=\"chart_timeUnit\"\n ></pry-select>\n </div>\n\n <div *ngIf=\"variableDef.type === 'quantitative' && optionsCopy?.type !== 'arc'\" class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleOriginAtZero(variableDef, $event)\" [ngModel]=\"variableDef.origin0\"\n >{{ '@pry.widget.chart.origin' | i18n }}\n </pry-checkbox>\n </div>\n </div>\n\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <pry-checkbox\n (ngModelChange)=\"toggleSeries($event)\"\n [ngModel]=\"!!optionsCopy.series\"\n *ngIf=\"optionsCopy?.type !== MarkType.ARC && optionsCopy?.type !== MarkType.RADAR\"\n [disabled]=\"\n this.optionsCopy.subType === MarkSubType.AREASTACKED ||\n this.optionsCopy.subType === MarkSubType.HISTOSTACKED\n \"\n >{{ '@pry.widget.chart.series' | i18n }}\n </pry-checkbox>\n </div>\n\n <div\n class=\"m-form-label-field\"\n *ngIf=\"optionsCopy?.type !== MarkType.ARC && optionsCopy?.type !== MarkType.RADAR && !!optionsCopy.series\"\n >\n <label class=\"a-label\" for=\"chart_seriesAttr\">{{ '@pry.widget.chart.seriesAttr' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeSeries($event)\"\n [ngModel]=\"optionsCopy.series.groupBy!\"\n [items]=\"variableAttributes$ | async\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"chart_seriesAttr\"\n ></pry-select>\n </div>\n\n <div\n class=\"m-form-label-field\"\n *ngIf=\"\n (optionsCopy?.type === MarkType.ARC || optionsCopy?.type === MarkType.RADAR || !!optionsCopy.series) &&\n schemes\n \"\n >\n <label class=\"a-label\" for=\"chart_seriesScheme\" [title]=\"'@pry.widget.chart.seriesSchemeAlt' | i18n\">{{\n '@pry.widget.chart.seriesScheme' | i18n\n }}</label>\n <pry-select\n (ngModelChange)=\"changeSeriesScheme($event)\"\n [ngModel]=\"optionsCopy.series?.scheme!\"\n [items]=\"schemes\"\n id=\"chart_seriesScheme\"\n i18nPrefix=\"@pry.widget.chart.scheme.\"\n bindValue=\"id\"\n bindLabel=\"id\"\n ></pry-select>\n </div>\n\n <div class=\"o-widget--chart-color-thumb\">\n <div\n *ngFor=\"let schemeColor of scheme()\"\n class=\"o-widget--chart-color-thumb-item\"\n [title]=\"schemeColor\"\n [style.background-color]=\"schemeColor\"\n ></div>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox\n (ngModelChange)=\"toggleSeriesLegend($event)\"\n [ngModel]=\"!!optionsCopy.legend!\"\n *ngIf=\"optionsCopy?.type !== MarkType.RADAR || !!optionsCopy.series\"\n >{{ '@pry.widget.chart.seriesLegend' | i18n }}\n </pry-checkbox>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleTooltip($event)\" [ngModel]=\"!!optionsCopy.tooltip!\"\n >{{ '@pry.widget.chart.tooltip' | i18n }}\n </pry-checkbox>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"optionsCopy?.type === MarkType.RADAR && optionsCopy.radar !== undefined\">\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <pry-select\n (ngModelChange)=\"trigger(); proposeTitle()\"\n [(ngModel)]=\"optionsCopy.radar.compare\"\n [items]=\"comparisons\"\n bindLabel=\"name\"\n bindValue=\"id\"\n ></pry-select>\n </div>\n\n <ng-container *ngIf=\"optionsCopy.radar.compare === 'item'\">\n <div class=\"m-form-label-field\">\n <pry-select\n (ngModelChange)=\"trigger(); proposeTitle()\"\n [(ngModel)]=\"optionsCopy.radar.props\"\n [items]=\"numericProperties$ | async\"\n [multiple]=\"true\"\n [closeOnSelect]=\"false\"\n bindLabel=\"name\"\n bindValue=\"name\"\n ></pry-select>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"optionsCopy.radar.compare === 'value'\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"comparison_key\">{{ '@pry.widget.chart.comparison.key' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"trigger(); proposeTitle()\"\n [(ngModel)]=\"optionsCopy.radar.keyProp\"\n [items]=\"textProperties$ | async\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"comparison_key\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"comparison_values\">{{ '@pry.widget.chart.comparison.values' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"trigger(); proposeTitle()\"\n [(ngModel)]=\"optionsCopy.radar.valueProp\"\n [items]=\"numericProperties$ | async\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"comparison_values\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"comparison_category\">{{\n '@pry.widget.chart.comparison.category' | i18n\n }}</label>\n <pry-select\n (ngModelChange)=\"trigger(); proposeTitle()\"\n [(ngModel)]=\"optionsCopy.radar.categoryProp\"\n [items]=\"textProperties$ | async\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"comparison_category\"\n ></pry-select>\n </div>\n </ng-container>\n <ng-container *ngIf=\"schemes\">\n <label\n class=\"a-label\"\n for=\"chart_seriesScheme_radar\"\n [title]=\"'@pry.widget.chart.seriesSchemeAlt' | i18n\"\n >{{ '@pry.widget.chart.seriesScheme' | i18n }}</label\n >\n <pry-select\n (ngModelChange)=\"changeSeriesScheme($event)\"\n [ngModel]=\"optionsCopy.series?.scheme!\"\n [items]=\"schemes\"\n id=\"chart_seriesScheme_radar\"\n ></pry-select>\n </ng-container>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"optionsCopy?.type === MarkType.CIRCLE_PACK && optionsCopy.packing !== undefined\">\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_circle_id\">{{ '@pry.widget.chart.circle.id' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"trigger(); proposeTitle()\"\n [(ngModel)]=\"optionsCopy.packing.id\"\n [items]=\"variableAttributes$ | async\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"chart_circle_id\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_circle_pid\">{{ '@pry.widget.chart.circle.pid' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"trigger(); proposeTitle()\"\n [(ngModel)]=\"optionsCopy.packing.parentId\"\n [items]=\"variableAttributes$ | async\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"chart_circle_pid\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_circle_field\">{{ '@pry.widget.chart.circle.field' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"trigger(); proposeTitle()\"\n [(ngModel)]=\"optionsCopy.packing.packField\"\n [items]=\"numericProperties$ | async\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"chart_circle_field\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_circle_tooltip\">{{ '@pry.widget.chart.circle.tooltip' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"trigger(); proposeTitle()\"\n [(ngModel)]=\"optionsCopy.packing.tooltip\"\n [items]=\"variableAttributes$ | async\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"chart_circle_tooltip\"\n ></pry-select>\n </div>\n </div>\n </ng-container>\n\n <div class=\"o-settings__popup__content__fields -condensed\">\n <pry-checkbox (ngModelChange)=\"toggleSpecToMerge($event)\" [ngModel]=\"!!optionsCopy.specToMerge\"\n >{{ '@pry.widget.chart.moreOptions' | i18n }}\n </pry-checkbox>\n\n <ng-container *ngIf=\"!!optionsCopy.specToMerge\">\n <textarea\n [ngModel]=\"advancedEdit\"\n (focusout)=\"updateAdvancedEdit($event)\"\n class=\"o-settings__popup__content__area\"\n [class.-invalid]=\"invalidJson\"\n ></textarea>\n </ng-container>\n </div>\n </pry-settings>\n </pry-widget-header>\n <ng-container *ngIf=\"isChartValid$ | async\">\n <div\n #vega\n [style.height.px]=\"\n ((widgetSize$ | async)?.height ?? 0) - ((displayHeader$ | async) ? 1 : 0) * WIDGET_HEADER_HEIGHT\n \"\n [style.width.px]=\"(widgetSize$ | async)?.width\"\n ></div>\n </ng-container>\n\n <ng-container *ngIf=\"!(isChartValid$ | async)\">\n <div class=\"o-widget__choose-parameters\">\n <p class=\"a-p\">\n {{ '@pry.widget.chart.chooseParameters' | i18n }}\n </p>\n <button type=\"button\" (click)=\"openSettings()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.settings.title' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.SettingsComponent, selector: "pry-settings", inputs: ["widgetIndex", "isDisable", "headerPresent", "open$", "header"], outputs: ["triggerClick", "saveTriggered", "changeTitle"] }, { kind: "component", type: i2.PryWidgetHeaderComponent, selector: "pry-widget-header", inputs: ["manifest", "openData$", "additionalOptions", "headerOptions", "displayCount", "datasourceIds", "widgetIndex"], outputs: ["manifestModified"] }, { kind: "component", type: i2.PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked"] }, { kind: "component", type: i2.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i5.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle", "name", "inputId", "inhibit"] }, { kind: "component", type: i2.PryEditInputComponent, selector: "pry-edit-input", inputs: ["label", "editButtonTooltip", "confirmButtonTooltip"], outputs: ["validated"] }, { kind: "component", type: i2.PryRangeComponent, selector: "pry-range", inputs: ["min", "max", "step", "disabled", "labelTranslate"] }, { kind: "component", type: i6.PryWidgetChartCssComponent, selector: "pry-widget-chart-css" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.I18nPipe, name: "i18n" }] }); }
643
643
  }
644
644
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: WidgetChartComponent, decorators: [{
645
645
  type: Component,
@@ -648,4 +648,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
648
648
  type: ViewChild,
649
649
  args: ['vega']
650
650
  }] } });
651
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3dpZGdldHMvd2lkZ2V0LWNoYXJ0L2NvbXBvbmVudC93aWRnZXQtY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtY2hhcnQvY29tcG9uZW50L3dpZGdldC1jaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9DLFNBQVMsRUFBYyxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkcsT0FBTyxFQUNMLFdBQVcsRUFPWCxjQUFjLEVBQ2QsZUFBZSxFQUNmLGtCQUFrQixFQUNsQixtQkFBbUIsRUFFbkIsY0FBYyxFQUNkLFNBQVMsRUFFVCxTQUFTLEVBQ1QsV0FBVyxFQUNYLFFBQVEsRUFJUixRQUFRLEVBQ1Isb0JBQW9CLEVBQ3JCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxLQUFLLE1BQU0scUJBQXFCLENBQUM7QUFDeEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5FLE9BQU8sS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxTQUFTLEVBQWdCLE1BQU0sV0FBVyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsWUFBWSxF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SVQsSUFBSTtzQkFBdEIsU0FBUzt1QkFBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7XG4gIEFnZ3JlZ2F0aW9uLFxuICBBdHRyaWJ1dGUsXG4gIEF0dHJpYnV0ZVNpbXBsZVZhbHVlLFxuICBDaGFydE9wdGlvbixcbiAgQ2hhcnRTdWJUeXBlRGVmaW5pdGlvbixcbiAgQ2hhcnRXaWRnZXRPcHRpb25zLFxuICBDbGFzcyxcbiAgQ2xhc3NTZWxlY3RvcnMsXG4gIENvbmZpZ1NlbGVjdG9ycyxcbiAgRGFzaGJvYXJkU2VsZWN0b3JzLFxuICBEYXRhV2lkZ2V0Q29tcG9uZW50LFxuICBGaWVsZCxcbiAgRmllbGRTZWxlY3RvcnMsXG4gIEZpZWxkVHlwZSxcbiAgSXRlbSxcbiAgSXRlbVV0aWxzLFxuICBNYXJrU3ViVHlwZSxcbiAgTWFya1R5cGUsXG4gIFByeUkxOG5TZXJ2aWNlLFxuICBWYXJpYWJsZURlZmluaXRpb24sXG4gIFZlZ2FDb2xvclR5cGUsXG4gIFZlZ2FUeXBlLFxuICBXSURHRVRfSEVBREVSX0hFSUdIVFxufSBmcm9tICdAcHJvdm9seS9kYXNoYm9hcmQnO1xuaW1wb3J0IGVxdWFsIGZyb20gJ2Zhc3QtZGVlcC1lcXVhbC9lczYnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBkZWxheSwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVGltZVVuaXQsIFZpZXcgfSBmcm9tICd2ZWdhJztcbmltcG9ydCBlbWJlZCwgeyB2ZWdhIH0gZnJvbSAndmVnYS1lbWJlZCc7XG5pbXBvcnQgeyBtZXJnZURlZXAsIFRvcExldmVsU3BlYyB9IGZyb20gJ3ZlZ2EtbGl0ZSc7XG5pbXBvcnQgeyBmb250Q29uZmlnIH0gZnJvbSAndmVnYS1saXRlL2J1aWxkL3NyYy9jb25maWcnO1xuaW1wb3J0IHsgVmVnYUVycm9ySGFuZGxlciB9IGZyb20gJy4vdmVnYS1lcnJvci5oYW5kbGVyJztcbmltcG9ydCB7IHZlZ2FCYXNlQ29uZiwgdmVnYUNpcmNsZVBhY2tDb25mLCB2ZWdhUmFkYXJDb25mIH0gZnJvbSAnLi92ZWdhLXNwZWMuY29uc3RhbnQnO1xuXG5leHBvcnQgdHlwZSBSYWRhclZhbHVlID0ge1xuICBjYXRlZ29yeTogbnVtYmVyO1xuICBrZXk6IHN0cmluZztcbiAgdmFsdWU6IG51bWJlcjtcbn07XG5cbnZlZ2Euc2NoZW1lKCdLTy9XL09LJywgWycjQzA0RDNGJywgJyNGRDk4NDMnLCAnIzlBQkUyOSddKTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncHJ5LXdpZGdldC1jaGFydCcsXG4gIHRlbXBsYXRlVXJsOiAnLi93aWRnZXQtY2hhcnQuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFdpZGdldENoYXJ0Q29tcG9uZW50IGV4dGVuZHMgRGF0YVdpZGdldENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICBAVmlld0NoaWxkKCd2ZWdhJykgdmVnYSE6IEVsZW1lbnRSZWY7XG4gIHR5cGVPcHRpb25zOiB7XG4gICAgdHlwZTogTWFya1R5cGU7XG4gICAgc3ViVHlwZTogTWFya1N1YlR5cGU7XG4gICAgbGFiZWw6IE1hcmtUeXBlIHwgTWFya1N1YlR5cGU7XG4gICAgaWQ6IHN0cmluZztcbiAgICB0cmFuc2xhdGVkPzogc3RyaW5nO1xuICB9W10gPSBbXTtcbiAgbWFya1R5cGVzOiBNYXJrVHlwZVtdID0gW107XG4gIHN1YlR5cGVzPzogUGFydGlhbDxDaGFydFN1YlR5cGVEZWZpbml0aW9uPjtcbiAgc2NoZW1lcz86IHsgaWQ6IFZlZ2FDb2xvclR5cGU7IHRyYW5zbGF0ZWQ6IHN0cmluZyB9W107XG4gIE1hcmtUeXBlID0gTWFya1R5cGU7XG4gIE1hcmtTdWJUeXBlID0gTWFya1N1YlR5cGU7XG4gIFdJREdFVF9IRUFERVJfSEVJR0hUID0gV0lER0VUX0hFQURFUl9IRUlHSFQudmFsdWU7XG5cbiAgdGltZVVuaXRzOiBUaW1lVW5pdFtdID0gWyd5ZWFyJywgJ3F1YXJ0ZXInLCAnbW9udGgnLCAnd2VlaycsICdkYXknLCAnaG91cnMnLCAnbWludXRlcyddO1xuICBvcHRpb25zJDogT2JzZXJ2YWJsZTxDaGFydFdpZGdldE9wdGlvbnM+O1xuICBvcHRpb25zQ29weTogQ2hhcnRXaWRnZXRPcHRpb25zID0ge30gYXMgQ2hhcnRXaWRnZXRPcHRpb25zO1xuICBjbGFzc2VzJDogT2JzZXJ2YWJsZTxDbGFzc1tdPjtcbiAgZmllbGRzJDogT2JzZXJ2YWJsZTxGaWVsZFtdPjtcbiAgdmFyaWFibGVzJDogT2JzZXJ2YWJsZTxWYXJpYWJsZURlZmluaXRpb25bXT47XG4gIHZlZ2FMaXRlU3BlYyQ6IE9ic2VydmFibGU8VG9wTGV2ZWxTcGVjPjtcbiAgdmFyaWFibGVBdHRyaWJ1dGVzJDogT2JzZXJ2YWJsZTxBdHRyaWJ1dGVbXT47XG4gIHBvc3NpYmxlU2Vjb25kYXJ5QXR0cmlidXRlcyQ6IE9ic2VydmFibGU8QXR0cmlidXRlW10+O1xuICB0cmlnZ2VyQ2FsY3VsYXRlUG9zc2libGVBdHRyaWJ1dGVzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8dm9pZD4odW5kZWZpbmVkKTtcbiAgaXRlbXMkOiBPYnNlcnZhYmxlPEl0ZW1bXT47XG4gIGZpbHRlckRhdGFGb3JPcHRpb25zJDogT2JzZXJ2YWJsZTxJdGVtW10+O1xuICBmaWx0ZXJEYXRhRm9yT3B0aW9uc0NvcHkkOiBPYnNlcnZhYmxlPEl0ZW1bXT47XG4gIHZhcmlhYmxlczogVmFyaWFibGVEZWZpbml0aW9uW10gPSBbXTtcbiAgYWdncmVnYXRpb25zOiBhbnlbXSA9IFtdO1xuICB2YXJpYWJsZUF0dHJpYnV0ZXM6IEF0dHJpYnV0ZVtdID0gW107XG4gIGZpZWxkczogRmllbGRbXSA9IFtdO1xuICBpc0NoYXJ0VmFsaWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBudW1lcmljUHJvcGVydGllcyQ6IE9ic2VydmFibGU8QXR0cmlidXRlW10+O1xuICB0ZXh0UHJvcGVydGllcyQ6IE9ic2VydmFibGU8QXR0cmlidXRlW10+O1xuICBjb21wYXJpc29ucyA9IFtcbiAgICB7XG4gICAgICBpZDogJ2l0ZW0nLFxuICAgICAgbmFtZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Bwcnkud2lkZ2V0LmNoYXJ0LmNvbXBhcmlzb24uaXRlbScpXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJ3ZhbHVlJyxcbiAgICAgIG5hbWU6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5jaGFydC5jb21wYXJpc29uLnZhbHVlJylcbiAgICB9XG4gIF07XG4gIHZpZXc/OiBWaWV3O1xuICB0cmlnZ2VyJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIGludmFsaWRKc29uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc3RvcmU6IFN0b3JlPGFueT4sXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBQcnlJMThuU2VydmljZSxcbiAgICBlbDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICBzdXBlcihzdG9yZSwgZWwpO1xuXG4gICAgdGhpcy5zdG9yZS5zZWxlY3QoQ29uZmlnU2VsZWN0b3JzLmNoYXJ0T3B0aW9uKS5zdWJzY3JpYmUoKGNoYXJ0T3B0aW9uczogQ2hhcnRPcHRpb24pID0+IHtcbiAgICAgIHRoaXMuYWdncmVnYXRpb25zID0gY2hhcnRPcHRpb25zLmFnZ3JlZ2F0aW9uO1xuICAgICAgdGhpcy5zY2hlbWVzID0gY2hhcnRPcHRpb25zLmNvbG9yLm1hcCgoc2NoZW1lKSA9PiAoeyBpZDogc2NoZW1lLCB0cmFuc2xhdGVkOiAnJyB9KSk7XG4gICAgICB0aGlzLm1hcmtUeXBlcyA9IGNoYXJ0T3B0aW9ucy50eXBlO1xuICAgICAgdGhpcy5zdWJUeXBlcyA9IGNoYXJ0T3B0aW9ucy5zdWJUeXBlO1xuXG4gICAgICB0aGlzLnR5cGVPcHRpb25zID0gdGhpcy5tYXJrVHlwZXNcbiAgICAgICAgLm1hcCgodHlwZTogTWFya1R5cGUpID0+IHtcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgcmV0dXJuIHRoaXMuc3ViVHlwZXMgJiYgdGhpcy5zdWJUeXBlc1t0eXBlXSA/IHRoaXMuc3ViVHlwZXNbdHlwZV0ubWFwKChzdWJUeXBlKSA9PiAoeyB0eXBlLCBzdWJUeXBlIH0pKSA6IFtdO1xuICAgICAgICB9KVxuICAgICAgICAucmVkdWNlKChwLCBjKSA9PiBbLi4ucCwgLi4uY10sIFtdKVxuICAgICAgICAubWFwKChvcHRpb25zOiBhbnkpID0+ICh7XG4gICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICBpZDogYCR7b3B0aW9ucy50eXBlfS0ke29wdGlvbnMuc3ViVHlwZX1gLFxuICAgICAgICAgIGxhYmVsOiBvcHRpb25zLnN1YlR5cGUgPT09IE1hcmtTdWJUeXBlLkRFRkFVTFQgPyBvcHRpb25zLnR5cGUgOiBvcHRpb25zLnN1YlR5cGVcbiAgICAgICAgfSkpXG4gICAgICAgIC5tYXAoKG9wdGlvbnM6IGFueSkgPT4gKHtcbiAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgIHRyYW5zbGF0ZWQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5jaGFydC5tYXJrVHlwZS4nICsgb3B0aW9ucy5sYWJlbClcbiAgICAgICAgfSkpO1xuICAgICAgdGhpcy50eXBlT3B0aW9ucy5zb3J0KChhLCBiKSA9PiBhLnRyYW5zbGF0ZWQ/LmxvY2FsZUNvbXBhcmUoYi50cmFuc2xhdGVkID8/ICcnKSA/PyAtMSk7XG4gICAgfSk7XG4gICAgdGhpcy5jbGFzc2VzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KENsYXNzU2VsZWN0b3JzLmNsYXNzZXMpO1xuICAgIHRoaXMuZmllbGRzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KEZpZWxkU2VsZWN0b3JzLmZpZWxkcyk7XG5cbiAgICB0aGlzLnZhcmlhYmxlQXR0cmlidXRlcyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnJlc3VsdFNldCQsIHRoaXMuY2xhc3NlcyQsIHRoaXMuZmllbGRzJF0pLnBpcGUoXG4gICAgICBtYXAoKFtyZXN1bHRTZXQsIGNsYXNzZXMsIGZpZWxkc10pID0+IEl0ZW1VdGlscy5nZXRBdHRyaWJ1dGVzRnJvbVJzKHJlc3VsdFNldCwgY2xhc3NlcywgZmllbGRzKSksXG4gICAgICBtYXAoKGZpZWxkczogQXR0cmlidXRlW10pID0+IGZpZWxkcy5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKSksXG4gICAgICBtYXAoKHByb3BzKSA9PiBXaWRnZXRDaGFydENvbXBvbmVudC51bmlxdWVBdHRyaWJ1dGVzQnlOYW1lcyhwcm9wcykpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHAsIGMpID0+IGVxdWFsKHAsIGMpKVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMudmFyaWFibGVBdHRyaWJ1dGVzJC5zdWJzY3JpYmUoKGF0dHJzKSA9PiAodGhpcy52YXJpYWJsZUF0dHJpYnV0ZXMgPSBhdHRycykpKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuZmllbGRzJC5zdWJzY3JpYmUoKGF0dHJzKSA9PiAodGhpcy5maWVsZHMgPSBhdHRycykpKTtcblxuICAgIHRoaXMudmFyaWFibGVzJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMudmFyaWFibGVBdHRyaWJ1dGVzJCwgdGhpcy5maWVsZHMkXSkucGlwZShcbiAgICAgIG1hcCgoW2F0dHJpYnV0ZXMsIGZpZWxkc10pID0+IHtcbiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXMubWFwKFxuICAgICAgICAgIChhdHRyKSA9PlxuICAgICAgICAgICAgKCh7XG4gICAgICAgICAgICAgIG5hbWU6IGF0dHIudGVjaG5pY2FsTmFtZSxcbiAgICAgICAgICAgICAgbGFiZWw6IGF0dHIubmFtZSxcbiAgICAgICAgICAgICAgdHlwZTogdGhpcy50cmFuc2xhdGVUb1ZlZ2FUeXBlKFxuICAgICAgICAgICAgICAgIGZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGQuaWQgPT09IGF0dHIuZmllbGQpPy50eXBlID8/IEZpZWxkVHlwZS5TVFJJTkcsXG4gICAgICAgICAgICAgICAgYXR0ci5uYW1lXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0gYXMgVmFyaWFibGVEZWZpbml0aW9uKSA/PyBbXSlcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMub3B0aW9ucyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMudmFyaWFibGVzJCxcbiAgICAgIHRoaXMubWFuaWZlc3QkLnBpcGUobWFwKChtYW5pZmVzdCkgPT4gbWFuaWZlc3Qub3B0aW9ucyBhcyBDaGFydFdpZGdldE9wdGlvbnMpKVxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFt2YXJpYWJsZXMsIG9wdGlvbnNdKSA9PiAoe1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICB0aXRsZTogb3B0aW9ucz8udGl0bGUgPz8gKCh2YXJpYWJsZXNbMF0/LmxhYmVsID8/ICcnKSArICcsICcgKyAodmFyaWFibGVzWzFdPy5sYWJlbCA/PyAnJykpLnJlcGxhY2UoL14sICQvLCAnJyksXG4gICAgICAgIHNlbGVjdGVkVmFyaWFibGVzOiBvcHRpb25zPy5zZWxlY3RlZFZhcmlhYmxlcyA/PyBbe30sIHt9XSxcbiAgICAgICAgLy8gSGVyZSwgd2UgZG8gbm90IHByZXN1bWUgb2YgdGhlIHR5cGUgb2YgZ3JhcGggdGhhdCB0aGUgdXNlciB3YW50cywgYW5kIHByZWZlciB0byBkaXNwbGF5IGEgYnV0dG9uIHRvIGdvIHRvIHBhcmFtc1xuICAgICAgICB0eXBlOiBvcHRpb25zPy50eXBlID8/IHVuZGVmaW5lZCxcbiAgICAgICAgYWdncmVnYXRpb246IG9wdGlvbnM/LmFnZ3JlZ2F0aW9uID8/IEFnZ3JlZ2F0aW9uLkNPVU5ULFxuICAgICAgICB0b29sdGlwOiBvcHRpb25zPy50b29sdGlwID8/IHRydWUsXG4gICAgICAgIGxlZ2VuZDogb3B0aW9ucy5sZWdlbmQgPz8gdHJ1ZSxcbiAgICAgICAgbG9jYWxlOiAnZnInXG4gICAgICB9KSlcbiAgICApO1xuXG4gICAgdGhpcy5pdGVtcyQgPSB0aGlzLnJlc3VsdFNldCQucGlwZShcbiAgICAgIGZpbHRlcigocmVzdWx0U2V0KSA9PiAhIXJlc3VsdFNldCksXG4gICAgICBtYXAoKHJlc3VsdFNldCkgPT4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMocmVzdWx0U2V0Py5pdGVtcylcbiAgICAgICAgICAubWFwKChjbGFzc0lkKSA9PiByZXN1bHRTZXQuaXRlbXNbY2xhc3NJZF0pXG4gICAgICAgICAgLnJlZHVjZSgocHJldiwgY3VycikgPT4gWy4uLnByZXYsIC4uLmN1cnJdLCBbXSk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnBvc3NpYmxlU2Vjb25kYXJ5QXR0cmlidXRlcyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMudmFyaWFibGVBdHRyaWJ1dGVzJCxcbiAgICAgIHRoaXMuaXRlbXMkLFxuICAgICAgdGhpcy5maWVsZHMkLFxuICAgICAgdGhpcy50cmlnZ2VyQ2FsY3VsYXRlUG9zc2libGVBdHRyaWJ1dGVzJFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFt2YXJpYWJsZUZpZWxkcywgaXRlbXMsIGZpZWxkcywgX10pID0+IHtcbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlRmllbGRzXG4gICAgICAgICAgLmZpbHRlcigoYXR0cmlidXRlKSA9PiB7XG4gICAgICAgICAgICAvLyBLZWVwIG9ubHkgbnVtZXJpYyB2YWx1ZXMgd2hlbiBuZWNlc3NhcnlcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgIXRoaXMub3B0aW9uc0NvcHkuYWdncmVnYXRpb24gfHxcbiAgICAgICAgICAgICAgW0FnZ3JlZ2F0aW9uLk5PTkUsIEFnZ3JlZ2F0aW9uLkRJU1RJTkNULCBBZ2dyZWdhdGlvbi5DT1VOVF0uaW5jbHVkZXModGhpcy5vcHRpb25zQ29weS5hZ2dyZWdhdGlvbilcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gZmllbGRzLmZpbmQoKGZpZWxkKSA9PiBmaWVsZC5pZCA9PT0gYXR0cmlidXRlLmZpZWxkKTtcbiAgICAgICAgICAgICAgcmV0dXJuIFtGaWVsZFR5cGUuREVDSU1BTCwgRmllbGRUeXBlLklOU1RBTlQsIEZpZWxkVHlwZS5MT05HLCBGaWVsZFR5cGUuSU5URUdFUl0uaW5jbHVkZXMoXG4gICAgICAgICAgICAgICAgZmllbGQ/LnR5cGUgPz8gRmllbGRUeXBlLlNUUklOR1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmZpbHRlcigoYXR0cmlidXRlKSA9PlxuICAgICAgICAgICAgaXRlbXMuZmluZChcbiAgICAgICAgICAgICAgKGl0ZW0pID0+XG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoaXRlbS5hdHRyaWJ1dGVzKS5pbmNsdWRlcyh0aGlzLm9wdGlvbnNDb3B5LnNlbGVjdGVkVmFyaWFibGVzWzBdLmxhYmVsKSAmJlxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGl0ZW0uYXR0cmlidXRlcykuaW5jbHVkZXMoYXR0cmlidXRlLnRlY2huaWNhbE5hbWUpICYmXG4gICAgICAgICAgICAgICAgISEoaXRlbS5hdHRyaWJ1dGVzW3RoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXNbMF0ubGFiZWxdIGFzIEF0dHJpYnV0ZVNpbXBsZVZhbHVlKS52YWx1ZSAmJlxuICAgICAgICAgICAgICAgIChpdGVtLmF0dHJpYnV0ZXNbYXR0cmlidXRlLm5hbWVdIGFzIEF0dHJpYnV0ZVNpbXBsZVZhbHVlKS52YWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgIH0pLFxuICAgICAgbWFwKChwcm9wcykgPT4gV2lkZ2V0Q2hhcnRDb21wb25lbnQudW5pcXVlQXR0cmlidXRlc0J5TmFtZXMocHJvcHMpKVxuICAgICk7XG5cbiAgICB0aGlzLm51bWVyaWNQcm9wZXJ0aWVzJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy52YXJpYWJsZUF0dHJpYnV0ZXMkLFxuICAgICAgdGhpcy5pdGVtcyQsXG4gICAgICB0aGlzLmZpZWxkcyQsXG4gICAgICB0aGlzLnRyaWdnZXJDYWxjdWxhdGVQb3NzaWJsZUF0dHJpYnV0ZXMkXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW3ZhcmlhYmxlRmllbGRzLCBpdGVtcywgZmllbGRzLCBfXSkgPT4ge1xuICAgICAgICByZXR1cm4gdmFyaWFibGVGaWVsZHNcbiAgICAgICAgICAuZmlsdGVyKChhdHRyaWJ1dGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gZmllbGRzLmZpbmQoKGZpZWxkKSA9PiBmaWVsZC5pZCA9PT0gYXR0cmlidXRlLmZpZWxkKTtcbiAgICAgICAgICAgIHJldHVybiBbRmllbGRUeXBlLkRFQ0lNQUwsIEZpZWxkVHlwZS5JTlNUQU5ULCBGaWVsZFR5cGUuTE9ORywgRmllbGRUeXBlLklOVEVHRVJdLmluY2x1ZGVzKFxuICAgICAgICAgICAgICBmaWVsZD8udHlwZSA/PyBGaWVsZFR5cGUuU1RSSU5HXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmZpbHRlcigoYXR0cmlidXRlKSA9PlxuICAgICAgICAgICAgaXRlbXMuZmluZChcbiAgICAgICAgICAgICAgKGl0ZW0pID0+XG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoaXRlbS5hdHRyaWJ1dGVzKS5pbmNsdWRlcyhhdHRyaWJ1dGUudGVjaG5pY2FsTmFtZSkgJiZcbiAgICAgICAgICAgICAgICAoaXRlbS5hdHRyaWJ1dGVzW2F0dHJpYnV0ZS50ZWNobmljYWxOYW1lXSBhcyBBdHRyaWJ1dGVTaW1wbGVWYWx1ZSkudmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICB9KSxcbiAgICAgIG1hcCgocHJvcHMpID0+IHtcbiAgICAgICAgcmV0dXJuIFdpZGdldENoYXJ0Q29tcG9uZW50LnVuaXF1ZUF0dHJpYnV0ZXNCeU5hbWVzKHByb3BzKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMudGV4dFByb3BlcnRpZXMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLnZhcmlhYmxlQXR0cmlidXRlcyQsXG4gICAgICB0aGlzLml0ZW1zJCxcbiAgICAgIHRoaXMuZmllbGRzJCxcbiAgICAgIHRoaXMudHJpZ2dlckNhbGN1bGF0ZVBvc3NpYmxlQXR0cmlidXRlcyRcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbdmFyaWFibGVGaWVsZHMsIGl0ZW1zLCBmaWVsZHMsIF9dKSA9PiB7XG4gICAgICAgIHJldHVybiB2YXJpYWJsZUZpZWxkc1xuICAgICAgICAgIC5maWx0ZXIoKGF0dHJpYnV0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmllbGQgPSBmaWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLmlkID09PSBhdHRyaWJ1dGUuZmllbGQpO1xuICAgICAgICAgICAgcmV0dXJuIFtGaWVsZFR5cGUuU1RSSU5HLCBGaWVsZFR5cGUuS0VZV09SRF0uaW5jbHVkZXMoZmllbGQ/LnR5cGUgPz8gRmllbGRUeXBlLklOVEVHRVIpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmZpbHRlcigoYXR0cmlidXRlKSA9PlxuICAgICAgICAgICAgaXRlbXMuZmluZChcbiAgICAgICAgICAgICAgKGl0ZW0pID0+XG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoaXRlbS5hdHRyaWJ1dGVzKS5pbmNsdWRlcyhhdHRyaWJ1dGUudGVjaG5pY2FsTmFtZSkgJiZcbiAgICAgICAgICAgICAgICAoaXRlbS5hdHRyaWJ1dGVzW2F0dHJpYnV0ZS50ZWNobmljYWxOYW1lXSBhcyBBdHRyaWJ1dGVTaW1wbGVWYWx1ZSkudmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICB9KSxcbiAgICAgIG1hcCgocHJvcHMpID0+IHtcbiAgICAgICAgcmV0dXJuIFdpZGdldENoYXJ0Q29tcG9uZW50LnVuaXF1ZUF0dHJpYnV0ZXNCeU5hbWVzKHByb3BzKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuZmlsdGVyRGF0YUZvck9wdGlvbnMkID0gY29tYmluZUxhdGVzdChbdGhpcy5pdGVtcyQsIHRoaXMub3B0aW9ucyQsIHRoaXMudmFyaWFibGVBdHRyaWJ1dGVzJF0pLnBpcGUoXG4gICAgICBmaWx0ZXIoKFtpdGVtcywgb3B0aW9uc10pID0+IG9wdGlvbnMuc2VsZWN0ZWRWYXJpYWJsZXMgJiYgb3B0aW9ucy5zZWxlY3RlZFZhcmlhYmxlcy5sZW5ndGggPiAwKSxcbiAgICAgIG1hcCgoW2l0ZW1zLCBvcHRpb25zLCB2YXJpYWJsZXNdKSA9PiBXaWRnZXRDaGFydENvbXBvbmVudC5tYXRjaGluZ0l0ZW1zKGl0ZW1zLCBvcHRpb25zLCB2YXJpYWJsZXMpKVxuICAgICk7XG5cbiAgICB0aGlzLmZpbHRlckRhdGFGb3JPcHRpb25zQ29weSQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuaXRlbXMkLFxuICAgICAgdGhpcy50cmlnZ2VyQ2FsY3VsYXRlUG9zc2libGVBdHRyaWJ1dGVzJC5waXBlKGRlbGF5KDIwMCkpLFxuICAgICAgdGhpcy52YXJpYWJsZUF0dHJpYnV0ZXMkXG4gICAgXSkucGlwZShcbiAgICAgIGZpbHRlcigoW2l0ZW1zLCBfXSkgPT4gdGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlcyAmJiB0aGlzLm9wdGlvbnNDb3B5LnNlbGVjdGVkVmFyaWFibGVzLmxlbmd0aCA+IDApLFxuICAgICAgbWFwKChbaXRlbXMsIF8sIHZhcmlhYmxlc10pID0+IFdpZGdldENoYXJ0Q29tcG9uZW50Lm1hdGNoaW5nSXRlbXMoaXRlbXMsIHRoaXMub3B0aW9uc0NvcHksIHZhcmlhYmxlcykpXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLm9wdGlvbnMkLnBpcGUoZmlsdGVyKChvcHQpID0+ICEhb3B0KSkuc3Vic2NyaWJlKChvcHRpb25zKSA9PiB7XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpKTtcbiAgICAgICAgdGhpcy51cGRhdGVBZHZhbmNlZEVkaXQoSlNPTi5zdHJpbmdpZnkodGhpcy5vcHRpb25zQ29weS5zcGVjVG9NZXJnZSkpO1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LnR5cGUgPSAhdGhpcy5tYXJrVHlwZXMuaW5jbHVkZXModGhpcy5vcHRpb25zQ29weS50eXBlKVxuICAgICAgICAgID8gdGhpcy5tYXJrVHlwZXNbMF1cbiAgICAgICAgICA6IHRoaXMub3B0aW9uc0NvcHkudHlwZTtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weS5zdWJUeXBlID0gdGhpcy5vcHRpb25zQ29weS5zdWJUeXBlID8/IE1hcmtTdWJUeXBlLkRFRkFVTFQ7XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkuYWdncmVnYXRpb24gPSAhdGhpcy5hZ2dyZWdhdGlvbnMuaW5jbHVkZXModGhpcy5vcHRpb25zQ29weS5hZ2dyZWdhdGlvbilcbiAgICAgICAgICA/IHRoaXMuYWdncmVnYXRpb25zWzBdXG4gICAgICAgICAgOiB0aGlzLm9wdGlvbnNDb3B5LmFnZ3JlZ2F0aW9uO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zQ29weS5zZXJpZXMpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LnNlcmllcy5zY2hlbWUgPVxuICAgICAgICAgICAgdGhpcy5vcHRpb25zQ29weS5zZXJpZXM/LnNjaGVtZSAmJlxuICAgICAgICAgICAgdGhpcy5zY2hlbWVzICYmXG4gICAgICAgICAgICAhdGhpcy5zY2hlbWVzLmZpbmQoKHMpID0+IHMuaWQgPT09IHRoaXMub3B0aW9uc0NvcHk/LnNlcmllcz8uc2NoZW1lKVxuICAgICAgICAgICAgICA/IHRoaXMuc2NoZW1lc1swXS5pZFxuICAgICAgICAgICAgICA6IHRoaXMub3B0aW9uc0NvcHkuc2VyaWVzPy5zY2hlbWU7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMudmVnYUxpdGVTcGVjJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLndpbmRvd01hbmlmZXN0KSxcbiAgICAgIHRoaXMubWFuaWZlc3QkLFxuICAgICAgdGhpcy53aWRnZXRTaXplJCxcbiAgICAgIHRoaXMuZmlsdGVyRGF0YUZvck9wdGlvbnMkLFxuICAgICAgdGhpcy5vcHRpb25zJCxcbiAgICAgIHRoaXMuZGlzcGxheUhlYWRlciQsXG4gICAgICB0aGlzLnZhcmlhYmxlQXR0cmlidXRlcyRcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbd2luZG93TWFuaWZlc3QsIHdpZGdldE1hbmlmZXN0LCBzaXplLCBkYXRhLCBvcHRpb25zLCBkaXNwbGF5SGVhZGVyLCB2YXJpYWJsZUZpZWxkXSkgPT4ge1xuICAgICAgICBsZXQgc3BlYyA9IHZlZ2FCYXNlQ29uZjtcbiAgICAgICAgc3dpdGNoIChvcHRpb25zLnR5cGUpIHtcbiAgICAgICAgICBjYXNlIE1hcmtUeXBlLlJBREFSOlxuICAgICAgICAgICAgc3BlYyA9IHZlZ2FSYWRhckNvbmY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIE1hcmtUeXBlLkNJUkNMRV9QQUNLOlxuICAgICAgICAgICAgc3BlYyA9IHZlZ2FDaXJjbGVQYWNrQ29uZjtcbiAgICAgICAgfVxuXG4gICAgICAgIHNwZWMudGl0bGUgPSBvcHRpb25zLmN1c3RvbVRpdGxlID8/IG9wdGlvbnMudGl0bGU7XG5cbiAgICAgICAgc3dpdGNoIChvcHRpb25zLnR5cGUpIHtcbiAgICAgICAgICBjYXNlIE1hcmtUeXBlLlJBREFSOlxuICAgICAgICAgICAgc3BlYy5zaWduYWxzWzBdLnVwZGF0ZSA9IHNpemUud2lkdGggPiBzaXplLmhlaWdodCA/ICdoZWlnaHQgLyAyJyA6ICd3aWR0aCAvIDInO1xuICAgICAgICAgICAgc3BlYy5kYXRhWzBdLnZhbHVlcyA9IFdpZGdldENoYXJ0Q29tcG9uZW50LmJ1aWxkRGF0YVZlZ2FSYWRhcihkYXRhLCBvcHRpb25zKTtcbiAgICAgICAgICAgIHNwZWMuc2NhbGVzWzJdLnJhbmdlLnNjaGVtZSA9IG9wdGlvbnMuc2VyaWVzPy5zY2hlbWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIE1hcmtUeXBlLkNJUkNMRV9QQUNLOlxuICAgICAgICAgICAgc3BlYy5kYXRhWzBdLnZhbHVlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuICAgICAgICAgICAgc3BlYy5kYXRhWzFdLnRyYW5zZm9ybVswXS5rZXkgPSAnYXR0cmlidXRlcy4nICsgb3B0aW9ucy5wYWNraW5nPy5pZCArICcudmFsdWUnO1xuICAgICAgICAgICAgc3BlYy5kYXRhWzFdLnRyYW5zZm9ybVswXS5wYXJlbnRLZXkgPSAnYXR0cmlidXRlcy4nICsgb3B0aW9ucy5wYWNraW5nPy5wYXJlbnRJZCArICcudmFsdWUnO1xuICAgICAgICAgICAgc3BlYy5kYXRhWzFdLnRyYW5zZm9ybVsxXS5maWVsZCA9ICdhdHRyaWJ1dGVzLicgKyBvcHRpb25zLnBhY2tpbmc/LnBhY2tGaWVsZCArICcudmFsdWUnO1xuICAgICAgICAgICAgc3BlYy5tYXJrc1swXS5lbmNvZGUuZW50ZXIudG9vbHRpcC5zaWduYWwgPSBgZGF0dW0uYXR0cmlidXRlcy4ke1xuICAgICAgICAgICAgICBvcHRpb25zLnBhY2tpbmc/LnRvb2x0aXAgPz8gb3B0aW9ucy5wYWNraW5nPy5pZFxuICAgICAgICAgICAgfS52YWx1ZSArICcgOiAnICsgZGF0dW0uYXR0cmlidXRlcy4ke29wdGlvbnMucGFja2luZz8ucGFja0ZpZWxkfS52YWx1ZWA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgc3BlYy5kYXRhID0geyB2YWx1ZXM6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpIH07XG4gICAgICAgICAgICBzcGVjLmxheWVyID0gW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbWFyazoge1xuICAgICAgICAgICAgICAgICAgdHlwZTogb3B0aW9ucy50eXBlLFxuICAgICAgICAgICAgICAgICAgcG9pbnQ6XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMudHlwZSA9PT0gTWFya1R5cGUuUE9JTlQgfHxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zdWJUeXBlID09PSBNYXJrU3ViVHlwZS5XSVRIX0xJTkVTX0FORF9QT0lOVFMgfHxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zdWJUeXBlID09PSBNYXJrU3ViVHlwZS5XSVRIX1BPSU5UUyxcbiAgICAgICAgICAgICAgICAgIGxpbmU6IG9wdGlvbnMudHlwZSA9PT0gTWFya1R5cGUuTElORSB8fCBvcHRpb25zLnN1YlR5cGUgPT09IE1hcmtTdWJUeXBlLldJVEhfTElORVNfQU5EX1BPSU5UUyxcbiAgICAgICAgICAgICAgICAgIGlubmVyUmFkaXVzOiBvcHRpb25zLmlubmVyUmFkaXVzLFxuICAgICAgICAgICAgICAgICAgdG9vbHRpcDogb3B0aW9ucy50b29sdGlwID8/IHRydWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBXaWRnZXRDaGFydENvbXBvbmVudC5jYWxjdWxhdGVFbmNvZGluZyhvcHRpb25zKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZmlsbCkge1xuICAgICAgICAgICAgICBzcGVjLmxheWVyWzBdLm1hcmsuZmlsbCA9IG9wdGlvbnMuZmlsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRpb25zLnN1YlR5cGUgPT09IE1hcmtTdWJUeXBlLkFSRUFTVEFDS0VEIHx8IG9wdGlvbnMuc3ViVHlwZSA9PT0gTWFya1N1YlR5cGUuSElTVE9TVEFDS0VEKSB7XG4gICAgICAgICAgICAgIHNwZWMuZGF0YS50cmFuc2Zvcm0gPSBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgdHlwZTogJ3N0YWNrJyxcbiAgICAgICAgICAgICAgICAgIGdyb3VwYnk6IFtvcHRpb25zLnNlbGVjdGVkVmFyaWFibGVzWzBdLm5hbWVdLFxuICAgICAgICAgICAgICAgICAgc29ydDogeyBmaWVsZDogb3B0aW9ucy5zZXJpZXM/Lmdyb3VwQnkgfSxcbiAgICAgICAgICAgICAgICAgIGZpZWxkOiBvcHRpb25zLnNlbGVjdGVkVmFyaWFibGVzWzFdLm5hbWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWVyZ2VkID0gbWVyZ2VEZWVwKHNwZWMsIHsgY29uZmlnOiBmb250Q29uZmlnKCdVYnVudHUsIHNhbnMtc2VyaWYnKSB9IGFzIGFueSwgb3B0aW9ucy5zcGVjVG9NZXJnZSk7XG5cbiAgICAgICAgaWYgKCEhb3B0aW9ucy5zcGVjVG9NZXJnZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHNwZWMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtZXJnZWQ7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLmlzQ2hhcnRWYWxpZCQgPSB0aGlzLm9wdGlvbnMkLnBpcGUoXG4gICAgICBtYXAoXG4gICAgICAgIChvcHRpb25zKSA9PlxuICAgICAgICAgICEhb3B0aW9ucy50eXBlICYmXG4gICAgICAgICAgLy8gV2UgbXVzdCBoYXZlIHRoZSBjb3JyZWN0IG51bWJlciBvZiB2YXJpYWJsZXMgdG8gZHJhdyB0aGUgZ3JhcGhcbiAgICAgICAgICAob3B0aW9ucy5zZWxlY3RlZFZhcmlhYmxlcy5maWx0ZXIoKHYpID0+ICEhdi50eXBlKS5sZW5ndGggPiAxIHx8XG4gICAgICAgICAgICAob3B0aW9ucy5zZWxlY3RlZFZhcmlhYmxlcy5maWx0ZXIoKHYpID0+ICEhdi50eXBlKS5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgIChvcHRpb25zLmFnZ3JlZ2F0aW9uID09PSBBZ2dyZWdhdGlvbi5DT1VOVCB8fFxuICAgICAgICAgICAgICAgIG9wdGlvbnMuYWdncmVnYXRpb24gPT09IEFnZ3JlZ2F0aW9uLkRJU1RJTkNUIHx8XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5hZ2dyZWdhdGlvbiA9PT0gQWdncmVnYXRpb24uTk9ORSkpKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMudmVnYUxpdGVTcGVjJCwgdGhpcy50cmlnZ2VyJF0pLnN1YnNjcmliZSgoW3NwZWMsIF9dKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnZlZ2EpIHtcbiAgICAgICAgICB0aGlzLnZpZXc/LmZpbmFsaXplKCk7XG4gICAgICAgICAgZW1iZWQodGhpcy52ZWdhLm5hdGl2ZUVsZW1lbnQsIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoc3BlYykpLCB7XG4gICAgICAgICAgICBhY3Rpb25zOiBmYWxzZSxcbiAgICAgICAgICAgIHJlbmRlcmVyOiAnc3ZnJyxcbiAgICAgICAgICAgIGZvcm1hdExvY2FsZTpcbiAgICAgICAgICAgICAgdGhpcy5vcHRpb25zQ29weS5sb2NhbGUgPT09ICdmcidcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgZGVjaW1hbDogJywnLFxuICAgICAgICAgICAgICAgICAgICB0aG91c2FuZHM6ICdcXHUwMGEwJyxcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBpbmc6IFszXSxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVuY3k6IFsnJywgJ1xcdTAwYTDigqwnXSxcbiAgICAgICAgICAgICAgICAgICAgcGVyY2VudDogJ1xcdTIwMmYlJ1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgICBkZWNpbWFsOiAnLicsXG4gICAgICAgICAgICAgICAgICAgIHRob3VzYW5kczogJywnLFxuICAgICAgICAgICAgICAgICAgICBncm91cGluZzogWzNdLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW5jeTogWyckJywgJyddXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgdmlld0NsYXNzOiBWZWdhRXJyb3JIYW5kbGVyXG4gICAgICAgICAgfSkudGhlbigocmVzdWx0KSA9PiAodGhpcy52aWV3ID0gcmVzdWx0LnZpZXcpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudHJpZ2dlciQubmV4dCgpLCAxMDApO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy50cmlnZ2VyJC5uZXh0KCk7XG4gIH1cblxuICBzdGF0aWMgY2FsY3VsYXRlRW5jb2Rpbmcob3B0aW9uczogQ2hhcnRXaWRnZXRPcHRpb25zKSB7XG4gICAgY29uc3QgdmFyaWFibGVzID0gb3B0aW9ucy5zZWxlY3RlZFZhcmlhYmxlcyA/PyBbe30sIHt9XTtcbiAgICBzd2l0Y2ggKG9wdGlvbnMudHlwZSkge1xuICAgICAgY2FzZSBNYXJrVHlwZS5BUkM6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdGhldGE6IHtcbiAgICAgICAgICAgIGZpZWxkOiBgYXR0cmlidXRlcy4ke3ZhcmlhYmxlc1sxXS5uYW1lfS52YWx1ZWAsXG4gICAgICAgICAgICB0aXRsZTogdmFyaWFibGVzWzFdLmxhYmVsLFxuICAgICAgICAgICAgdHlwZTogdmFyaWFibGVzWzFdLnR5cGUsXG4gICAgICAgICAgICBhZ2dyZWdhdGU6IG9wdGlvbnMuYWdncmVnYXRpb24gPz8gQWdncmVnYXRpb24uQ09VTlRcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbG9yOiB7XG4gICAgICAgICAgICBmaWVsZDogYGF0dHJpYnV0ZXMuJHt2YXJpYWJsZXNbMF0ubmFtZX0udmFsdWVgLFxuICAgICAgICAgICAgdGl0bGU6IHZhcmlhYmxlc1swXS5sYWJlbCxcbiAgICAgICAgICAgIHR5cGU6IHZhcmlhYmxlc1swXS50eXBlLFxuICAgICAgICAgICAgbGVnZW5kOiBvcHRpb25zLmxlZ2VuZCA/PyB0cnVlLFxuICAgICAgICAgICAgc2NhbGU6IG9wdGlvbnMuc2NhbGUgPz8geyBzY2hlbWU6IG9wdGlvbnMuc2VyaWVzPy5zY2hlbWUgPz8gJ2NhdGVnb3J5MjBjJyB9XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgY2FzZSBNYXJrVHlwZS5SQURBUjpcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc3QgZW5jb2RpbmcgPSB7XG4gICAgICAgICAgeDoge1xuICAgICAgICAgICAgZmllbGQ6IGBhdHRyaWJ1dGVzLiR7dmFyaWFibGVzWzBdLm5hbWV9LnZhbHVlYCxcbiAgICAgICAgICAgIHRpdGxlOiB2YXJpYWJsZXNbMF0ubGFiZWwsXG4gICAgICAgICAgICB0eXBlOiB2YXJpYWJsZXNbMF0udHlwZSxcbiAgICAgICAgICAgIHRpbWVVbml0OiB2YXJpYWJsZXNbMF0udHlwZSA9PT0gVmVnYVR5cGUuVEVNUE9SQUwgPyB2YXJpYWJsZXNbMF0udGltZVVuaXQgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBiaW46IG9wdGlvbnMuc3ViVHlwZSA9PT0gTWFya1N1YlR5cGUuSElTVE9HUkFNLFxuICAgICAgICAgICAgYXhpczogdmFyaWFibGVzWzBdLmF4aXNPcHRpb25zLFxuICAgICAgICAgICAgc2NhbGU6IHtcbiAgICAgICAgICAgICAgLy8gRm9yY2UgYSBmYWxzZSB2YWx1ZSBoZXJlIHNvIHRoYXQgdmVnYSB1bmRlcnN0YW5kIHByb3Blcmx5XG4gICAgICAgICAgICAgIHplcm86ICEhdmFyaWFibGVzWzBdLm9yaWdpbjAsXG4gICAgICAgICAgICAgIHR5cGU6IFdpZGdldENoYXJ0Q29tcG9uZW50LmlzVGltZVVuaXRVVEModmFyaWFibGVzWzBdKSA/ICd1dGMnIDogdW5kZWZpbmVkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB5OiB7XG4gICAgICAgICAgICBmaWVsZDogYGF0dHJpYnV0ZXMuJHt2YXJpYWJsZXNbMV0ubmFtZX0udmFsdWVgLFxuICAgICAgICAgICAgdGl0bGU6IHZhcmlhYmxlc1sxXS5sYWJlbCxcbiAgICAgICAgICAgIHR5cGU6IG9wdGlvbnMuYWdncmVnYXRpb24gPT09IEFnZ3JlZ2F0aW9uLkNPVU5UID8gVmVnYVR5cGUuUVVBTlRJVEFUSVZFIDogdmFyaWFibGVzWzFdLnR5cGUsXG4gICAgICAgICAgICB0aW1lVW5pdDogdmFyaWFibGVzWzFdLnR5cGUgPT09IFZlZ2FUeXBlLlRFTVBPUkFMID8gdmFyaWFibGVzWzFdLnRpbWVVbml0IDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgYXhpczogdmFyaWFibGVzWzFdLmF4aXNPcHRpb25zLFxuICAgICAgICAgICAgYWdncmVnYXRlOiBvcHRpb25zLmFnZ3JlZ2F0aW9uICE9PSBBZ2dyZWdhdGlvbi5OT05FID8gb3B0aW9ucy5hZ2dyZWdhdGlvbiA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHNjYWxlOiB7XG4gICAgICAgICAgICAgIHplcm86IHZhcmlhYmxlc1sxXS5vcmlnaW4wLFxuICAgICAgICAgICAgICB0eXBlOiBXaWRnZXRDaGFydENvbXBvbmVudC5pc1RpbWVVbml0VVRDKHZhcmlhYmxlc1sxXSkgPyAndXRjJyA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKG9wdGlvbnMuc2VyaWVzKSB7XG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIGVuY29kaW5nLmNvbG9yID0ge1xuICAgICAgICAgICAgdGl0bGU6IGAke29wdGlvbnMuc2VyaWVzLmdyb3VwQnl9YCxcbiAgICAgICAgICAgIGZpZWxkOiBgYXR0cmlidXRlcy4ke29wdGlvbnMuc2VyaWVzLmdyb3VwQnl9LnZhbHVlYCxcbiAgICAgICAgICAgIGxlZ2VuZDogb3B0aW9ucy5sZWdlbmRcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmIChvcHRpb25zLnNlcmllcy5zY2hlbWUpIHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGVuY29kaW5nLmNvbG9yLnNjYWxlID0geyBzY2hlbWU6IG9wdGlvbnMuc2VyaWVzLnNjaGVtZSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW5jb2Rpbmc7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGJ1aWxkRGF0YVZlZ2FSYWRhcihpdGVtczogSXRlbVtdLCBvcHRpb25zOiBDaGFydFdpZGdldE9wdGlvbnMpOiBSYWRhclZhbHVlW10ge1xuICAgIGlmIChvcHRpb25zLnJhZGFyPy5jb21wYXJlID09PSAnaXRlbScpIHtcbiAgICAgIHJldHVybiBpdGVtc1xuICAgICAgICAubWFwKChpdGVtLCBpZHgpID0+XG4gICAgICAgICAgKG9wdGlvbnMucmFkYXI/LnByb3BzID8/IFtdKS5tYXAoKHByb3A6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlbVZhbHVlTXVsdGlwbGUgPSBJdGVtVXRpbHMuZ2V0QXR0cmlidXRlVmFsdWUoaXRlbSwgcHJvcCk7XG4gICAgICAgICAgICBjb25zdCBpdGVtVmFsdWUgPSBBcnJheS5pc0FycmF5KGl0ZW1WYWx1ZU11bHRpcGxlKSA/IGl0ZW1WYWx1ZU11bHRpcGxlWzBdIDogaXRlbVZhbHVlTXVsdGlwbGU7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjYXRlZ29yeTogaWR4LFxuICAgICAgICAgICAgICBrZXk6IHByb3AsXG4gICAgICAgICAgICAgIHZhbHVlOiBpdGVtVmFsdWU/LnZhbHVlXG4gICAgICAgICAgICB9IGFzIFJhZGFyVmFsdWU7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAucmVkdWNlKChhOiBSYWRhclZhbHVlW10sIGI6IFJhZGFyVmFsdWVbXSkgPT4gWy4uLmEsIC4uLmJdLCBbXSlcbiAgICAgICAgLmZpbHRlcigoYTogUmFkYXJWYWx1ZSkgPT4gYS52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIGEudmFsdWUgIT09IG51bGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gaXRlbXNcbiAgICAgICAgLm1hcChcbiAgICAgICAgICAoaXRlbSwgaWR4KSA9PlxuICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgY2F0ZWdvcnk6IChpdGVtLmF0dHJpYnV0ZXNbb3B0aW9ucy5yYWRhcj8uY2F0ZWdvcnlQcm9wID8/ICcnXSBhcyBBdHRyaWJ1dGVTaW1wbGVWYWx1ZSk/LnZhbHVlID8/ICdvYmplY3QnLFxuICAgICAgICAgICAgICBrZXk6IChpdGVtLmF0dHJpYnV0ZXNbb3B0aW9ucy5yYWRhcj8ua2V5UHJvcCA/PyAnJ10gYXMgQXR0cmlidXRlU2ltcGxlVmFsdWUpPy52YWx1ZSxcbiAgICAgICAgICAgICAgdmFsdWU6IChpdGVtLmF0dHJpYnV0ZXNbb3B0aW9ucy5yYWRhcj8udmFsdWVQcm9wID8/ICcnXSBhcyBBdHRyaWJ1dGVTaW1wbGVWYWx1ZSk/LnZhbHVlXG4gICAgICAgICAgICB9IGFzIFJhZGFyVmFsdWUpXG4gICAgICAgIClcbiAgICAgICAgLmZpbHRlcigoYTogUmFkYXJWYWx1ZSkgPT4gYS52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIGEudmFsdWUgIT09IG51bGwgJiYgISFhLmtleSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIG1hdGNoaW5nSXRlbXMoaXRlbXM6IEl0ZW1bXSwgb3B0aW9uczogQ2hhcnRXaWRnZXRPcHRpb25zLCBhdHRyaWJ1dGVzOiBBdHRyaWJ1dGVbXSkge1xuICAgIHJldHVybiBpdGVtcy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgIHN3aXRjaCAob3B0aW9ucy50eXBlKSB7XG4gICAgICAgIGNhc2UgTWFya1R5cGUuQ0lSQ0xFX1BBQ0s6XG4gICAgICAgICAgcmV0dXJuICEhb3B0aW9ucy5wYWNraW5nPy5pZCAmJiAhIW9wdGlvbnMucGFja2luZy5wYXJlbnRJZCAmJiAhIW9wdGlvbnMucGFja2luZy5wYWNrRmllbGQ7XG4gICAgICAgIGNhc2UgTWFya1R5cGUuUkFEQVI6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICgob3B0aW9ucy5yYWRhcj8uY29tcGFyZSA9PT0gJ2l0ZW0nICYmIChvcHRpb25zLnJhZGFyLnByb3BzPy5sZW5ndGggPz8gMCkgPiAyKSB8fFxuICAgICAgICAgICAgICAob3B0aW9ucy5yYWRhcj8uY29tcGFyZSAhPT0gJ2l0ZW0nICYmXG4gICAgICAgICAgICAgICAgISFvcHRpb25zLnJhZGFyPy5rZXlQcm9wICYmXG4gICAgICAgICAgICAgICAgISFvcHRpb25zLnJhZGFyLnZhbHVlUHJvcCAmJlxuICAgICAgICAgICAgICAgICEhb3B0aW9ucy5yYWRhci5jYXRlZ29yeVByb3ApKSAmJlxuICAgICAgICAgICAgV2lkZ2V0Q2hhcnRDb21wb25lbnQuYnVpbGREYXRhVmVnYVJhZGFyKGl0ZW1zLCBvcHRpb25zKS5sZW5ndGggPiAwXG4gICAgICAgICAgKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgT2JqZWN0LmtleXMoaXRlbS5hdHRyaWJ1dGVzKS5pbmNsdWRlcyhvcHRpb25zLnNlbGVjdGVkVmFyaWFibGVzWzBdLm5hbWUpICYmXG4gICAgICAgICAgICAoaXRlbS5hdHRyaWJ1dGVzW29wdGlvbnMuc2VsZWN0ZWRWYXJpYWJsZXNbMF0ubmFtZV0gYXMgQXR0cmlidXRlU2ltcGxlVmFsdWUpLnZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICgoT2JqZWN0LmtleXMoaXRlbS5hdHRyaWJ1dGVzKS5pbmNsdWRlcyhvcHRpb25zLnNlbGVjdGVkVmFyaWFibGVzWzFdLm5hbWUpICYmXG4gICAgICAgICAgICAgIChpdGVtLmF0dHJpYnV0ZXNbb3B0aW9ucy5zZWxlY3RlZFZhcmlhYmxlc1sxXS5uYW1lXSBhcyBBdHRyaWJ1dGVTaW1wbGVWYWx1ZSkudmFsdWUgIT09IHVuZGVmaW5lZCkgfHxcbiAgICAgICAgICAgICAgb3B0aW9ucy5hZ2dyZWdhdGlvbiA9PT0gQWdncmVnYXRpb24uRElTVElOQ1QgfHxcbiAgICAgICAgICAgICAgb3B0aW9ucy5hZ2dyZWdhdGlvbiA9PT0gQWdncmVnYXRpb24uQ09VTlQpXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyB1bmlxdWVBdHRyaWJ1dGVzQnlOYW1lcyhhdHRyaWJ1dGVzOiBBdHRyaWJ1dGVbXSk6IEF0dHJpYnV0ZVtdIHtcbiAgICByZXR1cm4gWy4uLm5ldyBTZXQoYXR0cmlidXRlcy5tYXAoKGF0dHIpID0+IGF0dHIudGVjaG5pY2FsTmFtZSkpXS5tYXAoXG4gICAgICAoYXR0ck5hbWUpID0+IGF0dHJpYnV0ZXMuZmluZCgoYXR0cikgPT4gYXR0ci50ZWNobmljYWxOYW1lID09PSBhdHRyTmFtZSkgPz8gKHt9IGFzIEF0dHJpYnV0ZSlcbiAgICApO1xuICB9XG5cbiAgdGVtcGxhdGVUeXBlVHJhbnNsYXRpb25GbiA9IChpdGVtOiBhbnksIGFyZ3M6IGFueVtdKSA9PlxuICAgIGAke2FyZ3NbMF19JHtpdGVtID09PSBNYXJrU3ViVHlwZS5ERUZBVUxUID8gaXRlbSA6IGFyZ3NbMV0gKyBhcmdzWzJdICsgaXRlbX1gO1xuXG4gIGFkdmFuY2VkRWRpdDogc3RyaW5nID0gJ3t9JztcblxuICBjaGFuZ2VDaGFydFRpdGxlKHRpdGxlOiBzdHJpbmcpIHtcbiAgICB0aGlzLm9wdGlvbnNDb3B5LmN1c3RvbVRpdGxlID0gdGl0bGU7XG4gIH1cblxuICBjaGFuZ2VUaW1lVW5pdCgkZXZlbnQ6IFRpbWVVbml0LCB2YXJpYWJsZTogVmFyaWFibGVEZWZpbml0aW9uKSB7XG4gICAgdmFyaWFibGUudGltZVVuaXQgPSAkZXZlbnQ7XG4gIH1cblxuICBjaGFuZ2VBZ2dyZWdhdGlvbigkZXZlbnQ6IEFnZ3JlZ2F0aW9uKSB7XG4gICAgdGhpcy5vcHRpb25zQ29weS5hZ2dyZWdhdGlvbiA9ICRldmVudDtcbiAgICBpZiAoW0FnZ3JlZ2F0aW9uLkNPVU5ULCBBZ2dyZWdhdGlvbi5ESVNUSU5DVF0uaW5jbHVkZXMoJGV2ZW50ISkpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXNbMV0uYXhpc09wdGlvbnMgPSB7IHRpY2tNaW5TdGVwOiAxIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB0aGlzLm9wdGlvbnNDb3B5LnNlbGVjdGVkVmFyaWFibGVzWzFdLmF4aXNPcHRpb25zO1xuICAgIH1cbiAgICB0aGlzLnRyaWdnZXJDYWxjdWxhdGVQb3NzaWJsZUF0dHJpYnV0ZXMkLm5leHQoKTtcbiAgfVxuXG4gIGNoYW5nZVByb3BlcnR5KGF0dHJOYW1lOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBhdHRyID0gdGhpcy52YXJpYWJsZUF0dHJpYnV0ZXMuZmluZCgoYXR0cikgPT4gYXR0ci50ZWNobmljYWxOYW1lID09PSBhdHRyTmFtZSk7XG4gICAgaWYgKCEhYXR0cikge1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlc1tpbmRleF0ubmFtZSA9IGF0dHIubmFtZTtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXNbaW5kZXhdLmxhYmVsID0gYXR0ci5uYW1lO1xuICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGQuaWQgPT09IGF0dHIuZmllbGQpPy50eXBlID8/IEZpZWxkVHlwZS5TVFJJTkc7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LnNlbGVjdGVkVmFyaWFibGVzW2luZGV4XS50eXBlID0gdGhpcy50cmFuc2xhdGVUb1ZlZ2FUeXBlKGZpZWxkLCBhdHRyLm5hbWUpO1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlc1tpbmRleF0uYXhpc09wdGlvbnMgPSB0aGlzLm1pblRpY2soZmllbGQpO1xuICAgICAgdGhpcy5vcHRpb25zQ29weS50aXRsZSA9XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXNbMF0ubGFiZWwgKyAnLCAnICsgdGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlc1sxXS5sYWJlbDtcbiAgICB9XG4gICAgdGhpcy50cmlnZ2VyQ2FsY3VsYXRlUG9zc2libGVBdHRyaWJ1dGVzJC5uZXh0KCk7XG4gIH1cblxuICBzdGF0aWMgaXNUaW1lVW5pdFVUQyh2YXJpYWJsZURlZjogVmFyaWFibGVEZWZpbml0aW9uKTogYm9vbGVhbiB7XG4gICAgbGV0IHV0Y1JlZ2V4ID0gbmV3IFJlZ0V4cCgvX3V0Y3x1dGNffF9VVEN8VVRDX3xfVXRjfFV0Y18vLCAnZycpO1xuICAgIHJldHVybiB1dGNSZWdleC50ZXN0KHZhcmlhYmxlRGVmPy5sYWJlbCk7XG4gIH1cblxuICBjaGFuZ2VMYWJlbChsYWJlbDogc3RyaW5nLCBpbmRleDogbnVtYmVyKSB7XG4gICAgbGV0IHVwZGF0ZVRpdGxlID0gZmFsc2U7XG4gICAgaWYgKFxuICAgICAgdGhpcy5vcHRpb25zQ29weS50aXRsZSA9PT1cbiAgICAgIHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXNbMF0ubGFiZWwgKyAnLCAnICsgdGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlc1sxXS5sYWJlbFxuICAgICkge1xuICAgICAgdXBkYXRlVGl0bGUgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXNbaW5kZXhdLmxhYmVsID0gbGFiZWw7XG4gICAgaWYgKHVwZGF0ZVRpdGxlKSB7XG4gICAgICAvL3VwZGF0ZSB0aXRsZSBpZiBpdCBoYXMgbm90IGJlZW4gbW9kaWZpZWQgbWFudWFsbHlcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkudGl0bGUgPVxuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LnNlbGVjdGVkVmFyaWFibGVzWzBdLmxhYmVsICsgJywgJyArIHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXNbMV0ubGFiZWw7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlT3JpZ2luQXRaZXJvKHZhcmlhYmxlOiBWYXJpYWJsZURlZmluaXRpb24sICRldmVudDogYm9vbGVhbikge1xuICAgIHZhcmlhYmxlLm9yaWdpbjAgPSAkZXZlbnQ7XG4gIH1cblxuICBjaGFuZ2VUeXBlKHR5cGVPcHRpb25zSWQ6IHN0cmluZykge1xuICAgIHRoaXMub3B0aW9uc0NvcHkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMub3B0aW9uc0NvcHkpKTtcbiAgICBjb25zdCBbdHlwZSwgc3ViVHlwZV0gPSB0eXBlT3B0aW9uc0lkLnNwbGl0KCctJyk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHRoaXMub3B0aW9uc0NvcHkudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5vcHRpb25zQ29weS5zdWJUeXBlID0gc3ViVHlwZSA/PyBNYXJrU3ViVHlwZS5ERUZBVUxUO1xuXG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkudHlwZSA9PT0gTWFya1R5cGUuQ0lSQ0xFX1BBQ0spIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkucGFja2luZyA9IHt9O1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdGhpcy5vcHRpb25zQ29weS5wYWNraW5nO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5LnR5cGUgPT09IE1hcmtUeXBlLlJBREFSKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LnJhZGFyID0ge307XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB0aGlzLm9wdGlvbnNDb3B5LnJhZGFyO1xuICAgIH1cblxuICAgIHN3aXRjaCAodGhpcy5vcHRpb25zQ29weS50eXBlKSB7XG4gICAgICBjYXNlIE1hcmtUeXBlLkJBUjpcbiAgICAgIGNhc2UgTWFya1R5cGUuTElORTpcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlc1swXS50eXBlID1cbiAgICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LnNlbGVjdGVkVmFyaWFibGVzWzBdLnR5cGUgIT09IFZlZ2FUeXBlLlRFTVBPUkFMID8gVmVnYVR5cGUuTk9NSU5BTCA6IFZlZ2FUeXBlLlRFTVBPUkFMO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTWFya1R5cGUuUE9JTlQ6XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXNbMV0udHlwZSA9XG4gICAgICAgICAgdGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlc1sxXS50eXBlICE9PSBWZWdhVHlwZS5URU1QT1JBTCA/IFZlZ2FUeXBlLlFVQU5USVRBVElWRSA6IFZlZ2FUeXBlLlRFTVBPUkFMO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zQ29weS5zdWJUeXBlID09PSBNYXJrU3ViVHlwZS5BUkVBU1RBQ0tFRCB8fCB0aGlzLm9wdGlvbnNDb3B5LnN1YlR5cGUgPT09IE1hcmtTdWJUeXBlLkhJU1RPU1RBQ0tFRCkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5zZXJpZXMgPSB0aGlzLm9wdGlvbnNDb3B5LnNlcmllcyA/PyB7fTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc2V0Q2hhcnQoKTtcblxuICAgIGlmIChzdWJUeXBlID09PSBNYXJrU3ViVHlwZS5ET05VVCkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5pbm5lclJhZGl1cyA9IHRoaXMub3B0aW9uc0NvcHkuaW5uZXJSYWRpdXMgPz8gNTA7XG4gICAgfVxuICB9XG5cbiAgcmVzZXRDaGFydCgpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlcz8ubGVuZ3RoID4gMikge1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlcy5wb3AoKTtcbiAgICB9XG4gIH1cblxuICBlbWl0TWFuaWZlc3QoKSB7XG4gICAgdGhpcy5tYW5pZmVzdE1vZGlmaWVkLmVtaXQoe1xuICAgICAgd2lkZ2V0SW5kZXg6IHRoaXMud2lkZ2V0SW5kZXgsXG4gICAgICBtYW5pZmVzdDoge1xuICAgICAgICAuLi50aGlzLm1hbmlmZXN0LFxuICAgICAgICBvcHRpb25zOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdHJhbnNsYXRlVG9WZWdhVHlwZSh0eXBlOiBGaWVsZFR5cGUsIG5hbWU6IHN0cmluZyk6IFZlZ2FUeXBlIHtcbiAgICBsZXQgaWRSZWdleCA9IG5ldyBSZWdFeHAoL19pZHxpZF98X0lEfElEX3xfSWR8SWRfLywgJ2cnKTtcbiAgICBpZiAoaWRSZWdleC50ZXN0KG5hbWUpKSB7XG4gICAgICByZXR1cm4gVmVnYVR5cGUuT1JESU5BTDtcbiAgICB9XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIEZpZWxkVHlwZS5ERUNJTUFMOlxuICAgICAgY2FzZSBGaWVsZFR5cGUuSU5URUdFUjpcbiAgICAgIGNhc2UgRmllbGRUeXBlLkxPTkc6XG4gICAgICAgIHJldHVybiBWZWdhVHlwZS5RVUFOVElUQVRJVkU7XG4gICAgICBjYXNlIEZpZWxkVHlwZS5JTlNUQU5UOlxuICAgICAgICByZXR1cm4gVmVnYVR5cGUuVEVNUE9SQUw7XG4gICAgICBjYXNlIEZpZWxkVHlwZS5LRVlXT1JEOlxuICAgICAgY2FzZSBGaWVsZFR5cGUuU1RSSU5HOlxuICAgICAgICByZXR1cm4gVmVnYVR5cGUuTk9NSU5BTDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBWZWdhVHlwZS5OT01JTkFMO1xuICAgIH1cbiAgfVxuXG4gIG1pblRpY2sodHlwZTogRmllbGRUeXBlKTogeyB0aWNrTWluU3RlcDogbnVtYmVyIH0gfCB1bmRlZmluZWQge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBGaWVsZFR5cGUuSU5URUdFUjpcbiAgICAgIGNhc2UgRmllbGRUeXBlLkxPTkc6XG4gICAgICAgIHJldHVybiB7IHRpY2tNaW5TdGVwOiAxIH07XG4gICAgICBjYXNlIEZpZWxkVHlwZS5ERUNJTUFMOlxuICAgICAgY2FzZSBGaWVsZFR5cGUuSU5TVEFOVDpcbiAgICAgIGNhc2UgRmllbGRUeXBlLktFWVdPUkQ6XG4gICAgICBjYXNlIEZpZWxkVHlwZS5TVFJJTkc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHRyaWdnZXIoKSB7XG4gICAgdGhpcy50cmlnZ2VyQ2FsY3VsYXRlUG9zc2libGVBdHRyaWJ1dGVzJC5uZXh0KCk7XG4gIH1cblxuICBwcm9wb3NlVGl0bGUoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zQ29weS50eXBlID09PSBNYXJrVHlwZS5SQURBUikge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zQ29weS5yYWRhcj8uY29tcGFyZSA9PT0gJ2l0ZW0nKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zQ29weS50aXRsZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5jaGFydC5yYWRhci50aXRsZUl0ZW0nLCB7XG4gICAgICAgICAgICBwcm9wczogKHRoaXMub3B0aW9uc0NvcHkucmFkYXIucHJvcHMgfHwgW10pLmpvaW4oJywgJylcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zQ29weS5yYWRhcj8uY29tcGFyZSA9PT0gJ3ZhbHVlJykge1xuICAgICAgICAgIHRoaXMub3B0aW9uc0NvcHkudGl0bGUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQuY2hhcnQucmFkYXIudGl0bGVMaXN0Jywge1xuICAgICAgICAgICAga2V5OiB0aGlzLm9wdGlvbnNDb3B5LnJhZGFyLmtleVByb3AgPz8gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Bwcnkud2lkZ2V0LmNoYXJ0LnJhZGFyLmRlZmluZUtleScpLFxuICAgICAgICAgICAgdmFsdWU6XG4gICAgICAgICAgICAgIHRoaXMub3B0aW9uc0NvcHkucmFkYXIudmFsdWVQcm9wID8/IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5jaGFydC5yYWRhci5kZWZpbmVWYWx1ZScpLFxuICAgICAgICAgICAgY2F0ZWdvcnk6XG4gICAgICAgICAgICAgIHRoaXMub3B0aW9uc0NvcHkucmFkYXIuY2F0ZWdvcnlQcm9wID8/XG4gICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5jaGFydC5yYWRhci5kZWZpbmVDYXRlZ29yeScpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5LnR5cGUgPT09IE1hcmtUeXBlLkNJUkNMRV9QQUNLKSB7XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkudGl0bGUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQuY2hhcnQuY2lyY2xlLnRpdGxlJywge1xuICAgICAgICAgIGZpZWxkOiB0aGlzLm9wdGlvbnNDb3B5LnBhY2tpbmc/LnBhY2tGaWVsZCA/PyAnJ1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LCAxMDApO1xuICB9XG5cbiAgY2hhbmdlSW5uZXJSYWRpdXMoJGV2ZW50OiBzdHJpbmcpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy5vcHRpb25zQ29weS5pbm5lclJhZGl1cyA9IHBhcnNlSW50KCRldmVudCwgMTApO1xuICB9XG5cbiAgb3BlblNldHRpbmdzKCkge1xuICAgICh0aGlzLm9wZW4kIGFzIFN1YmplY3Q8dm9pZD4pLm5leHQodW5kZWZpbmVkKTtcbiAgfVxuXG4gIHRvZ2dsZVNlcmllcygkZXZlbnQ6IGFueSkge1xuICAgIGlmICgkZXZlbnQpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkuc2VyaWVzID0ge307XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB0aGlzLm9wdGlvbnNDb3B5LnNlcmllcztcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VTZXJpZXMoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoIXRoaXMub3B0aW9uc0NvcHkuc2VyaWVzKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LnNlcmllcyA9IHt9O1xuICAgIH1cbiAgICB0aGlzLm9wdGlvbnNDb3B5LnNlcmllcy5ncm91cEJ5ID0gJGV2ZW50O1xuICB9XG5cbiAgY2hhbmdlU2VyaWVzU2NoZW1lKCRldmVudDogYW55KSB7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnNDb3B5LnNlcmllcykge1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5zZXJpZXMgPSB7fTtcbiAgICB9XG4gICAgdGhpcy5vcHRpb25zQ29weS5zZXJpZXMuc2NoZW1lID0gJGV2ZW50O1xuICB9XG5cbiAgdG9nZ2xlU2VyaWVzTGVnZW5kKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5vcHRpb25zQ29weS5sZWdlbmQgPSAkZXZlbnQ7XG4gIH1cblxuICB0b2dnbGVUb29sdGlwKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5vcHRpb25zQ29weS50b29sdGlwID0gJGV2ZW50O1xuICB9XG5cbiAgYXhlTGFiZWwoaTogbnVtYmVyLCBvcHRpb25zQ29weTogQ2hhcnRXaWRnZXRPcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnNDb3B5Py50eXBlID09PSBNYXJrVHlwZS5BUkMpIHtcbiAgICAgIHJldHVybiBpID09PSAwID8gJ0Bwcnkud2lkZ2V0LmNoYXJ0LmVuY29kaW5nLmdyb3VwJyA6ICdAcHJ5LndpZGdldC5jaGFydC5lbmNvZGluZy52YWx1ZXMnO1xuICAgIH1cbiAgICByZXR1cm4gaSA9PT0gMCA/ICdAcHJ5LndpZGdldC5jaGFydC5lbmNvZGluZy5ob3Jpem9udGFsJyA6ICdAcHJ5LndpZGdldC5jaGFydC5lbmNvZGluZy52ZXJ0aWNhbCc7XG4gIH1cblxuICBoYXNOb1R5cGUob3B0aW9uczogQ2hhcnRXaWRnZXRPcHRpb25zKSB7XG4gICAgcmV0dXJuICFvcHRpb25zIHx8ICFvcHRpb25zLnR5cGUgfHwgb3B0aW9ucy50eXBlLmluY2x1ZGVzKCd1bmRlZmluZWQnKSB8fCBvcHRpb25zLnR5cGUuaW5jbHVkZXMoJ251bGwnKTtcbiAgfVxuXG4gIHNjaGVtZSgpIHtcbiAgICByZXR1cm4gdmVnYS5zY2hlbWUodGhpcy5vcHRpb25zQ29weS5zZXJpZXM/LnNjaGVtZSA/PyAnJyk7XG4gIH1cblxuICB0b2dnbGVTcGVjVG9NZXJnZSgkZXZlbnQ6IGFueSkge1xuICAgIGlmICgkZXZlbnQpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkuc3BlY1RvTWVyZ2UgPSB7fTtcbiAgICAgIHRoaXMuYWR2YW5jZWRFZGl0ID0gJ3t9JztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHRoaXMub3B0aW9uc0NvcHkuc3BlY1RvTWVyZ2U7XG4gICAgICB0aGlzLmFkdmFuY2VkRWRpdCA9ICd7fSc7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlQWR2YW5jZWRFZGl0KCRldmVudDogYW55KSB7XG4gICAgY29uc3QgdmFsdWUgPSAkZXZlbnQ/LnRhcmdldD8udmFsdWUgPz8gJGV2ZW50O1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weS5zcGVjVG9NZXJnZSA9IEpTT04ucGFyc2UodmFsdWUpO1xuICAgICAgICB0aGlzLmFkdmFuY2VkRWRpdCA9IEpTT04uc3RyaW5naWZ5KHRoaXMub3B0aW9uc0NvcHkuc3BlY1RvTWVyZ2UsIHVuZGVmaW5lZCwgNCk7XG4gICAgICAgIHRoaXMuaW52YWxpZEpzb24gPSBmYWxzZTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignSW52YWxpZCBqc29uIHByb3ZpZGVkJyk7XG4gICAgICAgIHRoaXMuaW52YWxpZEpzb24gPSB0cnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHRoaXMub3B0aW9uc0NvcHkuc3BlY1RvTWVyZ2U7XG4gICAgICB0aGlzLmFkdmFuY2VkRWRpdCA9ICd7fSc7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgdG9JbWFnZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICByZXNvbHZlKHRoaXMudmVnYS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2NhbnZhcycpWzBdLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJykpO1xuICAgIH0pO1xuICB9XG59XG4iLCI8cHJ5LXdpZGdldC1jaGFydC1jc3M+PC9wcnktd2lkZ2V0LWNoYXJ0LWNzcz5cbjxkaXYgY2xhc3M9XCJvLXdpZGdldCBvLXdpZGdldC0tY2hhcnRcIj5cbiAgPHByeS13aWRnZXQtaGVhZGVyXG4gICAgW2RhdGFzb3VyY2VJZHNdPVwiKGRhdGFzb3VyY2VJZHMkIHwgYXN5bmMpID8/IFtdXCJcbiAgICAqbmdJZj1cImRpc3BsYXlIZWFkZXIkIHwgYXN5bmNcIlxuICAgIFt3aWRnZXRJbmRleF09XCJ3aWRnZXRJbmRleFwiXG4gICAgW21hbmlmZXN0XT1cIm1hbmlmZXN0XCJcbiAgICAobWFuaWZlc3RNb2RpZmllZCk9XCJtYW5pZmVzdE1vZGlmaWVkLmVtaXQoJGV2ZW50KVwiXG4gICAgI2hlYWRlclxuICAgIFtoZWFkZXJPcHRpb25zXT1cIihkaXNwbGF5SGVhZGVyJCB8IGFzeW5jKSA/PyB7fVwiXG4gID5cbiAgICA8cHJ5LXNldHRpbmdzXG4gICAgICAoc2F2ZVRyaWdnZXJlZCk9XCJlbWl0TWFuaWZlc3QoKVwiXG4gICAgICAoY2hhbmdlVGl0bGUpPVwiY2hhbmdlV2lkZ2V0VGl0bGUoJGV2ZW50KVwiXG4gICAgICBbaGVhZGVyUHJlc2VudF09XCJkaXNwbGF5SGVhZGVyJCB8IGFzeW5jXCJcbiAgICAgIFtpc0Rpc2FibGVdPVwiKGZpbHRlckRhdGFGb3JPcHRpb25zQ29weSQgfCBhc3luYyk/Lmxlbmd0aCA9PT0gMCB8fCBoYXNOb1R5cGUob3B0aW9uc0NvcHkpXCJcbiAgICAgIFt3aWRnZXRJbmRleF09XCJ3aWRnZXRJbmRleFwiXG4gICAgICBbb3BlbiRdPVwib3BlbiRcIlxuICAgICAgW2hlYWRlcl09XCJoZWFkZXJcIlxuICAgICAgY2xhc3M9XCJvLXNldHRpbmdzXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiby1zZXR0aW5nc19fcG9wdXBfX2NvbnRlbnRfX2ZpZWxkcyAtY29uZGVuc2VkXCI+XG4gICAgICAgIDxwcnktZWRpdC1pbnB1dFxuICAgICAgICAgIGxhYmVsPVwiQHByeS53aWRnZXQuY2hhcnQudGl0bGVcIlxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUNoYXJ0VGl0bGUoJGV2ZW50KVwiXG4gICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuY3VzdG9tVGl0bGUgPz8gb3B0aW9uc0NvcHkudGl0bGVcIlxuICAgICAgICA+PC9wcnktZWRpdC1pbnB1dD5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihmaWx0ZXJEYXRhRm9yT3B0aW9uc0NvcHkkIHwgYXN5bmMpPy5sZW5ndGggPT09IDA7IGVsc2UgZGF0YVwiPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJhLWxhYmVsIGEtbGFiZWwtLWhlbHAgLWVycm9yXCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LnBhcmFtcy5ub1BhcmFtcycgfCBpMThuIH19PC9wPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGF0YT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJvcHRpb25zQ29weT8udHlwZSAhPT0gTWFya1R5cGUuUkFEQVJcIj5cbiAgICAgICAgICAgICAge3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LnBhcmFtcy5tdWx0aXBsZVBhcmFtcycgfCBpMThuIH19e3sgKGZpbHRlckRhdGFGb3JPcHRpb25zQ29weSQgfCBhc3luYyk/Lmxlbmd0aCB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiAqbmdJZj1cIm9wdGlvbnNDb3B5XCIgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiY2hhcnRfdHlwZVwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC50eXBlJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VUeXBlKCRldmVudClcIlxuICAgICAgICAgICAgW2l0ZW1zXT1cInR5cGVPcHRpb25zXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LnR5cGUgKyAnLScgKyBvcHRpb25zQ29weS5zdWJUeXBlXCJcbiAgICAgICAgICAgIGkxOG5QcmVmaXg9XCJAcHJ5LndpZGdldC5jaGFydC5tYXJrVHlwZS5cIlxuICAgICAgICAgICAgYmluZExhYmVsPVwibGFiZWxcIlxuICAgICAgICAgICAgYmluZFZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgaWQ9XCJjaGFydF90eXBlXCJcbiAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9uc0NvcHk/LnR5cGUgIT09IE1hcmtUeXBlLlJBREFSICYmIG9wdGlvbnNDb3B5Py50eXBlICE9PSBNYXJrVHlwZS5DSVJDTEVfUEFDS1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9uc0NvcHk/LnN1YlR5cGUgPT09IE1hcmtTdWJUeXBlLkRPTlVUXCI+XG4gICAgICAgICAgPHByeS1yYW5nZVxuICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuaW5uZXJSYWRpdXNcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlSW5uZXJSYWRpdXMoJGV2ZW50KVwiXG4gICAgICAgICAgICBsYWJlbFRyYW5zbGF0ZT1cIkBwcnkud2lkZ2V0LmNoYXJ0LmlubmVyUmFkaXVzXCJcbiAgICAgICAgICAgIG1pbj1cIjFcIlxuICAgICAgICAgICAgbWF4PVwiNTAwXCJcbiAgICAgICAgICA+PC9wcnktcmFuZ2U+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgdmFyaWFibGVEZWYgb2Ygb3B0aW9uc0NvcHk/LnNlbGVjdGVkVmFyaWFibGVzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19maWVsZHMgLWNvbmRlbnNlZFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCIgKm5nSWY9XCJpID09PSAxXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiYWdncmVnYXRpb25zXCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LmVuY29kaW5nLmdyb3VwJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQWdncmVnYXRpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiaSA9PT0gMVwiXG4gICAgICAgICAgICAgIFtpdGVtc109XCJhZ2dyZWdhdGlvbnNcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5hZ2dyZWdhdGlvblwiXG4gICAgICAgICAgICAgIGlkPVwiYWdncmVnYXRpb25zXCJcbiAgICAgICAgICAgICAgaTE4blByZWZpeD1cIkBwcnkud2lkZ2V0LmNoYXJ0LmFnZ3JlZ2F0aW9uLlwiXG4gICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiICpuZ0lmPVwiaSAhPT0gMSB8fCBvcHRpb25zQ29weS5hZ2dyZWdhdGlvbiAhPT0gJ2NvdW50J1wiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImFnZ3JlZ2F0aW9uX3Byb3BlcnR5XCI+XG4gICAgICAgICAgICAgIHt7IGF4ZUxhYmVsKGksIG9wdGlvbnNDb3B5KSB8IGkxOG4gfX1cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VQcm9wZXJ0eSgkZXZlbnQsIGkpXCJcbiAgICAgICAgICAgICAgW2l0ZW1zXT1cIihpICE9PSAxID8gdmFyaWFibGVBdHRyaWJ1dGVzJCA6IHBvc3NpYmxlU2Vjb25kYXJ5QXR0cmlidXRlcyQpIHwgYXN5bmNcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJ2YXJpYWJsZURlZi5uYW1lXCJcbiAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgIGJpbmRWYWx1ZT1cInRlY2huaWNhbE5hbWVcIlxuICAgICAgICAgICAgICBpZD1cImFnZ3JlZ2F0aW9uX3Byb3BlcnR5XCJcbiAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8cHJ5LWVkaXQtaW5wdXRcbiAgICAgICAgICAgIGxhYmVsPVwiQHByeS53aWRnZXQuY2hhcnQuZGF0YUxhYmVsXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUxhYmVsKCRldmVudCwgaSlcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwidmFyaWFibGVEZWYubGFiZWxcIlxuICAgICAgICAgID48L3ByeS1lZGl0LWlucHV0PlxuXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInZhcmlhYmxlRGVmLnR5cGUgPT09ICd0ZW1wb3JhbCdcIiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImNoYXJ0X3RpbWVVbml0XCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LnRpbWVVbml0JyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlVGltZVVuaXQoJGV2ZW50LCB2YXJpYWJsZURlZilcIlxuICAgICAgICAgICAgICBbaXRlbXNdPVwidGltZVVuaXRzXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwidmFyaWFibGVEZWYudGltZVVuaXRcIlxuICAgICAgICAgICAgICBpMThuUHJlZml4PVwiQHByeS53aWRnZXQuY2hhcnQudGltZVVuaXRMaXN0LlwiXG4gICAgICAgICAgICAgIGlkPVwiY2hhcnRfdGltZVVuaXRcIlxuICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJ2YXJpYWJsZURlZi50eXBlID09PSAncXVhbnRpdGF0aXZlJyAmJiBvcHRpb25zQ29weT8udHlwZSAhPT0gJ2FyYydcIiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgPHByeS1jaGVja2JveCAobmdNb2RlbENoYW5nZSk9XCJ0b2dnbGVPcmlnaW5BdFplcm8odmFyaWFibGVEZWYsICRldmVudClcIiBbbmdNb2RlbF09XCJ2YXJpYWJsZURlZi5vcmlnaW4wXCJcbiAgICAgICAgICAgICAgPnt7ICdAcHJ5LndpZGdldC5jaGFydC5vcmlnaW4nIHwgaTE4biB9fVxuICAgICAgICAgICAgPC9wcnktY2hlY2tib3g+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJvLXNldHRpbmdzX19wb3B1cF9fY29udGVudF9fZmllbGRzIC1jb25kZW5zZWRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICA8cHJ5LWNoZWNrYm94XG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInRvZ2dsZVNlcmllcygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwiISFvcHRpb25zQ29weS5zZXJpZXNcIlxuICAgICAgICAgICAgICAqbmdJZj1cIm9wdGlvbnNDb3B5Py50eXBlICE9PSBNYXJrVHlwZS5BUkMgJiYgb3B0aW9uc0NvcHk/LnR5cGUgIT09IE1hcmtUeXBlLlJBREFSXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9uc0NvcHkuc3ViVHlwZSA9PT0gTWFya1N1YlR5cGUuQVJFQVNUQUNLRUQgfHxcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LnN1YlR5cGUgPT09IE1hcmtTdWJUeXBlLkhJU1RPU1RBQ0tFRFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LnNlcmllcycgfCBpMThuIH19XG4gICAgICAgICAgICA8L3ByeS1jaGVja2JveD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCJcbiAgICAgICAgICAgICpuZ0lmPVwib3B0aW9uc0NvcHk/LnR5cGUgIT09IE1hcmtUeXBlLkFSQyAmJiBvcHRpb25zQ29weT8udHlwZSAhPT0gTWFya1R5cGUuUkFEQVIgJiYgISFvcHRpb25zQ29weS5zZXJpZXNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJjaGFydF9zZXJpZXNBdHRyXCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LnNlcmllc0F0dHInIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VTZXJpZXMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LnNlcmllcy5ncm91cEJ5IVwiXG4gICAgICAgICAgICAgIFtpdGVtc109XCJ2YXJpYWJsZUF0dHJpYnV0ZXMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgYmluZFZhbHVlPVwibmFtZVwiXG4gICAgICAgICAgICAgIGlkPVwiY2hhcnRfc2VyaWVzQXR0clwiXG4gICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIlxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgKG9wdGlvbnNDb3B5Py50eXBlID09PSBNYXJrVHlwZS5BUkMgfHwgb3B0aW9uc0NvcHk/LnR5cGUgPT09IE1hcmtUeXBlLlJBREFSIHx8ICEhb3B0aW9uc0NvcHkuc2VyaWVzKSAmJlxuICAgICAgICAgICAgICBzY2hlbWVzXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJjaGFydF9zZXJpZXNTY2hlbWVcIiBbdGl0bGVdPVwiJ0Bwcnkud2lkZ2V0LmNoYXJ0LnNlcmllc1NjaGVtZUFsdCcgfCBpMThuXCI+e3tcbiAgICAgICAgICAgICAgJ0Bwcnkud2lkZ2V0LmNoYXJ0LnNlcmllc1NjaGVtZScgfCBpMThuXG4gICAgICAgICAgICB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VTZXJpZXNTY2hlbWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LnNlcmllcz8uc2NoZW1lIVwiXG4gICAgICAgICAgICAgIFtpdGVtc109XCJzY2hlbWVzXCJcbiAgICAgICAgICAgICAgaWQ9XCJjaGFydF9zZXJpZXNTY2hlbWVcIlxuICAgICAgICAgICAgICBpMThuUHJlZml4PVwiQHByeS53aWRnZXQuY2hhcnQuc2NoZW1lLlwiXG4gICAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcbiAgICAgICAgICAgICAgYmluZExhYmVsPVwiaWRcIlxuICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJvLXdpZGdldC0tY2hhcnQtY29sb3ItdGh1bWJcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHNjaGVtZUNvbG9yIG9mIHNjaGVtZSgpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJvLXdpZGdldC0tY2hhcnQtY29sb3ItdGh1bWItaXRlbVwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCJzY2hlbWVDb2xvclwiXG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cInNjaGVtZUNvbG9yXCJcbiAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxwcnktY2hlY2tib3hcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidG9nZ2xlU2VyaWVzTGVnZW5kKCRldmVudClcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCIhIW9wdGlvbnNDb3B5LmxlZ2VuZCFcIlxuICAgICAgICAgICAgICAqbmdJZj1cIm9wdGlvbnNDb3B5Py50eXBlICE9PSBNYXJrVHlwZS5SQURBUiB8fCAhIW9wdGlvbnNDb3B5LnNlcmllc1wiXG4gICAgICAgICAgICAgID57eyAnQHByeS53aWRnZXQuY2hhcnQuc2VyaWVzTGVnZW5kJyB8IGkxOG4gfX1cbiAgICAgICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgPHByeS1jaGVja2JveCAobmdNb2RlbENoYW5nZSk9XCJ0b2dnbGVUb29sdGlwKCRldmVudClcIiBbbmdNb2RlbF09XCIhIW9wdGlvbnNDb3B5LnRvb2x0aXAhXCJcbiAgICAgICAgICAgICAgPnt7ICdAcHJ5LndpZGdldC5jaGFydC50b29sdGlwJyB8IGkxOG4gfX1cbiAgICAgICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9uc0NvcHk/LnR5cGUgPT09IE1hcmtUeXBlLlJBREFSICYmIG9wdGlvbnNDb3B5LnJhZGFyICE9PSB1bmRlZmluZWRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19maWVsZHMgLWNvbmRlbnNlZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInRyaWdnZXIoKTsgcHJvcG9zZVRpdGxlKClcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm9wdGlvbnNDb3B5LnJhZGFyLmNvbXBhcmVcIlxuICAgICAgICAgICAgICBbaXRlbXNdPVwiY29tcGFyaXNvbnNcIlxuICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgYmluZFZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb25zQ29weS5yYWRhci5jb21wYXJlID09PSAnaXRlbSdcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ0cmlnZ2VyKCk7IHByb3Bvc2VUaXRsZSgpXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm9wdGlvbnNDb3B5LnJhZGFyLnByb3BzXCJcbiAgICAgICAgICAgICAgICBbaXRlbXNdPVwibnVtZXJpY1Byb3BlcnRpZXMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgIFttdWx0aXBsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbY2xvc2VPblNlbGVjdF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgYmluZFZhbHVlPVwibmFtZVwiXG4gICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb25zQ29weS5yYWRhci5jb21wYXJlID09PSAndmFsdWUnXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJjb21wYXJpc29uX2tleVwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC5jb21wYXJpc29uLmtleScgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ0cmlnZ2VyKCk7IHByb3Bvc2VUaXRsZSgpXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm9wdGlvbnNDb3B5LnJhZGFyLmtleVByb3BcIlxuICAgICAgICAgICAgICAgIFtpdGVtc109XCJ0ZXh0UHJvcGVydGllcyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgYmluZFZhbHVlPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgaWQ9XCJjb21wYXJpc29uX2tleVwiXG4gICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiY29tcGFyaXNvbl92YWx1ZXNcIj57eyAnQHByeS53aWRnZXQuY2hhcnQuY29tcGFyaXNvbi52YWx1ZXMnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidHJpZ2dlcigpOyBwcm9wb3NlVGl0bGUoKVwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJvcHRpb25zQ29weS5yYWRhci52YWx1ZVByb3BcIlxuICAgICAgICAgICAgICAgIFtpdGVtc109XCJudW1lcmljUHJvcGVydGllcyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgYmluZFZhbHVlPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgaWQ9XCJjb21wYXJpc29uX3ZhbHVlc1wiXG4gICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiY29tcGFyaXNvbl9jYXRlZ29yeVwiPnt7XG4gICAgICAgICAgICAgICAgJ0Bwcnkud2lkZ2V0LmNoYXJ0LmNvbXBhcmlzb24uY2F0ZWdvcnknIHwgaTE4blxuICAgICAgICAgICAgICB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidHJpZ2dlcigpOyBwcm9wb3NlVGl0bGUoKVwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJvcHRpb25zQ29weS5yYWRhci5jYXRlZ29yeVByb3BcIlxuICAgICAgICAgICAgICAgIFtpdGVtc109XCJ0ZXh0UHJvcGVydGllcyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgYmluZFZhbHVlPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgaWQ9XCJjb21wYXJpc29uX2NhdGVnb3J5XCJcbiAgICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzY2hlbWVzXCI+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgY2xhc3M9XCJhLWxhYmVsXCJcbiAgICAgICAgICAgICAgZm9yPVwiY2hhcnRfc2VyaWVzU2NoZW1lX3JhZGFyXCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cIidAcHJ5LndpZGdldC5jaGFydC5zZXJpZXNTY2hlbWVBbHQnIHwgaTE4blwiXG4gICAgICAgICAgICAgID57eyAnQHByeS53aWRnZXQuY2hhcnQuc2VyaWVzU2NoZW1lJyB8IGkxOG4gfX08L2xhYmVsXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VTZXJpZXNTY2hlbWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LnNlcmllcz8uc2NoZW1lIVwiXG4gICAgICAgICAgICAgIFtpdGVtc109XCJzY2hlbWVzXCJcbiAgICAgICAgICAgICAgaWQ9XCJjaGFydF9zZXJpZXNTY2hlbWVfcmFkYXJcIlxuICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvbnNDb3B5Py50eXBlID09PSBNYXJrVHlwZS5DSVJDTEVfUEFDSyAmJiBvcHRpb25zQ29weS5wYWNraW5nICE9PSB1bmRlZmluZWRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19maWVsZHMgLWNvbmRlbnNlZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJjaGFydF9jaXJjbGVfaWRcIj57eyAnQHByeS53aWRnZXQuY2hhcnQuY2lyY2xlLmlkJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidHJpZ2dlcigpOyBwcm9wb3NlVGl0bGUoKVwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwib3B0aW9uc0NvcHkucGFja2luZy5pZFwiXG4gICAgICAgICAgICAgIFtpdGVtc109XCJ2YXJpYWJsZUF0dHJpYnV0ZXMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgYmluZFZhbHVlPVwibmFtZVwiXG4gICAgICAgICAgICAgIGlkPVwiY2hhcnRfY2lyY2xlX2lkXCJcbiAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiY2hhcnRfY2lyY2xlX3BpZFwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC5jaXJjbGUucGlkJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidHJpZ2dlcigpOyBwcm9wb3NlVGl0bGUoKVwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwib3B0aW9uc0NvcHkucGFja2luZy5wYXJlbnRJZFwiXG4gICAgICAgICAgICAgIFtpdGVtc109XCJ2YXJpYWJsZUF0dHJpYnV0ZXMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgYmluZFZhbHVlPVwibmFtZVwiXG4gICAgICAgICAgICAgIGlkPVwiY2hhcnRfY2lyY2xlX3BpZFwiXG4gICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImNoYXJ0X2NpcmNsZV9maWVsZFwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC5jaXJjbGUuZmllbGQnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ0cmlnZ2VyKCk7IHByb3Bvc2VUaXRsZSgpXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJvcHRpb25zQ29weS5wYWNraW5nLnBhY2tGaWVsZFwiXG4gICAgICAgICAgICAgIFtpdGVtc109XCJudW1lcmljUHJvcGVydGllcyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJuYW1lXCJcbiAgICAgICAgICAgICAgaWQ9XCJjaGFydF9jaXJjbGVfZmllbGRcIlxuICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJjaGFydF9jaXJjbGVfdG9vbHRpcFwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC5jaXJjbGUudG9vbHRpcCcgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInRyaWdnZXIoKTsgcHJvcG9zZVRpdGxlKClcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm9wdGlvbnNDb3B5LnBhY2tpbmcudG9vbHRpcFwiXG4gICAgICAgICAgICAgIFtpdGVtc109XCJ2YXJpYWJsZUF0dHJpYnV0ZXMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgYmluZFZhbHVlPVwibmFtZVwiXG4gICAgICAgICAgICAgIGlkPVwiY2hhcnRfY2lyY2xlX3Rvb2x0aXBcIlxuICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPGRpdiBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19maWVsZHMgLWNvbmRlbnNlZFwiPlxuICAgICAgICA8cHJ5LWNoZWNrYm94IChuZ01vZGVsQ2hhbmdlKT1cInRvZ2dsZVNwZWNUb01lcmdlKCRldmVudClcIiBbbmdNb2RlbF09XCIhIW9wdGlvbnNDb3B5LnNwZWNUb01lcmdlXCJcbiAgICAgICAgICA+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0Lm1vcmVPcHRpb25zJyB8IGkxOG4gfX1cbiAgICAgICAgPC9wcnktY2hlY2tib3g+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEhb3B0aW9uc0NvcHkuc3BlY1RvTWVyZ2VcIj5cbiAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cImFkdmFuY2VkRWRpdFwiXG4gICAgICAgICAgICAoZm9jdXNvdXQpPVwidXBkYXRlQWR2YW5jZWRFZGl0KCRldmVudClcIlxuICAgICAgICAgICAgY2xhc3M9XCJvLXNldHRpbmdzX19wb3B1cF9fY29udGVudF9fYXJlYVwiXG4gICAgICAgICAgICBbY2xhc3MuLWludmFsaWRdPVwiaW52YWxpZEpzb25cIlxuICAgICAgICAgID48L3RleHRhcmVhPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvcHJ5LXNldHRpbmdzPlxuICA8L3ByeS13aWRnZXQtaGVhZGVyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNDaGFydFZhbGlkJCB8IGFzeW5jXCI+XG4gICAgPGRpdlxuICAgICAgI3ZlZ2FcbiAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiXG4gICAgICAgICgod2lkZ2V0U2l6ZSQgfCBhc3luYyk/LmhlaWdodCA/PyAwKSAtICgoZGlzcGxheUhlYWRlciQgfCBhc3luYykgPyAxIDogMCkgKiBXSURHRVRfSEVBREVSX0hFSUdIVFxuICAgICAgXCJcbiAgICAgIFtzdHlsZS53aWR0aC5weF09XCIod2lkZ2V0U2l6ZSQgfCBhc3luYyk/LndpZHRoXCJcbiAgICA+PC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhKGlzQ2hhcnRWYWxpZCQgfCBhc3luYylcIj5cbiAgICA8ZGl2IGNsYXNzPVwiby13aWRnZXRfX2Nob29zZS1wYXJhbWV0ZXJzXCI+XG4gICAgICA8cCBjbGFzcz1cImEtcFwiPlxuICAgICAgICB7eyAnQHByeS53aWRnZXQuY2hhcnQuY2hvb3NlUGFyYW1ldGVycycgfCBpMThuIH19XG4gICAgICA8L3A+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib3BlblNldHRpbmdzKClcIiBjbGFzcz1cImEtYnRuIGEtYnRuLS1wcmltYXJ5XCI+XG4gICAgICAgIDxwcnktaWNvbiBbaGVpZ2h0XT1cIjIwXCIgW3dpZHRoXT1cIjIwXCIgaWNvblN2Zz1cImNvbnRyb2xcIj48L3ByeS1pY29uPlxuICAgICAgICA8c3Bhbj57eyAnQHByeS53aWRnZXQuc2V0dGluZ3MudGl0bGUnIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuIl19
651
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3dpZGdldHMvd2lkZ2V0LWNoYXJ0L2NvbXBvbmVudC93aWRnZXQtY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtY2hhcnQvY29tcG9uZW50L3dpZGdldC1jaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9DLFNBQVMsRUFBYyxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkcsT0FBTyxFQUNMLFdBQVcsRUFPWCxjQUFjLEVBQ2QsZUFBZSxFQUNmLGtCQUFrQixFQUNsQixtQkFBbUIsRUFFbkIsY0FBYyxFQUNkLFNBQVMsRUFFVCxTQUFTLEVBQ1QsV0FBVyxFQUNYLFFBQVEsRUFJUixRQUFRLEVBQ1Isb0JBQW9CLEVBQ3JCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxLQUFLLE1BQU0scUJBQXFCLENBQUM7QUFDeEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5FLE9BQU8sS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxTQUFTLEVBQWdCLE1BQU0sV0FBVyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsWUFBWSxF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QUMsV0FBVyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUMvRSxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztZQUMzQixDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1lBQzFCLENBQUM7WUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzVCLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQztZQUNwQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUVRLE9BQU87UUFDZCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUN4RixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBN3dCVSxvQkFBb0I7a0dBQXBCLG9CQUFvQiw2S0NqRGpDLGlvZUE4V0E7OzJGRDdUYSxvQkFBb0I7a0JBSmhDLFNBQVM7K0JBQ0Usa0JBQWtCO2dLQUlULElBQUk7c0JBQXRCLFNBQVM7dUJBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQge1xuICBBZ2dyZWdhdGlvbixcbiAgQXR0cmlidXRlLFxuICBBdHRyaWJ1dGVTaW1wbGVWYWx1ZSxcbiAgQ2hhcnRPcHRpb24sXG4gIENoYXJ0U3ViVHlwZURlZmluaXRpb24sXG4gIENoYXJ0V2lkZ2V0T3B0aW9ucyxcbiAgQ2xhc3MsXG4gIENsYXNzU2VsZWN0b3JzLFxuICBDb25maWdTZWxlY3RvcnMsXG4gIERhc2hib2FyZFNlbGVjdG9ycyxcbiAgRGF0YVdpZGdldENvbXBvbmVudCxcbiAgRmllbGQsXG4gIEZpZWxkU2VsZWN0b3JzLFxuICBGaWVsZFR5cGUsXG4gIEl0ZW0sXG4gIEl0ZW1VdGlscyxcbiAgTWFya1N1YlR5cGUsXG4gIE1hcmtUeXBlLFxuICBQcnlJMThuU2VydmljZSxcbiAgVmFyaWFibGVEZWZpbml0aW9uLFxuICBWZWdhQ29sb3JUeXBlLFxuICBWZWdhVHlwZSxcbiAgV0lER0VUX0hFQURFUl9IRUlHSFRcbn0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCBlcXVhbCBmcm9tICdmYXN0LWRlZXAtZXF1YWwvZXM2JztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZGVsYXksIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFRpbWVVbml0LCBWaWV3IH0gZnJvbSAndmVnYSc7XG5pbXBvcnQgZW1iZWQsIHsgdmVnYSB9IGZyb20gJ3ZlZ2EtZW1iZWQnO1xuaW1wb3J0IHsgbWVyZ2VEZWVwLCBUb3BMZXZlbFNwZWMgfSBmcm9tICd2ZWdhLWxpdGUnO1xuaW1wb3J0IHsgZm9udENvbmZpZyB9IGZyb20gJ3ZlZ2EtbGl0ZS9idWlsZC9zcmMvY29uZmlnJztcbmltcG9ydCB7IFZlZ2FFcnJvckhhbmRsZXIgfSBmcm9tICcuL3ZlZ2EtZXJyb3IuaGFuZGxlcic7XG5pbXBvcnQgeyB2ZWdhQmFzZUNvbmYsIHZlZ2FDaXJjbGVQYWNrQ29uZiwgdmVnYVJhZGFyQ29uZiB9IGZyb20gJy4vdmVnYS1zcGVjLmNvbnN0YW50JztcblxuZXhwb3J0IHR5cGUgUmFkYXJWYWx1ZSA9IHtcbiAgY2F0ZWdvcnk6IG51bWJlcjtcbiAga2V5OiBzdHJpbmc7XG4gIHZhbHVlOiBudW1iZXI7XG59O1xuXG52ZWdhLnNjaGVtZSgnS08vVy9PSycsIFsnI0MwNEQzRicsICcjRkQ5ODQzJywgJyM5QUJFMjknXSk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS13aWRnZXQtY2hhcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vd2lkZ2V0LWNoYXJ0LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBXaWRnZXRDaGFydENvbXBvbmVudCBleHRlbmRzIERhdGFXaWRnZXRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgQFZpZXdDaGlsZCgndmVnYScpIHZlZ2EhOiBFbGVtZW50UmVmO1xuICB0eXBlT3B0aW9uczoge1xuICAgIHR5cGU6IE1hcmtUeXBlO1xuICAgIHN1YlR5cGU6IE1hcmtTdWJUeXBlO1xuICAgIGxhYmVsOiBNYXJrVHlwZSB8IE1hcmtTdWJUeXBlO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdHJhbnNsYXRlZD86IHN0cmluZztcbiAgfVtdID0gW107XG4gIG1hcmtUeXBlczogTWFya1R5cGVbXSA9IFtdO1xuICBzdWJUeXBlcz86IFBhcnRpYWw8Q2hhcnRTdWJUeXBlRGVmaW5pdGlvbj47XG4gIHNjaGVtZXM/OiB7IGlkOiBWZWdhQ29sb3JUeXBlOyB0cmFuc2xhdGVkOiBzdHJpbmcgfVtdO1xuICBNYXJrVHlwZSA9IE1hcmtUeXBlO1xuICBNYXJrU3ViVHlwZSA9IE1hcmtTdWJUeXBlO1xuICBXSURHRVRfSEVBREVSX0hFSUdIVCA9IFdJREdFVF9IRUFERVJfSEVJR0hULnZhbHVlO1xuXG4gIHRpbWVVbml0czogVGltZVVuaXRbXSA9IFsneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF5JywgJ2hvdXJzJywgJ21pbnV0ZXMnXTtcbiAgb3B0aW9ucyQ6IE9ic2VydmFibGU8Q2hhcnRXaWRnZXRPcHRpb25zPjtcbiAgb3B0aW9uc0NvcHk6IENoYXJ0V2lkZ2V0T3B0aW9ucyA9IHt9IGFzIENoYXJ0V2lkZ2V0T3B0aW9ucztcbiAgY2xhc3NlcyQ6IE9ic2VydmFibGU8Q2xhc3NbXT47XG4gIGZpZWxkcyQ6IE9ic2VydmFibGU8RmllbGRbXT47XG4gIHZhcmlhYmxlcyQ6IE9ic2VydmFibGU8VmFyaWFibGVEZWZpbml0aW9uW10+O1xuICB2ZWdhTGl0ZVNwZWMkOiBPYnNlcnZhYmxlPFRvcExldmVsU3BlYz47XG4gIHZhcmlhYmxlQXR0cmlidXRlcyQ6IE9ic2VydmFibGU8QXR0cmlidXRlW10+O1xuICBwb3NzaWJsZVNlY29uZGFyeUF0dHJpYnV0ZXMkOiBPYnNlcnZhYmxlPEF0dHJpYnV0ZVtdPjtcbiAgdHJpZ2dlckNhbGN1bGF0ZVBvc3NpYmxlQXR0cmlidXRlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHZvaWQ+KHVuZGVmaW5lZCk7XG4gIGl0ZW1zJDogT2JzZXJ2YWJsZTxJdGVtW10+O1xuICBmaWx0ZXJEYXRhRm9yT3B0aW9ucyQ6IE9ic2VydmFibGU8SXRlbVtdPjtcbiAgZmlsdGVyRGF0YUZvck9wdGlvbnNDb3B5JDogT2JzZXJ2YWJsZTxJdGVtW10+O1xuICB2YXJpYWJsZXM6IFZhcmlhYmxlRGVmaW5pdGlvbltdID0gW107XG4gIGFnZ3JlZ2F0aW9uczogYW55W10gPSBbXTtcbiAgdmFyaWFibGVBdHRyaWJ1dGVzOiBBdHRyaWJ1dGVbXSA9IFtdO1xuICBmaWVsZHM6IEZpZWxkW10gPSBbXTtcbiAgaXNDaGFydFZhbGlkJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgbnVtZXJpY1Byb3BlcnRpZXMkOiBPYnNlcnZhYmxlPEF0dHJpYnV0ZVtdPjtcbiAgdGV4dFByb3BlcnRpZXMkOiBPYnNlcnZhYmxlPEF0dHJpYnV0ZVtdPjtcbiAgY29tcGFyaXNvbnMgPSBbXG4gICAge1xuICAgICAgaWQ6ICdpdGVtJyxcbiAgICAgIG5hbWU6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5jaGFydC5jb21wYXJpc29uLml0ZW0nKVxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6ICd2YWx1ZScsXG4gICAgICBuYW1lOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQuY2hhcnQuY29tcGFyaXNvbi52YWx1ZScpXG4gICAgfVxuICBdO1xuICB2aWV3PzogVmlldztcbiAgdHJpZ2dlciQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBpbnZhbGlkSnNvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHN0b3JlOiBTdG9yZTxhbnk+LFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogUHJ5STE4blNlcnZpY2UsXG4gICAgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgc3VwZXIoc3RvcmUsIGVsKTtcblxuICAgIHRoaXMuc3RvcmUuc2VsZWN0KENvbmZpZ1NlbGVjdG9ycy5jaGFydE9wdGlvbikuc3Vic2NyaWJlKChjaGFydE9wdGlvbnM6IENoYXJ0T3B0aW9uKSA9PiB7XG4gICAgICB0aGlzLmFnZ3JlZ2F0aW9ucyA9IGNoYXJ0T3B0aW9ucy5hZ2dyZWdhdGlvbjtcbiAgICAgIHRoaXMuc2NoZW1lcyA9IGNoYXJ0T3B0aW9ucy5jb2xvci5tYXAoKHNjaGVtZSkgPT4gKHsgaWQ6IHNjaGVtZSwgdHJhbnNsYXRlZDogJycgfSkpO1xuICAgICAgdGhpcy5tYXJrVHlwZXMgPSBjaGFydE9wdGlvbnMudHlwZTtcbiAgICAgIHRoaXMuc3ViVHlwZXMgPSBjaGFydE9wdGlvbnMuc3ViVHlwZTtcblxuICAgICAgdGhpcy50eXBlT3B0aW9ucyA9IHRoaXMubWFya1R5cGVzXG4gICAgICAgIC5tYXAoKHR5cGU6IE1hcmtUeXBlKSA9PiB7XG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIHJldHVybiB0aGlzLnN1YlR5cGVzICYmIHRoaXMuc3ViVHlwZXNbdHlwZV0gPyB0aGlzLnN1YlR5cGVzW3R5cGVdLm1hcCgoc3ViVHlwZSkgPT4gKHsgdHlwZSwgc3ViVHlwZSB9KSkgOiBbXTtcbiAgICAgICAgfSlcbiAgICAgICAgLnJlZHVjZSgocCwgYykgPT4gWy4uLnAsIC4uLmNdLCBbXSlcbiAgICAgICAgLm1hcCgob3B0aW9uczogYW55KSA9PiAoe1xuICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgaWQ6IGAke29wdGlvbnMudHlwZX0tJHtvcHRpb25zLnN1YlR5cGV9YCxcbiAgICAgICAgICBsYWJlbDogb3B0aW9ucy5zdWJUeXBlID09PSBNYXJrU3ViVHlwZS5ERUZBVUxUID8gb3B0aW9ucy50eXBlIDogb3B0aW9ucy5zdWJUeXBlXG4gICAgICAgIH0pKVxuICAgICAgICAubWFwKChvcHRpb25zOiBhbnkpID0+ICh7XG4gICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICB0cmFuc2xhdGVkOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQuY2hhcnQubWFya1R5cGUuJyArIG9wdGlvbnMubGFiZWwpXG4gICAgICAgIH0pKTtcbiAgICAgIHRoaXMudHlwZU9wdGlvbnMuc29ydCgoYSwgYikgPT4gYS50cmFuc2xhdGVkPy5sb2NhbGVDb21wYXJlKGIudHJhbnNsYXRlZCA/PyAnJykgPz8gLTEpO1xuICAgIH0pO1xuICAgIHRoaXMuY2xhc3NlcyQgPSB0aGlzLnN0b3JlLnNlbGVjdChDbGFzc1NlbGVjdG9ycy5jbGFzc2VzKTtcbiAgICB0aGlzLmZpZWxkcyQgPSB0aGlzLnN0b3JlLnNlbGVjdChGaWVsZFNlbGVjdG9ycy5maWVsZHMpO1xuXG4gICAgdGhpcy52YXJpYWJsZUF0dHJpYnV0ZXMkID0gY29tYmluZUxhdGVzdChbdGhpcy5yZXN1bHRTZXQkLCB0aGlzLmNsYXNzZXMkLCB0aGlzLmZpZWxkcyRdKS5waXBlKFxuICAgICAgbWFwKChbcmVzdWx0U2V0LCBjbGFzc2VzLCBmaWVsZHNdKSA9PiBJdGVtVXRpbHMuZ2V0QXR0cmlidXRlc0Zyb21ScyhyZXN1bHRTZXQsIGNsYXNzZXMsIGZpZWxkcykpLFxuICAgICAgbWFwKChmaWVsZHM6IEF0dHJpYnV0ZVtdKSA9PiBmaWVsZHMuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSkpLFxuICAgICAgbWFwKChwcm9wcykgPT4gV2lkZ2V0Q2hhcnRDb21wb25lbnQudW5pcXVlQXR0cmlidXRlc0J5TmFtZXMocHJvcHMpKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwLCBjKSA9PiBlcXVhbChwLCBjKSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLnZhcmlhYmxlQXR0cmlidXRlcyQuc3Vic2NyaWJlKChhdHRycykgPT4gKHRoaXMudmFyaWFibGVBdHRyaWJ1dGVzID0gYXR0cnMpKSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmZpZWxkcyQuc3Vic2NyaWJlKChhdHRycykgPT4gKHRoaXMuZmllbGRzID0gYXR0cnMpKSk7XG5cbiAgICB0aGlzLnZhcmlhYmxlcyQgPSB0aGlzLnZhcmlhYmxlQXR0cmlidXRlcyQucGlwZShcbiAgICAgIG1hcCgoYXR0cmlidXRlcykgPT4ge1xuICAgICAgICByZXR1cm4gYXR0cmlidXRlcy5tYXAoXG4gICAgICAgICAgKGF0dHIpID0+XG4gICAgICAgICAgICAoKHtcbiAgICAgICAgICAgICAgbmFtZTogYXR0ci50ZWNobmljYWxOYW1lLFxuICAgICAgICAgICAgICBsYWJlbDogYXR0ci5uYW1lLFxuICAgICAgICAgICAgICB0eXBlOiB0aGlzLnRyYW5zbGF0ZVRvVmVnYVR5cGUoYXR0ci5maWVsZC50eXBlLCBhdHRyLm5hbWUpXG4gICAgICAgICAgICB9KSBhcyBWYXJpYWJsZURlZmluaXRpb24pID8/IFtdXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLm9wdGlvbnMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLnZhcmlhYmxlcyQsXG4gICAgICB0aGlzLm1hbmlmZXN0JC5waXBlKG1hcCgobWFuaWZlc3QpID0+IG1hbmlmZXN0Lm9wdGlvbnMgYXMgQ2hhcnRXaWRnZXRPcHRpb25zKSlcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbdmFyaWFibGVzLCBvcHRpb25zXSkgPT4gKHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgdGl0bGU6IG9wdGlvbnM/LnRpdGxlID8/ICgodmFyaWFibGVzWzBdPy5sYWJlbCA/PyAnJykgKyAnLCAnICsgKHZhcmlhYmxlc1sxXT8ubGFiZWwgPz8gJycpKS5yZXBsYWNlKC9eLCAkLywgJycpLFxuICAgICAgICBzZWxlY3RlZFZhcmlhYmxlczogb3B0aW9ucz8uc2VsZWN0ZWRWYXJpYWJsZXMgPz8gW3t9LCB7fV0sXG4gICAgICAgIC8vIEhlcmUsIHdlIGRvIG5vdCBwcmVzdW1lIG9mIHRoZSB0eXBlIG9mIGdyYXBoIHRoYXQgdGhlIHVzZXIgd2FudHMsIGFuZCBwcmVmZXIgdG8gZGlzcGxheSBhIGJ1dHRvbiB0byBnbyB0byBwYXJhbXNcbiAgICAgICAgdHlwZTogb3B0aW9ucz8udHlwZSA/PyB1bmRlZmluZWQsXG4gICAgICAgIGFnZ3JlZ2F0aW9uOiBvcHRpb25zPy5hZ2dyZWdhdGlvbiA/PyBBZ2dyZWdhdGlvbi5DT1VOVCxcbiAgICAgICAgdG9vbHRpcDogb3B0aW9ucz8udG9vbHRpcCA/PyB0cnVlLFxuICAgICAgICBsZWdlbmQ6IG9wdGlvbnMubGVnZW5kID8/IHRydWUsXG4gICAgICAgIGxvY2FsZTogJ2ZyJ1xuICAgICAgfSkpXG4gICAgKTtcblxuICAgIHRoaXMuaXRlbXMkID0gdGhpcy5yZXN1bHRTZXQkLnBpcGUoXG4gICAgICBmaWx0ZXIoKHJlc3VsdFNldCkgPT4gISFyZXN1bHRTZXQpLFxuICAgICAgbWFwKChyZXN1bHRTZXQpID0+IHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHJlc3VsdFNldD8uaXRlbXMpXG4gICAgICAgICAgLm1hcCgoY2xhc3NJZCkgPT4gcmVzdWx0U2V0Lml0ZW1zW2NsYXNzSWRdKVxuICAgICAgICAgIC5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IFsuLi5wcmV2LCAuLi5jdXJyXSwgW10pO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5wb3NzaWJsZVNlY29uZGFyeUF0dHJpYnV0ZXMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLnZhcmlhYmxlQXR0cmlidXRlcyQsXG4gICAgICB0aGlzLml0ZW1zJCxcbiAgICAgIHRoaXMuZmllbGRzJCxcbiAgICAgIHRoaXMudHJpZ2dlckNhbGN1bGF0ZVBvc3NpYmxlQXR0cmlidXRlcyRcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbdmFyaWFibGVGaWVsZHMsIGl0ZW1zLCBmaWVsZHMsIF9dKSA9PiB7XG4gICAgICAgIHJldHVybiB2YXJpYWJsZUZpZWxkc1xuICAgICAgICAgIC5maWx0ZXIoKGF0dHJpYnV0ZSkgPT4ge1xuICAgICAgICAgICAgLy8gS2VlcCBvbmx5IG51bWVyaWMgdmFsdWVzIHdoZW4gbmVjZXNzYXJ5XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICF0aGlzLm9wdGlvbnNDb3B5LmFnZ3JlZ2F0aW9uIHx8XG4gICAgICAgICAgICAgIFtBZ2dyZWdhdGlvbi5OT05FLCBBZ2dyZWdhdGlvbi5ESVNUSU5DVCwgQWdncmVnYXRpb24uQ09VTlRdLmluY2x1ZGVzKHRoaXMub3B0aW9uc0NvcHkuYWdncmVnYXRpb24pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IGZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGQuaWQgPT09IGF0dHJpYnV0ZS5maWVsZC5pZCk7XG4gICAgICAgICAgICAgIHJldHVybiBbRmllbGRUeXBlLkRFQ0lNQUwsIEZpZWxkVHlwZS5JTlNUQU5ULCBGaWVsZFR5cGUuTE9ORywgRmllbGRUeXBlLklOVEVHRVJdLmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgIGZpZWxkPy50eXBlID8/IEZpZWxkVHlwZS5TVFJJTkdcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICAgIC5maWx0ZXIoKGF0dHJpYnV0ZSkgPT5cbiAgICAgICAgICAgIGl0ZW1zLmZpbmQoXG4gICAgICAgICAgICAgIChpdGVtKSA9PlxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGl0ZW0uYXR0cmlidXRlcykuaW5jbHVkZXModGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlc1swXS5sYWJlbCkgJiZcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhpdGVtLmF0dHJpYnV0ZXMpLmluY2x1ZGVzKGF0dHJpYnV0ZS50ZWNobmljYWxOYW1lKSAmJlxuICAgICAgICAgICAgICAgICEhKGl0ZW0uYXR0cmlidXRlc1t0aGlzLm9wdGlvbnNDb3B5LnNlbGVjdGVkVmFyaWFibGVzWzBdLmxhYmVsXSBhcyBBdHRyaWJ1dGVTaW1wbGVWYWx1ZSkudmFsdWUgJiZcbiAgICAgICAgICAgICAgICAoaXRlbS5hdHRyaWJ1dGVzW2F0dHJpYnV0ZS5uYW1lXSBhcyBBdHRyaWJ1dGVTaW1wbGVWYWx1ZSkudmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICB9KSxcbiAgICAgIG1hcCgocHJvcHMpID0+IFdpZGdldENoYXJ0Q29tcG9uZW50LnVuaXF1ZUF0dHJpYnV0ZXNCeU5hbWVzKHByb3BzKSlcbiAgICApO1xuXG4gICAgdGhpcy5udW1lcmljUHJvcGVydGllcyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMudmFyaWFibGVBdHRyaWJ1dGVzJCxcbiAgICAgIHRoaXMuaXRlbXMkLFxuICAgICAgdGhpcy5maWVsZHMkLFxuICAgICAgdGhpcy50cmlnZ2VyQ2FsY3VsYXRlUG9zc2libGVBdHRyaWJ1dGVzJFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFt2YXJpYWJsZUZpZWxkcywgaXRlbXMsIGZpZWxkcywgX10pID0+IHtcbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlRmllbGRzXG4gICAgICAgICAgLmZpbHRlcigoYXR0cmlidXRlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZCA9IGZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGQuaWQgPT09IGF0dHJpYnV0ZS5maWVsZC5pZCk7XG4gICAgICAgICAgICByZXR1cm4gW0ZpZWxkVHlwZS5ERUNJTUFMLCBGaWVsZFR5cGUuSU5TVEFOVCwgRmllbGRUeXBlLkxPTkcsIEZpZWxkVHlwZS5JTlRFR0VSXS5pbmNsdWRlcyhcbiAgICAgICAgICAgICAgZmllbGQ/LnR5cGUgPz8gRmllbGRUeXBlLlNUUklOR1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5maWx0ZXIoKGF0dHJpYnV0ZSkgPT5cbiAgICAgICAgICAgIGl0ZW1zLmZpbmQoXG4gICAgICAgICAgICAgIChpdGVtKSA9PlxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGl0ZW0uYXR0cmlidXRlcykuaW5jbHVkZXMoYXR0cmlidXRlLnRlY2huaWNhbE5hbWUpICYmXG4gICAgICAgICAgICAgICAgKGl0ZW0uYXR0cmlidXRlc1thdHRyaWJ1dGUudGVjaG5pY2FsTmFtZV0gYXMgQXR0cmlidXRlU2ltcGxlVmFsdWUpLnZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgfSksXG4gICAgICBtYXAoKHByb3BzKSA9PiB7XG4gICAgICAgIHJldHVybiBXaWRnZXRDaGFydENvbXBvbmVudC51bmlxdWVBdHRyaWJ1dGVzQnlOYW1lcyhwcm9wcyk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnRleHRQcm9wZXJ0aWVzJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy52YXJpYWJsZUF0dHJpYnV0ZXMkLFxuICAgICAgdGhpcy5pdGVtcyQsXG4gICAgICB0aGlzLmZpZWxkcyQsXG4gICAgICB0aGlzLnRyaWdnZXJDYWxjdWxhdGVQb3NzaWJsZUF0dHJpYnV0ZXMkXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW3ZhcmlhYmxlRmllbGRzLCBpdGVtcywgZmllbGRzLCBfXSkgPT4ge1xuICAgICAgICByZXR1cm4gdmFyaWFibGVGaWVsZHNcbiAgICAgICAgICAuZmlsdGVyKChhdHRyaWJ1dGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gZmllbGRzLmZpbmQoKGZpZWxkKSA9PiBmaWVsZC5pZCA9PT0gYXR0cmlidXRlLmZpZWxkLmlkKTtcbiAgICAgICAgICAgIHJldHVybiBbRmllbGRUeXBlLlNUUklORywgRmllbGRUeXBlLktFWVdPUkRdLmluY2x1ZGVzKGZpZWxkPy50eXBlID8/IEZpZWxkVHlwZS5JTlRFR0VSKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5maWx0ZXIoKGF0dHJpYnV0ZSkgPT5cbiAgICAgICAgICAgIGl0ZW1zLmZpbmQoXG4gICAgICAgICAgICAgIChpdGVtKSA9PlxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGl0ZW0uYXR0cmlidXRlcykuaW5jbHVkZXMoYXR0cmlidXRlLnRlY2huaWNhbE5hbWUpICYmXG4gICAgICAgICAgICAgICAgKGl0ZW0uYXR0cmlidXRlc1thdHRyaWJ1dGUudGVjaG5pY2FsTmFtZV0gYXMgQXR0cmlidXRlU2ltcGxlVmFsdWUpLnZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgfSksXG4gICAgICBtYXAoKHByb3BzKSA9PiB7XG4gICAgICAgIHJldHVybiBXaWRnZXRDaGFydENvbXBvbmVudC51bmlxdWVBdHRyaWJ1dGVzQnlOYW1lcyhwcm9wcyk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLmZpbHRlckRhdGFGb3JPcHRpb25zJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuaXRlbXMkLCB0aGlzLm9wdGlvbnMkLCB0aGlzLnZhcmlhYmxlQXR0cmlidXRlcyRdKS5waXBlKFxuICAgICAgZmlsdGVyKChbaXRlbXMsIG9wdGlvbnNdKSA9PiBvcHRpb25zLnNlbGVjdGVkVmFyaWFibGVzICYmIG9wdGlvbnMuc2VsZWN0ZWRWYXJpYWJsZXMubGVuZ3RoID4gMCksXG4gICAgICBtYXAoKFtpdGVtcywgb3B0aW9ucywgdmFyaWFibGVzXSkgPT4gV2lkZ2V0Q2hhcnRDb21wb25lbnQubWF0Y2hpbmdJdGVtcyhpdGVtcywgb3B0aW9ucywgdmFyaWFibGVzKSlcbiAgICApO1xuXG4gICAgdGhpcy5maWx0ZXJEYXRhRm9yT3B0aW9uc0NvcHkkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLml0ZW1zJCxcbiAgICAgIHRoaXMudHJpZ2dlckNhbGN1bGF0ZVBvc3NpYmxlQXR0cmlidXRlcyQucGlwZShkZWxheSgyMDApKSxcbiAgICAgIHRoaXMudmFyaWFibGVBdHRyaWJ1dGVzJFxuICAgIF0pLnBpcGUoXG4gICAgICBmaWx0ZXIoKFtpdGVtcywgX10pID0+IHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXMgJiYgdGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlcy5sZW5ndGggPiAwKSxcbiAgICAgIG1hcCgoW2l0ZW1zLCBfLCB2YXJpYWJsZXNdKSA9PiBXaWRnZXRDaGFydENvbXBvbmVudC5tYXRjaGluZ0l0ZW1zKGl0ZW1zLCB0aGlzLm9wdGlvbnNDb3B5LCB2YXJpYWJsZXMpKVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5vcHRpb25zJC5waXBlKGZpbHRlcigob3B0KSA9PiAhIW9wdCkpLnN1YnNjcmliZSgob3B0aW9ucykgPT4ge1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvcHRpb25zKSk7XG4gICAgICAgIHRoaXMudXBkYXRlQWR2YW5jZWRFZGl0KEpTT04uc3RyaW5naWZ5KHRoaXMub3B0aW9uc0NvcHkuc3BlY1RvTWVyZ2UpKTtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weS50eXBlID0gIXRoaXMubWFya1R5cGVzLmluY2x1ZGVzKHRoaXMub3B0aW9uc0NvcHkudHlwZSlcbiAgICAgICAgICA/IHRoaXMubWFya1R5cGVzWzBdXG4gICAgICAgICAgOiB0aGlzLm9wdGlvbnNDb3B5LnR5cGU7XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkuc3ViVHlwZSA9IHRoaXMub3B0aW9uc0NvcHkuc3ViVHlwZSA/PyBNYXJrU3ViVHlwZS5ERUZBVUxUO1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LmFnZ3JlZ2F0aW9uID0gIXRoaXMuYWdncmVnYXRpb25zLmluY2x1ZGVzKHRoaXMub3B0aW9uc0NvcHkuYWdncmVnYXRpb24pXG4gICAgICAgICAgPyB0aGlzLmFnZ3JlZ2F0aW9uc1swXVxuICAgICAgICAgIDogdGhpcy5vcHRpb25zQ29weS5hZ2dyZWdhdGlvbjtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9uc0NvcHkuc2VyaWVzKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zQ29weS5zZXJpZXMuc2NoZW1lID1cbiAgICAgICAgICAgIHRoaXMub3B0aW9uc0NvcHkuc2VyaWVzPy5zY2hlbWUgJiZcbiAgICAgICAgICAgIHRoaXMuc2NoZW1lcyAmJlxuICAgICAgICAgICAgIXRoaXMuc2NoZW1lcy5maW5kKChzKSA9PiBzLmlkID09PSB0aGlzLm9wdGlvbnNDb3B5Py5zZXJpZXM/LnNjaGVtZSlcbiAgICAgICAgICAgICAgPyB0aGlzLnNjaGVtZXNbMF0uaWRcbiAgICAgICAgICAgICAgOiB0aGlzLm9wdGlvbnNDb3B5LnNlcmllcz8uc2NoZW1lO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnZlZ2FMaXRlU3BlYyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy53aW5kb3dNYW5pZmVzdCksXG4gICAgICB0aGlzLm1hbmlmZXN0JCxcbiAgICAgIHRoaXMud2lkZ2V0U2l6ZSQsXG4gICAgICB0aGlzLmZpbHRlckRhdGFGb3JPcHRpb25zJCxcbiAgICAgIHRoaXMub3B0aW9ucyQsXG4gICAgICB0aGlzLmRpc3BsYXlIZWFkZXIkLFxuICAgICAgdGhpcy52YXJpYWJsZUF0dHJpYnV0ZXMkXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW3dpbmRvd01hbmlmZXN0LCB3aWRnZXRNYW5pZmVzdCwgc2l6ZSwgZGF0YSwgb3B0aW9ucywgZGlzcGxheUhlYWRlciwgdmFyaWFibGVGaWVsZF0pID0+IHtcbiAgICAgICAgbGV0IHNwZWMgPSB2ZWdhQmFzZUNvbmY7XG4gICAgICAgIHN3aXRjaCAob3B0aW9ucy50eXBlKSB7XG4gICAgICAgICAgY2FzZSBNYXJrVHlwZS5SQURBUjpcbiAgICAgICAgICAgIHNwZWMgPSB2ZWdhUmFkYXJDb25mO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBNYXJrVHlwZS5DSVJDTEVfUEFDSzpcbiAgICAgICAgICAgIHNwZWMgPSB2ZWdhQ2lyY2xlUGFja0NvbmY7XG4gICAgICAgIH1cblxuICAgICAgICBzcGVjLnRpdGxlID0gb3B0aW9ucy5jdXN0b21UaXRsZSA/PyBvcHRpb25zLnRpdGxlO1xuXG4gICAgICAgIHN3aXRjaCAob3B0aW9ucy50eXBlKSB7XG4gICAgICAgICAgY2FzZSBNYXJrVHlwZS5SQURBUjpcbiAgICAgICAgICAgIHNwZWMuc2lnbmFsc1swXS51cGRhdGUgPSBzaXplLndpZHRoID4gc2l6ZS5oZWlnaHQgPyAnaGVpZ2h0IC8gMicgOiAnd2lkdGggLyAyJztcbiAgICAgICAgICAgIHNwZWMuZGF0YVswXS52YWx1ZXMgPSBXaWRnZXRDaGFydENvbXBvbmVudC5idWlsZERhdGFWZWdhUmFkYXIoZGF0YSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBzcGVjLnNjYWxlc1syXS5yYW5nZS5zY2hlbWUgPSBvcHRpb25zLnNlcmllcz8uc2NoZW1lO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBNYXJrVHlwZS5DSVJDTEVfUEFDSzpcbiAgICAgICAgICAgIHNwZWMuZGF0YVswXS52YWx1ZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbiAgICAgICAgICAgIHNwZWMuZGF0YVsxXS50cmFuc2Zvcm1bMF0ua2V5ID0gJ2F0dHJpYnV0ZXMuJyArIG9wdGlvbnMucGFja2luZz8uaWQgKyAnLnZhbHVlJztcbiAgICAgICAgICAgIHNwZWMuZGF0YVsxXS50cmFuc2Zvcm1bMF0ucGFyZW50S2V5ID0gJ2F0dHJpYnV0ZXMuJyArIG9wdGlvbnMucGFja2luZz8ucGFyZW50SWQgKyAnLnZhbHVlJztcbiAgICAgICAgICAgIHNwZWMuZGF0YVsxXS50cmFuc2Zvcm1bMV0uZmllbGQgPSAnYXR0cmlidXRlcy4nICsgb3B0aW9ucy5wYWNraW5nPy5wYWNrRmllbGQgKyAnLnZhbHVlJztcbiAgICAgICAgICAgIHNwZWMubWFya3NbMF0uZW5jb2RlLmVudGVyLnRvb2x0aXAuc2lnbmFsID0gYGRhdHVtLmF0dHJpYnV0ZXMuJHtcbiAgICAgICAgICAgICAgb3B0aW9ucy5wYWNraW5nPy50b29sdGlwID8/IG9wdGlvbnMucGFja2luZz8uaWRcbiAgICAgICAgICAgIH0udmFsdWUgKyAnIDogJyArIGRhdHVtLmF0dHJpYnV0ZXMuJHtvcHRpb25zLnBhY2tpbmc/LnBhY2tGaWVsZH0udmFsdWVgO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHNwZWMuZGF0YSA9IHsgdmFsdWVzOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKSB9O1xuICAgICAgICAgICAgc3BlYy5sYXllciA9IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG1hcms6IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IG9wdGlvbnMudHlwZSxcbiAgICAgICAgICAgICAgICAgIHBvaW50OlxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnR5cGUgPT09IE1hcmtUeXBlLlBPSU5UIHx8XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc3ViVHlwZSA9PT0gTWFya1N1YlR5cGUuV0lUSF9MSU5FU19BTkRfUE9JTlRTIHx8XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc3ViVHlwZSA9PT0gTWFya1N1YlR5cGUuV0lUSF9QT0lOVFMsXG4gICAgICAgICAgICAgICAgICBsaW5lOiBvcHRpb25zLnR5cGUgPT09IE1hcmtUeXBlLkxJTkUgfHwgb3B0aW9ucy5zdWJUeXBlID09PSBNYXJrU3ViVHlwZS5XSVRIX0xJTkVTX0FORF9QT0lOVFMsXG4gICAgICAgICAgICAgICAgICBpbm5lclJhZGl1czogb3B0aW9ucy5pbm5lclJhZGl1cyxcbiAgICAgICAgICAgICAgICAgIHRvb2x0aXA6IG9wdGlvbnMudG9vbHRpcCA/PyB0cnVlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogV2lkZ2V0Q2hhcnRDb21wb25lbnQuY2FsY3VsYXRlRW5jb2Rpbmcob3B0aW9ucylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmZpbGwpIHtcbiAgICAgICAgICAgICAgc3BlYy5sYXllclswXS5tYXJrLmZpbGwgPSBvcHRpb25zLmZpbGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zdWJUeXBlID09PSBNYXJrU3ViVHlwZS5BUkVBU1RBQ0tFRCB8fCBvcHRpb25zLnN1YlR5cGUgPT09IE1hcmtTdWJUeXBlLkhJU1RPU1RBQ0tFRCkge1xuICAgICAgICAgICAgICBzcGVjLmRhdGEudHJhbnNmb3JtID0gW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdzdGFjaycsXG4gICAgICAgICAgICAgICAgICBncm91cGJ5OiBbb3B0aW9ucy5zZWxlY3RlZFZhcmlhYmxlc1swXS5uYW1lXSxcbiAgICAgICAgICAgICAgICAgIHNvcnQ6IHsgZmllbGQ6IG9wdGlvbnMuc2VyaWVzPy5ncm91cEJ5IH0sXG4gICAgICAgICAgICAgICAgICBmaWVsZDogb3B0aW9ucy5zZWxlY3RlZFZhcmlhYmxlc1sxXS5uYW1lXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1lcmdlZCA9IG1lcmdlRGVlcChzcGVjLCB7IGNvbmZpZzogZm9udENvbmZpZygnVWJ1bnR1LCBzYW5zLXNlcmlmJykgfSBhcyBhbnksIG9wdGlvbnMuc3BlY1RvTWVyZ2UpO1xuXG4gICAgICAgIGlmICghIW9wdGlvbnMuc3BlY1RvTWVyZ2UpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShzcGVjKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbWVyZ2VkO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5pc0NoYXJ0VmFsaWQkID0gdGhpcy5vcHRpb25zJC5waXBlKFxuICAgICAgbWFwKFxuICAgICAgICAob3B0aW9ucykgPT5cbiAgICAgICAgICAhIW9wdGlvbnMudHlwZSAmJlxuICAgICAgICAgIC8vIFdlIG11c3QgaGF2ZSB0aGUgY29ycmVjdCBudW1iZXIgb2YgdmFyaWFibGVzIHRvIGRyYXcgdGhlIGdyYXBoXG4gICAgICAgICAgKG9wdGlvbnMuc2VsZWN0ZWRWYXJpYWJsZXMuZmlsdGVyKCh2KSA9PiAhIXYudHlwZSkubGVuZ3RoID4gMSB8fFxuICAgICAgICAgICAgKG9wdGlvbnMuc2VsZWN0ZWRWYXJpYWJsZXMuZmlsdGVyKCh2KSA9PiAhIXYudHlwZSkubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAob3B0aW9ucy5hZ2dyZWdhdGlvbiA9PT0gQWdncmVnYXRpb24uQ09VTlQgfHxcbiAgICAgICAgICAgICAgICBvcHRpb25zLmFnZ3JlZ2F0aW9uID09PSBBZ2dyZWdhdGlvbi5ESVNUSU5DVCB8fFxuICAgICAgICAgICAgICAgIG9wdGlvbnMuYWdncmVnYXRpb24gPT09IEFnZ3JlZ2F0aW9uLk5PTkUpKSlcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLnZlZ2FMaXRlU3BlYyQsIHRoaXMudHJpZ2dlciRdKS5zdWJzY3JpYmUoKFtzcGVjLCBfXSkgPT4ge1xuICAgICAgICBpZiAodGhpcy52ZWdhKSB7XG4gICAgICAgICAgdGhpcy52aWV3Py5maW5hbGl6ZSgpO1xuICAgICAgICAgIGVtYmVkKHRoaXMudmVnYS5uYXRpdmVFbGVtZW50LCBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHNwZWMpKSwge1xuICAgICAgICAgICAgYWN0aW9uczogZmFsc2UsXG4gICAgICAgICAgICByZW5kZXJlcjogJ3N2ZycsXG4gICAgICAgICAgICBmb3JtYXRMb2NhbGU6XG4gICAgICAgICAgICAgIHRoaXMub3B0aW9uc0NvcHkubG9jYWxlID09PSAnZnInXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGRlY2ltYWw6ICcsJyxcbiAgICAgICAgICAgICAgICAgICAgdGhvdXNhbmRzOiAnXFx1MDBhMCcsXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwaW5nOiBbM10sXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5OiBbJycsICdcXHUwMGEw4oKsJ10sXG4gICAgICAgICAgICAgICAgICAgIHBlcmNlbnQ6ICdcXHUyMDJmJSdcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVjaW1hbDogJy4nLFxuICAgICAgICAgICAgICAgICAgICB0aG91c2FuZHM6ICcsJyxcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBpbmc6IFszXSxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVuY3k6IFsnJCcsICcnXVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIHZpZXdDbGFzczogVmVnYUVycm9ySGFuZGxlclxuICAgICAgICAgIH0pLnRoZW4oKHJlc3VsdCkgPT4gKHRoaXMudmlldyA9IHJlc3VsdC52aWV3KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnRyaWdnZXIkLm5leHQoKSwgMTAwKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMudHJpZ2dlciQubmV4dCgpO1xuICB9XG5cbiAgc3RhdGljIGNhbGN1bGF0ZUVuY29kaW5nKG9wdGlvbnM6IENoYXJ0V2lkZ2V0T3B0aW9ucykge1xuICAgIGNvbnN0IHZhcmlhYmxlcyA9IG9wdGlvbnMuc2VsZWN0ZWRWYXJpYWJsZXMgPz8gW3t9LCB7fV07XG4gICAgc3dpdGNoIChvcHRpb25zLnR5cGUpIHtcbiAgICAgIGNhc2UgTWFya1R5cGUuQVJDOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRoZXRhOiB7XG4gICAgICAgICAgICBmaWVsZDogYGF0dHJpYnV0ZXMuJHt2YXJpYWJsZXNbMV0ubmFtZX0udmFsdWVgLFxuICAgICAgICAgICAgdGl0bGU6IHZhcmlhYmxlc1sxXS5sYWJlbCxcbiAgICAgICAgICAgIHR5cGU6IHZhcmlhYmxlc1sxXS50eXBlLFxuICAgICAgICAgICAgYWdncmVnYXRlOiBvcHRpb25zLmFnZ3JlZ2F0aW9uID8/IEFnZ3JlZ2F0aW9uLkNPVU5UXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb2xvcjoge1xuICAgICAgICAgICAgZmllbGQ6IGBhdHRyaWJ1dGVzLiR7dmFyaWFibGVzWzBdLm5hbWV9LnZhbHVlYCxcbiAgICAgICAgICAgIHRpdGxlOiB2YXJpYWJsZXNbMF0ubGFiZWwsXG4gICAgICAgICAgICB0eXBlOiB2YXJpYWJsZXNbMF0udHlwZSxcbiAgICAgICAgICAgIGxlZ2VuZDogb3B0aW9ucy5sZWdlbmQgPz8gdHJ1ZSxcbiAgICAgICAgICAgIHNjYWxlOiBvcHRpb25zLnNjYWxlID8/IHsgc2NoZW1lOiBvcHRpb25zLnNlcmllcz8uc2NoZW1lID8/ICdjYXRlZ29yeTIwYycgfVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIGNhc2UgTWFya1R5cGUuUkFEQVI6XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnN0IGVuY29kaW5nID0ge1xuICAgICAgICAgIHg6IHtcbiAgICAgICAgICAgIGZpZWxkOiBgYXR0cmlidXRlcy4ke3ZhcmlhYmxlc1swXS5uYW1lfS52YWx1ZWAsXG4gICAgICAgICAgICB0aXRsZTogdmFyaWFibGVzWzBdLmxhYmVsLFxuICAgICAgICAgICAgdHlwZTogdmFyaWFibGVzWzBdLnR5cGUsXG4gICAgICAgICAgICB0aW1lVW5pdDogdmFyaWFibGVzWzBdLnR5cGUgPT09IFZlZ2FUeXBlLlRFTVBPUkFMID8gdmFyaWFibGVzWzBdLnRpbWVVbml0IDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgYmluOiBvcHRpb25zLnN1YlR5cGUgPT09IE1hcmtTdWJUeXBlLkhJU1RPR1JBTSxcbiAgICAgICAgICAgIGF4aXM6IHZhcmlhYmxlc1swXS5heGlzT3B0aW9ucyxcbiAgICAgICAgICAgIHNjYWxlOiB7XG4gICAgICAgICAgICAgIC8vIEZvcmNlIGEgZmFsc2UgdmFsdWUgaGVyZSBzbyB0aGF0IHZlZ2EgdW5kZXJzdGFuZCBwcm9wZXJseVxuICAgICAgICAgICAgICB6ZXJvOiAhIXZhcmlhYmxlc1swXS5vcmlnaW4wLFxuICAgICAgICAgICAgICB0eXBlOiBXaWRnZXRDaGFydENvbXBvbmVudC5pc1RpbWVVbml0VVRDKHZhcmlhYmxlc1swXSkgPyAndXRjJyA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgeToge1xuICAgICAgICAgICAgZmllbGQ6IGBhdHRyaWJ1dGVzLiR7dmFyaWFibGVzWzFdLm5hbWV9LnZhbHVlYCxcbiAgICAgICAgICAgIHRpdGxlOiB2YXJpYWJsZXNbMV0ubGFiZWwsXG4gICAgICAgICAgICB0eXBlOiBvcHRpb25zLmFnZ3JlZ2F0aW9uID09PSBBZ2dyZWdhdGlvbi5DT1VOVCA/IFZlZ2FUeXBlLlFVQU5USVRBVElWRSA6IHZhcmlhYmxlc1sxXS50eXBlLFxuICAgICAgICAgICAgdGltZVVuaXQ6IHZhcmlhYmxlc1sxXS50eXBlID09PSBWZWdhVHlwZS5URU1QT1JBTCA/IHZhcmlhYmxlc1sxXS50aW1lVW5pdCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGF4aXM6IHZhcmlhYmxlc1sxXS5heGlzT3B0aW9ucyxcbiAgICAgICAgICAgIGFnZ3JlZ2F0ZTogb3B0aW9ucy5hZ2dyZWdhdGlvbiAhPT0gQWdncmVnYXRpb24uTk9ORSA/IG9wdGlvbnMuYWdncmVnYXRpb24gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBzY2FsZToge1xuICAgICAgICAgICAgICB6ZXJvOiB2YXJpYWJsZXNbMV0ub3JpZ2luMCxcbiAgICAgICAgICAgICAgdHlwZTogV2lkZ2V0Q2hhcnRDb21wb25lbnQuaXNUaW1lVW5pdFVUQyh2YXJpYWJsZXNbMV0pID8gJ3V0YycgOiB1bmRlZmluZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlmIChvcHRpb25zLnNlcmllcykge1xuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICBlbmNvZGluZy5jb2xvciA9IHtcbiAgICAgICAgICAgIHRpdGxlOiBgJHtvcHRpb25zLnNlcmllcy5ncm91cEJ5fWAsXG4gICAgICAgICAgICBmaWVsZDogYGF0dHJpYnV0ZXMuJHtvcHRpb25zLnNlcmllcy5ncm91cEJ5fS52YWx1ZWAsXG4gICAgICAgICAgICBsZWdlbmQ6IG9wdGlvbnMubGVnZW5kXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAob3B0aW9ucy5zZXJpZXMuc2NoZW1lKSB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBlbmNvZGluZy5jb2xvci5zY2FsZSA9IHsgc2NoZW1lOiBvcHRpb25zLnNlcmllcy5zY2hlbWUgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVuY29kaW5nO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBidWlsZERhdGFWZWdhUmFkYXIoaXRlbXM6IEl0ZW1bXSwgb3B0aW9uczogQ2hhcnRXaWRnZXRPcHRpb25zKTogUmFkYXJWYWx1ZVtdIHtcbiAgICBpZiAob3B0aW9ucy5yYWRhcj8uY29tcGFyZSA9PT0gJ2l0ZW0nKSB7XG4gICAgICByZXR1cm4gaXRlbXNcbiAgICAgICAgLm1hcCgoaXRlbSwgaWR4KSA9PlxuICAgICAgICAgIChvcHRpb25zLnJhZGFyPy5wcm9wcyA/PyBbXSkubWFwKChwcm9wOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1WYWx1ZU11bHRpcGxlID0gSXRlbVV0aWxzLmdldEF0dHJpYnV0ZVZhbHVlKGl0ZW0sIHByb3ApO1xuICAgICAgICAgICAgY29uc3QgaXRlbVZhbHVlID0gQXJyYXkuaXNBcnJheShpdGVtVmFsdWVNdWx0aXBsZSkgPyBpdGVtVmFsdWVNdWx0aXBsZVswXSA6IGl0ZW1WYWx1ZU11bHRpcGxlO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY2F0ZWdvcnk6IGlkeCxcbiAgICAgICAgICAgICAga2V5OiBwcm9wLFxuICAgICAgICAgICAgICB2YWx1ZTogaXRlbVZhbHVlPy52YWx1ZVxuICAgICAgICAgICAgfSBhcyBSYWRhclZhbHVlO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLnJlZHVjZSgoYTogUmFkYXJWYWx1ZVtdLCBiOiBSYWRhclZhbHVlW10pID0+IFsuLi5hLCAuLi5iXSwgW10pXG4gICAgICAgIC5maWx0ZXIoKGE6IFJhZGFyVmFsdWUpID0+IGEudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBhLnZhbHVlICE9PSBudWxsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGl0ZW1zXG4gICAgICAgIC5tYXAoXG4gICAgICAgICAgKGl0ZW0sIGlkeCkgPT5cbiAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgIGNhdGVnb3J5OiAoaXRlbS5hdHRyaWJ1dGVzW29wdGlvbnMucmFkYXI/LmNhdGVnb3J5UHJvcCA/PyAnJ10gYXMgQXR0cmlidXRlU2ltcGxlVmFsdWUpPy52YWx1ZSA/PyAnb2JqZWN0JyxcbiAgICAgICAgICAgICAga2V5OiAoaXRlbS5hdHRyaWJ1dGVzW29wdGlvbnMucmFkYXI/LmtleVByb3AgPz8gJyddIGFzIEF0dHJpYnV0ZVNpbXBsZVZhbHVlKT8udmFsdWUsXG4gICAgICAgICAgICAgIHZhbHVlOiAoaXRlbS5hdHRyaWJ1dGVzW29wdGlvbnMucmFkYXI/LnZhbHVlUHJvcCA/PyAnJ10gYXMgQXR0cmlidXRlU2ltcGxlVmFsdWUpPy52YWx1ZVxuICAgICAgICAgICAgfSkgYXMgUmFkYXJWYWx1ZVxuICAgICAgICApXG4gICAgICAgIC5maWx0ZXIoKGE6IFJhZGFyVmFsdWUpID0+IGEudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBhLnZhbHVlICE9PSBudWxsICYmICEhYS5rZXkpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBtYXRjaGluZ0l0ZW1zKGl0ZW1zOiBJdGVtW10sIG9wdGlvbnM6IENoYXJ0V2lkZ2V0T3B0aW9ucywgYXR0cmlidXRlczogQXR0cmlidXRlW10pIHtcbiAgICByZXR1cm4gaXRlbXMuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICBzd2l0Y2ggKG9wdGlvbnMudHlwZSkge1xuICAgICAgICBjYXNlIE1hcmtUeXBlLkNJUkNMRV9QQUNLOlxuICAgICAgICAgIHJldHVybiAhIW9wdGlvbnMucGFja2luZz8uaWQgJiYgISFvcHRpb25zLnBhY2tpbmcucGFyZW50SWQgJiYgISFvcHRpb25zLnBhY2tpbmcucGFja0ZpZWxkO1xuICAgICAgICBjYXNlIE1hcmtUeXBlLlJBREFSOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoKG9wdGlvbnMucmFkYXI/LmNvbXBhcmUgPT09ICdpdGVtJyAmJiAob3B0aW9ucy5yYWRhci5wcm9wcz8ubGVuZ3RoID8/IDApID4gMikgfHxcbiAgICAgICAgICAgICAgKG9wdGlvbnMucmFkYXI/LmNvbXBhcmUgIT09ICdpdGVtJyAmJlxuICAgICAgICAgICAgICAgICEhb3B0aW9ucy5yYWRhcj8ua2V5UHJvcCAmJlxuICAgICAgICAgICAgICAgICEhb3B0aW9ucy5yYWRhci52YWx1ZVByb3AgJiZcbiAgICAgICAgICAgICAgICAhIW9wdGlvbnMucmFkYXIuY2F0ZWdvcnlQcm9wKSkgJiZcbiAgICAgICAgICAgIFdpZGdldENoYXJ0Q29tcG9uZW50LmJ1aWxkRGF0YVZlZ2FSYWRhcihpdGVtcywgb3B0aW9ucykubGVuZ3RoID4gMFxuICAgICAgICAgICk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGl0ZW0uYXR0cmlidXRlcykuaW5jbHVkZXMob3B0aW9ucy5zZWxlY3RlZFZhcmlhYmxlc1swXS5uYW1lKSAmJlxuICAgICAgICAgICAgKGl0ZW0uYXR0cmlidXRlc1tvcHRpb25zLnNlbGVjdGVkVmFyaWFibGVzWzBdLm5hbWVdIGFzIEF0dHJpYnV0ZVNpbXBsZVZhbHVlKS52YWx1ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAoKE9iamVjdC5rZXlzKGl0ZW0uYXR0cmlidXRlcykuaW5jbHVkZXMob3B0aW9ucy5zZWxlY3RlZFZhcmlhYmxlc1sxXS5uYW1lKSAmJlxuICAgICAgICAgICAgICAoaXRlbS5hdHRyaWJ1dGVzW29wdGlvbnMuc2VsZWN0ZWRWYXJpYWJsZXNbMV0ubmFtZV0gYXMgQXR0cmlidXRlU2ltcGxlVmFsdWUpLnZhbHVlICE9PSB1bmRlZmluZWQpIHx8XG4gICAgICAgICAgICAgIG9wdGlvbnMuYWdncmVnYXRpb24gPT09IEFnZ3JlZ2F0aW9uLkRJU1RJTkNUIHx8XG4gICAgICAgICAgICAgIG9wdGlvbnMuYWdncmVnYXRpb24gPT09IEFnZ3JlZ2F0aW9uLkNPVU5UKVxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgdW5pcXVlQXR0cmlidXRlc0J5TmFtZXMoYXR0cmlidXRlczogQXR0cmlidXRlW10pOiBBdHRyaWJ1dGVbXSB7XG4gICAgcmV0dXJuIFsuLi5uZXcgU2V0KGF0dHJpYnV0ZXMubWFwKChhdHRyKSA9PiBhdHRyLnRlY2huaWNhbE5hbWUpKV0ubWFwKFxuICAgICAgKGF0dHJOYW1lKSA9PiBhdHRyaWJ1dGVzLmZpbmQoKGF0dHIpID0+IGF0dHIudGVjaG5pY2FsTmFtZSA9PT0gYXR0ck5hbWUpID8/ICh7fSBhcyBBdHRyaWJ1dGUpXG4gICAgKTtcbiAgfVxuXG4gIHRlbXBsYXRlVHlwZVRyYW5zbGF0aW9uRm4gPSAoaXRlbTogYW55LCBhcmdzOiBhbnlbXSkgPT5cbiAgICBgJHthcmdzWzBdfSR7aXRlbSA9PT0gTWFya1N1YlR5cGUuREVGQVVMVCA/IGl0ZW0gOiBhcmdzWzFdICsgYXJnc1syXSArIGl0ZW19YDtcblxuICBhZHZhbmNlZEVkaXQ6IHN0cmluZyA9ICd7fSc7XG5cbiAgY2hhbmdlQ2hhcnRUaXRsZSh0aXRsZTogc3RyaW5nKSB7XG4gICAgdGhpcy5vcHRpb25zQ29weS5jdXN0b21UaXRsZSA9IHRpdGxlO1xuICB9XG5cbiAgY2hhbmdlVGltZVVuaXQoJGV2ZW50OiBUaW1lVW5pdCwgdmFyaWFibGU6IFZhcmlhYmxlRGVmaW5pdGlvbikge1xuICAgIHZhcmlhYmxlLnRpbWVVbml0ID0gJGV2ZW50O1xuICB9XG5cbiAgY2hhbmdlQWdncmVnYXRpb24oJGV2ZW50OiBBZ2dyZWdhdGlvbikge1xuICAgIHRoaXMub3B0aW9uc0NvcHkuYWdncmVnYXRpb24gPSAkZXZlbnQ7XG4gICAgaWYgKFtBZ2dyZWdhdGlvbi5DT1VOVCwgQWdncmVnYXRpb24uRElTVElOQ1RdLmluY2x1ZGVzKCRldmVudCEpKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LnNlbGVjdGVkVmFyaWFibGVzWzFdLmF4aXNPcHRpb25zID0geyB0aWNrTWluU3RlcDogMSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlc1sxXS5heGlzT3B0aW9ucztcbiAgICB9XG4gICAgdGhpcy50cmlnZ2VyQ2FsY3VsYXRlUG9zc2libGVBdHRyaWJ1dGVzJC5uZXh0KCk7XG4gIH1cblxuICBjaGFuZ2VQcm9wZXJ0eShhdHRyTmFtZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgYXR0ciA9IHRoaXMudmFyaWFibGVBdHRyaWJ1dGVzLmZpbmQoKGF0dHIpID0+IGF0dHIudGVjaG5pY2FsTmFtZSA9PT0gYXR0ck5hbWUpO1xuICAgIGlmICghIWF0dHIpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXNbaW5kZXhdLm5hbWUgPSBhdHRyLm5hbWU7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LnNlbGVjdGVkVmFyaWFibGVzW2luZGV4XS5sYWJlbCA9IGF0dHIubmFtZTtcbiAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5maWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLmlkID09PSBhdHRyLmZpZWxkLmlkKT8udHlwZSA/PyBGaWVsZFR5cGUuU1RSSU5HO1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlc1tpbmRleF0udHlwZSA9IHRoaXMudHJhbnNsYXRlVG9WZWdhVHlwZShmaWVsZCwgYXR0ci5uYW1lKTtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXNbaW5kZXhdLmF4aXNPcHRpb25zID0gdGhpcy5taW5UaWNrKGZpZWxkKTtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkudGl0bGUgPVxuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LnNlbGVjdGVkVmFyaWFibGVzWzBdLmxhYmVsICsgJywgJyArIHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXNbMV0ubGFiZWw7XG4gICAgfVxuICAgIHRoaXMudHJpZ2dlckNhbGN1bGF0ZVBvc3NpYmxlQXR0cmlidXRlcyQubmV4dCgpO1xuICB9XG5cbiAgc3RhdGljIGlzVGltZVVuaXRVVEModmFyaWFibGVEZWY6IFZhcmlhYmxlRGVmaW5pdGlvbik6IGJvb2xlYW4ge1xuICAgIGxldCB1dGNSZWdleCA9IG5ldyBSZWdFeHAoL191dGN8dXRjX3xfVVRDfFVUQ198X1V0Y3xVdGNfLywgJ2cnKTtcbiAgICByZXR1cm4gdXRjUmVnZXgudGVzdCh2YXJpYWJsZURlZj8ubGFiZWwpO1xuICB9XG5cbiAgY2hhbmdlTGFiZWwobGFiZWw6IHN0cmluZywgaW5kZXg6IG51bWJlcikge1xuICAgIGxldCB1cGRhdGVUaXRsZSA9IGZhbHNlO1xuICAgIGlmIChcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkudGl0bGUgPT09XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LnNlbGVjdGVkVmFyaWFibGVzWzBdLmxhYmVsICsgJywgJyArIHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXNbMV0ubGFiZWxcbiAgICApIHtcbiAgICAgIHVwZGF0ZVRpdGxlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnNDb3B5LnNlbGVjdGVkVmFyaWFibGVzW2luZGV4XS5sYWJlbCA9IGxhYmVsO1xuICAgIGlmICh1cGRhdGVUaXRsZSkge1xuICAgICAgLy91cGRhdGUgdGl0bGUgaWYgaXQgaGFzIG5vdCBiZWVuIG1vZGlmaWVkIG1hbnVhbGx5XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LnRpdGxlID1cbiAgICAgICAgdGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlc1swXS5sYWJlbCArICcsICcgKyB0aGlzLm9wdGlvbnNDb3B5LnNlbGVjdGVkVmFyaWFibGVzWzFdLmxhYmVsO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZU9yaWdpbkF0WmVybyh2YXJpYWJsZTogVmFyaWFibGVEZWZpbml0aW9uLCAkZXZlbnQ6IGJvb2xlYW4pIHtcbiAgICB2YXJpYWJsZS5vcmlnaW4wID0gJGV2ZW50O1xuICB9XG5cbiAgY2hhbmdlVHlwZSh0eXBlT3B0aW9uc0lkOiBzdHJpbmcpIHtcbiAgICB0aGlzLm9wdGlvbnNDb3B5ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLm9wdGlvbnNDb3B5KSk7XG4gICAgY29uc3QgW3R5cGUsIHN1YlR5cGVdID0gdHlwZU9wdGlvbnNJZC5zcGxpdCgnLScpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0aGlzLm9wdGlvbnNDb3B5LnR5cGUgPSB0eXBlO1xuICAgIHRoaXMub3B0aW9uc0NvcHkuc3ViVHlwZSA9IHN1YlR5cGUgPz8gTWFya1N1YlR5cGUuREVGQVVMVDtcblxuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5LnR5cGUgPT09IE1hcmtUeXBlLkNJUkNMRV9QQUNLKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LnBhY2tpbmcgPSB7fTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHRoaXMub3B0aW9uc0NvcHkucGFja2luZztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zQ29weS50eXBlID09PSBNYXJrVHlwZS5SQURBUikge1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5yYWRhciA9IHt9O1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdGhpcy5vcHRpb25zQ29weS5yYWRhcjtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHRoaXMub3B0aW9uc0NvcHkudHlwZSkge1xuICAgICAgY2FzZSBNYXJrVHlwZS5CQVI6XG4gICAgICBjYXNlIE1hcmtUeXBlLkxJTkU6XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXNbMF0udHlwZSA9XG4gICAgICAgICAgdGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlc1swXS50eXBlICE9PSBWZWdhVHlwZS5URU1QT1JBTCA/IFZlZ2FUeXBlLk5PTUlOQUwgOiBWZWdhVHlwZS5URU1QT1JBTDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIE1hcmtUeXBlLlBPSU5UOlxuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LnNlbGVjdGVkVmFyaWFibGVzWzFdLnR5cGUgPVxuICAgICAgICAgIHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXNbMV0udHlwZSAhPT0gVmVnYVR5cGUuVEVNUE9SQUwgPyBWZWdhVHlwZS5RVUFOVElUQVRJVkUgOiBWZWdhVHlwZS5URU1QT1JBTDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkuc3ViVHlwZSA9PT0gTWFya1N1YlR5cGUuQVJFQVNUQUNLRUQgfHwgdGhpcy5vcHRpb25zQ29weS5zdWJUeXBlID09PSBNYXJrU3ViVHlwZS5ISVNUT1NUQUNLRUQpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkuc2VyaWVzID0gdGhpcy5vcHRpb25zQ29weS5zZXJpZXMgPz8ge307XG4gICAgfVxuXG4gICAgdGhpcy5yZXNldENoYXJ0KCk7XG5cbiAgICBpZiAoc3ViVHlwZSA9PT0gTWFya1N1YlR5cGUuRE9OVVQpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkuaW5uZXJSYWRpdXMgPSB0aGlzLm9wdGlvbnNDb3B5LmlubmVyUmFkaXVzID8/IDUwO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0Q2hhcnQoKSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXM/Lmxlbmd0aCA+IDIpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXMucG9wKCk7XG4gICAgfVxuICB9XG5cbiAgZW1pdE1hbmlmZXN0KCkge1xuICAgIHRoaXMubWFuaWZlc3RNb2RpZmllZC5lbWl0KHtcbiAgICAgIHdpZGdldEluZGV4OiB0aGlzLndpZGdldEluZGV4LFxuICAgICAgbWFuaWZlc3Q6IHtcbiAgICAgICAgLi4udGhpcy5tYW5pZmVzdCxcbiAgICAgICAgb3B0aW9uczogeyAuLi50aGlzLm9wdGlvbnNDb3B5IH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHRyYW5zbGF0ZVRvVmVnYVR5cGUodHlwZTogRmllbGRUeXBlLCBuYW1lOiBzdHJpbmcpOiBWZWdhVHlwZSB7XG4gICAgbGV0IGlkUmVnZXggPSBuZXcgUmVnRXhwKC9faWR8aWRffF9JRHxJRF98X0lkfElkXy8sICdnJyk7XG4gICAgaWYgKGlkUmVnZXgudGVzdChuYW1lKSkge1xuICAgICAgcmV0dXJuIFZlZ2FUeXBlLk9SRElOQUw7XG4gICAgfVxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBGaWVsZFR5cGUuREVDSU1BTDpcbiAgICAgIGNhc2UgRmllbGRUeXBlLklOVEVHRVI6XG4gICAgICBjYXNlIEZpZWxkVHlwZS5MT05HOlxuICAgICAgICByZXR1cm4gVmVnYVR5cGUuUVVBTlRJVEFUSVZFO1xuICAgICAgY2FzZSBGaWVsZFR5cGUuSU5TVEFOVDpcbiAgICAgICAgcmV0dXJuIFZlZ2FUeXBlLlRFTVBPUkFMO1xuICAgICAgY2FzZSBGaWVsZFR5cGUuS0VZV09SRDpcbiAgICAgIGNhc2UgRmllbGRUeXBlLlNUUklORzpcbiAgICAgICAgcmV0dXJuIFZlZ2FUeXBlLk5PTUlOQUw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gVmVnYVR5cGUuTk9NSU5BTDtcbiAgICB9XG4gIH1cblxuICBtaW5UaWNrKHR5cGU6IEZpZWxkVHlwZSk6IHsgdGlja01pblN0ZXA6IG51bWJlciB9IHwgdW5kZWZpbmVkIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgRmllbGRUeXBlLklOVEVHRVI6XG4gICAgICBjYXNlIEZpZWxkVHlwZS5MT05HOlxuICAgICAgICByZXR1cm4geyB0aWNrTWluU3RlcDogMSB9O1xuICAgICAgY2FzZSBGaWVsZFR5cGUuREVDSU1BTDpcbiAgICAgIGNhc2UgRmllbGRUeXBlLklOU1RBTlQ6XG4gICAgICBjYXNlIEZpZWxkVHlwZS5LRVlXT1JEOlxuICAgICAgY2FzZSBGaWVsZFR5cGUuU1RSSU5HOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICB0cmlnZ2VyKCkge1xuICAgIHRoaXMudHJpZ2dlckNhbGN1bGF0ZVBvc3NpYmxlQXR0cmlidXRlcyQubmV4dCgpO1xuICB9XG5cbiAgcHJvcG9zZVRpdGxlKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMub3B0aW9uc0NvcHkudHlwZSA9PT0gTWFya1R5cGUuUkFEQVIpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9uc0NvcHkucmFkYXI/LmNvbXBhcmUgPT09ICdpdGVtJykge1xuICAgICAgICAgIHRoaXMub3B0aW9uc0NvcHkudGl0bGUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQuY2hhcnQucmFkYXIudGl0bGVJdGVtJywge1xuICAgICAgICAgICAgcHJvcHM6ICh0aGlzLm9wdGlvbnNDb3B5LnJhZGFyLnByb3BzIHx8IFtdKS5qb2luKCcsICcpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9uc0NvcHkucmFkYXI/LmNvbXBhcmUgPT09ICd2YWx1ZScpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LnRpdGxlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Bwcnkud2lkZ2V0LmNoYXJ0LnJhZGFyLnRpdGxlTGlzdCcsIHtcbiAgICAgICAgICAgIGtleTogdGhpcy5vcHRpb25zQ29weS5yYWRhci5rZXlQcm9wID8/IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5jaGFydC5yYWRhci5kZWZpbmVLZXknKSxcbiAgICAgICAgICAgIHZhbHVlOlxuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LnJhZGFyLnZhbHVlUHJvcCA/PyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQuY2hhcnQucmFkYXIuZGVmaW5lVmFsdWUnKSxcbiAgICAgICAgICAgIGNhdGVnb3J5OlxuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LnJhZGFyLmNhdGVnb3J5UHJvcCA/P1xuICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQuY2hhcnQucmFkYXIuZGVmaW5lQ2F0ZWdvcnknKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRpb25zQ29weS50eXBlID09PSBNYXJrVHlwZS5DSVJDTEVfUEFDSykge1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LnRpdGxlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Bwcnkud2lkZ2V0LmNoYXJ0LmNpcmNsZS50aXRsZScsIHtcbiAgICAgICAgICBmaWVsZDogdGhpcy5vcHRpb25zQ29weS5wYWNraW5nPy5wYWNrRmllbGQgPz8gJydcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIGNoYW5nZUlubmVyUmFkaXVzKCRldmVudDogc3RyaW5nKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHRoaXMub3B0aW9uc0NvcHkuaW5uZXJSYWRpdXMgPSBwYXJzZUludCgkZXZlbnQsIDEwKTtcbiAgfVxuXG4gIG9wZW5TZXR0aW5ncygpIHtcbiAgICAodGhpcy5vcGVuJCBhcyBTdWJqZWN0PHZvaWQ+KS5uZXh0KHVuZGVmaW5lZCk7XG4gIH1cblxuICB0b2dnbGVTZXJpZXMoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoJGV2ZW50KSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LnNlcmllcyA9IHt9O1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdGhpcy5vcHRpb25zQ29weS5zZXJpZXM7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlU2VyaWVzKCRldmVudDogYW55KSB7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnNDb3B5LnNlcmllcykge1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5zZXJpZXMgPSB7fTtcbiAgICB9XG4gICAgdGhpcy5vcHRpb25zQ29weS5zZXJpZXMuZ3JvdXBCeSA9ICRldmVudDtcbiAgfVxuXG4gIGNoYW5nZVNlcmllc1NjaGVtZSgkZXZlbnQ6IGFueSkge1xuICAgIGlmICghdGhpcy5vcHRpb25zQ29weS5zZXJpZXMpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkuc2VyaWVzID0ge307XG4gICAgfVxuICAgIHRoaXMub3B0aW9uc0NvcHkuc2VyaWVzLnNjaGVtZSA9ICRldmVudDtcbiAgfVxuXG4gIHRvZ2dsZVNlcmllc0xlZ2VuZCgkZXZlbnQ6IGFueSkge1xuICAgIHRoaXMub3B0aW9uc0NvcHkubGVnZW5kID0gJGV2ZW50O1xuICB9XG5cbiAgdG9nZ2xlVG9vbHRpcCgkZXZlbnQ6IGFueSkge1xuICAgIHRoaXMub3B0aW9uc0NvcHkudG9vbHRpcCA9ICRldmVudDtcbiAgfVxuXG4gIGF4ZUxhYmVsKGk6IG51bWJlciwgb3B0aW9uc0NvcHk6IENoYXJ0V2lkZ2V0T3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zQ29weT8udHlwZSA9PT0gTWFya1R5cGUuQVJDKSB7XG4gICAgICByZXR1cm4gaSA9PT0gMCA/ICdAcHJ5LndpZGdldC5jaGFydC5lbmNvZGluZy5ncm91cCcgOiAnQHByeS53aWRnZXQuY2hhcnQuZW5jb2RpbmcudmFsdWVzJztcbiAgICB9XG4gICAgcmV0dXJuIGkgPT09IDAgPyAnQHByeS53aWRnZXQuY2hhcnQuZW5jb2RpbmcuaG9yaXpvbnRhbCcgOiAnQHByeS53aWRnZXQuY2hhcnQuZW5jb2RpbmcudmVydGljYWwnO1xuICB9XG5cbiAgaGFzTm9UeXBlKG9wdGlvbnM6IENoYXJ0V2lkZ2V0T3B0aW9ucykge1xuICAgIHJldHVybiAhb3B0aW9ucyB8fCAhb3B0aW9ucy50eXBlIHx8IG9wdGlvbnMudHlwZS5pbmNsdWRlcygndW5kZWZpbmVkJykgfHwgb3B0aW9ucy50eXBlLmluY2x1ZGVzKCdudWxsJyk7XG4gIH1cblxuICBzY2hlbWUoKSB7XG4gICAgcmV0dXJuIHZlZ2Euc2NoZW1lKHRoaXMub3B0aW9uc0NvcHkuc2VyaWVzPy5zY2hlbWUgPz8gJycpO1xuICB9XG5cbiAgdG9nZ2xlU3BlY1RvTWVyZ2UoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoJGV2ZW50KSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LnNwZWNUb01lcmdlID0ge307XG4gICAgICB0aGlzLmFkdmFuY2VkRWRpdCA9ICd7fSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB0aGlzLm9wdGlvbnNDb3B5LnNwZWNUb01lcmdlO1xuICAgICAgdGhpcy5hZHZhbmNlZEVkaXQgPSAne30nO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUFkdmFuY2VkRWRpdCgkZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHZhbHVlID0gJGV2ZW50Py50YXJnZXQ/LnZhbHVlID8/ICRldmVudDtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkuc3BlY1RvTWVyZ2UgPSBKU09OLnBhcnNlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5hZHZhbmNlZEVkaXQgPSBKU09OLnN0cmluZ2lmeSh0aGlzLm9wdGlvbnNDb3B5LnNwZWNUb01lcmdlLCB1bmRlZmluZWQsIDQpO1xuICAgICAgICB0aGlzLmludmFsaWRKc29uID0gZmFsc2U7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ludmFsaWQganNvbiBwcm92aWRlZCcpO1xuICAgICAgICB0aGlzLmludmFsaWRKc29uID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB0aGlzLm9wdGlvbnNDb3B5LnNwZWNUb01lcmdlO1xuICAgICAgdGhpcy5hZHZhbmNlZEVkaXQgPSAne30nO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIHRvSW1hZ2UoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgcmVzb2x2ZSh0aGlzLnZlZ2EubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdjYW52YXMnKVswXS50b0RhdGFVUkwoJ2ltYWdlL3BuZycpKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPHByeS13aWRnZXQtY2hhcnQtY3NzPjwvcHJ5LXdpZGdldC1jaGFydC1jc3M+XG48ZGl2IGNsYXNzPVwiby13aWRnZXQgby13aWRnZXQtLWNoYXJ0XCI+XG4gIDxwcnktd2lkZ2V0LWhlYWRlclxuICAgIFtkYXRhc291cmNlSWRzXT1cIihkYXRhc291cmNlSWRzJCB8IGFzeW5jKSA/PyBbXVwiXG4gICAgKm5nSWY9XCJkaXNwbGF5SGVhZGVyJCB8IGFzeW5jXCJcbiAgICBbd2lkZ2V0SW5kZXhdPVwid2lkZ2V0SW5kZXhcIlxuICAgIFttYW5pZmVzdF09XCJtYW5pZmVzdFwiXG4gICAgKG1hbmlmZXN0TW9kaWZpZWQpPVwibWFuaWZlc3RNb2RpZmllZC5lbWl0KCRldmVudClcIlxuICAgICNoZWFkZXJcbiAgICBbaGVhZGVyT3B0aW9uc109XCIoZGlzcGxheUhlYWRlciQgfCBhc3luYykgPz8ge31cIlxuICA+XG4gICAgPHByeS1zZXR0aW5nc1xuICAgICAgKHNhdmVUcmlnZ2VyZWQpPVwiZW1pdE1hbmlmZXN0KClcIlxuICAgICAgKGNoYW5nZVRpdGxlKT1cImNoYW5nZVdpZGdldFRpdGxlKCRldmVudClcIlxuICAgICAgW2hlYWRlclByZXNlbnRdPVwiZGlzcGxheUhlYWRlciQgfCBhc3luY1wiXG4gICAgICBbaXNEaXNhYmxlXT1cIihmaWx0ZXJEYXRhRm9yT3B0aW9uc0NvcHkkIHwgYXN5bmMpPy5sZW5ndGggPT09IDAgfHwgaGFzTm9UeXBlKG9wdGlvbnNDb3B5KVwiXG4gICAgICBbd2lkZ2V0SW5kZXhdPVwid2lkZ2V0SW5kZXhcIlxuICAgICAgW29wZW4kXT1cIm9wZW4kXCJcbiAgICAgIFtoZWFkZXJdPVwiaGVhZGVyXCJcbiAgICAgIGNsYXNzPVwiby1zZXR0aW5nc1wiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19maWVsZHMgLWNvbmRlbnNlZFwiPlxuICAgICAgICA8cHJ5LWVkaXQtaW5wdXRcbiAgICAgICAgICBsYWJlbD1cIkBwcnkud2lkZ2V0LmNoYXJ0LnRpdGxlXCJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VDaGFydFRpdGxlKCRldmVudClcIlxuICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmN1c3RvbVRpdGxlID8/IG9wdGlvbnNDb3B5LnRpdGxlXCJcbiAgICAgICAgPjwvcHJ5LWVkaXQtaW5wdXQ+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoZmlsdGVyRGF0YUZvck9wdGlvbnNDb3B5JCB8IGFzeW5jKT8ubGVuZ3RoID09PSAwOyBlbHNlIGRhdGFcIj5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwiYS1sYWJlbCBhLWxhYmVsLS1oZWxwIC1lcnJvclwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC5wYXJhbXMubm9QYXJhbXMnIHwgaTE4biB9fTwvcD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2RhdGE+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwib3B0aW9uc0NvcHk/LnR5cGUgIT09IE1hcmtUeXBlLlJBREFSXCI+XG4gICAgICAgICAgICAgIHt7ICdAcHJ5LndpZGdldC5jaGFydC5wYXJhbXMubXVsdGlwbGVQYXJhbXMnIHwgaTE4biB9fXt7IChmaWx0ZXJEYXRhRm9yT3B0aW9uc0NvcHkkIHwgYXN5bmMpPy5sZW5ndGggfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgKm5nSWY9XCJvcHRpb25zQ29weVwiIGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImNoYXJ0X3R5cGVcIj57eyAnQHByeS53aWRnZXQuY2hhcnQudHlwZScgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlVHlwZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtpdGVtc109XCJ0eXBlT3B0aW9uc1wiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS50eXBlICsgJy0nICsgb3B0aW9uc0NvcHkuc3ViVHlwZVwiXG4gICAgICAgICAgICBpMThuUHJlZml4PVwiQHByeS53aWRnZXQuY2hhcnQubWFya1R5cGUuXCJcbiAgICAgICAgICAgIGJpbmRMYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcbiAgICAgICAgICAgIGlkPVwiY2hhcnRfdHlwZVwiXG4gICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvbnNDb3B5Py50eXBlICE9PSBNYXJrVHlwZS5SQURBUiAmJiBvcHRpb25zQ29weT8udHlwZSAhPT0gTWFya1R5cGUuQ0lSQ0xFX1BBQ0tcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvbnNDb3B5Py5zdWJUeXBlID09PSBNYXJrU3ViVHlwZS5ET05VVFwiPlxuICAgICAgICAgIDxwcnktcmFuZ2VcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmlubmVyUmFkaXVzXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUlubmVyUmFkaXVzKCRldmVudClcIlxuICAgICAgICAgICAgbGFiZWxUcmFuc2xhdGU9XCJAcHJ5LndpZGdldC5jaGFydC5pbm5lclJhZGl1c1wiXG4gICAgICAgICAgICBtaW49XCIxXCJcbiAgICAgICAgICAgIG1heD1cIjUwMFwiXG4gICAgICAgICAgPjwvcHJ5LXJhbmdlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nRm9yPVwibGV0IHZhcmlhYmxlRGVmIG9mIG9wdGlvbnNDb3B5Py5zZWxlY3RlZFZhcmlhYmxlczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgY2xhc3M9XCJvLXNldHRpbmdzX19wb3B1cF9fY29udGVudF9fZmllbGRzIC1jb25kZW5zZWRcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiICpuZ0lmPVwiaSA9PT0gMVwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImFnZ3JlZ2F0aW9uc1wiPnt7ICdAcHJ5LndpZGdldC5jaGFydC5lbmNvZGluZy5ncm91cCcgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUFnZ3JlZ2F0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgICAqbmdJZj1cImkgPT09IDFcIlxuICAgICAgICAgICAgICBbaXRlbXNdPVwiYWdncmVnYXRpb25zXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuYWdncmVnYXRpb25cIlxuICAgICAgICAgICAgICBpZD1cImFnZ3JlZ2F0aW9uc1wiXG4gICAgICAgICAgICAgIGkxOG5QcmVmaXg9XCJAcHJ5LndpZGdldC5jaGFydC5hZ2dyZWdhdGlvbi5cIlxuICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIiAqbmdJZj1cImkgIT09IDEgfHwgb3B0aW9uc0NvcHkuYWdncmVnYXRpb24gIT09ICdjb3VudCdcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJhZ2dyZWdhdGlvbl9wcm9wZXJ0eVwiPlxuICAgICAgICAgICAgICB7eyBheGVMYWJlbChpLCBvcHRpb25zQ29weSkgfCBpMThuIH19XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlUHJvcGVydHkoJGV2ZW50LCBpKVwiXG4gICAgICAgICAgICAgIFtpdGVtc109XCIoaSAhPT0gMSA/IHZhcmlhYmxlQXR0cmlidXRlcyQgOiBwb3NzaWJsZVNlY29uZGFyeUF0dHJpYnV0ZXMkKSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwidmFyaWFibGVEZWYubmFtZVwiXG4gICAgICAgICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJ0ZWNobmljYWxOYW1lXCJcbiAgICAgICAgICAgICAgaWQ9XCJhZ2dyZWdhdGlvbl9wcm9wZXJ0eVwiXG4gICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPHByeS1lZGl0LWlucHV0XG4gICAgICAgICAgICBsYWJlbD1cIkBwcnkud2lkZ2V0LmNoYXJ0LmRhdGFMYWJlbFwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VMYWJlbCgkZXZlbnQsIGkpXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cInZhcmlhYmxlRGVmLmxhYmVsXCJcbiAgICAgICAgICA+PC9wcnktZWRpdC1pbnB1dD5cblxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJ2YXJpYWJsZURlZi50eXBlID09PSAndGVtcG9yYWwnXCIgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJjaGFydF90aW1lVW5pdFwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC50aW1lVW5pdCcgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVRpbWVVbml0KCRldmVudCwgdmFyaWFibGVEZWYpXCJcbiAgICAgICAgICAgICAgW2l0ZW1zXT1cInRpbWVVbml0c1wiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cInZhcmlhYmxlRGVmLnRpbWVVbml0XCJcbiAgICAgICAgICAgICAgaTE4blByZWZpeD1cIkBwcnkud2lkZ2V0LmNoYXJ0LnRpbWVVbml0TGlzdC5cIlxuICAgICAgICAgICAgICBpZD1cImNoYXJ0X3RpbWVVbml0XCJcbiAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwidmFyaWFibGVEZWYudHlwZSA9PT0gJ3F1YW50aXRhdGl2ZScgJiYgb3B0aW9uc0NvcHk/LnR5cGUgIT09ICdhcmMnXCIgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxwcnktY2hlY2tib3ggKG5nTW9kZWxDaGFuZ2UpPVwidG9nZ2xlT3JpZ2luQXRaZXJvKHZhcmlhYmxlRGVmLCAkZXZlbnQpXCIgW25nTW9kZWxdPVwidmFyaWFibGVEZWYub3JpZ2luMFwiXG4gICAgICAgICAgICAgID57eyAnQHByeS53aWRnZXQuY2hhcnQub3JpZ2luJyB8IGkxOG4gfX1cbiAgICAgICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiby1zZXR0aW5nc19fcG9wdXBfX2NvbnRlbnRfX2ZpZWxkcyAtY29uZGVuc2VkXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgPHByeS1jaGVja2JveFxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ0b2dnbGVTZXJpZXMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cIiEhb3B0aW9uc0NvcHkuc2VyaWVzXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJvcHRpb25zQ29weT8udHlwZSAhPT0gTWFya1R5cGUuQVJDICYmIG9wdGlvbnNDb3B5Py50eXBlICE9PSBNYXJrVHlwZS5SQURBUlwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LnN1YlR5cGUgPT09IE1hcmtTdWJUeXBlLkFSRUFTVEFDS0VEIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zQ29weS5zdWJUeXBlID09PSBNYXJrU3ViVHlwZS5ISVNUT1NUQUNLRURcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPnt7ICdAcHJ5LndpZGdldC5jaGFydC5zZXJpZXMnIHwgaTE4biB9fVxuICAgICAgICAgICAgPC9wcnktY2hlY2tib3g+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiXG4gICAgICAgICAgICAqbmdJZj1cIm9wdGlvbnNDb3B5Py50eXBlICE9PSBNYXJrVHlwZS5BUkMgJiYgb3B0aW9uc0NvcHk/LnR5cGUgIT09IE1hcmtUeXBlLlJBREFSICYmICEhb3B0aW9uc0NvcHkuc2VyaWVzXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiY2hhcnRfc2VyaWVzQXR0clwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC5zZXJpZXNBdHRyJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlU2VyaWVzKCRldmVudClcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5zZXJpZXMuZ3JvdXBCeSFcIlxuICAgICAgICAgICAgICBbaXRlbXNdPVwidmFyaWFibGVBdHRyaWJ1dGVzJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgIGJpbmRWYWx1ZT1cIm5hbWVcIlxuICAgICAgICAgICAgICBpZD1cImNoYXJ0X3Nlcmllc0F0dHJcIlxuICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIChvcHRpb25zQ29weT8udHlwZSA9PT0gTWFya1R5cGUuQVJDIHx8IG9wdGlvbnNDb3B5Py50eXBlID09PSBNYXJrVHlwZS5SQURBUiB8fCAhIW9wdGlvbnNDb3B5LnNlcmllcykgJiZcbiAgICAgICAgICAgICAgc2NoZW1lc1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiY2hhcnRfc2VyaWVzU2NoZW1lXCIgW3RpdGxlXT1cIidAcHJ5LndpZGdldC5jaGFydC5zZXJpZXNTY2hlbWVBbHQnIHwgaTE4blwiPnt7XG4gICAgICAgICAgICAgICdAcHJ5LndpZGdldC5jaGFydC5zZXJpZXNTY2hlbWUnIHwgaTE4blxuICAgICAgICAgICAgfX08L2xhYmVsPlxuICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlU2VyaWVzU2NoZW1lKCRldmVudClcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5zZXJpZXM/LnNjaGVtZSFcIlxuICAgICAgICAgICAgICBbaXRlbXNdPVwic2NoZW1lc1wiXG4gICAgICAgICAgICAgIGlkPVwiY2hhcnRfc2VyaWVzU2NoZW1lXCJcbiAgICAgICAgICAgICAgaTE4blByZWZpeD1cIkBwcnkud2lkZ2V0LmNoYXJ0LnNjaGVtZS5cIlxuICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICAgIGJpbmRMYWJlbD1cImlkXCJcbiAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiby13aWRnZXQtLWNoYXJ0LWNvbG9yLXRodW1iXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBzY2hlbWVDb2xvciBvZiBzY2hlbWUoKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiby13aWRnZXQtLWNoYXJ0LWNvbG9yLXRodW1iLWl0ZW1cIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwic2NoZW1lQ29sb3JcIlxuICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJzY2hlbWVDb2xvclwiXG4gICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICA8cHJ5LWNoZWNrYm94XG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInRvZ2dsZVNlcmllc0xlZ2VuZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwiISFvcHRpb25zQ29weS5sZWdlbmQhXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJvcHRpb25zQ29weT8udHlwZSAhPT0gTWFya1R5cGUuUkFEQVIgfHwgISFvcHRpb25zQ29weS5zZXJpZXNcIlxuICAgICAgICAgICAgICA+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LnNlcmllc0xlZ2VuZCcgfCBpMThuIH19XG4gICAgICAgICAgICA8L3ByeS1jaGVja2JveD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxwcnktY2hlY2tib3ggKG5nTW9kZWxDaGFuZ2UpPVwidG9nZ2xlVG9vbHRpcCgkZXZlbnQpXCIgW25nTW9kZWxdPVwiISFvcHRpb25zQ29weS50b29sdGlwIVwiXG4gICAgICAgICAgICAgID57eyAnQHByeS53aWRnZXQuY2hhcnQudG9vbHRpcCcgfCBpMThuIH19XG4gICAgICAgICAgICA8L3ByeS1jaGVja2JveD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvbnNDb3B5Py50eXBlID09PSBNYXJrVHlwZS5SQURBUiAmJiBvcHRpb25zQ29weS5yYWRhciAhPT0gdW5kZWZpbmVkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJvLXNldHRpbmdzX19wb3B1cF9fY29udGVudF9fZmllbGRzIC1jb25kZW5zZWRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ0cmlnZ2VyKCk7IHByb3Bvc2VUaXRsZSgpXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJvcHRpb25zQ29weS5yYWRhci5jb21wYXJlXCJcbiAgICAgICAgICAgICAgW2l0ZW1zXT1cImNvbXBhcmlzb25zXCJcbiAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcbiAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9uc0NvcHkucmFkYXIuY29tcGFyZSA9PT0gJ2l0ZW0nXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidHJpZ2dlcigpOyBwcm9wb3NlVGl0bGUoKVwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJvcHRpb25zQ29weS5yYWRhci5wcm9wc1wiXG4gICAgICAgICAgICAgICAgW2l0ZW1zXT1cIm51bWVyaWNQcm9wZXJ0aWVzJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW2Nsb3NlT25TZWxlY3RdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgICAgIGJpbmRWYWx1ZT1cIm5hbWVcIlxuICAgICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9uc0NvcHkucmFkYXIuY29tcGFyZSA9PT0gJ3ZhbHVlJ1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiY29tcGFyaXNvbl9rZXlcIj57eyAnQHByeS53aWRnZXQuY2hhcnQuY29tcGFyaXNvbi5rZXknIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidHJpZ2dlcigpOyBwcm9wb3NlVGl0bGUoKVwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJvcHRpb25zQ29weS5yYWRhci5rZXlQcm9wXCJcbiAgICAgICAgICAgICAgICBbaXRlbXNdPVwidGV4dFByb3BlcnRpZXMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgICAgIGJpbmRWYWx1ZT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgIGlkPVwiY29tcGFyaXNvbl9rZXlcIlxuICAgICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImNvbXBhcmlzb25fdmFsdWVzXCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LmNvbXBhcmlzb24udmFsdWVzJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInRyaWdnZXIoKTsgcHJvcG9zZVRpdGxlKClcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwib3B0aW9uc0NvcHkucmFkYXIudmFsdWVQcm9wXCJcbiAgICAgICAgICAgICAgICBbaXRlbXNdPVwibnVtZXJpY1Byb3BlcnRpZXMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgICAgIGJpbmRWYWx1ZT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgIGlkPVwiY29tcGFyaXNvbl92YWx1ZXNcIlxuICAgICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImNvbXBhcmlzb25fY2F0ZWdvcnlcIj57e1xuICAgICAgICAgICAgICAgICdAcHJ5LndpZGdldC5jaGFydC5jb21wYXJpc29uLmNhdGVnb3J5JyB8IGkxOG5cbiAgICAgICAgICAgICAgfX08L2xhYmVsPlxuICAgICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInRyaWdnZXIoKTsgcHJvcG9zZVRpdGxlKClcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwib3B0aW9uc0NvcHkucmFkYXIuY2F0ZWdvcnlQcm9wXCJcbiAgICAgICAgICAgICAgICBbaXRlbXNdPVwidGV4dFByb3BlcnRpZXMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgICAgIGJpbmRWYWx1ZT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgIGlkPVwiY29tcGFyaXNvbl9jYXRlZ29yeVwiXG4gICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2NoZW1lc1wiPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgIGNsYXNzPVwiYS1sYWJlbFwiXG4gICAgICAgICAgICAgIGZvcj1cImNoYXJ0X3Nlcmllc1NjaGVtZV9yYWRhclwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCInQHByeS53aWRnZXQuY2hhcnQuc2VyaWVzU2NoZW1lQWx0JyB8IGkxOG5cIlxuICAgICAgICAgICAgICA+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LnNlcmllc1NjaGVtZScgfCBpMThuIH19PC9sYWJlbFxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlU2VyaWVzU2NoZW1lKCRldmVudClcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5zZXJpZXM/LnNjaGVtZSFcIlxuICAgICAgICAgICAgICBbaXRlbXNdPVwic2NoZW1lc1wiXG4gICAgICAgICAgICAgIGlkPVwiY2hhcnRfc2VyaWVzU2NoZW1lX3JhZGFyXCJcbiAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb25zQ29weT8udHlwZSA9PT0gTWFya1R5cGUuQ0lSQ0xFX1BBQ0sgJiYgb3B0aW9uc0NvcHkucGFja2luZyAhPT0gdW5kZWZpbmVkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJvLXNldHRpbmdzX19wb3B1cF9fY29udGVudF9fZmllbGRzIC1jb25kZW5zZWRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiY2hhcnRfY2lyY2xlX2lkXCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LmNpcmNsZS5pZCcgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInRyaWdnZXIoKTsgcHJvcG9zZVRpdGxlKClcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm9wdGlvbnNDb3B5LnBhY2tpbmcuaWRcIlxuICAgICAgICAgICAgICBbaXRlbXNdPVwidmFyaWFibGVBdHRyaWJ1dGVzJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgIGJpbmRWYWx1ZT1cIm5hbWVcIlxuICAgICAgICAgICAgICBpZD1cImNoYXJ0X2NpcmNsZV9pZFwiXG4gICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImNoYXJ0X2NpcmNsZV9waWRcIj57eyAnQHByeS53aWRnZXQuY2hhcnQuY2lyY2xlLnBpZCcgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInRyaWdnZXIoKTsgcHJvcG9zZVRpdGxlKClcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm9wdGlvbnNDb3B5LnBhY2tpbmcucGFyZW50SWRcIlxuICAgICAgICAgICAgICBbaXRlbXNdPVwidmFyaWFibGVBdHRyaWJ1dGVzJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgIGJpbmRWYWx1ZT1cIm5hbWVcIlxuICAgICAgICAgICAgICBpZD1cImNoYXJ0X2NpcmNsZV9waWRcIlxuICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJjaGFydF9jaXJjbGVfZmllbGRcIj57eyAnQHByeS53aWRnZXQuY2hhcnQuY2lyY2xlLmZpZWxkJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidHJpZ2dlcigpOyBwcm9wb3NlVGl0bGUoKVwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwib3B0aW9uc0NvcHkucGFja2luZy5wYWNrRmllbGRcIlxuICAgICAgICAgICAgICBbaXRlbXNdPVwibnVtZXJpY1Byb3BlcnRpZXMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgYmluZFZhbHVlPVwibmFtZVwiXG4gICAgICAgICAgICAgIGlkPVwiY2hhcnRfY2lyY2xlX2ZpZWxkXCJcbiAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiY2hhcnRfY2lyY2xlX3Rvb2x0aXBcIj57eyAnQHByeS53aWRnZXQuY2hhcnQuY2lyY2xlLnRvb2x0aXAnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ0cmlnZ2VyKCk7IHByb3Bvc2VUaXRsZSgpXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJvcHRpb25zQ29weS5wYWNraW5nLnRvb2x0aXBcIlxuICAgICAgICAgICAgICBbaXRlbXNdPVwidmFyaWFibGVBdHRyaWJ1dGVzJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgIGJpbmRWYWx1ZT1cIm5hbWVcIlxuICAgICAgICAgICAgICBpZD1cImNoYXJ0X2NpcmNsZV90b29sdGlwXCJcbiAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJvLXNldHRpbmdzX19wb3B1cF9fY29udGVudF9fZmllbGRzIC1jb25kZW5zZWRcIj5cbiAgICAgICAgPHByeS1jaGVja2JveCAobmdNb2RlbENoYW5nZSk9XCJ0b2dnbGVTcGVjVG9NZXJnZSgkZXZlbnQpXCIgW25nTW9kZWxdPVwiISFvcHRpb25zQ29weS5zcGVjVG9NZXJnZVwiXG4gICAgICAgICAgPnt7ICdAcHJ5LndpZGdldC5jaGFydC5tb3JlT3B0aW9ucycgfCBpMThuIH19XG4gICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhIW9wdGlvbnNDb3B5LnNwZWNUb01lcmdlXCI+XG4gICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJhZHZhbmNlZEVkaXRcIlxuICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInVwZGF0ZUFkdmFuY2VkRWRpdCgkZXZlbnQpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiby1zZXR0aW5nc19fcG9wdXBfX2NvbnRlbnRfX2FyZWFcIlxuICAgICAgICAgICAgW2NsYXNzLi1pbnZhbGlkXT1cImludmFsaWRKc29uXCJcbiAgICAgICAgICA+PC90ZXh0YXJlYT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L3ByeS1zZXR0aW5ncz5cbiAgPC9wcnktd2lkZ2V0LWhlYWRlcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzQ2hhcnRWYWxpZCQgfCBhc3luY1wiPlxuICAgIDxkaXZcbiAgICAgICN2ZWdhXG4gICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIlxuICAgICAgICAoKHdpZGdldFNpemUkIHwgYXN5bmMpPy5oZWlnaHQgPz8gMCkgLSAoKGRpc3BsYXlIZWFkZXIkIHwgYXN5bmMpID8gMSA6IDApICogV0lER0VUX0hFQURFUl9IRUlHSFRcbiAgICAgIFwiXG4gICAgICBbc3R5bGUud2lkdGgucHhdPVwiKHdpZGdldFNpemUkIHwgYXN5bmMpPy53aWR0aFwiXG4gICAgPjwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIShpc0NoYXJ0VmFsaWQkIHwgYXN5bmMpXCI+XG4gICAgPGRpdiBjbGFzcz1cIm8td2lkZ2V0X19jaG9vc2UtcGFyYW1ldGVyc1wiPlxuICAgICAgPHAgY2xhc3M9XCJhLXBcIj5cbiAgICAgICAge3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LmNob29zZVBhcmFtZXRlcnMnIHwgaTE4biB9fVxuICAgICAgPC9wPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9wZW5TZXR0aW5ncygpXCIgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tcHJpbWFyeVwiPlxuICAgICAgICA8cHJ5LWljb24gW2hlaWdodF09XCIyMFwiIFt3aWR0aF09XCIyMFwiIGljb25Tdmc9XCJjb250cm9sXCI+PC9wcnktaWNvbj5cbiAgICAgICAgPHNwYW4+e3sgJ0Bwcnkud2lkZ2V0LnNldHRpbmdzLnRpdGxlJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cbiJdfQ==