@sapui5/sap.fe.macros 1.139.0 → 1.141.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (254) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Chart.js +53 -2
  4. package/src/sap/fe/macros/Chart.tsx +55 -0
  5. package/src/sap/fe/macros/CollaborativeDraftHandler.js +230 -0
  6. package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +218 -0
  7. package/src/sap/fe/macros/CommonHelper.js +59 -15
  8. package/src/sap/fe/macros/CommonHelper.ts +65 -14
  9. package/src/sap/fe/macros/ConditionalSwitch.js +174 -0
  10. package/src/sap/fe/macros/ConditionalSwitch.tsx +141 -0
  11. package/src/sap/fe/macros/ConditionalSwitchProperty.js +78 -0
  12. package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +62 -0
  13. package/src/sap/fe/macros/Field.js +78 -64
  14. package/src/sap/fe/macros/Field.ts +97 -68
  15. package/src/sap/fe/macros/FooterContent.js +5 -2
  16. package/src/sap/fe/macros/FooterContent.tsx +4 -1
  17. package/src/sap/fe/macros/MacroAPI.js +9 -4
  18. package/src/sap/fe/macros/MacroAPI.ts +9 -4
  19. package/src/sap/fe/macros/MessageButton.js +1 -2
  20. package/src/sap/fe/macros/MessageButton.tsx +0 -1
  21. package/src/sap/fe/macros/MultiValueField.js +10 -7
  22. package/src/sap/fe/macros/MultiValueField.tsx +7 -3
  23. package/src/sap/fe/macros/Page.js +5 -7
  24. package/src/sap/fe/macros/Page.tsx +4 -6
  25. package/src/sap/fe/macros/Paginator.js +9 -4
  26. package/src/sap/fe/macros/Paginator.tsx +12 -3
  27. package/src/sap/fe/macros/RichTextEditor.js +3 -2
  28. package/src/sap/fe/macros/RichTextEditor.tsx +2 -1
  29. package/src/sap/fe/macros/Share.js +14 -2
  30. package/src/sap/fe/macros/Share.tsx +13 -0
  31. package/src/sap/fe/macros/Status.js +251 -0
  32. package/src/sap/fe/macros/Status.tsx +212 -0
  33. package/src/sap/fe/macros/ValueHelp.js +4 -28
  34. package/src/sap/fe/macros/ValueHelp.tsx +2 -42
  35. package/src/sap/fe/macros/ai/EasyFillDialog.js +11 -17
  36. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +11 -16
  37. package/src/sap/fe/macros/ai/EasyFilterBar.js +246 -97
  38. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +302 -106
  39. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +76 -33
  40. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +89 -40
  41. package/src/sap/fe/macros/ai/SummarizationButton.js +2 -2
  42. package/src/sap/fe/macros/ai/SummarizationButton.tsx +1 -1
  43. package/src/sap/fe/macros/chart/Chart.js +2 -2
  44. package/src/sap/fe/macros/chart/Chart.tsx +1 -1
  45. package/src/sap/fe/macros/chart/ChartHelper.js +1 -2
  46. package/src/sap/fe/macros/chart/ChartHelper.ts +0 -1
  47. package/src/sap/fe/macros/chart/ChartRuntime.js +1 -2
  48. package/src/sap/fe/macros/chart/ChartRuntime.ts +0 -1
  49. package/src/sap/fe/macros/chart/MdcChartTemplate.js +5 -5
  50. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +5 -5
  51. package/src/sap/fe/macros/contentSwitcher/ContentSwitcher.js +9 -2
  52. package/src/sap/fe/macros/contentSwitcher/ContentSwitcher.tsx +8 -0
  53. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +5 -1
  54. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +4 -0
  55. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.js +4 -2
  56. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +3 -1
  57. package/src/sap/fe/macros/controls/FilterBar.js +14 -5
  58. package/src/sap/fe/macros/controls/FilterBar.ts +3 -0
  59. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +2 -2
  60. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -2
  61. package/src/sap/fe/macros/controls/RadioButtons.js +61 -38
  62. package/src/sap/fe/macros/controls/RadioButtons.tsx +39 -18
  63. package/src/sap/fe/macros/controls/Section.js +4 -3
  64. package/src/sap/fe/macros/controls/Section.ts +3 -2
  65. package/src/sap/fe/macros/controls/section/SubSection.js +63 -8
  66. package/src/sap/fe/macros/controls/section/SubSection.ts +67 -1
  67. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +43 -4
  68. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +48 -1
  69. package/src/sap/fe/macros/designtime/Designtime.helper.js +28 -1
  70. package/src/sap/fe/macros/designtime/Designtime.helper.ts +27 -0
  71. package/src/sap/fe/macros/field/Field.js +2 -2
  72. package/src/sap/fe/macros/field/Field.tsx +1 -1
  73. package/src/sap/fe/macros/field/FieldBaseDelegate.js +13 -7
  74. package/src/sap/fe/macros/field/FieldBaseDelegate.ts +12 -8
  75. package/src/sap/fe/macros/field/FieldFormatOptions.js +25 -2
  76. package/src/sap/fe/macros/field/FieldFormatOptions.ts +13 -0
  77. package/src/sap/fe/macros/field/FieldHelper.js +2 -2
  78. package/src/sap/fe/macros/field/FieldHelper.ts +1 -4
  79. package/src/sap/fe/macros/field/FieldRuntime.js +1 -2
  80. package/src/sap/fe/macros/field/FieldRuntime.ts +0 -1
  81. package/src/sap/fe/macros/field/FieldTemplating.js +3 -3
  82. package/src/sap/fe/macros/field/FieldTemplating.ts +4 -2
  83. package/src/sap/fe/macros/filter/FilterUtils.js +233 -5
  84. package/src/sap/fe/macros/filter/FilterUtils.ts +291 -7
  85. package/src/sap/fe/macros/filterBar/FilterBar.block.js +5 -3
  86. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +4 -2
  87. package/src/sap/fe/macros/filterBar/FilterBar.js +2 -2
  88. package/src/sap/fe/macros/filterBar/FilterBar.tsx +1 -1
  89. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +63 -27
  90. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +49 -3
  91. package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +5 -3
  92. package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +5 -2
  93. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +7 -2
  94. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +6 -1
  95. package/src/sap/fe/macros/form/Form.block.js +7 -8
  96. package/src/sap/fe/macros/form/Form.block.ts +4 -6
  97. package/src/sap/fe/macros/form/Form.js +1 -4
  98. package/src/sap/fe/macros/form/Form.tsx +0 -3
  99. package/src/sap/fe/macros/form/FormContainer.block.js +555 -5
  100. package/src/sap/fe/macros/form/FormContainer.block.ts +665 -7
  101. package/src/sap/fe/macros/form/FormContainer.fragment.xml +1 -0
  102. package/src/sap/fe/macros/form/FormDelegate.js +24 -8
  103. package/src/sap/fe/macros/form/FormDelegate.ts +29 -7
  104. package/src/sap/fe/macros/form/FormHelper.js +1 -2
  105. package/src/sap/fe/macros/form/FormHelper.ts +0 -1
  106. package/src/sap/fe/macros/fpm/CustomFragment.block.js +1 -2
  107. package/src/sap/fe/macros/fpm/CustomFragment.block.ts +0 -1
  108. package/src/sap/fe/macros/internal/ActionCommand.block.js +1 -2
  109. package/src/sap/fe/macros/internal/ActionCommand.block.ts +0 -1
  110. package/src/sap/fe/macros/internal/DataPoint.js +3 -2
  111. package/src/sap/fe/macros/internal/DataPoint.tsx +10 -1
  112. package/src/sap/fe/macros/internal/FilterField.block.js +19 -5
  113. package/src/sap/fe/macros/internal/FilterField.block.ts +16 -4
  114. package/src/sap/fe/macros/internal/field/DisplayStyle.js +9 -3
  115. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +10 -2
  116. package/src/sap/fe/macros/internal/field/EditStyle.js +21 -4
  117. package/src/sap/fe/macros/internal/field/EditStyle.tsx +18 -4
  118. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +3 -2
  119. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +5 -1
  120. package/src/sap/fe/macros/internal/filterField/FilterFieldTemplate.fragment.xml +1 -0
  121. package/src/sap/fe/macros/internal/helpers/ActionHelper.js +36 -5
  122. package/src/sap/fe/macros/internal/helpers/ActionHelper.ts +34 -4
  123. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.js +46 -8
  124. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.ts +60 -6
  125. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +38 -2
  126. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +37 -2
  127. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +1 -1
  128. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +10 -3
  129. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +13 -2
  130. package/src/sap/fe/macros/library.js +1 -1
  131. package/src/sap/fe/macros/mdc/adapter/StateFilterToSelectionVariant.js +2 -1
  132. package/src/sap/fe/macros/mdc/adapter/StateFilterToSelectionVariant.ts +1 -0
  133. package/src/sap/fe/macros/messagebundle.properties +24 -4
  134. package/src/sap/fe/macros/messagebundle_ar.properties +8 -2
  135. package/src/sap/fe/macros/messagebundle_bg.properties +8 -2
  136. package/src/sap/fe/macros/messagebundle_ca.properties +11 -5
  137. package/src/sap/fe/macros/messagebundle_cnr.properties +8 -2
  138. package/src/sap/fe/macros/messagebundle_cs.properties +7 -1
  139. package/src/sap/fe/macros/messagebundle_cy.properties +9 -3
  140. package/src/sap/fe/macros/messagebundle_da.properties +8 -2
  141. package/src/sap/fe/macros/messagebundle_de.properties +13 -7
  142. package/src/sap/fe/macros/messagebundle_el.properties +7 -1
  143. package/src/sap/fe/macros/messagebundle_en.properties +11 -5
  144. package/src/sap/fe/macros/messagebundle_en_GB.properties +9 -3
  145. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +11 -5
  146. package/src/sap/fe/macros/messagebundle_es.properties +10 -4
  147. package/src/sap/fe/macros/messagebundle_es_MX.properties +11 -5
  148. package/src/sap/fe/macros/messagebundle_et.properties +9 -3
  149. package/src/sap/fe/macros/messagebundle_fi.properties +7 -1
  150. package/src/sap/fe/macros/messagebundle_fr.properties +9 -3
  151. package/src/sap/fe/macros/messagebundle_fr_CA.properties +8 -2
  152. package/src/sap/fe/macros/messagebundle_hi.properties +8 -2
  153. package/src/sap/fe/macros/messagebundle_hr.properties +8 -2
  154. package/src/sap/fe/macros/messagebundle_hu.properties +7 -1
  155. package/src/sap/fe/macros/messagebundle_id.properties +15 -9
  156. package/src/sap/fe/macros/messagebundle_it.properties +7 -1
  157. package/src/sap/fe/macros/messagebundle_iw.properties +8 -2
  158. package/src/sap/fe/macros/messagebundle_ja.properties +13 -7
  159. package/src/sap/fe/macros/messagebundle_kk.properties +11 -5
  160. package/src/sap/fe/macros/messagebundle_ko.properties +8 -2
  161. package/src/sap/fe/macros/messagebundle_lt.properties +9 -3
  162. package/src/sap/fe/macros/messagebundle_lv.properties +8 -2
  163. package/src/sap/fe/macros/messagebundle_mk.properties +8 -2
  164. package/src/sap/fe/macros/messagebundle_ms.properties +7 -1
  165. package/src/sap/fe/macros/messagebundle_nl.properties +7 -1
  166. package/src/sap/fe/macros/messagebundle_no.properties +7 -1
  167. package/src/sap/fe/macros/messagebundle_pl.properties +8 -2
  168. package/src/sap/fe/macros/messagebundle_pt.properties +7 -1
  169. package/src/sap/fe/macros/messagebundle_pt_PT.properties +7 -1
  170. package/src/sap/fe/macros/messagebundle_ro.properties +8 -2
  171. package/src/sap/fe/macros/messagebundle_ru.properties +10 -4
  172. package/src/sap/fe/macros/messagebundle_sh.properties +8 -2
  173. package/src/sap/fe/macros/messagebundle_sk.properties +7 -1
  174. package/src/sap/fe/macros/messagebundle_sl.properties +7 -1
  175. package/src/sap/fe/macros/messagebundle_sr.properties +8 -2
  176. package/src/sap/fe/macros/messagebundle_sv.properties +7 -1
  177. package/src/sap/fe/macros/messagebundle_th.properties +8 -2
  178. package/src/sap/fe/macros/messagebundle_tr.properties +7 -1
  179. package/src/sap/fe/macros/messagebundle_uk.properties +10 -4
  180. package/src/sap/fe/macros/messagebundle_vi.properties +10 -4
  181. package/src/sap/fe/macros/messagebundle_zh_CN.properties +7 -1
  182. package/src/sap/fe/macros/messagebundle_zh_TW.properties +8 -2
  183. package/src/sap/fe/macros/messages/MessageButton.js +39 -18
  184. package/src/sap/fe/macros/messages/MessageButton.ts +42 -19
  185. package/src/sap/fe/macros/messages/MessagePopover.js +4 -2
  186. package/src/sap/fe/macros/messages/MessagePopover.ts +6 -4
  187. package/src/sap/fe/macros/microchart/MicroChart.js +2 -2
  188. package/src/sap/fe/macros/microchart/MicroChart.tsx +1 -1
  189. package/src/sap/fe/macros/microchart/MicroChartContainer.js +1 -2
  190. package/src/sap/fe/macros/microchart/MicroChartContainer.ts +1 -2
  191. package/src/sap/fe/macros/microchart/MicroChartHelper.js +2 -3
  192. package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +1 -2
  193. package/src/sap/fe/macros/share/ShareAPI.js +4 -29
  194. package/src/sap/fe/macros/share/ShareAPI.ts +1 -32
  195. package/src/sap/fe/macros/situations/SituationsPopover.js +3 -1
  196. package/src/sap/fe/macros/situations/SituationsPopover.ts +2 -0
  197. package/src/sap/fe/macros/table/ActionsTemplating.js +4 -8
  198. package/src/sap/fe/macros/table/ActionsTemplating.tsx +5 -8
  199. package/src/sap/fe/macros/table/BasicSearch.js +1 -1
  200. package/src/sap/fe/macros/table/BasicSearch.ts +2 -1
  201. package/src/sap/fe/macros/table/Column.js +14 -2
  202. package/src/sap/fe/macros/table/Column.ts +7 -0
  203. package/src/sap/fe/macros/table/ColumnExportSettings.js +83 -15
  204. package/src/sap/fe/macros/table/ColumnExportSettings.ts +44 -0
  205. package/src/sap/fe/macros/table/ColumnOverride.js +14 -2
  206. package/src/sap/fe/macros/table/ColumnOverride.ts +7 -0
  207. package/src/sap/fe/macros/table/MdcTableTemplate.js +7 -5
  208. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +21 -11
  209. package/src/sap/fe/macros/table/QuickFilterSelector.js +12 -3
  210. package/src/sap/fe/macros/table/QuickFilterSelector.tsx +15 -2
  211. package/src/sap/fe/macros/table/Table.block.js +188 -147
  212. package/src/sap/fe/macros/table/Table.block.tsx +41 -11
  213. package/src/sap/fe/macros/table/Table.js +16 -10
  214. package/src/sap/fe/macros/table/Table.tsx +16 -10
  215. package/src/sap/fe/macros/table/TableAPI.js +224 -184
  216. package/src/sap/fe/macros/table/TableAPI.ts +63 -19
  217. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +6 -6
  218. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +5 -4
  219. package/src/sap/fe/macros/table/TableHelper.js +2 -3
  220. package/src/sap/fe/macros/table/TableHelper.ts +1 -2
  221. package/src/sap/fe/macros/table/TableRuntime.js +24 -5
  222. package/src/sap/fe/macros/table/TableRuntime.ts +31 -3
  223. package/src/sap/fe/macros/table/TreeTable.js +16 -10
  224. package/src/sap/fe/macros/table/TreeTable.tsx +16 -10
  225. package/src/sap/fe/macros/table/Utils.js +8 -3
  226. package/src/sap/fe/macros/table/Utils.ts +12 -3
  227. package/src/sap/fe/macros/table/delegates/ALPTableDelegate.js +1 -2
  228. package/src/sap/fe/macros/table/delegates/ALPTableDelegate.ts +0 -1
  229. package/src/sap/fe/macros/table/delegates/TableDelegate.js +69 -34
  230. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +75 -33
  231. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.js +1 -2
  232. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.ts +0 -1
  233. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +10 -10
  234. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +11 -9
  235. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +14 -12
  236. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +11 -10
  237. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +34 -4
  238. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +45 -2
  239. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +55 -12
  240. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +71 -9
  241. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +53 -2
  242. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +55 -0
  243. package/src/sap/fe/macros/table/mixin/TableExport.js +22 -3
  244. package/src/sap/fe/macros/table/mixin/TableExport.ts +25 -4
  245. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +5 -1
  246. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +7 -0
  247. package/src/sap/fe/macros/table/mixin/TableSharing.js +4 -2
  248. package/src/sap/fe/macros/table/mixin/TableSharing.ts +10 -1
  249. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +36 -10
  250. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +44 -9
  251. package/src/sap/fe/macros/visualfilters/VisualFilter.js +5 -4
  252. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +3 -2
  253. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +2 -3
  254. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +1 -2
@@ -26,7 +26,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
26
26
  /**
27
27
  * Helper class used by the control library for OData-specific handling (OData V4)
28
28
  * @private
29
- * @experimental This module is only for internal/experimental use!
30
29
  */
31
30
  const TableHelper = {
32
31
  /**
@@ -111,7 +110,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
111
110
  return undefined;
112
111
  }
113
112
  const propertyBindings = properties?.map(prop => pathInModel(prop)) ?? [];
114
- return compileExpression(formatResult(propertyBindings, "sap.fe.core.formatters.StandardFormatter#loadProperties"));
113
+ return compileExpression(formatResult(propertyBindings, "._formatters.StandardFormatter#loadProperties"));
115
114
  },
116
115
  /**
117
116
  * Method to get column's width if defined from manifest or from customization via annotations.
@@ -673,4 +672,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
673
672
  TableHelper.getTextOnActionField.requiresIContext = true;
674
673
  return TableHelper;
675
674
  }, false);
676
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUYWJsZUhlbHBlciIsIl9pc1N0YXRpY0FjdGlvbiIsImFjdGlvbk9iamVjdCIsImFjdGlvbk5hbWUiLCJhY3Rpb24iLCJBcnJheSIsImlzQXJyYXkiLCJlbnRpdHlUeXBlIiwiX2dldEFjdGlvbk92ZXJsb2FkRW50aXR5VHlwZSIsInRvU3RyaW5nIiwiZmluZCIsIl9hY3Rpb24iLCIkSXNCb3VuZCIsIiRQYXJhbWV0ZXIiLCIkVHlwZSIsIiRpc0NvbGxlY3Rpb24iLCJzQWN0aW9uTmFtZSIsImluY2x1ZGVzIiwiYVBhcnRzIiwic3BsaXQiLCJsZW5ndGgiLCJyZXBsYWNlQWxsIiwidW5kZWZpbmVkIiwiX2lzQWN0aW9uT3ZlcmxvYWRPbkRpZmZlcmVudFR5cGUiLCJzQW5ub3RhdGlvblRhcmdldEVudGl0eVR5cGUiLCJzRW50aXR5VHlwZSIsImdldE5hdmlnYXRpb25BdmFpbGFibGVNYXAiLCJsaW5lSXRlbUNvbGxlY3Rpb24iLCJvSUJOTmF2aWdhdGlvbkF2YWlsYWJsZU1hcCIsImZvckVhY2giLCJyZWNvcmQiLCJzS2V5IiwiU2VtYW50aWNPYmplY3QiLCJBY3Rpb24iLCJJbmxpbmUiLCJSZXF1aXJlc0NvbnRleHQiLCJOYXZpZ2F0aW9uQXZhaWxhYmxlIiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCJwYXRoIiwiT2JqZWN0Iiwia2V5cyIsImdldFVpTGluZUl0ZW1PYmplY3QiLCJsaW5lSXRlbU9yUHJlc2VudGF0aW9uQ29udGV4dCIsImNvbnZlcnRlZE1ldGFEYXRhIiwibGluZUl0ZW1PclByZXNlbnRhdGlvbk9iamVjdCIsInJlc29sdmVQYXRoIiwiZ2V0UGF0aCIsInRhcmdldCIsInZpc3VhbGl6YXRpb25zIiwiVmlzdWFsaXphdGlvbnMiLCJsaW5lSXRlbU9iamVjdCIsIml0ZW0iLCJ2YWx1ZSIsImluZGV4T2YiLCIkdGFyZ2V0IiwidGVybSIsImNyZWF0ZUJpbmRpbmdUb0xvYWRQcm9wZXJ0aWVzIiwicHJvcGVydGllcyIsInByb3BlcnR5QmluZGluZ3MiLCJtYXAiLCJwcm9wIiwicGF0aEluTW9kZWwiLCJjb21waWxlRXhwcmVzc2lvbiIsImZvcm1hdFJlc3VsdCIsImdldENvbHVtbldpZHRoIiwib1RoaXMiLCJjb2x1bW4iLCJkYXRhRmllbGQiLCJkYXRhRmllbGRBY3Rpb25UZXh0IiwiZGF0YU1vZGVsT2JqZWN0UGF0aCIsInVzZVJlbVVuaXQiLCJtaWNyb0NoYXJ0VGl0bGUiLCJ3aWR0aCIsImVuYWJsZUF1dG9Db2x1bW5XaWR0aCIsImdldENvbHVtbldpZHRoRm9ySW1hZ2UiLCJnZXRDb2x1bW5XaWR0aEZvckRhdGFGaWVsZCIsIm5hbWUiLCJfc2hvdWxkSW5jbHVkZUhlYWRlckluQ29sdW1ud2lkaENhbGN1bGF0aW9uIiwic29ydGFibGUiLCJyZXNvbHZlQmluZGluZ1N0cmluZyIsInJlcXVpcmVkIiwiVGFibGVGb3JtYXR0ZXIiLCJhbm5vdGF0aW9ucyIsInRhcmdldE9iamVjdCIsIlZhbHVlIiwiZGF0YVR5cGUiLCJ0eXBlIiwiZ2V0RWRpdE1vZGUiLCJGaWVsZEVkaXRNb2RlIiwiRGlzcGxheSIsImhhc1RleHRBbm5vdGF0aW9uIiwiaGFzVGV4dCIsIkNvcmUiLCJNZWRpYVR5cGUiLCJpc0ltYWdlVVJMIiwidGFibGUiLCJ3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciIsIlRhcmdldCIsIiRBbm5vdGF0aW9uUGF0aCIsIm5UbXBUZXh0V2lkdGgiLCJTaXplSGVscGVyIiwiZ2V0QnV0dG9uV2lkdGgiLCJMYWJlbCIsIm5UbXBWaXN1YWxpemF0aW9uV2lkdGgiLCJUYWJsZVNpemVIZWxwZXIiLCJnZXRXaWR0aEZvckRhdGFGaWVsZEZvckFubm90YXRpb24iLCJwcm9wZXJ0eVdpZHRoIiwiaXNBbm5vdGF0aW9uT2ZUeXBlIiwiZ2V0Q29sdW1uV2lkdGhGb3JDaGFydCIsImNvbHVtbkxhYmVsV2lkdGgiLCJjaGFydFNpemUiLCJnZXRDaGFydFNpemUiLCJnZXRTaG93T25seUNoYXJ0IiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsInRtcFRleHQiLCJ0aXRsZVNpemUiLCJ0bXBXaWR0aCIsImdldE1hcmdpbkNsYXNzIiwic1Zpc3VhbGl6YXRpb24iLCJpc0xhc3RGaWVsZCIsInNDbGFzcyIsImdldFZCb3hWaXNpYmlsaXR5IiwiY29sbGVjdGlvbiIsImZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyIsImZpZWxkR3JvdXAiLCJhbGxTdGF0aWMiLCJoaWRkZW5QYXRocyIsImhpZGRlbkFubm90YXRpb25WYWx1ZSIsInB1c2giLCIkUGF0aCIsImhhc0FueVBhdGhFeHByZXNzaW9ucyIsImNvbnN0YW50IiwiaGFzQWxsSGlkZGVuU3RhdGljRXhwcmVzc2lvbnMiLCJpZkVsc2UiLCJnZXRFbGVtZW50U3RhYmxlSWQiLCJ0YWJsZUlkIiwiZWxlbWVudElkIiwiZGF0YUZpZWxkUGFydCIsImdlbmVyYXRlIiwiZ2V0Q29sdW1uU3RhYmxlSWQiLCJpZCIsImdldEZpZWxkR3JvdXBMYWJlbFN0YWJsZUlkIiwicHJlc3NFdmVudERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvbiIsInRhYmxlUHJvcGVydGllcyIsImVudGl0eVNldE5hbWUiLCJvcGVyYXRpb25BdmFpbGFibGVNYXAiLCJpc05hdmlnYWJsZSIsImFyZ3VtZW50cyIsImVuYWJsZUF1dG9TY3JvbGwiLCJkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24iLCJmb3JDb250ZXh0TWVudSIsInRhcmdldEVudGl0eVR5cGVOYW1lIiwiY29udGV4dE9iamVjdFBhdGgiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwic3RhdGljQWN0aW9uIiwiYXBwbGljYWJsZVByb3BlcnR5Iiwibm90QXBwbGljYWJsZVByb3BlcnR5IiwiY29udGV4dE1lbnVQYXRoIiwiY29udGV4dCIsInBhcmFtcyIsImNvbnRleHRzIiwiYlN0YXRpY0FjdGlvbiIsImFwcGxpY2FibGVDb250ZXh0cyIsIm5vdEFwcGxpY2FibGVDb250ZXh0cyIsImludm9jYXRpb25Hcm91cGluZyIsIkludm9jYXRpb25Hcm91cGluZyIsImNvbnRyb2xJZCIsImNvbnRlbnRJZCIsImxhYmVsIiwiZm4iLCJyZWYiLCJpc0RhdGFGaWVsZEZvckFjdGlvbkVuYWJsZWQiLCJ0YWJsZURlZmluaXRpb24iLCJpc0JvdW5kIiwiZW5hYmxlT25TZWxlY3QiLCJhbm5vdGF0aW9uVGFyZ2V0RW50aXR5VHlwZSIsImlzQ29weSIsImlzU3RhdGljQWN0aW9uIiwib09wZXJhdGlvbkF2YWlsYWJsZU1hcCIsIkpTT04iLCJwYXJzZSIsImhhc093blByb3BlcnR5IiwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzIiwiQWN0aW9uSGVscGVyIiwiZ2V0TnVtYmVyT2ZDb250ZXh0c0V4cHJlc3Npb24iLCJkYXRhRmllbGRGb3JBY3Rpb25FbmFibGVkRXhwcmVzc2lvbiIsImlzRGF0YUZpZWxkRm9ySUJORW5hYmxlZCIsInJlcXVpcmVzQ29udGV4dCIsImlzTmF2aWdhdGlvbkF2YWlsYWJsZSIsImlzTmF2aWdhdGlvbkF2YWlsYWJsZVBhdGgiLCJpc0FuYWx5dGljYWxUYWJsZSIsImVuYWJsZUFuYWx5dGljcyIsImVudGl0eVNldCIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiTG9nIiwid2FybmluZyIsImdldE9iamVjdCIsInN1YnN0cmluZyIsImRhdGFGaWVsZEZvcklCTkVuYWJsZWRFeHByZXNzaW9uIiwiYnVpbGRFeHByZXNzaW9uRm9yTXVsdGlWYWx1ZUZpZWxkUmVhZE9ubHkiLCJvciIsInJlYWRPbmx5IiwiYW5kIiwiVUkiLCJJc0luYWN0aXZlIiwiY3JlYXRpb25Nb2RlIiwiZXF1YWwiLCJmaWVsZE1vZGUiLCJzZXRIZWFkZXJMYWJlbFZpc2liaWxpdHkiLCJkYXRhZmllbGQiLCJkYXRhRmllbGRDb2xsZWN0aW9uIiwic29tZSIsIm9EQyIsImdldFRleHRPbkFjdGlvbkZpZWxkIiwib0RhdGFGaWVsZCIsIm9Db250ZXh0Iiwic1BhdGhEYXRhRmllbGRzIiwiYU11bHRpcGxlTGFiZWxzIiwiaSIsInJlZHVjZSIsImEiLCJiIiwiX2dldFJlc3BvbnNpdmVUYWJsZUNvbHVtblNldHRpbmdzIiwib0NvbHVtbiIsInRhYmxlVHlwZSIsInNldHRpbmdzIiwibWljcm9DaGFydFNpemUiLCJzaG93TWljcm9DaGFydExhYmVsIiwiZ2V0RGVsZWdhdGUiLCJpc0FMUCIsImVudGl0eU5hbWUiLCJmaWx0ZXJPbkFjdGl2ZUVudGl0aWVzIiwiZGVsZWdhdGUiLCJjb250cm9sIiwiRXJyb3IiLCJwYXlsb2FkIiwiY29sbGVjdGlvbk5hbWUiLCJoaWVyYXJjaHlRdWFsaWZpZXIiLCJpbml0aWFsRXhwYW5zaW9uTGV2ZWwiLCJhbm5vdGF0aW9uIiwiY3JlYXRlSW5QbGFjZSIsImFuYWx5dGljYWxDb25maWd1cmF0aW9uIiwiYWdncmVnYXRpb25PbkxlYWZMZXZlbCIsImFnZ3JlZ2F0aW9uQ29uZmlndXJhdGlvbiIsImxlYWZMZXZlbCIsInN0cmluZ2lmeSIsImVuYWJsZUZhc3RDcmVhdGlvblJvdyIsIm9GYXN0Q3JlYXRpb25Sb3ciLCJzUGF0aCIsIm9Nb2RlbCIsIm9GaW5hbFVJU3RhdGUiLCJvRmFzdENyZWF0aW9uTGlzdEJpbmRpbmciLCJvRmFzdENyZWF0aW9uQ29udGV4dCIsIkNvbW1vblV0aWxzIiwiZ2V0SXNFZGl0YWJsZSIsImlzRGVsZXRlZCIsImJpbmRMaXN0IiwiJCR1cGRhdGVHcm91cElkIiwiJCRncm91cElkIiwicmVmcmVzaEludGVybmFsIiwiY3JlYXRlIiwic2V0QmluZGluZ0NvbnRleHQiLCJjcmVhdGVkIiwiZSIsInRyYWNlIiwib0Vycm9yIiwiZXJyb3IiLCJpc0FjdGlvblNob3duSW5Db250ZXh0TWVudSIsImFubm90YXRpb25QYXRoIiwiY29udmVydGVkVHlwZXMiLCJhY3Rpb25UYXJnZXQiLCJBY3Rpb25UYXJnZXQiLCJwYXJhbWV0ZXJzIiwiaXNDb2xsZWN0aW9uIiwic291cmNlRW50aXR5VHlwZSIsInZhbHVlT2YiLCJyZXF1aXJlc1NlbGVjdGlvbiIsInJlcXVpcmVzSUNvbnRleHQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRhYmxlSGVscGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29udmVydGVkTWV0YWRhdGEsIEVudGl0eVR5cGUsIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiwgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0RGF0YUZpZWxkLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBY3Rpb24sXG5cdERhdGFGaWVsZEZvckFubm90YXRpb24sXG5cdERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0RGF0YUZpZWxkVHlwZXMsXG5cdEZpZWxkR3JvdXAsXG5cdExpbmVJdGVtLFxuXHRQcmVzZW50YXRpb25WYXJpYW50LFxuXHRQcmVzZW50YXRpb25WYXJpYW50VHlwZSxcblx0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcywgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIFBhdGhJbk1vZGVsRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHtcblx0YW5kLFxuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Y29uc3RhbnQsXG5cdGVxdWFsLFxuXHRmbixcblx0Zm9ybWF0UmVzdWx0LFxuXHRpZkVsc2UsXG5cdG9yLFxuXHRwYXRoSW5Nb2RlbCxcblx0cmVmLFxuXHRyZXNvbHZlQmluZGluZ1N0cmluZ1xufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgVGFibGVDb2x1bW5TZXR0aW5ncyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25BY3Rpb24sIEJhc2VBY3Rpb24sIEN1c3RvbUFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgVGFibGVWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25UYWJsZUNvbHVtbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9Db2x1bW5zXCI7XG5pbXBvcnQgeyBVSSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCBTaXplSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1NpemVIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB7IGlzQW5ub3RhdGlvbk9mVHlwZSwgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBoYXNUZXh0LCBpc0ltYWdlVVJMIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCB7IGdldEVkaXRNb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgVGFibGVGb3JtYXR0ZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvZm9ybWF0dGVycy9UYWJsZUZvcm1hdHRlclwiO1xuaW1wb3J0IEFjdGlvbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9oZWxwZXJzL0FjdGlvbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgVGFibGVCbG9jayBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZS5ibG9ja1wiO1xuaW1wb3J0IFRhYmxlU2l6ZUhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZVNpemVIZWxwZXJcIjtcbmltcG9ydCBGaWVsZEVkaXRNb2RlIGZyb20gXCJzYXAvdWkvbWRjL2VudW1zL0ZpZWxkRWRpdE1vZGVcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBCYXNlQ29udGV4dCwgZGVmYXVsdCBhcyBDb250ZXh0IH0gZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB2NENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ3JlYXRpb25Sb3cgZnJvbSBcInNhcC91aS90YWJsZS9DcmVhdGlvblJvd1wiO1xuaW1wb3J0IHR5cGUgeyBNZXRhTW9kZWxUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3R5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuXG50eXBlIEhpZGRlbiA9IHsgXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCI6IGJvb2xlYW4gfCB7ICRQYXRoPzogc3RyaW5nIH0gfTtcbnR5cGUgQ29sdW1uV2lkdGhUaGlzID0geyBlbmFibGVBdXRvQ29sdW1uV2lkdGg/OiBib29sZWFuOyB3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcj86IGJvb2xlYW47IHRhYmxlVHlwZTogc3RyaW5nIH07XG50eXBlIE1pY3JvQ2hhcnRJbmZvID0geyB0aXRsZTogc3RyaW5nOyBkZXNjcmlwdGlvbjogc3RyaW5nIH07XG4vKipcbiAqIEhlbHBlciBjbGFzcyB1c2VkIGJ5IHRoZSBjb250cm9sIGxpYnJhcnkgZm9yIE9EYXRhLXNwZWNpZmljIGhhbmRsaW5nIChPRGF0YSBWNClcbiAqIEBwcml2YXRlXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgbW9kdWxlIGlzIG9ubHkgZm9yIGludGVybmFsL2V4cGVyaW1lbnRhbCB1c2UhXG4gKi9cbmNvbnN0IFRhYmxlSGVscGVyID0ge1xuXHQvKipcblx0ICogQ2hlY2sgaWYgYSBnaXZlbiBhY3Rpb24gaXMgc3RhdGljLlxuXHQgKiBAcGFyYW0gYWN0aW9uT2JqZWN0IFRoZSBpbnN0YW5jZSBvciB0aGUgcGF0aCBvZiB0aGUgYWN0aW9uXG5cdCAqIEBwYXJhbSBhY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb25cblx0ICogQHJldHVybnMgUmV0dXJucyAndHJ1ZScgaWYgYWN0aW9uIGlzIHN0YXRpYywgZWxzZSAnZmFsc2UnXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfaXNTdGF0aWNBY3Rpb246IGZ1bmN0aW9uIChhY3Rpb25PYmplY3Q6IE1ldGFNb2RlbEFjdGlvbiB8IE1ldGFNb2RlbEFjdGlvbltdIHwgdW5kZWZpbmVkIHwgc3RyaW5nLCBhY3Rpb25OYW1lOiBTdHJpbmcpOiBib29sZWFuIHtcblx0XHRsZXQgYWN0aW9uOiBNZXRhTW9kZWxBY3Rpb24gfCB1bmRlZmluZWQgfCBzdHJpbmc7XG5cdFx0aWYgKGFjdGlvbk9iamVjdCkge1xuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoYWN0aW9uT2JqZWN0KSkge1xuXHRcdFx0XHRjb25zdCBlbnRpdHlUeXBlID0gdGhpcy5fZ2V0QWN0aW9uT3ZlcmxvYWRFbnRpdHlUeXBlKGFjdGlvbk5hbWUudG9TdHJpbmcoKSk7XG5cdFx0XHRcdGlmIChlbnRpdHlUeXBlKSB7XG5cdFx0XHRcdFx0YWN0aW9uID0gYWN0aW9uT2JqZWN0LmZpbmQoZnVuY3Rpb24gKF9hY3Rpb246IE1ldGFNb2RlbEFjdGlvbikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIF9hY3Rpb24uJElzQm91bmQgJiYgX2FjdGlvbi4kUGFyYW1ldGVyWzBdLiRUeXBlID09PSBlbnRpdHlUeXBlO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIGlmIHRoaXMgaXMganVzdCBvbmUgLSBPSyB3ZSB0YWtlIGl0LiBJZiBpdCdzIG1vcmUgaXQncyBhY3R1YWxseSBhIHdyb25nIHVzYWdlIGJ5IHRoZSBhcHBcblx0XHRcdFx0XHQvLyBhcyB3ZSB1c2VkIHRoZSBmaXJzdCBvbmUgYWxsIHRoZSB0aW1lIHdlIGtlZXAgaXQgYXMgaXQgaXNcblx0XHRcdFx0XHRhY3Rpb24gPSBhY3Rpb25PYmplY3RbMF07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFjdGlvbiA9IGFjdGlvbk9iamVjdDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gISFhY3Rpb24gJiYgdHlwZW9mIGFjdGlvbiAhPT0gXCJzdHJpbmdcIiAmJiBhY3Rpb24uJElzQm91bmQgJiYgISFhY3Rpb24uJFBhcmFtZXRlclswXS4kaXNDb2xsZWN0aW9uO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGVudGl0eSB0eXBlIG9mIGFuIGFjdGlvbiBvdmVybG9hZC5cblx0ICogQHBhcmFtIHNBY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb24uXG5cdCAqIEByZXR1cm5zIFRoZSBlbnRpdHkgdHlwZSB1c2VkIGluIHRoZSBhY3Rpb24gb3ZlcmxvYWQuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0QWN0aW9uT3ZlcmxvYWRFbnRpdHlUeXBlOiBmdW5jdGlvbiAoc0FjdGlvbk5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHNBY3Rpb25OYW1lICYmIHNBY3Rpb25OYW1lLmluY2x1ZGVzKFwiKFwiKSkge1xuXHRcdFx0Y29uc3QgYVBhcnRzID0gc0FjdGlvbk5hbWUuc3BsaXQoXCIoXCIpO1xuXHRcdFx0cmV0dXJuIGFQYXJ0c1thUGFydHMubGVuZ3RoIC0gMV0ucmVwbGFjZUFsbChcIilcIiwgXCJcIik7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENoZWNrcyB3aGV0aGVyIHRoZSBhY3Rpb24gaXMgb3ZlcmxvYWRlZCBvbiBhIGRpZmZlcmVudCBlbnRpdHkgdHlwZS5cblx0ICogQHBhcmFtIHNBY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb24uXG5cdCAqIEBwYXJhbSBzQW5ub3RhdGlvblRhcmdldEVudGl0eVR5cGUgVGhlIGVudGl0eSB0eXBlIG9mIHRoZSBhbm5vdGF0aW9uIHRhcmdldC5cblx0ICogQHJldHVybnMgUmV0dXJucyAndHJ1ZScgaWYgdGhlIGFjdGlvbiBpcyBvdmVybG9hZGVkIHdpdGggYSBkaWZmZXJlbnQgZW50aXR5IHR5cGUsIGVsc2UgJ2ZhbHNlJy5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9pc0FjdGlvbk92ZXJsb2FkT25EaWZmZXJlbnRUeXBlOiBmdW5jdGlvbiAoc0FjdGlvbk5hbWU6IHN0cmluZywgc0Fubm90YXRpb25UYXJnZXRFbnRpdHlUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRjb25zdCBzRW50aXR5VHlwZSA9IHRoaXMuX2dldEFjdGlvbk92ZXJsb2FkRW50aXR5VHlwZShzQWN0aW9uTmFtZSk7XG5cdFx0cmV0dXJuICEhc0VudGl0eVR5cGUgJiYgc0Fubm90YXRpb25UYXJnZXRFbnRpdHlUeXBlICE9PSBzRW50aXR5VHlwZTtcblx0fSxcblxuXHRnZXROYXZpZ2F0aW9uQXZhaWxhYmxlTWFwOiBmdW5jdGlvbiAobGluZUl0ZW1Db2xsZWN0aW9uOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzW10gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgb0lCTk5hdmlnYXRpb25BdmFpbGFibGVNYXA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdFx0bGluZUl0ZW1Db2xsZWN0aW9uPy5mb3JFYWNoKChyZWNvcmQpID0+IHtcblx0XHRcdGlmIChcIlNlbWFudGljT2JqZWN0XCIgaW4gcmVjb3JkKSB7XG5cdFx0XHRcdGNvbnN0IHNLZXkgPSBgJHtyZWNvcmQuU2VtYW50aWNPYmplY3R9LSR7cmVjb3JkLkFjdGlvbn1gO1xuXHRcdFx0XHRpZiAocmVjb3JkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gJiYgIXJlY29yZC5JbmxpbmUgJiYgcmVjb3JkLlJlcXVpcmVzQ29udGV4dCkge1xuXHRcdFx0XHRcdGlmIChyZWNvcmQuTmF2aWdhdGlvbkF2YWlsYWJsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRvSUJOTmF2aWdhdGlvbkF2YWlsYWJsZU1hcFtzS2V5XSA9IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHJlY29yZC5OYXZpZ2F0aW9uQXZhaWxhYmxlKVxuXHRcdFx0XHRcdFx0XHQ/IChyZWNvcmQuTmF2aWdhdGlvbkF2YWlsYWJsZSBhcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248Ym9vbGVhbj4pLnBhdGhcblx0XHRcdFx0XHRcdFx0OiByZWNvcmQuTmF2aWdhdGlvbkF2YWlsYWJsZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHJldHVybiBPYmplY3Qua2V5cyhvSUJOTmF2aWdhdGlvbkF2YWlsYWJsZU1hcCkubGVuZ3RoID4gMCA/IG9JQk5OYXZpZ2F0aW9uQXZhaWxhYmxlTWFwIDogdW5kZWZpbmVkO1xuXHR9LFxuXG5cdGdldFVpTGluZUl0ZW1PYmplY3Q6IGZ1bmN0aW9uIChcblx0XHRsaW5lSXRlbU9yUHJlc2VudGF0aW9uQ29udGV4dDogQ29udGV4dCxcblx0XHRjb252ZXJ0ZWRNZXRhRGF0YTogQ29udmVydGVkTWV0YWRhdGFcblx0KTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlc1tdIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBsaW5lSXRlbU9yUHJlc2VudGF0aW9uT2JqZWN0ID0gY29udmVydGVkTWV0YURhdGEucmVzb2x2ZVBhdGgobGluZUl0ZW1PclByZXNlbnRhdGlvbkNvbnRleHQuZ2V0UGF0aCgpKS50YXJnZXQgYXNcblx0XHRcdHwgUHJlc2VudGF0aW9uVmFyaWFudFxuXHRcdFx0fCBMaW5lSXRlbTtcblx0XHRpZiAoIWxpbmVJdGVtT3JQcmVzZW50YXRpb25PYmplY3QpIHJldHVybiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgdmlzdWFsaXphdGlvbnMgPSAoY29udmVydGVkTWV0YURhdGEucmVzb2x2ZVBhdGgobGluZUl0ZW1PclByZXNlbnRhdGlvbkNvbnRleHQuZ2V0UGF0aCgpKS50YXJnZXQgYXMgUHJlc2VudGF0aW9uVmFyaWFudFR5cGUpXG5cdFx0XHQuVmlzdWFsaXphdGlvbnM7XG5cblx0XHRjb25zdCBsaW5lSXRlbU9iamVjdCA9IChcblx0XHRcdHZpc3VhbGl6YXRpb25zXG5cdFx0XHRcdD8gdmlzdWFsaXphdGlvbnM/LmZpbmQoKGl0ZW0pID0+IGl0ZW0udmFsdWUuaW5kZXhPZihcIkBcIiArIFVJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtKSA9PT0gMCk/LiR0YXJnZXRcblx0XHRcdFx0OiBsaW5lSXRlbU9yUHJlc2VudGF0aW9uT2JqZWN0XG5cdFx0KSBhcyBMaW5lSXRlbTtcblx0XHRyZXR1cm4gbGluZUl0ZW1PYmplY3Q/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtID8gbGluZUl0ZW1PYmplY3QgOiB1bmRlZmluZWQ7XG5cdH0sXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuZCByZXR1cm5zIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gbG9hZCBhIGdpdmVuIGxpc3Qgb2YgcHJvcGVydGllcy5cblx0ICogQHBhcmFtIHByb3BlcnRpZXMgTGlzdCBvZiBwcm9wZXJ0aWVzIHVzZWQgb24gYSBjdXN0b20gY29sdW1uXG5cdCAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gbG9hZCB0aGUgZ2l2ZW4gbGlzdCBvZiBwcm9wZXJ0aWVzXG5cdCAqL1xuXHRjcmVhdGVCaW5kaW5nVG9Mb2FkUHJvcGVydGllczogZnVuY3Rpb24gKHByb3BlcnRpZXM/OiBzdHJpbmdbXSk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0XHRpZiAocHJvcGVydGllcyA9PT0gdW5kZWZpbmVkIHx8IHByb3BlcnRpZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRjb25zdCBwcm9wZXJ0eUJpbmRpbmdzID0gcHJvcGVydGllcz8ubWFwKChwcm9wKSA9PiBwYXRoSW5Nb2RlbChwcm9wKSkgPz8gW107XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGZvcm1hdFJlc3VsdChwcm9wZXJ0eUJpbmRpbmdzLCBcInNhcC5mZS5jb3JlLmZvcm1hdHRlcnMuU3RhbmRhcmRGb3JtYXR0ZXIjbG9hZFByb3BlcnRpZXNcIikpO1xuXHR9LFxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCBjb2x1bW4ncyB3aWR0aCBpZiBkZWZpbmVkIGZyb20gbWFuaWZlc3Qgb3IgZnJvbSBjdXN0b21pemF0aW9uIHZpYSBhbm5vdGF0aW9ucy5cblx0ICogQHBhcmFtIG9UaGlzIFRoZSBpbnN0YW5jZSBvZiB0aGUgaW5uZXIgbW9kZWwgb2YgdGhlIFRhYmxlIGJ1aWxkaW5nIGJsb2NrXG5cdCAqIEBwYXJhbSBvVGhpcy5lbmFibGVBdXRvQ29sdW1uV2lkdGggSW5kaWNhdGVzIGlmIHRoZSBjb2x1bW4gd2lkdGggc2hvdWxkIGJlIGNhbGN1bGF0ZWQgYXV0b21hdGljYWxseVxuXHQgKiBAcGFyYW0gb1RoaXMud2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIgSW5kaWNhdGVzIGlmIHRoZSBjb2x1bW4gd2lkdGggc2hvdWxkIGluY2x1ZGUgdGhlIGhlYWRlclxuXHQgKiBAcGFyYW0gY29sdW1uIERlZmluZWQgd2lkdGggb2YgdGhlIGNvbHVtbiwgd2hpY2ggaXMgdGFrZW4gd2l0aCBwcmlvcml0eSBpZiBub3QgbnVsbCwgdW5kZWZpbmVkIG9yIGVtcHR5XG5cdCAqIEBwYXJhbSBkYXRhRmllbGQgRGF0YUZpZWxkIGRlZmluaXRpb24gb2JqZWN0XG5cdCAqIEBwYXJhbSBkYXRhRmllbGRBY3Rpb25UZXh0IERhdGFGaWVsZCdzIHRleHQgZnJvbSBidXR0b25cblx0ICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGggVGhlIG9iamVjdCBwYXRoIG9mIHRoZSBkYXRhIG1vZGVsXG5cdCAqIEBwYXJhbSB1c2VSZW1Vbml0IEluZGljYXRlcyBpZiB0aGUgcmVtIHVuaXQgbXVzdCBiZSBjb25jYXRlbmF0ZWQgd2l0aCB0aGUgY29sdW1uIHdpZHRoIHJlc3VsdFxuXHQgKiBAcGFyYW0gbWljcm9DaGFydFRpdGxlIFRoZSBvYmplY3QgY29udGFpbmluZyB0aXRsZSBhbmQgZGVzY3JpcHRpb24gb2YgdGhlIE1pY3JvQ2hhcnRcblx0ICogQHBhcmFtIG1pY3JvQ2hhcnRUaXRsZS50aXRsZSBUaGUgdGl0bGUgb2YgdGhlIG1pY3JvY2hhcnRcblx0ICogQHBhcmFtIG1pY3JvQ2hhcnRUaXRsZS5kZXNjcmlwdGlvbiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIG1pY3JvY2hhcnRcblx0ICogQHJldHVybnMgLSBDb2x1bW4gd2lkdGggaWYgZGVmaW5lZCwgb3RoZXJ3aXNlIHdpZHRoIGlzIHNldCB0byBhdXRvXG5cdCAqL1xuXHRnZXRDb2x1bW5XaWR0aDogZnVuY3Rpb24gKFxuXHRcdG9UaGlzOiBDb2x1bW5XaWR0aFRoaXMsXG5cdFx0Y29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdFx0ZGF0YUZpZWxkOiBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZCB8IERhdGFGaWVsZEZvckFubm90YXRpb24gfCBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24+LFxuXHRcdGRhdGFGaWVsZEFjdGlvblRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+LFxuXHRcdHVzZVJlbVVuaXQ6IGJvb2xlYW4sXG5cdFx0bWljcm9DaGFydFRpdGxlPzogTWljcm9DaGFydEluZm9cblx0KTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQge1xuXHRcdGlmIChjb2x1bW4ud2lkdGgpIHtcblx0XHRcdHJldHVybiBjb2x1bW4ud2lkdGg7XG5cdFx0fVxuXHRcdGlmIChvVGhpcy5lbmFibGVBdXRvQ29sdW1uV2lkdGggPT09IHRydWUpIHtcblx0XHRcdGxldCB3aWR0aDtcblx0XHRcdHdpZHRoID1cblx0XHRcdFx0dGhpcy5nZXRDb2x1bW5XaWR0aEZvckltYWdlKGRhdGFNb2RlbE9iamVjdFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRUeXBlcz4pIHx8XG5cdFx0XHRcdHRoaXMuZ2V0Q29sdW1uV2lkdGhGb3JEYXRhRmllbGQob1RoaXMsIGNvbHVtbiwgZGF0YUZpZWxkLCBkYXRhRmllbGRBY3Rpb25UZXh0LCBkYXRhTW9kZWxPYmplY3RQYXRoLCBtaWNyb0NoYXJ0VGl0bGUpIHx8XG5cdFx0XHRcdHVuZGVmaW5lZDtcblx0XHRcdGlmICh3aWR0aCkge1xuXHRcdFx0XHRyZXR1cm4gdXNlUmVtVW5pdCA/IGAke3dpZHRofXJlbWAgOiB3aWR0aDtcblx0XHRcdH1cblx0XHRcdHdpZHRoID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdGZvcm1hdFJlc3VsdChcblx0XHRcdFx0XHRbXG5cdFx0XHRcdFx0XHRwYXRoSW5Nb2RlbChcIi9lZGl0TW9kZVwiLCBcInVpXCIpLFxuXHRcdFx0XHRcdFx0cGF0aEluTW9kZWwoXCJ0YWJsZVByb3BlcnRpZXNBdmFpbGFibGVcIiwgXCJpbnRlcm5hbFwiKSxcblx0XHRcdFx0XHRcdGNvbHVtbi5uYW1lLFxuXHRcdFx0XHRcdFx0dXNlUmVtVW5pdCxcblx0XHRcdFx0XHRcdHRoaXMuX3Nob3VsZEluY2x1ZGVIZWFkZXJJbkNvbHVtbndpZGhDYWxjdWxhdGlvbihvVGhpcywgY29sdW1uKSxcblx0XHRcdFx0XHRcdGNvbHVtbi5zb3J0YWJsZSA/PyBmYWxzZSxcblx0XHRcdFx0XHRcdHJlc29sdmVCaW5kaW5nU3RyaW5nKGNvbHVtbi5yZXF1aXJlZCA/PyBmYWxzZSwgXCJib29sZWFuXCIpIGFzIFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxib29sZWFuPlxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0VGFibGVGb3JtYXR0ZXIuZ2V0Q29sdW1uV2lkdGhcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHRcdHJldHVybiB3aWR0aDtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB0aGUgd2lkdGggb2YgdGhlIGNvbHVtbiBjb250YWluaW5nIGFuIGltYWdlLlxuXHQgKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgZGF0YSBtb2RlbCBvYmplY3QgcGF0aFxuXHQgKiBAcmV0dXJucyAtIENvbHVtbiB3aWR0aCBpZiBkZWZpbmVkLCBvdGhlcndpc2UgbnVsbCAodGhlIHdpZHRoIGlzIHRyZWF0ZWQgYXMgYSByZW0gdmFsdWUpXG5cdCAqL1xuXHRnZXRDb2x1bW5XaWR0aEZvckltYWdlOiBmdW5jdGlvbiAoZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRUeXBlcz4pOiBudW1iZXIgfCBudWxsIHtcblx0XHRsZXQgd2lkdGg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXHRcdGNvbnN0IGFubm90YXRpb25zID0gZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q/LlZhbHVlPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucztcblx0XHRjb25zdCBkYXRhVHlwZSA9IGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py5WYWx1ZT8uJHRhcmdldD8udHlwZTtcblx0XHRpZiAoXG5cdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdD8uVmFsdWUgJiZcblx0XHRcdGdldEVkaXRNb2RlKFxuXHRcdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5WYWx1ZT8uJHRhcmdldCxcblx0XHRcdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdFxuXHRcdFx0KSA9PT0gRmllbGRFZGl0TW9kZS5EaXNwbGF5ICYmXG5cdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5WYWx1ZT8uJHRhcmdldFxuXHRcdCkge1xuXHRcdFx0Y29uc3QgaGFzVGV4dEFubm90YXRpb24gPSBoYXNUZXh0KGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LlZhbHVlLiR0YXJnZXQpO1xuXHRcdFx0aWYgKGRhdGFUeXBlID09PSBcIkVkbS5TdHJlYW1cIiAmJiAhaGFzVGV4dEFubm90YXRpb24gJiYgYW5ub3RhdGlvbnM/LkNvcmU/Lk1lZGlhVHlwZT8uaW5jbHVkZXM/LihcImltYWdlL1wiKSkge1xuXHRcdFx0XHR3aWR0aCA9IDYuMjtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0YW5ub3RhdGlvbnMgJiZcblx0XHRcdChpc0ltYWdlVVJMKGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py5WYWx1ZT8uJHRhcmdldCkgfHwgYW5ub3RhdGlvbnM/LkNvcmU/Lk1lZGlhVHlwZT8uaW5jbHVkZXM/LihcImltYWdlL1wiKSlcblx0XHQpIHtcblx0XHRcdHdpZHRoID0gNi4yO1xuXHRcdH1cblx0XHRyZXR1cm4gd2lkdGg7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIHRoZSBjb2x1bW4gaGVhZGVyIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgY29sdW1uIHdpZHRoLlxuXHQgKiBAcGFyYW0gdGFibGUgVGhlIHRhYmxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0XG5cdCAqIEBwYXJhbSB0YWJsZS53aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciBJbmRpY2F0ZXMgaWYgdGhlIGNvbHVtbiB3aWR0aCBzaG91bGQgaW5jbHVkZSB0aGUgaGVhZGVyXG5cdCAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBjb25maWd1cmF0aW9uXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29sdW1uIHdpZHRoIHNob3VsZCBpbmNsdWRlIHRoZSBoZWFkZXJcblx0ICovXG5cdF9zaG91bGRJbmNsdWRlSGVhZGVySW5Db2x1bW53aWRoQ2FsY3VsYXRpb24odGFibGU6IENvbHVtbldpZHRoVGhpcywgY29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4pOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gY29sdW1uLndpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyICE9PSB1bmRlZmluZWQgPyBjb2x1bW4ud2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIgOiB0YWJsZS53aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcjtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB0aGUgd2lkdGggb2YgdGhlIGNvbHVtbiBjb250YWluaW5nIHRoZSBEYXRhRmllbGQuXG5cdCAqIEBwYXJhbSBvVGhpcyBUaGUgaW5zdGFuY2Ugb2YgdGhlIGlubmVyIG1vZGVsIG9mIHRoZSBUYWJsZSBidWlsZGluZyBibG9ja1xuXHQgKiBAcGFyYW0gb1RoaXMud2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIgSW5kaWNhdGVzIGlmIHRoZSBjb2x1bW4gd2lkdGggc2hvdWxkIGluY2x1ZGUgdGhlIGhlYWRlclxuXHQgKiBAcGFyYW0gY29sdW1uIERlZmluZWQgd2lkdGggb2YgdGhlIGNvbHVtbiwgd2hpY2ggaXMgdGFrZW4gd2l0aCBwcmlvcml0eSBpZiBub3QgbnVsbCwgdW5kZWZpbmVkIG9yIGVtcHR5XG5cdCAqIEBwYXJhbSBkYXRhRmllbGQgRGF0YSBGaWVsZFxuXHQgKiBAcGFyYW0gZGF0YUZpZWxkQWN0aW9uVGV4dCBEYXRhRmllbGQncyB0ZXh0IGZyb20gYnV0dG9uXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBkYXRhIG1vZGVsIG9iamVjdCBwYXRoXG5cdCAqIEBwYXJhbSBtaWNyb0NoYXJ0VGl0bGUgVGhlIG9iamVjdCBjb250YWluaW5nIHRoZSB0aXRsZSBhbmQgZGVzY3JpcHRpb24gb2YgdGhlIE1pY3JvQ2hhcnRcblx0ICogQHJldHVybnMgLSBDb2x1bW4gd2lkdGggaWYgZGVmaW5lZCwgb3RoZXJ3aXNlIG51bGwgKCB0aGUgd2lkdGggaXMgdHJlYXRlZCBhcyBhIHJlbSB2YWx1ZSlcblx0ICovXG5cdGdldENvbHVtbldpZHRoRm9yRGF0YUZpZWxkOiBmdW5jdGlvbiAoXG5cdFx0b1RoaXM6IENvbHVtbldpZHRoVGhpcyxcblx0XHRjb2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0XHRkYXRhRmllbGQ6IE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkIHwgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiB8IERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbj4sXG5cdFx0ZGF0YUZpZWxkQWN0aW9uVGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcz4sXG5cdFx0bWljcm9DaGFydFRpdGxlPzogTWljcm9DaGFydEluZm9cblx0KTogbnVtYmVyIHwgbnVsbCB7XG5cdFx0Y29uc3QgYW5ub3RhdGlvbnMgPSBkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM7XG5cdFx0Y29uc3QgZGF0YVR5cGUgPSBkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdD8uJFR5cGU7XG5cdFx0bGV0IHdpZHRoOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblx0XHRpZiAoXG5cdFx0XHRkYXRhVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uIHx8XG5cdFx0XHRkYXRhVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIHx8XG5cdFx0XHQoZGF0YVR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiZcblx0XHRcdFx0IShkYXRhRmllbGQgYXMgTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRGb3JBbm5vdGF0aW9uPikuVGFyZ2V0Py4kQW5ub3RhdGlvblBhdGguaW5jbHVkZXMoYEAke1VJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXB9YCkpXG5cdFx0KSB7XG5cdFx0XHRsZXQgblRtcFRleHRXaWR0aDtcblx0XHRcdG5UbXBUZXh0V2lkdGggPVxuXHRcdFx0XHRTaXplSGVscGVyLmdldEJ1dHRvbldpZHRoKGRhdGFGaWVsZEFjdGlvblRleHQpIHx8XG5cdFx0XHRcdFNpemVIZWxwZXIuZ2V0QnV0dG9uV2lkdGgoZGF0YUZpZWxkPy5MYWJlbD8udG9TdHJpbmcoKSkgfHxcblx0XHRcdFx0U2l6ZUhlbHBlci5nZXRCdXR0b25XaWR0aCgoYW5ub3RhdGlvbnMgYXMgeyBMYWJlbD86IHN0cmluZyB9KT8uTGFiZWwpOyAvLyBSRVZJRVcgOiBUaGlzIG1ha2VzIG5vIHNlbnNlIDopXG5cblx0XHRcdC8vIGdldCB3aWR0aCBmb3IgcmF0aW5nIG9yIHByb2dyZXNzIGJhciBkYXRhZmllbGRcblx0XHRcdGNvbnN0IG5UbXBWaXN1YWxpemF0aW9uV2lkdGggPSBUYWJsZVNpemVIZWxwZXIuZ2V0V2lkdGhGb3JEYXRhRmllbGRGb3JBbm5vdGF0aW9uKFxuXHRcdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCxcblx0XHRcdFx0dGhpcy5fc2hvdWxkSW5jbHVkZUhlYWRlckluQ29sdW1ud2lkaENhbGN1bGF0aW9uKG9UaGlzLCBjb2x1bW4pXG5cdFx0XHQpLnByb3BlcnR5V2lkdGg7XG5cblx0XHRcdGlmIChuVG1wVmlzdWFsaXphdGlvbldpZHRoID4gblRtcFRleHRXaWR0aCkge1xuXHRcdFx0XHR3aWR0aCA9IG5UbXBWaXN1YWxpemF0aW9uV2lkdGg7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRkYXRhRmllbGRBY3Rpb25UZXh0IHx8XG5cdFx0XHRcdChhbm5vdGF0aW9ucyAmJlxuXHRcdFx0XHRcdChpc0Fubm90YXRpb25PZlR5cGUoYW5ub3RhdGlvbnMsIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikgfHxcblx0XHRcdFx0XHRcdGlzQW5ub3RhdGlvbk9mVHlwZShhbm5vdGF0aW9ucywgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uKSkpXG5cdFx0XHQpIHtcblx0XHRcdFx0Ly8gQWRkIGFkZGl0aW9uYWwgMS44IHJlbSB0byBhdm9pZCBzaG93aW5nIGVsbGlwc2lzIGluIHNvbWUgY2FzZXMuXG5cdFx0XHRcdG5UbXBUZXh0V2lkdGggKz0gMS44O1xuXHRcdFx0XHR3aWR0aCA9IG5UbXBUZXh0V2lkdGg7XG5cdFx0XHR9XG5cdFx0XHR3aWR0aCA9IHdpZHRoID8/IHRoaXMuZ2V0Q29sdW1uV2lkdGhGb3JDaGFydChvVGhpcywgY29sdW1uLCBkYXRhRmllbGQsIG5UbXBUZXh0V2lkdGgsIG1pY3JvQ2hhcnRUaXRsZSk7XG5cdFx0fVxuXHRcdHJldHVybiB3aWR0aDtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB0aGUgd2lkdGggb2YgdGhlIGNvbHVtbiBjb250YWluaW5nIHRoZSBDaGFydC5cblx0ICogQHBhcmFtIG9UaGlzIFRoZSBpbnN0YW5jZSBvZiB0aGUgaW5uZXIgbW9kZWwgb2YgdGhlIFRhYmxlIGJ1aWxkaW5nIGJsb2NrXG5cdCAqIEBwYXJhbSBjb2x1bW4gRGVmaW5lZCB3aWR0aCBvZiB0aGUgY29sdW1uLCB3aGljaCBpcyB0YWtlbiB3aXRoIHByaW9yaXR5IGlmIG5vdCBudWxsLCB1bmRlZmluZWQgb3IgZW1wdHlcblx0ICogQHBhcmFtIGRhdGFGaWVsZCBEYXRhIEZpZWxkXG5cdCAqIEBwYXJhbSBjb2x1bW5MYWJlbFdpZHRoIFRoZSB3aWR0aCBvZiB0aGUgY29sdW1uIGxhYmVsIG9yIGJ1dHRvbiBsYWJlbFxuXHQgKiBAcGFyYW0gbWljcm9DaGFydFRpdGxlIFRoZSBvYmplY3QgY29udGFpbmluZyB0aGUgdGl0bGUgYW5kIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTWljcm9DaGFydFxuXHQgKiBAcmV0dXJucyAtIENvbHVtbiB3aWR0aCBpZiBkZWZpbmVkLCBvdGhlcndpc2UgbnVsbCAodGhlIHdpZHRoIGlzIHRyZWF0ZWQgYXMgYSByZW0gdmFsdWUpXG5cdCAqL1xuXHRnZXRDb2x1bW5XaWR0aEZvckNoYXJ0KFxuXHRcdG9UaGlzOiBDb2x1bW5XaWR0aFRoaXMsXG5cdFx0Y29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdFx0ZGF0YUZpZWxkOiBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZCB8IERhdGFGaWVsZEZvckFubm90YXRpb24gfCBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24+LFxuXHRcdGNvbHVtbkxhYmVsV2lkdGg6IG51bWJlcixcblx0XHRtaWNyb0NoYXJ0VGl0bGU/OiBNaWNyb0NoYXJ0SW5mb1xuXHQpOiBudW1iZXIgfCBudWxsIHtcblx0XHRsZXQgY2hhcnRTaXplLFxuXHRcdFx0d2lkdGg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXHRcdGlmICgoZGF0YUZpZWxkIGFzIE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkRm9yQW5ub3RhdGlvbj4pLlRhcmdldD8uJEFubm90YXRpb25QYXRoPy5pbmNsdWRlcyhgQCR7VUlBbm5vdGF0aW9uVGVybXMuQ2hhcnR9YCkpIHtcblx0XHRcdHN3aXRjaCAodGhpcy5nZXRDaGFydFNpemUob1RoaXMsIGNvbHVtbikpIHtcblx0XHRcdFx0Y2FzZSBcIlhTXCI6XG5cdFx0XHRcdFx0Y2hhcnRTaXplID0gNC40O1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiU1wiOlxuXHRcdFx0XHRcdGNoYXJ0U2l6ZSA9IDQuNjtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIk1cIjpcblx0XHRcdFx0XHRjaGFydFNpemUgPSA1LjU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJMXCI6XG5cdFx0XHRcdFx0Y2hhcnRTaXplID0gNi45O1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGNoYXJ0U2l6ZSA9IDUuMztcblx0XHRcdH1cblx0XHRcdGNvbHVtbkxhYmVsV2lkdGggKz0gMS44O1xuXHRcdFx0aWYgKCF0aGlzLmdldFNob3dPbmx5Q2hhcnQob1RoaXMsIGNvbHVtbikgJiYgKG1pY3JvQ2hhcnRUaXRsZT8udGl0bGUubGVuZ3RoIHx8IG1pY3JvQ2hhcnRUaXRsZT8uZGVzY3JpcHRpb24ubGVuZ3RoKSkge1xuXHRcdFx0XHRjb25zdCB0bXBUZXh0ID1cblx0XHRcdFx0XHRtaWNyb0NoYXJ0VGl0bGUudGl0bGUubGVuZ3RoID4gbWljcm9DaGFydFRpdGxlLmRlc2NyaXB0aW9uLmxlbmd0aCA/IG1pY3JvQ2hhcnRUaXRsZS50aXRsZSA6IG1pY3JvQ2hhcnRUaXRsZS5kZXNjcmlwdGlvbjtcblx0XHRcdFx0Y29uc3QgdGl0bGVTaXplID0gU2l6ZUhlbHBlci5nZXRCdXR0b25XaWR0aCh0bXBUZXh0KSArIDc7XG5cdFx0XHRcdGNvbnN0IHRtcFdpZHRoID0gdGl0bGVTaXplID4gY29sdW1uTGFiZWxXaWR0aCA/IHRpdGxlU2l6ZSA6IGNvbHVtbkxhYmVsV2lkdGg7XG5cdFx0XHRcdHdpZHRoID0gdG1wV2lkdGg7XG5cdFx0XHR9IGVsc2UgaWYgKGNvbHVtbkxhYmVsV2lkdGggPiBjaGFydFNpemUpIHtcblx0XHRcdFx0d2lkdGggPSBjb2x1bW5MYWJlbFdpZHRoO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2lkdGggPSBjaGFydFNpemU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB3aWR0aDtcblx0fSxcblx0LyoqXG5cdCAqIE1ldGhvZCB0byBhZGQgYSBtYXJnaW4gY2xhc3MgYXQgdGhlIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBzVmlzdWFsaXphdGlvblxuXHQgKiBAcGFyYW0gaXNMYXN0RmllbGQgSW5kaWNhdGVzIGlmIHRoZSBmaWVsZCBpcyB0aGUgbGFzdCBmaWVsZCBpbiB0aGUgZmllbGQgZ3JvdXBcblx0ICogQHJldHVybnMgQWRqdXN0aW5nIHRoZSBtYXJnaW5cblx0ICovXG5cdGdldE1hcmdpbkNsYXNzOiBmdW5jdGlvbiAoc1Zpc3VhbGl6YXRpb246IHN0cmluZywgaXNMYXN0RmllbGQ6IGJvb2xlYW4pOiBzdHJpbmcge1xuXHRcdGxldCBzQ2xhc3MgPSBcIlwiO1xuXHRcdGlmIChpc0xhc3RGaWVsZCkge1xuXHRcdFx0Ly9JZiByYXRpbmcgaW5kaWNhdG9yIGlzIGxhc3QgZWxlbWVudCBpbiBmaWVsZGdyb3VwLCB0aGVuIHRoZSAwLjVyZW0gbWFyZ2luIGFkZGVkIGJ5IHNhcE1SSSBjbGFzcyBvZiBpbnRlcmFjdGl2ZSByYXRpbmcgaW5kaWNhdG9yIG9uIHRvcCBhbmQgYm90dG9tIG11c3QgYmUgbnVsbGlmaWVkLlxuXHRcdFx0aWYgKHNWaXN1YWxpemF0aW9uID09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVmlzdWFsaXphdGlvblR5cGUvUmF0aW5nXCIpIHtcblx0XHRcdFx0c0NsYXNzID0gXCJzYXBVaU5vTWFyZ2luQm90dG9tIHNhcFVpTm9NYXJnaW5Ub3BcIjtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHNWaXN1YWxpemF0aW9uID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlZpc3VhbGl6YXRpb25UeXBlL1JhdGluZ1wiKSB7XG5cdFx0XHQvL0lmIHJhdGluZyBpbmRpY2F0b3IgaXMgTk9UIHRoZSBsYXN0IGVsZW1lbnQgaW4gZmllbGRncm91cCwgdGhlbiB0byBtYWludGFpbiB0aGUgMC41cmVtIHNwYWNpbmcgYmV0d2VlbiBjb2dldE1hcmdpbkNsYXNzbnRyb2xzIChhcyBwZXIgVVggc3BlYyksXG5cdFx0XHQvL29ubHkgdGhlIHRvcCBtYXJnaW4gYWRkZWQgYnkgc2FwTVJJIGNsYXNzIG9mIGludGVyYWN0aXZlIHJhdGluZyBpbmRpY2F0b3IgbXVzdCBiZSBudWxsaWZpZWQuXG5cblx0XHRcdHNDbGFzcyA9IFwic2FwVWlOb01hcmdpblRvcFwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzQ2xhc3MgPSBcInNhcFVpVGlueU1hcmdpbkJvdHRvbVwiO1xuXHRcdH1cblx0XHRyZXR1cm4gc0NsYXNzO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IFZCb3ggdmlzaWJpbGl0eS5cblx0ICogQHBhcmFtIGNvbGxlY3Rpb24gQ29sbGVjdGlvbiBvZiBkYXRhIGZpZWxkcyBpbiBWQm94XG5cdCAqIEBwYXJhbSBmaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMgSGlkZGVuIGV4cHJlc3Npb24gY29udGFpbmVkIGluIEZpZWxkR3JvdXBcblx0ICogQHBhcmFtIGZpZWxkR3JvdXAgRGF0YSBmaWVsZCBjb250YWluaW5nIHRoZSBWQm94XG5cdCAqIEByZXR1cm5zIFZpc2liaWxpdHkgZXhwcmVzc2lvblxuXHQgKi9cblx0Z2V0VkJveFZpc2liaWxpdHk6IGZ1bmN0aW9uIChcblx0XHRjb2xsZWN0aW9uOiBBcnJheTxEYXRhRmllbGRGb3JBbm5vdGF0aW9uICYgSGlkZGVuPixcblx0XHRmaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnM6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLFxuXHRcdGZpZWxkR3JvdXA6IEZpZWxkR3JvdXAgJiBIaWRkZW5cblx0KTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRcdGxldCBhbGxTdGF0aWMgPSB0cnVlO1xuXHRcdGNvbnN0IGhpZGRlblBhdGhzID0gW107XG5cblx0XHRpZiAoZmllbGRHcm91cFtgQCR7VUlBbm5vdGF0aW9uVGVybXMuSGlkZGVufWBdKSB7XG5cdFx0XHRyZXR1cm4gZmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgZGF0YUZpZWxkIG9mIGNvbGxlY3Rpb24pIHtcblx0XHRcdGNvbnN0IGhpZGRlbkFubm90YXRpb25WYWx1ZSA9IGRhdGFGaWVsZFtgQCR7VUlBbm5vdGF0aW9uVGVybXMuSGlkZGVufWBdO1xuXHRcdFx0aWYgKGhpZGRlbkFubm90YXRpb25WYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGhpZGRlbkFubm90YXRpb25WYWx1ZSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0aGlkZGVuUGF0aHMucHVzaChmYWxzZSk7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGhpZGRlbkFubm90YXRpb25WYWx1ZSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRoaWRkZW5QYXRocy5wdXNoKHRydWUpO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGlmIChoaWRkZW5Bbm5vdGF0aW9uVmFsdWUuJFBhdGgpIHtcblx0XHRcdFx0aGlkZGVuUGF0aHMucHVzaChwYXRoSW5Nb2RlbChoaWRkZW5Bbm5vdGF0aW9uVmFsdWUuJFBhdGgpKTtcblx0XHRcdFx0YWxsU3RhdGljID0gZmFsc2U7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHR5cGVvZiBoaWRkZW5Bbm5vdGF0aW9uVmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0Ly8gRHluYW1pYyBleHByZXNzaW9uIGZvdW5kIGluIGEgZmllbGRcblx0XHRcdFx0cmV0dXJuIGZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBoYXNBbnlQYXRoRXhwcmVzc2lvbnMgPSBjb25zdGFudChoaWRkZW5QYXRocy5sZW5ndGggPiAwICYmIGFsbFN0YXRpYyAhPT0gdHJ1ZSk7XG5cdFx0Y29uc3QgaGFzQWxsSGlkZGVuU3RhdGljRXhwcmVzc2lvbnMgPSBjb25zdGFudChoaWRkZW5QYXRocy5sZW5ndGggPiAwICYmICFoaWRkZW5QYXRocy5pbmNsdWRlcyhmYWxzZSkgJiYgYWxsU3RhdGljKTtcblxuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0aGFzQW55UGF0aEV4cHJlc3Npb25zLFxuXHRcdFx0XHRmb3JtYXRSZXN1bHQoaGlkZGVuUGF0aHMsIFRhYmxlRm9ybWF0dGVyLmdldFZCb3hWaXNpYmlsaXR5KSxcblx0XHRcdFx0aWZFbHNlKGhhc0FsbEhpZGRlblN0YXRpY0V4cHJlc3Npb25zLCBjb25zdGFudChmYWxzZSksIGNvbnN0YW50KHRydWUpKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBnZXQgdGhlIHN0YWJsZSBJRCBvZiBhIHRhYmxlIGVsZW1lbnQgKGNvbHVtbiBvciBGaWVsZEdyb3VwIGxhYmVsKS5cblx0ICogQHBhcmFtIHRhYmxlSWQgQ3VycmVudCBvYmplY3QgSURcblx0ICogQHBhcmFtIGVsZW1lbnRJZCBFbGVtZW50IElkIG9yIHN1ZmZpeFxuXHQgKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBEYXRhTW9kZWxPYmplY3RQYXRoIG9mIHRoZSBkYXRhRmllbGRcblx0ICogQHJldHVybnMgVGhlIHN0YWJsZSBJRCBmb3IgYSBnaXZlbiBjb2x1bW5cblx0ICovXG5cdGdldEVsZW1lbnRTdGFibGVJZDogZnVuY3Rpb24gKFxuXHRcdHRhYmxlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRlbGVtZW50SWQ6IHN0cmluZyxcblx0XHRkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+XG5cdCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKCF0YWJsZUlkKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRjb25zdCBkYXRhRmllbGQgPSBkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdDtcblx0XHRsZXQgZGF0YUZpZWxkUGFydDogc3RyaW5nIHwgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcztcblx0XHRzd2l0Y2ggKGRhdGFGaWVsZD8uJFR5cGUpIHtcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRcdFx0ZGF0YUZpZWxkUGFydCA9IGRhdGFGaWVsZC5UYXJnZXQudmFsdWU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybDpcblx0XHRcdFx0ZGF0YUZpZWxkUGFydCA9IGRhdGFGaWVsZDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRkYXRhRmllbGRQYXJ0ID0gKGRhdGFGaWVsZCBhcyBEYXRhRmllbGQpLlZhbHVlPy5wYXRoID8/IFwiXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRyZXR1cm4gZ2VuZXJhdGUoW3RhYmxlSWQsIGVsZW1lbnRJZCwgZGF0YUZpZWxkUGFydF0pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IHRoZSBzdGFibGUgSUQgb2YgdGhlIGNvbHVtbi5cblx0ICogQHBhcmFtIGlkIEN1cnJlbnQgb2JqZWN0IElEXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIERhdGFNb2RlbE9iamVjdFBhdGggb2YgdGhlIGRhdGFGaWVsZFxuXHQgKiBAcmV0dXJucyBUaGUgc3RhYmxlIElEIGZvciBhIGdpdmVuIGNvbHVtblxuXHQgKi9cblx0Z2V0Q29sdW1uU3RhYmxlSWQ6IGZ1bmN0aW9uIChpZDogc3RyaW5nLCBkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gVGFibGVIZWxwZXIuZ2V0RWxlbWVudFN0YWJsZUlkKGlkLCBcIkNcIiwgZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdH0sXG5cblx0Z2V0RmllbGRHcm91cExhYmVsU3RhYmxlSWQ6IGZ1bmN0aW9uIChcblx0XHRpZDogc3RyaW5nLFxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcz5cblx0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gVGFibGVIZWxwZXIuZ2V0RWxlbWVudFN0YWJsZUlkKGlkLCBcIkZHTGFiZWxcIiwgZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBnZXQgdGhlIGV4cHJlc3Npb24gZm9yIHRoZSAncHJlc3MnIGV2ZW50IGZvciB0aGUgRGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uLlxuXHQgKiBAcGFyYW0gdGFibGVQcm9wZXJ0aWVzIFRoZSBwcm9wZXJ0aWVzIG9mIHRoZSB0YWJsZSBjb250cm9sXG5cdCAqIEBwYXJhbSB0YWJsZVByb3BlcnRpZXMuY29udGV4dE9iamVjdFBhdGggVGhlIGRhdGFtb2RlbCBvYmplY3QgcGF0aCBmb3IgdGhlIHRhYmxlXG5cdCAqIEBwYXJhbSB0YWJsZVByb3BlcnRpZXMuY29udGVudElkIFRoZSBpZCBvZiB0aGUgTURDIHRhYmxlIGNvbnRyb2xcblx0ICogQHBhcmFtIGRhdGFGaWVsZCBWYWx1ZSBvZiB0aGUgRGF0YVBvaW50XG5cdCAqIEBwYXJhbSBlbnRpdHlTZXROYW1lIE5hbWUgb2YgdGhlIEVudGl0eVNldFxuXHQgKiBAcGFyYW0gb3BlcmF0aW9uQXZhaWxhYmxlTWFwIE9wZXJhdGlvbkF2YWlsYWJsZU1hcCBhcyBzdHJpbmdpZmllZCBKU09OIG9iamVjdFxuXHQgKiBAcGFyYW0gYWN0aW9uT2JqZWN0XG5cdCAqIEBwYXJhbSBpc05hdmlnYWJsZSBBY3Rpb24gZWl0aGVyIHRyaWdnZXJzIG5hdmlnYXRpb24gb3Igbm90XG5cdCAqIEBwYXJhbSBlbmFibGVBdXRvU2Nyb2xsIEFjdGlvbiBlaXRoZXIgdHJpZ2dlcnMgc2Nyb2xsaW5nIHRvIHRoZSBuZXdseSBjcmVhdGVkIGl0ZW1zIGluIHRoZSByZWxhdGVkIHRhYmxlIG9yIG5vdFxuXHQgKiBAcGFyYW0gZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uIEZ1bmN0aW9uIG5hbWUgdG8gcHJlZmlsbCBkaWFsb2cgcGFyYW1ldGVyc1xuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG5cdCAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb25cblx0ICovXG5cdHByZXNzRXZlbnREYXRhRmllbGRGb3JBY3Rpb25CdXR0b246IGZ1bmN0aW9uIChcblx0XHR0YWJsZVByb3BlcnRpZXM6IHtcblx0XHRcdGNvbnRleHRPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPExpbmVJdGVtIHwgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCB8IFByZXNlbnRhdGlvblZhcmlhbnQ+O1xuXHRcdFx0Y29udGVudElkOiBzdHJpbmc7XG5cdFx0fSxcblx0XHRkYXRhRmllbGQ6IERhdGFGaWVsZEZvckFjdGlvbiB8IHVuZGVmaW5lZCxcblx0XHRlbnRpdHlTZXROYW1lOiBzdHJpbmcsXG5cdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBzdHJpbmcsXG5cdFx0YWN0aW9uT2JqZWN0PzogTWV0YU1vZGVsQWN0aW9uIHwgTWV0YU1vZGVsQWN0aW9uW10gfCBzdHJpbmcsXG5cdFx0aXNOYXZpZ2FibGUgPSBmYWxzZSxcblx0XHRlbmFibGVBdXRvU2Nyb2xsPzogYm9vbGVhbixcblx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24/OiBzdHJpbmcsXG5cdFx0Zm9yQ29udGV4dE1lbnU/OiBib29sZWFuXG5cdCk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0XHRpZiAoIWRhdGFGaWVsZCkgcmV0dXJuIHVuZGVmaW5lZDtcblx0XHRjb25zdCBzQWN0aW9uTmFtZSA9IGRhdGFGaWVsZC5BY3Rpb24sXG5cdFx0XHR0YXJnZXRFbnRpdHlUeXBlTmFtZSA9IHRhYmxlUHJvcGVydGllcy5jb250ZXh0T2JqZWN0UGF0aC50YXJnZXRFbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdHN0YXRpY0FjdGlvbiA9XG5cdFx0XHRcdHR5cGVvZiBhY3Rpb25PYmplY3QgIT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0KHRoaXMuX2lzU3RhdGljQWN0aW9uKGFjdGlvbk9iamVjdCwgc0FjdGlvbk5hbWUpIHx8XG5cdFx0XHRcdFx0dGhpcy5faXNBY3Rpb25PdmVybG9hZE9uRGlmZmVyZW50VHlwZShzQWN0aW9uTmFtZS50b1N0cmluZygpLCB0YXJnZXRFbnRpdHlUeXBlTmFtZSkpLFxuXHRcdFx0YXBwbGljYWJsZVByb3BlcnR5ID0gIWZvckNvbnRleHRNZW51ID8gXCJhQXBwbGljYWJsZVwiIDogXCJhQXBwbGljYWJsZUZvckNvbnRleHRNZW51XCIsXG5cdFx0XHRub3RBcHBsaWNhYmxlUHJvcGVydHkgPSAhZm9yQ29udGV4dE1lbnUgPyBcImFOb3RBcHBsaWNhYmxlXCIgOiBcImFOb3RBcHBsaWNhYmxlRm9yQ29udGV4dE1lbnVcIixcblx0XHRcdGNvbnRleHRNZW51UGF0aCA9ICFmb3JDb250ZXh0TWVudSA/IFwiXCIgOiBcImNvbnRleHRtZW51L1wiLFxuXHRcdFx0Y29udGV4dCA9IHBhdGhJbk1vZGVsKGAke2NvbnRleHRNZW51UGF0aH1zZWxlY3RlZENvbnRleHRzYCwgXCJpbnRlcm5hbFwiKSxcblx0XHRcdHBhcmFtcyA9IHtcblx0XHRcdFx0Y29udGV4dHM6ICFzdGF0aWNBY3Rpb24gPyBjb250ZXh0IDogbnVsbCxcblx0XHRcdFx0YlN0YXRpY0FjdGlvbjogc3RhdGljQWN0aW9uID8gc3RhdGljQWN0aW9uIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRlbnRpdHlTZXROYW1lOiBlbnRpdHlTZXROYW1lLFxuXHRcdFx0XHRhcHBsaWNhYmxlQ29udGV4dHM6ICFzdGF0aWNBY3Rpb25cblx0XHRcdFx0XHQ/IHBhdGhJbk1vZGVsKGBkeW5hbWljQWN0aW9ucy8ke2RhdGFGaWVsZC5BY3Rpb259LyR7YXBwbGljYWJsZVByb3BlcnR5fS9gLCBcImludGVybmFsXCIpXG5cdFx0XHRcdFx0OiBudWxsLFxuXHRcdFx0XHRub3RBcHBsaWNhYmxlQ29udGV4dHM6ICFzdGF0aWNBY3Rpb25cblx0XHRcdFx0XHQ/IHBhdGhJbk1vZGVsKGBkeW5hbWljQWN0aW9ucy8ke2RhdGFGaWVsZC5BY3Rpb259LyR7bm90QXBwbGljYWJsZVByb3BlcnR5fS9gLCBcImludGVybmFsXCIpXG5cdFx0XHRcdFx0OiBudWxsLFxuXHRcdFx0XHRpc05hdmlnYWJsZTogaXNOYXZpZ2FibGUsXG5cdFx0XHRcdGVuYWJsZUF1dG9TY3JvbGw6IGVuYWJsZUF1dG9TY3JvbGwsXG5cdFx0XHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbjogZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLFxuXHRcdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc6IGRhdGFGaWVsZD8uSW52b2NhdGlvbkdyb3VwaW5nID09PSBcIlVJLk9wZXJhdGlvbkdyb3VwaW5nVHlwZS9DaGFuZ2VTZXRcIiA/IFwiQ2hhbmdlU2V0XCIgOiBcIklzb2xhdGVkXCIsXG5cdFx0XHRcdGNvbnRyb2xJZDogdGFibGVQcm9wZXJ0aWVzLmNvbnRlbnRJZCxcblx0XHRcdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBvcGVyYXRpb25BdmFpbGFibGVNYXAsXG5cdFx0XHRcdGxhYmVsOiBkYXRhRmllbGQuTGFiZWxcblx0XHRcdH07XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGZuKFwiQVBJLm9uQWN0aW9uUHJlc3NcIiwgW3JlZihcIiRldmVudFwiKSwgcmVmKFwiJGNvbnRyb2xsZXJcIiksIGRhdGFGaWVsZC5BY3Rpb24sIHBhcmFtc10pKTtcblx0XHQvL3JldHVybiBBY3Rpb25IZWxwZXIuZ2V0UHJlc3NFdmVudERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvbih0YWJsZS5pZCEsIGRhdGFGaWVsZCwgcGFyYW1zLCBvcGVyYXRpb25BdmFpbGFibGVNYXApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZGV0ZXJtaW5lIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yICdlbmFibGVkJyBwcm9wZXJ0eSBvZiBEYXRhRmllbGRGb3JBY3Rpb24gYWN0aW9ucy5cblx0ICogQHBhcmFtIHRhYmxlRGVmaW5pdGlvbiBUaGUgdGFibGUgZGVmaW5pdGlvbiBmcm9tIHRoZSB0YWJsZSBjb252ZXJ0ZXJcblx0ICogQHBhcmFtIGFjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGFjdGlvblxuXHQgKiBAcGFyYW0gaXNCb3VuZCBJc0JvdW5kIGZvciBBY3Rpb25cblx0ICogQHBhcmFtIGFjdGlvbk9iamVjdFxuXHQgKiBAcGFyYW0gZW5hYmxlT25TZWxlY3QgRGVmaW5lIHRoZSBlbmFibGluZyBvZiB0aGUgYWN0aW9uIChzaW5nbGUgb3IgbXVsdGlzZWxlY3QpXG5cdCAqIEBwYXJhbSBhbm5vdGF0aW9uVGFyZ2V0RW50aXR5VHlwZSBUaGUgZW50aXR5IHR5cGUgb2YgdGhlIGFubm90YXRpb24gdGFyZ2V0XG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcblx0ICogQHBhcmFtIGlzQ29weVxuXHQgKiBAcmV0dXJucyBBIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBkZWZpbmUgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgYWN0aW9uXG5cdCAqL1xuXHRpc0RhdGFGaWVsZEZvckFjdGlvbkVuYWJsZWQ6IGZ1bmN0aW9uIChcblx0XHR0YWJsZURlZmluaXRpb246IFRhYmxlVmlzdWFsaXphdGlvbixcblx0XHRhY3Rpb25OYW1lOiBzdHJpbmcgfCBTdHJpbmcsXG5cdFx0aXNCb3VuZDogYm9vbGVhbixcblx0XHRhY3Rpb25PYmplY3Q/OiBNZXRhTW9kZWxBY3Rpb24gfCBNZXRhTW9kZWxBY3Rpb25bXSB8IHN0cmluZyxcblx0XHRlbmFibGVPblNlbGVjdD86IHN0cmluZyxcblx0XHRhbm5vdGF0aW9uVGFyZ2V0RW50aXR5VHlwZT86IEVudGl0eVR5cGUsXG5cdFx0Zm9yQ29udGV4dE1lbnU/OiBib29sZWFuLFxuXHRcdGlzQ29weT86IGJvb2xlYW5cblx0KTogc3RyaW5nIHwgYm9vbGVhbiB7XG5cdFx0aWYgKCFhbm5vdGF0aW9uVGFyZ2V0RW50aXR5VHlwZSkgcmV0dXJuIGZhbHNlO1xuXG5cdFx0Y29uc3QgaXNTdGF0aWNBY3Rpb24gPSB0aGlzLl9pc1N0YXRpY0FjdGlvbihhY3Rpb25PYmplY3QsIGFjdGlvbk5hbWUpO1xuXG5cdFx0Ly8gQ2hlY2sgZm9yIGFjdGlvbiBvdmVybG9hZCBvbiBhIGRpZmZlcmVudCBFbnRpdHkgdHlwZS5cblx0XHQvLyBJZiB5ZXMsIHRhYmxlIHJvdyBzZWxlY3Rpb24gaXMgbm90IHJlcXVpcmVkIHRvIGVuYWJsZSB0aGlzIGFjdGlvbi5cblx0XHRpZiAodGhpcy5faXNBY3Rpb25PdmVybG9hZE9uRGlmZmVyZW50VHlwZShhY3Rpb25OYW1lLnRvU3RyaW5nKCksIGFubm90YXRpb25UYXJnZXRFbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSkpIHtcblx0XHRcdC8vIEFjdGlvbiBvdmVybG9hZCBkZWZpbmVkIG9uIGRpZmZlcmVudCBlbnRpdHkgdHlwZVxuXHRcdFx0Y29uc3Qgb09wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IHRhYmxlRGVmaW5pdGlvbiAmJiBKU09OLnBhcnNlKHRhYmxlRGVmaW5pdGlvbi5vcGVyYXRpb25BdmFpbGFibGVNYXApO1xuXHRcdFx0aWYgKG9PcGVyYXRpb25BdmFpbGFibGVNYXA/Lmhhc093blByb3BlcnR5KGFjdGlvbk5hbWUpKSB7XG5cdFx0XHRcdC8vIENvcmUuT3BlcmF0aW9uQXZhaWxhYmxlIGFubm90YXRpb24gZGVmaW5lZCBmb3IgdGhlIGFjdGlvbi5cblx0XHRcdFx0Ly8gTmVlZCB0byByZWZlciB0byBpbnRlcm5hbCBtb2RlbCBmb3IgZW5hYmxlZCBwcm9wZXJ0eSBvZiB0aGUgZHluYW1pYyBhY3Rpb24uXG5cdFx0XHRcdC8vIHJldHVybiBjb21waWxlQmluZGluZyhiaW5kaW5nRXhwcmVzc2lvbihcImR5bmFtaWNBY3Rpb25zL1wiICsgc0FjdGlvbk5hbWUgKyBcIi9iRW5hYmxlZFwiLCBcImludGVybmFsXCIpLCB0cnVlKTtcblx0XHRcdFx0cmV0dXJuICFmb3JDb250ZXh0TWVudVxuXHRcdFx0XHRcdD8gYHs9IFxcJHtpbnRlcm5hbD5keW5hbWljQWN0aW9ucy8ke2FjdGlvbk5hbWV9L2JFbmFibGVkfSB9YFxuXHRcdFx0XHRcdDogYHs9IFxcJHtpbnRlcm5hbD5keW5hbWljQWN0aW9ucy8ke2FjdGlvbk5hbWV9L2JFbmFibGVkRm9yQ29udGV4dE1lbnV9IH1gO1xuXHRcdFx0fVxuXHRcdFx0Ly8gQ29uc2lkZXIgdGhlIGFjdGlvbiBqdXN0IGxpa2UgYW55IG90aGVyIHN0YXRpYyBEYXRhRmllbGRGb3JBY3Rpb24uXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0aWYgKCFpc0JvdW5kIHx8IGlzU3RhdGljQWN0aW9uKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0Y29uc3QgbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzID0gaXNDb3B5XG5cdFx0XHQ/IEFjdGlvbkhlbHBlci5nZXROdW1iZXJPZkNvbnRleHRzRXhwcmVzc2lvbihcInNpbmdsZVwiLCBmb3JDb250ZXh0TWVudSlcblx0XHRcdDogQWN0aW9uSGVscGVyLmdldE51bWJlck9mQ29udGV4dHNFeHByZXNzaW9uKGVuYWJsZU9uU2VsZWN0ID8/IFwibXVsdGlzZWxlY3RcIiwgZm9yQ29udGV4dE1lbnUpO1xuXG5cdFx0bGV0IGRhdGFGaWVsZEZvckFjdGlvbkVuYWJsZWRFeHByZXNzaW9uID0gXCJcIjtcblxuXHRcdGNvbnN0IGFjdGlvbiA9ICFmb3JDb250ZXh0TWVudVxuXHRcdFx0PyBgXFwke2ludGVybmFsPmR5bmFtaWNBY3Rpb25zLyR7YWN0aW9uTmFtZX0vYkVuYWJsZWR9YFxuXHRcdFx0OiBgXFwke2ludGVybmFsPmR5bmFtaWNBY3Rpb25zLyR7YWN0aW9uTmFtZX0vYkVuYWJsZWRGb3JDb250ZXh0TWVudX1gO1xuXHRcdGRhdGFGaWVsZEZvckFjdGlvbkVuYWJsZWRFeHByZXNzaW9uID0gYCR7bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzfSAmJiAke2FjdGlvbn1gO1xuXG5cdFx0cmV0dXJuIGB7PSAke2RhdGFGaWVsZEZvckFjdGlvbkVuYWJsZWRFeHByZXNzaW9ufX1gO1xuXHR9LFxuXHQvKipcblx0ICogTWV0aG9kIHRvIGRldGVybWluZSB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciAnZW5hYmxlZCcgcHJvcGVydHkgb2YgRGF0YUZpZWxkRm9ySUJOIGFjdGlvbnMuXG5cdCAqIEBwYXJhbSB0YWJsZVByb3BlcnRpZXMgVGhlIHByb3BlcnRpZXMgb2YgdGhlIHRhYmxlIGNvbnRyb2xcblx0ICogQHBhcmFtIHRhYmxlUHJvcGVydGllcy5jb2xsZWN0aW9uICBUaGUgY29sbGVjdGlvbiBjb250ZXh0IHRvIGJlIHVzZWRcblx0ICogQHBhcmFtIHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24gVGhlIHRhYmxlIGRlZmluaXRpb24gZnJvbSB0aGUgdGFibGUgY29udmVydGVyXG5cdCAqIEBwYXJhbSBkYXRhRmllbGQgVGhlIHZhbHVlIG9mIHRoZSBkYXRhIGZpZWxkXG5cdCAqIEBwYXJhbSByZXF1aXJlc0NvbnRleHQgUmVxdWlyZXNDb250ZXh0IGZvciBJQk5cblx0ICogQHBhcmFtIGlzTmF2aWdhdGlvbkF2YWlsYWJsZSBEZWZpbmUgaWYgdGhlIG5hdmlnYXRpb24gaXMgYXZhaWxhYmxlXG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuXHQgKiBAcmV0dXJucyBBIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBkZWZpbmUgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgYWN0aW9uXG5cdCAqL1xuXHRpc0RhdGFGaWVsZEZvcklCTkVuYWJsZWQ6IGZ1bmN0aW9uIChcblx0XHR0YWJsZVByb3BlcnRpZXM6IHtcblx0XHRcdGNvbGxlY3Rpb246IENvbnRleHQ7XG5cdFx0XHR0YWJsZURlZmluaXRpb246IFRhYmxlVmlzdWFsaXphdGlvbjtcblx0XHR9LFxuXHRcdGRhdGFGaWVsZDogRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdHJlcXVpcmVzQ29udGV4dDogYm9vbGVhbiB8IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPEJvb2xlYW4+LFxuXHRcdGlzTmF2aWdhdGlvbkF2YWlsYWJsZT86IGJvb2xlYW4gfCBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxCb29sZWFuPixcblx0XHRmb3JDb250ZXh0TWVudT86IGJvb2xlYW5cblx0KTogc3RyaW5nIHwgYm9vbGVhbiB7XG5cdFx0bGV0IGlzTmF2aWdhdGlvbkF2YWlsYWJsZVBhdGggPSBudWxsO1xuXHRcdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihpc05hdmlnYXRpb25BdmFpbGFibGUpKSB7XG5cdFx0XHRpc05hdmlnYXRpb25BdmFpbGFibGVQYXRoID0gaXNOYXZpZ2F0aW9uQXZhaWxhYmxlLnBhdGg7XG5cdFx0fVxuXHRcdGNvbnN0IGlzQW5hbHl0aWNhbFRhYmxlID0gdGFibGVQcm9wZXJ0aWVzPy50YWJsZURlZmluaXRpb24/LmVuYWJsZUFuYWx5dGljcztcblxuXHRcdGlmICghcmVxdWlyZXNDb250ZXh0KSB7XG5cdFx0XHRjb25zdCBlbnRpdHlTZXQgPSB0YWJsZVByb3BlcnRpZXMuY29sbGVjdGlvbi5nZXRQYXRoKCk7XG5cdFx0XHRjb25zdCBtZXRhTW9kZWwgPSB0YWJsZVByb3BlcnRpZXMuY29sbGVjdGlvbi5nZXRNb2RlbCgpO1xuXHRcdFx0aWYgKGlzTmF2aWdhdGlvbkF2YWlsYWJsZSA9PT0gZmFsc2UgJiYgIWlzQW5hbHl0aWNhbFRhYmxlKSB7XG5cdFx0XHRcdExvZy53YXJuaW5nKFwiTmF2aWdhdGlvbkF2YWlsYWJsZSBhcyBmYWxzZSBpcyBpbmNvcnJlY3QgdXNhZ2VcIik7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdGlzTmF2aWdhdGlvbkF2YWlsYWJsZVBhdGggJiZcblx0XHRcdFx0IWlzQW5hbHl0aWNhbFRhYmxlICYmXG5cdFx0XHRcdGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKGRhdGFGaWVsZD8uTmF2aWdhdGlvbkF2YWlsYWJsZSkgJiZcblx0XHRcdFx0bWV0YU1vZGVsLmdldE9iamVjdChlbnRpdHlTZXQgKyBcIi8kUGFydG5lclwiKSA9PT0gZGF0YUZpZWxkLk5hdmlnYXRpb25BdmFpbGFibGUucGF0aC5zcGxpdChcIi9cIilbMF1cblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gYHs9IFxcJHske2lzTmF2aWdhdGlvbkF2YWlsYWJsZVBhdGguc3Vic3RyaW5nKFxuXHRcdFx0XHRcdGlzTmF2aWdhdGlvbkF2YWlsYWJsZVBhdGguaW5kZXhPZihcIi9cIikgKyAxLFxuXHRcdFx0XHRcdGlzTmF2aWdhdGlvbkF2YWlsYWJsZVBhdGgubGVuZ3RoXG5cdFx0XHRcdCl9fX1gO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0bGV0IGRhdGFGaWVsZEZvcklCTkVuYWJsZWRFeHByZXNzaW9uID0gXCJcIixcblx0XHRcdG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyxcblx0XHRcdGFjdGlvbjtcblxuXHRcdGlmIChpc05hdmlnYXRpb25BdmFpbGFibGUgPT09IHRydWUgfHwgaXNBbmFseXRpY2FsVGFibGUpIHtcblx0XHRcdGRhdGFGaWVsZEZvcklCTkVuYWJsZWRFeHByZXNzaW9uID0gIShmb3JDb250ZXh0TWVudSA/PyBmYWxzZSlcblx0XHRcdFx0PyBcIiV7aW50ZXJuYWw+bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzfSA+PSAxXCJcblx0XHRcdFx0OiBcIiV7aW50ZXJuYWw+Y29udGV4dG1lbnUvbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzfSA+PSAxXCI7XG5cdFx0fSBlbHNlIGlmIChpc05hdmlnYXRpb25BdmFpbGFibGUgPT09IGZhbHNlKSB7XG5cdFx0XHRMb2cud2FybmluZyhcIk5hdmlnYXRpb25BdmFpbGFibGUgYXMgZmFsc2UgaXMgaW5jb3JyZWN0IHVzYWdlXCIpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPSAhKGZvckNvbnRleHRNZW51ID8/IGZhbHNlKVxuXHRcdFx0XHQ/IFwiJXtpbnRlcm5hbD5udW1iZXJPZlNlbGVjdGVkQ29udGV4dHN9ID49IDFcIlxuXHRcdFx0XHQ6IFwiJXtpbnRlcm5hbD5jb250ZXh0bWVudS9udW1iZXJPZlNlbGVjdGVkQ29udGV4dHN9ID49IDFcIjtcblx0XHRcdGFjdGlvbiA9ICEoZm9yQ29udGV4dE1lbnUgPz8gZmFsc2UpXG5cdFx0XHRcdD8gYFxcJHtpbnRlcm5hbD5pYm4vJHtkYXRhRmllbGQuU2VtYW50aWNPYmplY3R9LSR7ZGF0YUZpZWxkLkFjdGlvbn0vYkVuYWJsZWR9YFxuXHRcdFx0XHQ6IGBcXCR7aW50ZXJuYWw+aWJuLyR7ZGF0YUZpZWxkLlNlbWFudGljT2JqZWN0fS0ke2RhdGFGaWVsZC5BY3Rpb259L2JFbmFibGVkRm9yQ29udGV4dE1lbnV9YDtcblx0XHRcdGRhdGFGaWVsZEZvcklCTkVuYWJsZWRFeHByZXNzaW9uID0gbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzICsgXCIgJiYgXCIgKyBhY3Rpb247XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGB7PSAke2RhdGFGaWVsZEZvcklCTkVuYWJsZWRFeHByZXNzaW9ufX1gO1xuXHR9LFxuXG5cdGJ1aWxkRXhwcmVzc2lvbkZvck11bHRpVmFsdWVGaWVsZFJlYWRPbmx5OiBmdW5jdGlvbiAodGFibGU6IFRhYmxlQmxvY2spOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRvcih0YWJsZS5yZWFkT25seSA9PT0gdHJ1ZSwgYW5kKFVJLklzSW5hY3RpdmUsIHRhYmxlLmNyZWF0aW9uTW9kZS5uYW1lID09PSBcIklubGluZUNyZWF0aW9uUm93c1wiKSksXG5cdFx0XHRcdGNvbnN0YW50KHRydWUpLFxuXHRcdFx0XHRlcXVhbCh0YWJsZS5maWVsZE1vZGUsIFwibm93cmFwcGVyXCIpXG5cdFx0XHQpXG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHNldCB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgbGFiZWwgZm9yIHRoZSBjb2x1bW4gaGVhZGVyLlxuXHQgKiBAcGFyYW0gZGF0YWZpZWxkIERhdGFGaWVsZFxuXHQgKiBAcGFyYW0gZGF0YUZpZWxkQ29sbGVjdGlvbiBMaXN0IG9mIGl0ZW1zIGluc2lkZSBhIGZpZWxkZ3JvdXAgKGlmIGFueSlcblx0ICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBoZWFkZXIgbGFiZWwgbmVlZHMgdG8gYmUgdmlzaWJsZSBlbHNlIGZhbHNlLlxuXHQgKi9cblx0c2V0SGVhZGVyTGFiZWxWaXNpYmlsaXR5OiBmdW5jdGlvbiAoXG5cdFx0ZGF0YWZpZWxkOiBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbj4sXG5cdFx0ZGF0YUZpZWxkQ29sbGVjdGlvbj86IE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uPltdXG5cdCk6IGJvb2xlYW4ge1xuXHRcdC8vIElmIElubGluZSBidXR0b24vbmF2aWdhdGlvbiBhY3Rpb24sIHJldHVybiBmYWxzZSwgZWxzZSB0cnVlO1xuXHRcdGlmICghZGF0YUZpZWxkQ29sbGVjdGlvbikge1xuXHRcdFx0aWYgKGRhdGFmaWVsZC4kVHlwZT8uaW5jbHVkZXMoXCJEYXRhRmllbGRGb3JBY3Rpb25cIikgJiYgZGF0YWZpZWxkLklubGluZSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRpZiAoZGF0YWZpZWxkLiRUeXBlPy5pbmNsdWRlcyhcIkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblwiKSAmJiBkYXRhZmllbGQuSW5saW5lKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIEluIEZpZWxkZ3JvdXAsIElmIE5PVCBhbGwgZGF0YWZpZWxkL2RhdGFmaWVsZEZvckFubm90YXRpb24gZXhpc3RzIHdpdGggaGlkZGVuLCByZXR1cm4gdHJ1ZTtcblx0XHRyZXR1cm4gZGF0YUZpZWxkQ29sbGVjdGlvbi5zb21lKGZ1bmN0aW9uIChvREMpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0KG9EQy4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkIHx8IG9EQy4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikgJiZcblx0XHRcdFx0KG9EQyBhcyB1bmtub3duIGFzIEhpZGRlbilbYEAke1VJQW5ub3RhdGlvblRlcm1zLkhpZGRlbn1gXSAhPT0gdHJ1ZVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IHRoZSB0ZXh0IGZyb20gdGhlIERhdGFGaWVsZEZvckFubm90YXRpb24gaW50byB0aGUgY29sdW1uLlxuXHQgKiBAcGFyYW0gb0RhdGFGaWVsZCBEYXRhUG9pbnQncyBWYWx1ZVxuXHQgKiBAcGFyYW0gb0NvbnRleHQgQ29udGV4dCBvYmplY3Qgb2YgdGhlIExpbmVJdGVtXG5cdCAqIEBwYXJhbSBvQ29udGV4dC5jb250ZXh0IENvbnRleHQgb2JqZWN0IG9mIHRoZSBMaW5lSXRlbVxuXHQgKiBAcmV0dXJucyBTdHJpbmcgZnJvbSBsYWJlbCByZWZlcnJpbmcgdG8gYWN0aW9uIHRleHRcblx0ICovXG5cdGdldFRleHRPbkFjdGlvbkZpZWxkOiBmdW5jdGlvbiAoXG5cdFx0b0RhdGFGaWVsZDogTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPixcblx0XHRvQ29udGV4dDogeyBjb250ZXh0OiBCYXNlQ29udGV4dCB9XG5cdCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKFxuXHRcdFx0b0RhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uIHx8XG5cdFx0XHRvRGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cblx0XHQpIHtcblx0XHRcdHJldHVybiBvRGF0YUZpZWxkLkxhYmVsO1xuXHRcdH1cblx0XHQvLyBmb3IgRmllbGRHcm91cCBjb250YWluaW5nIERhdGFGaWVsZEZvckFubm90YXRpb25cblx0XHRpZiAoXG5cdFx0XHRvRGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uICYmXG5cdFx0XHRvQ29udGV4dC5jb250ZXh0LmdldE9iamVjdChcIlRhcmdldC8kQW5ub3RhdGlvblBhdGhcIikuaW5kZXhPZihcIkBcIiArIFVJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXApID4gLTFcblx0XHQpIHtcblx0XHRcdGNvbnN0IHNQYXRoRGF0YUZpZWxkcyA9IFwiVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aC9EYXRhL1wiO1xuXHRcdFx0Y29uc3QgYU11bHRpcGxlTGFiZWxzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdFx0Zm9yIChjb25zdCBpIGluIG9Db250ZXh0LmNvbnRleHQuZ2V0T2JqZWN0KHNQYXRoRGF0YUZpZWxkcykpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG9Db250ZXh0LmNvbnRleHQuZ2V0T2JqZWN0KGAke3NQYXRoRGF0YUZpZWxkcyArIGl9LyRUeXBlYCkgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbiB8fFxuXHRcdFx0XHRcdG9Db250ZXh0LmNvbnRleHQuZ2V0T2JqZWN0KGAke3NQYXRoRGF0YUZpZWxkcyArIGl9LyRUeXBlYCkgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRhTXVsdGlwbGVMYWJlbHMucHVzaChvQ29udGV4dC5jb250ZXh0LmdldE9iamVjdChgJHtzUGF0aERhdGFGaWVsZHMgKyBpfS9MYWJlbGApKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly8gSW4gY2FzZSB0aGVyZSBhcmUgbXVsdGlwbGUgYWN0aW9ucyBpbnNpZGUgYSBGaWVsZCBHcm91cCBzZWxlY3QgdGhlIGxhcmdlc3QgQWN0aW9uIExhYmVsXG5cdFx0XHRpZiAoYU11bHRpcGxlTGFiZWxzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0cmV0dXJuIGFNdWx0aXBsZUxhYmVscy5yZWR1Y2UoZnVuY3Rpb24gKGE6IHN0cmluZywgYjogc3RyaW5nKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGEubGVuZ3RoID4gYi5sZW5ndGggPyBhIDogYjtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gYU11bHRpcGxlTGFiZWxzLmxlbmd0aCA9PT0gMCA/IHVuZGVmaW5lZCA6IGFNdWx0aXBsZUxhYmVscy50b1N0cmluZygpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9LFxuXHRfZ2V0UmVzcG9uc2l2ZVRhYmxlQ29sdW1uU2V0dGluZ3M6IGZ1bmN0aW9uIChvVGhpczogQ29sdW1uV2lkdGhUaGlzLCBvQ29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4pOiBUYWJsZUNvbHVtblNldHRpbmdzIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAob1RoaXMudGFibGVUeXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiKSB7XG5cdFx0XHRyZXR1cm4gb0NvbHVtbi5zZXR0aW5ncztcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fSxcblxuXHRnZXRDaGFydFNpemU6IGZ1bmN0aW9uIChvVGhpczogQ29sdW1uV2lkdGhUaGlzLCBvQ29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4pOiBzdHJpbmcge1xuXHRcdGNvbnN0IHNldHRpbmdzID0gdGhpcy5fZ2V0UmVzcG9uc2l2ZVRhYmxlQ29sdW1uU2V0dGluZ3Mob1RoaXMsIG9Db2x1bW4pO1xuXHRcdGlmIChzZXR0aW5ncyAmJiBzZXR0aW5ncy5taWNyb0NoYXJ0U2l6ZSkge1xuXHRcdFx0cmV0dXJuIHNldHRpbmdzLm1pY3JvQ2hhcnRTaXplO1xuXHRcdH1cblx0XHRyZXR1cm4gXCJYU1wiO1xuXHR9LFxuXHRnZXRTaG93T25seUNoYXJ0OiBmdW5jdGlvbiAob1RoaXM6IENvbHVtbldpZHRoVGhpcywgb0NvbHVtbjogQW5ub3RhdGlvblRhYmxlQ29sdW1uKTogYm9vbGVhbiB7XG5cdFx0Y29uc3Qgc2V0dGluZ3MgPSB0aGlzLl9nZXRSZXNwb25zaXZlVGFibGVDb2x1bW5TZXR0aW5ncyhvVGhpcywgb0NvbHVtbik7XG5cdFx0aWYgKHNldHRpbmdzICYmIHNldHRpbmdzLnNob3dNaWNyb0NoYXJ0TGFiZWwpIHtcblx0XHRcdHJldHVybiAhc2V0dGluZ3Muc2hvd01pY3JvQ2hhcnRMYWJlbDtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0Z2V0RGVsZWdhdGU6IGZ1bmN0aW9uICh0YWJsZTogVGFibGVWaXN1YWxpemF0aW9uLCBpc0FMUDogYm9vbGVhbiwgZW50aXR5TmFtZTogc3RyaW5nLCBmaWx0ZXJPbkFjdGl2ZUVudGl0aWVzOiBib29sZWFuKTogc3RyaW5nIHtcblx0XHRsZXQgZGVsZWdhdGU6IHtcblx0XHRcdG5hbWU6IHN0cmluZztcblx0XHRcdHBheWxvYWQ/OlxuXHRcdFx0XHR8IHsgY29sbGVjdGlvbk5hbWU/OiBzdHJpbmc7IGZpbHRlck9uQWN0aXZlRW50aXRpZXM/OiBib29sZWFuOyBhZ2dyZWdhdGlvbkNvbmZpZ3VyYXRpb24/OiB7IGxlYWZMZXZlbDogYm9vbGVhbiB9IH1cblx0XHRcdFx0fCB7XG5cdFx0XHRcdFx0XHRoaWVyYXJjaHlRdWFsaWZpZXI6IHN0cmluZztcblx0XHRcdFx0XHRcdGluaXRpYWxFeHBhbnNpb25MZXZlbD86IG51bWJlcjtcblx0XHRcdFx0XHRcdGZpbHRlck9uQWN0aXZlRW50aXRpZXM6IGJvb2xlYW47XG5cdFx0XHRcdFx0XHRjcmVhdGVJblBsYWNlPzogYm9vbGVhbjtcblx0XHRcdFx0XHRcdGFnZ3JlZ2F0aW9uQ29uZmlndXJhdGlvbj86IHsgbGVhZkxldmVsOiBib29sZWFuIH07XG5cdFx0XHRcdCAgfTtcblx0XHR9O1xuXHRcdGlmIChpc0FMUCkge1xuXHRcdFx0Ly8gV2UgZG9uJ3Qgc3VwcG9ydCBUcmVlVGFibGUgaW4gQUxQXG5cdFx0XHRpZiAodGFibGUuY29udHJvbC50eXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRyZWVUYWJsZSBub3Qgc3VwcG9ydGVkIGluIEFuYWx5dGljYWwgTGlzdFBhZ2VcIik7XG5cdFx0XHR9XG5cdFx0XHRkZWxlZ2F0ZSA9IHtcblx0XHRcdFx0bmFtZTogXCJzYXAvZmUvbWFjcm9zL3RhYmxlL2RlbGVnYXRlcy9BTFBUYWJsZURlbGVnYXRlXCIsXG5cdFx0XHRcdHBheWxvYWQ6IHtcblx0XHRcdFx0XHRjb2xsZWN0aW9uTmFtZTogZW50aXR5TmFtZVxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0aWYgKHRhYmxlLmVuYWJsZUFuYWx5dGljcyAmJiBmaWx0ZXJPbkFjdGl2ZUVudGl0aWVzKSB7XG5cdFx0XHRcdGRlbGVnYXRlLnBheWxvYWQhLmZpbHRlck9uQWN0aXZlRW50aXRpZXMgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodGFibGUuY29udHJvbC50eXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0XHRpZiAoIXRhYmxlLmNvbnRyb2wuaGllcmFyY2h5UXVhbGlmaWVyKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIkEgaGllcmFyY2h5IHF1YWxpZmllciBpcyBtYW5kYXRvcnkgd2l0aCBhIFRyZWVUYWJsZVwiKTtcblx0XHRcdH1cblx0XHRcdGRlbGVnYXRlID0ge1xuXHRcdFx0XHRuYW1lOiBcInNhcC9mZS9tYWNyb3MvdGFibGUvZGVsZWdhdGVzL1RyZWVUYWJsZURlbGVnYXRlXCIsXG5cdFx0XHRcdHBheWxvYWQ6IHtcblx0XHRcdFx0XHRoaWVyYXJjaHlRdWFsaWZpZXI6IHRhYmxlLmNvbnRyb2wuaGllcmFyY2h5UXVhbGlmaWVyLFxuXHRcdFx0XHRcdGluaXRpYWxFeHBhbnNpb25MZXZlbDogdGFibGUuYW5ub3RhdGlvbi5pbml0aWFsRXhwYW5zaW9uTGV2ZWwsXG5cdFx0XHRcdFx0ZmlsdGVyT25BY3RpdmVFbnRpdGllcyxcblx0XHRcdFx0XHRjcmVhdGVJblBsYWNlOiB0YWJsZS5jb250cm9sLmNyZWF0ZUluUGxhY2UgPT09IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGVsZWdhdGUgPSB7XG5cdFx0XHRcdG5hbWU6IFwic2FwL2ZlL21hY3Jvcy90YWJsZS9kZWxlZ2F0ZXMvVGFibGVEZWxlZ2F0ZVwiXG5cdFx0XHR9O1xuXHRcdFx0aWYgKHRhYmxlLmVuYWJsZUFuYWx5dGljcyAmJiBmaWx0ZXJPbkFjdGl2ZUVudGl0aWVzKSB7XG5cdFx0XHRcdGRlbGVnYXRlLnBheWxvYWQgPSB7XG5cdFx0XHRcdFx0ZmlsdGVyT25BY3RpdmVFbnRpdGllc1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICh0YWJsZS5lbmFibGVBbmFseXRpY3MgPT09IHRydWUgJiYgdGFibGUuY29udHJvbC5hbmFseXRpY2FsQ29uZmlndXJhdGlvbj8uYWdncmVnYXRpb25PbkxlYWZMZXZlbCA9PT0gdHJ1ZSkge1xuXHRcdFx0ZGVsZWdhdGUucGF5bG9hZCA9IHsgLi4uZGVsZWdhdGUucGF5bG9hZCwgLi4ueyBhZ2dyZWdhdGlvbkNvbmZpZ3VyYXRpb246IHsgbGVhZkxldmVsOiB0cnVlIH0gfSB9O1xuXHRcdH1cblxuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShkZWxlZ2F0ZSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBwYXJhbSBvRmFzdENyZWF0aW9uUm93XG5cdCAqIEBwYXJhbSBzUGF0aFxuXHQgKiBAcGFyYW0gb0NvbnRleHRcblx0ICogQHBhcmFtIG9Nb2RlbFxuXHQgKiBAcGFyYW0gb0ZpbmFsVUlTdGF0ZVxuXHQgKi9cblx0ZW5hYmxlRmFzdENyZWF0aW9uUm93OiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0b0Zhc3RDcmVhdGlvblJvdzogQ3JlYXRpb25Sb3cgfCB1bmRlZmluZWQsXG5cdFx0c1BhdGg6IHN0cmluZyxcblx0XHRvQ29udGV4dDogdjRDb250ZXh0LFxuXHRcdG9Nb2RlbDogT0RhdGFNb2RlbCxcblx0XHRvRmluYWxVSVN0YXRlOiBQcm9taXNlPHVua25vd24+XG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGxldCBvRmFzdENyZWF0aW9uTGlzdEJpbmRpbmcsIG9GYXN0Q3JlYXRpb25Db250ZXh0O1xuXG5cdFx0aWYgKG9GYXN0Q3JlYXRpb25Sb3cpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF3YWl0IG9GaW5hbFVJU3RhdGU7XG5cdFx0XHRcdC8vIElmIGEgZHJhZnQgaXMgZGlzY2FyZGVkIHdoaWxlIGEgbWVzc2FnZSBzdHJpcCBmaWx0ZXIgaXMgYWN0aXZlIG9uIHRoZSB0YWJsZSB0aGVyZSBpcyBhIHRhYmxlIHJlYmluZCBjYXVzZWQgYnkgdGhlIERhdGFTdGF0ZUluZGljYXRvclxuXHRcdFx0XHQvLyBUbyBwcmV2ZW50IGEgbmV3IGNyZWF0aW9uIHJvdyBiaW5kaW5nIGJlaW5nIGNyZWF0ZWQgYXQgdGhhdCBtb21lbnQgd2UgY2hlY2sgaWYgdGhlIGNvbnRleHQgaXMgYWxyZWFkeSBkZWxldGVkXG5cdFx0XHRcdGlmIChDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKG9GYXN0Q3JlYXRpb25Sb3cpICYmICFvQ29udGV4dC5pc0RlbGV0ZWQoKSkge1xuXHRcdFx0XHRcdG9GYXN0Q3JlYXRpb25MaXN0QmluZGluZyA9IG9Nb2RlbC5iaW5kTGlzdChzUGF0aCwgb0NvbnRleHQsIFtdLCBbXSwge1xuXHRcdFx0XHRcdFx0JCR1cGRhdGVHcm91cElkOiBcImRvTm90U3VibWl0XCIsXG5cdFx0XHRcdFx0XHQkJGdyb3VwSWQ6IFwiZG9Ob3RTdWJtaXRcIlxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdC8vIFdvcmthcm91bmQgc3VnZ2VzdGVkIGJ5IE9EYXRhIG1vZGVsIHY0IGNvbGxlYWd1ZXNcblx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG5cdFx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0XHRcdG9GYXN0Q3JlYXRpb25MaXN0QmluZGluZy5yZWZyZXNoSW50ZXJuYWwgPSBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdFx0XHQvKiBkbyBub3RoaW5nICovXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRvRmFzdENyZWF0aW9uQ29udGV4dCA9IG9GYXN0Q3JlYXRpb25MaXN0QmluZGluZy5jcmVhdGUoKTtcblx0XHRcdFx0XHRvRmFzdENyZWF0aW9uUm93LnNldEJpbmRpbmdDb250ZXh0KG9GYXN0Q3JlYXRpb25Db250ZXh0KTtcblxuXHRcdFx0XHRcdC8vIHRoaXMgaXMgbmVlZGVkIHRvIGF2b2lkIGNvbnNvbGUgZXJyb3Jcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0YXdhaXQgb0Zhc3RDcmVhdGlvbkNvbnRleHQuY3JlYXRlZCgpO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdExvZy50cmFjZShcInRyYW5zaWVudCBmYXN0IGNyZWF0aW9uIGNvbnRleHQgZGVsZXRlZFwiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKG9FcnJvcikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBjb21wdXRpbmcgdGhlIGZpbmFsIFVJIHN0YXRlXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogRXZhbHVhdGVzLCBpZiBhY3Rpb24gc2hvdWxkIGJlIHNob3duIGluIHRoZSB0YWJsZSBjb250ZXh0IG1lbnUuXG5cdCAqIFNob3cgYWN0aW9uIG9ubHkgZm9yIGJvdW5kIGFjdGlvbnMsIHdoZW4gcmVxdWlyZXNTZWxlY3Rpb24gaXMgc2V0IGZvciBjdXN0b20gYWN0aW9ucyBvciB3aGVuIGNvbnRleHQgaXMgcmVxdWlyZWQgZm9yIElCTiBhY3Rpb25zLlxuXHQgKiBAcGFyYW0gYWN0aW9uIFRoZSBpbnN0YW5jZSBvZiB0aGUgYWN0aW9uXG5cdCAqIEBwYXJhbSBjb250ZXh0T2JqZWN0UGF0aCBUaGUgZGF0YSBtb2RlbCBvYmplY3QgcGF0aFxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRydWUsIGlmIGFjdGlvbiBzaG91bGQgYmUgZGlzcGxheWVkIGluIGNvbnRleHQgbWVudSwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRpc0FjdGlvblNob3duSW5Db250ZXh0TWVudTogZnVuY3Rpb24gKFxuXHRcdGFjdGlvbjogQmFzZUFjdGlvbiB8IEFubm90YXRpb25BY3Rpb24gfCBDdXN0b21BY3Rpb24sXG5cdFx0Y29udGV4dE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj5cblx0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgZGF0YUZpZWxkID0gYWN0aW9uLmFubm90YXRpb25QYXRoXG5cdFx0XHQ/IChjb250ZXh0T2JqZWN0UGF0aC5jb252ZXJ0ZWRUeXBlcy5yZXNvbHZlUGF0aChhY3Rpb24uYW5ub3RhdGlvblBhdGgpLnRhcmdldCBhc1xuXHRcdFx0XHRcdHwgRGF0YUZpZWxkRm9yQWN0aW9uXG5cdFx0XHRcdFx0fCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRzd2l0Y2ggKGRhdGFGaWVsZD8uJFR5cGUpIHtcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIjoge1xuXHRcdFx0XHRjb25zdCBhY3Rpb25UYXJnZXQgPSBkYXRhRmllbGQuQWN0aW9uVGFyZ2V0O1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdGFjdGlvblRhcmdldD8uaXNCb3VuZCA9PT0gdHJ1ZSAmJlxuXHRcdFx0XHRcdCFhY3Rpb25UYXJnZXQucGFyYW1ldGVyc1swXS5pc0NvbGxlY3Rpb24gJiZcblx0XHRcdFx0XHRhY3Rpb25UYXJnZXQuc291cmNlRW50aXR5VHlwZSA9PT0gY29udGV4dE9iamVjdFBhdGgudGFyZ2V0RW50aXR5VHlwZVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblwiOlxuXHRcdFx0XHRyZXR1cm4gZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dD8udmFsdWVPZigpID09PSB0cnVlO1xuXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRpZiAoYWN0aW9uLnR5cGUgPT09IFwiRGVmYXVsdFwiKSB7XG5cdFx0XHRcdFx0cmV0dXJuIChhY3Rpb24gYXMgQ3VzdG9tQWN0aW9uKS5yZXF1aXJlc1NlbGVjdGlvbiA9PT0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG4oVGFibGVIZWxwZXIuZ2V0TmF2aWdhdGlvbkF2YWlsYWJsZU1hcCBhcyB7IHJlcXVpcmVzSUNvbnRleHQ/OiBib29sZWFuIH0pLnJlcXVpcmVzSUNvbnRleHQgPSB0cnVlO1xuKFRhYmxlSGVscGVyLmdldFRleHRPbkFjdGlvbkZpZWxkIGFzIHsgcmVxdWlyZXNJQ29udGV4dD86IGJvb2xlYW4gfSkucmVxdWlyZXNJQ29udGV4dCA9IHRydWU7XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlSGVscGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBeURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxNQUFNQSxXQUFXLEdBQUc7SUFDbkI7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQ0MsZUFBZSxFQUFFLFNBQUFBLENBQVVDLFlBQXNFLEVBQUVDLFVBQWtCLEVBQVc7TUFDL0gsSUFBSUMsTUFBNEM7TUFDaEQsSUFBSUYsWUFBWSxFQUFFO1FBQ2pCLElBQUlHLEtBQUssQ0FBQ0MsT0FBTyxDQUFDSixZQUFZLENBQUMsRUFBRTtVQUNoQyxNQUFNSyxVQUFVLEdBQUcsSUFBSSxDQUFDQyw0QkFBNEIsQ0FBQ0wsVUFBVSxDQUFDTSxRQUFRLENBQUMsQ0FBQyxDQUFDO1VBQzNFLElBQUlGLFVBQVUsRUFBRTtZQUNmSCxNQUFNLEdBQUdGLFlBQVksQ0FBQ1EsSUFBSSxDQUFDLFVBQVVDLE9BQXdCLEVBQUU7Y0FDOUQsT0FBT0EsT0FBTyxDQUFDQyxRQUFRLElBQUlELE9BQU8sQ0FBQ0UsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDQyxLQUFLLEtBQUtQLFVBQVU7WUFDdEUsQ0FBQyxDQUFDO1VBQ0gsQ0FBQyxNQUFNO1lBQ047WUFDQTtZQUNBSCxNQUFNLEdBQUdGLFlBQVksQ0FBQyxDQUFDLENBQUM7VUFDekI7UUFDRCxDQUFDLE1BQU07VUFDTkUsTUFBTSxHQUFHRixZQUFZO1FBQ3RCO01BQ0Q7TUFFQSxPQUFPLENBQUMsQ0FBQ0UsTUFBTSxJQUFJLE9BQU9BLE1BQU0sS0FBSyxRQUFRLElBQUlBLE1BQU0sQ0FBQ1EsUUFBUSxJQUFJLENBQUMsQ0FBQ1IsTUFBTSxDQUFDUyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUNFLGFBQWE7SUFDekcsQ0FBQztJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDUCw0QkFBNEIsRUFBRSxTQUFBQSxDQUFVUSxXQUFtQixFQUFzQjtNQUNoRixJQUFJQSxXQUFXLElBQUlBLFdBQVcsQ0FBQ0MsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQzdDLE1BQU1DLE1BQU0sR0FBR0YsV0FBVyxDQUFDRyxLQUFLLENBQUMsR0FBRyxDQUFDO1FBQ3JDLE9BQU9ELE1BQU0sQ0FBQ0EsTUFBTSxDQUFDRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUNDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO01BQ3JEO01BQ0EsT0FBT0MsU0FBUztJQUNqQixDQUFDO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQ0MsZ0NBQWdDLEVBQUUsU0FBQUEsQ0FBVVAsV0FBbUIsRUFBRVEsMkJBQW1DLEVBQVc7TUFDOUcsTUFBTUMsV0FBVyxHQUFHLElBQUksQ0FBQ2pCLDRCQUE0QixDQUFDUSxXQUFXLENBQUM7TUFDbEUsT0FBTyxDQUFDLENBQUNTLFdBQVcsSUFBSUQsMkJBQTJCLEtBQUtDLFdBQVc7SUFDcEUsQ0FBQztJQUVEQyx5QkFBeUIsRUFBRSxTQUFBQSxDQUFVQyxrQkFBd0QsRUFBdUM7TUFDbkksTUFBTUMsMEJBQW1ELEdBQUcsQ0FBQyxDQUFDO01BQzlERCxrQkFBa0IsRUFBRUUsT0FBTyxDQUFFQyxNQUFNLElBQUs7UUFDdkMsSUFBSSxnQkFBZ0IsSUFBSUEsTUFBTSxFQUFFO1VBQy9CLE1BQU1DLElBQUksR0FBRyxHQUFHRCxNQUFNLENBQUNFLGNBQWMsSUFBSUYsTUFBTSxDQUFDRyxNQUFNLEVBQUU7VUFDeEQsSUFBSUgsTUFBTSxDQUFDaEIsS0FBSyxtRUFBd0QsSUFBSSxDQUFDZ0IsTUFBTSxDQUFDSSxNQUFNLElBQUlKLE1BQU0sQ0FBQ0ssZUFBZSxFQUFFO1lBQ3JILElBQUlMLE1BQU0sQ0FBQ00sbUJBQW1CLEtBQUtkLFNBQVMsRUFBRTtjQUM3Q00sMEJBQTBCLENBQUNHLElBQUksQ0FBQyxHQUFHTSwwQkFBMEIsQ0FBQ1AsTUFBTSxDQUFDTSxtQkFBbUIsQ0FBQyxHQUNyRk4sTUFBTSxDQUFDTSxtQkFBbUIsQ0FBdUNFLElBQUksR0FDdEVSLE1BQU0sQ0FBQ00sbUJBQW1CO1lBQzlCO1VBQ0Q7UUFDRDtNQUNELENBQUMsQ0FBQztNQUVGLE9BQU9HLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDWiwwQkFBMEIsQ0FBQyxDQUFDUixNQUFNLEdBQUcsQ0FBQyxHQUFHUSwwQkFBMEIsR0FBR04sU0FBUztJQUNuRyxDQUFDO0lBRURtQixtQkFBbUIsRUFBRSxTQUFBQSxDQUNwQkMsNkJBQXNDLEVBQ3RDQyxpQkFBb0MsRUFDRztNQUN2QyxNQUFNQyw0QkFBNEIsR0FBR0QsaUJBQWlCLENBQUNFLFdBQVcsQ0FBQ0gsNkJBQTZCLENBQUNJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsTUFFakc7TUFDWCxJQUFJLENBQUNILDRCQUE0QixFQUFFLE9BQU90QixTQUFTO01BQ25ELE1BQU0wQixjQUFjLEdBQUlMLGlCQUFpQixDQUFDRSxXQUFXLENBQUNILDZCQUE2QixDQUFDSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUNDLE1BQU0sQ0FDbkdFLGNBQWM7TUFFaEIsTUFBTUMsY0FBYyxHQUNuQkYsY0FBYyxHQUNYQSxjQUFjLEVBQUV0QyxJQUFJLENBQUV5QyxJQUFJLElBQUtBLElBQUksQ0FBQ0MsS0FBSyxDQUFDQyxPQUFPLENBQUMsR0FBRyx3Q0FBNkIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFQyxPQUFPLEdBQ25HViw0QkFDUztNQUNiLE9BQU9NLGNBQWMsRUFBRUssSUFBSSwwQ0FBK0IsR0FBR0wsY0FBYyxHQUFHNUIsU0FBUztJQUN4RixDQUFDO0lBQ0Q7QUFDRDtBQUNBO0FBQ0E7QUFDQTtJQUNDa0MsNkJBQTZCLEVBQUUsU0FBQUEsQ0FBVUMsVUFBcUIsRUFBb0M7TUFDakcsSUFBSUEsVUFBVSxLQUFLbkMsU0FBUyxJQUFJbUMsVUFBVSxDQUFDckMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUN4RCxPQUFPRSxTQUFTO01BQ2pCO01BQ0EsTUFBTW9DLGdCQUFnQixHQUFHRCxVQUFVLEVBQUVFLEdBQUcsQ0FBRUMsSUFBSSxJQUFLQyxXQUFXLENBQUNELElBQUksQ0FBQyxDQUFDLElBQUksRUFBRTtNQUMzRSxPQUFPRSxpQkFBaUIsQ0FBQ0MsWUFBWSxDQUFDTCxnQkFBZ0IsRUFBRSx5REFBeUQsQ0FBQyxDQUFDO0lBQ3BILENBQUM7SUFDRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQ00sY0FBYyxFQUFFLFNBQUFBLENBQ2ZDLEtBQXNCLEVBQ3RCQyxNQUE2QixFQUM3QkMsU0FBcUgsRUFDckhDLG1CQUF1QyxFQUN2Q0MsbUJBQWdFLEVBQ2hFQyxVQUFtQixFQUNuQkMsZUFBZ0MsRUFDaUM7TUFDakUsSUFBSUwsTUFBTSxDQUFDTSxLQUFLLEVBQUU7UUFDakIsT0FBT04sTUFBTSxDQUFDTSxLQUFLO01BQ3BCO01BQ0EsSUFBSVAsS0FBSyxDQUFDUSxxQkFBcUIsS0FBSyxJQUFJLEVBQUU7UUFDekMsSUFBSUQsS0FBSztRQUNUQSxLQUFLLEdBQ0osSUFBSSxDQUFDRSxzQkFBc0IsQ0FBQ0wsbUJBQTBELENBQUMsSUFDdkYsSUFBSSxDQUFDTSwwQkFBMEIsQ0FBQ1YsS0FBSyxFQUFFQyxNQUFNLEVBQUVDLFNBQVMsRUFBRUMsbUJBQW1CLEVBQUVDLG1CQUFtQixFQUFFRSxlQUFlLENBQUMsSUFDcEhqRCxTQUFTO1FBQ1YsSUFBSWtELEtBQUssRUFBRTtVQUNWLE9BQU9GLFVBQVUsR0FBRyxHQUFHRSxLQUFLLEtBQUssR0FBR0EsS0FBSztRQUMxQztRQUNBQSxLQUFLLEdBQUdWLGlCQUFpQixDQUN4QkMsWUFBWSxDQUNYLENBQ0NGLFdBQVcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEVBQzlCQSxXQUFXLENBQUMsMEJBQTBCLEVBQUUsVUFBVSxDQUFDLEVBQ25ESyxNQUFNLENBQUNVLElBQUksRUFDWE4sVUFBVSxFQUNWLElBQUksQ0FBQ08sMkNBQTJDLENBQUNaLEtBQUssRUFBRUMsTUFBTSxDQUFDLEVBQy9EQSxNQUFNLENBQUNZLFFBQVEsSUFBSSxLQUFLLEVBQ3hCQyxvQkFBb0IsQ0FBQ2IsTUFBTSxDQUFDYyxRQUFRLElBQUksS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUN6RCxFQUNEQyxjQUFjLENBQUNqQixjQUNoQixDQUNELENBQUM7UUFDRCxPQUFPUSxLQUFLO01BQ2I7TUFDQSxPQUFPbEQsU0FBUztJQUNqQixDQUFDO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtJQUNDb0Qsc0JBQXNCLEVBQUUsU0FBQUEsQ0FBVUwsbUJBQXdELEVBQWlCO01BQzFHLElBQUlHLEtBQW9CLEdBQUcsSUFBSTtNQUMvQixNQUFNVSxXQUFXLEdBQUdiLG1CQUFtQixDQUFDYyxZQUFZLEVBQUVDLEtBQUssRUFBRTlCLE9BQU8sRUFBRTRCLFdBQVc7TUFDakYsTUFBTUcsUUFBUSxHQUFHaEIsbUJBQW1CLENBQUNjLFlBQVksRUFBRUMsS0FBSyxFQUFFOUIsT0FBTyxFQUFFZ0MsSUFBSTtNQUN2RSxJQUNDakIsbUJBQW1CLENBQUNjLFlBQVksRUFBRUMsS0FBSyxJQUN2Q0csV0FBVyxDQUNWbEIsbUJBQW1CLENBQUNjLFlBQVksQ0FBQ0MsS0FBSyxFQUFFOUIsT0FBTyxFQUMvQ2UsbUJBQW1CLEVBQ25CLEtBQUssRUFDTCxLQUFLLEVBQ0xBLG1CQUFtQixDQUFDYyxZQUNyQixDQUFDLEtBQUtLLGFBQWEsQ0FBQ0MsT0FBTyxJQUMzQnBCLG1CQUFtQixDQUFDYyxZQUFZLENBQUNDLEtBQUssRUFBRTlCLE9BQU8sRUFDOUM7UUFDRCxNQUFNb0MsaUJBQWlCLEdBQUdDLE9BQU8sQ0FBQ3RCLG1CQUFtQixDQUFDYyxZQUFZLENBQUNDLEtBQUssQ0FBQzlCLE9BQU8sQ0FBQztRQUNqRixJQUFJK0IsUUFBUSxLQUFLLFlBQVksSUFBSSxDQUFDSyxpQkFBaUIsSUFBSVIsV0FBVyxFQUFFVSxJQUFJLEVBQUVDLFNBQVMsRUFBRTVFLFFBQVEsR0FBRyxRQUFRLENBQUMsRUFBRTtVQUMxR3VELEtBQUssR0FBRyxHQUFHO1FBQ1o7TUFDRCxDQUFDLE1BQU0sSUFDTlUsV0FBVyxLQUNWWSxVQUFVLENBQUN6QixtQkFBbUIsQ0FBQ2MsWUFBWSxFQUFFQyxLQUFLLEVBQUU5QixPQUFPLENBQUMsSUFBSTRCLFdBQVcsRUFBRVUsSUFBSSxFQUFFQyxTQUFTLEVBQUU1RSxRQUFRLEdBQUcsUUFBUSxDQUFDLENBQUMsRUFDbkg7UUFDRHVELEtBQUssR0FBRyxHQUFHO01BQ1o7TUFDQSxPQUFPQSxLQUFLO0lBQ2IsQ0FBQztJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0NLLDJDQUEyQ0EsQ0FBQ2tCLEtBQXNCLEVBQUU3QixNQUE2QixFQUF1QjtNQUN2SCxPQUFPQSxNQUFNLENBQUM4QiwwQkFBMEIsS0FBSzFFLFNBQVMsR0FBRzRDLE1BQU0sQ0FBQzhCLDBCQUEwQixHQUFHRCxLQUFLLENBQUNDLDBCQUEwQjtJQUM5SCxDQUFDO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDckIsMEJBQTBCLEVBQUUsU0FBQUEsQ0FDM0JWLEtBQXNCLEVBQ3RCQyxNQUE2QixFQUM3QkMsU0FBcUgsRUFDckhDLG1CQUF1QyxFQUN2Q0MsbUJBQWdFLEVBQ2hFRSxlQUFnQyxFQUNoQjtNQUNoQixNQUFNVyxXQUFXLEdBQUdiLG1CQUFtQixDQUFDYyxZQUFZLEVBQUVELFdBQVc7TUFDakUsTUFBTUcsUUFBUSxHQUFHaEIsbUJBQW1CLENBQUNjLFlBQVksRUFBRXJFLEtBQUs7TUFDeEQsSUFBSTBELEtBQW9CLEdBQUcsSUFBSTtNQUMvQixJQUNDYSxRQUFRLG9EQUF5QyxJQUNqREEsUUFBUSxtRUFBd0QsSUFDL0RBLFFBQVEsd0RBQTZDLElBQ3JELENBQUVsQixTQUFTLENBQTJDOEIsTUFBTSxFQUFFQyxlQUFlLENBQUNqRixRQUFRLENBQUMsNkNBQWtDLENBQUUsRUFDM0g7UUFDRCxJQUFJa0YsYUFBYTtRQUNqQkEsYUFBYSxHQUNaQyxVQUFVLENBQUNDLGNBQWMsQ0FBQ2pDLG1CQUFtQixDQUFDLElBQzlDZ0MsVUFBVSxDQUFDQyxjQUFjLENBQUNsQyxTQUFTLEVBQUVtQyxLQUFLLEVBQUU3RixRQUFRLENBQUMsQ0FBQyxDQUFDLElBQ3ZEMkYsVUFBVSxDQUFDQyxjQUFjLENBQUVuQixXQUFXLEVBQXlCb0IsS0FBSyxDQUFDLENBQUMsQ0FBQzs7UUFFeEU7UUFDQSxNQUFNQyxzQkFBc0IsR0FBR0MsZUFBZSxDQUFDQyxpQ0FBaUMsQ0FDL0VwQyxtQkFBbUIsQ0FBQ2MsWUFBWSxFQUNoQyxJQUFJLENBQUNOLDJDQUEyQyxDQUFDWixLQUFLLEVBQUVDLE1BQU0sQ0FDL0QsQ0FBQyxDQUFDd0MsYUFBYTtRQUVmLElBQUlILHNCQUFzQixHQUFHSixhQUFhLEVBQUU7VUFDM0MzQixLQUFLLEdBQUcrQixzQkFBc0I7UUFDL0IsQ0FBQyxNQUFNLElBQ05uQyxtQkFBbUIsSUFDbEJjLFdBQVcsS0FDVnlCLGtCQUFrQixDQUFDekIsV0FBVyxnRUFBcUQsQ0FBQyxJQUNwRnlCLGtCQUFrQixDQUFDekIsV0FBVyxpREFBc0MsQ0FBQyxDQUFFLEVBQ3hFO1VBQ0Q7VUFDQWlCLGFBQWEsSUFBSSxHQUFHO1VBQ3BCM0IsS0FBSyxHQUFHMkIsYUFBYTtRQUN0QjtRQUNBM0IsS0FBSyxHQUFHQSxLQUFLLElBQUksSUFBSSxDQUFDb0Msc0JBQXNCLENBQUMzQyxLQUFLLEVBQUVDLE1BQU0sRUFBRUMsU0FBUyxFQUFFZ0MsYUFBYSxFQUFFNUIsZUFBZSxDQUFDO01BQ3ZHO01BQ0EsT0FBT0MsS0FBSztJQUNiLENBQUM7SUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQ29DLHNCQUFzQkEsQ0FDckIzQyxLQUFzQixFQUN0QkMsTUFBNkIsRUFDN0JDLFNBQXFILEVBQ3JIMEMsZ0JBQXdCLEVBQ3hCdEMsZUFBZ0MsRUFDaEI7TUFDaEIsSUFBSXVDLFNBQVM7UUFDWnRDLEtBQW9CLEdBQUcsSUFBSTtNQUM1QixJQUFLTCxTQUFTLENBQTJDOEIsTUFBTSxFQUFFQyxlQUFlLEVBQUVqRixRQUFRLENBQUMsd0NBQTZCLENBQUMsRUFBRTtRQUMxSCxRQUFRLElBQUksQ0FBQzhGLFlBQVksQ0FBQzlDLEtBQUssRUFBRUMsTUFBTSxDQUFDO1VBQ3ZDLEtBQUssSUFBSTtZQUNSNEMsU0FBUyxHQUFHLEdBQUc7WUFDZjtVQUNELEtBQUssR0FBRztZQUNQQSxTQUFTLEdBQUcsR0FBRztZQUNmO1VBQ0QsS0FBSyxHQUFHO1lBQ1BBLFNBQVMsR0FBRyxHQUFHO1lBQ2Y7VUFDRCxLQUFLLEdBQUc7WUFDUEEsU0FBUyxHQUFHLEdBQUc7WUFDZjtVQUNEO1lBQ0NBLFNBQVMsR0FBRyxHQUFHO1FBQ2pCO1FBQ0FELGdCQUFnQixJQUFJLEdBQUc7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQ0csZ0JBQWdCLENBQUMvQyxLQUFLLEVBQUVDLE1BQU0sQ0FBQyxLQUFLSyxlQUFlLEVBQUUwQyxLQUFLLENBQUM3RixNQUFNLElBQUltRCxlQUFlLEVBQUUyQyxXQUFXLENBQUM5RixNQUFNLENBQUMsRUFBRTtVQUNwSCxNQUFNK0YsT0FBTyxHQUNaNUMsZUFBZSxDQUFDMEMsS0FBSyxDQUFDN0YsTUFBTSxHQUFHbUQsZUFBZSxDQUFDMkMsV0FBVyxDQUFDOUYsTUFBTSxHQUFHbUQsZUFBZSxDQUFDMEMsS0FBSyxHQUFHMUMsZUFBZSxDQUFDMkMsV0FBVztVQUN4SCxNQUFNRSxTQUFTLEdBQUdoQixVQUFVLENBQUNDLGNBQWMsQ0FBQ2MsT0FBTyxDQUFDLEdBQUcsQ0FBQztVQUN4RCxNQUFNRSxRQUFRLEdBQUdELFNBQVMsR0FBR1AsZ0JBQWdCLEdBQUdPLFNBQVMsR0FBR1AsZ0JBQWdCO1VBQzVFckMsS0FBSyxHQUFHNkMsUUFBUTtRQUNqQixDQUFDLE1BQU0sSUFBSVIsZ0JBQWdCLEdBQUdDLFNBQVMsRUFBRTtVQUN4Q3RDLEtBQUssR0FBR3FDLGdCQUFnQjtRQUN6QixDQUFDLE1BQU07VUFDTnJDLEtBQUssR0FBR3NDLFNBQVM7UUFDbEI7TUFDRDtNQUNBLE9BQU90QyxLQUFLO0lBQ2IsQ0FBQztJQUNEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDOEMsY0FBYyxFQUFFLFNBQUFBLENBQVVDLGNBQXNCLEVBQUVDLFdBQW9CLEVBQVU7TUFDL0UsSUFBSUMsTUFBTSxHQUFHLEVBQUU7TUFDZixJQUFJRCxXQUFXLEVBQUU7UUFDaEI7UUFDQSxJQUFJRCxjQUFjLElBQUkscURBQXFELEVBQUU7VUFDNUVFLE1BQU0sR0FBRyxzQ0FBc0M7UUFDaEQ7TUFDRCxDQUFDLE1BQU0sSUFBSUYsY0FBYyxLQUFLLHFEQUFxRCxFQUFFO1FBQ3BGO1FBQ0E7O1FBRUFFLE1BQU0sR0FBRyxrQkFBa0I7TUFDNUIsQ0FBQyxNQUFNO1FBQ05BLE1BQU0sR0FBRyx1QkFBdUI7TUFDakM7TUFDQSxPQUFPQSxNQUFNO0lBQ2QsQ0FBQztJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0NDLGlCQUFpQixFQUFFLFNBQUFBLENBQ2xCQyxVQUFrRCxFQUNsREMsMkJBQTZELEVBQzdEQyxVQUErQixFQUNJO01BQ25DLElBQUlDLFNBQVMsR0FBRyxJQUFJO01BQ3BCLE1BQU1DLFdBQVcsR0FBRyxFQUFFO01BRXRCLElBQUlGLFVBQVUsQ0FBQyx5Q0FBOEIsQ0FBQyxFQUFFO1FBQy9DLE9BQU9ELDJCQUEyQjtNQUNuQztNQUVBLEtBQUssTUFBTXpELFNBQVMsSUFBSXdELFVBQVUsRUFBRTtRQUNuQyxNQUFNSyxxQkFBcUIsR0FBRzdELFNBQVMsQ0FBQyx5Q0FBOEIsQ0FBQztRQUN2RSxJQUFJNkQscUJBQXFCLEtBQUsxRyxTQUFTLElBQUkwRyxxQkFBcUIsS0FBSyxLQUFLLEVBQUU7VUFDM0VELFdBQVcsQ0FBQ0UsSUFBSSxDQUFDLEtBQUssQ0FBQztVQUN2QjtRQUNEO1FBQ0EsSUFBSUQscUJBQXFCLEtBQUssSUFBSSxFQUFFO1VBQ25DRCxXQUFXLENBQUNFLElBQUksQ0FBQyxJQUFJLENBQUM7VUFDdEI7UUFDRDtRQUNBLElBQUlELHFCQUFxQixDQUFDRSxLQUFLLEVBQUU7VUFDaENILFdBQVcsQ0FBQ0UsSUFBSSxDQUFDcEUsV0FBVyxDQUFDbUUscUJBQXFCLENBQUNFLEtBQUssQ0FBQyxDQUFDO1VBQzFESixTQUFTLEdBQUcsS0FBSztVQUNqQjtRQUNEO1FBQ0EsSUFBSSxPQUFPRSxxQkFBcUIsS0FBSyxRQUFRLEVBQUU7VUFDOUM7VUFDQSxPQUFPSiwyQkFBMkI7UUFDbkM7TUFDRDtNQUVBLE1BQU1PLHFCQUFxQixHQUFHQyxRQUFRLENBQUNMLFdBQVcsQ0FBQzNHLE1BQU0sR0FBRyxDQUFDLElBQUkwRyxTQUFTLEtBQUssSUFBSSxDQUFDO01BQ3BGLE1BQU1PLDZCQUE2QixHQUFHRCxRQUFRLENBQUNMLFdBQVcsQ0FBQzNHLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQzJHLFdBQVcsQ0FBQzlHLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSTZHLFNBQVMsQ0FBQztNQUVuSCxPQUFPaEUsaUJBQWlCLENBQ3ZCd0UsTUFBTSxDQUNMSCxxQkFBcUIsRUFDckJwRSxZQUFZLENBQUNnRSxXQUFXLEVBQUU5QyxjQUFjLENBQUN5QyxpQkFBaUIsQ0FBQyxFQUMzRFksTUFBTSxDQUFDRCw2QkFBNkIsRUFBRUQsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFQSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQ3RFLENBQ0QsQ0FBQztJQUNGLENBQUM7SUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDRyxrQkFBa0IsRUFBRSxTQUFBQSxDQUNuQkMsT0FBMkIsRUFDM0JDLFNBQWlCLEVBQ2pCcEUsbUJBQWdFLEVBQzNDO01BQ3JCLElBQUksQ0FBQ21FLE9BQU8sRUFBRTtRQUNiLE9BQU9sSCxTQUFTO01BQ2pCO01BQ0EsTUFBTTZDLFNBQVMsR0FBR0UsbUJBQW1CLENBQUNjLFlBQVk7TUFDbEQsSUFBSXVELGFBQThDO01BQ2xELFFBQVF2RSxTQUFTLEVBQUVyRCxLQUFLO1FBQ3ZCO1VBQ0M0SCxhQUFhLEdBQUd2RSxTQUFTLENBQUM4QixNQUFNLENBQUM3QyxLQUFLO1VBQ3RDO1FBQ0Q7UUFDQTtRQUNBO1VBQ0NzRixhQUFhLEdBQUd2RSxTQUFTO1VBQ3pCO1FBQ0Q7VUFDQ3VFLGFBQWEsR0FBSXZFLFNBQVMsQ0FBZWlCLEtBQUssRUFBRTlDLElBQUksSUFBSSxFQUFFO1VBQzFEO01BQ0Y7TUFDQSxPQUFPcUcsUUFBUSxDQUFDLENBQUNILE9BQU8sRUFBRUMsU0FBUyxFQUFFQyxhQUFhLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0NFLGlCQUFpQixFQUFFLFNBQUFBLENBQVVDLEVBQVUsRUFBRXhFLG1CQUFnRSxFQUFzQjtNQUM5SCxPQUFPckUsV0FBVyxDQUFDdUksa0JBQWtCLENBQUNNLEVBQUUsRUFBRSxHQUFHLEVBQUV4RSxtQkFBbUIsQ0FBQztJQUNwRSxDQUFDO0lBRUR5RSwwQkFBMEIsRUFBRSxTQUFBQSxDQUMzQkQsRUFBVSxFQUNWeEUsbUJBQWdFLEVBQzNDO01BQ3JCLE9BQU9yRSxXQUFXLENBQUN1SSxrQkFBa0IsQ0FBQ00sRUFBRSxFQUFFLFNBQVMsRUFBRXhFLG1CQUFtQixDQUFDO0lBQzFFLENBQUM7SUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQzBFLGtDQUFrQyxFQUFFLFNBQUFBLENBQ25DQyxlQUdDLEVBQ0Q3RSxTQUF5QyxFQUN6QzhFLGFBQXFCLEVBQ3JCQyxxQkFBNkIsRUFDN0JoSixZQUEyRCxFQUt4QjtNQUFBLElBSm5DaUosV0FBVyxHQUFBQyxTQUFBLENBQUFoSSxNQUFBLFFBQUFnSSxTQUFBLFFBQUE5SCxTQUFBLEdBQUE4SCxTQUFBLE1BQUcsS0FBSztNQUFBLElBQ25CQyxnQkFBMEIsR0FBQUQsU0FBQSxDQUFBaEksTUFBQSxPQUFBZ0ksU0FBQSxNQUFBOUgsU0FBQTtNQUFBLElBQzFCZ0ksOEJBQXVDLEdBQUFGLFNBQUEsQ0FBQWhJLE1BQUEsT0FBQWdJLFNBQUEsTUFBQTlILFNBQUE7TUFBQSxJQUN2Q2lJLGNBQXdCLEdBQUFILFNBQUEsQ0FBQWhJLE1BQUEsT0FBQWdJLFNBQUEsTUFBQTlILFNBQUE7TUFFeEIsSUFBSSxDQUFDNkMsU0FBUyxFQUFFLE9BQU83QyxTQUFTO01BQ2hDLE1BQU1OLFdBQVcsR0FBR21ELFNBQVMsQ0FBQ2xDLE1BQU07UUFDbkN1SCxvQkFBb0IsR0FBR1IsZUFBZSxDQUFDUyxpQkFBaUIsQ0FBQ0MsZ0JBQWdCLENBQUNDLGtCQUFrQjtRQUM1RkMsWUFBWSxHQUNYLE9BQU8xSixZQUFZLEtBQUssUUFBUSxLQUMvQixJQUFJLENBQUNELGVBQWUsQ0FBQ0MsWUFBWSxFQUFFYyxXQUFXLENBQUMsSUFDL0MsSUFBSSxDQUFDTyxnQ0FBZ0MsQ0FBQ1AsV0FBVyxDQUFDUCxRQUFRLENBQUMsQ0FBQyxFQUFFK0ksb0JBQW9CLENBQUMsQ0FBQztRQUN0Rkssa0JBQWtCLEdBQUcsQ0FBQ04sY0FBYyxHQUFHLGFBQWEsR0FBRywyQkFBMkI7UUFDbEZPLHFCQUFxQixHQUFHLENBQUNQLGNBQWMsR0FBRyxnQkFBZ0IsR0FBRyw4QkFBOEI7UUFDM0ZRLGVBQWUsR0FBRyxDQUFDUixjQUFjLEdBQUcsRUFBRSxHQUFHLGNBQWM7UUFDdkRTLE9BQU8sR0FBR25HLFdBQVcsQ0FBQyxHQUFHa0csZUFBZSxrQkFBa0IsRUFBRSxVQUFVLENBQUM7UUFDdkVFLE1BQU0sR0FBRztVQUNSQyxRQUFRLEVBQUUsQ0FBQ04sWUFBWSxHQUFHSSxPQUFPLEdBQUcsSUFBSTtVQUN4Q0csYUFBYSxFQUFFUCxZQUFZLEdBQUdBLFlBQVksR0FBR3RJLFNBQVM7VUFDdEQySCxhQUFhLEVBQUVBLGFBQWE7VUFDNUJtQixrQkFBa0IsRUFBRSxDQUFDUixZQUFZLEdBQzlCL0YsV0FBVyxDQUFDLGtCQUFrQk0sU0FBUyxDQUFDbEMsTUFBTSxJQUFJNEgsa0JBQWtCLEdBQUcsRUFBRSxVQUFVLENBQUMsR0FDcEYsSUFBSTtVQUNQUSxxQkFBcUIsRUFBRSxDQUFDVCxZQUFZLEdBQ2pDL0YsV0FBVyxDQUFDLGtCQUFrQk0sU0FBUyxDQUFDbEMsTUFBTSxJQUFJNkgscUJBQXFCLEdBQUcsRUFBRSxVQUFVLENBQUMsR0FDdkYsSUFBSTtVQUNQWCxXQUFXLEVBQUVBLFdBQVc7VUFDeEJFLGdCQUFnQixFQUFFQSxnQkFBZ0I7VUFDbENDLDhCQUE4QixFQUFFQSw4QkFBOEI7VUFDOURnQixrQkFBa0IsRUFBRW5HLFNBQVMsRUFBRW9HLGtCQUFrQixLQUFLLG9DQUFvQyxHQUFHLFdBQVcsR0FBRyxVQUFVO1VBQ3JIQyxTQUFTLEVBQUV4QixlQUFlLENBQUN5QixTQUFTO1VBQ3BDdkIscUJBQXFCLEVBQUVBLHFCQUFxQjtVQUM1Q3dCLEtBQUssRUFBRXZHLFNBQVMsQ0FBQ21DO1FBQ2xCLENBQUM7TUFDRixPQUFPeEMsaUJBQWlCLENBQUM2RyxFQUFFLENBQUMsbUJBQW1CLEVBQUUsQ0FBQ0MsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFQSxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUV6RyxTQUFTLENBQUNsQyxNQUFNLEVBQUVnSSxNQUFNLENBQUMsQ0FBQyxDQUFDO01BQ2hIO0lBQ0QsQ0FBQztJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDWSwyQkFBMkIsRUFBRSxTQUFBQSxDQUM1QkMsZUFBbUMsRUFDbkMzSyxVQUEyQixFQUMzQjRLLE9BQWdCLEVBQ2hCN0ssWUFBMkQsRUFDM0Q4SyxjQUF1QixFQUN2QkMsMEJBQXVDLEVBQ3ZDMUIsY0FBd0IsRUFDeEIyQixNQUFnQixFQUNHO01BQ25CLElBQUksQ0FBQ0QsMEJBQTBCLEVBQUUsT0FBTyxLQUFLO01BRTdDLE1BQU1FLGNBQWMsR0FBRyxJQUFJLENBQUNsTCxlQUFlLENBQUNDLFlBQVksRUFBRUMsVUFBVSxDQUFDOztNQUVyRTtNQUNBO01BQ0EsSUFBSSxJQUFJLENBQUNvQixnQ0FBZ0MsQ0FBQ3BCLFVBQVUsQ0FBQ00sUUFBUSxDQUFDLENBQUMsRUFBRXdLLDBCQUEwQixDQUFDdEIsa0JBQWtCLENBQUMsRUFBRTtRQUNoSDtRQUNBLE1BQU15QixzQkFBc0IsR0FBR04sZUFBZSxJQUFJTyxJQUFJLENBQUNDLEtBQUssQ0FBQ1IsZUFBZSxDQUFDNUIscUJBQXFCLENBQUM7UUFDbkcsSUFBSWtDLHNCQUFzQixFQUFFRyxjQUFjLENBQUNwTCxVQUFVLENBQUMsRUFBRTtVQUN2RDtVQUNBO1VBQ0E7VUFDQSxPQUFPLENBQUNvSixjQUFjLEdBQ25CLGlDQUFpQ3BKLFVBQVUsY0FBYyxHQUN6RCxpQ0FBaUNBLFVBQVUsNEJBQTRCO1FBQzNFO1FBQ0E7UUFDQSxPQUFPLElBQUk7TUFDWjtNQUNBLElBQUksQ0FBQzRLLE9BQU8sSUFBSUksY0FBYyxFQUFFO1FBQy9CLE9BQU8sSUFBSTtNQUNaO01BQ0EsTUFBTUssd0JBQXdCLEdBQUdOLE1BQU0sR0FDcENPLFlBQVksQ0FBQ0MsNkJBQTZCLENBQUMsUUFBUSxFQUFFbkMsY0FBYyxDQUFDLEdBQ3BFa0MsWUFBWSxDQUFDQyw2QkFBNkIsQ0FBQ1YsY0FBYyxJQUFJLGFBQWEsRUFBRXpCLGNBQWMsQ0FBQztNQUU5RixJQUFJb0MsbUNBQW1DLEdBQUcsRUFBRTtNQUU1QyxNQUFNdkwsTUFBTSxHQUFHLENBQUNtSixjQUFjLEdBQzNCLDhCQUE4QnBKLFVBQVUsWUFBWSxHQUNwRCw4QkFBOEJBLFVBQVUsMEJBQTBCO01BQ3JFd0wsbUNBQW1DLEdBQUcsR0FBR0gsd0JBQXdCLE9BQU9wTCxNQUFNLEVBQUU7TUFFaEYsT0FBTyxNQUFNdUwsbUNBQW1DLEdBQUc7SUFDcEQsQ0FBQztJQUNEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQ0Msd0JBQXdCLEVBQUUsU0FBQUEsQ0FDekI1QyxlQUdDLEVBQ0Q3RSxTQUE0QyxFQUM1QzBILGVBQTJELEVBQzNEQyxxQkFBa0UsRUFDbEV2QyxjQUF3QixFQUNMO01BQ25CLElBQUl3Qyx5QkFBeUIsR0FBRyxJQUFJO01BQ3BDLElBQUkxSiwwQkFBMEIsQ0FBQ3lKLHFCQUFxQixDQUFDLEVBQUU7UUFDdERDLHlCQUF5QixHQUFHRCxxQkFBcUIsQ0FBQ3hKLElBQUk7TUFDdkQ7TUFDQSxNQUFNMEosaUJBQWlCLEdBQUdoRCxlQUFlLEVBQUU4QixlQUFlLEVBQUVtQixlQUFlO01BRTNFLElBQUksQ0FBQ0osZUFBZSxFQUFFO1FBQ3JCLE1BQU1LLFNBQVMsR0FBR2xELGVBQWUsQ0FBQ3JCLFVBQVUsQ0FBQzdFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RELE1BQU1xSixTQUFTLEdBQUduRCxlQUFlLENBQUNyQixVQUFVLENBQUN5RSxRQUFRLENBQUMsQ0FBQztRQUN2RCxJQUFJTixxQkFBcUIsS0FBSyxLQUFLLElBQUksQ0FBQ0UsaUJBQWlCLEVBQUU7VUFDMURLLEdBQUcsQ0FBQ0MsT0FBTyxDQUFDLGlEQUFpRCxDQUFDO1VBQzlELE9BQU8sS0FBSztRQUNiLENBQUMsTUFBTSxJQUNOUCx5QkFBeUIsSUFDekIsQ0FBQ0MsaUJBQWlCLElBQ2xCM0osMEJBQTBCLENBQUM4QixTQUFTLEVBQUUvQixtQkFBbUIsQ0FBQyxJQUMxRCtKLFNBQVMsQ0FBQ0ksU0FBUyxDQUFDTCxTQUFTLEdBQUcsV0FBVyxDQUFDLEtBQUsvSCxTQUFTLENBQUMvQixtQkFBbUIsQ0FBQ0UsSUFBSSxDQUFDbkIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNoRztVQUNELE9BQU8sU0FBUzRLLHlCQUF5QixDQUFDUyxTQUFTLENBQ2xEVCx5QkFBeUIsQ0FBQzFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQzFDMEkseUJBQXlCLENBQUMzSyxNQUMzQixDQUFDLElBQUk7UUFDTjtRQUNBLE9BQU8sSUFBSTtNQUNaO01BRUEsSUFBSXFMLGdDQUFnQyxHQUFHLEVBQUU7UUFDeENqQix3QkFBd0I7UUFDeEJwTCxNQUFNO01BRVAsSUFBSTBMLHFCQUFxQixLQUFLLElBQUksSUFBSUUsaUJBQWlCLEVBQUU7UUFDeERTLGdDQUFnQyxHQUFHLEVBQUVsRCxjQUFjLElBQUksS0FBSyxDQUFDLEdBQzFELDJDQUEyQyxHQUMzQyx1REFBdUQ7TUFDM0QsQ0FBQyxNQUFNLElBQUl1QyxxQkFBcUIsS0FBSyxLQUFLLEVBQUU7UUFDM0NPLEdBQUcsQ0FBQ0MsT0FBTyxDQUFDLGlEQUFpRCxDQUFDO1FBQzlELE9BQU8sS0FBSztNQUNiLENBQUMsTUFBTTtRQUNOZCx3QkFBd0IsR0FBRyxFQUFFakMsY0FBYyxJQUFJLEtBQUssQ0FBQyxHQUNsRCwyQ0FBMkMsR0FDM0MsdURBQXVEO1FBQzFEbkosTUFBTSxHQUFHLEVBQUVtSixjQUFjLElBQUksS0FBSyxDQUFDLEdBQ2hDLG1CQUFtQnBGLFNBQVMsQ0FBQ25DLGNBQWMsSUFBSW1DLFNBQVMsQ0FBQ2xDLE1BQU0sWUFBWSxHQUMzRSxtQkFBbUJrQyxTQUFTLENBQUNuQyxjQUFjLElBQUltQyxTQUFTLENBQUNsQyxNQUFNLDBCQUEwQjtRQUM1RndLLGdDQUFnQyxHQUFHakIsd0JBQXdCLEdBQUcsTUFBTSxHQUFHcEwsTUFBTTtNQUM5RTtNQUVBLE9BQU8sTUFBTXFNLGdDQUFnQyxHQUFHO0lBQ2pELENBQUM7SUFFREMseUNBQXlDLEVBQUUsU0FBQUEsQ0FBVTNHLEtBQWlCLEVBQW9DO01BQ3pHLE9BQU9qQyxpQkFBaUIsQ0FDdkJ3RSxNQUFNLENBQ0xxRSxFQUFFLENBQUM1RyxLQUFLLENBQUM2RyxRQUFRLEtBQUssSUFBSSxFQUFFQyxHQUFHLENBQUNDLEVBQUUsQ0FBQ0MsVUFBVSxFQUFFaEgsS0FBSyxDQUFDaUgsWUFBWSxDQUFDcEksSUFBSSxLQUFLLG9CQUFvQixDQUFDLENBQUMsRUFDakd3RCxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQ2Q2RSxLQUFLLENBQUNsSCxLQUFLLENBQUNtSCxTQUFTLEVBQUUsV0FBVyxDQUNuQyxDQUNELENBQUM7SUFDRixDQUFDO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0NDLHdCQUF3QixFQUFFLFNBQUFBLENBQ3pCQyxTQUFnRixFQUNoRkMsbUJBQTZGLEVBQ25GO01BQ1Y7TUFDQSxJQUFJLENBQUNBLG1CQUFtQixFQUFFO1FBQ3pCLElBQUlELFNBQVMsQ0FBQ3RNLEtBQUssRUFBRUcsUUFBUSxDQUFDLG9CQUFvQixDQUFDLElBQUltTSxTQUFTLENBQUNsTCxNQUFNLEVBQUU7VUFDeEUsT0FBTyxLQUFLO1FBQ2I7UUFDQSxJQUFJa0wsU0FBUyxDQUFDdE0sS0FBSyxFQUFFRyxRQUFRLENBQUMsbUNBQW1DLENBQUMsSUFBSW1NLFNBQVMsQ0FBQ2xMLE1BQU0sRUFBRTtVQUN2RixPQUFPLEtBQUs7UUFDYjtRQUNBLE9BQU8sSUFBSTtNQUNaOztNQUVBO01BQ0EsT0FBT21MLG1CQUFtQixDQUFDQyxJQUFJLENBQUMsVUFBVUMsR0FBRyxFQUFFO1FBQzlDLElBQ0MsQ0FBQ0EsR0FBRyxDQUFDek0sS0FBSywyQ0FBZ0MsSUFBSXlNLEdBQUcsQ0FBQ3pNLEtBQUssd0RBQTZDLEtBQ25HeU0sR0FBRyxDQUF1Qix5Q0FBOEIsQ0FBQyxLQUFLLElBQUksRUFDbEU7VUFDRCxPQUFPLElBQUk7UUFDWjtNQUNELENBQUMsQ0FBQztJQUNILENBQUM7SUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDQyxvQkFBb0IsRUFBRSxTQUFBQSxDQUNyQkMsVUFBaUQsRUFDakRDLFFBQWtDLEVBQ2I7TUFDckIsSUFDQ0QsVUFBVSxDQUFDM00sS0FBSyxvREFBeUMsSUFDekQyTSxVQUFVLENBQUMzTSxLQUFLLG1FQUF3RCxFQUN2RTtRQUNELE9BQU8yTSxVQUFVLENBQUNuSCxLQUFLO01BQ3hCO01BQ0E7TUFDQSxJQUNDbUgsVUFBVSxDQUFDM00sS0FBSyx3REFBNkMsSUFDN0Q0TSxRQUFRLENBQUMxRCxPQUFPLENBQUN1QyxTQUFTLENBQUMsd0JBQXdCLENBQUMsQ0FBQ2xKLE9BQU8sQ0FBQyxHQUFHLDBDQUErQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQ3BHO1FBQ0QsTUFBTXNLLGVBQWUsR0FBRyw4QkFBOEI7UUFDdEQsTUFBTUMsZUFBeUIsR0FBRyxFQUFFO1FBQ3BDLEtBQUssTUFBTUMsQ0FBQyxJQUFJSCxRQUFRLENBQUMxRCxPQUFPLENBQUN1QyxTQUFTLENBQUNvQixlQUFlLENBQUMsRUFBRTtVQUM1RCxJQUNDRCxRQUFRLENBQUMxRCxPQUFPLENBQUN1QyxTQUFTLENBQUMsR0FBR29CLGVBQWUsR0FBR0UsQ0FBQyxRQUFRLENBQUMsb0RBQXlDLElBQ25HSCxRQUFRLENBQUMxRCxPQUFPLENBQUN1QyxTQUFTLENBQUMsR0FBR29CLGVBQWUsR0FBR0UsQ0FBQyxRQUFRLENBQUMsbUVBQXdELEVBQ2pIO1lBQ0RELGVBQWUsQ0FBQzNGLElBQUksQ0FBQ3lGLFFBQVEsQ0FBQzFELE9BQU8sQ0FBQ3VDLFNBQVMsQ0FBQyxHQUFHb0IsZUFBZSxHQUFHRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1VBQ2pGO1FBQ0Q7UUFDQTtRQUNBLElBQUlELGVBQWUsQ0FBQ3hNLE1BQU0sR0FBRyxDQUFDLEVBQUU7VUFDL0IsT0FBT3dNLGVBQWUsQ0FBQ0UsTUFBTSxDQUFDLFVBQVVDLENBQVMsRUFBRUMsQ0FBUyxFQUFFO1lBQzdELE9BQU9ELENBQUMsQ0FBQzNNLE1BQU0sR0FBRzRNLENBQUMsQ0FBQzVNLE1BQU0sR0FBRzJNLENBQUMsR0FBR0MsQ0FBQztVQUNuQyxDQUFDLENBQUM7UUFDSCxDQUFDLE1BQU07VUFDTixPQUFPSixlQUFlLENBQUN4TSxNQUFNLEtBQUssQ0FBQyxHQUFHRSxTQUFTLEdBQUdzTSxlQUFlLENBQUNuTixRQUFRLENBQUMsQ0FBQztRQUM3RTtNQUNEO01BQ0EsT0FBT2EsU0FBUztJQUNqQixDQUFDO0lBQ0QyTSxpQ0FBaUMsRUFBRSxTQUFBQSxDQUFVaEssS0FBc0IsRUFBRWlLLE9BQThCLEVBQW1DO01BQ3JJLElBQUlqSyxLQUFLLENBQUNrSyxTQUFTLEtBQUssaUJBQWlCLEVBQUU7UUFDMUMsT0FBT0QsT0FBTyxDQUFDRSxRQUFRO01BQ3hCO01BQ0EsT0FBTzlNLFNBQVM7SUFDakIsQ0FBQztJQUVEeUYsWUFBWSxFQUFFLFNBQUFBLENBQVU5QyxLQUFzQixFQUFFaUssT0FBOEIsRUFBVTtNQUN2RixNQUFNRSxRQUFRLEdBQUcsSUFBSSxDQUFDSCxpQ0FBaUMsQ0FBQ2hLLEtBQUssRUFBRWlLLE9BQU8sQ0FBQztNQUN2RSxJQUFJRSxRQUFRLElBQUlBLFFBQVEsQ0FBQ0MsY0FBYyxFQUFFO1FBQ3hDLE9BQU9ELFFBQVEsQ0FBQ0MsY0FBYztNQUMvQjtNQUNBLE9BQU8sSUFBSTtJQUNaLENBQUM7SUFDRHJILGdCQUFnQixFQUFFLFNBQUFBLENBQVUvQyxLQUFzQixFQUFFaUssT0FBOEIsRUFBVztNQUM1RixNQUFNRSxRQUFRLEdBQUcsSUFBSSxDQUFDSCxpQ0FBaUMsQ0FBQ2hLLEtBQUssRUFBRWlLLE9BQU8sQ0FBQztNQUN2RSxJQUFJRSxRQUFRLElBQUlBLFFBQVEsQ0FBQ0UsbUJBQW1CLEVBQUU7UUFDN0MsT0FBTyxDQUFDRixRQUFRLENBQUNFLG1CQUFtQjtNQUNyQztNQUNBLE9BQU8sSUFBSTtJQUNaLENBQUM7SUFFREMsV0FBVyxFQUFFLFNBQUFBLENBQVV4SSxLQUF5QixFQUFFeUksS0FBYyxFQUFFQyxVQUFrQixFQUFFQyxzQkFBK0IsRUFBVTtNQUM5SCxJQUFJQyxRQVdIO01BQ0QsSUFBSUgsS0FBSyxFQUFFO1FBQ1Y7UUFDQSxJQUFJekksS0FBSyxDQUFDNkksT0FBTyxDQUFDdEosSUFBSSxLQUFLLFdBQVcsRUFBRTtVQUN2QyxNQUFNLElBQUl1SixLQUFLLENBQUMsZ0RBQWdELENBQUM7UUFDbEU7UUFDQUYsUUFBUSxHQUFHO1VBQ1YvSixJQUFJLEVBQUUsZ0RBQWdEO1VBQ3REa0ssT0FBTyxFQUFFO1lBQ1JDLGNBQWMsRUFBRU47VUFDakI7UUFDRCxDQUFDO1FBQ0QsSUFBSTFJLEtBQUssQ0FBQ2tHLGVBQWUsSUFBSXlDLHNCQUFzQixFQUFFO1VBQ3BEQyxRQUFRLENBQUNHLE9BQU8sQ0FBRUosc0JBQXNCLEdBQUcsSUFBSTtRQUNoRDtNQUNELENBQUMsTUFBTSxJQUFJM0ksS0FBSyxDQUFDNkksT0FBTyxDQUFDdEosSUFBSSxLQUFLLFdBQVcsRUFBRTtRQUM5QyxJQUFJLENBQUNTLEtBQUssQ0FBQzZJLE9BQU8sQ0FBQ0ksa0JBQWtCLEVBQUU7VUFDdEMsTUFBTSxJQUFJSCxLQUFLLENBQUMscURBQXFELENBQUM7UUFDdkU7UUFDQUYsUUFBUSxHQUFHO1VBQ1YvSixJQUFJLEVBQUUsaURBQWlEO1VBQ3ZEa0ssT0FBTyxFQUFFO1lBQ1JFLGtCQUFrQixFQUFFakosS0FBSyxDQUFDNkksT0FBTyxDQUFDSSxrQkFBa0I7WUFDcERDLHFCQUFxQixFQUFFbEosS0FBSyxDQUFDbUosVUFBVSxDQUFDRCxxQkFBcUI7WUFDN0RQLHNCQUFzQjtZQUN0QlMsYUFBYSxFQUFFcEosS0FBSyxDQUFDNkksT0FBTyxDQUFDTyxhQUFhLEtBQUs7VUFDaEQ7UUFDRCxDQUFDO01BQ0YsQ0FBQyxNQUFNO1FBQ05SLFFBQVEsR0FBRztVQUNWL0osSUFBSSxFQUFFO1FBQ1AsQ0FBQztRQUNELElBQUltQixLQUFLLENBQUNrRyxlQUFlLElBQUl5QyxzQkFBc0IsRUFBRTtVQUNwREMsUUFBUSxDQUFDRyxPQUFPLEdBQUc7WUFDbEJKO1VBQ0QsQ0FBQztRQUNGO01BQ0Q7TUFFQSxJQUFJM0ksS0FBSyxDQUFDa0csZUFBZSxLQUFLLElBQUksSUFBSWxHLEtBQUssQ0FBQzZJLE9BQU8sQ0FBQ1EsdUJBQXVCLEVBQUVDLHNCQUFzQixLQUFLLElBQUksRUFBRTtRQUM3R1YsUUFBUSxDQUFDRyxPQUFPLEdBQUc7VUFBRSxHQUFHSCxRQUFRLENBQUNHLE9BQU87VUFBRSxHQUFHO1lBQUVRLHdCQUF3QixFQUFFO2NBQUVDLFNBQVMsRUFBRTtZQUFLO1VBQUU7UUFBRSxDQUFDO01BQ2pHO01BRUEsT0FBT2xFLElBQUksQ0FBQ21FLFNBQVMsQ0FBQ2IsUUFBUSxDQUFDO0lBQ2hDLENBQUM7SUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDYyxxQkFBcUIsRUFBRSxlQUFBQSxDQUN0QkMsZ0JBQXlDLEVBQ3pDQyxLQUFhLEVBQ2JqQyxRQUFtQixFQUNuQmtDLE1BQWtCLEVBQ2xCQyxhQUErQixFQUNmO01BQ2hCLElBQUlDLHdCQUF3QixFQUFFQyxvQkFBb0I7TUFFbEQsSUFBSUwsZ0JBQWdCLEVBQUU7UUFDckIsSUFBSTtVQUNILE1BQU1HLGFBQWE7VUFDbkI7VUFDQTtVQUNBLElBQUlHLFdBQVcsQ0FBQ0MsYUFBYSxDQUFDUCxnQkFBZ0IsQ0FBQyxJQUFJLENBQUNoQyxRQUFRLENBQUN3QyxTQUFTLENBQUMsQ0FBQyxFQUFFO1lBQ3pFSix3QkFBd0IsR0FBR0YsTUFBTSxDQUFDTyxRQUFRLENBQUNSLEtBQUssRUFBRWpDLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO2NBQ25FMEMsZUFBZSxFQUFFLGFBQWE7Y0FDOUJDLFNBQVMsRUFBRTtZQUNaLENBQUMsQ0FBQztZQUNGO1lBQ0E7WUFDQTtZQUNBUCx3QkFBd0IsQ0FBQ1EsZUFBZSxHQUFHLFlBQWtCO2NBQzVEO1lBQUEsQ0FDQTtZQUNEUCxvQkFBb0IsR0FBR0Qsd0JBQXdCLENBQUNTLE1BQU0sQ0FBQyxDQUFDO1lBQ3hEYixnQkFBZ0IsQ0FBQ2MsaUJBQWlCLENBQUNULG9CQUFvQixDQUFDOztZQUV4RDtZQUNBLElBQUk7Y0FDSCxNQUFNQSxvQkFBb0IsQ0FBQ1UsT0FBTyxDQUFDLENBQUM7WUFDckMsQ0FBQyxDQUFDLE9BQU9DLENBQUMsRUFBRTtjQUNYckUsR0FBRyxDQUFDc0UsS0FBSyxDQUFDLHlDQUF5QyxDQUFDO1lBQ3JEO1VBQ0Q7UUFDRCxDQUFDLENBQUMsT0FBT0MsTUFBTSxFQUFFO1VBQ2hCdkUsR0FBRyxDQUFDd0UsS0FBSyxDQUFDLDBDQUEwQyxFQUFFRCxNQUFnQixDQUFDO1FBQ3hFO01BQ0Q7SUFDRCxDQUFDO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQ0UsMEJBQTBCLEVBQUUsU0FBQUEsQ0FDM0IxUSxNQUFvRCxFQUNwRHFKLGlCQUErQyxFQUNyQztNQUNWLE1BQU10RixTQUFTLEdBQUcvRCxNQUFNLENBQUMyUSxjQUFjLEdBQ25DdEgsaUJBQWlCLENBQUN1SCxjQUFjLENBQUNuTyxXQUFXLENBQUN6QyxNQUFNLENBQUMyUSxjQUFjLENBQUMsQ0FBQ2hPLE1BQU0sR0FHM0V6QixTQUFTO01BQ1osUUFBUTZDLFNBQVMsRUFBRXJELEtBQUs7UUFDdkIsS0FBSywrQ0FBK0M7VUFBRTtZQUNyRCxNQUFNbVEsWUFBWSxHQUFHOU0sU0FBUyxDQUFDK00sWUFBWTtZQUMzQyxPQUNDRCxZQUFZLEVBQUVsRyxPQUFPLEtBQUssSUFBSSxJQUM5QixDQUFDa0csWUFBWSxDQUFDRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUNDLFlBQVksSUFDeENILFlBQVksQ0FBQ0ksZ0JBQWdCLEtBQUs1SCxpQkFBaUIsQ0FBQ0MsZ0JBQWdCO1VBRXRFO1FBQ0EsS0FBSyw4REFBOEQ7VUFDbEUsT0FBT3ZGLFNBQVMsQ0FBQ2hDLGVBQWUsRUFBRW1QLE9BQU8sQ0FBQyxDQUFDLEtBQUssSUFBSTtRQUVyRDtVQUNDLElBQUlsUixNQUFNLENBQUNrRixJQUFJLEtBQUssU0FBUyxFQUFFO1lBQzlCLE9BQVFsRixNQUFNLENBQWtCbVIsaUJBQWlCLEtBQUssSUFBSTtVQUMzRDtNQUNGO01BQ0EsT0FBTyxLQUFLO0lBQ2I7RUFDRCxDQUFDO0VBQ0F2UixXQUFXLENBQUMwQix5QkFBeUIsQ0FBb0M4UCxnQkFBZ0IsR0FBRyxJQUFJO0VBQ2hHeFIsV0FBVyxDQUFDd04sb0JBQW9CLENBQW9DZ0UsZ0JBQWdCLEdBQUcsSUFBSTtFQUFDLE9BRTlFeFIsV0FBVztBQUFBIiwiaWdub3JlTGlzdCI6W119
675
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUYWJsZUhlbHBlciIsIl9pc1N0YXRpY0FjdGlvbiIsImFjdGlvbk9iamVjdCIsImFjdGlvbk5hbWUiLCJhY3Rpb24iLCJBcnJheSIsImlzQXJyYXkiLCJlbnRpdHlUeXBlIiwiX2dldEFjdGlvbk92ZXJsb2FkRW50aXR5VHlwZSIsInRvU3RyaW5nIiwiZmluZCIsIl9hY3Rpb24iLCIkSXNCb3VuZCIsIiRQYXJhbWV0ZXIiLCIkVHlwZSIsIiRpc0NvbGxlY3Rpb24iLCJzQWN0aW9uTmFtZSIsImluY2x1ZGVzIiwiYVBhcnRzIiwic3BsaXQiLCJsZW5ndGgiLCJyZXBsYWNlQWxsIiwidW5kZWZpbmVkIiwiX2lzQWN0aW9uT3ZlcmxvYWRPbkRpZmZlcmVudFR5cGUiLCJzQW5ub3RhdGlvblRhcmdldEVudGl0eVR5cGUiLCJzRW50aXR5VHlwZSIsImdldE5hdmlnYXRpb25BdmFpbGFibGVNYXAiLCJsaW5lSXRlbUNvbGxlY3Rpb24iLCJvSUJOTmF2aWdhdGlvbkF2YWlsYWJsZU1hcCIsImZvckVhY2giLCJyZWNvcmQiLCJzS2V5IiwiU2VtYW50aWNPYmplY3QiLCJBY3Rpb24iLCJJbmxpbmUiLCJSZXF1aXJlc0NvbnRleHQiLCJOYXZpZ2F0aW9uQXZhaWxhYmxlIiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCJwYXRoIiwiT2JqZWN0Iiwia2V5cyIsImdldFVpTGluZUl0ZW1PYmplY3QiLCJsaW5lSXRlbU9yUHJlc2VudGF0aW9uQ29udGV4dCIsImNvbnZlcnRlZE1ldGFEYXRhIiwibGluZUl0ZW1PclByZXNlbnRhdGlvbk9iamVjdCIsInJlc29sdmVQYXRoIiwiZ2V0UGF0aCIsInRhcmdldCIsInZpc3VhbGl6YXRpb25zIiwiVmlzdWFsaXphdGlvbnMiLCJsaW5lSXRlbU9iamVjdCIsIml0ZW0iLCJ2YWx1ZSIsImluZGV4T2YiLCIkdGFyZ2V0IiwidGVybSIsImNyZWF0ZUJpbmRpbmdUb0xvYWRQcm9wZXJ0aWVzIiwicHJvcGVydGllcyIsInByb3BlcnR5QmluZGluZ3MiLCJtYXAiLCJwcm9wIiwicGF0aEluTW9kZWwiLCJjb21waWxlRXhwcmVzc2lvbiIsImZvcm1hdFJlc3VsdCIsImdldENvbHVtbldpZHRoIiwib1RoaXMiLCJjb2x1bW4iLCJkYXRhRmllbGQiLCJkYXRhRmllbGRBY3Rpb25UZXh0IiwiZGF0YU1vZGVsT2JqZWN0UGF0aCIsInVzZVJlbVVuaXQiLCJtaWNyb0NoYXJ0VGl0bGUiLCJ3aWR0aCIsImVuYWJsZUF1dG9Db2x1bW5XaWR0aCIsImdldENvbHVtbldpZHRoRm9ySW1hZ2UiLCJnZXRDb2x1bW5XaWR0aEZvckRhdGFGaWVsZCIsIm5hbWUiLCJfc2hvdWxkSW5jbHVkZUhlYWRlckluQ29sdW1ud2lkaENhbGN1bGF0aW9uIiwic29ydGFibGUiLCJyZXNvbHZlQmluZGluZ1N0cmluZyIsInJlcXVpcmVkIiwiVGFibGVGb3JtYXR0ZXIiLCJhbm5vdGF0aW9ucyIsInRhcmdldE9iamVjdCIsIlZhbHVlIiwiZGF0YVR5cGUiLCJ0eXBlIiwiZ2V0RWRpdE1vZGUiLCJGaWVsZEVkaXRNb2RlIiwiRGlzcGxheSIsImhhc1RleHRBbm5vdGF0aW9uIiwiaGFzVGV4dCIsIkNvcmUiLCJNZWRpYVR5cGUiLCJpc0ltYWdlVVJMIiwidGFibGUiLCJ3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciIsIlRhcmdldCIsIiRBbm5vdGF0aW9uUGF0aCIsIm5UbXBUZXh0V2lkdGgiLCJTaXplSGVscGVyIiwiZ2V0QnV0dG9uV2lkdGgiLCJMYWJlbCIsIm5UbXBWaXN1YWxpemF0aW9uV2lkdGgiLCJUYWJsZVNpemVIZWxwZXIiLCJnZXRXaWR0aEZvckRhdGFGaWVsZEZvckFubm90YXRpb24iLCJwcm9wZXJ0eVdpZHRoIiwiaXNBbm5vdGF0aW9uT2ZUeXBlIiwiZ2V0Q29sdW1uV2lkdGhGb3JDaGFydCIsImNvbHVtbkxhYmVsV2lkdGgiLCJjaGFydFNpemUiLCJnZXRDaGFydFNpemUiLCJnZXRTaG93T25seUNoYXJ0IiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsInRtcFRleHQiLCJ0aXRsZVNpemUiLCJ0bXBXaWR0aCIsImdldE1hcmdpbkNsYXNzIiwic1Zpc3VhbGl6YXRpb24iLCJpc0xhc3RGaWVsZCIsInNDbGFzcyIsImdldFZCb3hWaXNpYmlsaXR5IiwiY29sbGVjdGlvbiIsImZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyIsImZpZWxkR3JvdXAiLCJhbGxTdGF0aWMiLCJoaWRkZW5QYXRocyIsImhpZGRlbkFubm90YXRpb25WYWx1ZSIsInB1c2giLCIkUGF0aCIsImhhc0FueVBhdGhFeHByZXNzaW9ucyIsImNvbnN0YW50IiwiaGFzQWxsSGlkZGVuU3RhdGljRXhwcmVzc2lvbnMiLCJpZkVsc2UiLCJnZXRFbGVtZW50U3RhYmxlSWQiLCJ0YWJsZUlkIiwiZWxlbWVudElkIiwiZGF0YUZpZWxkUGFydCIsImdlbmVyYXRlIiwiZ2V0Q29sdW1uU3RhYmxlSWQiLCJpZCIsImdldEZpZWxkR3JvdXBMYWJlbFN0YWJsZUlkIiwicHJlc3NFdmVudERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvbiIsInRhYmxlUHJvcGVydGllcyIsImVudGl0eVNldE5hbWUiLCJvcGVyYXRpb25BdmFpbGFibGVNYXAiLCJpc05hdmlnYWJsZSIsImFyZ3VtZW50cyIsImVuYWJsZUF1dG9TY3JvbGwiLCJkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24iLCJmb3JDb250ZXh0TWVudSIsInRhcmdldEVudGl0eVR5cGVOYW1lIiwiY29udGV4dE9iamVjdFBhdGgiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwic3RhdGljQWN0aW9uIiwiYXBwbGljYWJsZVByb3BlcnR5Iiwibm90QXBwbGljYWJsZVByb3BlcnR5IiwiY29udGV4dE1lbnVQYXRoIiwiY29udGV4dCIsInBhcmFtcyIsImNvbnRleHRzIiwiYlN0YXRpY0FjdGlvbiIsImFwcGxpY2FibGVDb250ZXh0cyIsIm5vdEFwcGxpY2FibGVDb250ZXh0cyIsImludm9jYXRpb25Hcm91cGluZyIsIkludm9jYXRpb25Hcm91cGluZyIsImNvbnRyb2xJZCIsImNvbnRlbnRJZCIsImxhYmVsIiwiZm4iLCJyZWYiLCJpc0RhdGFGaWVsZEZvckFjdGlvbkVuYWJsZWQiLCJ0YWJsZURlZmluaXRpb24iLCJpc0JvdW5kIiwiZW5hYmxlT25TZWxlY3QiLCJhbm5vdGF0aW9uVGFyZ2V0RW50aXR5VHlwZSIsImlzQ29weSIsImlzU3RhdGljQWN0aW9uIiwib09wZXJhdGlvbkF2YWlsYWJsZU1hcCIsIkpTT04iLCJwYXJzZSIsImhhc093blByb3BlcnR5IiwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzIiwiQWN0aW9uSGVscGVyIiwiZ2V0TnVtYmVyT2ZDb250ZXh0c0V4cHJlc3Npb24iLCJkYXRhRmllbGRGb3JBY3Rpb25FbmFibGVkRXhwcmVzc2lvbiIsImlzRGF0YUZpZWxkRm9ySUJORW5hYmxlZCIsInJlcXVpcmVzQ29udGV4dCIsImlzTmF2aWdhdGlvbkF2YWlsYWJsZSIsImlzTmF2aWdhdGlvbkF2YWlsYWJsZVBhdGgiLCJpc0FuYWx5dGljYWxUYWJsZSIsImVuYWJsZUFuYWx5dGljcyIsImVudGl0eVNldCIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiTG9nIiwid2FybmluZyIsImdldE9iamVjdCIsInN1YnN0cmluZyIsImRhdGFGaWVsZEZvcklCTkVuYWJsZWRFeHByZXNzaW9uIiwiYnVpbGRFeHByZXNzaW9uRm9yTXVsdGlWYWx1ZUZpZWxkUmVhZE9ubHkiLCJvciIsInJlYWRPbmx5IiwiYW5kIiwiVUkiLCJJc0luYWN0aXZlIiwiY3JlYXRpb25Nb2RlIiwiZXF1YWwiLCJmaWVsZE1vZGUiLCJzZXRIZWFkZXJMYWJlbFZpc2liaWxpdHkiLCJkYXRhZmllbGQiLCJkYXRhRmllbGRDb2xsZWN0aW9uIiwic29tZSIsIm9EQyIsImdldFRleHRPbkFjdGlvbkZpZWxkIiwib0RhdGFGaWVsZCIsIm9Db250ZXh0Iiwic1BhdGhEYXRhRmllbGRzIiwiYU11bHRpcGxlTGFiZWxzIiwiaSIsInJlZHVjZSIsImEiLCJiIiwiX2dldFJlc3BvbnNpdmVUYWJsZUNvbHVtblNldHRpbmdzIiwib0NvbHVtbiIsInRhYmxlVHlwZSIsInNldHRpbmdzIiwibWljcm9DaGFydFNpemUiLCJzaG93TWljcm9DaGFydExhYmVsIiwiZ2V0RGVsZWdhdGUiLCJpc0FMUCIsImVudGl0eU5hbWUiLCJmaWx0ZXJPbkFjdGl2ZUVudGl0aWVzIiwiZGVsZWdhdGUiLCJjb250cm9sIiwiRXJyb3IiLCJwYXlsb2FkIiwiY29sbGVjdGlvbk5hbWUiLCJoaWVyYXJjaHlRdWFsaWZpZXIiLCJpbml0aWFsRXhwYW5zaW9uTGV2ZWwiLCJhbm5vdGF0aW9uIiwiY3JlYXRlSW5QbGFjZSIsImFuYWx5dGljYWxDb25maWd1cmF0aW9uIiwiYWdncmVnYXRpb25PbkxlYWZMZXZlbCIsImFnZ3JlZ2F0aW9uQ29uZmlndXJhdGlvbiIsImxlYWZMZXZlbCIsInN0cmluZ2lmeSIsImVuYWJsZUZhc3RDcmVhdGlvblJvdyIsIm9GYXN0Q3JlYXRpb25Sb3ciLCJzUGF0aCIsIm9Nb2RlbCIsIm9GaW5hbFVJU3RhdGUiLCJvRmFzdENyZWF0aW9uTGlzdEJpbmRpbmciLCJvRmFzdENyZWF0aW9uQ29udGV4dCIsIkNvbW1vblV0aWxzIiwiZ2V0SXNFZGl0YWJsZSIsImlzRGVsZXRlZCIsImJpbmRMaXN0IiwiJCR1cGRhdGVHcm91cElkIiwiJCRncm91cElkIiwicmVmcmVzaEludGVybmFsIiwiY3JlYXRlIiwic2V0QmluZGluZ0NvbnRleHQiLCJjcmVhdGVkIiwiZSIsInRyYWNlIiwib0Vycm9yIiwiZXJyb3IiLCJpc0FjdGlvblNob3duSW5Db250ZXh0TWVudSIsImFubm90YXRpb25QYXRoIiwiY29udmVydGVkVHlwZXMiLCJhY3Rpb25UYXJnZXQiLCJBY3Rpb25UYXJnZXQiLCJwYXJhbWV0ZXJzIiwiaXNDb2xsZWN0aW9uIiwic291cmNlRW50aXR5VHlwZSIsInZhbHVlT2YiLCJyZXF1aXJlc1NlbGVjdGlvbiIsInJlcXVpcmVzSUNvbnRleHQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRhYmxlSGVscGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29udmVydGVkTWV0YWRhdGEsIEVudGl0eVR5cGUsIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiwgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0RGF0YUZpZWxkLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBY3Rpb24sXG5cdERhdGFGaWVsZEZvckFubm90YXRpb24sXG5cdERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0RGF0YUZpZWxkVHlwZXMsXG5cdEZpZWxkR3JvdXAsXG5cdExpbmVJdGVtLFxuXHRQcmVzZW50YXRpb25WYXJpYW50LFxuXHRQcmVzZW50YXRpb25WYXJpYW50VHlwZSxcblx0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcywgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIFBhdGhJbk1vZGVsRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHtcblx0YW5kLFxuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Y29uc3RhbnQsXG5cdGVxdWFsLFxuXHRmbixcblx0Zm9ybWF0UmVzdWx0LFxuXHRpZkVsc2UsXG5cdG9yLFxuXHRwYXRoSW5Nb2RlbCxcblx0cmVmLFxuXHRyZXNvbHZlQmluZGluZ1N0cmluZ1xufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgVGFibGVDb2x1bW5TZXR0aW5ncyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25BY3Rpb24sIEJhc2VBY3Rpb24sIEN1c3RvbUFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgVGFibGVWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25UYWJsZUNvbHVtbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9Db2x1bW5zXCI7XG5pbXBvcnQgeyBVSSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCBTaXplSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1NpemVIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB7IGlzQW5ub3RhdGlvbk9mVHlwZSwgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBoYXNUZXh0LCBpc0ltYWdlVVJMIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCB7IGdldEVkaXRNb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgVGFibGVGb3JtYXR0ZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvZm9ybWF0dGVycy9UYWJsZUZvcm1hdHRlclwiO1xuaW1wb3J0IEFjdGlvbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9oZWxwZXJzL0FjdGlvbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgVGFibGVCbG9jayBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZS5ibG9ja1wiO1xuaW1wb3J0IFRhYmxlU2l6ZUhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZVNpemVIZWxwZXJcIjtcbmltcG9ydCBGaWVsZEVkaXRNb2RlIGZyb20gXCJzYXAvdWkvbWRjL2VudW1zL0ZpZWxkRWRpdE1vZGVcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBCYXNlQ29udGV4dCwgZGVmYXVsdCBhcyBDb250ZXh0IH0gZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB2NENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ3JlYXRpb25Sb3cgZnJvbSBcInNhcC91aS90YWJsZS9DcmVhdGlvblJvd1wiO1xuaW1wb3J0IHR5cGUgeyBNZXRhTW9kZWxUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3R5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuXG50eXBlIEhpZGRlbiA9IHsgXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCI6IGJvb2xlYW4gfCB7ICRQYXRoPzogc3RyaW5nIH0gfTtcbnR5cGUgQ29sdW1uV2lkdGhUaGlzID0geyBlbmFibGVBdXRvQ29sdW1uV2lkdGg/OiBib29sZWFuOyB3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcj86IGJvb2xlYW47IHRhYmxlVHlwZTogc3RyaW5nIH07XG50eXBlIE1pY3JvQ2hhcnRJbmZvID0geyB0aXRsZTogc3RyaW5nOyBkZXNjcmlwdGlvbjogc3RyaW5nIH07XG4vKipcbiAqIEhlbHBlciBjbGFzcyB1c2VkIGJ5IHRoZSBjb250cm9sIGxpYnJhcnkgZm9yIE9EYXRhLXNwZWNpZmljIGhhbmRsaW5nIChPRGF0YSBWNClcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IFRhYmxlSGVscGVyID0ge1xuXHQvKipcblx0ICogQ2hlY2sgaWYgYSBnaXZlbiBhY3Rpb24gaXMgc3RhdGljLlxuXHQgKiBAcGFyYW0gYWN0aW9uT2JqZWN0IFRoZSBpbnN0YW5jZSBvciB0aGUgcGF0aCBvZiB0aGUgYWN0aW9uXG5cdCAqIEBwYXJhbSBhY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb25cblx0ICogQHJldHVybnMgUmV0dXJucyAndHJ1ZScgaWYgYWN0aW9uIGlzIHN0YXRpYywgZWxzZSAnZmFsc2UnXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfaXNTdGF0aWNBY3Rpb246IGZ1bmN0aW9uIChhY3Rpb25PYmplY3Q6IE1ldGFNb2RlbEFjdGlvbiB8IE1ldGFNb2RlbEFjdGlvbltdIHwgdW5kZWZpbmVkIHwgc3RyaW5nLCBhY3Rpb25OYW1lOiBTdHJpbmcpOiBib29sZWFuIHtcblx0XHRsZXQgYWN0aW9uOiBNZXRhTW9kZWxBY3Rpb24gfCB1bmRlZmluZWQgfCBzdHJpbmc7XG5cdFx0aWYgKGFjdGlvbk9iamVjdCkge1xuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoYWN0aW9uT2JqZWN0KSkge1xuXHRcdFx0XHRjb25zdCBlbnRpdHlUeXBlID0gdGhpcy5fZ2V0QWN0aW9uT3ZlcmxvYWRFbnRpdHlUeXBlKGFjdGlvbk5hbWUudG9TdHJpbmcoKSk7XG5cdFx0XHRcdGlmIChlbnRpdHlUeXBlKSB7XG5cdFx0XHRcdFx0YWN0aW9uID0gYWN0aW9uT2JqZWN0LmZpbmQoZnVuY3Rpb24gKF9hY3Rpb246IE1ldGFNb2RlbEFjdGlvbikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIF9hY3Rpb24uJElzQm91bmQgJiYgX2FjdGlvbi4kUGFyYW1ldGVyWzBdLiRUeXBlID09PSBlbnRpdHlUeXBlO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIGlmIHRoaXMgaXMganVzdCBvbmUgLSBPSyB3ZSB0YWtlIGl0LiBJZiBpdCdzIG1vcmUgaXQncyBhY3R1YWxseSBhIHdyb25nIHVzYWdlIGJ5IHRoZSBhcHBcblx0XHRcdFx0XHQvLyBhcyB3ZSB1c2VkIHRoZSBmaXJzdCBvbmUgYWxsIHRoZSB0aW1lIHdlIGtlZXAgaXQgYXMgaXQgaXNcblx0XHRcdFx0XHRhY3Rpb24gPSBhY3Rpb25PYmplY3RbMF07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFjdGlvbiA9IGFjdGlvbk9iamVjdDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gISFhY3Rpb24gJiYgdHlwZW9mIGFjdGlvbiAhPT0gXCJzdHJpbmdcIiAmJiBhY3Rpb24uJElzQm91bmQgJiYgISFhY3Rpb24uJFBhcmFtZXRlclswXS4kaXNDb2xsZWN0aW9uO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGVudGl0eSB0eXBlIG9mIGFuIGFjdGlvbiBvdmVybG9hZC5cblx0ICogQHBhcmFtIHNBY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb24uXG5cdCAqIEByZXR1cm5zIFRoZSBlbnRpdHkgdHlwZSB1c2VkIGluIHRoZSBhY3Rpb24gb3ZlcmxvYWQuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0QWN0aW9uT3ZlcmxvYWRFbnRpdHlUeXBlOiBmdW5jdGlvbiAoc0FjdGlvbk5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHNBY3Rpb25OYW1lICYmIHNBY3Rpb25OYW1lLmluY2x1ZGVzKFwiKFwiKSkge1xuXHRcdFx0Y29uc3QgYVBhcnRzID0gc0FjdGlvbk5hbWUuc3BsaXQoXCIoXCIpO1xuXHRcdFx0cmV0dXJuIGFQYXJ0c1thUGFydHMubGVuZ3RoIC0gMV0ucmVwbGFjZUFsbChcIilcIiwgXCJcIik7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENoZWNrcyB3aGV0aGVyIHRoZSBhY3Rpb24gaXMgb3ZlcmxvYWRlZCBvbiBhIGRpZmZlcmVudCBlbnRpdHkgdHlwZS5cblx0ICogQHBhcmFtIHNBY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb24uXG5cdCAqIEBwYXJhbSBzQW5ub3RhdGlvblRhcmdldEVudGl0eVR5cGUgVGhlIGVudGl0eSB0eXBlIG9mIHRoZSBhbm5vdGF0aW9uIHRhcmdldC5cblx0ICogQHJldHVybnMgUmV0dXJucyAndHJ1ZScgaWYgdGhlIGFjdGlvbiBpcyBvdmVybG9hZGVkIHdpdGggYSBkaWZmZXJlbnQgZW50aXR5IHR5cGUsIGVsc2UgJ2ZhbHNlJy5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9pc0FjdGlvbk92ZXJsb2FkT25EaWZmZXJlbnRUeXBlOiBmdW5jdGlvbiAoc0FjdGlvbk5hbWU6IHN0cmluZywgc0Fubm90YXRpb25UYXJnZXRFbnRpdHlUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRjb25zdCBzRW50aXR5VHlwZSA9IHRoaXMuX2dldEFjdGlvbk92ZXJsb2FkRW50aXR5VHlwZShzQWN0aW9uTmFtZSk7XG5cdFx0cmV0dXJuICEhc0VudGl0eVR5cGUgJiYgc0Fubm90YXRpb25UYXJnZXRFbnRpdHlUeXBlICE9PSBzRW50aXR5VHlwZTtcblx0fSxcblxuXHRnZXROYXZpZ2F0aW9uQXZhaWxhYmxlTWFwOiBmdW5jdGlvbiAobGluZUl0ZW1Db2xsZWN0aW9uOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzW10gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgb0lCTk5hdmlnYXRpb25BdmFpbGFibGVNYXA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdFx0bGluZUl0ZW1Db2xsZWN0aW9uPy5mb3JFYWNoKChyZWNvcmQpID0+IHtcblx0XHRcdGlmIChcIlNlbWFudGljT2JqZWN0XCIgaW4gcmVjb3JkKSB7XG5cdFx0XHRcdGNvbnN0IHNLZXkgPSBgJHtyZWNvcmQuU2VtYW50aWNPYmplY3R9LSR7cmVjb3JkLkFjdGlvbn1gO1xuXHRcdFx0XHRpZiAocmVjb3JkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gJiYgIXJlY29yZC5JbmxpbmUgJiYgcmVjb3JkLlJlcXVpcmVzQ29udGV4dCkge1xuXHRcdFx0XHRcdGlmIChyZWNvcmQuTmF2aWdhdGlvbkF2YWlsYWJsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRvSUJOTmF2aWdhdGlvbkF2YWlsYWJsZU1hcFtzS2V5XSA9IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHJlY29yZC5OYXZpZ2F0aW9uQXZhaWxhYmxlKVxuXHRcdFx0XHRcdFx0XHQ/IChyZWNvcmQuTmF2aWdhdGlvbkF2YWlsYWJsZSBhcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248Ym9vbGVhbj4pLnBhdGhcblx0XHRcdFx0XHRcdFx0OiByZWNvcmQuTmF2aWdhdGlvbkF2YWlsYWJsZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHJldHVybiBPYmplY3Qua2V5cyhvSUJOTmF2aWdhdGlvbkF2YWlsYWJsZU1hcCkubGVuZ3RoID4gMCA/IG9JQk5OYXZpZ2F0aW9uQXZhaWxhYmxlTWFwIDogdW5kZWZpbmVkO1xuXHR9LFxuXG5cdGdldFVpTGluZUl0ZW1PYmplY3Q6IGZ1bmN0aW9uIChcblx0XHRsaW5lSXRlbU9yUHJlc2VudGF0aW9uQ29udGV4dDogQ29udGV4dCxcblx0XHRjb252ZXJ0ZWRNZXRhRGF0YTogQ29udmVydGVkTWV0YWRhdGFcblx0KTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlc1tdIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBsaW5lSXRlbU9yUHJlc2VudGF0aW9uT2JqZWN0ID0gY29udmVydGVkTWV0YURhdGEucmVzb2x2ZVBhdGgobGluZUl0ZW1PclByZXNlbnRhdGlvbkNvbnRleHQuZ2V0UGF0aCgpKS50YXJnZXQgYXNcblx0XHRcdHwgUHJlc2VudGF0aW9uVmFyaWFudFxuXHRcdFx0fCBMaW5lSXRlbTtcblx0XHRpZiAoIWxpbmVJdGVtT3JQcmVzZW50YXRpb25PYmplY3QpIHJldHVybiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgdmlzdWFsaXphdGlvbnMgPSAoY29udmVydGVkTWV0YURhdGEucmVzb2x2ZVBhdGgobGluZUl0ZW1PclByZXNlbnRhdGlvbkNvbnRleHQuZ2V0UGF0aCgpKS50YXJnZXQgYXMgUHJlc2VudGF0aW9uVmFyaWFudFR5cGUpXG5cdFx0XHQuVmlzdWFsaXphdGlvbnM7XG5cblx0XHRjb25zdCBsaW5lSXRlbU9iamVjdCA9IChcblx0XHRcdHZpc3VhbGl6YXRpb25zXG5cdFx0XHRcdD8gdmlzdWFsaXphdGlvbnM/LmZpbmQoKGl0ZW0pID0+IGl0ZW0udmFsdWUuaW5kZXhPZihcIkBcIiArIFVJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtKSA9PT0gMCk/LiR0YXJnZXRcblx0XHRcdFx0OiBsaW5lSXRlbU9yUHJlc2VudGF0aW9uT2JqZWN0XG5cdFx0KSBhcyBMaW5lSXRlbTtcblx0XHRyZXR1cm4gbGluZUl0ZW1PYmplY3Q/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtID8gbGluZUl0ZW1PYmplY3QgOiB1bmRlZmluZWQ7XG5cdH0sXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuZCByZXR1cm5zIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gbG9hZCBhIGdpdmVuIGxpc3Qgb2YgcHJvcGVydGllcy5cblx0ICogQHBhcmFtIHByb3BlcnRpZXMgTGlzdCBvZiBwcm9wZXJ0aWVzIHVzZWQgb24gYSBjdXN0b20gY29sdW1uXG5cdCAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gbG9hZCB0aGUgZ2l2ZW4gbGlzdCBvZiBwcm9wZXJ0aWVzXG5cdCAqL1xuXHRjcmVhdGVCaW5kaW5nVG9Mb2FkUHJvcGVydGllczogZnVuY3Rpb24gKHByb3BlcnRpZXM/OiBzdHJpbmdbXSk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0XHRpZiAocHJvcGVydGllcyA9PT0gdW5kZWZpbmVkIHx8IHByb3BlcnRpZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRjb25zdCBwcm9wZXJ0eUJpbmRpbmdzID0gcHJvcGVydGllcz8ubWFwKChwcm9wKSA9PiBwYXRoSW5Nb2RlbChwcm9wKSkgPz8gW107XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGZvcm1hdFJlc3VsdChwcm9wZXJ0eUJpbmRpbmdzLCBcIi5fZm9ybWF0dGVycy5TdGFuZGFyZEZvcm1hdHRlciNsb2FkUHJvcGVydGllc1wiKSk7XG5cdH0sXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IGNvbHVtbidzIHdpZHRoIGlmIGRlZmluZWQgZnJvbSBtYW5pZmVzdCBvciBmcm9tIGN1c3RvbWl6YXRpb24gdmlhIGFubm90YXRpb25zLlxuXHQgKiBAcGFyYW0gb1RoaXMgVGhlIGluc3RhbmNlIG9mIHRoZSBpbm5lciBtb2RlbCBvZiB0aGUgVGFibGUgYnVpbGRpbmcgYmxvY2tcblx0ICogQHBhcmFtIG9UaGlzLmVuYWJsZUF1dG9Db2x1bW5XaWR0aCBJbmRpY2F0ZXMgaWYgdGhlIGNvbHVtbiB3aWR0aCBzaG91bGQgYmUgY2FsY3VsYXRlZCBhdXRvbWF0aWNhbGx5XG5cdCAqIEBwYXJhbSBvVGhpcy53aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciBJbmRpY2F0ZXMgaWYgdGhlIGNvbHVtbiB3aWR0aCBzaG91bGQgaW5jbHVkZSB0aGUgaGVhZGVyXG5cdCAqIEBwYXJhbSBjb2x1bW4gRGVmaW5lZCB3aWR0aCBvZiB0aGUgY29sdW1uLCB3aGljaCBpcyB0YWtlbiB3aXRoIHByaW9yaXR5IGlmIG5vdCBudWxsLCB1bmRlZmluZWQgb3IgZW1wdHlcblx0ICogQHBhcmFtIGRhdGFGaWVsZCBEYXRhRmllbGQgZGVmaW5pdGlvbiBvYmplY3Rcblx0ICogQHBhcmFtIGRhdGFGaWVsZEFjdGlvblRleHQgRGF0YUZpZWxkJ3MgdGV4dCBmcm9tIGJ1dHRvblxuXHQgKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgb2JqZWN0IHBhdGggb2YgdGhlIGRhdGEgbW9kZWxcblx0ICogQHBhcmFtIHVzZVJlbVVuaXQgSW5kaWNhdGVzIGlmIHRoZSByZW0gdW5pdCBtdXN0IGJlIGNvbmNhdGVuYXRlZCB3aXRoIHRoZSBjb2x1bW4gd2lkdGggcmVzdWx0XG5cdCAqIEBwYXJhbSBtaWNyb0NoYXJ0VGl0bGUgVGhlIG9iamVjdCBjb250YWluaW5nIHRpdGxlIGFuZCBkZXNjcmlwdGlvbiBvZiB0aGUgTWljcm9DaGFydFxuXHQgKiBAcGFyYW0gbWljcm9DaGFydFRpdGxlLnRpdGxlIFRoZSB0aXRsZSBvZiB0aGUgbWljcm9jaGFydFxuXHQgKiBAcGFyYW0gbWljcm9DaGFydFRpdGxlLmRlc2NyaXB0aW9uIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgbWljcm9jaGFydFxuXHQgKiBAcmV0dXJucyAtIENvbHVtbiB3aWR0aCBpZiBkZWZpbmVkLCBvdGhlcndpc2Ugd2lkdGggaXMgc2V0IHRvIGF1dG9cblx0ICovXG5cdGdldENvbHVtbldpZHRoOiBmdW5jdGlvbiAoXG5cdFx0b1RoaXM6IENvbHVtbldpZHRoVGhpcyxcblx0XHRjb2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0XHRkYXRhRmllbGQ6IE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkIHwgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiB8IERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbj4sXG5cdFx0ZGF0YUZpZWxkQWN0aW9uVGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcz4sXG5cdFx0dXNlUmVtVW5pdDogYm9vbGVhbixcblx0XHRtaWNyb0NoYXJ0VGl0bGU/OiBNaWNyb0NoYXJ0SW5mb1xuXHQpOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKGNvbHVtbi53aWR0aCkge1xuXHRcdFx0cmV0dXJuIGNvbHVtbi53aWR0aDtcblx0XHR9XG5cdFx0aWYgKG9UaGlzLmVuYWJsZUF1dG9Db2x1bW5XaWR0aCA9PT0gdHJ1ZSkge1xuXHRcdFx0bGV0IHdpZHRoO1xuXHRcdFx0d2lkdGggPVxuXHRcdFx0XHR0aGlzLmdldENvbHVtbldpZHRoRm9ySW1hZ2UoZGF0YU1vZGVsT2JqZWN0UGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZFR5cGVzPikgfHxcblx0XHRcdFx0dGhpcy5nZXRDb2x1bW5XaWR0aEZvckRhdGFGaWVsZChvVGhpcywgY29sdW1uLCBkYXRhRmllbGQsIGRhdGFGaWVsZEFjdGlvblRleHQsIGRhdGFNb2RlbE9iamVjdFBhdGgsIG1pY3JvQ2hhcnRUaXRsZSkgfHxcblx0XHRcdFx0dW5kZWZpbmVkO1xuXHRcdFx0aWYgKHdpZHRoKSB7XG5cdFx0XHRcdHJldHVybiB1c2VSZW1Vbml0ID8gYCR7d2lkdGh9cmVtYCA6IHdpZHRoO1xuXHRcdFx0fVxuXHRcdFx0d2lkdGggPSBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0Zm9ybWF0UmVzdWx0KFxuXHRcdFx0XHRcdFtcblx0XHRcdFx0XHRcdHBhdGhJbk1vZGVsKFwiL2VkaXRNb2RlXCIsIFwidWlcIiksXG5cdFx0XHRcdFx0XHRwYXRoSW5Nb2RlbChcInRhYmxlUHJvcGVydGllc0F2YWlsYWJsZVwiLCBcImludGVybmFsXCIpLFxuXHRcdFx0XHRcdFx0Y29sdW1uLm5hbWUsXG5cdFx0XHRcdFx0XHR1c2VSZW1Vbml0LFxuXHRcdFx0XHRcdFx0dGhpcy5fc2hvdWxkSW5jbHVkZUhlYWRlckluQ29sdW1ud2lkaENhbGN1bGF0aW9uKG9UaGlzLCBjb2x1bW4pLFxuXHRcdFx0XHRcdFx0Y29sdW1uLnNvcnRhYmxlID8/IGZhbHNlLFxuXHRcdFx0XHRcdFx0cmVzb2x2ZUJpbmRpbmdTdHJpbmcoY29sdW1uLnJlcXVpcmVkID8/IGZhbHNlLCBcImJvb2xlYW5cIikgYXMgUGF0aEluTW9kZWxFeHByZXNzaW9uPGJvb2xlYW4+XG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRUYWJsZUZvcm1hdHRlci5nZXRDb2x1bW5XaWR0aFxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIHdpZHRoO1xuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IHRoZSB3aWR0aCBvZiB0aGUgY29sdW1uIGNvbnRhaW5pbmcgYW4gaW1hZ2UuXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBkYXRhIG1vZGVsIG9iamVjdCBwYXRoXG5cdCAqIEByZXR1cm5zIC0gQ29sdW1uIHdpZHRoIGlmIGRlZmluZWQsIG90aGVyd2lzZSBudWxsICh0aGUgd2lkdGggaXMgdHJlYXRlZCBhcyBhIHJlbSB2YWx1ZSlcblx0ICovXG5cdGdldENvbHVtbldpZHRoRm9ySW1hZ2U6IGZ1bmN0aW9uIChkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZFR5cGVzPik6IG51bWJlciB8IG51bGwge1xuXHRcdGxldCB3aWR0aDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cdFx0Y29uc3QgYW5ub3RhdGlvbnMgPSBkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdD8uVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zO1xuXHRcdGNvbnN0IGRhdGFUeXBlID0gZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q/LlZhbHVlPy4kdGFyZ2V0Py50eXBlO1xuXHRcdGlmIChcblx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py5WYWx1ZSAmJlxuXHRcdFx0Z2V0RWRpdE1vZGUoXG5cdFx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LlZhbHVlPy4kdGFyZ2V0LFxuXHRcdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0XG5cdFx0XHQpID09PSBGaWVsZEVkaXRNb2RlLkRpc3BsYXkgJiZcblx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LlZhbHVlPy4kdGFyZ2V0XG5cdFx0KSB7XG5cdFx0XHRjb25zdCBoYXNUZXh0QW5ub3RhdGlvbiA9IGhhc1RleHQoZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuVmFsdWUuJHRhcmdldCk7XG5cdFx0XHRpZiAoZGF0YVR5cGUgPT09IFwiRWRtLlN0cmVhbVwiICYmICFoYXNUZXh0QW5ub3RhdGlvbiAmJiBhbm5vdGF0aW9ucz8uQ29yZT8uTWVkaWFUeXBlPy5pbmNsdWRlcz8uKFwiaW1hZ2UvXCIpKSB7XG5cdFx0XHRcdHdpZHRoID0gNi4yO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRhbm5vdGF0aW9ucyAmJlxuXHRcdFx0KGlzSW1hZ2VVUkwoZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q/LlZhbHVlPy4kdGFyZ2V0KSB8fCBhbm5vdGF0aW9ucz8uQ29yZT8uTWVkaWFUeXBlPy5pbmNsdWRlcz8uKFwiaW1hZ2UvXCIpKVxuXHRcdCkge1xuXHRcdFx0d2lkdGggPSA2LjI7XG5cdFx0fVxuXHRcdHJldHVybiB3aWR0aDtcblx0fSxcblxuXHQvKipcblx0ICogQ2hlY2sgaWYgdGhlIGNvbHVtbiBoZWFkZXIgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBjb2x1bW4gd2lkdGguXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgdGFibGUgY29uZmlndXJhdGlvbiBvYmplY3Rcblx0ICogQHBhcmFtIHRhYmxlLndpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyIEluZGljYXRlcyBpZiB0aGUgY29sdW1uIHdpZHRoIHNob3VsZCBpbmNsdWRlIHRoZSBoZWFkZXJcblx0ICogQHBhcmFtIGNvbHVtbiBUaGUgY29sdW1uIGNvbmZpZ3VyYXRpb25cblx0ICogQHJldHVybnMgUmV0dXJucyB0cnVlIGlmIHRoZSBjb2x1bW4gd2lkdGggc2hvdWxkIGluY2x1ZGUgdGhlIGhlYWRlclxuXHQgKi9cblx0X3Nob3VsZEluY2x1ZGVIZWFkZXJJbkNvbHVtbndpZGhDYWxjdWxhdGlvbih0YWJsZTogQ29sdW1uV2lkdGhUaGlzLCBjb2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbik6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBjb2x1bW4ud2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIgIT09IHVuZGVmaW5lZCA/IGNvbHVtbi53aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciA6IHRhYmxlLndpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IHRoZSB3aWR0aCBvZiB0aGUgY29sdW1uIGNvbnRhaW5pbmcgdGhlIERhdGFGaWVsZC5cblx0ICogQHBhcmFtIG9UaGlzIFRoZSBpbnN0YW5jZSBvZiB0aGUgaW5uZXIgbW9kZWwgb2YgdGhlIFRhYmxlIGJ1aWxkaW5nIGJsb2NrXG5cdCAqIEBwYXJhbSBvVGhpcy53aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciBJbmRpY2F0ZXMgaWYgdGhlIGNvbHVtbiB3aWR0aCBzaG91bGQgaW5jbHVkZSB0aGUgaGVhZGVyXG5cdCAqIEBwYXJhbSBjb2x1bW4gRGVmaW5lZCB3aWR0aCBvZiB0aGUgY29sdW1uLCB3aGljaCBpcyB0YWtlbiB3aXRoIHByaW9yaXR5IGlmIG5vdCBudWxsLCB1bmRlZmluZWQgb3IgZW1wdHlcblx0ICogQHBhcmFtIGRhdGFGaWVsZCBEYXRhIEZpZWxkXG5cdCAqIEBwYXJhbSBkYXRhRmllbGRBY3Rpb25UZXh0IERhdGFGaWVsZCdzIHRleHQgZnJvbSBidXR0b25cblx0ICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGggVGhlIGRhdGEgbW9kZWwgb2JqZWN0IHBhdGhcblx0ICogQHBhcmFtIG1pY3JvQ2hhcnRUaXRsZSBUaGUgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHRpdGxlIGFuZCBkZXNjcmlwdGlvbiBvZiB0aGUgTWljcm9DaGFydFxuXHQgKiBAcmV0dXJucyAtIENvbHVtbiB3aWR0aCBpZiBkZWZpbmVkLCBvdGhlcndpc2UgbnVsbCAoIHRoZSB3aWR0aCBpcyB0cmVhdGVkIGFzIGEgcmVtIHZhbHVlKVxuXHQgKi9cblx0Z2V0Q29sdW1uV2lkdGhGb3JEYXRhRmllbGQ6IGZ1bmN0aW9uIChcblx0XHRvVGhpczogQ29sdW1uV2lkdGhUaGlzLFxuXHRcdGNvbHVtbjogQW5ub3RhdGlvblRhYmxlQ29sdW1uLFxuXHRcdGRhdGFGaWVsZDogTWV0YU1vZGVsVHlwZTxEYXRhRmllbGQgfCBEYXRhRmllbGRGb3JBbm5vdGF0aW9uIHwgRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uPixcblx0XHRkYXRhRmllbGRBY3Rpb25UZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPixcblx0XHRtaWNyb0NoYXJ0VGl0bGU/OiBNaWNyb0NoYXJ0SW5mb1xuXHQpOiBudW1iZXIgfCBudWxsIHtcblx0XHRjb25zdCBhbm5vdGF0aW9ucyA9IGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucztcblx0XHRjb25zdCBkYXRhVHlwZSA9IGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py4kVHlwZTtcblx0XHRsZXQgd2lkdGg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXHRcdGlmIChcblx0XHRcdGRhdGFUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24gfHxcblx0XHRcdGRhdGFUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gfHxcblx0XHRcdChkYXRhVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiAmJlxuXHRcdFx0XHQhKGRhdGFGaWVsZCBhcyBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZEZvckFubm90YXRpb24+KS5UYXJnZXQ/LiRBbm5vdGF0aW9uUGF0aC5pbmNsdWRlcyhgQCR7VUlBbm5vdGF0aW9uVGVybXMuRmllbGRHcm91cH1gKSlcblx0XHQpIHtcblx0XHRcdGxldCBuVG1wVGV4dFdpZHRoO1xuXHRcdFx0blRtcFRleHRXaWR0aCA9XG5cdFx0XHRcdFNpemVIZWxwZXIuZ2V0QnV0dG9uV2lkdGgoZGF0YUZpZWxkQWN0aW9uVGV4dCkgfHxcblx0XHRcdFx0U2l6ZUhlbHBlci5nZXRCdXR0b25XaWR0aChkYXRhRmllbGQ/LkxhYmVsPy50b1N0cmluZygpKSB8fFxuXHRcdFx0XHRTaXplSGVscGVyLmdldEJ1dHRvbldpZHRoKChhbm5vdGF0aW9ucyBhcyB7IExhYmVsPzogc3RyaW5nIH0pPy5MYWJlbCk7IC8vIFJFVklFVyA6IFRoaXMgbWFrZXMgbm8gc2Vuc2UgOilcblxuXHRcdFx0Ly8gZ2V0IHdpZHRoIGZvciByYXRpbmcgb3IgcHJvZ3Jlc3MgYmFyIGRhdGFmaWVsZFxuXHRcdFx0Y29uc3QgblRtcFZpc3VhbGl6YXRpb25XaWR0aCA9IFRhYmxlU2l6ZUhlbHBlci5nZXRXaWR0aEZvckRhdGFGaWVsZEZvckFubm90YXRpb24oXG5cdFx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LFxuXHRcdFx0XHR0aGlzLl9zaG91bGRJbmNsdWRlSGVhZGVySW5Db2x1bW53aWRoQ2FsY3VsYXRpb24ob1RoaXMsIGNvbHVtbilcblx0XHRcdCkucHJvcGVydHlXaWR0aDtcblxuXHRcdFx0aWYgKG5UbXBWaXN1YWxpemF0aW9uV2lkdGggPiBuVG1wVGV4dFdpZHRoKSB7XG5cdFx0XHRcdHdpZHRoID0gblRtcFZpc3VhbGl6YXRpb25XaWR0aDtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdGRhdGFGaWVsZEFjdGlvblRleHQgfHxcblx0XHRcdFx0KGFubm90YXRpb25zICYmXG5cdFx0XHRcdFx0KGlzQW5ub3RhdGlvbk9mVHlwZShhbm5vdGF0aW9ucywgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKSB8fFxuXHRcdFx0XHRcdFx0aXNBbm5vdGF0aW9uT2ZUeXBlKGFubm90YXRpb25zLCBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24pKSlcblx0XHRcdCkge1xuXHRcdFx0XHQvLyBBZGQgYWRkaXRpb25hbCAxLjggcmVtIHRvIGF2b2lkIHNob3dpbmcgZWxsaXBzaXMgaW4gc29tZSBjYXNlcy5cblx0XHRcdFx0blRtcFRleHRXaWR0aCArPSAxLjg7XG5cdFx0XHRcdHdpZHRoID0gblRtcFRleHRXaWR0aDtcblx0XHRcdH1cblx0XHRcdHdpZHRoID0gd2lkdGggPz8gdGhpcy5nZXRDb2x1bW5XaWR0aEZvckNoYXJ0KG9UaGlzLCBjb2x1bW4sIGRhdGFGaWVsZCwgblRtcFRleHRXaWR0aCwgbWljcm9DaGFydFRpdGxlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHdpZHRoO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IHRoZSB3aWR0aCBvZiB0aGUgY29sdW1uIGNvbnRhaW5pbmcgdGhlIENoYXJ0LlxuXHQgKiBAcGFyYW0gb1RoaXMgVGhlIGluc3RhbmNlIG9mIHRoZSBpbm5lciBtb2RlbCBvZiB0aGUgVGFibGUgYnVpbGRpbmcgYmxvY2tcblx0ICogQHBhcmFtIGNvbHVtbiBEZWZpbmVkIHdpZHRoIG9mIHRoZSBjb2x1bW4sIHdoaWNoIGlzIHRha2VuIHdpdGggcHJpb3JpdHkgaWYgbm90IG51bGwsIHVuZGVmaW5lZCBvciBlbXB0eVxuXHQgKiBAcGFyYW0gZGF0YUZpZWxkIERhdGEgRmllbGRcblx0ICogQHBhcmFtIGNvbHVtbkxhYmVsV2lkdGggVGhlIHdpZHRoIG9mIHRoZSBjb2x1bW4gbGFiZWwgb3IgYnV0dG9uIGxhYmVsXG5cdCAqIEBwYXJhbSBtaWNyb0NoYXJ0VGl0bGUgVGhlIG9iamVjdCBjb250YWluaW5nIHRoZSB0aXRsZSBhbmQgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBNaWNyb0NoYXJ0XG5cdCAqIEByZXR1cm5zIC0gQ29sdW1uIHdpZHRoIGlmIGRlZmluZWQsIG90aGVyd2lzZSBudWxsICh0aGUgd2lkdGggaXMgdHJlYXRlZCBhcyBhIHJlbSB2YWx1ZSlcblx0ICovXG5cdGdldENvbHVtbldpZHRoRm9yQ2hhcnQoXG5cdFx0b1RoaXM6IENvbHVtbldpZHRoVGhpcyxcblx0XHRjb2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0XHRkYXRhRmllbGQ6IE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkIHwgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiB8IERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbj4sXG5cdFx0Y29sdW1uTGFiZWxXaWR0aDogbnVtYmVyLFxuXHRcdG1pY3JvQ2hhcnRUaXRsZT86IE1pY3JvQ2hhcnRJbmZvXG5cdCk6IG51bWJlciB8IG51bGwge1xuXHRcdGxldCBjaGFydFNpemUsXG5cdFx0XHR3aWR0aDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cdFx0aWYgKChkYXRhRmllbGQgYXMgTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRGb3JBbm5vdGF0aW9uPikuVGFyZ2V0Py4kQW5ub3RhdGlvblBhdGg/LmluY2x1ZGVzKGBAJHtVSUFubm90YXRpb25UZXJtcy5DaGFydH1gKSkge1xuXHRcdFx0c3dpdGNoICh0aGlzLmdldENoYXJ0U2l6ZShvVGhpcywgY29sdW1uKSkge1xuXHRcdFx0XHRjYXNlIFwiWFNcIjpcblx0XHRcdFx0XHRjaGFydFNpemUgPSA0LjQ7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJTXCI6XG5cdFx0XHRcdFx0Y2hhcnRTaXplID0gNC42O1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiTVwiOlxuXHRcdFx0XHRcdGNoYXJ0U2l6ZSA9IDUuNTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIkxcIjpcblx0XHRcdFx0XHRjaGFydFNpemUgPSA2Ljk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0Y2hhcnRTaXplID0gNS4zO1xuXHRcdFx0fVxuXHRcdFx0Y29sdW1uTGFiZWxXaWR0aCArPSAxLjg7XG5cdFx0XHRpZiAoIXRoaXMuZ2V0U2hvd09ubHlDaGFydChvVGhpcywgY29sdW1uKSAmJiAobWljcm9DaGFydFRpdGxlPy50aXRsZS5sZW5ndGggfHwgbWljcm9DaGFydFRpdGxlPy5kZXNjcmlwdGlvbi5sZW5ndGgpKSB7XG5cdFx0XHRcdGNvbnN0IHRtcFRleHQgPVxuXHRcdFx0XHRcdG1pY3JvQ2hhcnRUaXRsZS50aXRsZS5sZW5ndGggPiBtaWNyb0NoYXJ0VGl0bGUuZGVzY3JpcHRpb24ubGVuZ3RoID8gbWljcm9DaGFydFRpdGxlLnRpdGxlIDogbWljcm9DaGFydFRpdGxlLmRlc2NyaXB0aW9uO1xuXHRcdFx0XHRjb25zdCB0aXRsZVNpemUgPSBTaXplSGVscGVyLmdldEJ1dHRvbldpZHRoKHRtcFRleHQpICsgNztcblx0XHRcdFx0Y29uc3QgdG1wV2lkdGggPSB0aXRsZVNpemUgPiBjb2x1bW5MYWJlbFdpZHRoID8gdGl0bGVTaXplIDogY29sdW1uTGFiZWxXaWR0aDtcblx0XHRcdFx0d2lkdGggPSB0bXBXaWR0aDtcblx0XHRcdH0gZWxzZSBpZiAoY29sdW1uTGFiZWxXaWR0aCA+IGNoYXJ0U2l6ZSkge1xuXHRcdFx0XHR3aWR0aCA9IGNvbHVtbkxhYmVsV2lkdGg7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR3aWR0aCA9IGNoYXJ0U2l6ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHdpZHRoO1xuXHR9LFxuXHQvKipcblx0ICogTWV0aG9kIHRvIGFkZCBhIG1hcmdpbiBjbGFzcyBhdCB0aGUgY29udHJvbC5cblx0ICogQHBhcmFtIHNWaXN1YWxpemF0aW9uXG5cdCAqIEBwYXJhbSBpc0xhc3RGaWVsZCBJbmRpY2F0ZXMgaWYgdGhlIGZpZWxkIGlzIHRoZSBsYXN0IGZpZWxkIGluIHRoZSBmaWVsZCBncm91cFxuXHQgKiBAcmV0dXJucyBBZGp1c3RpbmcgdGhlIG1hcmdpblxuXHQgKi9cblx0Z2V0TWFyZ2luQ2xhc3M6IGZ1bmN0aW9uIChzVmlzdWFsaXphdGlvbjogc3RyaW5nLCBpc0xhc3RGaWVsZDogYm9vbGVhbik6IHN0cmluZyB7XG5cdFx0bGV0IHNDbGFzcyA9IFwiXCI7XG5cdFx0aWYgKGlzTGFzdEZpZWxkKSB7XG5cdFx0XHQvL0lmIHJhdGluZyBpbmRpY2F0b3IgaXMgbGFzdCBlbGVtZW50IGluIGZpZWxkZ3JvdXAsIHRoZW4gdGhlIDAuNXJlbSBtYXJnaW4gYWRkZWQgYnkgc2FwTVJJIGNsYXNzIG9mIGludGVyYWN0aXZlIHJhdGluZyBpbmRpY2F0b3Igb24gdG9wIGFuZCBib3R0b20gbXVzdCBiZSBudWxsaWZpZWQuXG5cdFx0XHRpZiAoc1Zpc3VhbGl6YXRpb24gPT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5WaXN1YWxpemF0aW9uVHlwZS9SYXRpbmdcIikge1xuXHRcdFx0XHRzQ2xhc3MgPSBcInNhcFVpTm9NYXJnaW5Cb3R0b20gc2FwVWlOb01hcmdpblRvcFwiO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoc1Zpc3VhbGl6YXRpb24gPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVmlzdWFsaXphdGlvblR5cGUvUmF0aW5nXCIpIHtcblx0XHRcdC8vSWYgcmF0aW5nIGluZGljYXRvciBpcyBOT1QgdGhlIGxhc3QgZWxlbWVudCBpbiBmaWVsZGdyb3VwLCB0aGVuIHRvIG1haW50YWluIHRoZSAwLjVyZW0gc3BhY2luZyBiZXR3ZWVuIGNvZ2V0TWFyZ2luQ2xhc3NudHJvbHMgKGFzIHBlciBVWCBzcGVjKSxcblx0XHRcdC8vb25seSB0aGUgdG9wIG1hcmdpbiBhZGRlZCBieSBzYXBNUkkgY2xhc3Mgb2YgaW50ZXJhY3RpdmUgcmF0aW5nIGluZGljYXRvciBtdXN0IGJlIG51bGxpZmllZC5cblxuXHRcdFx0c0NsYXNzID0gXCJzYXBVaU5vTWFyZ2luVG9wXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNDbGFzcyA9IFwic2FwVWlUaW55TWFyZ2luQm90dG9tXCI7XG5cdFx0fVxuXHRcdHJldHVybiBzQ2xhc3M7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBnZXQgVkJveCB2aXNpYmlsaXR5LlxuXHQgKiBAcGFyYW0gY29sbGVjdGlvbiBDb2xsZWN0aW9uIG9mIGRhdGEgZmllbGRzIGluIFZCb3hcblx0ICogQHBhcmFtIGZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyBIaWRkZW4gZXhwcmVzc2lvbiBjb250YWluZWQgaW4gRmllbGRHcm91cFxuXHQgKiBAcGFyYW0gZmllbGRHcm91cCBEYXRhIGZpZWxkIGNvbnRhaW5pbmcgdGhlIFZCb3hcblx0ICogQHJldHVybnMgVmlzaWJpbGl0eSBleHByZXNzaW9uXG5cdCAqL1xuXHRnZXRWQm94VmlzaWJpbGl0eTogZnVuY3Rpb24gKFxuXHRcdGNvbGxlY3Rpb246IEFycmF5PERhdGFGaWVsZEZvckFubm90YXRpb24gJiBIaWRkZW4+LFxuXHRcdGZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9uczogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sXG5cdFx0ZmllbGRHcm91cDogRmllbGRHcm91cCAmIEhpZGRlblxuXHQpOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdFx0bGV0IGFsbFN0YXRpYyA9IHRydWU7XG5cdFx0Y29uc3QgaGlkZGVuUGF0aHMgPSBbXTtcblxuXHRcdGlmIChmaWVsZEdyb3VwW2BAJHtVSUFubm90YXRpb25UZXJtcy5IaWRkZW59YF0pIHtcblx0XHRcdHJldHVybiBmaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnM7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBkYXRhRmllbGQgb2YgY29sbGVjdGlvbikge1xuXHRcdFx0Y29uc3QgaGlkZGVuQW5ub3RhdGlvblZhbHVlID0gZGF0YUZpZWxkW2BAJHtVSUFubm90YXRpb25UZXJtcy5IaWRkZW59YF07XG5cdFx0XHRpZiAoaGlkZGVuQW5ub3RhdGlvblZhbHVlID09PSB1bmRlZmluZWQgfHwgaGlkZGVuQW5ub3RhdGlvblZhbHVlID09PSBmYWxzZSkge1xuXHRcdFx0XHRoaWRkZW5QYXRocy5wdXNoKGZhbHNlKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAoaGlkZGVuQW5ub3RhdGlvblZhbHVlID09PSB0cnVlKSB7XG5cdFx0XHRcdGhpZGRlblBhdGhzLnB1c2godHJ1ZSk7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGhpZGRlbkFubm90YXRpb25WYWx1ZS4kUGF0aCkge1xuXHRcdFx0XHRoaWRkZW5QYXRocy5wdXNoKHBhdGhJbk1vZGVsKGhpZGRlbkFubm90YXRpb25WYWx1ZS4kUGF0aCkpO1xuXHRcdFx0XHRhbGxTdGF0aWMgPSBmYWxzZTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAodHlwZW9mIGhpZGRlbkFubm90YXRpb25WYWx1ZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHQvLyBEeW5hbWljIGV4cHJlc3Npb24gZm91bmQgaW4gYSBmaWVsZFxuXHRcdFx0XHRyZXR1cm4gZmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IGhhc0FueVBhdGhFeHByZXNzaW9ucyA9IGNvbnN0YW50KGhpZGRlblBhdGhzLmxlbmd0aCA+IDAgJiYgYWxsU3RhdGljICE9PSB0cnVlKTtcblx0XHRjb25zdCBoYXNBbGxIaWRkZW5TdGF0aWNFeHByZXNzaW9ucyA9IGNvbnN0YW50KGhpZGRlblBhdGhzLmxlbmd0aCA+IDAgJiYgIWhpZGRlblBhdGhzLmluY2x1ZGVzKGZhbHNlKSAmJiBhbGxTdGF0aWMpO1xuXG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRoYXNBbnlQYXRoRXhwcmVzc2lvbnMsXG5cdFx0XHRcdGZvcm1hdFJlc3VsdChoaWRkZW5QYXRocywgVGFibGVGb3JtYXR0ZXIuZ2V0VkJveFZpc2liaWxpdHkpLFxuXHRcdFx0XHRpZkVsc2UoaGFzQWxsSGlkZGVuU3RhdGljRXhwcmVzc2lvbnMsIGNvbnN0YW50KGZhbHNlKSwgY29uc3RhbnQodHJ1ZSkpXG5cdFx0XHQpXG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB0aGUgc3RhYmxlIElEIG9mIGEgdGFibGUgZWxlbWVudCAoY29sdW1uIG9yIEZpZWxkR3JvdXAgbGFiZWwpLlxuXHQgKiBAcGFyYW0gdGFibGVJZCBDdXJyZW50IG9iamVjdCBJRFxuXHQgKiBAcGFyYW0gZWxlbWVudElkIEVsZW1lbnQgSWQgb3Igc3VmZml4XG5cdCAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIERhdGFNb2RlbE9iamVjdFBhdGggb2YgdGhlIGRhdGFGaWVsZFxuXHQgKiBAcmV0dXJucyBUaGUgc3RhYmxlIElEIGZvciBhIGdpdmVuIGNvbHVtblxuXHQgKi9cblx0Z2V0RWxlbWVudFN0YWJsZUlkOiBmdW5jdGlvbiAoXG5cdFx0dGFibGVJZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdGVsZW1lbnRJZDogc3RyaW5nLFxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcz5cblx0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIXRhYmxlSWQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGNvbnN0IGRhdGFGaWVsZCA9IGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0O1xuXHRcdGxldCBkYXRhRmllbGRQYXJ0OiBzdHJpbmcgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzO1xuXHRcdHN3aXRjaCAoZGF0YUZpZWxkPy4kVHlwZSkge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uOlxuXHRcdFx0XHRkYXRhRmllbGRQYXJ0ID0gZGF0YUZpZWxkLlRhcmdldC52YWx1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsOlxuXHRcdFx0XHRkYXRhRmllbGRQYXJ0ID0gZGF0YUZpZWxkO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGRhdGFGaWVsZFBhcnQgPSAoZGF0YUZpZWxkIGFzIERhdGFGaWVsZCkuVmFsdWU/LnBhdGggPz8gXCJcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdHJldHVybiBnZW5lcmF0ZShbdGFibGVJZCwgZWxlbWVudElkLCBkYXRhRmllbGRQYXJ0XSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBnZXQgdGhlIHN0YWJsZSBJRCBvZiB0aGUgY29sdW1uLlxuXHQgKiBAcGFyYW0gaWQgQ3VycmVudCBvYmplY3QgSURcblx0ICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGggRGF0YU1vZGVsT2JqZWN0UGF0aCBvZiB0aGUgZGF0YUZpZWxkXG5cdCAqIEByZXR1cm5zIFRoZSBzdGFibGUgSUQgZm9yIGEgZ2l2ZW4gY29sdW1uXG5cdCAqL1xuXHRnZXRDb2x1bW5TdGFibGVJZDogZnVuY3Rpb24gKGlkOiBzdHJpbmcsIGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcz4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBUYWJsZUhlbHBlci5nZXRFbGVtZW50U3RhYmxlSWQoaWQsIFwiQ1wiLCBkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0fSxcblxuXHRnZXRGaWVsZEdyb3VwTGFiZWxTdGFibGVJZDogZnVuY3Rpb24gKFxuXHRcdGlkOiBzdHJpbmcsXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPlxuXHQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBUYWJsZUhlbHBlci5nZXRFbGVtZW50U3RhYmxlSWQoaWQsIFwiRkdMYWJlbFwiLCBkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB0aGUgZXhwcmVzc2lvbiBmb3IgdGhlICdwcmVzcycgZXZlbnQgZm9yIHRoZSBEYXRhRmllbGRGb3JBY3Rpb25CdXR0b24uXG5cdCAqIEBwYXJhbSB0YWJsZVByb3BlcnRpZXMgVGhlIHByb3BlcnRpZXMgb2YgdGhlIHRhYmxlIGNvbnRyb2xcblx0ICogQHBhcmFtIHRhYmxlUHJvcGVydGllcy5jb250ZXh0T2JqZWN0UGF0aCBUaGUgZGF0YW1vZGVsIG9iamVjdCBwYXRoIGZvciB0aGUgdGFibGVcblx0ICogQHBhcmFtIHRhYmxlUHJvcGVydGllcy5jb250ZW50SWQgVGhlIGlkIG9mIHRoZSBNREMgdGFibGUgY29udHJvbFxuXHQgKiBAcGFyYW0gZGF0YUZpZWxkIFZhbHVlIG9mIHRoZSBEYXRhUG9pbnRcblx0ICogQHBhcmFtIGVudGl0eVNldE5hbWUgTmFtZSBvZiB0aGUgRW50aXR5U2V0XG5cdCAqIEBwYXJhbSBvcGVyYXRpb25BdmFpbGFibGVNYXAgT3BlcmF0aW9uQXZhaWxhYmxlTWFwIGFzIHN0cmluZ2lmaWVkIEpTT04gb2JqZWN0XG5cdCAqIEBwYXJhbSBhY3Rpb25PYmplY3Rcblx0ICogQHBhcmFtIGlzTmF2aWdhYmxlIEFjdGlvbiBlaXRoZXIgdHJpZ2dlcnMgbmF2aWdhdGlvbiBvciBub3Rcblx0ICogQHBhcmFtIGVuYWJsZUF1dG9TY3JvbGwgQWN0aW9uIGVpdGhlciB0cmlnZ2VycyBzY3JvbGxpbmcgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgaXRlbXMgaW4gdGhlIHJlbGF0ZWQgdGFibGUgb3Igbm90XG5cdCAqIEBwYXJhbSBkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24gRnVuY3Rpb24gbmFtZSB0byBwcmVmaWxsIGRpYWxvZyBwYXJhbWV0ZXJzXG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcblx0ICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvblxuXHQgKi9cblx0cHJlc3NFdmVudERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvbjogZnVuY3Rpb24gKFxuXHRcdHRhYmxlUHJvcGVydGllczoge1xuXHRcdFx0Y29udGV4dE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8TGluZUl0ZW0gfCBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IHwgUHJlc2VudGF0aW9uVmFyaWFudD47XG5cdFx0XHRjb250ZW50SWQ6IHN0cmluZztcblx0XHR9LFxuXHRcdGRhdGFGaWVsZDogRGF0YUZpZWxkRm9yQWN0aW9uIHwgdW5kZWZpbmVkLFxuXHRcdGVudGl0eVNldE5hbWU6IHN0cmluZyxcblx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IHN0cmluZyxcblx0XHRhY3Rpb25PYmplY3Q/OiBNZXRhTW9kZWxBY3Rpb24gfCBNZXRhTW9kZWxBY3Rpb25bXSB8IHN0cmluZyxcblx0XHRpc05hdmlnYWJsZSA9IGZhbHNlLFxuXHRcdGVuYWJsZUF1dG9TY3JvbGw/OiBib29sZWFuLFxuXHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbj86IHN0cmluZyxcblx0XHRmb3JDb250ZXh0TWVudT86IGJvb2xlYW5cblx0KTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRcdGlmICghZGF0YUZpZWxkKSByZXR1cm4gdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHNBY3Rpb25OYW1lID0gZGF0YUZpZWxkLkFjdGlvbixcblx0XHRcdHRhcmdldEVudGl0eVR5cGVOYW1lID0gdGFibGVQcm9wZXJ0aWVzLmNvbnRleHRPYmplY3RQYXRoLnRhcmdldEVudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lLFxuXHRcdFx0c3RhdGljQWN0aW9uID1cblx0XHRcdFx0dHlwZW9mIGFjdGlvbk9iamVjdCAhPT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQodGhpcy5faXNTdGF0aWNBY3Rpb24oYWN0aW9uT2JqZWN0LCBzQWN0aW9uTmFtZSkgfHxcblx0XHRcdFx0XHR0aGlzLl9pc0FjdGlvbk92ZXJsb2FkT25EaWZmZXJlbnRUeXBlKHNBY3Rpb25OYW1lLnRvU3RyaW5nKCksIHRhcmdldEVudGl0eVR5cGVOYW1lKSksXG5cdFx0XHRhcHBsaWNhYmxlUHJvcGVydHkgPSAhZm9yQ29udGV4dE1lbnUgPyBcImFBcHBsaWNhYmxlXCIgOiBcImFBcHBsaWNhYmxlRm9yQ29udGV4dE1lbnVcIixcblx0XHRcdG5vdEFwcGxpY2FibGVQcm9wZXJ0eSA9ICFmb3JDb250ZXh0TWVudSA/IFwiYU5vdEFwcGxpY2FibGVcIiA6IFwiYU5vdEFwcGxpY2FibGVGb3JDb250ZXh0TWVudVwiLFxuXHRcdFx0Y29udGV4dE1lbnVQYXRoID0gIWZvckNvbnRleHRNZW51ID8gXCJcIiA6IFwiY29udGV4dG1lbnUvXCIsXG5cdFx0XHRjb250ZXh0ID0gcGF0aEluTW9kZWwoYCR7Y29udGV4dE1lbnVQYXRofXNlbGVjdGVkQ29udGV4dHNgLCBcImludGVybmFsXCIpLFxuXHRcdFx0cGFyYW1zID0ge1xuXHRcdFx0XHRjb250ZXh0czogIXN0YXRpY0FjdGlvbiA/IGNvbnRleHQgOiBudWxsLFxuXHRcdFx0XHRiU3RhdGljQWN0aW9uOiBzdGF0aWNBY3Rpb24gPyBzdGF0aWNBY3Rpb24gOiB1bmRlZmluZWQsXG5cdFx0XHRcdGVudGl0eVNldE5hbWU6IGVudGl0eVNldE5hbWUsXG5cdFx0XHRcdGFwcGxpY2FibGVDb250ZXh0czogIXN0YXRpY0FjdGlvblxuXHRcdFx0XHRcdD8gcGF0aEluTW9kZWwoYGR5bmFtaWNBY3Rpb25zLyR7ZGF0YUZpZWxkLkFjdGlvbn0vJHthcHBsaWNhYmxlUHJvcGVydHl9L2AsIFwiaW50ZXJuYWxcIilcblx0XHRcdFx0XHQ6IG51bGwsXG5cdFx0XHRcdG5vdEFwcGxpY2FibGVDb250ZXh0czogIXN0YXRpY0FjdGlvblxuXHRcdFx0XHRcdD8gcGF0aEluTW9kZWwoYGR5bmFtaWNBY3Rpb25zLyR7ZGF0YUZpZWxkLkFjdGlvbn0vJHtub3RBcHBsaWNhYmxlUHJvcGVydHl9L2AsIFwiaW50ZXJuYWxcIilcblx0XHRcdFx0XHQ6IG51bGwsXG5cdFx0XHRcdGlzTmF2aWdhYmxlOiBpc05hdmlnYWJsZSxcblx0XHRcdFx0ZW5hYmxlQXV0b1Njcm9sbDogZW5hYmxlQXV0b1Njcm9sbCxcblx0XHRcdFx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uOiBkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24sXG5cdFx0XHRcdGludm9jYXRpb25Hcm91cGluZzogZGF0YUZpZWxkPy5JbnZvY2F0aW9uR3JvdXBpbmcgPT09IFwiVUkuT3BlcmF0aW9uR3JvdXBpbmdUeXBlL0NoYW5nZVNldFwiID8gXCJDaGFuZ2VTZXRcIiA6IFwiSXNvbGF0ZWRcIixcblx0XHRcdFx0Y29udHJvbElkOiB0YWJsZVByb3BlcnRpZXMuY29udGVudElkLFxuXHRcdFx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IG9wZXJhdGlvbkF2YWlsYWJsZU1hcCxcblx0XHRcdFx0bGFiZWw6IGRhdGFGaWVsZC5MYWJlbFxuXHRcdFx0fTtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZm4oXCJBUEkub25BY3Rpb25QcmVzc1wiLCBbcmVmKFwiJGV2ZW50XCIpLCByZWYoXCIkY29udHJvbGxlclwiKSwgZGF0YUZpZWxkLkFjdGlvbiwgcGFyYW1zXSkpO1xuXHRcdC8vcmV0dXJuIEFjdGlvbkhlbHBlci5nZXRQcmVzc0V2ZW50RGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uKHRhYmxlLmlkISwgZGF0YUZpZWxkLCBwYXJhbXMsIG9wZXJhdGlvbkF2YWlsYWJsZU1hcCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBkZXRlcm1pbmUgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIERhdGFGaWVsZEZvckFjdGlvbiBhY3Rpb25zLlxuXHQgKiBAcGFyYW0gdGFibGVEZWZpbml0aW9uIFRoZSB0YWJsZSBkZWZpbml0aW9uIGZyb20gdGhlIHRhYmxlIGNvbnZlcnRlclxuXHQgKiBAcGFyYW0gYWN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uXG5cdCAqIEBwYXJhbSBpc0JvdW5kIElzQm91bmQgZm9yIEFjdGlvblxuXHQgKiBAcGFyYW0gYWN0aW9uT2JqZWN0XG5cdCAqIEBwYXJhbSBlbmFibGVPblNlbGVjdCBEZWZpbmUgdGhlIGVuYWJsaW5nIG9mIHRoZSBhY3Rpb24gKHNpbmdsZSBvciBtdWx0aXNlbGVjdClcblx0ICogQHBhcmFtIGFubm90YXRpb25UYXJnZXRFbnRpdHlUeXBlIFRoZSBlbnRpdHkgdHlwZSBvZiB0aGUgYW5ub3RhdGlvbiB0YXJnZXRcblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuXHQgKiBAcGFyYW0gaXNDb3B5XG5cdCAqIEByZXR1cm5zIEEgYmluZGluZyBleHByZXNzaW9uIHRvIGRlZmluZSB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSBhY3Rpb25cblx0ICovXG5cdGlzRGF0YUZpZWxkRm9yQWN0aW9uRW5hYmxlZDogZnVuY3Rpb24gKFxuXHRcdHRhYmxlRGVmaW5pdGlvbjogVGFibGVWaXN1YWxpemF0aW9uLFxuXHRcdGFjdGlvbk5hbWU6IHN0cmluZyB8IFN0cmluZyxcblx0XHRpc0JvdW5kOiBib29sZWFuLFxuXHRcdGFjdGlvbk9iamVjdD86IE1ldGFNb2RlbEFjdGlvbiB8IE1ldGFNb2RlbEFjdGlvbltdIHwgc3RyaW5nLFxuXHRcdGVuYWJsZU9uU2VsZWN0Pzogc3RyaW5nLFxuXHRcdGFubm90YXRpb25UYXJnZXRFbnRpdHlUeXBlPzogRW50aXR5VHlwZSxcblx0XHRmb3JDb250ZXh0TWVudT86IGJvb2xlYW4sXG5cdFx0aXNDb3B5PzogYm9vbGVhblxuXHQpOiBzdHJpbmcgfCBib29sZWFuIHtcblx0XHRpZiAoIWFubm90YXRpb25UYXJnZXRFbnRpdHlUeXBlKSByZXR1cm4gZmFsc2U7XG5cblx0XHRjb25zdCBpc1N0YXRpY0FjdGlvbiA9IHRoaXMuX2lzU3RhdGljQWN0aW9uKGFjdGlvbk9iamVjdCwgYWN0aW9uTmFtZSk7XG5cblx0XHQvLyBDaGVjayBmb3IgYWN0aW9uIG92ZXJsb2FkIG9uIGEgZGlmZmVyZW50IEVudGl0eSB0eXBlLlxuXHRcdC8vIElmIHllcywgdGFibGUgcm93IHNlbGVjdGlvbiBpcyBub3QgcmVxdWlyZWQgdG8gZW5hYmxlIHRoaXMgYWN0aW9uLlxuXHRcdGlmICh0aGlzLl9pc0FjdGlvbk92ZXJsb2FkT25EaWZmZXJlbnRUeXBlKGFjdGlvbk5hbWUudG9TdHJpbmcoKSwgYW5ub3RhdGlvblRhcmdldEVudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lKSkge1xuXHRcdFx0Ly8gQWN0aW9uIG92ZXJsb2FkIGRlZmluZWQgb24gZGlmZmVyZW50IGVudGl0eSB0eXBlXG5cdFx0XHRjb25zdCBvT3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gdGFibGVEZWZpbml0aW9uICYmIEpTT04ucGFyc2UodGFibGVEZWZpbml0aW9uLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCk7XG5cdFx0XHRpZiAob09wZXJhdGlvbkF2YWlsYWJsZU1hcD8uaGFzT3duUHJvcGVydHkoYWN0aW9uTmFtZSkpIHtcblx0XHRcdFx0Ly8gQ29yZS5PcGVyYXRpb25BdmFpbGFibGUgYW5ub3RhdGlvbiBkZWZpbmVkIGZvciB0aGUgYWN0aW9uLlxuXHRcdFx0XHQvLyBOZWVkIHRvIHJlZmVyIHRvIGludGVybmFsIG1vZGVsIGZvciBlbmFibGVkIHByb3BlcnR5IG9mIHRoZSBkeW5hbWljIGFjdGlvbi5cblx0XHRcdFx0Ly8gcmV0dXJuIGNvbXBpbGVCaW5kaW5nKGJpbmRpbmdFeHByZXNzaW9uKFwiZHluYW1pY0FjdGlvbnMvXCIgKyBzQWN0aW9uTmFtZSArIFwiL2JFbmFibGVkXCIsIFwiaW50ZXJuYWxcIiksIHRydWUpO1xuXHRcdFx0XHRyZXR1cm4gIWZvckNvbnRleHRNZW51XG5cdFx0XHRcdFx0PyBgez0gXFwke2ludGVybmFsPmR5bmFtaWNBY3Rpb25zLyR7YWN0aW9uTmFtZX0vYkVuYWJsZWR9IH1gXG5cdFx0XHRcdFx0OiBgez0gXFwke2ludGVybmFsPmR5bmFtaWNBY3Rpb25zLyR7YWN0aW9uTmFtZX0vYkVuYWJsZWRGb3JDb250ZXh0TWVudX0gfWA7XG5cdFx0XHR9XG5cdFx0XHQvLyBDb25zaWRlciB0aGUgYWN0aW9uIGp1c3QgbGlrZSBhbnkgb3RoZXIgc3RhdGljIERhdGFGaWVsZEZvckFjdGlvbi5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRpZiAoIWlzQm91bmQgfHwgaXNTdGF0aWNBY3Rpb24pIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRjb25zdCBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPSBpc0NvcHlcblx0XHRcdD8gQWN0aW9uSGVscGVyLmdldE51bWJlck9mQ29udGV4dHNFeHByZXNzaW9uKFwic2luZ2xlXCIsIGZvckNvbnRleHRNZW51KVxuXHRcdFx0OiBBY3Rpb25IZWxwZXIuZ2V0TnVtYmVyT2ZDb250ZXh0c0V4cHJlc3Npb24oZW5hYmxlT25TZWxlY3QgPz8gXCJtdWx0aXNlbGVjdFwiLCBmb3JDb250ZXh0TWVudSk7XG5cblx0XHRsZXQgZGF0YUZpZWxkRm9yQWN0aW9uRW5hYmxlZEV4cHJlc3Npb24gPSBcIlwiO1xuXG5cdFx0Y29uc3QgYWN0aW9uID0gIWZvckNvbnRleHRNZW51XG5cdFx0XHQ/IGBcXCR7aW50ZXJuYWw+ZHluYW1pY0FjdGlvbnMvJHthY3Rpb25OYW1lfS9iRW5hYmxlZH1gXG5cdFx0XHQ6IGBcXCR7aW50ZXJuYWw+ZHluYW1pY0FjdGlvbnMvJHthY3Rpb25OYW1lfS9iRW5hYmxlZEZvckNvbnRleHRNZW51fWA7XG5cdFx0ZGF0YUZpZWxkRm9yQWN0aW9uRW5hYmxlZEV4cHJlc3Npb24gPSBgJHtudW1iZXJPZlNlbGVjdGVkQ29udGV4dHN9ICYmICR7YWN0aW9ufWA7XG5cblx0XHRyZXR1cm4gYHs9ICR7ZGF0YUZpZWxkRm9yQWN0aW9uRW5hYmxlZEV4cHJlc3Npb259fWA7XG5cdH0sXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZGV0ZXJtaW5lIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yICdlbmFibGVkJyBwcm9wZXJ0eSBvZiBEYXRhRmllbGRGb3JJQk4gYWN0aW9ucy5cblx0ICogQHBhcmFtIHRhYmxlUHJvcGVydGllcyBUaGUgcHJvcGVydGllcyBvZiB0aGUgdGFibGUgY29udHJvbFxuXHQgKiBAcGFyYW0gdGFibGVQcm9wZXJ0aWVzLmNvbGxlY3Rpb24gIFRoZSBjb2xsZWN0aW9uIGNvbnRleHQgdG8gYmUgdXNlZFxuXHQgKiBAcGFyYW0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbiBUaGUgdGFibGUgZGVmaW5pdGlvbiBmcm9tIHRoZSB0YWJsZSBjb252ZXJ0ZXJcblx0ICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgdmFsdWUgb2YgdGhlIGRhdGEgZmllbGRcblx0ICogQHBhcmFtIHJlcXVpcmVzQ29udGV4dCBSZXF1aXJlc0NvbnRleHQgZm9yIElCTlxuXHQgKiBAcGFyYW0gaXNOYXZpZ2F0aW9uQXZhaWxhYmxlIERlZmluZSBpZiB0aGUgbmF2aWdhdGlvbiBpcyBhdmFpbGFibGVcblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqIEByZXR1cm5zIEEgYmluZGluZyBleHByZXNzaW9uIHRvIGRlZmluZSB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSBhY3Rpb25cblx0ICovXG5cdGlzRGF0YUZpZWxkRm9ySUJORW5hYmxlZDogZnVuY3Rpb24gKFxuXHRcdHRhYmxlUHJvcGVydGllczoge1xuXHRcdFx0Y29sbGVjdGlvbjogQ29udGV4dDtcblx0XHRcdHRhYmxlRGVmaW5pdGlvbjogVGFibGVWaXN1YWxpemF0aW9uO1xuXHRcdH0sXG5cdFx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdFx0cmVxdWlyZXNDb250ZXh0OiBib29sZWFuIHwgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8Qm9vbGVhbj4sXG5cdFx0aXNOYXZpZ2F0aW9uQXZhaWxhYmxlPzogYm9vbGVhbiB8IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPEJvb2xlYW4+LFxuXHRcdGZvckNvbnRleHRNZW51PzogYm9vbGVhblxuXHQpOiBzdHJpbmcgfCBib29sZWFuIHtcblx0XHRsZXQgaXNOYXZpZ2F0aW9uQXZhaWxhYmxlUGF0aCA9IG51bGw7XG5cdFx0aWYgKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKGlzTmF2aWdhdGlvbkF2YWlsYWJsZSkpIHtcblx0XHRcdGlzTmF2aWdhdGlvbkF2YWlsYWJsZVBhdGggPSBpc05hdmlnYXRpb25BdmFpbGFibGUucGF0aDtcblx0XHR9XG5cdFx0Y29uc3QgaXNBbmFseXRpY2FsVGFibGUgPSB0YWJsZVByb3BlcnRpZXM/LnRhYmxlRGVmaW5pdGlvbj8uZW5hYmxlQW5hbHl0aWNzO1xuXG5cdFx0aWYgKCFyZXF1aXJlc0NvbnRleHQpIHtcblx0XHRcdGNvbnN0IGVudGl0eVNldCA9IHRhYmxlUHJvcGVydGllcy5jb2xsZWN0aW9uLmdldFBhdGgoKTtcblx0XHRcdGNvbnN0IG1ldGFNb2RlbCA9IHRhYmxlUHJvcGVydGllcy5jb2xsZWN0aW9uLmdldE1vZGVsKCk7XG5cdFx0XHRpZiAoaXNOYXZpZ2F0aW9uQXZhaWxhYmxlID09PSBmYWxzZSAmJiAhaXNBbmFseXRpY2FsVGFibGUpIHtcblx0XHRcdFx0TG9nLndhcm5pbmcoXCJOYXZpZ2F0aW9uQXZhaWxhYmxlIGFzIGZhbHNlIGlzIGluY29ycmVjdCB1c2FnZVwiKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0aXNOYXZpZ2F0aW9uQXZhaWxhYmxlUGF0aCAmJlxuXHRcdFx0XHQhaXNBbmFseXRpY2FsVGFibGUgJiZcblx0XHRcdFx0aXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkPy5OYXZpZ2F0aW9uQXZhaWxhYmxlKSAmJlxuXHRcdFx0XHRtZXRhTW9kZWwuZ2V0T2JqZWN0KGVudGl0eVNldCArIFwiLyRQYXJ0bmVyXCIpID09PSBkYXRhRmllbGQuTmF2aWdhdGlvbkF2YWlsYWJsZS5wYXRoLnNwbGl0KFwiL1wiKVswXVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiBgez0gXFwkeyR7aXNOYXZpZ2F0aW9uQXZhaWxhYmxlUGF0aC5zdWJzdHJpbmcoXG5cdFx0XHRcdFx0aXNOYXZpZ2F0aW9uQXZhaWxhYmxlUGF0aC5pbmRleE9mKFwiL1wiKSArIDEsXG5cdFx0XHRcdFx0aXNOYXZpZ2F0aW9uQXZhaWxhYmxlUGF0aC5sZW5ndGhcblx0XHRcdFx0KX19fWA7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRsZXQgZGF0YUZpZWxkRm9ySUJORW5hYmxlZEV4cHJlc3Npb24gPSBcIlwiLFxuXHRcdFx0bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzLFxuXHRcdFx0YWN0aW9uO1xuXG5cdFx0aWYgKGlzTmF2aWdhdGlvbkF2YWlsYWJsZSA9PT0gdHJ1ZSB8fCBpc0FuYWx5dGljYWxUYWJsZSkge1xuXHRcdFx0ZGF0YUZpZWxkRm9ySUJORW5hYmxlZEV4cHJlc3Npb24gPSAhKGZvckNvbnRleHRNZW51ID8/IGZhbHNlKVxuXHRcdFx0XHQ/IFwiJXtpbnRlcm5hbD5udW1iZXJPZlNlbGVjdGVkQ29udGV4dHN9ID49IDFcIlxuXHRcdFx0XHQ6IFwiJXtpbnRlcm5hbD5jb250ZXh0bWVudS9udW1iZXJPZlNlbGVjdGVkQ29udGV4dHN9ID49IDFcIjtcblx0XHR9IGVsc2UgaWYgKGlzTmF2aWdhdGlvbkF2YWlsYWJsZSA9PT0gZmFsc2UpIHtcblx0XHRcdExvZy53YXJuaW5nKFwiTmF2aWdhdGlvbkF2YWlsYWJsZSBhcyBmYWxzZSBpcyBpbmNvcnJlY3QgdXNhZ2VcIik7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyA9ICEoZm9yQ29udGV4dE1lbnUgPz8gZmFsc2UpXG5cdFx0XHRcdD8gXCIle2ludGVybmFsPm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c30gPj0gMVwiXG5cdFx0XHRcdDogXCIle2ludGVybmFsPmNvbnRleHRtZW51L251bWJlck9mU2VsZWN0ZWRDb250ZXh0c30gPj0gMVwiO1xuXHRcdFx0YWN0aW9uID0gIShmb3JDb250ZXh0TWVudSA/PyBmYWxzZSlcblx0XHRcdFx0PyBgXFwke2ludGVybmFsPmlibi8ke2RhdGFGaWVsZC5TZW1hbnRpY09iamVjdH0tJHtkYXRhRmllbGQuQWN0aW9ufS9iRW5hYmxlZH1gXG5cdFx0XHRcdDogYFxcJHtpbnRlcm5hbD5pYm4vJHtkYXRhRmllbGQuU2VtYW50aWNPYmplY3R9LSR7ZGF0YUZpZWxkLkFjdGlvbn0vYkVuYWJsZWRGb3JDb250ZXh0TWVudX1gO1xuXHRcdFx0ZGF0YUZpZWxkRm9ySUJORW5hYmxlZEV4cHJlc3Npb24gPSBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgKyBcIiAmJiBcIiArIGFjdGlvbjtcblx0XHR9XG5cblx0XHRyZXR1cm4gYHs9ICR7ZGF0YUZpZWxkRm9ySUJORW5hYmxlZEV4cHJlc3Npb259fWA7XG5cdH0sXG5cblx0YnVpbGRFeHByZXNzaW9uRm9yTXVsdGlWYWx1ZUZpZWxkUmVhZE9ubHk6IGZ1bmN0aW9uICh0YWJsZTogVGFibGVCbG9jayk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdG9yKHRhYmxlLnJlYWRPbmx5ID09PSB0cnVlLCBhbmQoVUkuSXNJbmFjdGl2ZSwgdGFibGUuY3JlYXRpb25Nb2RlLm5hbWUgPT09IFwiSW5saW5lQ3JlYXRpb25Sb3dzXCIpKSxcblx0XHRcdFx0Y29uc3RhbnQodHJ1ZSksXG5cdFx0XHRcdGVxdWFsKHRhYmxlLmZpZWxkTW9kZSwgXCJub3dyYXBwZXJcIilcblx0XHRcdClcblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gc2V0IHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBsYWJlbCBmb3IgdGhlIGNvbHVtbiBoZWFkZXIuXG5cdCAqIEBwYXJhbSBkYXRhZmllbGQgRGF0YUZpZWxkXG5cdCAqIEBwYXJhbSBkYXRhRmllbGRDb2xsZWN0aW9uIExpc3Qgb2YgaXRlbXMgaW5zaWRlIGEgZmllbGRncm91cCAoaWYgYW55KVxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGhlYWRlciBsYWJlbCBuZWVkcyB0byBiZSB2aXNpYmxlIGVsc2UgZmFsc2UuXG5cdCAqL1xuXHRzZXRIZWFkZXJMYWJlbFZpc2liaWxpdHk6IGZ1bmN0aW9uIChcblx0XHRkYXRhZmllbGQ6IE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uPixcblx0XHRkYXRhRmllbGRDb2xsZWN0aW9uPzogTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24+W11cblx0KTogYm9vbGVhbiB7XG5cdFx0Ly8gSWYgSW5saW5lIGJ1dHRvbi9uYXZpZ2F0aW9uIGFjdGlvbiwgcmV0dXJuIGZhbHNlLCBlbHNlIHRydWU7XG5cdFx0aWYgKCFkYXRhRmllbGRDb2xsZWN0aW9uKSB7XG5cdFx0XHRpZiAoZGF0YWZpZWxkLiRUeXBlPy5pbmNsdWRlcyhcIkRhdGFGaWVsZEZvckFjdGlvblwiKSAmJiBkYXRhZmllbGQuSW5saW5lKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdGlmIChkYXRhZmllbGQuJFR5cGU/LmluY2x1ZGVzKFwiRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXCIpICYmIGRhdGFmaWVsZC5JbmxpbmUpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gSW4gRmllbGRncm91cCwgSWYgTk9UIGFsbCBkYXRhZmllbGQvZGF0YWZpZWxkRm9yQW5ub3RhdGlvbiBleGlzdHMgd2l0aCBoaWRkZW4sIHJldHVybiB0cnVlO1xuXHRcdHJldHVybiBkYXRhRmllbGRDb2xsZWN0aW9uLnNvbWUoZnVuY3Rpb24gKG9EQykge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQob0RDLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQgfHwgb0RDLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uKSAmJlxuXHRcdFx0XHQob0RDIGFzIHVua25vd24gYXMgSGlkZGVuKVtgQCR7VUlBbm5vdGF0aW9uVGVybXMuSGlkZGVufWBdICE9PSB0cnVlXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBnZXQgdGhlIHRleHQgZnJvbSB0aGUgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiBpbnRvIHRoZSBjb2x1bW4uXG5cdCAqIEBwYXJhbSBvRGF0YUZpZWxkIERhdGFQb2ludCdzIFZhbHVlXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IG9iamVjdCBvZiB0aGUgTGluZUl0ZW1cblx0ICogQHBhcmFtIG9Db250ZXh0LmNvbnRleHQgQ29udGV4dCBvYmplY3Qgb2YgdGhlIExpbmVJdGVtXG5cdCAqIEByZXR1cm5zIFN0cmluZyBmcm9tIGxhYmVsIHJlZmVycmluZyB0byBhY3Rpb24gdGV4dFxuXHQgKi9cblx0Z2V0VGV4dE9uQWN0aW9uRmllbGQ6IGZ1bmN0aW9uIChcblx0XHRvRGF0YUZpZWxkOiBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+LFxuXHRcdG9Db250ZXh0OiB7IGNvbnRleHQ6IEJhc2VDb250ZXh0IH1cblx0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoXG5cdFx0XHRvRGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24gfHxcblx0XHRcdG9EYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIG9EYXRhRmllbGQuTGFiZWw7XG5cdFx0fVxuXHRcdC8vIGZvciBGaWVsZEdyb3VwIGNvbnRhaW5pbmcgRGF0YUZpZWxkRm9yQW5ub3RhdGlvblxuXHRcdGlmIChcblx0XHRcdG9EYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiZcblx0XHRcdG9Db250ZXh0LmNvbnRleHQuZ2V0T2JqZWN0KFwiVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aFwiKS5pbmRleE9mKFwiQFwiICsgVUlBbm5vdGF0aW9uVGVybXMuRmllbGRHcm91cCkgPiAtMVxuXHRcdCkge1xuXHRcdFx0Y29uc3Qgc1BhdGhEYXRhRmllbGRzID0gXCJUYXJnZXQvJEFubm90YXRpb25QYXRoL0RhdGEvXCI7XG5cdFx0XHRjb25zdCBhTXVsdGlwbGVMYWJlbHM6IHN0cmluZ1tdID0gW107XG5cdFx0XHRmb3IgKGNvbnN0IGkgaW4gb0NvbnRleHQuY29udGV4dC5nZXRPYmplY3Qoc1BhdGhEYXRhRmllbGRzKSkge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0b0NvbnRleHQuY29udGV4dC5nZXRPYmplY3QoYCR7c1BhdGhEYXRhRmllbGRzICsgaX0vJFR5cGVgKSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uIHx8XG5cdFx0XHRcdFx0b0NvbnRleHQuY29udGV4dC5nZXRPYmplY3QoYCR7c1BhdGhEYXRhRmllbGRzICsgaX0vJFR5cGVgKSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGFNdWx0aXBsZUxhYmVscy5wdXNoKG9Db250ZXh0LmNvbnRleHQuZ2V0T2JqZWN0KGAke3NQYXRoRGF0YUZpZWxkcyArIGl9L0xhYmVsYCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBJbiBjYXNlIHRoZXJlIGFyZSBtdWx0aXBsZSBhY3Rpb25zIGluc2lkZSBhIEZpZWxkIEdyb3VwIHNlbGVjdCB0aGUgbGFyZ2VzdCBBY3Rpb24gTGFiZWxcblx0XHRcdGlmIChhTXVsdGlwbGVMYWJlbHMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRyZXR1cm4gYU11bHRpcGxlTGFiZWxzLnJlZHVjZShmdW5jdGlvbiAoYTogc3RyaW5nLCBiOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRyZXR1cm4gYS5sZW5ndGggPiBiLmxlbmd0aCA/IGEgOiBiO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBhTXVsdGlwbGVMYWJlbHMubGVuZ3RoID09PSAwID8gdW5kZWZpbmVkIDogYU11bHRpcGxlTGFiZWxzLnRvU3RyaW5nKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH0sXG5cdF9nZXRSZXNwb25zaXZlVGFibGVDb2x1bW5TZXR0aW5nczogZnVuY3Rpb24gKG9UaGlzOiBDb2x1bW5XaWR0aFRoaXMsIG9Db2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbik6IFRhYmxlQ29sdW1uU2V0dGluZ3MgfCB1bmRlZmluZWQge1xuXHRcdGlmIChvVGhpcy50YWJsZVR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIpIHtcblx0XHRcdHJldHVybiBvQ29sdW1uLnNldHRpbmdzO1xuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9LFxuXG5cdGdldENoYXJ0U2l6ZTogZnVuY3Rpb24gKG9UaGlzOiBDb2x1bW5XaWR0aFRoaXMsIG9Db2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbik6IHN0cmluZyB7XG5cdFx0Y29uc3Qgc2V0dGluZ3MgPSB0aGlzLl9nZXRSZXNwb25zaXZlVGFibGVDb2x1bW5TZXR0aW5ncyhvVGhpcywgb0NvbHVtbik7XG5cdFx0aWYgKHNldHRpbmdzICYmIHNldHRpbmdzLm1pY3JvQ2hhcnRTaXplKSB7XG5cdFx0XHRyZXR1cm4gc2V0dGluZ3MubWljcm9DaGFydFNpemU7XG5cdFx0fVxuXHRcdHJldHVybiBcIlhTXCI7XG5cdH0sXG5cdGdldFNob3dPbmx5Q2hhcnQ6IGZ1bmN0aW9uIChvVGhpczogQ29sdW1uV2lkdGhUaGlzLCBvQ29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4pOiBib29sZWFuIHtcblx0XHRjb25zdCBzZXR0aW5ncyA9IHRoaXMuX2dldFJlc3BvbnNpdmVUYWJsZUNvbHVtblNldHRpbmdzKG9UaGlzLCBvQ29sdW1uKTtcblx0XHRpZiAoc2V0dGluZ3MgJiYgc2V0dGluZ3Muc2hvd01pY3JvQ2hhcnRMYWJlbCkge1xuXHRcdFx0cmV0dXJuICFzZXR0aW5ncy5zaG93TWljcm9DaGFydExhYmVsO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHRnZXREZWxlZ2F0ZTogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZVZpc3VhbGl6YXRpb24sIGlzQUxQOiBib29sZWFuLCBlbnRpdHlOYW1lOiBzdHJpbmcsIGZpbHRlck9uQWN0aXZlRW50aXRpZXM6IGJvb2xlYW4pOiBzdHJpbmcge1xuXHRcdGxldCBkZWxlZ2F0ZToge1xuXHRcdFx0bmFtZTogc3RyaW5nO1xuXHRcdFx0cGF5bG9hZD86XG5cdFx0XHRcdHwgeyBjb2xsZWN0aW9uTmFtZT86IHN0cmluZzsgZmlsdGVyT25BY3RpdmVFbnRpdGllcz86IGJvb2xlYW47IGFnZ3JlZ2F0aW9uQ29uZmlndXJhdGlvbj86IHsgbGVhZkxldmVsOiBib29sZWFuIH0gfVxuXHRcdFx0XHR8IHtcblx0XHRcdFx0XHRcdGhpZXJhcmNoeVF1YWxpZmllcjogc3RyaW5nO1xuXHRcdFx0XHRcdFx0aW5pdGlhbEV4cGFuc2lvbkxldmVsPzogbnVtYmVyO1xuXHRcdFx0XHRcdFx0ZmlsdGVyT25BY3RpdmVFbnRpdGllczogYm9vbGVhbjtcblx0XHRcdFx0XHRcdGNyZWF0ZUluUGxhY2U/OiBib29sZWFuO1xuXHRcdFx0XHRcdFx0YWdncmVnYXRpb25Db25maWd1cmF0aW9uPzogeyBsZWFmTGV2ZWw6IGJvb2xlYW4gfTtcblx0XHRcdFx0ICB9O1xuXHRcdH07XG5cdFx0aWYgKGlzQUxQKSB7XG5cdFx0XHQvLyBXZSBkb24ndCBzdXBwb3J0IFRyZWVUYWJsZSBpbiBBTFBcblx0XHRcdGlmICh0YWJsZS5jb250cm9sLnR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVHJlZVRhYmxlIG5vdCBzdXBwb3J0ZWQgaW4gQW5hbHl0aWNhbCBMaXN0UGFnZVwiKTtcblx0XHRcdH1cblx0XHRcdGRlbGVnYXRlID0ge1xuXHRcdFx0XHRuYW1lOiBcInNhcC9mZS9tYWNyb3MvdGFibGUvZGVsZWdhdGVzL0FMUFRhYmxlRGVsZWdhdGVcIixcblx0XHRcdFx0cGF5bG9hZDoge1xuXHRcdFx0XHRcdGNvbGxlY3Rpb25OYW1lOiBlbnRpdHlOYW1lXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRpZiAodGFibGUuZW5hYmxlQW5hbHl0aWNzICYmIGZpbHRlck9uQWN0aXZlRW50aXRpZXMpIHtcblx0XHRcdFx0ZGVsZWdhdGUucGF5bG9hZCEuZmlsdGVyT25BY3RpdmVFbnRpdGllcyA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0YWJsZS5jb250cm9sLnR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRcdGlmICghdGFibGUuY29udHJvbC5oaWVyYXJjaHlRdWFsaWZpZXIpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiQSBoaWVyYXJjaHkgcXVhbGlmaWVyIGlzIG1hbmRhdG9yeSB3aXRoIGEgVHJlZVRhYmxlXCIpO1xuXHRcdFx0fVxuXHRcdFx0ZGVsZWdhdGUgPSB7XG5cdFx0XHRcdG5hbWU6IFwic2FwL2ZlL21hY3Jvcy90YWJsZS9kZWxlZ2F0ZXMvVHJlZVRhYmxlRGVsZWdhdGVcIixcblx0XHRcdFx0cGF5bG9hZDoge1xuXHRcdFx0XHRcdGhpZXJhcmNoeVF1YWxpZmllcjogdGFibGUuY29udHJvbC5oaWVyYXJjaHlRdWFsaWZpZXIsXG5cdFx0XHRcdFx0aW5pdGlhbEV4cGFuc2lvbkxldmVsOiB0YWJsZS5hbm5vdGF0aW9uLmluaXRpYWxFeHBhbnNpb25MZXZlbCxcblx0XHRcdFx0XHRmaWx0ZXJPbkFjdGl2ZUVudGl0aWVzLFxuXHRcdFx0XHRcdGNyZWF0ZUluUGxhY2U6IHRhYmxlLmNvbnRyb2wuY3JlYXRlSW5QbGFjZSA9PT0gdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkZWxlZ2F0ZSA9IHtcblx0XHRcdFx0bmFtZTogXCJzYXAvZmUvbWFjcm9zL3RhYmxlL2RlbGVnYXRlcy9UYWJsZURlbGVnYXRlXCJcblx0XHRcdH07XG5cdFx0XHRpZiAodGFibGUuZW5hYmxlQW5hbHl0aWNzICYmIGZpbHRlck9uQWN0aXZlRW50aXRpZXMpIHtcblx0XHRcdFx0ZGVsZWdhdGUucGF5bG9hZCA9IHtcblx0XHRcdFx0XHRmaWx0ZXJPbkFjdGl2ZUVudGl0aWVzXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRhYmxlLmVuYWJsZUFuYWx5dGljcyA9PT0gdHJ1ZSAmJiB0YWJsZS5jb250cm9sLmFuYWx5dGljYWxDb25maWd1cmF0aW9uPy5hZ2dyZWdhdGlvbk9uTGVhZkxldmVsID09PSB0cnVlKSB7XG5cdFx0XHRkZWxlZ2F0ZS5wYXlsb2FkID0geyAuLi5kZWxlZ2F0ZS5wYXlsb2FkLCAuLi57IGFnZ3JlZ2F0aW9uQ29uZmlndXJhdGlvbjogeyBsZWFmTGV2ZWw6IHRydWUgfSB9IH07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KGRlbGVnYXRlKTtcblx0fSxcblxuXHQvKipcblx0ICogQHBhcmFtIG9GYXN0Q3JlYXRpb25Sb3dcblx0ICogQHBhcmFtIHNQYXRoXG5cdCAqIEBwYXJhbSBvQ29udGV4dFxuXHQgKiBAcGFyYW0gb01vZGVsXG5cdCAqIEBwYXJhbSBvRmluYWxVSVN0YXRlXG5cdCAqL1xuXHRlbmFibGVGYXN0Q3JlYXRpb25Sb3c6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHRvRmFzdENyZWF0aW9uUm93OiBDcmVhdGlvblJvdyB8IHVuZGVmaW5lZCxcblx0XHRzUGF0aDogc3RyaW5nLFxuXHRcdG9Db250ZXh0OiB2NENvbnRleHQsXG5cdFx0b01vZGVsOiBPRGF0YU1vZGVsLFxuXHRcdG9GaW5hbFVJU3RhdGU6IFByb21pc2U8dW5rbm93bj5cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0bGV0IG9GYXN0Q3JlYXRpb25MaXN0QmluZGluZywgb0Zhc3RDcmVhdGlvbkNvbnRleHQ7XG5cblx0XHRpZiAob0Zhc3RDcmVhdGlvblJvdykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXdhaXQgb0ZpbmFsVUlTdGF0ZTtcblx0XHRcdFx0Ly8gSWYgYSBkcmFmdCBpcyBkaXNjYXJkZWQgd2hpbGUgYSBtZXNzYWdlIHN0cmlwIGZpbHRlciBpcyBhY3RpdmUgb24gdGhlIHRhYmxlIHRoZXJlIGlzIGEgdGFibGUgcmViaW5kIGNhdXNlZCBieSB0aGUgRGF0YVN0YXRlSW5kaWNhdG9yXG5cdFx0XHRcdC8vIFRvIHByZXZlbnQgYSBuZXcgY3JlYXRpb24gcm93IGJpbmRpbmcgYmVpbmcgY3JlYXRlZCBhdCB0aGF0IG1vbWVudCB3ZSBjaGVjayBpZiB0aGUgY29udGV4dCBpcyBhbHJlYWR5IGRlbGV0ZWRcblx0XHRcdFx0aWYgKENvbW1vblV0aWxzLmdldElzRWRpdGFibGUob0Zhc3RDcmVhdGlvblJvdykgJiYgIW9Db250ZXh0LmlzRGVsZXRlZCgpKSB7XG5cdFx0XHRcdFx0b0Zhc3RDcmVhdGlvbkxpc3RCaW5kaW5nID0gb01vZGVsLmJpbmRMaXN0KHNQYXRoLCBvQ29udGV4dCwgW10sIFtdLCB7XG5cdFx0XHRcdFx0XHQkJHVwZGF0ZUdyb3VwSWQ6IFwiZG9Ob3RTdWJtaXRcIixcblx0XHRcdFx0XHRcdCQkZ3JvdXBJZDogXCJkb05vdFN1Ym1pdFwiXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0Ly8gV29ya2Fyb3VuZCBzdWdnZXN0ZWQgYnkgT0RhdGEgbW9kZWwgdjQgY29sbGVhZ3Vlc1xuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHRcdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRcdFx0b0Zhc3RDcmVhdGlvbkxpc3RCaW5kaW5nLnJlZnJlc2hJbnRlcm5hbCA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRcdC8qIGRvIG5vdGhpbmcgKi9cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdG9GYXN0Q3JlYXRpb25Db250ZXh0ID0gb0Zhc3RDcmVhdGlvbkxpc3RCaW5kaW5nLmNyZWF0ZSgpO1xuXHRcdFx0XHRcdG9GYXN0Q3JlYXRpb25Sb3cuc2V0QmluZGluZ0NvbnRleHQob0Zhc3RDcmVhdGlvbkNvbnRleHQpO1xuXG5cdFx0XHRcdFx0Ly8gdGhpcyBpcyBuZWVkZWQgdG8gYXZvaWQgY29uc29sZSBlcnJvclxuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRhd2FpdCBvRmFzdENyZWF0aW9uQ29udGV4dC5jcmVhdGVkKCk7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0TG9nLnRyYWNlKFwidHJhbnNpZW50IGZhc3QgY3JlYXRpb24gY29udGV4dCBkZWxldGVkXCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAob0Vycm9yKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGNvbXB1dGluZyB0aGUgZmluYWwgVUkgc3RhdGVcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBFdmFsdWF0ZXMsIGlmIGFjdGlvbiBzaG91bGQgYmUgc2hvd24gaW4gdGhlIHRhYmxlIGNvbnRleHQgbWVudS5cblx0ICogU2hvdyBhY3Rpb24gb25seSBmb3IgYm91bmQgYWN0aW9ucywgd2hlbiByZXF1aXJlc1NlbGVjdGlvbiBpcyBzZXQgZm9yIGN1c3RvbSBhY3Rpb25zIG9yIHdoZW4gY29udGV4dCBpcyByZXF1aXJlZCBmb3IgSUJOIGFjdGlvbnMuXG5cdCAqIEBwYXJhbSBhY3Rpb24gVGhlIGluc3RhbmNlIG9mIHRoZSBhY3Rpb25cblx0ICogQHBhcmFtIGNvbnRleHRPYmplY3RQYXRoIFRoZSBkYXRhIG1vZGVsIG9iamVjdCBwYXRoXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSwgaWYgYWN0aW9uIHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gY29udGV4dCBtZW51LCBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdGlzQWN0aW9uU2hvd25JbkNvbnRleHRNZW51OiBmdW5jdGlvbiAoXG5cdFx0YWN0aW9uOiBCYXNlQWN0aW9uIHwgQW5ub3RhdGlvbkFjdGlvbiB8IEN1c3RvbUFjdGlvbixcblx0XHRjb250ZXh0T2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPlxuXHQpOiBib29sZWFuIHtcblx0XHRjb25zdCBkYXRhRmllbGQgPSBhY3Rpb24uYW5ub3RhdGlvblBhdGhcblx0XHRcdD8gKGNvbnRleHRPYmplY3RQYXRoLmNvbnZlcnRlZFR5cGVzLnJlc29sdmVQYXRoKGFjdGlvbi5hbm5vdGF0aW9uUGF0aCkudGFyZ2V0IGFzXG5cdFx0XHRcdFx0fCBEYXRhRmllbGRGb3JBY3Rpb25cblx0XHRcdFx0XHR8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbilcblx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdHN3aXRjaCAoZGF0YUZpZWxkPy4kVHlwZSkge1xuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFjdGlvblwiOiB7XG5cdFx0XHRcdGNvbnN0IGFjdGlvblRhcmdldCA9IGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQ7XG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0YWN0aW9uVGFyZ2V0Py5pc0JvdW5kID09PSB0cnVlICYmXG5cdFx0XHRcdFx0IWFjdGlvblRhcmdldC5wYXJhbWV0ZXJzWzBdLmlzQ29sbGVjdGlvbiAmJlxuXHRcdFx0XHRcdGFjdGlvblRhcmdldC5zb3VyY2VFbnRpdHlUeXBlID09PSBjb250ZXh0T2JqZWN0UGF0aC50YXJnZXRFbnRpdHlUeXBlXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXCI6XG5cdFx0XHRcdHJldHVybiBkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0Py52YWx1ZU9mKCkgPT09IHRydWU7XG5cblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGlmIChhY3Rpb24udHlwZSA9PT0gXCJEZWZhdWx0XCIpIHtcblx0XHRcdFx0XHRyZXR1cm4gKGFjdGlvbiBhcyBDdXN0b21BY3Rpb24pLnJlcXVpcmVzU2VsZWN0aW9uID09PSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbihUYWJsZUhlbHBlci5nZXROYXZpZ2F0aW9uQXZhaWxhYmxlTWFwIGFzIHsgcmVxdWlyZXNJQ29udGV4dD86IGJvb2xlYW4gfSkucmVxdWlyZXNJQ29udGV4dCA9IHRydWU7XG4oVGFibGVIZWxwZXIuZ2V0VGV4dE9uQWN0aW9uRmllbGQgYXMgeyByZXF1aXJlc0lDb250ZXh0PzogYm9vbGVhbiB9KS5yZXF1aXJlc0lDb250ZXh0ID0gdHJ1ZTtcblxuZXhwb3J0IGRlZmF1bHQgVGFibGVIZWxwZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF5REE7QUFDQTtBQUNBO0FBQ0E7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
@@ -58,7 +58,6 @@ type MicroChartInfo = { title: string; description: string };
58
58
  /**
59
59
  * Helper class used by the control library for OData-specific handling (OData V4)
60
60
  * @private
61
- * @experimental This module is only for internal/experimental use!
62
61
  */
63
62
  const TableHelper = {
64
63
  /**
@@ -162,7 +161,7 @@ const TableHelper = {
162
161
  return undefined;
163
162
  }
164
163
  const propertyBindings = properties?.map((prop) => pathInModel(prop)) ?? [];
165
- return compileExpression(formatResult(propertyBindings, "sap.fe.core.formatters.StandardFormatter#loadProperties"));
164
+ return compileExpression(formatResult(propertyBindings, "._formatters.StandardFormatter#loadProperties"));
166
165
  },
167
166
  /**
168
167
  * Method to get column's width if defined from manifest or from customization via annotations.