@sapui5/sap.fe.macros 1.141.2 → 1.143.0

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 (257) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Breadcrumbs.js +4 -10
  4. package/src/sap/fe/macros/Breadcrumbs.tsx +2 -8
  5. package/src/sap/fe/macros/Chart.js +34 -23
  6. package/src/sap/fe/macros/Chart.tsx +25 -11
  7. package/src/sap/fe/macros/CollaborativeDraftHandler.js +47 -36
  8. package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +50 -31
  9. package/src/sap/fe/macros/CollectionBindingInfo.js +8 -2
  10. package/src/sap/fe/macros/CollectionBindingInfo.ts +11 -6
  11. package/src/sap/fe/macros/CommonHelper.js +14 -24
  12. package/src/sap/fe/macros/CommonHelper.ts +18 -25
  13. package/src/sap/fe/macros/ConditionalSwitch.js +1 -2
  14. package/src/sap/fe/macros/ConditionalSwitch.tsx +0 -1
  15. package/src/sap/fe/macros/ConditionalSwitchProperty.js +1 -3
  16. package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +0 -2
  17. package/src/sap/fe/macros/Field.js +34 -17
  18. package/src/sap/fe/macros/Field.ts +64 -32
  19. package/src/sap/fe/macros/FooterContent.js +7 -3
  20. package/src/sap/fe/macros/FooterContent.tsx +8 -13
  21. package/src/sap/fe/macros/KPITag.js +6 -6
  22. package/src/sap/fe/macros/KPITag.tsx +8 -6
  23. package/src/sap/fe/macros/MacroAPI.js +4 -3
  24. package/src/sap/fe/macros/MacroAPI.ts +3 -3
  25. package/src/sap/fe/macros/MessageButton.js +4 -3
  26. package/src/sap/fe/macros/MessageButton.tsx +7 -3
  27. package/src/sap/fe/macros/MicroChart.js +12 -7
  28. package/src/sap/fe/macros/MicroChart.tsx +9 -3
  29. package/src/sap/fe/macros/MultiValueField.js +22 -36
  30. package/src/sap/fe/macros/MultiValueField.tsx +34 -66
  31. package/src/sap/fe/macros/RichTextEditor.js +3 -4
  32. package/src/sap/fe/macros/RichTextEditor.tsx +2 -3
  33. package/src/sap/fe/macros/Share.js +7 -7
  34. package/src/sap/fe/macros/Share.tsx +9 -6
  35. package/src/sap/fe/macros/Status.js +39 -11
  36. package/src/sap/fe/macros/Status.tsx +25 -5
  37. package/src/sap/fe/macros/ValueHelp.js +5 -2
  38. package/src/sap/fe/macros/ValueHelp.tsx +5 -0
  39. package/src/sap/fe/macros/ai/EasyFillDialog.js +2 -1
  40. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +1 -0
  41. package/src/sap/fe/macros/ai/EasyFilterBar.js +7 -34
  42. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +6 -35
  43. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +31 -7
  44. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +33 -6
  45. package/src/sap/fe/macros/ai/SummarizationButton.js +6 -4
  46. package/src/sap/fe/macros/ai/SummarizationButton.tsx +5 -3
  47. package/src/sap/fe/macros/chart/Action.js +25 -2
  48. package/src/sap/fe/macros/chart/Action.ts +13 -0
  49. package/src/sap/fe/macros/chart/ActionGroup.js +25 -2
  50. package/src/sap/fe/macros/chart/ActionGroup.ts +13 -0
  51. package/src/sap/fe/macros/chart/ChartDelegate.js +29 -8
  52. package/src/sap/fe/macros/chart/ChartDelegate.ts +46 -14
  53. package/src/sap/fe/macros/chart/MdcChartTemplate.js +58 -12
  54. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +75 -13
  55. package/src/sap/fe/macros/chart/OverflowGroup.js +62 -0
  56. package/src/sap/fe/macros/chart/OverflowGroup.ts +22 -0
  57. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +7 -7
  58. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +3 -2
  59. package/src/sap/fe/macros/controls/FileWrapper.js +11 -5
  60. package/src/sap/fe/macros/controls/FileWrapper.ts +10 -4
  61. package/src/sap/fe/macros/controls/FilterBar.js +39 -3
  62. package/src/sap/fe/macros/controls/FilterBar.ts +42 -1
  63. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +3 -1
  64. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -0
  65. package/src/sap/fe/macros/controls/RadioButtons.js +18 -5
  66. package/src/sap/fe/macros/controls/RadioButtons.tsx +10 -1
  67. package/src/sap/fe/macros/coreUI/CreateDialog.js +3 -3
  68. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +2 -2
  69. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +40 -12
  70. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +48 -9
  71. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +4 -2
  72. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +3 -1
  73. package/src/sap/fe/macros/field/FieldFormatOptions.js +4 -4
  74. package/src/sap/fe/macros/field/FieldFormatOptions.ts +2 -2
  75. package/src/sap/fe/macros/field/FieldHelper.js +4 -3
  76. package/src/sap/fe/macros/field/FieldHelper.ts +7 -1
  77. package/src/sap/fe/macros/field/FieldRuntime.js +44 -9
  78. package/src/sap/fe/macros/field/FieldRuntime.ts +72 -8
  79. package/src/sap/fe/macros/field/FieldRuntimeHelper.js +3 -34
  80. package/src/sap/fe/macros/field/FieldRuntimeHelper.ts +28 -53
  81. package/src/sap/fe/macros/field/FieldTemplating.js +5 -4
  82. package/src/sap/fe/macros/field/FieldTemplating.ts +6 -4
  83. package/src/sap/fe/macros/filter/FilterFieldHelper.js +6 -4
  84. package/src/sap/fe/macros/filter/FilterFieldHelper.ts +7 -2
  85. package/src/sap/fe/macros/filter/FilterUtils.js +130 -40
  86. package/src/sap/fe/macros/filter/FilterUtils.ts +167 -45
  87. package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.js +2 -2
  88. package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.ts +1 -1
  89. package/src/sap/fe/macros/filterBar/FilterBar.block.js +4 -3
  90. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +19 -8
  91. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +15 -9
  92. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +36 -17
  93. package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +21 -10
  94. package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +81 -63
  95. package/src/sap/fe/macros/filterBar/UOMValidationDelegate.js +376 -0
  96. package/src/sap/fe/macros/filterBar/UOMValidationDelegate.ts +463 -0
  97. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +4 -3
  98. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +3 -2
  99. package/src/sap/fe/macros/form/Form.block.js +27 -2
  100. package/src/sap/fe/macros/form/Form.block.ts +31 -11
  101. package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -3
  102. package/src/sap/fe/macros/form/FormContainer.block.js +110 -63
  103. package/src/sap/fe/macros/form/FormContainer.block.ts +121 -64
  104. package/src/sap/fe/macros/formatters/TableFormatter.js +13 -10
  105. package/src/sap/fe/macros/formatters/TableFormatter.ts +11 -9
  106. package/src/sap/fe/macros/formatters/VisualFilterFormatter.js +6 -4
  107. package/src/sap/fe/macros/formatters/VisualFilterFormatter.ts +5 -5
  108. package/src/sap/fe/macros/inlineEdit/InlineEdit.js +5 -5
  109. package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +4 -4
  110. package/src/sap/fe/macros/insights/InsightsService.js +3 -2
  111. package/src/sap/fe/macros/insights/InsightsService.ts +2 -1
  112. package/src/sap/fe/macros/internal/DataPoint.js +7 -8
  113. package/src/sap/fe/macros/internal/DataPoint.tsx +6 -9
  114. package/src/sap/fe/macros/internal/field/DisplayStyle.js +8 -6
  115. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +7 -8
  116. package/src/sap/fe/macros/internal/field/EditStyle.js +9 -20
  117. package/src/sap/fe/macros/internal/field/EditStyle.tsx +17 -41
  118. package/src/sap/fe/macros/internal/field/FieldBlockStructure.js +2 -2
  119. package/src/sap/fe/macros/internal/field/FieldBlockStructure.tsx +1 -1
  120. package/src/sap/fe/macros/internal/field/FieldStructure.js +1 -2
  121. package/src/sap/fe/macros/internal/field/FieldStructure.tsx +0 -2
  122. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +7 -7
  123. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +17 -11
  124. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +6 -2
  125. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +5 -1
  126. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.js +9 -6
  127. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.ts +7 -5
  128. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
  129. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +6 -6
  130. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +5 -2
  131. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +2 -2
  132. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +2 -1
  133. package/src/sap/fe/macros/library.js +5 -6
  134. package/src/sap/fe/macros/{library.ts → library.tsx} +3 -1
  135. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +15 -5
  136. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +21 -5
  137. package/src/sap/fe/macros/messagebundle.properties +13 -5
  138. package/src/sap/fe/macros/messagebundle_ar.properties +12 -3
  139. package/src/sap/fe/macros/messagebundle_bg.properties +13 -4
  140. package/src/sap/fe/macros/messagebundle_ca.properties +12 -3
  141. package/src/sap/fe/macros/messagebundle_cnr.properties +12 -3
  142. package/src/sap/fe/macros/messagebundle_cs.properties +11 -2
  143. package/src/sap/fe/macros/messagebundle_cy.properties +12 -3
  144. package/src/sap/fe/macros/messagebundle_da.properties +12 -3
  145. package/src/sap/fe/macros/messagebundle_de.properties +16 -7
  146. package/src/sap/fe/macros/messagebundle_el.properties +13 -4
  147. package/src/sap/fe/macros/messagebundle_en.properties +13 -4
  148. package/src/sap/fe/macros/messagebundle_en_GB.properties +13 -4
  149. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +13 -4
  150. package/src/sap/fe/macros/messagebundle_es.properties +12 -3
  151. package/src/sap/fe/macros/messagebundle_es_MX.properties +12 -3
  152. package/src/sap/fe/macros/messagebundle_et.properties +12 -3
  153. package/src/sap/fe/macros/messagebundle_fi.properties +12 -3
  154. package/src/sap/fe/macros/messagebundle_fr.properties +12 -3
  155. package/src/sap/fe/macros/messagebundle_fr_CA.properties +12 -3
  156. package/src/sap/fe/macros/messagebundle_hi.properties +12 -3
  157. package/src/sap/fe/macros/messagebundle_hr.properties +13 -4
  158. package/src/sap/fe/macros/messagebundle_hu.properties +12 -3
  159. package/src/sap/fe/macros/messagebundle_id.properties +18 -9
  160. package/src/sap/fe/macros/messagebundle_it.properties +12 -3
  161. package/src/sap/fe/macros/messagebundle_iw.properties +12 -3
  162. package/src/sap/fe/macros/messagebundle_ja.properties +12 -3
  163. package/src/sap/fe/macros/messagebundle_kk.properties +11 -2
  164. package/src/sap/fe/macros/messagebundle_ko.properties +13 -4
  165. package/src/sap/fe/macros/messagebundle_lt.properties +12 -3
  166. package/src/sap/fe/macros/messagebundle_lv.properties +12 -3
  167. package/src/sap/fe/macros/messagebundle_mk.properties +12 -3
  168. package/src/sap/fe/macros/messagebundle_ms.properties +12 -3
  169. package/src/sap/fe/macros/messagebundle_nl.properties +12 -3
  170. package/src/sap/fe/macros/messagebundle_no.properties +12 -3
  171. package/src/sap/fe/macros/messagebundle_pl.properties +12 -3
  172. package/src/sap/fe/macros/messagebundle_pt.properties +12 -3
  173. package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -3
  174. package/src/sap/fe/macros/messagebundle_ro.properties +13 -4
  175. package/src/sap/fe/macros/messagebundle_ru.properties +12 -3
  176. package/src/sap/fe/macros/messagebundle_sh.properties +12 -3
  177. package/src/sap/fe/macros/messagebundle_sk.properties +12 -3
  178. package/src/sap/fe/macros/messagebundle_sl.properties +13 -4
  179. package/src/sap/fe/macros/messagebundle_sr.properties +12 -3
  180. package/src/sap/fe/macros/messagebundle_sv.properties +12 -3
  181. package/src/sap/fe/macros/messagebundle_th.properties +11 -2
  182. package/src/sap/fe/macros/messagebundle_tr.properties +12 -3
  183. package/src/sap/fe/macros/messagebundle_uk.properties +12 -3
  184. package/src/sap/fe/macros/messagebundle_vi.properties +13 -4
  185. package/src/sap/fe/macros/messagebundle_zh_CN.properties +12 -3
  186. package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -3
  187. package/src/sap/fe/macros/messages/MessageButton.js +21 -12
  188. package/src/sap/fe/macros/messages/MessageButton.ts +21 -11
  189. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.js +7 -3
  190. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.ts +8 -2
  191. package/src/sap/fe/macros/quickView/QuickView.js +5 -4
  192. package/src/sap/fe/macros/quickView/QuickView.tsx +10 -3
  193. package/src/sap/fe/macros/richtexteditor/ButtonGroup.js +2 -2
  194. package/src/sap/fe/macros/richtexteditor/ButtonGroup.ts +2 -2
  195. package/src/sap/fe/macros/table/Action.js +21 -5
  196. package/src/sap/fe/macros/table/Action.ts +14 -4
  197. package/src/sap/fe/macros/table/ActionGroup.js +15 -2
  198. package/src/sap/fe/macros/table/ActionGroup.ts +8 -0
  199. package/src/sap/fe/macros/table/ActionGroupOverride.js +14 -2
  200. package/src/sap/fe/macros/table/ActionGroupOverride.ts +7 -0
  201. package/src/sap/fe/macros/table/ActionOverride.js +14 -2
  202. package/src/sap/fe/macros/table/ActionOverride.ts +7 -0
  203. package/src/sap/fe/macros/table/ActionsTemplating.js +16 -2
  204. package/src/sap/fe/macros/table/ActionsTemplating.tsx +15 -0
  205. package/src/sap/fe/macros/table/Column.js +3 -2
  206. package/src/sap/fe/macros/table/Column.ts +1 -1
  207. package/src/sap/fe/macros/table/MdcTableTemplate.js +96 -18
  208. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +136 -17
  209. package/src/sap/fe/macros/table/OverflowGroups.js +59 -0
  210. package/src/sap/fe/macros/table/OverflowGroups.ts +27 -0
  211. package/src/sap/fe/macros/table/Table.block.js +74 -30
  212. package/src/sap/fe/macros/table/Table.block.tsx +77 -14
  213. package/src/sap/fe/macros/table/TableAPI.js +175 -132
  214. package/src/sap/fe/macros/table/TableAPI.ts +67 -30
  215. package/src/sap/fe/macros/table/TableDefinition.js +20 -3
  216. package/src/sap/fe/macros/table/TableDefinition.ts +18 -2
  217. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +6 -3
  218. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +12 -9
  219. package/src/sap/fe/macros/table/TableHelper.js +5 -2
  220. package/src/sap/fe/macros/table/TableHelper.ts +5 -2
  221. package/src/sap/fe/macros/table/TableRuntime.js +25 -13
  222. package/src/sap/fe/macros/table/TableRuntime.ts +31 -17
  223. package/src/sap/fe/macros/table/TableSizeHelper.js +4 -4
  224. package/src/sap/fe/macros/table/TableSizeHelper.ts +6 -11
  225. package/src/sap/fe/macros/table/Utils.js +9 -3
  226. package/src/sap/fe/macros/table/Utils.ts +14 -8
  227. package/src/sap/fe/macros/table/delegates/TableDelegate.js +72 -29
  228. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +114 -123
  229. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +41 -15
  230. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +41 -22
  231. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +15 -6
  232. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +14 -5
  233. package/src/sap/fe/macros/table/massEdit/MassEditField.js +1 -1
  234. package/src/sap/fe/macros/table/massEdit/MassEditField.tsx +3 -6
  235. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -3
  236. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +3 -2
  237. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +42 -14
  238. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +49 -19
  239. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +7 -9
  240. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +7 -8
  241. package/src/sap/fe/macros/table/mixin/TableExport.js +1 -1
  242. package/src/sap/fe/macros/table/mixin/TableExport.ts +3 -3
  243. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +3 -4
  244. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +2 -3
  245. package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.js +5 -4
  246. package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.ts +6 -3
  247. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +17 -10
  248. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +24 -9
  249. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.js +4 -4
  250. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.ts +3 -3
  251. package/src/sap/fe/macros/visualfilters/VisualFilter.js +20 -2
  252. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +28 -6
  253. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +6 -3
  254. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +4 -3
  255. package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.js +3 -3
  256. package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.tsx +10 -4
  257. package/src/sap/fe/macros/visualfilters/fragments/InteractiveDonutChart.fragment.xml +1 -1
@@ -436,12 +436,22 @@ export default Object.assign({}, ValueHelpDelegate, {
436
436
  metaModel,
437
437
  filterBarProperties
438
438
  );
439
- if (filterBarProperty && stateItems?.find((item) => item.name === filterBarProperty.name)) {
439
+ if (
440
+ filterBarProperty &&
441
+ stateItems?.find(
442
+ (item) =>
443
+ item.name === filterBarProperty.name &&
444
+ (filterBarProperty.maxConditions === undefined || filterBarProperty.maxConditions === 1)
445
+ )
446
+ ) {
447
+ // if the target field is single-value field, reset the existing conditions
448
+ // maxConditions is ensured to be 1 for single-value field
449
+ // maxConditions = -1 means multiple values allowed
440
450
  /* Reset the conditions before create new conditions otherwise it gets not updated */
441
451
  const conditionPath = filterBarProperty.conditionPath as string;
442
- state.filter[conditionPath]?.forEach((condition) => {
443
- condition.filtered = false;
444
- });
452
+ if (state.filter[conditionPath]?.[0]) {
453
+ state.filter[conditionPath][0].filtered = false;
454
+ }
445
455
  }
446
456
  }
447
457
  // Propagate OUT parameter for each conditions
@@ -468,11 +478,11 @@ export default Object.assign({}, ValueHelpDelegate, {
468
478
  const conditionPath = filterBarProperty.conditionPath as string;
469
479
  const conditionAlreadyExists = state.filter[conditionPath]?.find((testCondition) => {
470
480
  delete testCondition.filtered;
471
- if (this.checkConditionsEqual(testCondition, newCondition)) {
481
+ const { filtered: _filtered, ...conditionToCompare } = testCondition;
482
+ if (this.checkConditionsEqual(conditionToCompare, newCondition)) {
483
+ testCondition.filtered = true;
472
484
  return true;
473
485
  }
474
- // reset filtered to false
475
- testCondition.filtered = false;
476
486
  return false;
477
487
  });
478
488
  if (!conditionAlreadyExists) {
@@ -830,7 +840,7 @@ This cannot happen in case of action parameter dialog, which can be identified b
830
840
  // last part of localData is a property name, thus it cannot match. Otherwise matchCount could be -1 if everything matches
831
841
  // (if we want to additionally secure against this situation, the most appropriate would be to set matchCount = localDataParts.length – 1)
832
842
  return relativePathParts
833
- .slice(0, -matchCount) // remove all matched parts (from the end)
843
+ .slice(0, -matchCount ? -matchCount : undefined) // remove all matched parts (from the end)
834
844
  .map((part) => part.part)
835
845
  .concat(localDataParts.slice(matchCount)) // remove the matched parts from localData (from the beginning)
836
846
  .join("/"); // transfer back to string (but only once at the end ;) )
@@ -1040,8 +1050,13 @@ This cannot happen in case of action parameter dialog, which can be identified b
1040
1050
  return context?.getObject(keyPath) === value;
1041
1051
  } else {
1042
1052
  const contextKeys = Object.keys(context.getObject());
1053
+ const conditionSelectedRowKeys = Object.keys(conditionSelectedRow);
1043
1054
  return vhKeys.every(function (vhKey) {
1044
- return !contextKeys.includes(vhKey) || context?.getObject(vhKey) === conditionSelectedRow[vhKey];
1055
+ return (
1056
+ !contextKeys.includes(vhKey) ||
1057
+ !conditionSelectedRowKeys.includes(vhKey) ||
1058
+ context?.getObject(vhKey) === conditionSelectedRow[vhKey]
1059
+ );
1045
1060
  });
1046
1061
  }
1047
1062
  };
@@ -22,7 +22,7 @@ sap.ui.define(["sap/base/util/JSTokenizer", "sap/fe/base/BindingToolkit", "sap/f
22
22
  const InteractiveChartHelper = {
23
23
  getChartDisplayedValue: function (value, valueFormat, metaPath) {
24
24
  const infoPath = generate([metaPath]);
25
- return "{parts:[{path:'" + value + "',type:'sap.ui.model.odata.type.Decimal', constraints:{'nullable':false}}" + (valueFormat && valueFormat.ScaleFactor ? ",{value:'" + valueFormat.ScaleFactor.valueOf() + "'}" : ",{path:'internal>scalefactorNumber/" + infoPath + "'}") + (valueFormat && valueFormat.NumberOfFractionalDigits ? ",{value:'" + valueFormat.NumberOfFractionalDigits + "'}" : ",{value:'0'}") + ",{path:'internal>currency/" + infoPath + "'}" + ",{path:'" + value + "',type:'sap.ui.model.odata.type.String', constraints:{'nullable':false}}" + "], formatter:'sap.fe.macros.visualfilters.VisualFilterRuntime.scaleVisualFilterValue'}"; //+ sType.split('#').length ? sType.split('#')[1] : 'Decimal' + "}";
25
+ return "{parts:[{path:'" + value + "',type:'sap.ui.model.odata.type.Decimal', constraints:{'nullable':false}}" + (valueFormat && valueFormat.ScaleFactor ? ",{value:'" + valueFormat.ScaleFactor.valueOf() + "'}" : ",{path:'internal>scalefactorNumber/" + infoPath + "'}") + (valueFormat && valueFormat.NumberOfFractionalDigits ? ",{value:'" + valueFormat.NumberOfFractionalDigits + "'}" : ",{value:'0'}") + ",{path:'internal>currency/" + infoPath + "'}" + ",{path:'" + value + "',type:'sap.ui.model.odata.type.String', constraints:{'nullable':false}}" + "], formatter:'._formatters.VisualFilterRuntime.scaleVisualFilterValue'}"; //+ sType.split('#').length ? sType.split('#')[1] : 'Decimal' + "}";
26
26
  },
27
27
  getChartValue: function (value) {
28
28
  return "{path:'" + value + "',type:'sap.ui.model.odata.type.Decimal', constraints:{'nullable':false}}";
@@ -402,7 +402,7 @@ sap.ui.define(["sap/base/util/JSTokenizer", "sap/fe/base/BindingToolkit", "sap/f
402
402
  });
403
403
  if (parts.length > 0) {
404
404
  paths = parts.join();
405
- return `{parts:[${paths}], formatter:'sap.fe.macros.visualfilters.VisualFilterRuntime.getFiltersFromConditions'}`;
405
+ return `{parts:[${paths}], formatter:'._formatters.VisualFilterRuntime.getFiltersFromConditions.bind($control)'}`;
406
406
  } else {
407
407
  return undefined;
408
408
  }
@@ -412,7 +412,7 @@ sap.ui.define(["sap/base/util/JSTokenizer", "sap/fe/base/BindingToolkit", "sap/f
412
412
  },
413
413
  getfilterCountBinding: function (chartAnnotation) {
414
414
  const dimension = chartAnnotation?.Dimensions[0]?.$target?.name;
415
- return "{path:'$filters>/conditions/" + dimension + "', formatter:'sap.fe.macros.visualfilters.VisualFilterRuntime.getFilterCounts'}";
415
+ return "{path:'$filters>/conditions/" + dimension + "', formatter:'._formatters.VisualFilterRuntime.getFilterCounts.bind($control)'}";
416
416
  },
417
417
  getInteractiveChartProperties: function (visualFilter) {
418
418
  const chartAnnotation = visualFilter.chartAnnotation;
@@ -451,4 +451,4 @@ sap.ui.define(["sap/base/util/JSTokenizer", "sap/fe/base/BindingToolkit", "sap/f
451
451
  };
452
452
  return InteractiveChartHelper;
453
453
  }, false);
454
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJbnRlcmFjdGl2ZUNoYXJ0SGVscGVyIiwiZ2V0Q2hhcnREaXNwbGF5ZWRWYWx1ZSIsInZhbHVlIiwidmFsdWVGb3JtYXQiLCJtZXRhUGF0aCIsImluZm9QYXRoIiwiZ2VuZXJhdGUiLCJTY2FsZUZhY3RvciIsInZhbHVlT2YiLCJOdW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMiLCJnZXRDaGFydFZhbHVlIiwiX2dldENvbGxlY3Rpb25OYW1lIiwiY29sbGVjdGlvbiIsImNvbnRleHRQYXRoIiwicGFyYW1ldGVycyIsImNvbGxlY3Rpb25PYmplY3QiLCJ0YXJnZXRPYmplY3QiLCJpc05hdmlnYXRpb25Qcm9wZXJ0eSIsIm5hbWUiLCJpc0VudGl0eVNldCIsIl9nZXRCaW5kaW5nUGF0aEZvclBhcmFtZXRlcnMiLCJmaWx0ZXJDb25kaXRpb25zIiwibWV0YU1vZGVsIiwiY29sbGVjdGlvbk5hbWUiLCJlbnRpdHlTZXRQYXRoIiwicGFyYW1zIiwiY29udmVydGVkRmlsdGVyQ29uZGl0aW9ucyIsIlZpc3VhbEZpbHRlclV0aWxzIiwiY29udmVydEZpbHRlckNvbmRpb25zIiwicGFyYW1ldGVyUHJvcGVydGllcyIsIkNvbW1vblV0aWxzIiwiZ2V0UGFyYW1ldGVySW5mbyIsImkiLCJwYXJhbWV0ZXIiLCJwcm9wZXJ0eSIsImVudGl0eVBhdGgiLCJzcGxpdCIsInByb3BlcnR5Q29udGV4dCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwidHlwZUNvbmZpZyIsIlR5cGVNYXAiLCJnZXRUeXBlQ29uZmlnIiwiJFR5cGUiLCJKU1Rva2VuaXplciIsInBhcnNlSlMiLCJmb3JtYXRPcHRpb25zIiwiY29udGV4dCIsImNvbnN0cmFpbnRzIiwiY29uZGl0aW9uIiwiY29uZGl0aW9uSW50ZXJuYWwiLCJ1bmRlZmluZWQiLCJpbnRlcm5hbFBhcmFtZXRlckNvbmRpdGlvbiIsIkNvbmRpdGlvbkNvbnZlcnRlciIsInRvVHlwZSIsImVkbVR5cGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJPRGF0YVV0aWxzIiwiZm9ybWF0TGl0ZXJhbCIsInZhbHVlcyIsInB1c2giLCJwYXJhbWV0ZXJFbnRpdHlTZXQiLCJzbGljZSIsImxhc3RJbmRleE9mIiwidGFyZ2V0TmF2aWdhdGlvbiIsInN1YnN0cmluZyIsInRvU3RyaW5nIiwiX2dldFVPTUFnZ3JlZ2F0aW9uRXhwcmVzc2lvbiIsImN1c3RvbUFnZ3JlZ2F0ZSIsIlVvTUhhc0N1c3RvbUFnZ3JlZ2F0ZSIsIlVPTSIsImFnZ3JlZ2F0aW9uIiwiYWdncmVnYXRpb25FeHByZXNzaW9uIiwiVU9NRXhwcmVzc2lvbiIsInBhdGgiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsInVuaXQiLCJBZ2dyZWdhdGFibGVQcm9wZXJ0eSIsIkFnZ3JlZ2F0aW9uTWV0aG9kIiwid2l0aCIsImdldEFnZ3JlZ2F0aW9uQmluZGluZyIsImNoYXJ0QW5ub3RhdGlvbnMiLCJ0ZXh0QXNzb2NpYXRpb24iLCJkaW1lbnNpb25UeXBlIiwic29ydE9yZGVyIiwic2VsZWN0aW9uVmFyaWFudCIsImZpbHRlckJhckVudGl0eVR5cGUiLCJkcmFmdFN1cHBvcnRlZCIsImNoYXJ0TWVhc3VyZSIsInNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwiZW50aXR5VHlwZSIsImRpbWVuc2lvbiIsIkRpbWVuc2lvbnMiLCJmaWx0ZXJzIiwiZ2V0VW9NIiwiRmlsdGVyIiwib3BlcmF0b3IiLCJ2YWx1ZTEiLCJ2YWx1ZTIiLCJnZXRGaWx0ZXJzQ29uZGl0aW9uc0Zyb21TZWxlY3Rpb25WYXJpYW50IiwiZ2V0Q3VzdG9tQ29uZGl0aW9ucyIsImJpbmQiLCJjb25kaXRpb25zIiwiZm9yRWFjaCIsImlzUGFyYW1ldGVyIiwibGVuZ3RoIiwiYmluZGluZ1BhdGgiLCJVT01BZ2dyZWdhdGlvbkV4cHJlc3Npb24iLCJ0ZXh0QXNzb2NpYXRpb25FeHByZXNzaW9uIiwiYWRkaXRpb25hbGx5IiwiZmluYWxwYXJhbWV0ZXJzIiwiZ2V0U29ydE9yZGVyIiwiJCRhZ2dyZWdhdGlvbiIsImFnZ3JlZ2F0ZSIsImdyb3VwIiwidGVtcGxhdGVTaGFyZWFibGUiLCJzdXNwZW5kZWQiLCJnZXRNYXhJdGVtcyIsIl9nZXRPcmRlckV4cHJlc3Npb25Gcm9tTWVhc3VyZSIsInNvcnRQcm9wZXJ0eU5hbWUiLCJEeW5hbWljUHJvcGVydHkiLCIkdGFyZ2V0IiwiTmFtZSIsIlByb3BlcnR5IiwiJG9yZGVyYnkiLCJEZXNjZW5kaW5nIiwiQ2hhcnRUeXBlIiwic3RhcnRJbmRleCIsImdldENvbG9yQmluZGluZyIsImRhdGFQb2ludCIsInZhbHVlQ3JpdGljYWxpdHkiLCJhbm5vdGF0aW9ucyIsIlVJIiwiVmFsdWVDcml0aWNhbGl0eSIsIkNyaXRpY2FsaXR5IiwiYnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlDb2xvck1pY3JvQ2hhcnQiLCJDcml0aWNhbGl0eUNhbGN1bGF0aW9uIiwib0RpcmVjdGlvbiIsIkltcHJvdmVtZW50RGlyZWN0aW9uIiwib0RhdGFQb2ludFZhbHVlIiwiVmFsdWUiLCJvRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZSIsIkRldmlhdGlvblJhbmdlTG93VmFsdWUiLCJvVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSIsIlRvbGVyYW5jZVJhbmdlTG93VmFsdWUiLCJvQWNjZXB0YW5jZVJhbmdlTG93VmFsdWUiLCJBY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZSIsIm9BY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWUiLCJBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWUiLCJvVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWUiLCJUb2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZSIsIm9EZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZSIsIkRldmlhdGlvblJhbmdlSGlnaFZhbHVlIiwiQ29tbW9uSGVscGVyIiwiZ2V0Q3JpdGljYWxpdHlDYWxjdWxhdGlvbkJpbmRpbmciLCJnZXRWYWx1ZUNyaXRpY2FsaXR5IiwicmVzdWx0IiwidmFsdWVDcml0aWNhbGl0eVR5cGUiLCJfZ2V0Q3JpdGljYWxpdHlGcm9tRW51bSIsImpvaW4iLCJjcml0aWNhbGl0eSIsInZhbHVlQ29sb3IiLCJtTGlicmFyeSIsIlZhbHVlQ29sb3IiLCJpbmRpY2F0b3IiLCJFcnJvciIsIkdvb2QiLCJDcml0aWNhbCIsIk5ldXRyYWwiLCJnZXRTY2FsZVVvTVRpdGxlIiwiY2hhcnRBbm5vdGF0aW9uIiwic2VwZXJhdG9yIiwidG9vbFRpcCIsInNjYWxlRmFjdG9yIiwiTWVhc3VyZUF0dHJpYnV0ZXMiLCJEYXRhUG9pbnQiLCJWYWx1ZUZvcm1hdCIsImZpeGVkSW50ZWdlciIsIk51bWJlckZvcm1hdCIsImdldEludGVnZXJJbnN0YW5jZSIsInN0eWxlIiwic2hvd1NjYWxlIiwic2hvcnRSZWZOdW1iZXIiLCJzY2FsZSIsImdldFNjYWxlIiwiVU9NRXhwIiwicGF0aEluTW9kZWwiLCJjb25zdGFudCIsInNjYWxlRXhwIiwiY29tcGlsZUV4cHJlc3Npb24iLCJmb3JtYXRSZXN1bHQiLCJ2aXN1YWxGaWx0ZXJGb3JtYXR0ZXIiLCJmb3JtYXRTY2FsZUFuZFVPTSIsImdldE1lYXN1cmVEaW1lbnNpb25UaXRsZSIsIm1lYXN1cmVMYWJlbCIsIm1lYXN1cmVQYXRoIiwiTWVhc3VyZXMiLCJEeW5hbWljTWVhc3VyZXMiLCJkaW1lbnNpb25QYXRoIiwiZGltZW5zaW9uTGFiZWwiLCJDb21tb24iLCJMYWJlbCIsIkxpYnJhcnkiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsImdldFRleHQiLCJnZXRUb29sVGlwIiwicmVuZGVyTGluZUNoYXJ0IiwiY2hhcnRUeXBlIiwibWVhc3VyZURpbWVuc2lvblRvb2xUaXAiLCJlc2NhcGVTaW5nbGVRdW90ZXMiLCJzY2FsZVVPTVRvb2x0aXAiLCJfZ2V0VU9NIiwiVU9NT2JqZWN0UGF0aCIsImN1c3RvbURhdGEiLCJhZ2dyZWdhdGFibGVQcm9wZXJ0eVBhdGgiLCJVT01PYmplY3QiLCIkUGF0aCIsImVudGl0eVByb3BlcnRpZXMiLCJpc1NpbmdsZXRvbiIsInRhcmdldFR5cGUiLCJwcm9wZXJ0eUFubm90YXRpb25zIiwiZmluZCIsIm1lYXN1cmUiLCJJU09DdXJyZW5jeSIsIlVuaXQiLCJnZXRTY2FsZUZhY3RvciIsImdldFVvTVZpc2libGl0eSIsInNob3dFcnJvciIsImdldEluUGFyYW1ldGVyRmlsdGVyc0JpbmRpbmciLCJpblBhcmFtZXRlcnMiLCJwYXJ0cyIsInBhdGhzIiwiaW5QYXJhbWV0ZXIiLCJsb2NhbERhdGFQcm9wZXJ0eSIsImdldGZpbHRlckNvdW50QmluZGluZyIsImdldEludGVyYWN0aXZlQ2hhcnRQcm9wZXJ0aWVzIiwidmlzdWFsRmlsdGVyIiwiaW50ZXJhY3RpdmVDaGFydFByb3BlcnRpZXMiLCJpZCIsInNob3dFcnJvckV4cHJlc3Npb24iLCJlcnJvck1lc3NhZ2VFeHByZXNzaW9uIiwiZXJyb3JNZXNzYWdlVGl0bGVFeHByZXNzaW9uIiwiZGF0YVBvaW50QW5ub3RhdGlvbiIsImdldFBhcmFtZXRlcnMiLCJnZXRNZXRhTW9kZWwiLCJkaW1lbnNpb25UZXh0IiwiVGV4dCIsImFnZ3JlZ2F0aW9uQmluZGluZyIsInR5cGUiLCJhZ2dyZWdhdGVQcm9wZXJ0aWVzIiwic2NhbGVmYWN0b3IiLCJ1b20iLCJwYXJzZUN1c3RvbURhdGEiLCJpblBhcmFtZXRlckZpbHRlcnMiLCJzdHJpbmdpZmllZFBhcmFtZXRlcnMiLCJkaW1lbnNpb25Db250ZXh0IiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiZGltZW5zaW9uT2JqZWN0IiwiZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGgiLCJnZXRQYXRoIiwiY2hhcnRMYWJlbCIsImdldFRleHRCaW5kaW5nIiwiZGlzcGxheWVkVmFsdWUiLCJjb2xvciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiSW50ZXJhY3RpdmVDaGFydEhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiwgUHJvcGVydHksIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlLCBQcm9wZXJ0eVBhdGggfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgQWdncmVnYXRlZFByb3BlcnR5LCBBZ2dyZWdhdGVkUHJvcGVydHlUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9BbmFseXRpY3NcIjtcbmltcG9ydCB0eXBlIHsgTGFiZWwsIFNvcnRPcmRlclR5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUge1xuXHRDaGFydCxcblx0RGF0YVBvaW50LFxuXHROdW1iZXJGb3JtYXQgYXMgTnVtYmVyRm9ybWF0VHlwZSxcblx0U2VsZWN0aW9uVmFyaWFudCxcblx0VmFsdWVDcml0aWNhbGl0eVR5cGVcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IEpTVG9rZW5pemVyIGZyb20gXCJzYXAvYmFzZS91dGlsL0pTVG9rZW5pemVyXCI7XG5pbXBvcnQge1xuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Y29uc3RhbnQsXG5cdGZvcm1hdFJlc3VsdCxcblx0cGF0aEluTW9kZWwsXG5cdHR5cGUgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLFxuXHR0eXBlIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBQYXJhbWV0ZXJUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9WaXN1YWxGaWx0ZXJzXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgeyBpc0VudGl0eVNldCwgaXNOYXZpZ2F0aW9uUHJvcGVydHksIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uLCBpc1NpbmdsZXRvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB7IGJ1aWxkRXhwcmVzc2lvbkZvckNyaXRpY2FsaXR5Q29sb3JNaWNyb0NoYXJ0IH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvQ3JpdGljYWxpdHlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IFZpc3VhbEZpbHRlclV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL2ZpbHRlcmJhci91dGlscy9WaXN1YWxGaWx0ZXJVdGlsc1wiO1xuaW1wb3J0IHsgY29uc3RyYWludHMsIGZvcm1hdE9wdGlvbnMgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvRmlsdGVyRmllbGRIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyQ29uZGl0aW9ucyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlckJhci9GaWx0ZXJIZWxwZXJcIjtcbmltcG9ydCB7IGdldEZpbHRlcnNDb25kaXRpb25zRnJvbVNlbGVjdGlvblZhcmlhbnQgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXJCYXIvRmlsdGVySGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IFZhbHVlQ29sb3IgfSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IG1MaWJyYXJ5IGZyb20gXCJzYXAvbS9saWJyYXJ5XCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgTnVtYmVyRm9ybWF0IGZyb20gXCJzYXAvdWkvY29yZS9mb3JtYXQvTnVtYmVyRm9ybWF0XCI7XG5pbXBvcnQgQ29uZGl0aW9uQ29udmVydGVyIGZyb20gXCJzYXAvdWkvbWRjL2NvbmRpdGlvbi9Db25kaXRpb25Db252ZXJ0ZXJcIjtcbmltcG9ydCBUeXBlTWFwIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1R5cGVNYXBcIjtcbmltcG9ydCBGaWx0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJcIjtcbmltcG9ydCB0eXBlIEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBPRGF0YVV0aWxzIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFVdGlsc1wiO1xuaW1wb3J0IHsgZ2V0VGV4dEJpbmRpbmcgfSBmcm9tIFwiLi4vZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG5pbXBvcnQgdmlzdWFsRmlsdGVyRm9ybWF0dGVyIGZyb20gXCIuLi9mb3JtYXR0ZXJzL1Zpc3VhbEZpbHRlckZvcm1hdHRlclwiO1xuaW1wb3J0IHR5cGUgVmlzdWFsRmlsdGVyIGZyb20gXCIuL1Zpc3VhbEZpbHRlclwiO1xuXG50eXBlIE1lYXN1cmVUeXBlID0ge1xuXHR2YWx1ZT86IHN0cmluZztcblx0SVNPQ3VycmVuY3k/OiBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPjtcblx0VW5pdD86IFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+O1xufTtcbmV4cG9ydCB0eXBlIEludGVyYWN0aXZlQ2hhcnRUeXBlID0ge1xuXHRjaGFydExhYmVsPzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0YWdncmVnYXRpb25CaW5kaW5nPzogYWdncmVnYXRpb25CaW5kaW5nO1xuXHRlcnJvck1lc3NhZ2VUaXRsZUV4cHJlc3Npb24/OiBzdHJpbmc7XG5cdGVycm9yTWVzc2FnZUV4cHJlc3Npb24/OiBzdHJpbmc7XG5cdHNob3dFcnJvckV4cHJlc3Npb24/OiBzdHJpbmc7XG5cdGluUGFyYW1ldGVycz86IFBhcmFtZXRlclR5cGVbXTtcblx0ZGlzcGxheWVkVmFsdWU/OiBzdHJpbmc7XG5cdG1lYXN1cmU/OiBzdHJpbmc7XG5cdHN0cmluZ2lmaWVkUGFyYW1ldGVycz86IHN0cmluZ1tdO1xuXHRpblBhcmFtZXRlckZpbHRlcnM/OiBzdHJpbmc7XG5cdGNvbG9yPzogc3RyaW5nO1xuXHR1b20/OiBzdHJpbmcgfCBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTx1bmtub3duPiB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRzY2FsZWZhY3Rvcj86IG51bWJlciB8IG9iamVjdDtcblx0c2VsZWN0aW9uVmFyaWFudD86IFNlbGVjdGlvblZhcmlhbnQ7XG59O1xuXG50eXBlIGFnZ3JlZ2F0aW9uQmluZGluZyA9IHtcblx0cGF0aDogc3RyaW5nO1xuXHR0ZW1wbGF0ZVNoYXJlYWJsZTogYm9vbGVhbjtcblx0c3VzcGVuZGVkOiBib29sZWFuO1xuXHRmaWx0ZXJzOiBGaWx0ZXJbXTtcblx0cGFyYW1ldGVyczoge1xuXHRcdCQkYWdncmVnYXRpb246IHtcblx0XHRcdGFnZ3JlZ2F0ZTogeyBbeDogc3RyaW5nXToge30gfCB7IHVuaXQ6IHN0cmluZyB9IHwgeyBuYW1lOiBzdHJpbmc7IHdpdGg6IHN0cmluZyB9IHwgdW5kZWZpbmVkIH07XG5cdFx0XHRncm91cDogeyBbeDogc3RyaW5nXTogeyBhZGRpdGlvbmFsbHk6IHN0cmluZ1tdIH0gfCB7IGFkZGl0aW9uYWxseTogdW5kZWZpbmVkIH0gfTtcblx0XHR9O1xuXHRcdCRvcmRlcmJ5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdH07XG59O1xuXG5jb25zdCBJbnRlcmFjdGl2ZUNoYXJ0SGVscGVyID0ge1xuXHRnZXRDaGFydERpc3BsYXllZFZhbHVlOiBmdW5jdGlvbiAodmFsdWU6IHN0cmluZywgdmFsdWVGb3JtYXQ/OiBOdW1iZXJGb3JtYXRUeXBlLCBtZXRhUGF0aD86IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgaW5mb1BhdGggPSBnZW5lcmF0ZShbbWV0YVBhdGhdKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0XCJ7cGFydHM6W3twYXRoOidcIiArXG5cdFx0XHR2YWx1ZSArXG5cdFx0XHRcIicsdHlwZTonc2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRGVjaW1hbCcsIGNvbnN0cmFpbnRzOnsnbnVsbGFibGUnOmZhbHNlfX1cIiArXG5cdFx0XHQodmFsdWVGb3JtYXQgJiYgdmFsdWVGb3JtYXQuU2NhbGVGYWN0b3Jcblx0XHRcdFx0PyBcIix7dmFsdWU6J1wiICsgdmFsdWVGb3JtYXQuU2NhbGVGYWN0b3IudmFsdWVPZigpICsgXCInfVwiXG5cdFx0XHRcdDogXCIse3BhdGg6J2ludGVybmFsPnNjYWxlZmFjdG9yTnVtYmVyL1wiICsgaW5mb1BhdGggKyBcIid9XCIpICtcblx0XHRcdCh2YWx1ZUZvcm1hdCAmJiB2YWx1ZUZvcm1hdC5OdW1iZXJPZkZyYWN0aW9uYWxEaWdpdHNcblx0XHRcdFx0PyBcIix7dmFsdWU6J1wiICsgdmFsdWVGb3JtYXQuTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzICsgXCInfVwiXG5cdFx0XHRcdDogXCIse3ZhbHVlOicwJ31cIikgK1xuXHRcdFx0XCIse3BhdGg6J2ludGVybmFsPmN1cnJlbmN5L1wiICtcblx0XHRcdGluZm9QYXRoICtcblx0XHRcdFwiJ31cIiArXG5cdFx0XHRcIix7cGF0aDonXCIgK1xuXHRcdFx0dmFsdWUgK1xuXHRcdFx0XCInLHR5cGU6J3NhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZycsIGNvbnN0cmFpbnRzOnsnbnVsbGFibGUnOmZhbHNlfX1cIiArXG5cdFx0XHRcIl0sIGZvcm1hdHRlcjonc2FwLmZlLm1hY3Jvcy52aXN1YWxmaWx0ZXJzLlZpc3VhbEZpbHRlclJ1bnRpbWUuc2NhbGVWaXN1YWxGaWx0ZXJWYWx1ZSd9XCJcblx0XHQpOyAvLysgc1R5cGUuc3BsaXQoJyMnKS5sZW5ndGggPyBzVHlwZS5zcGxpdCgnIycpWzFdIDogJ0RlY2ltYWwnICsgXCJ9XCI7XG5cdH0sXG5cdGdldENoYXJ0VmFsdWU6IGZ1bmN0aW9uICh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gXCJ7cGF0aDonXCIgKyB2YWx1ZSArIFwiJyx0eXBlOidzYXAudWkubW9kZWwub2RhdGEudHlwZS5EZWNpbWFsJywgY29uc3RyYWludHM6eydudWxsYWJsZSc6ZmFsc2V9fVwiO1xuXHR9LFxuXHRfZ2V0Q29sbGVjdGlvbk5hbWU6IGZ1bmN0aW9uIChcblx0XHRjb2xsZWN0aW9uOiBEYXRhTW9kZWxPYmplY3RQYXRoPFBhZ2VDb250ZXh0UGF0aFRhcmdldD4gfCB1bmRlZmluZWQsXG5cdFx0Y29udGV4dFBhdGg6IHN0cmluZyxcblx0XHRwYXJhbWV0ZXJzPzogQXJyYXk8c3RyaW5nPlxuXHQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25PYmplY3QgPSBjb2xsZWN0aW9uPy50YXJnZXRPYmplY3Q7XG5cdFx0aWYgKGlzTmF2aWdhdGlvblByb3BlcnR5KGNvbGxlY3Rpb25PYmplY3QpKSB7XG5cdFx0XHRyZXR1cm4gcGFyYW1ldGVycyA/IGNvbnRleHRQYXRoIDogY29sbGVjdGlvbk9iamVjdC5uYW1lO1xuXHRcdH0gZWxzZSBpZiAoaXNFbnRpdHlTZXQoY29sbGVjdGlvbk9iamVjdCkpIHtcblx0XHRcdHJldHVybiBcIi9cIiArIGNvbGxlY3Rpb25PYmplY3QubmFtZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25PYmplY3QhLm5hbWU7XG5cdFx0fVxuXHR9LFxuXHRfZ2V0QmluZGluZ1BhdGhGb3JQYXJhbWV0ZXJzOiBmdW5jdGlvbiAoXG5cdFx0ZmlsdGVyQ29uZGl0aW9uczogUmVjb3JkPHN0cmluZywgRmlsdGVyQ29uZGl0aW9uc1tdPixcblx0XHRtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsIHwgdW5kZWZpbmVkLFxuXHRcdGNvbGxlY3Rpb25OYW1lOiBzdHJpbmcsXG5cdFx0cGFyYW1ldGVyczogQXJyYXk8c3RyaW5nPixcblx0XHRlbnRpdHlTZXRQYXRoOiBzdHJpbmdcblx0KTogc3RyaW5nIHtcblx0XHRjb25zdCBwYXJhbXMgPSBbXTtcblx0XHRjb25zdCBjb252ZXJ0ZWRGaWx0ZXJDb25kaXRpb25zID0gVmlzdWFsRmlsdGVyVXRpbHMuY29udmVydEZpbHRlckNvbmRpb25zKGZpbHRlckNvbmRpdGlvbnMpO1xuXHRcdGNvbnN0IHBhcmFtZXRlclByb3BlcnRpZXMgPSBDb21tb25VdGlscy5nZXRQYXJhbWV0ZXJJbmZvKFxuXHRcdFx0bWV0YU1vZGVsIGFzIHVua25vd24gYXMgT0RhdGFNZXRhTW9kZWwsXG5cdFx0XHRjb2xsZWN0aW9uTmFtZVxuXHRcdCkucGFyYW1ldGVyUHJvcGVydGllcztcblx0XHRpZiAocGFyYW1ldGVyUHJvcGVydGllcykge1xuXHRcdFx0Zm9yIChjb25zdCBpIGluIHBhcmFtZXRlcnMpIHtcblx0XHRcdFx0Y29uc3QgcGFyYW1ldGVyID0gcGFyYW1ldGVyc1tpXTtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHkgPSBwYXJhbWV0ZXJQcm9wZXJ0aWVzW3BhcmFtZXRlcl07XG5cdFx0XHRcdGNvbnN0IGVudGl0eVBhdGggPSBlbnRpdHlTZXRQYXRoLnNwbGl0KFwiL1wiKVsxXTtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlDb250ZXh0ID0gbWV0YU1vZGVsPy5jcmVhdGVCaW5kaW5nQ29udGV4dChgLyR7ZW50aXR5UGF0aH0vJHtwYXJhbWV0ZXJ9YCk7XG5cdFx0XHRcdGxldCB0eXBlQ29uZmlnO1xuXHRcdFx0XHRpZiAocHJvcGVydHlDb250ZXh0KSB7XG5cdFx0XHRcdFx0dHlwZUNvbmZpZyA9IFR5cGVNYXAuZ2V0VHlwZUNvbmZpZyhcblx0XHRcdFx0XHRcdHByb3BlcnR5LiRUeXBlLFxuXHRcdFx0XHRcdFx0SlNUb2tlbml6ZXIucGFyc2VKUyhmb3JtYXRPcHRpb25zKHByb3BlcnR5LCB7IGNvbnRleHQ6IHByb3BlcnR5Q29udGV4dCB9KSB8fCBcInt9XCIpLFxuXHRcdFx0XHRcdFx0SlNUb2tlbml6ZXIucGFyc2VKUyhjb25zdHJhaW50cyhwcm9wZXJ0eSwgeyBjb250ZXh0OiBwcm9wZXJ0eUNvbnRleHQgfSkgfHwgXCJ7fVwiKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgY29uZGl0aW9uID0gY29udmVydGVkRmlsdGVyQ29uZGl0aW9uc1twYXJhbWV0ZXJdO1xuXHRcdFx0XHRjb25zdCBjb25kaXRpb25JbnRlcm5hbCA9IGNvbmRpdGlvbiA/IGNvbmRpdGlvblswXSA6IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKGNvbmRpdGlvbkludGVybmFsKSB7XG5cdFx0XHRcdFx0Y29uc3QgaW50ZXJuYWxQYXJhbWV0ZXJDb25kaXRpb24gPSBDb25kaXRpb25Db252ZXJ0ZXIudG9UeXBlKGNvbmRpdGlvbkludGVybmFsLCB0eXBlQ29uZmlnLCBUeXBlTWFwKTtcblx0XHRcdFx0XHRjb25zdCBlZG1UeXBlID0gcHJvcGVydHkuJFR5cGU7XG5cdFx0XHRcdFx0bGV0IHZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KE9EYXRhVXRpbHMuZm9ybWF0TGl0ZXJhbChpbnRlcm5hbFBhcmFtZXRlckNvbmRpdGlvbi52YWx1ZXNbMF0sIGVkbVR5cGUpKTtcblx0XHRcdFx0XHRwYXJhbXMucHVzaChgJHtwYXJhbWV0ZXJ9PSR7dmFsdWV9YCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBwYXJhbWV0ZXJFbnRpdHlTZXQgPSBjb2xsZWN0aW9uTmFtZS5zbGljZSgwLCBjb2xsZWN0aW9uTmFtZS5sYXN0SW5kZXhPZihcIi9cIikpO1xuXHRcdGNvbnN0IHRhcmdldE5hdmlnYXRpb24gPSBjb2xsZWN0aW9uTmFtZS5zdWJzdHJpbmcoY29sbGVjdGlvbk5hbWUubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7XG5cdFx0Ly8gY3JlYXRlIHBhcmFtZXRlciBjb250ZXh0XG5cdFx0cmV0dXJuIGAke3BhcmFtZXRlckVudGl0eVNldH0oJHtwYXJhbXMudG9TdHJpbmcoKX0pLyR7dGFyZ2V0TmF2aWdhdGlvbn1gO1xuXHR9LFxuXHRfZ2V0VU9NQWdncmVnYXRpb25FeHByZXNzaW9uOiBmdW5jdGlvbiAoXG5cdFx0Y3VzdG9tQWdncmVnYXRlPzogYm9vbGVhbixcblx0XHRVb01IYXNDdXN0b21BZ2dyZWdhdGU/OiBib29sZWFuLFxuXHRcdFVPTT86IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPHVua25vd24+IHwgc3RyaW5nIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdFx0YWdncmVnYXRpb24/OiBBZ2dyZWdhdGVkUHJvcGVydHlUeXBlXG5cdCk6IHtcblx0XHRhZ2dyZWdhdGlvbkV4cHJlc3Npb246IHsgdW5pdDogc3RyaW5nIH0gfCB7fSB8IHsgbmFtZTogc3RyaW5nOyB3aXRoOiBzdHJpbmcgfSB8IHVuZGVmaW5lZDtcblx0XHRVT01FeHByZXNzaW9uOiB7IFt4OiBzdHJpbmddOiB7fSB9IHwgdW5kZWZpbmVkIHwgc3RyaW5nO1xuXHR9IHtcblx0XHRsZXQgYWdncmVnYXRpb25FeHByZXNzaW9uLCBVT01FeHByZXNzaW9uO1xuXHRcdGNvbnN0IHBhdGggPSBVT00gJiYgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24oVU9NKSAmJiBVT00ucGF0aDtcblx0XHRpZiAoY3VzdG9tQWdncmVnYXRlKSB7XG5cdFx0XHQvL2N1c3RvbSBhZ2dyZWdhdGUgZm9yIGEgY3VycmVuY3kgb3IgdW5pdCBvZiBtZWFzdXJlIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBhZ2dyZWdhdGFibGUgcHJvcGVydHlcblx0XHRcdGlmIChVb01IYXNDdXN0b21BZ2dyZWdhdGUpIHtcblx0XHRcdFx0YWdncmVnYXRpb25FeHByZXNzaW9uID0gcGF0aCA/IHsgdW5pdDogcGF0aCB9IDoge307XG5cdFx0XHRcdFVPTUV4cHJlc3Npb24gPSB7fTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFnZ3JlZ2F0aW9uRXhwcmVzc2lvbiA9IHt9O1xuXHRcdFx0XHRVT01FeHByZXNzaW9uID0gcGF0aCA/IHsgW3BhdGhdOiB7fSB9IDoge307XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdGFnZ3JlZ2F0aW9uICYmXG5cdFx0XHRhZ2dyZWdhdGlvbi5BZ2dyZWdhdGFibGVQcm9wZXJ0eSAmJlxuXHRcdFx0YWdncmVnYXRpb24uQWdncmVnYXRhYmxlUHJvcGVydHkudmFsdWUgJiZcblx0XHRcdGFnZ3JlZ2F0aW9uLkFnZ3JlZ2F0aW9uTWV0aG9kXG5cdFx0KSB7XG5cdFx0XHRhZ2dyZWdhdGlvbkV4cHJlc3Npb24gPSB7IG5hbWU6IGFnZ3JlZ2F0aW9uLkFnZ3JlZ2F0YWJsZVByb3BlcnR5LnZhbHVlLCB3aXRoOiBhZ2dyZWdhdGlvbi5BZ2dyZWdhdGlvbk1ldGhvZCB9O1xuXHRcdFx0VU9NRXhwcmVzc2lvbiA9IHBhdGggPyB7IFtwYXRoXToge30gfSA6IHt9O1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRhZ2dyZWdhdGlvbkV4cHJlc3Npb246IGFnZ3JlZ2F0aW9uRXhwcmVzc2lvbixcblx0XHRcdFVPTUV4cHJlc3Npb246IFVPTUV4cHJlc3Npb25cblx0XHR9O1xuXHR9LFxuXHRnZXRBZ2dyZWdhdGlvbkJpbmRpbmc6IGZ1bmN0aW9uIChcblx0XHRjaGFydEFubm90YXRpb25zOiBDaGFydCxcblx0XHRjb2xsZWN0aW9uOiBEYXRhTW9kZWxPYmplY3RQYXRoPFBhZ2VDb250ZXh0UGF0aFRhcmdldD4gfCB1bmRlZmluZWQsXG5cdFx0Y29udGV4dFBhdGg6IHN0cmluZyxcblx0XHR0ZXh0QXNzb2NpYXRpb24/OiBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPixcblx0XHRkaW1lbnNpb25UeXBlPzogc3RyaW5nLFxuXHRcdHNvcnRPcmRlcj86IFNvcnRPcmRlclR5cGVbXSxcblx0XHRzZWxlY3Rpb25WYXJpYW50PzogU2VsZWN0aW9uVmFyaWFudCxcblx0XHRjdXN0b21BZ2dyZWdhdGU/OiBib29sZWFuLFxuXHRcdGFnZ3JlZ2F0aW9uPzogQWdncmVnYXRlZFByb3BlcnR5VHlwZSxcblx0XHRVb01IYXNDdXN0b21BZ2dyZWdhdGU/OiBib29sZWFuLFxuXHRcdHBhcmFtZXRlcnM/OiBBcnJheTxzdHJpbmc+LFxuXHRcdGZpbHRlckJhckVudGl0eVR5cGU/OiBzdHJpbmcsXG5cdFx0ZHJhZnRTdXBwb3J0ZWQ/OiBib29sZWFuLFxuXHRcdGNoYXJ0TWVhc3VyZT86IHN0cmluZyxcblx0XHRtZXRhTW9kZWw/OiBPRGF0YU1ldGFNb2RlbFxuXHQpOiBhZ2dyZWdhdGlvbkJpbmRpbmcge1xuXHRcdGNvbnN0IHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uID0gc2VsZWN0aW9uVmFyaWFudDtcblx0XHRjb25zdCBlbnRpdHlUeXBlID0gZmlsdGVyQmFyRW50aXR5VHlwZTtcblx0XHRjb25zdCBlbnRpdHlTZXRQYXRoID0gY29udGV4dFBhdGg7XG5cdFx0Y29uc3QgZGltZW5zaW9uID0gY2hhcnRBbm5vdGF0aW9ucy5EaW1lbnNpb25zWzBdLnZhbHVlO1xuXHRcdGNvbnN0IGZpbHRlcnM6IEZpbHRlcltdID0gW107XG5cdFx0bGV0IGZpbHRlckNvbmRpdGlvbnM7XG5cdFx0bGV0IGNvbGxlY3Rpb25OYW1lID0gdGhpcy5fZ2V0Q29sbGVjdGlvbk5hbWUoY29sbGVjdGlvbiwgY29udGV4dFBhdGgsIHBhcmFtZXRlcnMpO1xuXHRcdGNvbnN0IFVPTTogUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8dW5rbm93bj4gfCBzdHJpbmcgfCB1bmRlZmluZWQgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IEludGVyYWN0aXZlQ2hhcnRIZWxwZXIuZ2V0VW9NKFxuXHRcdFx0Y2hhcnRBbm5vdGF0aW9ucyxcblx0XHRcdGNvbGxlY3Rpb24sXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRjdXN0b21BZ2dyZWdhdGUsXG5cdFx0XHRhZ2dyZWdhdGlvblxuXHRcdCk7XG5cdFx0aWYgKGRyYWZ0U3VwcG9ydGVkKSB7XG5cdFx0XHRmaWx0ZXJzLnB1c2gobmV3IEZpbHRlcih7IG9wZXJhdG9yOiBcIkVRXCIsIHZhbHVlMTogXCJ0cnVlXCIsIHZhbHVlMjogbnVsbCwgcGF0aDogXCJJc0FjdGl2ZUVudGl0eVwiIH0pKTtcblx0XHR9XG5cdFx0aWYgKHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uKSB7XG5cdFx0XHRmaWx0ZXJDb25kaXRpb25zID0gZ2V0RmlsdGVyc0NvbmRpdGlvbnNGcm9tU2VsZWN0aW9uVmFyaWFudChcblx0XHRcdFx0ZW50aXR5U2V0UGF0aCxcblx0XHRcdFx0bWV0YU1vZGVsIGFzIHVua25vd24gYXMgT0RhdGFNZXRhTW9kZWwsXG5cdFx0XHRcdHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uLFxuXHRcdFx0XHRWaXN1YWxGaWx0ZXJVdGlscy5nZXRDdXN0b21Db25kaXRpb25zLmJpbmQoVmlzdWFsRmlsdGVyVXRpbHMpXG5cdFx0XHQpO1xuXHRcdFx0Zm9yIChjb25zdCBwYXRoIGluIGZpbHRlckNvbmRpdGlvbnMpIHtcblx0XHRcdFx0Y29uc3QgY29uZGl0aW9ucyA9IGZpbHRlckNvbmRpdGlvbnNbcGF0aF07XG5cdFx0XHRcdGNvbmRpdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoY29uZGl0aW9uOiBGaWx0ZXJDb25kaXRpb25zKSB7XG5cdFx0XHRcdFx0aWYgKCFjb25kaXRpb24uaXNQYXJhbWV0ZXIpIHtcblx0XHRcdFx0XHRcdGZpbHRlcnMucHVzaChcblx0XHRcdFx0XHRcdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRcdFx0XHRcdFx0b3BlcmF0b3I6IGNvbmRpdGlvbi5vcGVyYXRvciBhcyBGaWx0ZXJPcGVyYXRvcixcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTE6IGNvbmRpdGlvbi52YWx1ZTEsXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWUyOiBjb25kaXRpb24udmFsdWUyLFxuXHRcdFx0XHRcdFx0XHRcdHBhdGg6IGNvbmRpdGlvbi5wYXRoXG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChlbnRpdHlUeXBlICE9PSBgJHtjb2xsZWN0aW9uTmFtZX0vYCAmJiBwYXJhbWV0ZXJzICYmIHBhcmFtZXRlcnMubGVuZ3RoICYmIGZpbHRlckNvbmRpdGlvbnMpIHtcblx0XHRcdGNvbnN0IGJpbmRpbmdQYXRoID0gdGhpcy5fZ2V0QmluZGluZ1BhdGhGb3JQYXJhbWV0ZXJzKGZpbHRlckNvbmRpdGlvbnMsIG1ldGFNb2RlbCwgY29sbGVjdGlvbk5hbWUsIHBhcmFtZXRlcnMsIGVudGl0eVNldFBhdGgpO1xuXHRcdFx0Y29sbGVjdGlvbk5hbWUgPSBiaW5kaW5nUGF0aDtcblx0XHR9XG5cdFx0Y29uc3QgVU9NQWdncmVnYXRpb25FeHByZXNzaW9uID0gdGhpcy5fZ2V0VU9NQWdncmVnYXRpb25FeHByZXNzaW9uKGN1c3RvbUFnZ3JlZ2F0ZSwgVW9NSGFzQ3VzdG9tQWdncmVnYXRlLCBVT00sIGFnZ3JlZ2F0aW9uKTtcblx0XHRjb25zdCBhZ2dyZWdhdGlvbkV4cHJlc3Npb24gPSBVT01BZ2dyZWdhdGlvbkV4cHJlc3Npb24uYWdncmVnYXRpb25FeHByZXNzaW9uO1xuXHRcdGNvbnN0IFVPTUV4cHJlc3Npb24gPSBVT01BZ2dyZWdhdGlvbkV4cHJlc3Npb24uVU9NRXhwcmVzc2lvbjtcblx0XHRjb25zdCB0ZXh0QXNzb2NpYXRpb25FeHByZXNzaW9uID0gdGV4dEFzc29jaWF0aW9uID8geyBhZGRpdGlvbmFsbHk6IFt0ZXh0QXNzb2NpYXRpb24ucGF0aF0gfSA6IHt9O1xuXHRcdGNvbnN0IGZpbmFscGFyYW1ldGVycyA9IHtcblx0XHRcdC4uLnRoaXMuZ2V0U29ydE9yZGVyKGNoYXJ0QW5ub3RhdGlvbnMsIGRpbWVuc2lvblR5cGUsIHNvcnRPcmRlciwgY2hhcnRNZWFzdXJlKSxcblx0XHRcdCQkYWdncmVnYXRpb246IHtcblx0XHRcdFx0YWdncmVnYXRlOiB7XG5cdFx0XHRcdFx0W2NoYXJ0TWVhc3VyZSBhcyBzdHJpbmddOiBhZ2dyZWdhdGlvbkV4cHJlc3Npb25cblx0XHRcdFx0fSxcblx0XHRcdFx0Z3JvdXA6IHtcblx0XHRcdFx0XHRbZGltZW5zaW9uXTogeyAuLi50ZXh0QXNzb2NpYXRpb25FeHByZXNzaW9uIH0sXG5cdFx0XHRcdFx0Li4uKFVPTUV4cHJlc3Npb24gYXMgb2JqZWN0KVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0cGF0aDogY29sbGVjdGlvbk5hbWUsXG5cdFx0XHR0ZW1wbGF0ZVNoYXJlYWJsZTogdHJ1ZSxcblx0XHRcdHN1c3BlbmRlZDogdHJ1ZSxcblx0XHRcdGZpbHRlcnM6IGZpbHRlcnMsXG5cdFx0XHRwYXJhbWV0ZXJzOiBmaW5hbHBhcmFtZXRlcnMsXG5cdFx0XHQuLi4oSW50ZXJhY3RpdmVDaGFydEhlbHBlci5nZXRNYXhJdGVtcyhjaGFydEFubm90YXRpb25zKSBhcyBvYmplY3QpXG5cdFx0fTtcblx0fSxcblxuXHRfZ2V0T3JkZXJFeHByZXNzaW9uRnJvbU1lYXN1cmU6IGZ1bmN0aW9uIChzb3J0T3JkZXI/OiBTb3J0T3JkZXJUeXBlW10sIGNoYXJ0TWVhc3VyZT86IHN0cmluZyk6IHsgJG9yZGVyYnk6IHN0cmluZyB9IHtcblx0XHRsZXQgc29ydFByb3BlcnR5TmFtZTtcblx0XHRpZiAoc29ydE9yZGVyICYmIHNvcnRPcmRlci5sZW5ndGgpIHtcblx0XHRcdGlmIChzb3J0T3JkZXJbMF0uRHluYW1pY1Byb3BlcnR5KSB7XG5cdFx0XHRcdHNvcnRQcm9wZXJ0eU5hbWUgPSAoc29ydE9yZGVyWzBdLkR5bmFtaWNQcm9wZXJ0eS4kdGFyZ2V0IGFzIEFnZ3JlZ2F0ZWRQcm9wZXJ0eSk/Lk5hbWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzb3J0UHJvcGVydHlOYW1lID0gc29ydE9yZGVyWzBdLlByb3BlcnR5Py52YWx1ZTtcblx0XHRcdH1cblx0XHRcdGlmIChzb3J0UHJvcGVydHlOYW1lID09PSBjaGFydE1lYXN1cmUpIHtcblx0XHRcdFx0cmV0dXJuIHsgJG9yZGVyYnk6IGNoYXJ0TWVhc3VyZSArIChzb3J0T3JkZXJbMF0uRGVzY2VuZGluZyA/IFwiIGRlc2NcIiA6IFwiXCIpIH07XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4geyAkb3JkZXJieTogY2hhcnRNZWFzdXJlICsgXCIgZGVzY1wiIH07XG5cdFx0fVxuXHRcdHJldHVybiB7ICRvcmRlcmJ5OiBjaGFydE1lYXN1cmUgKyBcIiBkZXNjXCIgfTtcblx0fSxcblxuXHRnZXRTb3J0T3JkZXI6IGZ1bmN0aW9uIChcblx0XHRjaGFydEFubm90YXRpb25zOiBDaGFydCxcblx0XHRkaW1lbnNpb25UeXBlPzogc3RyaW5nLFxuXHRcdHNvcnRPcmRlcj86IFNvcnRPcmRlclR5cGVbXSxcblx0XHRjaGFydE1lYXN1cmU/OiBzdHJpbmdcblx0KTogeyAkb3JkZXJieTogc3RyaW5nIHwgdW5kZWZpbmVkIH0ge1xuXHRcdGlmIChjaGFydEFubm90YXRpb25zLkNoYXJ0VHlwZSA9PT0gXCJVSS5DaGFydFR5cGUvRG9udXRcIiB8fCBjaGFydEFubm90YXRpb25zLkNoYXJ0VHlwZSA9PT0gXCJVSS5DaGFydFR5cGUvQmFyXCIpIHtcblx0XHRcdHJldHVybiB0aGlzLl9nZXRPcmRlckV4cHJlc3Npb25Gcm9tTWVhc3VyZShzb3J0T3JkZXIsIGNoYXJ0TWVhc3VyZSk7XG5cdFx0fSBlbHNlIGlmIChkaW1lbnNpb25UeXBlID09PSBcIkVkbS5EYXRlXCIgfHwgZGltZW5zaW9uVHlwZSA9PT0gXCJFZG0uVGltZVwiIHx8IGRpbWVuc2lvblR5cGUgPT09IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCIpIHtcblx0XHRcdHJldHVybiB7ICRvcmRlcmJ5OiBjaGFydEFubm90YXRpb25zLkRpbWVuc2lvbnNbMF0udmFsdWUgfTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0c29ydE9yZGVyICYmXG5cdFx0XHRzb3J0T3JkZXIubGVuZ3RoICYmXG5cdFx0XHQoc29ydE9yZGVyWzBdLlByb3BlcnR5Py4kdGFyZ2V0IGFzIHVua25vd24gYXMgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPHN0cmluZz4pPy5wYXRoID09PSBjaGFydEFubm90YXRpb25zLkRpbWVuc2lvbnNbMF0udmFsdWVcblx0XHQpIHtcblx0XHRcdHJldHVybiB7ICRvcmRlcmJ5OiBzb3J0T3JkZXJbMF0uUHJvcGVydHk/LiR0YXJnZXQ/Lm5hbWUgKyAoc29ydE9yZGVyWzBdLkRlc2NlbmRpbmcgPyBcImRlc2MnXCIgOiBcIidcIikgfTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHsgJG9yZGVyYnk6IGNoYXJ0QW5ub3RhdGlvbnMuRGltZW5zaW9uc1swXS4kdGFyZ2V0Py5uYW1lIH07XG5cdFx0fVxuXHR9LFxuXG5cdGdldE1heEl0ZW1zOiBmdW5jdGlvbiAoY2hhcnRBbm5vdGF0aW9uczogQ2hhcnQpOiBzdHJpbmcgfCB7IHN0YXJ0SW5kZXg6IG51bWJlcjsgbGVuZ3RoOiBudW1iZXIgfSB7XG5cdFx0aWYgKGNoYXJ0QW5ub3RhdGlvbnMuQ2hhcnRUeXBlID09PSBcIlVJLkNoYXJ0VHlwZS9CYXJcIikge1xuXHRcdFx0cmV0dXJuIHsgc3RhcnRJbmRleDogMCwgbGVuZ3RoOiAzIH07XG5cdFx0fSBlbHNlIGlmIChjaGFydEFubm90YXRpb25zLkNoYXJ0VHlwZSA9PT0gXCJVSS5DaGFydFR5cGUvTGluZVwiKSB7XG5cdFx0XHRyZXR1cm4geyBzdGFydEluZGV4OiAwLCBsZW5ndGg6IDYgfTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fVxuXHR9LFxuXG5cdGdldENvbG9yQmluZGluZzogZnVuY3Rpb24gKGRhdGFQb2ludDogRGF0YVBvaW50LCBkaW1lbnNpb246IFByb3BlcnR5UGF0aCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgdmFsdWVDcml0aWNhbGl0eSA9IGRpbWVuc2lvbj8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LlVJPy5WYWx1ZUNyaXRpY2FsaXR5O1xuXHRcdGlmIChkYXRhUG9pbnQ/LkNyaXRpY2FsaXR5KSB7XG5cdFx0XHRyZXR1cm4gYnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlDb2xvck1pY3JvQ2hhcnQoZGF0YVBvaW50KTtcblx0XHR9IGVsc2UgaWYgKGRhdGFQb2ludD8uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbikge1xuXHRcdFx0Y29uc3Qgb0RpcmVjdGlvbiA9IGRhdGFQb2ludC5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uLkltcHJvdmVtZW50RGlyZWN0aW9uO1xuXHRcdFx0Y29uc3Qgb0RhdGFQb2ludFZhbHVlID0gZGF0YVBvaW50LlZhbHVlO1xuXHRcdFx0Y29uc3Qgb0RldmlhdGlvblJhbmdlTG93VmFsdWUgPSBkYXRhUG9pbnQuQ3JpdGljYWxpdHlDYWxjdWxhdGlvbi5EZXZpYXRpb25SYW5nZUxvd1ZhbHVlLnZhbHVlT2YoKTtcblx0XHRcdGNvbnN0IG9Ub2xlcmFuY2VSYW5nZUxvd1ZhbHVlID0gZGF0YVBvaW50LkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZS52YWx1ZU9mKCk7XG5cdFx0XHRjb25zdCBvQWNjZXB0YW5jZVJhbmdlTG93VmFsdWUgPSBkYXRhUG9pbnQuQ3JpdGljYWxpdHlDYWxjdWxhdGlvbi5BY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZS52YWx1ZU9mKCk7XG5cdFx0XHRjb25zdCBvQWNjZXB0YW5jZVJhbmdlSGlnaFZhbHVlID0gZGF0YVBvaW50LkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uQWNjZXB0YW5jZVJhbmdlSGlnaFZhbHVlLnZhbHVlT2YoKTtcblx0XHRcdGNvbnN0IG9Ub2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZSA9IGRhdGFQb2ludC5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uLlRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlLnZhbHVlT2YoKTtcblx0XHRcdGNvbnN0IG9EZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZSA9IGRhdGFQb2ludC5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uLkRldmlhdGlvblJhbmdlSGlnaFZhbHVlLnZhbHVlT2YoKTtcblx0XHRcdHJldHVybiBDb21tb25IZWxwZXIuZ2V0Q3JpdGljYWxpdHlDYWxjdWxhdGlvbkJpbmRpbmcoXG5cdFx0XHRcdG9EaXJlY3Rpb24sXG5cdFx0XHRcdG9EYXRhUG9pbnRWYWx1ZSxcblx0XHRcdFx0b0RldmlhdGlvblJhbmdlTG93VmFsdWUsXG5cdFx0XHRcdG9Ub2xlcmFuY2VSYW5nZUxvd1ZhbHVlLFxuXHRcdFx0XHRvQWNjZXB0YW5jZVJhbmdlTG93VmFsdWUsXG5cdFx0XHRcdG9BY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWUsXG5cdFx0XHRcdG9Ub2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZSxcblx0XHRcdFx0b0RldmlhdGlvblJhbmdlSGlnaFZhbHVlXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSBpZiAodmFsdWVDcml0aWNhbGl0eSAmJiB2YWx1ZUNyaXRpY2FsaXR5Lmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIEludGVyYWN0aXZlQ2hhcnRIZWxwZXIuZ2V0VmFsdWVDcml0aWNhbGl0eShkaW1lbnNpb24udmFsdWUsIHZhbHVlQ3JpdGljYWxpdHkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fSxcblx0Z2V0VmFsdWVDcml0aWNhbGl0eTogZnVuY3Rpb24gKGRpbWVuc2lvbjogc3RyaW5nLCB2YWx1ZUNyaXRpY2FsaXR5OiBBcnJheTxWYWx1ZUNyaXRpY2FsaXR5VHlwZT4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGxldCByZXN1bHQ7XG5cdFx0Y29uc3QgdmFsdWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGlmICh2YWx1ZUNyaXRpY2FsaXR5ICYmIHZhbHVlQ3JpdGljYWxpdHkubGVuZ3RoID4gMCkge1xuXHRcdFx0dmFsdWVDcml0aWNhbGl0eS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZUNyaXRpY2FsaXR5VHlwZTogVmFsdWVDcml0aWNhbGl0eVR5cGUpIHtcblx0XHRcdFx0aWYgKHZhbHVlQ3JpdGljYWxpdHlUeXBlLlZhbHVlICYmIHZhbHVlQ3JpdGljYWxpdHlUeXBlLkNyaXRpY2FsaXR5KSB7XG5cdFx0XHRcdFx0Y29uc3QgdmFsdWUgPVxuXHRcdFx0XHRcdFx0XCIke1wiICtcblx0XHRcdFx0XHRcdGRpbWVuc2lvbiArXG5cdFx0XHRcdFx0XHRcIn0gPT09ICdcIiArXG5cdFx0XHRcdFx0XHR2YWx1ZUNyaXRpY2FsaXR5VHlwZS5WYWx1ZSArXG5cdFx0XHRcdFx0XHRcIicgPyAnXCIgK1xuXHRcdFx0XHRcdFx0SW50ZXJhY3RpdmVDaGFydEhlbHBlci5fZ2V0Q3JpdGljYWxpdHlGcm9tRW51bSh2YWx1ZUNyaXRpY2FsaXR5VHlwZS5Dcml0aWNhbGl0eSkgK1xuXHRcdFx0XHRcdFx0XCInXCI7XG5cdFx0XHRcdFx0dmFsdWVzLnB1c2godmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJlc3VsdCA9IHZhbHVlcy5sZW5ndGggPiAwICYmIHZhbHVlcy5qb2luKFwiIDogXCIpICsgXCIgOiB1bmRlZmluZWRcIjtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdCA/IFwiez0gXCIgKyByZXN1bHQgKyBcIiB9XCIgOiB1bmRlZmluZWQ7XG5cdH0sXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNyaXRpY2FsaXR5IGluZGljYXRvciBmcm9tIGFubm90YXRpb25zIGlmIGNyaXRpY2FsaXR5IGlzIEVudW1NZW1iZXIuXG5cdCAqIEBwYXJhbSBjcml0aWNhbGl0eSBDcml0aWNhbGl0eSBwcm92aWRlZCBpbiB0aGUgYW5ub3RhdGlvbnNcblx0ICogQHJldHVybnMgUmV0dXJuIHRoZSBpbmRpY2F0b3IgZm9yIGNyaXRpY2FsaXR5XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0Q3JpdGljYWxpdHlGcm9tRW51bTogZnVuY3Rpb24gKGNyaXRpY2FsaXR5OiBzdHJpbmcpOiBWYWx1ZUNvbG9yIHtcblx0XHRjb25zdCB2YWx1ZUNvbG9yID0gbUxpYnJhcnkuVmFsdWVDb2xvcjtcblx0XHRsZXQgaW5kaWNhdG9yO1xuXHRcdGlmIChjcml0aWNhbGl0eSA9PT0gXCJVSS5Dcml0aWNhbGl0eVR5cGUvTmVnYXRpdmVcIikge1xuXHRcdFx0aW5kaWNhdG9yID0gdmFsdWVDb2xvci5FcnJvcjtcblx0XHR9IGVsc2UgaWYgKGNyaXRpY2FsaXR5ID09PSBcIlVJLkNyaXRpY2FsaXR5VHlwZS9Qb3NpdGl2ZVwiKSB7XG5cdFx0XHRpbmRpY2F0b3IgPSB2YWx1ZUNvbG9yLkdvb2Q7XG5cdFx0fSBlbHNlIGlmIChjcml0aWNhbGl0eSA9PT0gXCJVSS5Dcml0aWNhbGl0eVR5cGUvQ3JpdGljYWxcIikge1xuXHRcdFx0aW5kaWNhdG9yID0gdmFsdWVDb2xvci5Dcml0aWNhbDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aW5kaWNhdG9yID0gdmFsdWVDb2xvci5OZXV0cmFsO1xuXHRcdH1cblx0XHRyZXR1cm4gaW5kaWNhdG9yO1xuXHR9LFxuXHRnZXRTY2FsZVVvTVRpdGxlOiBmdW5jdGlvbiAoXG5cdFx0Y2hhcnRBbm5vdGF0aW9uPzogQ2hhcnQsXG5cdFx0Y29sbGVjdGlvbj86IERhdGFNb2RlbE9iamVjdFBhdGg8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0XHRtZXRhUGF0aD86IHN0cmluZyxcblx0XHRjdXN0b21BZ2dyZWdhdGU/OiBib29sZWFuLFxuXHRcdGFnZ3JlZ2F0aW9uPzogQWdncmVnYXRlZFByb3BlcnR5VHlwZSxcblx0XHRzZXBlcmF0b3I/OiBzdHJpbmcsXG5cdFx0dG9vbFRpcD86IGJvb2xlYW5cblx0KTogc3RyaW5nIHtcblx0XHRjb25zdCBzY2FsZUZhY3RvciA9IGNoYXJ0QW5ub3RhdGlvbj8uTWVhc3VyZUF0dHJpYnV0ZXNcblx0XHRcdD8gY2hhcnRBbm5vdGF0aW9uLk1lYXN1cmVBdHRyaWJ1dGVzWzBdPy5EYXRhUG9pbnQ/LiR0YXJnZXQ/LlZhbHVlRm9ybWF0Py5TY2FsZUZhY3Rvcj8udmFsdWVPZigpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRjb25zdCBpbmZvUGF0aCA9IGdlbmVyYXRlKFttZXRhUGF0aF0pO1xuXHRcdGNvbnN0IGZpeGVkSW50ZWdlciA9IE51bWJlckZvcm1hdC5nZXRJbnRlZ2VySW5zdGFuY2Uoe1xuXHRcdFx0c3R5bGU6IFwic2hvcnRcIixcblx0XHRcdHNob3dTY2FsZTogZmFsc2UsXG5cdFx0XHRzaG9ydFJlZk51bWJlcjogc2NhbGVGYWN0b3IgYXMgbnVtYmVyXG5cdFx0fSk7XG5cdFx0bGV0IHNjYWxlID0gZml4ZWRJbnRlZ2VyLmdldFNjYWxlKCk7XG5cdFx0bGV0IFVPTSA9IEludGVyYWN0aXZlQ2hhcnRIZWxwZXIuZ2V0VW9NKGNoYXJ0QW5ub3RhdGlvbiwgY29sbGVjdGlvbiwgdW5kZWZpbmVkLCBjdXN0b21BZ2dyZWdhdGUsIGFnZ3JlZ2F0aW9uKTtcblx0XHRjb25zdCBVT01FeHAgPSBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+KFVPTSlcblx0XHRcdD8gKHBhdGhJbk1vZGVsPHN0cmluZz4oXCJ1b20vXCIgKyBpbmZvUGF0aCwgXCJpbnRlcm5hbFwiKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPilcblx0XHRcdDogY29uc3RhbnQoVU9NIGFzIHN0cmluZyk7XG5cdFx0Y29uc3Qgc2NhbGVFeHAgPSBzY2FsZSA/IGNvbnN0YW50KHNjYWxlKSA6IChwYXRoSW5Nb2RlbChcInNjYWxlZmFjdG9yL1wiICsgaW5mb1BhdGgsIFwiaW50ZXJuYWxcIikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4pO1xuXHRcdGlmICghc2VwZXJhdG9yKSB7XG5cdFx0XHRzZXBlcmF0b3IgPSBcInxcIjtcblx0XHR9XG5cdFx0c2VwZXJhdG9yID0gXCIgXCIgKyBzZXBlcmF0b3IgKyBcIiBcIjtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZm9ybWF0UmVzdWx0KFtzZXBlcmF0b3IsIFVPTUV4cCwgc2NhbGVFeHBdLCB2aXN1YWxGaWx0ZXJGb3JtYXR0ZXIuZm9ybWF0U2NhbGVBbmRVT00pLCB0b29sVGlwKSA/PyBcIlwiO1xuXHR9LFxuXHRnZXRNZWFzdXJlRGltZW5zaW9uVGl0bGU6IGZ1bmN0aW9uIChjaGFydEFubm90YXRpb24/OiBDaGFydCwgY3VzdG9tQWdncmVnYXRlPzogYm9vbGVhbiwgYWdncmVnYXRpb24/OiBBZ2dyZWdhdGVkUHJvcGVydHlUeXBlKTogc3RyaW5nIHtcblx0XHRsZXQgbWVhc3VyZUxhYmVsO1xuXHRcdGxldCBtZWFzdXJlUGF0aDtcblx0XHRpZiAoY3VzdG9tQWdncmVnYXRlKSB7XG5cdFx0XHRtZWFzdXJlUGF0aCA9IGNoYXJ0QW5ub3RhdGlvbj8uTWVhc3VyZXNbMF0/LiR0YXJnZXQ/Lm5hbWU7XG5cdFx0fVxuXHRcdGlmIChjaGFydEFubm90YXRpb24/LkR5bmFtaWNNZWFzdXJlcyAmJiBjaGFydEFubm90YXRpb24uRHluYW1pY01lYXN1cmVzLmxlbmd0aCA+IDApIHtcblx0XHRcdG1lYXN1cmVQYXRoID0gKGNoYXJ0QW5ub3RhdGlvbi5EeW5hbWljTWVhc3VyZXNbMF0/LiR0YXJnZXQgYXMgQWdncmVnYXRlZFByb3BlcnR5VHlwZSk/LkFnZ3JlZ2F0YWJsZVByb3BlcnR5Py52YWx1ZTtcblx0XHR9IGVsc2UgaWYgKCFjdXN0b21BZ2dyZWdhdGUgJiYgY2hhcnRBbm5vdGF0aW9uPy5NZWFzdXJlcyAmJiBjaGFydEFubm90YXRpb24/Lk1lYXN1cmVzLmxlbmd0aCA+IDApIHtcblx0XHRcdG1lYXN1cmVQYXRoID0gY2hhcnRBbm5vdGF0aW9uLk1lYXN1cmVzWzBdPy4kdGFyZ2V0Py5uYW1lO1xuXHRcdH1cblx0XHRjb25zdCBkaW1lbnNpb25QYXRoID0gY2hhcnRBbm5vdGF0aW9uPy5EaW1lbnNpb25zWzBdPy52YWx1ZSBhcyB1bmtub3duIGFzIExhYmVsO1xuXHRcdGxldCBkaW1lbnNpb25MYWJlbCA9IGNoYXJ0QW5ub3RhdGlvbj8uRGltZW5zaW9uc1swXT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw7XG5cdFx0aWYgKCFjdXN0b21BZ2dyZWdhdGUgJiYgYWdncmVnYXRpb24pIHtcblx0XHRcdC8vIGNoZWNrIGlmIHRoZSBsYWJlbCBpcyBwYXJ0IG9mIGFnZ3JlZ2F0ZWQgcHJvcGVydGllcyAoVHJhbnNmb3JtYXRpb24gYWdncmVnYXRlcylcblx0XHRcdG1lYXN1cmVMYWJlbCA9IGFnZ3JlZ2F0aW9uLmFubm90YXRpb25zICYmIGFnZ3JlZ2F0aW9uLmFubm90YXRpb25zLkNvbW1vbiAmJiBhZ2dyZWdhdGlvbi5hbm5vdGF0aW9ucy5Db21tb24uTGFiZWw7XG5cdFx0XHRpZiAobWVhc3VyZUxhYmVsID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0bWVhc3VyZUxhYmVsID0gY2hhcnRBbm5vdGF0aW9uPy5NZWFzdXJlcz8uWzBdPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0bWVhc3VyZUxhYmVsID0gY2hhcnRBbm5vdGF0aW9uPy5NZWFzdXJlcz8uWzBdPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbDtcblx0XHR9XG5cdFx0aWYgKG1lYXN1cmVMYWJlbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRtZWFzdXJlTGFiZWwgPSBtZWFzdXJlUGF0aDtcblx0XHR9XG5cdFx0aWYgKGRpbWVuc2lvbkxhYmVsID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGRpbWVuc2lvbkxhYmVsID0gZGltZW5zaW9uUGF0aDtcblx0XHR9XG5cdFx0cmV0dXJuIExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUubWFjcm9zXCIpIS5nZXRUZXh0KFwiTV9JTlRFUkFDVElWRV9DSEFSVF9IRUxQRVJfVklTVUFMRklMVEVSX01FQVNVUkVfRElNRU5TSU9OX1RJVExFXCIsIFtcblx0XHRcdG1lYXN1cmVMYWJlbCxcblx0XHRcdGRpbWVuc2lvbkxhYmVsXG5cdFx0XSk7XG5cdH0sXG5cblx0Z2V0VG9vbFRpcDogZnVuY3Rpb24gKFxuXHRcdGNoYXJ0QW5ub3RhdGlvbj86IENoYXJ0LFxuXHRcdGNvbGxlY3Rpb24/OiBEYXRhTW9kZWxPYmplY3RQYXRoPFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdFx0bWV0YVBhdGg/OiBzdHJpbmcsXG5cdFx0Y3VzdG9tQWdncmVnYXRlPzogYm9vbGVhbixcblx0XHRhZ2dyZWdhdGlvbj86IEFnZ3JlZ2F0ZWRQcm9wZXJ0eVR5cGUsXG5cdFx0cmVuZGVyTGluZUNoYXJ0PzogYm9vbGVhbiB8IHN0cmluZ1xuXHQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGNoYXJ0VHlwZSA9IGNoYXJ0QW5ub3RhdGlvbiAmJiBjaGFydEFubm90YXRpb25bXCJDaGFydFR5cGVcIl07XG5cdFx0bGV0IG1lYXN1cmVEaW1lbnNpb25Ub29sVGlwID0gSW50ZXJhY3RpdmVDaGFydEhlbHBlci5nZXRNZWFzdXJlRGltZW5zaW9uVGl0bGUoY2hhcnRBbm5vdGF0aW9uLCBjdXN0b21BZ2dyZWdhdGUsIGFnZ3JlZ2F0aW9uKTtcblx0XHRtZWFzdXJlRGltZW5zaW9uVG9vbFRpcCA9IENvbW1vbkhlbHBlci5lc2NhcGVTaW5nbGVRdW90ZXMobWVhc3VyZURpbWVuc2lvblRvb2xUaXApO1xuXHRcdGlmIChyZW5kZXJMaW5lQ2hhcnQgPT09IGZhbHNlICYmIGNoYXJ0VHlwZSA9PT0gXCJVSS5DaGFydFR5cGUvTGluZVwiKSB7XG5cdFx0XHRyZXR1cm4gYHs9ICcke21lYXN1cmVEaW1lbnNpb25Ub29sVGlwfSd9YDtcblx0XHR9XG5cblx0XHRjb25zdCBzZXBlcmF0b3IgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLm1hY3Jvc1wiKT8uZ2V0VGV4dChcblx0XHRcdFwiTV9JTlRFUkFDVElWRV9DSEFSVF9IRUxQRVJfVklTVUFMRklMVEVSX1RPT0xUSVBfU0VQRVJBVE9SXCJcblx0XHQpO1xuXHRcdGNvbnN0IGluZm9QYXRoID0gZ2VuZXJhdGUoW21ldGFQYXRoXSk7XG5cdFx0Y29uc3Qgc2NhbGVVT01Ub29sdGlwID0gSW50ZXJhY3RpdmVDaGFydEhlbHBlci5nZXRTY2FsZVVvTVRpdGxlKFxuXHRcdFx0Y2hhcnRBbm5vdGF0aW9uLFxuXHRcdFx0Y29sbGVjdGlvbixcblx0XHRcdGluZm9QYXRoLFxuXHRcdFx0Y3VzdG9tQWdncmVnYXRlLFxuXHRcdFx0YWdncmVnYXRpb24sXG5cdFx0XHRzZXBlcmF0b3IsXG5cdFx0XHR0cnVlXG5cdFx0KTtcblx0XHRyZXR1cm4gXCJ7PSAnXCIgKyBtZWFzdXJlRGltZW5zaW9uVG9vbFRpcCArIChzY2FsZVVPTVRvb2x0aXAgPyBcIicgKyBcIiArIHNjYWxlVU9NVG9vbHRpcCA6IFwiJ1wiKSArIFwifVwiO1xuXHR9LFxuXHRfZ2V0VU9NOiBmdW5jdGlvbiAoXG5cdFx0VU9NT2JqZWN0UGF0aD86IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPHVua25vd24+LFxuXHRcdFVPTT86IFwiSVNPQ3VycmVuY3lcIiB8IFwiVW5pdFwiLFxuXHRcdGNvbGxlY3Rpb24/OiBEYXRhTW9kZWxPYmplY3RQYXRoPFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdFx0Y3VzdG9tRGF0YT86IGJvb2xlYW4sXG5cdFx0YWdncmVnYXRhYmxlUHJvcGVydHlQYXRoPzogc3RyaW5nXG5cdCk6IHN0cmluZyB8IFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjx1bmtub3duPiB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBVT01PYmplY3Q6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdFx0Y29uc3QgY29sbGVjdGlvbk9iamVjdCA9IGNvbGxlY3Rpb24/LnRhcmdldE9iamVjdDtcblx0XHRpZiAoVU9NT2JqZWN0UGF0aCAmJiBVT00gJiYgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24oVU9NT2JqZWN0UGF0aCkpIHtcblx0XHRcdC8vIGNoZWNrIGlmIHRoZSBVT00gaXMgcGFydCBvZiBNZWFzdXJlIGFubm90YXRpb25zKEN1c3RvbSBhZ2dyZWdhdGVzKVxuXHRcdFx0VU9NT2JqZWN0W1VPTV0gPSB7ICRQYXRoOiBVT01PYmplY3RQYXRoLnBhdGggfTtcblx0XHRcdHJldHVybiBjdXN0b21EYXRhICYmIFVPTU9iamVjdFBhdGgucGF0aCA/IFVPTU9iamVjdCA6IFVPTU9iamVjdFBhdGg7XG5cdFx0fSBlbHNlIGlmIChhZ2dyZWdhdGFibGVQcm9wZXJ0eVBhdGgpIHtcblx0XHRcdC8vIGNoZWNrIGlmIHRoZSBVT00gaXMgcGFydCBvZiBiYXNlIHByb3BlcnR5IGFubm90YXRpb25zKFRyYW5zZm9ybWF0aW9uIGFnZ3JlZ2F0ZXMpXG5cdFx0XHRjb25zdCBlbnRpdHlQcm9wZXJ0aWVzID1cblx0XHRcdFx0aXNFbnRpdHlTZXQoY29sbGVjdGlvbk9iamVjdCkgfHwgaXNTaW5nbGV0b24oY29sbGVjdGlvbk9iamVjdClcblx0XHRcdFx0XHQ/IGNvbGxlY3Rpb25PYmplY3QuZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzXG5cdFx0XHRcdFx0OiBjb2xsZWN0aW9uT2JqZWN0Py50YXJnZXRUeXBlPy5lbnRpdHlQcm9wZXJ0aWVzO1xuXHRcdFx0Y29uc3QgcHJvcGVydHlBbm5vdGF0aW9ucyA9IGVudGl0eVByb3BlcnRpZXM/LmZpbmQoKHByb3BlcnR5OiBQcm9wZXJ0eSkgPT4gcHJvcGVydHkubmFtZSA9PSBhZ2dyZWdhdGFibGVQcm9wZXJ0eVBhdGgpO1xuXHRcdFx0aWYgKHByb3BlcnR5QW5ub3RhdGlvbnM/LmFubm90YXRpb25zPy5NZWFzdXJlcyAmJiBVT00pIHtcblx0XHRcdFx0VU9NT2JqZWN0UGF0aCA9IHByb3BlcnR5QW5ub3RhdGlvbnM/LmFubm90YXRpb25zPy5NZWFzdXJlc1tVT01dIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjx1bmtub3duPjtcblx0XHRcdFx0VU9NT2JqZWN0W1VPTV0gPSB7ICRQYXRoOiBVT01PYmplY3RQYXRoPy5wYXRoIH07XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gVU9NT2JqZWN0UGF0aCAmJiBjdXN0b21EYXRhICYmIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKFVPTU9iamVjdFBhdGgpICYmIFVPTU9iamVjdFBhdGgucGF0aFxuXHRcdFx0XHQ/IFVPTU9iamVjdFxuXHRcdFx0XHQ6IFVPTU9iamVjdFBhdGg7XG5cdFx0fVxuXHR9LFxuXHRnZXRVb006IGZ1bmN0aW9uIChcblx0XHRjaGFydEFubm90YXRpb24/OiBDaGFydCxcblx0XHRjb2xsZWN0aW9uPzogRGF0YU1vZGVsT2JqZWN0UGF0aDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRcdGN1c3RvbURhdGE/OiBib29sZWFuLFxuXHRcdGN1c3RvbUFnZ3JlZ2F0ZT86IGJvb2xlYW4sXG5cdFx0YWdncmVnYXRpb24/OiBBZ2dyZWdhdGVkUHJvcGVydHlUeXBlXG5cdCk6IHN0cmluZyB8IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPHVua25vd24+IHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQge1xuXHRcdGxldCBtZWFzdXJlOiBNZWFzdXJlVHlwZSA9IHt9O1xuXHRcdGlmIChjdXN0b21BZ2dyZWdhdGUpIHtcblx0XHRcdG1lYXN1cmUgPSBjaGFydEFubm90YXRpb24/Lk1lYXN1cmVzWzBdIGFzIE1lYXN1cmVUeXBlO1xuXHRcdH1cblx0XHRpZiAoY2hhcnRBbm5vdGF0aW9uPy5EeW5hbWljTWVhc3VyZXMgJiYgY2hhcnRBbm5vdGF0aW9uLkR5bmFtaWNNZWFzdXJlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRtZWFzdXJlID0gKGNoYXJ0QW5ub3RhdGlvbi5EeW5hbWljTWVhc3VyZXNbMF0/LiR0YXJnZXQgYXMgQWdncmVnYXRlZFByb3BlcnR5VHlwZSk/LkFnZ3JlZ2F0YWJsZVByb3BlcnR5Py4kdGFyZ2V0Py5hbm5vdGF0aW9uc1xuXHRcdFx0XHQ/Lk1lYXN1cmVzIGFzIE1lYXN1cmVUeXBlO1xuXHRcdH0gZWxzZSBpZiAoIWN1c3RvbUFnZ3JlZ2F0ZSAmJiBjaGFydEFubm90YXRpb24/Lk1lYXN1cmVzICYmIGNoYXJ0QW5ub3RhdGlvbi5NZWFzdXJlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRtZWFzdXJlID0gY2hhcnRBbm5vdGF0aW9uLk1lYXN1cmVzWzBdO1xuXHRcdH1cblx0XHRjb25zdCBJU09DdXJyZW5jeSA9IG1lYXN1cmU/LklTT0N1cnJlbmN5O1xuXHRcdGNvbnN0IHVuaXQgPSBtZWFzdXJlPy5Vbml0O1xuXHRcdGxldCBhZ2dyZWdhdGFibGVQcm9wZXJ0eVBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRpZiAoIWN1c3RvbUFnZ3JlZ2F0ZSAmJiBhZ2dyZWdhdGlvbikge1xuXHRcdFx0YWdncmVnYXRhYmxlUHJvcGVydHlQYXRoID0gYWdncmVnYXRpb24uQWdncmVnYXRhYmxlUHJvcGVydHkgJiYgYWdncmVnYXRpb24uQWdncmVnYXRhYmxlUHJvcGVydHkudmFsdWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFnZ3JlZ2F0YWJsZVByb3BlcnR5UGF0aCA9IG1lYXN1cmU/LnZhbHVlO1xuXHRcdH1cblx0XHRyZXR1cm4gKFxuXHRcdFx0dGhpcy5fZ2V0VU9NKElTT0N1cnJlbmN5LCBcIklTT0N1cnJlbmN5XCIsIGNvbGxlY3Rpb24sIGN1c3RvbURhdGEsIGFnZ3JlZ2F0YWJsZVByb3BlcnR5UGF0aCkgfHxcblx0XHRcdHRoaXMuX2dldFVPTSh1bml0LCBcIlVuaXRcIiwgY29sbGVjdGlvbiwgY3VzdG9tRGF0YSwgYWdncmVnYXRhYmxlUHJvcGVydHlQYXRoKVxuXHRcdCk7XG5cdH0sXG5cdGdldFNjYWxlRmFjdG9yOiBmdW5jdGlvbiAodmFsdWVGb3JtYXQ/OiBOdW1iZXJGb3JtYXRUeXBlKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAodmFsdWVGb3JtYXQgJiYgdmFsdWVGb3JtYXQuU2NhbGVGYWN0b3IpIHtcblx0XHRcdHJldHVybiB2YWx1ZUZvcm1hdC5TY2FsZUZhY3Rvci52YWx1ZU9mKCk7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH0sXG5cdGdldFVvTVZpc2libGl0eTogZnVuY3Rpb24gKGNoYXJ0QW5ub3RhdGlvbj86IENoYXJ0LCBzaG93RXJyb3I/OiBib29sZWFuKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgY2hhcnRUeXBlID0gY2hhcnRBbm5vdGF0aW9uICYmIGNoYXJ0QW5ub3RhdGlvbltcIkNoYXJ0VHlwZVwiXTtcblx0XHRpZiAoc2hvd0Vycm9yKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIGlmICghKGNoYXJ0VHlwZSA9PT0gXCJVSS5DaGFydFR5cGUvQmFyXCIgfHwgY2hhcnRUeXBlID09PSBcIlVJLkNoYXJ0VHlwZS9MaW5lXCIpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fSxcblx0Z2V0SW5QYXJhbWV0ZXJGaWx0ZXJzQmluZGluZzogZnVuY3Rpb24gKGluUGFyYW1ldGVyczogQXJyYXk8UGFyYW1ldGVyVHlwZT4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGlmIChpblBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XG5cdFx0XHRsZXQgcGF0aHMgPSBcIlwiO1xuXHRcdFx0aW5QYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24gKGluUGFyYW1ldGVyOiBQYXJhbWV0ZXJUeXBlKSB7XG5cdFx0XHRcdGlmIChpblBhcmFtZXRlci5sb2NhbERhdGFQcm9wZXJ0eSkge1xuXHRcdFx0XHRcdHBhcnRzLnB1c2goYHtwYXRoOickZmlsdGVycz4vY29uZGl0aW9ucy8ke2luUGFyYW1ldGVyLmxvY2FsRGF0YVByb3BlcnR5fSd9YCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0aWYgKHBhcnRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0cGF0aHMgPSBwYXJ0cy5qb2luKCk7XG5cdFx0XHRcdHJldHVybiBge3BhcnRzOlske3BhdGhzfV0sIGZvcm1hdHRlcjonc2FwLmZlLm1hY3Jvcy52aXN1YWxmaWx0ZXJzLlZpc3VhbEZpbHRlclJ1bnRpbWUuZ2V0RmlsdGVyc0Zyb21Db25kaXRpb25zJ31gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdH0sXG5cblx0Z2V0ZmlsdGVyQ291bnRCaW5kaW5nOiBmdW5jdGlvbiAoY2hhcnRBbm5vdGF0aW9uPzogQ2hhcnQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGRpbWVuc2lvbiA9IGNoYXJ0QW5ub3RhdGlvbj8uRGltZW5zaW9uc1swXT8uJHRhcmdldD8ubmFtZTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0XCJ7cGF0aDonJGZpbHRlcnM+L2NvbmRpdGlvbnMvXCIgKyBkaW1lbnNpb24gKyBcIicsIGZvcm1hdHRlcjonc2FwLmZlLm1hY3Jvcy52aXN1YWxmaWx0ZXJzLlZpc3VhbEZpbHRlclJ1bnRpbWUuZ2V0RmlsdGVyQ291bnRzJ31cIlxuXHRcdCk7XG5cdH0sXG5cblx0Z2V0SW50ZXJhY3RpdmVDaGFydFByb3BlcnRpZXM6IGZ1bmN0aW9uICh2aXN1YWxGaWx0ZXI6IFZpc3VhbEZpbHRlcik6IEludGVyYWN0aXZlQ2hhcnRUeXBlIHtcblx0XHRjb25zdCBjaGFydEFubm90YXRpb24gPSB2aXN1YWxGaWx0ZXIuY2hhcnRBbm5vdGF0aW9uO1xuXHRcdGNvbnN0IGludGVyYWN0aXZlQ2hhcnRQcm9wZXJ0aWVzOiBJbnRlcmFjdGl2ZUNoYXJ0VHlwZSA9IHt9O1xuXHRcdGlmICh2aXN1YWxGaWx0ZXIuY2hhcnRNZWFzdXJlICYmIGNoYXJ0QW5ub3RhdGlvbj8uRGltZW5zaW9ucyAmJiBjaGFydEFubm90YXRpb24uRGltZW5zaW9uc1swXSkge1xuXHRcdFx0Y29uc3QgaWQgPSBnZW5lcmF0ZShbdmlzdWFsRmlsdGVyLm1ldGFQYXRoXSk7XG5cdFx0XHRpbnRlcmFjdGl2ZUNoYXJ0UHJvcGVydGllcy5zaG93RXJyb3JFeHByZXNzaW9uID0gXCJ7PSAke2ludGVybmFsPlwiICsgaWQgKyBcIi9zaG93RXJyb3J9fVwiO1xuXHRcdFx0aW50ZXJhY3RpdmVDaGFydFByb3BlcnRpZXMuZXJyb3JNZXNzYWdlRXhwcmVzc2lvbiA9IFwiez0gJHtpbnRlcm5hbD5cIiArIGlkICsgXCIvZXJyb3JNZXNzYWdlfX1cIjtcblx0XHRcdGludGVyYWN0aXZlQ2hhcnRQcm9wZXJ0aWVzLmVycm9yTWVzc2FnZVRpdGxlRXhwcmVzc2lvbiA9IFwiez0gJHtpbnRlcm5hbD5cIiArIGlkICsgXCIvZXJyb3JNZXNzYWdlVGl0bGV9fVwiO1xuXHRcdFx0bGV0IGRhdGFQb2ludEFubm90YXRpb247XG5cdFx0XHRpZiAoY2hhcnRBbm5vdGF0aW9uPy5NZWFzdXJlQXR0cmlidXRlcyAmJiBjaGFydEFubm90YXRpb24/Lk1lYXN1cmVBdHRyaWJ1dGVzWzBdKSB7XG5cdFx0XHRcdGRhdGFQb2ludEFubm90YXRpb24gPSBjaGFydEFubm90YXRpb24/Lk1lYXN1cmVBdHRyaWJ1dGVzWzBdPy5EYXRhUG9pbnRcblx0XHRcdFx0XHQ/IGNoYXJ0QW5ub3RhdGlvbj8uTWVhc3VyZUF0dHJpYnV0ZXNbMF0uRGF0YVBvaW50LiR0YXJnZXRcblx0XHRcdFx0XHQ6IGNoYXJ0QW5ub3RhdGlvbj8uTWVhc3VyZUF0dHJpYnV0ZXNbMF07XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBkaW1lbnNpb24gPSBjaGFydEFubm90YXRpb24/LkRpbWVuc2lvbnNbMF07XG5cdFx0XHRjb25zdCBwYXJhbWV0ZXJzID0gQ29tbW9uSGVscGVyLmdldFBhcmFtZXRlcnModmlzdWFsRmlsdGVyLmNvbnRleHRQYXRoLCB2aXN1YWxGaWx0ZXIuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdFx0Y29uc3QgZGltZW5zaW9uVGV4dCA9IGRpbWVuc2lvbj8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCBhcyB1bmtub3duIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+O1xuXHRcdFx0aW50ZXJhY3RpdmVDaGFydFByb3BlcnRpZXMuYWdncmVnYXRpb25CaW5kaW5nID0gSW50ZXJhY3RpdmVDaGFydEhlbHBlci5nZXRBZ2dyZWdhdGlvbkJpbmRpbmcoXG5cdFx0XHRcdGNoYXJ0QW5ub3RhdGlvbixcblx0XHRcdFx0dmlzdWFsRmlsdGVyLmNvbGxlY3Rpb24sXG5cdFx0XHRcdHZpc3VhbEZpbHRlci5jb250ZXh0UGF0aCxcblx0XHRcdFx0ZGltZW5zaW9uVGV4dCxcblx0XHRcdFx0ZGltZW5zaW9uLiR0YXJnZXQ/LnR5cGUsXG5cdFx0XHRcdHZpc3VhbEZpbHRlcj8uc29ydE9yZGVyLFxuXHRcdFx0XHR2aXN1YWxGaWx0ZXIuc2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdFx0dmlzdWFsRmlsdGVyLmN1c3RvbUFnZ3JlZ2F0ZSxcblx0XHRcdFx0dmlzdWFsRmlsdGVyLmFnZ3JlZ2F0ZVByb3BlcnRpZXMsXG5cdFx0XHRcdHZpc3VhbEZpbHRlci5Vb01IYXNDdXN0b21BZ2dyZWdhdGUsXG5cdFx0XHRcdHBhcmFtZXRlcnMsXG5cdFx0XHRcdHZpc3VhbEZpbHRlci5maWx0ZXJCYXJFbnRpdHlUeXBlLFxuXHRcdFx0XHR2aXN1YWxGaWx0ZXIuZHJhZnRTdXBwb3J0ZWQsXG5cdFx0XHRcdHZpc3VhbEZpbHRlci5jaGFydE1lYXN1cmUsXG5cdFx0XHRcdHZpc3VhbEZpbHRlci5nZXRNZXRhTW9kZWwoKVxuXHRcdFx0KTtcblx0XHRcdGludGVyYWN0aXZlQ2hhcnRQcm9wZXJ0aWVzLnNjYWxlZmFjdG9yID0gSW50ZXJhY3RpdmVDaGFydEhlbHBlci5nZXRTY2FsZUZhY3RvcigoZGF0YVBvaW50QW5ub3RhdGlvbiBhcyBEYXRhUG9pbnQpPy5WYWx1ZUZvcm1hdCk7XG5cdFx0XHRpbnRlcmFjdGl2ZUNoYXJ0UHJvcGVydGllcy51b20gPSBJbnRlcmFjdGl2ZUNoYXJ0SGVscGVyLmdldFVvTShcblx0XHRcdFx0Y2hhcnRBbm5vdGF0aW9uLFxuXHRcdFx0XHR2aXN1YWxGaWx0ZXIuY29sbGVjdGlvbixcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0dmlzdWFsRmlsdGVyLmN1c3RvbUFnZ3JlZ2F0ZSxcblx0XHRcdFx0dmlzdWFsRmlsdGVyLmFnZ3JlZ2F0ZVByb3BlcnRpZXNcblx0XHRcdCk7XG5cdFx0XHRpbnRlcmFjdGl2ZUNoYXJ0UHJvcGVydGllcy5pblBhcmFtZXRlcnMgPSB2aXN1YWxGaWx0ZXIuaW5QYXJhbWV0ZXJzO1xuXHRcdFx0Y29uc3QgaW5QYXJhbWV0ZXJzID0gQ29tbW9uSGVscGVyLnBhcnNlQ3VzdG9tRGF0YSh2aXN1YWxGaWx0ZXIuaW5QYXJhbWV0ZXJzIGFzIHVua25vd24gYXMgc3RyaW5nKTtcblx0XHRcdGludGVyYWN0aXZlQ2hhcnRQcm9wZXJ0aWVzLmluUGFyYW1ldGVyRmlsdGVycyA9IHZpc3VhbEZpbHRlci5pblBhcmFtZXRlcnNcblx0XHRcdFx0PyBJbnRlcmFjdGl2ZUNoYXJ0SGVscGVyLmdldEluUGFyYW1ldGVyRmlsdGVyc0JpbmRpbmcoaW5QYXJhbWV0ZXJzIGFzIEFycmF5PFBhcmFtZXRlclR5cGU+KVxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdGludGVyYWN0aXZlQ2hhcnRQcm9wZXJ0aWVzLnNlbGVjdGlvblZhcmlhbnQgPSB2aXN1YWxGaWx0ZXIuc2VsZWN0aW9uVmFyaWFudCA/IHZpc3VhbEZpbHRlci5zZWxlY3Rpb25WYXJpYW50IDogdW5kZWZpbmVkO1xuXHRcdFx0aW50ZXJhY3RpdmVDaGFydFByb3BlcnRpZXMuc3RyaW5naWZpZWRQYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcblx0XHRcdGNvbnN0IGRpbWVuc2lvbkNvbnRleHQgPSB2aXN1YWxGaWx0ZXJcblx0XHRcdFx0LmdldE1ldGFNb2RlbCgpXG5cdFx0XHRcdD8uY3JlYXRlQmluZGluZ0NvbnRleHQodmlzdWFsRmlsdGVyLmNvbnRleHRQYXRoICsgXCIvQFwiICsgZGltZW5zaW9uLmZ1bGx5UXVhbGlmaWVkTmFtZS5zcGxpdChcIkBcIilbMV0pO1xuXHRcdFx0aWYgKGRpbWVuc2lvbkNvbnRleHQpIHtcblx0XHRcdFx0Y29uc3QgZGltZW5zaW9uT2JqZWN0ID0gdmlzdWFsRmlsdGVyLmdldERhdGFNb2RlbE9iamVjdEZvck1ldGFQYXRoPFByb3BlcnR5Pihcblx0XHRcdFx0XHRkaW1lbnNpb25Db250ZXh0LmdldFBhdGgoKSxcblx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuY29udGV4dFBhdGhcblx0XHRcdFx0KTtcblx0XHRcdFx0aW50ZXJhY3RpdmVDaGFydFByb3BlcnRpZXMuY2hhcnRMYWJlbCA9IGdldFRleHRCaW5kaW5nKGRpbWVuc2lvbk9iamVjdCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Piwge30pO1xuXHRcdFx0fVxuXHRcdFx0aW50ZXJhY3RpdmVDaGFydFByb3BlcnRpZXMubWVhc3VyZSA9IEludGVyYWN0aXZlQ2hhcnRIZWxwZXIuZ2V0Q2hhcnRWYWx1ZSh2aXN1YWxGaWx0ZXIuY2hhcnRNZWFzdXJlKTtcblx0XHRcdGludGVyYWN0aXZlQ2hhcnRQcm9wZXJ0aWVzLmRpc3BsYXllZFZhbHVlID0gSW50ZXJhY3RpdmVDaGFydEhlbHBlci5nZXRDaGFydERpc3BsYXllZFZhbHVlKFxuXHRcdFx0XHR2aXN1YWxGaWx0ZXIuY2hhcnRNZWFzdXJlLFxuXHRcdFx0XHQoZGF0YVBvaW50QW5ub3RhdGlvbiBhcyBEYXRhUG9pbnQpPy5WYWx1ZUZvcm1hdCxcblx0XHRcdFx0dmlzdWFsRmlsdGVyLm1ldGFQYXRoXG5cdFx0XHQpO1xuXHRcdFx0aW50ZXJhY3RpdmVDaGFydFByb3BlcnRpZXMuY29sb3IgPSBJbnRlcmFjdGl2ZUNoYXJ0SGVscGVyLmdldENvbG9yQmluZGluZyhkYXRhUG9pbnRBbm5vdGF0aW9uIGFzIERhdGFQb2ludCwgZGltZW5zaW9uKTtcblx0XHR9XG5cdFx0cmV0dXJuIGludGVyYWN0aXZlQ2hhcnRQcm9wZXJ0aWVzO1xuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBJbnRlcmFjdGl2ZUNoYXJ0SGVscGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFpRkEsTUFBTUEsc0JBQXNCLEdBQUc7SUFDOUJDLHNCQUFzQixFQUFFLFNBQUFBLENBQVVDLEtBQWEsRUFBRUMsV0FBOEIsRUFBRUMsUUFBaUIsRUFBVTtNQUMzRyxNQUFNQyxRQUFRLEdBQUdDLFFBQVEsQ0FBQyxDQUFDRixRQUFRLENBQUMsQ0FBQztNQUNyQyxPQUNDLGlCQUFpQixHQUNqQkYsS0FBSyxHQUNMLDJFQUEyRSxJQUMxRUMsV0FBVyxJQUFJQSxXQUFXLENBQUNJLFdBQVcsR0FDcEMsV0FBVyxHQUFHSixXQUFXLENBQUNJLFdBQVcsQ0FBQ0MsT0FBTyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQ3RELHFDQUFxQyxHQUFHSCxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQzFERixXQUFXLElBQUlBLFdBQVcsQ0FBQ00sd0JBQXdCLEdBQ2pELFdBQVcsR0FBR04sV0FBVyxDQUFDTSx3QkFBd0IsR0FBRyxJQUFJLEdBQ3pELGNBQWMsQ0FBQyxHQUNsQiw0QkFBNEIsR0FDNUJKLFFBQVEsR0FDUixJQUFJLEdBQ0osVUFBVSxHQUNWSCxLQUFLLEdBQ0wsMEVBQTBFLEdBQzFFLHdGQUF3RixDQUN2RixDQUFDO0lBQ0osQ0FBQztJQUNEUSxhQUFhLEVBQUUsU0FBQUEsQ0FBVVIsS0FBYSxFQUFVO01BQy9DLE9BQU8sU0FBUyxHQUFHQSxLQUFLLEdBQUcsMkVBQTJFO0lBQ3ZHLENBQUM7SUFDRFMsa0JBQWtCLEVBQUUsU0FBQUEsQ0FDbkJDLFVBQWtFLEVBQ2xFQyxXQUFtQixFQUNuQkMsVUFBMEIsRUFDakI7TUFDVCxNQUFNQyxnQkFBZ0IsR0FBR0gsVUFBVSxFQUFFSSxZQUFZO01BQ2pELElBQUlDLG9CQUFvQixDQUFDRixnQkFBZ0Is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Q0FBQztRQUNEWiwwQkFBMEIsQ0FBQ1IsWUFBWSxHQUFHTyxZQUFZLENBQUNQLFlBQVk7UUFDbkUsTUFBTUEsWUFBWSxHQUFHNUUsWUFBWSxDQUFDbUcsZUFBZSxDQUFDaEIsWUFBWSxDQUFDUCxZQUFpQyxDQUFDO1FBQ2pHUSwwQkFBMEIsQ0FBQ2dCLGtCQUFrQixHQUFHakIsWUFBWSxDQUFDUCxZQUFZLEdBQ3RFcE8sc0JBQXNCLENBQUNtTyw0QkFBNEIsQ0FBQ0MsWUFBb0MsQ0FBQyxHQUN6RmxMLFNBQVM7UUFDWjBMLDBCQUEwQixDQUFDeEosZ0JBQWdCLEdBQUd1SixZQUFZLENBQUN2SixnQkFBZ0IsR0FBR3VKLFlBQVksQ0FBQ3ZKLGdCQUFnQixHQUFHbEMsU0FBUztRQUN2SDBMLDBCQUEwQixDQUFDaUIscUJBQXFCLEdBQUcvTyxVQUFVO1FBQzdELE1BQU1nUCxnQkFBZ0IsR0FBR25CLFlBQVksQ0FDbkNRLFlBQVksQ0FBQyxDQUFDLEVBQ2I3TSxvQkFBb0IsQ0FBQ3FNLFlBQVksQ0FBQzlOLFdBQVcsR0FBRyxJQUFJLEdBQUc2RSxTQUFTLENBQUNxSyxrQkFBa0IsQ0FBQzNOLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRyxJQUFJME4sZ0JBQWdCLEVBQUU7VUFDckIsTUFBTUUsZUFBZSxHQUFHckIsWUFBWSxDQUFDc0IsNkJBQTZCLENBQ2pFSCxnQkFBZ0IsQ0FBQ0ksT0FBTyxDQUFDLENBQUMsRUFDMUJ2QixZQUFZLENBQUM5TixXQUNkLENBQUM7VUFDRCtOLDBCQUEwQixDQUFDdUIsVUFBVSxHQUFHQyxjQUFjLENBQUNKLGVBQWUsRUFBbUMsQ0FBQyxDQUFDLENBQUM7UUFDN0c7UUFDQXBCLDBCQUEwQixDQUFDZixPQUFPLEdBQUc3TixzQkFBc0IsQ0FBQ1UsYUFBYSxDQUFDaU8sWUFBWSxDQUFDcEosWUFBWSxDQUFDO1FBQ3BHcUosMEJBQTBCLENBQUN5QixjQUFjLEdBQUdyUSxzQkFBc0IsQ0FBQ0Msc0JBQXNCLENBQ3hGME8sWUFBWSxDQUFDcEosWUFBWSxFQUN4QjBKLG1CQUFtQixFQUFnQmxFLFdBQVcsRUFDL0M0RCxZQUFZLENBQUN2TyxRQUNkLENBQUM7UUFDRHdPLDBCQUEwQixDQUFDMEIsS0FBSyxHQUFHdFEsc0JBQXNCLENBQUMrSCxlQUFlLENBQUNrSCxtQkFBbUIsRUFBZXZKLFNBQVMsQ0FBQztNQUN2SDtNQUNBLE9BQU9rSiwwQkFBMEI7SUFDbEM7RUFDRCxDQUFDO0VBQUMsT0FFYTVPLHNCQUFzQjtBQUFBIiwiaWdub3JlTGlzdCI6W119
454
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJbnRlcmFjdGl2ZUNoYXJ0SGVscGVyIiwiZ2V0Q2hhcnREaXNwbGF5ZWRWYWx1ZSIsInZhbHVlIiwidmFsdWVGb3JtYXQiLCJtZXRhUGF0aCIsImluZm9QYXRoIiwiZ2VuZXJhdGUiLCJTY2FsZUZhY3RvciIsInZhbHVlT2YiLCJOdW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMiLCJnZXRDaGFydFZhbHVlIiwiX2dldENvbGxlY3Rpb25OYW1lIiwiY29sbGVjdGlvbiIsImNvbnRleHRQYXRoIiwicGFyYW1ldGVycyIsImNvbGxlY3Rpb25PYmplY3QiLCJ0YXJnZXRPYmplY3QiLCJpc05hdmlnYXRpb25Qcm9wZXJ0eSIsIm5hbWUiLCJpc0VudGl0eVNldCIsIl9nZXRCaW5kaW5nUGF0aEZvclBhcmFtZXRlcnMiLCJmaWx0ZXJDb25kaXRpb25zIiwibWV0YU1vZGVsIiwiY29sbGVjdGlvbk5hbWUiLCJlbnRpdHlTZXRQYXRoIiwicGFyYW1zIiwiY29udmVydGVkRmlsdGVyQ29uZGl0aW9ucyIsIlZpc3VhbEZpbHRlclV0aWxzIiwiY29udmVydEZpbHRlckNvbmRpb25zIiwicGFyYW1ldGVyUHJvcGVydGllcyIsIkNvbW1vblV0aWxzIiwiZ2V0UGFyYW1ldGVySW5mbyIsImkiLCJwYXJhbWV0ZXIiLCJwcm9wZXJ0eSIsImVudGl0eVBhdGgiLCJzcGxpdCIsInByb3BlcnR5Q29udGV4dCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwidHlwZUNvbmZpZyIsIlR5cGVNYXAiLCJnZXRUeXBlQ29uZmlnIiwiJFR5cGUiLCJKU1Rva2VuaXplciIsInBhcnNlSlMiLCJmb3JtYXRPcHRpb25zIiwiY29udGV4dCIsImNvbnN0cmFpbnRzIiwiY29uZGl0aW9uIiwiY29uZGl0aW9uSW50ZXJuYWwiLCJ1bmRlZmluZWQiLCJpbnRlcm5hbFBhcmFtZXRlckNvbmRpdGlvbiIsIkNvbmRpdGlvbkNvbnZlcnRlciIsInRvVHlwZSIsImVkbVR5cGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJPRGF0YVV0aWxzIiwiZm9ybWF0TGl0ZXJhbCIsInZhbHVlcyIsInB1c2giLCJwYXJhbWV0ZXJFbnRpdHlTZXQiLCJzbGljZSIsImxhc3RJbmRleE9mIiwidGFyZ2V0TmF2aWdhdGlvbiIsInN1YnN0cmluZyIsInRvU3RyaW5nIiwiX2dldFVPTUFnZ3JlZ2F0aW9uRXhwcmVzc2lvbiIsImN1c3RvbUFnZ3JlZ2F0ZSIsIlVvTUhhc0N1c3RvbUFnZ3JlZ2F0ZSIsIlVPTSIsImFnZ3JlZ2F0aW9uIiwiYWdncmVnYXRpb25FeHByZXNzaW9uIiwiVU9NRXhwcmVzc2lvbiIsInBhdGgiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsInVuaXQiLCJBZ2dyZWdhdGFibGVQcm9wZXJ0eSIsIkFnZ3JlZ2F0aW9uTWV0aG9kIiwid2l0aCIsImdldEFnZ3JlZ2F0aW9uQmluZGluZyIsImNoYXJ0QW5ub3RhdGlvbnMiLCJ0ZXh0QXNzb2NpYXRpb24iLCJkaW1lbnNpb25UeXBlIiwic29ydE9yZGVyIiwic2VsZWN0aW9uVmFyaWFudCIsImZpbHRlckJhckVudGl0eVR5cGUiLCJkcmFmdFN1cHBvcnRlZCIsImNoYXJ0TWVhc3VyZSIsInNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwiZW50aXR5VHlwZSIsImRpbWVuc2lvbiIsIkRpbWVuc2lvbnMiLCJmaWx0ZXJzIiwiZ2V0VW9NIiwiRmlsdGVyIiwib3BlcmF0b3IiLCJ2YWx1ZTEiLCJ2YWx1ZTIiLCJnZXRGaWx0ZXJzQ29uZGl0aW9uc0Zyb21TZWxlY3Rpb25WYXJpYW50IiwiZ2V0Q3VzdG9tQ29uZGl0aW9ucyIsImJpbmQiLCJjb25kaXRpb25zIiwiZm9yRWFjaCIsImlzUGFyYW1ldGVyIiwibGVuZ3RoIiwiYmluZGluZ1BhdGgiLCJVT01BZ2dyZWdhdGlvbkV4cHJlc3Npb24iLCJ0ZXh0QXNzb2NpYXRpb25FeHByZXNzaW9uIiwiYWRkaXRpb25hbGx5IiwiZmluYWxwYXJhbWV0ZXJzIiwiZ2V0U29ydE9yZGVyIiwiJCRhZ2dyZWdhdGlvbiIsImFnZ3JlZ2F0ZSIsImdyb3VwIiwidGVtcGxhdGVTaGFyZWFibGUiLCJzdXNwZW5kZWQiLCJnZXRNYXhJdGVtcyIsIl9nZXRPcmRlckV4cHJlc3Npb25Gcm9tTWVhc3VyZSIsInNvcnRQcm9wZXJ0eU5hbWUiLCJEeW5hbWljUHJvcGVydHkiLCIkdGFyZ2V0IiwiTmFtZSIsIlByb3BlcnR5IiwiJG9yZGVyYnkiLCJEZXNjZW5kaW5nIiwiQ2hhcnRUeXBlIiwic3RhcnRJbmRleCIsImdldENvbG9yQmluZGluZyIsImRhdGFQb2ludCIsInZhbHVlQ3JpdGljYWxpdHkiLCJhbm5vdGF0aW9ucyIsIlVJIiwiVmFsdWVDcml0aWNhbGl0eSIsIkNyaXRpY2FsaXR5IiwiYnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlDb2xvck1pY3JvQ2hhcnQiLCJDcml0aWNhbGl0eUNhbGN1bGF0aW9uIiwib0RpcmVjdGlvbiIsIkltcHJvdmVtZW50RGlyZWN0aW9uIiwib0RhdGFQb2ludFZhbHVlIiwiVmFsdWUiLCJvRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZSIsIkRldmlhdGlvblJhbmdlTG93VmFsdWUiLCJvVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSIsIlRvbGVyYW5jZVJhbmdlTG93VmFsdWUiLCJvQWNjZXB0YW5jZVJhbmdlTG93VmFsdWUiLCJBY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZSIsIm9BY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWUiLCJBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWUiLCJvVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWUiLCJUb2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZSIsIm9EZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZSIsIkRldmlhdGlvblJhbmdlSGlnaFZhbHVlIiwiQ29tbW9uSGVscGVyIiwiZ2V0Q3JpdGljYWxpdHlDYWxjdWxhdGlvbkJpbmRpbmciLCJnZXRWYWx1ZUNyaXRpY2FsaXR5IiwicmVzdWx0IiwidmFsdWVDcml0aWNhbGl0eVR5cGUiLCJfZ2V0Q3JpdGljYWxpdHlGcm9tRW51bSIsImpvaW4iLCJjcml0aWNhbGl0eSIsInZhbHVlQ29sb3IiLCJtTGlicmFyeSIsIlZhbHVlQ29sb3IiLCJpbmRpY2F0b3IiLCJFcnJvciIsIkdvb2QiLCJDcml0aWNhbCIsIk5ldXRyYWwiLCJnZXRTY2FsZVVvTVRpdGxlIiwiY2hhcnRBbm5vdGF0aW9uIiwic2VwZXJhdG9yIiwidG9vbFRpcCIsInNjYWxlRmFjdG9yIiwiTWVhc3VyZUF0dHJpYnV0ZXMiLCJEYXRhUG9pbnQiLCJWYWx1ZUZvcm1hdCIsImZpeGVkSW50ZWdlciIsIk51bWJlckZvcm1hdCIsImdldEludGVnZXJJbnN0YW5jZSIsInN0eWxlIiwic2hvd1NjYWxlIiwic2hvcnRSZWZOdW1iZXIiLCJzY2FsZSIsImdldFNjYWxlIiwiVU9NRXhwIiwicGF0aEluTW9kZWwiLCJjb25zdGFudCIsInNjYWxlRXhwIiwiY29tcGlsZUV4cHJlc3Npb24iLCJmb3JtYXRSZXN1bHQiLCJ2aXN1YWxGaWx0ZXJGb3JtYXR0ZXIiLCJmb3JtYXRTY2FsZUFuZFVPTSIsImdldE1lYXN1cmVEaW1lbnNpb25UaXRsZSIsIm1lYXN1cmVMYWJlbCIsIm1lYXN1cmVQYXRoIiwiTWVhc3VyZXMiLCJEeW5hbWljTWVhc3VyZXMiLCJkaW1lbnNpb25QYXRoIiwiZGltZW5zaW9uTGFiZWwiLCJDb21tb24iLCJMYWJlbCIsIkxpYnJhcnkiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsImdldFRleHQiLCJnZXRUb29sVGlwIiwicmVuZGVyTGluZUNoYXJ0IiwiY2hhcnRUeXBlIiwibWVhc3VyZURpbWVuc2lvblRvb2xUaXAiLCJlc2NhcGVTaW5nbGVRdW90ZXMiLCJzY2FsZVVPTVRvb2x0aXAiLCJfZ2V0VU9NIiwiVU9NT2JqZWN0UGF0aCIsImN1c3RvbURhdGEiLCJhZ2dyZWdhdGFibGVQcm9wZXJ0eVBhdGgiLCJVT01PYmplY3QiLCIkUGF0aCIsImVudGl0eVByb3BlcnRpZXMiLCJpc1NpbmdsZXRvbiIsInRhcmdldFR5cGUiLCJwcm9wZXJ0eUFubm90YXRpb25zIiwiZmluZCIsIm1lYXN1cmUiLCJJU09DdXJyZW5jeSIsIlVuaXQiLCJnZXRTY2FsZUZhY3RvciIsImdldFVvTVZpc2libGl0eSIsInNob3dFcnJvciIsImdldEluUGFyYW1ldGVyRmlsdGVyc0JpbmRpbmciLCJpblBhcmFtZXRlcnMiLCJwYXJ0cyIsInBhdGhzIiwiaW5QYXJhbWV0ZXIiLCJsb2NhbERhdGFQcm9wZXJ0eSIsImdldGZpbHRlckNvdW50QmluZGluZyIsImdldEludGVyYWN0aXZlQ2hhcnRQcm9wZXJ0aWVzIiwidmlzdWFsRmlsdGVyIiwiaW50ZXJhY3RpdmVDaGFydFByb3BlcnRpZXMiLCJpZCIsInNob3dFcnJvckV4cHJlc3Npb24iLCJlcnJvck1lc3NhZ2VFeHByZXNzaW9uIiwiZXJyb3JNZXNzYWdlVGl0bGVFeHByZXNzaW9uIiwiZGF0YVBvaW50QW5ub3RhdGlvbiIsImdldFBhcmFtZXRlcnMiLCJnZXRNZXRhTW9kZWwiLCJkaW1lbnNpb25UZXh0IiwiVGV4dCIsImFnZ3JlZ2F0aW9uQmluZGluZyIsInR5cGUiLCJhZ2dyZWdhdGVQcm9wZXJ0aWVzIiwic2NhbGVmYWN0b3IiLCJ1b20iLCJwYXJzZUN1c3RvbURhdGEiLCJpblBhcmFtZXRlckZpbHRlcnMiLCJzdHJpbmdpZmllZFBhcmFtZXRlcnMiLCJkaW1lbnNpb25Db250ZXh0IiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiZGltZW5zaW9uT2JqZWN0IiwiZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGgiLCJnZXRQYXRoIiwiY2hhcnRMYWJlbCIsImdldFRleHRCaW5kaW5nIiwiZGlzcGxheWVkVmFsdWUiLCJjb2xvciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiSW50ZXJhY3RpdmVDaGFydEhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiwgUHJvcGVydHksIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlLCBQcm9wZXJ0eVBhdGggfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgQWdncmVnYXRlZFByb3BlcnR5LCBBZ2dyZWdhdGVkUHJvcGVydHlUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9BbmFseXRpY3NcIjtcbmltcG9ydCB0eXBlIHsgTGFiZWwsIFNvcnRPcmRlclR5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUge1xuXHRDaGFydCxcblx0RGF0YVBvaW50LFxuXHROdW1iZXJGb3JtYXQgYXMgTnVtYmVyRm9ybWF0VHlwZSxcblx0U2VsZWN0aW9uVmFyaWFudCxcblx0VmFsdWVDcml0aWNhbGl0eVR5cGVcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IEpTVG9rZW5pemVyIGZyb20gXCJzYXAvYmFzZS91dGlsL0pTVG9rZW5pemVyXCI7XG5pbXBvcnQge1xuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Y29uc3RhbnQsXG5cdGZvcm1hdFJlc3VsdCxcblx0cGF0aEluTW9kZWwsXG5cdHR5cGUgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLFxuXHR0eXBlIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBQYXJhbWV0ZXJUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9WaXN1YWxGaWx0ZXJzXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgeyBpc0VudGl0eVNldCwgaXNOYXZpZ2F0aW9uUHJvcGVydHksIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uLCBpc1NpbmdsZXRvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB7IGJ1aWxkRXhwcmVzc2lvbkZvckNyaXRpY2FsaXR5Q29sb3JNaWNyb0NoYXJ0IH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvQ3JpdGljYWxpdHlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IFZpc3VhbEZpbHRlclV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL2ZpbHRlcmJhci91dGlscy9WaXN1YWxGaWx0ZXJVdGlsc1wiO1xuaW1wb3J0IHsgY29uc3RyYWludHMsIGZvcm1hdE9wdGlvbnMgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvRmlsdGVyRmllbGRIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyQ29uZGl0aW9ucyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlckJhci9GaWx0ZXJIZWxwZXJcIjtcbmltcG9ydCB7IGdldEZpbHRlcnNDb25kaXRpb25zRnJvbVNlbGVjdGlvblZhcmlhbnQgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXJCYXIvRmlsdGVySGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IFZhbHVlQ29sb3IgfSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IG1MaWJyYXJ5IGZyb20gXCJzYXAvbS9saWJyYXJ5XCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgTnVtYmVyRm9ybWF0IGZyb20gXCJzYXAvdWkvY29yZS9mb3JtYXQvTnVtYmVyRm9ybWF0XCI7XG5pbXBvcnQgQ29uZGl0aW9uQ29udmVydGVyIGZyb20gXCJzYXAvdWkvbWRjL2NvbmRpdGlvbi9Db25kaXRpb25Db252ZXJ0ZXJcIjtcbmltcG9ydCBUeXBlTWFwIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1R5cGVNYXBcIjtcbmltcG9ydCBGaWx0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJcIjtcbmltcG9ydCB0eXBlIEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBPRGF0YVV0aWxzIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFVdGlsc1wiO1xuaW1wb3J0IHsgZ2V0VGV4dEJpbmRpbmcgfSBmcm9tIFwiLi4vZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG5pbXBvcnQgdmlzdWFsRmlsdGVyRm9ybWF0dGVyIGZyb20gXCIuLi9mb3JtYXR0ZXJzL1Zpc3VhbEZpbHRlckZvcm1hdHRlclwiO1xuaW1wb3J0IHR5cGUgVmlzdWFsRmlsdGVyIGZyb20gXCIuL1Zpc3VhbEZpbHRlclwiO1xuXG50eXBlIE1lYXN1cmVUeXBlID0ge1xuXHR2YWx1ZT86IHN0cmluZztcblx0SVNPQ3VycmVuY3k/OiBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPjtcblx0VW5pdD86IFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+O1xufTtcbmV4cG9ydCB0eXBlIEludGVyYWN0aXZlQ2hhcnRUeXBlID0ge1xuXHRjaGFydExhYmVsPzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0YWdncmVnYXRpb25CaW5kaW5nPzogYWdncmVnYXRpb25CaW5kaW5nO1xuXHRlcnJvck1lc3NhZ2VUaXRsZUV4cHJlc3Npb24/OiBzdHJpbmc7XG5cdGVycm9yTWVzc2FnZUV4cHJlc3Npb24/OiBzdHJpbmc7XG5cdHNob3dFcnJvckV4cHJlc3Npb24/OiBzdHJpbmc7XG5cdGluUGFyYW1ldGVycz86IFBhcmFtZXRlclR5cGVbXTtcblx0ZGlzcGxheWVkVmFsdWU/OiBzdHJpbmc7XG5cdG1lYXN1cmU/OiBzdHJpbmc7XG5cdHN0cmluZ2lmaWVkUGFyYW1ldGVycz86IHN0cmluZ1tdO1xuXHRpblBhcmFtZXRlckZpbHRlcnM/OiBzdHJpbmc7XG5cdGNvbG9yPzogc3RyaW5nO1xuXHR1b20/OiBzdHJpbmcgfCBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTx1bmtub3duPiB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRzY2FsZWZhY3Rvcj86IG51bWJlciB8IG9iamVjdDtcblx0c2VsZWN0aW9uVmFyaWFudD86IFNlbGVjdGlvblZhcmlhbnQ7XG59O1xuXG50eXBlIGFnZ3JlZ2F0aW9uQmluZGluZyA9IHtcblx0cGF0aDogc3RyaW5nO1xuXHR0ZW1wbGF0ZVNoYXJlYWJsZTogYm9vbGVhbjtcblx0c3VzcGVuZGVkOiBib29sZWFuO1xuXHRmaWx0ZXJzOiBGaWx0ZXJbXTtcblx0cGFyYW1ldGVyczoge1xuXHRcdCQkYWdncmVnYXRpb246IHtcblx0XHRcdGFnZ3JlZ2F0ZTogeyBbeDogc3RyaW5nXToge30gfCB7IHVuaXQ6IHN0cmluZyB9IHwgeyBuYW1lOiBzdHJpbmc7IHdpdGg6IHN0cmluZyB9IHwgdW5kZWZpbmVkIH07XG5cdFx0XHRncm91cDogeyBbeDogc3RyaW5nXTogeyBhZGRpdGlvbmFsbHk6IHN0cmluZ1tdIH0gfCB7IGFkZGl0aW9uYWxseTogdW5kZWZpbmVkIH0gfTtcblx0XHR9O1xuXHRcdCRvcmRlcmJ5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdH07XG59O1xuXG5jb25zdCBJbnRlcmFjdGl2ZUNoYXJ0SGVscGVyID0ge1xuXHRnZXRDaGFydERpc3BsYXllZFZhbHVlOiBmdW5jdGlvbiAodmFsdWU6IHN0cmluZywgdmFsdWVGb3JtYXQ/OiBOdW1iZXJGb3JtYXRUeXBlLCBtZXRhUGF0aD86IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgaW5mb1BhdGggPSBnZW5lcmF0ZShbbWV0YVBhdGhdKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0XCJ7cGFydHM6W3twYXRoOidcIiArXG5cdFx0XHR2YWx1ZSArXG5cdFx0XHRcIicsdHlwZTonc2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRGVjaW1hbCcsIGNvbnN0cmFpbnRzOnsnbnVsbGFibGUnOmZhbHNlfX1cIiArXG5cdFx0XHQodmFsdWVGb3JtYXQgJiYgdmFsdWVGb3JtYXQuU2NhbGVGYWN0b3Jcblx0XHRcdFx0PyBcIix7dmFsdWU6J1wiICsgdmFsdWVGb3JtYXQuU2NhbGVGYWN0b3IudmFsdWVPZigpICsgXCInfVwiXG5cdFx0XHRcdDogXCIse3BhdGg6J2ludGVybmFsPnNjYWxlZmFjdG9yTnVtYmVyL1wiICsgaW5mb1BhdGggKyBcIid9XCIpICtcblx0XHRcdCh2YWx1ZUZvcm1hdCAmJiB2YWx1ZUZvcm1hdC5OdW1iZXJPZkZyYWN0aW9uYWxEaWdpdHNcblx0XHRcdFx0PyBcIix7dmFsdWU6J1wiICsgdmFsdWVGb3JtYXQuTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzICsgXCInfVwiXG5cdFx0XHRcdDogXCIse3ZhbHVlOicwJ31cIikgK1xuXHRcdFx0XCIse3BhdGg6J2ludGVybmFsPmN1cnJlbmN5L1wiICtcblx0XHRcdGluZm9QYXRoICtcblx0XHRcdFwiJ31cIiArXG5cdFx0XHRcIix7cGF0aDonXCIgK1xuXHRcdFx0dmFsdWUgK1xuXHRcdFx0XCInLHR5cGU6J3NhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZycsIGNvbnN0cmFpbnRzOnsnbnVsbGFibGUnOmZhbHNlfX1cIiArXG5cdFx0XHRcIl0sIGZvcm1hdHRlcjonLl9mb3JtYXR0ZXJzLlZpc3VhbEZpbHRlclJ1bnRpbWUuc2NhbGVWaXN1YWxGaWx0ZXJWYWx1ZSd9XCJcblx0XHQpOyAvLysgc1R5cGUuc3BsaXQoJyMnKS5sZW5ndGggPyBzVHlwZS5zcGxpdCgnIycpWzFdIDogJ0RlY2ltYWwnICsgXCJ9XCI7XG5cdH0sXG5cdGdldENoYXJ0VmFsdWU6IGZ1bmN0aW9uICh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gXCJ7cGF0aDonXCIgKyB2YWx1ZSArIFwiJyx0eXBlOidzYXAudWkubW9kZWwub2RhdGEudHlwZS5EZWNpbWFsJywgY29uc3RyYWludHM6eydudWxsYWJsZSc6ZmFsc2V9fVwiO1xuXHR9LFxuXHRfZ2V0Q29sbGVjdGlvbk5hbWU6IGZ1bmN0aW9uIChcblx0XHRjb2xsZWN0aW9uOiBEYXRhTW9kZWxPYmplY3RQYXRoPFBhZ2VDb250ZXh0UGF0aFRhcmdldD4gfCB1bmRlZmluZWQsXG5cdFx0Y29udGV4dFBhdGg6IHN0cmluZyxcblx0XHRwYXJhbWV0ZXJzPzogQXJyYXk8c3RyaW5nPlxuXHQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25PYmplY3QgPSBjb2xsZWN0aW9uPy50YXJnZXRPYmplY3Q7XG5cdFx0aWYgKGlzTmF2aWdhdGlvblByb3BlcnR5KGNvbGxlY3Rpb25PYmplY3QpKSB7XG5cdFx0XHRyZXR1cm4gcGFyYW1ldGVycyA/IGNvbnRleHRQYXRoIDogY29sbGVjdGlvbk9iamVjdC5uYW1lO1xuXHRcdH0gZWxzZSBpZiAoaXNFbnRpdHlTZXQoY29sbGVjdGlvbk9iamVjdCkpIHtcblx0XHRcdHJldHVybiBcIi9cIiArIGNvbGxlY3Rpb25PYmplY3QubmFtZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25PYmplY3QhLm5hbWU7XG5cdFx0fVxuXHR9LFxuXHRfZ2V0QmluZGluZ1BhdGhGb3JQYXJhbWV0ZXJzOiBmdW5jdGlvbiAoXG5cdFx0ZmlsdGVyQ29uZGl0aW9uczogUmVjb3JkPHN0cmluZywgRmlsdGVyQ29uZGl0aW9uc1tdPixcblx0XHRtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsIHwgdW5kZWZpbmVkLFxuXHRcdGNvbGxlY3Rpb25OYW1lOiBzdHJpbmcsXG5cdFx0cGFyYW1ldGVyczogQXJyYXk8c3RyaW5nPixcblx0XHRlbnRpdHlTZXRQYXRoOiBzdHJpbmdcblx0KTogc3RyaW5nIHtcblx0XHRjb25zdCBwYXJhbXMgPSBbXTtcblx0XHRjb25zdCBjb252ZXJ0ZWRGaWx0ZXJDb25kaXRpb25zID0gVmlzdWFsRmlsdGVyVXRpbHMuY29udmVydEZpbHRlckNvbmRpb25zKGZpbHRlckNvbmRpdGlvbnMpO1xuXHRcdGNvbnN0IHBhcmFtZXRlclByb3BlcnRpZXMgPSBDb21tb25VdGlscy5nZXRQYXJhbWV0ZXJJbmZvKFxuXHRcdFx0bWV0YU1vZGVsIGFzIHVua25vd24gYXMgT0RhdGFNZXRhTW9kZWwsXG5cdFx0XHRjb2xsZWN0aW9uTmFtZVxuXHRcdCkucGFyYW1ldGVyUHJvcGVydGllcztcblx0XHRpZiAocGFyYW1ldGVyUHJvcGVydGllcykge1xuXHRcdFx0Zm9yIChjb25zdCBpIGluIHBhcmFtZXRlcnMpIHtcblx0XHRcdFx0Y29uc3QgcGFyYW1ldGVyID0gcGFyYW1ldGVyc1tpXTtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHkgPSBwYXJhbWV0ZXJQcm9wZXJ0aWVzW3BhcmFtZXRlcl07XG5cdFx0XHRcdGNvbnN0IGVudGl0eVBhdGggPSBlbnRpdHlTZXRQYXRoLnNwbGl0KFwiL1wiKVsxXTtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlDb250ZXh0ID0gbWV0YU1vZGVsPy5jcmVhdGVCaW5kaW5nQ29udGV4dChgLyR7ZW50aXR5UGF0aH0vJHtwYXJhbWV0ZXJ9YCk7XG5cdFx0XHRcdGxldCB0eXBlQ29uZmlnO1xuXHRcdFx0XHRpZiAocHJvcGVydHlDb250ZXh0KSB7XG5cdFx0XHRcdFx0dHlwZUNvbmZpZyA9IFR5cGVNYXAuZ2V0VHlwZUNvbmZpZyhcblx0XHRcdFx0XHRcdHByb3BlcnR5LiRUeXBlLFxuXHRcdFx0XHRcdFx0SlNUb2tlbml6ZXIucGFyc2VKUyhmb3JtYXRPcHRpb25zKHByb3BlcnR5LCB7IGNvbnRleHQ6IHByb3BlcnR5Q29udGV4dCB9KSB8fCBcInt9XCIpLFxuXHRcdFx0XHRcdFx0SlNUb2tlbml6ZXIucGFyc2VKUyhjb25zdHJhaW50cyhwcm9wZXJ0eSwgeyBjb250ZXh0OiBwcm9wZXJ0eUNvbnRleHQgfSkgfHwgXCJ7fVwiKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgY29uZGl0aW9uID0gY29udmVydGVkRmlsdGVyQ29uZGl0aW9uc1twYXJhbWV0ZXJdO1xuXHRcdFx0XHRjb25zdCBjb25kaXRpb25JbnRlcm5hbCA9IGNvbmRpdGlvbiA/IGNvbmRpdGlvblswXSA6IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKGNvbmRpdGlvbkludGVybmFsKSB7XG5cdFx0XHRcdFx0Y29uc3QgaW50ZXJuYWxQYXJhbWV0ZXJDb25kaXRpb24gPSBDb25kaXRpb25Db252ZXJ0ZXIudG9UeXBlKGNvbmRpdGlvbkludGVybmFsLCB0eXBlQ29uZmlnLCBUeXBlTWFwKTtcblx0XHRcdFx0XHRjb25zdCBlZG1UeXBlID0gcHJvcGVydHkuJFR5cGU7XG5cdFx0XHRcdFx0bGV0IHZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KE9EYXRhVXRpbHMuZm9ybWF0TGl0ZXJhbChpbnRlcm5hbFBhcmFtZXRlckNvbmRpdGlvbi52YWx1ZXNbMF0sIGVkbVR5cGUpKTtcblx0XHRcdFx0XHRwYXJhbXMucHVzaChgJHtwYXJhbWV0ZXJ9PSR7dmFsdWV9YCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBwYXJhbWV0ZXJFbnRpdHlTZXQgPSBjb2xsZWN0aW9uTmFtZS5zbGljZSgwLCBjb2xsZWN0aW9uTmFtZS5sYXN0SW5kZXhPZihcIi9cIikpO1xuXHRcdGNvbnN0IHRhcmdldE5hdmlnYXRpb24gPSBjb2xsZWN0aW9uTmFtZS5zdWJzdHJpbmcoY29sbGVjdGlvbk5hbWUubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7XG5cdFx0Ly8gY3JlYXRlIHBhcmFtZXRlciBjb250ZXh0XG5cdFx0cmV0dXJuIGAke3BhcmFtZXRlckVudGl0eVNldH0oJHtwYXJhbXMudG9TdHJpbmcoKX0pLyR7dGFyZ2V0TmF2aWdhdGlvbn1gO1xuXHR9LFxuXHRfZ2V0VU9NQWdncmVnYXRpb25FeHByZXNzaW9uOiBmdW5jdGlvbiAoXG5cdFx0Y3VzdG9tQWdncmVnYXRlPzogYm9vbGVhbixcblx0XHRVb01IYXNDdXN0b21BZ2dyZWdhdGU/OiBib29sZWFuLFxuXHRcdFVPTT86IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPHVua25vd24+IHwgc3RyaW5nIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdFx0YWdncmVnYXRpb24/OiBBZ2dyZWdhdGVkUHJvcGVydHlUeXBlXG5cdCk6IHtcblx0XHRhZ2dyZWdhdGlvbkV4cHJlc3Npb246IHsgdW5pdDogc3RyaW5nIH0gfCB7fSB8IHsgbmFtZTogc3RyaW5nOyB3aXRoOiBzdHJpbmcgfSB8IHVuZGVmaW5lZDtcblx0XHRVT01FeHByZXNzaW9uOiB7IFt4OiBzdHJpbmddOiB7fSB9IHwgdW5kZWZpbmVkIHwgc3RyaW5nO1xuXHR9IHtcblx0XHRsZXQgYWdncmVnYXRpb25FeHByZXNzaW9uLCBVT01FeHByZXNzaW9uO1xuXHRcdGNvbnN0IHBhdGggPSBVT00gJiYgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24oVU9NKSAmJiBVT00ucGF0aDtcblx0XHRpZiAoY3VzdG9tQWdncmVnYXRlKSB7XG5cdFx0XHQvL2N1c3RvbSBhZ2dyZWdhdGUgZm9yIGEgY3VycmVuY3kgb3IgdW5pdCBvZiBtZWFzdXJlIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBhZ2dyZWdhdGFibGUgcHJvcGVydHlcblx0XHRcdGlmIChVb01IYXNDdXN0b21BZ2dyZWdhdGUpIHtcblx0XHRcdFx0YWdncmVnYXRpb25FeHByZXNzaW9uID0gcGF0aCA/IHsgdW5pdDogcGF0aCB9IDoge307XG5cdFx0XHRcdFVPTUV4cHJlc3Npb24gPSB7fTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFnZ3JlZ2F0aW9uRXhwcmVzc2lvbiA9IHt9O1xuXHRcdFx0XHRVT01FeHByZXNzaW9uID0gcGF0aCA/IHsgW3BhdGhdOiB7fSB9IDoge307XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdGFnZ3JlZ2F0aW9uICYmXG5cdFx0XHRhZ2dyZWdhdGlvbi5BZ2dyZWdhdGFibGVQcm9wZXJ0eSAmJlxuXHRcdFx0YWdncmVnYXRpb24uQWdncmVnYXRhYmxlUHJvcGVydHkudmFsdWUgJiZcblx0XHRcdGFnZ3JlZ2F0aW9uLkFnZ3JlZ2F0aW9uTWV0aG9kXG5cdFx0KSB7XG5cdFx0XHRhZ2dyZWdhdGlvbkV4cHJlc3Npb24gPSB7IG5hbWU6IGFnZ3JlZ2F0aW9uLkFnZ3JlZ2F0YWJsZVByb3BlcnR5LnZhbHVlLCB3aXRoOiBhZ2dyZWdhdGlvbi5BZ2dyZWdhdGlvbk1ldGhvZCB9O1xuXHRcdFx0VU9NRXhwcmVzc2lvbiA9IHBhdGggPyB7IFtwYXRoXToge30gfSA6IHt9O1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRhZ2dyZWdhdGlvbkV4cHJlc3Npb246IGFnZ3JlZ2F0aW9uRXhwcmVzc2lvbixcblx0XHRcdFVPTUV4cHJlc3Npb246IFVPTUV4cHJlc3Npb25cblx0XHR9O1xuXHR9LFxuXHRnZXRBZ2dyZWdhdGlvbkJpbmRpbmc6IGZ1bmN0aW9uIChcblx0XHRjaGFydEFubm90YXRpb25zOiBDaGFydCxcblx0XHRjb2xsZWN0aW9uOiBEYXRhTW9kZWxPYmplY3RQYXRoPFBhZ2VDb250ZXh0UGF0aFRhcmdldD4gfCB1bmRlZmluZWQsXG5cdFx0Y29udGV4dFBhdGg6IHN0cmluZyxcblx0XHR0ZXh0QXNzb2NpYXRpb24/OiBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPixcblx0XHRkaW1lbnNpb25UeXBlPzogc3RyaW5nLFxuXHRcdHNvcnRPcmRlcj86IFNvcnRPcmRlclR5cGVbXSxcblx0XHRzZWxlY3Rpb25WYXJpYW50PzogU2VsZWN0aW9uVmFyaWFudCxcblx0XHRjdXN0b21BZ2dyZWdhdGU/OiBib29sZWFuLFxuXHRcdGFnZ3JlZ2F0aW9uPzogQWdncmVnYXRlZFByb3BlcnR5VHlwZSxcblx0XHRVb01IYXNDdXN0b21BZ2dyZWdhdGU/OiBib29sZWFuLFxuXHRcdHBhcmFtZXRlcnM/OiBBcnJheTxzdHJpbmc+LFxuXHRcdGZpbHRlckJhckVudGl0eVR5cGU/OiBzdHJpbmcsXG5cdFx0ZHJhZnRTdXBwb3J0ZWQ/OiBib29sZWFuLFxuXHRcdGNoYXJ0TWVhc3VyZT86IHN0cmluZyxcblx0XHRtZXRhTW9kZWw/OiBPRGF0YU1ldGFNb2RlbFxuXHQpOiBhZ2dyZWdhdGlvbkJpbmRpbmcge1xuXHRcdGNvbnN0IHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uID0gc2VsZWN0aW9uVmFyaWFudDtcblx0XHRjb25zdCBlbnRpdHlUeXBlID0gZmlsdGVyQmFyRW50aXR5VHlwZTtcblx0XHRjb25zdCBlbnRpdHlTZXRQYXRoID0gY29udGV4dFBhdGg7XG5cdFx0Y29uc3QgZGltZW5zaW9uID0gY2hhcnRBbm5vdGF0aW9ucy5EaW1lbnNpb25zWzBdLnZhbHVlO1xuXHRcdGNvbnN0IGZpbHRlcnM6IEZpbHRlcltdID0gW107XG5cdFx0bGV0IGZpbHRlckNvbmRpdGlvbnM7XG5cdFx0bGV0IGNvbGxlY3Rpb25OYW1lID0gdGhpcy5fZ2V0Q29sbGVjdGlvbk5hbWUoY29sbGVjdGlvbiwgY29udGV4dFBhdGgsIHBhcmFtZXRlcnMpO1xuXHRcdGNvbnN0IFVPTTogUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8dW5rbm93bj4gfCBzdHJpbmcgfCB1bmRlZmluZWQgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IEludGVyYWN0aXZlQ2hhcnRIZWxwZXIuZ2V0VW9NKFxuXHRcdFx0Y2hhcnRBbm5vdGF0aW9ucyxcblx0XHRcdGNvbGxlY3Rpb24sXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRjdXN0b21BZ2dyZWdhdGUsXG5cdFx0XHRhZ2dyZWdhdGlvblxuXHRcdCk7XG5cdFx0aWYgKGRyYWZ0U3VwcG9ydGVkKSB7XG5cdFx0XHRmaWx0ZXJzLnB1c2gobmV3IEZpbHRlcih7IG9wZXJhdG9yOiBcIkVRXCIsIHZhbHVlMTogXCJ0cnVlXCIsIHZhbHVlMjogbnVsbCwgcGF0aDogXCJJc0FjdGl2ZUVudGl0eVwiIH0pKTtcblx0XHR9XG5cdFx0aWYgKHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uKSB7XG5cdFx0XHRmaWx0ZXJDb25kaXRpb25zID0gZ2V0RmlsdGVyc0NvbmRpdGlvbnNGcm9tU2VsZWN0aW9uVmFyaWFudChcblx0XHRcdFx0ZW50aXR5U2V0UGF0aCxcblx0XHRcdFx0bWV0YU1vZGVsIGFzIHVua25vd24gYXMgT0RhdGFNZXRhTW9kZWwsXG5cdFx0XHRcdHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uLFxuXHRcdFx0XHRWaXN1YWxGaWx0ZXJVdGlscy5nZXRDdXN0b21Db25kaXRpb25zLmJpbmQoVmlzdWFsRmlsdGVyVXRpbHMpXG5cdFx0XHQpO1xuXHRcdFx0Zm9yIChjb25zdCBwYXRoIGluIGZpbHRlckNvbmRpdGlvbnMpIHtcblx0XHRcdFx0Y29uc3QgY29uZGl0aW9ucyA9IGZpbHRlckNvbmRpdGlvbnNbcGF0aF07XG5cdFx0XHRcdGNvbmRpdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoY29uZGl0aW9uOiBGaWx0ZXJDb25kaXRpb25zKSB7XG5cdFx0XHRcdFx0aWYgKCFjb25kaXRpb24uaXNQYXJhbWV0ZXIpIHtcblx0XHRcdFx0XHRcdGZpbHRlcnMucHVzaChcblx0XHRcdFx0XHRcdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRcdFx0XHRcdFx0b3BlcmF0b3I6IGNvbmRpdGlvbi5vcGVyYXRvciBhcyBGaWx0ZXJPcGVyYXRvcixcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTE6IGNvbmRpdGlvbi52YWx1ZTEsXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWUyOiBjb25kaXRpb24udmFsdWUyLFxuXHRcdFx0XHRcdFx0XHRcdHBhdGg6IGNvbmRpdGlvbi5wYXRoXG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChlbnRpdHlUeXBlICE9PSBgJHtjb2xsZWN0aW9uTmFtZX0vYCAmJiBwYXJhbWV0ZXJzICYmIHBhcmFtZXRlcnMubGVuZ3RoICYmIGZpbHRlckNvbmRpdGlvbnMpIHtcblx0XHRcdGNvbnN0IGJpbmRpbmdQYXRoID0gdGhpcy5fZ2V0QmluZGluZ1BhdGhGb3JQYXJhbWV0ZXJzKGZpbHRlckNvbmRpdGlvbnMsIG1ldGFNb2RlbCwgY29sbGVjdGlvbk5hbWUsIHBhcmFtZXRlcnMsIGVudGl0eVNldFBhdGgpO1xuXHRcdFx0Y29sbGVjdGlvbk5hbWUgPSBiaW5kaW5nUGF0aDtcblx0XHR9XG5cdFx0Y29uc3QgVU9NQWdncmVnYXRpb25FeHByZXNzaW9uID0gdGhpcy5fZ2V0VU9NQWdncmVnYXRpb25FeHByZXNzaW9uKGN1c3RvbUFnZ3JlZ2F0ZSwgVW9NSGFzQ3VzdG9tQWdncmVnYXRlLCBVT00sIGFnZ3JlZ2F0aW9uKTtcblx0XHRjb25zdCBhZ2dyZWdhdGlvbkV4cHJlc3Npb24gPSBVT01BZ2dyZWdhdGlvbkV4cHJlc3Npb24uYWdncmVnYXRpb25FeHByZXNzaW9uO1xuXHRcdGNvbnN0IFVPTUV4cHJlc3Npb24gPSBVT01BZ2dyZWdhdGlvbkV4cHJlc3Npb24uVU9NRXhwcmVzc2lvbjtcblx0XHRjb25zdCB0ZXh0QXNzb2NpYXRpb25FeHByZXNzaW9uID0gdGV4dEFzc29jaWF0aW9uID8geyBhZGRpdGlvbmFsbHk6IFt0ZXh0QXNzb2NpYXRpb24ucGF0aF0gfSA6IHt9O1xuXHRcdGNvbnN0IGZpbmFscGFyYW1ldGVycyA9IHtcblx0XHRcdC4uLnRoaXMuZ2V0U29ydE9yZGVyKGNoYXJ0QW5ub3RhdGlvbnMsIGRpbWVuc2lvblR5cGUsIHNvcnRPcmRlciwgY2hhcnRNZWFzdXJlKSxcblx0XHRcdCQkYWdncmVnYXRpb246IHtcblx0XHRcdFx0YWdncmVnYXRlOiB7XG5cdFx0XHRcdFx0W2NoYXJ0TWVhc3VyZSBhcyBzdHJpbmddOiBhZ2dyZWdhdGlvbkV4cHJlc3Npb25cblx0XHRcdFx0fSxcblx0XHRcdFx0Z3JvdXA6IHtcblx0XHRcdFx0XHRbZGltZW5zaW9uXTogeyAuLi50ZXh0QXNzb2NpYXRpb25FeHByZXNzaW9uIH0sXG5cdFx0XHRcdFx0Li4uKFVPTUV4cHJlc3Npb24gYXMgb2JqZWN0KVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0cGF0aDogY29sbGVjdGlvbk5hbWUsXG5cdFx0XHR0ZW1wbGF0ZVNoYXJlYWJsZTogdHJ1ZSxcblx0XHRcdHN1c3BlbmRlZDogdHJ1ZSxcblx0XHRcdGZpbHRlcnM6IGZpbHRlcnMsXG5cdFx0XHRwYXJhbWV0ZXJzOiBmaW5hbHBhcmFtZXRlcnMsXG5cdFx0XHQuLi4oSW50ZXJhY3RpdmVDaGFydEhlbHBlci5nZXRNYXhJdGVtcyhjaGFydEFubm90YXRpb25zKSBhcyBvYmplY3QpXG5cdFx0fTtcblx0fSxcblxuXHRfZ2V0T3JkZXJFeHByZXNzaW9uRnJvbU1lYXN1cmU6IGZ1bmN0aW9uIChzb3J0T3JkZXI/OiBTb3J0T3JkZXJUeXBlW10sIGNoYXJ0TWVhc3VyZT86IHN0cmluZyk6IHsgJG9yZGVyYnk6IHN0cmluZyB9IHtcblx0XHRsZXQgc29ydFByb3BlcnR5TmFtZTtcblx0XHRpZiAoc29ydE9yZGVyICYmIHNvcnRPcmRlci5sZW5ndGgpIHtcblx0XHRcdGlmIChzb3J0T3JkZXJbMF0uRHluYW1pY1Byb3BlcnR5KSB7XG5cdFx0XHRcdHNvcnRQcm9wZXJ0eU5hbWUgPSAoc29ydE9yZGVyWzBdLkR5bmFtaWNQcm9wZXJ0eS4kdGFyZ2V0IGFzIEFnZ3JlZ2F0ZWRQcm9wZXJ0eSk/Lk5hbWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzb3J0UHJvcGVydHlOYW1lID0gc29ydE9yZGVyWzBdLlByb3BlcnR5Py52YWx1ZTtcblx0XHRcdH1cblx0XHRcdGlmIChzb3J0UHJvcGVydHlOYW1lID09PSBjaGFydE1lYXN1cmUpIHtcblx0XHRcdFx0cmV0dXJuIHsgJG9yZGVyYnk6IGNoYXJ0TWVhc3VyZSArIChzb3J0T3JkZXJbMF0uRGVzY2VuZGluZyA/IFwiIGRlc2NcIiA6IFwiXCIpIH07XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4geyAkb3JkZXJieTogY2hhcnRNZWFzdXJlICsgXCIgZGVzY1wiIH07XG5cdFx0fVxuXHRcdHJldHVybiB7ICRvcmRlcmJ5OiBjaGFydE1lYXN1cmUgKyBcIiBkZXNjXCIgfTtcblx0fSxcblxuXHRnZXRTb3J0T3JkZXI6IGZ1bmN0aW9uIChcblx0XHRjaGFydEFubm90YXRpb25zOiBDaGFydCxcblx0XHRkaW1lbnNpb25UeXBlPzogc3RyaW5nLFxuXHRcdHNvcnRPcmRlcj86IFNvcnRPcmRlclR5cGVbXSxcblx0XHRjaGFydE1lYXN1cmU/OiBzdHJpbmdcblx0KTogeyAkb3JkZXJieTogc3RyaW5nIHwgdW5kZWZpbmVkIH0ge1xuXHRcdGlmIChjaGFydEFubm90YXRpb25zLkNoYXJ0VHlwZSA9PT0gXCJVSS5DaGFydFR5cGUvRG9udXRcIiB8fCBjaGFydEFubm90YXRpb25zLkNoYXJ0VHlwZSA9PT0gXCJVSS5DaGFydFR5cGUvQmFyXCIpIHtcblx0XHRcdHJldHVybiB0aGlzLl9nZXRPcmRlckV4cHJlc3Npb25Gcm9tTWVhc3VyZShzb3J0T3JkZXIsIGNoYXJ0TWVhc3VyZSk7XG5cdFx0fSBlbHNlIGlmIChkaW1lbnNpb25UeXBlID09PSBcIkVkbS5EYXRlXCIgfHwgZGltZW5zaW9uVHlwZSA9PT0gXCJFZG0uVGltZVwiIHx8IGRpbWVuc2lvblR5cGUgPT09IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCIpIHtcblx0XHRcdHJldHVybiB7ICRvcmRlcmJ5OiBjaGFydEFubm90YXRpb25zLkRpbWVuc2lvbnNbMF0udmFsdWUgfTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0c29ydE9yZGVyICYmXG5cdFx0XHRzb3J0T3JkZXIubGVuZ3RoICYmXG5cdFx0XHQoc29ydE9yZGVyWzBdLlByb3BlcnR5Py4kdGFyZ2V0IGFzIHVua25vd24gYXMgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPHN0cmluZz4pPy5wYXRoID09PSBjaGFydEFubm90YXRpb25zLkRpbWVuc2lvbnNbMF0udmFsdWVcblx0XHQpIHtcblx0XHRcdHJldHVybiB7ICRvcmRlcmJ5OiBzb3J0T3JkZXJbMF0uUHJvcGVydHk/LiR0YXJnZXQ/Lm5hbWUgKyAoc29ydE9yZGVyWzBdLkRlc2NlbmRpbmcgPyBcImRlc2MnXCIgOiBcIidcIikgfTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHsgJG9yZGVyYnk6IGNoYXJ0QW5ub3RhdGlvbnMuRGltZW5zaW9uc1swXS4kdGFyZ2V0Py5uYW1lIH07XG5cdFx0fVxuXHR9LFxuXG5cdGdldE1heEl0ZW1zOiBmdW5jdGlvbiAoY2hhcnRBbm5vdGF0aW9uczogQ2hhcnQpOiBzdHJpbmcgfCB7IHN0YXJ0SW5kZXg6IG51bWJlcjsgbGVuZ3RoOiBudW1iZXIgfSB7XG5cdFx0aWYgKGNoYXJ0QW5ub3RhdGlvbnMuQ2hhcnRUeXBlID09PSBcIlVJLkNoYXJ0VHlwZS9CYXJcIikge1xuXHRcdFx0cmV0dXJuIHsgc3RhcnRJbmRleDogMCwgbGVuZ3RoOiAzIH07XG5cdFx0fSBlbHNlIGlmIChjaGFydEFubm90YXRpb25zLkNoYXJ0VHlwZSA9PT0gXCJVSS5DaGFydFR5cGUvTGluZVwiKSB7XG5cdFx0XHRyZXR1cm4geyBzdGFydEluZGV4OiAwLCBsZW5ndGg6IDYgfTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fVxuXHR9LFxuXG5cdGdldENvbG9yQmluZGluZzogZnVuY3Rpb24gKGRhdGFQb2ludDogRGF0YVBvaW50LCBkaW1lbnNpb246IFByb3BlcnR5UGF0aCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgdmFsdWVDcml0aWNhbGl0eSA9IGRpbWVuc2lvbj8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LlVJPy5WYWx1ZUNyaXRpY2FsaXR5O1xuXHRcdGlmIChkYXRhUG9pbnQ/LkNyaXRpY2FsaXR5KSB7XG5cdFx0XHRyZXR1cm4gYnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlDb2xvck1pY3JvQ2hhcnQoZGF0YVBvaW50KTtcblx0XHR9IGVsc2UgaWYgKGRhdGFQb2ludD8uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbikge1xuXHRcdFx0Y29uc3Qgb0RpcmVjdGlvbiA9IGRhdGFQb2ludC5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uLkltcHJvdmVtZW50RGlyZWN0aW9uO1xuXHRcdFx0Y29uc3Qgb0RhdGFQb2ludFZhbHVlID0gZGF0YVBvaW50LlZhbHVlO1xuXHRcdFx0Y29uc3Qgb0RldmlhdGlvblJhbmdlTG93VmFsdWUgPSBkYXRhUG9pbnQuQ3JpdGljYWxpdHlDYWxjdWxhdGlvbi5EZXZpYXRpb25SYW5nZUxvd1ZhbHVlLnZhbHVlT2YoKTtcblx0XHRcdGNvbnN0IG9Ub2xlcmFuY2VSYW5nZUxvd1ZhbHVlID0gZGF0YVBvaW50LkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZS52YWx1ZU9mKCk7XG5cdFx0XHRjb25zdCBvQWNjZXB0YW5jZVJhbmdlTG93VmFsdWUgPSBkYXRhUG9pbnQuQ3JpdGljYWxpdHlDYWxjdWxhdGlvbi5BY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZS52YWx1ZU9mKCk7XG5cdFx0XHRjb25zdCBvQWNjZXB0YW5jZVJhbmdlSGlnaFZhbHVlID0gZGF0YVBvaW50LkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uQWNjZXB0YW5jZVJhbmdlSGlnaFZhbHVlLnZhbHVlT2YoKTtcblx0XHRcdGNvbnN0IG9Ub2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZSA9IGRhdGFQb2ludC5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uLlRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlLnZhbHVlT2YoKTtcblx0XHRcdGNvbnN0IG9EZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZSA9IGRhdGFQb2ludC5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uLkRldmlhdGlvblJhbmdlSGlnaFZhbHVlLnZhbHVlT2YoKTtcblx0XHRcdHJldHVybiBDb21tb25IZWxwZXIuZ2V0Q3JpdGljYWxpdHlDYWxjdWxhdGlvbkJpbmRpbmcoXG5cdFx0XHRcdG9EaXJlY3Rpb24sXG5cdFx0XHRcdG9EYXRhUG9pbnRWYWx1ZSxcblx0XHRcdFx0b0RldmlhdGlvblJhbmdlTG93VmFsdWUsXG5cdFx0XHRcdG9Ub2xlcmFuY2VSYW5nZUxvd1ZhbHVlLFxuXHRcdFx0XHRvQWNjZXB0YW5jZVJhbmdlTG93VmFsdWUsXG5cdFx0XHRcdG9BY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWUsXG5cdFx0XHRcdG9Ub2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZSxcblx0XHRcdFx0b0RldmlhdGlvblJhbmdlSGlnaFZhbHVlXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSBpZiAodmFsdWVDcml0aWNhbGl0eSAmJiB2YWx1ZUNyaXRpY2FsaXR5Lmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIEludGVyYWN0aXZlQ2hhcnRIZWxwZXIuZ2V0VmFsdWVDcml0aWNhbGl0eShkaW1lbnNpb24udmFsdWUsIHZhbHVlQ3JpdGljYWxpdHkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fSxcblx0Z2V0VmFsdWVDcml0aWNhbGl0eTogZnVuY3Rpb24gKGRpbWVuc2lvbjogc3RyaW5nLCB2YWx1ZUNyaXRpY2FsaXR5OiBBcnJheTxWYWx1ZUNyaXRpY2FsaXR5VHlwZT4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGxldCByZXN1bHQ7XG5cdFx0Y29uc3QgdmFsdWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGlmICh2YWx1ZUNyaXRpY2FsaXR5ICYmIHZhbHVlQ3JpdGljYWxpdHkubGVuZ3RoID4gMCkge1xuXHRcdFx0dmFsdWVDcml0aWNhbGl0eS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZUNyaXRpY2FsaXR5VHlwZTogVmFsdWVDcml0aWNhbGl0eVR5cGUpIHtcblx0XHRcdFx0aWYgKHZhbHVlQ3JpdGljYWxpdHlUeXBlLlZhbHVlICYmIHZhbHVlQ3JpdGljYWxpdHlUeXBlLkNyaXRpY2FsaXR5KSB7XG5cdFx0XHRcdFx0Y29uc3QgdmFsdWUgPVxuXHRcdFx0XHRcdFx0XCIke1wiICtcblx0XHRcdFx0XHRcdGRpbWVuc2lvbiArXG5cdFx0XHRcdFx0XHRcIn0gPT09ICdcIiArXG5cdFx0XHRcdFx0XHR2YWx1ZUNyaXRpY2FsaXR5VHlwZS5WYWx1ZSArXG5cdFx0XHRcdFx0XHRcIicgPyAnXCIgK1xuXHRcdFx0XHRcdFx0SW50ZXJhY3RpdmVDaGFydEhlbHBlci5fZ2V0Q3JpdGljYWxpdHlGcm9tRW51bSh2YWx1ZUNyaXRpY2FsaXR5VHlwZS5Dcml0aWNhbGl0eSkgK1xuXHRcdFx0XHRcdFx0XCInXCI7XG5cdFx0XHRcdFx0dmFsdWVzLnB1c2godmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJlc3VsdCA9IHZhbHVlcy5sZW5ndGggPiAwICYmIHZhbHVlcy5qb2luKFwiIDogXCIpICsgXCIgOiB1bmRlZmluZWRcIjtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdCA/IFwiez0gXCIgKyByZXN1bHQgKyBcIiB9XCIgOiB1bmRlZmluZWQ7XG5cdH0sXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNyaXRpY2FsaXR5IGluZGljYXRvciBmcm9tIGFubm90YXRpb25zIGlmIGNyaXRpY2FsaXR5IGlzIEVudW1NZW1iZXIuXG5cdCAqIEBwYXJhbSBjcml0aWNhbGl0eSBDcml0aWNhbGl0eSBwcm92aWRlZCBpbiB0aGUgYW5ub3RhdGlvbnNcblx0ICogQHJldHVybnMgUmV0dXJuIHRoZSBpbmRpY2F0b3IgZm9yIGNyaXRpY2FsaXR5XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0Q3JpdGljYWxpdHlGcm9tRW51bTogZnVuY3Rpb24gKGNyaXRpY2FsaXR5OiBzdHJpbmcpOiBWYWx1ZUNvbG9yIHtcblx0XHRjb25zdCB2YWx1ZUNvbG9yID0gbUxpYnJhcnkuVmFsdWVDb2xvcjtcblx0XHRsZXQgaW5kaWNhdG9yO1xuXHRcdGlmIChjcml0aWNhbGl0eSA9PT0gXCJVSS5Dcml0aWNhbGl0eVR5cGUvTmVnYXRpdmVcIikge1xuXHRcdFx0aW5kaWNhdG9yID0gdmFsdWVDb2xvci5FcnJvcjtcblx0XHR9IGVsc2UgaWYgKGNyaXRpY2FsaXR5ID09PSBcIlVJLkNyaXRpY2FsaXR5VHlwZS9Qb3NpdGl2ZVwiKSB7XG5cdFx0XHRpbmRpY2F0b3IgPSB2YWx1ZUNvbG9yLkdvb2Q7XG5cdFx0fSBlbHNlIGlmIChjcml0aWNhbGl0eSA9PT0gXCJVSS5Dcml0aWNhbGl0eVR5cGUvQ3JpdGljYWxcIikge1xuXHRcdFx0aW5kaWNhdG9yID0gdmFsdWVDb2xvci5Dcml0aWNhbDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aW5kaWNhdG9yID0gdmFsdWVDb2xvci5OZXV0cmFsO1xuXHRcdH1cblx0XHRyZXR1cm4gaW5kaWNhdG9yO1xuXHR9LFxuXHRnZXRTY2FsZVVvTVRpdGxlOiBmdW5jdGlvbiAoXG5cdFx0Y2hhcnRBbm5vdGF0aW9uPzogQ2hhcnQsXG5cdFx0Y29sbGVjdGlvbj86IERhdGFNb2RlbE9iamVjdFBhdGg8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0XHRtZXRhUGF0aD86IHN0cmluZyxcblx0XHRjdXN0b21BZ2dyZWdhdGU/OiBib29sZWFuLFxuXHRcdGFnZ3JlZ2F0aW9uPzogQWdncmVnYXRlZFByb3BlcnR5VHlwZSxcblx0XHRzZXBlcmF0b3I/OiBzdHJpbmcsXG5cdFx0dG9vbFRpcD86IGJvb2xlYW5cblx0KTogc3RyaW5nIHtcblx0XHRjb25zdCBzY2FsZUZhY3RvciA9IGNoYXJ0QW5ub3RhdGlvbj8uTWVhc3VyZUF0dHJpYnV0ZXNcblx0XHRcdD8gY2hhcnRBbm5vdGF0aW9uLk1lYXN1cmVBdHRyaWJ1dGVzWzBdPy5EYXRhUG9pbnQ/LiR0YXJnZXQ/LlZhbHVlRm9ybWF0Py5TY2FsZUZhY3Rvcj8udmFsdWVPZigpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRjb25zdCBpbmZvUGF0aCA9IGdlbmVyYXRlKFttZXRhUGF0aF0pO1xuXHRcdGNvbnN0IGZpeGVkSW50ZWdlciA9IE51bWJlckZvcm1hdC5nZXRJbnRlZ2VySW5zdGFuY2Uoe1xuXHRcdFx0c3R5bGU6IFwic2hvcnRcIixcblx0XHRcdHNob3dTY2FsZTogZmFsc2UsXG5cdFx0XHRzaG9ydFJlZk51bWJlcjogc2NhbGVGYWN0b3IgYXMgbnVtYmVyXG5cdFx0fSk7XG5cdFx0bGV0IHNjYWxlID0gZml4ZWRJbnRlZ2VyLmdldFNjYWxlKCk7XG5cdFx0bGV0IFVPTSA9IEludGVyYWN0aXZlQ2hhcnRIZWxwZXIuZ2V0VW9NKGNoYXJ0QW5ub3RhdGlvbiwgY29sbGVjdGlvbiwgdW5kZWZpbmVkLCBjdXN0b21BZ2dyZWdhdGUsIGFnZ3JlZ2F0aW9uKTtcblx0XHRjb25zdCBVT01FeHAgPSBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+KFVPTSlcblx0XHRcdD8gKHBhdGhJbk1vZGVsPHN0cmluZz4oXCJ1b20vXCIgKyBpbmZvUGF0aCwgXCJpbnRlcm5hbFwiKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPilcblx0XHRcdDogY29uc3RhbnQoVU9NIGFzIHN0cmluZyk7XG5cdFx0Y29uc3Qgc2NhbGVFeHAgPSBzY2FsZSA/IGNvbnN0YW50KHNjYWxlKSA6IChwYXRoSW5Nb2RlbChcInNjYWxlZmFjdG9yL1wiICsgaW5mb1BhdGgsIFwiaW50ZXJuYWxcIikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4pO1xuXHRcdGlmICghc2VwZXJhdG9yKSB7XG5cdFx0XHRzZXBlcmF0b3IgPSBcInxcIjtcblx0XHR9XG5cdFx0c2VwZXJhdG9yID0gXCIgXCIgKyBzZXBlcmF0b3IgKyBcIiBcIjtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZm9ybWF0UmVzdWx0KFtzZXBlcmF0b3IsIFVPTUV4cCwgc2NhbGVFeHBdLCB2aXN1YWxGaWx0ZXJGb3JtYXR0ZXIuZm9ybWF0U2NhbGVBbmRVT00pLCB0b29sVGlwKSA/PyBcIlwiO1xuXHR9LFxuXHRnZXRNZWFzdXJlRGltZW5zaW9uVGl0bGU6IGZ1bmN0aW9uIChjaGFydEFubm90YXRpb24/OiBDaGFydCwgY3VzdG9tQWdncmVnYXRlPzogYm9vbGVhbiwgYWdncmVnYXRpb24/OiBBZ2dyZWdhdGVkUHJvcGVydHlUeXBlKTogc3RyaW5nIHtcblx0XHRsZXQgbWVhc3VyZUxhYmVsO1xuXHRcdGxldCBtZWFzdXJlUGF0aDtcblx0XHRpZiAoY3VzdG9tQWdncmVnYXRlKSB7XG5cdFx0XHRtZWFzdXJlUGF0aCA9IGNoYXJ0QW5ub3RhdGlvbj8uTWVhc3VyZXNbMF0/LiR0YXJnZXQ/Lm5hbWU7XG5cdFx0fVxuXHRcdGlmIChjaGFydEFubm90YXRpb24/LkR5bmFtaWNNZWFzdXJlcyAmJiBjaGFydEFubm90YXRpb24uRHluYW1pY01lYXN1cmVzLmxlbmd0aCA+IDApIHtcblx0XHRcdG1lYXN1cmVQYXRoID0gKGNoYXJ0QW5ub3RhdGlvbi5EeW5hbWljTWVhc3VyZXNbMF0/LiR0YXJnZXQgYXMgQWdncmVnYXRlZFByb3BlcnR5VHlwZSk/LkFnZ3JlZ2F0YWJsZVByb3BlcnR5Py52YWx1ZTtcblx0XHR9IGVsc2UgaWYgKCFjdXN0b21BZ2dyZWdhdGUgJiYgY2hhcnRBbm5vdGF0aW9uPy5NZWFzdXJlcyAmJiBjaGFydEFubm90YXRpb24/Lk1lYXN1cmVzLmxlbmd0aCA+IDApIHtcblx0XHRcdG1lYXN1cmVQYXRoID0gY2hhcnRBbm5vdGF0aW9uLk1lYXN1cmVzWzBdPy4kdGFyZ2V0Py5uYW1lO1xuXHRcdH1cblx0XHRjb25zdCBkaW1lbnNpb25QYXRoID0gY2hhcnRBbm5vdGF0aW9uPy5EaW1lbnNpb25zWzBdPy52YWx1ZSBhcyB1bmtub3duIGFzIExhYmVsO1xuXHRcdGxldCBkaW1lbnNpb25MYWJlbCA9IGNoYXJ0QW5ub3RhdGlvbj8uRGltZW5zaW9uc1swXT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw7XG5cdFx0aWYgKCFjdXN0b21BZ2dyZWdhdGUgJiYgYWdncmVnYXRpb24pIHtcblx0XHRcdC8vIGNoZWNrIGlmIHRoZSBsYWJlbCBpcyBwYXJ0IG9mIGFnZ3JlZ2F0ZWQgcHJvcGVydGllcyAoVHJhbnNmb3JtYXRpb24gYWdncmVnYXRlcylcblx0XHRcdG1lYXN1cmVMYWJlbCA9IGFnZ3JlZ2F0aW9uLmFubm90YXRpb25zICYmIGFnZ3JlZ2F0aW9uLmFubm90YXRpb25zLkNvbW1vbiAmJiBhZ2dyZWdhdGlvbi5hbm5vdGF0aW9ucy5Db21tb24uTGFiZWw7XG5cdFx0XHRpZiAobWVhc3VyZUxhYmVsID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0bWVhc3VyZUxhYmVsID0gY2hhcnRBbm5vdGF0aW9uPy5NZWFzdXJlcz8uWzBdPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0bWVhc3VyZUxhYmVsID0gY2hhcnRBbm5vdGF0aW9uPy5NZWFzdXJlcz8uWzBdPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbDtcblx0XHR9XG5cdFx0aWYgKG1lYXN1cmVMYWJlbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRtZWFzdXJlTGFiZWwgPSBtZWFzdXJlUGF0aDtcblx0XHR9XG5cdFx0aWYgKGRpbWVuc2lvbkxhYmVsID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGRpbWVuc2lvbkxhYmVsID0gZGltZW5zaW9uUGF0aDtcblx0XHR9XG5cdFx0cmV0dXJuIExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUubWFjcm9zXCIpIS5nZXRUZXh0KFwiTV9JTlRFUkFDVElWRV9DSEFSVF9IRUxQRVJfVklTVUFMRklMVEVSX01FQVNVUkVfRElNRU5TSU9OX1RJVExFXCIsIFtcblx0XHRcdG1lYXN1cmVMYWJlbCxcblx0XHRcdGRpbWVuc2lvbkxhYmVsXG5cdFx0XSk7XG5cdH0sXG5cblx0Z2V0VG9vbFRpcDogZnVuY3Rpb24gKFxuXHRcdGNoYXJ0QW5ub3RhdGlvbj86IENoYXJ0LFxuXHRcdGNvbGxlY3Rpb24/OiBEYXRhTW9kZWxPYmplY3RQYXRoPFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdFx0bWV0YVBhdGg/OiBzdHJpbmcsXG5cdFx0Y3VzdG9tQWdncmVnYXRlPzogYm9vbGVhbixcblx0XHRhZ2dyZWdhdGlvbj86IEFnZ3JlZ2F0ZWRQcm9wZXJ0eVR5cGUsXG5cdFx0cmVuZGVyTGluZUNoYXJ0PzogYm9vbGVhbiB8IHN0cmluZ1xuXHQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGNoYXJ0VHlwZSA9IGNoYXJ0QW5ub3RhdGlvbiAmJiBjaGFydEFubm90YXRpb25bXCJDaGFydFR5cGVcIl07XG5cdFx0bGV0IG1lYXN1cmVEaW1lbnNpb25Ub29sVGlwID0gSW50ZXJhY3RpdmVDaGFydEhlbHBlci5nZXRNZWFzdXJlRGltZW5zaW9uVGl0bGUoY2hhcnRBbm5vdGF0aW9uLCBjdXN0b21BZ2dyZWdhdGUsIGFnZ3JlZ2F0aW9uKTtcblx0XHRtZWFzdXJlRGltZW5zaW9uVG9vbFRpcCA9IENvbW1vbkhlbHBlci5lc2NhcGVTaW5nbGVRdW90ZXMobWVhc3VyZURpbWVuc2lvblRvb2xUaXApO1xuXHRcdGlmIChyZW5kZXJMaW5lQ2hhcnQgPT09IGZhbHNlICYmIGNoYXJ0VHlwZSA9PT0gXCJVSS5DaGFydFR5cGUvTGluZVwiKSB7XG5cdFx0XHRyZXR1cm4gYHs9ICcke21lYXN1cmVEaW1lbnNpb25Ub29sVGlwfSd9YDtcblx0XHR9XG5cblx0XHRjb25zdCBzZXBlcmF0b3IgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLm1hY3Jvc1wiKT8uZ2V0VGV4dChcblx0XHRcdFwiTV9JTlRFUkFDVElWRV9DSEFSVF9IRUxQRVJfVklTVUFMRklMVEVSX1RPT0xUSVBfU0VQRVJBVE9SXCJcblx0XHQpO1xuXHRcdGNvbnN0IGluZm9QYXRoID0gZ2VuZXJhdGUoW21ldGFQYXRoXSk7XG5cdFx0Y29uc3Qgc2NhbGVVT01Ub29sdGlwID0gSW50ZXJhY3RpdmVDaGFydEhlbHBlci5nZXRTY2FsZVVvTVRpdGxlKFxuXHRcdFx0Y2hhcnRBbm5vdGF0aW9uLFxuXHRcdFx0Y29sbGVjdGlvbixcblx0XHRcdGluZm9QYXRoLFxuXHRcdFx0Y3VzdG9tQWdncmVnYXRlLFxuXHRcdFx0YWdncmVnYXRpb24sXG5cdFx0XHRzZXBlcmF0b3IsXG5cdFx0XHR0cnVlXG5cdFx0KTtcblx0XHRyZXR1cm4gXCJ7PSAnXCIgKyBtZWFzdXJlRGltZW5zaW9uVG9vbFRpcCArIChzY2FsZVVPTVRvb2x0aXAgPyBcIicgKyBcIiArIHNjYWxlVU9NVG9vbHRpcCA6IFwiJ1wiKSArIFwifVwiO1xuXHR9LFxuXHRfZ2V0VU9NOiBmdW5jdGlvbiAoXG5cdFx0VU9NT2JqZWN0UGF0aD86IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPHVua25vd24+LFxuXHRcdFVPTT86IFwiSVNPQ3VycmVuY3lcIiB8IFwiVW5pdFwiLFxuXHRcdGNvbGxlY3Rpb24/OiBEYXRhTW9kZWxPYmplY3RQYXRoPFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdFx0Y3VzdG9tRGF0YT86IGJvb2xlYW4sXG5cdFx0YWdncmVnYXRhYmxlUHJvcGVydHlQYXRoPzogc3RyaW5nXG5cdCk6IHN0cmluZyB8IFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjx1bmtub3duPiB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBVT01PYmplY3Q6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdFx0Y29uc3QgY29sbGVjdGlvbk9iamVjdCA9IGNvbGxlY3Rpb24/LnRhcmdldE9iamVjdDtcblx0XHRpZiAoVU9NT2JqZWN0UGF0aCAmJiBVT00gJiYgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24oVU9NT2JqZWN0UGF0aCkpIHtcblx0XHRcdC8vIGNoZWNrIGlmIHRoZSBVT00gaXMgcGFydCBvZiBNZWFzdXJlIGFubm90YXRpb25zKEN1c3RvbSBhZ2dyZWdhdGVzKVxuXHRcdFx0VU9NT2JqZWN0W1VPTV0gPSB7ICRQYXRoOiBVT01PYmplY3RQYXRoLnBhdGggfTtcblx0XHRcdHJldHVybiBjdXN0b21EYXRhICYmIFVPTU9iamVjdFBhdGgucGF0aCA/IFVPTU9iamVjdCA6IFVPTU9iamVjdFBhdGg7XG5cdFx0fSBlbHNlIGlmIChhZ2dyZWdhdGFibGVQcm9wZXJ0eVBhdGgpIHtcblx0XHRcdC8vIGNoZWNrIGlmIHRoZSBVT00gaXMgcGFydCBvZiBiYXNlIHByb3BlcnR5IGFubm90YXRpb25zKFRyYW5zZm9ybWF0aW9uIGFnZ3JlZ2F0ZXMpXG5cdFx0XHRjb25zdCBlbnRpdHlQcm9wZXJ0aWVzID1cblx0XHRcdFx0aXNFbnRpdHlTZXQoY29sbGVjdGlvbk9iamVjdCkgfHwgaXNTaW5nbGV0b24oY29sbGVjdGlvbk9iamVjdClcblx0XHRcdFx0XHQ/IGNvbGxlY3Rpb25PYmplY3QuZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzXG5cdFx0XHRcdFx0OiBjb2xsZWN0aW9uT2JqZWN0Py50YXJnZXRUeXBlPy5lbnRpdHlQcm9wZXJ0aWVzO1xuXHRcdFx0Y29uc3QgcHJvcGVydHlBbm5vdGF0aW9ucyA9IGVudGl0eVByb3BlcnRpZXM/LmZpbmQoKHByb3BlcnR5OiBQcm9wZXJ0eSkgPT4gcHJvcGVydHkubmFtZSA9PSBhZ2dyZWdhdGFibGVQcm9wZXJ0eVBhdGgpO1xuXHRcdFx0aWYgKHByb3BlcnR5QW5ub3RhdGlvbnM/LmFubm90YXRpb25zPy5NZWFzdXJlcyAmJiBVT00pIHtcblx0XHRcdFx0VU9NT2JqZWN0UGF0aCA9IHByb3BlcnR5QW5ub3RhdGlvbnM/LmFubm90YXRpb25zPy5NZWFzdXJlc1tVT01dIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjx1bmtub3duPjtcblx0XHRcdFx0VU9NT2JqZWN0W1VPTV0gPSB7ICRQYXRoOiBVT01PYmplY3RQYXRoPy5wYXRoIH07XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gVU9NT2JqZWN0UGF0aCAmJiBjdXN0b21EYXRhICYmIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKFVPTU9iamVjdFBhdGgpICYmIFVPTU9iamVjdFBhdGgucGF0aFxuXHRcdFx0XHQ/IFVPTU9iamVjdFxuXHRcdFx0XHQ6IFVPTU9iamVjdFBhdGg7XG5cdFx0fVxuXHR9LFxuXHRnZXRVb006IGZ1bmN0aW9uIChcblx0XHRjaGFydEFubm90YXRpb24/OiBDaGFydCxcblx0XHRjb2xsZWN0aW9uPzogRGF0YU1vZGVsT2JqZWN0UGF0aDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRcdGN1c3RvbURhdGE/OiBib29sZWFuLFxuXHRcdGN1c3RvbUFnZ3JlZ2F0ZT86IGJvb2xlYW4sXG5cdFx0YWdncmVnYXRpb24/OiBBZ2dyZWdhdGVkUHJvcGVydHlUeXBlXG5cdCk6IHN0cmluZyB8IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPHVua25vd24+IHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQge1xuXHRcdGxldCBtZWFzdXJlOiBNZWFzdXJlVHlwZSA9IHt9O1xuXHRcdGlmIChjdXN0b21BZ2dyZWdhdGUpIHtcblx0XHRcdG1lYXN1cmUgPSBjaGFydEFubm90YXRpb24/Lk1lYXN1cmVzWzBdIGFzIE1lYXN1cmVUeXBlO1xuXHRcdH1cblx0XHRpZiAoY2hhcnRBbm5vdGF0aW9uPy5EeW5hbWljTWVhc3VyZXMgJiYgY2hhcnRBbm5vdGF0aW9uLkR5bmFtaWNNZWFzdXJlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRtZWFzdXJlID0gKGNoYXJ0QW5ub3RhdGlvbi5EeW5hbWljTWVhc3VyZXNbMF0/LiR0YXJnZXQgYXMgQWdncmVnYXRlZFByb3BlcnR5VHlwZSk/LkFnZ3JlZ2F0YWJsZVByb3BlcnR5Py4kdGFyZ2V0Py5hbm5vdGF0aW9uc1xuXHRcdFx0XHQ/Lk1lYXN1cmVzIGFzIE1lYXN1cmVUeXBlO1xuXHRcdH0gZWxzZSBpZiAoIWN1c3RvbUFnZ3JlZ2F0ZSAmJiBjaGFydEFubm90YXRpb24/Lk1lYXN1cmVzICYmIGNoYXJ0QW5ub3RhdGlvbi5NZWFzdXJlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRtZWFzdXJlID0gY2hhcnRBbm5vdGF0aW9uLk1lYXN1cmVzWzBdO1xuXHRcdH1cblx0XHRjb25zdCBJU09DdXJyZW5jeSA9IG1lYXN1cmU/LklTT0N1cnJlbmN5O1xuXHRcdGNvbnN0IHVuaXQgPSBtZWFzdXJlPy5Vbml0O1xuXHRcdGxldCBhZ2dyZWdhdGFibGVQcm9wZXJ0eVBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRpZiAoIWN1c3RvbUFnZ3JlZ2F0ZSAmJiBhZ2dyZWdhdGlvbikge1xuXHRcdFx0YWdncmVnYXRhYmxlUHJvcGVydHlQYXRoID0gYWdncmVnYXRpb24uQWdncmVnYXRhYmxlUHJvcGVydHkgJiYgYWdncmVnYXRpb24uQWdncmVnYXRhYmxlUHJvcGVydHkudmFsdWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFnZ3JlZ2F0YWJsZVByb3BlcnR5UGF0aCA9IG1lYXN1cmU/LnZhbHVlO1xuXHRcdH1cblx0XHRyZXR1cm4gKFxuXHRcdFx0dGhpcy5fZ2V0VU9NKElTT0N1cnJlbmN5LCBcIklTT0N1cnJlbmN5XCIsIGNvbGxlY3Rpb24sIGN1c3RvbURhdGEsIGFnZ3JlZ2F0YWJsZVByb3BlcnR5UGF0aCkgfHxcblx0XHRcdHRoaXMuX2dldFVPTSh1bml0LCBcIlVuaXRcIiwgY29sbGVjdGlvbiwgY3VzdG9tRGF0YSwgYWdncmVnYXRhYmxlUHJvcGVydHlQYXRoKVxuXHRcdCk7XG5cdH0sXG5cdGdldFNjYWxlRmFjdG9yOiBmdW5jdGlvbiAodmFsdWVGb3JtYXQ/OiBOdW1iZXJGb3JtYXRUeXBlKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAodmFsdWVGb3JtYXQgJiYgdmFsdWVGb3JtYXQuU2NhbGVGYWN0b3IpIHtcblx0XHRcdHJldHVybiB2YWx1ZUZvcm1hdC5TY2FsZUZhY3Rvci52YWx1ZU9mKCk7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH0sXG5cdGdldFVvTVZpc2libGl0eTogZnVuY3Rpb24gKGNoYXJ0QW5ub3RhdGlvbj86IENoYXJ0LCBzaG93RXJyb3I/OiBib29sZWFuKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgY2hhcnRUeXBlID0gY2hhcnRBbm5vdGF0aW9uICYmIGNoYXJ0QW5ub3RhdGlvbltcIkNoYXJ0VHlwZVwiXTtcblx0XHRpZiAoc2hvd0Vycm9yKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIGlmICghKGNoYXJ0VHlwZSA9PT0gXCJVSS5DaGFydFR5cGUvQmFyXCIgfHwgY2hhcnRUeXBlID09PSBcIlVJLkNoYXJ0VHlwZS9MaW5lXCIpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fSxcblx0Z2V0SW5QYXJhbWV0ZXJGaWx0ZXJzQmluZGluZzogZnVuY3Rpb24gKGluUGFyYW1ldGVyczogQXJyYXk8UGFyYW1ldGVyVHlwZT4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGlmIChpblBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XG5cdFx0XHRsZXQgcGF0aHMgPSBcIlwiO1xuXHRcdFx0aW5QYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24gKGluUGFyYW1ldGVyOiBQYXJhbWV0ZXJUeXBlKSB7XG5cdFx0XHRcdGlmIChpblBhcmFtZXRlci5sb2NhbERhdGFQcm9wZXJ0eSkge1xuXHRcdFx0XHRcdHBhcnRzLnB1c2goYHtwYXRoOickZmlsdGVycz4vY29uZGl0aW9ucy8ke2luUGFyYW1ldGVyLmxvY2FsRGF0YVByb3BlcnR5fSd9YCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0aWYgKHBhcnRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0cGF0aHMgPSBwYXJ0cy5qb2luKCk7XG5cdFx0XHRcdHJldHVybiBge3BhcnRzOlske3BhdGhzfV0sIGZvcm1hdHRlcjonLl9mb3JtYXR0ZXJzLlZpc3VhbEZpbHRlclJ1bnRpbWUuZ2V0RmlsdGVyc0Zyb21Db25kaXRpb25zLmJpbmQoJGNvbnRyb2wpJ31gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdH0sXG5cblx0Z2V0ZmlsdGVyQ291bnRCaW5kaW5nOiBmdW5jdGlvbiAoY2hhcnRBbm5vdGF0aW9uPzogQ2hhcnQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGRpbWVuc2lvbiA9IGNoYXJ0QW5ub3RhdGlvbj8uRGltZW5zaW9uc1swXT8uJHRhcmdldD8ubmFtZTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0XCJ7cGF0aDonJGZpbHRlcnM+L2NvbmRpdGlvbnMvXCIgKyBkaW1lbnNpb24gKyBcIicsIGZvcm1hdHRlcjonLl9mb3JtYXR0ZXJzLlZpc3VhbEZpbHRlclJ1bnRpbWUuZ2V0RmlsdGVyQ291bnRzLmJpbmQoJGNvbnRyb2wpJ31cIlxuXHRcdCk7XG5cdH0sXG5cblx0Z2V0SW50ZXJhY3RpdmVDaGFydFByb3BlcnRpZXM6IGZ1bmN0aW9uICh2aXN1YWxGaWx0ZXI6IFZpc3VhbEZpbHRlcik6IEludGVyYWN0aXZlQ2hhcnRUeXBlIHtcblx0XHRjb25zdCBjaGFydEFubm90YXRpb24gPSB2aXN1YWxGaWx0ZXIuY2hhcnRBbm5vdGF0aW9uO1xuXHRcdGNvbnN0IGludGVyYWN0aXZlQ2hhcnRQcm9wZXJ0aWVzOiBJbnRlcmFjdGl2ZUNoYXJ0VHlwZSA9IHt9O1xuXHRcdGlmICh2aXN1YWxGaWx0ZXIuY2hhcnRNZWFzdXJlICYmIGNoYXJ0QW5ub3RhdGlvbj8uRGltZW5zaW9ucyAmJiBjaGFydEFubm90YXRpb24uRGltZW5zaW9uc1swXSkge1xuXHRcdFx0Y29uc3QgaWQgPSBnZW5lcmF0ZShbdmlzdWFsRmlsdGVyLm1ldGFQYXRoXSk7XG5cdFx0XHRpbnRlcmFjdGl2ZUNoYXJ0UHJvcGVydGllcy5zaG93RXJyb3JFeHByZXNzaW9uID0gXCJ7PSAke2ludGVybmFsPlwiICsgaWQgKyBcIi9zaG93RXJyb3J9fVwiO1xuXHRcdFx0aW50ZXJhY3RpdmVDaGFydFByb3BlcnRpZXMuZXJyb3JNZXNzYWdlRXhwcmVzc2lvbiA9IFwiez0gJHtpbnRlcm5hbD5cIiArIGlkICsgXCIvZXJyb3JNZXNzYWdlfX1cIjtcblx0XHRcdGludGVyYWN0aXZlQ2hhcnRQcm9wZXJ0aWVzLmVycm9yTWVzc2FnZVRpdGxlRXhwcmVzc2lvbiA9IFwiez0gJHtpbnRlcm5hbD5cIiArIGlkICsgXCIvZXJyb3JNZXNzYWdlVGl0bGV9fVwiO1xuXHRcdFx0bGV0IGRhdGFQb2ludEFubm90YXRpb247XG5cdFx0XHRpZiAoY2hhcnRBbm5vdGF0aW9uPy5NZWFzdXJlQXR0cmlidXRlcyAmJiBjaGFydEFubm90YXRpb24/Lk1lYXN1cmVBdHRyaWJ1dGVzWzBdKSB7XG5cdFx0XHRcdGRhdGFQb2ludEFubm90YXRpb24gPSBjaGFydEFubm90YXRpb24/Lk1lYXN1cmVBdHRyaWJ1dGVzWzBdPy5EYXRhUG9pbnRcblx0XHRcdFx0XHQ/IGNoYXJ0QW5ub3RhdGlvbj8uTWVhc3VyZUF0dHJpYnV0ZXNbMF0uRGF0YVBvaW50LiR0YXJnZXRcblx0XHRcdFx0XHQ6IGNoYXJ0QW5ub3RhdGlvbj8uTWVhc3VyZUF0dHJpYnV0ZXNbMF07XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBkaW1lbnNpb24gPSBjaGFydEFubm90YXRpb24/LkRpbWVuc2lvbnNbMF07XG5cdFx0XHRjb25zdCBwYXJhbWV0ZXJzID0gQ29tbW9uSGVscGVyLmdldFBhcmFtZXRlcnModmlzdWFsRmlsdGVyLmNvbnRleHRQYXRoLCB2aXN1YWxGaWx0ZXIuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdFx0Y29uc3QgZGltZW5zaW9uVGV4dCA9IGRpbWVuc2lvbj8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCBhcyB1bmtub3duIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+O1xuXHRcdFx0aW50ZXJhY3RpdmVDaGFydFByb3BlcnRpZXMuYWdncmVnYXRpb25CaW5kaW5nID0gSW50ZXJhY3RpdmVDaGFydEhlbHBlci5nZXRBZ2dyZWdhdGlvbkJpbmRpbmcoXG5cdFx0XHRcdGNoYXJ0QW5ub3RhdGlvbixcblx0XHRcdFx0dmlzdWFsRmlsdGVyLmNvbGxlY3Rpb24sXG5cdFx0XHRcdHZpc3VhbEZpbHRlci5jb250ZXh0UGF0aCxcblx0XHRcdFx0ZGltZW5zaW9uVGV4dCxcblx0XHRcdFx0ZGltZW5zaW9uLiR0YXJnZXQ/LnR5cGUsXG5cdFx0XHRcdHZpc3VhbEZpbHRlcj8uc29ydE9yZGVyLFxuXHRcdFx0XHR2aXN1YWxGaWx0ZXIuc2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdFx0dmlzdWFsRmlsdGVyLmN1c3RvbUFnZ3JlZ2F0ZSxcblx0XHRcdFx0dmlzdWFsRmlsdGVyLmFnZ3JlZ2F0ZVByb3BlcnRpZXMsXG5cdFx0XHRcdHZpc3VhbEZpbHRlci5Vb01IYXNDdXN0b21BZ2dyZWdhdGUsXG5cdFx0XHRcdHBhcmFtZXRlcnMsXG5cdFx0XHRcdHZpc3VhbEZpbHRlci5maWx0ZXJCYXJFbnRpdHlUeXBlLFxuXHRcdFx0XHR2aXN1YWxGaWx0ZXIuZHJhZnRTdXBwb3J0ZWQsXG5cdFx0XHRcdHZpc3VhbEZpbHRlci5jaGFydE1lYXN1cmUsXG5cdFx0XHRcdHZpc3VhbEZpbHRlci5nZXRNZXRhTW9kZWwoKVxuXHRcdFx0KTtcblx0XHRcdGludGVyYWN0aXZlQ2hhcnRQcm9wZXJ0aWVzLnNjYWxlZmFjdG9yID0gSW50ZXJhY3RpdmVDaGFydEhlbHBlci5nZXRTY2FsZUZhY3RvcigoZGF0YVBvaW50QW5ub3RhdGlvbiBhcyBEYXRhUG9pbnQpPy5WYWx1ZUZvcm1hdCk7XG5cdFx0XHRpbnRlcmFjdGl2ZUNoYXJ0UHJvcGVydGllcy51b20gPSBJbnRlcmFjdGl2ZUNoYXJ0SGVscGVyLmdldFVvTShcblx0XHRcdFx0Y2hhcnRBbm5vdGF0aW9uLFxuXHRcdFx0XHR2aXN1YWxGaWx0ZXIuY29sbGVjdGlvbixcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0dmlzdWFsRmlsdGVyLmN1c3RvbUFnZ3JlZ2F0ZSxcblx0XHRcdFx0dmlzdWFsRmlsdGVyLmFnZ3JlZ2F0ZVByb3BlcnRpZXNcblx0XHRcdCk7XG5cdFx0XHRpbnRlcmFjdGl2ZUNoYXJ0UHJvcGVydGllcy5pblBhcmFtZXRlcnMgPSB2aXN1YWxGaWx0ZXIuaW5QYXJhbWV0ZXJzO1xuXHRcdFx0Y29uc3QgaW5QYXJhbWV0ZXJzID0gQ29tbW9uSGVscGVyLnBhcnNlQ3VzdG9tRGF0YSh2aXN1YWxGaWx0ZXIuaW5QYXJhbWV0ZXJzIGFzIHVua25vd24gYXMgc3RyaW5nKTtcblx0XHRcdGludGVyYWN0aXZlQ2hhcnRQcm9wZXJ0aWVzLmluUGFyYW1ldGVyRmlsdGVycyA9IHZpc3VhbEZpbHRlci5pblBhcmFtZXRlcnNcblx0XHRcdFx0PyBJbnRlcmFjdGl2ZUNoYXJ0SGVscGVyLmdldEluUGFyYW1ldGVyRmlsdGVyc0JpbmRpbmcoaW5QYXJhbWV0ZXJzIGFzIEFycmF5PFBhcmFtZXRlclR5cGU+KVxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdGludGVyYWN0aXZlQ2hhcnRQcm9wZXJ0aWVzLnNlbGVjdGlvblZhcmlhbnQgPSB2aXN1YWxGaWx0ZXIuc2VsZWN0aW9uVmFyaWFudCA/IHZpc3VhbEZpbHRlci5zZWxlY3Rpb25WYXJpYW50IDogdW5kZWZpbmVkO1xuXHRcdFx0aW50ZXJhY3RpdmVDaGFydFByb3BlcnRpZXMuc3RyaW5naWZpZWRQYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcblx0XHRcdGNvbnN0IGRpbWVuc2lvbkNvbnRleHQgPSB2aXN1YWxGaWx0ZXJcblx0XHRcdFx0LmdldE1ldGFNb2RlbCgpXG5cdFx0XHRcdD8uY3JlYXRlQmluZGluZ0NvbnRleHQodmlzdWFsRmlsdGVyLmNvbnRleHRQYXRoICsgXCIvQFwiICsgZGltZW5zaW9uLmZ1bGx5UXVhbGlmaWVkTmFtZS5zcGxpdChcIkBcIilbMV0pO1xuXHRcdFx0aWYgKGRpbWVuc2lvbkNvbnRleHQpIHtcblx0XHRcdFx0Y29uc3QgZGltZW5zaW9uT2JqZWN0ID0gdmlzdWFsRmlsdGVyLmdldERhdGFNb2RlbE9iamVjdEZvck1ldGFQYXRoPFByb3BlcnR5Pihcblx0XHRcdFx0XHRkaW1lbnNpb25Db250ZXh0LmdldFBhdGgoKSxcblx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuY29udGV4dFBhdGhcblx0XHRcdFx0KTtcblx0XHRcdFx0aW50ZXJhY3RpdmVDaGFydFByb3BlcnRpZXMuY2hhcnRMYWJlbCA9IGdldFRleHRCaW5kaW5nKGRpbWVuc2lvbk9iamVjdCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Piwge30pO1xuXHRcdFx0fVxuXHRcdFx0aW50ZXJhY3RpdmVDaGFydFByb3BlcnRpZXMubWVhc3VyZSA9IEludGVyYWN0aXZlQ2hhcnRIZWxwZXIuZ2V0Q2hhcnRWYWx1ZSh2aXN1YWxGaWx0ZXIuY2hhcnRNZWFzdXJlKTtcblx0XHRcdGludGVyYWN0aXZlQ2hhcnRQcm9wZXJ0aWVzLmRpc3BsYXllZFZhbHVlID0gSW50ZXJhY3RpdmVDaGFydEhlbHBlci5nZXRDaGFydERpc3BsYXllZFZhbHVlKFxuXHRcdFx0XHR2aXN1YWxGaWx0ZXIuY2hhcnRNZWFzdXJlLFxuXHRcdFx0XHQoZGF0YVBvaW50QW5ub3RhdGlvbiBhcyBEYXRhUG9pbnQpPy5WYWx1ZUZvcm1hdCxcblx0XHRcdFx0dmlzdWFsRmlsdGVyLm1ldGFQYXRoXG5cdFx0XHQpO1xuXHRcdFx0aW50ZXJhY3RpdmVDaGFydFByb3BlcnRpZXMuY29sb3IgPSBJbnRlcmFjdGl2ZUNoYXJ0SGVscGVyLmdldENvbG9yQmluZGluZyhkYXRhUG9pbnRBbm5vdGF0aW9uIGFzIERhdGFQb2ludCwgZGltZW5zaW9uKTtcblx0XHR9XG5cdFx0cmV0dXJuIGludGVyYWN0aXZlQ2hhcnRQcm9wZXJ0aWVzO1xuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBJbnRlcmFjdGl2ZUNoYXJ0SGVscGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFpRkEsTUFBTUEsc0JBQXNCLEdBQUc7SUFDOUJDLHNCQUFzQixFQUFFLFNBQUFBLENBQVVDLEtBQWEsRUFBRUMsV0FBOEIsRUFBRUMsUUFBaUIsRUFBVTtNQUMzRyxNQUFNQyxRQUFRLEdBQUdDLFFBQVEsQ0FBQyxDQUFDRixRQUFRLENBQUMsQ0FBQztNQUNyQyxPQUNDLGlCQUFpQixHQUNqQkYsS0FBSyxHQUNMLDJFQUEyRSxJQUMxRUMsV0FBVyxJQUFJQSxXQUFXLENBQUNJLFdBQVcsR0FDcEMsV0FBVyxHQUFHSixXQUFXLENBQUNJLFdBQVcsQ0FBQ0MsT0FBTyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQ3RELHFDQUFxQyxHQUFHSCxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQzFERixXQUFXLElBQUlBLFdBQVcsQ0FBQ00sd0JBQXdCLEdBQ2pELFdBQVcsR0FBR04sV0FBVyxDQUFDTSx3QkFBd0IsR0FBRyxJQUFJLEdBQ3pELGNBQWMsQ0FBQyxHQUNsQiw0QkFBNEIsR0FDNUJKLFFBQVEsR0FDUixJQUFJLEdBQ0osVUFBVSxHQUNWSCxLQUFLLEdBQ0wsMEVBQTBFLEdBQzFFLHlFQUF5RSxDQUN4RSxDQUFDO0lBQ0osQ0FBQztJQUNEUSxhQUFhLEVBQUUsU0FBQUEsQ0FBVVIsS0FBYSxFQUFVO01BQy9DLE9BQU8sU0FBUyxHQUFHQSxLQUFLLEdBQUcsMkVBQTJFO0lBQ3ZHLENBQUM7SUFDRFMsa0JBQWtCLEVBQUUsU0FBQUEsQ0FDbkJDLFVBQWtFLEVBQ2xFQyxXQUFtQixFQUNuQkMsVUFBMEIsRUFDakI7TUFDVCxNQUFNQyxnQkFBZ0IsR0FBR0gsVUFBVSxFQUFFSSxZQUFZO01BQ2pELElBQUlDLG9CQUFvQixDQUFDRixnQkFBZ0IsQ0FBQyxFQUFFO1FBQzND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MEIsQ0FBQ1IsWUFBWSxHQUFHTyxZQUFZLENBQUNQLFlBQVk7UUFDbkUsTUFBTUEsWUFBWSxHQUFHNUUsWUFBWSxDQUFDbUcsZUFBZSxDQUFDaEIsWUFBWSxDQUFDUCxZQUFpQyxDQUFDO1FBQ2pHUSwwQkFBMEIsQ0FBQ2dCLGtCQUFrQixHQUFHakIsWUFBWSxDQUFDUCxZQUFZLEdBQ3RFcE8sc0JBQXNCLENBQUNtTyw0QkFBNEIsQ0FBQ0MsWUFBb0MsQ0FBQyxHQUN6RmxMLFNBQVM7UUFDWjBMLDBCQUEwQixDQUFDeEosZ0JBQWdCLEdBQUd1SixZQUFZLENBQUN2SixnQkFBZ0IsR0FBR3VKLFlBQVksQ0FBQ3ZKLGdCQUFnQixHQUFHbEMsU0FBUztRQUN2SDBMLDBCQUEwQixDQUFDaUIscUJBQXFCLEdBQUcvTyxVQUFVO1FBQzdELE1BQU1nUCxnQkFBZ0IsR0FBR25CLFlBQVksQ0FDbkNRLFlBQVksQ0FBQyxDQUFDLEVBQ2I3TSxvQkFBb0IsQ0FBQ3FNLFlBQVksQ0FBQzlOLFdBQVcsR0FBRyxJQUFJLEdBQUc2RSxTQUFTLENBQUNxSyxrQkFBa0IsQ0FBQzNOLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRyxJQUFJME4sZ0JBQWdCLEVBQUU7VUFDckIsTUFBTUUsZUFBZSxHQUFHckIsWUFBWSxDQUFDc0IsNkJBQTZCLENBQ2pFSCxnQkFBZ0IsQ0FBQ0ksT0FBTyxDQUFDLENBQUMsRUFDMUJ2QixZQUFZLENBQUM5TixXQUNkLENBQUM7VUFDRCtOLDBCQUEwQixDQUFDdUIsVUFBVSxHQUFHQyxjQUFjLENBQUNKLGVBQWUsRUFBbUMsQ0FBQyxDQUFDLENBQUM7UUFDN0c7UUFDQXBCLDBCQUEwQixDQUFDZixPQUFPLEdBQUc3TixzQkFBc0IsQ0FBQ1UsYUFBYSxDQUFDaU8sWUFBWSxDQUFDcEosWUFBWSxDQUFDO1FBQ3BHcUosMEJBQTBCLENBQUN5QixjQUFjLEdBQUdyUSxzQkFBc0IsQ0FBQ0Msc0JBQXNCLENBQ3hGME8sWUFBWSxDQUFDcEosWUFBWSxFQUN4QjBKLG1CQUFtQixFQUFnQmxFLFdBQVcsRUFDL0M0RCxZQUFZLENBQUN2TyxRQUNkLENBQUM7UUFDRHdPLDBCQUEwQixDQUFDMEIsS0FBSyxHQUFHdFEsc0JBQXNCLENBQUMrSCxlQUFlLENBQUNrSCxtQkFBbUIsRUFBZXZKLFNBQVMsQ0FBQztNQUN2SDtNQUNBLE9BQU9rSiwwQkFBMEI7SUFDbEM7RUFDRCxDQUFDO0VBQUMsT0FFYTVPLHNCQUFzQjtBQUFBIiwiaWdub3JlTGlzdCI6W119
@@ -98,7 +98,7 @@ const InteractiveChartHelper = {
98
98
  ",{path:'" +
99
99
  value +
100
100
  "',type:'sap.ui.model.odata.type.String', constraints:{'nullable':false}}" +
101
- "], formatter:'sap.fe.macros.visualfilters.VisualFilterRuntime.scaleVisualFilterValue'}"
101
+ "], formatter:'._formatters.VisualFilterRuntime.scaleVisualFilterValue'}"
102
102
  ); //+ sType.split('#').length ? sType.split('#')[1] : 'Decimal' + "}";
103
103
  },
104
104
  getChartValue: function (value: string): string {
@@ -580,7 +580,7 @@ const InteractiveChartHelper = {
580
580
  });
581
581
  if (parts.length > 0) {
582
582
  paths = parts.join();
583
- return `{parts:[${paths}], formatter:'sap.fe.macros.visualfilters.VisualFilterRuntime.getFiltersFromConditions'}`;
583
+ return `{parts:[${paths}], formatter:'._formatters.VisualFilterRuntime.getFiltersFromConditions.bind($control)'}`;
584
584
  } else {
585
585
  return undefined;
586
586
  }
@@ -592,7 +592,7 @@ const InteractiveChartHelper = {
592
592
  getfilterCountBinding: function (chartAnnotation?: Chart): string {
593
593
  const dimension = chartAnnotation?.Dimensions[0]?.$target?.name;
594
594
  return (
595
- "{path:'$filters>/conditions/" + dimension + "', formatter:'sap.fe.macros.visualfilters.VisualFilterRuntime.getFilterCounts'}"
595
+ "{path:'$filters>/conditions/" + dimension + "', formatter:'._formatters.VisualFilterRuntime.getFilterCounts.bind($control)'}"
596
596
  );
597
597
  },
598
598