@sapui5/sap.fe.macros 1.138.0 → 1.140.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 (240) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Breadcrumbs.js +269 -0
  4. package/src/sap/fe/macros/Breadcrumbs.tsx +243 -0
  5. package/src/sap/fe/macros/CommonHelper.js +2 -2
  6. package/src/sap/fe/macros/CommonHelper.ts +1 -1
  7. package/src/sap/fe/macros/Field.js +85 -58
  8. package/src/sap/fe/macros/Field.ts +104 -60
  9. package/src/sap/fe/macros/FooterContent.js +44 -11
  10. package/src/sap/fe/macros/FooterContent.tsx +48 -9
  11. package/src/sap/fe/macros/FormElement.js +2 -2
  12. package/src/sap/fe/macros/FormElement.ts +1 -2
  13. package/src/sap/fe/macros/MessageButton.js +1 -2
  14. package/src/sap/fe/macros/MessageButton.tsx +0 -1
  15. package/src/sap/fe/macros/MultiValueField.js +17 -6
  16. package/src/sap/fe/macros/MultiValueField.tsx +7 -4
  17. package/src/sap/fe/macros/RichTextEditor.js +30 -5
  18. package/src/sap/fe/macros/RichTextEditor.tsx +34 -6
  19. package/src/sap/fe/macros/Share.js +85 -40
  20. package/src/sap/fe/macros/Share.tsx +42 -1
  21. package/src/sap/fe/macros/Status.js +226 -0
  22. package/src/sap/fe/macros/Status.tsx +192 -0
  23. package/src/sap/fe/macros/ValueHelp.js +4 -29
  24. package/src/sap/fe/macros/ValueHelp.tsx +2 -43
  25. package/src/sap/fe/macros/ai/EasyFillButton.js +10 -4
  26. package/src/sap/fe/macros/ai/EasyFillButton.tsx +8 -1
  27. package/src/sap/fe/macros/ai/EasyFillDialog.js +25 -10
  28. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +32 -23
  29. package/src/sap/fe/macros/ai/EasyFilterBar.js +123 -114
  30. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +140 -124
  31. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +11 -5
  32. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +14 -5
  33. package/src/sap/fe/macros/ai/SummarizationButton.js +2 -2
  34. package/src/sap/fe/macros/ai/SummarizationButton.tsx +1 -1
  35. package/src/sap/fe/macros/chart/ChartDelegate.js +4 -4
  36. package/src/sap/fe/macros/chart/ChartDelegate.ts +3 -3
  37. package/src/sap/fe/macros/chart/ChartHelper.js +1 -2
  38. package/src/sap/fe/macros/chart/ChartHelper.ts +0 -1
  39. package/src/sap/fe/macros/chart/ChartRuntime.js +1 -2
  40. package/src/sap/fe/macros/chart/ChartRuntime.ts +0 -1
  41. package/src/sap/fe/macros/chart/MdcChartTemplate.js +20 -6
  42. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +16 -8
  43. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.js +3 -1
  44. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +2 -0
  45. package/src/sap/fe/macros/controls/FieldWrapper.js +9 -3
  46. package/src/sap/fe/macros/controls/FieldWrapper.ts +11 -2
  47. package/src/sap/fe/macros/controls/FilterBar.js +49 -2
  48. package/src/sap/fe/macros/controls/FilterBar.ts +55 -1
  49. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +2 -2
  50. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -2
  51. package/src/sap/fe/macros/controls/RequiredFlexBox.js +62 -0
  52. package/src/sap/fe/macros/controls/RequiredFlexBox.tsx +20 -0
  53. package/src/sap/fe/macros/controls/filterbar/VisualFilter.js +21 -11
  54. package/src/sap/fe/macros/controls/filterbar/VisualFilter.ts +25 -11
  55. package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.js +11 -2
  56. package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.ts +12 -1
  57. package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.js +18 -1
  58. package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.ts +20 -0
  59. package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
  60. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
  61. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +43 -4
  62. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +48 -1
  63. package/src/sap/fe/macros/designtime/Designtime.helper.js +39 -2
  64. package/src/sap/fe/macros/designtime/Designtime.helper.ts +39 -0
  65. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +15 -4
  66. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +5 -0
  67. package/src/sap/fe/macros/field/FieldBaseDelegate.js +20 -8
  68. package/src/sap/fe/macros/field/FieldBaseDelegate.ts +34 -9
  69. package/src/sap/fe/macros/field/FieldFormatOptions.js +73 -44
  70. package/src/sap/fe/macros/field/FieldFormatOptions.ts +20 -2
  71. package/src/sap/fe/macros/field/FieldRuntime.js +1 -2
  72. package/src/sap/fe/macros/field/FieldRuntime.ts +0 -1
  73. package/src/sap/fe/macros/filter/FilterUtils.js +3 -5
  74. package/src/sap/fe/macros/filter/FilterUtils.ts +2 -4
  75. package/src/sap/fe/macros/filterBar/FilterBar.block.js +8 -2
  76. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +2 -5
  77. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +8 -8
  78. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +8 -8
  79. package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.js +3 -1
  80. package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.ts +2 -0
  81. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +1 -1
  82. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +1 -1
  83. package/src/sap/fe/macros/form/Form.js +1 -4
  84. package/src/sap/fe/macros/form/Form.tsx +0 -3
  85. package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -2
  86. package/src/sap/fe/macros/form/FormContainer.block.js +1 -2
  87. package/src/sap/fe/macros/form/FormContainer.block.ts +0 -1
  88. package/src/sap/fe/macros/form/FormContainer.fragment.xml +40 -0
  89. package/src/sap/fe/macros/form/FormContainerAPI.js +14 -16
  90. package/src/sap/fe/macros/form/FormContainerAPI.ts +13 -15
  91. package/src/sap/fe/macros/form/FormDelegate.js +20 -1
  92. package/src/sap/fe/macros/form/FormDelegate.ts +25 -0
  93. package/src/sap/fe/macros/form/FormHelper.js +1 -2
  94. package/src/sap/fe/macros/form/FormHelper.ts +0 -1
  95. package/src/sap/fe/macros/formatters/TableFormatter.js +10 -1
  96. package/src/sap/fe/macros/formatters/TableFormatter.ts +14 -5
  97. package/src/sap/fe/macros/fpm/CustomFragment.block.js +1 -2
  98. package/src/sap/fe/macros/fpm/CustomFragment.block.ts +0 -1
  99. package/src/sap/fe/macros/inlineEdit/InlineEdit.js +15 -3
  100. package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +14 -2
  101. package/src/sap/fe/macros/internal/ActionCommand.block.js +1 -2
  102. package/src/sap/fe/macros/internal/ActionCommand.block.ts +0 -1
  103. package/src/sap/fe/macros/internal/DataPoint.js +2 -1
  104. package/src/sap/fe/macros/internal/DataPoint.tsx +1 -0
  105. package/src/sap/fe/macros/internal/DataPointFormatOptions.js +11 -2
  106. package/src/sap/fe/macros/internal/DataPointFormatOptions.ts +3 -0
  107. package/src/sap/fe/macros/internal/FilterField.block.js +10 -2
  108. package/src/sap/fe/macros/internal/FilterField.block.ts +11 -1
  109. package/src/sap/fe/macros/internal/field/CheckBoxGroup.fragment.xml +25 -0
  110. package/src/sap/fe/macros/internal/field/DisplayStyle.js +51 -13
  111. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +53 -6
  112. package/src/sap/fe/macros/internal/field/EditStyle.js +5 -1
  113. package/src/sap/fe/macros/internal/field/EditStyle.tsx +4 -0
  114. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +9 -2
  115. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +11 -0
  116. package/src/sap/fe/macros/internal/field/FieldStyles.js +1 -1
  117. package/src/sap/fe/macros/internal/field/FieldStyles.tsx +2 -1
  118. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.js +46 -8
  119. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.ts +60 -6
  120. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +38 -2
  121. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +37 -2
  122. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +2 -1
  123. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +16 -5
  124. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +21 -9
  125. package/src/sap/fe/macros/internal/valuehelp/ValueListTable.fragment.xml +1 -0
  126. package/src/sap/fe/macros/library.js +1 -1
  127. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +7 -2
  128. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +7 -3
  129. package/src/sap/fe/macros/messagebundle.properties +42 -32
  130. package/src/sap/fe/macros/messagebundle_ar.properties +12 -4
  131. package/src/sap/fe/macros/messagebundle_bg.properties +11 -3
  132. package/src/sap/fe/macros/messagebundle_ca.properties +15 -7
  133. package/src/sap/fe/macros/messagebundle_cnr.properties +12 -4
  134. package/src/sap/fe/macros/messagebundle_cs.properties +10 -2
  135. package/src/sap/fe/macros/messagebundle_cy.properties +12 -4
  136. package/src/sap/fe/macros/messagebundle_da.properties +11 -3
  137. package/src/sap/fe/macros/messagebundle_de.properties +18 -10
  138. package/src/sap/fe/macros/messagebundle_el.properties +13 -5
  139. package/src/sap/fe/macros/messagebundle_en.properties +16 -8
  140. package/src/sap/fe/macros/messagebundle_en_GB.properties +16 -8
  141. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +16 -8
  142. package/src/sap/fe/macros/messagebundle_es.properties +13 -5
  143. package/src/sap/fe/macros/messagebundle_es_MX.properties +14 -6
  144. package/src/sap/fe/macros/messagebundle_et.properties +13 -5
  145. package/src/sap/fe/macros/messagebundle_fi.properties +14 -6
  146. package/src/sap/fe/macros/messagebundle_fr.properties +14 -6
  147. package/src/sap/fe/macros/messagebundle_fr_CA.properties +15 -7
  148. package/src/sap/fe/macros/messagebundle_hi.properties +11 -3
  149. package/src/sap/fe/macros/messagebundle_hr.properties +11 -3
  150. package/src/sap/fe/macros/messagebundle_hu.properties +10 -2
  151. package/src/sap/fe/macros/messagebundle_id.properties +18 -10
  152. package/src/sap/fe/macros/messagebundle_it.properties +10 -2
  153. package/src/sap/fe/macros/messagebundle_iw.properties +10 -2
  154. package/src/sap/fe/macros/messagebundle_ja.properties +13 -5
  155. package/src/sap/fe/macros/messagebundle_kk.properties +15 -7
  156. package/src/sap/fe/macros/messagebundle_ko.properties +10 -2
  157. package/src/sap/fe/macros/messagebundle_lt.properties +11 -3
  158. package/src/sap/fe/macros/messagebundle_lv.properties +12 -4
  159. package/src/sap/fe/macros/messagebundle_mk.properties +12 -4
  160. package/src/sap/fe/macros/messagebundle_ms.properties +14 -6
  161. package/src/sap/fe/macros/messagebundle_nl.properties +13 -5
  162. package/src/sap/fe/macros/messagebundle_no.properties +12 -4
  163. package/src/sap/fe/macros/messagebundle_pl.properties +12 -4
  164. package/src/sap/fe/macros/messagebundle_pt.properties +13 -5
  165. package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -4
  166. package/src/sap/fe/macros/messagebundle_ro.properties +12 -4
  167. package/src/sap/fe/macros/messagebundle_ru.properties +13 -5
  168. package/src/sap/fe/macros/messagebundle_sh.properties +12 -4
  169. package/src/sap/fe/macros/messagebundle_sk.properties +11 -3
  170. package/src/sap/fe/macros/messagebundle_sl.properties +12 -4
  171. package/src/sap/fe/macros/messagebundle_sr.properties +12 -4
  172. package/src/sap/fe/macros/messagebundle_sv.properties +11 -3
  173. package/src/sap/fe/macros/messagebundle_th.properties +11 -3
  174. package/src/sap/fe/macros/messagebundle_tr.properties +10 -2
  175. package/src/sap/fe/macros/messagebundle_uk.properties +17 -9
  176. package/src/sap/fe/macros/messagebundle_vi.properties +12 -4
  177. package/src/sap/fe/macros/messagebundle_zh_CN.properties +11 -3
  178. package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -4
  179. package/src/sap/fe/macros/messages/MessageButton.js +55 -36
  180. package/src/sap/fe/macros/messages/MessageButton.ts +64 -39
  181. package/src/sap/fe/macros/messages/MessagePopover.js +2 -2
  182. package/src/sap/fe/macros/messages/MessagePopover.ts +4 -4
  183. package/src/sap/fe/macros/microchart/MicroChartContainer.js +1 -2
  184. package/src/sap/fe/macros/microchart/MicroChartContainer.ts +1 -2
  185. package/src/sap/fe/macros/microchart/MicroChartHelper.js +1 -2
  186. package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +0 -1
  187. package/src/sap/fe/macros/share/ShareAPI.js +4 -29
  188. package/src/sap/fe/macros/share/ShareAPI.ts +1 -32
  189. package/src/sap/fe/macros/situations/SituationsPopover.js +3 -1
  190. package/src/sap/fe/macros/situations/SituationsPopover.ts +2 -0
  191. package/src/sap/fe/macros/table/Action.js +24 -2
  192. package/src/sap/fe/macros/table/Action.ts +13 -0
  193. package/src/sap/fe/macros/table/ActionGroup.js +24 -2
  194. package/src/sap/fe/macros/table/ActionGroup.ts +13 -0
  195. package/src/sap/fe/macros/table/ActionGroupOverride.js +24 -2
  196. package/src/sap/fe/macros/table/ActionGroupOverride.ts +13 -0
  197. package/src/sap/fe/macros/table/ActionOverride.js +24 -2
  198. package/src/sap/fe/macros/table/ActionOverride.ts +13 -0
  199. package/src/sap/fe/macros/table/ActionsTemplating.js +73 -12
  200. package/src/sap/fe/macros/table/ActionsTemplating.tsx +69 -13
  201. package/src/sap/fe/macros/table/Column.js +3 -3
  202. package/src/sap/fe/macros/table/Column.ts +2 -2
  203. package/src/sap/fe/macros/table/MdcTableTemplate.js +20 -8
  204. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +36 -7
  205. package/src/sap/fe/macros/table/QuickFilterSelector.js +35 -14
  206. package/src/sap/fe/macros/table/QuickFilterSelector.tsx +22 -3
  207. package/src/sap/fe/macros/table/Table.block.js +137 -108
  208. package/src/sap/fe/macros/table/Table.block.tsx +29 -2
  209. package/src/sap/fe/macros/table/TableAPI.js +143 -133
  210. package/src/sap/fe/macros/table/TableAPI.ts +5 -1
  211. package/src/sap/fe/macros/table/TableDefinition.js +4 -2
  212. package/src/sap/fe/macros/table/TableDefinition.ts +3 -1
  213. package/src/sap/fe/macros/table/TableHelper.js +1 -2
  214. package/src/sap/fe/macros/table/TableHelper.ts +0 -1
  215. package/src/sap/fe/macros/table/TableRuntime.js +26 -7
  216. package/src/sap/fe/macros/table/TableRuntime.ts +33 -5
  217. package/src/sap/fe/macros/table/Utils.js +6 -2
  218. package/src/sap/fe/macros/table/Utils.ts +5 -1
  219. package/src/sap/fe/macros/table/delegates/ALPTableDelegate.js +1 -2
  220. package/src/sap/fe/macros/table/delegates/ALPTableDelegate.ts +0 -1
  221. package/src/sap/fe/macros/table/delegates/TableDelegate.js +25 -20
  222. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +25 -24
  223. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.js +1 -2
  224. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.ts +0 -1
  225. package/src/sap/fe/macros/table/designtime/Table.designtime.js +3 -1
  226. package/src/sap/fe/macros/table/designtime/Table.designtime.ts +2 -0
  227. package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.js +3 -1
  228. package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.ts +2 -1
  229. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -1
  230. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +1 -0
  231. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +8 -1
  232. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +10 -0
  233. package/src/sap/fe/macros/table/mixin/TableSharing.js +3 -2
  234. package/src/sap/fe/macros/table/mixin/TableSharing.ts +9 -1
  235. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +20 -6
  236. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +36 -14
  237. package/src/sap/fe/macros/visualfilters/VisualFilter.js +95 -7
  238. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +93 -3
  239. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +16 -5
  240. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +18 -4
@@ -38,7 +38,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/templa
38
38
  /**
39
39
  * Helper class used by MDC_Controls to handle SAP Fiori elements for OData V4
40
40
  * @private
41
- * @experimental This module is only for internal/experimental use!
42
41
  */
43
42
  const MicroChartHelper = {
44
43
  /**
@@ -782,4 +781,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/templa
782
781
  };
783
782
  return MicroChartHelper;
784
783
  }, false);
785
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNaWNyb0NoYXJ0SGVscGVyIiwiZ2V0VGhyZXNob2xkQ29sb3IiLCJ2YWx1ZSIsImlDb250ZXh0IiwicGF0aCIsImNvbnRleHQiLCJnZXRQYXRoIiwiaW5jbHVkZXMiLCJWYWx1ZUNvbG9yIiwiRXJyb3IiLCJDcml0aWNhbCIsIk5ldXRyYWwiLCJnZXRNZWFzdXJlUHJvcGVydHlQYXRocyIsImNoYXJ0QW5ub3RhdGlvbnMiLCJlbnRpdHlUeXBlQW5ub3RhdGlvbnMiLCJjaGFydFR5cGUiLCJpc1J1blRpbWVJbnN0YW5jZSIsInByb3BlcnR5UGF0aCIsIkxvZyIsIndhcm5pbmciLCJ1bmRlZmluZWQiLCJtZWFzdXJlSW5kZXgiLCJNZWFzdXJlcyIsImlNZWFzdXJlQXR0cmlidXRlIiwiQ29tbW9uSGVscGVyIiwiZ2V0TWVhc3VyZUF0dHJpYnV0ZUluZGV4IiwibWVhc3VyZUF0dHJpYnV0ZSIsIk1lYXN1cmVBdHRyaWJ1dGVzIiwiZGF0YVBvaW50IiwiRGF0YVBvaW50IiwiJHRhcmdldCIsIiRBbm5vdGF0aW9uUGF0aCIsIlZhbHVlIiwiJFBhdGgiLCJwdXNoIiwiam9pbiIsImdldEhpZGRlblBhdGhFeHByZXNzaW9uIiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJoaWRkZW5QYXRocyIsImZvckVhY2giLCJjYWxsIiwiaGlkZGVuUHJvcGVydHkiLCJpc05vdEFsd2F5c0hpZGRlbiIsIm1heFZhbHVlIiwidmFsdWVIaWRkZW4iLCJtYXhWYWx1ZUhpZGRlbiIsImxvZ0Vycm9yIiwiZXJyb3IiLCJmb3JtYXREZWNpbWFsIiwicHJvcGVydHkiLCJmcmFjdGlvbkRpZ2l0cyIsImNvbnN0cmFpbnRzIiwiZm9ybWF0T3B0aW9ucyIsInNjYWxlIiwiJFNjYWxlIiwiJE51bGxhYmxlIiwiJFByZWNpc2lvbiIsImRlY2ltYWxzIiwiTnVtYmVyRm9ybWF0IiwiZ2V0RmxvYXRJbnN0YW5jZSIsInN0eWxlIiwicHJlc2VydmVEZWNpbWFscyIsImZvcm1hdCIsImdldFNlbGVjdFBhcmFtZXRlcnMiLCJncm91cElkIiwic29ydE9yZGVyIiwiY3JpdGljYWxpdHlDYWxjdWxhdGlvbiIsImNyaXRpY2FsaXR5Iiwib3RoZXJQYXRocyIsInJldHVybk9iamVjdCIsInNvcnRlcnMiLCJwYXJhbWV0ZXJzIiwic29ydGVyIiwiUHJvcGVydHkiLCJEZXNjZW5kaW5nIiwiY3JpY3RpY2FsaXR5Q2FsY3VsYXRpb25LZXlzIiwiT2JqZWN0Iiwia2V5cyIsImtleSIsIiQkZ3JvdXBJZCIsIiRzZWxlY3QiLCIkb3JkZXJieSIsImdldERhdGFQb2ludFF1YWxpZmllcnNGb3JNZWFzdXJlcyIsImlzTWljcm9DaGFydFJ1blRpbWUiLCJxdWFsaWZpZXJzIiwibWVhc3VyZUF0dHJpYnV0ZXMiLCJmbkFkZERhdGFQb2ludFF1YWxpZmllciIsImNoYXJ0TWVhc3VyZSIsInF1YWxpZmllciIsIm1lYXN1cmUiLCJNZWFzdXJlIiwiJFByb3BlcnR5UGF0aCIsImFubm90YXRpb25QYXRoIiwic3BsaXQiLCJsb2dXYXJuaW5nIiwiZ2V0RGlzcGxheVZhbHVlRm9yTWljcm9DaGFydCIsInBhdGhUZXh0IiwidmFsdWVUZXh0UGF0aCIsInZhbHVlRGF0YVBvaW50UGF0aCIsInZhbHVlRm9ybWF0IiwiVmFsdWVGb3JtYXQiLCJOdW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMiLCJzaG91bGRSZW5kZXJNaWNyb0NoYXJ0IiwiY2hhcnRBbm5vdGF0aW9uIiwiYXZhaWxhYmxlQ2hhcnRUeXBlcyIsIkNoYXJ0VHlwZSIsImRhdGFQb2ludFZhbHVlIiwiZGF0YVBvaW50VmFsdWVIaWRkZW5QYXRoIiwiYW5ub3RhdGlvbnMiLCJVSSIsIkhpZGRlbiIsImNoYXJ0QW5ub3RhdGlvbkRpbWVuc2lvbiIsIkRpbWVuc2lvbnMiLCJmaW5hbERhdGFQb2ludFZhbHVlIiwiZGF0YVBvaW50TWF4aW11bVZhbHVlIiwiTWF4aW11bVZhbHVlIiwiZGF0YVBvaW50TWF4aW11bVZhbHVlSGlkZGVuUGF0aCIsInNob3VsZE1pY3JvQ2hhcnRSZW5kZXIiLCJkYXRhUG9pbnRWYWx1ZUhpZGRlbiIsInRhcmdldEFubm90YXRpb25zIiwiZGF0YVBvaW50TWF4VmFsdWUiLCJoaWRkZW5QYXRoIiwibWF4VmFsdWVIaWRkZW5QYXRoIiwiZ2V0RGF0YVBvaW50UXVhbGlmaWVyc0Zvck1pY3JvQ2hhcnQiLCJnZXRDb2xvclBhbGV0dGVGb3JNaWNyb0NoYXJ0IiwiQ3JpdGljYWxpdHkiLCJnZXRNZWFzdXJlU2NhbGVGb3JNaWNyb0NoYXJ0IiwidmFsdWVPZiIsImdldEJpbmRpbmdFeHByZXNzaW9uRm9yTWljcm9jaGFydCIsIm1pY3JvQ2hhcnQiLCJjb2xsZWN0aW9uIiwidWlOYW1lIiwiY2hhcnRzV2l0aEJpbmRpbmdFeHByZXNzaW9uIiwiY29uZGl0aW9uIiwiY3VycmVuY3lPclVuaXQiLCJnZXRVT01QYXRoRm9yTWljcm9jaGFydCIsInNob3dPbmx5Q2hhcnQiLCJkYXRhUG9pbnRDcml0aWNhbGxpdHkiLCJ0YXJnZXRPYmplY3QiLCJmdW5jdGlvblZhbHVlIiwiYmF0Y2hHcm91cElkIiwiY2hhcnRzV2l0aFVPTVBhcnRzIiwiSVNPQ3VycmVuY3kiLCJVbml0IiwiZ2V0QWdncmVnYXRpb25Gb3JNaWNyb2NoYXJ0IiwiYWdncmVnYXRpb25UeXBlIiwiZGltZW5zaW9uIiwibWVhc3VyZU9yRGltZW5zaW9uQmFyIiwiZGF0YVBvaW50Q3JpdGljYWxsaXR5Q2FsYyIsInRhcmdldFZhbHVlUGF0aCIsImRpbWVuc2lvblByb3BlcnR5UGF0aCIsIkNvbW1vbiIsIlRleHQiLCJDcml0aWNhbGl0eUNhbGN1bGF0aW9uIiwiVGFyZ2V0VmFsdWUiLCJnZXRDdXJyZW5jeU9yVW5pdCIsImdldENhbGVuZGFyUGF0dGVybiIsInByb3BlcnR5VHlwZSIsImNoZWNrUGF0dGVybkZvclJ1bnRpbWVJbnN0YW5jZSIsImNoZWNrUGF0dGVybkZvclRlbXBsYXRlVGltZUluc3RhbmNlIiwiSXNDYWxlbmRhclllYXIiLCJJc0NhbGVuZGFyUXVhcnRlciIsIklzQ2FsZW5kYXJNb250aCIsIklzQ2FsZW5kYXJXZWVrIiwiSXNDYWxlbmRhckRhdGUiLCJJc0NhbGVuZGFyWWVhck1vbnRoIiwiZ2V0WCIsInBhdHRlcm4iLCJzb21lIiwidHlwZSIsImNvbXBpbGVFeHByZXNzaW9uIiwiZm9ybWF0UmVzdWx0IiwicGF0aEluTW9kZWwiLCJjb25zdGFudCIsImdldEV4cHJlc3Npb25XaXRoVHlwZSIsImV4cHJlc3Npb24iLCJmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwiY2FsY3VsYXRlQ29sb3JCaW5kaW5nIiwiYWN0dWFsVmFsdWVFeHByZXNzaW9uIiwiY3JpdGljYWxpdHlFeHByZXNzaW9uRm9yTWljcm9jaGFydCIsImNvbG9yQmluZGluZyIsImRpcmVjdGlvbiIsIkltcHJvdmVtZW50RGlyZWN0aW9uIiwiZGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZSIsIkRldmlhdGlvblJhbmdlTG93VmFsdWUiLCJ0b2xlcmFuY2VSYW5nZUxvd1ZhbHVlIiwiVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSIsImFjY2VwdGFuY2VSYW5nZUxvd1ZhbHVlIiwiQWNjZXB0YW5jZVJhbmdlTG93VmFsdWUiLCJhY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWUiLCJBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWUiLCJ0b2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZSIsIlRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlIiwiZGV2aWF0aW9uUmFuZ2VIaWdoVmFsdWUiLCJEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZSIsImdldENyaXRpY2FsaXR5Q2FsY3VsYXRpb25CaW5kaW5nIiwiZ2V0QnVsbGV0TWljcm9DaGFydEFnZ3JlZ2F0aW9ucyIsIkJ1bGxldE1pY3JvQ2hhcnREYXRhIiwiX191aTVfcmVxdWlyZV9hc3luYyIsImRlZmF1bHQiLCJ0aHJlc2hvbGRzIiwiX2pzeCIsImNvbG9yIiwiYWN0dWFsIiwiZ2V0U3RhY2tNaWNyb0NoYXJ0QWdncmVnYXRpb25zIiwibWVhc3VyZURhdGFQYXRoIiwiU3RhY2tlZEJhck1pY3JvQ2hhcnRCYXIiLCJ2YWx1ZUNvbG9yIiwiZGlzcGxheVZhbHVlIiwiYmFycyIsImdldEhhcnZleU1pY3JvQ2hhcnRBZ2dyZWdhdGlvbnMiLCJIYXJ2ZXlCYWxsTWljcm9DaGFydEl0ZW0iLCJmcmFjdGlvbkxhYmVsIiwiZnJhY3Rpb25WYWx1ZSIsImNvbG9yVmFsdWUiLCJpdGVtcyIsImZvcm1hdHRlZExhYmVsIiwiZnJhY3Rpb24iLCJnZXRDb21wYXJpc29uTWljcm9DaGFydEFnZ3JlZ2F0aW9ucyIsImNoYXJ0IiwiQ29tcGFyaXNvbk1pY3JvQ2hhcnREYXRhIiwiY29tbW9uVGV4dEFubm90YXRpb24iLCJ0aXRsZUV4cHJlc3Npb24iLCJ0aXRsZSIsImdldENvbHVtbk1pY3JvQ2hhcnRBZ2dyZWdhdGlvbnMiLCJDb2x1bW5NaWNyb0NoYXJ0RGF0YSIsIkNvbHVtbk1pY3JvQ2hhcnRMYWJlbCIsImNvbHVtbkNoYXJ0QWdncmVnYXRpb25zIiwiY29sdW1ucyIsImxlZnRCb3R0b21MYWJlbCIsImxlZnRUb3BMYWJlbCIsInJpZ2h0Qm90dG9tTGFiZWwiLCJyaWdodFRvcExhYmVsIiwiZ2V0TGluZU1pY3JvQ2hhcnRBZ2dyYWdhdGlvbnMiLCJtaWNyb0NoYXJ0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImNoYXJ0VGFyZ2V0IiwidGFyZ2V0TmF2aWdhdGlvblBhdGgiLCJMaW5lTWljcm9DaGFydExpbmUiLCJMaW5lTWljcm9DaGFydFBvaW50IiwiZGltZW5zaW9uRGF0YVBhdGgiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsIm1lYXN1cmVzIiwibGluZXMiLCJpIiwiRGF0YVBvaW50UGF0aCIsInBvaW50cyIsImdldE9iamVjdCIsIlNvcnRPcmRlciIsInhEYXRhIiwiZ2V0WERhdGEiLCJ5RGF0YSIsImNoaWxkcmVuIiwieCIsInkiLCJwcm9wQW5ub3RhdGlvbnMiLCJuYW1lIiwidmFsdWVGb3JtYXR0ZXJzIiwiZm9ybWF0U3RyaW5nRGltZW5zaW9uIiwiY29udGV4dExvY2F0aW9uIiwiZ2V0VmFsdWVCaW5kaW5nIiwiZ2V0QXJlYU1pY3JvQ2hhcnRBZ2dyZWdhdGlvbnMiLCJBcmVhTWljcm9DaGFydEl0ZW0iLCJBcmVhTWljcm9DaGFydFBvaW50IiwiQXJlYU1pY3JvQ2hhcnRMYWJlbCIsInRhcmdldE5hdmlnYXRpb25EYXRhTW9kZWxPYmplY3QiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJnZXRBcmVhTWljcm9DaGFydEl0ZW0iLCJpc0NoYXJ0QWdncmVnYXRpb24iLCJfdHlwZSIsImFnZ3JlZ2F0aW9uIiwidGFyZ2V0IiwiZmlyc3RYTGFiZWwiLCJmaXJzdFlMYWJlbCIsImxhc3RYTGFiZWwiLCJsYXN0WUxhYmVsIiwiaW1wcm92ZW1lbnREaXJlY3Rpb24iLCJtaW5UaHJlc2hvbGQiLCJtYXhUaHJlc2hvbGQiLCJpbm5lck1pblRocmVzaG9sZCIsImlubmVyTWF4VGhyZXNob2xkIiwiZ2V0QnVsbGV0TWljcm9DaGFydFByb3BlcnRpZXMiLCJtaWNyb0NoYXJ0UHJvcGVydGllcyIsInRhcmdldFZhbHVlIiwiZm9yZWNhc3RWYWx1ZSIsIkZvcmVjYXN0VmFsdWUiLCJtaW5WYWx1ZSIsIk1pbmltdW1WYWx1ZSIsImFjdHVhbFZhbHVlTGFiZWwiLCJ0YXJnZXRWYWx1ZUxhYmVsIiwic2hvd0RlbHRhVmFsdWUiLCJWaXN1YWxpemF0aW9uIiwibW9kZSIsImdldFJhZGlhbE1pY3JvQ2hhcnRQcm9wZXJ0aWVzIiwidG90YWwiLCJwZXJjZW50YWdlIiwiY29sb3JFeHByZXNzaW9uIiwiYnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlDb2xvck1pY3JvQ2hhcnQiLCJnZXRIYXJ2ZXlNaWNyb0NoYXJ0UHJvcGVydGllcyIsInRvdGFsTGFiZWwiLCJjb2xvclBhbGV0dGUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk1pY3JvQ2hhcnRIZWxwZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcblx0UHJvcGVydHkgYXMgRGF0YU1vZGVsUHJvcGVydHksXG5cdEVudGl0eVNldCxcblx0TmF2aWdhdGlvblByb3BlcnR5LFxuXHRQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdFByaW1pdGl2ZVR5cGUsXG5cdFByb3BlcnR5QW5ub3RhdGlvblZhbHVlLFxuXHRQcm9wZXJ0eVBhdGhcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBNZWFzdXJlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9BbmFseXRpY3NcIjtcbmltcG9ydCB0eXBlIHsgU29ydE9yZGVyVHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgeyBDb21tb25Bbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUFubm90YXRpb25zX0NvbW1vbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uX0VkbVwiO1xuaW1wb3J0IHsgTWVhc3VyZXNBbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL01lYXN1cmVzXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5QW5ub3RhdGlvbnNfTWVhc3VyZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL01lYXN1cmVzX0VkbVwiO1xuaW1wb3J0IHR5cGUge1xuXHRDaGFydCxcblx0Q2hhcnRNZWFzdXJlQXR0cmlidXRlVHlwZVR5cGVzLFxuXHRDcml0aWNhbGl0eUNhbGN1bGF0aW9uVHlwZSxcblx0RGF0YVBvaW50LFxuXHREYXRhUG9pbnRUeXBlLFxuXHRQcmVzZW50YXRpb25WYXJpYW50XG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IENoYXJ0VHlwZSwgVUlBbm5vdGF0aW9uVGVybXMsIFZpc3VhbGl6YXRpb25UeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Y29uc3RhbnQsXG5cdGZvcm1hdFJlc3VsdCxcblx0Zm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbixcblx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLFxuXHRwYXRoSW5Nb2RlbFxufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsRW50aXR5VHlwZUFubm90YXRpb25zLCBNZXRhTW9kZWxQcm9wZXJ0eUFubm90YXRpb25zIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBlbmhhbmNlRGF0YU1vZGVsUGF0aCwgdHlwZSBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgeyBWYWx1ZUNvbG9yIH0gZnJvbSBcInNhcC9tL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIHsgJEFyZWFNaWNyb0NoYXJ0U2V0dGluZ3MgfSBmcm9tIFwic2FwL3N1aXRlL3VpL21pY3JvY2hhcnQvQXJlYU1pY3JvQ2hhcnRcIjtcbmltcG9ydCB0eXBlIHsgJEJ1bGxldE1pY3JvQ2hhcnRTZXR0aW5ncyB9IGZyb20gXCJzYXAvc3VpdGUvdWkvbWljcm9jaGFydC9CdWxsZXRNaWNyb0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSB7ICRIYXJ2ZXlCYWxsTWljcm9DaGFydFNldHRpbmdzIH0gZnJvbSBcInNhcC9zdWl0ZS91aS9taWNyb2NoYXJ0L0hhcnZleUJhbGxNaWNyb0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSB7ICRTdGFja2VkQmFyTWljcm9DaGFydFNldHRpbmdzIH0gZnJvbSBcInNhcC9zdWl0ZS91aS9taWNyb2NoYXJ0L1N0YWNrZWRCYXJNaWNyb0NoYXJ0XCI7XG5pbXBvcnQgTnVtYmVyRm9ybWF0IGZyb20gXCJzYXAvdWkvY29yZS9mb3JtYXQvTnVtYmVyRm9ybWF0XCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbE5hdlByb3BlcnR5LCBNZXRhTW9kZWxUeXBlIH0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0IHR5cGUgTWljcm9DaGFydCBmcm9tIFwiLi4vTWljcm9DaGFydFwiO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXN0cmljdGVkLWltcG9ydHNcbmltcG9ydCB0eXBlIHsgJENvbHVtbk1pY3JvQ2hhcnRTZXR0aW5ncyB9IGZyb20gXCJzYXAvc3VpdGUvdWkvbWljcm9jaGFydC9Db2x1bW5NaWNyb0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSB7ICRDb21wYXJpc29uTWljcm9DaGFydFNldHRpbmdzIH0gZnJvbSBcInNhcC9zdWl0ZS91aS9taWNyb2NoYXJ0L0NvbXBhcmlzb25NaWNyb0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHsgZ2V0VmFsdWVCaW5kaW5nIH0gZnJvbSBcIi4uL2ZpZWxkL0ZpZWxkVGVtcGxhdGluZ1wiO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXN0cmljdGVkLWltcG9ydHNcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVzdHJpY3RlZC1pbXBvcnRzXG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5QW5ub3RhdGlvbnMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0VkbV9UeXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdmFsdWVGb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1ZhbHVlRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBidWlsZEV4cHJlc3Npb25Gb3JDcml0aWNhbGl0eUNvbG9yTWljcm9DaGFydCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0NyaXRpY2FsaXR5Rm9ybWF0dGVyc1wiO1xuaW1wb3J0IHR5cGUgeyAkTGluZU1pY3JvQ2hhcnRTZXR0aW5ncyB9IGZyb20gXCJzYXAvc3VpdGUvdWkvbWljcm9jaGFydC9MaW5lTWljcm9DaGFydFwiO1xuaW1wb3J0IHR5cGUgeyAkUmFkaWFsTWljcm9DaGFydFNldHRpbmdzIH0gZnJvbSBcInNhcC9zdWl0ZS91aS9taWNyb2NoYXJ0L1JhZGlhbE1pY3JvQ2hhcnRcIjtcbmltcG9ydCB0eXBlIHsgQWdncmVnYXRpb25CaW5kaW5nSW5mbyB9IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5cbnR5cGUgUHJvcGVydHkgPSB7XG5cdCRraW5kPzogc3RyaW5nO1xuXHQkVHlwZT86IHN0cmluZztcblx0JE5hbWU/OiBzdHJpbmc7XG5cdCROdWxsYWJsZT86IGJvb2xlYW47XG5cdCRNYXhMZW5ndGg/OiBudW1iZXI7XG5cdCRQcmVjaXNpb24/OiBudW1iZXI7XG5cdCRTY2FsZT86IG51bWJlciB8IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFBhcmFtZXRlclR5cGUgPSB7XG5cdCQkZ3JvdXBJZD86IHN0cmluZztcblx0JHNlbGVjdD86IHN0cmluZ1tdO1xuXHQkb3JkZXJieT86IHN0cmluZ1tdO1xufTtcblxuZXhwb3J0IHR5cGUgTWljcm9DaGFydEFnZ3JlZ2F0aW9uID1cblx0fCBQaWNrPCRCdWxsZXRNaWNyb0NoYXJ0U2V0dGluZ3MsIFwiYWN0dWFsXCIgfCBcInRocmVzaG9sZHNcIj5cblx0fCBQaWNrPCRIYXJ2ZXlCYWxsTWljcm9DaGFydFNldHRpbmdzLCBcIml0ZW1zXCI+XG5cdHwgUGljazwkU3RhY2tlZEJhck1pY3JvQ2hhcnRTZXR0aW5ncywgXCJiYXJzXCI+XG5cdHwgUGljazxcblx0XHRcdCRBcmVhTWljcm9DaGFydFNldHRpbmdzLFxuXHRcdFx0fCBcImNoYXJ0XCJcblx0XHRcdHwgXCJ0YXJnZXRcIlxuXHRcdFx0fCBcImZpcnN0WExhYmVsXCJcblx0XHRcdHwgXCJmaXJzdFlMYWJlbFwiXG5cdFx0XHR8IFwibGFzdFhMYWJlbFwiXG5cdFx0XHR8IFwibGFzdFlMYWJlbFwiXG5cdFx0XHR8IFwibWluVGhyZXNob2xkXCJcblx0XHRcdHwgXCJtYXhUaHJlc2hvbGRcIlxuXHRcdFx0fCBcImlubmVyTWluVGhyZXNob2xkXCJcblx0XHRcdHwgXCJpbm5lck1heFRocmVzaG9sZFwiXG5cdCAgPlxuXHR8IFBpY2s8JENvbHVtbk1pY3JvQ2hhcnRTZXR0aW5ncywgXCJjb2x1bW5zXCIgfCBcImxlZnRCb3R0b21MYWJlbFwiIHwgXCJyaWdodEJvdHRvbUxhYmVsXCIgfCBcImxlZnRUb3BMYWJlbFwiIHwgXCJyaWdodFRvcExhYmVsXCI+XG5cdHwgUGljazwkQ29tcGFyaXNvbk1pY3JvQ2hhcnRTZXR0aW5ncywgXCJkYXRhXCI+XG5cdHwgUGljazwkTGluZU1pY3JvQ2hhcnRTZXR0aW5ncywgXCJsaW5lc1wiPjtcblxuZXhwb3J0IHR5cGUgTWljcm9DaGFydFNldHRpbmdzID1cblx0fCAkQnVsbGV0TWljcm9DaGFydFNldHRpbmdzXG5cdHwgJEhhcnZleUJhbGxNaWNyb0NoYXJ0U2V0dGluZ3Ncblx0fCAkU3RhY2tlZEJhck1pY3JvQ2hhcnRTZXR0aW5nc1xuXHR8ICRDb21wYXJpc29uTWljcm9DaGFydFNldHRpbmdzXG5cdHwgJEFyZWFNaWNyb0NoYXJ0U2V0dGluZ3Ncblx0fCAkQ29sdW1uTWljcm9DaGFydFNldHRpbmdzXG5cdHwgJFJhZGlhbE1pY3JvQ2hhcnRTZXR0aW5ncztcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdXNlZCBieSBNRENfQ29udHJvbHMgdG8gaGFuZGxlIFNBUCBGaW9yaSBlbGVtZW50cyBmb3IgT0RhdGEgVjRcbiAqIEBwcml2YXRlXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgbW9kdWxlIGlzIG9ubHkgZm9yIGludGVybmFsL2V4cGVyaW1lbnRhbCB1c2UhXG4gKi9cbmNvbnN0IE1pY3JvQ2hhcnRIZWxwZXIgPSB7XG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIFRocmVzaG9sZCBDb2xvciBmb3IgYnVsbGV0IG1pY3JvIGNoYXJ0LlxuXHQgKiBAcGFyYW0gdmFsdWUgVGhyZXNob2xkIHZhbHVlIHByb3ZpZGVkIGluIHRoZSBhbm5vdGF0aW9uc1xuXHQgKiBAcGFyYW0gaUNvbnRleHQgSW50ZXJmYWNlQ29udGV4dCB3aXRoIHBhdGggdG8gdGhlIHRocmVzaG9sZFxuXHQgKiBAcmV0dXJucyBUaGUgaW5kaWNhdG9yIGZvciBUaHJlc2hvbGQgQ29sb3Jcblx0ICovXG5cdGdldFRocmVzaG9sZENvbG9yOiBmdW5jdGlvbiAodmFsdWU6IHN0cmluZywgaUNvbnRleHQ6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSk6IFZhbHVlQ29sb3Ige1xuXHRcdGNvbnN0IHBhdGggPSBpQ29udGV4dC5jb250ZXh0LmdldFBhdGgoKTtcblx0XHRpZiAocGF0aC5pbmNsdWRlcyhcIkRldmlhdGlvblJhbmdlXCIpKSB7XG5cdFx0XHRyZXR1cm4gVmFsdWVDb2xvci5FcnJvcjtcblx0XHR9IGVsc2UgaWYgKHBhdGguaW5jbHVkZXMoXCJUb2xlcmFuY2VSYW5nZVwiKSkge1xuXHRcdFx0cmV0dXJuIFZhbHVlQ29sb3IuQ3JpdGljYWw7XG5cdFx0fVxuXHRcdHJldHVybiBWYWx1ZUNvbG9yLk5ldXRyYWw7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFRvIGZldGNoIG1lYXN1cmVzIGZyb20gRGF0YVBvaW50cy5cblx0ICogQHBhcmFtIGNoYXJ0QW5ub3RhdGlvbnMgQ2hhcnQgQW5ub3RhdGlvbnNcblx0ICogQHBhcmFtIGVudGl0eVR5cGVBbm5vdGF0aW9ucyBFbnRpdHlUeXBlIEFubm90YXRpb25zXG5cdCAqIEBwYXJhbSBjaGFydFR5cGUgQ2hhcnQgVHlwZSB1c2VkXG5cdCAqIEByZXR1cm5zIENvbnRhaW5pbmcgYWxsIG1lYXN1cmVzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0Z2V0TWVhc3VyZVByb3BlcnR5UGF0aHM6IGZ1bmN0aW9uIChcblx0XHRjaGFydEFubm90YXRpb25zOiBNZXRhTW9kZWxUeXBlPENoYXJ0PiB8IENoYXJ0LFxuXHRcdGVudGl0eVR5cGVBbm5vdGF0aW9uczogTWV0YU1vZGVsRW50aXR5VHlwZUFubm90YXRpb25zIHwgdW5kZWZpbmVkLFxuXHRcdGNoYXJ0VHlwZTogc3RyaW5nLFxuXHRcdGlzUnVuVGltZUluc3RhbmNlPzogYm9vbGVhblxuXHQpOiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgcHJvcGVydHlQYXRoOiBzdHJpbmdbXSA9IFtdO1xuXG5cdFx0aWYgKCFlbnRpdHlUeXBlQW5ub3RhdGlvbnMpIHtcblx0XHRcdExvZy53YXJuaW5nKFwiRkU6TWFjcm86TWljcm9DaGFydCA6IENvdWxkbid0IGZpbmQgYW5ub3RhdGlvbnMgZm9yIHRoZSBEYXRhUG9pbnQuXCIpO1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IG1lYXN1cmVJbmRleCBpbiBjaGFydEFubm90YXRpb25zLk1lYXN1cmVzKSB7XG5cdFx0XHRjb25zdCBpTWVhc3VyZUF0dHJpYnV0ZSA9IENvbW1vbkhlbHBlci5nZXRNZWFzdXJlQXR0cmlidXRlSW5kZXgoXG5cdFx0XHRcdFx0bWVhc3VyZUluZGV4IGFzIHVua25vd24gYXMgbnVtYmVyLFxuXHRcdFx0XHRcdGNoYXJ0QW5ub3RhdGlvbnMsXG5cdFx0XHRcdFx0aXNSdW5UaW1lSW5zdGFuY2Vcblx0XHRcdFx0KSxcblx0XHRcdFx0bWVhc3VyZUF0dHJpYnV0ZSA9XG5cdFx0XHRcdFx0aU1lYXN1cmVBdHRyaWJ1dGUgPiAtMSAmJiBjaGFydEFubm90YXRpb25zLk1lYXN1cmVBdHRyaWJ1dGVzICYmIGNoYXJ0QW5ub3RhdGlvbnMuTWVhc3VyZUF0dHJpYnV0ZXNbaU1lYXN1cmVBdHRyaWJ1dGVdO1xuXHRcdFx0bGV0IGRhdGFQb2ludDtcblx0XHRcdGlmIChpc1J1blRpbWVJbnN0YW5jZSkge1xuXHRcdFx0XHRkYXRhUG9pbnQgPSAobWVhc3VyZUF0dHJpYnV0ZSAmJiAobWVhc3VyZUF0dHJpYnV0ZSBhcyBDaGFydE1lYXN1cmVBdHRyaWJ1dGVUeXBlVHlwZXMpPy5EYXRhUG9pbnQ/LiR0YXJnZXQpIHx8IHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRhdGFQb2ludCA9IChtZWFzdXJlQXR0cmlidXRlICYmXG5cdFx0XHRcdFx0ZW50aXR5VHlwZUFubm90YXRpb25zICYmXG5cdFx0XHRcdFx0ZW50aXR5VHlwZUFubm90YXRpb25zW1xuXHRcdFx0XHRcdFx0KFxuXHRcdFx0XHRcdFx0XHRtZWFzdXJlQXR0cmlidXRlLkRhdGFQb2ludCBhcyB7XG5cdFx0XHRcdFx0XHRcdFx0JEFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCk/LiRBbm5vdGF0aW9uUGF0aCBhcyBrZXlvZiBNZXRhTW9kZWxFbnRpdHlUeXBlQW5ub3RhdGlvbnNcblx0XHRcdFx0XHRdKSBhcyBNZXRhTW9kZWxUeXBlPERhdGFQb2ludFR5cGU+IHwgdW5kZWZpbmVkO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBwYXRoID0gaXNSdW5UaW1lSW5zdGFuY2UgPyBkYXRhUG9pbnQ/LlZhbHVlLnBhdGggOiBkYXRhUG9pbnQ/LlZhbHVlLiRQYXRoO1xuXHRcdFx0aWYgKHBhdGgpIHtcblx0XHRcdFx0cHJvcGVydHlQYXRoLnB1c2gocGF0aCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRMb2cud2FybmluZyhcblx0XHRcdFx0XHRgRkU6TWFjcm86TWljcm9DaGFydCA6IENvdWxkbid0IGZpbmQgRGF0YVBvaW50KFZhbHVlKSBtZWFzdXJlIGZvciB0aGUgbWVhc3VyZUF0dHJpYnV0ZSAke2NoYXJ0VHlwZX0gTWljcm9DaGFydC5gXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlzUnVuVGltZUluc3RhbmNlID8gcHJvcGVydHlQYXRoIDogcHJvcGVydHlQYXRoLmpvaW4oXCIsXCIpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZpc2libGUgZXhwcmVzc2lvbiBwYXRoLlxuXHQgKiBAcGFyYW0gYXJnc1xuXHQgKiBAcmV0dXJucyBFeHByZXNzaW9uIEJpbmRpbmcgZm9yIHRoZSB2aXNpYmxlLlxuXHQgKi9cblx0Z2V0SGlkZGVuUGF0aEV4cHJlc3Npb246IGZ1bmN0aW9uICguLi5hcmdzOiB1bmtub3duW10pOiBzdHJpbmcgfCBib29sZWFuIHtcblx0XHRpZiAoIWFyZ3NbMF0gJiYgIWFyZ3NbMV0pIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRpZiAoYXJnc1swXSA9PT0gdHJ1ZSB8fCBhcmdzWzFdID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaGlkZGVuUGF0aHM6IHN0cmluZ1tdID0gW107XG5cdFx0W10uZm9yRWFjaC5jYWxsKGFyZ3MsIGZ1bmN0aW9uIChoaWRkZW5Qcm9wZXJ0eTogdW5rbm93bikge1xuXHRcdFx0aWYgKGhpZGRlblByb3BlcnR5ICYmIChoaWRkZW5Qcm9wZXJ0eSBhcyB7ICRQYXRoOiBzdHJpbmcgfSkuJFBhdGgpIHtcblx0XHRcdFx0aGlkZGVuUGF0aHMucHVzaChcIiV7XCIgKyAoaGlkZGVuUHJvcGVydHkgYXMgeyAkUGF0aDogc3RyaW5nIH0pLiRQYXRoICsgXCJ9XCIpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIGhpZGRlblBhdGhzLmxlbmd0aCA/IFwiez0gXCIgKyBoaWRkZW5QYXRocy5qb2luKFwiIHx8IFwiKSArIFwiID09PSB0cnVlID8gZmFsc2UgOiB0cnVlIH1cIiA6IGZhbHNlO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHRydWUvZmFsc2UgdG8gZGlzcGxheSBjaGFydC5cblx0ICogQHBhcmFtIGNoYXJ0VHlwZSBUaGUgY2hhcnQgdHlwZVxuXHQgKiBAcGFyYW0gdmFsdWUgRGF0YSBwb2ludCB2YWx1ZSBvZiBWYWx1ZVxuXHQgKiBAcGFyYW0gdmFsdWUuJFBhdGhcblx0ICogQHBhcmFtIG1heFZhbHVlIERhdGEgcG9pbnQgdmFsdWUgb2YgTWF4aW11bVZhbHVlXG5cdCAqIEBwYXJhbSBtYXhWYWx1ZS4kUGF0aFxuXHQgKiBAcGFyYW0gdmFsdWVIaWRkZW4gSGlkZGVuIHBhdGggb2JqZWN0L2Jvb2xlYW4gdmFsdWUgZm9yIHRoZSByZWZlcmVuY2VkIHByb3BlcnR5IG9mIHZhbHVlXG5cdCAqIEBwYXJhbSB2YWx1ZUhpZGRlbi4kUGF0aFxuXHQgKiBAcGFyYW0gbWF4VmFsdWVIaWRkZW4gSGlkZGVuIHBhdGggb2JqZWN0L2Jvb2xlYW4gdmFsdWUgZm9yIHRoZSByZWZlcmVuY2VkIHByb3BlcnR5IG9mIE1heFZhbHVlXG5cdCAqIEBwYXJhbSBtYXhWYWx1ZUhpZGRlbi4kUGF0aFxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgb3IgYGZhbHNlYCB0byBoaWRlL3Nob3cgY2hhcnRcblx0ICovXG5cdGlzTm90QWx3YXlzSGlkZGVuOiBmdW5jdGlvbiAoXG5cdFx0Y2hhcnRUeXBlOiBzdHJpbmcsXG5cdFx0dmFsdWU6IHsgJFBhdGg6IHN0cmluZyB9LFxuXHRcdG1heFZhbHVlOiB7ICRQYXRoOiBzdHJpbmcgfSB8IHVuZGVmaW5lZCxcblx0XHR2YWx1ZUhpZGRlbj86IGJvb2xlYW4gfCB7ICRQYXRoOiBzdHJpbmcgfSxcblx0XHRtYXhWYWx1ZUhpZGRlbj86IGJvb2xlYW4gfCB7ICRQYXRoOiBzdHJpbmcgfVxuXHQpOiBib29sZWFuIHtcblx0XHRpZiAodmFsdWVIaWRkZW4gPT09IHRydWUpIHtcblx0XHRcdHRoaXMubG9nRXJyb3IoY2hhcnRUeXBlLCB2YWx1ZSk7XG5cdFx0fVxuXHRcdGlmIChtYXhWYWx1ZUhpZGRlbiA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhpcy5sb2dFcnJvcihjaGFydFR5cGUsIG1heFZhbHVlKTtcblx0XHR9XG5cdFx0aWYgKHZhbHVlSGlkZGVuID09PSB1bmRlZmluZWQgJiYgbWF4VmFsdWVIaWRkZW4gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiAoKCF2YWx1ZUhpZGRlbiB8fCAodmFsdWVIaWRkZW4gYXMgeyAkUGF0aDogc3RyaW5nIH0pLiRQYXRoKSAmJiB2YWx1ZUhpZGRlbiAhPT0gdW5kZWZpbmVkKSB8fFxuXHRcdFx0XHQoKCFtYXhWYWx1ZUhpZGRlbiB8fCAobWF4VmFsdWVIaWRkZW4gYXMgeyAkUGF0aDogc3RyaW5nIH0pLiRQYXRoKSAmJiBtYXhWYWx1ZUhpZGRlbiAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHQ/IHRydWVcblx0XHRcdFx0OiBmYWxzZTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgdG8gbG9nIGVycm9ycyBmb3IgbWlzc2luZyBkYXRhIHBvaW50IHByb3BlcnRpZXMuXG5cdCAqIEBwYXJhbSBjaGFydFR5cGUgVGhlIGNoYXJ0IHR5cGUuXG5cdCAqIEBwYXJhbSB2YWx1ZSBEeW5hbWljIGhpZGRlbiBwcm9wZXJ0eSBuYW1lLlxuXHQgKiBAcGFyYW0gdmFsdWUuJFBhdGggRHluYW1pYyBoaWRkZW4gcHJvcGVydHkgbmFtZS5cblx0ICovXG5cdGxvZ0Vycm9yOiBmdW5jdGlvbiAoY2hhcnRUeXBlOiBzdHJpbmcsIHZhbHVlPzogeyAkUGF0aDogc3RyaW5nIH0pOiB2b2lkIHtcblx0XHRMb2cuZXJyb3IoYE1lYXN1cmUgUHJvcGVydHkgJHt2YWx1ZT8uJFBhdGh9IGlzIGhpZGRlbiBmb3IgdGhlICR7Y2hhcnRUeXBlfSBNaWNybyBDaGFydGApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGZvcm1hdHRlZCB2YWx1ZSB3aXRoIHNjYWxlIGZhY3RvciBmb3IgdGhlIHZhbHVlIGRpc3BsYXllZC5cblx0ICogQHBhcmFtIHBhdGggUHJvcGVydHkgcGF0aCBmb3IgdGhlIHZhbHVlXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgUHJvcGVydHkgZm9yIGNvbnN0cmFpbnRzXG5cdCAqIEBwYXJhbSBmcmFjdGlvbkRpZ2l0cyBOby4gb2YgZnJhY3Rpb24gZGlnaXRzIHNwZWNpZmllZCBmcm9tIGFubm90YXRpb25zXG5cdCAqIEBwYXJhbSB2YWx1ZSBTdGF0aWMgdmFsdWUgb2YgdGhlIHByb3BlcnR5XG5cdCAqIEByZXR1cm5zIEV4cHJlc3Npb24gQmluZGluZyBmb3IgdGhlIHZhbHVlIHdpdGggc2NhbGUuXG5cdCAqL1xuXHRmb3JtYXREZWNpbWFsOiBmdW5jdGlvbiAocGF0aDogc3RyaW5nLCBwcm9wZXJ0eTogUHJvcGVydHksIGZyYWN0aW9uRGlnaXRzOiBudW1iZXIgfCB1bmRlZmluZWQsIHZhbHVlPzogbnVtYmVyKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAocGF0aCkge1xuXHRcdFx0Y29uc3QgY29uc3RyYWludHMgPSBbXSxcblx0XHRcdFx0Zm9ybWF0T3B0aW9ucyA9IFtcInN0eWxlOiAnc2hvcnQnXCJdO1xuXHRcdFx0Y29uc3Qgc2NhbGUgPSB0eXBlb2YgZnJhY3Rpb25EaWdpdHMgPT09IFwibnVtYmVyXCIgPyBmcmFjdGlvbkRpZ2l0cyA6IChwcm9wZXJ0eSAmJiBwcm9wZXJ0eT8uJFNjYWxlKSB8fCAxO1xuXG5cdFx0XHRpZiAocHJvcGVydHkuJE51bGxhYmxlICE9IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zdHJhaW50cy5wdXNoKFwibnVsbGFibGU6IFwiICsgcHJvcGVydHkuJE51bGxhYmxlKTtcblx0XHRcdH1cblx0XHRcdGlmIChwcm9wZXJ0eS4kUHJlY2lzaW9uICE9IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRmb3JtYXRPcHRpb25zLnB1c2goXCJwcmVjaXNpb246IFwiICsgKHByb3BlcnR5LiRQcmVjaXNpb24gPyBwcm9wZXJ0eS4kUHJlY2lzaW9uIDogXCIxXCIpKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0cmFpbnRzLnB1c2goXCJzY2FsZTogXCIgKyAoc2NhbGUgPT09IFwidmFyaWFibGVcIiA/IFwiJ1wiICsgc2NhbGUgKyBcIidcIiA6IHNjYWxlKSk7XG5cblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFwieyBwYXRoOiAnXCIgK1xuXHRcdFx0XHRwYXRoICtcblx0XHRcdFx0XCInXCIgK1xuXHRcdFx0XHRcIiwgdHlwZTogJ3NhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRlY2ltYWwnLCBjb25zdHJhaW50czogeyBcIiArXG5cdFx0XHRcdGNvbnN0cmFpbnRzLmpvaW4oXCIsXCIpICtcblx0XHRcdFx0XCIgfSwgZm9ybWF0T3B0aW9uczogeyBcIiArXG5cdFx0XHRcdGZvcm1hdE9wdGlvbnMuam9pbihcIixcIikgK1xuXHRcdFx0XHRcIiB9IH1cIlxuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKHZhbHVlKSB7XG5cdFx0XHRjb25zdCBkZWNpbWFscyA9IHR5cGVvZiBmcmFjdGlvbkRpZ2l0cyA9PT0gXCJudW1iZXJcIiA/IGZyYWN0aW9uRGlnaXRzIDogMTtcblx0XHRcdHJldHVybiBOdW1iZXJGb3JtYXQuZ2V0RmxvYXRJbnN0YW5jZSh7IHN0eWxlOiBcInNob3J0XCIsIHByZXNlcnZlRGVjaW1hbHM6IHRydWUsIGRlY2ltYWxzOiBkZWNpbWFscyB9KS5mb3JtYXQodmFsdWUpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogVG8gZmV0Y2gsIHRoZSAkc2VsZWN0IHBhcmFtZXRlcnMgZnJvbSBhbm5vdGF0aW9ucyB0byBhZGQgdG8gdGhlIGxpc3QgYmluZGluZy5cblx0ICogQHBhcmFtIGdyb3VwSWQgR3JvdXBJZCB0byBiZSB1c2VkXG5cdCAqIEBwYXJhbSBzb3J0T3JkZXIgU29ydCBvcmRlciB0byBiZSB1c2VkXG5cdCAqIEBwYXJhbSBjcml0aWNhbGl0eUNhbGN1bGF0aW9uIENyaXRpY2FsaXR5IGNhbGN1bGF0aW9uIG9iamVjdCBwcm9wZXJ0eSBwYXRoXG5cdCAqIEBwYXJhbSBjcml0aWNhbGl0eSBDcml0aWNhbGl0eSBmb3IgdGhlIGNoYXJ0XG5cdCAqIEBwYXJhbSBvdGhlclBhdGhzIEFsbCBvdGhlciBwYXRoc1xuXHQgKiBAcGFyYW0gcmV0dXJuT2JqZWN0XG5cdCAqIEByZXR1cm5zIFN0cmluZyBjb250YWluaW5nIGFsbCB0aGUgcHJvcGVydHkgcGF0aHMgbmVlZGVkIHRvIGJlIGFkZGVkIHRvIHRoZSAkc2VsZWN0IHF1ZXJ5IG9mIHRoZSBsaXN0IGJpbmRpbmcuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRnZXRTZWxlY3RQYXJhbWV0ZXJzOiBmdW5jdGlvbiAoXG5cdFx0Z3JvdXBJZDogc3RyaW5nLFxuXHRcdHNvcnRPcmRlcj86IFNvcnRPcmRlclR5cGVbXSxcblx0XHRjcml0aWNhbGl0eUNhbGN1bGF0aW9uPzogQ3JpdGljYWxpdHlDYWxjdWxhdGlvblR5cGUsXG5cdFx0Y3JpdGljYWxpdHk/OiBzdHJpbmcsXG5cdFx0b3RoZXJQYXRocz86IHN0cmluZ1tdLFxuXHRcdHJldHVybk9iamVjdD86IGJvb2xlYW5cblx0KTogc3RyaW5nIHwgUGFyYW1ldGVyVHlwZSB7XG5cdFx0Y29uc3QgcHJvcGVydHlQYXRoOiBzdHJpbmdbXSA9IFtdLFxuXHRcdFx0c29ydGVyczogc3RyaW5nW10gPSBbXTtcblx0XHRjb25zdCBwYXJhbWV0ZXJzOiBzdHJpbmdbXSB8IFBhcmFtZXRlclR5cGUgPSByZXR1cm5PYmplY3QgPyB7fSA6IFtdO1xuXG5cdFx0aWYgKHNvcnRPcmRlcikge1xuXHRcdFx0c29ydE9yZGVyLmZvckVhY2goKHNvcnRlcjogU29ydE9yZGVyVHlwZSkgPT4ge1xuXHRcdFx0XHRzb3J0ZXJzLnB1c2goYCR7c29ydGVyLlByb3BlcnR5fSR7c29ydGVyLkRlc2NlbmRpbmcgPyBcIiBkZXNjXCIgOiBcIlwifWApO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKGNyaXRpY2FsaXR5KSB7XG5cdFx0XHRwcm9wZXJ0eVBhdGgucHVzaChjcml0aWNhbGl0eSk7XG5cdFx0fSBlbHNlIGlmIChjcml0aWNhbGl0eUNhbGN1bGF0aW9uKSB7XG5cdFx0XHRjb25zdCBjcmljdGljYWxpdHlDYWxjdWxhdGlvbktleXMgPSBbXG5cdFx0XHRcdFwiSW1wcm92ZW1lbnREaXJlY3Rpb25cIixcblx0XHRcdFx0XCJEZXZpYXRpb25SYW5nZUxvd1ZhbHVlXCIsXG5cdFx0XHRcdFwiVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZVwiLFxuXHRcdFx0XHRcIkFjY2VwdGFuY2VSYW5nZUxvd1ZhbHVlXCIsXG5cdFx0XHRcdFwiQWNjZXB0YW5jZVJhbmdlSGlnaFZhbHVlXCIsXG5cdFx0XHRcdFwiVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWVcIixcblx0XHRcdFx0XCJEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZVwiXG5cdFx0XHRdO1xuXHRcdFx0T2JqZWN0LmtleXMoY3JpdGljYWxpdHlDYWxjdWxhdGlvbikuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGNyaWN0aWNhbGl0eUNhbGN1bGF0aW9uS2V5cy5pbmNsdWRlcyhrZXkpICYmXG5cdFx0XHRcdFx0KChjcml0aWNhbGl0eUNhbGN1bGF0aW9uIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPilba2V5XSBhcyB1bmtub3duIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+KS5wYXRoXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHByb3BlcnR5UGF0aC5wdXNoKFxuXHRcdFx0XHRcdFx0KChjcml0aWNhbGl0eUNhbGN1bGF0aW9uIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPilba2V5XSBhcyB1bmtub3duIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+KVxuXHRcdFx0XHRcdFx0XHQucGF0aFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdG90aGVyUGF0aHM/LmZvckVhY2goKHBhdGgpID0+IHtcblx0XHRcdGlmIChwYXRoKSB7XG5cdFx0XHRcdHByb3BlcnR5UGF0aC5wdXNoKHBhdGgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0aWYgKHJldHVybk9iamVjdCkge1xuXHRcdFx0aWYgKGdyb3VwSWQpIHtcblx0XHRcdFx0KHBhcmFtZXRlcnMgYXMgUGFyYW1ldGVyVHlwZSkuJCRncm91cElkID0gZ3JvdXBJZDtcblx0XHRcdH1cblx0XHRcdGlmIChwcm9wZXJ0eVBhdGgubGVuZ3RoKSB7XG5cdFx0XHRcdChwYXJhbWV0ZXJzIGFzIFBhcmFtZXRlclR5cGUpLiRzZWxlY3QgPSBwcm9wZXJ0eVBhdGg7XG5cdFx0XHR9XG5cdFx0XHRpZiAoc29ydGVycy5sZW5ndGgpIHtcblx0XHRcdFx0KHBhcmFtZXRlcnMgYXMgUGFyYW1ldGVyVHlwZSkuJG9yZGVyYnkgPSBzb3J0ZXJzO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHBhcmFtZXRlcnMgYXMgUGFyYW1ldGVyVHlwZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKGdyb3VwSWQpIHtcblx0XHRcdFx0KHBhcmFtZXRlcnMgYXMgc3RyaW5nW10pLnB1c2goYCQkZ3JvdXBJZCA6ICcke2dyb3VwSWR9J2ApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHByb3BlcnR5UGF0aC5sZW5ndGgpIHtcblx0XHRcdFx0KHBhcmFtZXRlcnMgYXMgc3RyaW5nW10pLnB1c2goYCRzZWxlY3QgOiAnJHtwcm9wZXJ0eVBhdGguam9pbihcIixcIil9J2ApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHNvcnRlcnMubGVuZ3RoKSB7XG5cdFx0XHRcdChwYXJhbWV0ZXJzIGFzIHN0cmluZ1tdKS5wdXNoKGAkb3JkZXJieSA6ICcke3NvcnRlcnMuam9pbihcIixcIil9J2ApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIChwYXJhbWV0ZXJzIGFzIHN0cmluZ1tdKS5qb2luKFwiLFwiKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFRvIGZldGNoIERhdGFQb2ludCBxdWFsaWZpZXJzIG9mIG1lYXN1cmVzLlxuXHQgKiBAcGFyYW0gY2hhcnRBbm5vdGF0aW9ucyBDaGFydCBhbm5vdGF0aW9uc1xuXHQgKiBAcGFyYW0gZW50aXR5VHlwZUFubm90YXRpb25zIEVudGl0eVR5cGUgYW5ub3RhdGlvbnNcblx0ICogQHBhcmFtIGNoYXJ0VHlwZSBDaGFydCB0eXBlIHVzZWRcblx0ICogQHJldHVybnMgQ29udGFpbmluZyBhbGwgZGF0YSBwb2ludCBxdWFsaWZpZXJzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0Z2V0RGF0YVBvaW50UXVhbGlmaWVyc0Zvck1lYXN1cmVzOiBmdW5jdGlvbiAoXG5cdFx0Y2hhcnRBbm5vdGF0aW9uczogTWV0YU1vZGVsVHlwZTxDaGFydD4gfCBDaGFydCxcblx0XHRlbnRpdHlUeXBlQW5ub3RhdGlvbnM6IE1ldGFNb2RlbEVudGl0eVR5cGVBbm5vdGF0aW9ucyB8IHVuZGVmaW5lZCxcblx0XHRjaGFydFR5cGU6IHN0cmluZyxcblx0XHRpc01pY3JvQ2hhcnRSdW5UaW1lPzogYm9vbGVhblxuXHQpOiBzdHJpbmdbXSB8IHN0cmluZyB7XG5cdFx0Y29uc3QgcXVhbGlmaWVyczogc3RyaW5nW10gPSBbXSxcblx0XHRcdG1lYXN1cmVBdHRyaWJ1dGVzID0gY2hhcnRBbm5vdGF0aW9ucy5NZWFzdXJlQXR0cmlidXRlcyxcblx0XHRcdGZuQWRkRGF0YVBvaW50UXVhbGlmaWVyID0gZnVuY3Rpb24gKGNoYXJ0TWVhc3VyZTogeyAkUHJvcGVydHlQYXRoOiBzdHJpbmcgfSB8IFByb3BlcnR5UGF0aCk6IHZvaWQge1xuXHRcdFx0XHRsZXQgcXVhbGlmaWVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdGlmIChlbnRpdHlUeXBlQW5ub3RhdGlvbnMpIHtcblx0XHRcdFx0XHRtZWFzdXJlQXR0cmlidXRlcz8uZm9yRWFjaChmdW5jdGlvbiAoXG5cdFx0XHRcdFx0XHRtZWFzdXJlQXR0cmlidXRlOiBNZXRhTW9kZWxUeXBlPENoYXJ0TWVhc3VyZUF0dHJpYnV0ZVR5cGVUeXBlcz4gfCBDaGFydE1lYXN1cmVBdHRyaWJ1dGVUeXBlVHlwZXNcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdGxldCBwYXRoLCBtZWFzdXJlO1xuXHRcdFx0XHRcdFx0aWYgKGlzTWljcm9DaGFydFJ1blRpbWUpIHtcblx0XHRcdFx0XHRcdFx0cGF0aCA9IChtZWFzdXJlQXR0cmlidXRlIGFzIENoYXJ0TWVhc3VyZUF0dHJpYnV0ZVR5cGVUeXBlcykuTWVhc3VyZT8udmFsdWU7XG5cdFx0XHRcdFx0XHRcdG1lYXN1cmUgPSAoY2hhcnRNZWFzdXJlIGFzIFByb3BlcnR5UGF0aCkudmFsdWU7XG5cdFx0XHRcdFx0XHRcdGlmIChwYXRoID09IG1lYXN1cmUpIHtcblx0XHRcdFx0XHRcdFx0XHRxdWFsaWZpZXJzLnB1c2goXG5cdFx0XHRcdFx0XHRcdFx0XHQobWVhc3VyZUF0dHJpYnV0ZSBhcyBDaGFydE1lYXN1cmVBdHRyaWJ1dGVUeXBlVHlwZXMpPy5EYXRhUG9pbnQ/LiR0YXJnZXQ/LnF1YWxpZmllciBhcyBzdHJpbmdcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRwYXRoID0gKG1lYXN1cmVBdHRyaWJ1dGUgYXMgTWV0YU1vZGVsVHlwZTxDaGFydE1lYXN1cmVBdHRyaWJ1dGVUeXBlVHlwZXM+KS5NZWFzdXJlPy4kUHJvcGVydHlQYXRoO1xuXHRcdFx0XHRcdFx0XHRtZWFzdXJlID0gKGNoYXJ0TWVhc3VyZSBhcyB7ICRQcm9wZXJ0eVBhdGg6IHN0cmluZyB9KS4kUHJvcGVydHlQYXRoO1xuXHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0cGF0aCA9PT0gbWVhc3VyZSAmJlxuXHRcdFx0XHRcdFx0XHRcdChtZWFzdXJlQXR0cmlidXRlIGFzIE1ldGFNb2RlbFR5cGU8Q2hhcnRNZWFzdXJlQXR0cmlidXRlVHlwZVR5cGVzPikuRGF0YVBvaW50Py4kQW5ub3RhdGlvblBhdGhcblx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgYW5ub3RhdGlvblBhdGggPSAobWVhc3VyZUF0dHJpYnV0ZSBhcyBNZXRhTW9kZWxUeXBlPENoYXJ0TWVhc3VyZUF0dHJpYnV0ZVR5cGVUeXBlcz4pPy5EYXRhUG9pbnRcblx0XHRcdFx0XHRcdFx0XHRcdD8uJEFubm90YXRpb25QYXRoO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChlbnRpdHlUeXBlQW5ub3RhdGlvbnNbYW5ub3RhdGlvblBhdGggYXMga2V5b2YgTWV0YU1vZGVsRW50aXR5VHlwZUFubm90YXRpb25zXSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVhbGlmaWVyID0gYW5ub3RhdGlvblBhdGg/LnNwbGl0KFwiI1wiKVsxXTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChxdWFsaWZpZXIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cXVhbGlmaWVycy5wdXNoKHF1YWxpZmllcik7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHF1YWxpZmllciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0TG9nLndhcm5pbmcoXG5cdFx0XHRcdFx0XHRgRkU6TWFjcm86TWljcm9DaGFydCA6IENvdWxkbid0IGZpbmQgRGF0YVBvaW50KFZhbHVlKSBtZWFzdXJlIGZvciB0aGUgbWVhc3VyZUF0dHJpYnV0ZSBmb3IgJHtjaGFydFR5cGV9IE1pY3JvQ2hhcnQuYFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRpZiAoIWVudGl0eVR5cGVBbm5vdGF0aW9ucykge1xuXHRcdFx0TG9nLndhcm5pbmcoYEZFOk1hY3JvOk1pY3JvQ2hhcnQgOiBDb3VsZG4ndCBmaW5kIGFubm90YXRpb25zIGZvciB0aGUgRGF0YVBvaW50ICR7Y2hhcnRUeXBlfSBNaWNyb0NoYXJ0LmApO1xuXHRcdH1cblx0XHRjaGFydEFubm90YXRpb25zLk1lYXN1cmVzPy5mb3JFYWNoKGZuQWRkRGF0YVBvaW50UXVhbGlmaWVyKTtcblx0XHRyZXR1cm4gaXNNaWNyb0NoYXJ0UnVuVGltZSA/IHF1YWxpZmllcnMgOiBxdWFsaWZpZXJzLmpvaW4oXCIsXCIpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIHRvIGxvZyB3YXJuaW5ncyBmb3IgbWlzc2luZyBkYXRhcG9pbnQgcHJvcGVydGllcy5cblx0ICogQHBhcmFtIGNoYXJ0VHlwZSBUaGUgQ2hhcnQgdHlwZS5cblx0ICogQHBhcmFtIGVycm9yIE9iamVjdCB3aXRoIHByb3BlcnRpZXMgZnJvbSBEYXRhUG9pbnQuXG5cdCAqL1xuXHRsb2dXYXJuaW5nOiBmdW5jdGlvbiAoY2hhcnRUeXBlOiBzdHJpbmcsIGVycm9yOiBvYmplY3QpOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBlcnJvcikge1xuXHRcdFx0aWYgKCFlcnJvcltrZXkgYXMga2V5b2YgdHlwZW9mIGVycm9yXSkge1xuXHRcdFx0XHRMb2cud2FybmluZyhgJHtrZXl9IHBhcmFtZXRlciBpcyBtaXNzaW5nIGZvciB0aGUgJHtjaGFydFR5cGV9IE1pY3JvIENoYXJ0YCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0IERpc3BsYXlWYWx1ZSBmb3IgY29tcGFyaXNvbiBtaWNybyBjaGFydCBkYXRhIGFnZ3JlZ2F0aW9uLlxuXHQgKiBAcGFyYW0gZGF0YVBvaW50IERhdGEgcG9pbnQgb2JqZWN0LlxuXHQgKiBAcGFyYW0gcGF0aFRleHQgT2JqZWN0IGFmdGVyIGV2YWx1YXRpbmcgQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0IGFubm90YXRpb25cblx0ICogQHBhcmFtIHBhdGhUZXh0LiRQYXRoIFRoZSB0YXJnZXQgcGF0aFxuXHQgKiBAcGFyYW0gdmFsdWVUZXh0UGF0aCBFdmFsdWF0aW9uIG9mIEBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dC8kUGF0aC8kIHZhbHVlIG9mIHRoZSBhbm5vdGF0aW9uXG5cdCAqIEBwYXJhbSB2YWx1ZURhdGFQb2ludFBhdGggRGF0YVBvaW50PlZhbHVlLyRQYXRoLyQgdmFsdWUgYWZ0ZXIgZXZhbHVhdGluZyBhbm5vdGF0aW9uXG5cdCAqIEByZXR1cm5zIEV4cHJlc3Npb24gYmluZGluZyBmb3IgRGlzcGxheSBWYWx1ZSBmb3IgY29tcGFyaXNvbiBtaWNybyBjaGFydCdzIGFnZ3JlZ2F0aW9uIGRhdGEuXG5cdCAqL1xuXHRnZXREaXNwbGF5VmFsdWVGb3JNaWNyb0NoYXJ0OiBmdW5jdGlvbiAoXG5cdFx0ZGF0YVBvaW50OiBNZXRhTW9kZWxUeXBlPERhdGFQb2ludFR5cGU+LFxuXHRcdHBhdGhUZXh0OiB7ICRQYXRoOiBzdHJpbmcgfSB8IHVuZGVmaW5lZCxcblx0XHR2YWx1ZVRleHRQYXRoOiBvYmplY3QsXG5cdFx0dmFsdWVEYXRhUG9pbnRQYXRoOiBvYmplY3Rcblx0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCB2YWx1ZUZvcm1hdCA9IGRhdGFQb2ludC5WYWx1ZUZvcm1hdCAmJiBkYXRhUG9pbnQuVmFsdWVGb3JtYXQuTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzO1xuXHRcdGlmIChwYXRoVGV4dCkge1xuXHRcdFx0cmV0dXJuIE1pY3JvQ2hhcnRIZWxwZXIuZm9ybWF0RGVjaW1hbChwYXRoVGV4dFtcIiRQYXRoXCJdLCB2YWx1ZVRleHRQYXRoIGFzIFByb3BlcnR5LCB2YWx1ZUZvcm1hdCk7XG5cdFx0fVxuXHRcdHJldHVybiBNaWNyb0NoYXJ0SGVscGVyLmZvcm1hdERlY2ltYWwoZGF0YVBvaW50LlZhbHVlW1wiJFBhdGhcIl0sIHZhbHVlRGF0YVBvaW50UGF0aCBhcyBQcm9wZXJ0eSwgdmFsdWVGb3JtYXQpO1xuXHR9LFxuXHRzaG91bGRSZW5kZXJNaWNyb0NoYXJ0OiBmdW5jdGlvbiAoY2hhcnRBbm5vdGF0aW9uOiBDaGFydCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGF2YWlsYWJsZUNoYXJ0VHlwZXMgPSBbQ2hhcnRUeXBlLkFyZWEsIENoYXJ0VHlwZS5Db2x1bW4sIENoYXJ0VHlwZS5CYXJdLFxuXHRcdFx0Y2hhcnRUeXBlID0gY2hhcnRBbm5vdGF0aW9uLkNoYXJ0VHlwZSxcblx0XHRcdGRhdGFQb2ludCA9IGNoYXJ0QW5ub3RhdGlvbi5NZWFzdXJlQXR0cmlidXRlc1swXS5EYXRhUG9pbnQ/LiR0YXJnZXQsXG5cdFx0XHRkYXRhUG9pbnRWYWx1ZSA9IGRhdGFQb2ludD8uVmFsdWUsXG5cdFx0XHRkYXRhUG9pbnRWYWx1ZUhpZGRlblBhdGggPSBkYXRhUG9pbnRWYWx1ZT8uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4sXG5cdFx0XHRjaGFydEFubm90YXRpb25EaW1lbnNpb24gPSBjaGFydEFubm90YXRpb24/LkRpbWVuc2lvbnMgJiYgY2hhcnRBbm5vdGF0aW9uPy5EaW1lbnNpb25zWzBdLFxuXHRcdFx0ZmluYWxEYXRhUG9pbnRWYWx1ZSA9IGF2YWlsYWJsZUNoYXJ0VHlwZXMuaW5jbHVkZXMoY2hhcnRUeXBlKSA/IGRhdGFQb2ludFZhbHVlICYmIGNoYXJ0QW5ub3RhdGlvbkRpbWVuc2lvbiA6IGRhdGFQb2ludFZhbHVlOyAvLyBvbmx5IGZvciB0aHJlZSBjaGFydHMgaW4gYXJyYXlcblx0XHRpZiAoY2hhcnRUeXBlID09PSBDaGFydFR5cGUuUGllKSB7XG5cdFx0XHRjb25zdCBkYXRhUG9pbnRNYXhpbXVtVmFsdWUgPSBkYXRhUG9pbnQgJiYgKGRhdGFQb2ludC5NYXhpbXVtVmFsdWUgYXMgUHJpbWl0aXZlVHlwZSk7XG5cdFx0XHRjb25zdCBkYXRhUG9pbnRNYXhpbXVtVmFsdWVIaWRkZW5QYXRoID0gZGF0YVBvaW50TWF4aW11bVZhbHVlPy5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbjtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGRhdGFQb2ludFZhbHVlICYmXG5cdFx0XHRcdGRhdGFQb2ludE1heGltdW1WYWx1ZSAmJlxuXHRcdFx0XHRNaWNyb0NoYXJ0SGVscGVyLmlzTm90QWx3YXlzSGlkZGVuKFxuXHRcdFx0XHRcdGNoYXJ0VHlwZSxcblx0XHRcdFx0XHRkYXRhUG9pbnRWYWx1ZSxcblx0XHRcdFx0XHRkYXRhUG9pbnRNYXhpbXVtVmFsdWUsXG5cdFx0XHRcdFx0ZGF0YVBvaW50VmFsdWVIaWRkZW5QYXRoLFxuXHRcdFx0XHRcdGRhdGFQb2ludE1heGltdW1WYWx1ZUhpZGRlblBhdGhcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIGZpbmFsRGF0YVBvaW50VmFsdWUgJiYgTWljcm9DaGFydEhlbHBlci5pc05vdEFsd2F5c0hpZGRlbihjaGFydFR5cGUsIGRhdGFQb2ludFZhbHVlLCBkYXRhUG9pbnRWYWx1ZUhpZGRlblBhdGgpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2hlY2sgd2hldGhlciBtaWNybyBjaGFydCBpcyBlbmFibGVkIG9yIG5vdCBieSBjaGVja2luZyBwcm9wZXJ0aWVzLCBjaGFydCBhbm5vdGF0aW9ucywgaGlkZGVuIHByb3BlcnRpZXMuXG5cdCAqIEBwYXJhbSBjaGFydFR5cGUgTWljcm9DaGFydCBUeXBlLHN1Y2ggYXMgQnVsbGV0LlxuXHQgKiBAcGFyYW0gZGF0YVBvaW50IERhdGEgcG9pbnQgb2JqZWN0LlxuXHQgKiBAcGFyYW0gZGF0YVBvaW50VmFsdWVIaWRkZW4gT2JqZWN0IHdpdGggJFBhdGggYW5ub3RhdGlvbiB0byBnZXQgdGhlIGhpZGRlbiB2YWx1ZSBwYXRoXG5cdCAqIEBwYXJhbSB0YXJnZXRBbm5vdGF0aW9ucyBDaGFydEFubm90YXRpb24gb2JqZWN0XG5cdCAqIEBwYXJhbSBkYXRhUG9pbnRNYXhWYWx1ZSBPYmplY3Qgd2l0aCAkUGF0aCBhbm5vdGF0aW9uIHRvIGdldCBoaWRkZW4gbWF4IHZhbHVlIHBhdGhcblx0ICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBjaGFydCBoYXMgYWxsIHZhbHVlcyBhbmQgcHJvcGVydGllcyBhbmQgYWxzbyBpdCBpcyBub3QgYWx3YXlzIGhpZGRlbiBzRmluYWxEYXRhUG9pbnRWYWx1ZSAmJiBiTWljcm9jaGFydFZpc2libGUuXG5cdCAqL1xuXHRzaG91bGRNaWNyb0NoYXJ0UmVuZGVyOiBmdW5jdGlvbiAoXG5cdFx0Y2hhcnRUeXBlOiBzdHJpbmcsXG5cdFx0ZGF0YVBvaW50OiBEYXRhUG9pbnRUeXBlLFxuXHRcdGRhdGFQb2ludFZhbHVlSGlkZGVuOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPixcblx0XHR0YXJnZXRBbm5vdGF0aW9uczogQ2hhcnQsXG5cdFx0ZGF0YVBvaW50TWF4VmFsdWU6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+XG5cdCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGF2YWlsYWJsZUNoYXJ0VHlwZXMgPSBbXCJBcmVhXCIsIFwiQ29sdW1uXCIsIFwiQ29tcGFyaXNvblwiXSxcblx0XHRcdGRhdGFQb2ludFZhbHVlID0gZGF0YVBvaW50ICYmIGRhdGFQb2ludC5WYWx1ZSxcblx0XHRcdGhpZGRlblBhdGggPSBkYXRhUG9pbnRWYWx1ZUhpZGRlbiAmJiBkYXRhUG9pbnRWYWx1ZUhpZGRlbltVSUFubm90YXRpb25UZXJtcy5IaWRkZW5dLFxuXHRcdFx0Y2hhcnRBbm5vdGF0aW9uRGltZW5zaW9uID0gdGFyZ2V0QW5ub3RhdGlvbnMgJiYgdGFyZ2V0QW5ub3RhdGlvbnMuRGltZW5zaW9ucyAmJiB0YXJnZXRBbm5vdGF0aW9ucy5EaW1lbnNpb25zWzBdLFxuXHRcdFx0ZmluYWxEYXRhUG9pbnRWYWx1ZSA9IGF2YWlsYWJsZUNoYXJ0VHlwZXMuaW5jbHVkZXMoY2hhcnRUeXBlKSA/IGRhdGFQb2ludFZhbHVlICYmIGNoYXJ0QW5ub3RhdGlvbkRpbWVuc2lvbiA6IGRhdGFQb2ludFZhbHVlOyAvLyBvbmx5IGZvciB0aHJlZSBjaGFydHMgaW4gYXJyYXlcblx0XHRpZiAoY2hhcnRUeXBlID09PSBcIkhhcnZleVwiKSB7XG5cdFx0XHRjb25zdCBkYXRhUG9pbnRNYXhpbXVtVmFsdWUgPSBkYXRhUG9pbnQgJiYgZGF0YVBvaW50Lk1heGltdW1WYWx1ZSxcblx0XHRcdFx0bWF4VmFsdWVIaWRkZW5QYXRoID0gZGF0YVBvaW50TWF4VmFsdWUgJiYgZGF0YVBvaW50TWF4VmFsdWVbVUlBbm5vdGF0aW9uVGVybXMuSGlkZGVuXTtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGRhdGFQb2ludFZhbHVlICYmXG5cdFx0XHRcdGRhdGFQb2ludE1heGltdW1WYWx1ZSAmJlxuXHRcdFx0XHRNaWNyb0NoYXJ0SGVscGVyLmlzTm90QWx3YXlzSGlkZGVuKFxuXHRcdFx0XHRcdFwiQnVsbGV0XCIsXG5cdFx0XHRcdFx0ZGF0YVBvaW50VmFsdWUsXG5cdFx0XHRcdFx0ZGF0YVBvaW50TWF4aW11bVZhbHVlIGFzIHVua25vd24gYXMgeyAkUGF0aDogc3RyaW5nIH0sXG5cdFx0XHRcdFx0aGlkZGVuUGF0aCxcblx0XHRcdFx0XHRtYXhWYWx1ZUhpZGRlblBhdGhcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIGZpbmFsRGF0YVBvaW50VmFsdWUgJiYgTWljcm9DaGFydEhlbHBlci5pc05vdEFsd2F5c0hpZGRlbihjaGFydFR5cGUsIGRhdGFQb2ludFZhbHVlLCB1bmRlZmluZWQsIGhpZGRlblBhdGgpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0IGRhdGFQb2ludFF1YWxpZmllcnMgZm9yIENvbHVtbiwgQ29tcGFyaXNvbiBhbmQgU3RhY2tlZEJhciBtaWNybyBjaGFydHMuXG5cdCAqIEBwYXJhbSBhbm5vdGF0aW9uUGF0aFxuXHQgKiBAcmV0dXJucyBSZXN1bHQgc3RyaW5nIG9yIHVuZGVmaW5lZC5cblx0ICovXG5cdGdldERhdGFQb2ludFF1YWxpZmllcnNGb3JNaWNyb0NoYXJ0OiBmdW5jdGlvbiAoYW5ub3RhdGlvblBhdGg6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKCFhbm5vdGF0aW9uUGF0aC5pbmNsdWRlcyhVSUFubm90YXRpb25UZXJtcy5EYXRhUG9pbnQpKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRyZXR1cm4gYW5ub3RhdGlvblBhdGguc3BsaXQoXCIjXCIpWzFdID8/IFwiXCI7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBnZXQgY29sb3JQYWxldHRlIGZvciBjb21wYXJpc29uIGFuZCBIYXJ2ZXlCYWxsIE1pY3JvY2hhcnRzLlxuXHQgKiBAcGFyYW0gZGF0YVBvaW50IERhdGEgcG9pbnQgb2JqZWN0LlxuXHQgKiBAcmV0dXJucyBSZXN1bHQgc3RyaW5nIGZvciBjb2xvclBhbGV0dGUgb3IgdW5kZWZpbmVkLlxuXHQgKi9cblx0Z2V0Q29sb3JQYWxldHRlRm9yTWljcm9DaGFydDogZnVuY3Rpb24gKGRhdGFQb2ludDogRGF0YVBvaW50VHlwZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIGRhdGFQb2ludC5Dcml0aWNhbGl0eVxuXHRcdFx0PyB1bmRlZmluZWRcblx0XHRcdDogXCJzYXBVaUNoYXJ0UGFsZXR0ZVF1YWxpdGF0aXZlSHVlMSwgc2FwVWlDaGFydFBhbGV0dGVRdWFsaXRhdGl2ZUh1ZTIsIHNhcFVpQ2hhcnRQYWxldHRlUXVhbGl0YXRpdmVIdWUzLCAgICAgICAgICBzYXBVaUNoYXJ0UGFsZXR0ZVF1YWxpdGF0aXZlSHVlNCwgc2FwVWlDaGFydFBhbGV0dGVRdWFsaXRhdGl2ZUh1ZTUsIHNhcFVpQ2hhcnRQYWxldHRlUXVhbGl0YXRpdmVIdWU2LCBzYXBVaUNoYXJ0UGFsZXR0ZVF1YWxpdGF0aXZlSHVlNywgICAgICAgICAgc2FwVWlDaGFydFBhbGV0dGVRdWFsaXRhdGl2ZUh1ZTgsIHNhcFVpQ2hhcnRQYWxldHRlUXVhbGl0YXRpdmVIdWU5LCBzYXBVaUNoYXJ0UGFsZXR0ZVF1YWxpdGF0aXZlSHVlMTAsIHNhcFVpQ2hhcnRQYWxldHRlUXVhbGl0YXRpdmVIdWUxMVwiO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0IE1lYXN1cmVTY2FsZSBmb3IgQXJlYSwgQ29sdW1uIGFuZCBMaW5lIG1pY3JvIGNoYXJ0cy5cblx0ICogQHBhcmFtIGRhdGFQb2ludCBEYXRhIHBvaW50IG9iamVjdC5cblx0ICogQHJldHVybnMgRGF0YSBwb2ludCB2YWx1ZSBmb3JtYXQgZnJhY3Rpb25hbCBkaWdpdHMgb3IgZGF0YSBwb2ludCBzY2FsZSBvciAxLlxuXHQgKi9cblx0Z2V0TWVhc3VyZVNjYWxlRm9yTWljcm9DaGFydDogZnVuY3Rpb24gKGRhdGFQb2ludDogRGF0YVBvaW50VHlwZSk6IG51bWJlciB7XG5cdFx0aWYgKGRhdGFQb2ludC5WYWx1ZUZvcm1hdCAmJiBkYXRhUG9pbnQuVmFsdWVGb3JtYXQuTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzKSB7XG5cdFx0XHRyZXR1cm4gZGF0YVBvaW50LlZhbHVlRm9ybWF0Lk51bWJlck9mRnJhY3Rpb25hbERpZ2l0cy52YWx1ZU9mKCk7XG5cdFx0fVxuXHRcdGlmIChkYXRhUG9pbnQuVmFsdWUgJiYgZGF0YVBvaW50LlZhbHVlW1wiJFBhdGhcIl0gJiYgZGF0YVBvaW50LlZhbHVlW1wiJFBhdGhcIl1bXCIkU2NhbGVcIl0pIHtcblx0XHRcdHJldHVybiBkYXRhUG9pbnQuVmFsdWVbXCIkUGF0aFwiXVtcIiRTY2FsZVwiXTtcblx0XHR9XG5cdFx0cmV0dXJuIDE7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgdG8gcmV0dXJuIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gb2YgbWljcm9jaGFydC5cblx0ICogQHBhcmFtIGNoYXJ0VHlwZSBUaGUgdHlwZSBvZiBtaWNybyBjaGFydCAoQnVsbGV0LCBSYWRpYWwgZXRjLilcblx0ICogQHBhcmFtIG1lYXN1cmUgTWVhc3VyZSB2YWx1ZSBmb3IgbWljcm8gY2hhcnQuXG5cdCAqIEBwYXJhbSBtaWNyb0NoYXJ0IGB0aGlzYC9jdXJyZW50IG1vZGVsIGZvciBtaWNybyBjaGFydC5cblx0ICogQHBhcmFtIGNvbGxlY3Rpb24gQ29sbGVjdGlvbiBvYmplY3QuXG5cdCAqIEBwYXJhbSB1aU5hbWUgVGhlIEBzYXB1aS5uYW1lIGluIGNvbGxlY3Rpb24gbW9kZWwgaXMgbm90IGFjY2Vzc2libGUgaGVyZSBmcm9tIG1vZGVsIGhlbmNlIG5lZWQgdG8gcGFzcyBpdC5cblx0ICogQHBhcmFtIGRhdGFQb2ludCBEYXRhIHBvaW50IG9iamVjdCB1c2VkIGluIGNhc2Ugb2YgSGFydmV5IEJhbGwgbWljcm8gY2hhcnRcblx0ICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgbWljcm8gY2hhcnQuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRnZXRCaW5kaW5nRXhwcmVzc2lvbkZvck1pY3JvY2hhcnQ6IGZ1bmN0aW9uIChcblx0XHRjaGFydFR5cGU6IHN0cmluZyxcblx0XHRtZWFzdXJlOiBEYXRhTW9kZWxPYmplY3RQYXRoPE1lYXN1cmU+LFxuXHRcdG1pY3JvQ2hhcnQ6IE1pY3JvQ2hhcnQsXG5cdFx0Y29sbGVjdGlvbjogTWV0YU1vZGVsTmF2UHJvcGVydHksXG5cdFx0dWlOYW1lOiBzdHJpbmcsXG5cdFx0ZGF0YVBvaW50PzogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhUG9pbnRUeXBlPlxuXHQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGNoYXJ0c1dpdGhCaW5kaW5nRXhwcmVzc2lvbiA9IFtDaGFydFR5cGUuQnVsbGV0LCBDaGFydFR5cGUuUGllLCBDaGFydFR5cGUuRG9udXQsIFwiUmFkaWFsXCIsIFwiQnVsbGV0XCIsIFwiSGFydmV5XCJdO1xuXHRcdGlmICghY2hhcnRUeXBlIHx8IGNoYXJ0c1dpdGhCaW5kaW5nRXhwcmVzc2lvbi5pbmNsdWRlcyhjaGFydFR5cGUpKSB7XG5cdFx0XHRjb25zdCBjb25kaXRpb24gPSBjb2xsZWN0aW9uW1wiJGlzQ29sbGVjdGlvblwiXSB8fCBjb2xsZWN0aW9uW1wiJGtpbmRcIl0gPT09IFwiRW50aXR5U2V0XCI7XG5cdFx0XHRjb25zdCBwYXRoID0gY29uZGl0aW9uID8gXCJcIiA6IHVpTmFtZTtcblx0XHRcdGxldCBjdXJyZW5jeU9yVW5pdCA9IE1pY3JvQ2hhcnRIZWxwZXIuZ2V0VU9NUGF0aEZvck1pY3JvY2hhcnQobWljcm9DaGFydC5zaG93T25seUNoYXJ0IGFzIGJvb2xlYW4sIG1lYXN1cmUpO1xuXHRcdFx0bGV0IGRhdGFQb2ludENyaXRpY2FsbGl0eSA9IFwiXCI7XG5cdFx0XHRzd2l0Y2ggKGNoYXJ0VHlwZSkge1xuXHRcdFx0XHRjYXNlIFwiUmFkaWFsXCI6XG5cdFx0XHRcdGNhc2UgQ2hhcnRUeXBlLkRvbnV0OlxuXHRcdFx0XHRcdGN1cnJlbmN5T3JVbml0ID0gXCJcIjtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIkhhcnZleVwiOlxuXHRcdFx0XHRjYXNlIENoYXJ0VHlwZS5QaWU6XG5cdFx0XHRcdFx0ZGF0YVBvaW50Q3JpdGljYWxsaXR5ID0gZGF0YVBvaW50Py50YXJnZXRPYmplY3Q/LkNyaXRpY2FsaXR5XG5cdFx0XHRcdFx0XHQ/IChkYXRhUG9pbnQudGFyZ2V0T2JqZWN0Py5Dcml0aWNhbGl0eSBhcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPik/LnBhdGhcblx0XHRcdFx0XHRcdDogXCJcIjtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGNvbnN0IGZ1bmN0aW9uVmFsdWUgPSBNaWNyb0NoYXJ0SGVscGVyLmdldFNlbGVjdFBhcmFtZXRlcnMoXG5cdFx0XHRcdG1pY3JvQ2hhcnQuYmF0Y2hHcm91cElkIGFzIHN0cmluZyxcblx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdGRhdGFQb2ludENyaXRpY2FsbGl0eSxcblx0XHRcdFx0W2N1cnJlbmN5T3JVbml0XSBhcyBzdHJpbmdbXVxuXHRcdFx0KTtcblx0XHRcdHJldHVybiBgeyBwYXRoOiAnJHtwYXRofSdgICsgYCwgcGFyYW1ldGVycyA6IHske2Z1bmN0aW9uVmFsdWV9fSB9YDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIG1pY3JvQ2hhcnQuYmF0Y2hHcm91cElkID8gXCJ7cGF0aDonJywgcGFyYW1ldGVycyA6IHsgJCRncm91cElkOiAnXCIgKyBtaWNyb0NoYXJ0LmJhdGNoR3JvdXBJZCArIFwiJ30gfVwiIDogXCJcIjtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgdG8gcmV0dXJuIHRoZSBVT01QYXRoIGV4cHJlc3Npb24gb2YgdGhlIG1pY3JvIGNoYXJ0LlxuXHQgKiBAcGFyYW0gc2hvd09ubHlDaGFydCBXaGV0aGVyIG9ubHkgY2hhcnQgc2hvdWxkIGJlIHJlbmRlcmVkIG9yIG5vdC5cblx0ICogQHBhcmFtIG1lYXN1cmUgTWVhc3VyZXMgZm9yIHRoZSBtaWNybyBjaGFydC5cblx0ICogQHBhcmFtIGNoYXJ0VHlwZSBUeXBlIG9mIHRoZSBtaWNybyBjaGFydC5cblx0ICogQHJldHVybnMgVU9NUGF0aCBTdHJpbmcgZm9yIHRoZSBtaWNybyBjaGFydC5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdGdldFVPTVBhdGhGb3JNaWNyb2NoYXJ0OiBmdW5jdGlvbiAoXG5cdFx0c2hvd09ubHlDaGFydDogYm9vbGVhbixcblx0XHRtZWFzdXJlPzogRGF0YU1vZGVsT2JqZWN0UGF0aDxNZWFzdXJlPixcblx0XHRjaGFydFR5cGU/OiBzdHJpbmdcblx0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBjaGFydHNXaXRoVU9NUGFydHMgPSBbQ2hhcnRUeXBlLkJ1bGxldCwgQ2hhcnRUeXBlLlBpZSwgQ2hhcnRUeXBlLkFyZWEsIENoYXJ0VHlwZS5Db2x1bW4sIENoYXJ0VHlwZS5MaW5lLCBDaGFydFR5cGUuQmFyXTtcblx0XHRpZiAoIWNoYXJ0VHlwZSB8fCAoY2hhcnRUeXBlICYmIGNoYXJ0c1dpdGhVT01QYXJ0cy5pbmNsdWRlcyhjaGFydFR5cGUgYXMgQ2hhcnRUeXBlKSkpIHtcblx0XHRcdHJldHVybiBtZWFzdXJlICYmICFzaG93T25seUNoYXJ0XG5cdFx0XHRcdD8gKFxuXHRcdFx0XHRcdFx0KG1lYXN1cmUudGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXMgYXMgUHJvcGVydHlBbm5vdGF0aW9uc19NZWFzdXJlcylcblx0XHRcdFx0XHRcdFx0Py5JU09DdXJyZW5jeSBhcyB1bmtub3duIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+XG5cdFx0XHRcdCAgKT8ucGF0aCB8fFxuXHRcdFx0XHRcdFx0KFxuXHRcdFx0XHRcdFx0XHQobWVhc3VyZS50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5NZWFzdXJlcyBhcyBQcm9wZXJ0eUFubm90YXRpb25zX01lYXN1cmVzKVxuXHRcdFx0XHRcdFx0XHRcdD8uVW5pdCBhcyB1bmtub3duIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+XG5cdFx0XHRcdFx0XHQpPy5wYXRoIHx8XG5cdFx0XHRcdFx0XHRcIlwiXG5cdFx0XHRcdDogXCJcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgdG8gcmV0dXJuIHRoZSBhZ2dyZWdhdGlvbiBiaW5kaW5nIGV4cHJlc3Npb24gb2YgbWljcm8gY2hhcnQuXG5cdCAqIEBwYXJhbSBhZ2dyZWdhdGlvblR5cGUgQWdncmVnYXRpb24gdHlwZSBvZiBjaGFydCAoZm9yIGV4YW1wbGUsIFBvaW50IGZvciBBcmVhTWljcm9jaGFydClcblx0ICogQHBhcmFtIGNvbGxlY3Rpb24gQ29sbGVjdGlvbiBvYmplY3QuXG5cdCAqIEBwYXJhbSBkYXRhUG9pbnQgRGF0YSBwb2ludCBpbmZvIGZvciBtaWNybyBjaGFydC5cblx0ICogQHBhcmFtIHVpTmFtZSBUaGUgQHNhcHVpLm5hbWUgaW4gY29sbGVjdGlvbiBtb2RlbCBpcyBub3QgYWNjZXNzaWJsZSBoZXJlIGZyb20gbW9kZWwgaGVuY2UgbmVlZCB0byBwYXNzIGl0LlxuXHQgKiBAcGFyYW0gZGltZW5zaW9uIE1pY3JvIGNoYXJ0IERpbWVuc2lvbnMuXG5cdCAqIEBwYXJhbSBtZWFzdXJlIE1lYXN1cmUgdmFsdWUgZm9yIG1pY3JvIGNoYXJ0LlxuXHQgKiBAcGFyYW0gc29ydE9yZGVyIFNvcnRPcmRlciBmb3IgbWljcm8gY2hhcnQuXG5cdCAqIEBwYXJhbSBtZWFzdXJlT3JEaW1lbnNpb25CYXIgVGhlIG1lYXN1cmUgb3IgZGltZW5zaW9uIHBhc3NlZCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNhc2Ugb2YgYmFyIGNoYXJ0LlxuXHQgKiBAcGFyYW0gcmV0dXJuT2JqZWN0IEZsYWcgd2hpY2ggc3BlY2lmaWVzIGlmIHRoZSByZXR1cm4gdmFsdWUgc2hvdWxkIGJlIHN0cmluZyBvciBvYmplY3QuXG5cdCAqIEByZXR1cm5zIEFnZ3JlZ2F0aW9uIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgbWljcm8gY2hhcnQuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRnZXRBZ2dyZWdhdGlvbkZvck1pY3JvY2hhcnQ6IGZ1bmN0aW9uIChcblx0XHRhZ2dyZWdhdGlvblR5cGU6IHN0cmluZyxcblx0XHRjb2xsZWN0aW9uOiBNZXRhTW9kZWxOYXZQcm9wZXJ0eSxcblx0XHRkYXRhUG9pbnQ6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YVBvaW50VHlwZT4sXG5cdFx0dWlOYW1lOiBzdHJpbmcsXG5cdFx0ZGltZW5zaW9uOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5UGF0aD4gfCBQcm9wZXJ0eVBhdGggfCB1bmRlZmluZWQsXG5cdFx0bWVhc3VyZTogRGF0YU1vZGVsT2JqZWN0UGF0aDxNZWFzdXJlPixcblx0XHRzb3J0T3JkZXI/OiBTb3J0T3JkZXJUeXBlW10sXG5cdFx0bWVhc3VyZU9yRGltZW5zaW9uQmFyPzogc3RyaW5nLFxuXHRcdHJldHVybk9iamVjdD86IGJvb2xlYW5cblx0KTogc3RyaW5nIHwgQWdncmVnYXRpb25CaW5kaW5nSW5mbyB7XG5cdFx0bGV0IHBhdGggPSBjb2xsZWN0aW9uW1wiJGtpbmRcIl0gPT09IFwiRW50aXR5U2V0XCIgPyBcIi9cIiA6IFwiXCI7XG5cdFx0cGF0aCA9IHBhdGggKyB1aU5hbWU7XG5cdFx0Y29uc3QgZ3JvdXBJZCA9IFwiXCI7XG5cdFx0bGV0IGRhdGFQb2ludENyaXRpY2FsbGl0eUNhbGM7XG5cdFx0bGV0IGRhdGFQb2ludENyaXRpY2FsbGl0eSA9IGRhdGFQb2ludC50YXJnZXRPYmplY3Q/LkNyaXRpY2FsaXR5XG5cdFx0XHQ/IChkYXRhUG9pbnQudGFyZ2V0T2JqZWN0Py5Dcml0aWNhbGl0eSBhcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPik/LnBhdGhcblx0XHRcdDogXCJcIjtcblx0XHRjb25zdCBjdXJyZW5jeU9yVW5pdCA9IE1pY3JvQ2hhcnRIZWxwZXIuZ2V0VU9NUGF0aEZvck1pY3JvY2hhcnQoZmFsc2UsIG1lYXN1cmUpO1xuXHRcdGxldCB0YXJnZXRWYWx1ZVBhdGggPSBcIlwiO1xuXHRcdGxldCBkaW1lbnNpb25Qcm9wZXJ0eVBhdGggPSBcIlwiO1xuXHRcdGlmICgoZGltZW5zaW9uIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHlQYXRoPik/LnRhcmdldE9iamVjdCkge1xuXHRcdFx0ZGltZW5zaW9uID0gKGRpbWVuc2lvbiBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5UGF0aD4pLnRhcmdldE9iamVjdDtcblx0XHR9XG5cdFx0aWYgKChkaW1lbnNpb24gYXMgUHJvcGVydHlQYXRoKT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCkge1xuXHRcdFx0ZGltZW5zaW9uUHJvcGVydHlQYXRoID0gKFxuXHRcdFx0XHQoZGltZW5zaW9uIGFzIFByb3BlcnR5UGF0aCk/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LlRleHQgYXMgdW5rbm93biBhcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPlxuXHRcdFx0KT8ucGF0aDtcblx0XHR9IGVsc2UgaWYgKGRpbWVuc2lvbikge1xuXHRcdFx0ZGltZW5zaW9uUHJvcGVydHlQYXRoID0gKGRpbWVuc2lvbiBhcyBQcm9wZXJ0eVBhdGgpPy52YWx1ZTtcblx0XHR9XG5cdFx0c3dpdGNoIChhZ2dyZWdhdGlvblR5cGUpIHtcblx0XHRcdGNhc2UgXCJQb2ludHNcIjpcblx0XHRcdGNhc2UgQ2hhcnRUeXBlLkFyZWE6XG5cdFx0XHRcdGRhdGFQb2ludENyaXRpY2FsbGl0eUNhbGMgPSBkYXRhUG9pbnQ/LnRhcmdldE9iamVjdD8uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbjtcblx0XHRcdFx0dGFyZ2V0VmFsdWVQYXRoID0gZGF0YVBvaW50Py50YXJnZXRPYmplY3Q/LlRhcmdldFZhbHVlPy5wYXRoO1xuXHRcdFx0XHRkYXRhUG9pbnRDcml0aWNhbGxpdHkgPSBcIlwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJDb2x1bW5zXCI6XG5cdFx0XHRjYXNlIENoYXJ0VHlwZS5Db2x1bW46XG5cdFx0XHRcdGRhdGFQb2ludENyaXRpY2FsbGl0eUNhbGMgPSBkYXRhUG9pbnQ/LnRhcmdldE9iamVjdD8uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTGluZVBvaW50c1wiOlxuXHRcdFx0Y2FzZSBDaGFydFR5cGUuTGluZTpcblx0XHRcdFx0ZGF0YVBvaW50Q3JpdGljYWxsaXR5ID0gXCJcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiQmFyc1wiOlxuXHRcdFx0Y2FzZSBDaGFydFR5cGUuQmFyU3RhY2tlZDpcblx0XHRcdFx0ZGltZW5zaW9uUHJvcGVydHlQYXRoID0gXCJcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdGNvbnN0IHBhcmFtZXRlcnMgPSBNaWNyb0NoYXJ0SGVscGVyLmdldFNlbGVjdFBhcmFtZXRlcnMoXG5cdFx0XHRncm91cElkLFxuXHRcdFx0c29ydE9yZGVyLFxuXHRcdFx0ZGF0YVBvaW50Q3JpdGljYWxsaXR5Q2FsYyxcblx0XHRcdGRhdGFQb2ludENyaXRpY2FsbGl0eSxcblx0XHRcdFtjdXJyZW5jeU9yVW5pdCBhcyBzdHJpbmcsIHRhcmdldFZhbHVlUGF0aCwgZGltZW5zaW9uUHJvcGVydHlQYXRoLCBtZWFzdXJlT3JEaW1lbnNpb25CYXIgfHwgXCJcIl0sXG5cdFx0XHRyZXR1cm5PYmplY3Rcblx0XHQpO1xuXHRcdGlmIChyZXR1cm5PYmplY3QpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHBhdGgsXG5cdFx0XHRcdHBhcmFtZXRlcnM6IHBhcmFtZXRlcnMgYXMgUGFyYW1ldGVyVHlwZVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIGB7cGF0aDonJHtwYXRofSdgICsgYCwgcGFyYW1ldGVycyA6IHske3BhcmFtZXRlcnN9fSB9YDtcblx0fSxcblxuXHRnZXRDdXJyZW5jeU9yVW5pdDogZnVuY3Rpb24gKG1lYXN1cmU6IE1ldGFNb2RlbFByb3BlcnR5QW5ub3RhdGlvbnMpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGlmIChtZWFzdXJlW2BAJHtNZWFzdXJlc0Fubm90YXRpb25UZXJtcy5JU09DdXJyZW5jeX1gXSkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0KG1lYXN1cmVbYEAke01lYXN1cmVzQW5ub3RhdGlvblRlcm1zLklTT0N1cnJlbmN5fWBdIGFzIHsgJFBhdGg6IHN0cmluZyB9KS4kUGF0aCB8fFxuXHRcdFx0XHQobWVhc3VyZVtgQCR7TWVhc3VyZXNBbm5vdGF0aW9uVGVybXMuSVNPQ3VycmVuY3l9YF0gYXMgc3RyaW5nKVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0aWYgKG1lYXN1cmVbYEAke01lYXN1cmVzQW5ub3RhdGlvblRlcm1zLlVuaXR9YF0pIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdChtZWFzdXJlW2BAJHtNZWFzdXJlc0Fubm90YXRpb25UZXJtcy5Vbml0fWBdIGFzIHsgJFBhdGg6IHN0cmluZyB9KS4kUGF0aCB8fFxuXHRcdFx0XHQobWVhc3VyZVtgQCR7TWVhc3VyZXNBbm5vdGF0aW9uVGVybXMuVW5pdH1gXSBhcyBzdHJpbmcpXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gXCJcIjtcblx0fSxcblxuXHRnZXRDYWxlbmRhclBhdHRlcm46IGZ1bmN0aW9uIChcblx0XHRwcm9wZXJ0eVR5cGU6IHN0cmluZyxcblx0XHRhbm5vdGF0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBQcm9wZXJ0eUFubm90YXRpb25zLFxuXHRcdGlzTWljcm9DaGFydFJ1blRpbWU/OiBib29sZWFuXG5cdCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKGlzTWljcm9DaGFydFJ1blRpbWUpIHtcblx0XHRcdHJldHVybiBNaWNyb0NoYXJ0SGVscGVyLmNoZWNrUGF0dGVybkZvclJ1bnRpbWVJbnN0YW5jZShhbm5vdGF0aW9ucywgcHJvcGVydHlUeXBlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIE1pY3JvQ2hhcnRIZWxwZXIuY2hlY2tQYXR0ZXJuRm9yVGVtcGxhdGVUaW1lSW5zdGFuY2UoYW5ub3RhdGlvbnMsIHByb3BlcnR5VHlwZSk7XG5cdFx0fVxuXHR9LFxuXG5cdGNoZWNrUGF0dGVybkZvclJ1bnRpbWVJbnN0YW5jZTogZnVuY3Rpb24gKGFubm90YXRpb25zOiBQcm9wZXJ0eUFubm90YXRpb25zLCBwcm9wZXJ0eVR5cGU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuICgoYW5ub3RhdGlvbnMuQ29tbW9uPy5Jc0NhbGVuZGFyWWVhciAmJiBcInl5eXlcIikgfHxcblx0XHRcdChhbm5vdGF0aW9ucy5Db21tb24/LklzQ2FsZW5kYXJRdWFydGVyICYmIFwiUVwiKSB8fFxuXHRcdFx0KGFubm90YXRpb25zLkNvbW1vbj8uSXNDYWxlbmRhck1vbnRoICYmIFwiTU1cIikgfHxcblx0XHRcdChhbm5vdGF0aW9ucy5Db21tb24/LklzQ2FsZW5kYXJXZWVrICYmIFwid3dcIikgfHxcblx0XHRcdChhbm5vdGF0aW9ucy5Db21tb24/LklzQ2FsZW5kYXJEYXRlICYmIFwieXl5eU1NZGRcIikgfHxcblx0XHRcdChhbm5vdGF0aW9ucy5Db21tb24/LklzQ2FsZW5kYXJZZWFyTW9udGggJiYgXCJ5eXl5TU1cIikgfHxcblx0XHRcdChwcm9wZXJ0eVR5cGUgPT09IFwiRWRtLkRhdGVcIiAmJiBcInl5eXktTU0tZGRcIikgfHxcblx0XHRcdHVuZGVmaW5lZCkgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHR9LFxuXG5cdGNoZWNrUGF0dGVybkZvclRlbXBsYXRlVGltZUluc3RhbmNlOiBmdW5jdGlvbiAoYW5ub3RhdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBwcm9wZXJ0eVR5cGU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuICgoYW5ub3RhdGlvbnNbYEAke0NvbW1vbkFubm90YXRpb25UZXJtcy5Jc0NhbGVuZGFyWWVhcn1gXSAmJiBcInl5eXlcIikgfHxcblx0XHRcdChhbm5vdGF0aW9uc1tgQCR7Q29tbW9uQW5ub3RhdGlvblRlcm1zLklzQ2FsZW5kYXJRdWFydGVyfWBdICYmIFwiUVwiKSB8fFxuXHRcdFx0KGFubm90YXRpb25zW2BAJHtDb21tb25Bbm5vdGF0aW9uVGVybXMuSXNDYWxlbmRhck1vbnRofWBdICYmIFwiTU1cIikgfHxcblx0XHRcdChhbm5vdGF0aW9uc1tgQCR7Q29tbW9uQW5ub3RhdGlvblRlcm1zLklzQ2FsZW5kYXJXZWVrfWBdICYmIFwid3dcIikgfHxcblx0XHRcdChhbm5vdGF0aW9uc1tgQCR7Q29tbW9uQW5ub3RhdGlvblRlcm1zLklzQ2FsZW5kYXJEYXRlfWBdICYmIFwieXl5eU1NZGRcIikgfHxcblx0XHRcdChhbm5vdGF0aW9uc1tgQCR7Q29tbW9uQW5ub3RhdGlvblRlcm1zLklzQ2FsZW5kYXJZZWFyTW9udGh9YF0gJiYgXCJ5eXl5TU1cIikgfHxcblx0XHRcdChwcm9wZXJ0eVR5cGUgPT09IFwiRWRtLkRhdGVcIiAmJiBcInl5eXktTU0tZGRcIikgfHxcblx0XHRcdHVuZGVmaW5lZCkgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHR9LFxuXG5cdGdldFg6IGZ1bmN0aW9uIChwcm9wZXJ0eVBhdGg6IHN0cmluZywgcHJvcGVydHlUeXBlOiBzdHJpbmcsIGFubm90YXRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdFx0Y29uc3QgcGF0dGVybiA9IGFubm90YXRpb25zICYmIE1pY3JvQ2hhcnRIZWxwZXIuZ2V0Q2FsZW5kYXJQYXR0ZXJuKHByb3BlcnR5VHlwZSwgYW5ub3RhdGlvbnMpO1xuXHRcdGlmIChwYXR0ZXJuICYmIFtcIkVkbS5EYXRlXCIsIFwiRWRtLlN0cmluZ1wiXS5zb21lKCh0eXBlKSA9PiB0eXBlID09PSBwcm9wZXJ0eVR5cGUpKSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdGZvcm1hdFJlc3VsdChcblx0XHRcdFx0XHRbcGF0aEluTW9kZWwocHJvcGVydHlQYXRoKSwgY29uc3RhbnQocGF0dGVybiksIGNvbnN0YW50KHByb3BlcnR5UGF0aCldLFxuXHRcdFx0XHRcdFwic2FwLmZlLmNvcmUuZm9ybWF0dGVycy5WYWx1ZUZvcm1hdHRlciNmb3JtYXRTdHJpbmdEaW1lbnNpb25cIlxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblx0fSxcblx0Z2V0RXhwcmVzc2lvbldpdGhUeXBlKHZhbHVlOiBQcmltaXRpdmVUeXBlLCBmb3JtYXRPcHRpb25zPzogeyBzdHlsZTogc3RyaW5nIH0pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHZhbHVlICYmIHZhbHVlLiR0YXJnZXQpIHtcblx0XHRcdGNvbnN0IGV4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKHZhbHVlLiR0YXJnZXQsIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih2YWx1ZSkpO1xuXHRcdFx0ZXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zID0ge1xuXHRcdFx0XHQuLi5leHByZXNzaW9uLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdC4uLmZvcm1hdE9wdGlvbnNcblx0XHRcdH07XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZXhwcmVzc2lvbik7XG5cdFx0fVxuXHR9LFxuXHRjYWxjdWxhdGVDb2xvckJpbmRpbmcoXG5cdFx0ZGF0YVBvaW50OiBEYXRhUG9pbnQsXG5cdFx0YWN0dWFsVmFsdWVFeHByZXNzaW9uOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbixcblx0XHRjcml0aWNhbGl0eUV4cHJlc3Npb25Gb3JNaWNyb2NoYXJ0OiBzdHJpbmcgfCB1bmRlZmluZWRcblx0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgY29sb3JCaW5kaW5nO1xuXHRcdGlmIChkYXRhUG9pbnQuQ3JpdGljYWxpdHkgfHwgKCFkYXRhUG9pbnQuQ3JpdGljYWxpdHkgJiYgIWRhdGFQb2ludC5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uKSkge1xuXHRcdFx0Y29sb3JCaW5kaW5nID0gY3JpdGljYWxpdHlFeHByZXNzaW9uRm9yTWljcm9jaGFydDtcblx0XHR9IGVsc2UgaWYgKGRhdGFQb2ludC5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uKSB7XG5cdFx0XHRjb25zdCBjcml0aWNhbGl0eUNhbGN1bGF0aW9uID0gZGF0YVBvaW50LkNyaXRpY2FsaXR5Q2FsY3VsYXRpb247XG5cdFx0XHRjb25zdCBkaXJlY3Rpb24gPSBjcml0aWNhbGl0eUNhbGN1bGF0aW9uPy5JbXByb3ZlbWVudERpcmVjdGlvbjtcblx0XHRcdGNvbnN0IGRldmlhdGlvblJhbmdlTG93VmFsdWUgPSBjcml0aWNhbGl0eUNhbGN1bGF0aW9uPy5EZXZpYXRpb25SYW5nZUxvd1ZhbHVlXG5cdFx0XHRcdD8gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGNyaXRpY2FsaXR5Q2FsY3VsYXRpb24/LkRldmlhdGlvblJhbmdlTG93VmFsdWUpKVxuXHRcdFx0XHQ6IDA7XG5cdFx0XHRjb25zdCB0b2xlcmFuY2VSYW5nZUxvd1ZhbHVlID0gY3JpdGljYWxpdHlDYWxjdWxhdGlvbj8uVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZVxuXHRcdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihjcml0aWNhbGl0eUNhbGN1bGF0aW9uPy5Ub2xlcmFuY2VSYW5nZUxvd1ZhbHVlKSlcblx0XHRcdFx0OiAwO1xuXHRcdFx0Y29uc3QgYWNjZXB0YW5jZVJhbmdlTG93VmFsdWUgPSBjcml0aWNhbGl0eUNhbGN1bGF0aW9uPy5BY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZVxuXHRcdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihjcml0aWNhbGl0eUNhbGN1bGF0aW9uPy5BY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZSkpXG5cdFx0XHRcdDogMDtcblx0XHRcdGNvbnN0IGFjY2VwdGFuY2VSYW5nZUhpZ2hWYWx1ZSA9XG5cdFx0XHRcdGNyaXRpY2FsaXR5Q2FsY3VsYXRpb24/LkFjY2VwdGFuY2VSYW5nZUhpZ2hWYWx1ZSAmJlxuXHRcdFx0XHRjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oY3JpdGljYWxpdHlDYWxjdWxhdGlvbj8uQWNjZXB0YW5jZVJhbmdlSGlnaFZhbHVlKSk7XG5cdFx0XHRjb25zdCB0b2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZSA9XG5cdFx0XHRcdGNyaXRpY2FsaXR5Q2FsY3VsYXRpb24/LlRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlICYmXG5cdFx0XHRcdGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihjcml0aWNhbGl0eUNhbGN1bGF0aW9uPy5Ub2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZSkpO1xuXHRcdFx0Y29uc3QgZGV2aWF0aW9uUmFuZ2VIaWdoVmFsdWUgPVxuXHRcdFx0XHRjcml0aWNhbGl0eUNhbGN1bGF0aW9uPy5EZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZSAmJlxuXHRcdFx0XHRjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oY3JpdGljYWxpdHlDYWxjdWxhdGlvbj8uRGV2aWF0aW9uUmFuZ2VIaWdoVmFsdWUpKTtcblxuXHRcdFx0Y29sb3JCaW5kaW5nID0gQ29tbW9uSGVscGVyLmdldENyaXRpY2FsaXR5Q2FsY3VsYXRpb25CaW5kaW5nKFxuXHRcdFx0XHRkaXJlY3Rpb24gYXMgc3RyaW5nLFxuXHRcdFx0XHRhY3R1YWxWYWx1ZUV4cHJlc3Npb24gYXMgc3RyaW5nLFxuXHRcdFx0XHRkZXZpYXRpb25SYW5nZUxvd1ZhbHVlIGFzIHN0cmluZyxcblx0XHRcdFx0dG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSBhcyBzdHJpbmcsXG5cdFx0XHRcdGFjY2VwdGFuY2VSYW5nZUxvd1ZhbHVlIGFzIHN0cmluZyxcblx0XHRcdFx0YWNjZXB0YW5jZVJhbmdlSGlnaFZhbHVlIGFzIHN0cmluZyxcblx0XHRcdFx0dG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWUgYXMgc3RyaW5nLFxuXHRcdFx0XHRkZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZSBhcyBzdHJpbmdcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBjb2xvckJpbmRpbmc7XG5cdH0sXG5cdGFzeW5jIGdldEJ1bGxldE1pY3JvQ2hhcnRBZ2dyZWdhdGlvbnMoXG5cdFx0ZGF0YVBvaW50OiBEYXRhUG9pbnQsXG5cdFx0Y3JpdGljYWxpdHlFeHByZXNzaW9uRm9yTWljcm9jaGFydDogc3RyaW5nIHwgdW5kZWZpbmVkXG5cdCk6IFByb21pc2U8UGljazwkQnVsbGV0TWljcm9DaGFydFNldHRpbmdzLCBcImFjdHVhbFwiIHwgXCJ0aHJlc2hvbGRzXCI+IHwgdW5kZWZpbmVkPiB7XG5cdFx0Y29uc3QgQnVsbGV0TWljcm9DaGFydERhdGEgPSAoYXdhaXQgaW1wb3J0KFwic2FwL3N1aXRlL3VpL21pY3JvY2hhcnQvQnVsbGV0TWljcm9DaGFydERhdGFcIikpLmRlZmF1bHQ7XG5cdFx0Y29uc3QgYWN0dWFsVmFsdWVFeHByZXNzaW9uID0gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFQb2ludC5WYWx1ZSkpO1xuXHRcdGNvbnN0IHRocmVzaG9sZHM6IEluc3RhbmNlVHlwZTx0eXBlb2YgQnVsbGV0TWljcm9DaGFydERhdGE+W10gPSBbXTtcblx0XHRjb25zdCBjb2xvckJpbmRpbmcgPSB0aGlzLmNhbGN1bGF0ZUNvbG9yQmluZGluZyhkYXRhUG9pbnQsIGFjdHVhbFZhbHVlRXhwcmVzc2lvbiwgY3JpdGljYWxpdHlFeHByZXNzaW9uRm9yTWljcm9jaGFydCk7XG5cdFx0aWYgKGRhdGFQb2ludC5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uKSB7XG5cdFx0XHRjb25zdCBjcml0aWNhbGl0eUNhbGN1bGF0aW9uID0gZGF0YVBvaW50LkNyaXRpY2FsaXR5Q2FsY3VsYXRpb247XG5cdFx0XHRjb25zdCBkaXJlY3Rpb24gPSBjcml0aWNhbGl0eUNhbGN1bGF0aW9uPy5JbXByb3ZlbWVudERpcmVjdGlvbjtcblx0XHRcdC8vIHRocmVzaG9sZHNcblx0XHRcdGlmICghZGlyZWN0aW9uLmluY2x1ZGVzKFwiTWluaW1pemVcIikgJiYgY3JpdGljYWxpdHlDYWxjdWxhdGlvbj8uRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZSkge1xuXHRcdFx0XHR0aHJlc2hvbGRzLnB1c2goXG5cdFx0XHRcdFx0PEJ1bGxldE1pY3JvQ2hhcnREYXRhXG5cdFx0XHRcdFx0XHR2YWx1ZT17Y29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGNyaXRpY2FsaXR5Q2FsY3VsYXRpb24/LkRldmlhdGlvblJhbmdlTG93VmFsdWUpKX1cblx0XHRcdFx0XHRcdGNvbG9yPVwiRXJyb3JcIlxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWRpcmVjdGlvbi5pbmNsdWRlcyhcIk1pbmltaXplXCIpICYmIGNyaXRpY2FsaXR5Q2FsY3VsYXRpb24/LlRvbGVyYW5jZVJhbmdlTG93VmFsdWUpIHtcblx0XHRcdFx0dGhyZXNob2xkcy5wdXNoKFxuXHRcdFx0XHRcdDxCdWxsZXRNaWNyb0NoYXJ0RGF0YVxuXHRcdFx0XHRcdFx0dmFsdWU9e2NvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihjcml0aWNhbGl0eUNhbGN1bGF0aW9uPy5Ub2xlcmFuY2VSYW5nZUxvd1ZhbHVlKSl9XG5cdFx0XHRcdFx0XHRjb2xvcj1cIkNyaXRpY2FsXCJcblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFkaXJlY3Rpb24uaW5jbHVkZXMoXCJNYXhpbWl6ZVwiKSAmJiBjcml0aWNhbGl0eUNhbGN1bGF0aW9uPy5Ub2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZSkge1xuXHRcdFx0XHR0aHJlc2hvbGRzLnB1c2goXG5cdFx0XHRcdFx0PEJ1bGxldE1pY3JvQ2hhcnREYXRhXG5cdFx0XHRcdFx0XHR2YWx1ZT17Y29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGNyaXRpY2FsaXR5Q2FsY3VsYXRpb24/LlRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlKSl9XG5cdFx0XHRcdFx0XHRjb2xvcj1cIkNyaXRpY2FsXCJcblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFkaXJlY3Rpb24uaW5jbHVkZXMoXCJNYXhpbWl6ZVwiKSAmJiBjcml0aWNhbGl0eUNhbGN1bGF0aW9uPy5EZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZSkge1xuXHRcdFx0XHR0aHJlc2hvbGRzLnB1c2goXG5cdFx0XHRcdFx0PEJ1bGxldE1pY3JvQ2hhcnREYXRhXG5cdFx0XHRcdFx0XHR2YWx1ZT17Y29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGNyaXRpY2FsaXR5Q2FsY3VsYXRpb24/LkRldmlhdGlvblJhbmdlSGlnaFZhbHVlKSl9XG5cdFx0XHRcdFx0XHRjb2xvcj1cIkVycm9yXCJcblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCBhY3R1YWw6IEluc3RhbmNlVHlwZTx0eXBlb2YgQnVsbGV0TWljcm9DaGFydERhdGE+ID0gKFxuXHRcdFx0PEJ1bGxldE1pY3JvQ2hhcnREYXRhIHZhbHVlPXthY3R1YWxWYWx1ZUV4cHJlc3Npb259IGNvbG9yPXtjb2xvckJpbmRpbmd9IC8+XG5cdFx0KTtcblxuXHRcdHJldHVybiB7IGFjdHVhbCwgdGhyZXNob2xkcyB9O1xuXHR9LFxuXG5cdGFzeW5jIGdldFN0YWNrTWljcm9DaGFydEFnZ3JlZ2F0aW9ucyhcblx0XHRkYXRhUG9pbnQ6IERhdGFQb2ludCxcblx0XHRtZWFzdXJlRGF0YVBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8TWVhc3VyZT4gfCB1bmRlZmluZWQsXG5cdFx0Y3JpdGljYWxpdHlFeHByZXNzaW9uRm9yTWljcm9jaGFydDogc3RyaW5nIHwgdW5kZWZpbmVkXG5cdCk6IFByb21pc2U8UGljazwkU3RhY2tlZEJhck1pY3JvQ2hhcnRTZXR0aW5ncywgXCJiYXJzXCI+IHwgdW5kZWZpbmVkPiB7XG5cdFx0Y29uc3QgU3RhY2tlZEJhck1pY3JvQ2hhcnRCYXIgPSAoYXdhaXQgaW1wb3J0KFwic2FwL3N1aXRlL3VpL21pY3JvY2hhcnQvU3RhY2tlZEJhck1pY3JvQ2hhcnRCYXJcIikpLmRlZmF1bHQ7XG5cdFx0Y29uc3QgdmFsdWUgPSB0aGlzLmdldEV4cHJlc3Npb25XaXRoVHlwZShkYXRhUG9pbnQuVmFsdWUpO1xuXHRcdGNvbnN0IHZhbHVlQ29sb3IgPSBjcml0aWNhbGl0eUV4cHJlc3Npb25Gb3JNaWNyb2NoYXJ0O1xuXHRcdGNvbnN0IGRpc3BsYXlWYWx1ZSA9IChtZWFzdXJlRGF0YVBhdGg/LnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW1vbiBhcyBQcm9wZXJ0eUFubm90YXRpb25zX0NvbW1vbik/LlRleHRcblx0XHRcdD8gdGhpcy5nZXRFeHByZXNzaW9uV2l0aFR5cGUoXG5cdFx0XHRcdFx0KG1lYXN1cmVEYXRhUGF0aD8udGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uQ29tbW9uIGFzIFByb3BlcnR5QW5ub3RhdGlvbnNfQ29tbW9uKVxuXHRcdFx0XHRcdFx0Py5UZXh0IGFzIHVua25vd24gYXMgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPHN0cmluZz5cblx0XHRcdCAgKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGJhcnM6IDxTdGFja2VkQmFyTWljcm9DaGFydEJhciB2YWx1ZT17dmFsdWV9IGRpc3BsYXlWYWx1ZT17ZGlzcGxheVZhbHVlfSB2YWx1ZUNvbG9yPXt2YWx1ZUNvbG9yfSAvPlxuXHRcdH07XG5cdH0sXG5cblx0YXN5bmMgZ2V0SGFydmV5TWljcm9DaGFydEFnZ3JlZ2F0aW9ucyhcblx0XHRkYXRhUG9pbnQ6IERhdGFQb2ludCxcblx0XHRjcml0aWNhbGl0eUV4cHJlc3Npb25Gb3JNaWNyb2NoYXJ0OiBzdHJpbmcgfCB1bmRlZmluZWRcblx0KTogUHJvbWlzZTxQaWNrPCRIYXJ2ZXlCYWxsTWljcm9DaGFydFNldHRpbmdzLCBcIml0ZW1zXCI+IHwgdW5kZWZpbmVkPiB7XG5cdFx0Y29uc3QgSGFydmV5QmFsbE1pY3JvQ2hhcnRJdGVtID0gKGF3YWl0IGltcG9ydChcInNhcC9zdWl0ZS91aS9taWNyb2NoYXJ0L0hhcnZleUJhbGxNaWNyb0NoYXJ0SXRlbVwiKSkuZGVmYXVsdDtcblx0XHRjb25zdCBmcmFjdGlvbkxhYmVsID0gdGhpcy5nZXRFeHByZXNzaW9uV2l0aFR5cGUoZGF0YVBvaW50LlZhbHVlLCB7IHN0eWxlOiBcInNob3J0XCIgfSk7XG5cdFx0Y29uc3QgZnJhY3Rpb25WYWx1ZSA9IHRoaXMuZ2V0RXhwcmVzc2lvbldpdGhUeXBlKGRhdGFQb2ludC5WYWx1ZSk7XG5cdFx0Y29uc3QgY29sb3JWYWx1ZSA9IGNyaXRpY2FsaXR5RXhwcmVzc2lvbkZvck1pY3JvY2hhcnQ7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGl0ZW1zOiAoXG5cdFx0XHRcdDxIYXJ2ZXlCYWxsTWljcm9DaGFydEl0ZW0gZm9ybWF0dGVkTGFiZWw9e3RydWV9IGZyYWN0aW9uTGFiZWw9e2ZyYWN0aW9uTGFiZWx9IGZyYWN0aW9uPXtmcmFjdGlvblZhbHVlfSBjb2xvcj17Y29sb3JWYWx1ZX0gLz5cblx0XHRcdClcblx0XHR9O1xuXHR9LFxuXG5cdGFzeW5jIGdldENvbXBhcmlzb25NaWNyb0NoYXJ0QWdncmVnYXRpb25zKFxuXHRcdGRhdGFQb2ludDogRGF0YVBvaW50LFxuXHRcdGNyaXRpY2FsaXR5RXhwcmVzc2lvbkZvck1pY3JvY2hhcnQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRjaGFydDogQ2hhcnRcblx0KTogUHJvbWlzZTxQaWNrPCRDb21wYXJpc29uTWljcm9DaGFydFNldHRpbmdzLCBcImRhdGFcIj4+IHtcblx0XHRjb25zdCBDb21wYXJpc29uTWljcm9DaGFydERhdGEgPSAoYXdhaXQgaW1wb3J0KFwic2FwL3N1aXRlL3VpL21pY3JvY2hhcnQvQ29tcGFyaXNvbk1pY3JvQ2hhcnREYXRhXCIpKS5kZWZhdWx0O1xuXHRcdGNvbnN0IGFjdHVhbFZhbHVlRXhwcmVzc2lvbiA9IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhUG9pbnQuVmFsdWUpKTtcblx0XHRjb25zdCBkaXNwbGF5VmFsdWUgPSB0aGlzLmdldEV4cHJlc3Npb25XaXRoVHlwZShkYXRhUG9pbnQuVmFsdWUsIHsgc3R5bGU6IFwic2hvcnRcIiB9KTtcblx0XHRjb25zdCBjb21tb25UZXh0QW5ub3RhdGlvbiA9IGNoYXJ0LkRpbWVuc2lvbnNbMF0uJHRhcmdldD8uYW5ub3RhdGlvbnMuQ29tbW9uPy5UZXh0O1xuXHRcdGNvbnN0IHRpdGxlRXhwcmVzc2lvbiA9IGNvbW1vblRleHRBbm5vdGF0aW9uXG5cdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihjb21tb25UZXh0QW5ub3RhdGlvbikpXG5cdFx0XHQ6IGNvbXBpbGVFeHByZXNzaW9uKHBhdGhJbk1vZGVsKGNoYXJ0LkRpbWVuc2lvbnNbMF0udmFsdWUpKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PENvbXBhcmlzb25NaWNyb0NoYXJ0RGF0YVxuXHRcdFx0XHR2YWx1ZT17YWN0dWFsVmFsdWVFeHByZXNzaW9ufVxuXHRcdFx0XHRjb2xvcj17Y3JpdGljYWxpdHlFeHByZXNzaW9uRm9yTWljcm9jaGFydH1cblx0XHRcdFx0dGl0bGU9e3RpdGxlRXhwcmVzc2lvbn1cblx0XHRcdFx0ZGlzcGxheVZhbHVlPXtkaXNwbGF5VmFsdWV9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH0sXG5cblx0YXN5bmMgZ2V0Q29sdW1uTWljcm9DaGFydEFnZ3JlZ2F0aW9ucyhcblx0XHRkYXRhUG9pbnQ6IERhdGFQb2ludCxcblx0XHRjcml0aWNhbGl0eUV4cHJlc3Npb25Gb3JNaWNyb2NoYXJ0OiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0c2hvd09ubHlDaGFydD86IGJvb2xlYW5cblx0KTogUHJvbWlzZTxNaWNyb0NoYXJ0QWdncmVnYXRpb24+IHtcblx0XHRjb25zdCBDb2x1bW5NaWNyb0NoYXJ0RGF0YSA9IChhd2FpdCBpbXBvcnQoXCJzYXAvc3VpdGUvdWkvbWljcm9jaGFydC9Db2x1bW5NaWNyb0NoYXJ0RGF0YVwiKSkuZGVmYXVsdDtcblx0XHRjb25zdCBDb2x1bW5NaWNyb0NoYXJ0TGFiZWwgPSAoYXdhaXQgaW1wb3J0KFwic2FwL3N1aXRlL3VpL21pY3JvY2hhcnQvQ29sdW1uTWljcm9DaGFydExhYmVsXCIpKS5kZWZhdWx0O1xuXHRcdGNvbnN0IGNvbHVtbkNoYXJ0QWdncmVnYXRpb25zOiAkQ29sdW1uTWljcm9DaGFydFNldHRpbmdzID0ge307XG5cdFx0Y29uc3QgYWN0dWFsVmFsdWVFeHByZXNzaW9uID0gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFQb2ludC5WYWx1ZSkpO1xuXHRcdGNvbnN0IGNvbG9yQmluZGluZyA9IHRoaXMuY2FsY3VsYXRlQ29sb3JCaW5kaW5nKGRhdGFQb2ludCwgYWN0dWFsVmFsdWVFeHByZXNzaW9uLCBjcml0aWNhbGl0eUV4cHJlc3Npb25Gb3JNaWNyb2NoYXJ0KTtcblx0XHRjb2x1bW5DaGFydEFnZ3JlZ2F0aW9ucy5jb2x1bW5zID0gPENvbHVtbk1pY3JvQ2hhcnREYXRhIHZhbHVlPXthY3R1YWxWYWx1ZUV4cHJlc3Npb259IGNvbG9yPXtjb2xvckJpbmRpbmd9IC8+O1xuXHRcdGlmICghc2hvd09ubHlDaGFydCkge1xuXHRcdFx0Y29sdW1uQ2hhcnRBZ2dyZWdhdGlvbnMubGVmdEJvdHRvbUxhYmVsID0gPENvbHVtbk1pY3JvQ2hhcnRMYWJlbCAvPjtcblx0XHRcdGNvbHVtbkNoYXJ0QWdncmVnYXRpb25zLmxlZnRUb3BMYWJlbCA9IDxDb2x1bW5NaWNyb0NoYXJ0TGFiZWwgLz47XG5cdFx0XHRjb2x1bW5DaGFydEFnZ3JlZ2F0aW9ucy5yaWdodEJvdHRvbUxhYmVsID0gPENvbHVtbk1pY3JvQ2hhcnRMYWJlbCAvPjtcblx0XHRcdGNvbHVtbkNoYXJ0QWdncmVnYXRpb25zLnJpZ2h0VG9wTGFiZWwgPSA8Q29sdW1uTWljcm9DaGFydExhYmVsIC8+O1xuXHRcdH1cblx0XHRyZXR1cm4gY29sdW1uQ2hhcnRBZ2dyZWdhdGlvbnM7XG5cdH0sXG5cblx0YXN5bmMgZ2V0TGluZU1pY3JvQ2hhcnRBZ2dyYWdhdGlvbnMoXG5cdFx0bWljcm9DaGFydERhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8Q2hhcnQgfCBQcmVzZW50YXRpb25WYXJpYW50PiB8IHVuZGVmaW5lZCxcblx0XHRjaGFydFRhcmdldDogQ2hhcnQsXG5cdFx0dGFyZ2V0TmF2aWdhdGlvblBhdGg6IENvbnRleHRcblx0KTogUHJvbWlzZTxQaWNrPCRMaW5lTWljcm9DaGFydFNldHRpbmdzLCBcImxpbmVzXCI+PiB7XG5cdFx0Y29uc3QgTGluZU1pY3JvQ2hhcnRMaW5lID0gKGF3YWl0IGltcG9ydChcInNhcC9zdWl0ZS91aS9taWNyb2NoYXJ0L0xpbmVNaWNyb0NoYXJ0TGluZVwiKSkuZGVmYXVsdDtcblx0XHRjb25zdCBMaW5lTWljcm9DaGFydFBvaW50ID0gKGF3YWl0IGltcG9ydChcInNhcC9zdWl0ZS91aS9taWNyb2NoYXJ0L0xpbmVNaWNyb0NoYXJ0UG9pbnRcIikpLmRlZmF1bHQ7XG5cdFx0Y29uc3QgZGltZW5zaW9uRGF0YVBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxEYXRhTW9kZWxQcm9wZXJ0eT4oXG5cdFx0XHRtaWNyb0NoYXJ0RGF0YU1vZGVsT2JqZWN0UGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPENoYXJ0IHwgUHJlc2VudGF0aW9uVmFyaWFudD4sXG5cdFx0XHRjaGFydFRhcmdldC5EaW1lbnNpb25zWzBdLnZhbHVlXG5cdFx0KTtcblx0XHRjb25zdCBtZWFzdXJlcyA9IGNoYXJ0VGFyZ2V0Lk1lYXN1cmVzO1xuXHRcdGNvbnN0IGxpbmVzID0gW107XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG1lYXN1cmVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBEYXRhUG9pbnRQYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGg8RGF0YVBvaW50VHlwZT4oXG5cdFx0XHRcdG1pY3JvQ2hhcnREYXRhTW9kZWxPYmplY3RQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj4sXG5cdFx0XHRcdGNoYXJ0VGFyZ2V0Py5NZWFzdXJlQXR0cmlidXRlc1tpXT8uRGF0YVBvaW50Py52YWx1ZVxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IG1lYXN1cmVEYXRhUGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPE1lYXN1cmU+KFxuXHRcdFx0XHRtaWNyb0NoYXJ0RGF0YU1vZGVsT2JqZWN0UGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+LFxuXHRcdFx0XHRjaGFydFRhcmdldC5NZWFzdXJlc1tpXS52YWx1ZVxuXHRcdFx0KTtcblxuXHRcdFx0Y29uc3QgcG9pbnRzID0gTWljcm9DaGFydEhlbHBlci5nZXRBZ2dyZWdhdGlvbkZvck1pY3JvY2hhcnQoXG5cdFx0XHRcdFwiTGluZVBvaW50c1wiLFxuXHRcdFx0XHR0YXJnZXROYXZpZ2F0aW9uUGF0aD8uZ2V0T2JqZWN0KCksXG5cdFx0XHRcdERhdGFQb2ludFBhdGgsXG5cdFx0XHRcdHRhcmdldE5hdmlnYXRpb25QYXRoPy5nZXRPYmplY3QoXCJAc2FwdWkubmFtZVwiKSxcblx0XHRcdFx0Y2hhcnRUYXJnZXQuRGltZW5zaW9uc1swXSxcblx0XHRcdFx0bWVhc3VyZURhdGFQYXRoLFxuXHRcdFx0XHQobWljcm9DaGFydERhdGFNb2RlbE9iamVjdFBhdGg/LnRhcmdldE9iamVjdCBhcyBQcmVzZW50YXRpb25WYXJpYW50KT8uU29ydE9yZGVyIGFzIHVua25vd24gYXMgU29ydE9yZGVyVHlwZVtdLFxuXHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdHRydWVcblx0XHRcdCkgYXMgYHske3N0cmluZ319YDtcblxuXHRcdFx0Y29uc3QgeERhdGEgPSB0aGlzLmdldFhEYXRhKGRpbWVuc2lvbkRhdGFQYXRoLCBtaWNyb0NoYXJ0RGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdFx0XHRjb25zdCB5RGF0YSA9IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihEYXRhUG9pbnRQYXRoLnRhcmdldE9iamVjdD8uVmFsdWUpKTtcblxuXHRcdFx0bGluZXMucHVzaChcblx0XHRcdFx0PExpbmVNaWNyb0NoYXJ0TGluZSBwb2ludHM9e3BvaW50c30+XG5cdFx0XHRcdFx0e3sgcG9pbnRzOiA8TGluZU1pY3JvQ2hhcnRQb2ludCB4PXt4RGF0YX0geT17eURhdGF9PjwvTGluZU1pY3JvQ2hhcnRQb2ludD4gfX1cblx0XHRcdFx0PC9MaW5lTWljcm9DaGFydExpbmU+XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7IGxpbmVzOiBsaW5lcyB9O1xuXHR9LFxuXG5cdGdldFhEYXRhKFxuXHRcdGRpbWVuc2lvbkRhdGFQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFNb2RlbFByb3BlcnR5Pixcblx0XHRtaWNyb0NoYXJ0RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxDaGFydCB8IFByZXNlbnRhdGlvblZhcmlhbnQ+IHwgdW5kZWZpbmVkXG5cdCk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0XHRsZXQgeERhdGE7XG5cdFx0Y29uc3QgcHJvcGVydHlUeXBlID0gZGltZW5zaW9uRGF0YVBhdGg/LnRhcmdldE9iamVjdD8udHlwZSBhcyBzdHJpbmc7XG5cdFx0Y29uc3QgcHJvcEFubm90YXRpb25zID0gZGltZW5zaW9uRGF0YVBhdGgudGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucztcblx0XHRpZiAoXG5cdFx0XHRwcm9wZXJ0eVR5cGUgPT09IFwiRWRtLkRhdGVcIiB8fFxuXHRcdFx0KGRpbWVuc2lvbkRhdGFQYXRoLnRhcmdldE9iamVjdD8udHlwZSA9PT0gXCJFZG0uU3RyaW5nXCIgJiZcblx0XHRcdFx0TWljcm9DaGFydEhlbHBlci5nZXRDYWxlbmRhclBhdHRlcm4ocHJvcGVydHlUeXBlLCBkaW1lbnNpb25EYXRhUGF0aC50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zLCB0cnVlKSlcblx0XHQpIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IGRpbWVuc2lvbkRhdGFQYXRoPy50YXJnZXRPYmplY3Q/Lm5hbWU7XG5cdFx0XHRjb25zdCBwYXR0ZXJuID0gcHJvcEFubm90YXRpb25zICYmIE1pY3JvQ2hhcnRIZWxwZXIuZ2V0Q2FsZW5kYXJQYXR0ZXJuKHByb3BlcnR5VHlwZSwgcHJvcEFubm90YXRpb25zLCB0cnVlKTtcblx0XHRcdGlmIChwYXR0ZXJuICYmIFtcIkVkbS5EYXRlXCIsIFwiRWRtLlN0cmluZ1wiXS5zb21lKCh0eXBlKSA9PiB0eXBlID09PSBwcm9wZXJ0eVR5cGUpKSB7XG5cdFx0XHRcdHhEYXRhID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0Zm9ybWF0UmVzdWx0KFtwYXRoSW5Nb2RlbChwcm9wZXJ0eVBhdGgpLCBwYXR0ZXJuLCBwcm9wZXJ0eVBhdGhdLCB2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0U3RyaW5nRGltZW5zaW9uKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRkaW1lbnNpb25EYXRhUGF0aC5jb250ZXh0TG9jYXRpb24gPSBtaWNyb0NoYXJ0RGF0YU1vZGVsT2JqZWN0UGF0aDtcblx0XHRcdHhEYXRhID0gZ2V0VmFsdWVCaW5kaW5nKGRpbWVuc2lvbkRhdGFQYXRoLCB7fSk7XG5cdFx0fVxuXHRcdHJldHVybiB4RGF0YTtcblx0fSxcblx0YXN5bmMgZ2V0QXJlYU1pY3JvQ2hhcnRBZ2dyZWdhdGlvbnMoXG5cdFx0Y2hhcnRUYXJnZXQ6IENoYXJ0LFxuXHRcdG1pY3JvQ2hhcnREYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByZXNlbnRhdGlvblZhcmlhbnQgfCBDaGFydD4sXG5cdFx0dGFyZ2V0TmF2aWdhdGlvblBhdGg6IENvbnRleHQsXG5cdFx0c2hvd09ubHlDaGFydD86IGJvb2xlYW5cblx0KTogUHJvbWlzZTxcblx0XHRQaWNrPFxuXHRcdFx0JEFyZWFNaWNyb0NoYXJ0U2V0dGluZ3MsXG5cdFx0XHR8IFwiY2hhcnRcIlxuXHRcdFx0fCBcInRhcmdldFwiXG5cdFx0XHR8IFwiZmlyc3RYTGFiZWxcIlxuXHRcdFx0fCBcImZpcnN0WUxhYmVsXCJcblx0XHRcdHwgXCJsYXN0WExhYmVsXCJcblx0XHRcdHwgXCJsYXN0WUxhYmVsXCJcblx0XHRcdHwgXCJtaW5UaHJlc2hvbGRcIlxuXHRcdFx0fCBcIm1heFRocmVzaG9sZFwiXG5cdFx0XHR8IFwiaW5uZXJNaW5UaHJlc2hvbGRcIlxuXHRcdFx0fCBcImlubmVyTWF4VGhyZXNob2xkXCJcblx0XHQ+XG5cdD4ge1xuXHRcdGNvbnN0IEFyZWFNaWNyb0NoYXJ0SXRlbSA9IChhd2FpdCBpbXBvcnQoXCJzYXAvc3VpdGUvdWkvbWljcm9jaGFydC9BcmVhTWljcm9DaGFydEl0ZW1cIikpLmRlZmF1bHQ7XG5cdFx0Y29uc3QgQXJlYU1pY3JvQ2hhcnRQb2ludCA9IChhd2FpdCBpbXBvcnQoXCJzYXAvc3VpdGUvdWkvbWljcm9jaGFydC9BcmVhTWljcm9DaGFydFBvaW50XCIpKS5kZWZhdWx0O1xuXHRcdGNvbnN0IEFyZWFNaWNyb0NoYXJ0TGFiZWwgPSAoYXdhaXQgaW1wb3J0KFwic2FwL3N1aXRlL3VpL21pY3JvY2hhcnQvQXJlYU1pY3JvQ2hhcnRMYWJlbFwiKSkuZGVmYXVsdDtcblx0XHRjb25zdCBkYXRhUG9pbnQgPSBjaGFydFRhcmdldD8uTWVhc3VyZUF0dHJpYnV0ZXNbMF0/LkRhdGFQb2ludD8uJHRhcmdldCBhcyBEYXRhUG9pbnQ7XG5cdFx0Y29uc3QgbWVhc3VyZURhdGFQYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGg8TWVhc3VyZT4obWljcm9DaGFydERhdGFNb2RlbE9iamVjdFBhdGgsIGNoYXJ0VGFyZ2V0Lk1lYXN1cmVzWzBdLnZhbHVlKTtcblx0XHRjb25zdCBkaW1lbnNpb25EYXRhUGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPERhdGFNb2RlbFByb3BlcnR5PihtaWNyb0NoYXJ0RGF0YU1vZGVsT2JqZWN0UGF0aCwgY2hhcnRUYXJnZXQuRGltZW5zaW9uc1swXS52YWx1ZSk7XG5cdFx0Y29uc3QgRGF0YVBvaW50UGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPERhdGFQb2ludFR5cGU+KFxuXHRcdFx0bWljcm9DaGFydERhdGFNb2RlbE9iamVjdFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPixcblx0XHRcdGNoYXJ0VGFyZ2V0Py5NZWFzdXJlQXR0cmlidXRlc1swXT8uRGF0YVBvaW50Py52YWx1ZVxuXHRcdCk7XG5cdFx0Y29uc3QgdGFyZ2V0TmF2aWdhdGlvbkRhdGFNb2RlbE9iamVjdDogRGF0YU1vZGVsT2JqZWN0UGF0aDxFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHk+ID1cblx0XHRcdE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHModGFyZ2V0TmF2aWdhdGlvblBhdGgpO1xuXHRcdGNvbnN0IGdldEFyZWFNaWNyb0NoYXJ0SXRlbSA9IChcblx0XHRcdHk6IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFByaW1pdGl2ZVR5cGU+LFxuXHRcdFx0Y29sb3I/OiBzdHJpbmcsXG5cdFx0XHRpc0NoYXJ0QWdncmVnYXRpb24/OiBib29sZWFuXG5cdFx0KTogSW5zdGFuY2VUeXBlPHR5cGVvZiBBcmVhTWljcm9DaGFydEl0ZW0+ID0+IHtcblx0XHRcdGxldCBwb2ludHM7XG5cdFx0XHRpZiAoaXNDaGFydEFnZ3JlZ2F0aW9uKSB7XG5cdFx0XHRcdHBvaW50cyA9IE1pY3JvQ2hhcnRIZWxwZXIuZ2V0QWdncmVnYXRpb25Gb3JNaWNyb2NoYXJ0KFxuXHRcdFx0XHRcdFwiUG9pbnRzXCIsXG5cdFx0XHRcdFx0dGFyZ2V0TmF2aWdhdGlvblBhdGg/LmdldE9iamVjdCgpLFxuXHRcdFx0XHRcdERhdGFQb2ludFBhdGgsXG5cdFx0XHRcdFx0dGFyZ2V0TmF2aWdhdGlvblBhdGg/LmdldE9iamVjdChcIkBzYXB1aS5uYW1lXCIpLFxuXHRcdFx0XHRcdGNoYXJ0VGFyZ2V0LkRpbWVuc2lvbnNbMF0sXG5cdFx0XHRcdFx0bWVhc3VyZURhdGFQYXRoLFxuXHRcdFx0XHRcdChtaWNyb0NoYXJ0RGF0YU1vZGVsT2JqZWN0UGF0aD8udGFyZ2V0T2JqZWN0IGFzIFByZXNlbnRhdGlvblZhcmlhbnQpPy5Tb3J0T3JkZXIgYXMgdW5rbm93biBhc1xuXHRcdFx0XHRcdFx0fCBTb3J0T3JkZXJUeXBlW11cblx0XHRcdFx0XHRcdHwgdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFwiXCIsXG5cdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHQpIGFzIGB7JHtzdHJpbmd9fWA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwb2ludHMgPSB7XG5cdFx0XHRcdFx0cGF0aDpcblx0XHRcdFx0XHRcdCh0YXJnZXROYXZpZ2F0aW9uRGF0YU1vZGVsT2JqZWN0LnRhcmdldE9iamVjdD8uX3R5cGUgPT09IFwiRW50aXR5U2V0XCIgPyBcIi9cIiA6IFwiXCIpICtcblx0XHRcdFx0XHRcdHRhcmdldE5hdmlnYXRpb25EYXRhTW9kZWxPYmplY3QudGFyZ2V0T2JqZWN0Py5uYW1lXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8QXJlYU1pY3JvQ2hhcnRJdGVtIGNvbG9yPXtjb2xvcn0gcG9pbnRzPXtwb2ludHN9PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRwb2ludHM6IDxBcmVhTWljcm9DaGFydFBvaW50IHg9e3h9IHk9e2NvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih5KSl9PjwvQXJlYU1pY3JvQ2hhcnRQb2ludD5cblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L0FyZWFNaWNyb0NoYXJ0SXRlbT5cblx0XHRcdCk7XG5cdFx0fTtcblx0XHRjb25zdCBhZ2dyZWdhdGlvbjogJEFyZWFNaWNyb0NoYXJ0U2V0dGluZ3MgPSB7fTtcblx0XHRjb25zdCB4ID0gdGhpcy5nZXRYRGF0YShkaW1lbnNpb25EYXRhUGF0aCwgbWljcm9DaGFydERhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRcdGFnZ3JlZ2F0aW9uLmNoYXJ0ID0gZ2V0QXJlYU1pY3JvQ2hhcnRJdGVtKGRhdGFQb2ludC5WYWx1ZSwgdW5kZWZpbmVkLCB0cnVlKTtcblx0XHRhZ2dyZWdhdGlvbi50YXJnZXQgPSBnZXRBcmVhTWljcm9DaGFydEl0ZW0oZGF0YVBvaW50LlRhcmdldFZhbHVlKTtcblx0XHRpZiAoIXNob3dPbmx5Q2hhcnQpIHtcblx0XHRcdGFnZ3JlZ2F0aW9uLmZpcnN0WExhYmVsID0gPEFyZWFNaWNyb0NoYXJ0TGFiZWwgLz47XG5cdFx0XHRhZ2dyZWdhdGlvbi5maXJzdFlMYWJlbCA9IDxBcmVhTWljcm9DaGFydExhYmVsIC8+O1xuXHRcdFx0YWdncmVnYXRpb24ubGFzdFhMYWJlbCA9IDxBcmVhTWljcm9DaGFydExhYmVsIC8+O1xuXHRcdFx0YWdncmVnYXRpb24ubGFzdFlMYWJlbCA9IDxBcmVhTWljcm9DaGFydExhYmVsIC8+O1xuXHRcdH1cblx0XHRjb25zdCBpbXByb3ZlbWVudERpcmVjdGlvbiA9IERhdGFQb2ludFBhdGg/LnRhcmdldE9iamVjdD8uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbj8uSW1wcm92ZW1lbnREaXJlY3Rpb247XG5cdFx0aWYgKGltcHJvdmVtZW50RGlyZWN0aW9uID09PSBcIlVJLkltcHJvdmVtZW50RGlyZWN0aW9uVHlwZS9NaW5pbWl6ZVwiKSB7XG5cdFx0XHRhZ2dyZWdhdGlvbi5taW5UaHJlc2hvbGQgPSBnZXRBcmVhTWljcm9DaGFydEl0ZW0oZGF0YVBvaW50Py5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uPy5Ub2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZSwgXCJHb29kXCIpO1xuXHRcdFx0YWdncmVnYXRpb24ubWF4VGhyZXNob2xkID0gZ2V0QXJlYU1pY3JvQ2hhcnRJdGVtKGRhdGFQb2ludD8uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbj8uRGV2aWF0aW9uUmFuZ2VIaWdoVmFsdWUsIFwiRXJyb3JcIik7XG5cdFx0fSBlbHNlIGlmIChpbXByb3ZlbWVudERpcmVjdGlvbiA9PT0gXCJVSS5JbXByb3ZlbWVudERpcmVjdGlvblR5cGUvTWF4aW1pemVcIikge1xuXHRcdFx0YWdncmVnYXRpb24ubWluVGhyZXNob2xkID0gZ2V0QXJlYU1pY3JvQ2hhcnRJdGVtKGRhdGFQb2ludD8uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbj8uRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZSwgXCJFcnJvclwiKTtcblx0XHRcdGFnZ3JlZ2F0aW9uLm1heFRocmVzaG9sZCA9IGdldEFyZWFNaWNyb0NoYXJ0SXRlbShkYXRhUG9pbnQ/LkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24/LlRvbGVyYW5jZVJhbmdlTG93VmFsdWUsIFwiR29vZFwiKTtcblx0XHR9IGVsc2UgaWYgKGltcHJvdmVtZW50RGlyZWN0aW9uID09PSBcIlVJLkltcHJvdmVtZW50RGlyZWN0aW9uVHlwZS9UYXJnZXRcIikge1xuXHRcdFx0YWdncmVnYXRpb24ubWluVGhyZXNob2xkID0gZ2V0QXJlYU1pY3JvQ2hhcnRJdGVtKGRhdGFQb2ludD8uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbj8uRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZSwgXCJFcnJvclwiKTtcblx0XHRcdGFnZ3JlZ2F0aW9uLm1heFRocmVzaG9sZCA9IGdldEFyZWFNaWNyb0NoYXJ0SXRlbShkYXRhUG9pbnQ/LkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24/LkRldmlhdGlvblJhbmdlSGlnaFZhbHVlLCBcIkVycm9yXCIpO1xuXHRcdFx0YWdncmVnYXRpb24uaW5uZXJNaW5UaHJlc2hvbGQgPSBnZXRBcmVhTWljcm9DaGFydEl0ZW0oZGF0YVBvaW50Py5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uPy5Ub2xlcmFuY2VSYW5nZUxvd1ZhbHVlLCBcIkdvb2RcIik7XG5cdFx0XHRhZ2dyZWdhdGlvbi5pbm5lck1heFRocmVzaG9sZCA9IGdldEFyZWFNaWNyb0NoYXJ0SXRlbShkYXRhUG9pbnQ/LkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24/LlRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlLCBcIkdvb2RcIik7XG5cdFx0fVxuXHRcdHJldHVybiBhZ2dyZWdhdGlvbjtcblx0fSxcblxuXHRnZXRCdWxsZXRNaWNyb0NoYXJ0UHJvcGVydGllcyhcblx0XHRtaWNyb0NoYXJ0UHJvcGVydGllczogTWljcm9DaGFydFNldHRpbmdzLFxuXHRcdGRhdGFQb2ludDogRGF0YVBvaW50XG5cdCk6IFBhcnRpYWw8UHJvcGVydGllc09mPE1pY3JvQ2hhcnRTZXR0aW5ncz4+IHtcblx0XHQobWljcm9DaGFydFByb3BlcnRpZXMgYXMgJEJ1bGxldE1pY3JvQ2hhcnRTZXR0aW5ncykudGFyZ2V0VmFsdWUgPSBkYXRhUG9pbnQuVGFyZ2V0VmFsdWVcblx0XHRcdD8gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFQb2ludC5UYXJnZXRWYWx1ZSkpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHQobWljcm9DaGFydFByb3BlcnRpZXMgYXMgJEJ1bGxldE1pY3JvQ2hhcnRTZXR0aW5ncykuZm9yZWNhc3RWYWx1ZSA9IGRhdGFQb2ludC5Gb3JlY2FzdFZhbHVlXG5cdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhUG9pbnQuRm9yZWNhc3RWYWx1ZSkpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHQobWljcm9DaGFydFByb3BlcnRpZXMgYXMgJEJ1bGxldE1pY3JvQ2hhcnRTZXR0aW5ncykubWF4VmFsdWUgPSBkYXRhUG9pbnQuTWF4aW11bVZhbHVlXG5cdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKGNvbnN0YW50KGRhdGFQb2ludC5NYXhpbXVtVmFsdWU/LnZhbHVlT2YoKSkpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHQobWljcm9DaGFydFByb3BlcnRpZXMgYXMgJEJ1bGxldE1pY3JvQ2hhcnRTZXR0aW5ncykubWluVmFsdWUgPSBkYXRhUG9pbnQuTWluaW11bVZhbHVlXG5cdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKGNvbnN0YW50KGRhdGFQb2ludC5NaW5pbXVtVmFsdWU/LnZhbHVlT2YoKSkpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHQobWljcm9DaGFydFByb3BlcnRpZXMgYXMgJEJ1bGxldE1pY3JvQ2hhcnRTZXR0aW5ncykuYWN0dWFsVmFsdWVMYWJlbCA9IGRhdGFQb2ludC5WYWx1ZVxuXHRcdFx0PyBNaWNyb0NoYXJ0SGVscGVyLmdldEV4cHJlc3Npb25XaXRoVHlwZShkYXRhUG9pbnQuVmFsdWUsIHsgc3R5bGU6IFwic2hvcnRcIiB9KVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0KG1pY3JvQ2hhcnRQcm9wZXJ0aWVzIGFzICRCdWxsZXRNaWNyb0NoYXJ0U2V0dGluZ3MpLnRhcmdldFZhbHVlTGFiZWwgPSBkYXRhUG9pbnQuVGFyZ2V0VmFsdWVcblx0XHRcdD8gTWljcm9DaGFydEhlbHBlci5nZXRFeHByZXNzaW9uV2l0aFR5cGUoZGF0YVBvaW50LlRhcmdldFZhbHVlLCB7IHN0eWxlOiBcInNob3J0XCIgfSlcblx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdChtaWNyb0NoYXJ0UHJvcGVydGllcyBhcyAkQnVsbGV0TWljcm9DaGFydFNldHRpbmdzKS5zaG93RGVsdGFWYWx1ZSA9XG5cdFx0XHRkYXRhUG9pbnQuVmlzdWFsaXphdGlvbiAmJiBkYXRhUG9pbnQuVmlzdWFsaXphdGlvbiA9PT0gVmlzdWFsaXphdGlvblR5cGUuRGVsdGFCdWxsZXRDaGFydDtcblx0XHQobWljcm9DaGFydFByb3BlcnRpZXMgYXMgJEJ1bGxldE1pY3JvQ2hhcnRTZXR0aW5ncykubW9kZSA9IChtaWNyb0NoYXJ0UHJvcGVydGllcyBhcyAkQnVsbGV0TWljcm9DaGFydFNldHRpbmdzKS5zaG93RGVsdGFWYWx1ZVxuXHRcdFx0PyBcIkRlbHRhXCJcblx0XHRcdDogdW5kZWZpbmVkO1xuXG5cdFx0cmV0dXJuIG1pY3JvQ2hhcnRQcm9wZXJ0aWVzO1xuXHR9LFxuXG5cdGdldFJhZGlhbE1pY3JvQ2hhcnRQcm9wZXJ0aWVzKFxuXHRcdG1pY3JvQ2hhcnRQcm9wZXJ0aWVzOiBNaWNyb0NoYXJ0U2V0dGluZ3MsXG5cdFx0ZGF0YVBvaW50OiBEYXRhUG9pbnRcblx0KTogUGFydGlhbDxQcm9wZXJ0aWVzT2Y8TWljcm9DaGFydFNldHRpbmdzPj4ge1xuXHRcdChtaWNyb0NoYXJ0UHJvcGVydGllcyBhcyAkUmFkaWFsTWljcm9DaGFydFNldHRpbmdzKS50b3RhbCA9IGRhdGFQb2ludC5UYXJnZXRWYWx1ZVxuXHRcdFx0PyBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YVBvaW50LlRhcmdldFZhbHVlKSlcblx0XHRcdDogMTAwO1xuXHRcdGNvbnN0IHZhbHVlID0gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFQb2ludC5WYWx1ZSkpO1xuXHRcdChtaWNyb0NoYXJ0UHJvcGVydGllcyBhcyAkUmFkaWFsTWljcm9DaGFydFNldHRpbmdzKS5mcmFjdGlvbiA9IHZhbHVlO1xuXHRcdChtaWNyb0NoYXJ0UHJvcGVydGllcyBhcyAkUmFkaWFsTWljcm9DaGFydFNldHRpbmdzKS5wZXJjZW50YWdlID0gIWRhdGFQb2ludC5UYXJnZXRWYWx1ZSA/IHZhbHVlIDogdW5kZWZpbmVkO1xuXG5cdFx0Y29uc3QgY29sb3JFeHByZXNzaW9uID0gZGF0YVBvaW50LkNyaXRpY2FsaXR5ID8gYnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlDb2xvck1pY3JvQ2hhcnQoZGF0YVBvaW50KSA6IHVuZGVmaW5lZDtcblxuXHRcdChtaWNyb0NoYXJ0UHJvcGVydGllcyBhcyAkUmFkaWFsTWljcm9DaGFydFNldHRpbmdzKS52YWx1ZUNvbG9yID0gTWljcm9DaGFydEhlbHBlci5jYWxjdWxhdGVDb2xvckJpbmRpbmcoXG5cdFx0XHRkYXRhUG9pbnQsXG5cdFx0XHR2YWx1ZSxcblx0XHRcdGNvbG9yRXhwcmVzc2lvblxuXHRcdCk7XG5cdFx0cmV0dXJuIG1pY3JvQ2hhcnRQcm9wZXJ0aWVzO1xuXHR9LFxuXG5cdGdldEhhcnZleU1pY3JvQ2hhcnRQcm9wZXJ0aWVzKFxuXHRcdG1pY3JvQ2hhcnRQcm9wZXJ0aWVzOiBNaWNyb0NoYXJ0U2V0dGluZ3MsXG5cdFx0ZGF0YVBvaW50OiBEYXRhUG9pbnRcblx0KTogUGFydGlhbDxQcm9wZXJ0aWVzT2Y8TWljcm9DaGFydFNldHRpbmdzPj4ge1xuXHRcdChtaWNyb0NoYXJ0UHJvcGVydGllcyBhcyAkSGFydmV5QmFsbE1pY3JvQ2hhcnRTZXR0aW5ncykuZm9ybWF0dGVkTGFiZWwgPSB0cnVlO1xuXHRcdChtaWNyb0NoYXJ0UHJvcGVydGllcyBhcyAkSGFydmV5QmFsbE1pY3JvQ2hhcnRTZXR0aW5ncykudG90YWxMYWJlbCA9IE1pY3JvQ2hhcnRIZWxwZXIuZ2V0RXhwcmVzc2lvbldpdGhUeXBlKFxuXHRcdFx0ZGF0YVBvaW50Lk1heGltdW1WYWx1ZSxcblx0XHRcdHtcblx0XHRcdFx0c3R5bGU6IFwic2hvcnRcIlxuXHRcdFx0fVxuXHRcdCk7XG5cdFx0KG1pY3JvQ2hhcnRQcm9wZXJ0aWVzIGFzICRIYXJ2ZXlCYWxsTWljcm9DaGFydFNldHRpbmdzKS50b3RhbCA9IE1pY3JvQ2hhcnRIZWxwZXIuZ2V0RXhwcmVzc2lvbldpdGhUeXBlKGRhdGFQb2ludC5NYXhpbXVtVmFsdWUpO1xuXHRcdChtaWNyb0NoYXJ0UHJvcGVydGllcyBhcyAkSGFydmV5QmFsbE1pY3JvQ2hhcnRTZXR0aW5ncykuY29sb3JQYWxldHRlID0gTWljcm9DaGFydEhlbHBlci5nZXRDb2xvclBhbGV0dGVGb3JNaWNyb0NoYXJ0KGRhdGFQb2ludCk7XG5cdFx0cmV0dXJuIG1pY3JvQ2hhcnRQcm9wZXJ0aWVzO1xuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBNaWNyb0NoYXJ0SGVscGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBOENBO0VBS0E7RUFFQTtFQXVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsTUFBTUEsZ0JBQWdCLEdBQUc7SUFDeEI7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0NDLGlCQUFpQixFQUFFLFNBQUFBLENBQVVDLEtBQWEsRUFBRUMsUUFBcUMsRUFBYztNQUM5RixNQUFNQyxJQUFJLEdBQUdELFFBQVEsQ0FBQ0UsT0FBTyxDQUFDQyxPQUFPLENBQUMsQ0FBQztNQUN2QyxJQUFJRixJQUFJLENBQUNHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO1FBQ3BDLE9BQU9DLFVBQVUsQ0FBQ0MsS0FBSztNQUN4QixDQUFDLE1BQU0sSUFBSUwsSUFBSSxDQUFDRyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtRQUMzQyxPQUFPQyxVQUFVLENBQUNFLFFBQVE7TUFDM0I7TUFDQSxPQUFPRixVQUFVLENBQUNHLE9BQU87SUFDMUIsQ0FBQztJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQ0MsdUJB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
784
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNaWNyb0NoYXJ0SGVscGVyIiwiZ2V0VGhyZXNob2xkQ29sb3IiLCJ2YWx1ZSIsImlDb250ZXh0IiwicGF0aCIsImNvbnRleHQiLCJnZXRQYXRoIiwiaW5jbHVkZXMiLCJWYWx1ZUNvbG9yIiwiRXJyb3IiLCJDcml0aWNhbCIsIk5ldXRyYWwiLCJnZXRNZWFzdXJlUHJvcGVydHlQYXRocyIsImNoYXJ0QW5ub3RhdGlvbnMiLCJlbnRpdHlUeXBlQW5ub3RhdGlvbnMiLCJjaGFydFR5cGUiLCJpc1J1blRpbWVJbnN0YW5jZSIsInByb3BlcnR5UGF0aCIsIkxvZyIsIndhcm5pbmciLCJ1bmRlZmluZWQiLCJtZWFzdXJlSW5kZXgiLCJNZWFzdXJlcyIsImlNZWFzdXJlQXR0cmlidXRlIiwiQ29tbW9uSGVscGVyIiwiZ2V0TWVhc3VyZUF0dHJpYnV0ZUluZGV4IiwibWVhc3VyZUF0dHJpYnV0ZSIsIk1lYXN1cmVBdHRyaWJ1dGVzIiwiZGF0YVBvaW50IiwiRGF0YVBvaW50IiwiJHRhcmdldCIsIiRBbm5vdGF0aW9uUGF0aCIsIlZhbHVlIiwiJFBhdGgiLCJwdXNoIiwiam9pbiIsImdldEhpZGRlblBhdGhFeHByZXNzaW9uIiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJoaWRkZW5QYXRocyIsImZvckVhY2giLCJjYWxsIiwiaGlkZGVuUHJvcGVydHkiLCJpc05vdEFsd2F5c0hpZGRlbiIsIm1heFZhbHVlIiwidmFsdWVIaWRkZW4iLCJtYXhWYWx1ZUhpZGRlbiIsImxvZ0Vycm9yIiwiZXJyb3IiLCJmb3JtYXREZWNpbWFsIiwicHJvcGVydHkiLCJmcmFjdGlvbkRpZ2l0cyIsImNvbnN0cmFpbnRzIiwiZm9ybWF0T3B0aW9ucyIsInNjYWxlIiwiJFNjYWxlIiwiJE51bGxhYmxlIiwiJFByZWNpc2lvbiIsImRlY2ltYWxzIiwiTnVtYmVyRm9ybWF0IiwiZ2V0RmxvYXRJbnN0YW5jZSIsInN0eWxlIiwicHJlc2VydmVEZWNpbWFscyIsImZvcm1hdCIsImdldFNlbGVjdFBhcmFtZXRlcnMiLCJncm91cElkIiwic29ydE9yZGVyIiwiY3JpdGljYWxpdHlDYWxjdWxhdGlvbiIsImNyaXRpY2FsaXR5Iiwib3RoZXJQYXRocyIsInJldHVybk9iamVjdCIsInNvcnRlcnMiLCJwYXJhbWV0ZXJzIiwic29ydGVyIiwiUHJvcGVydHkiLCJEZXNjZW5kaW5nIiwiY3JpY3RpY2FsaXR5Q2FsY3VsYXRpb25LZXlzIiwiT2JqZWN0Iiwia2V5cyIsImtleSIsIiQkZ3JvdXBJZCIsIiRzZWxlY3QiLCIkb3JkZXJieSIsImdldERhdGFQb2ludFF1YWxpZmllcnNGb3JNZWFzdXJlcyIsImlzTWljcm9DaGFydFJ1blRpbWUiLCJxdWFsaWZpZXJzIiwibWVhc3VyZUF0dHJpYnV0ZXMiLCJmbkFkZERhdGFQb2ludFF1YWxpZmllciIsImNoYXJ0TWVhc3VyZSIsInF1YWxpZmllciIsIm1lYXN1cmUiLCJNZWFzdXJlIiwiJFByb3BlcnR5UGF0aCIsImFubm90YXRpb25QYXRoIiwic3BsaXQiLCJsb2dXYXJuaW5nIiwiZ2V0RGlzcGxheVZhbHVlRm9yTWljcm9DaGFydCIsInBhdGhUZXh0IiwidmFsdWVUZXh0UGF0aCIsInZhbHVlRGF0YVBvaW50UGF0aCIsInZhbHVlRm9ybWF0IiwiVmFsdWVGb3JtYXQiLCJOdW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMiLCJzaG91bGRSZW5kZXJNaWNyb0NoYXJ0IiwiY2hhcnRBbm5vdGF0aW9uIiwiYXZhaWxhYmxlQ2hhcnRUeXBlcyIsIkNoYXJ0VHlwZSIsImRhdGFQb2ludFZhbHVlIiwiZGF0YVBvaW50VmFsdWVIaWRkZW5QYXRoIiwiYW5ub3RhdGlvbnMiLCJVSSIsIkhpZGRlbiIsImNoYXJ0QW5ub3RhdGlvbkRpbWVuc2lvbiIsIkRpbWVuc2lvbnMiLCJmaW5hbERhdGFQb2ludFZhbHVlIiwiZGF0YVBvaW50TWF4aW11bVZhbHVlIiwiTWF4aW11bVZhbHVlIiwiZGF0YVBvaW50TWF4aW11bVZhbHVlSGlkZGVuUGF0aCIsInNob3VsZE1pY3JvQ2hhcnRSZW5kZXIiLCJkYXRhUG9pbnRWYWx1ZUhpZGRlbiIsInRhcmdldEFubm90YXRpb25zIiwiZGF0YVBvaW50TWF4VmFsdWUiLCJoaWRkZW5QYXRoIiwibWF4VmFsdWVIaWRkZW5QYXRoIiwiZ2V0RGF0YVBvaW50UXVhbGlmaWVyc0Zvck1pY3JvQ2hhcnQiLCJnZXRDb2xvclBhbGV0dGVGb3JNaWNyb0NoYXJ0IiwiQ3JpdGljYWxpdHkiLCJnZXRNZWFzdXJlU2NhbGVGb3JNaWNyb0NoYXJ0IiwidmFsdWVPZiIsImdldEJpbmRpbmdFeHByZXNzaW9uRm9yTWljcm9jaGFydCIsIm1pY3JvQ2hhcnQiLCJjb2xsZWN0aW9uIiwidWlOYW1lIiwiY2hhcnRzV2l0aEJpbmRpbmdFeHByZXNzaW9uIiwiY29uZGl0aW9uIiwiY3VycmVuY3lPclVuaXQiLCJnZXRVT01QYXRoRm9yTWljcm9jaGFydCIsInNob3dPbmx5Q2hhcnQiLCJkYXRhUG9pbnRDcml0aWNhbGxpdHkiLCJ0YXJnZXRPYmplY3QiLCJmdW5jdGlvblZhbHVlIiwiYmF0Y2hHcm91cElkIiwiY2hhcnRzV2l0aFVPTVBhcnRzIiwiSVNPQ3VycmVuY3kiLCJVbml0IiwiZ2V0QWdncmVnYXRpb25Gb3JNaWNyb2NoYXJ0IiwiYWdncmVnYXRpb25UeXBlIiwiZGltZW5zaW9uIiwibWVhc3VyZU9yRGltZW5zaW9uQmFyIiwiZGF0YVBvaW50Q3JpdGljYWxsaXR5Q2FsYyIsInRhcmdldFZhbHVlUGF0aCIsImRpbWVuc2lvblByb3BlcnR5UGF0aCIsIkNvbW1vbiIsIlRleHQiLCJDcml0aWNhbGl0eUNhbGN1bGF0aW9uIiwiVGFyZ2V0VmFsdWUiLCJnZXRDdXJyZW5jeU9yVW5pdCIsImdldENhbGVuZGFyUGF0dGVybiIsInByb3BlcnR5VHlwZSIsImNoZWNrUGF0dGVybkZvclJ1bnRpbWVJbnN0YW5jZSIsImNoZWNrUGF0dGVybkZvclRlbXBsYXRlVGltZUluc3RhbmNlIiwiSXNDYWxlbmRhclllYXIiLCJJc0NhbGVuZGFyUXVhcnRlciIsIklzQ2FsZW5kYXJNb250aCIsIklzQ2FsZW5kYXJXZWVrIiwiSXNDYWxlbmRhckRhdGUiLCJJc0NhbGVuZGFyWWVhck1vbnRoIiwiZ2V0WCIsInBhdHRlcm4iLCJzb21lIiwidHlwZSIsImNvbXBpbGVFeHByZXNzaW9uIiwiZm9ybWF0UmVzdWx0IiwicGF0aEluTW9kZWwiLCJjb25zdGFudCIsImdldEV4cHJlc3Npb25XaXRoVHlwZSIsImV4cHJlc3Npb24iLCJmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwiY2FsY3VsYXRlQ29sb3JCaW5kaW5nIiwiYWN0dWFsVmFsdWVFeHByZXNzaW9uIiwiY3JpdGljYWxpdHlFeHByZXNzaW9uRm9yTWljcm9jaGFydCIsImNvbG9yQmluZGluZyIsImRpcmVjdGlvbiIsIkltcHJvdmVtZW50RGlyZWN0aW9uIiwiZGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZSIsIkRldmlhdGlvblJhbmdlTG93VmFsdWUiLCJ0b2xlcmFuY2VSYW5nZUxvd1ZhbHVlIiwiVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSIsImFjY2VwdGFuY2VSYW5nZUxvd1ZhbHVlIiwiQWNjZXB0YW5jZVJhbmdlTG93VmFsdWUiLCJhY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWUiLCJBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWUiLCJ0b2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZSIsIlRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlIiwiZGV2aWF0aW9uUmFuZ2VIaWdoVmFsdWUiLCJEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZSIsImdldENyaXRpY2FsaXR5Q2FsY3VsYXRpb25CaW5kaW5nIiwiZ2V0QnVsbGV0TWljcm9DaGFydEFnZ3JlZ2F0aW9ucyIsIkJ1bGxldE1pY3JvQ2hhcnREYXRhIiwiX191aTVfcmVxdWlyZV9hc3luYyIsImRlZmF1bHQiLCJ0aHJlc2hvbGRzIiwiX2pzeCIsImNvbG9yIiwiYWN0dWFsIiwiZ2V0U3RhY2tNaWNyb0NoYXJ0QWdncmVnYXRpb25zIiwibWVhc3VyZURhdGFQYXRoIiwiU3RhY2tlZEJhck1pY3JvQ2hhcnRCYXIiLCJ2YWx1ZUNvbG9yIiwiZGlzcGxheVZhbHVlIiwiYmFycyIsImdldEhhcnZleU1pY3JvQ2hhcnRBZ2dyZWdhdGlvbnMiLCJIYXJ2ZXlCYWxsTWljcm9DaGFydEl0ZW0iLCJmcmFjdGlvbkxhYmVsIiwiZnJhY3Rpb25WYWx1ZSIsImNvbG9yVmFsdWUiLCJpdGVtcyIsImZvcm1hdHRlZExhYmVsIiwiZnJhY3Rpb24iLCJnZXRDb21wYXJpc29uTWljcm9DaGFydEFnZ3JlZ2F0aW9ucyIsImNoYXJ0IiwiQ29tcGFyaXNvbk1pY3JvQ2hhcnREYXRhIiwiY29tbW9uVGV4dEFubm90YXRpb24iLCJ0aXRsZUV4cHJlc3Npb24iLCJ0aXRsZSIsImdldENvbHVtbk1pY3JvQ2hhcnRBZ2dyZWdhdGlvbnMiLCJDb2x1bW5NaWNyb0NoYXJ0RGF0YSIsIkNvbHVtbk1pY3JvQ2hhcnRMYWJlbCIsImNvbHVtbkNoYXJ0QWdncmVnYXRpb25zIiwiY29sdW1ucyIsImxlZnRCb3R0b21MYWJlbCIsImxlZnRUb3BMYWJlbCIsInJpZ2h0Qm90dG9tTGFiZWwiLCJyaWdodFRvcExhYmVsIiwiZ2V0TGluZU1pY3JvQ2hhcnRBZ2dyYWdhdGlvbnMiLCJtaWNyb0NoYXJ0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImNoYXJ0VGFyZ2V0IiwidGFyZ2V0TmF2aWdhdGlvblBhdGgiLCJMaW5lTWljcm9DaGFydExpbmUiLCJMaW5lTWljcm9DaGFydFBvaW50IiwiZGltZW5zaW9uRGF0YVBhdGgiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsIm1lYXN1cmVzIiwibGluZXMiLCJpIiwiRGF0YVBvaW50UGF0aCIsInBvaW50cyIsImdldE9iamVjdCIsIlNvcnRPcmRlciIsInhEYXRhIiwiZ2V0WERhdGEiLCJ5RGF0YSIsImNoaWxkcmVuIiwieCIsInkiLCJwcm9wQW5ub3RhdGlvbnMiLCJuYW1lIiwidmFsdWVGb3JtYXR0ZXJzIiwiZm9ybWF0U3RyaW5nRGltZW5zaW9uIiwiY29udGV4dExvY2F0aW9uIiwiZ2V0VmFsdWVCaW5kaW5nIiwiZ2V0QXJlYU1pY3JvQ2hhcnRBZ2dyZWdhdGlvbnMiLCJBcmVhTWljcm9DaGFydEl0ZW0iLCJBcmVhTWljcm9DaGFydFBvaW50IiwiQXJlYU1pY3JvQ2hhcnRMYWJlbCIsInRhcmdldE5hdmlnYXRpb25EYXRhTW9kZWxPYmplY3QiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJnZXRBcmVhTWljcm9DaGFydEl0ZW0iLCJpc0NoYXJ0QWdncmVnYXRpb24iLCJfdHlwZSIsImFnZ3JlZ2F0aW9uIiwidGFyZ2V0IiwiZmlyc3RYTGFiZWwiLCJmaXJzdFlMYWJlbCIsImxhc3RYTGFiZWwiLCJsYXN0WUxhYmVsIiwiaW1wcm92ZW1lbnREaXJlY3Rpb24iLCJtaW5UaHJlc2hvbGQiLCJtYXhUaHJlc2hvbGQiLCJpbm5lck1pblRocmVzaG9sZCIsImlubmVyTWF4VGhyZXNob2xkIiwiZ2V0QnVsbGV0TWljcm9DaGFydFByb3BlcnRpZXMiLCJtaWNyb0NoYXJ0UHJvcGVydGllcyIsInRhcmdldFZhbHVlIiwiZm9yZWNhc3RWYWx1ZSIsIkZvcmVjYXN0VmFsdWUiLCJtaW5WYWx1ZSIsIk1pbmltdW1WYWx1ZSIsImFjdHVhbFZhbHVlTGFiZWwiLCJ0YXJnZXRWYWx1ZUxhYmVsIiwic2hvd0RlbHRhVmFsdWUiLCJWaXN1YWxpemF0aW9uIiwibW9kZSIsImdldFJhZGlhbE1pY3JvQ2hhcnRQcm9wZXJ0aWVzIiwidG90YWwiLCJwZXJjZW50YWdlIiwiY29sb3JFeHByZXNzaW9uIiwiYnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlDb2xvck1pY3JvQ2hhcnQiLCJnZXRIYXJ2ZXlNaWNyb0NoYXJ0UHJvcGVydGllcyIsInRvdGFsTGFiZWwiLCJjb2xvclBhbGV0dGUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk1pY3JvQ2hhcnRIZWxwZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcblx0UHJvcGVydHkgYXMgRGF0YU1vZGVsUHJvcGVydHksXG5cdEVudGl0eVNldCxcblx0TmF2aWdhdGlvblByb3BlcnR5LFxuXHRQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdFByaW1pdGl2ZVR5cGUsXG5cdFByb3BlcnR5QW5ub3RhdGlvblZhbHVlLFxuXHRQcm9wZXJ0eVBhdGhcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBNZWFzdXJlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9BbmFseXRpY3NcIjtcbmltcG9ydCB0eXBlIHsgU29ydE9yZGVyVHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgeyBDb21tb25Bbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUFubm90YXRpb25zX0NvbW1vbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uX0VkbVwiO1xuaW1wb3J0IHsgTWVhc3VyZXNBbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL01lYXN1cmVzXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5QW5ub3RhdGlvbnNfTWVhc3VyZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL01lYXN1cmVzX0VkbVwiO1xuaW1wb3J0IHR5cGUge1xuXHRDaGFydCxcblx0Q2hhcnRNZWFzdXJlQXR0cmlidXRlVHlwZVR5cGVzLFxuXHRDcml0aWNhbGl0eUNhbGN1bGF0aW9uVHlwZSxcblx0RGF0YVBvaW50LFxuXHREYXRhUG9pbnRUeXBlLFxuXHRQcmVzZW50YXRpb25WYXJpYW50XG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IENoYXJ0VHlwZSwgVUlBbm5vdGF0aW9uVGVybXMsIFZpc3VhbGl6YXRpb25UeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Y29uc3RhbnQsXG5cdGZvcm1hdFJlc3VsdCxcblx0Zm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbixcblx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLFxuXHRwYXRoSW5Nb2RlbFxufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsRW50aXR5VHlwZUFubm90YXRpb25zLCBNZXRhTW9kZWxQcm9wZXJ0eUFubm90YXRpb25zIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBlbmhhbmNlRGF0YU1vZGVsUGF0aCwgdHlwZSBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgeyBWYWx1ZUNvbG9yIH0gZnJvbSBcInNhcC9tL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIHsgJEFyZWFNaWNyb0NoYXJ0U2V0dGluZ3MgfSBmcm9tIFwic2FwL3N1aXRlL3VpL21pY3JvY2hhcnQvQXJlYU1pY3JvQ2hhcnRcIjtcbmltcG9ydCB0eXBlIHsgJEJ1bGxldE1pY3JvQ2hhcnRTZXR0aW5ncyB9IGZyb20gXCJzYXAvc3VpdGUvdWkvbWljcm9jaGFydC9CdWxsZXRNaWNyb0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSB7ICRIYXJ2ZXlCYWxsTWljcm9DaGFydFNldHRpbmdzIH0gZnJvbSBcInNhcC9zdWl0ZS91aS9taWNyb2NoYXJ0L0hhcnZleUJhbGxNaWNyb0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSB7ICRTdGFja2VkQmFyTWljcm9DaGFydFNldHRpbmdzIH0gZnJvbSBcInNhcC9zdWl0ZS91aS9taWNyb2NoYXJ0L1N0YWNrZWRCYXJNaWNyb0NoYXJ0XCI7XG5pbXBvcnQgTnVtYmVyRm9ybWF0IGZyb20gXCJzYXAvdWkvY29yZS9mb3JtYXQvTnVtYmVyRm9ybWF0XCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbE5hdlByb3BlcnR5LCBNZXRhTW9kZWxUeXBlIH0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0IHR5cGUgTWljcm9DaGFydCBmcm9tIFwiLi4vTWljcm9DaGFydFwiO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXN0cmljdGVkLWltcG9ydHNcbmltcG9ydCB0eXBlIHsgJENvbHVtbk1pY3JvQ2hhcnRTZXR0aW5ncyB9IGZyb20gXCJzYXAvc3VpdGUvdWkvbWljcm9jaGFydC9Db2x1bW5NaWNyb0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSB7ICRDb21wYXJpc29uTWljcm9DaGFydFNldHRpbmdzIH0gZnJvbSBcInNhcC9zdWl0ZS91aS9taWNyb2NoYXJ0L0NvbXBhcmlzb25NaWNyb0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHsgZ2V0VmFsdWVCaW5kaW5nIH0gZnJvbSBcIi4uL2ZpZWxkL0ZpZWxkVGVtcGxhdGluZ1wiO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXN0cmljdGVkLWltcG9ydHNcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVzdHJpY3RlZC1pbXBvcnRzXG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5QW5ub3RhdGlvbnMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0VkbV9UeXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdmFsdWVGb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1ZhbHVlRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBidWlsZEV4cHJlc3Npb25Gb3JDcml0aWNhbGl0eUNvbG9yTWljcm9DaGFydCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0NyaXRpY2FsaXR5Rm9ybWF0dGVyc1wiO1xuaW1wb3J0IHR5cGUgeyAkTGluZU1pY3JvQ2hhcnRTZXR0aW5ncyB9IGZyb20gXCJzYXAvc3VpdGUvdWkvbWljcm9jaGFydC9MaW5lTWljcm9DaGFydFwiO1xuaW1wb3J0IHR5cGUgeyAkUmFkaWFsTWljcm9DaGFydFNldHRpbmdzIH0gZnJvbSBcInNhcC9zdWl0ZS91aS9taWNyb2NoYXJ0L1JhZGlhbE1pY3JvQ2hhcnRcIjtcbmltcG9ydCB0eXBlIHsgQWdncmVnYXRpb25CaW5kaW5nSW5mbyB9IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5cbnR5cGUgUHJvcGVydHkgPSB7XG5cdCRraW5kPzogc3RyaW5nO1xuXHQkVHlwZT86IHN0cmluZztcblx0JE5hbWU/OiBzdHJpbmc7XG5cdCROdWxsYWJsZT86IGJvb2xlYW47XG5cdCRNYXhMZW5ndGg/OiBudW1iZXI7XG5cdCRQcmVjaXNpb24/OiBudW1iZXI7XG5cdCRTY2FsZT86IG51bWJlciB8IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFBhcmFtZXRlclR5cGUgPSB7XG5cdCQkZ3JvdXBJZD86IHN0cmluZztcblx0JHNlbGVjdD86IHN0cmluZ1tdO1xuXHQkb3JkZXJieT86IHN0cmluZ1tdO1xufTtcblxuZXhwb3J0IHR5cGUgTWljcm9DaGFydEFnZ3JlZ2F0aW9uID1cblx0fCBQaWNrPCRCdWxsZXRNaWNyb0NoYXJ0U2V0dGluZ3MsIFwiYWN0dWFsXCIgfCBcInRocmVzaG9sZHNcIj5cblx0fCBQaWNrPCRIYXJ2ZXlCYWxsTWljcm9DaGFydFNldHRpbmdzLCBcIml0ZW1zXCI+XG5cdHwgUGljazwkU3RhY2tlZEJhck1pY3JvQ2hhcnRTZXR0aW5ncywgXCJiYXJzXCI+XG5cdHwgUGljazxcblx0XHRcdCRBcmVhTWljcm9DaGFydFNldHRpbmdzLFxuXHRcdFx0fCBcImNoYXJ0XCJcblx0XHRcdHwgXCJ0YXJnZXRcIlxuXHRcdFx0fCBcImZpcnN0WExhYmVsXCJcblx0XHRcdHwgXCJmaXJzdFlMYWJlbFwiXG5cdFx0XHR8IFwibGFzdFhMYWJlbFwiXG5cdFx0XHR8IFwibGFzdFlMYWJlbFwiXG5cdFx0XHR8IFwibWluVGhyZXNob2xkXCJcblx0XHRcdHwgXCJtYXhUaHJlc2hvbGRcIlxuXHRcdFx0fCBcImlubmVyTWluVGhyZXNob2xkXCJcblx0XHRcdHwgXCJpbm5lck1heFRocmVzaG9sZFwiXG5cdCAgPlxuXHR8IFBpY2s8JENvbHVtbk1pY3JvQ2hhcnRTZXR0aW5ncywgXCJjb2x1bW5zXCIgfCBcImxlZnRCb3R0b21MYWJlbFwiIHwgXCJyaWdodEJvdHRvbUxhYmVsXCIgfCBcImxlZnRUb3BMYWJlbFwiIHwgXCJyaWdodFRvcExhYmVsXCI+XG5cdHwgUGljazwkQ29tcGFyaXNvbk1pY3JvQ2hhcnRTZXR0aW5ncywgXCJkYXRhXCI+XG5cdHwgUGljazwkTGluZU1pY3JvQ2hhcnRTZXR0aW5ncywgXCJsaW5lc1wiPjtcblxuZXhwb3J0IHR5cGUgTWljcm9DaGFydFNldHRpbmdzID1cblx0fCAkQnVsbGV0TWljcm9DaGFydFNldHRpbmdzXG5cdHwgJEhhcnZleUJhbGxNaWNyb0NoYXJ0U2V0dGluZ3Ncblx0fCAkU3RhY2tlZEJhck1pY3JvQ2hhcnRTZXR0aW5nc1xuXHR8ICRDb21wYXJpc29uTWljcm9DaGFydFNldHRpbmdzXG5cdHwgJEFyZWFNaWNyb0NoYXJ0U2V0dGluZ3Ncblx0fCAkQ29sdW1uTWljcm9DaGFydFNldHRpbmdzXG5cdHwgJFJhZGlhbE1pY3JvQ2hhcnRTZXR0aW5ncztcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdXNlZCBieSBNRENfQ29udHJvbHMgdG8gaGFuZGxlIFNBUCBGaW9yaSBlbGVtZW50cyBmb3IgT0RhdGEgVjRcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IE1pY3JvQ2hhcnRIZWxwZXIgPSB7XG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIFRocmVzaG9sZCBDb2xvciBmb3IgYnVsbGV0IG1pY3JvIGNoYXJ0LlxuXHQgKiBAcGFyYW0gdmFsdWUgVGhyZXNob2xkIHZhbHVlIHByb3ZpZGVkIGluIHRoZSBhbm5vdGF0aW9uc1xuXHQgKiBAcGFyYW0gaUNvbnRleHQgSW50ZXJmYWNlQ29udGV4dCB3aXRoIHBhdGggdG8gdGhlIHRocmVzaG9sZFxuXHQgKiBAcmV0dXJucyBUaGUgaW5kaWNhdG9yIGZvciBUaHJlc2hvbGQgQ29sb3Jcblx0ICovXG5cdGdldFRocmVzaG9sZENvbG9yOiBmdW5jdGlvbiAodmFsdWU6IHN0cmluZywgaUNvbnRleHQ6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSk6IFZhbHVlQ29sb3Ige1xuXHRcdGNvbnN0IHBhdGggPSBpQ29udGV4dC5jb250ZXh0LmdldFBhdGgoKTtcblx0XHRpZiAocGF0aC5pbmNsdWRlcyhcIkRldmlhdGlvblJhbmdlXCIpKSB7XG5cdFx0XHRyZXR1cm4gVmFsdWVDb2xvci5FcnJvcjtcblx0XHR9IGVsc2UgaWYgKHBhdGguaW5jbHVkZXMoXCJUb2xlcmFuY2VSYW5nZVwiKSkge1xuXHRcdFx0cmV0dXJuIFZhbHVlQ29sb3IuQ3JpdGljYWw7XG5cdFx0fVxuXHRcdHJldHVybiBWYWx1ZUNvbG9yLk5ldXRyYWw7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFRvIGZldGNoIG1lYXN1cmVzIGZyb20gRGF0YVBvaW50cy5cblx0ICogQHBhcmFtIGNoYXJ0QW5ub3RhdGlvbnMgQ2hhcnQgQW5ub3RhdGlvbnNcblx0ICogQHBhcmFtIGVudGl0eVR5cGVBbm5vdGF0aW9ucyBFbnRpdHlUeXBlIEFubm90YXRpb25zXG5cdCAqIEBwYXJhbSBjaGFydFR5cGUgQ2hhcnQgVHlwZSB1c2VkXG5cdCAqIEByZXR1cm5zIENvbnRhaW5pbmcgYWxsIG1lYXN1cmVzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0Z2V0TWVhc3VyZVByb3BlcnR5UGF0aHM6IGZ1bmN0aW9uIChcblx0XHRjaGFydEFubm90YXRpb25zOiBNZXRhTW9kZWxUeXBlPENoYXJ0PiB8IENoYXJ0LFxuXHRcdGVudGl0eVR5cGVBbm5vdGF0aW9uczogTWV0YU1vZGVsRW50aXR5VHlwZUFubm90YXRpb25zIHwgdW5kZWZpbmVkLFxuXHRcdGNoYXJ0VHlwZTogc3RyaW5nLFxuXHRcdGlzUnVuVGltZUluc3RhbmNlPzogYm9vbGVhblxuXHQpOiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgcHJvcGVydHlQYXRoOiBzdHJpbmdbXSA9IFtdO1xuXG5cdFx0aWYgKCFlbnRpdHlUeXBlQW5ub3RhdGlvbnMpIHtcblx0XHRcdExvZy53YXJuaW5nKFwiRkU6TWFjcm86TWljcm9DaGFydCA6IENvdWxkbid0IGZpbmQgYW5ub3RhdGlvbnMgZm9yIHRoZSBEYXRhUG9pbnQuXCIpO1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IG1lYXN1cmVJbmRleCBpbiBjaGFydEFubm90YXRpb25zLk1lYXN1cmVzKSB7XG5cdFx0XHRjb25zdCBpTWVhc3VyZUF0dHJpYnV0ZSA9IENvbW1vbkhlbHBlci5nZXRNZWFzdXJlQXR0cmlidXRlSW5kZXgoXG5cdFx0XHRcdFx0bWVhc3VyZUluZGV4IGFzIHVua25vd24gYXMgbnVtYmVyLFxuXHRcdFx0XHRcdGNoYXJ0QW5ub3RhdGlvbnMsXG5cdFx0XHRcdFx0aXNSdW5UaW1lSW5zdGFuY2Vcblx0XHRcdFx0KSxcblx0XHRcdFx0bWVhc3VyZUF0dHJpYnV0ZSA9XG5cdFx0XHRcdFx0aU1lYXN1cmVBdHRyaWJ1dGUgPiAtMSAmJiBjaGFydEFubm90YXRpb25zLk1lYXN1cmVBdHRyaWJ1dGVzICYmIGNoYXJ0QW5ub3RhdGlvbnMuTWVhc3VyZUF0dHJpYnV0ZXNbaU1lYXN1cmVBdHRyaWJ1dGVdO1xuXHRcdFx0bGV0IGRhdGFQb2ludDtcblx0XHRcdGlmIChpc1J1blRpbWVJbnN0YW5jZSkge1xuXHRcdFx0XHRkYXRhUG9pbnQgPSAobWVhc3VyZUF0dHJpYnV0ZSAmJiAobWVhc3VyZUF0dHJpYnV0ZSBhcyBDaGFydE1lYXN1cmVBdHRyaWJ1dGVUeXBlVHlwZXMpPy5EYXRhUG9pbnQ/LiR0YXJnZXQpIHx8IHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRhdGFQb2ludCA9IChtZWFzdXJlQXR0cmlidXRlICYmXG5cdFx0XHRcdFx0ZW50aXR5VHlwZUFubm90YXRpb25zICYmXG5cdFx0XHRcdFx0ZW50aXR5VHlwZUFubm90YXRpb25zW1xuXHRcdFx0XHRcdFx0KFxuXHRcdFx0XHRcdFx0XHRtZWFzdXJlQXR0cmlidXRlLkRhdGFQb2ludCBhcyB7XG5cdFx0XHRcdFx0XHRcdFx0JEFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCk/LiRBbm5vdGF0aW9uUGF0aCBhcyBrZXlvZiBNZXRhTW9kZWxFbnRpdHlUeXBlQW5ub3RhdGlvbnNcblx0XHRcdFx0XHRdKSBhcyBNZXRhTW9kZWxUeXBlPERhdGFQb2ludFR5cGU+IHwgdW5kZWZpbmVkO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBwYXRoID0gaXNSdW5UaW1lSW5zdGFuY2UgPyBkYXRhUG9pbnQ/LlZhbHVlLnBhdGggOiBkYXRhUG9pbnQ/LlZhbHVlLiRQYXRoO1xuXHRcdFx0aWYgKHBhdGgpIHtcblx0XHRcdFx0cHJvcGVydHlQYXRoLnB1c2gocGF0aCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRMb2cud2FybmluZyhcblx0XHRcdFx0XHRgRkU6TWFjcm86TWljcm9DaGFydCA6IENvdWxkbid0IGZpbmQgRGF0YVBvaW50KFZhbHVlKSBtZWFzdXJlIGZvciB0aGUgbWVhc3VyZUF0dHJpYnV0ZSAke2NoYXJ0VHlwZX0gTWljcm9DaGFydC5gXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlzUnVuVGltZUluc3RhbmNlID8gcHJvcGVydHlQYXRoIDogcHJvcGVydHlQYXRoLmpvaW4oXCIsXCIpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZpc2libGUgZXhwcmVzc2lvbiBwYXRoLlxuXHQgKiBAcGFyYW0gYXJnc1xuXHQgKiBAcmV0dXJucyBFeHByZXNzaW9uIEJpbmRpbmcgZm9yIHRoZSB2aXNpYmxlLlxuXHQgKi9cblx0Z2V0SGlkZGVuUGF0aEV4cHJlc3Npb246IGZ1bmN0aW9uICguLi5hcmdzOiB1bmtub3duW10pOiBzdHJpbmcgfCBib29sZWFuIHtcblx0XHRpZiAoIWFyZ3NbMF0gJiYgIWFyZ3NbMV0pIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRpZiAoYXJnc1swXSA9PT0gdHJ1ZSB8fCBhcmdzWzFdID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaGlkZGVuUGF0aHM6IHN0cmluZ1tdID0gW107XG5cdFx0W10uZm9yRWFjaC5jYWxsKGFyZ3MsIGZ1bmN0aW9uIChoaWRkZW5Qcm9wZXJ0eTogdW5rbm93bikge1xuXHRcdFx0aWYgKGhpZGRlblByb3BlcnR5ICYmIChoaWRkZW5Qcm9wZXJ0eSBhcyB7ICRQYXRoOiBzdHJpbmcgfSkuJFBhdGgpIHtcblx0XHRcdFx0aGlkZGVuUGF0aHMucHVzaChcIiV7XCIgKyAoaGlkZGVuUHJvcGVydHkgYXMgeyAkUGF0aDogc3RyaW5nIH0pLiRQYXRoICsgXCJ9XCIpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIGhpZGRlblBhdGhzLmxlbmd0aCA/IFwiez0gXCIgKyBoaWRkZW5QYXRocy5qb2luKFwiIHx8IFwiKSArIFwiID09PSB0cnVlID8gZmFsc2UgOiB0cnVlIH1cIiA6IGZhbHNlO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHRydWUvZmFsc2UgdG8gZGlzcGxheSBjaGFydC5cblx0ICogQHBhcmFtIGNoYXJ0VHlwZSBUaGUgY2hhcnQgdHlwZVxuXHQgKiBAcGFyYW0gdmFsdWUgRGF0YSBwb2ludCB2YWx1ZSBvZiBWYWx1ZVxuXHQgKiBAcGFyYW0gdmFsdWUuJFBhdGhcblx0ICogQHBhcmFtIG1heFZhbHVlIERhdGEgcG9pbnQgdmFsdWUgb2YgTWF4aW11bVZhbHVlXG5cdCAqIEBwYXJhbSBtYXhWYWx1ZS4kUGF0aFxuXHQgKiBAcGFyYW0gdmFsdWVIaWRkZW4gSGlkZGVuIHBhdGggb2JqZWN0L2Jvb2xlYW4gdmFsdWUgZm9yIHRoZSByZWZlcmVuY2VkIHByb3BlcnR5IG9mIHZhbHVlXG5cdCAqIEBwYXJhbSB2YWx1ZUhpZGRlbi4kUGF0aFxuXHQgKiBAcGFyYW0gbWF4VmFsdWVIaWRkZW4gSGlkZGVuIHBhdGggb2JqZWN0L2Jvb2xlYW4gdmFsdWUgZm9yIHRoZSByZWZlcmVuY2VkIHByb3BlcnR5IG9mIE1heFZhbHVlXG5cdCAqIEBwYXJhbSBtYXhWYWx1ZUhpZGRlbi4kUGF0aFxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgb3IgYGZhbHNlYCB0byBoaWRlL3Nob3cgY2hhcnRcblx0ICovXG5cdGlzTm90QWx3YXlzSGlkZGVuOiBmdW5jdGlvbiAoXG5cdFx0Y2hhcnRUeXBlOiBzdHJpbmcsXG5cdFx0dmFsdWU6IHsgJFBhdGg6IHN0cmluZyB9LFxuXHRcdG1heFZhbHVlOiB7ICRQYXRoOiBzdHJpbmcgfSB8IHVuZGVmaW5lZCxcblx0XHR2YWx1ZUhpZGRlbj86IGJvb2xlYW4gfCB7ICRQYXRoOiBzdHJpbmcgfSxcblx0XHRtYXhWYWx1ZUhpZGRlbj86IGJvb2xlYW4gfCB7ICRQYXRoOiBzdHJpbmcgfVxuXHQpOiBib29sZWFuIHtcblx0XHRpZiAodmFsdWVIaWRkZW4gPT09IHRydWUpIHtcblx0XHRcdHRoaXMubG9nRXJyb3IoY2hhcnRUeXBlLCB2YWx1ZSk7XG5cdFx0fVxuXHRcdGlmIChtYXhWYWx1ZUhpZGRlbiA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhpcy5sb2dFcnJvcihjaGFydFR5cGUsIG1heFZhbHVlKTtcblx0XHR9XG5cdFx0aWYgKHZhbHVlSGlkZGVuID09PSB1bmRlZmluZWQgJiYgbWF4VmFsdWVIaWRkZW4gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiAoKCF2YWx1ZUhpZGRlbiB8fCAodmFsdWVIaWRkZW4gYXMgeyAkUGF0aDogc3RyaW5nIH0pLiRQYXRoKSAmJiB2YWx1ZUhpZGRlbiAhPT0gdW5kZWZpbmVkKSB8fFxuXHRcdFx0XHQoKCFtYXhWYWx1ZUhpZGRlbiB8fCAobWF4VmFsdWVIaWRkZW4gYXMgeyAkUGF0aDogc3RyaW5nIH0pLiRQYXRoKSAmJiBtYXhWYWx1ZUhpZGRlbiAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHQ/IHRydWVcblx0XHRcdFx0OiBmYWxzZTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgdG8gbG9nIGVycm9ycyBmb3IgbWlzc2luZyBkYXRhIHBvaW50IHByb3BlcnRpZXMuXG5cdCAqIEBwYXJhbSBjaGFydFR5cGUgVGhlIGNoYXJ0IHR5cGUuXG5cdCAqIEBwYXJhbSB2YWx1ZSBEeW5hbWljIGhpZGRlbiBwcm9wZXJ0eSBuYW1lLlxuXHQgKiBAcGFyYW0gdmFsdWUuJFBhdGggRHluYW1pYyBoaWRkZW4gcHJvcGVydHkgbmFtZS5cblx0ICovXG5cdGxvZ0Vycm9yOiBmdW5jdGlvbiAoY2hhcnRUeXBlOiBzdHJpbmcsIHZhbHVlPzogeyAkUGF0aDogc3RyaW5nIH0pOiB2b2lkIHtcblx0XHRMb2cuZXJyb3IoYE1lYXN1cmUgUHJvcGVydHkgJHt2YWx1ZT8uJFBhdGh9IGlzIGhpZGRlbiBmb3IgdGhlICR7Y2hhcnRUeXBlfSBNaWNybyBDaGFydGApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGZvcm1hdHRlZCB2YWx1ZSB3aXRoIHNjYWxlIGZhY3RvciBmb3IgdGhlIHZhbHVlIGRpc3BsYXllZC5cblx0ICogQHBhcmFtIHBhdGggUHJvcGVydHkgcGF0aCBmb3IgdGhlIHZhbHVlXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgUHJvcGVydHkgZm9yIGNvbnN0cmFpbnRzXG5cdCAqIEBwYXJhbSBmcmFjdGlvbkRpZ2l0cyBOby4gb2YgZnJhY3Rpb24gZGlnaXRzIHNwZWNpZmllZCBmcm9tIGFubm90YXRpb25zXG5cdCAqIEBwYXJhbSB2YWx1ZSBTdGF0aWMgdmFsdWUgb2YgdGhlIHByb3BlcnR5XG5cdCAqIEByZXR1cm5zIEV4cHJlc3Npb24gQmluZGluZyBmb3IgdGhlIHZhbHVlIHdpdGggc2NhbGUuXG5cdCAqL1xuXHRmb3JtYXREZWNpbWFsOiBmdW5jdGlvbiAocGF0aDogc3RyaW5nLCBwcm9wZXJ0eTogUHJvcGVydHksIGZyYWN0aW9uRGlnaXRzOiBudW1iZXIgfCB1bmRlZmluZWQsIHZhbHVlPzogbnVtYmVyKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAocGF0aCkge1xuXHRcdFx0Y29uc3QgY29uc3RyYWludHMgPSBbXSxcblx0XHRcdFx0Zm9ybWF0T3B0aW9ucyA9IFtcInN0eWxlOiAnc2hvcnQnXCJdO1xuXHRcdFx0Y29uc3Qgc2NhbGUgPSB0eXBlb2YgZnJhY3Rpb25EaWdpdHMgPT09IFwibnVtYmVyXCIgPyBmcmFjdGlvbkRpZ2l0cyA6IChwcm9wZXJ0eSAmJiBwcm9wZXJ0eT8uJFNjYWxlKSB8fCAxO1xuXG5cdFx0XHRpZiAocHJvcGVydHkuJE51bGxhYmxlICE9IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zdHJhaW50cy5wdXNoKFwibnVsbGFibGU6IFwiICsgcHJvcGVydHkuJE51bGxhYmxlKTtcblx0XHRcdH1cblx0XHRcdGlmIChwcm9wZXJ0eS4kUHJlY2lzaW9uICE9IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRmb3JtYXRPcHRpb25zLnB1c2goXCJwcmVjaXNpb246IFwiICsgKHByb3BlcnR5LiRQcmVjaXNpb24gPyBwcm9wZXJ0eS4kUHJlY2lzaW9uIDogXCIxXCIpKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0cmFpbnRzLnB1c2goXCJzY2FsZTogXCIgKyAoc2NhbGUgPT09IFwidmFyaWFibGVcIiA/IFwiJ1wiICsgc2NhbGUgKyBcIidcIiA6IHNjYWxlKSk7XG5cblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFwieyBwYXRoOiAnXCIgK1xuXHRcdFx0XHRwYXRoICtcblx0XHRcdFx0XCInXCIgK1xuXHRcdFx0XHRcIiwgdHlwZTogJ3NhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRlY2ltYWwnLCBjb25zdHJhaW50czogeyBcIiArXG5cdFx0XHRcdGNvbnN0cmFpbnRzLmpvaW4oXCIsXCIpICtcblx0XHRcdFx0XCIgfSwgZm9ybWF0T3B0aW9uczogeyBcIiArXG5cdFx0XHRcdGZvcm1hdE9wdGlvbnMuam9pbihcIixcIikgK1xuXHRcdFx0XHRcIiB9IH1cIlxuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKHZhbHVlKSB7XG5cdFx0XHRjb25zdCBkZWNpbWFscyA9IHR5cGVvZiBmcmFjdGlvbkRpZ2l0cyA9PT0gXCJudW1iZXJcIiA/IGZyYWN0aW9uRGlnaXRzIDogMTtcblx0XHRcdHJldHVybiBOdW1iZXJGb3JtYXQuZ2V0RmxvYXRJbnN0YW5jZSh7IHN0eWxlOiBcInNob3J0XCIsIHByZXNlcnZlRGVjaW1hbHM6IHRydWUsIGRlY2ltYWxzOiBkZWNpbWFscyB9KS5mb3JtYXQodmFsdWUpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogVG8gZmV0Y2gsIHRoZSAkc2VsZWN0IHBhcmFtZXRlcnMgZnJvbSBhbm5vdGF0aW9ucyB0byBhZGQgdG8gdGhlIGxpc3QgYmluZGluZy5cblx0ICogQHBhcmFtIGdyb3VwSWQgR3JvdXBJZCB0byBiZSB1c2VkXG5cdCAqIEBwYXJhbSBzb3J0T3JkZXIgU29ydCBvcmRlciB0byBiZSB1c2VkXG5cdCAqIEBwYXJhbSBjcml0aWNhbGl0eUNhbGN1bGF0aW9uIENyaXRpY2FsaXR5IGNhbGN1bGF0aW9uIG9iamVjdCBwcm9wZXJ0eSBwYXRoXG5cdCAqIEBwYXJhbSBjcml0aWNhbGl0eSBDcml0aWNhbGl0eSBmb3IgdGhlIGNoYXJ0XG5cdCAqIEBwYXJhbSBvdGhlclBhdGhzIEFsbCBvdGhlciBwYXRoc1xuXHQgKiBAcGFyYW0gcmV0dXJuT2JqZWN0XG5cdCAqIEByZXR1cm5zIFN0cmluZyBjb250YWluaW5nIGFsbCB0aGUgcHJvcGVydHkgcGF0aHMgbmVlZGVkIHRvIGJlIGFkZGVkIHRvIHRoZSAkc2VsZWN0IHF1ZXJ5IG9mIHRoZSBsaXN0IGJpbmRpbmcuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRnZXRTZWxlY3RQYXJhbWV0ZXJzOiBmdW5jdGlvbiAoXG5cdFx0Z3JvdXBJZDogc3RyaW5nLFxuXHRcdHNvcnRPcmRlcj86IFNvcnRPcmRlclR5cGVbXSxcblx0XHRjcml0aWNhbGl0eUNhbGN1bGF0aW9uPzogQ3JpdGljYWxpdHlDYWxjdWxhdGlvblR5cGUsXG5cdFx0Y3JpdGljYWxpdHk/OiBzdHJpbmcsXG5cdFx0b3RoZXJQYXRocz86IHN0cmluZ1tdLFxuXHRcdHJldHVybk9iamVjdD86IGJvb2xlYW5cblx0KTogc3RyaW5nIHwgUGFyYW1ldGVyVHlwZSB7XG5cdFx0Y29uc3QgcHJvcGVydHlQYXRoOiBzdHJpbmdbXSA9IFtdLFxuXHRcdFx0c29ydGVyczogc3RyaW5nW10gPSBbXTtcblx0XHRjb25zdCBwYXJhbWV0ZXJzOiBzdHJpbmdbXSB8IFBhcmFtZXRlclR5cGUgPSByZXR1cm5PYmplY3QgPyB7fSA6IFtdO1xuXG5cdFx0aWYgKHNvcnRPcmRlcikge1xuXHRcdFx0c29ydE9yZGVyLmZvckVhY2goKHNvcnRlcjogU29ydE9yZGVyVHlwZSkgPT4ge1xuXHRcdFx0XHRzb3J0ZXJzLnB1c2goYCR7c29ydGVyLlByb3BlcnR5fSR7c29ydGVyLkRlc2NlbmRpbmcgPyBcIiBkZXNjXCIgOiBcIlwifWApO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKGNyaXRpY2FsaXR5KSB7XG5cdFx0XHRwcm9wZXJ0eVBhdGgucHVzaChjcml0aWNhbGl0eSk7XG5cdFx0fSBlbHNlIGlmIChjcml0aWNhbGl0eUNhbGN1bGF0aW9uKSB7XG5cdFx0XHRjb25zdCBjcmljdGljYWxpdHlDYWxjdWxhdGlvbktleXMgPSBbXG5cdFx0XHRcdFwiSW1wcm92ZW1lbnREaXJlY3Rpb25cIixcblx0XHRcdFx0XCJEZXZpYXRpb25SYW5nZUxvd1ZhbHVlXCIsXG5cdFx0XHRcdFwiVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZVwiLFxuXHRcdFx0XHRcIkFjY2VwdGFuY2VSYW5nZUxvd1ZhbHVlXCIsXG5cdFx0XHRcdFwiQWNjZXB0YW5jZVJhbmdlSGlnaFZhbHVlXCIsXG5cdFx0XHRcdFwiVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWVcIixcblx0XHRcdFx0XCJEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZVwiXG5cdFx0XHRdO1xuXHRcdFx0T2JqZWN0LmtleXMoY3JpdGljYWxpdHlDYWxjdWxhdGlvbikuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGNyaWN0aWNhbGl0eUNhbGN1bGF0aW9uS2V5cy5pbmNsdWRlcyhrZXkpICYmXG5cdFx0XHRcdFx0KChjcml0aWNhbGl0eUNhbGN1bGF0aW9uIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPilba2V5XSBhcyB1bmtub3duIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+KS5wYXRoXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHByb3BlcnR5UGF0aC5wdXNoKFxuXHRcdFx0XHRcdFx0KChjcml0aWNhbGl0eUNhbGN1bGF0aW9uIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPilba2V5XSBhcyB1bmtub3duIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+KVxuXHRcdFx0XHRcdFx0XHQucGF0aFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdG90aGVyUGF0aHM/LmZvckVhY2goKHBhdGgpID0+IHtcblx0XHRcdGlmIChwYXRoKSB7XG5cdFx0XHRcdHByb3BlcnR5UGF0aC5wdXNoKHBhdGgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0aWYgKHJldHVybk9iamVjdCkge1xuXHRcdFx0aWYgKGdyb3VwSWQpIHtcblx0XHRcdFx0KHBhcmFtZXRlcnMgYXMgUGFyYW1ldGVyVHlwZSkuJCRncm91cElkID0gZ3JvdXBJZDtcblx0XHRcdH1cblx0XHRcdGlmIChwcm9wZXJ0eVBhdGgubGVuZ3RoKSB7XG5cdFx0XHRcdChwYXJhbWV0ZXJzIGFzIFBhcmFtZXRlclR5cGUpLiRzZWxlY3QgPSBwcm9wZXJ0eVBhdGg7XG5cdFx0XHR9XG5cdFx0XHRpZiAoc29ydGVycy5sZW5ndGgpIHtcblx0XHRcdFx0KHBhcmFtZXRlcnMgYXMgUGFyYW1ldGVyVHlwZSkuJG9yZGVyYnkgPSBzb3J0ZXJzO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHBhcmFtZXRlcnMgYXMgUGFyYW1ldGVyVHlwZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKGdyb3VwSWQpIHtcblx0XHRcdFx0KHBhcmFtZXRlcnMgYXMgc3RyaW5nW10pLnB1c2goYCQkZ3JvdXBJZCA6ICcke2dyb3VwSWR9J2ApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHByb3BlcnR5UGF0aC5sZW5ndGgpIHtcblx0XHRcdFx0KHBhcmFtZXRlcnMgYXMgc3RyaW5nW10pLnB1c2goYCRzZWxlY3QgOiAnJHtwcm9wZXJ0eVBhdGguam9pbihcIixcIil9J2ApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHNvcnRlcnMubGVuZ3RoKSB7XG5cdFx0XHRcdChwYXJhbWV0ZXJzIGFzIHN0cmluZ1tdKS5wdXNoKGAkb3JkZXJieSA6ICcke3NvcnRlcnMuam9pbihcIixcIil9J2ApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIChwYXJhbWV0ZXJzIGFzIHN0cmluZ1tdKS5qb2luKFwiLFwiKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFRvIGZldGNoIERhdGFQb2ludCBxdWFsaWZpZXJzIG9mIG1lYXN1cmVzLlxuXHQgKiBAcGFyYW0gY2hhcnRBbm5vdGF0aW9ucyBDaGFydCBhbm5vdGF0aW9uc1xuXHQgKiBAcGFyYW0gZW50aXR5VHlwZUFubm90YXRpb25zIEVudGl0eVR5cGUgYW5ub3RhdGlvbnNcblx0ICogQHBhcmFtIGNoYXJ0VHlwZSBDaGFydCB0eXBlIHVzZWRcblx0ICogQHJldHVybnMgQ29udGFpbmluZyBhbGwgZGF0YSBwb2ludCBxdWFsaWZpZXJzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0Z2V0RGF0YVBvaW50UXVhbGlmaWVyc0Zvck1lYXN1cmVzOiBmdW5jdGlvbiAoXG5cdFx0Y2hhcnRBbm5vdGF0aW9uczogTWV0YU1vZGVsVHlwZTxDaGFydD4gfCBDaGFydCxcblx0XHRlbnRpdHlUeXBlQW5ub3RhdGlvbnM6IE1ldGFNb2RlbEVudGl0eVR5cGVBbm5vdGF0aW9ucyB8IHVuZGVmaW5lZCxcblx0XHRjaGFydFR5cGU6IHN0cmluZyxcblx0XHRpc01pY3JvQ2hhcnRSdW5UaW1lPzogYm9vbGVhblxuXHQpOiBzdHJpbmdbXSB8IHN0cmluZyB7XG5cdFx0Y29uc3QgcXVhbGlmaWVyczogc3RyaW5nW10gPSBbXSxcblx0XHRcdG1lYXN1cmVBdHRyaWJ1dGVzID0gY2hhcnRBbm5vdGF0aW9ucy5NZWFzdXJlQXR0cmlidXRlcyxcblx0XHRcdGZuQWRkRGF0YVBvaW50UXVhbGlmaWVyID0gZnVuY3Rpb24gKGNoYXJ0TWVhc3VyZTogeyAkUHJvcGVydHlQYXRoOiBzdHJpbmcgfSB8IFByb3BlcnR5UGF0aCk6IHZvaWQge1xuXHRcdFx0XHRsZXQgcXVhbGlmaWVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdGlmIChlbnRpdHlUeXBlQW5ub3RhdGlvbnMpIHtcblx0XHRcdFx0XHRtZWFzdXJlQXR0cmlidXRlcz8uZm9yRWFjaChmdW5jdGlvbiAoXG5cdFx0XHRcdFx0XHRtZWFzdXJlQXR0cmlidXRlOiBNZXRhTW9kZWxUeXBlPENoYXJ0TWVhc3VyZUF0dHJpYnV0ZVR5cGVUeXBlcz4gfCBDaGFydE1lYXN1cmVBdHRyaWJ1dGVUeXBlVHlwZXNcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdGxldCBwYXRoLCBtZWFzdXJlO1xuXHRcdFx0XHRcdFx0aWYgKGlzTWljcm9DaGFydFJ1blRpbWUpIHtcblx0XHRcdFx0XHRcdFx0cGF0aCA9IChtZWFzdXJlQXR0cmlidXRlIGFzIENoYXJ0TWVhc3VyZUF0dHJpYnV0ZVR5cGVUeXBlcykuTWVhc3VyZT8udmFsdWU7XG5cdFx0XHRcdFx0XHRcdG1lYXN1cmUgPSAoY2hhcnRNZWFzdXJlIGFzIFByb3BlcnR5UGF0aCkudmFsdWU7XG5cdFx0XHRcdFx0XHRcdGlmIChwYXRoID09IG1lYXN1cmUpIHtcblx0XHRcdFx0XHRcdFx0XHRxdWFsaWZpZXJzLnB1c2goXG5cdFx0XHRcdFx0XHRcdFx0XHQobWVhc3VyZUF0dHJpYnV0ZSBhcyBDaGFydE1lYXN1cmVBdHRyaWJ1dGVUeXBlVHlwZXMpPy5EYXRhUG9pbnQ/LiR0YXJnZXQ/LnF1YWxpZmllciBhcyBzdHJpbmdcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRwYXRoID0gKG1lYXN1cmVBdHRyaWJ1dGUgYXMgTWV0YU1vZGVsVHlwZTxDaGFydE1lYXN1cmVBdHRyaWJ1dGVUeXBlVHlwZXM+KS5NZWFzdXJlPy4kUHJvcGVydHlQYXRoO1xuXHRcdFx0XHRcdFx0XHRtZWFzdXJlID0gKGNoYXJ0TWVhc3VyZSBhcyB7ICRQcm9wZXJ0eVBhdGg6IHN0cmluZyB9KS4kUHJvcGVydHlQYXRoO1xuXHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0cGF0aCA9PT0gbWVhc3VyZSAmJlxuXHRcdFx0XHRcdFx0XHRcdChtZWFzdXJlQXR0cmlidXRlIGFzIE1ldGFNb2RlbFR5cGU8Q2hhcnRNZWFzdXJlQXR0cmlidXRlVHlwZVR5cGVzPikuRGF0YVBvaW50Py4kQW5ub3RhdGlvblBhdGhcblx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgYW5ub3RhdGlvblBhdGggPSAobWVhc3VyZUF0dHJpYnV0ZSBhcyBNZXRhTW9kZWxUeXBlPENoYXJ0TWVhc3VyZUF0dHJpYnV0ZVR5cGVUeXBlcz4pPy5EYXRhUG9pbnRcblx0XHRcdFx0XHRcdFx0XHRcdD8uJEFubm90YXRpb25QYXRoO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChlbnRpdHlUeXBlQW5ub3RhdGlvbnNbYW5ub3RhdGlvblBhdGggYXMga2V5b2YgTWV0YU1vZGVsRW50aXR5VHlwZUFubm90YXRpb25zXSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVhbGlmaWVyID0gYW5ub3RhdGlvblBhdGg/LnNwbGl0KFwiI1wiKVsxXTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChxdWFsaWZpZXIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cXVhbGlmaWVycy5wdXNoKHF1YWxpZmllcik7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHF1YWxpZmllciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0TG9nLndhcm5pbmcoXG5cdFx0XHRcdFx0XHRgRkU6TWFjcm86TWljcm9DaGFydCA6IENvdWxkbid0IGZpbmQgRGF0YVBvaW50KFZhbHVlKSBtZWFzdXJlIGZvciB0aGUgbWVhc3VyZUF0dHJpYnV0ZSBmb3IgJHtjaGFydFR5cGV9IE1pY3JvQ2hhcnQuYFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRpZiAoIWVudGl0eVR5cGVBbm5vdGF0aW9ucykge1xuXHRcdFx0TG9nLndhcm5pbmcoYEZFOk1hY3JvOk1pY3JvQ2hhcnQgOiBDb3VsZG4ndCBmaW5kIGFubm90YXRpb25zIGZvciB0aGUgRGF0YVBvaW50ICR7Y2hhcnRUeXBlfSBNaWNyb0NoYXJ0LmApO1xuXHRcdH1cblx0XHRjaGFydEFubm90YXRpb25zLk1lYXN1cmVzPy5mb3JFYWNoKGZuQWRkRGF0YVBvaW50UXVhbGlmaWVyKTtcblx0XHRyZXR1cm4gaXNNaWNyb0NoYXJ0UnVuVGltZSA/IHF1YWxpZmllcnMgOiBxdWFsaWZpZXJzLmpvaW4oXCIsXCIpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIHRvIGxvZyB3YXJuaW5ncyBmb3IgbWlzc2luZyBkYXRhcG9pbnQgcHJvcGVydGllcy5cblx0ICogQHBhcmFtIGNoYXJ0VHlwZSBUaGUgQ2hhcnQgdHlwZS5cblx0ICogQHBhcmFtIGVycm9yIE9iamVjdCB3aXRoIHByb3BlcnRpZXMgZnJvbSBEYXRhUG9pbnQuXG5cdCAqL1xuXHRsb2dXYXJuaW5nOiBmdW5jdGlvbiAoY2hhcnRUeXBlOiBzdHJpbmcsIGVycm9yOiBvYmplY3QpOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBlcnJvcikge1xuXHRcdFx0aWYgKCFlcnJvcltrZXkgYXMga2V5b2YgdHlwZW9mIGVycm9yXSkge1xuXHRcdFx0XHRMb2cud2FybmluZyhgJHtrZXl9IHBhcmFtZXRlciBpcyBtaXNzaW5nIGZvciB0aGUgJHtjaGFydFR5cGV9IE1pY3JvIENoYXJ0YCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0IERpc3BsYXlWYWx1ZSBmb3IgY29tcGFyaXNvbiBtaWNybyBjaGFydCBkYXRhIGFnZ3JlZ2F0aW9uLlxuXHQgKiBAcGFyYW0gZGF0YVBvaW50IERhdGEgcG9pbnQgb2JqZWN0LlxuXHQgKiBAcGFyYW0gcGF0aFRleHQgT2JqZWN0IGFmdGVyIGV2YWx1YXRpbmcgQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0IGFubm90YXRpb25cblx0ICogQHBhcmFtIHBhdGhUZXh0LiRQYXRoIFRoZSB0YXJnZXQgcGF0aFxuXHQgKiBAcGFyYW0gdmFsdWVUZXh0UGF0aCBFdmFsdWF0aW9uIG9mIEBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dC8kUGF0aC8kIHZhbHVlIG9mIHRoZSBhbm5vdGF0aW9uXG5cdCAqIEBwYXJhbSB2YWx1ZURhdGFQb2ludFBhdGggRGF0YVBvaW50PlZhbHVlLyRQYXRoLyQgdmFsdWUgYWZ0ZXIgZXZhbHVhdGluZyBhbm5vdGF0aW9uXG5cdCAqIEByZXR1cm5zIEV4cHJlc3Npb24gYmluZGluZyBmb3IgRGlzcGxheSBWYWx1ZSBmb3IgY29tcGFyaXNvbiBtaWNybyBjaGFydCdzIGFnZ3JlZ2F0aW9uIGRhdGEuXG5cdCAqL1xuXHRnZXREaXNwbGF5VmFsdWVGb3JNaWNyb0NoYXJ0OiBmdW5jdGlvbiAoXG5cdFx0ZGF0YVBvaW50OiBNZXRhTW9kZWxUeXBlPERhdGFQb2ludFR5cGU+LFxuXHRcdHBhdGhUZXh0OiB7ICRQYXRoOiBzdHJpbmcgfSB8IHVuZGVmaW5lZCxcblx0XHR2YWx1ZVRleHRQYXRoOiBvYmplY3QsXG5cdFx0dmFsdWVEYXRhUG9pbnRQYXRoOiBvYmplY3Rcblx0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCB2YWx1ZUZvcm1hdCA9IGRhdGFQb2ludC5WYWx1ZUZvcm1hdCAmJiBkYXRhUG9pbnQuVmFsdWVGb3JtYXQuTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzO1xuXHRcdGlmIChwYXRoVGV4dCkge1xuXHRcdFx0cmV0dXJuIE1pY3JvQ2hhcnRIZWxwZXIuZm9ybWF0RGVjaW1hbChwYXRoVGV4dFtcIiRQYXRoXCJdLCB2YWx1ZVRleHRQYXRoIGFzIFByb3BlcnR5LCB2YWx1ZUZvcm1hdCk7XG5cdFx0fVxuXHRcdHJldHVybiBNaWNyb0NoYXJ0SGVscGVyLmZvcm1hdERlY2ltYWwoZGF0YVBvaW50LlZhbHVlW1wiJFBhdGhcIl0sIHZhbHVlRGF0YVBvaW50UGF0aCBhcyBQcm9wZXJ0eSwgdmFsdWVGb3JtYXQpO1xuXHR9LFxuXHRzaG91bGRSZW5kZXJNaWNyb0NoYXJ0OiBmdW5jdGlvbiAoY2hhcnRBbm5vdGF0aW9uOiBDaGFydCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGF2YWlsYWJsZUNoYXJ0VHlwZXMgPSBbQ2hhcnRUeXBlLkFyZWEsIENoYXJ0VHlwZS5Db2x1bW4sIENoYXJ0VHlwZS5CYXJdLFxuXHRcdFx0Y2hhcnRUeXBlID0gY2hhcnRBbm5vdGF0aW9uLkNoYXJ0VHlwZSxcblx0XHRcdGRhdGFQb2ludCA9IGNoYXJ0QW5ub3RhdGlvbi5NZWFzdXJlQXR0cmlidXRlc1swXS5EYXRhUG9pbnQ/LiR0YXJnZXQsXG5cdFx0XHRkYXRhUG9pbnRWYWx1ZSA9IGRhdGFQb2ludD8uVmFsdWUsXG5cdFx0XHRkYXRhUG9pbnRWYWx1ZUhpZGRlblBhdGggPSBkYXRhUG9pbnRWYWx1ZT8uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4sXG5cdFx0XHRjaGFydEFubm90YXRpb25EaW1lbnNpb24gPSBjaGFydEFubm90YXRpb24/LkRpbWVuc2lvbnMgJiYgY2hhcnRBbm5vdGF0aW9uPy5EaW1lbnNpb25zWzBdLFxuXHRcdFx0ZmluYWxEYXRhUG9pbnRWYWx1ZSA9IGF2YWlsYWJsZUNoYXJ0VHlwZXMuaW5jbHVkZXMoY2hhcnRUeXBlKSA/IGRhdGFQb2ludFZhbHVlICYmIGNoYXJ0QW5ub3RhdGlvbkRpbWVuc2lvbiA6IGRhdGFQb2ludFZhbHVlOyAvLyBvbmx5IGZvciB0aHJlZSBjaGFydHMgaW4gYXJyYXlcblx0XHRpZiAoY2hhcnRUeXBlID09PSBDaGFydFR5cGUuUGllKSB7XG5cdFx0XHRjb25zdCBkYXRhUG9pbnRNYXhpbXVtVmFsdWUgPSBkYXRhUG9pbnQgJiYgKGRhdGFQb2ludC5NYXhpbXVtVmFsdWUgYXMgUHJpbWl0aXZlVHlwZSk7XG5cdFx0XHRjb25zdCBkYXRhUG9pbnRNYXhpbXVtVmFsdWVIaWRkZW5QYXRoID0gZGF0YVBvaW50TWF4aW11bVZhbHVlPy5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbjtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGRhdGFQb2ludFZhbHVlICYmXG5cdFx0XHRcdGRhdGFQb2ludE1heGltdW1WYWx1ZSAmJlxuXHRcdFx0XHRNaWNyb0NoYXJ0SGVscGVyLmlzTm90QWx3YXlzSGlkZGVuKFxuXHRcdFx0XHRcdGNoYXJ0VHlwZSxcblx0XHRcdFx0XHRkYXRhUG9pbnRWYWx1ZSxcblx0XHRcdFx0XHRkYXRhUG9pbnRNYXhpbXVtVmFsdWUsXG5cdFx0XHRcdFx0ZGF0YVBvaW50VmFsdWVIaWRkZW5QYXRoLFxuXHRcdFx0XHRcdGRhdGFQb2ludE1heGltdW1WYWx1ZUhpZGRlblBhdGhcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIGZpbmFsRGF0YVBvaW50VmFsdWUgJiYgTWljcm9DaGFydEhlbHBlci5pc05vdEFsd2F5c0hpZGRlbihjaGFydFR5cGUsIGRhdGFQb2ludFZhbHVlLCBkYXRhUG9pbnRWYWx1ZUhpZGRlblBhdGgpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2hlY2sgd2hldGhlciBtaWNybyBjaGFydCBpcyBlbmFibGVkIG9yIG5vdCBieSBjaGVja2luZyBwcm9wZXJ0aWVzLCBjaGFydCBhbm5vdGF0aW9ucywgaGlkZGVuIHByb3BlcnRpZXMuXG5cdCAqIEBwYXJhbSBjaGFydFR5cGUgTWljcm9DaGFydCBUeXBlLHN1Y2ggYXMgQnVsbGV0LlxuXHQgKiBAcGFyYW0gZGF0YVBvaW50IERhdGEgcG9pbnQgb2JqZWN0LlxuXHQgKiBAcGFyYW0gZGF0YVBvaW50VmFsdWVIaWRkZW4gT2JqZWN0IHdpdGggJFBhdGggYW5ub3RhdGlvbiB0byBnZXQgdGhlIGhpZGRlbiB2YWx1ZSBwYXRoXG5cdCAqIEBwYXJhbSB0YXJnZXRBbm5vdGF0aW9ucyBDaGFydEFubm90YXRpb24gb2JqZWN0XG5cdCAqIEBwYXJhbSBkYXRhUG9pbnRNYXhWYWx1ZSBPYmplY3Qgd2l0aCAkUGF0aCBhbm5vdGF0aW9uIHRvIGdldCBoaWRkZW4gbWF4IHZhbHVlIHBhdGhcblx0ICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBjaGFydCBoYXMgYWxsIHZhbHVlcyBhbmQgcHJvcGVydGllcyBhbmQgYWxzbyBpdCBpcyBub3QgYWx3YXlzIGhpZGRlbiBzRmluYWxEYXRhUG9pbnRWYWx1ZSAmJiBiTWljcm9jaGFydFZpc2libGUuXG5cdCAqL1xuXHRzaG91bGRNaWNyb0NoYXJ0UmVuZGVyOiBmdW5jdGlvbiAoXG5cdFx0Y2hhcnRUeXBlOiBzdHJpbmcsXG5cdFx0ZGF0YVBvaW50OiBEYXRhUG9pbnRUeXBlLFxuXHRcdGRhdGFQb2ludFZhbHVlSGlkZGVuOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPixcblx0XHR0YXJnZXRBbm5vdGF0aW9uczogQ2hhcnQsXG5cdFx0ZGF0YVBvaW50TWF4VmFsdWU6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+XG5cdCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGF2YWlsYWJsZUNoYXJ0VHlwZXMgPSBbXCJBcmVhXCIsIFwiQ29sdW1uXCIsIFwiQ29tcGFyaXNvblwiXSxcblx0XHRcdGRhdGFQb2ludFZhbHVlID0gZGF0YVBvaW50ICYmIGRhdGFQb2ludC5WYWx1ZSxcblx0XHRcdGhpZGRlblBhdGggPSBkYXRhUG9pbnRWYWx1ZUhpZGRlbiAmJiBkYXRhUG9pbnRWYWx1ZUhpZGRlbltVSUFubm90YXRpb25UZXJtcy5IaWRkZW5dLFxuXHRcdFx0Y2hhcnRBbm5vdGF0aW9uRGltZW5zaW9uID0gdGFyZ2V0QW5ub3RhdGlvbnMgJiYgdGFyZ2V0QW5ub3RhdGlvbnMuRGltZW5zaW9ucyAmJiB0YXJnZXRBbm5vdGF0aW9ucy5EaW1lbnNpb25zWzBdLFxuXHRcdFx0ZmluYWxEYXRhUG9pbnRWYWx1ZSA9IGF2YWlsYWJsZUNoYXJ0VHlwZXMuaW5jbHVkZXMoY2hhcnRUeXBlKSA/IGRhdGFQb2ludFZhbHVlICYmIGNoYXJ0QW5ub3RhdGlvbkRpbWVuc2lvbiA6IGRhdGFQb2ludFZhbHVlOyAvLyBvbmx5IGZvciB0aHJlZSBjaGFydHMgaW4gYXJyYXlcblx0XHRpZiAoY2hhcnRUeXBlID09PSBcIkhhcnZleVwiKSB7XG5cdFx0XHRjb25zdCBkYXRhUG9pbnRNYXhpbXVtVmFsdWUgPSBkYXRhUG9pbnQgJiYgZGF0YVBvaW50Lk1heGltdW1WYWx1ZSxcblx0XHRcdFx0bWF4VmFsdWVIaWRkZW5QYXRoID0gZGF0YVBvaW50TWF4VmFsdWUgJiYgZGF0YVBvaW50TWF4VmFsdWVbVUlBbm5vdGF0aW9uVGVybXMuSGlkZGVuXTtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGRhdGFQb2ludFZhbHVlICYmXG5cdFx0XHRcdGRhdGFQb2ludE1heGltdW1WYWx1ZSAmJlxuXHRcdFx0XHRNaWNyb0NoYXJ0SGVscGVyLmlzTm90QWx3YXlzSGlkZGVuKFxuXHRcdFx0XHRcdFwiQnVsbGV0XCIsXG5cdFx0XHRcdFx0ZGF0YVBvaW50VmFsdWUsXG5cdFx0XHRcdFx0ZGF0YVBvaW50TWF4aW11bVZhbHVlIGFzIHVua25vd24gYXMgeyAkUGF0aDogc3RyaW5nIH0sXG5cdFx0XHRcdFx0aGlkZGVuUGF0aCxcblx0XHRcdFx0XHRtYXhWYWx1ZUhpZGRlblBhdGhcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIGZpbmFsRGF0YVBvaW50VmFsdWUgJiYgTWljcm9DaGFydEhlbHBlci5pc05vdEFsd2F5c0hpZGRlbihjaGFydFR5cGUsIGRhdGFQb2ludFZhbHVlLCB1bmRlZmluZWQsIGhpZGRlblBhdGgpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0IGRhdGFQb2ludFF1YWxpZmllcnMgZm9yIENvbHVtbiwgQ29tcGFyaXNvbiBhbmQgU3RhY2tlZEJhciBtaWNybyBjaGFydHMuXG5cdCAqIEBwYXJhbSBhbm5vdGF0aW9uUGF0aFxuXHQgKiBAcmV0dXJucyBSZXN1bHQgc3RyaW5nIG9yIHVuZGVmaW5lZC5cblx0ICovXG5cdGdldERhdGFQb2ludFF1YWxpZmllcnNGb3JNaWNyb0NoYXJ0OiBmdW5jdGlvbiAoYW5ub3RhdGlvblBhdGg6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKCFhbm5vdGF0aW9uUGF0aC5pbmNsdWRlcyhVSUFubm90YXRpb25UZXJtcy5EYXRhUG9pbnQpKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRyZXR1cm4gYW5ub3RhdGlvblBhdGguc3BsaXQoXCIjXCIpWzFdID8/IFwiXCI7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBnZXQgY29sb3JQYWxldHRlIGZvciBjb21wYXJpc29uIGFuZCBIYXJ2ZXlCYWxsIE1pY3JvY2hhcnRzLlxuXHQgKiBAcGFyYW0gZGF0YVBvaW50IERhdGEgcG9pbnQgb2JqZWN0LlxuXHQgKiBAcmV0dXJucyBSZXN1bHQgc3RyaW5nIGZvciBjb2xvclBhbGV0dGUgb3IgdW5kZWZpbmVkLlxuXHQgKi9cblx0Z2V0Q29sb3JQYWxldHRlRm9yTWljcm9DaGFydDogZnVuY3Rpb24gKGRhdGFQb2ludDogRGF0YVBvaW50VHlwZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIGRhdGFQb2ludC5Dcml0aWNhbGl0eVxuXHRcdFx0PyB1bmRlZmluZWRcblx0XHRcdDogXCJzYXBVaUNoYXJ0UGFsZXR0ZVF1YWxpdGF0aXZlSHVlMSwgc2FwVWlDaGFydFBhbGV0dGVRdWFsaXRhdGl2ZUh1ZTIsIHNhcFVpQ2hhcnRQYWxldHRlUXVhbGl0YXRpdmVIdWUzLCAgICAgICAgICBzYXBVaUNoYXJ0UGFsZXR0ZVF1YWxpdGF0aXZlSHVlNCwgc2FwVWlDaGFydFBhbGV0dGVRdWFsaXRhdGl2ZUh1ZTUsIHNhcFVpQ2hhcnRQYWxldHRlUXVhbGl0YXRpdmVIdWU2LCBzYXBVaUNoYXJ0UGFsZXR0ZVF1YWxpdGF0aXZlSHVlNywgICAgICAgICAgc2FwVWlDaGFydFBhbGV0dGVRdWFsaXRhdGl2ZUh1ZTgsIHNhcFVpQ2hhcnRQYWxldHRlUXVhbGl0YXRpdmVIdWU5LCBzYXBVaUNoYXJ0UGFsZXR0ZVF1YWxpdGF0aXZlSHVlMTAsIHNhcFVpQ2hhcnRQYWxldHRlUXVhbGl0YXRpdmVIdWUxMVwiO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0IE1lYXN1cmVTY2FsZSBmb3IgQXJlYSwgQ29sdW1uIGFuZCBMaW5lIG1pY3JvIGNoYXJ0cy5cblx0ICogQHBhcmFtIGRhdGFQb2ludCBEYXRhIHBvaW50IG9iamVjdC5cblx0ICogQHJldHVybnMgRGF0YSBwb2ludCB2YWx1ZSBmb3JtYXQgZnJhY3Rpb25hbCBkaWdpdHMgb3IgZGF0YSBwb2ludCBzY2FsZSBvciAxLlxuXHQgKi9cblx0Z2V0TWVhc3VyZVNjYWxlRm9yTWljcm9DaGFydDogZnVuY3Rpb24gKGRhdGFQb2ludDogRGF0YVBvaW50VHlwZSk6IG51bWJlciB7XG5cdFx0aWYgKGRhdGFQb2ludC5WYWx1ZUZvcm1hdCAmJiBkYXRhUG9pbnQuVmFsdWVGb3JtYXQuTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzKSB7XG5cdFx0XHRyZXR1cm4gZGF0YVBvaW50LlZhbHVlRm9ybWF0Lk51bWJlck9mRnJhY3Rpb25hbERpZ2l0cy52YWx1ZU9mKCk7XG5cdFx0fVxuXHRcdGlmIChkYXRhUG9pbnQuVmFsdWUgJiYgZGF0YVBvaW50LlZhbHVlW1wiJFBhdGhcIl0gJiYgZGF0YVBvaW50LlZhbHVlW1wiJFBhdGhcIl1bXCIkU2NhbGVcIl0pIHtcblx0XHRcdHJldHVybiBkYXRhUG9pbnQuVmFsdWVbXCIkUGF0aFwiXVtcIiRTY2FsZVwiXTtcblx0XHR9XG5cdFx0cmV0dXJuIDE7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgdG8gcmV0dXJuIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gb2YgbWljcm9jaGFydC5cblx0ICogQHBhcmFtIGNoYXJ0VHlwZSBUaGUgdHlwZSBvZiBtaWNybyBjaGFydCAoQnVsbGV0LCBSYWRpYWwgZXRjLilcblx0ICogQHBhcmFtIG1lYXN1cmUgTWVhc3VyZSB2YWx1ZSBmb3IgbWljcm8gY2hhcnQuXG5cdCAqIEBwYXJhbSBtaWNyb0NoYXJ0IGB0aGlzYC9jdXJyZW50IG1vZGVsIGZvciBtaWNybyBjaGFydC5cblx0ICogQHBhcmFtIGNvbGxlY3Rpb24gQ29sbGVjdGlvbiBvYmplY3QuXG5cdCAqIEBwYXJhbSB1aU5hbWUgVGhlIEBzYXB1aS5uYW1lIGluIGNvbGxlY3Rpb24gbW9kZWwgaXMgbm90IGFjY2Vzc2libGUgaGVyZSBmcm9tIG1vZGVsIGhlbmNlIG5lZWQgdG8gcGFzcyBpdC5cblx0ICogQHBhcmFtIGRhdGFQb2ludCBEYXRhIHBvaW50IG9iamVjdCB1c2VkIGluIGNhc2Ugb2YgSGFydmV5IEJhbGwgbWljcm8gY2hhcnRcblx0ICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgbWljcm8gY2hhcnQuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRnZXRCaW5kaW5nRXhwcmVzc2lvbkZvck1pY3JvY2hhcnQ6IGZ1bmN0aW9uIChcblx0XHRjaGFydFR5cGU6IHN0cmluZyxcblx0XHRtZWFzdXJlOiBEYXRhTW9kZWxPYmplY3RQYXRoPE1lYXN1cmU+LFxuXHRcdG1pY3JvQ2hhcnQ6IE1pY3JvQ2hhcnQsXG5cdFx0Y29sbGVjdGlvbjogTWV0YU1vZGVsTmF2UHJvcGVydHksXG5cdFx0dWlOYW1lOiBzdHJpbmcsXG5cdFx0ZGF0YVBvaW50PzogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhUG9pbnRUeXBlPlxuXHQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGNoYXJ0c1dpdGhCaW5kaW5nRXhwcmVzc2lvbiA9IFtDaGFydFR5cGUuQnVsbGV0LCBDaGFydFR5cGUuUGllLCBDaGFydFR5cGUuRG9udXQsIFwiUmFkaWFsXCIsIFwiQnVsbGV0XCIsIFwiSGFydmV5XCJdO1xuXHRcdGlmICghY2hhcnRUeXBlIHx8IGNoYXJ0c1dpdGhCaW5kaW5nRXhwcmVzc2lvbi5pbmNsdWRlcyhjaGFydFR5cGUpKSB7XG5cdFx0XHRjb25zdCBjb25kaXRpb24gPSBjb2xsZWN0aW9uW1wiJGlzQ29sbGVjdGlvblwiXSB8fCBjb2xsZWN0aW9uW1wiJGtpbmRcIl0gPT09IFwiRW50aXR5U2V0XCI7XG5cdFx0XHRjb25zdCBwYXRoID0gY29uZGl0aW9uID8gXCJcIiA6IHVpTmFtZTtcblx0XHRcdGxldCBjdXJyZW5jeU9yVW5pdCA9IE1pY3JvQ2hhcnRIZWxwZXIuZ2V0VU9NUGF0aEZvck1pY3JvY2hhcnQobWljcm9DaGFydC5zaG93T25seUNoYXJ0IGFzIGJvb2xlYW4sIG1lYXN1cmUpO1xuXHRcdFx0bGV0IGRhdGFQb2ludENyaXRpY2FsbGl0eSA9IFwiXCI7XG5cdFx0XHRzd2l0Y2ggKGNoYXJ0VHlwZSkge1xuXHRcdFx0XHRjYXNlIFwiUmFkaWFsXCI6XG5cdFx0XHRcdGNhc2UgQ2hhcnRUeXBlLkRvbnV0OlxuXHRcdFx0XHRcdGN1cnJlbmN5T3JVbml0ID0gXCJcIjtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIkhhcnZleVwiOlxuXHRcdFx0XHRjYXNlIENoYXJ0VHlwZS5QaWU6XG5cdFx0XHRcdFx0ZGF0YVBvaW50Q3JpdGljYWxsaXR5ID0gZGF0YVBvaW50Py50YXJnZXRPYmplY3Q/LkNyaXRpY2FsaXR5XG5cdFx0XHRcdFx0XHQ/IChkYXRhUG9pbnQudGFyZ2V0T2JqZWN0Py5Dcml0aWNhbGl0eSBhcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPik/LnBhdGhcblx0XHRcdFx0XHRcdDogXCJcIjtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGNvbnN0IGZ1bmN0aW9uVmFsdWUgPSBNaWNyb0NoYXJ0SGVscGVyLmdldFNlbGVjdFBhcmFtZXRlcnMoXG5cdFx0XHRcdG1pY3JvQ2hhcnQuYmF0Y2hHcm91cElkIGFzIHN0cmluZyxcblx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdGRhdGFQb2ludENyaXRpY2FsbGl0eSxcblx0XHRcdFx0W2N1cnJlbmN5T3JVbml0XSBhcyBzdHJpbmdbXVxuXHRcdFx0KTtcblx0XHRcdHJldHVybiBgeyBwYXRoOiAnJHtwYXRofSdgICsgYCwgcGFyYW1ldGVycyA6IHske2Z1bmN0aW9uVmFsdWV9fSB9YDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIG1pY3JvQ2hhcnQuYmF0Y2hHcm91cElkID8gXCJ7cGF0aDonJywgcGFyYW1ldGVycyA6IHsgJCRncm91cElkOiAnXCIgKyBtaWNyb0NoYXJ0LmJhdGNoR3JvdXBJZCArIFwiJ30gfVwiIDogXCJcIjtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgdG8gcmV0dXJuIHRoZSBVT01QYXRoIGV4cHJlc3Npb24gb2YgdGhlIG1pY3JvIGNoYXJ0LlxuXHQgKiBAcGFyYW0gc2hvd09ubHlDaGFydCBXaGV0aGVyIG9ubHkgY2hhcnQgc2hvdWxkIGJlIHJlbmRlcmVkIG9yIG5vdC5cblx0ICogQHBhcmFtIG1lYXN1cmUgTWVhc3VyZXMgZm9yIHRoZSBtaWNybyBjaGFydC5cblx0ICogQHBhcmFtIGNoYXJ0VHlwZSBUeXBlIG9mIHRoZSBtaWNybyBjaGFydC5cblx0ICogQHJldHVybnMgVU9NUGF0aCBTdHJpbmcgZm9yIHRoZSBtaWNybyBjaGFydC5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdGdldFVPTVBhdGhGb3JNaWNyb2NoYXJ0OiBmdW5jdGlvbiAoXG5cdFx0c2hvd09ubHlDaGFydDogYm9vbGVhbixcblx0XHRtZWFzdXJlPzogRGF0YU1vZGVsT2JqZWN0UGF0aDxNZWFzdXJlPixcblx0XHRjaGFydFR5cGU/OiBzdHJpbmdcblx0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBjaGFydHNXaXRoVU9NUGFydHMgPSBbQ2hhcnRUeXBlLkJ1bGxldCwgQ2hhcnRUeXBlLlBpZSwgQ2hhcnRUeXBlLkFyZWEsIENoYXJ0VHlwZS5Db2x1bW4sIENoYXJ0VHlwZS5MaW5lLCBDaGFydFR5cGUuQmFyXTtcblx0XHRpZiAoIWNoYXJ0VHlwZSB8fCAoY2hhcnRUeXBlICYmIGNoYXJ0c1dpdGhVT01QYXJ0cy5pbmNsdWRlcyhjaGFydFR5cGUgYXMgQ2hhcnRUeXBlKSkpIHtcblx0XHRcdHJldHVybiBtZWFzdXJlICYmICFzaG93T25seUNoYXJ0XG5cdFx0XHRcdD8gKFxuXHRcdFx0XHRcdFx0KG1lYXN1cmUudGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXMgYXMgUHJvcGVydHlBbm5vdGF0aW9uc19NZWFzdXJlcylcblx0XHRcdFx0XHRcdFx0Py5JU09DdXJyZW5jeSBhcyB1bmtub3duIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+XG5cdFx0XHRcdCAgKT8ucGF0aCB8fFxuXHRcdFx0XHRcdFx0KFxuXHRcdFx0XHRcdFx0XHQobWVhc3VyZS50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5NZWFzdXJlcyBhcyBQcm9wZXJ0eUFubm90YXRpb25zX01lYXN1cmVzKVxuXHRcdFx0XHRcdFx0XHRcdD8uVW5pdCBhcyB1bmtub3duIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+XG5cdFx0XHRcdFx0XHQpPy5wYXRoIHx8XG5cdFx0XHRcdFx0XHRcIlwiXG5cdFx0XHRcdDogXCJcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgdG8gcmV0dXJuIHRoZSBhZ2dyZWdhdGlvbiBiaW5kaW5nIGV4cHJlc3Npb24gb2YgbWljcm8gY2hhcnQuXG5cdCAqIEBwYXJhbSBhZ2dyZWdhdGlvblR5cGUgQWdncmVnYXRpb24gdHlwZSBvZiBjaGFydCAoZm9yIGV4YW1wbGUsIFBvaW50IGZvciBBcmVhTWljcm9jaGFydClcblx0ICogQHBhcmFtIGNvbGxlY3Rpb24gQ29sbGVjdGlvbiBvYmplY3QuXG5cdCAqIEBwYXJhbSBkYXRhUG9pbnQgRGF0YSBwb2ludCBpbmZvIGZvciBtaWNybyBjaGFydC5cblx0ICogQHBhcmFtIHVpTmFtZSBUaGUgQHNhcHVpLm5hbWUgaW4gY29sbGVjdGlvbiBtb2RlbCBpcyBub3QgYWNjZXNzaWJsZSBoZXJlIGZyb20gbW9kZWwgaGVuY2UgbmVlZCB0byBwYXNzIGl0LlxuXHQgKiBAcGFyYW0gZGltZW5zaW9uIE1pY3JvIGNoYXJ0IERpbWVuc2lvbnMuXG5cdCAqIEBwYXJhbSBtZWFzdXJlIE1lYXN1cmUgdmFsdWUgZm9yIG1pY3JvIGNoYXJ0LlxuXHQgKiBAcGFyYW0gc29ydE9yZGVyIFNvcnRPcmRlciBmb3IgbWljcm8gY2hhcnQuXG5cdCAqIEBwYXJhbSBtZWFzdXJlT3JEaW1lbnNpb25CYXIgVGhlIG1lYXN1cmUgb3IgZGltZW5zaW9uIHBhc3NlZCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNhc2Ugb2YgYmFyIGNoYXJ0LlxuXHQgKiBAcGFyYW0gcmV0dXJuT2JqZWN0IEZsYWcgd2hpY2ggc3BlY2lmaWVzIGlmIHRoZSByZXR1cm4gdmFsdWUgc2hvdWxkIGJlIHN0cmluZyBvciBvYmplY3QuXG5cdCAqIEByZXR1cm5zIEFnZ3JlZ2F0aW9uIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgbWljcm8gY2hhcnQuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRnZXRBZ2dyZWdhdGlvbkZvck1pY3JvY2hhcnQ6IGZ1bmN0aW9uIChcblx0XHRhZ2dyZWdhdGlvblR5cGU6IHN0cmluZyxcblx0XHRjb2xsZWN0aW9uOiBNZXRhTW9kZWxOYXZQcm9wZXJ0eSxcblx0XHRkYXRhUG9pbnQ6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YVBvaW50VHlwZT4sXG5cdFx0dWlOYW1lOiBzdHJpbmcsXG5cdFx0ZGltZW5zaW9uOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5UGF0aD4gfCBQcm9wZXJ0eVBhdGggfCB1bmRlZmluZWQsXG5cdFx0bWVhc3VyZTogRGF0YU1vZGVsT2JqZWN0UGF0aDxNZWFzdXJlPixcblx0XHRzb3J0T3JkZXI/OiBTb3J0T3JkZXJUeXBlW10sXG5cdFx0bWVhc3VyZU9yRGltZW5zaW9uQmFyPzogc3RyaW5nLFxuXHRcdHJldHVybk9iamVjdD86IGJvb2xlYW5cblx0KTogc3RyaW5nIHwgQWdncmVnYXRpb25CaW5kaW5nSW5mbyB7XG5cdFx0bGV0IHBhdGggPSBjb2xsZWN0aW9uW1wiJGtpbmRcIl0gPT09IFwiRW50aXR5U2V0XCIgPyBcIi9cIiA6IFwiXCI7XG5cdFx0cGF0aCA9IHBhdGggKyB1aU5hbWU7XG5cdFx0Y29uc3QgZ3JvdXBJZCA9IFwiXCI7XG5cdFx0bGV0IGRhdGFQb2ludENyaXRpY2FsbGl0eUNhbGM7XG5cdFx0bGV0IGRhdGFQb2ludENyaXRpY2FsbGl0eSA9IGRhdGFQb2ludC50YXJnZXRPYmplY3Q/LkNyaXRpY2FsaXR5XG5cdFx0XHQ/IChkYXRhUG9pbnQudGFyZ2V0T2JqZWN0Py5Dcml0aWNhbGl0eSBhcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPik/LnBhdGhcblx0XHRcdDogXCJcIjtcblx0XHRjb25zdCBjdXJyZW5jeU9yVW5pdCA9IE1pY3JvQ2hhcnRIZWxwZXIuZ2V0VU9NUGF0aEZvck1pY3JvY2hhcnQoZmFsc2UsIG1lYXN1cmUpO1xuXHRcdGxldCB0YXJnZXRWYWx1ZVBhdGggPSBcIlwiO1xuXHRcdGxldCBkaW1lbnNpb25Qcm9wZXJ0eVBhdGggPSBcIlwiO1xuXHRcdGlmICgoZGltZW5zaW9uIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHlQYXRoPik/LnRhcmdldE9iamVjdCkge1xuXHRcdFx0ZGltZW5zaW9uID0gKGRpbWVuc2lvbiBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5UGF0aD4pLnRhcmdldE9iamVjdDtcblx0XHR9XG5cdFx0aWYgKChkaW1lbnNpb24gYXMgUHJvcGVydHlQYXRoKT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCkge1xuXHRcdFx0ZGltZW5zaW9uUHJvcGVydHlQYXRoID0gKFxuXHRcdFx0XHQoZGltZW5zaW9uIGFzIFByb3BlcnR5UGF0aCk/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LlRleHQgYXMgdW5rbm93biBhcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPlxuXHRcdFx0KT8ucGF0aDtcblx0XHR9IGVsc2UgaWYgKGRpbWVuc2lvbikge1xuXHRcdFx0ZGltZW5zaW9uUHJvcGVydHlQYXRoID0gKGRpbWVuc2lvbiBhcyBQcm9wZXJ0eVBhdGgpPy52YWx1ZTtcblx0XHR9XG5cdFx0c3dpdGNoIChhZ2dyZWdhdGlvblR5cGUpIHtcblx0XHRcdGNhc2UgXCJQb2ludHNcIjpcblx0XHRcdGNhc2UgQ2hhcnRUeXBlLkFyZWE6XG5cdFx0XHRcdGRhdGFQb2ludENyaXRpY2FsbGl0eUNhbGMgPSBkYXRhUG9pbnQ/LnRhcmdldE9iamVjdD8uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbjtcblx0XHRcdFx0dGFyZ2V0VmFsdWVQYXRoID0gZGF0YVBvaW50Py50YXJnZXRPYmplY3Q/LlRhcmdldFZhbHVlPy5wYXRoO1xuXHRcdFx0XHRkYXRhUG9pbnRDcml0aWNhbGxpdHkgPSBcIlwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJDb2x1bW5zXCI6XG5cdFx0XHRjYXNlIENoYXJ0VHlwZS5Db2x1bW46XG5cdFx0XHRcdGRhdGFQb2ludENyaXRpY2FsbGl0eUNhbGMgPSBkYXRhUG9pbnQ/LnRhcmdldE9iamVjdD8uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTGluZVBvaW50c1wiOlxuXHRcdFx0Y2FzZSBDaGFydFR5cGUuTGluZTpcblx0XHRcdFx0ZGF0YVBvaW50Q3JpdGljYWxsaXR5ID0gXCJcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiQmFyc1wiOlxuXHRcdFx0Y2FzZSBDaGFydFR5cGUuQmFyU3RhY2tlZDpcblx0XHRcdFx0ZGltZW5zaW9uUHJvcGVydHlQYXRoID0gXCJcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdGNvbnN0IHBhcmFtZXRlcnMgPSBNaWNyb0NoYXJ0SGVscGVyLmdldFNlbGVjdFBhcmFtZXRlcnMoXG5cdFx0XHRncm91cElkLFxuXHRcdFx0c29ydE9yZGVyLFxuXHRcdFx0ZGF0YVBvaW50Q3JpdGljYWxsaXR5Q2FsYyxcblx0XHRcdGRhdGFQb2ludENyaXRpY2FsbGl0eSxcblx0XHRcdFtjdXJyZW5jeU9yVW5pdCBhcyBzdHJpbmcsIHRhcmdldFZhbHVlUGF0aCwgZGltZW5zaW9uUHJvcGVydHlQYXRoLCBtZWFzdXJlT3JEaW1lbnNpb25CYXIgfHwgXCJcIl0sXG5cdFx0XHRyZXR1cm5PYmplY3Rcblx0XHQpO1xuXHRcdGlmIChyZXR1cm5PYmplY3QpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHBhdGgsXG5cdFx0XHRcdHBhcmFtZXRlcnM6IHBhcmFtZXRlcnMgYXMgUGFyYW1ldGVyVHlwZVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIGB7cGF0aDonJHtwYXRofSdgICsgYCwgcGFyYW1ldGVycyA6IHske3BhcmFtZXRlcnN9fSB9YDtcblx0fSxcblxuXHRnZXRDdXJyZW5jeU9yVW5pdDogZnVuY3Rpb24gKG1lYXN1cmU6IE1ldGFNb2RlbFByb3BlcnR5QW5ub3RhdGlvbnMpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGlmIChtZWFzdXJlW2BAJHtNZWFzdXJlc0Fubm90YXRpb25UZXJtcy5JU09DdXJyZW5jeX1gXSkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0KG1lYXN1cmVbYEAke01lYXN1cmVzQW5ub3RhdGlvblRlcm1zLklTT0N1cnJlbmN5fWBdIGFzIHsgJFBhdGg6IHN0cmluZyB9KS4kUGF0aCB8fFxuXHRcdFx0XHQobWVhc3VyZVtgQCR7TWVhc3VyZXNBbm5vdGF0aW9uVGVybXMuSVNPQ3VycmVuY3l9YF0gYXMgc3RyaW5nKVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0aWYgKG1lYXN1cmVbYEAke01lYXN1cmVzQW5ub3RhdGlvblRlcm1zLlVuaXR9YF0pIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdChtZWFzdXJlW2BAJHtNZWFzdXJlc0Fubm90YXRpb25UZXJtcy5Vbml0fWBdIGFzIHsgJFBhdGg6IHN0cmluZyB9KS4kUGF0aCB8fFxuXHRcdFx0XHQobWVhc3VyZVtgQCR7TWVhc3VyZXNBbm5vdGF0aW9uVGVybXMuVW5pdH1gXSBhcyBzdHJpbmcpXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gXCJcIjtcblx0fSxcblxuXHRnZXRDYWxlbmRhclBhdHRlcm46IGZ1bmN0aW9uIChcblx0XHRwcm9wZXJ0eVR5cGU6IHN0cmluZyxcblx0XHRhbm5vdGF0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBQcm9wZXJ0eUFubm90YXRpb25zLFxuXHRcdGlzTWljcm9DaGFydFJ1blRpbWU/OiBib29sZWFuXG5cdCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKGlzTWljcm9DaGFydFJ1blRpbWUpIHtcblx0XHRcdHJldHVybiBNaWNyb0NoYXJ0SGVscGVyLmNoZWNrUGF0dGVybkZvclJ1bnRpbWVJbnN0YW5jZShhbm5vdGF0aW9ucywgcHJvcGVydHlUeXBlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIE1pY3JvQ2hhcnRIZWxwZXIuY2hlY2tQYXR0ZXJuRm9yVGVtcGxhdGVUaW1lSW5zdGFuY2UoYW5ub3RhdGlvbnMsIHByb3BlcnR5VHlwZSk7XG5cdFx0fVxuXHR9LFxuXG5cdGNoZWNrUGF0dGVybkZvclJ1bnRpbWVJbnN0YW5jZTogZnVuY3Rpb24gKGFubm90YXRpb25zOiBQcm9wZXJ0eUFubm90YXRpb25zLCBwcm9wZXJ0eVR5cGU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuICgoYW5ub3RhdGlvbnMuQ29tbW9uPy5Jc0NhbGVuZGFyWWVhciAmJiBcInl5eXlcIikgfHxcblx0XHRcdChhbm5vdGF0aW9ucy5Db21tb24/LklzQ2FsZW5kYXJRdWFydGVyICYmIFwiUVwiKSB8fFxuXHRcdFx0KGFubm90YXRpb25zLkNvbW1vbj8uSXNDYWxlbmRhck1vbnRoICYmIFwiTU1cIikgfHxcblx0XHRcdChhbm5vdGF0aW9ucy5Db21tb24/LklzQ2FsZW5kYXJXZWVrICYmIFwid3dcIikgfHxcblx0XHRcdChhbm5vdGF0aW9ucy5Db21tb24/LklzQ2FsZW5kYXJEYXRlICYmIFwieXl5eU1NZGRcIikgfHxcblx0XHRcdChhbm5vdGF0aW9ucy5Db21tb24/LklzQ2FsZW5kYXJZZWFyTW9udGggJiYgXCJ5eXl5TU1cIikgfHxcblx0XHRcdChwcm9wZXJ0eVR5cGUgPT09IFwiRWRtLkRhdGVcIiAmJiBcInl5eXktTU0tZGRcIikgfHxcblx0XHRcdHVuZGVmaW5lZCkgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHR9LFxuXG5cdGNoZWNrUGF0dGVybkZvclRlbXBsYXRlVGltZUluc3RhbmNlOiBmdW5jdGlvbiAoYW5ub3RhdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBwcm9wZXJ0eVR5cGU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuICgoYW5ub3RhdGlvbnNbYEAke0NvbW1vbkFubm90YXRpb25UZXJtcy5Jc0NhbGVuZGFyWWVhcn1gXSAmJiBcInl5eXlcIikgfHxcblx0XHRcdChhbm5vdGF0aW9uc1tgQCR7Q29tbW9uQW5ub3RhdGlvblRlcm1zLklzQ2FsZW5kYXJRdWFydGVyfWBdICYmIFwiUVwiKSB8fFxuXHRcdFx0KGFubm90YXRpb25zW2BAJHtDb21tb25Bbm5vdGF0aW9uVGVybXMuSXNDYWxlbmRhck1vbnRofWBdICYmIFwiTU1cIikgfHxcblx0XHRcdChhbm5vdGF0aW9uc1tgQCR7Q29tbW9uQW5ub3RhdGlvblRlcm1zLklzQ2FsZW5kYXJXZWVrfWBdICYmIFwid3dcIikgfHxcblx0XHRcdChhbm5vdGF0aW9uc1tgQCR7Q29tbW9uQW5ub3RhdGlvblRlcm1zLklzQ2FsZW5kYXJEYXRlfWBdICYmIFwieXl5eU1NZGRcIikgfHxcblx0XHRcdChhbm5vdGF0aW9uc1tgQCR7Q29tbW9uQW5ub3RhdGlvblRlcm1zLklzQ2FsZW5kYXJZZWFyTW9udGh9YF0gJiYgXCJ5eXl5TU1cIikgfHxcblx0XHRcdChwcm9wZXJ0eVR5cGUgPT09IFwiRWRtLkRhdGVcIiAmJiBcInl5eXktTU0tZGRcIikgfHxcblx0XHRcdHVuZGVmaW5lZCkgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHR9LFxuXG5cdGdldFg6IGZ1bmN0aW9uIChwcm9wZXJ0eVBhdGg6IHN0cmluZywgcHJvcGVydHlUeXBlOiBzdHJpbmcsIGFubm90YXRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdFx0Y29uc3QgcGF0dGVybiA9IGFubm90YXRpb25zICYmIE1pY3JvQ2hhcnRIZWxwZXIuZ2V0Q2FsZW5kYXJQYXR0ZXJuKHByb3BlcnR5VHlwZSwgYW5ub3RhdGlvbnMpO1xuXHRcdGlmIChwYXR0ZXJuICYmIFtcIkVkbS5EYXRlXCIsIFwiRWRtLlN0cmluZ1wiXS5zb21lKCh0eXBlKSA9PiB0eXBlID09PSBwcm9wZXJ0eVR5cGUpKSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdGZvcm1hdFJlc3VsdChcblx0XHRcdFx0XHRbcGF0aEluTW9kZWwocHJvcGVydHlQYXRoKSwgY29uc3RhbnQocGF0dGVybiksIGNvbnN0YW50KHByb3BlcnR5UGF0aCldLFxuXHRcdFx0XHRcdFwic2FwLmZlLmNvcmUuZm9ybWF0dGVycy5WYWx1ZUZvcm1hdHRlciNmb3JtYXRTdHJpbmdEaW1lbnNpb25cIlxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblx0fSxcblx0Z2V0RXhwcmVzc2lvbldpdGhUeXBlKHZhbHVlOiBQcmltaXRpdmVUeXBlLCBmb3JtYXRPcHRpb25zPzogeyBzdHlsZTogc3RyaW5nIH0pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHZhbHVlICYmIHZhbHVlLiR0YXJnZXQpIHtcblx0XHRcdGNvbnN0IGV4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKHZhbHVlLiR0YXJnZXQsIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih2YWx1ZSkpO1xuXHRcdFx0ZXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zID0ge1xuXHRcdFx0XHQuLi5leHByZXNzaW9uLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdC4uLmZvcm1hdE9wdGlvbnNcblx0XHRcdH07XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZXhwcmVzc2lvbik7XG5cdFx0fVxuXHR9LFxuXHRjYWxjdWxhdGVDb2xvckJpbmRpbmcoXG5cdFx0ZGF0YVBvaW50OiBEYXRhUG9pbnQsXG5cdFx0YWN0dWFsVmFsdWVFeHByZXNzaW9uOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbixcblx0XHRjcml0aWNhbGl0eUV4cHJlc3Npb25Gb3JNaWNyb2NoYXJ0OiBzdHJpbmcgfCB1bmRlZmluZWRcblx0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgY29sb3JCaW5kaW5nO1xuXHRcdGlmIChkYXRhUG9pbnQuQ3JpdGljYWxpdHkgfHwgKCFkYXRhUG9pbnQuQ3JpdGljYWxpdHkgJiYgIWRhdGFQb2ludC5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uKSkge1xuXHRcdFx0Y29sb3JCaW5kaW5nID0gY3JpdGljYWxpdHlFeHByZXNzaW9uRm9yTWljcm9jaGFydDtcblx0XHR9IGVsc2UgaWYgKGRhdGFQb2ludC5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uKSB7XG5cdFx0XHRjb25zdCBjcml0aWNhbGl0eUNhbGN1bGF0aW9uID0gZGF0YVBvaW50LkNyaXRpY2FsaXR5Q2FsY3VsYXRpb247XG5cdFx0XHRjb25zdCBkaXJlY3Rpb24gPSBjcml0aWNhbGl0eUNhbGN1bGF0aW9uPy5JbXByb3ZlbWVudERpcmVjdGlvbjtcblx0XHRcdGNvbnN0IGRldmlhdGlvblJhbmdlTG93VmFsdWUgPSBjcml0aWNhbGl0eUNhbGN1bGF0aW9uPy5EZXZpYXRpb25SYW5nZUxvd1ZhbHVlXG5cdFx0XHRcdD8gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGNyaXRpY2FsaXR5Q2FsY3VsYXRpb24/LkRldmlhdGlvblJhbmdlTG93VmFsdWUpKVxuXHRcdFx0XHQ6IDA7XG5cdFx0XHRjb25zdCB0b2xlcmFuY2VSYW5nZUxvd1ZhbHVlID0gY3JpdGljYWxpdHlDYWxjdWxhdGlvbj8uVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZVxuXHRcdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihjcml0aWNhbGl0eUNhbGN1bGF0aW9uPy5Ub2xlcmFuY2VSYW5nZUxvd1ZhbHVlKSlcblx0XHRcdFx0OiAwO1xuXHRcdFx0Y29uc3QgYWNjZXB0YW5jZVJhbmdlTG93VmFsdWUgPSBjcml0aWNhbGl0eUNhbGN1bGF0aW9uPy5BY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZVxuXHRcdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihjcml0aWNhbGl0eUNhbGN1bGF0aW9uPy5BY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZSkpXG5cdFx0XHRcdDogMDtcblx0XHRcdGNvbnN0IGFjY2VwdGFuY2VSYW5nZUhpZ2hWYWx1ZSA9XG5cdFx0XHRcdGNyaXRpY2FsaXR5Q2FsY3VsYXRpb24/LkFjY2VwdGFuY2VSYW5nZUhpZ2hWYWx1ZSAmJlxuXHRcdFx0XHRjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oY3JpdGljYWxpdHlDYWxjdWxhdGlvbj8uQWNjZXB0YW5jZVJhbmdlSGlnaFZhbHVlKSk7XG5cdFx0XHRjb25zdCB0b2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZSA9XG5cdFx0XHRcdGNyaXRpY2FsaXR5Q2FsY3VsYXRpb24/LlRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlICYmXG5cdFx0XHRcdGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihjcml0aWNhbGl0eUNhbGN1bGF0aW9uPy5Ub2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZSkpO1xuXHRcdFx0Y29uc3QgZGV2aWF0aW9uUmFuZ2VIaWdoVmFsdWUgPVxuXHRcdFx0XHRjcml0aWNhbGl0eUNhbGN1bGF0aW9uPy5EZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZSAmJlxuXHRcdFx0XHRjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oY3JpdGljYWxpdHlDYWxjdWxhdGlvbj8uRGV2aWF0aW9uUmFuZ2VIaWdoVmFsdWUpKTtcblxuXHRcdFx0Y29sb3JCaW5kaW5nID0gQ29tbW9uSGVscGVyLmdldENyaXRpY2FsaXR5Q2FsY3VsYXRpb25CaW5kaW5nKFxuXHRcdFx0XHRkaXJlY3Rpb24gYXMgc3RyaW5nLFxuXHRcdFx0XHRhY3R1YWxWYWx1ZUV4cHJlc3Npb24gYXMgc3RyaW5nLFxuXHRcdFx0XHRkZXZpYXRpb25SYW5nZUxvd1ZhbHVlIGFzIHN0cmluZyxcblx0XHRcdFx0dG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSBhcyBzdHJpbmcsXG5cdFx0XHRcdGFjY2VwdGFuY2VSYW5nZUxvd1ZhbHVlIGFzIHN0cmluZyxcblx0XHRcdFx0YWNjZXB0YW5jZVJhbmdlSGlnaFZhbHVlIGFzIHN0cmluZyxcblx0XHRcdFx0dG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWUgYXMgc3RyaW5nLFxuXHRcdFx0XHRkZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZSBhcyBzdHJpbmdcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBjb2xvckJpbmRpbmc7XG5cdH0sXG5cdGFzeW5jIGdldEJ1bGxldE1pY3JvQ2hhcnRBZ2dyZWdhdGlvbnMoXG5cdFx0ZGF0YVBvaW50OiBEYXRhUG9pbnQsXG5cdFx0Y3JpdGljYWxpdHlFeHByZXNzaW9uRm9yTWljcm9jaGFydDogc3RyaW5nIHwgdW5kZWZpbmVkXG5cdCk6IFByb21pc2U8UGljazwkQnVsbGV0TWljcm9DaGFydFNldHRpbmdzLCBcImFjdHVhbFwiIHwgXCJ0aHJlc2hvbGRzXCI+IHwgdW5kZWZpbmVkPiB7XG5cdFx0Y29uc3QgQnVsbGV0TWljcm9DaGFydERhdGEgPSAoYXdhaXQgaW1wb3J0KFwic2FwL3N1aXRlL3VpL21pY3JvY2hhcnQvQnVsbGV0TWljcm9DaGFydERhdGFcIikpLmRlZmF1bHQ7XG5cdFx0Y29uc3QgYWN0dWFsVmFsdWVFeHByZXNzaW9uID0gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFQb2ludC5WYWx1ZSkpO1xuXHRcdGNvbnN0IHRocmVzaG9sZHM6IEluc3RhbmNlVHlwZTx0eXBlb2YgQnVsbGV0TWljcm9DaGFydERhdGE+W10gPSBbXTtcblx0XHRjb25zdCBjb2xvckJpbmRpbmcgPSB0aGlzLmNhbGN1bGF0ZUNvbG9yQmluZGluZyhkYXRhUG9pbnQsIGFjdHVhbFZhbHVlRXhwcmVzc2lvbiwgY3JpdGljYWxpdHlFeHByZXNzaW9uRm9yTWljcm9jaGFydCk7XG5cdFx0aWYgKGRhdGFQb2ludC5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uKSB7XG5cdFx0XHRjb25zdCBjcml0aWNhbGl0eUNhbGN1bGF0aW9uID0gZGF0YVBvaW50LkNyaXRpY2FsaXR5Q2FsY3VsYXRpb247XG5cdFx0XHRjb25zdCBkaXJlY3Rpb24gPSBjcml0aWNhbGl0eUNhbGN1bGF0aW9uPy5JbXByb3ZlbWVudERpcmVjdGlvbjtcblx0XHRcdC8vIHRocmVzaG9sZHNcblx0XHRcdGlmICghZGlyZWN0aW9uLmluY2x1ZGVzKFwiTWluaW1pemVcIikgJiYgY3JpdGljYWxpdHlDYWxjdWxhdGlvbj8uRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZSkge1xuXHRcdFx0XHR0aHJlc2hvbGRzLnB1c2goXG5cdFx0XHRcdFx0PEJ1bGxldE1pY3JvQ2hhcnREYXRhXG5cdFx0XHRcdFx0XHR2YWx1ZT17Y29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGNyaXRpY2FsaXR5Q2FsY3VsYXRpb24/LkRldmlhdGlvblJhbmdlTG93VmFsdWUpKX1cblx0XHRcdFx0XHRcdGNvbG9yPVwiRXJyb3JcIlxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWRpcmVjdGlvbi5pbmNsdWRlcyhcIk1pbmltaXplXCIpICYmIGNyaXRpY2FsaXR5Q2FsY3VsYXRpb24/LlRvbGVyYW5jZVJhbmdlTG93VmFsdWUpIHtcblx0XHRcdFx0dGhyZXNob2xkcy5wdXNoKFxuXHRcdFx0XHRcdDxCdWxsZXRNaWNyb0NoYXJ0RGF0YVxuXHRcdFx0XHRcdFx0dmFsdWU9e2NvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihjcml0aWNhbGl0eUNhbGN1bGF0aW9uPy5Ub2xlcmFuY2VSYW5nZUxvd1ZhbHVlKSl9XG5cdFx0XHRcdFx0XHRjb2xvcj1cIkNyaXRpY2FsXCJcblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFkaXJlY3Rpb24uaW5jbHVkZXMoXCJNYXhpbWl6ZVwiKSAmJiBjcml0aWNhbGl0eUNhbGN1bGF0aW9uPy5Ub2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZSkge1xuXHRcdFx0XHR0aHJlc2hvbGRzLnB1c2goXG5cdFx0XHRcdFx0PEJ1bGxldE1pY3JvQ2hhcnREYXRhXG5cdFx0XHRcdFx0XHR2YWx1ZT17Y29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGNyaXRpY2FsaXR5Q2FsY3VsYXRpb24/LlRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlKSl9XG5cdFx0XHRcdFx0XHRjb2xvcj1cIkNyaXRpY2FsXCJcblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFkaXJlY3Rpb24uaW5jbHVkZXMoXCJNYXhpbWl6ZVwiKSAmJiBjcml0aWNhbGl0eUNhbGN1bGF0aW9uPy5EZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZSkge1xuXHRcdFx0XHR0aHJlc2hvbGRzLnB1c2goXG5cdFx0XHRcdFx0PEJ1bGxldE1pY3JvQ2hhcnREYXRhXG5cdFx0XHRcdFx0XHR2YWx1ZT17Y29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGNyaXRpY2FsaXR5Q2FsY3VsYXRpb24/LkRldmlhdGlvblJhbmdlSGlnaFZhbHVlKSl9XG5cdFx0XHRcdFx0XHRjb2xvcj1cIkVycm9yXCJcblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCBhY3R1YWw6IEluc3RhbmNlVHlwZTx0eXBlb2YgQnVsbGV0TWljcm9DaGFydERhdGE+ID0gKFxuXHRcdFx0PEJ1bGxldE1pY3JvQ2hhcnREYXRhIHZhbHVlPXthY3R1YWxWYWx1ZUV4cHJlc3Npb259IGNvbG9yPXtjb2xvckJpbmRpbmd9IC8+XG5cdFx0KTtcblxuXHRcdHJldHVybiB7IGFjdHVhbCwgdGhyZXNob2xkcyB9O1xuXHR9LFxuXG5cdGFzeW5jIGdldFN0YWNrTWljcm9DaGFydEFnZ3JlZ2F0aW9ucyhcblx0XHRkYXRhUG9pbnQ6IERhdGFQb2ludCxcblx0XHRtZWFzdXJlRGF0YVBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8TWVhc3VyZT4gfCB1bmRlZmluZWQsXG5cdFx0Y3JpdGljYWxpdHlFeHByZXNzaW9uRm9yTWljcm9jaGFydDogc3RyaW5nIHwgdW5kZWZpbmVkXG5cdCk6IFByb21pc2U8UGljazwkU3RhY2tlZEJhck1pY3JvQ2hhcnRTZXR0aW5ncywgXCJiYXJzXCI+IHwgdW5kZWZpbmVkPiB7XG5cdFx0Y29uc3QgU3RhY2tlZEJhck1pY3JvQ2hhcnRCYXIgPSAoYXdhaXQgaW1wb3J0KFwic2FwL3N1aXRlL3VpL21pY3JvY2hhcnQvU3RhY2tlZEJhck1pY3JvQ2hhcnRCYXJcIikpLmRlZmF1bHQ7XG5cdFx0Y29uc3QgdmFsdWUgPSB0aGlzLmdldEV4cHJlc3Npb25XaXRoVHlwZShkYXRhUG9pbnQuVmFsdWUpO1xuXHRcdGNvbnN0IHZhbHVlQ29sb3IgPSBjcml0aWNhbGl0eUV4cHJlc3Npb25Gb3JNaWNyb2NoYXJ0O1xuXHRcdGNvbnN0IGRpc3BsYXlWYWx1ZSA9IChtZWFzdXJlRGF0YVBhdGg/LnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW1vbiBhcyBQcm9wZXJ0eUFubm90YXRpb25zX0NvbW1vbik/LlRleHRcblx0XHRcdD8gdGhpcy5nZXRFeHByZXNzaW9uV2l0aFR5cGUoXG5cdFx0XHRcdFx0KG1lYXN1cmVEYXRhUGF0aD8udGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uQ29tbW9uIGFzIFByb3BlcnR5QW5ub3RhdGlvbnNfQ29tbW9uKVxuXHRcdFx0XHRcdFx0Py5UZXh0IGFzIHVua25vd24gYXMgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPHN0cmluZz5cblx0XHRcdCAgKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGJhcnM6IDxTdGFja2VkQmFyTWljcm9DaGFydEJhciB2YWx1ZT17dmFsdWV9IGRpc3BsYXlWYWx1ZT17ZGlzcGxheVZhbHVlfSB2YWx1ZUNvbG9yPXt2YWx1ZUNvbG9yfSAvPlxuXHRcdH07XG5cdH0sXG5cblx0YXN5bmMgZ2V0SGFydmV5TWljcm9DaGFydEFnZ3JlZ2F0aW9ucyhcblx0XHRkYXRhUG9pbnQ6IERhdGFQb2ludCxcblx0XHRjcml0aWNhbGl0eUV4cHJlc3Npb25Gb3JNaWNyb2NoYXJ0OiBzdHJpbmcgfCB1bmRlZmluZWRcblx0KTogUHJvbWlzZTxQaWNrPCRIYXJ2ZXlCYWxsTWljcm9DaGFydFNldHRpbmdzLCBcIml0ZW1zXCI+IHwgdW5kZWZpbmVkPiB7XG5cdFx0Y29uc3QgSGFydmV5QmFsbE1pY3JvQ2hhcnRJdGVtID0gKGF3YWl0IGltcG9ydChcInNhcC9zdWl0ZS91aS9taWNyb2NoYXJ0L0hhcnZleUJhbGxNaWNyb0NoYXJ0SXRlbVwiKSkuZGVmYXVsdDtcblx0XHRjb25zdCBmcmFjdGlvbkxhYmVsID0gdGhpcy5nZXRFeHByZXNzaW9uV2l0aFR5cGUoZGF0YVBvaW50LlZhbHVlLCB7IHN0eWxlOiBcInNob3J0XCIgfSk7XG5cdFx0Y29uc3QgZnJhY3Rpb25WYWx1ZSA9IHRoaXMuZ2V0RXhwcmVzc2lvbldpdGhUeXBlKGRhdGFQb2ludC5WYWx1ZSk7XG5cdFx0Y29uc3QgY29sb3JWYWx1ZSA9IGNyaXRpY2FsaXR5RXhwcmVzc2lvbkZvck1pY3JvY2hhcnQ7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGl0ZW1zOiAoXG5cdFx0XHRcdDxIYXJ2ZXlCYWxsTWljcm9DaGFydEl0ZW0gZm9ybWF0dGVkTGFiZWw9e3RydWV9IGZyYWN0aW9uTGFiZWw9e2ZyYWN0aW9uTGFiZWx9IGZyYWN0aW9uPXtmcmFjdGlvblZhbHVlfSBjb2xvcj17Y29sb3JWYWx1ZX0gLz5cblx0XHRcdClcblx0XHR9O1xuXHR9LFxuXG5cdGFzeW5jIGdldENvbXBhcmlzb25NaWNyb0NoYXJ0QWdncmVnYXRpb25zKFxuXHRcdGRhdGFQb2ludDogRGF0YVBvaW50LFxuXHRcdGNyaXRpY2FsaXR5RXhwcmVzc2lvbkZvck1pY3JvY2hhcnQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRjaGFydDogQ2hhcnRcblx0KTogUHJvbWlzZTxQaWNrPCRDb21wYXJpc29uTWljcm9DaGFydFNldHRpbmdzLCBcImRhdGFcIj4+IHtcblx0XHRjb25zdCBDb21wYXJpc29uTWljcm9DaGFydERhdGEgPSAoYXdhaXQgaW1wb3J0KFwic2FwL3N1aXRlL3VpL21pY3JvY2hhcnQvQ29tcGFyaXNvbk1pY3JvQ2hhcnREYXRhXCIpKS5kZWZhdWx0O1xuXHRcdGNvbnN0IGFjdHVhbFZhbHVlRXhwcmVzc2lvbiA9IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhUG9pbnQuVmFsdWUpKTtcblx0XHRjb25zdCBkaXNwbGF5VmFsdWUgPSB0aGlzLmdldEV4cHJlc3Npb25XaXRoVHlwZShkYXRhUG9pbnQuVmFsdWUsIHsgc3R5bGU6IFwic2hvcnRcIiB9KTtcblx0XHRjb25zdCBjb21tb25UZXh0QW5ub3RhdGlvbiA9IGNoYXJ0LkRpbWVuc2lvbnNbMF0uJHRhcmdldD8uYW5ub3RhdGlvbnMuQ29tbW9uPy5UZXh0O1xuXHRcdGNvbnN0IHRpdGxlRXhwcmVzc2lvbiA9IGNvbW1vblRleHRBbm5vdGF0aW9uXG5cdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihjb21tb25UZXh0QW5ub3RhdGlvbikpXG5cdFx0XHQ6IGNvbXBpbGVFeHByZXNzaW9uKHBhdGhJbk1vZGVsKGNoYXJ0LkRpbWVuc2lvbnNbMF0udmFsdWUpKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PENvbXBhcmlzb25NaWNyb0NoYXJ0RGF0YVxuXHRcdFx0XHR2YWx1ZT17YWN0dWFsVmFsdWVFeHByZXNzaW9ufVxuXHRcdFx0XHRjb2xvcj17Y3JpdGljYWxpdHlFeHByZXNzaW9uRm9yTWljcm9jaGFydH1cblx0XHRcdFx0dGl0bGU9e3RpdGxlRXhwcmVzc2lvbn1cblx0XHRcdFx0ZGlzcGxheVZhbHVlPXtkaXNwbGF5VmFsdWV9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH0sXG5cblx0YXN5bmMgZ2V0Q29sdW1uTWljcm9DaGFydEFnZ3JlZ2F0aW9ucyhcblx0XHRkYXRhUG9pbnQ6IERhdGFQb2ludCxcblx0XHRjcml0aWNhbGl0eUV4cHJlc3Npb25Gb3JNaWNyb2NoYXJ0OiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0c2hvd09ubHlDaGFydD86IGJvb2xlYW5cblx0KTogUHJvbWlzZTxNaWNyb0NoYXJ0QWdncmVnYXRpb24+IHtcblx0XHRjb25zdCBDb2x1bW5NaWNyb0NoYXJ0RGF0YSA9IChhd2FpdCBpbXBvcnQoXCJzYXAvc3VpdGUvdWkvbWljcm9jaGFydC9Db2x1bW5NaWNyb0NoYXJ0RGF0YVwiKSkuZGVmYXVsdDtcblx0XHRjb25zdCBDb2x1bW5NaWNyb0NoYXJ0TGFiZWwgPSAoYXdhaXQgaW1wb3J0KFwic2FwL3N1aXRlL3VpL21pY3JvY2hhcnQvQ29sdW1uTWljcm9DaGFydExhYmVsXCIpKS5kZWZhdWx0O1xuXHRcdGNvbnN0IGNvbHVtbkNoYXJ0QWdncmVnYXRpb25zOiAkQ29sdW1uTWljcm9DaGFydFNldHRpbmdzID0ge307XG5cdFx0Y29uc3QgYWN0dWFsVmFsdWVFeHByZXNzaW9uID0gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFQb2ludC5WYWx1ZSkpO1xuXHRcdGNvbnN0IGNvbG9yQmluZGluZyA9IHRoaXMuY2FsY3VsYXRlQ29sb3JCaW5kaW5nKGRhdGFQb2ludCwgYWN0dWFsVmFsdWVFeHByZXNzaW9uLCBjcml0aWNhbGl0eUV4cHJlc3Npb25Gb3JNaWNyb2NoYXJ0KTtcblx0XHRjb2x1bW5DaGFydEFnZ3JlZ2F0aW9ucy5jb2x1bW5zID0gPENvbHVtbk1pY3JvQ2hhcnREYXRhIHZhbHVlPXthY3R1YWxWYWx1ZUV4cHJlc3Npb259IGNvbG9yPXtjb2xvckJpbmRpbmd9IC8+O1xuXHRcdGlmICghc2hvd09ubHlDaGFydCkge1xuXHRcdFx0Y29sdW1uQ2hhcnRBZ2dyZWdhdGlvbnMubGVmdEJvdHRvbUxhYmVsID0gPENvbHVtbk1pY3JvQ2hhcnRMYWJlbCAvPjtcblx0XHRcdGNvbHVtbkNoYXJ0QWdncmVnYXRpb25zLmxlZnRUb3BMYWJlbCA9IDxDb2x1bW5NaWNyb0NoYXJ0TGFiZWwgLz47XG5cdFx0XHRjb2x1bW5DaGFydEFnZ3JlZ2F0aW9ucy5yaWdodEJvdHRvbUxhYmVsID0gPENvbHVtbk1pY3JvQ2hhcnRMYWJlbCAvPjtcblx0XHRcdGNvbHVtbkNoYXJ0QWdncmVnYXRpb25zLnJpZ2h0VG9wTGFiZWwgPSA8Q29sdW1uTWljcm9DaGFydExhYmVsIC8+O1xuXHRcdH1cblx0XHRyZXR1cm4gY29sdW1uQ2hhcnRBZ2dyZWdhdGlvbnM7XG5cdH0sXG5cblx0YXN5bmMgZ2V0TGluZU1pY3JvQ2hhcnRBZ2dyYWdhdGlvbnMoXG5cdFx0bWljcm9DaGFydERhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8Q2hhcnQgfCBQcmVzZW50YXRpb25WYXJpYW50PiB8IHVuZGVmaW5lZCxcblx0XHRjaGFydFRhcmdldDogQ2hhcnQsXG5cdFx0dGFyZ2V0TmF2aWdhdGlvblBhdGg6IENvbnRleHRcblx0KTogUHJvbWlzZTxQaWNrPCRMaW5lTWljcm9DaGFydFNldHRpbmdzLCBcImxpbmVzXCI+PiB7XG5cdFx0Y29uc3QgTGluZU1pY3JvQ2hhcnRMaW5lID0gKGF3YWl0IGltcG9ydChcInNhcC9zdWl0ZS91aS9taWNyb2NoYXJ0L0xpbmVNaWNyb0NoYXJ0TGluZVwiKSkuZGVmYXVsdDtcblx0XHRjb25zdCBMaW5lTWljcm9DaGFydFBvaW50ID0gKGF3YWl0IGltcG9ydChcInNhcC9zdWl0ZS91aS9taWNyb2NoYXJ0L0xpbmVNaWNyb0NoYXJ0UG9pbnRcIikpLmRlZmF1bHQ7XG5cdFx0Y29uc3QgZGltZW5zaW9uRGF0YVBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxEYXRhTW9kZWxQcm9wZXJ0eT4oXG5cdFx0XHRtaWNyb0NoYXJ0RGF0YU1vZGVsT2JqZWN0UGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPENoYXJ0IHwgUHJlc2VudGF0aW9uVmFyaWFudD4sXG5cdFx0XHRjaGFydFRhcmdldC5EaW1lbnNpb25zWzBdLnZhbHVlXG5cdFx0KTtcblx0XHRjb25zdCBtZWFzdXJlcyA9IGNoYXJ0VGFyZ2V0Lk1lYXN1cmVzO1xuXHRcdGNvbnN0IGxpbmVzID0gW107XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG1lYXN1cmVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBEYXRhUG9pbnRQYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGg8RGF0YVBvaW50VHlwZT4oXG5cdFx0XHRcdG1pY3JvQ2hhcnREYXRhTW9kZWxPYmplY3RQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj4sXG5cdFx0XHRcdGNoYXJ0VGFyZ2V0Py5NZWFzdXJlQXR0cmlidXRlc1tpXT8uRGF0YVBvaW50Py52YWx1ZVxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IG1lYXN1cmVEYXRhUGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPE1lYXN1cmU+KFxuXHRcdFx0XHRtaWNyb0NoYXJ0RGF0YU1vZGVsT2JqZWN0UGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+LFxuXHRcdFx0XHRjaGFydFRhcmdldC5NZWFzdXJlc1tpXS52YWx1ZVxuXHRcdFx0KTtcblxuXHRcdFx0Y29uc3QgcG9pbnRzID0gTWljcm9DaGFydEhlbHBlci5nZXRBZ2dyZWdhdGlvbkZvck1pY3JvY2hhcnQoXG5cdFx0XHRcdFwiTGluZVBvaW50c1wiLFxuXHRcdFx0XHR0YXJnZXROYXZpZ2F0aW9uUGF0aD8uZ2V0T2JqZWN0KCksXG5cdFx0XHRcdERhdGFQb2ludFBhdGgsXG5cdFx0XHRcdHRhcmdldE5hdmlnYXRpb25QYXRoPy5nZXRPYmplY3QoXCJAc2FwdWkubmFtZVwiKSxcblx0XHRcdFx0Y2hhcnRUYXJnZXQuRGltZW5zaW9uc1swXSxcblx0XHRcdFx0bWVhc3VyZURhdGFQYXRoLFxuXHRcdFx0XHQobWljcm9DaGFydERhdGFNb2RlbE9iamVjdFBhdGg/LnRhcmdldE9iamVjdCBhcyBQcmVzZW50YXRpb25WYXJpYW50KT8uU29ydE9yZGVyIGFzIHVua25vd24gYXMgU29ydE9yZGVyVHlwZVtdLFxuXHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdHRydWVcblx0XHRcdCkgYXMgYHske3N0cmluZ319YDtcblxuXHRcdFx0Y29uc3QgeERhdGEgPSB0aGlzLmdldFhEYXRhKGRpbWVuc2lvbkRhdGFQYXRoLCBtaWNyb0NoYXJ0RGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdFx0XHRjb25zdCB5RGF0YSA9IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihEYXRhUG9pbnRQYXRoLnRhcmdldE9iamVjdD8uVmFsdWUpKTtcblxuXHRcdFx0bGluZXMucHVzaChcblx0XHRcdFx0PExpbmVNaWNyb0NoYXJ0TGluZSBwb2ludHM9e3BvaW50c30+XG5cdFx0XHRcdFx0e3sgcG9pbnRzOiA8TGluZU1pY3JvQ2hhcnRQb2ludCB4PXt4RGF0YX0geT17eURhdGF9PjwvTGluZU1pY3JvQ2hhcnRQb2ludD4gfX1cblx0XHRcdFx0PC9MaW5lTWljcm9DaGFydExpbmU+XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7IGxpbmVzOiBsaW5lcyB9O1xuXHR9LFxuXG5cdGdldFhEYXRhKFxuXHRcdGRpbWVuc2lvbkRhdGFQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFNb2RlbFByb3BlcnR5Pixcblx0XHRtaWNyb0NoYXJ0RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxDaGFydCB8IFByZXNlbnRhdGlvblZhcmlhbnQ+IHwgdW5kZWZpbmVkXG5cdCk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0XHRsZXQgeERhdGE7XG5cdFx0Y29uc3QgcHJvcGVydHlUeXBlID0gZGltZW5zaW9uRGF0YVBhdGg/LnRhcmdldE9iamVjdD8udHlwZSBhcyBzdHJpbmc7XG5cdFx0Y29uc3QgcHJvcEFubm90YXRpb25zID0gZGltZW5zaW9uRGF0YVBhdGgudGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucztcblx0XHRpZiAoXG5cdFx0XHRwcm9wZXJ0eVR5cGUgPT09IFwiRWRtLkRhdGVcIiB8fFxuXHRcdFx0KGRpbWVuc2lvbkRhdGFQYXRoLnRhcmdldE9iamVjdD8udHlwZSA9PT0gXCJFZG0uU3RyaW5nXCIgJiZcblx0XHRcdFx0TWljcm9DaGFydEhlbHBlci5nZXRDYWxlbmRhclBhdHRlcm4ocHJvcGVydHlUeXBlLCBkaW1lbnNpb25EYXRhUGF0aC50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zLCB0cnVlKSlcblx0XHQpIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IGRpbWVuc2lvbkRhdGFQYXRoPy50YXJnZXRPYmplY3Q/Lm5hbWU7XG5cdFx0XHRjb25zdCBwYXR0ZXJuID0gcHJvcEFubm90YXRpb25zICYmIE1pY3JvQ2hhcnRIZWxwZXIuZ2V0Q2FsZW5kYXJQYXR0ZXJuKHByb3BlcnR5VHlwZSwgcHJvcEFubm90YXRpb25zLCB0cnVlKTtcblx0XHRcdGlmIChwYXR0ZXJuICYmIFtcIkVkbS5EYXRlXCIsIFwiRWRtLlN0cmluZ1wiXS5zb21lKCh0eXBlKSA9PiB0eXBlID09PSBwcm9wZXJ0eVR5cGUpKSB7XG5cdFx0XHRcdHhEYXRhID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0Zm9ybWF0UmVzdWx0KFtwYXRoSW5Nb2RlbChwcm9wZXJ0eVBhdGgpLCBwYXR0ZXJuLCBwcm9wZXJ0eVBhdGhdLCB2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0U3RyaW5nRGltZW5zaW9uKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRkaW1lbnNpb25EYXRhUGF0aC5jb250ZXh0TG9jYXRpb24gPSBtaWNyb0NoYXJ0RGF0YU1vZGVsT2JqZWN0UGF0aDtcblx0XHRcdHhEYXRhID0gZ2V0VmFsdWVCaW5kaW5nKGRpbWVuc2lvbkRhdGFQYXRoLCB7fSk7XG5cdFx0fVxuXHRcdHJldHVybiB4RGF0YTtcblx0fSxcblx0YXN5bmMgZ2V0QXJlYU1pY3JvQ2hhcnRBZ2dyZWdhdGlvbnMoXG5cdFx0Y2hhcnRUYXJnZXQ6IENoYXJ0LFxuXHRcdG1pY3JvQ2hhcnREYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByZXNlbnRhdGlvblZhcmlhbnQgfCBDaGFydD4sXG5cdFx0dGFyZ2V0TmF2aWdhdGlvblBhdGg6IENvbnRleHQsXG5cdFx0c2hvd09ubHlDaGFydD86IGJvb2xlYW5cblx0KTogUHJvbWlzZTxcblx0XHRQaWNrPFxuXHRcdFx0JEFyZWFNaWNyb0NoYXJ0U2V0dGluZ3MsXG5cdFx0XHR8IFwiY2hhcnRcIlxuXHRcdFx0fCBcInRhcmdldFwiXG5cdFx0XHR8IFwiZmlyc3RYTGFiZWxcIlxuXHRcdFx0fCBcImZpcnN0WUxhYmVsXCJcblx0XHRcdHwgXCJsYXN0WExhYmVsXCJcblx0XHRcdHwgXCJsYXN0WUxhYmVsXCJcblx0XHRcdHwgXCJtaW5UaHJlc2hvbGRcIlxuXHRcdFx0fCBcIm1heFRocmVzaG9sZFwiXG5cdFx0XHR8IFwiaW5uZXJNaW5UaHJlc2hvbGRcIlxuXHRcdFx0fCBcImlubmVyTWF4VGhyZXNob2xkXCJcblx0XHQ+XG5cdD4ge1xuXHRcdGNvbnN0IEFyZWFNaWNyb0NoYXJ0SXRlbSA9IChhd2FpdCBpbXBvcnQoXCJzYXAvc3VpdGUvdWkvbWljcm9jaGFydC9BcmVhTWljcm9DaGFydEl0ZW1cIikpLmRlZmF1bHQ7XG5cdFx0Y29uc3QgQXJlYU1pY3JvQ2hhcnRQb2ludCA9IChhd2FpdCBpbXBvcnQoXCJzYXAvc3VpdGUvdWkvbWljcm9jaGFydC9BcmVhTWljcm9DaGFydFBvaW50XCIpKS5kZWZhdWx0O1xuXHRcdGNvbnN0IEFyZWFNaWNyb0NoYXJ0TGFiZWwgPSAoYXdhaXQgaW1wb3J0KFwic2FwL3N1aXRlL3VpL21pY3JvY2hhcnQvQXJlYU1pY3JvQ2hhcnRMYWJlbFwiKSkuZGVmYXVsdDtcblx0XHRjb25zdCBkYXRhUG9pbnQgPSBjaGFydFRhcmdldD8uTWVhc3VyZUF0dHJpYnV0ZXNbMF0/LkRhdGFQb2ludD8uJHRhcmdldCBhcyBEYXRhUG9pbnQ7XG5cdFx0Y29uc3QgbWVhc3VyZURhdGFQYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGg8TWVhc3VyZT4obWljcm9DaGFydERhdGFNb2RlbE9iamVjdFBhdGgsIGNoYXJ0VGFyZ2V0Lk1lYXN1cmVzWzBdLnZhbHVlKTtcblx0XHRjb25zdCBkaW1lbnNpb25EYXRhUGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPERhdGFNb2RlbFByb3BlcnR5PihtaWNyb0NoYXJ0RGF0YU1vZGVsT2JqZWN0UGF0aCwgY2hhcnRUYXJnZXQuRGltZW5zaW9uc1swXS52YWx1ZSk7XG5cdFx0Y29uc3QgRGF0YVBvaW50UGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPERhdGFQb2ludFR5cGU+KFxuXHRcdFx0bWljcm9DaGFydERhdGFNb2RlbE9iamVjdFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPixcblx0XHRcdGNoYXJ0VGFyZ2V0Py5NZWFzdXJlQXR0cmlidXRlc1swXT8uRGF0YVBvaW50Py52YWx1ZVxuXHRcdCk7XG5cdFx0Y29uc3QgdGFyZ2V0TmF2aWdhdGlvbkRhdGFNb2RlbE9iamVjdDogRGF0YU1vZGVsT2JqZWN0UGF0aDxFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHk+ID1cblx0XHRcdE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHModGFyZ2V0TmF2aWdhdGlvblBhdGgpO1xuXHRcdGNvbnN0IGdldEFyZWFNaWNyb0NoYXJ0SXRlbSA9IChcblx0XHRcdHk6IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFByaW1pdGl2ZVR5cGU+LFxuXHRcdFx0Y29sb3I/OiBzdHJpbmcsXG5cdFx0XHRpc0NoYXJ0QWdncmVnYXRpb24/OiBib29sZWFuXG5cdFx0KTogSW5zdGFuY2VUeXBlPHR5cGVvZiBBcmVhTWljcm9DaGFydEl0ZW0+ID0+IHtcblx0XHRcdGxldCBwb2ludHM7XG5cdFx0XHRpZiAoaXNDaGFydEFnZ3JlZ2F0aW9uKSB7XG5cdFx0XHRcdHBvaW50cyA9IE1pY3JvQ2hhcnRIZWxwZXIuZ2V0QWdncmVnYXRpb25Gb3JNaWNyb2NoYXJ0KFxuXHRcdFx0XHRcdFwiUG9pbnRzXCIsXG5cdFx0XHRcdFx0dGFyZ2V0TmF2aWdhdGlvblBhdGg/LmdldE9iamVjdCgpLFxuXHRcdFx0XHRcdERhdGFQb2ludFBhdGgsXG5cdFx0XHRcdFx0dGFyZ2V0TmF2aWdhdGlvblBhdGg/LmdldE9iamVjdChcIkBzYXB1aS5uYW1lXCIpLFxuXHRcdFx0XHRcdGNoYXJ0VGFyZ2V0LkRpbWVuc2lvbnNbMF0sXG5cdFx0XHRcdFx0bWVhc3VyZURhdGFQYXRoLFxuXHRcdFx0XHRcdChtaWNyb0NoYXJ0RGF0YU1vZGVsT2JqZWN0UGF0aD8udGFyZ2V0T2JqZWN0IGFzIFByZXNlbnRhdGlvblZhcmlhbnQpPy5Tb3J0T3JkZXIgYXMgdW5rbm93biBhc1xuXHRcdFx0XHRcdFx0fCBTb3J0T3JkZXJUeXBlW11cblx0XHRcdFx0XHRcdHwgdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFwiXCIsXG5cdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHQpIGFzIGB7JHtzdHJpbmd9fWA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwb2ludHMgPSB7XG5cdFx0XHRcdFx0cGF0aDpcblx0XHRcdFx0XHRcdCh0YXJnZXROYXZpZ2F0aW9uRGF0YU1vZGVsT2JqZWN0LnRhcmdldE9iamVjdD8uX3R5cGUgPT09IFwiRW50aXR5U2V0XCIgPyBcIi9cIiA6IFwiXCIpICtcblx0XHRcdFx0XHRcdHRhcmdldE5hdmlnYXRpb25EYXRhTW9kZWxPYmplY3QudGFyZ2V0T2JqZWN0Py5uYW1lXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8QXJlYU1pY3JvQ2hhcnRJdGVtIGNvbG9yPXtjb2xvcn0gcG9pbnRzPXtwb2ludHN9PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRwb2ludHM6IDxBcmVhTWljcm9DaGFydFBvaW50IHg9e3h9IHk9e2NvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih5KSl9PjwvQXJlYU1pY3JvQ2hhcnRQb2ludD5cblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L0FyZWFNaWNyb0NoYXJ0SXRlbT5cblx0XHRcdCk7XG5cdFx0fTtcblx0XHRjb25zdCBhZ2dyZWdhdGlvbjogJEFyZWFNaWNyb0NoYXJ0U2V0dGluZ3MgPSB7fTtcblx0XHRjb25zdCB4ID0gdGhpcy5nZXRYRGF0YShkaW1lbnNpb25EYXRhUGF0aCwgbWljcm9DaGFydERhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRcdGFnZ3JlZ2F0aW9uLmNoYXJ0ID0gZ2V0QXJlYU1pY3JvQ2hhcnRJdGVtKGRhdGFQb2ludC5WYWx1ZSwgdW5kZWZpbmVkLCB0cnVlKTtcblx0XHRhZ2dyZWdhdGlvbi50YXJnZXQgPSBnZXRBcmVhTWljcm9DaGFydEl0ZW0oZGF0YVBvaW50LlRhcmdldFZhbHVlKTtcblx0XHRpZiAoIXNob3dPbmx5Q2hhcnQpIHtcblx0XHRcdGFnZ3JlZ2F0aW9uLmZpcnN0WExhYmVsID0gPEFyZWFNaWNyb0NoYXJ0TGFiZWwgLz47XG5cdFx0XHRhZ2dyZWdhdGlvbi5maXJzdFlMYWJlbCA9IDxBcmVhTWljcm9DaGFydExhYmVsIC8+O1xuXHRcdFx0YWdncmVnYXRpb24ubGFzdFhMYWJlbCA9IDxBcmVhTWljcm9DaGFydExhYmVsIC8+O1xuXHRcdFx0YWdncmVnYXRpb24ubGFzdFlMYWJlbCA9IDxBcmVhTWljcm9DaGFydExhYmVsIC8+O1xuXHRcdH1cblx0XHRjb25zdCBpbXByb3ZlbWVudERpcmVjdGlvbiA9IERhdGFQb2ludFBhdGg/LnRhcmdldE9iamVjdD8uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbj8uSW1wcm92ZW1lbnREaXJlY3Rpb247XG5cdFx0aWYgKGltcHJvdmVtZW50RGlyZWN0aW9uID09PSBcIlVJLkltcHJvdmVtZW50RGlyZWN0aW9uVHlwZS9NaW5pbWl6ZVwiKSB7XG5cdFx0XHRhZ2dyZWdhdGlvbi5taW5UaHJlc2hvbGQgPSBnZXRBcmVhTWljcm9DaGFydEl0ZW0oZGF0YVBvaW50Py5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uPy5Ub2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZSwgXCJHb29kXCIpO1xuXHRcdFx0YWdncmVnYXRpb24ubWF4VGhyZXNob2xkID0gZ2V0QXJlYU1pY3JvQ2hhcnRJdGVtKGRhdGFQb2ludD8uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbj8uRGV2aWF0aW9uUmFuZ2VIaWdoVmFsdWUsIFwiRXJyb3JcIik7XG5cdFx0fSBlbHNlIGlmIChpbXByb3ZlbWVudERpcmVjdGlvbiA9PT0gXCJVSS5JbXByb3ZlbWVudERpcmVjdGlvblR5cGUvTWF4aW1pemVcIikge1xuXHRcdFx0YWdncmVnYXRpb24ubWluVGhyZXNob2xkID0gZ2V0QXJlYU1pY3JvQ2hhcnRJdGVtKGRhdGFQb2ludD8uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbj8uRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZSwgXCJFcnJvclwiKTtcblx0XHRcdGFnZ3JlZ2F0aW9uLm1heFRocmVzaG9sZCA9IGdldEFyZWFNaWNyb0NoYXJ0SXRlbShkYXRhUG9pbnQ/LkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24/LlRvbGVyYW5jZVJhbmdlTG93VmFsdWUsIFwiR29vZFwiKTtcblx0XHR9IGVsc2UgaWYgKGltcHJvdmVtZW50RGlyZWN0aW9uID09PSBcIlVJLkltcHJvdmVtZW50RGlyZWN0aW9uVHlwZS9UYXJnZXRcIikge1xuXHRcdFx0YWdncmVnYXRpb24ubWluVGhyZXNob2xkID0gZ2V0QXJlYU1pY3JvQ2hhcnRJdGVtKGRhdGFQb2ludD8uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbj8uRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZSwgXCJFcnJvclwiKTtcblx0XHRcdGFnZ3JlZ2F0aW9uLm1heFRocmVzaG9sZCA9IGdldEFyZWFNaWNyb0NoYXJ0SXRlbShkYXRhUG9pbnQ/LkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24/LkRldmlhdGlvblJhbmdlSGlnaFZhbHVlLCBcIkVycm9yXCIpO1xuXHRcdFx0YWdncmVnYXRpb24uaW5uZXJNaW5UaHJlc2hvbGQgPSBnZXRBcmVhTWljcm9DaGFydEl0ZW0oZGF0YVBvaW50Py5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uPy5Ub2xlcmFuY2VSYW5nZUxvd1ZhbHVlLCBcIkdvb2RcIik7XG5cdFx0XHRhZ2dyZWdhdGlvbi5pbm5lck1heFRocmVzaG9sZCA9IGdldEFyZWFNaWNyb0NoYXJ0SXRlbShkYXRhUG9pbnQ/LkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24/LlRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlLCBcIkdvb2RcIik7XG5cdFx0fVxuXHRcdHJldHVybiBhZ2dyZWdhdGlvbjtcblx0fSxcblxuXHRnZXRCdWxsZXRNaWNyb0NoYXJ0UHJvcGVydGllcyhcblx0XHRtaWNyb0NoYXJ0UHJvcGVydGllczogTWljcm9DaGFydFNldHRpbmdzLFxuXHRcdGRhdGFQb2ludDogRGF0YVBvaW50XG5cdCk6IFBhcnRpYWw8UHJvcGVydGllc09mPE1pY3JvQ2hhcnRTZXR0aW5ncz4+IHtcblx0XHQobWljcm9DaGFydFByb3BlcnRpZXMgYXMgJEJ1bGxldE1pY3JvQ2hhcnRTZXR0aW5ncykudGFyZ2V0VmFsdWUgPSBkYXRhUG9pbnQuVGFyZ2V0VmFsdWVcblx0XHRcdD8gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFQb2ludC5UYXJnZXRWYWx1ZSkpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHQobWljcm9DaGFydFByb3BlcnRpZXMgYXMgJEJ1bGxldE1pY3JvQ2hhcnRTZXR0aW5ncykuZm9yZWNhc3RWYWx1ZSA9IGRhdGFQb2ludC5Gb3JlY2FzdFZhbHVlXG5cdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhUG9pbnQuRm9yZWNhc3RWYWx1ZSkpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHQobWljcm9DaGFydFByb3BlcnRpZXMgYXMgJEJ1bGxldE1pY3JvQ2hhcnRTZXR0aW5ncykubWF4VmFsdWUgPSBkYXRhUG9pbnQuTWF4aW11bVZhbHVlXG5cdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKGNvbnN0YW50KGRhdGFQb2ludC5NYXhpbXVtVmFsdWU/LnZhbHVlT2YoKSkpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHQobWljcm9DaGFydFByb3BlcnRpZXMgYXMgJEJ1bGxldE1pY3JvQ2hhcnRTZXR0aW5ncykubWluVmFsdWUgPSBkYXRhUG9pbnQuTWluaW11bVZhbHVlXG5cdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKGNvbnN0YW50KGRhdGFQb2ludC5NaW5pbXVtVmFsdWU/LnZhbHVlT2YoKSkpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHQobWljcm9DaGFydFByb3BlcnRpZXMgYXMgJEJ1bGxldE1pY3JvQ2hhcnRTZXR0aW5ncykuYWN0dWFsVmFsdWVMYWJlbCA9IGRhdGFQb2ludC5WYWx1ZVxuXHRcdFx0PyBNaWNyb0NoYXJ0SGVscGVyLmdldEV4cHJlc3Npb25XaXRoVHlwZShkYXRhUG9pbnQuVmFsdWUsIHsgc3R5bGU6IFwic2hvcnRcIiB9KVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0KG1pY3JvQ2hhcnRQcm9wZXJ0aWVzIGFzICRCdWxsZXRNaWNyb0NoYXJ0U2V0dGluZ3MpLnRhcmdldFZhbHVlTGFiZWwgPSBkYXRhUG9pbnQuVGFyZ2V0VmFsdWVcblx0XHRcdD8gTWljcm9DaGFydEhlbHBlci5nZXRFeHByZXNzaW9uV2l0aFR5cGUoZGF0YVBvaW50LlRhcmdldFZhbHVlLCB7IHN0eWxlOiBcInNob3J0XCIgfSlcblx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdChtaWNyb0NoYXJ0UHJvcGVydGllcyBhcyAkQnVsbGV0TWljcm9DaGFydFNldHRpbmdzKS5zaG93RGVsdGFWYWx1ZSA9XG5cdFx0XHRkYXRhUG9pbnQuVmlzdWFsaXphdGlvbiAmJiBkYXRhUG9pbnQuVmlzdWFsaXphdGlvbiA9PT0gVmlzdWFsaXphdGlvblR5cGUuRGVsdGFCdWxsZXRDaGFydDtcblx0XHQobWljcm9DaGFydFByb3BlcnRpZXMgYXMgJEJ1bGxldE1pY3JvQ2hhcnRTZXR0aW5ncykubW9kZSA9IChtaWNyb0NoYXJ0UHJvcGVydGllcyBhcyAkQnVsbGV0TWljcm9DaGFydFNldHRpbmdzKS5zaG93RGVsdGFWYWx1ZVxuXHRcdFx0PyBcIkRlbHRhXCJcblx0XHRcdDogdW5kZWZpbmVkO1xuXG5cdFx0cmV0dXJuIG1pY3JvQ2hhcnRQcm9wZXJ0aWVzO1xuXHR9LFxuXG5cdGdldFJhZGlhbE1pY3JvQ2hhcnRQcm9wZXJ0aWVzKFxuXHRcdG1pY3JvQ2hhcnRQcm9wZXJ0aWVzOiBNaWNyb0NoYXJ0U2V0dGluZ3MsXG5cdFx0ZGF0YVBvaW50OiBEYXRhUG9pbnRcblx0KTogUGFydGlhbDxQcm9wZXJ0aWVzT2Y8TWljcm9DaGFydFNldHRpbmdzPj4ge1xuXHRcdChtaWNyb0NoYXJ0UHJvcGVydGllcyBhcyAkUmFkaWFsTWljcm9DaGFydFNldHRpbmdzKS50b3RhbCA9IGRhdGFQb2ludC5UYXJnZXRWYWx1ZVxuXHRcdFx0PyBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YVBvaW50LlRhcmdldFZhbHVlKSlcblx0XHRcdDogMTAwO1xuXHRcdGNvbnN0IHZhbHVlID0gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFQb2ludC5WYWx1ZSkpO1xuXHRcdChtaWNyb0NoYXJ0UHJvcGVydGllcyBhcyAkUmFkaWFsTWljcm9DaGFydFNldHRpbmdzKS5mcmFjdGlvbiA9IHZhbHVlO1xuXHRcdChtaWNyb0NoYXJ0UHJvcGVydGllcyBhcyAkUmFkaWFsTWljcm9DaGFydFNldHRpbmdzKS5wZXJjZW50YWdlID0gIWRhdGFQb2ludC5UYXJnZXRWYWx1ZSA/IHZhbHVlIDogdW5kZWZpbmVkO1xuXG5cdFx0Y29uc3QgY29sb3JFeHByZXNzaW9uID0gZGF0YVBvaW50LkNyaXRpY2FsaXR5ID8gYnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlDb2xvck1pY3JvQ2hhcnQoZGF0YVBvaW50KSA6IHVuZGVmaW5lZDtcblxuXHRcdChtaWNyb0NoYXJ0UHJvcGVydGllcyBhcyAkUmFkaWFsTWljcm9DaGFydFNldHRpbmdzKS52YWx1ZUNvbG9yID0gTWljcm9DaGFydEhlbHBlci5jYWxjdWxhdGVDb2xvckJpbmRpbmcoXG5cdFx0XHRkYXRhUG9pbnQsXG5cdFx0XHR2YWx1ZSxcblx0XHRcdGNvbG9yRXhwcmVzc2lvblxuXHRcdCk7XG5cdFx0cmV0dXJuIG1pY3JvQ2hhcnRQcm9wZXJ0aWVzO1xuXHR9LFxuXG5cdGdldEhhcnZleU1pY3JvQ2hhcnRQcm9wZXJ0aWVzKFxuXHRcdG1pY3JvQ2hhcnRQcm9wZXJ0aWVzOiBNaWNyb0NoYXJ0U2V0dGluZ3MsXG5cdFx0ZGF0YVBvaW50OiBEYXRhUG9pbnRcblx0KTogUGFydGlhbDxQcm9wZXJ0aWVzT2Y8TWljcm9DaGFydFNldHRpbmdzPj4ge1xuXHRcdChtaWNyb0NoYXJ0UHJvcGVydGllcyBhcyAkSGFydmV5QmFsbE1pY3JvQ2hhcnRTZXR0aW5ncykuZm9ybWF0dGVkTGFiZWwgPSB0cnVlO1xuXHRcdChtaWNyb0NoYXJ0UHJvcGVydGllcyBhcyAkSGFydmV5QmFsbE1pY3JvQ2hhcnRTZXR0aW5ncykudG90YWxMYWJlbCA9IE1pY3JvQ2hhcnRIZWxwZXIuZ2V0RXhwcmVzc2lvbldpdGhUeXBlKFxuXHRcdFx0ZGF0YVBvaW50Lk1heGltdW1WYWx1ZSxcblx0XHRcdHtcblx0XHRcdFx0c3R5bGU6IFwic2hvcnRcIlxuXHRcdFx0fVxuXHRcdCk7XG5cdFx0KG1pY3JvQ2hhcnRQcm9wZXJ0aWVzIGFzICRIYXJ2ZXlCYWxsTWljcm9DaGFydFNldHRpbmdzKS50b3RhbCA9IE1pY3JvQ2hhcnRIZWxwZXIuZ2V0RXhwcmVzc2lvbldpdGhUeXBlKGRhdGFQb2ludC5NYXhpbXVtVmFsdWUpO1xuXHRcdChtaWNyb0NoYXJ0UHJvcGVydGllcyBhcyAkSGFydmV5QmFsbE1pY3JvQ2hhcnRTZXR0aW5ncykuY29sb3JQYWxldHRlID0gTWljcm9DaGFydEhlbHBlci5nZXRDb2xvclBhbGV0dGVGb3JNaWNyb0NoYXJ0KGRhdGFQb2ludCk7XG5cdFx0cmV0dXJuIG1pY3JvQ2hhcnRQcm9wZXJ0aWVzO1xuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBNaWNyb0NoYXJ0SGVscGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBOENBO0VBS0E7RUFFQTtFQXVEQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLE1BQU1BLGdCQUFnQixHQUFHO0lBQ3hCO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDQyxpQkFBaUIsRUFBRSxTQUFBQSxDQUFVQyxLQUFhLEVBQUVDLFFBQXFDLEVBQWM7TUFDOUYsTUFBTUMsSUFBSSxHQUFHRCxRQUFRLENBQUNFLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLENBQUM7TUFDdkMsSUFBSUYsSUFBSSxDQUFDRyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtRQUNwQyxPQUFPQyxVQUFVLENBQUNDLEtBQUs7TUFDeEIsQ0FBQyxNQUFNLElBQUlMLElBQUksQ0FBQ0csUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUU7UUFDM0MsT0FBT0MsVUFBVSxDQUFDRSxRQUFRO01BQzNCO01BQ0EsT0FBT0YsVUFBVSxDQUFDRyxPQUFPO0lBQzFCLENBQUM7SUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0NDLHVCQUF1QixFQUFFLFNBQUFBLENBQ3hCQyxnQkFBOEMsRUFDOUNDLHFCQUFpRSxFQUNqRUMsU0FBaUIsRUFDakJDLGlCQUEyQixFQUNL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
@@ -109,7 +109,6 @@ export type MicroChartSettings =
109
109
  /**
110
110
  * Helper class used by MDC_Controls to handle SAP Fiori elements for OData V4
111
111
  * @private
112
- * @experimental This module is only for internal/experimental use!
113
112
  */
114
113
  const MicroChartHelper = {
115
114
  /**