@sapui5/sap.fe.macros 1.139.0 → 1.141.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 (254) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Chart.js +53 -2
  4. package/src/sap/fe/macros/Chart.tsx +55 -0
  5. package/src/sap/fe/macros/CollaborativeDraftHandler.js +230 -0
  6. package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +218 -0
  7. package/src/sap/fe/macros/CommonHelper.js +59 -15
  8. package/src/sap/fe/macros/CommonHelper.ts +65 -14
  9. package/src/sap/fe/macros/ConditionalSwitch.js +174 -0
  10. package/src/sap/fe/macros/ConditionalSwitch.tsx +141 -0
  11. package/src/sap/fe/macros/ConditionalSwitchProperty.js +78 -0
  12. package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +62 -0
  13. package/src/sap/fe/macros/Field.js +78 -64
  14. package/src/sap/fe/macros/Field.ts +97 -68
  15. package/src/sap/fe/macros/FooterContent.js +5 -2
  16. package/src/sap/fe/macros/FooterContent.tsx +4 -1
  17. package/src/sap/fe/macros/MacroAPI.js +9 -4
  18. package/src/sap/fe/macros/MacroAPI.ts +9 -4
  19. package/src/sap/fe/macros/MessageButton.js +1 -2
  20. package/src/sap/fe/macros/MessageButton.tsx +0 -1
  21. package/src/sap/fe/macros/MultiValueField.js +10 -7
  22. package/src/sap/fe/macros/MultiValueField.tsx +7 -3
  23. package/src/sap/fe/macros/Page.js +5 -7
  24. package/src/sap/fe/macros/Page.tsx +4 -6
  25. package/src/sap/fe/macros/Paginator.js +9 -4
  26. package/src/sap/fe/macros/Paginator.tsx +12 -3
  27. package/src/sap/fe/macros/RichTextEditor.js +3 -2
  28. package/src/sap/fe/macros/RichTextEditor.tsx +2 -1
  29. package/src/sap/fe/macros/Share.js +14 -2
  30. package/src/sap/fe/macros/Share.tsx +13 -0
  31. package/src/sap/fe/macros/Status.js +251 -0
  32. package/src/sap/fe/macros/Status.tsx +212 -0
  33. package/src/sap/fe/macros/ValueHelp.js +4 -28
  34. package/src/sap/fe/macros/ValueHelp.tsx +2 -42
  35. package/src/sap/fe/macros/ai/EasyFillDialog.js +11 -17
  36. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +11 -16
  37. package/src/sap/fe/macros/ai/EasyFilterBar.js +246 -97
  38. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +302 -106
  39. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +76 -33
  40. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +89 -40
  41. package/src/sap/fe/macros/ai/SummarizationButton.js +2 -2
  42. package/src/sap/fe/macros/ai/SummarizationButton.tsx +1 -1
  43. package/src/sap/fe/macros/chart/Chart.js +2 -2
  44. package/src/sap/fe/macros/chart/Chart.tsx +1 -1
  45. package/src/sap/fe/macros/chart/ChartHelper.js +1 -2
  46. package/src/sap/fe/macros/chart/ChartHelper.ts +0 -1
  47. package/src/sap/fe/macros/chart/ChartRuntime.js +1 -2
  48. package/src/sap/fe/macros/chart/ChartRuntime.ts +0 -1
  49. package/src/sap/fe/macros/chart/MdcChartTemplate.js +5 -5
  50. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +5 -5
  51. package/src/sap/fe/macros/contentSwitcher/ContentSwitcher.js +9 -2
  52. package/src/sap/fe/macros/contentSwitcher/ContentSwitcher.tsx +8 -0
  53. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +5 -1
  54. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +4 -0
  55. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.js +4 -2
  56. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +3 -1
  57. package/src/sap/fe/macros/controls/FilterBar.js +14 -5
  58. package/src/sap/fe/macros/controls/FilterBar.ts +3 -0
  59. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +2 -2
  60. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -2
  61. package/src/sap/fe/macros/controls/RadioButtons.js +61 -38
  62. package/src/sap/fe/macros/controls/RadioButtons.tsx +39 -18
  63. package/src/sap/fe/macros/controls/Section.js +4 -3
  64. package/src/sap/fe/macros/controls/Section.ts +3 -2
  65. package/src/sap/fe/macros/controls/section/SubSection.js +63 -8
  66. package/src/sap/fe/macros/controls/section/SubSection.ts +67 -1
  67. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +43 -4
  68. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +48 -1
  69. package/src/sap/fe/macros/designtime/Designtime.helper.js +28 -1
  70. package/src/sap/fe/macros/designtime/Designtime.helper.ts +27 -0
  71. package/src/sap/fe/macros/field/Field.js +2 -2
  72. package/src/sap/fe/macros/field/Field.tsx +1 -1
  73. package/src/sap/fe/macros/field/FieldBaseDelegate.js +13 -7
  74. package/src/sap/fe/macros/field/FieldBaseDelegate.ts +12 -8
  75. package/src/sap/fe/macros/field/FieldFormatOptions.js +25 -2
  76. package/src/sap/fe/macros/field/FieldFormatOptions.ts +13 -0
  77. package/src/sap/fe/macros/field/FieldHelper.js +2 -2
  78. package/src/sap/fe/macros/field/FieldHelper.ts +1 -4
  79. package/src/sap/fe/macros/field/FieldRuntime.js +1 -2
  80. package/src/sap/fe/macros/field/FieldRuntime.ts +0 -1
  81. package/src/sap/fe/macros/field/FieldTemplating.js +3 -3
  82. package/src/sap/fe/macros/field/FieldTemplating.ts +4 -2
  83. package/src/sap/fe/macros/filter/FilterUtils.js +233 -5
  84. package/src/sap/fe/macros/filter/FilterUtils.ts +291 -7
  85. package/src/sap/fe/macros/filterBar/FilterBar.block.js +5 -3
  86. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +4 -2
  87. package/src/sap/fe/macros/filterBar/FilterBar.js +2 -2
  88. package/src/sap/fe/macros/filterBar/FilterBar.tsx +1 -1
  89. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +63 -27
  90. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +49 -3
  91. package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +5 -3
  92. package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +5 -2
  93. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +7 -2
  94. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +6 -1
  95. package/src/sap/fe/macros/form/Form.block.js +7 -8
  96. package/src/sap/fe/macros/form/Form.block.ts +4 -6
  97. package/src/sap/fe/macros/form/Form.js +1 -4
  98. package/src/sap/fe/macros/form/Form.tsx +0 -3
  99. package/src/sap/fe/macros/form/FormContainer.block.js +555 -5
  100. package/src/sap/fe/macros/form/FormContainer.block.ts +665 -7
  101. package/src/sap/fe/macros/form/FormContainer.fragment.xml +1 -0
  102. package/src/sap/fe/macros/form/FormDelegate.js +24 -8
  103. package/src/sap/fe/macros/form/FormDelegate.ts +29 -7
  104. package/src/sap/fe/macros/form/FormHelper.js +1 -2
  105. package/src/sap/fe/macros/form/FormHelper.ts +0 -1
  106. package/src/sap/fe/macros/fpm/CustomFragment.block.js +1 -2
  107. package/src/sap/fe/macros/fpm/CustomFragment.block.ts +0 -1
  108. package/src/sap/fe/macros/internal/ActionCommand.block.js +1 -2
  109. package/src/sap/fe/macros/internal/ActionCommand.block.ts +0 -1
  110. package/src/sap/fe/macros/internal/DataPoint.js +3 -2
  111. package/src/sap/fe/macros/internal/DataPoint.tsx +10 -1
  112. package/src/sap/fe/macros/internal/FilterField.block.js +19 -5
  113. package/src/sap/fe/macros/internal/FilterField.block.ts +16 -4
  114. package/src/sap/fe/macros/internal/field/DisplayStyle.js +9 -3
  115. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +10 -2
  116. package/src/sap/fe/macros/internal/field/EditStyle.js +21 -4
  117. package/src/sap/fe/macros/internal/field/EditStyle.tsx +18 -4
  118. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +3 -2
  119. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +5 -1
  120. package/src/sap/fe/macros/internal/filterField/FilterFieldTemplate.fragment.xml +1 -0
  121. package/src/sap/fe/macros/internal/helpers/ActionHelper.js +36 -5
  122. package/src/sap/fe/macros/internal/helpers/ActionHelper.ts +34 -4
  123. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.js +46 -8
  124. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.ts +60 -6
  125. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +38 -2
  126. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +37 -2
  127. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +1 -1
  128. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +10 -3
  129. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +13 -2
  130. package/src/sap/fe/macros/library.js +1 -1
  131. package/src/sap/fe/macros/mdc/adapter/StateFilterToSelectionVariant.js +2 -1
  132. package/src/sap/fe/macros/mdc/adapter/StateFilterToSelectionVariant.ts +1 -0
  133. package/src/sap/fe/macros/messagebundle.properties +24 -4
  134. package/src/sap/fe/macros/messagebundle_ar.properties +8 -2
  135. package/src/sap/fe/macros/messagebundle_bg.properties +8 -2
  136. package/src/sap/fe/macros/messagebundle_ca.properties +11 -5
  137. package/src/sap/fe/macros/messagebundle_cnr.properties +8 -2
  138. package/src/sap/fe/macros/messagebundle_cs.properties +7 -1
  139. package/src/sap/fe/macros/messagebundle_cy.properties +9 -3
  140. package/src/sap/fe/macros/messagebundle_da.properties +8 -2
  141. package/src/sap/fe/macros/messagebundle_de.properties +13 -7
  142. package/src/sap/fe/macros/messagebundle_el.properties +7 -1
  143. package/src/sap/fe/macros/messagebundle_en.properties +11 -5
  144. package/src/sap/fe/macros/messagebundle_en_GB.properties +9 -3
  145. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +11 -5
  146. package/src/sap/fe/macros/messagebundle_es.properties +10 -4
  147. package/src/sap/fe/macros/messagebundle_es_MX.properties +11 -5
  148. package/src/sap/fe/macros/messagebundle_et.properties +9 -3
  149. package/src/sap/fe/macros/messagebundle_fi.properties +7 -1
  150. package/src/sap/fe/macros/messagebundle_fr.properties +9 -3
  151. package/src/sap/fe/macros/messagebundle_fr_CA.properties +8 -2
  152. package/src/sap/fe/macros/messagebundle_hi.properties +8 -2
  153. package/src/sap/fe/macros/messagebundle_hr.properties +8 -2
  154. package/src/sap/fe/macros/messagebundle_hu.properties +7 -1
  155. package/src/sap/fe/macros/messagebundle_id.properties +15 -9
  156. package/src/sap/fe/macros/messagebundle_it.properties +7 -1
  157. package/src/sap/fe/macros/messagebundle_iw.properties +8 -2
  158. package/src/sap/fe/macros/messagebundle_ja.properties +13 -7
  159. package/src/sap/fe/macros/messagebundle_kk.properties +11 -5
  160. package/src/sap/fe/macros/messagebundle_ko.properties +8 -2
  161. package/src/sap/fe/macros/messagebundle_lt.properties +9 -3
  162. package/src/sap/fe/macros/messagebundle_lv.properties +8 -2
  163. package/src/sap/fe/macros/messagebundle_mk.properties +8 -2
  164. package/src/sap/fe/macros/messagebundle_ms.properties +7 -1
  165. package/src/sap/fe/macros/messagebundle_nl.properties +7 -1
  166. package/src/sap/fe/macros/messagebundle_no.properties +7 -1
  167. package/src/sap/fe/macros/messagebundle_pl.properties +8 -2
  168. package/src/sap/fe/macros/messagebundle_pt.properties +7 -1
  169. package/src/sap/fe/macros/messagebundle_pt_PT.properties +7 -1
  170. package/src/sap/fe/macros/messagebundle_ro.properties +8 -2
  171. package/src/sap/fe/macros/messagebundle_ru.properties +10 -4
  172. package/src/sap/fe/macros/messagebundle_sh.properties +8 -2
  173. package/src/sap/fe/macros/messagebundle_sk.properties +7 -1
  174. package/src/sap/fe/macros/messagebundle_sl.properties +7 -1
  175. package/src/sap/fe/macros/messagebundle_sr.properties +8 -2
  176. package/src/sap/fe/macros/messagebundle_sv.properties +7 -1
  177. package/src/sap/fe/macros/messagebundle_th.properties +8 -2
  178. package/src/sap/fe/macros/messagebundle_tr.properties +7 -1
  179. package/src/sap/fe/macros/messagebundle_uk.properties +10 -4
  180. package/src/sap/fe/macros/messagebundle_vi.properties +10 -4
  181. package/src/sap/fe/macros/messagebundle_zh_CN.properties +7 -1
  182. package/src/sap/fe/macros/messagebundle_zh_TW.properties +8 -2
  183. package/src/sap/fe/macros/messages/MessageButton.js +39 -18
  184. package/src/sap/fe/macros/messages/MessageButton.ts +42 -19
  185. package/src/sap/fe/macros/messages/MessagePopover.js +4 -2
  186. package/src/sap/fe/macros/messages/MessagePopover.ts +6 -4
  187. package/src/sap/fe/macros/microchart/MicroChart.js +2 -2
  188. package/src/sap/fe/macros/microchart/MicroChart.tsx +1 -1
  189. package/src/sap/fe/macros/microchart/MicroChartContainer.js +1 -2
  190. package/src/sap/fe/macros/microchart/MicroChartContainer.ts +1 -2
  191. package/src/sap/fe/macros/microchart/MicroChartHelper.js +2 -3
  192. package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +1 -2
  193. package/src/sap/fe/macros/share/ShareAPI.js +4 -29
  194. package/src/sap/fe/macros/share/ShareAPI.ts +1 -32
  195. package/src/sap/fe/macros/situations/SituationsPopover.js +3 -1
  196. package/src/sap/fe/macros/situations/SituationsPopover.ts +2 -0
  197. package/src/sap/fe/macros/table/ActionsTemplating.js +4 -8
  198. package/src/sap/fe/macros/table/ActionsTemplating.tsx +5 -8
  199. package/src/sap/fe/macros/table/BasicSearch.js +1 -1
  200. package/src/sap/fe/macros/table/BasicSearch.ts +2 -1
  201. package/src/sap/fe/macros/table/Column.js +14 -2
  202. package/src/sap/fe/macros/table/Column.ts +7 -0
  203. package/src/sap/fe/macros/table/ColumnExportSettings.js +83 -15
  204. package/src/sap/fe/macros/table/ColumnExportSettings.ts +44 -0
  205. package/src/sap/fe/macros/table/ColumnOverride.js +14 -2
  206. package/src/sap/fe/macros/table/ColumnOverride.ts +7 -0
  207. package/src/sap/fe/macros/table/MdcTableTemplate.js +7 -5
  208. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +21 -11
  209. package/src/sap/fe/macros/table/QuickFilterSelector.js +12 -3
  210. package/src/sap/fe/macros/table/QuickFilterSelector.tsx +15 -2
  211. package/src/sap/fe/macros/table/Table.block.js +188 -147
  212. package/src/sap/fe/macros/table/Table.block.tsx +41 -11
  213. package/src/sap/fe/macros/table/Table.js +16 -10
  214. package/src/sap/fe/macros/table/Table.tsx +16 -10
  215. package/src/sap/fe/macros/table/TableAPI.js +224 -184
  216. package/src/sap/fe/macros/table/TableAPI.ts +63 -19
  217. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +6 -6
  218. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +5 -4
  219. package/src/sap/fe/macros/table/TableHelper.js +2 -3
  220. package/src/sap/fe/macros/table/TableHelper.ts +1 -2
  221. package/src/sap/fe/macros/table/TableRuntime.js +24 -5
  222. package/src/sap/fe/macros/table/TableRuntime.ts +31 -3
  223. package/src/sap/fe/macros/table/TreeTable.js +16 -10
  224. package/src/sap/fe/macros/table/TreeTable.tsx +16 -10
  225. package/src/sap/fe/macros/table/Utils.js +8 -3
  226. package/src/sap/fe/macros/table/Utils.ts +12 -3
  227. package/src/sap/fe/macros/table/delegates/ALPTableDelegate.js +1 -2
  228. package/src/sap/fe/macros/table/delegates/ALPTableDelegate.ts +0 -1
  229. package/src/sap/fe/macros/table/delegates/TableDelegate.js +69 -34
  230. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +75 -33
  231. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.js +1 -2
  232. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.ts +0 -1
  233. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +10 -10
  234. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +11 -9
  235. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +14 -12
  236. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +11 -10
  237. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +34 -4
  238. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +45 -2
  239. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +55 -12
  240. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +71 -9
  241. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +53 -2
  242. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +55 -0
  243. package/src/sap/fe/macros/table/mixin/TableExport.js +22 -3
  244. package/src/sap/fe/macros/table/mixin/TableExport.ts +25 -4
  245. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +5 -1
  246. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +7 -0
  247. package/src/sap/fe/macros/table/mixin/TableSharing.js +4 -2
  248. package/src/sap/fe/macros/table/mixin/TableSharing.ts +10 -1
  249. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +36 -10
  250. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +44 -9
  251. package/src/sap/fe/macros/visualfilters/VisualFilter.js +5 -4
  252. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +3 -2
  253. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +2 -3
  254. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +1 -2
@@ -210,7 +210,6 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/
210
210
  press: pressHandler,
211
211
  "jsx:command": pressCommand,
212
212
  enabled: enabled,
213
- visible: action.visibleForContextMenu,
214
213
  children: {
215
214
  customData: [createCustomData("actionId", tableActionContextMenuId)]
216
215
  }
@@ -264,7 +263,6 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/
264
263
  press: pressHandler,
265
264
  "jsx:command": pressCommand,
266
265
  enabled: enabled,
267
- visible: action.visibleForContextMenu,
268
266
  children: {
269
267
  customData: [createCustomData("IBNData", IBNData), createCustomData("actionId", tableActionContextMenuId)]
270
268
  }
@@ -438,7 +436,6 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/
438
436
  return _jsx(MenuItem, {
439
437
  text: action.text,
440
438
  id: generate([table.contentId, action.id, "ContextMenu"]),
441
- visible: action.visibleForContextMenu,
442
439
  enabled: action.enabledForContextMenu,
443
440
  icon: icon,
444
441
  children: {
@@ -501,7 +498,6 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/
501
498
  text: action.text,
502
499
  press: pressHandler,
503
500
  "jsx:command": pressCommand,
504
- visible: action.visibleForContextMenu,
505
501
  enabled: action.enabledForContextMenu,
506
502
  children: {
507
503
  customData: [createCustomData("actionId", tableActionContextMenuId)]
@@ -583,7 +579,6 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/
583
579
  id: generate([table.contentId, dataField, "ContextMenu"]),
584
580
  text: action.text,
585
581
  press: press,
586
- visible: action.visibleForContextMenu,
587
582
  enabled: compileExpression(equal(pathInModel("contextmenu/numberOfSelectedContexts", "internal"), 1)),
588
583
  children: {
589
584
  customData: [createCustomData("actionId", generate([table.contentId, dataField, "ContextMenu"]))]
@@ -802,7 +797,6 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/
802
797
  id: generate([table.contentId, action.key, "ContextMenu"]),
803
798
  text: "{sap.fe.i18n>M_COMMON_TABLE_MASSEDIT}",
804
799
  press: handlerProvider.getMassEditButtonPressHandler(true),
805
- visible: action.visibleForContextMenu,
806
800
  enabled: action.enabledForContextMenu
807
801
  });
808
802
  }
@@ -849,7 +843,9 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/
849
843
  * @returns The xml string representation of the actions
850
844
  */
851
845
  function getActions(table, forContextMenu, parameters, collectionContext, collectionEntity) {
852
- return table.tableDefinition.actions.map(action => {
846
+ // Apply primary action overflow protection before processing
847
+ const actionsWithOverflowProtection = ActionHelper.ensurePrimaryActionNeverOverflows(table.tableDefinition.actions);
848
+ return actionsWithOverflowProtection.map(action => {
853
849
  switch (action.type) {
854
850
  case ActionType.Standard:
855
851
  return getStandardAction(action, table, forContextMenu, parameters.handlerProvider, collectionEntity);
@@ -1123,4 +1119,4 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/
1123
1119
  }
1124
1120
  return _exports;
1125
1121
  }, false);
1126
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRNZW51SXRlbUZvckFjdGlvbiIsImRhdGFGaWVsZCIsImFjdGlvbiIsIm1lbnVJdGVtQWN0aW9uIiwidGFibGUiLCJmb3JDb250ZXh0TWVudSIsImNvbGxlY3Rpb25Db250ZXh0IiwicGFyYW1ldGVycyIsImFubm90YXRpb25QYXRoIiwidW5kZWZpbmVkIiwiYWN0aW9uQ29udGV4dFBhdGgiLCJDb21tb25IZWxwZXIiLCJnZXRBY3Rpb25Db250ZXh0IiwibWV0YU1vZGVsIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJhY3Rpb25Db250ZXh0IiwiZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImlzQm91bmQiLCJBY3Rpb25UYXJnZXQiLCJpc09wZXJhdGlvbkF2YWlsYWJsZSIsImFubm90YXRpb25zIiwiQ29yZSIsIk9wZXJhdGlvbkF2YWlsYWJsZSIsInZhbHVlT2YiLCJjb21tYW5kIiwiY29udGV4dE1lbnVUZXh0IiwicHJlc3NIYW5kbGVyIiwiaGFuZGxlclByb3ZpZGVyIiwiZ2V0RGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uUHJlc3NIYW5kbGVyIiwicHJlc3NDb21tYW5kIiwiZW5hYmxlZCIsIlRhYmxlSGVscGVyIiwiaXNEYXRhRmllbGRGb3JBY3Rpb25FbmFibGVkIiwidGFibGVEZWZpbml0aW9uIiwiQWN0aW9uIiwiZ2V0T2JqZWN0IiwiZW5hYmxlT25TZWxlY3QiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiY29udHJvbCIsImFuYWx5dGljYWxDb25maWd1cmF0aW9uIiwiYWdncmVnYXRpb25PbkxlYWZMZXZlbCIsImNvbXBpbGVFeHByZXNzaW9uIiwiYW5kIiwiVUkiLCJpc05vZGVMZXZlbE5hdmlnYWJsZSIsInJlc29sdmVCaW5kaW5nU3RyaW5nIiwiaXRlbUlkIiwiZ2VuZXJhdGUiLCJjb250ZW50SWQiLCJrZXkiLCJfanN4IiwiTWVudUl0ZW0iLCJ0ZXh0IiwiTGFiZWwiLCJpZCIsInByZXNzIiwidmlzaWJsZSIsImNoaWxkcmVuIiwiY3VzdG9tRGF0YSIsImNyZWF0ZUN1c3RvbURhdGEiLCJnZXRNZW51SXRlbUZvckludGVudEJhc2VkTmF2aWdhdGlvbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImdldERhdGFGaWVsZEZvcklCTlByZXNzSGFuZGxlciIsImlzRGF0YUZpZWxkRm9ySUJORW5hYmxlZCIsImNvbGxlY3Rpb24iLCJSZXF1aXJlc0NvbnRleHQiLCJOYXZpZ2F0aW9uQXZhaWxhYmxlIiwic2VtYW50aWNPYmplY3QiLCJTZW1hbnRpY09iamVjdCIsImdldE1lbnVJdGVtIiwiY29udmVydGVkTWV0YWRhdGEiLCJyZXNvbHZlUGF0aCIsInRhcmdldCIsInR5cGUiLCJpc0RhdGFGaWVsZEZvckFjdGlvbiIsImlzQWN0aW9uU2hvd25JbkNvbnRleHRNZW51IiwiY29udGV4dE9iamVjdFBhdGgiLCJpc0RhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE1hbmlmZXN0QWN0aW9uUHJlc3NIYW5kbGVyIiwiZW5hYmxlZEZvckNvbnRleHRNZW51IiwicmVxdWlyZXNTZWxlY3Rpb24iLCJnZXREYXRhRmllbGRCdXR0b25Gb3JBY3Rpb24iLCJkYXRhRmllbGRBY3Rpb25Db250ZXh0IiwiaWNvbiIsImlzQUlPcGVyYXRpb24iLCJhaUljb24iLCJ0b29sYmFyQWN0aW9uSWQiLCJCdXR0b24iLCJhcmlhSGFzUG9wdXAiLCJpc0FjdGlvbldpdGhEaWFsb2ciLCJCdXR0b25UeXBlIiwiVHJhbnNwYXJlbnQiLCJsYXlvdXREYXRhIiwiT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSIsInByaW9yaXR5IiwiZ3JvdXAiLCJ0YWJsZUFjdGlvbkNvbnRleHRNZW51SWQiLCJ2aXNpYmxlRm9yQ29udGV4dE1lbnUiLCJnZXREYXRhRmllbGRCdXR0b25Gb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJJQk5EYXRhIiwiZ2V0RGF0YUZpZWxkQnV0dG9uIiwidGVtcGxhdGUiLCJkZWVwQ2xvbmUiLCJBY3Rpb25Ub29sYmFyQWN0aW9uIiwiZ2V0RGVmYXVsdE1lbnVCdXR0b25BY3Rpb24iLCJkZWZhdWx0QWN0aW9uIiwiZGF0YUZpZWxkRm9yRGVmYXVsdEFjdGlvbiIsImhhbmRsZXIiLCJlIiwiZ2V0TWVudUJ1dHRvbiIsImRlZmF1bHRBY3Rpb25IYW5kbGVycyIsIm1lbnVJdGVtcyIsIm1lbnUiLCJmaWx0ZXIiLCJtYXAiLCJpdGVtIiwibWVudUlkIiwiTWVudUJ1dHRvbiIsIm1lbnVQb3NpdGlvbiIsIlBvcHVwIiwiRG9jayIsIkJlZ2luQm90dG9tIiwidXNlRGVmYXVsdEFjdGlvbk9ubHkiLCJidXR0b25Nb2RlIiwiTWVudUJ1dHRvbk1vZGUiLCJTcGxpdCIsIlJlZ3VsYXIiLCJNZW51IiwibWVudUl0ZW1zRm9yQ29udGV4dE1lbnUiLCJmb3JFYWNoIiwicHVzaCIsIml0ZW1zIiwiZ2V0RGVmYXVsdEJ1dHRvbiIsImdldEFjdGlvbiIsImdldENvcHlBY3Rpb24iLCJvcGVyYXRpb25BdmFpbGFibGUiLCJBY3Rpb25IZWxwZXIiLCJnZXROdW1iZXJPZkNvbnRleHRzRXhwcmVzc2lvbiIsImVxdWFsIiwicGF0aEluTW9kZWwiLCJnZXRDcmVhdGVCdXR0b24iLCJzdGFuZGFyZEFjdGlvbiIsImNvbGxlY3Rpb25FbnRpdHkiLCJzdWZmaXhSZXNvdXJjZUtleSIsIm5hbWUiLCJidXR0b25UZXh0IiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJjcmVhdGVPdXRib3VuZERldGFpbCIsImFubm90YXRpb24iLCJjcmVhdGUiLCJvdXRib3VuZERldGFpbCIsImVuYWJsZVVwbG9hZFBsdWdpbiIsIkFjdGlvbnNQbGFjZWhvbGRlciIsInBsYWNlaG9sZGVyRm9yIiwiZ2V0Q3JlYXRlTWVudSIsInZhbHVlcyIsIm5vZGVUeXBlIiwiaGFzQ3VzdG9tQ3JlYXRlRW5hYmxlbWVudCIsImNyZWF0ZUVuYWJsZW1lbnQiLCJhbGxvd2VkVmFsdWUiLCJpbmRleCIsIm1vZGVsTmFtZSIsImlzRW5hYmxlZCIsIm5vdEVxdWFsIiwidmFsdWUiLCJnZXRDcmVhdGVNZW51SXRlbVByZXNzSGFuZGxlciIsImdldERlbGV0ZUJ1dHRvbiIsImdldFN0YW5kYXJkQWN0aW9uIiwiaXNUZW1wbGF0ZWQiLCJTdGFuZGFyZEFjdGlvbktleXMiLCJDcmVhdGUiLCJpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQiLCJEZWxldGUiLCJDdXQiLCJnZXRDdXRCdXR0b24iLCJDb3B5IiwiZ2V0Q29weUJ1dHRvbiIsIlBhc3RlIiwiZ2V0UGFzdGVCdXR0b24iLCJNYXNzRWRpdCIsImdldE1hc3NFZGl0QnV0dG9uUHJlc3NIYW5kbGVyIiwiSW5zaWdodHMiLCJhZGRDYXJkVG9JbnNpZ2h0c1ByZXNzIiwiTW92ZVVwIiwiTW92ZURvd24iLCJnZXRNb3ZlVXBEb3duQnV0dG9uIiwiZ2V0QWN0aW9ucyIsImFjdGlvbnMiLCJBY3Rpb25UeXBlIiwiU3RhbmRhcmQiLCJfZXhwb3J0cyIsImdldEJhc2ljU2VhcmNoIiwidXNlQmFzaWNTZWFyY2giLCJmaWx0ZXJCYXJJZCIsIl9jb2xsZWN0aW9uSXNEcmFmdEVuYWJsZWQiLCJpc1NlYXJjaGFibGUiLCJsYWJlbCIsIkJhc2ljU2VhcmNoTWFjcm8iLCJ1c2VEcmFmdEVkaXRTdGF0ZSIsImdldEZ1bGxTY3JlZW4iLCJlbmFibGVGdWxsU2NyZWVuIiwiVGFibGVGdWxsU2NyZWVuQnV0dG9uIiwiZm9yTW92ZVVwIiwidGFibGVUeXBlIiwiZ2V0VGFibGVBY3Rpb25zVGVtcGxhdGUiLCJNb2RlbEhlbHBlciIsImlzRHJhZnROb2RlIiwiaXNEcmFmdFJvb3QiLCJzZWFyY2hhYmxlIiwiYmFzaWNTZWFyY2giLCJmaWx0ZXJCYXIiLCJmdWxsU2NyZWVuIiwiZ2V0VGFibGVDb250ZXh0TWVudVRlbXBsYXRlIiwiZ2V0RXhwYW5kZWRDb2xsYXBzZUFjdGlvbnMiLCJleHBhbmROb2RlIiwiY29sbGFwc2VOb2RlIiwiZXhwYW5kIiwiZW5hYmxlRXhwcmVzc2lvbiJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQWN0aW9uc1RlbXBsYXRpbmcudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQWN0aW9uIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL0VkbVwiO1xuaW1wb3J0IHR5cGUge1xuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBY3Rpb24sXG5cdERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5cbmltcG9ydCB0eXBlIHsgRW50aXR5U2V0LCBOYXZpZ2F0aW9uUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBkZWVwQ2xvbmUgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcENsb25lXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBhbmQsIGNvbXBpbGVFeHByZXNzaW9uLCBlcXVhbCwgbm90RXF1YWwsIHBhdGhJbk1vZGVsLCByZXNvbHZlQmluZGluZ1N0cmluZyB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgQWN0aW9uVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7XG5cdGlzQWN0aW9uV2l0aERpYWxvZyxcblx0aXNEYXRhRmllbGRGb3JBY3Rpb24sXG5cdGlzRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2Fubm90YXRpb25zL0RhdGFGaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uQWN0aW9uLCBCYXNlQWN0aW9uLCBDdXN0b21BY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyBCdXR0b25UeXBlLCBhaUljb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IENyZWF0ZUJlaGF2aW9yRXh0ZXJuYWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB0eXBlIHsgU3RhbmRhcmRBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vdGFibGUvU3RhbmRhcmRBY3Rpb25zXCI7XG5pbXBvcnQgeyBTdGFuZGFyZEFjdGlvbktleXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vdGFibGUvU3RhbmRhcmRBY3Rpb25zXCI7XG5pbXBvcnQgeyBVSSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCB7IGNyZWF0ZUN1c3RvbURhdGEgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9UU1hVdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBDdXN0b21BbmRBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jaGFydC9NZGNDaGFydFRlbXBsYXRlXCI7XG5pbXBvcnQgdHlwZSB7IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLCBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvTWRjVGFibGVUZW1wbGF0ZVwiO1xuaW1wb3J0IFRhYmxlRnVsbFNjcmVlbkJ1dHRvbiBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUZ1bGxTY3JlZW5CdXR0b25cIjtcbmltcG9ydCBUYWJsZUhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUhlbHBlclwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgTWVudSBmcm9tIFwic2FwL20vTWVudVwiO1xuaW1wb3J0IE1lbnVCdXR0b24gZnJvbSBcInNhcC9tL01lbnVCdXR0b25cIjtcbmltcG9ydCBNZW51SXRlbSBmcm9tIFwic2FwL20vTWVudUl0ZW1cIjtcbmltcG9ydCBPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIGZyb20gXCJzYXAvbS9PdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhXCI7XG5pbXBvcnQgeyBNZW51QnV0dG9uTW9kZSB9IGZyb20gXCJzYXAvbS9saWJyYXJ5XCI7XG5pbXBvcnQgQWN0aW9uc1BsYWNlaG9sZGVyIGZyb20gXCJzYXAvbS91cGxvYWQvQWN0aW9uc1BsYWNlaG9sZGVyXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBQb3B1cCBmcm9tIFwic2FwL3VpL2NvcmUvUG9wdXBcIjtcbmltcG9ydCBBY3Rpb25Ub29sYmFyQWN0aW9uIGZyb20gXCJzYXAvdWkvbWRjL2FjdGlvbnRvb2xiYXIvQWN0aW9uVG9vbGJhckFjdGlvblwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBBY3Rpb25IZWxwZXIgZnJvbSBcIi4uL2ludGVybmFsL2hlbHBlcnMvQWN0aW9uSGVscGVyXCI7XG5pbXBvcnQgQmFzaWNTZWFyY2hNYWNybyBmcm9tIFwiLi9CYXNpY1NlYXJjaFwiO1xuaW1wb3J0IHR5cGUgVGFibGVFdmVudEhhbmRsZXJQcm92aWRlciBmcm9tIFwiLi9UYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyXCI7XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBNZW51SXRlbSBmb3IgdGhlIERhdGFGaWVsZEZvckFjdGlvbi5cbiAqIEBwYXJhbSBkYXRhRmllbGQgRGF0YUZpZWxkIGZvciBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24gVGhlIG5hbWUgb2YgdGhlIGFjdGlvblxuICogQHBhcmFtIG1lbnVJdGVtQWN0aW9uIFRoZSBtZW51SXRlbUFjdGlvbiB0byBiZSBldmFsdWF0ZWRcbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG4gKiBAcGFyYW0gY29sbGVjdGlvbkNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSBwYXJhbWV0ZXJzXG4gKiBAcmV0dXJucyBUaGUgTWVudUl0ZW1cbiAqL1xuZnVuY3Rpb24gZ2V0TWVudUl0ZW1Gb3JBY3Rpb24oXG5cdGRhdGFGaWVsZDogRGF0YUZpZWxkRm9yQWN0aW9uLFxuXHRhY3Rpb246IEJhc2VBY3Rpb24gfCBBbm5vdGF0aW9uQWN0aW9uIHwgQ3VzdG9tQWN0aW9uLFxuXHRtZW51SXRlbUFjdGlvbjogQmFzZUFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0Y29sbGVjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnNcbik6IE1lbnVJdGVtIHwgdW5kZWZpbmVkIHtcblx0aWYgKCFtZW51SXRlbUFjdGlvbi5hbm5vdGF0aW9uUGF0aCkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0Y29uc3QgYWN0aW9uQ29udGV4dFBhdGggPSBDb21tb25IZWxwZXIuZ2V0QWN0aW9uQ29udGV4dChcblx0XHRwYXJhbWV0ZXJzLm1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChtZW51SXRlbUFjdGlvbi5hbm5vdGF0aW9uUGF0aCArIFwiL0FjdGlvblwiKSFcblx0KTtcblx0Y29uc3QgYWN0aW9uQ29udGV4dCA9IHBhcmFtZXRlcnMubWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGFjdGlvbkNvbnRleHRQYXRoKSE7XG5cdGNvbnN0IGRhdGFGaWVsZERhdGFNb2RlbE9iamVjdFBhdGggPSBhY3Rpb25Db250ZXh0XG5cdFx0PyBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKGFjdGlvbkNvbnRleHQsIGNvbGxlY3Rpb25Db250ZXh0KVxuXHRcdDogdW5kZWZpbmVkO1xuXHRjb25zdCBpc0JvdW5kID0gZGF0YUZpZWxkLkFjdGlvblRhcmdldD8uaXNCb3VuZDtcblx0Y29uc3QgaXNPcGVyYXRpb25BdmFpbGFibGUgPSBkYXRhRmllbGQuQWN0aW9uVGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29yZT8uT3BlcmF0aW9uQXZhaWxhYmxlPy52YWx1ZU9mKCkgIT09IGZhbHNlO1xuXHRjb25zdCBjb21tYW5kID0gIWZvckNvbnRleHRNZW51ID8gbWVudUl0ZW1BY3Rpb24uY29tbWFuZCA6IG1lbnVJdGVtQWN0aW9uLmNvbW1hbmQgKyBcIjo6Q29udGV4dE1lbnVcIjtcblx0Y29uc3QgY29udGV4dE1lbnVUZXh0ID0gZm9yQ29udGV4dE1lbnUgPyBcIkNvbnRleHRNZW51XCIgOiBcIkFjdGlvbk1lbnVcIjtcblx0Y29uc3QgcHJlc3NIYW5kbGVyID0gbWVudUl0ZW1BY3Rpb24uY29tbWFuZFxuXHRcdD8gdW5kZWZpbmVkXG5cdFx0OiBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXREYXRhRmllbGRGb3JBY3Rpb25CdXR0b25QcmVzc0hhbmRsZXIoZGF0YUZpZWxkLCBtZW51SXRlbUFjdGlvbiwgYWN0aW9uLCBmb3JDb250ZXh0TWVudSk7XG5cdGNvbnN0IHByZXNzQ29tbWFuZCA9IG1lbnVJdGVtQWN0aW9uLmNvbW1hbmQgPyBgY21kOiR7Y29tbWFuZH18cHJlc3NgIDogdW5kZWZpbmVkO1xuXG5cdGxldCBlbmFibGVkOiBzdHJpbmcgfCBib29sZWFuIHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gPVxuXHRcdG1lbnVJdGVtQWN0aW9uLmVuYWJsZWQgIT09IHVuZGVmaW5lZFxuXHRcdFx0PyBtZW51SXRlbUFjdGlvbi5lbmFibGVkXG5cdFx0XHQ6IFRhYmxlSGVscGVyLmlzRGF0YUZpZWxkRm9yQWN0aW9uRW5hYmxlZChcblx0XHRcdFx0XHR0YWJsZS50YWJsZURlZmluaXRpb24sXG5cdFx0XHRcdFx0ZGF0YUZpZWxkLkFjdGlvbixcblx0XHRcdFx0XHQhIWlzQm91bmQsXG5cdFx0XHRcdFx0YWN0aW9uQ29udGV4dC5nZXRPYmplY3QoKSxcblx0XHRcdFx0XHRtZW51SXRlbUFjdGlvbi5lbmFibGVPblNlbGVjdCxcblx0XHRcdFx0XHRkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRFbnRpdHlUeXBlLFxuXHRcdFx0XHRcdGZvckNvbnRleHRNZW51XG5cdFx0XHQgICk7XG5cblx0aWYgKHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmFuYWx5dGljYWxDb25maWd1cmF0aW9uPy5hZ2dyZWdhdGlvbk9uTGVhZkxldmVsICYmICEhaXNCb3VuZCkge1xuXHRcdGVuYWJsZWQgPSBjb21waWxlRXhwcmVzc2lvbihhbmQoVUkuaXNOb2RlTGV2ZWxOYXZpZ2FibGUsIHJlc29sdmVCaW5kaW5nU3RyaW5nKGVuYWJsZWQpKSk7XG5cdH1cblx0aWYgKGlzQm91bmQgIT09IHRydWUgfHwgaXNPcGVyYXRpb25BdmFpbGFibGUpIHtcblx0XHRjb25zdCBpdGVtSWQgPSBnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBtZW51SXRlbUFjdGlvbi5rZXksIGFjdGlvbi5rZXksIGNvbnRleHRNZW51VGV4dCwgZGF0YUZpZWxkLCBcIk1lbnVJdGVtRm9yQWN0aW9uXCJdKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdHRleHQ9e2RhdGFGaWVsZC5MYWJlbH1cblx0XHRcdFx0aWQ9e2l0ZW1JZH1cblx0XHRcdFx0cHJlc3M9e3ByZXNzSGFuZGxlcn1cblx0XHRcdFx0anN4OmNvbW1hbmQ9e3ByZXNzQ29tbWFuZH1cblx0XHRcdFx0ZW5hYmxlZD17ZW5hYmxlZH1cblx0XHRcdFx0dmlzaWJsZT17bWVudUl0ZW1BY3Rpb24udmlzaWJsZX1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjdXN0b21EYXRhOiBbY3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIGl0ZW1JZCldXG5cdFx0XHRcdH19XG5cdFx0XHQ8L01lbnVJdGVtPlxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgTWVudUl0ZW0gZm9yIHRoZSBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24uXG4gKiBAcGFyYW0gZGF0YUZpZWxkIERhdGFGaWVsZCBmb3IgSW50ZW50QmFzZWROYXZpZ2F0aW9uXG4gKiBAcGFyYW0gbWVudUl0ZW1BY3Rpb24gVGhlIG1lbnVJdGVtQWN0aW9uIHRvIGJlIGV2YWx1YXRlZFxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcbiAqIEBwYXJhbSBjb2xsZWN0aW9uQ29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgY29sbGVjdGlvblxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlclxuICogQHJldHVybnMgVGhlIE1lbnVJdGVtXG4gKi9cbmZ1bmN0aW9uIGdldE1lbnVJdGVtRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0bWVudUl0ZW1BY3Rpb246IEJhc2VBY3Rpb24sXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZSxcblx0Y29sbGVjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdGFjdGlvbjogQmFzZUFjdGlvbiB8IEFubm90YXRpb25BY3Rpb24gfCBDdXN0b21BY3Rpb24sXG5cdGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclxuKTogTWVudUl0ZW0ge1xuXHRjb25zdCBwcmVzc0hhbmRsZXIgPSBtZW51SXRlbUFjdGlvbi5jb21tYW5kXG5cdFx0PyB1bmRlZmluZWRcblx0XHQ6IGhhbmRsZXJQcm92aWRlci5nZXREYXRhRmllbGRGb3JJQk5QcmVzc0hhbmRsZXIobWVudUl0ZW1BY3Rpb24sIGZvckNvbnRleHRNZW51KTtcblx0Y29uc3QgcHJlc3NDb21tYW5kID0gbWVudUl0ZW1BY3Rpb24uY29tbWFuZCA/IGBjbWQ6JHttZW51SXRlbUFjdGlvbi5jb21tYW5kfXxwcmVzc2AgOiB1bmRlZmluZWQ7XG5cblx0Y29uc3QgZW5hYmxlZCA9XG5cdFx0bWVudUl0ZW1BY3Rpb24uZW5hYmxlZCAhPT0gdW5kZWZpbmVkXG5cdFx0XHQ/IG1lbnVJdGVtQWN0aW9uLmVuYWJsZWRcblx0XHRcdDogVGFibGVIZWxwZXIuaXNEYXRhRmllbGRGb3JJQk5FbmFibGVkKFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb246IGNvbGxlY3Rpb25Db250ZXh0LFxuXHRcdFx0XHRcdFx0dGFibGVEZWZpbml0aW9uOiB0YWJsZS50YWJsZURlZmluaXRpb25cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0XHRkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0LFxuXHRcdFx0XHRcdGRhdGFGaWVsZC5OYXZpZ2F0aW9uQXZhaWxhYmxlLFxuXHRcdFx0XHRcdGZvckNvbnRleHRNZW51XG5cdFx0XHQgICk7XG5cdGNvbnN0IGlkID0gZm9yQ29udGV4dE1lbnVcblx0XHQ/IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIG1lbnVJdGVtQWN0aW9uLmtleSwgYWN0aW9uLmtleSwgZGF0YUZpZWxkLCBcIk1lbnVJdGVtSW50ZW50QmFzZWROYXZpZ2F0aW9uXCIsIFwiQ29udGV4dE1lbnVcIl0pXG5cdFx0OiBnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBtZW51SXRlbUFjdGlvbi5rZXksIGFjdGlvbi5rZXksIGRhdGFGaWVsZCwgXCJNZW51SXRlbUludGVudEJhc2VkTmF2aWdhdGlvblwiXSk7XG5cdHJldHVybiAoXG5cdFx0PE1lbnVJdGVtXG5cdFx0XHR0ZXh0PXtkYXRhRmllbGQuTGFiZWx9XG5cdFx0XHRpZD17aWR9XG5cdFx0XHRwcmVzcz17cHJlc3NIYW5kbGVyfVxuXHRcdFx0anN4OmNvbW1hbmQ9e3ByZXNzQ29tbWFuZH1cblx0XHRcdGVuYWJsZWQ9e2VuYWJsZWR9XG5cdFx0XHR2aXNpYmxlPXttZW51SXRlbUFjdGlvbi52aXNpYmxlfVxuXHRcdD5cblx0XHRcdHt7XG5cdFx0XHRcdGN1c3RvbURhdGE6IFtcblx0XHRcdFx0XHQhZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dFxuXHRcdFx0XHRcdFx0PyBjcmVhdGVDdXN0b21EYXRhKFwiSUJORGF0YVwiLCB7IHNlbWFudGljT2JqZWN0OiBkYXRhRmllbGQuU2VtYW50aWNPYmplY3QsIGFjdGlvbjogZGF0YUZpZWxkLkFjdGlvbiB9KVxuXHRcdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0Y3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIGlkKVxuXHRcdFx0XHRdXG5cdFx0XHR9fVxuXHRcdDwvTWVudUl0ZW0+XG5cdCk7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSB4bWwgc3RyaW5nIGZvciB0aGUgTWVudUl0ZW0gYmFzZWQgb24gdGhlIHR5cGUgb2YgdGhlIG1lbnVJdGVtQWN0aW9uLlxuICogQHBhcmFtIGFjdGlvbiBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uXG4gKiBAcGFyYW0gbWVudUl0ZW1BY3Rpb24gVGhlIG1lbnVJdGVtQWN0aW9uIHRvIGJlIGV2YWx1YXRlZFxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcbiAqIEBwYXJhbSBjb2xsZWN0aW9uQ29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgY29sbGVjdGlvblxuICogQHBhcmFtIHBhcmFtZXRlcnNcbiAqIEByZXR1cm5zIFRoZSB4bWwgc3RyaW5nIGZvciB0aGUgTWVudUl0ZW1cbiAqL1xuZnVuY3Rpb24gZ2V0TWVudUl0ZW0oXG5cdGFjdGlvbjogQmFzZUFjdGlvbiB8IEFubm90YXRpb25BY3Rpb24gfCBDdXN0b21BY3Rpb24sXG5cdG1lbnVJdGVtQWN0aW9uOiBCYXNlQWN0aW9uLFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuLFxuXHRjb2xsZWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVyc1xuKTogTWVudUl0ZW0gfCB1bmRlZmluZWQge1xuXHRjb25zdCBkYXRhRmllbGQgPSBtZW51SXRlbUFjdGlvbi5hbm5vdGF0aW9uUGF0aFxuXHRcdD8gKHBhcmFtZXRlcnMuY29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGgobWVudUl0ZW1BY3Rpb24uYW5ub3RhdGlvblBhdGgpLnRhcmdldCBhcyBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKVxuXHRcdDogdW5kZWZpbmVkO1xuXG5cdHN3aXRjaCAoZGF0YUZpZWxkICYmIG1lbnVJdGVtQWN0aW9uLnR5cGUpIHtcblx0XHRjYXNlIFwiRm9yQWN0aW9uXCI6XG5cdFx0XHRpZiAoaXNEYXRhRmllbGRGb3JBY3Rpb24oZGF0YUZpZWxkKSkge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0IWZvckNvbnRleHRNZW51IHx8XG5cdFx0XHRcdFx0KGZvckNvbnRleHRNZW51ICYmIFRhYmxlSGVscGVyLmlzQWN0aW9uU2hvd25JbkNvbnRleHRNZW51KG1lbnVJdGVtQWN0aW9uLCB0YWJsZS5jb250ZXh0T2JqZWN0UGF0aCkpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiBnZXRNZW51SXRlbUZvckFjdGlvbihkYXRhRmllbGQsIGFjdGlvbiwgbWVudUl0ZW1BY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSwgY29sbGVjdGlvbkNvbnRleHQsIHBhcmFtZXRlcnMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiRm9yTmF2aWdhdGlvblwiOlxuXHRcdFx0aWYgKFxuXHRcdFx0XHRpc0RhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbihkYXRhRmllbGQhKSAmJlxuXHRcdFx0XHQoIWZvckNvbnRleHRNZW51IHx8IChmb3JDb250ZXh0TWVudSAmJiBUYWJsZUhlbHBlci5pc0FjdGlvblNob3duSW5Db250ZXh0TWVudShtZW51SXRlbUFjdGlvbiwgdGFibGUuY29udGV4dE9iamVjdFBhdGgpKSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gZ2V0TWVudUl0ZW1Gb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24oXG5cdFx0XHRcdFx0ZGF0YUZpZWxkLFxuXHRcdFx0XHRcdG1lbnVJdGVtQWN0aW9uLFxuXHRcdFx0XHRcdHRhYmxlLFxuXHRcdFx0XHRcdGZvckNvbnRleHRNZW51LFxuXHRcdFx0XHRcdGNvbGxlY3Rpb25Db250ZXh0LFxuXHRcdFx0XHRcdGFjdGlvbixcblx0XHRcdFx0XHRwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlclxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0fVxuXG5cdGNvbnN0IGNvbW1hbmQgPSAhZm9yQ29udGV4dE1lbnUgPyBtZW51SXRlbUFjdGlvbi5jb21tYW5kIDogbWVudUl0ZW1BY3Rpb24uY29tbWFuZCArIFwiOjpDb250ZXh0TWVudVwiO1xuXHRjb25zdCBwcmVzc0hhbmRsZXIgPSBtZW51SXRlbUFjdGlvbi5jb21tYW5kXG5cdFx0PyB1bmRlZmluZWRcblx0XHQ6IHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldE1hbmlmZXN0QWN0aW9uUHJlc3NIYW5kbGVyKG1lbnVJdGVtQWN0aW9uIGFzIEN1c3RvbUFjdGlvbiwgZm9yQ29udGV4dE1lbnUpO1xuXHRjb25zdCBwcmVzc0NvbW1hbmQgPSBtZW51SXRlbUFjdGlvbi5jb21tYW5kID8gYGNtZDoke2NvbW1hbmR9fHByZXNzYCA6IHVuZGVmaW5lZDtcblx0bGV0IGVuYWJsZWQgPSAhZm9yQ29udGV4dE1lbnUgPyBtZW51SXRlbUFjdGlvbi5lbmFibGVkIDogKG1lbnVJdGVtQWN0aW9uIGFzIEN1c3RvbUFjdGlvbikuZW5hYmxlZEZvckNvbnRleHRNZW51O1xuXHRpZiAoXG5cdFx0KG1lbnVJdGVtQWN0aW9uIGFzIEN1c3RvbUFjdGlvbikucmVxdWlyZXNTZWxlY3Rpb24gJiZcblx0XHR0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC5hbmFseXRpY2FsQ29uZmlndXJhdGlvbj8uYWdncmVnYXRpb25PbkxlYWZMZXZlbFxuXHQpIHtcblx0XHRlbmFibGVkID0gY29tcGlsZUV4cHJlc3Npb24oYW5kKHJlc29sdmVCaW5kaW5nU3RyaW5nKGVuYWJsZWQgPz8gXCJcIiksIFVJLmlzTm9kZUxldmVsTmF2aWdhYmxlKSk7XG5cdH1cblx0Y29uc3QgY29udGV4dE1lbnVUZXh0ID0gZm9yQ29udGV4dE1lbnUgPyBcIkNvbnRleHRNZW51XCIgOiBcIkFjdGlvbk1lbnVcIjtcblx0Y29uc3QgaXRlbUlkID0gZ2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgbWVudUl0ZW1BY3Rpb24ua2V5LCBjb250ZXh0TWVudVRleHQsIGFjdGlvbi5rZXksIGRhdGFGaWVsZCwgXCJNZW51SXRlbVwiXSk7XG5cdHJldHVybiAoXG5cdFx0PE1lbnVJdGVtXG5cdFx0XHRjb3JlOnJlcXVpcmU9XCJ7RlBNOiAnc2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXInfVwiXG5cdFx0XHR0ZXh0PXttZW51SXRlbUFjdGlvbj8udGV4dH1cblx0XHRcdGlkPXtpdGVtSWR9XG5cdFx0XHRwcmVzcz17cHJlc3NIYW5kbGVyfVxuXHRcdFx0anN4OmNvbW1hbmQ9e3ByZXNzQ29tbWFuZH1cblx0XHRcdHZpc2libGU9e21lbnVJdGVtQWN0aW9uLnZpc2libGV9XG5cdFx0XHRlbmFibGVkPXtlbmFibGVkfVxuXHRcdD5cblx0XHRcdHt7XG5cdFx0XHRcdGN1c3RvbURhdGE6IFtjcmVhdGVDdXN0b21EYXRhKFwiYWN0aW9uSWRcIiwgaXRlbUlkKV1cblx0XHRcdH19XG5cdFx0PC9NZW51SXRlbT5cblx0KTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNvbnRyb2wgZm9yIHRoZSBEYXRhRmllbGRGb3JBY3Rpb25CdXR0b24uXG4gKiBAcGFyYW0gZGF0YUZpZWxkIERhdGFGaWVsZCBmb3IgYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb25cbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG4gKiBAcGFyYW0gY29sbGVjdGlvbkNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSBwYXJhbWV0ZXJzXG4gKiBAcmV0dXJucyBUaGUgY29udHJvbCBmb3IgdGhlIERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvblxuICovXG5mdW5jdGlvbiBnZXREYXRhRmllbGRCdXR0b25Gb3JBY3Rpb24oXG5cdGRhdGFGaWVsZDogRGF0YUZpZWxkRm9yQWN0aW9uLFxuXHRhY3Rpb246IEJhc2VBY3Rpb24gfCBBbm5vdGF0aW9uQWN0aW9uIHwgQ3VzdG9tQWN0aW9uLFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuLFxuXHRjb2xsZWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVyc1xuKTogQnV0dG9uIHwgTWVudUl0ZW0ge1xuXHRjb25zdCBkYXRhRmllbGRBY3Rpb25Db250ZXh0ID0gcGFyYW1ldGVycy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uLmFubm90YXRpb25QYXRoICsgXCIvQWN0aW9uXCIpITtcblx0Y29uc3QgYWN0aW9uQ29udGV4dFBhdGggPSBDb21tb25IZWxwZXIuZ2V0QWN0aW9uQ29udGV4dChkYXRhRmllbGRBY3Rpb25Db250ZXh0KTtcblx0Y29uc3QgYWN0aW9uQ29udGV4dCA9IHBhcmFtZXRlcnMubWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGFjdGlvbkNvbnRleHRQYXRoKSE7XG5cdGNvbnN0IGRhdGFGaWVsZERhdGFNb2RlbE9iamVjdFBhdGggPSBhY3Rpb25Db250ZXh0XG5cdFx0PyBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPEFjdGlvbj4oYWN0aW9uQ29udGV4dCwgY29sbGVjdGlvbkNvbnRleHQpXG5cdFx0OiB1bmRlZmluZWQ7XG5cdGNvbnN0IGlzQm91bmQgPSBkYXRhRmllbGQuQWN0aW9uVGFyZ2V0Py5pc0JvdW5kO1xuXHRjb25zdCBjb21tYW5kID0gIWZvckNvbnRleHRNZW51ID8gYWN0aW9uLmNvbW1hbmQgOiBhY3Rpb24uY29tbWFuZCArIFwiOjpDb250ZXh0TWVudVwiO1xuXHRjb25zdCBwcmVzc0hhbmRsZXIgPSBhY3Rpb24uY29tbWFuZFxuXHRcdD8gdW5kZWZpbmVkXG5cdFx0OiBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXREYXRhRmllbGRGb3JBY3Rpb25CdXR0b25QcmVzc0hhbmRsZXIoZGF0YUZpZWxkLCBhY3Rpb24sIHVuZGVmaW5lZCwgZm9yQ29udGV4dE1lbnUpO1xuXHRjb25zdCBwcmVzc0NvbW1hbmQgPSBhY3Rpb24uY29tbWFuZCA/IGBjbWQ6JHtjb21tYW5kfXxwcmVzc2AgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IGVuYWJsZWQgPVxuXHRcdGFjdGlvbi5lbmFibGVkICE9PSB1bmRlZmluZWRcblx0XHRcdD8gYWN0aW9uLmVuYWJsZWRcblx0XHRcdDogVGFibGVIZWxwZXIuaXNEYXRhRmllbGRGb3JBY3Rpb25FbmFibGVkKFxuXHRcdFx0XHRcdHRhYmxlLnRhYmxlRGVmaW5pdGlvbixcblx0XHRcdFx0XHRkYXRhRmllbGQuQWN0aW9uLFxuXHRcdFx0XHRcdCEhaXNCb3VuZCxcblx0XHRcdFx0XHRhY3Rpb25Db250ZXh0LmdldE9iamVjdCgpLFxuXHRcdFx0XHRcdGFjdGlvbi5lbmFibGVPblNlbGVjdCxcblx0XHRcdFx0XHRkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRFbnRpdHlUeXBlLFxuXHRcdFx0XHRcdGZvckNvbnRleHRNZW51XG5cdFx0XHQgICk7XG5cdGNvbnN0IGljb24gPSBhY3Rpb24uaXNBSU9wZXJhdGlvbiA9PT0gdHJ1ZSA/IGFpSWNvbiA6IHVuZGVmaW5lZDtcblx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdC8vIGZvciB0YWJsZSB0b29sYmFyXG5cdFx0Y29uc3QgdG9vbGJhckFjdGlvbklkID0gZ2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgZGF0YUZpZWxkXSk7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxCdXR0b25cblx0XHRcdFx0aWQ9e3Rvb2xiYXJBY3Rpb25JZH1cblx0XHRcdFx0dGV4dD17ZGF0YUZpZWxkLkxhYmVsfVxuXHRcdFx0XHRpY29uPXtpY29ufVxuXHRcdFx0XHRhcmlhSGFzUG9wdXA9e2lzQWN0aW9uV2l0aERpYWxvZyhkYXRhRmllbGQpfVxuXHRcdFx0XHRwcmVzcz17cHJlc3NIYW5kbGVyfVxuXHRcdFx0XHRqc3g6Y29tbWFuZD17cHJlc3NDb21tYW5kfVxuXHRcdFx0XHR0eXBlPXtCdXR0b25UeXBlLlRyYW5zcGFyZW50fVxuXHRcdFx0XHRlbmFibGVkPXtlbmFibGVkfVxuXHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZX1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjdXN0b21EYXRhOiBbY3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIHRvb2xiYXJBY3Rpb25JZCldLFxuXHRcdFx0XHRcdGxheW91dERhdGE6IDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PXthY3Rpb24ucHJpb3JpdHl9IGdyb3VwPXthY3Rpb24uZ3JvdXB9PjwvT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YT5cblx0XHRcdFx0fX1cblx0XHRcdDwvQnV0dG9uPlxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gZm9yIGNvbnRleHQgbWVudVxuXHRcdGNvbnN0IHRhYmxlQWN0aW9uQ29udGV4dE1lbnVJZCA9IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGRhdGFGaWVsZCwgXCJDb250ZXh0TWVudVwiXSk7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRpZD17dGFibGVBY3Rpb25Db250ZXh0TWVudUlkfVxuXHRcdFx0XHR0ZXh0PXtkYXRhRmllbGQuTGFiZWx9XG5cdFx0XHRcdGljb249e2ljb259XG5cdFx0XHRcdHByZXNzPXtwcmVzc0hhbmRsZXJ9XG5cdFx0XHRcdGpzeDpjb21tYW5kPXtwcmVzc0NvbW1hbmR9XG5cdFx0XHRcdGVuYWJsZWQ9e2VuYWJsZWR9XG5cdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlRm9yQ29udGV4dE1lbnV9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogW2NyZWF0ZUN1c3RvbURhdGEoXCJhY3Rpb25JZFwiLCB0YWJsZUFjdGlvbkNvbnRleHRNZW51SWQpXVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9NZW51SXRlbT5cblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBjb250cm9sIGZvciB0aGUgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIEJ1dHRvbi5cbiAqIEBwYXJhbSBkYXRhRmllbGQgRGF0YUZpZWxkIGZvciBJbnRlbnRCYXNlZE5hdmlnYXRpb25cbiAqIEBwYXJhbSBhY3Rpb24gVGhlIG5hbWUgb2YgdGhlIGFjdGlvblxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcbiAqIEBwYXJhbSBjb2xsZWN0aW9uQ29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgY29sbGVjdGlvblxuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlclxuICogQHJldHVybnMgVGhlIGNvbnRyb2wgZm9yIHRoZSBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gYnV0dG9uL21lbnUgaXRlbVxuICovXG5mdW5jdGlvbiBnZXREYXRhRmllbGRCdXR0b25Gb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24oXG5cdGRhdGFGaWVsZDogRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRhY3Rpb246IEJhc2VBY3Rpb24gfCBBbm5vdGF0aW9uQWN0aW9uIHwgQ3VzdG9tQWN0aW9uLFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuLFxuXHRjb2xsZWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0aGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyXG4pOiBCdXR0b24gfCBNZW51SXRlbSB7XG5cdGNvbnN0IGNvbW1hbmQgPSAhZm9yQ29udGV4dE1lbnUgPyBhY3Rpb24uY29tbWFuZCA6IGFjdGlvbi5jb21tYW5kICsgXCI6OkNvbnRleHRNZW51XCI7XG5cdGNvbnN0IHByZXNzSGFuZGxlciA9IGFjdGlvbi5jb21tYW5kID8gdW5kZWZpbmVkIDogaGFuZGxlclByb3ZpZGVyLmdldERhdGFGaWVsZEZvcklCTlByZXNzSGFuZGxlcihhY3Rpb24sIGZvckNvbnRleHRNZW51KTtcblx0Y29uc3QgcHJlc3NDb21tYW5kID0gYWN0aW9uLmNvbW1hbmQgPyBgY21kOiR7Y29tbWFuZH18cHJlc3NgIDogdW5kZWZpbmVkO1xuXHRjb25zdCBlbmFibGVkID1cblx0XHRhY3Rpb24uZW5hYmxlZCAhPT0gdW5kZWZpbmVkXG5cdFx0XHQ/IGFjdGlvbi5lbmFibGVkXG5cdFx0XHQ6IFRhYmxlSGVscGVyLmlzRGF0YUZpZWxkRm9ySUJORW5hYmxlZChcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRjb2xsZWN0aW9uOiBjb2xsZWN0aW9uQ29udGV4dCxcblx0XHRcdFx0XHRcdHRhYmxlRGVmaW5pdGlvbjogdGFibGUudGFibGVEZWZpbml0aW9uXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRkYXRhRmllbGQsXG5cdFx0XHRcdFx0ZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dCxcblx0XHRcdFx0XHRkYXRhRmllbGQuTmF2aWdhdGlvbkF2YWlsYWJsZSxcblx0XHRcdFx0XHRmb3JDb250ZXh0TWVudVxuXHRcdFx0ICApO1xuXHRjb25zdCBJQk5EYXRhID0gIWRhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHQgPyB7IHNlbWFudGljT2JqZWN0OiBkYXRhRmllbGQuU2VtYW50aWNPYmplY3QsIGFjdGlvbjogZGF0YUZpZWxkLkFjdGlvbiB9IDogdW5kZWZpbmVkO1xuXHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0Ly8gZm9yIHRhYmxlIHRvb2xiYXJcblx0XHRjb25zdCB0b29sYmFyQWN0aW9uSWQgPSBnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBkYXRhRmllbGRdKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRpZD17dG9vbGJhckFjdGlvbklkfVxuXHRcdFx0XHR0ZXh0PXtkYXRhRmllbGQuTGFiZWx9XG5cdFx0XHRcdHByZXNzPXtwcmVzc0hhbmRsZXJ9XG5cdFx0XHRcdGpzeDpjb21tYW5kPXtwcmVzc0NvbW1hbmR9XG5cdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuVHJhbnNwYXJlbnR9XG5cdFx0XHRcdGVuYWJsZWQ9e2VuYWJsZWR9XG5cdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGN1c3RvbURhdGE6IFtjcmVhdGVDdXN0b21EYXRhKFwiSUJORGF0YVwiLCBJQk5EYXRhKSwgY3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIHRvb2xiYXJBY3Rpb25JZCldXG5cdFx0XHRcdH19XG5cdFx0XHQ8L0J1dHRvbj5cblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIGZvciBjb250ZXh0IG1lbnVcblx0XHRjb25zdCB0YWJsZUFjdGlvbkNvbnRleHRNZW51SWQgPSBnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBkYXRhRmllbGQsIFwiQ29udGV4dE1lbnVcIl0pO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0aWQ9e3RhYmxlQWN0aW9uQ29udGV4dE1lbnVJZH1cblx0XHRcdFx0dGV4dD17ZGF0YUZpZWxkLkxhYmVsfVxuXHRcdFx0XHRwcmVzcz17cHJlc3NIYW5kbGVyfVxuXHRcdFx0XHRqc3g6Y29tbWFuZD17cHJlc3NDb21tYW5kfVxuXHRcdFx0XHRlbmFibGVkPXtlbmFibGVkfVxuXHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZUZvckNvbnRleHRNZW51fVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGN1c3RvbURhdGE6IFtjcmVhdGVDdXN0b21EYXRhKFwiSUJORGF0YVwiLCBJQk5EYXRhKSwgY3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIHRhYmxlQWN0aW9uQ29udGV4dE1lbnVJZCldXG5cdFx0XHRcdH19XG5cdFx0XHQ8L01lbnVJdGVtPlxuXHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNvbnRyb2wgZm9yIHRoZSBidXR0b24gYmFzZWQgb24gdGhlIHR5cGUgb2YgdGhlIGFjdGlvbi5cbiAqIEBwYXJhbSBhY3Rpb24gVGhlIG5hbWUgb2YgdGhlIGFjdGlvblxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcbiAqIEBwYXJhbSBjb2xsZWN0aW9uQ29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgY29sbGVjdGlvblxuICogQHBhcmFtIHBhcmFtZXRlcnNcbiAqIEByZXR1cm5zIFRoZSBjb250cm9sIGZvciB0aGUgYnV0dG9uL21lbnUgaXRlbVxuICovXG5mdW5jdGlvbiBnZXREYXRhRmllbGRCdXR0b24oXG5cdGFjdGlvbjogQmFzZUFjdGlvbiB8IEFubm90YXRpb25BY3Rpb24gfCBDdXN0b21BY3Rpb24sXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdGNvbGxlY3Rpb25Db250ZXh0OiBDb250ZXh0LFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzXG4pOiBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgTWVudUl0ZW0gfCB1bmRlZmluZWQge1xuXHRjb25zdCBkYXRhRmllbGQgPSBhY3Rpb24uYW5ub3RhdGlvblBhdGhcblx0XHQ/IChwYXJhbWV0ZXJzLmNvbnZlcnRlZE1ldGFkYXRhLnJlc29sdmVQYXRoKGFjdGlvbi5hbm5vdGF0aW9uUGF0aCkudGFyZ2V0IGFzIERhdGFGaWVsZEFic3RyYWN0VHlwZXMpXG5cdFx0OiB1bmRlZmluZWQ7XG5cdGxldCB0ZW1wbGF0ZTogTWVudUl0ZW0gfCBCdXR0b24gfCB1bmRlZmluZWQ7XG5cdGlmICghZGF0YUZpZWxkKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG5cdFx0Y2FzZSBcIkZvckFjdGlvblwiOlxuXHRcdFx0aWYgKGlzRGF0YUZpZWxkRm9yQWN0aW9uKGRhdGFGaWVsZCkpIHtcblx0XHRcdFx0Y29uc3QgaXNCb3VuZCA9IGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQ/LmlzQm91bmQ7XG5cdFx0XHRcdGlmICghIWlzQm91bmQgJiYgdGFibGUudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuYW5hbHl0aWNhbENvbmZpZ3VyYXRpb24/LmFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwpIHtcblx0XHRcdFx0XHRhY3Rpb24gPSBkZWVwQ2xvbmUoYWN0aW9uKTtcblx0XHRcdFx0XHRhY3Rpb24uZW5hYmxlZCA9IGNvbXBpbGVFeHByZXNzaW9uKGFuZChyZXNvbHZlQmluZGluZ1N0cmluZyhhY3Rpb24uZW5hYmxlZCA/PyBcIlwiKSwgVUkuaXNOb2RlTGV2ZWxOYXZpZ2FibGUpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBpc09wZXJhdGlvbkF2YWlsYWJsZSA9IGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQ/LmFubm90YXRpb25zPy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGU/LnZhbHVlT2YoKSAhPT0gZmFsc2U7XG5cdFx0XHRcdC8vIHNob3cgb25seSBib3VuZCBhY3Rpb25zIGluIGNvbnRleHQgbWVudVxuXHRcdFx0XHRpZiAoIWZvckNvbnRleHRNZW51IHx8IFRhYmxlSGVscGVyLmlzQWN0aW9uU2hvd25JbkNvbnRleHRNZW51KGFjdGlvbiwgdGFibGUuY29udGV4dE9iamVjdFBhdGgpKSB7XG5cdFx0XHRcdFx0aWYgKGlzQm91bmQgIT09IHRydWUgfHwgaXNPcGVyYXRpb25BdmFpbGFibGUpIHtcblx0XHRcdFx0XHRcdHRlbXBsYXRlID0gZ2V0RGF0YUZpZWxkQnV0dG9uRm9yQWN0aW9uKGRhdGFGaWVsZCwgYWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUsIGNvbGxlY3Rpb25Db250ZXh0LCBwYXJhbWV0ZXJzKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJGb3JOYXZpZ2F0aW9uXCI6XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGlzRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKGRhdGFGaWVsZCkgJiZcblx0XHRcdFx0KCFmb3JDb250ZXh0TWVudSB8fCBUYWJsZUhlbHBlci5pc0FjdGlvblNob3duSW5Db250ZXh0TWVudShhY3Rpb24sIHRhYmxlLmNvbnRleHRPYmplY3RQYXRoKSlcblx0XHRcdCkge1xuXHRcdFx0XHR0ZW1wbGF0ZSA9IGdldERhdGFGaWVsZEJ1dHRvbkZvckludGVudEJhc2VkTmF2aWdhdGlvbihcblx0XHRcdFx0XHRkYXRhRmllbGQsXG5cdFx0XHRcdFx0YWN0aW9uLFxuXHRcdFx0XHRcdHRhYmxlLFxuXHRcdFx0XHRcdGZvckNvbnRleHRNZW51LFxuXHRcdFx0XHRcdGNvbGxlY3Rpb25Db250ZXh0LFxuXHRcdFx0XHRcdHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHR9XG5cblx0aWYgKHRlbXBsYXRlID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdC8vIGZvciB0YWJsZSB0b29sYmFyXG5cdFx0cmV0dXJuIChcblx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24uaWQsIGRhdGFGaWVsZCwgXCJBY3Rpb25Ub29sYmFyQWN0aW9uXCJdKX1cblx0XHRcdFx0ZHQ6ZGVzaWdudGltZT17YWN0aW9uLnZpc2libGUgPT09IFwidHJ1ZVwiIHx8IGFjdGlvbi52aXNpYmxlID09PSBcImZhbHNlXCIgPyB1bmRlZmluZWQgOiBcIm5vdC1hZGFwdGFibGUtdmlzaWJpbGl0eVwifVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGFjdGlvbjogdGVtcGxhdGVcblx0XHRcdFx0fX1cblx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIGZvciBjb250ZXh0IG1lbnVcblx0XHRyZXR1cm4gdGVtcGxhdGUgYXMgTWVudUl0ZW07XG5cdH1cbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBkZWZhdWx0IGFjdGlvbiBoYW5kbGVyIHRoYXQgaXMgaW52b2tlZCB3aGVuIGFkZGluZyB0aGUgbWVudSBidXR0b24uXG4gKiBAcGFyYW0gZGVmYXVsdEFjdGlvbiBUaGUgZGVmYXVsdCBhY3Rpb24gb2YgdGhlIG1lbnVcbiAqIEBwYXJhbSBkYXRhRmllbGRGb3JEZWZhdWx0QWN0aW9uIFRoZSBkYXRhRmllbGQgZm9yIHRoZSBkZWZhdWx0IGFjdGlvblxuICogQHBhcmFtIHBhcmFtZXRlcnNcbiAqIEByZXR1cm5zIFRoZSBjb3JyZXNwb25kaW5nIGV2ZW50IGhhbmRsZXIgb3IgY29tbWFuZFxuICovXG5mdW5jdGlvbiBnZXREZWZhdWx0TWVudUJ1dHRvbkFjdGlvbihcblx0ZGVmYXVsdEFjdGlvbjogQ3VzdG9tQWN0aW9uIHwgdW5kZWZpbmVkLFxuXHRkYXRhRmllbGRGb3JEZWZhdWx0QWN0aW9uOiBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gfCBEYXRhRmllbGRGb3JBY3Rpb24gfCB1bmRlZmluZWQsXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnNcbik6IHsgaGFuZGxlcj86IChlOiBVSTVFdmVudCkgPT4gdm9pZDsgY29tbWFuZD86IHN0cmluZyB9IHtcblx0aWYgKCFkZWZhdWx0QWN0aW9uKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cblx0dHJ5IHtcblx0XHRzd2l0Y2ggKGRlZmF1bHRBY3Rpb24udHlwZSkge1xuXHRcdFx0Y2FzZSBcIkZvckFjdGlvblwiOlxuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGhhbmRsZXI6IHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvblByZXNzSGFuZGxlcihcblx0XHRcdFx0XHRcdGRhdGFGaWVsZEZvckRlZmF1bHRBY3Rpb24gYXMgRGF0YUZpZWxkRm9yQWN0aW9uLFxuXHRcdFx0XHRcdFx0ZGVmYXVsdEFjdGlvbixcblx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdGZhbHNlXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9O1xuXG5cdFx0XHRjYXNlIFwiRm9yTmF2aWdhdGlvblwiOlxuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGhhbmRsZXI6IHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldERhdGFGaWVsZEZvcklCTlByZXNzSGFuZGxlcihkZWZhdWx0QWN0aW9uLCBmYWxzZSlcblx0XHRcdFx0fTtcblxuXHRcdFx0ZGVmYXVsdDoge1xuXHRcdFx0XHRpZiAoZGVmYXVsdEFjdGlvbi5jb21tYW5kKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdGNvbW1hbmQ6IGBjbWQ6JHtkZWZhdWx0QWN0aW9uLmNvbW1hbmR9fGRlZmF1bHRBY3Rpb25gXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0aGFuZGxlcjogcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0TWFuaWZlc3RBY3Rpb25QcmVzc0hhbmRsZXIoZGVmYXVsdEFjdGlvbiwgZmFsc2UpXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiB7fTtcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgY29udHJvbCBmb3IgdGhlIE1lbnVCdXR0b24gY29udHJvbCB3aGljaCBlbmFibGVzIHRoZSB1c2VyIHRvIHNob3cgYSBoaWVyYXJjaGljYWwgbWVudS5cbiAqIEBwYXJhbSBhY3Rpb24gVGhlIG5hbWUgb2YgdGhlIGFjdGlvblxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcbiAqIEBwYXJhbSBjb2xsZWN0aW9uQ29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgY29sbGVjdGlvblxuICogQHBhcmFtIHBhcmFtZXRlcnNcbiAqIEByZXR1cm5zIFRoZSBNZW51QnV0dG9uIGNvbnRyb2xcbiAqL1xuZnVuY3Rpb24gZ2V0TWVudUJ1dHRvbihcblx0YWN0aW9uOiBCYXNlQWN0aW9uIHwgQW5ub3RhdGlvbkFjdGlvbiB8IEN1c3RvbUFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0Y29sbGVjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnNcbik6IEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB8IHVuZGVmaW5lZCB7XG5cdGlmICgoYWN0aW9uIGFzIEN1c3RvbUFjdGlvbikucmVxdWlyZXNTZWxlY3Rpb24gJiYgdGFibGUudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuYW5hbHl0aWNhbENvbmZpZ3VyYXRpb24/LmFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwpIHtcblx0XHRhY3Rpb24gPSBkZWVwQ2xvbmUoYWN0aW9uKTtcblx0XHRhY3Rpb24uZW5hYmxlZCA9IGNvbXBpbGVFeHByZXNzaW9uKGFuZChyZXNvbHZlQmluZGluZ1N0cmluZyhhY3Rpb24uZW5hYmxlZCA/PyBcIlwiKSwgVUkuaXNOb2RlTGV2ZWxOYXZpZ2FibGUpKTtcblx0fVxuXHRjb25zdCBpY29uID0gYWN0aW9uLmlzQUlPcGVyYXRpb24gPT09IHRydWUgPyBhaUljb24gOiB1bmRlZmluZWQ7XG5cdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHQvLyBmb3IgdGFibGUgdG9vbGJhclxuXHRcdGNvbnN0IGRlZmF1bHRBY3Rpb24gPSAoYWN0aW9uIGFzIEN1c3RvbUFjdGlvbikuZGVmYXVsdEFjdGlvbiBhcyBDdXN0b21BY3Rpb24gfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZGF0YUZpZWxkRm9yRGVmYXVsdEFjdGlvbiA9IGRlZmF1bHRBY3Rpb24/LmFubm90YXRpb25QYXRoXG5cdFx0XHQ/IHBhcmFtZXRlcnMuY29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGg8RGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uPihkZWZhdWx0QWN0aW9uLmFubm90YXRpb25QYXRoKVxuXHRcdFx0XHRcdC50YXJnZXRcblx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGRlZmF1bHRBY3Rpb25IYW5kbGVycyA9IGdldERlZmF1bHRNZW51QnV0dG9uQWN0aW9uKGRlZmF1bHRBY3Rpb24sIGRhdGFGaWVsZEZvckRlZmF1bHRBY3Rpb24sIHBhcmFtZXRlcnMpO1xuXHRcdGNvbnN0IG1lbnVJdGVtcyA9IGFjdGlvbi5tZW51XG5cdFx0XHQ/LmZpbHRlcigobWVudUl0ZW1BY3Rpb24pID0+IHR5cGVvZiBtZW51SXRlbUFjdGlvbiAhPT0gXCJzdHJpbmdcIilcblx0XHRcdC5tYXAoKG1lbnVJdGVtQWN0aW9uKSA9PiB7XG5cdFx0XHRcdHJldHVybiBnZXRNZW51SXRlbShhY3Rpb24sIG1lbnVJdGVtQWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUsIGNvbGxlY3Rpb25Db250ZXh0LCBwYXJhbWV0ZXJzKTtcblx0XHRcdH0pXG5cdFx0XHQuZmlsdGVyKChpdGVtKSA9PiBpdGVtICE9PSB1bmRlZmluZWQpO1xuXG5cdFx0aWYgKG1lbnVJdGVtcz8ubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCBtZW51SWQgPSBnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24uaWRdKTtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uXG5cdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5pZCwgXCJBY3Rpb25Ub29sYmFyQWN0aW9uXCJdKX1cblx0XHRcdFx0XHRkdDpkZXNpZ250aW1lPXthY3Rpb24udmlzaWJsZSA9PT0gXCJ0cnVlXCIgfHwgYWN0aW9uLnZpc2libGUgPT09IFwiZmFsc2VcIiA/IHVuZGVmaW5lZCA6IFwibm90LWFkYXB0YWJsZS12aXNpYmlsaXR5XCJ9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8TWVudUJ1dHRvblxuXHRcdFx0XHRcdFx0dGV4dD17YWN0aW9uLnRleHR9XG5cdFx0XHRcdFx0XHR0eXBlPXtCdXR0b25UeXBlLlRyYW5zcGFyZW50fVxuXHRcdFx0XHRcdFx0bWVudVBvc2l0aW9uPXtQb3B1cC5Eb2NrLkJlZ2luQm90dG9tfVxuXHRcdFx0XHRcdFx0aWQ9e21lbnVJZH1cblx0XHRcdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlfVxuXHRcdFx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWR9XG5cdFx0XHRcdFx0XHR1c2VEZWZhdWx0QWN0aW9uT25seT17ISEoYWN0aW9uIGFzIEN1c3RvbUFuZEFjdGlvbikuZGVmYXVsdEFjdGlvbn1cblx0XHRcdFx0XHRcdGljb249e2ljb259XG5cdFx0XHRcdFx0XHRidXR0b25Nb2RlPXsoYWN0aW9uIGFzIEN1c3RvbUFuZEFjdGlvbikuZGVmYXVsdEFjdGlvbiA/IE1lbnVCdXR0b25Nb2RlLlNwbGl0IDogTWVudUJ1dHRvbk1vZGUuUmVndWxhcn1cblx0XHRcdFx0XHRcdGRlZmF1bHRBY3Rpb249e2RlZmF1bHRBY3Rpb25IYW5kbGVycy5oYW5kbGVyfVxuXHRcdFx0XHRcdFx0anN4OmNvbW1hbmQ9e2RlZmF1bHRBY3Rpb25IYW5kbGVycy5jb21tYW5kfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdGN1c3RvbURhdGE6IFtjcmVhdGVDdXN0b21EYXRhKFwiYWN0aW9uSWRcIiwgbWVudUlkKV0sXG5cdFx0XHRcdFx0XHRcdG1lbnU6IDxNZW51PnttZW51SXRlbXN9PC9NZW51Pixcblx0XHRcdFx0XHRcdFx0bGF5b3V0RGF0YTogKFxuXHRcdFx0XHRcdFx0XHRcdDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PXthY3Rpb24ucHJpb3JpdHl9IGdyb3VwPXthY3Rpb24uZ3JvdXB9PjwvT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YT5cblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHQ8L01lbnVCdXR0b24+XG5cdFx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIGZvciBjb250ZXh0IG1lbnVcblx0XHRjb25zdCBtZW51SXRlbXNGb3JDb250ZXh0TWVudTogQmFzZUFjdGlvbltdID0gW107XG5cdFx0YWN0aW9uLm1lbnU/LmZvckVhY2goKG1lbnVJdGVtQWN0aW9uKSA9PiB7XG5cdFx0XHRpZiAodHlwZW9mIG1lbnVJdGVtQWN0aW9uICE9PSBcInN0cmluZ1wiICYmIFRhYmxlSGVscGVyLmlzQWN0aW9uU2hvd25JbkNvbnRleHRNZW51KG1lbnVJdGVtQWN0aW9uLCB0YWJsZS5jb250ZXh0T2JqZWN0UGF0aCkpIHtcblx0XHRcdFx0bWVudUl0ZW1zRm9yQ29udGV4dE1lbnU/LnB1c2gobWVudUl0ZW1BY3Rpb24pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Y29uc3QgbWVudUl0ZW1zID0gbWVudUl0ZW1zRm9yQ29udGV4dE1lbnVcblx0XHRcdC5maWx0ZXIoKG1lbnVJdGVtQWN0aW9uKSA9PiB0eXBlb2YgbWVudUl0ZW1BY3Rpb24gIT09IFwic3RyaW5nXCIpXG5cdFx0XHQubWFwKChtZW51SXRlbUFjdGlvbikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZ2V0TWVudUl0ZW0oYWN0aW9uLCBtZW51SXRlbUFjdGlvbiwgdGFibGUsIGZvckNvbnRleHRNZW51LCBjb2xsZWN0aW9uQ29udGV4dCwgcGFyYW1ldGVycyk7XG5cdFx0XHR9KVxuXHRcdFx0LmZpbHRlcigoaXRlbSkgPT4gaXRlbSAhPT0gdW5kZWZpbmVkKTtcblxuXHRcdGlmIChtZW51SXRlbXM/Lmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdFx0dGV4dD17YWN0aW9uLnRleHR9XG5cdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5pZCwgXCJDb250ZXh0TWVudVwiXSl9XG5cdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGVGb3JDb250ZXh0TWVudX1cblx0XHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51fVxuXHRcdFx0XHRcdGljb249e2ljb259XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0aXRlbXM6IG1lbnVJdGVtc1xuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvTWVudUl0ZW0+XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgeG1sIHN0cmluZyBmb3IgdGhlIGRlZmF1bHQgYnV0dG9uLlxuICogQHBhcmFtIGFjdGlvbiBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlclxuICogQHJldHVybnMgVGhlIHhtbCBzdHJpbmcgZm9yIHRoZSBkZWZhdWx0IGJ1dHRvbi5cbiAqL1xuZnVuY3Rpb24gZ2V0RGVmYXVsdEJ1dHRvbihcblx0YWN0aW9uOiBDdXN0b21BY3Rpb24sXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclxuKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgY29tbWFuZCA9ICFmb3JDb250ZXh0TWVudSA/IGFjdGlvbi5jb21tYW5kIDogYWN0aW9uLmNvbW1hbmQgKyBcIjo6Q29udGV4dE1lbnVcIjtcblx0Y29uc3QgcHJlc3NIYW5kbGVyID0gYWN0aW9uLmNvbW1hbmQgPyB1bmRlZmluZWQgOiBoYW5kbGVyUHJvdmlkZXIuZ2V0TWFuaWZlc3RBY3Rpb25QcmVzc0hhbmRsZXIoYWN0aW9uLCBmb3JDb250ZXh0TWVudSk7XG5cdGNvbnN0IHByZXNzQ29tbWFuZCA9IGFjdGlvbi5jb21tYW5kID8gYGNtZDoke2NvbW1hbmR9fHByZXNzYCA6IHVuZGVmaW5lZDtcblxuXHRpZiAoYWN0aW9uLnJlcXVpcmVzU2VsZWN0aW9uICYmIHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmFuYWx5dGljYWxDb25maWd1cmF0aW9uPy5hZ2dyZWdhdGlvbk9uTGVhZkxldmVsKSB7XG5cdFx0YWN0aW9uID0gZGVlcENsb25lKGFjdGlvbik7XG5cdFx0YWN0aW9uLmVuYWJsZWQgPSBjb21waWxlRXhwcmVzc2lvbihhbmQocmVzb2x2ZUJpbmRpbmdTdHJpbmcoYWN0aW9uLmVuYWJsZWQgPz8gXCJcIiksIFVJLmlzTm9kZUxldmVsTmF2aWdhYmxlKSk7XG5cdFx0YWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0YW5kKHJlc29sdmVCaW5kaW5nU3RyaW5nKGFjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgPz8gXCJcIiksIFVJLmlzTm9kZUxldmVsTmF2aWdhYmxlKVxuXHRcdCk7XG5cdH1cblx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdC8vIGZvciB0YWJsZSB0b29sYmFyXG5cdFx0cmV0dXJuIChcblx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24uaWQsIFwiQWN0aW9uVG9vbGJhckFjdGlvblwiXSl9XG5cdFx0XHRcdGR0OmRlc2lnbnRpbWU9e2FjdGlvbi52aXNpYmxlID09PSBcInRydWVcIiB8fCBhY3Rpb24udmlzaWJsZSA9PT0gXCJmYWxzZVwiID8gdW5kZWZpbmVkIDogXCJub3QtYWRhcHRhYmxlLXZpc2liaWxpdHlcIn1cblx0XHRcdD5cblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGNvcmU6cmVxdWlyZT1cIntGUE06ICdzYXAvZmUvY29yZS9oZWxwZXJzL0ZQTUhlbHBlcid9XCJcblx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgYWN0aW9uLmlkXSl9XG5cdFx0XHRcdFx0dGV4dD17YWN0aW9uLnRleHR9XG5cdFx0XHRcdFx0cHJlc3M9e3ByZXNzSGFuZGxlcn1cblx0XHRcdFx0XHRqc3g6Y29tbWFuZD17cHJlc3NDb21tYW5kfVxuXHRcdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuVHJhbnNwYXJlbnR9XG5cdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGV9XG5cdFx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWR9XG5cdFx0XHRcdFx0aWNvbj17YWN0aW9uLmlzQUlPcGVyYXRpb24gPT09IHRydWUgPyBhaUljb24gOiB1bmRlZmluZWR9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0Y3VzdG9tRGF0YTogW2NyZWF0ZUN1c3RvbURhdGEoXCJhY3Rpb25JZFwiLCBnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24uaWRdKSldLFxuXHRcdFx0XHRcdFx0bGF5b3V0RGF0YTogPE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgcHJpb3JpdHk9e2FjdGlvbi5wcmlvcml0eX0gZ3JvdXA9e2FjdGlvbi5ncm91cH0+PC9PdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhPlxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdCk7XG5cdH0gZWxzZSBpZiAoVGFibGVIZWxwZXIuaXNBY3Rpb25TaG93bkluQ29udGV4dE1lbnUoYWN0aW9uLCB0YWJsZS5jb250ZXh0T2JqZWN0UGF0aCkpIHtcblx0XHRjb25zdCB0YWJsZUFjdGlvbkNvbnRleHRNZW51SWQgPSBnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24uaWQsIFwiQ29udGV4dE1lbnVcIl0pO1xuXHRcdC8vIGZvciBjb250ZXh0IG1lbnVcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdGNvcmU6cmVxdWlyZT1cIntGUE06ICdzYXAvZmUvY29yZS9oZWxwZXJzL0ZQTUhlbHBlcid9XCJcblx0XHRcdFx0aWQ9e3RhYmxlQWN0aW9uQ29udGV4dE1lbnVJZH1cblx0XHRcdFx0dGV4dD17YWN0aW9uLnRleHR9XG5cdFx0XHRcdHByZXNzPXtwcmVzc0hhbmRsZXJ9XG5cdFx0XHRcdGpzeDpjb21tYW5kPXtwcmVzc0NvbW1hbmR9XG5cdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlRm9yQ29udGV4dE1lbnV9XG5cdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnV9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogW2NyZWF0ZUN1c3RvbURhdGEoXCJhY3Rpb25JZFwiLCB0YWJsZUFjdGlvbkNvbnRleHRNZW51SWQpXVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9NZW51SXRlbT5cblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNvbnRyb2wgZm9yIGFuIGFjdGlvbiBidXR0b24vbWVudSBpdGVtIGJhc2VkIG9uIHRoZSB0eXBlIG9mIHRoZSBhY3Rpb24uXG4gKiBAcGFyYW0gYWN0aW9uIFRoZSBhY3Rpb24gdG8gZ2V0XG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIGNvbnRyb2wgb2YgdGhlIGFjdGlvblxuICovXG5mdW5jdGlvbiBnZXRBY3Rpb24oXG5cdGFjdGlvbjogQmFzZUFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0Y29sbGVjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnNcbik6IEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB8IHVuZGVmaW5lZCB7XG5cdHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcblx0XHRjYXNlIFwiRGVmYXVsdFwiOlxuXHRcdFx0aWYgKFwibm9XcmFwXCIgaW4gYWN0aW9uKSB7XG5cdFx0XHRcdHJldHVybiBnZXREZWZhdWx0QnV0dG9uKGFjdGlvbiBhcyBDdXN0b21BY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSwgcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIpO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIk1lbnVcIjpcblx0XHRcdHJldHVybiBnZXRNZW51QnV0dG9uKGFjdGlvbiwgdGFibGUsIGZvckNvbnRleHRNZW51LCBjb2xsZWN0aW9uQ29udGV4dCwgcGFyYW1ldGVycyk7XG5cdFx0ZGVmYXVsdDpcblx0fVxuXHRyZXR1cm4gZ2V0RGF0YUZpZWxkQnV0dG9uKGFjdGlvbiwgdGFibGUsIGZvckNvbnRleHRNZW51LCBjb2xsZWN0aW9uQ29udGV4dCwgcGFyYW1ldGVycyk7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBjb3B5IGFjdGlvbi5cbiAqIEBwYXJhbSBhY3Rpb24gVGhlIGNvcHkgYWN0aW9uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiBhY3Rpb24gaXMgZm9yIEFjdGlvbiBUb29sYmFyIG9mIENvbnRleHQgTWVudVxuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIGFjdGlvblxuICovXG5mdW5jdGlvbiBnZXRDb3B5QWN0aW9uKFxuXHRhY3Rpb246IEJhc2VBY3Rpb24sXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdGNvbGxlY3Rpb25Db250ZXh0OiBDb250ZXh0LFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzXG4pOiBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgTWVudUl0ZW0ge1xuXHRjb25zdCBkYXRhRmllbGQgPSBhY3Rpb24uYW5ub3RhdGlvblBhdGhcblx0XHQ/IChwYXJhbWV0ZXJzLmNvbnZlcnRlZE1ldGFkYXRhLnJlc29sdmVQYXRoKGFjdGlvbi5hbm5vdGF0aW9uUGF0aCkudGFyZ2V0IGFzIERhdGFGaWVsZEZvckFjdGlvbilcblx0XHQ6IHVuZGVmaW5lZDtcblx0Y29uc3QgYWN0aW9uQ29udGV4dFBhdGggPSBDb21tb25IZWxwZXIuZ2V0QWN0aW9uQ29udGV4dChwYXJhbWV0ZXJzLm1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChhY3Rpb24uYW5ub3RhdGlvblBhdGggKyBcIi9BY3Rpb25cIikhKTtcblx0Y29uc3Qgb3BlcmF0aW9uQXZhaWxhYmxlID0gZGF0YUZpZWxkPy5BY3Rpb25UYXJnZXQ/LmFubm90YXRpb25zPy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGUgIT09IHVuZGVmaW5lZDtcblx0Y29uc3QgYWN0aW9uQ29udGV4dCA9IHBhcmFtZXRlcnMubWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGFjdGlvbkNvbnRleHRQYXRoKSE7XG5cdGNvbnN0IGRhdGFGaWVsZERhdGFNb2RlbE9iamVjdFBhdGggPSBhY3Rpb25Db250ZXh0XG5cdFx0PyBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKGFjdGlvbkNvbnRleHQsIGNvbGxlY3Rpb25Db250ZXh0KVxuXHRcdDogdW5kZWZpbmVkO1xuXHRjb25zdCBpc0JvdW5kID0gZGF0YUZpZWxkPy5BY3Rpb25UYXJnZXQ/LmlzQm91bmQ7XG5cdGNvbnN0IHByZXNzID0gZGF0YUZpZWxkXG5cdFx0PyBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXREYXRhRmllbGRGb3JBY3Rpb25CdXR0b25QcmVzc0hhbmRsZXIoZGF0YUZpZWxkLCBhY3Rpb24sIHVuZGVmaW5lZCwgZm9yQ29udGV4dE1lbnUpXG5cdFx0OiB1bmRlZmluZWQ7XG5cblx0bGV0IGVuYWJsZWQ6IHN0cmluZyB8IGJvb2xlYW4gfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiA9IG9wZXJhdGlvbkF2YWlsYWJsZVxuXHRcdD8gVGFibGVIZWxwZXIuaXNEYXRhRmllbGRGb3JBY3Rpb25FbmFibGVkKFxuXHRcdFx0XHR0YWJsZS50YWJsZURlZmluaXRpb24sXG5cdFx0XHRcdGRhdGFGaWVsZC5BY3Rpb24sXG5cdFx0XHRcdCEhaXNCb3VuZCxcblx0XHRcdFx0YWN0aW9uQ29udGV4dC5nZXRPYmplY3QoKSxcblx0XHRcdFx0YWN0aW9uLmVuYWJsZU9uU2VsZWN0LFxuXHRcdFx0XHRkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRFbnRpdHlUeXBlLFxuXHRcdFx0XHRmb3JDb250ZXh0TWVudSxcblx0XHRcdFx0dHJ1ZVxuXHRcdCAgKVxuXHRcdDogYHs9ICR7QWN0aW9uSGVscGVyLmdldE51bWJlck9mQ29udGV4dHNFeHByZXNzaW9uKFwic2luZ2xlXCIsIGZvckNvbnRleHRNZW51KX19YDtcblx0aWYgKHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmFuYWx5dGljYWxDb25maWd1cmF0aW9uPy5hZ2dyZWdhdGlvbk9uTGVhZkxldmVsKSB7XG5cdFx0ZW5hYmxlZCA9IGNvbXBpbGVFeHByZXNzaW9uKGFuZChyZXNvbHZlQmluZGluZ1N0cmluZyhlbmFibGVkKSwgVUkuaXNOb2RlTGV2ZWxOYXZpZ2FibGUpKTtcblx0fVxuXG5cdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHQvLyBmb3IgdGFibGUgdG9vbGJhclxuXHRcdHJldHVybiAoXG5cdFx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvblxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgZGF0YUZpZWxkLCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHRkdDpkZXNpZ250aW1lPXthY3Rpb24udmlzaWJsZSA9PT0gXCJ0cnVlXCIgfHwgYWN0aW9uLnZpc2libGUgPT09IFwiZmFsc2VcIiA/IHVuZGVmaW5lZCA6IFwibm90LWFkYXB0YWJsZS12aXNpYmlsaXR5XCJ9XG5cdFx0XHQ+XG5cdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgZGF0YUZpZWxkXSl9XG5cdFx0XHRcdFx0dGV4dD17YWN0aW9uLnRleHR9XG5cdFx0XHRcdFx0cHJlc3M9e3ByZXNzfVxuXHRcdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuVHJhbnNwYXJlbnR9XG5cdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGV9XG5cdFx0XHRcdFx0ZW5hYmxlZD17ZW5hYmxlZH1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRjdXN0b21EYXRhOiBbY3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGRhdGFGaWVsZF0pKV0sXG5cdFx0XHRcdFx0XHRsYXlvdXREYXRhOiA8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSBwcmlvcml0eT17YWN0aW9uLnByaW9yaXR5fSBncm91cD17YWN0aW9uLmdyb3VwfT48L092ZXJmbG93VG9vbGJhckxheW91dERhdGE+XG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHQvLyBmb3IgY29udGV4dCBtZW51XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgZGF0YUZpZWxkLCBcIkNvbnRleHRNZW51XCJdKX1cblx0XHRcdFx0dGV4dD17YWN0aW9uLnRleHR9XG5cdFx0XHRcdHByZXNzPXtwcmVzc31cblx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGVGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdGVuYWJsZWQ9e2NvbXBpbGVFeHByZXNzaW9uKGVxdWFsKHBhdGhJbk1vZGVsKFwiY29udGV4dG1lbnUvbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIsIFwiaW50ZXJuYWxcIiksIDEpKSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogW2NyZWF0ZUN1c3RvbURhdGEoXCJhY3Rpb25JZFwiLCBnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBkYXRhRmllbGQsIFwiQ29udGV4dE1lbnVcIl0pKV1cblx0XHRcdFx0fX1cblx0XHRcdDwvTWVudUl0ZW0+XG5cdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgeG1sIHN0cmluZyBmb3IgdGhlIGNyZWF0ZSBidXR0b24uXG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb24gU3RhbmRhcmQgYWN0aW9ucyB0byBiZSBldmFsdWF0ZWRcbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIHNldCB0byBgZmFsc2VgLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXIuXG4gKiBAcGFyYW0gY29sbGVjdGlvbkVudGl0eSBUaGUgZW50aXR5IHNldCBvZiB0aGUgY29sbGVjdGlvblxuICogQHJldHVybnMgVGhlIHhtbCBzdHJpbmcgZm9yIHRoZSBjcmVhdGUgYnV0dG9uXG4gKi9cbmZ1bmN0aW9uIGdldENyZWF0ZUJ1dHRvbihcblx0c3RhbmRhcmRBY3Rpb246IFN0YW5kYXJkQWN0aW9uLFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuLFxuXHRjb2xsZWN0aW9uRW50aXR5OiBFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHlcbik6IEFjdGlvbnNQbGFjZWhvbGRlciB8IEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB7XG5cdGNvbnN0IHN1ZmZpeFJlc291cmNlS2V5ID0gY29sbGVjdGlvbkVudGl0eS5uYW1lO1xuXHRjb25zdCBidXR0b25UZXh0ID0gdGFibGUuZ2V0VHJhbnNsYXRlZFRleHQoXCJNX0NPTU1PTl9UQUJMRV9DUkVBVEVcIiwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSk7XG5cdGNvbnN0IGNyZWF0ZU91dGJvdW5kRGV0YWlsID0gKHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmNyZWF0ZSBhcyBDcmVhdGVCZWhhdmlvckV4dGVybmFsKS5vdXRib3VuZERldGFpbDtcblx0Y29uc3QgY3VzdG9tRGF0YSA9IGNyZWF0ZU91dGJvdW5kRGV0YWlsXG5cdFx0PyBjcmVhdGVDdXN0b21EYXRhKFwiSUJORGF0YVwiLCB7IHNlbWFudGljT2JqZWN0OiBjcmVhdGVPdXRib3VuZERldGFpbC5zZW1hbnRpY09iamVjdCwgYWN0aW9uOiBjcmVhdGVPdXRib3VuZERldGFpbC5hY3Rpb24gfSlcblx0XHQ6IHVuZGVmaW5lZDtcblxuXHRpZiAodGFibGUudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZW5hYmxlVXBsb2FkUGx1Z2luKSB7XG5cdFx0cmV0dXJuIDxBY3Rpb25zUGxhY2Vob2xkZXIgaWQ9e2Ake3RhYmxlLmNvbnRlbnRJZH0tdXBsb2FkQnV0dG9uYH0gcGxhY2Vob2xkZXJGb3I9XCJVcGxvYWRCdXR0b25QbGFjZWhvbGRlclwiIC8+O1xuXHR9IGVsc2UgaWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvblxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgc3RhbmRhcmRBY3Rpb24ua2V5LCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHRkdDpkZXNpZ250aW1lPVwibm90LWFkYXB0YWJsZS10cmVlXCJcblx0XHRcdD5cblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBzdGFuZGFyZEFjdGlvbi5rZXldKX1cblx0XHRcdFx0XHR0ZXh0PXtidXR0b25UZXh0fVxuXHRcdFx0XHRcdGpzeDpjb21tYW5kPVwiY21kOkNyZWF0ZXxwcmVzc1wiXG5cdFx0XHRcdFx0dHlwZT17QnV0dG9uVHlwZS5UcmFuc3BhcmVudH1cblx0XHRcdFx0XHR2aXNpYmxlPXtzdGFuZGFyZEFjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHRlbmFibGVkPXtzdGFuZGFyZEFjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRjdXN0b21EYXRhLFxuXHRcdFx0XHRcdFx0bGF5b3V0RGF0YTogKFxuXHRcdFx0XHRcdFx0XHQ8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YVxuXHRcdFx0XHRcdFx0XHRcdHByaW9yaXR5PXtzdGFuZGFyZEFjdGlvbi5wcmlvcml0eX1cblx0XHRcdFx0XHRcdFx0XHRncm91cD17c3RhbmRhcmRBY3Rpb24uZ3JvdXB9XG5cdFx0XHRcdFx0XHRcdD48L092ZXJmbG93VG9vbGJhckxheW91dERhdGE+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBzdGFuZGFyZEFjdGlvbi5rZXksIFwiQ29udGV4dE1lbnVcIl0pfVxuXHRcdFx0XHR0ZXh0PXtidXR0b25UZXh0fVxuXHRcdFx0XHRqc3g6Y29tbWFuZD1cImNtZDpDcmVhdGU6OkNvbnRleHRNZW51fHByZXNzXCJcblx0XHRcdFx0dmlzaWJsZT17c3RhbmRhcmRBY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdGVuYWJsZWQ9e3N0YW5kYXJkQWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0Q3JlYXRlTWVudShcblx0c3RhbmRhcmRBY3Rpb246IFN0YW5kYXJkQWN0aW9uLFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGNvbGxlY3Rpb25FbnRpdHk6IEVudGl0eVNldCB8IE5hdmlnYXRpb25Qcm9wZXJ0eSxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclxuKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHtcblx0Y29uc3Qgc3VmZml4UmVzb3VyY2VLZXkgPSBjb2xsZWN0aW9uRW50aXR5Lm5hbWU7XG5cdGNvbnN0IGJ1dHRvblRleHQgPSB0YWJsZS5nZXRUcmFuc2xhdGVkVGV4dChcIk1fQ09NTU9OX1RBQkxFX0NSRUFURVwiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KTtcblx0Y29uc3QgdmFsdWVzID0gdGFibGUudGFibGVEZWZpbml0aW9uLmNvbnRyb2wubm9kZVR5cGUhLnZhbHVlcztcblx0Y29uc3QgaGFzQ3VzdG9tQ3JlYXRlRW5hYmxlbWVudCA9IHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmNyZWF0ZUVuYWJsZW1lbnQgIT09IHVuZGVmaW5lZDtcblxuXHRjb25zdCBtZW51SXRlbXMgPSB2YWx1ZXMubWFwKChhbGxvd2VkVmFsdWUsIGluZGV4KSA9PiB7XG5cdFx0Y29uc3QgbW9kZWxOYW1lID0gIWZvckNvbnRleHRNZW51ID8gXCJcIiA6IFwiY29udGV4dG1lbnUvXCI7XG5cblx0XHRjb25zdCBpc0VuYWJsZWQgPSBoYXNDdXN0b21DcmVhdGVFbmFibGVtZW50XG5cdFx0XHQ/IG5vdEVxdWFsKHBhdGhJbk1vZGVsKGAke21vZGVsTmFtZX1jcmVhdGVFbmFibGVtZW50L0NyZWF0ZV8ke2luZGV4fWAsIFwiaW50ZXJuYWxcIiksIGZhbHNlKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgaWQgPSBmb3JDb250ZXh0TWVudVxuXHRcdFx0PyBnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhbGxvd2VkVmFsdWUudmFsdWUsIFwiQ29udGV4dE1lbnVcIl0pXG5cdFx0XHQ6IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFsbG93ZWRWYWx1ZS52YWx1ZV0pO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0aWQ9e2lkfVxuXHRcdFx0XHR0ZXh0PXthbGxvd2VkVmFsdWUudGV4dH1cblx0XHRcdFx0ZW5hYmxlZD17aXNFbmFibGVkID8gY29tcGlsZUV4cHJlc3Npb24oaXNFbmFibGVkKSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0cHJlc3M9e2hhbmRsZXJQcm92aWRlci5nZXRDcmVhdGVNZW51SXRlbVByZXNzSGFuZGxlcihpbmRleCwgZm9yQ29udGV4dE1lbnUpfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9KTtcblxuXHRpZiAoZm9yQ29udGV4dE1lbnUpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBzdGFuZGFyZEFjdGlvbi5rZXksIFwiQ29udGV4dE1lbnVcIl0pfVxuXHRcdFx0XHR0ZXh0PXtidXR0b25UZXh0fVxuXHRcdFx0XHR2aXNpYmxlPXtzdGFuZGFyZEFjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0ZW5hYmxlZD17c3RhbmRhcmRBY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51IGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRpdGVtczogbWVudUl0ZW1zICE9PSB1bmRlZmluZWQgJiYgbWVudUl0ZW1zLmxlbmd0aCA+IDAgPyBtZW51SXRlbXMgOiB1bmRlZmluZWRcblx0XHRcdFx0fX1cblx0XHRcdDwvTWVudUl0ZW0+XG5cdFx0KTtcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PEFjdGlvblRvb2xiYXJBY3Rpb24gaWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIHN0YW5kYXJkQWN0aW9uLmtleSwgXCJBY3Rpb25Ub29sYmFyQWN0aW9uXCJdKX0gZHQ6ZGVzaWdudGltZT1cIm5vdC1hZGFwdGFibGUtdHJlZVwiPlxuXHRcdFx0PE1lbnVCdXR0b25cblx0XHRcdFx0dGV4dD17YnV0dG9uVGV4dH1cblx0XHRcdFx0dHlwZT17QnV0dG9uVHlwZS5UcmFuc3BhcmVudH1cblx0XHRcdFx0bWVudVBvc2l0aW9uPVwiQmVnaW5Cb3R0b21cIlxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgc3RhbmRhcmRBY3Rpb24ua2V5XSl9XG5cdFx0XHRcdHZpc2libGU9e3N0YW5kYXJkQWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRlbmFibGVkPXtzdGFuZGFyZEFjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjdXN0b21EYXRhOiBbY3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIHN0YW5kYXJkQWN0aW9uLmtleV0pKV0sXG5cdFx0XHRcdFx0bWVudTogPE1lbnU+e21lbnVJdGVtc308L01lbnU+LFxuXHRcdFx0XHRcdGxheW91dERhdGE6IChcblx0XHRcdFx0XHRcdDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhXG5cdFx0XHRcdFx0XHRcdHByaW9yaXR5PXtzdGFuZGFyZEFjdGlvbi5wcmlvcml0eX1cblx0XHRcdFx0XHRcdFx0Z3JvdXA9e3N0YW5kYXJkQWN0aW9uLmdyb3VwfVxuXHRcdFx0XHRcdFx0PjwvT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YT5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH19XG5cdFx0XHQ8L01lbnVCdXR0b24+XG5cdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHQpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgeG1sIHN0cmluZyBmb3IgdGhlIGRlbGV0ZSBidXR0b24uXG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb24gU3RhbmRhcmQgYWN0aW9ucyB0byBiZSBldmFsdWF0ZWRcbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG4gKiBAcGFyYW0gY29sbGVjdGlvbkVudGl0eSBUaGUgZW50aXR5IHNldCBvZiB0aGUgY29sbGVjdGlvblxuICogQHJldHVybnMgVGhlIHhtbCBzdHJpbmcgZm9yIHRoZSBkZWxldGUgYnV0dG9uXG4gKi9cbmZ1bmN0aW9uIGdldERlbGV0ZUJ1dHRvbihcblx0c3RhbmRhcmRBY3Rpb246IFN0YW5kYXJkQWN0aW9uLFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuLFxuXHRjb2xsZWN0aW9uRW50aXR5OiBFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHlcbik6IEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB7XG5cdGNvbnN0IHN1ZmZpeFJlc291cmNlS2V5ID0gY29sbGVjdGlvbkVudGl0eS5uYW1lO1xuXHRjb25zdCBidXR0b25UZXh0ID0gdGFibGUuZ2V0VHJhbnNsYXRlZFRleHQoXCJNX0NPTU1PTl9UQUJMRV9ERUxFVEVcIiwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSk7XG5cdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHQvLyBmb3IgdGFibGUgdG9vbGJhclxuXHRcdHJldHVybiAoXG5cdFx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvblxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgc3RhbmRhcmRBY3Rpb24ua2V5LCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHRkdDpkZXNpZ250aW1lPVwibm90LWFkYXB0YWJsZS10cmVlXCJcblx0XHRcdD5cblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBzdGFuZGFyZEFjdGlvbi5rZXldKX1cblx0XHRcdFx0XHR0ZXh0PXtidXR0b25UZXh0fVxuXHRcdFx0XHRcdGpzeDpjb21tYW5kPVwiY21kOkRlbGV0ZUVudHJ5fHByZXNzXCJcblx0XHRcdFx0XHR0eXBlPXtCdXR0b25UeXBlLlRyYW5zcGFyZW50fVxuXHRcdFx0XHRcdHZpc2libGU9e3N0YW5kYXJkQWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdGVuYWJsZWQ9e3N0YW5kYXJkQWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdGFyaWFIYXNQb3B1cD1cIkRpYWxvZ1wiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0bGF5b3V0RGF0YTogKFxuXHRcdFx0XHRcdFx0XHQ8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YVxuXHRcdFx0XHRcdFx0XHRcdHByaW9yaXR5PXtzdGFuZGFyZEFjdGlvbi5wcmlvcml0eX1cblx0XHRcdFx0XHRcdFx0XHRncm91cD17c3RhbmRhcmRBY3Rpb24uZ3JvdXB9XG5cdFx0XHRcdFx0XHRcdD48L092ZXJmbG93VG9vbGJhckxheW91dERhdGE+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHQvLyBmb3IgY29udGV4dCBtZW51XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgc3RhbmRhcmRBY3Rpb24ua2V5LCBcIkNvbnRleHRNZW51XCJdKX1cblx0XHRcdFx0dGV4dD17YnV0dG9uVGV4dH1cblx0XHRcdFx0anN4OmNvbW1hbmQ9XCJjbWQ6RGVsZXRlRW50cnk6OkNvbnRleHRNZW51fHByZXNzXCJcblx0XHRcdFx0dmlzaWJsZT17c3RhbmRhcmRBY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdGVuYWJsZWQ9e3N0YW5kYXJkQWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIHhtbCBzdHJpbmcgZm9yIHN0YW5kYXJkIGFjdGlvbnMgYmFzZWQgb24gdGhlIGtleSBvZiB0aGUgc3RhbmRhcmQgYWN0aW9uLlxuICogQHBhcmFtIGFjdGlvbiBUaGUgYWN0aW9uIHRvIHRlbXBsYXRlXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlclxuICogQHBhcmFtIGNvbGxlY3Rpb25FbnRpdHkgVGhlIGVudGl0eSBzZXQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEByZXR1cm5zIFRoZSB4bWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdGFuZGFyZCBhY3Rpb25cbiAqL1xuZnVuY3Rpb24gZ2V0U3RhbmRhcmRBY3Rpb24oXG5cdGFjdGlvbjogU3RhbmRhcmRBY3Rpb24sXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlcixcblx0Y29sbGVjdGlvbkVudGl0eTogRW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5XG4pOiBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgTWVudUl0ZW0gfCBBY3Rpb25zUGxhY2Vob2xkZXIgfCB1bmRlZmluZWQge1xuXHRpZiAoYWN0aW9uLmlzVGVtcGxhdGVkID09PSBcImZhbHNlXCIpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGlmICh0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC5hbmFseXRpY2FsQ29uZmlndXJhdGlvbj8uYWdncmVnYXRpb25PbkxlYWZMZXZlbCAmJiBhY3Rpb24ua2V5ICE9PSBTdGFuZGFyZEFjdGlvbktleXMuQ3JlYXRlKSB7XG5cdFx0YWN0aW9uID0gZGVlcENsb25lKGFjdGlvbik7XG5cdFx0YWN0aW9uLmVuYWJsZWQgPSBjb21waWxlRXhwcmVzc2lvbihhbmQocmVzb2x2ZUJpbmRpbmdTdHJpbmcoYWN0aW9uLmVuYWJsZWQgPz8gXCJcIiksIFVJLmlzTm9kZUxldmVsTmF2aWdhYmxlKSk7XG5cdFx0YWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0YW5kKHJlc29sdmVCaW5kaW5nU3RyaW5nKGFjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgPz8gXCJcIiksIFVJLmlzTm9kZUxldmVsTmF2aWdhYmxlKVxuXHRcdCk7XG5cdH1cblxuXHRzd2l0Y2ggKGFjdGlvbi5rZXkpIHtcblx0XHRjYXNlIFN0YW5kYXJkQWN0aW9uS2V5cy5DcmVhdGU6XG5cdFx0XHRpZiAoXG5cdFx0XHRcdCF0YWJsZS50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5pc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQgfHxcblx0XHRcdFx0Ly8gV2Ugb25seSBoYXZlIENyZWF0ZSBvbiB0aGUgQ29udGV4dE1lbnUgb24gdGhlIFRyZWVUYWJsZVxuXHRcdFx0XHQodGFibGUudGFibGVEZWZpbml0aW9uLmNvbnRyb2wudHlwZSAhPT0gXCJUcmVlVGFibGVcIiAmJiBmb3JDb250ZXh0TWVudSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0fSBlbHNlIGlmICh0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC5ub2RlVHlwZSkge1xuXHRcdFx0XHRyZXR1cm4gZ2V0Q3JlYXRlTWVudShhY3Rpb24sIHRhYmxlLCBjb2xsZWN0aW9uRW50aXR5LCBmb3JDb250ZXh0TWVudSwgaGFuZGxlclByb3ZpZGVyKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBnZXRDcmVhdGVCdXR0b24oYWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUsIGNvbGxlY3Rpb25FbnRpdHkpO1xuXHRcdFx0fVxuXG5cdFx0Y2FzZSBTdGFuZGFyZEFjdGlvbktleXMuRGVsZXRlOlxuXHRcdFx0cmV0dXJuIGdldERlbGV0ZUJ1dHRvbihhY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSwgY29sbGVjdGlvbkVudGl0eSk7XG5cdFx0Y2FzZSBTdGFuZGFyZEFjdGlvbktleXMuQ3V0OlxuXHRcdFx0cmV0dXJuIGdldEN1dEJ1dHRvbihhY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSk7XG5cdFx0Y2FzZSBTdGFuZGFyZEFjdGlvbktleXMuQ29weTpcblx0XHRcdHJldHVybiBnZXRDb3B5QnV0dG9uKGFjdGlvbiwgdGFibGUsIGZvckNvbnRleHRNZW51KTtcblx0XHRjYXNlIFN0YW5kYXJkQWN0aW9uS2V5cy5QYXN0ZTpcblx0XHRcdHJldHVybiBnZXRQYXN0ZUJ1dHRvbihhY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSk7XG5cblx0XHRjYXNlIFN0YW5kYXJkQWN0aW9uS2V5cy5NYXNzRWRpdDpcblx0XHRcdGlmICh0YWJsZS50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5pc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQpIHtcblx0XHRcdFx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdFx0XHRcdC8vIGZvciB0YWJsZSB0b29sYmFyXG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uXG5cdFx0XHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24ua2V5LCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHRcdFx0XHRkdDpkZXNpZ250aW1lPVwibm90LWFkYXB0YWJsZS10cmVlXCJcblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24ua2V5XSl9XG5cdFx0XHRcdFx0XHRcdFx0dGV4dD1cIntzYXAuZmUuaTE4bj5NX0NPTU1PTl9UQUJMRV9NQVNTRURJVH1cIlxuXHRcdFx0XHRcdFx0XHRcdHByZXNzPXtoYW5kbGVyUHJvdmlkZXIuZ2V0TWFzc0VkaXRCdXR0b25QcmVzc0hhbmRsZXIoZmFsc2UpfVxuXHRcdFx0XHRcdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZCBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRcdFx0bGF5b3V0RGF0YTogKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByaW9yaXR5PXthY3Rpb24ucHJpb3JpdHl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Z3JvdXA9e2FjdGlvbi5ncm91cH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0PjwvT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YT5cblx0XHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIGZvciBjb250ZXh0IG1lbnVcblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24ua2V5LCBcIkNvbnRleHRNZW51XCJdKX1cblx0XHRcdFx0XHRcdFx0dGV4dD1cIntzYXAuZmUuaTE4bj5NX0NPTU1PTl9UQUJMRV9NQVNTRURJVH1cIlxuXHRcdFx0XHRcdFx0XHRwcmVzcz17aGFuZGxlclByb3ZpZGVyLmdldE1hc3NFZGl0QnV0dG9uUHJlc3NIYW5kbGVyKHRydWUpfVxuXHRcdFx0XHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZUZvckNvbnRleHRNZW51IGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRjYXNlIFN0YW5kYXJkQWN0aW9uS2V5cy5JbnNpZ2h0czpcblx0XHRcdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHRcdFx0Ly8gZm9yIHRhYmxlIHRvb2xiYXJcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvblxuXHRcdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5rZXksIFwiQWN0aW9uVG9vbGJhckFjdGlvblwiXSl9XG5cdFx0XHRcdFx0XHRkdDpkZXNpZ250aW1lPXthY3Rpb24udmlzaWJsZSA9PT0gXCJ0cnVlXCIgfHwgYWN0aW9uLnZpc2libGUgPT09IFwiZmFsc2VcIiA/IHVuZGVmaW5lZCA6IFwibm90LWFkYXB0YWJsZS12aXNpYmlsaXR5XCJ9XG5cdFx0XHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24ua2V5XSl9XG5cdFx0XHRcdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+TV9DT01NT05fSU5TSUdIVFNfQ0FSRH1cIlxuXHRcdFx0XHRcdFx0XHRwcmVzcz17aGFuZGxlclByb3ZpZGVyLmFkZENhcmRUb0luc2lnaHRzUHJlc3N9XG5cdFx0XHRcdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRcdGxheW91dERhdGE6IChcblx0XHRcdFx0XHRcdFx0XHRcdDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PXthY3Rpb24ucHJpb3JpdHkgPz8gXCJBbHdheXNPdmVyZmxvd1wifSBncm91cD17YWN0aW9uLmdyb3VwfSAvPlxuXHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRjYXNlIFN0YW5kYXJkQWN0aW9uS2V5cy5Nb3ZlVXA6XG5cdFx0Y2FzZSBTdGFuZGFyZEFjdGlvbktleXMuTW92ZURvd246XG5cdFx0XHRyZXR1cm4gZ2V0TW92ZVVwRG93bkJ1dHRvbihhY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSk7XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgeG1sIHN0cmluZyBmb3Igc3RhbmRhcmQsIGFubm90YXRpb24sIGFuZCBjdXN0b20gYWN0aW9ucyBvZiB0aGUgdGFibGUuXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBjb2xsZWN0aW9uQ29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgY29sbGVjdGlvblxuICogQHBhcmFtIGNvbGxlY3Rpb25FbnRpdHkgVGhlIGVudGl0eSBzZXQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEByZXR1cm5zIFRoZSB4bWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY3Rpb25zKFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuLFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzLFxuXHRjb2xsZWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0Y29sbGVjdGlvbkVudGl0eTogRW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5XG4pOiAoQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHwgQWN0aW9uc1BsYWNlaG9sZGVyKVtdIHtcblx0cmV0dXJuIHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zXG5cdFx0Lm1hcCgoYWN0aW9uKSA9PiB7XG5cdFx0XHRzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG5cdFx0XHRcdGNhc2UgQWN0aW9uVHlwZS5TdGFuZGFyZDpcblx0XHRcdFx0XHRyZXR1cm4gZ2V0U3RhbmRhcmRBY3Rpb24oYWN0aW9uIGFzIFN0YW5kYXJkQWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUsIHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLCBjb2xsZWN0aW9uRW50aXR5KTtcblx0XHRcdFx0Y2FzZSBBY3Rpb25UeXBlLkNvcHk6XG5cdFx0XHRcdFx0cmV0dXJuIGdldENvcHlBY3Rpb24oYWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUsIGNvbGxlY3Rpb25Db250ZXh0LCBwYXJhbWV0ZXJzKTtcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRyZXR1cm4gZ2V0QWN0aW9uKGFjdGlvbiwgdGFibGUsIGZvckNvbnRleHRNZW51LCBjb2xsZWN0aW9uQ29udGV4dCwgcGFyYW1ldGVycyk7XG5cdFx0XHR9XG5cdFx0fSlcblx0XHQuZmlsdGVyKChhY3Rpb24pID0+IGFjdGlvbiAhPT0gdW5kZWZpbmVkKSBhcyAoQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHwgQWN0aW9uc1BsYWNlaG9sZGVyKVtdO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgY29udHJvbCBmb3IgQmFzaWNTZWFyY2guXG4gKiBAcGFyYW0gdXNlQmFzaWNTZWFyY2hcbiAqIEBwYXJhbSBmaWx0ZXJCYXJJZFxuICogQHBhcmFtIF9jb2xsZWN0aW9uSXNEcmFmdEVuYWJsZWRcbiAqIEBwYXJhbSBpc1NlYXJjaGFibGVcbiAqIEByZXR1cm5zIFRoZSBjb250cm9sIG9mIHRoZSBCYXNpY1NlYXJjaFxuICovXG5mdW5jdGlvbiBnZXRCYXNpY1NlYXJjaChcblx0dXNlQmFzaWNTZWFyY2g6IGJvb2xlYW4sXG5cdGZpbHRlckJhcklkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdF9jb2xsZWN0aW9uSXNEcmFmdEVuYWJsZWQ6IGJvb2xlYW4sXG5cdGlzU2VhcmNoYWJsZTogYm9vbGVhblxuKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IHVuZGVmaW5lZCB7XG5cdGlmICh1c2VCYXNpY1NlYXJjaCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvblxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW2ZpbHRlckJhcklkLCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHRsYWJlbD1cIntzYXAuZmUuaTE4bj5NX0JBU0lDX1NFQVJDSH1cIlxuXHRcdFx0XHRkdDpkZXNpZ250aW1lPVwibm90LWFkYXB0YWJsZS10cmVlXCJcblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRhY3Rpb246IDxCYXNpY1NlYXJjaE1hY3JvIGlkPXtmaWx0ZXJCYXJJZH0gdXNlRHJhZnRFZGl0U3RhdGU9e19jb2xsZWN0aW9uSXNEcmFmdEVuYWJsZWR9IHZpc2libGU9e2lzU2VhcmNoYWJsZX0gLz5cblx0XHRcdFx0fX1cblx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBjb250cm9sIGZvciB0YWJsZSBmdWxsc2NyZWVuIGJ1dHRvbi5cbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcmV0dXJucyBUaGUgY29udHJvbCBvZiB0aGUgYnV0dG9uXG4gKi9cbmZ1bmN0aW9uIGdldEZ1bGxTY3JlZW4odGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IHVuZGVmaW5lZCB7XG5cdGlmICh0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC5lbmFibGVGdWxsU2NyZWVuKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIlN0YW5kYXJkQWN0aW9uXCIsIFwiRnVsbFNjcmVlblwiLCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHRsYWJlbD1cIntzYXAuZmUuaTE4bj5NX0ZVTExfU0NSRUVOfVwiXG5cdFx0XHRcdGR0OmRlc2lnbnRpbWU9XCJub3QtYWRhcHRhYmxlLXRyZWVcIlxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGFjdGlvbjogPFRhYmxlRnVsbFNjcmVlbkJ1dHRvbiBpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgXCJTdGFuZGFyZEFjdGlvblwiLCBcIkZ1bGxTY3JlZW5cIl0pfSAvPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIFhNTCBzdHJpbmcgZm9yIHRoZSBDdXQgQnV0dG9uLlxuICogQHBhcmFtIGFjdGlvbiBUaGUgaW5zdGFuY2Ugb2YgdGhlIHN0YW5kYXJkIGFjdGlvblxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIEN1dCBCdXR0b25cbiAqL1xuZnVuY3Rpb24gZ2V0Q3V0QnV0dG9uKGFjdGlvbjogU3RhbmRhcmRBY3Rpb24sIHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcywgZm9yQ29udGV4dE1lbnUgPSBmYWxzZSk6IEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB7XG5cdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHQvLyBmb3IgdGFibGUgdG9vbGJhclxuXHRcdHJldHVybiAoXG5cdFx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvbiBpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgXCJDdXRcIiwgXCJBY3Rpb25Ub29sYmFyQWN0aW9uXCJdKX0gZHQ6ZGVzaWdudGltZT1cIm5vdC1hZGFwdGFibGUtdHJlZVwiPlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIFwiQ3V0XCJdKX1cblx0XHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fVEFCTEVfQ1VUfVwiXG5cdFx0XHRcdFx0anN4OmNvbW1hbmQ9XCJjbWQ6Q3V0fHByZXNzXCJcblx0XHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdGxheW91dERhdGE6IDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PXthY3Rpb24ucHJpb3JpdHl9IGdyb3VwPXthY3Rpb24uZ3JvdXB9PjwvT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YT5cblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIGZvciBjb250ZXh0IG1lbnVcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIkN1dFwiLCBcIkNvbnRleHRNZW51XCJdKX1cblx0XHRcdFx0dGV4dD1cIntzYXAuZmUuaTE4bj5NX1RBQkxFX0NVVH1cIlxuXHRcdFx0XHRqc3g6Y29tbWFuZD1cImNtZDpDdXQ6OkNvbnRleHRNZW51fHByZXNzXCJcblx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51IGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgWE1MIHN0cmluZyBmb3IgdGhlIENvcHkgYnV0dG9uLlxuICogQHBhcmFtIGFjdGlvbiBUaGUgaW5zdGFuY2Ugb2YgdGhlIHN0YW5kYXJkQWN0aW9uLlxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgVGFibGUgYnVpbGRpbmcgYmxvY2suXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcbiAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBDdXQgYnV0dG9uLlxuICovXG5mdW5jdGlvbiBnZXRDb3B5QnV0dG9uKGFjdGlvbjogU3RhbmRhcmRBY3Rpb24sIHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcywgZm9yQ29udGV4dE1lbnUgPSBmYWxzZSk6IEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB7XG5cdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHQvLyBmb3IgdGFibGUgdG9vbGJhclxuXHRcdHJldHVybiAoXG5cdFx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvbiBpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgXCJDb3B5XCIsIFwiQWN0aW9uVG9vbGJhckFjdGlvblwiXSl9IGR0OmRlc2lnbnRpbWU9XCJub3QtYWRhcHRhYmxlLXRyZWVcIj5cblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIkNvcHlcIl0pfVxuXHRcdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+TV9UQUJMRV9DT1BZfVwiXG5cdFx0XHRcdFx0anN4OmNvbW1hbmQ9XCJjbWQ6Q29weXxwcmVzc1wiXG5cdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRsYXlvdXREYXRhOiA8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSBwcmlvcml0eT17YWN0aW9uLnByaW9yaXR5fSBncm91cD17YWN0aW9uLmdyb3VwfT48L092ZXJmbG93VG9vbGJhckxheW91dERhdGE+XG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHQvLyBmb3IgY29udGV4dCBtZW51XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgXCJDb3B5XCIsIFwiQ29udGV4dE1lbnVcIl0pfVxuXHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fVEFCTEVfQ09QWX1cIlxuXHRcdFx0XHRqc3g6Y29tbWFuZD1cImNtZDpDb3B5OjpDb250ZXh0TWVudXxwcmVzc1wiXG5cdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0TW92ZVVwRG93bkJ1dHRvbihhY3Rpb246IFN0YW5kYXJkQWN0aW9uLCB0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsIGZvckNvbnRleHRNZW51OiBib29sZWFuKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHtcblx0Y29uc3QgZm9yTW92ZVVwID0gYWN0aW9uLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLk1vdmVVcDtcblx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdC8vIGZvciB0YWJsZSB0b29sYmFyXG5cdFx0cmV0dXJuIChcblx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24ua2V5LCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZX1cblx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cIm5vdC1hZGFwdGFibGUtdHJlZVwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgYWN0aW9uLmtleV0pfVxuXHRcdFx0XHRcdHRleHQ9e2Zvck1vdmVVcCA/IFwie3NhcC5mZS5pMThuPk1fVEFCTEVfTU9WRV9VUH1cIiA6IFwie3NhcC5mZS5pMThuPk1fVEFCTEVfTU9WRV9ET1dOfVwifVxuXHRcdFx0XHRcdGpzeDpjb21tYW5kPXtmb3JNb3ZlVXAgPyBcImNtZDpUYWJsZU1vdmVFbGVtZW50VXB8cHJlc3NcIiA6IFwiY21kOlRhYmxlTW92ZUVsZW1lbnREb3dufHByZXNzXCJ9XG5cdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRsYXlvdXREYXRhOiA8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSBwcmlvcml0eT17YWN0aW9uLnByaW9yaXR5fSBncm91cD17YWN0aW9uLmdyb3VwfT48L092ZXJmbG93VG9vbGJhckxheW91dERhdGE+XG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHQvLyBmb3IgY29udGV4dCBtZW51XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgYWN0aW9uLmtleSwgXCJDb250ZXh0TWVudVwiXSl9XG5cdFx0XHRcdHRleHQ9e2Zvck1vdmVVcCA/IFwie3NhcC5mZS5pMThuPk1fVEFCTEVfTU9WRV9VUH1cIiA6IFwie3NhcC5mZS5pMThuPk1fVEFCTEVfTU9WRV9ET1dOfVwifVxuXHRcdFx0XHRqc3g6Y29tbWFuZD17Zm9yTW92ZVVwID8gXCJjbWQ6VGFibGVNb3ZlRWxlbWVudFVwOjpDb250ZXh0TWVudXxwcmVzc1wiIDogXCJjbWQ6VGFibGVNb3ZlRWxlbWVudERvd246OkNvbnRleHRNZW51fHByZXNzXCJ9XG5cdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cbn1cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBYTUwgc3RyaW5nIGZvciB0aGUgUGFzdGUgQnV0dG9uLlxuICogQHBhcmFtIGFjdGlvbiBUaGUgUGFzdGUgYWN0aW9uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIFBhc3RlIEJ1dHRvblxuICovXG5mdW5jdGlvbiBnZXRQYXN0ZUJ1dHRvbihcblx0YWN0aW9uOiBTdGFuZGFyZEFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudSA9IGZhbHNlXG4pOiBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgTWVudUl0ZW0gfCB1bmRlZmluZWQge1xuXHRjb25zdCB0YWJsZVR5cGUgPSB0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlO1xuXHRpZiAodGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdFx0Ly8gZm9yIHRhYmxlIHRvb2xiYXJcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uIGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIlBhc3RlXCIsIFwiQWN0aW9uVG9vbGJhckFjdGlvblwiXSl9IGR0OmRlc2lnbnRpbWU9XCJub3QtYWRhcHRhYmxlLXRyZWVcIj5cblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgXCJQYXN0ZVwiXSl9XG5cdFx0XHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fUEFTVEV9XCJcblx0XHRcdFx0XHRcdGpzeDpjb21tYW5kPVwiY21kOlBhc3RlfHByZXNzXCJcblx0XHRcdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRsYXlvdXREYXRhOiAoXG5cdFx0XHRcdFx0XHRcdFx0PE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgcHJpb3JpdHk9e2FjdGlvbi5wcmlvcml0eX0gZ3JvdXA9e2FjdGlvbi5ncm91cH0+PC9PdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhPlxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBmb3IgQ29udGV4dCBNZW51XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgXCJQYXN0ZVwiLCBcIkNvbnRleHRNZW51XCJdKX1cblx0XHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fUEFTVEV9XCJcblx0XHRcdFx0XHRqc3g6Y29tbWFuZD1cImNtZDpQYXN0ZTo6Q29udGV4dE1lbnV8cHJlc3NcIlxuXHRcdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51IGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBYTUwgc3RyaW5nIGZvciBhY3Rpb25zLlxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gY29sbGVjdGlvbkNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSBjb2xsZWN0aW9uRW50aXR5IFRoZSBlbnRpdHkgc2V0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVBY3Rpb25zVGVtcGxhdGUoXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVycyxcblx0Y29sbGVjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdGNvbGxlY3Rpb25FbnRpdHk6IEVudGl0eVNldCB8IE5hdmlnYXRpb25Qcm9wZXJ0eVxuKTogQ29udHJvbFtdIHtcblx0Y29uc3QgX2NvbGxlY3Rpb25Jc0RyYWZ0RW5hYmxlZCA9IE1vZGVsSGVscGVyLmlzRHJhZnROb2RlKGNvbGxlY3Rpb25FbnRpdHkpIHx8IE1vZGVsSGVscGVyLmlzRHJhZnRSb290KGNvbGxlY3Rpb25FbnRpdHkpO1xuXHRsZXQgc2VhcmNoYWJsZTogYm9vbGVhbjtcblx0aWYgKHRhYmxlLmlzU2VhcmNoYWJsZSA9PT0gZmFsc2UpIHtcblx0XHRzZWFyY2hhYmxlID0gZmFsc2U7XG5cdH0gZWxzZSB7XG5cdFx0c2VhcmNoYWJsZSA9IHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnNlYXJjaGFibGU7XG5cdH1cblxuXHRjb25zdCBhY3Rpb25zOiAoQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHwgQWN0aW9uc1BsYWNlaG9sZGVyKVtdID0gW107XG5cdGNvbnN0IGJhc2ljU2VhcmNoID0gZ2V0QmFzaWNTZWFyY2goISF0YWJsZS51c2VCYXNpY1NlYXJjaCwgdGFibGUuZmlsdGVyQmFyLCBfY29sbGVjdGlvbklzRHJhZnRFbmFibGVkLCBzZWFyY2hhYmxlKTtcblx0aWYgKGJhc2ljU2VhcmNoKSB7XG5cdFx0YWN0aW9ucy5wdXNoKGJhc2ljU2VhcmNoKTtcblx0fVxuXHRhY3Rpb25zLnB1c2goLi4uZ2V0QWN0aW9ucyh0YWJsZSwgZmFsc2UsIHBhcmFtZXRlcnMsIGNvbGxlY3Rpb25Db250ZXh0LCBjb2xsZWN0aW9uRW50aXR5KSk7XG5cdGNvbnN0IGZ1bGxTY3JlZW4gPSBnZXRGdWxsU2NyZWVuKHRhYmxlKTtcblx0aWYgKGZ1bGxTY3JlZW4pIHtcblx0XHRhY3Rpb25zLnB1c2goZnVsbFNjcmVlbik7XG5cdH1cblxuXHRyZXR1cm4gYWN0aW9ucyBhcyBDb250cm9sW107XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSB4bWwgc3RyaW5nIGZvciBjb250ZXh0IG1lbnUgYWN0aW9ucy5cbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gY29sbGVjdGlvbkVudGl0eSBUaGUgZW50aXR5IHNldCBvZiB0aGUgY29sbGVjdGlvblxuICogQHJldHVybnMgVGhlIHhtbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGFjdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlQ29udGV4dE1lbnVUZW1wbGF0ZShcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzLFxuXHRjb2xsZWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0Y29sbGVjdGlvbkVudGl0eTogRW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5XG4pOiBNZW51SXRlbVtdIHtcblx0Y29uc3QgdGVtcGxhdGU6IE1lbnVJdGVtW10gPSBnZXRBY3Rpb25zKHRhYmxlLCB0cnVlLCBwYXJhbWV0ZXJzLCBjb2xsZWN0aW9uQ29udGV4dCwgY29sbGVjdGlvbkVudGl0eSkgYXMgdW5rbm93biBhcyBNZW51SXRlbVtdO1xuXHRpZiAodGFibGUudGFibGVEZWZpbml0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdHRlbXBsYXRlLnB1c2goZ2V0RXhwYW5kZWRDb2xsYXBzZUFjdGlvbnModGFibGUsIHRydWUsIHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmV4cGFuZE5vZGUpKTtcblx0XHR0ZW1wbGF0ZS5wdXNoKGdldEV4cGFuZGVkQ29sbGFwc2VBY3Rpb25zKHRhYmxlLCBmYWxzZSwgcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuY29sbGFwc2VOb2RlKSk7XG5cdH1cblx0cmV0dXJuIHRlbXBsYXRlO1xufVxuXG5mdW5jdGlvbiBnZXRFeHBhbmRlZENvbGxhcHNlQWN0aW9ucyh0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsIGV4cGFuZDogYm9vbGVhbiwgcHJlc3NIYW5kbGVyPzogKGU6IFVJNUV2ZW50KSA9PiB2b2lkKTogTWVudUl0ZW0ge1xuXHRjb25zdCBlbmFibGVFeHByZXNzaW9uID0gZXhwYW5kXG5cdFx0PyBhbmQoXG5cdFx0XHRcdGVxdWFsKHBhdGhJbk1vZGVsKFwiY29udGV4dG1lbnUvaXNFeHBhbmRhYmxlXCIsIFwiaW50ZXJuYWxcIiksIHRydWUpLFxuXHRcdFx0XHRlcXVhbChwYXRoSW5Nb2RlbChcImNvbnRleHRtZW51L251bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiLCBcImludGVybmFsXCIpLCAxKVxuXHRcdCAgKVxuXHRcdDogYW5kKFxuXHRcdFx0XHRlcXVhbChwYXRoSW5Nb2RlbChcImNvbnRleHRtZW51L2lzQ29sbGFwc2FibGVcIiwgXCJpbnRlcm5hbFwiKSwgdHJ1ZSksXG5cdFx0XHRcdGVxdWFsKHBhdGhJbk1vZGVsKFwiY29udGV4dG1lbnUvbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIsIFwiaW50ZXJuYWxcIiksIDEpXG5cdFx0ICApO1xuXHRyZXR1cm4gKFxuXHRcdDxNZW51SXRlbVxuXHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGV4cGFuZCA/IFwiRXhwYW5kXCIgOiBcIkNvbGxhcHNlXCIsIFwiQ29udGV4dE1lbnVcIl0pfVxuXHRcdFx0dGV4dD17ZXhwYW5kID8gXCJ7c2FwLmZlLmkxOG4+TV9UQUJMRV9DT05URVhUTUVOVV9FWFBBTkR9XCIgOiBcIntzYXAuZmUuaTE4bj5NX1RBQkxFX0NPTlRFWFRNRU5VX0NPTExBUFNFfVwifVxuXHRcdFx0cHJlc3M9e3ByZXNzSGFuZGxlcn1cblx0XHRcdGVuYWJsZWQ9e2VuYWJsZUV4cHJlc3Npb259XG5cdFx0Lz5cblx0KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU0Esb0JBQW9CQSxDQUM1QkMsU0FBNkIsRUFDN0JDLE1BQW9ELEVBQ3BEQyxjQUEwQixFQUMxQkMsS0FBMkIsRUFDM0JDLGNBQXVCLEVBQ3ZCQyxpQkFBMEIsRUFDMUJDLFVBQXFDLEVBQ2Q7SUFDdkIsSUFBSSxDQUFDSixjQUFjLENBQUNLLGNBQWMsRUFBRTtNQUNuQyxPQUFPQyxTQUFTO0lBQ2pCO0lBQ0EsTUFBTUMsaUJBQWlCLEdBQUdDLFlBQVksQ0FBQ0MsZ0JBQWdCLENBQ3RETCxVQUFVLENBQUNNLFNBQVMsQ0FBQ0Msb0JBQW9CLENBQUNYLGNBQWMsQ0FBQ0ssY0FBYyxHQUFHLFNBQVMsQ0FDcEYsQ0FBQztJQUNELE1BQU1PLGFBQWEsR0FBR1IsVUFBVSxDQUFDTSxTQUFTLENBQUNDLG9CQUFvQixDQUFDSixpQkFBaUIsQ0FBRTtJQUNuRixNQUFNTSw0QkFBNEIsR0FBR0QsYUFBYSxHQUMvQ0Usa0JBQWtCLENBQUNDLDJCQUEyQixDQUFDSCxhQUFhLEVBQUVULGlCQUFpQixDQUFDLEdBQ2hGRyxTQUFTO0lBQ1osTUFBTVUsT0FBTyxHQUFHbEIsU0FBUyxDQUFDbUIsWUFBWSxFQUFFRCxPQUFPO0lBQy9DLE1BQU1FLG9CQUFvQixHQUFHcEIsU0FBUyxDQUFDbUIsWUFBWSxFQUFFRSxXQUFXLEVBQUVDLElBQUksRUFBRUMsa0JBQWtCLEVBQUVDLE9BQU8sQ0FBQyxDQUFDLEtBQUssS0FBSztJQUMvRyxNQUFNQyxPQUFPLEdBQUcsQ0FBQ3JCLGNBQWMsR0FBR0YsY0FBYyxDQUFDdUIsT0FBTyxHQUFHdkIsY0FBYyxDQUFDdUIsT0FBTyxHQUFHLGVBQWU7SUFDbkcsTUFBTUMsZUFBZSxHQUFH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
1122
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRNZW51SXRlbUZvckFjdGlvbiIsImRhdGFGaWVsZCIsImFjdGlvbiIsIm1lbnVJdGVtQWN0aW9uIiwidGFibGUiLCJmb3JDb250ZXh0TWVudSIsImNvbGxlY3Rpb25Db250ZXh0IiwicGFyYW1ldGVycyIsImFubm90YXRpb25QYXRoIiwidW5kZWZpbmVkIiwiYWN0aW9uQ29udGV4dFBhdGgiLCJDb21tb25IZWxwZXIiLCJnZXRBY3Rpb25Db250ZXh0IiwibWV0YU1vZGVsIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJhY3Rpb25Db250ZXh0IiwiZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImlzQm91bmQiLCJBY3Rpb25UYXJnZXQiLCJpc09wZXJhdGlvbkF2YWlsYWJsZSIsImFubm90YXRpb25zIiwiQ29yZSIsIk9wZXJhdGlvbkF2YWlsYWJsZSIsInZhbHVlT2YiLCJjb21tYW5kIiwiY29udGV4dE1lbnVUZXh0IiwicHJlc3NIYW5kbGVyIiwiaGFuZGxlclByb3ZpZGVyIiwiZ2V0RGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uUHJlc3NIYW5kbGVyIiwicHJlc3NDb21tYW5kIiwiZW5hYmxlZCIsIlRhYmxlSGVscGVyIiwiaXNEYXRhRmllbGRGb3JBY3Rpb25FbmFibGVkIiwidGFibGVEZWZpbml0aW9uIiwiQWN0aW9uIiwiZ2V0T2JqZWN0IiwiZW5hYmxlT25TZWxlY3QiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiY29udHJvbCIsImFuYWx5dGljYWxDb25maWd1cmF0aW9uIiwiYWdncmVnYXRpb25PbkxlYWZMZXZlbCIsImNvbXBpbGVFeHByZXNzaW9uIiwiYW5kIiwiVUkiLCJpc05vZGVMZXZlbE5hdmlnYWJsZSIsInJlc29sdmVCaW5kaW5nU3RyaW5nIiwiaXRlbUlkIiwiZ2VuZXJhdGUiLCJjb250ZW50SWQiLCJrZXkiLCJfanN4IiwiTWVudUl0ZW0iLCJ0ZXh0IiwiTGFiZWwiLCJpZCIsInByZXNzIiwidmlzaWJsZSIsImNoaWxkcmVuIiwiY3VzdG9tRGF0YSIsImNyZWF0ZUN1c3RvbURhdGEiLCJnZXRNZW51SXRlbUZvckludGVudEJhc2VkTmF2aWdhdGlvbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImdldERhdGFGaWVsZEZvcklCTlByZXNzSGFuZGxlciIsImlzRGF0YUZpZWxkRm9ySUJORW5hYmxlZCIsImNvbGxlY3Rpb24iLCJSZXF1aXJlc0NvbnRleHQiLCJOYXZpZ2F0aW9uQXZhaWxhYmxlIiwic2VtYW50aWNPYmplY3QiLCJTZW1hbnRpY09iamVjdCIsImdldE1lbnVJdGVtIiwiY29udmVydGVkTWV0YWRhdGEiLCJyZXNvbHZlUGF0aCIsInRhcmdldCIsInR5cGUiLCJpc0RhdGFGaWVsZEZvckFjdGlvbiIsImlzQWN0aW9uU2hvd25JbkNvbnRleHRNZW51IiwiY29udGV4dE9iamVjdFBhdGgiLCJpc0RhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE1hbmlmZXN0QWN0aW9uUHJlc3NIYW5kbGVyIiwiZW5hYmxlZEZvckNvbnRleHRNZW51IiwicmVxdWlyZXNTZWxlY3Rpb24iLCJnZXREYXRhRmllbGRCdXR0b25Gb3JBY3Rpb24iLCJkYXRhRmllbGRBY3Rpb25Db250ZXh0IiwiaWNvbiIsImlzQUlPcGVyYXRpb24iLCJhaUljb24iLCJ0b29sYmFyQWN0aW9uSWQiLCJCdXR0b24iLCJhcmlhSGFzUG9wdXAiLCJpc0FjdGlvbldpdGhEaWFsb2ciLCJCdXR0b25UeXBlIiwiVHJhbnNwYXJlbnQiLCJsYXlvdXREYXRhIiwiT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSIsInByaW9yaXR5IiwiZ3JvdXAiLCJ0YWJsZUFjdGlvbkNvbnRleHRNZW51SWQiLCJnZXREYXRhRmllbGRCdXR0b25Gb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJJQk5EYXRhIiwiZ2V0RGF0YUZpZWxkQnV0dG9uIiwidGVtcGxhdGUiLCJkZWVwQ2xvbmUiLCJBY3Rpb25Ub29sYmFyQWN0aW9uIiwiZ2V0RGVmYXVsdE1lbnVCdXR0b25BY3Rpb24iLCJkZWZhdWx0QWN0aW9uIiwiZGF0YUZpZWxkRm9yRGVmYXVsdEFjdGlvbiIsImhhbmRsZXIiLCJlIiwiZ2V0TWVudUJ1dHRvbiIsImRlZmF1bHRBY3Rpb25IYW5kbGVycyIsIm1lbnVJdGVtcyIsIm1lbnUiLCJmaWx0ZXIiLCJtYXAiLCJpdGVtIiwibWVudUlkIiwiTWVudUJ1dHRvbiIsIm1lbnVQb3NpdGlvbiIsIlBvcHVwIiwiRG9jayIsIkJlZ2luQm90dG9tIiwidXNlRGVmYXVsdEFjdGlvbk9ubHkiLCJidXR0b25Nb2RlIiwiTWVudUJ1dHRvbk1vZGUiLCJTcGxpdCIsIlJlZ3VsYXIiLCJNZW51IiwibWVudUl0ZW1zRm9yQ29udGV4dE1lbnUiLCJmb3JFYWNoIiwicHVzaCIsIml0ZW1zIiwiZ2V0RGVmYXVsdEJ1dHRvbiIsImdldEFjdGlvbiIsImdldENvcHlBY3Rpb24iLCJvcGVyYXRpb25BdmFpbGFibGUiLCJBY3Rpb25IZWxwZXIiLCJnZXROdW1iZXJPZkNvbnRleHRzRXhwcmVzc2lvbiIsImVxdWFsIiwicGF0aEluTW9kZWwiLCJnZXRDcmVhdGVCdXR0b24iLCJzdGFuZGFyZEFjdGlvbiIsImNvbGxlY3Rpb25FbnRpdHkiLCJzdWZmaXhSZXNvdXJjZUtleSIsIm5hbWUiLCJidXR0b25UZXh0IiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJjcmVhdGVPdXRib3VuZERldGFpbCIsImFubm90YXRpb24iLCJjcmVhdGUiLCJvdXRib3VuZERldGFpbCIsImVuYWJsZVVwbG9hZFBsdWdpbiIsIkFjdGlvbnNQbGFjZWhvbGRlciIsInBsYWNlaG9sZGVyRm9yIiwiZ2V0Q3JlYXRlTWVudSIsInZhbHVlcyIsIm5vZGVUeXBlIiwiaGFzQ3VzdG9tQ3JlYXRlRW5hYmxlbWVudCIsImNyZWF0ZUVuYWJsZW1lbnQiLCJhbGxvd2VkVmFsdWUiLCJpbmRleCIsIm1vZGVsTmFtZSIsImlzRW5hYmxlZCIsIm5vdEVxdWFsIiwidmFsdWUiLCJnZXRDcmVhdGVNZW51SXRlbVByZXNzSGFuZGxlciIsImdldERlbGV0ZUJ1dHRvbiIsImdldFN0YW5kYXJkQWN0aW9uIiwiaXNUZW1wbGF0ZWQiLCJTdGFuZGFyZEFjdGlvbktleXMiLCJDcmVhdGUiLCJpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQiLCJEZWxldGUiLCJDdXQiLCJnZXRDdXRCdXR0b24iLCJDb3B5IiwiZ2V0Q29weUJ1dHRvbiIsIlBhc3RlIiwiZ2V0UGFzdGVCdXR0b24iLCJNYXNzRWRpdCIsImdldE1hc3NFZGl0QnV0dG9uUHJlc3NIYW5kbGVyIiwiSW5zaWdodHMiLCJhZGRDYXJkVG9JbnNpZ2h0c1ByZXNzIiwiTW92ZVVwIiwiTW92ZURvd24iLCJnZXRNb3ZlVXBEb3duQnV0dG9uIiwiZ2V0QWN0aW9ucyIsImFjdGlvbnNXaXRoT3ZlcmZsb3dQcm90ZWN0aW9uIiwiZW5zdXJlUHJpbWFyeUFjdGlvbk5ldmVyT3ZlcmZsb3dzIiwiYWN0aW9ucyIsIkFjdGlvblR5cGUiLCJTdGFuZGFyZCIsIl9leHBvcnRzIiwiZ2V0QmFzaWNTZWFyY2giLCJ1c2VCYXNpY1NlYXJjaCIsImZpbHRlckJhcklkIiwiX2NvbGxlY3Rpb25Jc0RyYWZ0RW5hYmxlZCIsImlzU2VhcmNoYWJsZSIsImxhYmVsIiwiQmFzaWNTZWFyY2hNYWNybyIsInVzZURyYWZ0RWRpdFN0YXRlIiwiZ2V0RnVsbFNjcmVlbiIsImVuYWJsZUZ1bGxTY3JlZW4iLCJUYWJsZUZ1bGxTY3JlZW5CdXR0b24iLCJmb3JNb3ZlVXAiLCJ0YWJsZVR5cGUiLCJnZXRUYWJsZUFjdGlvbnNUZW1wbGF0ZSIsIk1vZGVsSGVscGVyIiwiaXNEcmFmdE5vZGUiLCJpc0RyYWZ0Um9vdCIsInNlYXJjaGFibGUiLCJiYXNpY1NlYXJjaCIsImZpbHRlckJhciIsImZ1bGxTY3JlZW4iLCJnZXRUYWJsZUNvbnRleHRNZW51VGVtcGxhdGUiLCJnZXRFeHBhbmRlZENvbGxhcHNlQWN0aW9ucyIsImV4cGFuZE5vZGUiLCJjb2xsYXBzZU5vZGUiLCJleHBhbmQiLCJlbmFibGVFeHByZXNzaW9uIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJBY3Rpb25zVGVtcGxhdGluZy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBY3Rpb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvRWRtXCI7XG5pbXBvcnQgdHlwZSB7XG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFjdGlvbixcblx0RGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcblxuaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXQsIE5hdmlnYXRpb25Qcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IGRlZXBDbG9uZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwQ2xvbmVcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGFuZCwgY29tcGlsZUV4cHJlc3Npb24sIGVxdWFsLCBub3RFcXVhbCwgcGF0aEluTW9kZWwsIHJlc29sdmVCaW5kaW5nU3RyaW5nIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBBY3Rpb25UeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHtcblx0aXNBY3Rpb25XaXRoRGlhbG9nLFxuXHRpc0RhdGFGaWVsZEZvckFjdGlvbixcblx0aXNEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25BY3Rpb24sIEJhc2VBY3Rpb24sIEN1c3RvbUFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7IEJ1dHRvblR5cGUsIGFpSWNvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgQ3JlYXRlQmVoYXZpb3JFeHRlcm5hbCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBTdGFuZGFyZEFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9TdGFuZGFyZEFjdGlvbnNcIjtcbmltcG9ydCB7IFN0YW5kYXJkQWN0aW9uS2V5cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9TdGFuZGFyZEFjdGlvbnNcIjtcbmltcG9ydCB7IFVJIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IHsgY3JlYXRlQ3VzdG9tRGF0YSB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL1RTWFV0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IEN1c3RvbUFuZEFjdGlvbiB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2NoYXJ0L01kY0NoYXJ0VGVtcGxhdGVcIjtcbmltcG9ydCB0eXBlIHsgVGFibGVCbG9ja1Byb3BlcnRpZXMsIFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnMgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9NZGNUYWJsZVRlbXBsYXRlXCI7XG5pbXBvcnQgVGFibGVGdWxsU2NyZWVuQnV0dG9uIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlRnVsbFNjcmVlbkJ1dHRvblwiO1xuaW1wb3J0IFRhYmxlSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlSGVscGVyXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBNZW51IGZyb20gXCJzYXAvbS9NZW51XCI7XG5pbXBvcnQgTWVudUJ1dHRvbiBmcm9tIFwic2FwL20vTWVudUJ1dHRvblwiO1xuaW1wb3J0IE1lbnVJdGVtIGZyb20gXCJzYXAvbS9NZW51SXRlbVwiO1xuaW1wb3J0IE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgZnJvbSBcInNhcC9tL092ZXJmbG93VG9vbGJhckxheW91dERhdGFcIjtcbmltcG9ydCB7IE1lbnVCdXR0b25Nb2RlIH0gZnJvbSBcInNhcC9tL2xpYnJhcnlcIjtcbmltcG9ydCBBY3Rpb25zUGxhY2Vob2xkZXIgZnJvbSBcInNhcC9tL3VwbG9hZC9BY3Rpb25zUGxhY2Vob2xkZXJcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IFBvcHVwIGZyb20gXCJzYXAvdWkvY29yZS9Qb3B1cFwiO1xuaW1wb3J0IEFjdGlvblRvb2xiYXJBY3Rpb24gZnJvbSBcInNhcC91aS9tZGMvYWN0aW9udG9vbGJhci9BY3Rpb25Ub29sYmFyQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEFjdGlvbkhlbHBlciBmcm9tIFwiLi4vaW50ZXJuYWwvaGVscGVycy9BY3Rpb25IZWxwZXJcIjtcbmltcG9ydCBCYXNpY1NlYXJjaE1hY3JvIGZyb20gXCIuL0Jhc2ljU2VhcmNoXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyIGZyb20gXCIuL1RhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcIjtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIE1lbnVJdGVtIGZvciB0aGUgRGF0YUZpZWxkRm9yQWN0aW9uLlxuICogQHBhcmFtIGRhdGFGaWVsZCBEYXRhRmllbGQgZm9yIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbiBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uXG4gKiBAcGFyYW0gbWVudUl0ZW1BY3Rpb24gVGhlIG1lbnVJdGVtQWN0aW9uIHRvIGJlIGV2YWx1YXRlZFxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcbiAqIEBwYXJhbSBjb2xsZWN0aW9uQ29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgY29sbGVjdGlvblxuICogQHBhcmFtIHBhcmFtZXRlcnNcbiAqIEByZXR1cm5zIFRoZSBNZW51SXRlbVxuICovXG5mdW5jdGlvbiBnZXRNZW51SXRlbUZvckFjdGlvbihcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JBY3Rpb24sXG5cdGFjdGlvbjogQmFzZUFjdGlvbiB8IEFubm90YXRpb25BY3Rpb24gfCBDdXN0b21BY3Rpb24sXG5cdG1lbnVJdGVtQWN0aW9uOiBCYXNlQWN0aW9uLFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuLFxuXHRjb2xsZWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVyc1xuKTogTWVudUl0ZW0gfCB1bmRlZmluZWQge1xuXHRpZiAoIW1lbnVJdGVtQWN0aW9uLmFubm90YXRpb25QYXRoKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRjb25zdCBhY3Rpb25Db250ZXh0UGF0aCA9IENvbW1vbkhlbHBlci5nZXRBY3Rpb25Db250ZXh0KFxuXHRcdHBhcmFtZXRlcnMubWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KG1lbnVJdGVtQWN0aW9uLmFubm90YXRpb25QYXRoICsgXCIvQWN0aW9uXCIpIVxuXHQpO1xuXHRjb25zdCBhY3Rpb25Db250ZXh0ID0gcGFyYW1ldGVycy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uQ29udGV4dFBhdGgpITtcblx0Y29uc3QgZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aCA9IGFjdGlvbkNvbnRleHRcblx0XHQ/IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMoYWN0aW9uQ29udGV4dCwgY29sbGVjdGlvbkNvbnRleHQpXG5cdFx0OiB1bmRlZmluZWQ7XG5cdGNvbnN0IGlzQm91bmQgPSBkYXRhRmllbGQuQWN0aW9uVGFyZ2V0Py5pc0JvdW5kO1xuXHRjb25zdCBpc09wZXJhdGlvbkF2YWlsYWJsZSA9IGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQ/LmFubm90YXRpb25zPy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGU/LnZhbHVlT2YoKSAhPT0gZmFsc2U7XG5cdGNvbnN0IGNvbW1hbmQgPSAhZm9yQ29udGV4dE1lbnUgPyBtZW51SXRlbUFjdGlvbi5jb21tYW5kIDogbWVudUl0ZW1BY3Rpb24uY29tbWFuZCArIFwiOjpDb250ZXh0TWVudVwiO1xuXHRjb25zdCBjb250ZXh0TWVudVRleHQgPSBmb3JDb250ZXh0TWVudSA/IFwiQ29udGV4dE1lbnVcIiA6IFwiQWN0aW9uTWVudVwiO1xuXHRjb25zdCBwcmVzc0hhbmRsZXIgPSBtZW51SXRlbUFjdGlvbi5jb21tYW5kXG5cdFx0PyB1bmRlZmluZWRcblx0XHQ6IHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvblByZXNzSGFuZGxlcihkYXRhRmllbGQsIG1lbnVJdGVtQWN0aW9uLCBhY3Rpb24sIGZvckNvbnRleHRNZW51KTtcblx0Y29uc3QgcHJlc3NDb21tYW5kID0gbWVudUl0ZW1BY3Rpb24uY29tbWFuZCA/IGBjbWQ6JHtjb21tYW5kfXxwcmVzc2AgOiB1bmRlZmluZWQ7XG5cblx0bGV0IGVuYWJsZWQ6IHN0cmluZyB8IGJvb2xlYW4gfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiA9XG5cdFx0bWVudUl0ZW1BY3Rpb24uZW5hYmxlZCAhPT0gdW5kZWZpbmVkXG5cdFx0XHQ/IG1lbnVJdGVtQWN0aW9uLmVuYWJsZWRcblx0XHRcdDogVGFibGVIZWxwZXIuaXNEYXRhRmllbGRGb3JBY3Rpb25FbmFibGVkKFxuXHRcdFx0XHRcdHRhYmxlLnRhYmxlRGVmaW5pdGlvbixcblx0XHRcdFx0XHRkYXRhRmllbGQuQWN0aW9uLFxuXHRcdFx0XHRcdCEhaXNCb3VuZCxcblx0XHRcdFx0XHRhY3Rpb25Db250ZXh0LmdldE9iamVjdCgpLFxuXHRcdFx0XHRcdG1lbnVJdGVtQWN0aW9uLmVuYWJsZU9uU2VsZWN0LFxuXHRcdFx0XHRcdGRhdGFGaWVsZERhdGFNb2RlbE9iamVjdFBhdGg/LnRhcmdldEVudGl0eVR5cGUsXG5cdFx0XHRcdFx0Zm9yQ29udGV4dE1lbnVcblx0XHRcdCAgKTtcblxuXHRpZiAodGFibGUudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuYW5hbHl0aWNhbENvbmZpZ3VyYXRpb24/LmFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwgJiYgISFpc0JvdW5kKSB7XG5cdFx0ZW5hYmxlZCA9IGNvbXBpbGVFeHByZXNzaW9uKGFuZChVSS5pc05vZGVMZXZlbE5hdmlnYWJsZSwgcmVzb2x2ZUJpbmRpbmdTdHJpbmcoZW5hYmxlZCkpKTtcblx0fVxuXHRpZiAoaXNCb3VuZCAhPT0gdHJ1ZSB8fCBpc09wZXJhdGlvbkF2YWlsYWJsZSkge1xuXHRcdGNvbnN0IGl0ZW1JZCA9IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIG1lbnVJdGVtQWN0aW9uLmtleSwgYWN0aW9uLmtleSwgY29udGV4dE1lbnVUZXh0LCBkYXRhRmllbGQsIFwiTWVudUl0ZW1Gb3JBY3Rpb25cIl0pO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0dGV4dD17ZGF0YUZpZWxkLkxhYmVsfVxuXHRcdFx0XHRpZD17aXRlbUlkfVxuXHRcdFx0XHRwcmVzcz17cHJlc3NIYW5kbGVyfVxuXHRcdFx0XHRqc3g6Y29tbWFuZD17cHJlc3NDb21tYW5kfVxuXHRcdFx0XHRlbmFibGVkPXtlbmFibGVkfVxuXHRcdFx0XHR2aXNpYmxlPXttZW51SXRlbUFjdGlvbi52aXNpYmxlfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGN1c3RvbURhdGE6IFtjcmVhdGVDdXN0b21EYXRhKFwiYWN0aW9uSWRcIiwgaXRlbUlkKV1cblx0XHRcdFx0fX1cblx0XHRcdDwvTWVudUl0ZW0+XG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBNZW51SXRlbSBmb3IgdGhlIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbi5cbiAqIEBwYXJhbSBkYXRhRmllbGQgRGF0YUZpZWxkIGZvciBJbnRlbnRCYXNlZE5hdmlnYXRpb25cbiAqIEBwYXJhbSBtZW51SXRlbUFjdGlvbiBUaGUgbWVudUl0ZW1BY3Rpb24gdG8gYmUgZXZhbHVhdGVkXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyXG4gKiBAcmV0dXJucyBUaGUgTWVudUl0ZW1cbiAqL1xuZnVuY3Rpb24gZ2V0TWVudUl0ZW1Gb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24oXG5cdGRhdGFGaWVsZDogRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRtZW51SXRlbUFjdGlvbjogQmFzZUFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudSA9IGZhbHNlLFxuXHRjb2xsZWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0YWN0aW9uOiBCYXNlQWN0aW9uIHwgQW5ub3RhdGlvbkFjdGlvbiB8IEN1c3RvbUFjdGlvbixcblx0aGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyXG4pOiBNZW51SXRlbSB7XG5cdGNvbnN0IHByZXNzSGFuZGxlciA9IG1lbnVJdGVtQWN0aW9uLmNvbW1hbmRcblx0XHQ/IHVuZGVmaW5lZFxuXHRcdDogaGFuZGxlclByb3ZpZGVyLmdldERhdGFGaWVsZEZvcklCTlByZXNzSGFuZGxlcihtZW51SXRlbUFjdGlvbiwgZm9yQ29udGV4dE1lbnUpO1xuXHRjb25zdCBwcmVzc0NvbW1hbmQgPSBtZW51SXRlbUFjdGlvbi5jb21tYW5kID8gYGNtZDoke21lbnVJdGVtQWN0aW9uLmNvbW1hbmR9fHByZXNzYCA6IHVuZGVmaW5lZDtcblxuXHRjb25zdCBlbmFibGVkID1cblx0XHRtZW51SXRlbUFjdGlvbi5lbmFibGVkICE9PSB1bmRlZmluZWRcblx0XHRcdD8gbWVudUl0ZW1BY3Rpb24uZW5hYmxlZFxuXHRcdFx0OiBUYWJsZUhlbHBlci5pc0RhdGFGaWVsZEZvcklCTkVuYWJsZWQoXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0Y29sbGVjdGlvbjogY29sbGVjdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0XHR0YWJsZURlZmluaXRpb246IHRhYmxlLnRhYmxlRGVmaW5pdGlvblxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZGF0YUZpZWxkLFxuXHRcdFx0XHRcdGRhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHQsXG5cdFx0XHRcdFx0ZGF0YUZpZWxkLk5hdmlnYXRpb25BdmFpbGFibGUsXG5cdFx0XHRcdFx0Zm9yQ29udGV4dE1lbnVcblx0XHRcdCAgKTtcblx0Y29uc3QgaWQgPSBmb3JDb250ZXh0TWVudVxuXHRcdD8gZ2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgbWVudUl0ZW1BY3Rpb24ua2V5LCBhY3Rpb24ua2V5LCBkYXRhRmllbGQsIFwiTWVudUl0ZW1JbnRlbnRCYXNlZE5hdmlnYXRpb25cIiwgXCJDb250ZXh0TWVudVwiXSlcblx0XHQ6IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIG1lbnVJdGVtQWN0aW9uLmtleSwgYWN0aW9uLmtleSwgZGF0YUZpZWxkLCBcIk1lbnVJdGVtSW50ZW50QmFzZWROYXZpZ2F0aW9uXCJdKTtcblx0cmV0dXJuIChcblx0XHQ8TWVudUl0ZW1cblx0XHRcdHRleHQ9e2RhdGFGaWVsZC5MYWJlbH1cblx0XHRcdGlkPXtpZH1cblx0XHRcdHByZXNzPXtwcmVzc0hhbmRsZXJ9XG5cdFx0XHRqc3g6Y29tbWFuZD17cHJlc3NDb21tYW5kfVxuXHRcdFx0ZW5hYmxlZD17ZW5hYmxlZH1cblx0XHRcdHZpc2libGU9e21lbnVJdGVtQWN0aW9uLnZpc2libGV9XG5cdFx0PlxuXHRcdFx0e3tcblx0XHRcdFx0Y3VzdG9tRGF0YTogW1xuXHRcdFx0XHRcdCFkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0XG5cdFx0XHRcdFx0XHQ/IGNyZWF0ZUN1c3RvbURhdGEoXCJJQk5EYXRhXCIsIHsgc2VtYW50aWNPYmplY3Q6IGRhdGFGaWVsZC5TZW1hbnRpY09iamVjdCwgYWN0aW9uOiBkYXRhRmllbGQuQWN0aW9uIH0pXG5cdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRjcmVhdGVDdXN0b21EYXRhKFwiYWN0aW9uSWRcIiwgaWQpXG5cdFx0XHRcdF1cblx0XHRcdH19XG5cdFx0PC9NZW51SXRlbT5cblx0KTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIHhtbCBzdHJpbmcgZm9yIHRoZSBNZW51SXRlbSBiYXNlZCBvbiB0aGUgdHlwZSBvZiB0aGUgbWVudUl0ZW1BY3Rpb24uXG4gKiBAcGFyYW0gYWN0aW9uIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb25cbiAqIEBwYXJhbSBtZW51SXRlbUFjdGlvbiBUaGUgbWVudUl0ZW1BY3Rpb24gdG8gYmUgZXZhbHVhdGVkXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIHhtbCBzdHJpbmcgZm9yIHRoZSBNZW51SXRlbVxuICovXG5mdW5jdGlvbiBnZXRNZW51SXRlbShcblx0YWN0aW9uOiBCYXNlQWN0aW9uIHwgQW5ub3RhdGlvbkFjdGlvbiB8IEN1c3RvbUFjdGlvbixcblx0bWVudUl0ZW1BY3Rpb246IEJhc2VBY3Rpb24sXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdGNvbGxlY3Rpb25Db250ZXh0OiBDb250ZXh0LFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzXG4pOiBNZW51SXRlbSB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGRhdGFGaWVsZCA9IG1lbnVJdGVtQWN0aW9uLmFubm90YXRpb25QYXRoXG5cdFx0PyAocGFyYW1ldGVycy5jb252ZXJ0ZWRNZXRhZGF0YS5yZXNvbHZlUGF0aChtZW51SXRlbUFjdGlvbi5hbm5vdGF0aW9uUGF0aCkudGFyZ2V0IGFzIERhdGFGaWVsZEFic3RyYWN0VHlwZXMpXG5cdFx0OiB1bmRlZmluZWQ7XG5cblx0c3dpdGNoIChkYXRhRmllbGQgJiYgbWVudUl0ZW1BY3Rpb24udHlwZSkge1xuXHRcdGNhc2UgXCJGb3JBY3Rpb25cIjpcblx0XHRcdGlmIChpc0RhdGFGaWVsZEZvckFjdGlvbihkYXRhRmllbGQpKSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQhZm9yQ29udGV4dE1lbnUgfHxcblx0XHRcdFx0XHQoZm9yQ29udGV4dE1lbnUgJiYgVGFibGVIZWxwZXIuaXNBY3Rpb25TaG93bkluQ29udGV4dE1lbnUobWVudUl0ZW1BY3Rpb24sIHRhYmxlLmNvbnRleHRPYmplY3RQYXRoKSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGdldE1lbnVJdGVtRm9yQWN0aW9uKGRhdGFGaWVsZCwgYWN0aW9uLCBtZW51SXRlbUFjdGlvbiwgdGFibGUsIGZvckNvbnRleHRNZW51LCBjb2xsZWN0aW9uQ29udGV4dCwgcGFyYW1ldGVycyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJGb3JOYXZpZ2F0aW9uXCI6XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGlzRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKGRhdGFGaWVsZCEpICYmXG5cdFx0XHRcdCghZm9yQ29udGV4dE1lbnUgfHwgKGZvckNvbnRleHRNZW51ICYmIFRhYmxlSGVscGVyLmlzQWN0aW9uU2hvd25JbkNvbnRleHRNZW51KG1lbnVJdGVtQWN0aW9uLCB0YWJsZS5jb250ZXh0T2JqZWN0UGF0aCkpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiBnZXRNZW51SXRlbUZvckludGVudEJhc2VkTmF2aWdhdGlvbihcblx0XHRcdFx0XHRkYXRhRmllbGQsXG5cdFx0XHRcdFx0bWVudUl0ZW1BY3Rpb24sXG5cdFx0XHRcdFx0dGFibGUsXG5cdFx0XHRcdFx0Zm9yQ29udGV4dE1lbnUsXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0YWN0aW9uLFxuXHRcdFx0XHRcdHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHR9XG5cblx0Y29uc3QgY29tbWFuZCA9ICFmb3JDb250ZXh0TWVudSA/IG1lbnVJdGVtQWN0aW9uLmNvbW1hbmQgOiBtZW51SXRlbUFjdGlvbi5jb21tYW5kICsgXCI6OkNvbnRleHRNZW51XCI7XG5cdGNvbnN0IHByZXNzSGFuZGxlciA9IG1lbnVJdGVtQWN0aW9uLmNvbW1hbmRcblx0XHQ/IHVuZGVmaW5lZFxuXHRcdDogcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0TWFuaWZlc3RBY3Rpb25QcmVzc0hhbmRsZXIobWVudUl0ZW1BY3Rpb24gYXMgQ3VzdG9tQWN0aW9uLCBmb3JDb250ZXh0TWVudSk7XG5cdGNvbnN0IHByZXNzQ29tbWFuZCA9IG1lbnVJdGVtQWN0aW9uLmNvbW1hbmQgPyBgY21kOiR7Y29tbWFuZH18cHJlc3NgIDogdW5kZWZpbmVkO1xuXHRsZXQgZW5hYmxlZCA9ICFmb3JDb250ZXh0TWVudSA/IG1lbnVJdGVtQWN0aW9uLmVuYWJsZWQgOiAobWVudUl0ZW1BY3Rpb24gYXMgQ3VzdG9tQWN0aW9uKS5lbmFibGVkRm9yQ29udGV4dE1lbnU7XG5cdGlmIChcblx0XHQobWVudUl0ZW1BY3Rpb24gYXMgQ3VzdG9tQWN0aW9uKS5yZXF1aXJlc1NlbGVjdGlvbiAmJlxuXHRcdHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmFuYWx5dGljYWxDb25maWd1cmF0aW9uPy5hZ2dyZWdhdGlvbk9uTGVhZkxldmVsXG5cdCkge1xuXHRcdGVuYWJsZWQgPSBjb21waWxlRXhwcmVzc2lvbihhbmQocmVzb2x2ZUJpbmRpbmdTdHJpbmcoZW5hYmxlZCA/PyBcIlwiKSwgVUkuaXNOb2RlTGV2ZWxOYXZpZ2FibGUpKTtcblx0fVxuXHRjb25zdCBjb250ZXh0TWVudVRleHQgPSBmb3JDb250ZXh0TWVudSA/IFwiQ29udGV4dE1lbnVcIiA6IFwiQWN0aW9uTWVudVwiO1xuXHRjb25zdCBpdGVtSWQgPSBnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBtZW51SXRlbUFjdGlvbi5rZXksIGNvbnRleHRNZW51VGV4dCwgYWN0aW9uLmtleSwgZGF0YUZpZWxkLCBcIk1lbnVJdGVtXCJdKTtcblx0cmV0dXJuIChcblx0XHQ8TWVudUl0ZW1cblx0XHRcdGNvcmU6cmVxdWlyZT1cIntGUE06ICdzYXAvZmUvY29yZS9oZWxwZXJzL0ZQTUhlbHBlcid9XCJcblx0XHRcdHRleHQ9e21lbnVJdGVtQWN0aW9uPy50ZXh0fVxuXHRcdFx0aWQ9e2l0ZW1JZH1cblx0XHRcdHByZXNzPXtwcmVzc0hhbmRsZXJ9XG5cdFx0XHRqc3g6Y29tbWFuZD17cHJlc3NDb21tYW5kfVxuXHRcdFx0dmlzaWJsZT17bWVudUl0ZW1BY3Rpb24udmlzaWJsZX1cblx0XHRcdGVuYWJsZWQ9e2VuYWJsZWR9XG5cdFx0PlxuXHRcdFx0e3tcblx0XHRcdFx0Y3VzdG9tRGF0YTogW2NyZWF0ZUN1c3RvbURhdGEoXCJhY3Rpb25JZFwiLCBpdGVtSWQpXVxuXHRcdFx0fX1cblx0XHQ8L01lbnVJdGVtPlxuXHQpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgY29udHJvbCBmb3IgdGhlIERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvbi5cbiAqIEBwYXJhbSBkYXRhRmllbGQgRGF0YUZpZWxkIGZvciBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24gVGhlIG5hbWUgb2YgdGhlIGFjdGlvblxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcbiAqIEBwYXJhbSBjb2xsZWN0aW9uQ29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgY29sbGVjdGlvblxuICogQHBhcmFtIHBhcmFtZXRlcnNcbiAqIEByZXR1cm5zIFRoZSBjb250cm9sIGZvciB0aGUgRGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uXG4gKi9cbmZ1bmN0aW9uIGdldERhdGFGaWVsZEJ1dHRvbkZvckFjdGlvbihcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JBY3Rpb24sXG5cdGFjdGlvbjogQmFzZUFjdGlvbiB8IEFubm90YXRpb25BY3Rpb24gfCBDdXN0b21BY3Rpb24sXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdGNvbGxlY3Rpb25Db250ZXh0OiBDb250ZXh0LFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzXG4pOiBCdXR0b24gfCBNZW51SXRlbSB7XG5cdGNvbnN0IGRhdGFGaWVsZEFjdGlvbkNvbnRleHQgPSBwYXJhbWV0ZXJzLm1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChhY3Rpb24uYW5ub3RhdGlvblBhdGggKyBcIi9BY3Rpb25cIikhO1xuXHRjb25zdCBhY3Rpb25Db250ZXh0UGF0aCA9IENvbW1vbkhlbHBlci5nZXRBY3Rpb25Db250ZXh0KGRhdGFGaWVsZEFjdGlvbkNvbnRleHQpO1xuXHRjb25zdCBhY3Rpb25Db250ZXh0ID0gcGFyYW1ldGVycy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uQ29udGV4dFBhdGgpITtcblx0Y29uc3QgZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aCA9IGFjdGlvbkNvbnRleHRcblx0XHQ/IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8QWN0aW9uPihhY3Rpb25Db250ZXh0LCBjb2xsZWN0aW9uQ29udGV4dClcblx0XHQ6IHVuZGVmaW5lZDtcblx0Y29uc3QgaXNCb3VuZCA9IGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQ/LmlzQm91bmQ7XG5cdGNvbnN0IGNvbW1hbmQgPSAhZm9yQ29udGV4dE1lbnUgPyBhY3Rpb24uY29tbWFuZCA6IGFjdGlvbi5jb21tYW5kICsgXCI6OkNvbnRleHRNZW51XCI7XG5cdGNvbnN0IHByZXNzSGFuZGxlciA9IGFjdGlvbi5jb21tYW5kXG5cdFx0PyB1bmRlZmluZWRcblx0XHQ6IHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvblByZXNzSGFuZGxlcihkYXRhRmllbGQsIGFjdGlvbiwgdW5kZWZpbmVkLCBmb3JDb250ZXh0TWVudSk7XG5cdGNvbnN0IHByZXNzQ29tbWFuZCA9IGFjdGlvbi5jb21tYW5kID8gYGNtZDoke2NvbW1hbmR9fHByZXNzYCA6IHVuZGVmaW5lZDtcblx0Y29uc3QgZW5hYmxlZCA9XG5cdFx0YWN0aW9uLmVuYWJsZWQgIT09IHVuZGVmaW5lZFxuXHRcdFx0PyBhY3Rpb24uZW5hYmxlZFxuXHRcdFx0OiBUYWJsZUhlbHBlci5pc0RhdGFGaWVsZEZvckFjdGlvbkVuYWJsZWQoXG5cdFx0XHRcdFx0dGFibGUudGFibGVEZWZpbml0aW9uLFxuXHRcdFx0XHRcdGRhdGFGaWVsZC5BY3Rpb24sXG5cdFx0XHRcdFx0ISFpc0JvdW5kLFxuXHRcdFx0XHRcdGFjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KCksXG5cdFx0XHRcdFx0YWN0aW9uLmVuYWJsZU9uU2VsZWN0LFxuXHRcdFx0XHRcdGRhdGFGaWVsZERhdGFNb2RlbE9iamVjdFBhdGg/LnRhcmdldEVudGl0eVR5cGUsXG5cdFx0XHRcdFx0Zm9yQ29udGV4dE1lbnVcblx0XHRcdCAgKTtcblx0Y29uc3QgaWNvbiA9IGFjdGlvbi5pc0FJT3BlcmF0aW9uID09PSB0cnVlID8gYWlJY29uIDogdW5kZWZpbmVkO1xuXHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0Ly8gZm9yIHRhYmxlIHRvb2xiYXJcblx0XHRjb25zdCB0b29sYmFyQWN0aW9uSWQgPSBnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBkYXRhRmllbGRdKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRpZD17dG9vbGJhckFjdGlvbklkfVxuXHRcdFx0XHR0ZXh0PXtkYXRhRmllbGQuTGFiZWx9XG5cdFx0XHRcdGljb249e2ljb259XG5cdFx0XHRcdGFyaWFIYXNQb3B1cD17aXNBY3Rpb25XaXRoRGlhbG9nKGRhdGFGaWVsZCl9XG5cdFx0XHRcdHByZXNzPXtwcmVzc0hhbmRsZXJ9XG5cdFx0XHRcdGpzeDpjb21tYW5kPXtwcmVzc0NvbW1hbmR9XG5cdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuVHJhbnNwYXJlbnR9XG5cdFx0XHRcdGVuYWJsZWQ9e2VuYWJsZWR9XG5cdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGN1c3RvbURhdGE6IFtjcmVhdGVDdXN0b21EYXRhKFwiYWN0aW9uSWRcIiwgdG9vbGJhckFjdGlvbklkKV0sXG5cdFx0XHRcdFx0bGF5b3V0RGF0YTogPE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgcHJpb3JpdHk9e2FjdGlvbi5wcmlvcml0eX0gZ3JvdXA9e2FjdGlvbi5ncm91cH0+PC9PdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9CdXR0b24+XG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHQvLyBmb3IgY29udGV4dCBtZW51XG5cdFx0Y29uc3QgdGFibGVBY3Rpb25Db250ZXh0TWVudUlkID0gZ2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgZGF0YUZpZWxkLCBcIkNvbnRleHRNZW51XCJdKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdGlkPXt0YWJsZUFjdGlvbkNvbnRleHRNZW51SWR9XG5cdFx0XHRcdHRleHQ9e2RhdGFGaWVsZC5MYWJlbH1cblx0XHRcdFx0aWNvbj17aWNvbn1cblx0XHRcdFx0cHJlc3M9e3ByZXNzSGFuZGxlcn1cblx0XHRcdFx0anN4OmNvbW1hbmQ9e3ByZXNzQ29tbWFuZH1cblx0XHRcdFx0ZW5hYmxlZD17ZW5hYmxlZH1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjdXN0b21EYXRhOiBbY3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIHRhYmxlQWN0aW9uQ29udGV4dE1lbnVJZCldXG5cdFx0XHRcdH19XG5cdFx0XHQ8L01lbnVJdGVtPlxuXHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNvbnRyb2wgZm9yIHRoZSBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gQnV0dG9uLlxuICogQHBhcmFtIGRhdGFGaWVsZCBEYXRhRmllbGQgZm9yIEludGVudEJhc2VkTmF2aWdhdGlvblxuICogQHBhcmFtIGFjdGlvbiBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyXG4gKiBAcmV0dXJucyBUaGUgY29udHJvbCBmb3IgdGhlIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiBidXR0b24vbWVudSBpdGVtXG4gKi9cbmZ1bmN0aW9uIGdldERhdGFGaWVsZEJ1dHRvbkZvckludGVudEJhc2VkTmF2aWdhdGlvbihcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdGFjdGlvbjogQmFzZUFjdGlvbiB8IEFubm90YXRpb25BY3Rpb24gfCBDdXN0b21BY3Rpb24sXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdGNvbGxlY3Rpb25Db250ZXh0OiBDb250ZXh0LFxuXHRoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcbik6IEJ1dHRvbiB8IE1lbnVJdGVtIHtcblx0Y29uc3QgY29tbWFuZCA9ICFmb3JDb250ZXh0TWVudSA/IGFjdGlvbi5jb21tYW5kIDogYWN0aW9uLmNvbW1hbmQgKyBcIjo6Q29udGV4dE1lbnVcIjtcblx0Y29uc3QgcHJlc3NIYW5kbGVyID0gYWN0aW9uLmNvbW1hbmQgPyB1bmRlZmluZWQgOiBoYW5kbGVyUHJvdmlkZXIuZ2V0RGF0YUZpZWxkRm9ySUJOUHJlc3NIYW5kbGVyKGFjdGlvbiwgZm9yQ29udGV4dE1lbnUpO1xuXHRjb25zdCBwcmVzc0NvbW1hbmQgPSBhY3Rpb24uY29tbWFuZCA/IGBjbWQ6JHtjb21tYW5kfXxwcmVzc2AgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IGVuYWJsZWQgPVxuXHRcdGFjdGlvbi5lbmFibGVkICE9PSB1bmRlZmluZWRcblx0XHRcdD8gYWN0aW9uLmVuYWJsZWRcblx0XHRcdDogVGFibGVIZWxwZXIuaXNEYXRhRmllbGRGb3JJQk5FbmFibGVkKFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb246IGNvbGxlY3Rpb25Db250ZXh0LFxuXHRcdFx0XHRcdFx0dGFibGVEZWZpbml0aW9uOiB0YWJsZS50YWJsZURlZmluaXRpb25cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0XHRkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0LFxuXHRcdFx0XHRcdGRhdGFGaWVsZC5OYXZpZ2F0aW9uQXZhaWxhYmxlLFxuXHRcdFx0XHRcdGZvckNvbnRleHRNZW51XG5cdFx0XHQgICk7XG5cdGNvbnN0IElCTkRhdGEgPSAhZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dCA/IHsgc2VtYW50aWNPYmplY3Q6IGRhdGFGaWVsZC5TZW1hbnRpY09iamVjdCwgYWN0aW9uOiBkYXRhRmllbGQuQWN0aW9uIH0gOiB1bmRlZmluZWQ7XG5cdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHQvLyBmb3IgdGFibGUgdG9vbGJhclxuXHRcdGNvbnN0IHRvb2xiYXJBY3Rpb25JZCA9IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGRhdGFGaWVsZF0pO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdGlkPXt0b29sYmFyQWN0aW9uSWR9XG5cdFx0XHRcdHRleHQ9e2RhdGFGaWVsZC5MYWJlbH1cblx0XHRcdFx0cHJlc3M9e3ByZXNzSGFuZGxlcn1cblx0XHRcdFx0anN4OmNvbW1hbmQ9e3ByZXNzQ29tbWFuZH1cblx0XHRcdFx0dHlwZT17QnV0dG9uVHlwZS5UcmFuc3BhcmVudH1cblx0XHRcdFx0ZW5hYmxlZD17ZW5hYmxlZH1cblx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGV9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogW2NyZWF0ZUN1c3RvbURhdGEoXCJJQk5EYXRhXCIsIElCTkRhdGEpLCBjcmVhdGVDdXN0b21EYXRhKFwiYWN0aW9uSWRcIiwgdG9vbGJhckFjdGlvbklkKV1cblx0XHRcdFx0fX1cblx0XHRcdDwvQnV0dG9uPlxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gZm9yIGNvbnRleHQgbWVudVxuXHRcdGNvbnN0IHRhYmxlQWN0aW9uQ29udGV4dE1lbnVJZCA9IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGRhdGFGaWVsZCwgXCJDb250ZXh0TWVudVwiXSk7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRpZD17dGFibGVBY3Rpb25Db250ZXh0TWVudUlkfVxuXHRcdFx0XHR0ZXh0PXtkYXRhRmllbGQuTGFiZWx9XG5cdFx0XHRcdHByZXNzPXtwcmVzc0hhbmRsZXJ9XG5cdFx0XHRcdGpzeDpjb21tYW5kPXtwcmVzc0NvbW1hbmR9XG5cdFx0XHRcdGVuYWJsZWQ9e2VuYWJsZWR9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogW2NyZWF0ZUN1c3RvbURhdGEoXCJJQk5EYXRhXCIsIElCTkRhdGEpLCBjcmVhdGVDdXN0b21EYXRhKFwiYWN0aW9uSWRcIiwgdGFibGVBY3Rpb25Db250ZXh0TWVudUlkKV1cblx0XHRcdFx0fX1cblx0XHRcdDwvTWVudUl0ZW0+XG5cdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgY29udHJvbCBmb3IgdGhlIGJ1dHRvbiBiYXNlZCBvbiB0aGUgdHlwZSBvZiB0aGUgYWN0aW9uLlxuICogQHBhcmFtIGFjdGlvbiBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIGNvbnRyb2wgZm9yIHRoZSBidXR0b24vbWVudSBpdGVtXG4gKi9cbmZ1bmN0aW9uIGdldERhdGFGaWVsZEJ1dHRvbihcblx0YWN0aW9uOiBCYXNlQWN0aW9uIHwgQW5ub3RhdGlvbkFjdGlvbiB8IEN1c3RvbUFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0Y29sbGVjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnNcbik6IEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGRhdGFGaWVsZCA9IGFjdGlvbi5hbm5vdGF0aW9uUGF0aFxuXHRcdD8gKHBhcmFtZXRlcnMuY29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGgoYWN0aW9uLmFubm90YXRpb25QYXRoKS50YXJnZXQgYXMgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcylcblx0XHQ6IHVuZGVmaW5lZDtcblx0bGV0IHRlbXBsYXRlOiBNZW51SXRlbSB8IEJ1dHRvbiB8IHVuZGVmaW5lZDtcblx0aWYgKCFkYXRhRmllbGQpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcblx0XHRjYXNlIFwiRm9yQWN0aW9uXCI6XG5cdFx0XHRpZiAoaXNEYXRhRmllbGRGb3JBY3Rpb24oZGF0YUZpZWxkKSkge1xuXHRcdFx0XHRjb25zdCBpc0JvdW5kID0gZGF0YUZpZWxkLkFjdGlvblRhcmdldD8uaXNCb3VuZDtcblx0XHRcdFx0aWYgKCEhaXNCb3VuZCAmJiB0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC5hbmFseXRpY2FsQ29uZmlndXJhdGlvbj8uYWdncmVnYXRpb25PbkxlYWZMZXZlbCkge1xuXHRcdFx0XHRcdGFjdGlvbiA9IGRlZXBDbG9uZShhY3Rpb24pO1xuXHRcdFx0XHRcdGFjdGlvbi5lbmFibGVkID0gY29tcGlsZUV4cHJlc3Npb24oYW5kKHJlc29sdmVCaW5kaW5nU3RyaW5nKGFjdGlvbi5lbmFibGVkID8/IFwiXCIpLCBVSS5pc05vZGVMZXZlbE5hdmlnYWJsZSkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGlzT3BlcmF0aW9uQXZhaWxhYmxlID0gZGF0YUZpZWxkLkFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZT8udmFsdWVPZigpICE9PSBmYWxzZTtcblx0XHRcdFx0Ly8gc2hvdyBvbmx5IGJvdW5kIGFjdGlvbnMgaW4gY29udGV4dCBtZW51XG5cdFx0XHRcdGlmICghZm9yQ29udGV4dE1lbnUgfHwgVGFibGVIZWxwZXIuaXNBY3Rpb25TaG93bkluQ29udGV4dE1lbnUoYWN0aW9uLCB0YWJsZS5jb250ZXh0T2JqZWN0UGF0aCkpIHtcblx0XHRcdFx0XHRpZiAoaXNCb3VuZCAhPT0gdHJ1ZSB8fCBpc09wZXJhdGlvbkF2YWlsYWJsZSkge1xuXHRcdFx0XHRcdFx0dGVtcGxhdGUgPSBnZXREYXRhRmllbGRCdXR0b25Gb3JBY3Rpb24oZGF0YUZpZWxkLCBhY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSwgY29sbGVjdGlvbkNvbnRleHQsIHBhcmFtZXRlcnMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkZvck5hdmlnYXRpb25cIjpcblx0XHRcdGlmIChcblx0XHRcdFx0aXNEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24oZGF0YUZpZWxkKSAmJlxuXHRcdFx0XHQoIWZvckNvbnRleHRNZW51IHx8IFRhYmxlSGVscGVyLmlzQWN0aW9uU2hvd25JbkNvbnRleHRNZW51KGFjdGlvbiwgdGFibGUuY29udGV4dE9iamVjdFBhdGgpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHRlbXBsYXRlID0gZ2V0RGF0YUZpZWxkQnV0dG9uRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKFxuXHRcdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0XHRhY3Rpb24sXG5cdFx0XHRcdFx0dGFibGUsXG5cdFx0XHRcdFx0Zm9yQ29udGV4dE1lbnUsXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0cGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXJcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdH1cblxuXHRpZiAodGVtcGxhdGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0Ly8gZm9yIHRhYmxlIHRvb2xiYXJcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5pZCwgZGF0YUZpZWxkLCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHRkdDpkZXNpZ250aW1lPXthY3Rpb24udmlzaWJsZSA9PT0gXCJ0cnVlXCIgfHwgYWN0aW9uLnZpc2libGUgPT09IFwiZmFsc2VcIiA/IHVuZGVmaW5lZCA6IFwibm90LWFkYXB0YWJsZS12aXNpYmlsaXR5XCJ9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0YWN0aW9uOiB0ZW1wbGF0ZVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gZm9yIGNvbnRleHQgbWVudVxuXHRcdHJldHVybiB0ZW1wbGF0ZSBhcyBNZW51SXRlbTtcblx0fVxufVxuXG4vKipcbiAqIEdldHMgdGhlIGRlZmF1bHQgYWN0aW9uIGhhbmRsZXIgdGhhdCBpcyBpbnZva2VkIHdoZW4gYWRkaW5nIHRoZSBtZW51IGJ1dHRvbi5cbiAqIEBwYXJhbSBkZWZhdWx0QWN0aW9uIFRoZSBkZWZhdWx0IGFjdGlvbiBvZiB0aGUgbWVudVxuICogQHBhcmFtIGRhdGFGaWVsZEZvckRlZmF1bHRBY3Rpb24gVGhlIGRhdGFGaWVsZCBmb3IgdGhlIGRlZmF1bHQgYWN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIGNvcnJlc3BvbmRpbmcgZXZlbnQgaGFuZGxlciBvciBjb21tYW5kXG4gKi9cbmZ1bmN0aW9uIGdldERlZmF1bHRNZW51QnV0dG9uQWN0aW9uKFxuXHRkZWZhdWx0QWN0aW9uOiBDdXN0b21BY3Rpb24gfCB1bmRlZmluZWQsXG5cdGRhdGFGaWVsZEZvckRlZmF1bHRBY3Rpb246IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiB8IERhdGFGaWVsZEZvckFjdGlvbiB8IHVuZGVmaW5lZCxcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVyc1xuKTogeyBoYW5kbGVyPzogKGU6IFVJNUV2ZW50KSA9PiB2b2lkOyBjb21tYW5kPzogc3RyaW5nIH0ge1xuXHRpZiAoIWRlZmF1bHRBY3Rpb24pIHtcblx0XHRyZXR1cm4ge307XG5cdH1cblxuXHR0cnkge1xuXHRcdHN3aXRjaCAoZGVmYXVsdEFjdGlvbi50eXBlKSB7XG5cdFx0XHRjYXNlIFwiRm9yQWN0aW9uXCI6XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0aGFuZGxlcjogcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0RGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uUHJlc3NIYW5kbGVyKFxuXHRcdFx0XHRcdFx0ZGF0YUZpZWxkRm9yRGVmYXVsdEFjdGlvbiBhcyBEYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdFx0XHRkZWZhdWx0QWN0aW9uLFxuXHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0ZmFsc2Vcblx0XHRcdFx0XHQpXG5cdFx0XHRcdH07XG5cblx0XHRcdGNhc2UgXCJGb3JOYXZpZ2F0aW9uXCI6XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0aGFuZGxlcjogcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0RGF0YUZpZWxkRm9ySUJOUHJlc3NIYW5kbGVyKGRlZmF1bHRBY3Rpb24sIGZhbHNlKVxuXHRcdFx0XHR9O1xuXG5cdFx0XHRkZWZhdWx0OiB7XG5cdFx0XHRcdGlmIChkZWZhdWx0QWN0aW9uLmNvbW1hbmQpIHtcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0Y29tbWFuZDogYGNtZDoke2RlZmF1bHRBY3Rpb24uY29tbWFuZH18ZGVmYXVsdEFjdGlvbmBcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRoYW5kbGVyOiBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXRNYW5pZmVzdEFjdGlvblByZXNzSGFuZGxlcihkZWZhdWx0QWN0aW9uLCBmYWxzZSlcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBjb250cm9sIGZvciB0aGUgTWVudUJ1dHRvbiBjb250cm9sIHdoaWNoIGVuYWJsZXMgdGhlIHVzZXIgdG8gc2hvdyBhIGhpZXJhcmNoaWNhbCBtZW51LlxuICogQHBhcmFtIGFjdGlvbiBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIE1lbnVCdXR0b24gY29udHJvbFxuICovXG5mdW5jdGlvbiBnZXRNZW51QnV0dG9uKFxuXHRhY3Rpb246IEJhc2VBY3Rpb24gfCBBbm5vdGF0aW9uQWN0aW9uIHwgQ3VzdG9tQWN0aW9uLFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuLFxuXHRjb2xsZWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVyc1xuKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHwgdW5kZWZpbmVkIHtcblx0aWYgKChhY3Rpb24gYXMgQ3VzdG9tQWN0aW9uKS5yZXF1aXJlc1NlbGVjdGlvbiAmJiB0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC5hbmFseXRpY2FsQ29uZmlndXJhdGlvbj8uYWdncmVnYXRpb25PbkxlYWZMZXZlbCkge1xuXHRcdGFjdGlvbiA9IGRlZXBDbG9uZShhY3Rpb24pO1xuXHRcdGFjdGlvbi5lbmFibGVkID0gY29tcGlsZUV4cHJlc3Npb24oYW5kKHJlc29sdmVCaW5kaW5nU3RyaW5nKGFjdGlvbi5lbmFibGVkID8/IFwiXCIpLCBVSS5pc05vZGVMZXZlbE5hdmlnYWJsZSkpO1xuXHR9XG5cdGNvbnN0IGljb24gPSBhY3Rpb24uaXNBSU9wZXJhdGlvbiA9PT0gdHJ1ZSA/IGFpSWNvbiA6IHVuZGVmaW5lZDtcblx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdC8vIGZvciB0YWJsZSB0b29sYmFyXG5cdFx0Y29uc3QgZGVmYXVsdEFjdGlvbiA9IChhY3Rpb24gYXMgQ3VzdG9tQWN0aW9uKS5kZWZhdWx0QWN0aW9uIGFzIEN1c3RvbUFjdGlvbiB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBkYXRhRmllbGRGb3JEZWZhdWx0QWN0aW9uID0gZGVmYXVsdEFjdGlvbj8uYW5ub3RhdGlvblBhdGhcblx0XHRcdD8gcGFyYW1ldGVycy5jb252ZXJ0ZWRNZXRhZGF0YS5yZXNvbHZlUGF0aDxEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24+KGRlZmF1bHRBY3Rpb24uYW5ub3RhdGlvblBhdGgpXG5cdFx0XHRcdFx0LnRhcmdldFxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZGVmYXVsdEFjdGlvbkhhbmRsZXJzID0gZ2V0RGVmYXVsdE1lbnVCdXR0b25BY3Rpb24oZGVmYXVsdEFjdGlvbiwgZGF0YUZpZWxkRm9yRGVmYXVsdEFjdGlvbiwgcGFyYW1ldGVycyk7XG5cdFx0Y29uc3QgbWVudUl0ZW1zID0gYWN0aW9uLm1lbnVcblx0XHRcdD8uZmlsdGVyKChtZW51SXRlbUFjdGlvbikgPT4gdHlwZW9mIG1lbnVJdGVtQWN0aW9uICE9PSBcInN0cmluZ1wiKVxuXHRcdFx0Lm1hcCgobWVudUl0ZW1BY3Rpb24pID0+IHtcblx0XHRcdFx0cmV0dXJuIGdldE1lbnVJdGVtKGFjdGlvbiwgbWVudUl0ZW1BY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSwgY29sbGVjdGlvbkNvbnRleHQsIHBhcmFtZXRlcnMpO1xuXHRcdFx0fSlcblx0XHRcdC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0gIT09IHVuZGVmaW5lZCk7XG5cblx0XHRpZiAobWVudUl0ZW1zPy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IG1lbnVJZCA9IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5pZF0pO1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgYWN0aW9uLmlkLCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHRcdGR0OmRlc2lnbnRpbWU9e2FjdGlvbi52aXNpYmxlID09PSBcInRydWVcIiB8fCBhY3Rpb24udmlzaWJsZSA9PT0gXCJmYWxzZVwiID8gdW5kZWZpbmVkIDogXCJub3QtYWRhcHRhYmxlLXZpc2liaWxpdHlcIn1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxNZW51QnV0dG9uXG5cdFx0XHRcdFx0XHR0ZXh0PXthY3Rpb24udGV4dH1cblx0XHRcdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuVHJhbnNwYXJlbnR9XG5cdFx0XHRcdFx0XHRtZW51UG9zaXRpb249e1BvcHVwLkRvY2suQmVnaW5Cb3R0b219XG5cdFx0XHRcdFx0XHRpZD17bWVudUlkfVxuXHRcdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGV9XG5cdFx0XHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZH1cblx0XHRcdFx0XHRcdHVzZURlZmF1bHRBY3Rpb25Pbmx5PXshIShhY3Rpb24gYXMgQ3VzdG9tQW5kQWN0aW9uKS5kZWZhdWx0QWN0aW9ufVxuXHRcdFx0XHRcdFx0aWNvbj17aWNvbn1cblx0XHRcdFx0XHRcdGJ1dHRvbk1vZGU9eyhhY3Rpb24gYXMgQ3VzdG9tQW5kQWN0aW9uKS5kZWZhdWx0QWN0aW9uID8gTWVudUJ1dHRvbk1vZGUuU3BsaXQgOiBNZW51QnV0dG9uTW9kZS5SZWd1bGFyfVxuXHRcdFx0XHRcdFx0ZGVmYXVsdEFjdGlvbj17ZGVmYXVsdEFjdGlvbkhhbmRsZXJzLmhhbmRsZXJ9XG5cdFx0XHRcdFx0XHRqc3g6Y29tbWFuZD17ZGVmYXVsdEFjdGlvbkhhbmRsZXJzLmNvbW1hbmR9XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0Y3VzdG9tRGF0YTogW2NyZWF0ZUN1c3RvbURhdGEoXCJhY3Rpb25JZFwiLCBtZW51SWQpXSxcblx0XHRcdFx0XHRcdFx0bWVudTogPE1lbnU+e21lbnVJdGVtc308L01lbnU+LFxuXHRcdFx0XHRcdFx0XHRsYXlvdXREYXRhOiAoXG5cdFx0XHRcdFx0XHRcdFx0PE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgcHJpb3JpdHk9e2FjdGlvbi5wcmlvcml0eX0gZ3JvdXA9e2FjdGlvbi5ncm91cH0+PC9PdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhPlxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdDwvTWVudUJ1dHRvbj5cblx0XHRcdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Ly8gZm9yIGNvbnRleHQgbWVudVxuXHRcdGNvbnN0IG1lbnVJdGVtc0ZvckNvbnRleHRNZW51OiBCYXNlQWN0aW9uW10gPSBbXTtcblx0XHRhY3Rpb24ubWVudT8uZm9yRWFjaCgobWVudUl0ZW1BY3Rpb24pID0+IHtcblx0XHRcdGlmICh0eXBlb2YgbWVudUl0ZW1BY3Rpb24gIT09IFwic3RyaW5nXCIgJiYgVGFibGVIZWxwZXIuaXNBY3Rpb25TaG93bkluQ29udGV4dE1lbnUobWVudUl0ZW1BY3Rpb24sIHRhYmxlLmNvbnRleHRPYmplY3RQYXRoKSkge1xuXHRcdFx0XHRtZW51SXRlbXNGb3JDb250ZXh0TWVudT8ucHVzaChtZW51SXRlbUFjdGlvbik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRjb25zdCBtZW51SXRlbXMgPSBtZW51SXRlbXNGb3JDb250ZXh0TWVudVxuXHRcdFx0LmZpbHRlcigobWVudUl0ZW1BY3Rpb24pID0+IHR5cGVvZiBtZW51SXRlbUFjdGlvbiAhPT0gXCJzdHJpbmdcIilcblx0XHRcdC5tYXAoKG1lbnVJdGVtQWN0aW9uKSA9PiB7XG5cdFx0XHRcdHJldHVybiBnZXRNZW51SXRlbShhY3Rpb24sIG1lbnVJdGVtQWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUsIGNvbGxlY3Rpb25Db250ZXh0LCBwYXJhbWV0ZXJzKTtcblx0XHRcdH0pXG5cdFx0XHQuZmlsdGVyKChpdGVtKSA9PiBpdGVtICE9PSB1bmRlZmluZWQpO1xuXG5cdFx0aWYgKG1lbnVJdGVtcz8ubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0XHR0ZXh0PXthY3Rpb24udGV4dH1cblx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgYWN0aW9uLmlkLCBcIkNvbnRleHRNZW51XCJdKX1cblx0XHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51fVxuXHRcdFx0XHRcdGljb249e2ljb259XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0aXRlbXM6IG1lbnVJdGVtc1xuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvTWVudUl0ZW0+XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgeG1sIHN0cmluZyBmb3IgdGhlIGRlZmF1bHQgYnV0dG9uLlxuICogQHBhcmFtIGFjdGlvbiBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlclxuICogQHJldHVybnMgVGhlIHhtbCBzdHJpbmcgZm9yIHRoZSBkZWZhdWx0IGJ1dHRvbi5cbiAqL1xuZnVuY3Rpb24gZ2V0RGVmYXVsdEJ1dHRvbihcblx0YWN0aW9uOiBDdXN0b21BY3Rpb24sXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclxuKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgY29tbWFuZCA9ICFmb3JDb250ZXh0TWVudSA/IGFjdGlvbi5jb21tYW5kIDogYWN0aW9uLmNvbW1hbmQgKyBcIjo6Q29udGV4dE1lbnVcIjtcblx0Y29uc3QgcHJlc3NIYW5kbGVyID0gYWN0aW9uLmNvbW1hbmQgPyB1bmRlZmluZWQgOiBoYW5kbGVyUHJvdmlkZXIuZ2V0TWFuaWZlc3RBY3Rpb25QcmVzc0hhbmRsZXIoYWN0aW9uLCBmb3JDb250ZXh0TWVudSk7XG5cdGNvbnN0IHByZXNzQ29tbWFuZCA9IGFjdGlvbi5jb21tYW5kID8gYGNtZDoke2NvbW1hbmR9fHByZXNzYCA6IHVuZGVmaW5lZDtcblxuXHRpZiAoYWN0aW9uLnJlcXVpcmVzU2VsZWN0aW9uICYmIHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmFuYWx5dGljYWxDb25maWd1cmF0aW9uPy5hZ2dyZWdhdGlvbk9uTGVhZkxldmVsKSB7XG5cdFx0YWN0aW9uID0gZGVlcENsb25lKGFjdGlvbik7XG5cdFx0YWN0aW9uLmVuYWJsZWQgPSBjb21waWxlRXhwcmVzc2lvbihhbmQocmVzb2x2ZUJpbmRpbmdTdHJpbmcoYWN0aW9uLmVuYWJsZWQgPz8gXCJcIiksIFVJLmlzTm9kZUxldmVsTmF2aWdhYmxlKSk7XG5cdFx0YWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0YW5kKHJlc29sdmVCaW5kaW5nU3RyaW5nKGFjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgPz8gXCJcIiksIFVJLmlzTm9kZUxldmVsTmF2aWdhYmxlKVxuXHRcdCk7XG5cdH1cblx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdC8vIGZvciB0YWJsZSB0b29sYmFyXG5cdFx0cmV0dXJuIChcblx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24uaWQsIFwiQWN0aW9uVG9vbGJhckFjdGlvblwiXSl9XG5cdFx0XHRcdGR0OmRlc2lnbnRpbWU9e2FjdGlvbi52aXNpYmxlID09PSBcInRydWVcIiB8fCBhY3Rpb24udmlzaWJsZSA9PT0gXCJmYWxzZVwiID8gdW5kZWZpbmVkIDogXCJub3QtYWRhcHRhYmxlLXZpc2liaWxpdHlcIn1cblx0XHRcdD5cblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGNvcmU6cmVxdWlyZT1cIntGUE06ICdzYXAvZmUvY29yZS9oZWxwZXJzL0ZQTUhlbHBlcid9XCJcblx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgYWN0aW9uLmlkXSl9XG5cdFx0XHRcdFx0dGV4dD17YWN0aW9uLnRleHR9XG5cdFx0XHRcdFx0cHJlc3M9e3ByZXNzSGFuZGxlcn1cblx0XHRcdFx0XHRqc3g6Y29tbWFuZD17cHJlc3NDb21tYW5kfVxuXHRcdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuVHJhbnNwYXJlbnR9XG5cdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGV9XG5cdFx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWR9XG5cdFx0XHRcdFx0aWNvbj17YWN0aW9uLmlzQUlPcGVyYXRpb24gPT09IHRydWUgPyBhaUljb24gOiB1bmRlZmluZWR9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0Y3VzdG9tRGF0YTogW2NyZWF0ZUN1c3RvbURhdGEoXCJhY3Rpb25JZFwiLCBnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24uaWRdKSldLFxuXHRcdFx0XHRcdFx0bGF5b3V0RGF0YTogPE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgcHJpb3JpdHk9e2FjdGlvbi5wcmlvcml0eX0gZ3JvdXA9e2FjdGlvbi5ncm91cH0+PC9PdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhPlxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdCk7XG5cdH0gZWxzZSBpZiAoVGFibGVIZWxwZXIuaXNBY3Rpb25TaG93bkluQ29udGV4dE1lbnUoYWN0aW9uLCB0YWJsZS5jb250ZXh0T2JqZWN0UGF0aCkpIHtcblx0XHRjb25zdCB0YWJsZUFjdGlvbkNvbnRleHRNZW51SWQgPSBnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24uaWQsIFwiQ29udGV4dE1lbnVcIl0pO1xuXHRcdC8vIGZvciBjb250ZXh0IG1lbnVcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdGNvcmU6cmVxdWlyZT1cIntGUE06ICdzYXAvZmUvY29yZS9oZWxwZXJzL0ZQTUhlbHBlcid9XCJcblx0XHRcdFx0aWQ9e3RhYmxlQWN0aW9uQ29udGV4dE1lbnVJZH1cblx0XHRcdFx0dGV4dD17YWN0aW9uLnRleHR9XG5cdFx0XHRcdHByZXNzPXtwcmVzc0hhbmRsZXJ9XG5cdFx0XHRcdGpzeDpjb21tYW5kPXtwcmVzc0NvbW1hbmR9XG5cdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnV9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogW2NyZWF0ZUN1c3RvbURhdGEoXCJhY3Rpb25JZFwiLCB0YWJsZUFjdGlvbkNvbnRleHRNZW51SWQpXVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9NZW51SXRlbT5cblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNvbnRyb2wgZm9yIGFuIGFjdGlvbiBidXR0b24vbWVudSBpdGVtIGJhc2VkIG9uIHRoZSB0eXBlIG9mIHRoZSBhY3Rpb24uXG4gKiBAcGFyYW0gYWN0aW9uIFRoZSBhY3Rpb24gdG8gZ2V0XG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIGNvbnRyb2wgb2YgdGhlIGFjdGlvblxuICovXG5mdW5jdGlvbiBnZXRBY3Rpb24oXG5cdGFjdGlvbjogQmFzZUFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0Y29sbGVjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnNcbik6IEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB8IHVuZGVmaW5lZCB7XG5cdHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcblx0XHRjYXNlIFwiRGVmYXVsdFwiOlxuXHRcdFx0aWYgKFwibm9XcmFwXCIgaW4gYWN0aW9uKSB7XG5cdFx0XHRcdHJldHVybiBnZXREZWZhdWx0QnV0dG9uKGFjdGlvbiBhcyBDdXN0b21BY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSwgcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIpO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIk1lbnVcIjpcblx0XHRcdHJldHVybiBnZXRNZW51QnV0dG9uKGFjdGlvbiwgdGFibGUsIGZvckNvbnRleHRNZW51LCBjb2xsZWN0aW9uQ29udGV4dCwgcGFyYW1ldGVycyk7XG5cdFx0ZGVmYXVsdDpcblx0fVxuXHRyZXR1cm4gZ2V0RGF0YUZpZWxkQnV0dG9uKGFjdGlvbiwgdGFibGUsIGZvckNvbnRleHRNZW51LCBjb2xsZWN0aW9uQ29udGV4dCwgcGFyYW1ldGVycyk7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBjb3B5IGFjdGlvbi5cbiAqIEBwYXJhbSBhY3Rpb24gVGhlIGNvcHkgYWN0aW9uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiBhY3Rpb24gaXMgZm9yIEFjdGlvbiBUb29sYmFyIG9mIENvbnRleHQgTWVudVxuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIGFjdGlvblxuICovXG5mdW5jdGlvbiBnZXRDb3B5QWN0aW9uKFxuXHRhY3Rpb246IEJhc2VBY3Rpb24sXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdGNvbGxlY3Rpb25Db250ZXh0OiBDb250ZXh0LFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzXG4pOiBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgTWVudUl0ZW0ge1xuXHRjb25zdCBkYXRhRmllbGQgPSBhY3Rpb24uYW5ub3RhdGlvblBhdGhcblx0XHQ/IChwYXJhbWV0ZXJzLmNvbnZlcnRlZE1ldGFkYXRhLnJlc29sdmVQYXRoKGFjdGlvbi5hbm5vdGF0aW9uUGF0aCkudGFyZ2V0IGFzIERhdGFGaWVsZEZvckFjdGlvbilcblx0XHQ6IHVuZGVmaW5lZDtcblx0Y29uc3QgYWN0aW9uQ29udGV4dFBhdGggPSBDb21tb25IZWxwZXIuZ2V0QWN0aW9uQ29udGV4dChwYXJhbWV0ZXJzLm1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChhY3Rpb24uYW5ub3RhdGlvblBhdGggKyBcIi9BY3Rpb25cIikhKTtcblx0Y29uc3Qgb3BlcmF0aW9uQXZhaWxhYmxlID0gZGF0YUZpZWxkPy5BY3Rpb25UYXJnZXQ/LmFubm90YXRpb25zPy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGUgIT09IHVuZGVmaW5lZDtcblx0Y29uc3QgYWN0aW9uQ29udGV4dCA9IHBhcmFtZXRlcnMubWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGFjdGlvbkNvbnRleHRQYXRoKSE7XG5cdGNvbnN0IGRhdGFGaWVsZERhdGFNb2RlbE9iamVjdFBhdGggPSBhY3Rpb25Db250ZXh0XG5cdFx0PyBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKGFjdGlvbkNvbnRleHQsIGNvbGxlY3Rpb25Db250ZXh0KVxuXHRcdDogdW5kZWZpbmVkO1xuXHRjb25zdCBpc0JvdW5kID0gZGF0YUZpZWxkPy5BY3Rpb25UYXJnZXQ/LmlzQm91bmQ7XG5cdGNvbnN0IHByZXNzID0gZGF0YUZpZWxkXG5cdFx0PyBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXREYXRhRmllbGRGb3JBY3Rpb25CdXR0b25QcmVzc0hhbmRsZXIoZGF0YUZpZWxkLCBhY3Rpb24sIHVuZGVmaW5lZCwgZm9yQ29udGV4dE1lbnUpXG5cdFx0OiB1bmRlZmluZWQ7XG5cblx0bGV0IGVuYWJsZWQ6IHN0cmluZyB8IGJvb2xlYW4gfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiA9IG9wZXJhdGlvbkF2YWlsYWJsZVxuXHRcdD8gVGFibGVIZWxwZXIuaXNEYXRhRmllbGRGb3JBY3Rpb25FbmFibGVkKFxuXHRcdFx0XHR0YWJsZS50YWJsZURlZmluaXRpb24sXG5cdFx0XHRcdGRhdGFGaWVsZC5BY3Rpb24sXG5cdFx0XHRcdCEhaXNCb3VuZCxcblx0XHRcdFx0YWN0aW9uQ29udGV4dC5nZXRPYmplY3QoKSxcblx0XHRcdFx0YWN0aW9uLmVuYWJsZU9uU2VsZWN0LFxuXHRcdFx0XHRkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRFbnRpdHlUeXBlLFxuXHRcdFx0XHRmb3JDb250ZXh0TWVudSxcblx0XHRcdFx0dHJ1ZVxuXHRcdCAgKVxuXHRcdDogYHs9ICR7QWN0aW9uSGVscGVyLmdldE51bWJlck9mQ29udGV4dHNFeHByZXNzaW9uKFwic2luZ2xlXCIsIGZvckNvbnRleHRNZW51KX19YDtcblx0aWYgKHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmFuYWx5dGljYWxDb25maWd1cmF0aW9uPy5hZ2dyZWdhdGlvbk9uTGVhZkxldmVsKSB7XG5cdFx0ZW5hYmxlZCA9IGNvbXBpbGVFeHByZXNzaW9uKGFuZChyZXNvbHZlQmluZGluZ1N0cmluZyhlbmFibGVkKSwgVUkuaXNOb2RlTGV2ZWxOYXZpZ2FibGUpKTtcblx0fVxuXG5cdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHQvLyBmb3IgdGFibGUgdG9vbGJhclxuXHRcdHJldHVybiAoXG5cdFx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvblxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgZGF0YUZpZWxkLCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHRkdDpkZXNpZ250aW1lPXthY3Rpb24udmlzaWJsZSA9PT0gXCJ0cnVlXCIgfHwgYWN0aW9uLnZpc2libGUgPT09IFwiZmFsc2VcIiA/IHVuZGVmaW5lZCA6IFwibm90LWFkYXB0YWJsZS12aXNpYmlsaXR5XCJ9XG5cdFx0XHQ+XG5cdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgZGF0YUZpZWxkXSl9XG5cdFx0XHRcdFx0dGV4dD17YWN0aW9uLnRleHR9XG5cdFx0XHRcdFx0cHJlc3M9e3ByZXNzfVxuXHRcdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuVHJhbnNwYXJlbnR9XG5cdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGV9XG5cdFx0XHRcdFx0ZW5hYmxlZD17ZW5hYmxlZH1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRjdXN0b21EYXRhOiBbY3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGRhdGFGaWVsZF0pKV0sXG5cdFx0XHRcdFx0XHRsYXlvdXREYXRhOiA8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSBwcmlvcml0eT17YWN0aW9uLnByaW9yaXR5fSBncm91cD17YWN0aW9uLmdyb3VwfT48L092ZXJmbG93VG9vbGJhckxheW91dERhdGE+XG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHQvLyBmb3IgY29udGV4dCBtZW51XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgZGF0YUZpZWxkLCBcIkNvbnRleHRNZW51XCJdKX1cblx0XHRcdFx0dGV4dD17YWN0aW9uLnRleHR9XG5cdFx0XHRcdHByZXNzPXtwcmVzc31cblx0XHRcdFx0ZW5hYmxlZD17Y29tcGlsZUV4cHJlc3Npb24oZXF1YWwocGF0aEluTW9kZWwoXCJjb250ZXh0bWVudS9udW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIiwgXCJpbnRlcm5hbFwiKSwgMSkpIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjdXN0b21EYXRhOiBbY3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGRhdGFGaWVsZCwgXCJDb250ZXh0TWVudVwiXSkpXVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9NZW51SXRlbT5cblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSB4bWwgc3RyaW5nIGZvciB0aGUgY3JlYXRlIGJ1dHRvbi5cbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbiBTdGFuZGFyZCBhY3Rpb25zIHRvIGJlIGV2YWx1YXRlZFxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgd2hldGhlciB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgc2V0IHRvIGBmYWxzZWAsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhci5cbiAqIEBwYXJhbSBjb2xsZWN0aW9uRW50aXR5IFRoZSBlbnRpdHkgc2V0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcmV0dXJucyBUaGUgeG1sIHN0cmluZyBmb3IgdGhlIGNyZWF0ZSBidXR0b25cbiAqL1xuZnVuY3Rpb24gZ2V0Q3JlYXRlQnV0dG9uKFxuXHRzdGFuZGFyZEFjdGlvbjogU3RhbmRhcmRBY3Rpb24sXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdGNvbGxlY3Rpb25FbnRpdHk6IEVudGl0eVNldCB8IE5hdmlnYXRpb25Qcm9wZXJ0eVxuKTogQWN0aW9uc1BsYWNlaG9sZGVyIHwgQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHtcblx0Y29uc3Qgc3VmZml4UmVzb3VyY2VLZXkgPSBjb2xsZWN0aW9uRW50aXR5Lm5hbWU7XG5cdGNvbnN0IGJ1dHRvblRleHQgPSB0YWJsZS5nZXRUcmFuc2xhdGVkVGV4dChcIk1fQ09NTU9OX1RBQkxFX0NSRUFURVwiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KTtcblx0Y29uc3QgY3JlYXRlT3V0Ym91bmREZXRhaWwgPSAodGFibGUudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uY3JlYXRlIGFzIENyZWF0ZUJlaGF2aW9yRXh0ZXJuYWwpLm91dGJvdW5kRGV0YWlsO1xuXHRjb25zdCBjdXN0b21EYXRhID0gY3JlYXRlT3V0Ym91bmREZXRhaWxcblx0XHQ/IGNyZWF0ZUN1c3RvbURhdGEoXCJJQk5EYXRhXCIsIHsgc2VtYW50aWNPYmplY3Q6IGNyZWF0ZU91dGJvdW5kRGV0YWlsLnNlbWFudGljT2JqZWN0LCBhY3Rpb246IGNyZWF0ZU91dGJvdW5kRGV0YWlsLmFjdGlvbiB9KVxuXHRcdDogdW5kZWZpbmVkO1xuXG5cdGlmICh0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC5lbmFibGVVcGxvYWRQbHVnaW4pIHtcblx0XHRyZXR1cm4gPEFjdGlvbnNQbGFjZWhvbGRlciBpZD17YCR7dGFibGUuY29udGVudElkfS11cGxvYWRCdXR0b25gfSBwbGFjZWhvbGRlckZvcj1cIlVwbG9hZEJ1dHRvblBsYWNlaG9sZGVyXCIgLz47XG5cdH0gZWxzZSBpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBzdGFuZGFyZEFjdGlvbi5rZXksIFwiQWN0aW9uVG9vbGJhckFjdGlvblwiXSl9XG5cdFx0XHRcdGR0OmRlc2lnbnRpbWU9XCJub3QtYWRhcHRhYmxlLXRyZWVcIlxuXHRcdFx0PlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIHN0YW5kYXJkQWN0aW9uLmtleV0pfVxuXHRcdFx0XHRcdHRleHQ9e2J1dHRvblRleHR9XG5cdFx0XHRcdFx0anN4OmNvbW1hbmQ9XCJjbWQ6Q3JlYXRlfHByZXNzXCJcblx0XHRcdFx0XHR0eXBlPXtCdXR0b25UeXBlLlRyYW5zcGFyZW50fVxuXHRcdFx0XHRcdHZpc2libGU9e3N0YW5kYXJkQWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdGVuYWJsZWQ9e3N0YW5kYXJkQWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdGN1c3RvbURhdGEsXG5cdFx0XHRcdFx0XHRsYXlvdXREYXRhOiAoXG5cdFx0XHRcdFx0XHRcdDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhXG5cdFx0XHRcdFx0XHRcdFx0cHJpb3JpdHk9e3N0YW5kYXJkQWN0aW9uLnByaW9yaXR5fVxuXHRcdFx0XHRcdFx0XHRcdGdyb3VwPXtzdGFuZGFyZEFjdGlvbi5ncm91cH1cblx0XHRcdFx0XHRcdFx0PjwvT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YT5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIHN0YW5kYXJkQWN0aW9uLmtleSwgXCJDb250ZXh0TWVudVwiXSl9XG5cdFx0XHRcdHRleHQ9e2J1dHRvblRleHR9XG5cdFx0XHRcdGpzeDpjb21tYW5kPVwiY21kOkNyZWF0ZTo6Q29udGV4dE1lbnV8cHJlc3NcIlxuXHRcdFx0XHR2aXNpYmxlPXtzdGFuZGFyZEFjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0ZW5hYmxlZD17c3RhbmRhcmRBY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51IGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRDcmVhdGVNZW51KFxuXHRzdGFuZGFyZEFjdGlvbjogU3RhbmRhcmRBY3Rpb24sXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Y29sbGVjdGlvbkVudGl0eTogRW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5LFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0aGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyXG4pOiBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgTWVudUl0ZW0ge1xuXHRjb25zdCBzdWZmaXhSZXNvdXJjZUtleSA9IGNvbGxlY3Rpb25FbnRpdHkubmFtZTtcblx0Y29uc3QgYnV0dG9uVGV4dCA9IHRhYmxlLmdldFRyYW5zbGF0ZWRUZXh0KFwiTV9DT01NT05fVEFCTEVfQ1JFQVRFXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpO1xuXHRjb25zdCB2YWx1ZXMgPSB0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC5ub2RlVHlwZSEudmFsdWVzO1xuXHRjb25zdCBoYXNDdXN0b21DcmVhdGVFbmFibGVtZW50ID0gdGFibGUudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuY3JlYXRlRW5hYmxlbWVudCAhPT0gdW5kZWZpbmVkO1xuXG5cdGNvbnN0IG1lbnVJdGVtcyA9IHZhbHVlcy5tYXAoKGFsbG93ZWRWYWx1ZSwgaW5kZXgpID0+IHtcblx0XHRjb25zdCBtb2RlbE5hbWUgPSAhZm9yQ29udGV4dE1lbnUgPyBcIlwiIDogXCJjb250ZXh0bWVudS9cIjtcblxuXHRcdGNvbnN0IGlzRW5hYmxlZCA9IGhhc0N1c3RvbUNyZWF0ZUVuYWJsZW1lbnRcblx0XHRcdD8gbm90RXF1YWwocGF0aEluTW9kZWwoYCR7bW9kZWxOYW1lfWNyZWF0ZUVuYWJsZW1lbnQvQ3JlYXRlXyR7aW5kZXh9YCwgXCJpbnRlcm5hbFwiKSwgZmFsc2UpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRjb25zdCBpZCA9IGZvckNvbnRleHRNZW51XG5cdFx0XHQ/IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFsbG93ZWRWYWx1ZS52YWx1ZSwgXCJDb250ZXh0TWVudVwiXSlcblx0XHRcdDogZ2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgYWxsb3dlZFZhbHVlLnZhbHVlXSk7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRpZD17aWR9XG5cdFx0XHRcdHRleHQ9e2FsbG93ZWRWYWx1ZS50ZXh0fVxuXHRcdFx0XHRlbmFibGVkPXtpc0VuYWJsZWQgPyBjb21waWxlRXhwcmVzc2lvbihpc0VuYWJsZWQpIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRwcmVzcz17aGFuZGxlclByb3ZpZGVyLmdldENyZWF0ZU1lbnVJdGVtUHJlc3NIYW5kbGVyKGluZGV4LCBmb3JDb250ZXh0TWVudSl9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH0pO1xuXG5cdGlmIChmb3JDb250ZXh0TWVudSkge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIHN0YW5kYXJkQWN0aW9uLmtleSwgXCJDb250ZXh0TWVudVwiXSl9XG5cdFx0XHRcdHRleHQ9e2J1dHRvblRleHR9XG5cdFx0XHRcdHZpc2libGU9e3N0YW5kYXJkQWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRlbmFibGVkPXtzdGFuZGFyZEFjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGl0ZW1zOiBtZW51SXRlbXMgIT09IHVuZGVmaW5lZCAmJiBtZW51SXRlbXMubGVuZ3RoID4gMCA/IG1lbnVJdGVtcyA6IHVuZGVmaW5lZFxuXHRcdFx0XHR9fVxuXHRcdFx0PC9NZW51SXRlbT5cblx0XHQpO1xuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvbiBpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgc3RhbmRhcmRBY3Rpb24ua2V5LCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfSBkdDpkZXNpZ250aW1lPVwibm90LWFkYXB0YWJsZS10cmVlXCI+XG5cdFx0XHQ8TWVudUJ1dHRvblxuXHRcdFx0XHR0ZXh0PXtidXR0b25UZXh0fVxuXHRcdFx0XHR0eXBlPXtCdXR0b25UeXBlLlRyYW5zcGFyZW50fVxuXHRcdFx0XHRtZW51UG9zaXRpb249XCJCZWdpbkJvdHRvbVwiXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBzdGFuZGFyZEFjdGlvbi5rZXldKX1cblx0XHRcdFx0dmlzaWJsZT17c3RhbmRhcmRBY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdGVuYWJsZWQ9e3N0YW5kYXJkQWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGN1c3RvbURhdGE6IFtjcmVhdGVDdXN0b21EYXRhKFwiYWN0aW9uSWRcIiwgZ2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgc3RhbmRhcmRBY3Rpb24ua2V5XSkpXSxcblx0XHRcdFx0XHRtZW51OiA8TWVudT57bWVudUl0ZW1zfTwvTWVudT4sXG5cdFx0XHRcdFx0bGF5b3V0RGF0YTogKFxuXHRcdFx0XHRcdFx0PE92ZXJmbG93VG9vbGJhckxheW91dERhdGFcblx0XHRcdFx0XHRcdFx0cHJpb3JpdHk9e3N0YW5kYXJkQWN0aW9uLnByaW9yaXR5fVxuXHRcdFx0XHRcdFx0XHRncm91cD17c3RhbmRhcmRBY3Rpb24uZ3JvdXB9XG5cdFx0XHRcdFx0XHQ+PC9PdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fX1cblx0XHRcdDwvTWVudUJ1dHRvbj5cblx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdCk7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSB4bWwgc3RyaW5nIGZvciB0aGUgZGVsZXRlIGJ1dHRvbi5cbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbiBTdGFuZGFyZCBhY3Rpb25zIHRvIGJlIGV2YWx1YXRlZFxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcbiAqIEBwYXJhbSBjb2xsZWN0aW9uRW50aXR5IFRoZSBlbnRpdHkgc2V0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcmV0dXJucyBUaGUgeG1sIHN0cmluZyBmb3IgdGhlIGRlbGV0ZSBidXR0b25cbiAqL1xuZnVuY3Rpb24gZ2V0RGVsZXRlQnV0dG9uKFxuXHRzdGFuZGFyZEFjdGlvbjogU3RhbmRhcmRBY3Rpb24sXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdGNvbGxlY3Rpb25FbnRpdHk6IEVudGl0eVNldCB8IE5hdmlnYXRpb25Qcm9wZXJ0eVxuKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHtcblx0Y29uc3Qgc3VmZml4UmVzb3VyY2VLZXkgPSBjb2xsZWN0aW9uRW50aXR5Lm5hbWU7XG5cdGNvbnN0IGJ1dHRvblRleHQgPSB0YWJsZS5nZXRUcmFuc2xhdGVkVGV4dChcIk1fQ09NTU9OX1RBQkxFX0RFTEVURVwiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KTtcblx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdC8vIGZvciB0YWJsZSB0b29sYmFyXG5cdFx0cmV0dXJuIChcblx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBzdGFuZGFyZEFjdGlvbi5rZXksIFwiQWN0aW9uVG9vbGJhckFjdGlvblwiXSl9XG5cdFx0XHRcdGR0OmRlc2lnbnRpbWU9XCJub3QtYWRhcHRhYmxlLXRyZWVcIlxuXHRcdFx0PlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIHN0YW5kYXJkQWN0aW9uLmtleV0pfVxuXHRcdFx0XHRcdHRleHQ9e2J1dHRvblRleHR9XG5cdFx0XHRcdFx0anN4OmNvbW1hbmQ9XCJjbWQ6RGVsZXRlRW50cnl8cHJlc3NcIlxuXHRcdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuVHJhbnNwYXJlbnR9XG5cdFx0XHRcdFx0dmlzaWJsZT17c3RhbmRhcmRBY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdFx0ZW5hYmxlZD17c3RhbmRhcmRBY3Rpb24uZW5hYmxlZCBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdFx0YXJpYUhhc1BvcHVwPVwiRGlhbG9nXCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRsYXlvdXREYXRhOiAoXG5cdFx0XHRcdFx0XHRcdDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhXG5cdFx0XHRcdFx0XHRcdFx0cHJpb3JpdHk9e3N0YW5kYXJkQWN0aW9uLnByaW9yaXR5fVxuXHRcdFx0XHRcdFx0XHRcdGdyb3VwPXtzdGFuZGFyZEFjdGlvbi5ncm91cH1cblx0XHRcdFx0XHRcdFx0PjwvT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YT5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIGZvciBjb250ZXh0IG1lbnVcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBzdGFuZGFyZEFjdGlvbi5rZXksIFwiQ29udGV4dE1lbnVcIl0pfVxuXHRcdFx0XHR0ZXh0PXtidXR0b25UZXh0fVxuXHRcdFx0XHRqc3g6Y29tbWFuZD1cImNtZDpEZWxldGVFbnRyeTo6Q29udGV4dE1lbnV8cHJlc3NcIlxuXHRcdFx0XHR2aXNpYmxlPXtzdGFuZGFyZEFjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0ZW5hYmxlZD17c3RhbmRhcmRBY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51IGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgeG1sIHN0cmluZyBmb3Igc3RhbmRhcmQgYWN0aW9ucyBiYXNlZCBvbiB0aGUga2V5IG9mIHRoZSBzdGFuZGFyZCBhY3Rpb24uXG4gKiBAcGFyYW0gYWN0aW9uIFRoZSBhY3Rpb24gdG8gdGVtcGxhdGVcbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyXG4gKiBAcGFyYW0gY29sbGVjdGlvbkVudGl0eSBUaGUgZW50aXR5IHNldCBvZiB0aGUgY29sbGVjdGlvblxuICogQHJldHVybnMgVGhlIHhtbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0YW5kYXJkIGFjdGlvblxuICovXG5mdW5jdGlvbiBnZXRTdGFuZGFyZEFjdGlvbihcblx0YWN0aW9uOiBTdGFuZGFyZEFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0aGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyLFxuXHRjb2xsZWN0aW9uRW50aXR5OiBFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHlcbik6IEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB8IEFjdGlvbnNQbGFjZWhvbGRlciB8IHVuZGVmaW5lZCB7XG5cdGlmIChhY3Rpb24uaXNUZW1wbGF0ZWQgPT09IFwiZmFsc2VcIikge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0aWYgKHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmFuYWx5dGljYWxDb25maWd1cmF0aW9uPy5hZ2dyZWdhdGlvbk9uTGVhZkxldmVsICYmIGFjdGlvbi5rZXkgIT09IFN0YW5kYXJkQWN0aW9uS2V5cy5DcmVhdGUpIHtcblx0XHRhY3Rpb24gPSBkZWVwQ2xvbmUoYWN0aW9uKTtcblx0XHRhY3Rpb24uZW5hYmxlZCA9IGNvbXBpbGVFeHByZXNzaW9uKGFuZChyZXNvbHZlQmluZGluZ1N0cmluZyhhY3Rpb24uZW5hYmxlZCA/PyBcIlwiKSwgVUkuaXNOb2RlTGV2ZWxOYXZpZ2FibGUpKTtcblx0XHRhY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51ID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRhbmQocmVzb2x2ZUJpbmRpbmdTdHJpbmcoYWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSA/PyBcIlwiKSwgVUkuaXNOb2RlTGV2ZWxOYXZpZ2FibGUpXG5cdFx0KTtcblx0fVxuXG5cdHN3aXRjaCAoYWN0aW9uLmtleSkge1xuXHRcdGNhc2UgU3RhbmRhcmRBY3Rpb25LZXlzLkNyZWF0ZTpcblx0XHRcdGlmIChcblx0XHRcdFx0IXRhYmxlLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZCB8fFxuXHRcdFx0XHQvLyBXZSBvbmx5IGhhdmUgQ3JlYXRlIG9uIHRoZSBDb250ZXh0TWVudSBvbiB0aGUgVHJlZVRhYmxlXG5cdFx0XHRcdCh0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlICE9PSBcIlRyZWVUYWJsZVwiICYmIGZvckNvbnRleHRNZW51KVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHR9IGVsc2UgaWYgKHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLm5vZGVUeXBlKSB7XG5cdFx0XHRcdHJldHVybiBnZXRDcmVhdGVNZW51KGFjdGlvbiwgdGFibGUsIGNvbGxlY3Rpb25FbnRpdHksIGZvckNvbnRleHRNZW51LCBoYW5kbGVyUHJvdmlkZXIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGdldENyZWF0ZUJ1dHRvbihhY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSwgY29sbGVjdGlvbkVudGl0eSk7XG5cdFx0XHR9XG5cblx0XHRjYXNlIFN0YW5kYXJkQWN0aW9uS2V5cy5EZWxldGU6XG5cdFx0XHRyZXR1cm4gZ2V0RGVsZXRlQnV0dG9uKGFjdGlvbiwgdGFibGUsIGZvckNvbnRleHRNZW51LCBjb2xsZWN0aW9uRW50aXR5KTtcblx0XHRjYXNlIFN0YW5kYXJkQWN0aW9uS2V5cy5DdXQ6XG5cdFx0XHRyZXR1cm4gZ2V0Q3V0QnV0dG9uKGFjdGlvbiwgdGFibGUsIGZvckNvbnRleHRNZW51KTtcblx0XHRjYXNlIFN0YW5kYXJkQWN0aW9uS2V5cy5Db3B5OlxuXHRcdFx0cmV0dXJuIGdldENvcHlCdXR0b24oYWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUpO1xuXHRcdGNhc2UgU3RhbmRhcmRBY3Rpb25LZXlzLlBhc3RlOlxuXHRcdFx0cmV0dXJuIGdldFBhc3RlQnV0dG9uKGFjdGlvbiwgdGFibGUsIGZvckNvbnRleHRNZW51KTtcblxuXHRcdGNhc2UgU3RhbmRhcmRBY3Rpb25LZXlzLk1hc3NFZGl0OlxuXHRcdFx0aWYgKHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZCkge1xuXHRcdFx0XHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0XHRcdFx0Ly8gZm9yIHRhYmxlIHRvb2xiYXJcblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5rZXksIFwiQWN0aW9uVG9vbGJhckFjdGlvblwiXSl9XG5cdFx0XHRcdFx0XHRcdGR0OmRlc2lnbnRpbWU9XCJub3QtYWRhcHRhYmxlLXRyZWVcIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5rZXldKX1cblx0XHRcdFx0XHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fQ09NTU9OX1RBQkxFX01BU1NFRElUfVwiXG5cdFx0XHRcdFx0XHRcdFx0cHJlc3M9e2hhbmRsZXJQcm92aWRlci5nZXRNYXNzRWRpdEJ1dHRvblByZXNzSGFuZGxlcihmYWxzZSl9XG5cdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdFx0XHRsYXlvdXREYXRhOiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJpb3JpdHk9e2FjdGlvbi5wcmlvcml0eX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRncm91cD17YWN0aW9uLmdyb3VwfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ+PC9PdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhPlxuXHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gZm9yIGNvbnRleHQgbWVudVxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5rZXksIFwiQ29udGV4dE1lbnVcIl0pfVxuXHRcdFx0XHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fQ09NTU9OX1RBQkxFX01BU1NFRElUfVwiXG5cdFx0XHRcdFx0XHRcdHByZXNzPXtoYW5kbGVyUHJvdmlkZXIuZ2V0TWFzc0VkaXRCdXR0b25QcmVzc0hhbmRsZXIodHJ1ZSl9XG5cdFx0XHRcdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0Y2FzZSBTdGFuZGFyZEFjdGlvbktleXMuSW5zaWdodHM6XG5cdFx0XHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0XHRcdC8vIGZvciB0YWJsZSB0b29sYmFyXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24ua2V5LCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHRcdFx0ZHQ6ZGVzaWdudGltZT17YWN0aW9uLnZpc2libGUgPT09IFwidHJ1ZVwiIHx8IGFjdGlvbi52aXNpYmxlID09PSBcImZhbHNlXCIgPyB1bmRlZmluZWQgOiBcIm5vdC1hZGFwdGFibGUtdmlzaWJpbGl0eVwifVxuXHRcdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGV9XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgYWN0aW9uLmtleV0pfVxuXHRcdFx0XHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fQ09NTU9OX0lOU0lHSFRTX0NBUkR9XCJcblx0XHRcdFx0XHRcdFx0cHJlc3M9e2hhbmRsZXJQcm92aWRlci5hZGRDYXJkVG9JbnNpZ2h0c1ByZXNzfVxuXHRcdFx0XHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRsYXlvdXREYXRhOiAoXG5cdFx0XHRcdFx0XHRcdFx0XHQ8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSBwcmlvcml0eT17YWN0aW9uLnByaW9yaXR5ID8/IFwiQWx3YXlzT3ZlcmZsb3dcIn0gZ3JvdXA9e2FjdGlvbi5ncm91cH0gLz5cblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0Y2FzZSBTdGFuZGFyZEFjdGlvbktleXMuTW92ZVVwOlxuXHRcdGNhc2UgU3RhbmRhcmRBY3Rpb25LZXlzLk1vdmVEb3duOlxuXHRcdFx0cmV0dXJuIGdldE1vdmVVcERvd25CdXR0b24oYWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUpO1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIHhtbCBzdHJpbmcgZm9yIHN0YW5kYXJkLCBhbm5vdGF0aW9uLCBhbmQgY3VzdG9tIGFjdGlvbnMgb2YgdGhlIHRhYmxlLlxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcbiAqIEBwYXJhbSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gY29sbGVjdGlvbkNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSBjb2xsZWN0aW9uRW50aXR5IFRoZSBlbnRpdHkgc2V0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcmV0dXJucyBUaGUgeG1sIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWN0aW9ucyhcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVycyxcblx0Y29sbGVjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdGNvbGxlY3Rpb25FbnRpdHk6IEVudGl0eVNldCB8IE5hdmlnYXRpb25Qcm9wZXJ0eVxuKTogKEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB8IEFjdGlvbnNQbGFjZWhvbGRlcilbXSB7XG5cdC8vIEFwcGx5IHByaW1hcnkgYWN0aW9uIG92ZXJmbG93IHByb3RlY3Rpb24gYmVmb3JlIHByb2Nlc3Npbmdcblx0Y29uc3QgYWN0aW9uc1dpdGhPdmVyZmxvd1Byb3RlY3Rpb24gPSBBY3Rpb25IZWxwZXIuZW5zdXJlUHJpbWFyeUFjdGlvbk5ldmVyT3ZlcmZsb3dzKHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zKTtcblxuXHRyZXR1cm4gYWN0aW9uc1dpdGhPdmVyZmxvd1Byb3RlY3Rpb25cblx0XHQubWFwKChhY3Rpb246IEJhc2VBY3Rpb24pID0+IHtcblx0XHRcdHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcblx0XHRcdFx0Y2FzZSBBY3Rpb25UeXBlLlN0YW5kYXJkOlxuXHRcdFx0XHRcdHJldHVybiBnZXRTdGFuZGFyZEFjdGlvbihhY3Rpb24gYXMgU3RhbmRhcmRBY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSwgcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIsIGNvbGxlY3Rpb25FbnRpdHkpO1xuXHRcdFx0XHRjYXNlIEFjdGlvblR5cGUuQ29weTpcblx0XHRcdFx0XHRyZXR1cm4gZ2V0Q29weUFjdGlvbihhY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSwgY29sbGVjdGlvbkNvbnRleHQsIHBhcmFtZXRlcnMpO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHJldHVybiBnZXRBY3Rpb24oYWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUsIGNvbGxlY3Rpb25Db250ZXh0LCBwYXJhbWV0ZXJzKTtcblx0XHRcdH1cblx0XHR9KVxuXHRcdC5maWx0ZXIoKGFjdGlvbikgPT4gYWN0aW9uICE9PSB1bmRlZmluZWQpIGFzIChBY3Rpb25Ub29sYmFyQWN0aW9uIHwgTWVudUl0ZW0gfCBBY3Rpb25zUGxhY2Vob2xkZXIpW107XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBjb250cm9sIGZvciBCYXNpY1NlYXJjaC5cbiAqIEBwYXJhbSB1c2VCYXNpY1NlYXJjaFxuICogQHBhcmFtIGZpbHRlckJhcklkXG4gKiBAcGFyYW0gX2NvbGxlY3Rpb25Jc0RyYWZ0RW5hYmxlZFxuICogQHBhcmFtIGlzU2VhcmNoYWJsZVxuICogQHJldHVybnMgVGhlIGNvbnRyb2wgb2YgdGhlIEJhc2ljU2VhcmNoXG4gKi9cbmZ1bmN0aW9uIGdldEJhc2ljU2VhcmNoKFxuXHR1c2VCYXNpY1NlYXJjaDogYm9vbGVhbixcblx0ZmlsdGVyQmFySWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0X2NvbGxlY3Rpb25Jc0RyYWZ0RW5hYmxlZDogYm9vbGVhbixcblx0aXNTZWFyY2hhYmxlOiBib29sZWFuXG4pOiBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgdW5kZWZpbmVkIHtcblx0aWYgKHVzZUJhc2ljU2VhcmNoKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbZmlsdGVyQmFySWQsIFwiQWN0aW9uVG9vbGJhckFjdGlvblwiXSl9XG5cdFx0XHRcdGxhYmVsPVwie3NhcC5mZS5pMThuPk1fQkFTSUNfU0VBUkNIfVwiXG5cdFx0XHRcdGR0OmRlc2lnbnRpbWU9XCJub3QtYWRhcHRhYmxlLXRyZWVcIlxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGFjdGlvbjogPEJhc2ljU2VhcmNoTWFjcm8gaWQ9e2ZpbHRlckJhcklkfSB1c2VEcmFmdEVkaXRTdGF0ZT17X2NvbGxlY3Rpb25Jc0RyYWZ0RW5hYmxlZH0gdmlzaWJsZT17aXNTZWFyY2hhYmxlfSAvPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNvbnRyb2wgZm9yIHRhYmxlIGZ1bGxzY3JlZW4gYnV0dG9uLlxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEByZXR1cm5zIFRoZSBjb250cm9sIG9mIHRoZSBidXR0b25cbiAqL1xuZnVuY3Rpb24gZ2V0RnVsbFNjcmVlbih0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMpOiBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgdW5kZWZpbmVkIHtcblx0aWYgKHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmVuYWJsZUZ1bGxTY3JlZW4pIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIFwiU3RhbmRhcmRBY3Rpb25cIiwgXCJGdWxsU2NyZWVuXCIsIFwiQWN0aW9uVG9vbGJhckFjdGlvblwiXSl9XG5cdFx0XHRcdGxhYmVsPVwie3NhcC5mZS5pMThuPk1fRlVMTF9TQ1JFRU59XCJcblx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cIm5vdC1hZGFwdGFibGUtdHJlZVwiXG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0YWN0aW9uOiA8VGFibGVGdWxsU2NyZWVuQnV0dG9uIGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIlN0YW5kYXJkQWN0aW9uXCIsIFwiRnVsbFNjcmVlblwiXSl9IC8+XG5cdFx0XHRcdH19XG5cdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgWE1MIHN0cmluZyBmb3IgdGhlIEN1dCBCdXR0b24uXG4gKiBAcGFyYW0gYWN0aW9uIFRoZSBpbnN0YW5jZSBvZiB0aGUgc3RhbmRhcmQgYWN0aW9uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51XG4gKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgQ3V0IEJ1dHRvblxuICovXG5mdW5jdGlvbiBnZXRDdXRCdXR0b24oYWN0aW9uOiBTdGFuZGFyZEFjdGlvbiwgdGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLCBmb3JDb250ZXh0TWVudSA9IGZhbHNlKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHtcblx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdC8vIGZvciB0YWJsZSB0b29sYmFyXG5cdFx0cmV0dXJuIChcblx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uIGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIkN1dFwiLCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfSBkdDpkZXNpZ250aW1lPVwibm90LWFkYXB0YWJsZS10cmVlXCI+XG5cdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgXCJDdXRcIl0pfVxuXHRcdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+TV9UQUJMRV9DVVR9XCJcblx0XHRcdFx0XHRqc3g6Y29tbWFuZD1cImNtZDpDdXR8cHJlc3NcIlxuXHRcdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZCBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0bGF5b3V0RGF0YTogPE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgcHJpb3JpdHk9e2FjdGlvbi5wcmlvcml0eX0gZ3JvdXA9e2FjdGlvbi5ncm91cH0+PC9PdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhPlxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gZm9yIGNvbnRleHQgbWVudVxuXHRcdHJldHVybiAoXG5cdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIFwiQ3V0XCIsIFwiQ29udGV4dE1lbnVcIl0pfVxuXHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fVEFCTEVfQ1VUfVwiXG5cdFx0XHRcdGpzeDpjb21tYW5kPVwiY21kOkN1dDo6Q29udGV4dE1lbnV8cHJlc3NcIlxuXHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBYTUwgc3RyaW5nIGZvciB0aGUgQ29weSBidXR0b24uXG4gKiBAcGFyYW0gYWN0aW9uIFRoZSBpbnN0YW5jZSBvZiB0aGUgc3RhbmRhcmRBY3Rpb24uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSBUYWJsZSBidWlsZGluZyBibG9jay5cbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIEN1dCBidXR0b24uXG4gKi9cbmZ1bmN0aW9uIGdldENvcHlCdXR0b24oYWN0aW9uOiBTdGFuZGFyZEFjdGlvbiwgdGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLCBmb3JDb250ZXh0TWVudSA9IGZhbHNlKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHtcblx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdC8vIGZvciB0YWJsZSB0b29sYmFyXG5cdFx0cmV0dXJuIChcblx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uIGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIkNvcHlcIiwgXCJBY3Rpb25Ub29sYmFyQWN0aW9uXCJdKX0gZHQ6ZGVzaWdudGltZT1cIm5vdC1hZGFwdGFibGUtdHJlZVwiPlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIFwiQ29weVwiXSl9XG5cdFx0XHRcdFx0dGV4dD1cIntzYXAuZmUuaTE4bj5NX1RBQkxFX0NPUFl9XCJcblx0XHRcdFx0XHRqc3g6Y29tbWFuZD1cImNtZDpDb3B5fHByZXNzXCJcblx0XHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdGxheW91dERhdGE6IDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PXthY3Rpb24ucHJpb3JpdHl9IGdyb3VwPXthY3Rpb24uZ3JvdXB9PjwvT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YT5cblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIGZvciBjb250ZXh0IG1lbnVcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIkNvcHlcIiwgXCJDb250ZXh0TWVudVwiXSl9XG5cdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+TV9UQUJMRV9DT1BZfVwiXG5cdFx0XHRcdGpzeDpjb21tYW5kPVwiY21kOkNvcHk6OkNvbnRleHRNZW51fHByZXNzXCJcblx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51IGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRNb3ZlVXBEb3duQnV0dG9uKGFjdGlvbjogU3RhbmRhcmRBY3Rpb24sIHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcywgZm9yQ29udGV4dE1lbnU6IGJvb2xlYW4pOiBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgTWVudUl0ZW0ge1xuXHRjb25zdCBmb3JNb3ZlVXAgPSBhY3Rpb24ua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuTW92ZVVwO1xuXHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0Ly8gZm9yIHRhYmxlIHRvb2xiYXJcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5rZXksIFwiQWN0aW9uVG9vbGJhckFjdGlvblwiXSl9XG5cdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlfVxuXHRcdFx0XHRkdDpkZXNpZ250aW1lPVwibm90LWFkYXB0YWJsZS10cmVlXCJcblx0XHRcdD5cblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24ua2V5XSl9XG5cdFx0XHRcdFx0dGV4dD17Zm9yTW92ZVVwID8gXCJ7c2FwLmZlLmkxOG4+TV9UQUJMRV9NT1ZFX1VQfVwiIDogXCJ7c2FwLmZlLmkxOG4+TV9UQUJMRV9NT1ZFX0RPV059XCJ9XG5cdFx0XHRcdFx0anN4OmNvbW1hbmQ9e2Zvck1vdmVVcCA/IFwiY21kOlRhYmxlTW92ZUVsZW1lbnRVcHxwcmVzc1wiIDogXCJjbWQ6VGFibGVNb3ZlRWxlbWVudERvd258cHJlc3NcIn1cblx0XHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdGxheW91dERhdGE6IDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PXthY3Rpb24ucHJpb3JpdHl9IGdyb3VwPXthY3Rpb24uZ3JvdXB9PjwvT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YT5cblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIGZvciBjb250ZXh0IG1lbnVcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24ua2V5LCBcIkNvbnRleHRNZW51XCJdKX1cblx0XHRcdFx0dGV4dD17Zm9yTW92ZVVwID8gXCJ7c2FwLmZlLmkxOG4+TV9UQUJMRV9NT1ZFX1VQfVwiIDogXCJ7c2FwLmZlLmkxOG4+TV9UQUJMRV9NT1ZFX0RPV059XCJ9XG5cdFx0XHRcdGpzeDpjb21tYW5kPXtmb3JNb3ZlVXAgPyBcImNtZDpUYWJsZU1vdmVFbGVtZW50VXA6OkNvbnRleHRNZW51fHByZXNzXCIgOiBcImNtZDpUYWJsZU1vdmVFbGVtZW50RG93bjo6Q29udGV4dE1lbnV8cHJlc3NcIn1cblx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51IGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxufVxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIFhNTCBzdHJpbmcgZm9yIHRoZSBQYXN0ZSBCdXR0b24uXG4gKiBAcGFyYW0gYWN0aW9uIFRoZSBQYXN0ZSBhY3Rpb25cbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG4gKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgUGFzdGUgQnV0dG9uXG4gKi9cbmZ1bmN0aW9uIGdldFBhc3RlQnV0dG9uKFxuXHRhY3Rpb246IFN0YW5kYXJkQWN0aW9uLFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGZvckNvbnRleHRNZW51ID0gZmFsc2Vcbik6IEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHRhYmxlVHlwZSA9IHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnR5cGU7XG5cdGlmICh0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0XHQvLyBmb3IgdGFibGUgdG9vbGJhclxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb24gaWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIFwiUGFzdGVcIiwgXCJBY3Rpb25Ub29sYmFyQWN0aW9uXCJdKX0gZHQ6ZGVzaWdudGltZT1cIm5vdC1hZGFwdGFibGUtdHJlZVwiPlxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIlBhc3RlXCJdKX1cblx0XHRcdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+TV9QQVNURX1cIlxuXHRcdFx0XHRcdFx0anN4OmNvbW1hbmQ9XCJjbWQ6UGFzdGV8cHJlc3NcIlxuXHRcdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdGxheW91dERhdGE6IChcblx0XHRcdFx0XHRcdFx0XHQ8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSBwcmlvcml0eT17YWN0aW9uLnByaW9yaXR5fSBncm91cD17YWN0aW9uLmdyb3VwfT48L092ZXJmbG93VG9vbGJhckxheW91dERhdGE+XG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGZvciBDb250ZXh0IE1lbnVcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIlBhc3RlXCIsIFwiQ29udGV4dE1lbnVcIl0pfVxuXHRcdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+TV9QQVNURX1cIlxuXHRcdFx0XHRcdGpzeDpjb21tYW5kPVwiY21kOlBhc3RlOjpDb250ZXh0TWVudXxwcmVzc1wiXG5cdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIFhNTCBzdHJpbmcgZm9yIGFjdGlvbnMuXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBjb2xsZWN0aW9uQ29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgY29sbGVjdGlvblxuICogQHBhcmFtIGNvbGxlY3Rpb25FbnRpdHkgVGhlIGVudGl0eSBzZXQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZUFjdGlvbnNUZW1wbGF0ZShcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzLFxuXHRjb2xsZWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0Y29sbGVjdGlvbkVudGl0eTogRW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5XG4pOiBDb250cm9sW10ge1xuXHRjb25zdCBfY29sbGVjdGlvbklzRHJhZnRFbmFibGVkID0gTW9kZWxIZWxwZXIuaXNEcmFmdE5vZGUoY29sbGVjdGlvbkVudGl0eSkgfHwgTW9kZWxIZWxwZXIuaXNEcmFmdFJvb3QoY29sbGVjdGlvbkVudGl0eSk7XG5cdGxldCBzZWFyY2hhYmxlOiBib29sZWFuO1xuXHRpZiAodGFibGUuaXNTZWFyY2hhYmxlID09PSBmYWxzZSkge1xuXHRcdHNlYXJjaGFibGUgPSBmYWxzZTtcblx0fSBlbHNlIHtcblx0XHRzZWFyY2hhYmxlID0gdGFibGUudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uc2VhcmNoYWJsZTtcblx0fVxuXG5cdGNvbnN0IGFjdGlvbnM6IChBY3Rpb25Ub29sYmFyQWN0aW9uIHwgTWVudUl0ZW0gfCBBY3Rpb25zUGxhY2Vob2xkZXIpW10gPSBbXTtcblx0Y29uc3QgYmFzaWNTZWFyY2ggPSBnZXRCYXNpY1NlYXJjaCghIXRhYmxlLnVzZUJhc2ljU2VhcmNoLCB0YWJsZS5maWx0ZXJCYXIsIF9jb2xsZWN0aW9uSXNEcmFmdEVuYWJsZWQsIHNlYXJjaGFibGUpO1xuXHRpZiAoYmFzaWNTZWFyY2gpIHtcblx0XHRhY3Rpb25zLnB1c2goYmFzaWNTZWFyY2gpO1xuXHR9XG5cdGFjdGlvbnMucHVzaCguLi5nZXRBY3Rpb25zKHRhYmxlLCBmYWxzZSwgcGFyYW1ldGVycywgY29sbGVjdGlvbkNvbnRleHQsIGNvbGxlY3Rpb25FbnRpdHkpKTtcblx0Y29uc3QgZnVsbFNjcmVlbiA9IGdldEZ1bGxTY3JlZW4odGFibGUpO1xuXHRpZiAoZnVsbFNjcmVlbikge1xuXHRcdGFjdGlvbnMucHVzaChmdWxsU2NyZWVuKTtcblx0fVxuXG5cdHJldHVybiBhY3Rpb25zIGFzIENvbnRyb2xbXTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIHhtbCBzdHJpbmcgZm9yIGNvbnRleHQgbWVudSBhY3Rpb25zLlxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gY29sbGVjdGlvbkNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSBjb2xsZWN0aW9uRW50aXR5IFRoZSBlbnRpdHkgc2V0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcmV0dXJucyBUaGUgeG1sIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVDb250ZXh0TWVudVRlbXBsYXRlKFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnMsXG5cdGNvbGxlY3Rpb25Db250ZXh0OiBDb250ZXh0LFxuXHRjb2xsZWN0aW9uRW50aXR5OiBFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHlcbik6IE1lbnVJdGVtW10ge1xuXHRjb25zdCB0ZW1wbGF0ZTogTWVudUl0ZW1bXSA9IGdldEFjdGlvbnModGFibGUsIHRydWUsIHBhcmFtZXRlcnMsIGNvbGxlY3Rpb25Db250ZXh0LCBjb2xsZWN0aW9uRW50aXR5KSBhcyB1bmtub3duIGFzIE1lbnVJdGVtW107XG5cdGlmICh0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0dGVtcGxhdGUucHVzaChnZXRFeHBhbmRlZENvbGxhcHNlQWN0aW9ucyh0YWJsZSwgdHJ1ZSwgcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZXhwYW5kTm9kZSkpO1xuXHRcdHRlbXBsYXRlLnB1c2goZ2V0RXhwYW5kZWRDb2xsYXBzZUFjdGlvbnModGFibGUsIGZhbHNlLCBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5jb2xsYXBzZU5vZGUpKTtcblx0fVxuXHRyZXR1cm4gdGVtcGxhdGU7XG59XG5cbmZ1bmN0aW9uIGdldEV4cGFuZGVkQ29sbGFwc2VBY3Rpb25zKHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcywgZXhwYW5kOiBib29sZWFuLCBwcmVzc0hhbmRsZXI/OiAoZTogVUk1RXZlbnQpID0+IHZvaWQpOiBNZW51SXRlbSB7XG5cdGNvbnN0IGVuYWJsZUV4cHJlc3Npb24gPSBleHBhbmRcblx0XHQ/IGFuZChcblx0XHRcdFx0ZXF1YWwocGF0aEluTW9kZWwoXCJjb250ZXh0bWVudS9pc0V4cGFuZGFibGVcIiwgXCJpbnRlcm5hbFwiKSwgdHJ1ZSksXG5cdFx0XHRcdGVxdWFsKHBhdGhJbk1vZGVsKFwiY29udGV4dG1lbnUvbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIsIFwiaW50ZXJuYWxcIiksIDEpXG5cdFx0ICApXG5cdFx0OiBhbmQoXG5cdFx0XHRcdGVxdWFsKHBhdGhJbk1vZGVsKFwiY29udGV4dG1lbnUvaXNDb2xsYXBzYWJsZVwiLCBcImludGVybmFsXCIpLCB0cnVlKSxcblx0XHRcdFx0ZXF1YWwocGF0aEluTW9kZWwoXCJjb250ZXh0bWVudS9udW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIiwgXCJpbnRlcm5hbFwiKSwgMSlcblx0XHQgICk7XG5cdHJldHVybiAoXG5cdFx0PE1lbnVJdGVtXG5cdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgZXhwYW5kID8gXCJFeHBhbmRcIiA6IFwiQ29sbGFwc2VcIiwgXCJDb250ZXh0TWVudVwiXSl9XG5cdFx0XHR0ZXh0PXtleHBhbmQgPyBcIntzYXAuZmUuaTE4bj5NX1RBQkxFX0NPTlRFWFRNRU5VX0VYUEFORH1cIiA6IFwie3NhcC5mZS5pMThuPk1fVEFCTEVfQ09OVEVYVE1FTlVfQ09MTEFQU0V9XCJ9XG5cdFx0XHRwcmVzcz17cHJlc3NIYW5kbGVyfVxuXHRcdFx0ZW5hYmxlZD17ZW5hYmxlRXhwcmVzc2lvbn1cblx0XHQvPlxuXHQpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7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LElBQUksRUFBRUcsVUFBVSxFQUFFRCxpQkFBaUIsRUFBRTBJLGdCQUFnQixDQUEwQjtJQUM5SCxJQUFJNUksS0FBSyxDQUFDK0IsZUFBZSxDQUFDSyxPQUFPLENBQUNvQyxJQUFJLEtBQUssV0FBVyxFQUFFO01BQ3ZEMkIsUUFBUSxDQUFDNkIsSUFBSSxDQUFDcUYsMEJBQTBCLENBQUNyTixLQUFLLEVBQUUsSUFBSSxFQUFFRyxVQUFVLENBQUNzQixlQUFlLENBQUM2TCxVQUFVLENBQUMsQ0FBQztNQUM3Rm5ILFFBQVEsQ0FBQzZCLElBQUksQ0FBQ3FGLDBCQUEwQixDQUFDck4sS0FBSyxFQUFFLEtBQUssRUFBRUcsVUFBVSxDQUFDc0IsZUFBZSxDQUFDOEwsWUFBWSxDQUFDLENBQUM7SUFDakc7SUFDQSxPQUFPcEgsUUFBUTtFQUNoQjtFQUFDMkYsUUFBQSxDQUFBc0IsMkJBQUEsR0FBQUEsMkJBQUE7RUFFRCxTQUFTQywwQkFBMEJBLENBQUNyTixLQUEyQixFQUFFd04sTUFBZSxFQUFFaE0sWUFBb0MsRUFBWTtJQUNqSSxNQUFNaU0sZ0JBQWdCLEdBQUdELE1BQU0sR0FDNUJoTCxHQUFHLENBQ0hnRyxLQUFLLENBQUNDLFdBQVcsQ0FBQywwQkFBMEIsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLENBQUMsRUFDaEVELEtBQUssQ0FBQ0MsV0FBVyxDQUFDLHNDQUFzQyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FDeEUsQ0FBQyxHQUNEakcsR0FBRyxDQUNIZ0csS0FBSyxDQUFDQyxXQUFXLENBQUMsMkJBQTJCLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQ2pFRCxLQUFLLENBQUNDLFdBQVcsQ0FBQyxzQ0FBc0MsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQ3hFLENBQUM7SUFDSixPQUNDekYsSUFBQSxDQUFDQyxRQUFRO01BQ1JHLEVBQUUsRUFBRVAsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUUwSyxNQUFNLEdBQUcsUUFBUSxHQUFHLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBRTtNQUMvRXRLLElBQUksRUFBRXNLLE1BQU0sR0FBRywwQ0FBMEMsR0FBRyw0Q0FBNkM7TUFDekduSyxLQUFLLEVBQUU3QixZQUFhO01BQ3BCSSxPQUFPLEVBQUU2TDtJQUFpQixDQUMxQixDQUFDO0VBRUo7RUFBQyxPQUFBM0IsUUFBQTtBQUFBIiwiaWdub3JlTGlzdCI6W119